Revert "Imported Upstream version 7.53.1" 51/120551/1
authortaesub kim <taesub.kim@samsung.com>
Thu, 23 Mar 2017 07:38:33 +0000 (00:38 -0700)
committertaesub kim <taesub.kim@samsung.com>
Thu, 23 Mar 2017 07:38:33 +0000 (00:38 -0700)
This reverts commit e9bdad71c8277e20607fa1eaf0027d53a0dc1f37.

Change-Id: I4a4edd3ce2207a6f13162aaaf92467a7c1dffd72

1570 files changed:
CHANGES
CMake/CurlSymbolHiding.cmake [deleted file]
CMake/CurlTests.c
CMake/FindCARES.cmake [deleted file]
CMake/FindLibSSH2.cmake [deleted file]
CMake/FindNGHTTP2.cmake [deleted file]
CMake/OtherTests.cmake
CMakeLists.txt
COPYING
Makefile
Makefile.am
Makefile.in
RELEASE-NOTES
acinclude.m4
config.guess
config.sub
configure
configure.ac
docs/BINDINGS [new file with mode: 0644]
docs/BINDINGS.md [deleted file]
docs/BUGS
docs/CHECKSRC.md
docs/CODE_STYLE.md
docs/CONTRIBUTE.md
docs/FAQ
docs/HISTORY.md
docs/HTTP2.md
docs/INSTALL
docs/INSTALL.devcpp [new file with mode: 0644]
docs/INSTALL.md [deleted file]
docs/INTERNALS.md
docs/KNOWN_BUGS
docs/LICENSE-MIXING.md
docs/MAIL-ETIQUETTE
docs/Makefile.am
docs/Makefile.in
docs/README.netware
docs/README.win32
docs/RELEASE-PROCEDURE
docs/ROADMAP.md
docs/SECURITY.md
docs/THANKS
docs/TODO
docs/TheArtOfHttpScripting
docs/cmdline-opts/MANPAGE.md [deleted file]
docs/cmdline-opts/Makefile.am [deleted file]
docs/cmdline-opts/Makefile.in [deleted file]
docs/cmdline-opts/abstract-unix-socket.d [deleted file]
docs/cmdline-opts/anyauth.d [deleted file]
docs/cmdline-opts/append.d [deleted file]
docs/cmdline-opts/basic.d [deleted file]
docs/cmdline-opts/cacert.d [deleted file]
docs/cmdline-opts/capath.d [deleted file]
docs/cmdline-opts/cert-status.d [deleted file]
docs/cmdline-opts/cert-type.d [deleted file]
docs/cmdline-opts/cert.d [deleted file]
docs/cmdline-opts/ciphers.d [deleted file]
docs/cmdline-opts/compressed.d [deleted file]
docs/cmdline-opts/config.d [deleted file]
docs/cmdline-opts/connect-timeout.d [deleted file]
docs/cmdline-opts/connect-to.d [deleted file]
docs/cmdline-opts/continue-at.d [deleted file]
docs/cmdline-opts/cookie-jar.d [deleted file]
docs/cmdline-opts/cookie.d [deleted file]
docs/cmdline-opts/create-dirs.d [deleted file]
docs/cmdline-opts/crlf.d [deleted file]
docs/cmdline-opts/crlfile.d [deleted file]
docs/cmdline-opts/data-ascii.d [deleted file]
docs/cmdline-opts/data-binary.d [deleted file]
docs/cmdline-opts/data-raw.d [deleted file]
docs/cmdline-opts/data-urlencode.d [deleted file]
docs/cmdline-opts/data.d [deleted file]
docs/cmdline-opts/delegation.d [deleted file]
docs/cmdline-opts/digest.d [deleted file]
docs/cmdline-opts/disable-eprt.d [deleted file]
docs/cmdline-opts/disable-epsv.d [deleted file]
docs/cmdline-opts/disable.d [deleted file]
docs/cmdline-opts/dns-interface.d [deleted file]
docs/cmdline-opts/dns-ipv4-addr.d [deleted file]
docs/cmdline-opts/dns-ipv6-addr.d [deleted file]
docs/cmdline-opts/dns-servers.d [deleted file]
docs/cmdline-opts/dump-header.d [deleted file]
docs/cmdline-opts/egd-file.d [deleted file]
docs/cmdline-opts/engine.d [deleted file]
docs/cmdline-opts/environment.d [deleted file]
docs/cmdline-opts/expect100-timeout.d [deleted file]
docs/cmdline-opts/fail-early.d [deleted file]
docs/cmdline-opts/fail.d [deleted file]
docs/cmdline-opts/false-start.d [deleted file]
docs/cmdline-opts/form-string.d [deleted file]
docs/cmdline-opts/form.d [deleted file]
docs/cmdline-opts/ftp-account.d [deleted file]
docs/cmdline-opts/ftp-alternative-to-user.d [deleted file]
docs/cmdline-opts/ftp-create-dirs.d [deleted file]
docs/cmdline-opts/ftp-method.d [deleted file]
docs/cmdline-opts/ftp-pasv.d [deleted file]
docs/cmdline-opts/ftp-port.d [deleted file]
docs/cmdline-opts/ftp-pret.d [deleted file]
docs/cmdline-opts/ftp-skip-pasv-ip.d [deleted file]
docs/cmdline-opts/ftp-ssl-ccc-mode.d [deleted file]
docs/cmdline-opts/ftp-ssl-ccc.d [deleted file]
docs/cmdline-opts/ftp-ssl-control.d [deleted file]
docs/cmdline-opts/gen.pl [deleted file]
docs/cmdline-opts/get.d [deleted file]
docs/cmdline-opts/globoff.d [deleted file]
docs/cmdline-opts/head.d [deleted file]
docs/cmdline-opts/header.d [deleted file]
docs/cmdline-opts/help.d [deleted file]
docs/cmdline-opts/hostpubmd5.d [deleted file]
docs/cmdline-opts/http1.0.d [deleted file]
docs/cmdline-opts/http1.1.d [deleted file]
docs/cmdline-opts/http2-prior-knowledge.d [deleted file]
docs/cmdline-opts/http2.d [deleted file]
docs/cmdline-opts/ignore-content-length.d [deleted file]
docs/cmdline-opts/include.d [deleted file]
docs/cmdline-opts/insecure.d [deleted file]
docs/cmdline-opts/interface.d [deleted file]
docs/cmdline-opts/ipv4.d [deleted file]
docs/cmdline-opts/ipv6.d [deleted file]
docs/cmdline-opts/junk-session-cookies.d [deleted file]
docs/cmdline-opts/keepalive-time.d [deleted file]
docs/cmdline-opts/key-type.d [deleted file]
docs/cmdline-opts/key.d [deleted file]
docs/cmdline-opts/krb.d [deleted file]
docs/cmdline-opts/libcurl.d [deleted file]
docs/cmdline-opts/limit-rate.d [deleted file]
docs/cmdline-opts/list-only.d [deleted file]
docs/cmdline-opts/local-port.d [deleted file]
docs/cmdline-opts/location-trusted.d [deleted file]
docs/cmdline-opts/location.d [deleted file]
docs/cmdline-opts/login-options.d [deleted file]
docs/cmdline-opts/mail-auth.d [deleted file]
docs/cmdline-opts/mail-from.d [deleted file]
docs/cmdline-opts/mail-rcpt.d [deleted file]
docs/cmdline-opts/manual.d [deleted file]
docs/cmdline-opts/max-filesize.d [deleted file]
docs/cmdline-opts/max-redirs.d [deleted file]
docs/cmdline-opts/max-time.d [deleted file]
docs/cmdline-opts/metalink.d [deleted file]
docs/cmdline-opts/negotiate.d [deleted file]
docs/cmdline-opts/netrc-file.d [deleted file]
docs/cmdline-opts/netrc-optional.d [deleted file]
docs/cmdline-opts/netrc.d [deleted file]
docs/cmdline-opts/next.d [deleted file]
docs/cmdline-opts/no-alpn.d [deleted file]
docs/cmdline-opts/no-buffer.d [deleted file]
docs/cmdline-opts/no-keepalive.d [deleted file]
docs/cmdline-opts/no-npn.d [deleted file]
docs/cmdline-opts/no-sessionid.d [deleted file]
docs/cmdline-opts/noproxy.d [deleted file]
docs/cmdline-opts/ntlm-wb.d [deleted file]
docs/cmdline-opts/ntlm.d [deleted file]
docs/cmdline-opts/oauth2-bearer.d [deleted file]
docs/cmdline-opts/output.d [deleted file]
docs/cmdline-opts/page-footer [deleted file]
docs/cmdline-opts/page-header [deleted file]
docs/cmdline-opts/pass.d [deleted file]
docs/cmdline-opts/path-as-is.d [deleted file]
docs/cmdline-opts/pinnedpubkey.d [deleted file]
docs/cmdline-opts/post301.d [deleted file]
docs/cmdline-opts/post302.d [deleted file]
docs/cmdline-opts/post303.d [deleted file]
docs/cmdline-opts/preproxy.d [deleted file]
docs/cmdline-opts/progress-bar.d [deleted file]
docs/cmdline-opts/proto-default.d [deleted file]
docs/cmdline-opts/proto-redir.d [deleted file]
docs/cmdline-opts/proto.d [deleted file]
docs/cmdline-opts/proxy-anyauth.d [deleted file]
docs/cmdline-opts/proxy-basic.d [deleted file]
docs/cmdline-opts/proxy-cacert.d [deleted file]
docs/cmdline-opts/proxy-capath.d [deleted file]
docs/cmdline-opts/proxy-cert-type.d [deleted file]
docs/cmdline-opts/proxy-cert.d [deleted file]
docs/cmdline-opts/proxy-ciphers.d [deleted file]
docs/cmdline-opts/proxy-crlfile.d [deleted file]
docs/cmdline-opts/proxy-digest.d [deleted file]
docs/cmdline-opts/proxy-header.d [deleted file]
docs/cmdline-opts/proxy-insecure.d [deleted file]
docs/cmdline-opts/proxy-key-type.d [deleted file]
docs/cmdline-opts/proxy-key.d [deleted file]
docs/cmdline-opts/proxy-negotiate.d [deleted file]
docs/cmdline-opts/proxy-ntlm.d [deleted file]
docs/cmdline-opts/proxy-pass.d [deleted file]
docs/cmdline-opts/proxy-service-name.d [deleted file]
docs/cmdline-opts/proxy-ssl-allow-beast.d [deleted file]
docs/cmdline-opts/proxy-tlsauthtype.d [deleted file]
docs/cmdline-opts/proxy-tlspassword.d [deleted file]
docs/cmdline-opts/proxy-tlsuser.d [deleted file]
docs/cmdline-opts/proxy-tlsv1.d [deleted file]
docs/cmdline-opts/proxy-user.d [deleted file]
docs/cmdline-opts/proxy.d [deleted file]
docs/cmdline-opts/proxy1.0.d [deleted file]
docs/cmdline-opts/proxytunnel.d [deleted file]
docs/cmdline-opts/pubkey.d [deleted file]
docs/cmdline-opts/quote.d [deleted file]
docs/cmdline-opts/random-file.d [deleted file]
docs/cmdline-opts/range.d [deleted file]
docs/cmdline-opts/raw.d [deleted file]
docs/cmdline-opts/referer.d [deleted file]
docs/cmdline-opts/remote-header-name.d [deleted file]
docs/cmdline-opts/remote-name-all.d [deleted file]
docs/cmdline-opts/remote-name.d [deleted file]
docs/cmdline-opts/remote-time.d [deleted file]
docs/cmdline-opts/request.d [deleted file]
docs/cmdline-opts/resolve.d [deleted file]
docs/cmdline-opts/retry-connrefused.d [deleted file]
docs/cmdline-opts/retry-delay.d [deleted file]
docs/cmdline-opts/retry-max-time.d [deleted file]
docs/cmdline-opts/retry.d [deleted file]
docs/cmdline-opts/sasl-ir.d [deleted file]
docs/cmdline-opts/service-name.d [deleted file]
docs/cmdline-opts/show-error.d [deleted file]
docs/cmdline-opts/silent.d [deleted file]
docs/cmdline-opts/socks4.d [deleted file]
docs/cmdline-opts/socks4a.d [deleted file]
docs/cmdline-opts/socks5-gssapi-nec.d [deleted file]
docs/cmdline-opts/socks5-gssapi-service.d [deleted file]
docs/cmdline-opts/socks5-hostname.d [deleted file]
docs/cmdline-opts/socks5.d [deleted file]
docs/cmdline-opts/speed-limit.d [deleted file]
docs/cmdline-opts/speed-time.d [deleted file]
docs/cmdline-opts/ssl-allow-beast.d [deleted file]
docs/cmdline-opts/ssl-no-revoke.d [deleted file]
docs/cmdline-opts/ssl-reqd.d [deleted file]
docs/cmdline-opts/ssl.d [deleted file]
docs/cmdline-opts/sslv2.d [deleted file]
docs/cmdline-opts/sslv3.d [deleted file]
docs/cmdline-opts/stderr.d [deleted file]
docs/cmdline-opts/tcp-fastopen.d [deleted file]
docs/cmdline-opts/tcp-nodelay.d [deleted file]
docs/cmdline-opts/telnet-option.d [deleted file]
docs/cmdline-opts/tftp-blksize.d [deleted file]
docs/cmdline-opts/tftp-no-options.d [deleted file]
docs/cmdline-opts/time-cond.d [deleted file]
docs/cmdline-opts/tlsauthtype.d [deleted file]
docs/cmdline-opts/tlspassword.d [deleted file]
docs/cmdline-opts/tlsuser.d [deleted file]
docs/cmdline-opts/tlsv1.0.d [deleted file]
docs/cmdline-opts/tlsv1.1.d [deleted file]
docs/cmdline-opts/tlsv1.2.d [deleted file]
docs/cmdline-opts/tlsv1.3.d [deleted file]
docs/cmdline-opts/tlsv1.d [deleted file]
docs/cmdline-opts/tr-encoding.d [deleted file]
docs/cmdline-opts/trace-ascii.d [deleted file]
docs/cmdline-opts/trace-time.d [deleted file]
docs/cmdline-opts/trace.d [deleted file]
docs/cmdline-opts/unix-socket.d [deleted file]
docs/cmdline-opts/upload-file.d [deleted file]
docs/cmdline-opts/url.d [deleted file]
docs/cmdline-opts/use-ascii.d [deleted file]
docs/cmdline-opts/user-agent.d [deleted file]
docs/cmdline-opts/user.d [deleted file]
docs/cmdline-opts/verbose.d [deleted file]
docs/cmdline-opts/version.d [deleted file]
docs/cmdline-opts/write-out.d [deleted file]
docs/cmdline-opts/xattr.d [deleted file]
docs/curl-config.html [new file with mode: 0644]
docs/curl-config.pdf [new file with mode: 0644]
docs/curl.1
docs/curl.html [new file with mode: 0644]
docs/curl.pdf [new file with mode: 0644]
docs/examples/10-at-a-time.c
docs/examples/Makefile.netware
docs/examples/anyauthput.c
docs/examples/asiohiper.cpp
docs/examples/cacertinmem.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/ftpupload.c
docs/examples/ftpuploadresume.c
docs/examples/ghiper.c
docs/examples/hiperfifo.c
docs/examples/htmltitle.cpp
docs/examples/http2-download.c
docs/examples/http2-serverpush.c
docs/examples/http2-upload.c
docs/examples/imap-append.c
docs/examples/multi-app.c
docs/examples/multi-debugcallback.c
docs/examples/multi-post.c
docs/examples/multi-uv.c
docs/examples/multithread.c
docs/examples/opensslthreadlock.c
docs/examples/postit2.c
docs/examples/rtsp.c
docs/examples/sendrecv.c
docs/examples/sessioninfo.c
docs/examples/smooth-gtk-thread.c
docs/examples/synctime.c
docs/examples/usercertinmem.c
docs/index.html [new file with mode: 0644]
docs/libcurl/Makefile.am
docs/libcurl/Makefile.in
docs/libcurl/curl_easy_cleanup.html [new file with mode: 0644]
docs/libcurl/curl_easy_cleanup.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_duphandle.html [new file with mode: 0644]
docs/libcurl/curl_easy_duphandle.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_escape.html [new file with mode: 0644]
docs/libcurl/curl_easy_escape.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_getinfo.3
docs/libcurl/curl_easy_getinfo.html [new file with mode: 0644]
docs/libcurl/curl_easy_getinfo.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_init.html [new file with mode: 0644]
docs/libcurl/curl_easy_init.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_pause.html [new file with mode: 0644]
docs/libcurl/curl_easy_pause.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_perform.html [new file with mode: 0644]
docs/libcurl/curl_easy_perform.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_recv.3
docs/libcurl/curl_easy_recv.html [new file with mode: 0644]
docs/libcurl/curl_easy_recv.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_reset.html [new file with mode: 0644]
docs/libcurl/curl_easy_reset.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_send.3
docs/libcurl/curl_easy_send.html [new file with mode: 0644]
docs/libcurl/curl_easy_send.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_setopt.3
docs/libcurl/curl_easy_setopt.html [new file with mode: 0644]
docs/libcurl/curl_easy_setopt.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_strerror.html [new file with mode: 0644]
docs/libcurl/curl_easy_strerror.pdf [new file with mode: 0644]
docs/libcurl/curl_easy_unescape.3
docs/libcurl/curl_easy_unescape.html [new file with mode: 0644]
docs/libcurl/curl_easy_unescape.pdf [new file with mode: 0644]
docs/libcurl/curl_escape.html [new file with mode: 0644]
docs/libcurl/curl_escape.pdf [new file with mode: 0644]
docs/libcurl/curl_formadd.3
docs/libcurl/curl_formadd.html [new file with mode: 0644]
docs/libcurl/curl_formadd.pdf [new file with mode: 0644]
docs/libcurl/curl_formfree.html [new file with mode: 0644]
docs/libcurl/curl_formfree.pdf [new file with mode: 0644]
docs/libcurl/curl_formget.html [new file with mode: 0644]
docs/libcurl/curl_formget.pdf [new file with mode: 0644]
docs/libcurl/curl_free.html [new file with mode: 0644]
docs/libcurl/curl_free.pdf [new file with mode: 0644]
docs/libcurl/curl_getdate.html [new file with mode: 0644]
docs/libcurl/curl_getdate.pdf [new file with mode: 0644]
docs/libcurl/curl_getenv.html [new file with mode: 0644]
docs/libcurl/curl_getenv.pdf [new file with mode: 0644]
docs/libcurl/curl_global_cleanup.3
docs/libcurl/curl_global_cleanup.html [new file with mode: 0644]
docs/libcurl/curl_global_cleanup.pdf [new file with mode: 0644]
docs/libcurl/curl_global_init.html [new file with mode: 0644]
docs/libcurl/curl_global_init.pdf [new file with mode: 0644]
docs/libcurl/curl_global_init_mem.html [new file with mode: 0644]
docs/libcurl/curl_global_init_mem.pdf [new file with mode: 0644]
docs/libcurl/curl_mprintf.html [new file with mode: 0644]
docs/libcurl/curl_mprintf.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_add_handle.html [new file with mode: 0644]
docs/libcurl/curl_multi_add_handle.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_assign.html [new file with mode: 0644]
docs/libcurl/curl_multi_assign.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_cleanup.html [new file with mode: 0644]
docs/libcurl/curl_multi_cleanup.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_fdset.html [new file with mode: 0644]
docs/libcurl/curl_multi_fdset.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_info_read.html [new file with mode: 0644]
docs/libcurl/curl_multi_info_read.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_init.html [new file with mode: 0644]
docs/libcurl/curl_multi_init.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_perform.html [new file with mode: 0644]
docs/libcurl/curl_multi_perform.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_remove_handle.html [new file with mode: 0644]
docs/libcurl/curl_multi_remove_handle.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_setopt.html [new file with mode: 0644]
docs/libcurl/curl_multi_setopt.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_socket.3
docs/libcurl/curl_multi_socket.html [new file with mode: 0644]
docs/libcurl/curl_multi_socket.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_socket_action.html [new file with mode: 0644]
docs/libcurl/curl_multi_socket_action.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_socket_all.html [new file with mode: 0644]
docs/libcurl/curl_multi_socket_all.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_strerror.html [new file with mode: 0644]
docs/libcurl/curl_multi_strerror.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_timeout.html [new file with mode: 0644]
docs/libcurl/curl_multi_timeout.pdf [new file with mode: 0644]
docs/libcurl/curl_multi_wait.html [new file with mode: 0644]
docs/libcurl/curl_multi_wait.pdf [new file with mode: 0644]
docs/libcurl/curl_share_cleanup.html [new file with mode: 0644]
docs/libcurl/curl_share_cleanup.pdf [new file with mode: 0644]
docs/libcurl/curl_share_init.html [new file with mode: 0644]
docs/libcurl/curl_share_init.pdf [new file with mode: 0644]
docs/libcurl/curl_share_setopt.html [new file with mode: 0644]
docs/libcurl/curl_share_setopt.pdf [new file with mode: 0644]
docs/libcurl/curl_share_strerror.html [new file with mode: 0644]
docs/libcurl/curl_share_strerror.pdf [new file with mode: 0644]
docs/libcurl/curl_slist_append.html [new file with mode: 0644]
docs/libcurl/curl_slist_append.pdf [new file with mode: 0644]
docs/libcurl/curl_slist_free_all.html [new file with mode: 0644]
docs/libcurl/curl_slist_free_all.pdf [new file with mode: 0644]
docs/libcurl/curl_strequal.html [new file with mode: 0644]
docs/libcurl/curl_strequal.pdf [new file with mode: 0644]
docs/libcurl/curl_unescape.html [new file with mode: 0644]
docs/libcurl/curl_unescape.pdf [new file with mode: 0644]
docs/libcurl/curl_version.html [new file with mode: 0644]
docs/libcurl/curl_version.pdf [new file with mode: 0644]
docs/libcurl/curl_version_info.3
docs/libcurl/curl_version_info.html [new file with mode: 0644]
docs/libcurl/curl_version_info.pdf [new file with mode: 0644]
docs/libcurl/libcurl-easy.html [new file with mode: 0644]
docs/libcurl/libcurl-easy.pdf [new file with mode: 0644]
docs/libcurl/libcurl-errors.3
docs/libcurl/libcurl-errors.html [new file with mode: 0644]
docs/libcurl/libcurl-errors.pdf [new file with mode: 0644]
docs/libcurl/libcurl-multi.3
docs/libcurl/libcurl-multi.html [new file with mode: 0644]
docs/libcurl/libcurl-multi.pdf [new file with mode: 0644]
docs/libcurl/libcurl-share.html [new file with mode: 0644]
docs/libcurl/libcurl-share.pdf [new file with mode: 0644]
docs/libcurl/libcurl-symbols.3
docs/libcurl/libcurl-symbols.html [new file with mode: 0644]
docs/libcurl/libcurl-symbols.pdf [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.html [new file with mode: 0644]
docs/libcurl/libcurl-tutorial.pdf [new file with mode: 0644]
docs/libcurl/libcurl.html [new file with mode: 0644]
docs/libcurl/libcurl.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONDITION_UNMET.pdf [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.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.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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_TYPE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_COOKIELIST.3
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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.pdf [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.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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HEADER_SIZE.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LOCAL_IP.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_OS_ERRNO.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIMARY_IP.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIVATE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PROTOCOL.3 [deleted file]
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_PROXY_SSL_VERIFYRESULT.3 [deleted file]
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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_TIME.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REQUEST_SIZE.pdf [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.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.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.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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SCHEME.3 [deleted file]
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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.pdf [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
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.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.pdf [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.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.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.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAXCONNECTS.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3
docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PIPELINING.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PIPELINING.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_SOCKETDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_TIMERDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3 [deleted file]
docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3
docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_APPEND.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_APPEND.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_AUTOREFERER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_BUFFERSIZE.3
docs/libcurl/opts/CURLOPT_BUFFERSIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CAINFO.3
docs/libcurl/opts/CURLOPT_CAINFO.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CAINFO.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CAPATH.3
docs/libcurl/opts/CURLOPT_CAPATH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CAPATH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CERTINFO.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CERTINFO.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CHUNK_DATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3
docs/libcurl/opts/CURLOPT_CONNECT_ONLY.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECT_TO.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONNECT_TO.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIE.3
docs/libcurl/opts/CURLOPT_COOKIE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIEFILE.3
docs/libcurl/opts/CURLOPT_COOKIEFILE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIEJAR.3
docs/libcurl/opts/CURLOPT_COOKIEJAR.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIELIST.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIELIST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIESESSION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CRLF.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CRLF.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CRLFILE.3
docs/libcurl/opts/CURLOPT_CRLFILE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CRLFILE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3
docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DEBUGDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3
docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3
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.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3
docs/libcurl/opts/CURLOPT_DNS_INTERFACE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_SERVERS.3
docs/libcurl/opts/CURLOPT_DNS_SERVERS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_EGDSOCKET.3
docs/libcurl/opts/CURLOPT_EGDSOCKET.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ERRORBUFFER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FAILONERROR.3
docs/libcurl/opts/CURLOPT_FAILONERROR.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FAILONERROR.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FILETIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FILETIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FNMATCH_DATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FORBID_REUSE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FRESH_CONNECT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTPPORT.3
docs/libcurl/opts/CURLOPT_FTPPORT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTPPORT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTPSSLAUTH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3
docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_USE_PRET.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADER.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADERDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADERDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADERFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADEROPT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HEADEROPT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP200ALIASES.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPAUTH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPGET.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPGET.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPHEADER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPPOST.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPPOST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP_VERSION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INFILESIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INFILESIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INTERFACE.3
docs/libcurl/opts/CURLOPT_INTERFACE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INTERFACE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IOCTLDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IPRESOLVE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ISSUERCERT.3
docs/libcurl/opts/CURLOPT_ISSUERCERT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3 [deleted file]
docs/libcurl/opts/CURLOPT_KEYPASSWD.3
docs/libcurl/opts/CURLOPT_KEYPASSWD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_KRBLEVEL.3
docs/libcurl/opts/CURLOPT_KRBLEVEL.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOCALPORT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOCALPORT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3
docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAIL_AUTH.3
docs/libcurl/opts/CURLOPT_MAIL_AUTH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAIL_FROM.3
docs/libcurl/opts/CURLOPT_MAIL_FROM.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAIL_RCPT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXCONNECTS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXFILESIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXREDIRS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NETRC.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NETRC.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NETRC_FILE.3
docs/libcurl/opts/CURLOPT_NETRC_FILE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOBODY.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOBODY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOPROGRESS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOPROXY.3
docs/libcurl/opts/CURLOPT_NOPROXY.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOPROXY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOSIGNAL.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PASSWORD.3
docs/libcurl/opts/CURLOPT_PASSWORD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PASSWORD.pdf [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
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.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PIPEWAIT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PORT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PORT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POST.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTFIELDS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTQUOTE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTREDIR.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_POSTREDIR.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PREQUOTE.3
docs/libcurl/opts/CURLOPT_PREQUOTE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PREQUOTE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PRE_PROXY.3 [deleted file]
docs/libcurl/opts/CURLOPT_PRIVATE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PRIVATE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROGRESSDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROTOCOLS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXY.3
docs/libcurl/opts/CURLOPT_PROXY.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYAUTH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYHEADER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3
docs/libcurl/opts/CURLOPT_PROXYPASSWORD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYPORT.3
docs/libcurl/opts/CURLOPT_PROXYPORT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYPORT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYTYPE.3
docs/libcurl/opts/CURLOPT_PROXYTYPE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3
docs/libcurl/opts/CURLOPT_PROXYUSERNAME.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3
docs/libcurl/opts/CURLOPT_PROXYUSERPWD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3
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_SSLCERT.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3 [deleted file]
docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PUT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PUT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_QUOTE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_QUOTE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RANDOM_FILE.3
docs/libcurl/opts/CURLOPT_RANDOM_FILE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RANGE.3
docs/libcurl/opts/CURLOPT_RANGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RANGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_READDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_READDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_READFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_READFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3
docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_REFERER.3
docs/libcurl/opts/CURLOPT_REFERER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_REFERER.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RESOLVE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RESOLVE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RESUME_FROM.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_REQUEST.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3
docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3
docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3
docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SASL_IR.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SASL_IR.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SEEKDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SEEKDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SEEKFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SERVICE_NAME.3
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.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SHARE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKOPTDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_KEYDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3
docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3
docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3
docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLCERT.3
docs/libcurl/opts/CURLOPT_SSLCERT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLCERT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3
docs/libcurl/opts/CURLOPT_SSLCERTTYPE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLENGINE.3
docs/libcurl/opts/CURLOPT_SSLENGINE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLENGINE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLKEY.3
docs/libcurl/opts/CURLOPT_SSLKEY.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLKEY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3
docs/libcurl/opts/CURLOPT_SSLKEYTYPE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLVERSION.3
docs/libcurl/opts/CURLOPT_SSLVERSION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSLVERSION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3
docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3
docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STDERR.pdf [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.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.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3
docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3
docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_NODELAY.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TELNETOPTIONS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf [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.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMEOUT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMEOUT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMEOUT_MS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMEVALUE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3
docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3
docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3
docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TRANSFERTEXT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_UPLOAD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_UPLOAD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_URL.3
docs/libcurl/opts/CURLOPT_URL.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_URL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USERAGENT.3
docs/libcurl/opts/CURLOPT_USERAGENT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USERAGENT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USERNAME.3
docs/libcurl/opts/CURLOPT_USERNAME.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USERNAME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USERPWD.3
docs/libcurl/opts/CURLOPT_USERPWD.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USERPWD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USE_SSL.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_USE_SSL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_VERBOSE.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_VERBOSE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_WILDCARDMATCH.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_WRITEDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_WRITEDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_WRITEFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_XFERINFODATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3
docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf [new file with mode: 0644]
docs/libcurl/opts/Makefile.am
docs/libcurl/opts/Makefile.in
docs/libcurl/symbols-in-versions
docs/mk-ca-bundle.html [new file with mode: 0644]
docs/mk-ca-bundle.pdf [new file with mode: 0644]
include/README
include/curl/Makefile.in
include/curl/curl.h
include/curl/curlver.h
include/curl/easy.h
include/curl/stdcheaders.h
include/curl/typecheck-gcc.h
lib/CMakeLists.txt
lib/Makefile.am
lib/Makefile.in
lib/Makefile.inc
lib/Makefile.netware
lib/Makefile.vc10
lib/Makefile.vc11
lib/Makefile.vc12
lib/Makefile.vc14
lib/Makefile.vc6 [new file with mode: 0644]
lib/Makefile.vc7
lib/Makefile.vc8
lib/Makefile.vc9
lib/amigaos.c
lib/asyn-ares.c
lib/asyn-thread.c
lib/base64.c
lib/checksrc.pl
lib/config-amigaos.h
lib/config-symbian.h
lib/conncache.c
lib/connect.c
lib/connect.h
lib/content_encoding.c
lib/cookie.c
lib/cookie.h
lib/curl_addrinfo.c
lib/curl_addrinfo.h
lib/curl_config.h.cmake
lib/curl_config.h.in
lib/curl_des.c
lib/curl_endian.c
lib/curl_endian.h
lib/curl_gethostname.c
lib/curl_gssapi.c
lib/curl_hmac.h
lib/curl_ntlm_core.c
lib/curl_ntlm_wb.c
lib/curl_sasl.c
lib/curl_sec.h
lib/curl_setup.h
lib/curl_threads.c
lib/curl_threads.h
lib/curlx.h
lib/dict.c
lib/easy.c
lib/escape.c
lib/file.c
lib/formdata.c
lib/formdata.h
lib/ftp.c
lib/ftp.h
lib/ftplistparser.c
lib/getinfo.c
lib/gopher.c
lib/hash.c
lib/hash.h
lib/hmac.c
lib/hostcheck.c
lib/hostip.c
lib/hostip.h
lib/hostip4.c
lib/http.c
lib/http.h
lib/http2.c
lib/http2.h
lib/http_chunks.c
lib/http_digest.c
lib/http_negotiate.c
lib/http_ntlm.c
lib/http_proxy.c
lib/http_proxy.h
lib/if2ip.c
lib/imap.c
lib/inet_ntop.c
lib/inet_pton.c
lib/krb5.c
lib/ldap.c
lib/libcurl.plist
lib/libcurl.rc
lib/md4.c
lib/md5.c
lib/memdebug.c
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/non-ascii.c
lib/nwlib.c
lib/nwos.c
lib/parsedate.c
lib/pingpong.c
lib/pingpong.h
lib/pipeline.c
lib/pop3.c
lib/progress.c
lib/rand.c [deleted file]
lib/rand.h [deleted file]
lib/rawstr.c [new file with mode: 0644]
lib/rawstr.h [new file with mode: 0644]
lib/rtsp.c
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.h
lib/smb.c
lib/smtp.c
lib/socks.c
lib/socks.h
lib/socks_gssapi.c
lib/socks_sspi.c
lib/speedcheck.c
lib/ssh.c
lib/strcase.c [deleted file]
lib/strcase.h [deleted file]
lib/strdup.c
lib/strdup.h
lib/strequal.c [new file with mode: 0644]
lib/strequal.h [new file with mode: 0644]
lib/strerror.c
lib/strerror.h
lib/strtoofft.c
lib/system_win32.c
lib/telnet.c
lib/tftp.c
lib/timeval.c
lib/timeval.h
lib/transfer.c
lib/url.c
lib/url.h
lib/urldata.h
lib/vauth/cleartext.c
lib/vauth/digest.c
lib/vauth/digest_sspi.c
lib/vauth/ntlm.c
lib/vauth/ntlm.h
lib/vauth/spnego_sspi.c
lib/version.c
lib/vtls/axtls.c
lib/vtls/axtls.h
lib/vtls/cyassl.c
lib/vtls/cyassl.h
lib/vtls/darwinssl.c
lib/vtls/darwinssl.h
lib/vtls/gskit.c
lib/vtls/gskit.h
lib/vtls/gtls.c
lib/vtls/gtls.h
lib/vtls/mbedtls.c
lib/vtls/mbedtls.h
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/schannel.c
lib/vtls/schannel.h
lib/vtls/vtls.c
lib/vtls/vtls.h
lib/x509asn1.c
lib/x509asn1.h
ltmain.sh
m4/curl-compilers.m4
m4/curl-functions.m4
maketgz
packages/AIX/Makefile.in
packages/AIX/RPM/Makefile.in
packages/AIX/RPM/README
packages/DOS/common.dj
packages/Linux/Makefile.in
packages/Linux/RPM/Makefile.in
packages/Makefile.in
packages/OS400/README.OS400
packages/OS400/ccsidcurl.c
packages/OS400/curl.inc.in
packages/Solaris/Makefile.in
packages/Symbian/group/curl.mmp
packages/Symbian/group/libcurl.mmp
packages/Win32/Makefile.in
packages/Win32/cygwin/Makefile.in
packages/Win32/cygwin/README
packages/vms/Makefile.in
packages/vms/curlmsg.h
packages/vms/curlmsg.msg
packages/vms/curlmsg.sdl
packages/vms/curlmsg_vms.h
packages/vms/gnv_link_curl.com
packages/vms/readme
packages/vms/vms_eco_level.h
projects/Windows/VC10/lib/libcurl.vcxproj
projects/Windows/VC10/src/curl.vcxproj
projects/Windows/VC11/lib/libcurl.vcxproj
projects/Windows/VC11/src/curl.vcxproj
projects/Windows/VC12/lib/libcurl.vcxproj
projects/Windows/VC12/src/curl.vcxproj
projects/Windows/VC14/lib/libcurl.vcxproj
projects/Windows/VC14/src/curl.vcxproj
projects/Windows/VC6/lib/libcurl.dsp
projects/Windows/VC6/src/curl.dsp
projects/Windows/VC7.1/lib/libcurl.vcproj
projects/Windows/VC7.1/src/curl.vcproj
projects/Windows/VC7/lib/libcurl.vcproj
projects/Windows/VC7/src/curl.vcproj
projects/Windows/VC8/lib/libcurl.vcproj
projects/Windows/VC8/src/curl.vcproj
projects/Windows/VC9/lib/libcurl.vcproj
projects/Windows/VC9/src/curl.vcproj
scripts/Makefile.in
src/CMakeLists.txt
src/Makefile.Watcom
src/Makefile.am
src/Makefile.in
src/Makefile.inc
src/Makefile.netware
src/Makefile.vc10
src/Makefile.vc11
src/Makefile.vc12
src/Makefile.vc14
src/Makefile.vc6 [new file with mode: 0644]
src/Makefile.vc7
src/Makefile.vc8
src/Makefile.vc9
src/curl.rc
src/macos/MACINSTALL.TXT
src/makefile.amiga
src/makefile.dj
src/tool_cb_dbg.c
src/tool_cb_hdr.c
src/tool_cfgable.c
src/tool_cfgable.h
src/tool_dirhie.c
src/tool_doswin.c
src/tool_formparse.c
src/tool_getparam.c
src/tool_getpass.h
src/tool_help.c
src/tool_helpers.c
src/tool_homedir.c
src/tool_hugehelp.c
src/tool_libinfo.c
src/tool_metalink.c
src/tool_operate.c
src/tool_operhlp.c
src/tool_paramhlp.c
src/tool_parsecfg.c
src/tool_setopt.c
src/tool_setopt.h
src/tool_urlglob.c
src/tool_urlglob.h
src/tool_version.h
src/tool_writeenv.c
src/tool_writeout.c
tests/Makefile.am
tests/Makefile.in
tests/README
tests/data/Makefile.in
tests/data/Makefile.inc
tests/data/test1
tests/data/test1021
tests/data/test1035
tests/data/test1060
tests/data/test1061
tests/data/test1097
tests/data/test1109
tests/data/test1110
tests/data/test1111
tests/data/test1135
tests/data/test1139
tests/data/test1144
tests/data/test1145 [deleted file]
tests/data/test1146 [deleted file]
tests/data/test1205
tests/data/test1230
tests/data/test1231
tests/data/test1232
tests/data/test1245 [deleted file]
tests/data/test1246 [deleted file]
tests/data/test1247 [deleted file]
tests/data/test1248 [deleted file]
tests/data/test1249 [deleted file]
tests/data/test1250 [deleted file]
tests/data/test1251 [deleted file]
tests/data/test1252 [deleted file]
tests/data/test1253 [deleted file]
tests/data/test1254 [deleted file]
tests/data/test1255 [deleted file]
tests/data/test1256 [deleted file]
tests/data/test1257 [deleted file]
tests/data/test1258 [deleted file]
tests/data/test1259 [deleted file]
tests/data/test1280 [deleted file]
tests/data/test1281 [deleted file]
tests/data/test1282 [deleted file]
tests/data/test1283 [deleted file]
tests/data/test1284 [deleted file]
tests/data/test1285 [deleted file]
tests/data/test1286 [deleted file]
tests/data/test1301
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/test1420
tests/data/test1438 [deleted file]
tests/data/test1439 [deleted file]
tests/data/test1525
tests/data/test1532 [deleted file]
tests/data/test1533 [deleted file]
tests/data/test1534 [deleted file]
tests/data/test1535 [deleted file]
tests/data/test1536 [deleted file]
tests/data/test1605 [deleted file]
tests/data/test165
tests/data/test1800
tests/data/test1801
tests/data/test199
tests/data/test2032
tests/data/test2045
tests/data/test2046
tests/data/test2047
tests/data/test2048
tests/data/test2053 [deleted file]
tests/data/test2054 [deleted file]
tests/data/test2055 [deleted file]
tests/data/test209
tests/data/test213
tests/data/test265
tests/data/test47
tests/data/test500
tests/data/test501
tests/data/test506
tests/data/test517
tests/data/test552
tests/data/test556
tests/data/test557
tests/data/test558
tests/data/test578
tests/data/test59
tests/data/test700
tests/data/test701
tests/data/test708
tests/data/test71
tests/data/test712
tests/data/test713 [deleted file]
tests/data/test714 [deleted file]
tests/data/test715 [deleted file]
tests/data/test864
tests/ftpserver.pl
tests/libtest/CMakeLists.txt
tests/libtest/Makefile.in
tests/libtest/Makefile.inc
tests/libtest/lib1500.c
tests/libtest/lib1502.c
tests/libtest/lib1507.c
tests/libtest/lib1511.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
tests/libtest/lib1532.c [deleted file]
tests/libtest/lib1533.c [deleted file]
tests/libtest/lib1534.c [deleted file]
tests/libtest/lib1535.c [deleted file]
tests/libtest/lib1536.c [deleted file]
tests/libtest/lib500.c
tests/libtest/lib501.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/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/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/lib556.c
tests/libtest/lib557.c
tests/libtest/lib562.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/lib574.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/lib598.c
tests/libtest/lib599.c
tests/libtest/libauthretry.c
tests/libtest/libntlmconnect.c
tests/libtest/test.h
tests/libtest/testtrace.c
tests/manpage-scan.pl
tests/pathhelp.pm
tests/runtests.pdf
tests/runtests.pl
tests/server/Makefile.in
tests/server/Makefile.inc
tests/server/getpart.c
tests/server/rtspd.c
tests/server/sockfilt.c
tests/server/sws.c
tests/server/tftpd.c
tests/server/util.c
tests/server/util.h
tests/testcurl.1
tests/testcurl.html
tests/testcurl.pdf
tests/unit/CMakeLists.txt [deleted file]
tests/unit/Makefile.am
tests/unit/Makefile.in
tests/unit/Makefile.inc
tests/unit/unit1301.c
tests/unit/unit1303.c
tests/unit/unit1304.c
tests/unit/unit1305.c
tests/unit/unit1308.c
tests/unit/unit1602.c
tests/unit/unit1604.c
tests/unit/unit1605.c [deleted file]
tests/valgrind.pm
winbuild/Makefile.msvc.names [new file with mode: 0644]
winbuild/Makefile.vc
winbuild/MakefileBuild.vc

diff --git a/CHANGES b/CHANGES
index 45b9588..b08f71d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
                                   Changelog
 
-Version 7.53.1 (24 Feb 2017)
+Version 7.50.2 (7 Sep 2016)
 
-Daniel Stenberg (24 Feb 2017)
-- release: 7.53.1
+Daniel Stenberg (7 Sep 2016)
+- RELEASE-NOTES: curl 7.50.2 release
 
-- Revert "tests: use consistent environment variables for setting charset"
-  
-  This reverts commit ecd1d020abdae3c3ce3643ddab3106501e62e7c0.
-  
-  That commit caused test failures on my Debian Linux machine for all
-  changed test cases. We need to reconsider how that should get done.
+- THANKS: updated for 7.50.2
 
-Dan Fandrich (23 Feb 2017)
-- tests: use consistent environment variables for setting charset
-  
-  Character set in POSIX is set by the locale defined (in decreasing order
-  of precedence) by the LC_ALL, LC_CTYPE and LANG environment variables (I
-  believe CHARSET is only historic). LC_ALL is cleared to ensure that
-  LC_CTYPE takes effect, but LC_ALL is not used to set the locale to
-  ensure that other parts of the locale aren't overriden, if set.  Since
-  there doesn't seem to be a cross-platform way of specifying a UTF-8
-  locale, and not all systems may support UTF-8, a <precheck> is used
-  (where relevant) to skip the test if UTF-8 isn't in use.  Test 1035 was
-  also converted to UTF-8 for consistency, as the actual character set
-  used there is irrelevant to the test.
+Jay Satiro (6 Sep 2016)
+- [Gaurav Malhotra brought this change]
 
-Jay Satiro (23 Feb 2017)
-- url: Default the CA proxy bundle location to CURL_CA_BUNDLE
+  openssl: fix CURLINFO_SSL_VERIFYRESULT
   
-  If the compile-time CURL_CA_BUNDLE location is defined use it as the
-  default value for the proxy CA bundle location, which is the same as
-  what we already do for the regular CA bundle location.
+  CURLINFO_SSL_VERIFYRESULT does not get the certificate verification
+  result when SSL_connect fails because of a certificate verification
+  error.
   
-  Ref: https://github.com/curl/curl/pull/1257
-
-Daniel Stenberg (23 Feb 2017)
-- [Sergii Pylypenko brought this change]
-
-  rand: added missing #ifdef HAVE_FCNTL_H around fcntl.h header
+  This fix saves the result of SSL_get_verify_result so that it is
+  returned by CURLINFO_SSL_VERIFYRESULT.
   
-  Closes #1285
+  Closes https://github.com/curl/curl/pull/995
 
-- TODO: "OPTIONS *"
-  
-  Closes #1280
+Daniel Stenberg (6 Sep 2016)
+- [Daniel Gustafsson brought this change]
 
-- RELEASE-NOTES: synced with 443e5b03a7d441
+  darwinssl: test for errSecSuccess in PKCS12 import rather than noErr (#993)
+  
+  While noErr and errSecSuccess are defined as the same value, the API
+  documentation states that SecPKCS12Import() returns errSecSuccess if
+  there were no errors in importing. Ensure that a future change of the
+  defined value doesn't break (however unlikely) and be consistent with
+  the API docs.
 
-- THANKS-filter: shachaf
+- [Daniel Gustafsson brought this change]
 
-- [İsmail Dönmez brought this change]
+  docs: Fix link to CONTRIBUTE in Github contribution guidelines (#994)
 
-  tests: Set CHARSET & LANG to UTF-8 in 1035, 2046 and 2047
-  
-  Closes #1283
-  Fixes #1277
+- [Marcel Raad brought this change]
 
-- bump: 7.53.1 coming up
+  openssl: Fix compilation with OPENSSL_API_COMPAT=0x10100000L
   
-  synced with df665f4df0f7a352
-
-- formdata: check for EOF when reading from stdin
+  With OPENSSL_API_COMPAT=0x10100000L (OpenSSL 1.1 API), the cleanup
+  functions are unavailable (they're no-ops anyway in OpenSSL 1.1). The
+  replacements for SSL_load_error_strings, SSLeay_add_ssl_algorithms, and
+  OpenSSL_add_all_algorithms are called automatically [1][2]. SSLeay() is
+  now called OpenSSL_version_num().
   
-  Reported-by: shachaf@users.noreply.github.com
+  [1]: https://www.openssl.org/docs/man1.1.0/ssl/OPENSSL_init_ssl.html
+  [2]: https://www.openssl.org/docs/man1.1.0/crypto/OPENSSL_init_crypto.html
   
-  Fixes #1281
+  Closes #992
+
+- RELEASE-NOTES: synced with 3d4c0c8b9bc1d
 
-Jay Satiro (22 Feb 2017)
-- docs: gitignore curl.1
+- http2: return EOF when done uploading without known size
   
-  curl.1 is generated by the cmdline-opts script since 4c49b83.
+  Fixes #982
+
+- http2: skip the content-length parsing, detect unknown size
 
-Daniel Stenberg (22 Feb 2017)
-- TODO: HTTP Digest using SHA-256
+- http2: minor white space edit
 
-- TODO: brotli is deployed widely now
+- http2: use named define instead of magic constant in read callback
 
-Jay Satiro (21 Feb 2017)
-- [Viktor Szakats brought this change]
+- [Craig Davison brought this change]
 
-  urldata: include curl_sspi.h when Windows SSPI is enabled
+  configure: make the cpp -P detection not clobber CPPFLAGS
   
-  f77dabe broke builds in Windows using Windows SSPI but not Windows SSL.
+  CPPPFLAGS is now CPPPFLAG. Fixes CURL_CHECK_DEF.
   
-  Bug: https://github.com/curl/curl/issues/1276
-  Reported-by: jveazey@users.noreply.github.com
+  Fixes #958
 
-- url: Improve CURLOPT_PROXY_CAPATH error handling
+- [Olivier Brunel brought this change]
+
+  speed caps: not based on average speeds anymore
   
-  - Change CURLOPT_PROXY_CAPATH to return CURLE_NOT_BUILT_IN if the option
-    is not supported, which is the same as what we already do for
-    CURLOPT_CAPATH.
+  Speed limits (from CURLOPT_MAX_RECV_SPEED_LARGE &
+  CURLOPT_MAX_SEND_SPEED_LARGE) were applied simply by comparing limits
+  with the cumulative average speed of the entire transfer; While this
+  might work at times with good/constant connections, in other cases it
+  can result to the limits simply being "ignored" for more than "short
+  bursts" (as told in man page).
   
-  - Change the curl tool to handle CURLOPT_PROXY_CAPATH error
-    CURLE_NOT_BUILT_IN as a warning instead of as an error, which is the
-    same as what we already do for CURLOPT_CAPATH.
+  Consider a download that goes on much slower than the limit for some
+  time (because bandwidth is used elsewhere, server is slow, whatever the
+  reason), then once things get better, curl would simply ignore the limit
+  up until the average speed (since the beginning of the transfer) reached
+  the limit.  This could prove the limit useless to effectively avoid
+  using the entire bandwidth (at least for quite some time).
   
-  - Fix CAPATH docs to show that CURLE_NOT_BUILT_IN is returned when the
-    respective CAPATH option is not supported by the SSL library.
+  So instead, we now use a "moving starting point" as reference, and every
+  time at least as much as the limit as been transferred, we can reset
+  this starting point to the current position. This gets a good limiting
+  effect that applies to the "current speed" with instant reactivity (in
+  case of sudden speed burst).
   
-  Ref: https://github.com/curl/curl/pull/1257
+  Closes #971
 
-- cyassl: fix typo
+- HISTORY.md: the multi socket was put in the wrong year!
 
-Version 7.53.0 (22 Feb 2017)
+- [Mark Hamilton brought this change]
 
-Daniel Stenberg (22 Feb 2017)
-- release: 7.53.0
+  tool_helpers.c: fix comment typo (#989)
 
-- cookie: fix declaration of 'dup' shadows a global declaration
+- [Mark Hamilton brought this change]
 
-- TLS: make SSL_VERIFYSTATUS work again
-  
-  The CURLOPT_SSL_VERIFYSTATUS option was not properly handled by libcurl
-  and thus even if the status couldn't be verified, the connection would
-  be allowed and the user would not be told about the failed verification.
-  
-  Regression since cb4e2be7c6d42ca
-  
-  CVE-2017-2629
-  Bug: https://curl.haxx.se/docs/adv_20170222.html
-  
-  Reported-by: Marcus Hoffmann
+  libtest/test.h: fix typo (#988)
 
-Jay Satiro (21 Feb 2017)
-- digest_sspi: Handle 'stale=TRUE' directive in HTTP digest
-  
-  - If the server has provided another challenge use it as the replacement
-    input token if stale=TRUE. Otherwise previous credentials have failed
-    so return CURLE_LOGIN_DENIED.
-  
-  Prior to this change the stale directive was ignored and if another
-  challenge was received it would cause error CURLE_BAD_CONTENT_ENCODING.
-  
-  Ref: https://tools.ietf.org/html/rfc2617#page-10
-  
-  Bug: https://github.com/curl/curl/issues/928
-  Reported-by: tarek112@users.noreply.github.com
+- CURLMOPT_PIPELINING.3: language
 
-Daniel Stenberg (20 Feb 2017)
-- smb: use getpid replacement for windows UWP builds
+- CURLMOPT_PIPELINING.3: extended and clarified
   
-  Source: https://github.com/Microsoft/vcpkg/blob/7676b8780db1e1e591c4fc7eba4f96f73c428cb4/ports/curl/0002_fix_uwp.patch
+  Especially in regards to the multiplexing part.
 
-- TODO: CURLOPT_RESOLVE for any port number
+Steve Holme (31 Aug 2016)
+- curl_sspi.c: Updated function description comments
   
-  Closes #1264
-
-- RELEASE-NOTES: synced with af30f1152d43dcdb
-
-- [Jean Gressmann brought this change]
+  * Added description to Curl_sspi_free_identity()
+  * Added parameter and return explanations to Curl_sspi_global_init()
+  * Added parameter explaination to Curl_sspi_global_cleanup()
 
-  sftp: improved checks for create dir failures
-  
-  Since negative values are errors and not only -1. This makes SFTP upload
-  with --create-dirs work (again).
+- README: Corrected the supported Visual Studio versions
   
-  Closes #1269
+  Missed from commit 8356022d17.
 
-Jay Satiro (20 Feb 2017)
-- [Max Khon brought this change]
+- KNOWN_BUGS: Move the Visual Studio project shortcomings from local README
 
-  digest_sspi: Fix nonce-count generation in HTTP digest
+- KNOWN_BUGS: Expand 6.4 to include Kerberos V5
   
-  - on the first invocation: keep security context returned by
-    InitializeSecurityContext()
+  ...and discuss a possible solution.
+
+Daniel Stenberg (30 Aug 2016)
+- connect: fix #ifdefs for debug versions of conn/streamclose() macros
   
-  - on subsequent invocations: use MakeSignature() instead of
-    InitializeSecurityContext() to generate HTTP digest response
+  CURLDEBUG is for the memory debugging
   
-  Bug: https://github.com/curl/curl/issues/870
-  Reported-by: Andreas Roth
+  DEBUGBUILD is for the extra debug stuff
   
-  Closes https://github.com/curl/curl/pull/1251
-
-- examples/multi-uv: checksrc compliance
+  Pointed-out-by: Steve Holme
 
-Michael Kaufmann (19 Feb 2017)
-- string formatting: fix 4 printf-style format strings
+- KNOWN_BUGS: mention some cmake "support gaps"
 
-Dan Fandrich (18 Feb 2017)
-- tests: removed the obsolete name parameter
+Nick Zitzmann (28 Aug 2016)
+- darwinssl: add documentation stating that the --cainfo option is intended for backward compatibility only
+  
+  In other news, I changed one other reference to "Mac OS X" in the documentation (that I previously wrote) to say "macOS" instead.
 
-Michael Kaufmann (18 Feb 2017)
-- speed caps: update the timeouts if the speed is too low/high
+Daniel Stenberg (28 Aug 2016)
+- http2: return CURLE_HTTP2_STREAM for unexpected stream close
   
-  Follow-up to 4b86113
+  Follow-up to c3e906e9cd0f, seems like a more appropriate error code
   
-  Fixes https://github.com/curl/curl/issues/793
-  Fixes https://github.com/curl/curl/issues/942
+  Suggested-by: Jay Satiro
+
+- [Tatsuhiro Tsujikawa brought this change]
 
-- docs: fix timeout handling in multi-uv example
+  http2: handle closed streams when uploading
+  
+  Fixes #986
 
-- proxy: fix hostname resolution and IDN conversion
+- http2: make sure stream errors don't needlessly close the connection
   
-  Properly resolve, convert and log the proxy host names.
-  Support the "--connect-to" feature for SOCKS proxies and for passive FTP
-  data transfers.
+  With HTTP/2 each transfer is made in an indivial logical stream over the
+  connection, making most previous errors that caused the connection to get
+  forced-closed now instead just kill the stream and not the connection.
   
-  Follow-up to cb4e2be
+  Fixes #941
+
+- Curl_verify_windows_version: minor edit to avoid compiler warnings
   
-  Reported-by: Jay Satiro
-  Fixes https://github.com/curl/curl/issues/1248
+  ... instead of if() before the switch(), add a default to the switch so
+  that the compilers don't warn on "warning: enumeration value
+  'PLATFORM_DONT_CARE' not handled in switch" anymore.
 
-Jay Satiro (17 Feb 2017)
-- [Isaac Boukris brought this change]
+Steve Holme (27 Aug 2016)
+- RELEASE-NOTES: Added missing fix from commit 15592143f
 
-  http: fix missing 'Content-Length: 0' while negotiating auth
-  
-  - While negotiating auth during PUT/POST if a user-specified
-    Content-Length header is set send 'Content-Length: 0'.
+Jay Satiro (26 Aug 2016)
+- schannel: Disable ALPN for Wine since it is causing problems
   
-  This is what we do already in HTTPREQ_POST_FORM and what we did in the
-  HTTPREQ_POST case (regression since afd288b).
+  - Disable ALPN on Wine.
   
-  Prior to this change no Content-Length header would be sent in such a
-  case.
+  - Don't pass input secbuffer when ALPN is disabled.
   
-  Bug: https://curl.haxx.se/mail/lib-2017-02/0006.html
-  Reported-by: Dominik Hölzl
+  When ALPN support was added a change was made to pass an input secbuffer
+  to initialize the context. When ALPN is enabled the buffer contains the
+  ALPN information, and when it's disabled the buffer is empty. In either
+  case this input buffer caused problems with Wine and connections would
+  not complete.
   
-  Closes https://github.com/curl/curl/pull/1242
+  Bug: https://github.com/curl/curl/issues/983
+  Reported-by: Christian Fillion
 
-Daniel Stenberg (16 Feb 2017)
-- [Simon Warta brought this change]
+Kamil Dudka (26 Aug 2016)
+- [Peter Wang brought this change]
 
-  winbuild: add note on auto-detection of MACHINE in Makefile.vc
+  nss: work around race condition in PK11_FindSlotByName()
   
-  Closes #1265
-
-- RELEASE-PROCEDURE: update the upcoming release calendar
-
-- TODO: consider file name from the redirected URL with -O ?
+  Serialise the call to PK11_FindSlotByName() to avoid spurious errors in
+  a multi-threaded environment. The underlying cause is a race condition
+  in nssSlot_IsTokenPresent().
   
-  It isn't easily solved, but with some thinking someone could probably
-  come up with a working approach?
+  Bug: https://bugzilla.mozilla.org/1297397
   
-  Closes #1241
+  Closes #985
 
-Jay Satiro (15 Feb 2017)
-- tool_urlglob: Allow a glob range with the same start and stop
-  
-  For example allow ranges like [1-1] and [a-a] etc.
-  
-  Regression since 5ca96cb.
+- nss: refuse previously loaded certificate from file
   
-  Bug: https://github.com/curl/curl/issues/1238
-  Reported-by: R. Dennis Steed
+  ... when we are not asked to use a certificate from file
 
-Daniel Stenberg (15 Feb 2017)
-- axtls: adapt to API changes
-  
-  Builds with axTLS 2.1.2. This then also breaks compatibility with axTLS
-  < 2.1.0 (the older API)
-  
-  ... and fix the session_id mixup brought in 04b4ee549
-  
-  Fixes #1220
+Daniel Stenberg (26 Aug 2016)
+- ftp_done: remove dead code
 
-- RELEASE-NOTES: synced with 690935390c29c
+- TLS: random file/egd doesn't have to match for conn reuse
 
-- [Nick Draffen brought this change]
+- test161: add comment for the exit code
 
-  curl: fix typo in time condition warning message
-  
-  The warning message had a typo. The argument long form is --time-cond
-  not --timecond
-  
-  Closes #1263
+Dan Fandrich (26 Aug 2016)
+- test219: Add http as a required feature
 
-- smb: code indent
+Daniel Stenberg (25 Aug 2016)
+- [Michael Kaufmann brought this change]
 
-Jay Satiro (14 Feb 2017)
-- configure: Allow disabling pthreads, fall back on Win32 threads
+  HTTP: stop parsing headers when switching to unknown protocols
   
-  When the threaded resolver option is specified for configure the default
-  thread library is pthreads. This change makes it possible to
-  --disable-pthreads and then configure can fall back on Win32 threads for
-  native Windows builds.
+  - unknown protocols probably won't send more headers (e.g. WebSocket)
+  - improved comments and moved them to the correct case statements
   
-  Closes https://github.com/curl/curl/pull/1260
+  Closes #899
 
-Daniel Stenberg (13 Feb 2017)
-- http2: fix memory-leak when denying push streams
+- openssl: make build with 1.1.0 again
   
-  Reported-by: zelinchen@users.noreply.github.com
-  Fixes #1229
+  synced with OpenSSL git master commit cc06906707
+
+- INTERNALS: fix title
 
-Jay Satiro (11 Feb 2017)
-- tool_operate: Show HTTPS-Proxy options on CURLE_SSL_CACERT
+- configure: detect zlib with our pkg-config macros
   
-  When CURLE_SSL_CACERT occurs the tool shows a lengthy error message to
-  the user explaining possible solutions such as --cacert and --insecure.
+  ... instead of relying on the pkg-config autoconf macros to be present.
   
-  This change appends to that message similar options --proxy-cacert and
-  --proxy-insecure when there's a specified HTTPS proxy.
+  Fixes #972 (again...)
+
+Jay Satiro (25 Aug 2016)
+- http2: Remove incorrect comments
   
-  Closes https://github.com/curl/curl/issues/1258
+  .. also remove same from scp
 
-Daniel Stenberg (10 Feb 2017)
-- cmdline-opts/page-footer: ftp.sunet.se is no longer an FTP mirror
+Daniel Stenberg (23 Aug 2016)
+- [Ales Novak brought this change]
 
-- URL: only accept ";options" in SMTP/POP3/IMAP URL schemes
+  ftp: fix wrong poll on the secondary socket
   
-  Fixes #1252
-
-Jay Satiro (9 Feb 2017)
-- cmdline-opts/socks*: Mention --preproxy in --socks* opts
+  When we're uploading using FTP and the server issues a tiny pause
+  between opening the connection to the client's secondary socket, the
+  client's initial poll() times out, which leads to second poll() which
+  does not wait for POLLIN on the secondary socket. So that poll() also
+  has to time out, creating a long (200ms) pause.
   
-  - Document in --socks* opts they're still mutually exclusive of --proxy.
+  This patch adds the correct flag to the secondary socket, making the
+  second poll() correctly wait for the connection there too.
   
-  Partial revert of 423a93c; I had misinterpreted the SOCKS proxy +
-  HTTP/HTTPS proxy combination.
+  Signed-off-by: Ales Novak <alnovak@suse.cz>
   
-  - Document in --socks* opts that --preproxy can be used to specify a
-    SOCKS proxy at the same time --proxy is used with an HTTP/HTTPS proxy.
+  Closes #978
 
-Daniel Stenberg (9 Feb 2017)
-- CURLOPT_SSL_VERIFYPEER.3: also the https proxy version
+- RELEASE-NOTES: synced with 95ded2c56
 
-Kamil Dudka (9 Feb 2017)
-- nss: make FTPS work with --proxytunnel
-  
-  If the NSS code was in the middle of a non-blocking handshake and it
-  was asked to finish the handshake in blocking mode, it unexpectedly
-  continued in the non-blocking mode, which caused a FTPS connection
-  over CONNECT to fail with "(81) Socket not ready for send/recv".
+- configure: make it work without PKG_CHECK_MODULES
   
-  Bug: https://bugzilla.redhat.com/1420327
-
-Daniel Stenberg (9 Feb 2017)
-- examples/multithread.c: link to our multi-thread docs
+  With commit c2f9b78 we added a new dependency on pkg-config for
+  developers which may be unwanted. This change make the configure script
+  still work as before if pkg-config isn't installed, it'll just use the
+  old zlib detection logic without pkg-config.
   
-  ... instead of the OpenSSL mutex page.
-
-- http_proxy: avoid freeing static memory
+  Reported-by: Marc Hörsken
   
-  Follow up to 7fe81ec298e0: make sure 'host' is either NULL or malloced.
-
-- [Cameron MacMinn brought this change]
+  Fixes #972
 
-  http_proxy: Fix tiny memory leak upon edge case connecting to proxy
+Marc Hoersken (21 Aug 2016)
+- Revert "KNOWN_BUGS: SOCKS proxy not working via IPv6"
   
-  Fixes #1255
-
-Michael Kaufmann (8 Feb 2017)
-- polarssl, mbedtls: Fix detection of pending data
+  This reverts commit 9cb1059f92286a6eb5d28c477fdd3f26aed1d554.
   
-  Reported-by: Dan Fandrich
-  Bug: https://curl.haxx.se/mail/lib-2017-02/0032.html
-
-Dan Fandrich (7 Feb 2017)
-- test1139: Added the --manual keyword since the manual is required
-
-Daniel Stenberg (7 Feb 2017)
-- RELEASE-NOTES: synced with 102454459dd688c
+  As discussed in #835 SOCKS5 supports IPv6 proxies and destinations.
 
-- THANKS-filter: polish some recent contributors
+Daniel Stenberg (21 Aug 2016)
+- [Marco Deckel brought this change]
 
-- http2: reset push header counter fixes crash
-  
-  When removing an easy handler from a multi before it completed its
-  transfer, and it had pushed streams, it would segfault due to the pushed
-  counted not being cleared.
+  win: Basic support for Universal Windows Platform apps
   
-  Fixed-by: zelinchen@users.noreply.github.com
-  Fixes #1249
-
-- [Markus Westerlind brought this change]
+  Closes #820
 
-  transfer: only retry nobody-requests for HTTP
+Steve Holme (21 Aug 2016)
+- sasl: Don't use GSSAPI authentication when domain name not specified
   
-  Using sftp to delete a file with CURLOPT_NOBODY set with a reused
-  connection would fail as curl expected to get some data. Thus it would
-  retry the command again which fails as the file has already been
-  deleted.
+  Only choose the GSSAPI authentication mechanism when the user name
+  contains a Windows domain name or the user is a valid UPN.
   
-  Fixes #1243
-
-Jay Satiro (7 Feb 2017)
-- [Daniel Gustafsson brought this change]
+  Fixes #718
 
-  telnet: Fix typos
+- vauth: Added check for supported SSPI based authentication mechanisms
   
-  Ref: https://github.com/curl/curl/pull/1245
-
-- [Daniel Gustafsson brought this change]
+  Completing commit 00417fd66c and 2708d4259b.
 
-  test552: Fix typos
+- http.c: Remove duplicate (authp->avail & CURLAUTH_DIGEST) check
   
-  Closes https://github.com/curl/curl/pull/1245
-
-- [Daniel Gustafsson brought this change]
+  From commit 2708d4259b.
 
-  darwinssl: Avoid parsing certificates when not in verbose mode
+Marc Hoersken (20 Aug 2016)
+- socks.c: display the hostname returned by the SOCKS5 proxy server
   
-  The information extracted from the server certificates in step 3 is only
-  used when in verbose mode, and there is no error handling or validation
-  performed as that has already been done. Only run the certificate
-  information extraction when in verbose mode and libcurl was built with
-  verbose strings.
+  Instead of displaying the requested hostname the one returned
+  by the SOCKS5 proxy server is used in case of connection error.
+  The requested hostname is displayed earlier in the connection sequence.
   
-  Closes https://github.com/curl/curl/pull/1246
+  The upper-value of the port is moved to a temporary variable and
+  replaced with a 0-byte to make sure the hostname is 0-terminated.
 
-- [JDepooter brought this change]
-
-  schannel: Remove incorrect SNI disabled message
-  
-  - Remove the SNI disabled when host verification disabled message
-    since that is incorrect.
-  
-  - Show a message for legacy versions of Windows <= XP that connections
-    may fail since those versions of WinSSL lack SNI, algorithms, etc.
+Steve Holme (20 Aug 2016)
+- urldata.h: Corrected comment for httpcode which is also populated by SMTP
   
-  Bug: https://github.com/curl/curl/pull/1240
-
-Daniel Stenberg (7 Feb 2017)
-- CHANGES: spell fix, use correct path to script
+  As of 7.25.0 and commit 5430007222.
 
-- CHANGES.0: removed
+Marc Hoersken (20 Aug 2016)
+- socks.c: use Curl_printable_address in SOCKS5 connection sequence
   
-  This is the previously manually edited changelog, not touched since Aug
-  2015. Still present in git for those who wants it.
-
-Dan Fandrich (6 Feb 2017)
-- cmdline-opts: Fixed build and test in out of source tree builds
+  Replace custom string formatting with Curl_printable_address.
+  Add additional debug and error output in case of failures.
 
-Viktor Szakats (6 Feb 2017)
-- use *.sourceforge.io and misc URL updates
+- socks.c: align SOCKS4 connection sequence with SOCKS5
   
-  Ref: https://sourceforge.net/blog/introducing-https-for-project-websites/
-  Closes: https://github.com/curl/curl/pull/1247
+  Calling sscanf is not required since the raw IPv4 address is
+  available and the protocol can be detected using ai_family.
 
-Jay Satiro (6 Feb 2017)
-- docs: Add more HTTPS proxy documentation
-  
-  - Document HTTPS proxy type.
-  
-  - Document --write-out %{proxy_ssl_verify_result}.
-  
-  - Document SOCKS proxy + HTTP/HTTPS proxy combination.
-  
-  HTTPS proxy support was added in 7.52.0 for OpenSSL, GnuTLS and NSS.
+Steve Holme (20 Aug 2016)
+- http.c: Corrected indentation change from commit 2708d4259b
   
-  Ref: https://github.com/curl/curl/commit/cb4e2be
+  Made by Visual Studio's auto-correct feature and missed by me in my own
+  code reviews!
 
-- OS400: Fix symbols
-  
-  - s/CURLOPT_SOCKS_PROXY/CURLOPT_PRE_PROXY
-    Follow-up to 7907a2b and 845522c.
-  
-  - Fix incorrect id for CURLOPT_PROXY_PINNEDPUBLICKEY.
+- http: Added calls to Curl_auth_is_<mechansism>_supported()
   
-  - Add id for CURLOPT_ABSTRACT_UNIX_SOCKET.
+  Hooked up the HTTP authentication layer to query the new 'is mechanism
+  supported' functions when deciding what mechanism to use.
   
-  Bug: https://github.com/curl/curl/issues/1237
-  Reported-by: jonrumsey@users.noreply.github.com
+  As per commit 00417fd66c existing functionality is maintained for now.
+
+Marc Hoersken (20 Aug 2016)
+- socks.c: improve verbose output of SOCKS5 connection sequence
 
-- [Sean Burford brought this change]
+- configure.ac: add missing quotes to PKG_CHECK_MODULES
 
-  cmake: Support curl --xattr when built with cmake
+Steve Holme (20 Aug 2016)
+- sasl: Added calls to Curl_auth_is_<mechansism>_supported()
   
-  - Test for and set HAVE_FSETXATTR when support for extended file
-    attributes is present.
+  Hooked up the SASL authentication layer to query the new 'is mechanism
+  supported' functions when deciding what mechanism to use.
   
-  Closes https://github.com/curl/curl/pull/1176
+  For now existing functionality is maintained.
 
-- [Adam Langley brought this change]
+Daniel Stenberg (19 Aug 2016)
+- [Miroslav Franc brought this change]
 
-  openssl: Don't use certificate after transferring ownership
-  
-  SSL_CTX_add_extra_chain_cert takes ownership of the given certificate
-  while, despite the similar name, SSL_CTX_add_client_CA does not. Thus
-  it's best to call SSL_CTX_add_client_CA before
-  SSL_CTX_add_extra_chain_cert, while the code still has ownership of the
-  argument.
-  
-  Closes https://github.com/curl/curl/pull/1236
+  spnego_sspi: fix memory leak in case *outlen is zero (#970)
 
-Daniel Stenberg (29 Jan 2017)
-- [Antoine Aubert brought this change]
+- CURLMOPT_MAX_TOTAL_CONNECTIONS.3: mention it can also multiplex
 
-  mbedtls: implement CTR-DRBG and HAVEGE random generators
+Steve Holme (18 Aug 2016)
+- vauth: Introduced Curl_auth_is_<mechansism>_supported() functions
   
-  closes #1227
-
-- docs: we no longer ship HTML versions of man pages
+  As Windows SSPI authentication calls fail when a particular mechanism
+  isn't available, introduced these functions for DIGEST, NTLM, Kerberos 5
+  and Negotiate to allow both HTTP and SASL authentication the opportunity
+  to query support for a supported mechanism before selecting it.
   
-  ... refer to the web site for the web versions.
+  For now each function returns TRUE to maintain compatability with the
+  existing code when called.
 
-- [railsnewbie257 brought this change]
+Daniel Stenberg (18 Aug 2016)
+- test1144: verify HEAD with body-only response
 
-  docs: proofread README.netware README.win32
+Steve Holme (17 Aug 2016)
+- RELEASE-PROCEDURE: Added some more future release dates
   
-  Closes #1231
+  ...and removed some old ones
 
-- RELEASE-NOTES; synced with ab08d82648
+Daniel Stenberg (17 Aug 2016)
+- [David Woodhouse brought this change]
 
-Michael Kaufmann (28 Jan 2017)
-- mbedtls: disable TLS session tickets
+  curl: allow "pkcs11:" prefix for client certificates
   
-  SSL session reuse with TLS session tickets is not supported yet.
-  Use SSL session IDs instead.
+  RFC7512 provides a standard method to reference certificates in PKCS#11
+  tokens, by means of a URI starting 'pkcs11:'.
   
-  See https://github.com/curl/curl/issues/1109
-
-- gnutls: disable TLS session tickets
+  We're working on fixing various applications so that whenever they would
+  have been able to use certificates from a file, users can simply insert
+  a PKCS#11 URI instead and expect it to work. This expectation is now a
+  part of the Fedora packaging guidelines, for example.
   
-  SSL session reuse with TLS session tickets is not supported yet.
-  Use SSL session IDs instead.
+  This doesn't work with cURL because of the way that the colon is used
+  to separate the certificate argument from the passphrase. So instead of
   
-  Fixes https://github.com/curl/curl/issues/1109
-
-- polarssl: fix hangs
+     curl -E 'pkcs11:manufacturer=piv_II;id=%01' …
   
-  This bugfix is similar to commit c111178bd4.
-
-Daniel Stenberg (27 Jan 2017)
-- cookies: do not assume a valid domain has a dot
+  I instead need to invoke cURL with the colon escaped, like this:
   
-  This repairs cookies for localhost.
+     curl -E 'pkcs11\:manufacturer=piv_II;id=%01' …
   
-  Non-PSL builds will now only accept "localhost" without dots, while PSL
-  builds okeys everything not listed as PSL.
+  This is suboptimal because we want *consistency* — the URI should be
+  usable in place of a filename anywhere, without having strange
+  differences for different applications.
   
-  Added test 1258 to verify.
+  This patch therefore disables the processing in parse_cert_parameter()
+  when the string starts with 'pkcs11:'. It means you can't pass a
+  passphrase with an unescaped PKCS#11 URI, but there's no need to do so
+  because RFC7512 allows a PIN to be given as a 'pin-value' attribute in
+  the URI itself.
   
-  This was a regression brought in a76825a5efa6b4
-
-- TODO: remove "Support TLS v1.3"
+  Also, if users are already using RFC7512 URIs with the colon escaped as
+  in the above example — even providing a passphrase for cURL to handling
+  instead of using a pin-value attribute, that will continue to work
+  because their string will start 'pkcs11\:' and won't match the check.
   
-  Support is trickling in already.
+  What *does* break with this patch is the extremely unlikely case that a
+  user has a file which is in the local directory and literally named
+  just "pkcs11", and they have a passphrase on it. If that ever happened,
+  the user would need to refer to it as './pkcs11:<passphrase>' instead.
 
-- [railsnewbie257 brought this change]
+- nss: make the global variables static
 
-  INTERNALS.md: language improvements
+- openssl: use regular malloc instead of OPENSSL_malloc
   
-  Closes #1226
+  This allows for better memmory debugging and torture tests.
 
-- telnet: fix windows compiler warnings
+- proxy: fix tests as follow-up to 93b0d907d5
   
-  Thumbs-up-by: Jay Satiro
+  This fixes tests that were added after 113f04e664b as the tests would
+  fail otherwise.
   
-  Closes #1225
-
-- VC: remove the makefile.vc6 build infra
+  We bring back "Proxy-Connection: Keep-Alive" now unconditionally to fix
+  regressions with old and stupid proxies, but we could possibly switch to
+  using it only for CONNECT or only for NTLM in a future if we want to
+  gradually reduce it.
   
-  The winbuild/ build files is now the single MSVC makefile build choice.
+  Fixes #954
   
-  Closes #1215
-
-- [Jay Satiro brought this change]
+  Reported-by: János Fekete
 
-  cmdline-opts/gen.pl: Open input files in CRLF mode
+- Revert "Proxy-Connection: stop sending this header by default"
   
-  On Windows it's possible to have input files with CRLF line endings and
-  a perl that defaults to LF line endings (eg msysgit). Currently that
-  results in generator output of mixed line endings of CR, LF and CRLF.
+  This reverts commit 113f04e664b16b944e64498a73a4dab990fe9a68.
+
+- CURLOPT_PROXY.3: unsupported schemes cause errors now
   
-  This change fixes that issue in the most succinct way by opening the
-  files in :crlf text mode even when the perl being used does not default
-  to that mode. (On operating systems that don't have a separate text mode
-  it's essentially a no-op.) The output continues to be in the perl's
-  native line ending.
+  Follow-up to a96319ebb9 (document the new behavior)
 
-- docs/curl.1: generate from the cmdline-opts script
+- tests/README: mention nghttpx for HTTP/2 tests
 
-- vtls: source indentation fix
+- README.md: add our CII Best Practices badge
 
-- contri*.sh: cut off parentheses from names too
+- proxy: polished the error message for unsupported schemes
+  
+  Follow up to a96319ebb93
 
-- RELEASE-NOTES: synced with 01ab7c30bba6f
+- test219: verify unsupported scheme for proxies get rejected
 
-- vtls: fix PolarSSL non-blocking handling
+- proxy: reject attempts to use unsupported proxy schemes
   
-  A regression brought in cb4e2be
+  I discovered some people have been using "https://example.com" style
+  strings as proxy and it "works" (curl doesn't complain) because curl
+  ignores unknown schemes and then assumes plain HTTP instead.
   
-  Reported-by: Michael Kaufmann
-  Bug: https://github.com/curl/curl/issues/1174#issuecomment-274018791
+  I think this misleads users into believing curl uses HTTPS to proxies
+  when it doesn't. Now curl rejects proxy strings using unsupported
+  schemes instead of just ignoring and defaulting to HTTP.
 
-- [Antoine Aubert brought this change]
+- RELEASE-NOTES: synced with b7ee5316c2fd5b
 
-  vtls: fix mbedtls multi non blocking handshake.
+Marc Hoersken (14 Aug 2016)
+- socks.c: Correctly calculate position of port in response packet
   
-  When using multi, mbedtls handshake is in non blocking mode.  vtls must
-  set wait for read/write flags for the socket.
+  Third commit to fix issue #944 regarding SOCKS5 error handling.
   
-  Closes #1223
-
-- [Richy Kim brought this change]
+  Reported-by: David Kalnischkies
 
-  CURLOPT_BUFFERSIZE: support enlarging receive buffer
+- socks.c: Do not modify and invalidate calculated response length
   
-  Replace use of fixed macro BUFSIZE to define the size of the receive
-  buffer.  Reappropriate CURLOPT_BUFFERSIZE to include enlarging receive
-  buffer size.  Upon setting, resize buffer if larger than the current
-  default size up to a MAX_BUFSIZE (512KB). This can benefit protocols
-  like SFTP.
+  Second commit to fix issue #944 regarding SOCKS5 error handling.
   
-  Closes #1222
+  Reported-by: David Kalnischkies
 
-- sws: use SOCKERRNO, not errno
+- socks.c: Move error output after reading the whole response packet
   
-  Reported-by: Gisle Vanem
-
-Michael Kaufmann (19 Jan 2017)
-- KNOWN_BUGS: HTTP/2 server push enabled when no pushes can be accepted
+  First commit to fix issue #944 regarding SOCKS5 error handling.
   
-  This has been implemented with commit 9ad034e.
+  Reported-by: David Kalnischkies
+
+Daniel Stenberg (13 Aug 2016)
+- [Ronnie Mose brought this change]
 
-Viktor Szakats (19 Jan 2017)
-- *.rc: escape non-ASCII/non-UTF-8 character for clarity
+  MANUAL: Remove invalid link to LDAP documentation (#962)
   
-  Closes https://github.com/curl/curl/pull/1217
+  The server developer.netscape.com does not resolve into any
+  ip address and can be removed.
 
-Kamil Dudka (19 Jan 2017)
-- docs: non-blocking SSL handshake is now supported with NSS
+Jay Satiro (13 Aug 2016)
+- openssl: accept subjectAltName iPAddress if no dNSName match
   
-  Implemented since curl-7_36_0-130-g8868a22
+  Undo change introduced in d4643d6 which caused iPAddress match to be
+  ignored if dNSName was present but did not match.
   
-  Reported-by: Fahim Chandurwala
-
-Michael Kaufmann (18 Jan 2017)
-- CURLOPT_CONNECT_TO: Fix compile warnings
+  Also, if iPAddress is present but does not match, and dNSName is not
+  present, fail as no-match. Prior to this change in such a case the CN
+  would be checked for a match.
   
-  Fix compile warnings that appeared only when curl has been configured
-  with '--disable-verbose'.
+  Bug: https://github.com/curl/curl/issues/959
+  Reported-by: wmsch@users.noreply.github.com
 
-Daniel Stenberg (18 Jan 2017)
-- usercertinmem.c: improve the short description
+Daniel Stenberg (12 Aug 2016)
+- [Dambaev Alexander brought this change]
 
-- parseurl: move back buffer to function scope
-  
-  Regression since 1d4202ad, which moved the buffer into a more narrow
-  scope, but the data in that buffer was used outside of that more narrow
-  scope.
+  configure.ac: add zlib search with pkg-config
   
-  Reported-by: Dan Fandrich
-  Bug: https://curl.haxx.se/mail/lib-2017-01/0093.html
+  Closes #956
 
-Jay Satiro (17 Jan 2017)
-- openssl: Fix random generation
+- rtsp: ignore whitespace in session id
   
-  - Fix logic error in Curl_ossl_random.
+  Follow-up to e577c43bb to fix test case 569 brekage: stop the parser at
+  whitespace as well.
   
-  Broken a few days ago in 807698d.
+  Help-by: Erik Janssen
 
-Daniel Stenberg (17 Jan 2017)
-- TODO: share OpenSSL contexts
+- HTTP: retry failed HEAD requests too
+  
+  Mark's new document about HTTP Retries
+  (https://mnot.github.io/I-D/httpbis-retry/) made me check our code and I
+  spotted that we don't retry failed HEAD requests which seems totally
+  inconsistent and I can't see any reason for that separate treatment.
   
-  By supporting this, subsequent connects would load a lot less data from
-  disk.
+  So, no separate treatment for HEAD starting now. A HTTP request sent
+  over a reused connection that gets cut off before a single byte is
+  received will be retried on a fresh connection.
   
-  Closes #1110
-
-- bump: next release will be 7.53.0
+  Made-aware-by: Mark Nottingham
 
-Kamil Dudka (15 Jan 2017)
-- nss: use the correct lock in nss_find_slot_by_name()
+- mk-ca-bundle.1: document -m, added in 1.26
 
-Alessandro Ghedini (15 Jan 2017)
-- http2: disable server push if not requested
-  
-  Ref: https://github.com/curl/curl/pull/1160
+- RELEASE-NOTES: synced with e577c43bb5
 
-Daniel Stenberg (14 Jan 2017)
-- [railsnewbie257 brought this change]
+- [Erik Janssen brought this change]
 
-  docs: improved language in README.md HISTORY.md CONTRIBUTE.md
+  rtsp: accept any RTSP session id
   
-  Closes #1211
-
-Alessandro Ghedini (14 Jan 2017)
-- http: print correct HTTP string in verbose output when using HTTP/2
+  Makes libcurl work in communication with gstreamer-based RTSP
+  servers. The original code validates the session id to be in accordance
+  with the RFC. I think it is better not to do that:
   
-  Before:
-  ```
-   % src/curl https://sigsegv.ninja/ -v --http2
-  ...
-  > GET / HTTP/1.1
-  > Host: sigsegv.ninja
-  > User-Agent: curl/7.52.2-DEV
-  > Accept: */*
-  >
-  ...
-  ```
+  - For curl the actual content is a don't care.
   
-  After:
-  ```
-   % src/curl https://sigsegv.ninja/ -v --http2
-  ...
-  > GET / HTTP/2
-  > Host: sigsegv.ninja
-  > User-Agent: curl/7.52.2-DEV
-  > Accept: */*
-  >
-  ```
-
-Daniel Stenberg (14 Jan 2017)
-- TODO: send only part of --data
+  - The clarity of the RFC is debatable, is $ allowed or only as \$, that
+    is imho not clear
   
-  Closes #1200
-
-- TODO: implemened "--fail-fast to exit on first transfer fail"
+  - Gstreamer seems to url-encode the session id but % is not allowed by
+  the RFC
+  
+  - less code
+  
+  With this patch curl will correctly handle real-life lines like:
+  Session: biTN4Kc.8%2B1w-AF.; timeout=60
   
-  Even though it is called --fail-early
+  Bug: https://curl.haxx.se/mail/lib-2016-08/0076.html
 
-- TODO: Chunked transfer multipart formpost
+- symbols-in-versions: add CURL_STRICTER
   
-  Closes #1139
+  Added in 5fce88aa8c12564
 
-- TODO: Improve formpost API, not just add an easy argument
+- [Simon Warta brought this change]
 
-- addrinfo: fix compiler warning on offsetof() use
+  winbuild: Allow changing C compiler via environment variable CC (#952)
   
-  curl_addrinfo.c:519:20: error: conversion to ‘curl_socklen_t {aka
-  unsigned int}’ from ‘long unsigned int’ may alter its value
-  [-Werror=conversion]
+  This makes it possible to use specific compilers or a cache.
   
-  Follow-up to 1d786faee1046f
+  Sample use for clcache:
+  set CC=clcache.bat
+  nmake /f Makefile.vc DEBUG=no MODE=static VC=14 GEN_PDB=no
 
-- THANKS-filter: Jiri Malak
+- LICENSE-MIXING.md: switched to markdown
 
-- RELEASE-NOTES: synced with a7c73ae309c
+- docs-make: have markdown files use .md
 
-Peter Wu (13 Jan 2017)
-- [Isaac Boukris brought this change]
+- curl.h: make CURL_NO_OLDIES define CURL_STRICTER
 
-  unix_socket: add support for abstract unix domain socket
-  
-  In addition to unix domain sockets, Linux also supports an
-  abstract namespace which is independent of the filesystem.
-  
-  In order to support it, add new CURLOPT_ABSTRACT_UNIX_SOCKET
-  option which uses the same storage as CURLOPT_UNIX_SOCKET_PATH
-  internally, along with a flag to specify abstract socket.
-  
-  On non-supporting platforms, the abstract address will be
-  interpreted as an empty string and fail gracefully.
-  
-  Also add new --abstract-unix-socket tool parameter.
-  
-  Signed-off-by: Isaac Boukris <iboukris@gmail.com>
-  Reported-by: Chungtsun Li (typeless)
-  Reviewed-by: Daniel Stenberg
-  Reviewed-by: Peter Wu
-  Closes #1197
-  Fixes #1061
+- HISTORY.md: use markdown extension
 
-Daniel Stenberg (13 Jan 2017)
-- write-out.d: 'time_total' is not always shown with ms precision
-  
-  We have higher resolution since 7.52.0
+- SSLCERTS.md: renamed to markdown extension
 
-- next.d: --trace and --trace-ascii are also global
+- INTERNALS.md: use markdown extension for markdown content
 
-- [Isaac Boukris brought this change]
+- CONTRIBUTE.md: markdown extension
 
-  curl: reset the easy handle at --next
-  
-  So that only "global" options (verbose mostly) survive into the next
-  transfer, and the others have to be set again unless default is fine.
+- CONTRIBUTE: changed to markdown
 
-- [Frank Gevaerts brought this change]
+- CONTRIBUTE: refreshed
 
-  docs: Add note about libcurl copying strings to CURLOPT_* manpages
-  
-  Closes #1169
+- TODO: added an SSH section and two SFTP things to do
 
-- [Frank Gevaerts brought this change]
+- TODO: remove the 1.22 duplicated item
 
-  CURLOPT_PREQUOTE.3: takes a struct curl_slist*, not a char*
+- TODO: move "CURLOPT_MAIL_CLIENT" to SMTP section
 
-- IDN: Use TR46 non-transitional
-  
-  Assisted-by: Tim Rühsen
+- TODO: API for URL parsing/splitting
 
-- IDN: revert use of the transitional option
-  
-  It made the german ß get converted to ss, IDNA2003 style, and we can't
-  have that for the .de TLD - a primary reason for our switch to IDNA2008.
-  
-  Test 165 verifies.
+- TODO: move QUIC to the HTTP section
 
-- [Tim Rühsen brought this change]
+- [Simon Warta brought this change]
 
-  IDN: Fix compile time detection of linidn2 TR46
+  winbuild: Free name $(CC) in Makefile (#950)
   
-  Follow-up to f30cbcac1
+  In the old line number 290, CC and CURL_CC had the same value. After
+  that, /DCURL_STATICLIB was added to CC but not CURL_CC (intended?).
   
-  Closes #1207
+  This gets rid of the CC variable entirely. It is a first step to make it
+  possible to manualyl set a CC variable in order to be able to change the
+  compiler.
 
-- [ERAMOTO Masaya brought this change]
+- TODO: Use huge HTTP/2 windows
 
-  url: --noproxy option overrides NO_PROXY environment variable
-  
-  Under condition using http_proxy env var, noproxy list was the
-  combination of --noproxy option and NO_PROXY env var previously. Since
-  this commit, --noproxy option overrides NO_PROXY environment variable
-  even if use http_proxy env var.
-  
-  Closes #1140
+- [Simon Warta brought this change]
 
-- [ERAMOTO Masaya brought this change]
+  winbuild: Avoid setting redundant CFLAGS to compile commands (#949)
+  
+  $(CURL_CC) is always used with $(CURL_CFLAGS) appended, so before this,
+  all arguments in CURL_CFLAGS have been added twice.
 
-  url: Refactor detect_proxy()
+Jay Satiro (8 Aug 2016)
+- cmake: Enable win32 threaded resolver by default
   
-  If defined CURL_DISABLE_HTTP, detect_proxy() returned NULL. If not
-  defined CURL_DISABLE_HTTP, detect_proxy() checked noproxy list.
+  - Turn on USE_THREADS_WIN32 in Windows if ares isn't on
   
-  Thus refactor to set proxy to NULL instead of calling detect_proxy() if
-  define CURL_DISABLE_HTTP, and refactor to call detect_proxy() if not
-  define CURL_DISABLE_HTTP and the host is not in the noproxy list.
+  This change is similar to what we already do in the autotools build.
 
-- [ERAMOTO Masaya brought this change]
-
-  url: Fix NO_PROXY env var to work properly with --proxy option.
-  
-  The combination of --noproxy option and http_proxy env var works well
-  both for proxied hosts and non-proxied hosts.
+- cmake: Enable win32 large file support by default
   
-  However, when combining NO_PROXY env var with --proxy option,
-  non-proxied hosts are not reachable while proxied host is OK.
+  All compilers used by cmake in Windows should support large files.
   
-  This patch allows us to access non-proxied hosts even if using NO_PROXY
-  env var with --proxy option.
+  - Add test SIZEOF_OFF_T
+  - Remove outdated test SIZEOF_CURL_OFF_T
+  - Turn on USE_WIN32_LARGE_FILES in Windows
+  - Check for 'Largefile' during the features output
 
-- [Tim Rühsen brought this change]
+Daniel Stenberg (7 Aug 2016)
+- TODO: added several ideas, removed SPDY
 
-  IDN: Use TR46 'transitional' for toASCII translations
+- http2: always wait for readable socket
   
-  References: http://unicode.org/faq/idn.html
-              http://unicode.org/reports/tr46
+  Since the server can at any time send a HTTP/2 frame to us, we need to
+  wait for the socket to be readable during all transfers so that we can
+  act on incoming frames even when uploading etc.
   
-  Closes #1206
-
-- [railsnewbie257 brought this change]
+  Reminded-by: Tatsuhiro Tsujikawa
 
-  docs: FAQ MAIL-ETIQUETTE language fixes
-  
-  Closes #1194
+- RELEASE-NOTES: synced with 7b4bf37a44791
 
-- [Marcus Hoffmann brought this change]
+- [Thomas Glanzmann brought this change]
 
-  gnutls: check for alpn and ocsp in configure
-  
-  Check for presence of gnutls_alpn_* and gnutls_ocsp_* functions during
-  configure instead of relying on the version number.  GnuTLS has options
-  to turn these features off and we ca just work with with such builds
-  like we work with older versions.
-  
-  Signed-off-by: Marcus Hoffmann <m.hoffmann@cartelsol.com>
+  mbedtls: set debug threshold to 4 (verbose) when MBEDTLS_DEBUG is defined
   
-  Closes #1204
+  In order to make MBEDTLS_DEBUG work, the debug threshold must be unequal
+  to 0.  This patch also adds a comment how mbedtls must be compiled in
+  order to make debugging work, and explains the possible debug levels.
 
-Jay Satiro (12 Jan 2017)
-- url: Fix parsing for when 'file' is the default protocol
-  
-  Follow-up to 3463408.
-  
-  Prior to 3463408 file:// hostnames were silently stripped.
-  
-  Prior to this commit it did not work when a schemeless url was used with
-  file as the default protocol.
-  
-  Ref: https://curl.haxx.se/mail/lib-2016-11/0081.html
-  Closes https://github.com/curl/curl/pull/1124
-  
-  Also fix for drive letters:
-  
-  - Support --proto-default file c:/foo/bar.txt
+- CURLOPT_TCP_NODELAY: now enabled by default
   
-  - Support file://c:/foo/bar.txt
+  After a few wasted hours hunting down the reason for slowness during a
+  TLS handshake that turned out to be because of TCP_NODELAY not being
+  set, I think we have enough motivation to toggle the default for this
+  option. We now enable TCP_NODELAY by default and allow applications to
+  switch it off.
   
-  - Fail when a file:// drive letter is detected and not MSDOS/Windows.
+  This also makes --tcp-nodelay unnecessary, but --no-tcp-nodelay can be
+  used to disable it.
   
-  Bug: https://github.com/curl/curl/issues/1187
-  Reported-by: Anatol Belski
-  Assisted-by: Anatol Belski
+  Thanks-to: Tim Rühsen
+  Bug: https://curl.haxx.se/mail/lib-2016-06/0143.html
 
-Daniel Stenberg (12 Jan 2017)
-- rand: make it work without TLS backing
-  
-  Regression introduced in commit f682156a4fc6c4
-  
-  Reported-by: John Kohl
-  Bug: https://curl.haxx.se/mail/lib-2017-01/0055.html
+- [Serj Kalichev brought this change]
 
-Jay Satiro (12 Jan 2017)
-- STARTTLS: Don't print response character in denied messages
+  TFTP: Fix upload problem with piped input
   
-  Both IMAP and POP3 response characters are used internally, but when
-  appended to the STARTTLS denial message likely could confuse the user.
+  When input stream for curl is stdin and input stream is not a file but
+  generated by a script then curl can truncate data transfer to arbitrary
+  size since a partial packet is treated as end of transfer by TFTP.
   
-  Closes https://github.com/curl/curl/pull/1203
+  Fixes #857
 
-- smtp: Fix STARTTLS denied error message
+- mk-ca-bundle.pl: -m keeps ca cert meta data in output
   
-  - Format the numeric denial code as an integer instead of a character.
-
-Daniel Stenberg (11 Jan 2017)
-- http2_send: avoid unsigned integer wrap around
+  Makes the script pass on comments holding meta data to the output
+  file. Like fingerprinters, issuer, date ranges etc.
   
-  ... when checking for a too large request.
-
-Jay Satiro (9 Jan 2017)
-- [Jiri Malak brought this change]
+  Closes #937
 
-  cmake: Fix passing _WINSOCKAPI_ macro to compiler
+- multi: make Curl_expire() work with 0 ms timeouts
   
-  Define _WINSOCKAPI_ blank rather than to 1 in order to match the value
-  used by Microsoft's winsock header files.
+  Previously, passing a timeout of zero to Curl_expire() was a magic code
+  for clearing all timeouts for the handle. That is now instead made with
+  the new Curl_expire_clear() function and thus a 0 timeout is fine to set
+  and will trigger a timeout ASAP.
   
-  Closes https://github.com/curl/curl/pull/1195
+  This will help removing short delays, in particular notable when doing
+  HTTP/2.
 
-Daniel Stenberg (9 Jan 2017)
-- sws: retry send() on EWOULDBLOCK
+- transfer: return without select when the read loop reached maxcount
   
-  Fixes spurious test 1060 and 1061 failures on OpenBSD, Solaris and more.
+  Regression added in 790d6de48515. The was then added to avoid one
+  particular transfer to starve out others. But when aborting due to
+  reading the maxcount, the connection must be marked to be read from
+  again without first doing a select as for some protocols (like SFTP/SCP)
+  the data may already have been read off the socket.
   
-  Bug: https://curl.haxx.se/mail/lib-2017-01/0009.html
-  Reported-by: Christian Weisgerber
+  Reported-by: Dan Donahue
+  Bug: https://curl.haxx.se/mail/lib-2016-07/0057.html
 
-- RELEASE-NOTES: synced with a41e8592d6b3e58
+Steve Holme (3 Aug 2016)
+- [Bill Nagel brought this change]
 
-- examples: make the C++ examples follow our code style too
-  
-  At least mostly, not counting // comments.
+  mbedtls: Added support for NTLM
 
-- [Aulddays brought this change]
+Daniel Stenberg (3 Aug 2016)
+- [Sergei Nikulov brought this change]
 
-  asiohiper: improved socket handling
-  
-  libcurl requires CURLMOPT_SOCKETFUNCTION to KEEP watching socket events
-  and notify back. Modify event_cb() to continue watching events when
-  fired.
+  travis: removed option to rebuild autotool from source
   
-  Fixes #1191
-  Closes #1192
-  Fixed-by: Mingliang Zhu
+  Fixes #943
 
-- [Jiří Malák brought this change]
+- bump: start working toward 7.50.2
 
-  lib506: fix build for Open Watcom
-  
-  Rename symbol lock to locks to not clash with OW CRTL function name.
-  
-  Closes #1196
+Version 7.50.1 (3 Aug 2016)
 
-- ROADMAP: 2017 cleanup
-  
-  Removed items already fixed, clarified a few others.
+Daniel Stenberg (3 Aug 2016)
+- THANKS: 7 new contributors from the 7.50.1 release
 
-- COPYING: update the generic copyright year range
+- RELEASE-NOTES: 7.50.1
 
-- docs/silent: mention --show-error in --silent description
+- TLS: only reuse connections with the same client cert
   
-  Reported in #1190
-  Reported-by: Dan Jacobson
+  CVE-2016-5420
+  Bug: https://curl.haxx.se/docs/adv_20160803B.html
 
-- docs/page-header: mention how to disable the progress meter
-  
-  curl.1 is regenerated
+- TLS: switch off SSL session id when client cert is used
   
-  Fixes #1190
-
-Dan Fandrich (7 Jan 2017)
-- wolfssl: display negotiated SSL version and cipher
-
-- wolfssl: support setting cipher list
-
-Patrick Monnerat (6 Jan 2017)
-- CIPHERS.md: document GSKit ciphers
-
-Jay Satiro (5 Jan 2017)
-- [peterpih brought this change]
-
-  TheArtOfHttpScripting: grammar
+  CVE-2016-5419
+  Bug: https://curl.haxx.se/docs/adv_20160803A.html
+  Reported-by: Bru Rom
+  Contributions-by: Eric Rescorla and Ray Satiro
 
-Nick Zitzmann (3 Jan 2017)
-- darwinssl: --insecure overrides --cacert if both settings are in use
+- curl_multi_cleanup: clear connection pointer for easy handles
   
-  Fixes #1184
+  CVE-2016-5421
+  Bug: https://curl.haxx.se/docs/adv_20160803C.html
+  Reported-by: Marcelo Echeverria and Fernando Muñoz
 
-Jay Satiro (2 Jan 2017)
-- docs/libcurl: TCP_KEEPALIVE start and interval default to 60
+- KNOWN_BUGS: SOCKS proxy not working via IPv6
   
-  Since the TCP keep-alive options were added in 705f0f7 the start and
-  interval default values have been 60, but that wasn't documented.
+  Closes #835
+
+- KNOWN_BUGS: CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
   
-  Bug: https://curl.haxx.se/mail/lib-2017-01/0000.html
-  Reported-by: Praveen Pvs
+  Closes #768
 
-Daniel Stenberg (29 Dec 2016)
-- curl.h: CURLE_FUNCTION_NOT_FOUND is no longer in use
+- KNOWN_BUGS: transfer-encoding: chunked in HTTP/2
   
-  This error code was once introduced when some library was dynamically
-  loaded and a funciton within said library couldn't be found.
+  Closes #662
 
-- content_encoding: change return code on a failure
+- TODO: Provide cmake config-file
   
-  Failure to decompress is now a write error instead of the weird
-  "function not found".
+  Closes #885
+
+Patrick Monnerat (2 Aug 2016)
+- os400: define BUILDING_LIBCURL in make script.
 
-- page-footer: error 36 is protocol agnostic!
+Daniel Stenberg (1 Aug 2016)
+- RELEASE-NOTES: synced with aa9f536a18b
+
+Jay Satiro (1 Aug 2016)
+- [Thomas Glanzmann brought this change]
 
-Jay Satiro (28 Dec 2016)
-- tool_operate: Fix --remote-time incorrect times on Windows
+  mbedtls: Fix debug function name
   
-  - Use Windows API SetFileTime to set the file time instead of utime.
+  This patch is necessary so that curl compiles if MBEDTLS_DEBUG is
+  defined.
   
-  Avoid utime on Windows if possible because it may apply a daylight
-  saving time offset to our UTC file time.
+  Bug: https://curl.haxx.se/mail/lib-2016-08/0001.html
+
+Daniel Stenberg (1 Aug 2016)
+- [Sergei Nikulov brought this change]
+
+  travis: fix OSX build by re-installing libtool
   
-  Bug: https://curl.haxx.se/mail/archive-2016-11/0033.html
-  Reported-by: Tim
+  Apparently due to a broken homebrew install
   
-  Closes https://github.com/curl/curl/pull/1121
+  fixes #934
+  Closes #939
 
-Daniel Stenberg (29 Dec 2016)
-- [Max Khon brought this change]
+- [Martin Vejnár brought this change]
 
-  digest_sspi: copy terminating NUL as well
+  win32: fix a potential memory leak in Curl_load_library
   
-  Curl_auth_decode_digest_http_message(): copy terminating NUL as later
-  Curl_override_sspi_http_realm() expects a NUL-terminated string.
+  If a call to GetSystemDirectory fails, the `path` pointer that was
+  previously allocated would be leaked. This makes sure that `path` is
+  always freed.
   
-  Fixes #1180
+  Closes #938
 
-- curl_formadd.3: CURLFORM_CONTENTSLENGTH not needed when chunked
+- include: revert 9adf3c4 and make public types void * again
   
-  Mentioned in #1013
-
-- [Kyselgov E.N brought this change]
-
-  cmake: use crypt32.lib when building with OpenSSL on windows
+  Many applications assume the actual contents of the public types and use
+  that do for example forward declarations (saving them from including our
+  public header) which then breaks when we switch from void * to a struct
+  *.
   
-  Reviewed-by: Peter Wu
-  Closes #1149
-  Fixes #1147
-
-- [Chris Araman brought this change]
-
-  darwinssl: fix CFArrayRef leak
+  I'm not convinced we were wrong, but since this practise seems
+  widespread enough I'm willing to (partly) step down.
   
-  Reviewed-by: Nick Zitzmann
-  Closes #1173
-
-- [Chris Araman brought this change]
-
-  darwinssl: fix iOS build
+  Now libcurl uses the struct itself when it is built and it allows
+  applications to use the struct type if CURL_STRICTER is defined at the
+  time of the #include.
   
-  Reviewed-by: Nick Zitzmann
-  Fixes #1172
+  Reported-by: Peter Frühberger
+  Fixes #926
+
+Jay Satiro (28 Jul 2016)
+- [Yonggang Luo brought this change]
 
-- curl: remove superfluous include file
+  cmake: Fix for schannel support
   
-  The <netinet/tcp.h> is a leftover from the past when TCP socket options
-  were set in this file. This include causes build issues on AIX 4.3.
+  The check_library_exists_concat do not check crypt32 library properly.
+  So include it directly.
   
-  Reported-by: Kim Minjoong
+  Bug: https://github.com/curl/curl/pull/917
+  Reported-by: Yonggang Luo
   
-  Closes #1178
-
-- RELEASE-NOTES: synced with a7b38c9dc98481e
+  Bug: https://github.com/curl/curl/issues/935
+  Reported-by: Alain Danteny
 
-- vtls: s/SSLEAY/OPENSSL
+- Revert "travis: Install libtool for OS X builds"
   
-  Fixed an old leftover use of the USE_SSLEAY define which would make a
-  socket get removed from the applications sockets to monitor when the
-  multi_socket API was used, leading to timeouts.
+  Didn't work.
   
-  Bug: #1174
+  This reverts commit 50723585ed380744358de054e2a55dccee65dfd7.
 
-- docs/ciphers: link to our own new page about ciphers
+- travis: Install libtool for OS X builds
   
-  ... as the former ones always go stale!
+  CI is failing due to missing libtoolize, so I'm trying this.
+
+Daniel Stenberg (26 Jul 2016)
+- [Viktor Szakats brought this change]
 
-- cmdline-opts/page-footer: add three more exit codes
+  TODO: minor typo in last commit
   
-  ... and regenerated curl.1
+  merged #931
 
-- formdata: use NULL, not 0, when returning pointers
+- TODO: Timeout idle connections from the pool
 
-- ftp: failure to resolve proxy should return that error code
+Patrick Monnerat (25 Jul 2016)
+- os400: minimum supported OS version: V6R1M0.
+  Do not log compilation informational messages.
 
-- configure: accept --with-libidn2 instead
-  
-  ... which the help text already implied since we switched to libidn2
-  from libidn in commit 9c91ec778104ae3b back in October 2016.
+Jay Satiro (24 Jul 2016)
+- tests: Fix for http/2 feature
   
-  Reported-by: Christian Weisgerber
-  Bug: https://curl.haxx.se/mail/lib-2016-12/0110.html
+  Bug: https://curl.haxx.se/mail/lib-2016-07/0070.html
+  Reported-by: Paul Howarth
 
-- test1282: verify the ftp-gss check
+Steve Holme (23 Jul 2016)
+- README: Mention wolfSSL in the 'Dependencies' section
 
-- ftp-gss: check for init before use
-  
-  To avoid dereferencing a NULL pointer.
+- vauth.h: No need to query HAVE_GSSAPI || USE_WINDOWS_SSPI for SPNEGO
   
-  Reported-by: Daniel Romero
+  As SPNEGO is only defined when these pre-processor variables are defined
+  there is no need to query them explicitly.
 
-Jay Satiro (24 Dec 2016)
-- build-wolfssl: Sync config with wolfSSL 3.10
-  
-  wolfSSL configure script relevant changes from 3.9 to 3.10:
+- spnego: Corrected miss-placed * in Curl_auth_spnego_cleanup() declaration
   
-  - DES3 no longer enabled by default
-  - Shamir no longer enabled by default
-  - Extended master secret enabled by default
-  - RSA and ECC timing protections enabled by default
+  Typo introduced in commit ad5e9bfd5d.
+
+Daniel Stenberg (22 Jul 2016)
+- SECURITY: mention how to get windows-specific CVEs
   
-  For backwards compatibility I enabled DES3 and ECC shamir config options
-  (ie no change from 3.9), and the other changes are included.
+  ... and make the distros link a proper link
 
-- cyassl: use time_t instead of long for timeout
+Dan Fandrich (21 Jul 2016)
+- test558: fix test by stripping file paths from FD lines
 
-Daniel Stenberg (23 Dec 2016)
-- bump: toward next release
+Kamil Dudka (21 Jul 2016)
+- tests: distribute the http2-server.pl script, too
 
-- http: remove "Curl_http_done: called premature" message
-  
-  ... it only confuses people.
+- docs: distribute the CURLINFO_HTTP_VERSION(3) man page, too
 
-- openssl-random: check return code when asking for random
-  
-  and fail appropriately if it returns error
+Daniel Stenberg (21 Jul 2016)
+- bump: start working on 7.50.1
 
-- gnutls-random: check return code for failed random
+Version 7.50.0 (21 Jul 2016)
 
-Version 7.52.1 (22 Dec 2016)
+Daniel Stenberg (21 Jul 2016)
+- RELEASE-NOTES: version 7.50.0 ready
 
-Daniel Stenberg (22 Dec 2016)
-- RELEASE-NOTES: curl 7.52.1
+- THANKS: 13 new contributors from the 7.50.0 release
 
-- lib557.c: use a shorter MAXIMIZE representation
+Jay Satiro (21 Jul 2016)
+- winbuild: fix embedded manifest option
   
-  Since several compilers had problems with the previous one
+  Embedded manifest option didn't work due to typo.
   
-  Reported-by: Ray Satiro
-  Bug: https://curl.haxx.se/mail/lib-2016-12/0098.html
+  Reported-by: Stefan Kanthak
 
-- runtests: remove the valgrind parser
+- vauth: Fix memleak by freeing credentials if out of memory
   
-  Old legacy parsing that 1) hid problems for us and 2) probably isn't
-  needed anymore.
-
-- [Kamil Dudka brought this change]
+  This is a follow up to the parent commit dcdd4be which fixes one leak
+  but creates another by failing to free the credentials handle if out of
+  memory. Also there's a second location a few lines down where we fail to
+  do same. This commit fixes both of those issues.
 
-  randit: store the value in the buffer
+Daniel Stenberg (20 Jul 2016)
+- [Saurav Babu brought this change]
 
-- tests/Makefile: run checksrc on debug builds
+  vauth: Fixed memory leak due to function returning without free
   
-  ... just like we already do in src/ and lib/
+  This patch allocates memory to "output_token" only when it is required
+  so that memory is not leaked if function returns.
 
-- lib557: move the "enable LONGLINE" to allow more long lines
+- test558: updated after ipv6-check move
   
-  This file is riddled with them...
-
-- bump: toward next release
+  Follow-up commit to c50980807c5 to make this test pass.
 
-Marcel Raad (21 Dec 2016)
-- lib: fix MSVC compiler warnings
+Jay Satiro (20 Jul 2016)
+- connect: disable TFO on Linux when using SSL
+  
+  - Linux TFO + TLS is not implemented yet.
   
-  Visual C++ complained:
-  warning C4267: '=': conversion from 'size_t' to 'long', possible loss of data
-  warning C4701: potentially uninitialized local variable 'path' used
+  Bug: https://github.com/curl/curl/issues/907
 
-Version 7.52.0 (20 Dec 2016)
+Daniel Stenberg (19 Jul 2016)
+- ROADMAP: QUIC and TLS 1.3
 
-Daniel Stenberg (20 Dec 2016)
-- THANKS: 13 new contributors from 7.52.0
+- RELEASE-NOTES: synced with c50980807c5
 
-- RELEASE-NOTES: 7.52.0
+Jay Satiro (18 Jul 2016)
+- [Brian Prodoehl brought this change]
 
-- ssh: inhibit coverity warning with (void)
+  curl_global_init: Check if IPv6 works
   
-  CID 1397391 (#1 of 1): Unchecked return value (CHECKED_RETURN)
-
-- Curl_recv_has_postponed_data: silence compiler warnings
+  - Curl_ipv6works() is not thread-safe until after the first call, so
+  call it once during global init to avoid a possible race condition.
   
-  Follow-up to d00f2a8f2
+  Bug: https://github.com/curl/curl/issues/915
+  PR: https://github.com/curl/curl/pull/918
 
-Jay Satiro (19 Dec 2016)
-- tests: checksrc compliance
+- [Timothy Polich brought this change]
 
-- http_proxy: Fix proxy CONNECT hang on pending data
-  
-  - Check for pending data before waiting on the socket.
+  CURLMOPT_SOCKETFUNCTION.3: fix typo
   
-  Bug: https://github.com/curl/curl/issues/1156
-  Reported-by: Adam Langley
+  Closes https://github.com/curl/curl/pull/914
 
-Daniel Stenberg (19 Dec 2016)
-- cmdline-opts/tlsv1.d: rephrased
-
-- [Dan McNulty brought this change]
-
-  schannel: fix wildcard cert name validation on Win CE
-  
-  Fixes a few issues in manual wildcard cert name validation in
-  schannel support code for Win32 CE:
-  - when comparing the wildcard name to the hostname, the wildcard
-    character was removed from the cert name and the hostname
-    was checked to see if it ended with the modified cert name.
-    This allowed cert names like *.com to match the connection
-    hostname. This violates recommendations from RFC 6125.
-  - when the wildcard name in the certificate is longer than the
-    connection hostname, a buffer overread of the connection
-    hostname buffer would occur during the comparison of the
-    certificate name and the connection hostname.
+- [Miroslav Franc brought this change]
 
-- printf: fix floating point buffer overflow issues
+  library: Fix memory leaks found during static analysis
   
-  ... and add a bunch of floating point printf tests
-
-- config-amigaos.h: (embarrassed) made the line shorter
-
-- config-amigaos.h: fix bug report email reference
-
-- RELEASE-NOTES: synced with 4517158abfeba
+  Closes https://github.com/curl/curl/pull/913
 
-- CIPHERS.md: backtick the names to show underscores fine
+- [Viktor Szakats brought this change]
 
-- form-string.d: fix format mistake
-  
-  and regenerated curl.1
+  cookie.c: Fix misleading indentation
   
-  Reported-by: Gisle Vanem
-
-Michael Kaufmann (18 Dec 2016)
-- openssl: simplify expression in Curl_ossl_version
+  Closes https://github.com/curl/curl/pull/911
 
-- curl_easy_recv: Improve documentation and example program
-  
-  Follow-up to 82245ea: Fix the example program sendrecv.c (handle
-  CURLE_AGAIN, handle incomplete send). Improve the documentation
-  for curl_easy_recv() and curl_easy_send().
+- FAQ: Update FTP directory listing section for MLSD command
   
-  Reviewed-by: Frank Meier
-  Assisted-by: Jay Satiro
+  Explain how some FTP servers support the machine readable listing
+  format MLSD from RFC 3659 and compare it to LIST.
   
-  See https://github.com/curl/curl/pull/1134
-
-- [Isaac Boukris brought this change]
+  Ref: https://github.com/curl/curl/issues/906
 
-  Curl_getconnectinfo: avoid checking if the connection is closed
-  
-  It doesn't benefit us much as the connection could get closed at
-  any time, and also by checking we lose the ability to determine
-  if the socket was closed by reading zero bytes.
-  
-  Reported-by: Michael Kaufmann
-  
-  Closes https://github.com/curl/curl/pull/1134
+Daniel Stenberg (1 Jul 2016)
+- [Sergei Nikulov brought this change]
 
-Daniel Stenberg (18 Dec 2016)
-- CIPHERS.md: attempt to document TLS cipher names
+  Appveyor: Updates for options - CURL_STATICLIB/BUILD_TESTING
   
-  As the official docs seems really hard to keep track of and link to over
-  time
-
-- curl.1: generated after 6cce4dbf830
+  Closes #892
 
-- cmdline-opts/post30X.d: fix the RFC references
+- TODO: 17.4 also brings more HTTP/2 support
 
-- curl.1: regenerated
+- TODO: try next proxy if one doesn't work
   
-  Fixed trailing whitespace and numerous formatting glitches
-
-- cmdline-opts: formatting fixes
-
-- curl_easy_setopt.3: removed CURLOPT_SOCKS_PROXYTYPE
-
-- tool_getparam.c: make comments use the up-to-date option names
+  Closes #896
 
-- manpage-scan.pl: allow deprecated options to get removed from curl.1
+- conn: don't free easy handle data in handler->disconnect
   
-  --krb4, --ftp-ssl and --ftp-ssl-reqd no longer need to be documented in the
-  man page
-
-- cmdline-opts/gen.pl: trim off trailing spaces
-
-- cmdline-opts/proxy-tlsuser.d: remove trailing .d
-
-- curl_easy_setopt.3: CURLOPT_PRE_PROXY instead of CURLOPT_SOCKS_PROXY
+  Reported-by: Gou Lingfeng
+  Bug: https://curl.haxx.se/mail/lib-2016-06/0139.html
 
-- symbols: removed two, added one
+- test1244: test different proxy ports same URL
 
-- cmdline-opts: include the man page split up files in the dist
+- curl_global_init.3: improved formatting of the flags
 
-- curl.1: generated with gen.pl
-  
-  This is the first time we replace the manually edited curt.1 with the
-  generated one created by gen.pl and the individual option documentation
-  pages.
-  
-  Do not edit this file, edit the individual pages and regenerate this
-  output.
+- curl_global_init.3: expand on the SSL and WIN32 bits purpose
   
-  This file will be generated by the build system soon and then removed
-  from git.
-
-- cmdline-opts: added some missing info
-
-- CURLINFO_SSL_VERIFYRESULT.3: language
-
-- HTTPS-PROXY docs: update/polish
+  Reported-by: Richard Gray
+  Bug: https://curl.haxx.se/mail/lib-2016-06/0136.html
 
-- cmdline-opts/page-header: mention it is generated
-  
-  ... to avoid people from trying to edit the pending curl.1 version that
-  gets generated by gen.pl
+- [Michael Kaufmann brought this change]
 
-- preproxy: renamed what was added as SOCKS_PROXY
+  cleanup: minor code cleanup in Curl_http_readwrite_headers()
   
-  CURLOPT_SOCKS_PROXY -> CURLOPT_PRE_PROXY
+  - the expression of an 'if' was always true
+  - a 'while' contained a condition that was always true
+  - use 'if(k->exp100 > EXP100_SEND_DATA)' instead of 'if(k->exp100)'
+  - fixed a typo
   
-  Added the corresponding --preroxy command line option. Sets a SOCKS
-  proxy to connect to _before_ connecting to a HTTP(S) proxy.
+  Closes #889
 
-- curl: normal socks proxies still use CURLOPT_PROXY
-  
-  ... the newly introduced CURLOPT_SOCKS_PROXY is special and should be
-  asked for specially. (Needs new code.)
+- SFTP: set a generic error when no SFTP one exists...
   
-  Unified proxy type to a single variable in the config struct.
-
-- CURLOPT_SOCKS_PROXYTYPE: removed
+  ... as otherwise we could get a 0 which would count as no error and we'd
+  wrongly continue and could end up segfaulting.
   
-  This was added as part of the SOCKS+HTTPS proxy merge but there's no
-  need to support this as we prefer to have the protocol specified as a
-  prefix instead.
+  Bug: https://curl.haxx.se/mail/lib-2016-06/0052.html
+  Reported-by: 暖和的和暖
 
-- curl_multi_socket.3: fix typo
+- ROADMAP: http2 tests are merged, mention http2 perf
 
-- checksrc: warn for assignments within if() expressions
+- docs/README.md: to render nicer pages on github
   
-  ... they're already frowned upon in our source code style guide, this
-  now enforces the rule harder.
+  ... as previously the README.cmake would be picked and put at the bottom
+  of the docs page there and it wasn't very representative!
 
-- checksrc: stricter no-space-before-paren enforcement
+- README.md: change host name for the svg logo
+  
+  rawgit.com asks to use the domain cdn.rawgit.com for production
   
-  In order to make the code style more uniform everywhere
+  See #900
 
-- ISSUE_TEMPLATE: try mentioning known bugs/todo in new issue template
+- [Viktor Szakats brought this change]
 
-- RELEASE-NOTES: synced with 71a55534fa6
+  README.md: use the SVG logo
 
-- [Adam Langley brought this change]
+- README.md: logo on top!
 
-  openssl: don't use OpenSSL's ERR_PACK.
-  
-  ERR_PACK is an internal detail of OpenSSL. Also, when using it, a
-  function name must be specified which is overly specific: the test will
-  break whenever OpenSSL internally change things so that a different
-  function creates the error.
+- KNOWN_BUGS: 3.4 POP3 expects "CRLF.CRLF" eob for some
   
-  Closes #1157
+  Closes #740
 
-Dan Fandrich (5 Dec 2016)
-- test2032: Mark test as flaky
+- RELEASE-NOTES: synced with d61c80515aa8
 
-Jay Satiro (3 Dec 2016)
-- [Jeremy Pearson brought this change]
+- [Michael Osipov brought this change]
 
-  libcurl-multi.3: typo
+  acinclude.m4: improve autodetection of CA bundle on FreeBSD
   
-  Closes https://github.com/curl/curl/pull/1153
-
-Dan Fandrich (2 Dec 2016)
-- test1281: added http as a required feature
-
-Daniel Stenberg (2 Dec 2016)
-- curl: support zero-length argument strings in config files
+  The FreeBSD Port security/ca_root_nss installs the Mozilla NSS CA bundle
+  to /usr/local/share/certs/ca-root-nss.crt. Use this bundle in the
+  discovery process.
   
-  ... like 'user-agent = ""'
+  This change also removes the former FreeBSD path that has been obsolete
+  for 8 years since this FreeBSD ports commit:
+  https://svnweb.freebsd.org/ports/head/security/?view=revision&revision=215953
   
-  Adjusted test 71 to verify.
+  Closes #894
 
-- http_proxy: simplify CONNECT response reading
+- configure: don't specify .lib for libs on windows
   
-  Since it now reads responses one byte a time, a loop could be removed
-  and it is no longer limited to get the whole response within 16K, it is
-  now instead only limited to 16K maximum header line lengths.
+  Another follow up for crypt32.lib linking with winssl
 
-- tests: fix CONNECT test cases to be more strict
+- configure: fix winssl LIBS change typo
   
-  ... as they broke with the cleaned up CONNECT handling
+  follow-up from 120bf29e
 
-- CONNECT: read responses one byte at a time
-  
-  ... so that it doesn't read data that is actually coming from the
-  remote. 2xx responses have no body from the proxy, that data is from the
-  peer.
-  
-  Fixes #1132
+- TODO: "TCP Fast Open" is done, add monitor pool connections
 
-- CONNECT: reject TE or CL in 2xx responses
-  
-  A server MUST NOT send any Transfer-Encoding or Content-Length header
-  fields in a 2xx (Successful) response to CONNECT. (RFC 7231 section
-  4.3.6)
+- configure: add crypt32.lib for winssl builds
   
-  Also fixes the three test cases that did this.
+  Necessary since 6cabd78531f
 
-- URL parser: reject non-numerical port numbers
+- Makefile.vc: link with crypt32.lib for winssl builds
   
-  Test 1281 added to verify
-
-Dan Fandrich (30 Nov 2016)
-- runtests: made Servers: output be more consistent by removing OFF
+  Necessary since 6cabd78531f
+  
+  Fixes #853
 
-- cyassl: fixed typo introduced in 4f8b1774
+- [Joel Depooter brought this change]
 
-Michael Kaufmann (30 Nov 2016)
-- CURLOPT_CONNECT_TO: Skip non-matching "connect-to" entries properly
-  
-  If a port number in a "connect-to" entry does not match, skip this
-  entry instead of connecting to port 0.
-  
-  If a port number in a "connect-to" entry matches, use this entry
-  and look no further.
+  VC: Add crypt32.lib to Visual Sudio project template files
   
-  Reported-by: Jay Satiro
-  Assisted-by: Jay Satiro, Daniel Stenberg
+  Closes #854
+
+- vc: fix the build for schannel certinfo support
   
-  Closes #1148
+  Broken since 6cabd785, which adds use of the Curl_extract_certinfo
+  function from the x509asn1.c file.
 
-Daniel Stenberg (29 Nov 2016)
-- BUGS: describe bug handling process
+- typedefs: use the full structs in internal code...
+  
+  ... and save the typedef'ed names for headers and external APIs.
 
-- RELEASE-NOTES: synced with 19613fb3
+- internals: rename the SessionHandle struct to Curl_easy
 
-Jay Satiro (28 Nov 2016)
-- http2: check nghttp2_session_set_local_window_size exists
+- headers: forward declare CURL, CURLM and CURLSH as structs
   
-  The function only exists since nghttp2 1.12.0.
+  Instead of typedef'ing to void, typedef to their corresponding actual
+  struct names to allow compilers to type-check.
   
-  Bug: https://github.com/curl/curl/commit/a4d8888#commitcomment-19985676
-  Reported-by: Michael Kaufmann
-
-Daniel Stenberg (28 Nov 2016)
-- [Anders Bakken brought this change]
+  Assisted-by: Reinhard Max
 
-  http2: Fix crashes when parent stream gets aborted
+Jay Satiro (22 Jun 2016)
+- vtls: Only call add/getsession if session id is enabled
   
-  Closes #1125
-
-- cmdline-docs: more options converted and fixed
+  Prior to this change we called Curl_ssl_getsessionid and
+  Curl_ssl_addsessionid regardless of whether session ID reusing was
+  enabled. According to comments that is in case session ID reuse was
+  disabled but then later enabled.
   
-  Now all options are in the new system.
+  The old way was not intuitive and probably not something users expected.
+  When a user disables session ID caching I'd guess they don't expect the
+  session ID to be cached anyway in case the caching is later enabled.
 
-- gen: include footer in mainpage output
+Daniel Stenberg (22 Jun 2016)
+- curl.1: the used progress meter suffix is k in lower case
+  
+  Closes #883
 
-Jay Satiro (28 Nov 2016)
-- lib1536: checksrc compliance
+- [Sergei Nikulov brought this change]
 
-Daniel Stenberg (28 Nov 2016)
-- cmdline-opts: more command line options documented
+  cmake: now using BUILD_TESTING=ON/OFF
   
-  Moved over to the new format
-
-- curl: remove --proxy-ssl* options
+  CMake build now using BUILD_TESTING=ON/OFF (default is OFF) to build
+  tests and enabling CTest integration. Options BUILD_CURL_TESTS and
+  BUILD_DASHBOARD_REPORTS was removed.
   
-  There's mostly likely no need to allow setting SSLv2/3 version for HTTPS
-  proxy. Those protocols are insecure by design and deprecated.
-
-- CURLOPT_PROXY_*.3: polished some proxy option man pages
-
-Patrick Monnerat (26 Nov 2016)
-- os400: support CURLOPT_PROXY_PINNEDPUBLICKEY
+  Closes #882
   
-  Also define it in ILE/RPG binding.
+  Reviewed-by: Brad King
 
-Daniel Stenberg (26 Nov 2016)
-- [Okhin Vasilij brought this change]
+- [Michael Kaufmann brought this change]
 
-  curl_version_info: add CURL_VERSION_HTTPS_PROXY
+  cleanup: fix method names in code comments
   
-  Closes #1142
-
-- [Frank Gevaerts brought this change]
+  Closes #887
 
-  tests: Add some testcases for recent new features.
+Kamil Dudka (21 Jun 2016)
+- curl-compilers.m4: improve detection of GCC's -fvisibility= flag
   
-  Add missing tests for CURLINFO_SCHEME, CURLINFO_PROTOCOL, %{scheme},
-  and %{http_version}
+  Some builds of GCC produce output on both stdout and stderr when --help
+  --verbose is used.  The 2>&1 redirection caused them to be arbitrarily
+  interleaved with each other because of stream buffering.  Consequently,
+  grep failed to match the fvisibility= string in the mixed output, even
+  though the string was present in GCC's standard output.
   
-  closes #1143
+  This led to silently disabling symbol hiding in some builds of curl.
 
-- [Frank Gevaerts brought this change]
+Daniel Stenberg (19 Jun 2016)
+- tests: fix the HTTP/2 tests
+  
+  The HTTP/2 tests brought with commit bf05606ef1f were using the internal
+  name 'http2' for the HTTP/2 server, while in fact that name was already
+  used for the second instance of the HTTP server. This made tests using
+  the second instance (like test 2050) fail after a HTTP/2 test had run.
+  
+  The server is now known as HTTP/2 internally and within the <server>
+  section in test cases. 1700, 1701 and 1702 were updated accordingly.
 
-  curl_easy_reset: clear info for CULRINFO_PROTOCOL and CURLINFO_SCHEME
+- openssl: use more 'const' to fix build warnings with 1.1.0 branch
 
-- CURLOPT_PROXY_CAINFO.3: clarify proxy use
+- curl.1: missed 'T' in the progress unit suffixes
 
-- CURLOPT_PROXY_CRLFILE.3: clarify https proxy and availability
+- curl.1: mention the unix for the progress meter
 
-- curl_easy_setopt.3: add CURLOPT_PROXY_PINNEDPUBLICKEY
-  
-  Follow-up to 4f8b17743d7c55a
+Patrick Monnerat (16 Jun 2016)
+- os400: add new definitions to ILE/RPG binding.
 
-- docs: include all opts man pages in dist
+Daniel Stenberg (16 Jun 2016)
+- openssl: fix cert check with non-DNS name fields present
   
-  Sorted the lists too.
+  Regression introduced in 5f5b62635 (released in 7.48.0)
   
-  ... and include the new ones in the PDF and HTML generation targets
-
-- [Thomas Glanzmann brought this change]
-
-  HTTPS Proxy: Implement CURLOPT_PROXY_PINNEDPUBLICKEY
+  Reported-by: Fabian Ruff
+  Fixes #875
 
-- [Thomas Glanzmann brought this change]
+Dan Fandrich (16 Jun 2016)
+- axtls: Use Curl_wait_ms instead of the less-portable usleep
 
-  url: proxy: Use 443 as default port for https proxies
+- axtls: Fixed compile after compile 31c521b0
 
-- TODO: removed "HTTPS proxy"
+- tests: Added HTTP proxy keywords to tests 1141 & 1142
 
-- [Jan-E brought this change]
+Jay Satiro (15 Jun 2016)
+- [Sergei Nikulov brought this change]
 
-  winbuild: add config option ENABLE_NGHTTP2
+  cmake: Fix build with winldap
   
-  Closes #1141
+  Bug: https://github.com/curl/curl/pull/874
+  Reported-by: Sergei Nikulov
 
-Jay Satiro (24 Nov 2016)
-- tool_urlglob: Improve sanity check in glob_range
+- CURLOPT_POSTFIELDS.3: Clarify what happens when set empty
   
-  Prior to this change we depended on errno if strtol could not perform a
-  conversion. POSIX says EINVAL *may* be set. Some implementations like
-  Microsoft's will not set it if there's no conversion.
+  When CURLOPT_POSTFIELDS is set to an empty string libcurl will send a
+  zero-byte POST. Prior to this change it was documented as sending data
+  from the read callback.
   
-  Ref: https://github.com/curl/curl/commit/ee4f7660#commitcomment-19658189
-
-- tool_help: Change description for --retry-connrefused
+  This also changes the wording of what happens when empty or NULL so that
+  it's hopefully easier to understand for people whose primary language
+  isn't English.
   
-  Ref: https://github.com/curl/curl/pull/1064#issuecomment-260052409
-
-Patrick Monnerat (25 Nov 2016)
-- os400: sync ILE/RPG binding
+  Bug: https://github.com/curl/curl/issues/862
+  Reported-by: Askar Safin
 
-Jay Satiro (24 Nov 2016)
-- test1135: Fix curl_easy_duphandle prototype for code style
-  
-  Follow-up to dbadaeb which changed the style.
+- [Michael Wallner brought this change]
 
-- x509asn1: Restore the parameter check in Curl_getASN1Element
+  curl_multi_socket_action.3: Fix rewording
   
-  - Restore the removed parts of the parameter check.
+  - Remove some erroneous text.
   
-  Follow-up to 945f60e which altered the parameter check.
-
-Daniel Stenberg (25 Nov 2016)
-- RELEASE-NOTES: update option counters
+  Closes https://github.com/curl/curl/pull/865
 
-- [Frank Gevaerts brought this change]
+- [Luo Jinghua brought this change]
 
-  add CURLINFO_SCHEME, CURLINFO_PROTOCOL, and %{scheme}
-  
-  Adds access to the effectively used protocol/scheme to both libcurl and
-  curl, both in string and numeric (CURLPROTO_*) form.
+  resolve: enable protocol family logic for synthesized IPv6
   
-  Note that the string form will be uppercase, as it is just the internal
-  string.
+  - Enable protocol family logic for IPv6 resolves even when support
+  for synthesized addresses is enabled.
   
-  As these strings are declared internally as const, and all other strings
-  returned by curl_easy_getinfo() are de-facto const as well, string
-  handling in getinfo.c got const-ified.
+  This is a follow up to the parent commit that added support for
+  synthesized IPv6 addresses from IPv4 on iOS/OS X. The protocol family
+  logic needed for IPv6 was inadvertently excluded if support for
+  synthesized addresses was enabled.
   
-  Closes #1137
-
-- RELEASE-NOTES: synced with 63198a4750aeb
-
-- curl.1: the new --proxy options ship in 7.52.0
-
-- checksrc: move open braces to comply with function declaration style
-
-- checksrc: detect wrongly placed open braces in func declarations
+  Bug: https://github.com/curl/curl/issues/863
+  Ref: https://github.com/curl/curl/pull/866
+  Ref: https://github.com/curl/curl/pull/867
 
-- checksrc: white space edits to comply to stricter checksrc
+Daniel Stenberg (7 Jun 2016)
+- [Luo Jinghua brought this change]
 
-- checksrc: verify ASTERISKNOSPACE
+  resolve: add support for IPv6 DNS64/NAT64 Networks on OS X + iOS
   
-  Detects (char*) and 'char*foo' uses.
-
-- checksrc: code style: use 'char *name' style
-
-- checksrc: add ASTERISKSPACE
+  Use getaddrinfo() to resolve the IPv4 address literal on iOS/Mac OS X.
+  If the current network interface doesn’t support IPv4, but supports
+  IPv6, NAT64, and DNS64.
   
-  Verifies a 'char *name' style, with no space after the asterisk.
+  Closes #866
+  Fixes #863
 
-- openssl: remove dead code
+- tests: two more HTTP/2 tests
   
-  Coverity CID 1394666
-
-- [Okhin Vasilij brought this change]
+  1701 and 1702
 
-  HTTPS-proxy: fixed mbedtls and polishing
+- runtests: don't display logs when http2 server fails to start
 
-- darwinssl: adopted to the HTTPS proxy changes
+- runtests: make stripfile work on stdout as well
   
-  It builds and runs all test cases. No adaptations for actual HTTPS proxy
-  support has been made.
+  ... and have test 1700 use that to strip out the nghttpx server: headers
 
-- gtls: fix indent to silence compiler warning
+- http2-tests: test1700 is the first real HTTP/2 test
   
-  vtls/gtls.c: In function ‘Curl_gtls_data_pending’:
-  vtls/gtls.c:1429:3: error: this ‘if’ clause does not guard... [-Werror=misleading-indentation]
-     if(conn->proxy_ssl[connindex].session &&
-        ^~
-        vtls/gtls.c:1433:5: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’
-             return res;
-
-- [Thomas Glanzmann brought this change]
-
-  mbedtls: Fix compile errors
-
-- [Alex Rousskov brought this change]
-
-  proxy: Support HTTPS proxy and SOCKS+HTTP(s)
-  
-  * HTTPS proxies:
-  
-  An HTTPS proxy receives all transactions over an SSL/TLS connection.
-  Once a secure connection with the proxy is established, the user agent
-  uses the proxy as usual, including sending CONNECT requests to instruct
-  the proxy to establish a [usually secure] TCP tunnel with an origin
-  server. HTTPS proxies protect nearly all aspects of user-proxy
-  communications as opposed to HTTP proxies that receive all requests
-  (including CONNECT requests) in vulnerable clear text.
+  It requires that 'nghttpx' is in the PATH, and it will run the tests
+  using nghttpx as a front-end proxy in front of the standard HTTP/1 test
+  server. This uses HTTP/2 over plain TCP.
   
-  With HTTPS proxies, it is possible to have two concurrent _nested_
-  SSL/TLS sessions: the "outer" one between the user agent and the proxy
-  and the "inner" one between the user agent and the origin server
-  (through the proxy). This change adds supports for such nested sessions
-  as well.
+  If you like me have nghttpx installed in a custom path, you can run test 1700
+  like this:
   
-  A secure connection with a proxy requires its own set of the usual SSL
-  options (their actual descriptions differ and need polishing, see TODO):
+  $ PATH=$PATH:$HOME/build-nghttp2/bin/ ./runtests.pl 1700
+
+- RELEASE-NOTES: synced with 34855feeb4c299
+
+Steve Holme (6 Jun 2016)
+- schannel: Disable ALPN on Windows < 8.1
   
-    --proxy-cacert FILE        CA certificate to verify peer against
-    --proxy-capath DIR         CA directory to verify peer against
-    --proxy-cert CERT[:PASSWD] Client certificate file and password
-    --proxy-cert-type TYPE     Certificate file type (DER/PEM/ENG)
-    --proxy-ciphers LIST       SSL ciphers to use
-    --proxy-crlfile FILE       Get a CRL list in PEM format from the file
-    --proxy-insecure           Allow connections to proxies with bad certs
-    --proxy-key KEY            Private key file name
-    --proxy-key-type TYPE      Private key file type (DER/PEM/ENG)
-    --proxy-pass PASS          Pass phrase for the private key
-    --proxy-ssl-allow-beast    Allow security flaw to improve interop
-    --proxy-sslv2              Use SSLv2
-    --proxy-sslv3              Use SSLv3
-    --proxy-tlsv1              Use TLSv1
-    --proxy-tlsuser USER       TLS username
-    --proxy-tlspassword STRING TLS password
-    --proxy-tlsauthtype STRING TLS authentication type (default SRP)
+  Calling QueryContextAttributes with SECPKG_ATTR_APPLICATION_PROTOCOL
+  fails on Windows < 8.1 so we need to disable ALPN on these OS versions.
   
-  All --proxy-foo options are independent from their --foo counterparts,
-  except --proxy-crlfile which defaults to --crlfile and --proxy-capath
-  which defaults to --capath.
+  Inspiration provide by: Daniel Seither
   
-  Curl now also supports %{proxy_ssl_verify_result} --write-out variable,
-  similar to the existing %{ssl_verify_result} variable.
+  Closes #848
+  Fixes #840
+
+Jay Satiro (5 Jun 2016)
+- checksrc: Add LoadLibrary to the banned functions list
   
-  Supported backends: OpenSSL, GnuTLS, and NSS.
+  LoadLibrary was supplanted by Curl_load_library for security
+  reasons in 6df916d.
+
+- http: Fix HTTP/2 connection reuse
   
-  * A SOCKS proxy + HTTP/HTTPS proxy combination:
+  - Change the parser to not require a minor version for HTTP/2.
   
-  If both --socks* and --proxy options are given, Curl first connects to
-  the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS
-  proxy.
+  HTTP/2 connection reuse broke when we changed from HTTP/2.0 to HTTP/2
+  in 8243a95 because the parser still expected a minor version.
   
-  TODO: Update documentation for the new APIs and --proxy-* options.
-  Look for "Added in 7.XXX" marks.
-
-Patrick Monnerat (24 Nov 2016)
-- Declare endian read functions argument as a const pointer.
-  This is done for all functions of the form Curl_read[136][624]_[lb]e.
-
-- Limit ASN.1 structure sizes to 256K. Prevent some allocation size overflows.
-  See CRL-01-006.
+  Bug: https://github.com/curl/curl/issues/855
+  Reported-by: Andrew Robbins, Frank Gevaerts
 
-Jay Satiro (22 Nov 2016)
-- url: Fix conn reuse for local ports and interfaces
+Steve Holme (4 Jun 2016)
+- connect.c: Fixed compilation warning from commit 332e8d6164
   
-  - Fix connection reuse for when the proposed new conn 'needle' has a
-  specified local port but does not have a specified device interface.
+  connect.c:952:5: warning: suggest explicit braces to avoid ambiguous 'else'
+
+- win32: Used centralised verify windows version function
   
-  Bug: https://curl.haxx.se/mail/lib-2016-11/0137.html
-  Reported-by: bjt3[at]hotmail.com
+  Closes #845
 
-Daniel Stenberg (21 Nov 2016)
-- rand: pass in number of randoms as an unsigned argument
+- win32: Added verify windows version functionality
 
-Jay Satiro (20 Nov 2016)
-- rand: Fix potentially uninitialized result warning
+- win32: Introduced centralised verify windows version function
 
-Marcel Raad (19 Nov 2016)
-- vtls: fix build warnings
-  
-  Fix warnings about conversions from long to time_t in openssl.c and
-  schannel.c.
+Kamil Dudka (3 Jun 2016)
+- tool_urlglob: fix off-by-one error in glob_parse()
   
-  Follow-up to de4de4e3c7c
-
-Daniel Stenberg (18 Nov 2016)
-- [Marcel Raad brought this change]
-
-  lib: fix compiler warnings after de4de4e3c7c
+  ... causing SIGSEGV while parsing URL with too many globs.
+  Minimal example:
   
-  Visual C++ now complains about implicitly casting time_t (64-bit) to
-  long (32-bit). Fix this by changing some variables from long to time_t,
-  or explicitly casting to long where the public interface would be
-  affected.
+  $ curl $(for i in $(seq 101); do printf '{a}'; done)
   
-  Closes #1131
+  Reported-by: Romain Coltel
+  Bug: https://bugzilla.redhat.com/1340757
 
-Peter Wu (17 Nov 2016)
-- [Isaac Boukris brought this change]
+Daniel Stenberg (1 Jun 2016)
+- [Benjamin Kircher brought this change]
 
-  Don't mix unix domain sockets with regular ones
+  libcurl-multi.3: fix small typo
   
-  When reusing a connection, make sure the unix domain
-  socket option matches.
+  Closes #850
 
-Jay Satiro (17 Nov 2016)
-- tests: Fix HTTP2-Settings header for huge window size
-  
-  Follow-up to a4d8888. Changing the window size in that commit resulted
-  in a different HTTP2-Settings upgrade header, causing test 1800 to fail.
+- [Viktor Szakats brought this change]
 
-- http2: Use huge HTTP/2 windows
+  makefile.m32: add crypt32 for winssl builds
   
-  - Improve performance by using a huge HTTP/2 window size.
+  Dependency added by 6cabd78
   
-  Bug: https://github.com/curl/curl/issues/1102
-  Reported-by: afrind@users.noreply.github.com
-  Assisted-by: Tatsuhiro Tsujikawa
+  Closes #849
 
-Daniel Stenberg (16 Nov 2016)
-- cmdline-docs: more conversion
+- [Ivan Avdeev brought this change]
 
-- gen: support 'protos'
+  vtls: fix ssl session cache race condition
   
-  and warn on unrecognized lines
-
-- gen: support 'single' to make an individual page man page
-
-- cmdline-docs: more options converted over
-
-- gen: support 'redirect'
+  Sessionid cache management is inseparable from managing individual
+  session lifetimes. E.g. for reference-counted sessions (like those in
+  SChannel and OpenSSL engines) every session addition and removal
+  should be accompanied with refcount increment and decrement
+  respectively. Failing to do so synchronously leads to a race condition
+  that causes symptoms like use-after-free and memory corruption.
+  This commit:
+   - makes existing session cache locking explicit, thus allowing
+     individual engines to manage lock's scope.
+   - fixes OpenSSL and SChannel engines by putting refcount management
+     inside this lock's scope in relevant places.
+   - adds these explicit locking calls to other engines that use
+     sessionid cache to accommodate for this change. Note, however,
+     that it is unknown whether any of these engines could also have
+     this race.
   
-  ... and warn for too long --help lines
+  Bug: https://github.com/curl/curl/issues/815
+  Fixes #815
+  Closes #847
 
-- cmdline/gen: replace options in texts better
+- [Andrew Kurushin brought this change]
 
-Jay Satiro (16 Nov 2016)
-- http2: Fix address sanitizer memcpy warning
-  
-  - In Curl_http2_switched don't call memcpy when src is NULL.
-  
-  Curl_http2_switched can be called like:
-  
-  Curl_http2_switched(conn, NULL, 0);
-  
-  .. and prior to this change memcpy was then called like:
-  
-  memcpy(dest, NULL, 0)
-  
-  .. causing address sanitizer to warn:
+  schannel: add CURLOPT_CERTINFO support
   
-  http2.c:2057:3: runtime error: null pointer passed as argument 2, which
-  is declared to never be null
-
-- tool_help: Clarify --dump-header only writes received headers
-
-- curl.1: Clarify --dump-header only writes received headers
-
-Daniel Stenberg (15 Nov 2016)
-- [Alex Chan brought this change]
-
-  docs: Spelling fixes
-
-Kamil Dudka (15 Nov 2016)
-- docs: the next release will be 7.52.0
-
-Daniel Stenberg (15 Nov 2016)
-- cmdline-opts: support generating the --help output
+  Closes #822
 
-- [David Schweikert brought this change]
+- RELEASE-NOTES: synced with 142ee9fa15002315
 
-  darwinssl: fix SSL client certificate not found on MacOS Sierra
-  
-  Reviewed-by: Nick Zitzmann
+- openssl: rename the private SSL_strerror
   
-  Closes #1105
+  ... to make it not look like an OpenSSL function
 
-- curl: add --fail-early to help output
-  
-  Fixes test 1139 failures
-  
-  Follow-up to f82bbe01c8835
+- [Michael Kaufmann brought this change]
 
-- glob: fix [a-c] globbing regression
-  
-  Brought in ee4f76606cf
-  
-  Added test case 1280 to verify
-  
-  Reported-by: Dave Reisner
+  openssl: Use correct buffer sizes for error messages
   
-  Bug: https://github.com/curl/curl/commit/ee4f76606cfa4ee068bf28edd37c8dae7e8db317#commitcomment-19823146
+  Closes #844
 
-- curl: add --fail-early
+- curl: fix -q [regression]
   
-  Exit with an error on the first transfer error instead of continuing to
-  do the rest of the URLs.
+  This broke in 7.49.0 with commit e200034425a7625
   
-  Discussion: https://curl.haxx.se/mail/archive-2016-11/0038.html
+  Fixes #842
 
-- Curl_rand: fixed and moved to rand.c
-  
-  Now Curl_rand() is made to fail if it cannot get the necessary random
-  level.
-  
-  Changed the proto of Curl_rand() slightly to provide a number of ints at
-  once.
-  
-  Moved out from vtls, since it isn't a TLS function and vtls provides
-  Curl_ssl_random() for this to use.
+- URL parser: allow URLs to use one, two or three slashes
   
-  Discussion: https://curl.haxx.se/mail/lib-2016-11/0119.html
-
-- cmdline-opts: first test version of a new man page generator kit
+  Mostly in order to support broken web sites that redirect to broken URLs
+  that are accepted by browsers.
   
-  See MANPAGE.md for the description of how this works. Each command line
-  option is now described in a separate .d file.
-
-- time_t fix: follow-up to de4de4e3c7c
+  Browsers are typically even more leniant than this as the WHATWG URL
+  spec they should allow an _infinite_ amount. I tested 8000 slashes with
+  Firefox and it just worked.
   
-  Blah, I accidentally wrote size_t instead of time_t for two variables.
+  Added test case 1141, 1142 and 1143 to verify the new parser.
   
-  Reported-by: Dave Reisner
+  Closes #791
 
-- timeval: prefer time_t to hold seconds instead of long
-  
-  ... as long is still 32bit on modern 64bit windows machines, while
-  time_t is generally 64bit.
+- [Renaud Lehoux brought this change]
 
-Dan Fandrich (12 Nov 2016)
-- tests: fixed variable might be clobbered warning
+  cmake: Added missing mbedTLS support
   
-  This stops the compiler from potentially making invalid assumptions
-  about the immutability of sdp and sap across the longjmp boundary.
+  Closes #837
 
-Daniel Stenberg (12 Nov 2016)
-- RELEASE-NOTES: synced with 346340808c
+- [Renaud Lehoux brought this change]
 
-- URL-parser: for file://[host]/ URLs, the [host] must be localhost
-  
-  Previously, the [host] part was just ignored which made libcurl accept
-  strange URLs misleading users. like "file://etc/passwd" which might've
-  looked like it refers to "/etc/passwd" but is just "/passwd" since the
-  "etc" is an ignored host name.
+  mbedtls: removed unused variables
   
-  Reported-by: Mike Crowe
-  Assisted-by: Kamil Dudka
-
-- test558: adapt to 0649433da
+  Closes #838
 
-- openssl: make sure to fail in the unlikely event that PRNG seeding fails
+- [Frank Gevaerts brought this change]
 
-- openssl: avoid unnecessary seeding if already done
+  http: add CURLINFO_HTTP_VERSION and %{http_version}
   
-  1.1.0+ does more of this by itself so we can avoid extra processing this
-  way.
-
-- openssl: RAND_status always exists in OpenSSL >= 0.9.7
+  Adds access to the effectively used http version to both libcurl and
+  curl.
   
-  and remove RAND_screen from configure since nothing is using that
-  function
-
-- Curl_pgrsUpdate: use dedicated function for time passed
+  Closes #799
 
-- realloc: use Curl_saferealloc to avoid common mistakes
-  
-  Discussed: https://curl.haxx.se/mail/lib-2016-11/0087.html
+- bump: start the journey toward 7.50.0
 
-- [Daniel Hwang brought this change]
+- [Marcel Raad brought this change]
 
-  curl: Add --retry-connrefused
+  openssl: fix build with OPENSSL_NO_COMP
   
-  to consider ECONNREFUSED as a transient error.
+  With OPENSSL_NO_COMP defined, there is no function
+  SSL_COMP_free_compression_methods
   
-  Closes #1064
+  Closes #836
 
-- openssl: raise the max_version to 1.3 if asked for
-  
-  Now I've managed to negotiate TLS 1.3 with https://enabled.tls13.com/ when
-  using boringssl.
+- [Gisle Vanem brought this change]
 
-Jay Satiro (9 Nov 2016)
-- vtls: Fail on unrecognized param for CURLOPT_SSLVERSION
-  
-  - Fix GnuTLS code for CURL_SSLVERSION_TLSv1_2 that broke when the
-  TLS 1.3 support was added in 6ad3add.
-  
-  - Homogenize across code for all backends the error message when TLS 1.3
-  is not available to "<backend>: TLS 1.3 is not yet supported".
-  
-  - Return an error when a user-specified ssl version is unrecognized.
-  
-  ---
-  
-  Prior to this change our code for some of the backends used the
-  'default' label in the switch statement (ie ver unrecognized) for
-  ssl.version and treated it the same as CURL_SSLVERSION_DEFAULT.
+  memdebug: fix MSVC crash with -DMEMDEBUG_LOG_SYNC
   
-  Bug: https://curl.haxx.se/mail/lib-2016-11/0048.html
-  Reported-by: Kamil Dudka
+  Fixes #828
 
-Daniel Stenberg (9 Nov 2016)
-- [Isaac Boukris brought this change]
+- [Jonathan brought this change]
 
-  SPNEGO: Fix memory leak when authentication fails
-  
-  If SPNEGO fails, cleanup the negotiate handle right away.
-  
-  Fixes #1115
+  README.md: polish
   
-  Signed-off-by: Isaac Boukris <iboukris@gmail.com>
-  Reported-by: ashman-p
+  Closes #834
 
-- CODE_STYLE.md: link to INTERNALS.md correctly
+- RELEASE-NOTES: fix vuln link
 
-- bump: next version will be 7.52.0
+Version 7.49.1 (30 May 2016)
 
-- RELEASE-NOTES: synced with dfcdaaba371e9a3
+Daniel Stenberg (30 May 2016)
+- RELEASE-NOTES: 7.49.1
 
-- examples/fileupload.c: fclose the file as well
+- [Steve Holme brought this change]
 
-- printf: fix ".*f" handling
-  
-  It would always use precision 1 instead of reading it from the argument
-  list as intended.
+  loadlibrary: Only load system DLLs from the system directory
   
-  Reported-by: Ray Satiro
+  Inspiration provided by: Daniel Stenberg and Ray Satiro
   
-  Bug: #1113
-
-- curl_formadd.3: *_FILECONTENT and *_FILE need the file to be kept
+  Bug: https://curl.haxx.se/docs/adv_20160530.html
   
-  Reported-by: Frank Gevaerts
+  Ref: Windows DLL hijacking with curl, CVE-2016-4802
 
-Kamil Dudka (7 Nov 2016)
-- nss: silence warning 'SSL_NEXT_PROTO_EARLY_VALUE not handled in switch'
-  
-  ... with nss-3.26.0 and newer
-  
-  Reported-by: Daniel Stenberg
+- ssh: fix version number check typo
 
-Daniel Stenberg (7 Nov 2016)
-- openssl: initial TLS 1.3 adaptions
+Jay Satiro (29 May 2016)
+- curl_share_setopt.3: Add min ver needed for ssl session lock
   
-  BoringSSL supports TLSv1.3 already, but these changes don't seem to be anough
-  to get it working.
+  Bug: https://github.com/curl/curl/issues/826
+  Reported-by: Michael Wallner
 
-- ssh: check md5 fingerprints case insensitively (regression)
+Daniel Stenberg (29 May 2016)
+- ssh: fix build for libssh2 before 1.2.6
   
-  Revert the change from ce8d09483eea but use the new function
+  The statvfs functionality was added to libssh2 in that version, so we
+  switch off that functionality when built with older libraries.
   
-  Reported-by: Kamil Dudka
-  Bug: https://github.com/curl/curl/commit/ce8d09483eea2fcb1b50e323e1a8ed1f3613b2e3#commitcomment-19666146
+  Fixes #831
 
-Kamil Dudka (7 Nov 2016)
-- curl: introduce the --tlsv1.3 option to force TLS 1.3
+- mbedtls: fix includes so snprintf() works
   
-  Fully implemented with the NSS backend only for now.
+  Regression from the previous *printf() rearrangements, this file missed to
+  include the correct header to make sure snprintf() works universally.
   
-  Reviewed-by: Ray Satiro
+  Reported-by: Moti Avrahami
+  Bug: https://curl.haxx.se/mail/lib-2016-05/0196.html
 
-- vtls: support TLS 1.3 via CURL_SSLVERSION_TLSv1_3
-  
-  Fully implemented with the NSS backend only for now.
+Steve Holme (23 May 2016)
+- checksrc.pl: Added variants of strcat() & strncat() to banned function list
   
-  Reviewed-by: Ray Satiro
+  Added support for checking the tchar, unicode and mbcs variants of
+  strcat() and strncat() in the banned function list.
 
-- nss: map CURL_SSLVERSION_DEFAULT to NSS default
-  
-  ... but make sure we use at least TLSv1.0 according to libcurl API
-  
-  Reported-by: Cure53
-  Reviewed-by: Ray Satiro
+Daniel Stenberg (23 May 2016)
+- smtp: minor ident (white space) fixes
 
-Daniel Stenberg (7 Nov 2016)
-- s/cURL/curl
+- THANKS: updated after script fixes
   
-  We're mostly saying just "curl" in lower case these days so here's a big
-  cleanup to adapt to this reality. A few instances are left as the
-  project could still formally be considered called cURL.
+  Now giving credit properly to github user names, fixed some UTF-8 issues
+  and added names discovered when contrithanks was improved.
 
-Jay Satiro (7 Nov 2016)
-- [Tatsuhiro Tsujikawa brought this change]
+- THANKS-filter: more name cleanups
 
-  http2: Don't send header fields prohibited by HTTP/2 spec
-  
-  Previously, we just ignored "Connection" header field.  But HTTP/2
-  specification actually prohibits few more header fields.  This commit
-  ignores all of them so that we don't send these bad header fields.
-  
-  Bug: https://curl.haxx.se/mail/archive-2016-10/0033.html
-  Reported-by: Ricki Hirner
-  
-  Closes https://github.com/curl/curl/pull/1092
+- contrithanks.sh: exclude existing names case insensitively
 
-Daniel Stenberg (7 Nov 2016)
-- curl.1: explain the SMTP data expected for -T
-  
-  Fixes #1107
-  
-  Reported-by: Adam Piggott
+- contrithanks.sh: use same grep pattern and -a flag as contributors.sh
 
-Peter Wu (6 Nov 2016)
-- cmake: disable poll for macOS
-  
-  Mirrors the autotools behavior introduced with curl-7_50_3-83-ga34c7ce.
-  
-  Fixes #1089
+- contributors.sh: better grep pattern, use grep -a
+
+- THANKS-filter: fix more names
 
-Jay Satiro (5 Nov 2016)
-- easy: Initialize info variables on easy init and duphandle
+- contrithanks.sh: do the same github fix as contributors.sh
   
-  - Call Curl_initinfo on init and duphandle.
+  from 1577bfa35ba
+
+Jay Satiro (23 May 2016)
+- contributors: Show GitHub username if real name unknown
   
-  Prior to this change the statistical and informational variables were
-  simply zeroed by calloc on easy init and duphandle. While zero is the
-  correct default value for almost all info variables, there is one where
-  it isn't (filetime initializes to -1).
+  Prior to this change if a GitHub contributor's real name was unknown
+  they would be omitted from the list.
   
-  Bug: https://github.com/curl/curl/issues/1103
-  Reported-by: Neal Poole
+  Bug: https://github.com/curl/curl/issues/824
 
-Daniel Stenberg (5 Nov 2016)
-- [Mauro Rappa brought this change]
+Daniel Stenberg (21 May 2016)
+- RELEASE-NOTES: synced with 3caaeffbe8ded4
 
-  curl -w: added more decimal digits to timing counters
+Jay Satiro (20 May 2016)
+- openssl: cleanup must free compression methods
   
-  Now showing microsecond resolution.
+  - Free compression methods if OpenSSL 1.0.2 to avoid a memory leak.
   
-  Closes #1106
+  Bug: https://github.com/curl/curl/issues/817
+  Reported-by: jveazey@users.noreply.github.com
 
-Jakub Zakrzewski (4 Nov 2016)
-- dist: add CMakeLists.txt to the tarball
+Daniel Stenberg (20 May 2016)
+- [Gisle Vanem brought this change]
 
-Daniel Stenberg (4 Nov 2016)
-- mbedtls: fix build with mbedtls versions < 2.4.0
+  curl_multibyte: fix compiler error
   
-  Regression added in 62a8095e714
+  While compiling lib/curl_multibyte.c with '-DUSE_WIN32_IDN' etc. I was
+  getting:
   
-  Reported-by: Tony Kelman
+  f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2054: expected '('
+  to follow 'CURL_EXTERN'
   
-  Discussed in #1087
+  f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2085:
+  'curl_domalloc': not in formal parameter list
 
-- configure: verify that compiler groks -Werror=partial-availability
-  
-  Reported-by: bemoody
-  
-  Fixes #1104
+- THANKS-filter: make Jan-E get proper credit
 
-- docs: shorten and simplify the top comment in multi-uv.c
-  
-  and change URL to use https
+- [Jan-E brought this change]
 
-- [Andrei Sedoi brought this change]
+  winbuild/Makefile.vc: Fix check on SSL, MBEDTLS, WINSSL exclusivity
+  
+  Closes #818
 
-  docs: handle CURL_POLL_INOUT in multi-uv example
+- [Alexander Traud brought this change]
 
-- [Andrei Sedoi brought this change]
-
-  docs: multi-uv: don't use CURLMsg after cleanup
-
-- [Andrei Sedoi brought this change]
-
-  docs: remove unused variables in multi-uv example
+  libcurl.m4: Avoid obsolete warning
+  
+  Closes #821
 
-- bump: start working on 7.51.1
+Jay Satiro (20 May 2016)
+- [Michael Kaufmann brought this change]
 
-- winbuild: remove strcase.obj from curl build
+  CURLOPT_CONNECT_TO.3: user must not free the list prematurely
   
-  Reported-by: Bruce Stephens
+  The connect-to list isn't copied so as long as the handle may be used
+  for a transfer the list must be valid.
   
-  Fixes #1098
+  Bug: https://github.com/curl/curl/pull/819
+  Reported-by: Michael Kaufmann
+
+Daniel Stenberg (19 May 2016)
+- RELEASE-NOTES: synced with 48114a8634242c
 
-Dan Fandrich (2 Nov 2016)
-- msvc: removed a straggling reference to strequal.c
+- openssl: ERR_remove_thread_state() is deprecated in latest 1.1.0
   
-  Follow-up to 502acba2
+  See OpenSSL commit 21e001747d4a
 
-Version 7.51.0 (2 Nov 2016)
+- http2: use HTTP/2 in the HTTP/1.1-alike header
+  
+  ... when generating them, not "2.0" as the protocol is called just
+  HTTP/2 and nothing else.
 
-Daniel Stenberg (2 Nov 2016)
-- THANKS: synced with 7.51.0
+Jay Satiro (19 May 2016)
+- dist: include curl_multi_socket_all.3
+  
+  Closes https://github.com/curl/curl/pull/816
 
-- RELEASE-NOTES: 7.51.0
+Steve Holme (18 May 2016)
+- bump: Start work on 7.49.1
 
-- ftp_done: don't clobber the passed in error code
+Daniel Stenberg (18 May 2016)
+- curlbuild.h.dist: check __LP64__ as well to fix MIPS build
   
-  Coverity CID 1374359 pointed out the unused result value.
-
-- ftp: remove dead code in ftp_done
+  The preprocessor check that sets up the 32bit defines for non-configure
+  builds didn't work properly for MIPS systems as __mips__ is defined for
+  both 32bit and 64bit. Now __LP64__ is also checked and indicates 64bit.
   
-  Coverity CID 1374358
+  Reported-by: Tomas Jakobsson
+  Fixes #813
 
-Jay Satiro (1 Nov 2016)
-- generate.bat: Include include/curl in libcurl VS projects
-  
-  .. because including those headers helps Visual Studio's Intellisense.
+- [Marcel Raad brought this change]
 
-- generate.bat: Remove strcase.[ch] from curl tool VS projects
+  schannel: fix compile break with MSVC XP toolset
   
-  ..because they're no longer needed in the tool build. strcase is still
-  built by the libcurl project and exports curl_str(n)equal which is used
-  by the curl tool.
+  For the Windows XP toolset of Visual C++ 2013/2015, the old Windows SDK
+  7.1 is used. In this case, _USING_V110_SDK71_ is defined.
   
-  Bug: https://github.com/curl/curl/commit/9363f1a#all_commit_comments
+  Closes #812
 
-Daniel Stenberg (2 Nov 2016)
-- metalink: simplify the hex parsing function
+- dist: include CHECKSRC.md
   
-  ... and now it avoids using the libcurl toupper() function
+  Reported-by: Paul Howarth
+  Bug: https://curl.haxx.se/mail/lib-2016-05/0116.html
 
-Michael Kaufmann (1 Nov 2016)
-- file: fix compiler warning
+- test/Makefile.am: include manpage-scan.pl and nroff-scan.pl in dist
   
-  follow-up to 46133aa5
+  Reported-by: Ray Satiro
+  Bug: https://curl.haxx.se/mail/lib-2016-05/0113.html
 
-Dan Fandrich (1 Nov 2016)
-- strcase: fixed Metalink builds by redefining checkprefix()
-  
-  ...to use the public function curl_strnequal(). This isn't ideal because
-  it adds extra overhead to any internal calls to checkprefix.
-  
-  follow-up to 95bd2b3e
+Version 7.49.0 (17 May 2016)
 
-Daniel Stenberg (1 Nov 2016)
-- curl.1: typo
+Daniel Stenberg (17 May 2016)
+- THANKS: 24 new names from 7.49.0 release notes
 
-- curl.1: expand on how multiple uses of -o looks
-  
-  Suggested-by: Dan Jacobson
-  Issue: https://github.com/curl/curl/issues/1097
+- RELEASE-NOTES: 7.49.0
 
-- tests/util: get a private strncasecompare clone
+- mbedtls/polarssl: set "hostname" unconditionally
   
-  ... since the curlx_* code no longer provides one and we don't link
-  libcurl to these test servers.
-
-- strcase: make the tool use curl_str[n]equal instead
+  ...as otherwise the TLS libs will skip the CN/SAN check and just allow
+  connection to any server. curl previously skipped this function when SNI
+  wasn't used or when connecting to an IP address specified host.
   
-  As they are after all part of the public API. Saves space and reduces
-  complexity. Remove the strcase defines from the curlx_ family.
+  CVE-2016-3739
   
-  Suggested-by: Dan Fandrich
-  Idea: https://curl.haxx.se/mail/lib-2016-10/0136.html
+  Bug: https://curl.haxx.se/docs/adv_20160518A.html
+  Reported-by: Moti Avrahami
 
-Kamil Dudka (31 Oct 2016)
-- gskit, nss: do not include strequal.h
-  
-  follow-up to 811a693b80
+- [Frank Gevaerts brought this change]
 
-Dan Fandrich (31 Oct 2016)
-- strcasecompare: include curl.h in strcase.c
+  CURLOPT_RESOLVE.3: fix typo
   
-  This should fix the "warning: 'curl_strequal' redeclared without
-  dllimport attribute: previous dllimport ignored" message and subsequent
-  link error on Windows because of the missing CURL_EXTERN on the
-  prototype.
+  Closes #811
 
-Daniel Stenberg (31 Oct 2016)
-- strcase: fix the remaining rawstr users
+- docs: CURLOPT_RESOLVE overrides CURLOPT_IPRESOLVE
 
-- msvc builds: s/rawstr/strcase
+- KNOWN_BUGS: GnuTLS backend skips really long certificate fields
   
-  Follow-up to 811a693b
+  Closes #762
 
-Dan Fandrich (31 Oct 2016)
-- strcasecompare: replaced remaining rawstr.h with strcase.h
-  
-  This is a followup to commit 811a693b
+- CURLOPT_HTTPPOST.3: the data needs to be around while in use
 
-Marcel Raad (31 Oct 2016)
-- digest_sspi: fix include
+- openssl: get_cert_chain: fix NULL dereference
   
-  Fix compile break from 811a693b80
+  CID 1361815: Explicit null dereferenced (FORWARD_NULL)
 
-Dan Fandrich (31 Oct 2016)
-- libauthretry: use the external function curl_strequal
+- openssl: get_cert_chain: avoid NULL dereference
   
-  The internal version strcasecompare isn't available outside libcurl
-
-Daniel Stenberg (31 Oct 2016)
-- RELEASE-NOTES: synced with d14538d2501ef0da
+  CID 1361811: Explicit null dereferenced (FORWARD_NULL)
 
-- configure: raise the default minimum version for macos to 10.8
+- dprintf_formatf: fix (false?) Coverity warning
   
-  follow-up to 4f8d0b6f02aa7043. Since the darwinssl code breaks
-  otherwise. If you build without darwinssl 10.5 works fine.
-
-- unit1301: keep testing curl_strequal
+  CID 1024412: Memory - illegal accesses (OVERRUN). Claimed to happen when
+  we run over 'workend' but the condition says <= workend and for all I
+  can see it should be safe. Compensating for the warning by adding a byte
+  margin in the buffer.
   
-  as that is still part of the API, fix from 8fe4bd084412f30
+  Also, removed the extra brace level indentation in the code and made it
+  so that 'workend' is only assigned once within the function.
 
-- ldap: fix include
-  
-  Fix bug from 811a693b80
+- RELEASE-NOTES: synced with 2dcb5adc72d6
 
-- url: remove unconditional idn2.h include
-  
-  Mistake brought by 9c91ec778104a
+- THANKS-filter: fixed Jonathan Cardoso
 
-- curl_strequal: part of public API/ABI, needs to be kept
+Jay Satiro (15 May 2016)
+- ftp: fix incorrect out-of-memory code in Curl_pretransfer
   
-  These two public functions have been mentioned as deprecated since a
-  very long time but since they are still part of the API and ABI we need
-  to keep them around.
-
-- strcase: s/strequal/strcasecompare
+  - Return value type must match function type.
   
-  some more follow-ups to 811a693b80
-
-- ldap: fix strcase use
+  s/CURLM_OUT_OF_MEMORY/CURLE_OUT_OF_MEMORY/
   
-  follow-up to 811a693b80
-
-- test165: adapted to the libidn2 use and IDNA2008 fix
+  Caught by Travis CI
 
-- cookie: replace use of fgets() with custom version
-  
-  ... that will ignore lines that are too long to fit in the buffer.
+Daniel Stenberg (15 May 2016)
+- ftp wildcard: segfault due to init only in multi_perform
   
-  CVE-2016-8615
+  The proper FTP wildcard init is now more properly done in Curl_pretransfer()
+  and the corresponding cleanup in Curl_close().
   
-  Bug: https://curl.haxx.se/docs/adv_20161102A.html
-  Reported-by: Cure53
-
-- strcasecompare: all case insensitive string compares ignore locale now
+  The previous place of init/cleanup code made the internal pointer to be NULL
+  when this feature was used with the multi_socket() API, as it was made within
+  the curl_multi_perform() function.
   
-  We had some confusions on when each function was used. We should not act
-  differently on different locales anyway.
+  Reported-by: Jonathan Cardoso Machado
+  Fixes #800
 
-- strcasecompare: is the new name for strequal()
+Jay Satiro (13 May 2016)
+- libcurl-tlibcurl-thread: Update OpenSSL links
   
-  ... to make it less likely that we forget that the function actually
-  does case insentive compares. Also replaced several invokes of the
-  function with a plain strcmp when case sensitivity is not an issue (like
-  comparing with "-").
+  Because the old OpenSSL link now redirects to their master documentation
+  (currently 1.1.0), which does not document the required actions for
+  OpenSSL <= 1.0.2.
 
-- ftp: check for previous patch must be case sensitive!
-  
-  ... otherwise example.com/PATH and example.com/path would be assumed to
-  be the same and they usually aren't!
+Daniel Stenberg (13 May 2016)
+- [Viktor Szakats brought this change]
 
-- SSH: check md5 fingerprint case sensitively
+  darwinssl.c: fix OS X codename typo in comment
 
-- connectionexists: use case sensitive user/password comparisons
-  
-  CVE-2016-8616
+- RELEASE-NOTES: synced with 68701e51c1f7
   
-  Bug: https://curl.haxx.se/docs/adv_20161102B.html
-  Reported-by: Cure53
+  Added 8 bug fixes and 5 more contrbutors
 
-- base64: check for integer overflow on large input
-  
-  CVE-2016-8617
-  
-  Bug: https://curl.haxx.se/docs/adv_20161102C.html
-  Reported-by: Cure53
+- [Jay Satiro brought this change]
 
-- krb5: avoid realloc(0)
+  mprintf: Fix processing of width and prec args
   
-  If the requested size is zero, bail out with error instead of doing a
-  realloc() that would cause a double-free: realloc(0) acts as a free()
-  and then there's a second free in the cleanup path.
+  Prior to this change a width arg could be erroneously output, and also
+  width and precision args could not be used together without crashing.
   
-  CVE-2016-8619
+  "%0*d%s", 2, 9, "foo"
   
-  Bug: https://curl.haxx.se/docs/adv_20161102E.html
-  Reported-by: Cure53
-
-- aprintf: detect wrap-around when growing allocation
+  Before: "092"
+  After: "09foo"
   
-  On 32bit systems we could otherwise wrap around after 2GB and allocate 0
-  bytes and crash.
+  "%*.*s", 5, 2, "foo"
   
-  CVE-2016-8618
+  Before: crash
+  After: "   fo"
   
-  Bug: https://curl.haxx.se/docs/adv_20161102D.html
-  Reported-by: Cure53
+  Test 557 is updated to verify this and more
+
+- [Michael Kaufmann brought this change]
 
-- range: reject char globs with missing end like '[L-]'
+  ConnectionExists: follow-up fix for proxy re-use
   
-  ... which previously would lead to out of boundary reads.
+  Follow-up commit to 5823179
   
-  Reported-by: Luật Nguyễn
+  Closes #648
 
-- glob_next_url: make sure to stay within the given output buffer
+- [Per Malmberg brought this change]
 
-- range: prevent negative end number in a glob range
+  darwinssl: fix certificate verification disable on OS X 10.8
   
-  CVE-2016-8620
+  The new way of disabling certificate verification doesn't work on
+  Mountain Lion (OS X 10.8) so we need to use the old way in that version
+  too. I've tested this solution on versions 10.7.5, 10.8, 10.9, 10.10.2
+  and 10.11.
   
-  Bug: https://curl.haxx.se/docs/adv_20161102F.html
-  Reported-by: Luật Nguyễn
+  Closes #802
+
+- [Cory Benfield brought this change]
 
-- parsedate: handle cut off numbers better
+  http2: Add space between colon and header value
   
-  ... and don't read outside of the given buffer!
+  curl's representation of HTTP/2 responses involves transforming the
+  response to a format that is similar to HTTP/1.1. Prior to this change,
+  curl would do this by separating header names and values with only a
+  colon, without introducing a space after the colon.
   
-  CVE-2016-8621
+  While this is technically a valid way to represent a HTTP/1.1 header
+  block, it is much more common to see a space following the colon. This
+  change introduces that space, to ensure that incautious tools are safely
+  able to parse the header block.
   
-  bug: https://curl.haxx.se/docs/adv_20161102G.html
-  Reported-by: Luật Nguyễn
-
-- escape: avoid using curl_easy_unescape() internally
+  This also ensures that the difference between the HTTP/1.1 and HTTP/2
+  response layout is as minimal as possible.
   
-  Since the internal Curl_urldecode() function has a better API.
+  Bug: https://github.com/curl/curl/issues/797
+  
+  Closes #798
+  Fixes #797
 
-- unescape: avoid integer overflow
+Kamil Dudka (12 May 2016)
+- openssl: fix compile-time warning in Curl_ossl_check_cxn()
   
-  CVE-2016-8622
+  ... introduced in curl-7_48_0-293-g2968c83:
   
-  Bug: https://curl.haxx.se/docs/adv_20161102H.html
-  Reported-by: Cure53
+  Error: COMPILER_WARNING:
+  lib/vtls/openssl.c: scope_hint: In function ‘Curl_ossl_check_cxn’
+  lib/vtls/openssl.c:767:15: warning: conversion to ‘int’ from ‘ssize_t’
+  may alter its value [-Wconversion]
 
-- cookies: getlist() now holds deep copies of all cookies
+Jay Satiro (11 May 2016)
+- openssl: stricter connection check function
   
-  Previously it only held references to them, which was reckless as the
-  thread lock was released so the cookies could get modified by other
-  handles that share the same cookie jar over the share interface.
+  - In the case of recv error, limit returning 'connection still in place'
+  to EINPROGRESS, EAGAIN and EWOULDBLOCK.
   
-  CVE-2016-8623
+  This is an improvement on the parent commit which changed the openssl
+  connection check to use recv MSG_PEEK instead of SSL_peek.
   
-  Bug: https://curl.haxx.se/docs/adv_20161102I.html
-  Reported-by: Cure53
+  Ref: https://github.com/curl/curl/commit/856baf5#comments
 
-- TODO: remove IDNA2008
+Daniel Stenberg (11 May 2016)
+- [Anders Bakken brought this change]
 
-- idn: switch to libidn2 use and IDNA2008 support
+  TLS: SSL_peek is not a const operation
+  
+  Calling SSL_peek can cause bytes to be read from the raw socket which in
+  turn can upset the select machinery that determines whether there's data
+  available on the socket.
+  
+  Since Curl_ossl_check_cxn only tries to determine whether the socket is
+  alive and doesn't actually need to see the bytes SSL_peek seems like
+  the wrong function to call.
   
-  CVE-2016-8625
+  We're able to occasionally reproduce a connect timeout due to this
+  bug. What happens is that Curl doesn't know to call SSL_connect again
+  after the peek happens since data is buffered in the SSL buffer and thus
+  select won't fire for this socket.
   
-  Bug: https://curl.haxx.se/docs/adv_20161102K.html
-  Reported-by: Christian Heimes
+  Closes #795
 
-- test1246: verify URL parsing with host name ending with '#'
+Jay Satiro (9 May 2016)
+- [Daniel Stenberg brought this change]
 
-- urlparse: accept '#' as end of host name
+  TLS: move the ALPN/NPN enable bits to the connection
   
-  'http://example.com#@127.0.0.1/x.txt' equals a request to example.com
-  for the '/' document with the rest of the URL being a fragment.
+  Only protocols that actually have a protocol registered for ALPN and NPN
+  should try to get that negotiated in the TLS handshake. That is only
+  HTTPS (well, http/1.1 and http/2) right now. Previously ALPN and NPN
+  would wrongly be used in all handshakes if libcurl was built with it
+  enabled.
   
-  CVE-2016-8624
+  Reported-by: Jay Satiro
   
-  Bug: https://curl.haxx.se/docs/adv_20161102J.html
-  Reported-by: Fernando Muñoz
+  Fixes #789
 
-Jay Satiro (31 Oct 2016)
-- INTERNALS: better markdown (follow-up)
-  
-  - Wrap more words with underscores in backticks.
-  
-  Follow-up to 13f4913.
+Daniel Stenberg (8 May 2016)
+- libcurl-thread.3: openssl 1.1.0 is safe, and so is boringssl
 
-Daniel Stenberg (30 Oct 2016)
-- INTERNALS: better markdown
-  
-  words with underscore need to be within `these`
-  
-  Bug: https://github.com/curl/curl-www/issues/19
-  Reported-by : Jay Satiro
+- [Antonio Larrosa brought this change]
 
-Jay Satiro (30 Oct 2016)
-- mk-ca-bundle.vbs: Fix UTF-8 output
-  
-  - Change initial message box to mention delay when downloading/parsing.
-  
-  Since there is no progress meter it was somewhat unexpected that after
-  choosing a filename nothing appears to happen, when actually the cert
-  data is in the process of being downloaded and parsed.
-  
-  - Warn if OpenSSL is not present.
-  
-  - Use a UTF-8 stream to make the ca-bundle data.
-  
-  - Save the UTF-8 ca-bundle stream as binary so that no BOM is added.
+  connect: fix invalid "Network is unreachable" errors
   
-  ---
+  Sometimes, in systems with both ipv4 and ipv6 addresses but where the
+  network doesn't support ipv6, Curl_is_connected returns an error
+  (intermittently) even if the ipv4 socket connects successfully.
   
-  This is a follow-up to d2c6d15 which switched mk-ca-bundle.vbs output to
-  ANSI due to corrupt UTF-8 output, now fixed.
+  This happens because there's a for-loop that iterates on the sockets but
+  the error variable is not resetted when the ipv4 is checked and is ok.
   
-  This change completes making the default certificate bundle output of
-  mk-ca-bundle.vbs as close as possible to that of mk-ca-bundle.pl, which
-  should make it easier to review any difference between their output.
+  This patch fixes this problem by setting error to 0 when checking the
+  second socket and not having a result yet.
   
-  Ref: https://github.com/curl/curl/pull/1012
+  Fixes #794
 
-Daniel Stenberg (28 Oct 2016)
-- BINDINGS: converted to markdown
-  
-  To make it render better on the web site, at the price of it becoming
-  slightly less readable as text.
+Jay Satiro (5 May 2016)
+- FAQ: refer to thread safety guidelines
 
-Jay Satiro (27 Oct 2016)
-- CURLMOPT_MAX_PIPELINE_LENGTH.3: Clarify it's not for HTTP/2
-  
-  - Clarify that this option is only for HTTP/1.1 pipelining.
-  
-  Bug: https://github.com/curl/curl/issues/1059
-  Reported-by: Jeroen Ooms
+Daniel Stenberg (3 May 2016)
+- connections: non-HTTP proxies on different ports aren't reused either
   
-  Assisted-by: Daniel Stenberg
-
-Daniel Stenberg (27 Oct 2016)
-- KNOWN_BUGS: HTTP/2 server push enabled when no pushes can be accepted
+  Reported-by: Oleg Pudeyev and fuchaoqun
   
-  Closes #927
+  Fixes #648
 
-- KNOWN_BUGS: c-ares deviates from stock resolver on http://1346569778
+- http: make sure a blank header overrides accept_decoding
   
-  Closes #893
+  Reported-by: rcanavan
+  Assisted-by: Isaac Boukris
+  Closes #785
 
-Michael Osipov (27 Oct 2016)
-- configure.in: Fix test syntax
-  
-  Some versions of test allow == for equality, but others (such as the HP-UX
-  version) do not.  Use a single = for correctness.
-  
-  Error output:
-  checking for monotonic clock_gettime... ./configure[20445]: ==: A test command parameter is not valid.
+- CHECKSRC.md: clarified, explained the whitelist file
 
-Daniel Stenberg (27 Oct 2016)
-- SECURITY: minor updates
-  
-  - we allow the security push up to 48 hours before the release
-  
-  - add a mention about possible pre-notifications
-  
-  - lower case the 'curl-security' title
+- nroff-scan.pl: verify that references are made with \fI
 
-- [Andrei Sedoi brought this change]
+- docs: unified man page references to use \fI
 
-  docs: fix req->data in multi-uv example
+- TODO: 17.14 --fail without --location should treat 3xx as a failure
   
-  Closes #1088
+  Closes #727
 
-- mbedtls: stop using deprecated include file
-  
-  Reported-by: wyattoday
-  Fixes #1087
+- RELEASE-NOTES: synced with 7987f5cb14d
 
-Kamil Dudka (25 Oct 2016)
-- [Martin Frodl brought this change]
+- [Isaac Boukris brought this change]
 
-  nss: fix tight loop in non-blocking TLS handhsake over proxy
+  CURLOPT_ACCEPT_ENCODING.3: Follow-up clarification
   
-  ... in case the handshake completes before entering
-  CURLM_STATE_PROTOCONNECT
+  Mention possible content-length mismatch with sum of bytes reported
+  by write callbacks when auto decoding is enabled.
   
-  Bug: https://bugzilla.redhat.com/1388162
+  See #785
 
-Jay Satiro (25 Oct 2016)
-- mk-ca-bundle: Update the vbscript version
-  
-  Bring the VBScript version more in line with the perl version:
-  
-  - Change timestamp to UTC.
-  
-  - Change URL retrieval to HTTPS-only by default.
-  
-  - Comment out the options that disabled SSL cert checking by default.
-  
-  - Assume OpenSSL is present, get SHA256. And add a flag to toggle it.
-  
-  - Fix cert issuer name output.
-  
-  The cert issuer output is now ansi, converted from UTF-8. Prior to this
-  it was corrupt UTF-8. It turns out though we can work with UTF-8 the
-  FSO object that writes ca-bundle can't write UTF-8, so there will have
-  to be some alternative if UTF-8 is needed (like an ADODB.Stream).
-  
-  - Disable the certificate text info feature.
-  
-  The certificate text info doesn't work properly with any recent OpenSSL.
-
-Daniel Stenberg (24 Oct 2016)
-- TODO: indent code to make it render properly
+- test1140: run nroff-scan to verify man pages
 
-- TODO: Remove the generated include file
+- nroff-scan.pl: verify the .BR references as well
 
-- TODO: add "--retry should resume"
-  
-  See #1084
+- CURLOPT_CONV_TO_NETWORK_FUNCTION.3: fix bad man page reference
 
-- mk-ca-bundle.1: document -k
-  
-  Brought in 1ad2bdcf110266c. Now does HTTPS by default and needs -k to
-  fall back to plain HTTP.
+- CURLOPT_BUFFERSIZE.3: fix reference to CURLOPT_MAX_RECV_SPEED_LARGE
 
-- [Jay Satiro brought this change]
+- curl_easy_pause.3: fix man page reference
 
-  mk-ca-bundle: Change URL retrieval to HTTPS-only by default
-  
-  - Change all predefined Mozilla URLs to HTTPS (Gregory Szorc).
-  
-  - New option -k to allow URLs other than HTTPS and enable HTTP fallback.
+Jay Satiro (1 May 2016)
+- tool_cb_hdr: Fix --remote-header-name with schemeless URL
   
-  Prior to this change the default URL retrieval mode was to fall back to
-  HTTP if HTTPS didn't work.
+  - Move the existing scheme check from tool_operate.
   
-  Reported-by: Gregory Szorc
+  In the case of --remote-header-name we want to parse Content-disposition
+  for a filename, but only if the scheme is http or https. A recent
+  adjustment 0dc4d8e was made to account for schemeless URLs however it's
+  not 100% accurate. To remedy that I've moved the scheme check to the
+  header callback, since at that point the library has already determined
+  the scheme.
   
-  Closes #1012
-
-- RELEASE-NOTES: synced with 50ee3aaf1a9b22d
-
-Dan Fandrich (23 Oct 2016)
-- INSTALL.md: Updated minimum file sizes for 7.50.3
+  Bug: https://github.com/curl/curl/issues/760
+  Reported-by: Kai Noda
 
-Daniel Stenberg (22 Oct 2016)
-- multi: force connections to get closed in close_all_connections
-  
-  Several independent reports on infinite loops hanging in the
-  close_all_connections() function when closing a multi handle, can be
-  fixed by first marking the connection to get closed before calling
-  Curl_disconnect.
+Daniel Stenberg (1 May 2016)
+- tls: make setting pinnedkey option fail if not supported
   
-  This is more fixing-the-symptom rather than the underlying problem
-  though.
+  to make it obvious to users trying to use the feature with TLS backends
+  not supporting it.
   
-  Bug: https://curl.haxx.se/mail/lib-2016-10/0011.html
-  Bug: https://curl.haxx.se/mail/lib-2016-10/0059.html
+  Discussed in #781
+  Reported-by: Travis Burtrum
+
+- nroff-scan.pl: verifies nroff pages
   
-  Reported-by: Dan Fandrich, Valentin David, Miloš Ljumović
+  ... not used by any test yet but can be used stand-alone.
 
-- [Anders Bakken brought this change]
+- opts: fix broken/bad references
 
-  curl_multi_remove_handle: fix a double-free
-  
-  In short the easy handle needs to be disconnected from its connection at
-  this point since the connection still is serving other easy handles.
-  
-  In our app we can reliably reproduce a crash in our http2 stress test
-  that is fixed by this change. I can't easily reproduce the same test in
-  a small example.
-  
-  This is the gdb/asan output:
-  
-  ==11785==ERROR: AddressSanitizer: heap-use-after-free on address 0xe9f4fb80 at pc 0x09f41f19 bp 0xf27be688 sp 0xf27be67c
-  READ of size 4 at 0xe9f4fb80 thread T13 (RESOURCE_HTTP)
-      #0 0x9f41f18 in curl_multi_remove_handle /path/to/source/3rdparty/curl/lib/multi.c:666
-  
-  0xe9f4fb80 is located 0 bytes inside of 1128-byte region [0xe9f4fb80,0xe9f4ffe8)
-  freed by thread T13 (RESOURCE_HTTP) here:
-      #0 0xf7b1b5c2 in __interceptor_free /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_malloc_linux.cc:45
-      #1 0x9f7862d in conn_free /path/to/source/3rdparty/curl/lib/url.c:2808
-      #2 0x9f78c6a in Curl_disconnect /path/to/source/3rdparty/curl/lib/url.c:2876
-      #3 0x9f41b09 in multi_done /path/to/source/3rdparty/curl/lib/multi.c:615
-      #4 0x9f48017 in multi_runsingle /path/to/source/3rdparty/curl/lib/multi.c:1896
-      #5 0x9f490f1 in curl_multi_perform /path/to/source/3rdparty/curl/lib/multi.c:2123
-      #6 0x9c4443c in perform /path/to/source/src/net/resourcemanager/ResourceManagerCurlThread.cpp:854
-      #7 0x9c445e0 in ...
-      #8 0x9c4cf1d in ...
-      #9 0xa2be6b5 in ...
-      #10 0xf7aa5780 in asan_thread_start /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_interceptors.cc:226
-      #11 0xf4d3a16d in __clone (/lib/i386-linux-gnu/libc.so.6+0xe716d)
-  
-  previously allocated by thread T13 (RESOURCE_HTTP) here:
-      #0 0xf7b1ba27 in __interceptor_calloc /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_malloc_linux.cc:70
-      #1 0x9f7dfa6 in allocate_conn /path/to/source/3rdparty/curl/lib/url.c:3904
-      #2 0x9f88ca0 in create_conn /path/to/source/3rdparty/curl/lib/url.c:5797
-      #3 0x9f8c928 in Curl_connect /path/to/source/3rdparty/curl/lib/url.c:6438
-      #4 0x9f45a8c in multi_runsingle /path/to/source/3rdparty/curl/lib/multi.c:1411
-      #5 0x9f490f1 in curl_multi_perform /path/to/source/3rdparty/curl/lib/multi.c:2123
-      #6 0x9c4443c in perform /path/to/source/src/net/resourcemanager/ResourceManagerCurlThread.cpp:854
-      #7 0x9c445e0 in ...
-      #8 0x9c4cf1d in ...
-      #9 0xa2be6b5 in ...
-      #10 0xf7aa5780 in asan_thread_start /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_interceptors.cc:226
-      #11 0xf4d3a16d in __clone (/lib/i386-linux-gnu/libc.so.6+0xe716d)
-  
-  SUMMARY: AddressSanitizer: heap-use-after-free /path/to/source/3rdparty/curl/lib/multi.c:666 in curl_multi_remove_handle
-  Shadow bytes around the buggy address:
-    0x3d3e9f20: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9f30: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9f40: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9f50: fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa
-    0x3d3e9f60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
-  =>0x3d3e9f70:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9f80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9f90: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9fa0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9fb0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-    0x3d3e9fc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
-  Shadow byte legend (one shadow byte represents 8 application bytes):
-    Addressable:           00
-    Partially addressable: 01 02 03 04 05 06 07
-    Heap left redzone:       fa
-    Heap right redzone:      fb
-    Freed heap region:       fd
-    Stack left redzone:      f1
-    Stack mid redzone:       f2
-    Stack right redzone:     f3
-    Stack partial redzone:   f4
-    Stack after return:      f5
-    Stack use after scope:   f8
-    Global redzone:          f9
-    Global init order:       f6
-    Poisoned by user:        f7
-    Container overflow:      fc
-    Array cookie:            ac
-    Intra object redzone:    bb
-    ASan internal:           fe
-    Left alloca redzone:     ca
-    Right alloca redzone:    cb
-  ==11785==ABORTING
-  
-  Thread 14 "RESOURCE_HTTP" received signal SIGABRT, Aborted.
-  [Switching to Thread 0xf27bfb40 (LWP 12324)]
-  0xf7fd8be9 in __kernel_vsyscall ()
-   (gdb) bt
-   #0  0xf7fd8be9 in __kernel_vsyscall ()
-   #1  0xf4c7ee89 in __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:54
-   #2  0xf4c803e7 in __GI_abort () at abort.c:89
-   #3  0xf7b2ef2e in __sanitizer::Abort () at /opt/toolchain/src/gcc-6.2.0/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cc:122
-   #4  0xf7b262fa in __sanitizer::Die () at /opt/toolchain/src/gcc-6.2.0/libsanitizer/sanitizer_common/sanitizer_common.cc:145
-   #5  0xf7b21ab3 in __asan::ScopedInErrorReport::~ScopedInErrorReport (this=0xf27be171, __in_chrg=<optimized out>) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_report.cc:689
-   #6  0xf7b214a5 in __asan::ReportGenericError (pc=166993689, bp=4068206216, sp=4068206204, addr=3925146496, is_write=false, access_size=4, exp=0, fatal=true) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_report.cc:1074
-   #7  0xf7b21fce in __asan::__asan_report_load4 (addr=3925146496) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_rtl.cc:129
-   #8  0x09f41f19 in curl_multi_remove_handle (multi=0xf3406080, data=0xde582400) at /path/to/source3rdparty/curl/lib/multi.c:666
-   #9  0x09f6b277 in Curl_close (data=0xde582400) at /path/to/source3rdparty/curl/lib/url.c:415
-   #10 0x09f3354e in curl_easy_cleanup (data=0xde582400) at /path/to/source3rdparty/curl/lib/easy.c:860
-   #11 0x09c6de3f in ...
-   #12 0x09c378c5 in ...
-   #13 0x09c48133 in ...
-   #14 0x09c4d092 in ...
-   #15 0x0a2be6b6 in ...
-   #16 0xf7aa5781 in asan_thread_start (arg=0xf2d22938) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_interceptors.cc:226
-   #17 0xf5de52b5 in start_thread (arg=0xf27bfb40) at pthread_create.c:333
-   #18 0xf4d3a16e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:114
-  
-  Fixes #1083
-
-- testcurl.1: fix the URL to the autobuild summary
-
-- testcurl.1: update URLs
-
-- INSTALL: converted to markdown => INSTALL.md
-  
-  Also heavily edited for content. Removed lots of old cruft that we added
-  like 10+ years ago that is likely incorrect by now.
-  
-  Also removed INSTALL.devcpp for same reason.
-
-- [Martin Storsjo brought this change]
-
-  configure: Check for other variants of the -m*os*-version-min flags
-  
-  In addition to -miphoneos-version-min, the same version can be set
-  using -mios-version-min. And for WatchOS and TvOS, there's
-  -mwatchos-version-min and -mtvos-version-min.
+- [Michael Kaufmann brought this change]
 
-- configure: set min version flags for builds on mac
-  
-  This helps building binaries that can work on multiple macOS versions.
-  
-  Help-by: Martin Storsjö
+  docs: fix bugs in CURLOPT_HTTP_VERSION.3 and CURLOPT_PIPEWAIT.3
   
-  Fixes #1069
+  Closes #786
 
-- curl_multi_add_handle: set timeouts in closure handles
-  
-  The closure handle only ever has default timeouts set. To improve the
-  state somewhat we clone the timeouts from each added handle so that the
-  closure handle always has the same timeouts as the most recently added
-  easy handle.
+- CURLOPT_ACCEPT_ENCODING.3: clarified
   
-  Fixes #739
+  As discussed in #785
 
-- configure/CURL_CHECK_FUNC_POLL: disable poll completely on mac
-  
-  ... so that the same libcurl build easier can run on any version.
+- curl.1: --mail-rcpt can be used multiple times
   
-  Follow-up to issue #1057
-
-- RELEASE-NOTES: synced with f36f8c14551efc6772
+  Reported-by: mgendre
+  Closes #784
 
-- test14xx: fixed --libcurl output tests again after 8e8afa82cbb
+- [Karlson2k brought this change]
 
-- s/cURL/curl
+  tests: Use 'pathhelp' for paths conversions in secureserver.pl
   
-  The tool was never called cURL, only the project. But even so, we have
-  more and more over time switched to just use lower case.
+  Closes #675
 
-- polarssl: indented code, removed unused variables
+- [Karlson2k brought this change]
 
-- polarssl: reduce #ifdef madness with a macro
+  tests: Use 'pathhelp' for paths conversions in sshserver.pl
 
-- polarssl: fix unaligned SSL session-id lock
+- [Karlson2k brought this change]
 
-- Curl_polarsslthreadlock_thread_setup: clear array at init
-  
-  ... since if it fails to init the entire array and then tries to clean
-  it up, it would attempt to work on an uninitialized pointer.
+  tests: Use 'pathhelp' for current path in runtests.pl
 
-- curl: set INTERLEAVEDATA too
-  
-  As otherwise the callback could be called with a NULL pointer when RTSP
-  data is provided.
+- [Karlson2k brought this change]
 
-- gopher: properly return error for poll failures
+  tests: pathhelp.pm to process paths on Msys/Cygwin
 
-- select: switch to macros in uppercase
+- lib: include curl_printf.h as one of the last headers
   
-  Curl_select_ready() was the former API that was replaced with
-  Curl_select_check() a while back and the former arg setup was provided
-  with a define (in order to leave existing code unmodified).
+  curl_printf.h defines printf to curl_mprintf, etc. This can cause
+  problems with external headers which may use
+  __attribute__((format(printf, ...))) markers etc.
   
-  Now we instead offer SOCKET_READABLE and SOCKET_WRITABLE for the most
-  common shortcuts where only one socket is checked. They're also more
-  visibly macros.
-
-- select: use more proper macro-looking names
+  To avoid that they cause problems with system includes, we include
+  curl_printf.h after any system headers. That makes the three last
+  headers to always be, and we keep them in this order:
   
-  ... so that it becomes more obvious in the code what is what. Also added
-  a typecast for one of the calculations.
-
-- Curl_socket_check: add extra check to avoid integer overflow
-
-- maketgz: make it support "only" generating version info
+   curl_printf.h
+   curl_memory.h
+   memdebug.h
   
-  ... to allow you to update the local repository with the given version
-  number data.
-
-Jay Satiro (17 Oct 2016)
-- url: skip to-be-closed connections when pipelining (follow-up)
+  None of them include system headers, they all do funny #defines.
   
-  - Change back behavior so that pipelining is considered possible for
-  connections that have not yet reached the protocol level.
+  Reported-by: David Benjamin
   
-  This is a follow-up to e5f0b1a which had changed the behavior of
-  checking if pipelining is possible to ignore connections that had
-  'bits.close' set. Connections that have not yet reached the protocol
-  level also have that bit set, and we need to consider pipelining
-  possible on those connections.
-
-Daniel Stenberg (17 Oct 2016)
-- HTTP2: mention the tool's limited support
-
-- RELEASE-NOTES: synced with a1a5cd04877fd6fd
-
-- [David Woodhouse brought this change]
+  Fixes #743
 
-  curl: do not set CURLOPT_SSLENGINEDEFAULT automatically
-  
-  There were bugs in the PKCS#11 engine, and fixing them triggers bugs in
-  OpenSSL. Just don't get involved; there's no need to be making the
-  engine methods the default anyway.
+- memdebug.h: remove inclusion of other headers
   
-  https://github.com/OpenSC/libp11/pull/108
-  https://github.com/openssl/openssl/pull/1639
+  Mostly because they're not needed, because memdebug.h is always included
+  last of all headers so the others already included the correct ones.
   
-  Merges #1042
+  But also, starting now we don't want this to accidentally include any
+  system headers, as the header included _before_ this header may add
+  defines and other fun stuff that we won't want used in system includes.
 
-- KNOWN_BUGS: two more existing problems
+- [Jay Satiro brought this change]
 
-Marcel Raad (16 Oct 2016)
-- win: fix Universal Windows Platform build
+  curl -J: make it work even without http:// scheme on URL
   
-  This fixes a merge error in commit 7f3df80 caused by commit 332e8d6.
+  It does open up a miniscule risk that one of the other protocols that
+  libcurl could use would send back a Content-Disposition header and then
+  curl would act on it even if not HTTP.
   
-  Additionally, this changes Curl_verify_windows_version for Windows App
-  builds to assume to always be running on the target Windows version.
-  There seems to be no way to determine the Windows version from a
-  UWP app. Neither GetVersion(Ex), nor VerifyVersionInfo, nor the
-  Version Helper functions are supported.
+  A future mitigation for this risk would be to allow the callback to ask
+  libcurl which protocol is being used.
   
-  Bug: https://github.com/curl/curl/pull/820#issuecomment-250889878
-  Reported-by: Paul Joyce
+  Verified with test 1312
   
-  Closes https://github.com/curl/curl/pull/1048
-
-Daniel Stenberg (16 Oct 2016)
-- KNOWN_BUGS: minor formatting edit
-
-Jay Satiro (14 Oct 2016)
-- [Rider Linden brought this change]
+  Closes #760
 
-  url: skip to-be-closed connections when pipelining
-  
-  No longer attempt to use "doomed" to-be-closed connections when
-  pipelining. Prior to this change connections marked for deletion (e.g.
-  timeout) would be erroneously used, resulting in sporadic crashes.
-  
-  As originally reported and fixed by Carlo Wood (origin unknown).
-  
-  Bug: https://github.com/curl/curl/issues/627
-  Reported-by: Rider Linden
+- manpage-scan.pl: also verify the command line option docs
   
-  Closes https://github.com/curl/curl/pull/1075
-  Participation-by: nopjmp@users.noreply.github.com
+  This script now also scans src/tool_getparam.c, docs/curl.1 and
+  src/tool_help.c and will warn if any of them lists a command line option
+  not mentioned in one of the other places.
 
-Daniel Stenberg (13 Oct 2016)
-- vtls: only re-use session-ids using the same scheme
+- curl: show the long option version of -q in the -h list
+
+- curl: remove "--socks" as "--socks5" turned 8
   
-  To make it harder to do cross-protocol mistakes
+  In commit 2e42b0a2524 (Jan 2008) we made the option "--socks" deprecated
+  and it has not been documented since. The more explicit socks options
+  (like --socks4 or --socks5) should be used.
 
-Jay Satiro (11 Oct 2016)
-- [Torben Dannhauer brought this change]
+- curl.1: document the deprecated --ftp-ssl option
 
-  dist: add missing cmake modules to the tarball
+- curl: remove --http-request
   
-  Closes https://github.com/curl/curl/pull/1070
+  It was mentioned as deprecated already in commit ae1912cb0d4 from
+  1999. It has not been documented in this millennium.
 
-Daniel Stenberg (11 Oct 2016)
-- configure: detect the broken poll() in macOS 10.12
-  
-  Fixes #1057
+- curl: mention --ntlm-wb in -h list
 
-- dist: remove PDF and HTML converted docs from the releases
+- curl: -h output lacked --proxy-header
 
-- [Remo E brought this change]
+- curl.1: document --ntlm-wb
 
-  cmake: add nghttp2 support
-  
-  Closes #922
+- curl.1: document the long format of -q: --disable
 
-- [Andreas Streichardt brought this change]
+- curl.1: mention the deprecated --krb4 option
 
-  resolve: add error message when resolving using SIGALRM
+- curl.1: document --ftp-ssl-reqd
   
-  Closes #1066
+  Even if deprecated, document it so that people will find it as old
+  scripts may still use it.
 
-- GIT-INFO: remove the Mac 10.1-specific details
-  
-  There shouldn't be many devs out there anymore using such outdated macOS
-  versions. And it removes the dead link.
+- curl: use --telnet-option as documented
   
-  Closes #1049
+  The code said "telnet-options" but no documentation ever said so. It
+  worked fine since the code is fine with a unique match of the first
+  part.
 
-- RELEASE-NOTES: spellfix
+- getparam: remove support for --ftpport
+  
+  It has been deprecated and undocumented since commit ad5ead8bed7 (Dec
+  2003). --ftp-port is the proper long option name.
 
-- RELEASE-NOTES: synced with 82720490628cb53a
+- curl: make --disable work as long form of -q
   
-  5 more fixes, 2 more contributors
+  To make the aliases list reflect reality.
 
-- [Tobias Stoeckmann brought this change]
+- aliases: remove trailing space from capath string
 
-  smb: properly check incoming packet boundaries
-  
-  Not all reply messages were properly checked for their lengths, which
-  made it possible to access uninitialized memory (but this does not lead
-  to out of boundary accesses).
+- cmdline parse: only single letter options have single-letter strings
   
-  Closes #1052
-
-- test557: verify printf() with 128 and 129 arguments
+  ... moved around options so that parsing the code to find all
+  single-letter options easier.
 
-- mprintf: return error on too many arguments
+Jay Satiro (28 Apr 2016)
+- CURLINFO_TLS_SSL_PTR.3: Clarify SSL pointer availability
   
-  128 arguments should be enough for everyone
+  Bug: https://curl.haxx.se/mail/lib-2016-04/0126.html
+  Reported-by: Bru Rom
+
+Daniel Stenberg (28 Apr 2016)
+- curl_easy_getinfo.3: remove superfluous blank lines
 
-- ftp: fix Curl_ftpsendf()
+- test1139: verifies libcurl option man page presence
   
-  ... it no longer takes printf() arguments since it was only really taken
-  advantage by one user and it was not written and used in a safe
-  way. Thus the 'f' is removed from the function name and the proto is
-  changed.
+  - checks that each option has its own man page present
   
-  Although the current code wouldn't end up in badness, it was a risk that
-  future changes could end up springf()ing too large data or passing in a
-  format string inadvertently.
+  - checks that each option is mentioned in its corresponding index man
+    page
 
-- formpost: avoid silent snprintf() truncation
+- curl_easy_getinfo.3: added missing mention of CURLINFO_TLS_SESSION
   
-  The previous use of snprintf() could make libcurl silently truncate some
-  input data and not report that back on overly large input, which could
-  make data get sent over the network in a bad format.
+  ... although it is deprecated.
+
+Jay Satiro (28 Apr 2016)
+- mbedtls: Fix session resume
   
-  Example:
+  This also fixes PolarSSL session resume.
   
-   $ curl --form 'a=b' -H "Content-Type: $(perl -e 'print "A"x4100')"
-
-- TODO: build: Enable PIE and RELRO by default
-
-- TODO: Support better than MD5 hostkey hash (for ssh)
-
-- [Daniel Gustafsson brought this change]
-
-  tests: Fix a small typo in the tests README (#1060)
+  Prior to this change the TLS session information wasn't properly
+  saved and restored for PolarSSL and mbedTLS.
   
-  The subdirectory for logs in tests/ is named log/ without an 's'
-  at the end.
-
-- TODO: Introduce --fail-fast to exit on first transfer fail
+  Bug: https://curl.haxx.se/mail/lib-2016-01/0070.html
+  Reported-by: Thomas Glanzmann
   
-  See #1054
+  Bug: https://curl.haxx.se/mail/lib-2016-04/0095.html
+  Reported-by: Moti Avrahami
 
-- TODO: Leave secure cookies alone
+Daniel Stenberg (27 Apr 2016)
+- RELEASE-NOTES: synced with f4298fcc6d2
 
-- [Rainer Müller brought this change]
+- [Michael Kaufmann brought this change]
 
-  CURLOPT_DEBUGFUNCTION.3: unused argument warning (#1056)
+  opts: Fix some syntax errors in example code fragments
   
-  The 'userp' argument is unused in this example code.
-
-- TODO: TCP Fast Open for windows
-
-- RELEASE-NOTES: synced with 8fd2a754f0de
-
-- CURLOPT_KEEP_SENDING_ON_ERROR.3: mention when it is added
-
-- memdup: use 'void *' as return and source type
-
-- TODO: Add easy argument to formpost functions
+  Fixes #779
 
-- formpost: trying to attach a directory no longer crashes
-  
-  The error path would previously add a freed entry to the linked list.
+- openssl: avoid BN_print a NULL bignum
   
-  Reported-by: Toby Peterson
+  OpenSSL 1.1.0-pre seems to return NULL(?) for a whole lot of those
+  numbers so make sure the function handles this.
   
-  Fixes #1053
+  Reported-by: Linus Nordberg
 
-- [Sergei Kuzmin brought this change]
+- [Marcel Raad brought this change]
 
-  cookies: same domain handling changed to match browser behavior
+  CONNECT_ONLY: don't close connection on GSS 401/407 reponses
   
-  Cokie with the same domain but different tailmatching property are now
-  considered different and do not replace each other.  If header contains
-  following lines then two cookies will be set: Set-Cookie: foo=bar;
-  domain=.foo.com; expires=Thu Mar 3 GMT 8:56:27 2033 Set-Cookie: foo=baz;
-  domain=foo.com; expires=Thu Mar 3 GMT 8:56:27 2033
+  Previously, connections were closed immediately before the user had a
+  chance to extract the socket when the proxy required Negotiate
+  authentication.
   
-  This matches Chrome, Opera, Safari, and Firefox behavior. When sending
-  stored tokens to foo.com Chrome, Opera, Firefox store send them in the
-  stored order, while Safari pre-sort the cookies.
+  This regression was brought in with the security fix in commit
+  79b9d5f1a42578f
   
-  Closes #1050
-
-- [Stephen Brokenshire brought this change]
+  Closes #655
 
-  FAQ: Fix typos in section 5.14 (#1047)
-  
-  Type required for YourClass::func C++ function (using size_t in line
-  with the documentation for CURLOPT_WRITEFUNCTION) and missing second
-  colon when specifying the static function for CURLOPT_WRITEFUNCTION.
+- CURLINFO_TLS_SESSION.3: clarify TLS library support before 7.48.0
 
-- [Sebastian Mundry brought this change]
+- mbedtls.c: silly spellfix of a comment
 
-  KNOWN_BUGS: Fix typos in section 5.8.
+- KNOWN_BUGS: 1.10 Strips trailing dot from host name
   
-  Closes #1046
-
-- [mundry brought this change]
-
-  CONTRIBUTE.md: Fix typo in 'About pull requests' section. (#1045)
-
-- curl.1: --trace supports % for sending to stderr!
-
-- KNOWN_BUGS: 5.8 configure finding libs in wrong directory
+  Closes #716
 
-Dan Fandrich (24 Sep 2016)
-- configure: Fixed builds with libssh2 in a custom location
+- test1322: verify stripping of trailing dot from host name
   
-  A libssh2 library in the standard system location was being used in
-  preference to the desired one while linking.
-
-Daniel Stenberg (23 Sep 2016)
-- SECURITY: remove the top ascii logo
+  While being debated (in #716) and a violation of RFC 7230 section 5.4,
+  this test verifies that the existing functionality works as intended. It
+  strips the dot from the host name and uses the host without dot
+  throughout the internals.
 
-Michael Kaufmann (22 Sep 2016)
-- New libcurl option to keep sending on error
-  
-  Add the new option CURLOPT_KEEP_SENDING_ON_ERROR to control whether
-  sending the request body shall be completed when the server responds
-  early with an error status code.
-  
-  This is suitable for manual NTLM authentication.
+- multi: accidentally used resolved host name instead of proxy
   
-  Reviewed-by: Jay Satiro
+  Regression introduced in 09b5a998
   
-  Closes https://github.com/curl/curl/pull/904
-
-Kamil Dudka (22 Sep 2016)
-- nss: add chacha20-poly1305 cipher suites if supported by NSS
+  Bug: https://curl.haxx.se/mail/lib-2016-04/0084.html
+  Reported-by: BoBo
 
-- nss: add cipher suites using SHA384 if supported by NSS
+- symbols-in-versions: added new CURLSSLBACKEND_ symbols
 
-- nss: fix typo in ecdhe_rsa_null cipher suite string
+- test148: fixed after the --ftp-create-dirs retry change
   
-  As it seems to be a rarely used cipher suite (for securely established
-  but _unencrypted_ connections), I believe it is fine not to provide an
-  alias for the misspelled variant.
+  follow-up commit to 3c1e84f569 as it made curl try a little harder
 
-Jay Satiro (21 Sep 2016)
-- docs: Remove that --proto is just used for initial retrieval
-  
-  .. and add that --proto-redir and CURLOPT_REDIR_PROTOCOLS do not
-  override protocols denied by --proto and CURLOPT_PROTOCOLS.
+- curl.h: clarify curl_sslbackend for openssl clones and renames
+
+- [Karlson2k brought this change]
+
+  url.c: fixed DEBUGASSERT() for WinSock workaround
   
-  - Add a test to enforce: --proto deny must override --proto-redir allow
+  If buffer is allocated, but nothing is received during prereceive
+  stage, than number of processed bytes must be zero.
   
-  Closes https://github.com/curl/curl/pull/1031
+  Closes #778
 
-Daniel Stenberg (21 Sep 2016)
-- dist: add CurlSymbolHiding.cmake to the tarball
-  
-  Follow-up to 6140dfcf3e784
+- KNOWN_BUGS: --interface for ipv6 binds to unusable IP address
   
-  Reported-by: Alexander Sinditskiy
+  Closes #686 for now.
 
-- curl_global_cleanup.3: don't unload the lib with sub threads running
+- TODO: 1.17 Add support for IRIs
   
-  Discussed in #997
+  Adding support for IRIs is a mouthful, but is probably interesting at
+  least for areas and countries where the use of such "URLs" are growing
+  popularity.
   
-  Assisted-by: Jay Satiro
+  Closes #776
 
-- MAIL-ETIQUETTE: language
+- THANKS-filter: Travis Burtrum
 
-Jay Satiro (20 Sep 2016)
-- easy: Reset all statistical session info in curl_easy_reset
-  
-  Bug: https://github.com/curl/curl/issues/1017
-  Reported-by: Jeroen Ooms
+- lib1517: checksrc compliance
 
-Daniel Stenberg (19 Sep 2016)
-- RELEASE-NOTES: synced with 79607eec51055
+- [moparisthebest brought this change]
 
-Jay Satiro (19 Sep 2016)
-- [Daniel Gustafsson brought this change]
+  PolarSSL: Implement public key pinning
 
-  darwinssl: Fix typo in comment
-  
-  Closes https://github.com/curl/curl/pull/1028
-
-Daniel Stenberg (19 Sep 2016)
-- [Bernard Spil brought this change]
-
-  libressl: fix version output
-  
-  LibreSSL defines `OPENSSL_VERSION_NUMBER` as `0x20000000L` for all
-  versions returning `LibreSSL/2.0.0` for any LibreSSL version.
-  
-  This change provides a local OpenSSL_version_num function replacement
-  returning LIBRESSL_VERSION_NUMBER instead.
-  
-  Closes #1029
+Patrick Monnerat (22 Apr 2016)
+- os400: upgrade ILE/RPG binding
 
-- [rugk brought this change]
+- curl.h: CURLOPT_CONNECT_TO sets a struct slist *, not a string
 
-  TODO: Add PINNEDPUBLICKEY - HPKP compatibility, HSTS & HPKP
+Daniel Stenberg (22 Apr 2016)
+- contributors.sh: make --releasenotes implied
   
-  Closes #1025
-  Closes #1026
-  Closes #1027
+  It got too annoying to type =)
 
-- openssl: don't call ERR_remote_thread_state on >= 1.1.0
-  
-  Follow-up fix to d9321562
+- RELEASE-NOTES: synced with 3c1e84f5693d8093
 
-- openssl: don’t call CRYTPO_cleanup_all_ex_data
-  
-  The OpenSSL function CRYTPO_cleanup_all_ex_data() cannot be called
-  multiple times without crashing - and other libs might call it! We
-  basically cannot call it without risking a crash. The function is a
-  no-op since OpenSSL 1.1.0.
-  
-  Not calling this function only risks a small memory leak with OpenSSL <
-  1.1.0.
+- curl: make --ftp-create-dirs retry on failure
   
-  Bug: https://curl.haxx.se/mail/lib-2016-09/0045.html
-  Reported-by: Todd Short
-
-- TODO: Support SSLKEYLOGFILE
-
-Jay Satiro (18 Sep 2016)
-- CURLOPT_PINNEDPUBLICKEY.3: fix the AVAILABILITY formatting
-
-Nick Zitzmann (18 Sep 2016)
-- darwinssl: disable RC4 cipher-suite support
+  The underlying libcurl option used for this feature is
+  CURLOPT_FTP_CREATE_MISSING_DIRS which has the ability to retry the dir
+  creation, but it was never set to do that by the command line tool.
   
-  RC4 was a nice alternative to CBC back in the days of BEAST, but it's insecure and obsolete now.
-
-- configure: change "iOS/Mac OS X native" to "Apple OS native"
+  Now it does.
   
-  Since I first wrote that text, Apple introduced tvOS and watchOS, and renamed "Mac OS X" to "macOS." Let's make the text a little more inclusive, since curl can be built for all four operating systems.
+  Bug: https://curl.haxx.se/mail/archive-2016-04/0021.html
+  Reported-by: John Wanghui
+  Help-by: Leif W
 
-Jay Satiro (18 Sep 2016)
-- test2048: fix url
+- [Henrik Gaßmann brought this change]
 
-- examples/imap-append: Set size of data to be uploaded
-  
-  Prior to this commit this example failed with error
-  'Cannot APPEND with unknown input file size'.
+  winbuild: add mbedtls support
   
-  Bug: https://github.com/curl/curl/issues/1008
-  Reported-by: lukaszgn@users.noreply.github.com
+  Add WITH_MBEDTLS option. Make WITH_SSL, WITH_MBEDTLS and ENABLE_WINSSL
+  options mutual exclusive.
   
-  Closes https://github.com/curl/curl/pull/1011
-
-Daniel Stenberg (16 Sep 2016)
-- [Tony Kelman brought this change]
+  Closes #606
 
-  LICENSE-MIXING.md: update with mbedTLS dual licensing
-  
-  Recent versions of mbedTLS are available under either Apache 2.0 or GPL
-  2.0, see https://tls.mbed.org/how-to-get
+- KNOWN_BUGS: fixed "5.6 Improper use of Autoconf cache variables"
   
-  Closes #1019
-
-- KNOWN_BUGS: chunked-encoded requests with HTTP/2 is fixed
+  As of commit d9f3b365a3
 
-- http2: debug ouput sent HTTP/2 request headers
+- [Irfan Adilovic brought this change]
 
-- http: accept "Transfer-Encoding: chunked" for HTTP/2 as well
+  configure: ac_cv_ -> curl_cv_ for write-only vars
   
-  ... but don't send the actual header over the wire as it isn't accepted.
-  Chunked uploading is still triggered using this method.
+  These configure vars are modified in a curl-specific way but never
+  evaluated or loaded from cache, even though they are designated as
+  _cv_. We could either implement proper AC_CACHE_CHECKs for them, or
+  remove them completely.
   
-  Fixes #1013
-  Fixes #662
-
-- openssl: fix per-thread memory leak usiong 1.0.1 or 1.0.2
+  Fixes #603 as ac_cv_func_gethostbyname is no longer clobbered, and
+  AC_CHECK_FUNC(gethostbyname...) will no longer spuriously succeed after
+  the first configure run with caching.
   
-  OpenSSL 1.0.1 and 1.0.2 build an error queue that is stored per-thread
-  so we need to clean it when easy handles are freed, in case the thread
-  will be killed in which the easy handle was used. All OpenSSL code in
-  libcurl should extract the error in association with the error already
-  so clearing this queue here should be harmless at worst.
+  `ac_cv_func_strcasecmp` is curious, see #770.
   
-  Fixes #964
+  `eval "ac_cv_func_$func=yes"` can still cause problems as it works in
+  tandem with AC_CHECK_FUNCS and then potentially modifies its result. It
+  would be best to rewrite this test to use a new CURL_CHECK_FUNCS macro,
+  which works the same as AC_CHECK_FUNCS but relies on caching the values
+  of curl_cv_func_* variables, without modifiying ac_cv_func_*.
 
-- RELEASE-NOTES: reset and go toward 7.51.0 (again)
+- [Irfan Adilovic brought this change]
 
-Version 7.50.3 (14 Sep 2016)
+  configure: ac_cv_ -> curl_cv_ for r/w vars
+  
+  These configure vars are modified in a curl-specific way and modified by
+  the configure process, but are never loaded from cache, even though they
+  are designated as _cv_. We should implement proper AC_CACHE_CHECKs for
+  them eventually.
 
-Daniel Stenberg (14 Sep 2016)
-- THANKS: updated with curl 7.50.3 contributors
+- [Irfan Adilovic brought this change]
 
-- RELEASE-NOTES: curl 7.50.3
+  configure: ac_cv_func_clock_gettime -> curl_...
+  
+  This variable must not be cached in its current form, as any cached
+  information will prevent the next configure run from determining the
+  correct LIBS needed for the function. Thus, rename prefix `ac_cv_` to
+  just `curl_`.
 
-- test1605: verify negative input lengths to (un)escape functions
+- [Irfan Adilovic brought this change]
 
-- curl_easy_unescape: deny negative string lengths as input
-  
-  CVE-2016-7167
+  configure: ac_cv_ -> curl_cv_ for all cached vars
   
-  Bug: https://curl.haxx.se/docs/adv_20160914.html
-
-- curl_easy_escape: deny negative string lengths as input
+  This was automated by:
   
-  CVE-2016-7167
+  sed -b -i -f <(ack -A1 AC_CACHE_CHECK | \
+                 ack -o 'ac_cv_.*?\b' | \
+                 sort -u | xargs -n1 bash -c \
+                      'echo "s/$0/curl_cv_${0#ac_cv_}/g"') \
+      $(git ls-files)
   
-  Bug: https://curl.haxx.se/docs/adv_20160914.html
+  This only changed the prefix for 16 variables actually checked with
+  AC_CACHE_CHECK.
 
-- curl: make --create-dirs on windows grok both forward and backward slashes
+- openssl: builds with OpenSSL 1.1.0-pre5
   
-  Reported-by: Ryan Scott
+  The RSA, DSA and DH structs are now opaque and require use of new APIs
   
-  Fixes #1007
+  Fixes #763
 
-- RELEASE-NOTES: synced with 665694979b6
+Steve Holme (20 Apr 2016)
+- url.c: Prefer we don't use explicit NULLs in conditions
+  
+  Fixed commit fa5fa65a30 to not use NULLs in if condition.
 
-- [Tony Kelman brought this change]
+Daniel Stenberg (20 Apr 2016)
+- [Isaac Boukris brought this change]
 
-  mbedtls: switch off NTLM in build if md4 isn't available
-  
-  NTLM support with mbedTLS was added in 497e7c9 but requires that mbedTLS
-  is built with the MD4 functions available, which it isn't in default
-  builds. This now adapts if the funtion isn't there and builds libcurl
-  without NTLM support if so.
+  NTLM: check for NULL pointer before deferencing
   
-  Fixes #1004
-
-Jay Satiro (12 Sep 2016)
-- CODE_STYLE: fix long-line guideline
+  At ConnectionExists, both check->proxyuser and check->proxypasswd
+  could be NULL, so make sure to check first.
   
-  - Change maximum allowed line length from 80 to 79.
+  Fixes #765
 
-- CODE_STYLE: add column alignment section
-  
-  Note that since the added examples are for column alignment I had to
-  encapsulate with ~~~c markdown to preserve their alignment.
+- [Karlson2k brought this change]
 
-Peter Wu (11 Sep 2016)
-- cmake: fix curl-config --static-libs
+  tests: added test1517
   
-  The `curl-config --static-libs` command should not output paths like
-  -l/usr/lib/libssl.so, instead print the absolute path without `-l`.
+  ... for checking ability to receive full HTTP response when POST request
+  is used with slow read callback function.
   
-  This also removes the confusing message "Static linking is broken" which
-  was printed because curl-config --static-libs was disfunctional even
-  though the static libcurl.a library works properly.
+  This test checks for bug #657 and verifies the work-around from
+  72d5e144fbc6.
   
-  Fixes https://github.com/curl/curl/issues/841
+  Closes #720
+
+- [Karlson2k brought this change]
 
-Daniel Stenberg (11 Sep 2016)
-- http: refuse to pass on response body with NO_NODY was set
+  sendf.c: added ability to call recv() before send() as workaround
   
-  ... like when a HTTP/0.9 response comes back without any headers at all
-  and just a body this now prevents that body from being sent to the
-  callback etc.
+  WinSock destroys recv() buffer if send() is failed. As result - server
+  response may be lost if server sent it while curl is still sending
+  request. This behavior noticeable on HTTP server short replies if
+  libcurl use several send() for request (usually for POST request).
+  To workaround this problem, libcurl use recv() before every send() and
+  keeps received data in intermediate buffer for further processing.
   
-  Adapted test 1144 to verify.
+  Fixes: #657
+  Closes: #668
+
+Kamil Dudka (19 Apr 2016)
+- connect: make sure that rc is initialized in singleipconnect()
   
-  Fixes #973
+  This commit fixes a Clang warning introduced in curl-7_48_0-190-g8f72b13:
   
-  Assisted-by: Ray Satiro
+  Error: CLANG_WARNING:
+  lib/connect.c:1120:11: warning: The right operand of '==' is a garbage value
+  1118|       }
+  1119|
+  1120|->     if(-1 == rc)
+  1121|         error = SOCKERRNO;
+  1122|     }
 
-- RELEASE-NOTES: synced with 257bf3ac67eb6
+Daniel Stenberg (19 Apr 2016)
+- make/checksrc: use $srcdir, not $top_srcdir
 
-Jakub Zakrzewski (10 Sep 2016)
-- CMake: Don't build unit tests if private symbols are hidden
-  
-  This only excludes building unit tests from default build ( 'all' Make
-  target or "Build Solution" in VisualStudio). The projects and Make
-  targets will still be generated and shown in supporting IDEs.
-  
-  Fixes https://github.com/curl/curl/issues/981
-  Reported-by: Randy Armstrong
-  
-  Closes https://github.com/curl/curl/pull/990
+- src/checksrc.whitelist: removed
 
-- CMake: Try to (un-)hide private library symbols
-  
-  Detect support for compiler symbol visibility flags and apply those
-  according to CURL_HIDDEN_SYMBOLS option.
-  It should work true to the autotools build except it tries to unhide
-  symbols on Windows when requested and prints warning if it fails.
-  
-  Ref: https://github.com/curl/curl/issues/981#issuecomment-242665951
-  Reported-by: Daniel Stenberg
+- tool_operate: switch to inline checksrc ignore
 
-Daniel Stenberg (9 Sep 2016)
-- openssl: fix bad memory free (regression)
-  
-  ... by partially reverting f975f06033b1. The allocation could be made by
-  OpenSSL so the free must be made with OPENSSL_free() to avoid problems.
+- lib/checksrc.whitelist: not needed anymore
   
-  Reported-by: Harold Stuart
-  Fixes #1005
+  ... as checksrc now skips comments
 
-- http2: support > 64bit sized uploads
-  
-  ... by making sure we don't count down the "upload left" counter when the
-  uploaded size is unknown and then it can be allowed to continue forever.
+- vtls.h: remove a space before semicolon
   
-  Fixes #996
+  ... that the new checksrc detected
 
-Jay Satiro (7 Sep 2016)
-- errors: new alias CURLE_WEIRD_SERVER_REPLY (8)
-  
-  Since we're using CURLE_FTP_WEIRD_SERVER_REPLY in imap, pop3 and smtp as
-  more of a generic "failed to parse" introduce an alias without FTP in
-  the name.
-  
-  Closes https://github.com/curl/curl/pull/975
+- darwinssl: removed commented out code
 
-Daniel Stenberg (7 Sep 2016)
-- bump: toward 7.51.0
+- http_chunks: removed checksrc disable
+  
+  ... since checksrc now skips comments
 
-- HISTORY: remove ascii logo to render nicer on web
+- imap: inlined checksrc disable instead of whitelist edit
 
-- curl: whitelist use of strtok() in non-threaded context
+- checksrc: taught to skip comments
+  
+  ... but output non-stripped version of the line, even if that then can
+  make the script identify the wrong position in the line at
+  times. Showing the line stripped (ie without comments) is just too
+  surprising.
 
-- checksrc: detect strtok() use
+- opts/Makefile.am: list all docs file one by one
   
-  ... as that function slipped through once before.
+  ... to make it easier to add lines in patches that won't just break all
+  other patches trying to add lines too.
 
-GitHub (7 Sep 2016)
-- [Viktor Szakats brought this change]
+- curl_easy_setopt.3: mention CURLOPT_TCP_FASTOPEN
 
-  mk-ca-bundle.pl: use SHA256 instead of SHA1
+- RELEASE-NOTES: synced with 03de4e4b219
   
-  This hash is used to verify the original downloaded certificate bundle
-  and also included in the generated bundle's comment header. Also
-  rename related internal symbols to algorithm-agnostic names.
-
-Version 7.50.2 (7 Sep 2016)
+  (since we just merged two major features)
 
-Daniel Stenberg (7 Sep 2016)
-- RELEASE-NOTES: curl 7.50.2 release
+- [Alessandro Ghedini brought this change]
 
-- THANKS: updated for 7.50.2
+  connect: implement TCP Fast Open for Linux
+  
+  Closes #660
 
-Jay Satiro (6 Sep 2016)
-- [Gaurav Malhotra brought this change]
+- [Alessandro Ghedini brought this change]
 
-  openssl: fix CURLINFO_SSL_VERIFYRESULT
-  
-  CURLINFO_SSL_VERIFYRESULT does not get the certificate verification
-  result when SSL_connect fails because of a certificate verification
-  error.
-  
-  This fix saves the result of SSL_get_verify_result so that it is
-  returned by CURLINFO_SSL_VERIFYRESULT.
-  
-  Closes https://github.com/curl/curl/pull/995
+  tool: add --tcp-fastopen option
 
-Daniel Stenberg (6 Sep 2016)
-- [Daniel Gustafsson brought this change]
+- [Alessandro Ghedini brought this change]
 
-  darwinssl: test for errSecSuccess in PKCS12 import rather than noErr (#993)
-  
-  While noErr and errSecSuccess are defined as the same value, the API
-  documentation states that SecPKCS12Import() returns errSecSuccess if
-  there were no errors in importing. Ensure that a future change of the
-  defined value doesn't break (however unlikely) and be consistent with
-  the API docs.
+  connect: implement TCP Fast Open for OS X
 
-- [Daniel Gustafsson brought this change]
+- [Alessandro Ghedini brought this change]
 
-  docs: Fix link to CONTRIBUTE in Github contribution guidelines (#994)
+  url: add CURLOPT_TCP_FASTOPEN option
 
-- [Marcel Raad brought this change]
+- checksrc: pass on -D so the whitelists are found correctly
 
-  openssl: Fix compilation with OPENSSL_API_COMPAT=0x10100000L
+- configure: remove check for libresolve
   
-  With OPENSSL_API_COMPAT=0x10100000L (OpenSSL 1.1 API), the cleanup
-  functions are unavailable (they're no-ops anyway in OpenSSL 1.1). The
-  replacements for SSL_load_error_strings, SSLeay_add_ssl_algorithms, and
-  OpenSSL_add_all_algorithms are called automatically [1][2]. SSLeay() is
-  now called OpenSSL_version_num().
+  'strncasecmp' was once provided by libresolv (no trailing e) for SunOS,
+  but this check is broken and most likely adds nothing useful. Removing
+  now.
   
-  [1]: https://www.openssl.org/docs/man1.1.0/ssl/OPENSSL_init_ssl.html
-  [2]: https://www.openssl.org/docs/man1.1.0/crypto/OPENSSL_init_crypto.html
+  Reported-by: Irfan Adilovic
   
-  Closes #992
+  Discussed in #770
 
-- RELEASE-NOTES: synced with 3d4c0c8b9bc1d
+- scripts/make: use $(EXEEXT) for executables
+  
+  Reported-by: bodop
+  
+  Fixes #771
 
-- http2: return EOF when done uploading without known size
+- includes: avoid duplicate memory callback typdefs even harder
+
+- checksrc/makefile.am: use $top_srcdir to find source files
   
-  Fixes #982
+  ... to properly support out of source tree builds.
 
-- http2: skip the content-length parsing, detect unknown size
+- RELEASE-NOTES: synced with 26ec93dd6aeba8dfb5
 
-- http2: minor white space edit
+- opts: fix option references missing (section)
 
-- http2: use named define instead of magic constant in read callback
+- [Michael Kaufmann brought this change]
 
-- [Craig Davison brought this change]
+  news: CURLOPT_CONNECT_TO and --connect-to
+  
+  Makes curl connect to the given host+port instead of the host+port found
+  in the URL.
 
-  configure: make the cpp -P detection not clobber CPPFLAGS
+- makefile.vc6: use d suffix on debug object
   
-  CPPPFLAGS is now CPPPFLAG. Fixes CURL_CHECK_DEF.
+  To allow both release and debug builds in parallel.
   
-  Fixes #958
+  Reported-by: Rod Widdowson
+  
+  Fixes #769
 
-- [Olivier Brunel brought this change]
+Jay Satiro (12 Apr 2016)
+- http2: Use size_t type for data drain count
+  
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
-  speed caps: not based on average speeds anymore
+- http2: Improve header parsing
   
-  Speed limits (from CURLOPT_MAX_RECV_SPEED_LARGE &
-  CURLOPT_MAX_SEND_SPEED_LARGE) were applied simply by comparing limits
-  with the cumulative average speed of the entire transfer; While this
-  might work at times with good/constant connections, in other cases it
-  can result to the limits simply being "ignored" for more than "short
-  bursts" (as told in man page).
+  - Error if a header line is larger than supported.
   
-  Consider a download that goes on much slower than the limit for some
-  time (because bandwidth is used elsewhere, server is slow, whatever the
-  reason), then once things get better, curl would simply ignore the limit
-  up until the average speed (since the beginning of the transfer) reached
-  the limit.  This could prove the limit useless to effectively avoid
-  using the entire bandwidth (at least for quite some time).
+  - Warn if cumulative header line length may be larger than supported.
   
-  So instead, we now use a "moving starting point" as reference, and every
-  time at least as much as the limit as been transferred, we can reset
-  this starting point to the current position. This gets a good limiting
-  effect that applies to the "current speed" with instant reactivity (in
-  case of sudden speed burst).
+  - Allow spaces when parsing the path component.
   
-  Closes #971
-
-- HISTORY.md: the multi socket was put in the wrong year!
-
-- [Mark Hamilton brought this change]
-
-  tool_helpers.c: fix comment typo (#989)
-
-- [Mark Hamilton brought this change]
-
-  libtest/test.h: fix typo (#988)
-
-- CURLMOPT_PIPELINING.3: language
-
-- CURLMOPT_PIPELINING.3: extended and clarified
+  - Make sure each header line ends in \r\n. This fixes an out of bounds.
   
-  Especially in regards to the multiplexing part.
-
-Steve Holme (31 Aug 2016)
-- curl_sspi.c: Updated function description comments
+  - Disallow header continuation lines until we decide what to do.
   
-  * Added description to Curl_sspi_free_identity()
-  * Added parameter and return explanations to Curl_sspi_global_init()
-  * Added parameter explaination to Curl_sspi_global_cleanup()
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
-- README: Corrected the supported Visual Studio versions
+- http2: Add Curl_http2_strerror for HTTP/2 error codes
   
-  Missed from commit 8356022d17.
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
-- KNOWN_BUGS: Move the Visual Studio project shortcomings from local README
+- [Tatsuhiro Tsujikawa brought this change]
 
-- KNOWN_BUGS: Expand 6.4 to include Kerberos V5
+  http2: Don't increment drain when one header field is received
   
-  ...and discuss a possible solution.
+  Sicne we write header field in temporary location, not in the memory
+  that upper layer provides, incrementing drain should not happen.
+  
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
-Daniel Stenberg (30 Aug 2016)
-- connect: fix #ifdefs for debug versions of conn/streamclose() macros
+- [Tatsuhiro Tsujikawa brought this change]
+
+  http2: Ensure that http2_handle_stream_close is called
   
-  CURLDEBUG is for the memory debugging
+  This commit ensures that streams which was closed in on_stream_close
+  callback gets passed to http2_handle_stream_close.  Previously, this
+  might not happen.  To achieve this, we increment drain property to
+  forcibly call recv function for that stream.
   
-  DEBUGBUILD is for the extra debug stuff
+  To more accurately check that we have no pending event before shutting
+  down HTTP/2 session, we sum up drain property into
+  http_conn.drain_total.  We only shutdown session if that value is 0.
   
-  Pointed-out-by: Steve Holme
+  With this commit, when stream was closed before reading response
+  header fields, error code CURLE_HTTP2_STREAM is returned even if
+  HTTP/2 level error is NO_ERROR.  This signals the upper layer that
+  stream was closed by error just like TCP connection close in HTTP/1.
+  
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
-- KNOWN_BUGS: mention some cmake "support gaps"
+- [Tatsuhiro Tsujikawa brought this change]
 
-Nick Zitzmann (28 Aug 2016)
-- darwinssl: add documentation stating that the --cainfo option is intended for backward compatibility only
+  http2: Process paused data first before tear down http2 session
   
-  In other news, I changed one other reference to "Mac OS X" in the documentation (that I previously wrote) to say "macOS" instead.
-
-Daniel Stenberg (28 Aug 2016)
-- http2: return CURLE_HTTP2_STREAM for unexpected stream close
+  This commit ensures that data from network are processed before HTTP/2
+  session is terminated.  This is achieved by pausing nghttp2 whenever
+  different stream than current easy handle receives data.
   
-  Follow-up to c3e906e9cd0f, seems like a more appropriate error code
+  This commit also fixes the bug that sometimes processing hangs when
+  multiple HTTP/2 streams are multiplexed.
   
-  Suggested-by: Jay Satiro
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
 - [Tatsuhiro Tsujikawa brought this change]
 
-  http2: handle closed streams when uploading
+  http2: Check session closure early in http2_recv
   
-  Fixes #986
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
-- http2: make sure stream errors don't needlessly close the connection
+- [Tatsuhiro Tsujikawa brought this change]
+
+  http2: Add handling stream level error
   
-  With HTTP/2 each transfer is made in an indivial logical stream over the
-  connection, making most previous errors that caused the connection to get
-  forced-closed now instead just kill the stream and not the connection.
+  Previously, when a stream was closed with other than NGHTTP2_NO_ERROR
+  by RST_STREAM, underlying TCP connection was dropped.  This is
+  undesirable since there may be other streams multiplexed and they are
+  very much fine.  This change introduce new error code
+  CURLE_HTTP2_STREAM, which indicates stream error that only affects the
+  relevant stream, and connection should be kept open.  The existing
+  CURLE_HTTP2 means connection error in general.
   
-  Fixes #941
+  Ref: https://github.com/curl/curl/issues/659
+  Ref: https://github.com/curl/curl/pull/663
 
-- Curl_verify_windows_version: minor edit to avoid compiler warnings
+Daniel Stenberg (11 Apr 2016)
+- http2: drain the socket better...
   
-  ... instead of if() before the switch(), add a default to the switch so
-  that the compilers don't warn on "warning: enumeration value
-  'PLATFORM_DONT_CARE' not handled in switch" anymore.
+  ... but ignore EAGAIN if the stream has ended so that we don't end up in
+  a loop. This is a follow-up to c8ab613 in order to avoid the problem
+  d261652 was made to fix.
+  
+  Reported-by: Jay Satiro
+  Clues-provided-by: Tatsuhiro Tsujikawa
+  
+  Discussed in #750
 
-Steve Holme (27 Aug 2016)
-- RELEASE-NOTES: Added missing fix from commit 15592143f
+- KNOWN_BUGS: added info for "Hangs with PolarSSL"
 
-Jay Satiro (26 Aug 2016)
-- schannel: Disable ALPN for Wine since it is causing problems
+- KNOWN_BUGS: 1.9 HTTP/2 frames while in the connection pool kill reuse
   
-  - Disable ALPN on Wine.
+  Closes #750
+
+- build: include scripts/ in the dist
+
+Steve Holme (9 Apr 2016)
+- CURLOPT_SOCKS5_GSSAPI_SERVICE: Merged with CURLOPT_PROXY_SERVICE_NAME
   
-  - Don't pass input secbuffer when ALPN is disabled.
+  As these two options provide identical functionality, the former for
+  SOCK5 proxies and the latter for HTTP proxies, merged the two options
+  together.
   
-  When ALPN support was added a change was made to pass an input secbuffer
-  to initialize the context. When ALPN is enabled the buffer contains the
-  ALPN information, and when it's disabled the buffer is empty. In either
-  case this input buffer caused problems with Wine and connections would
-  not complete.
+  As such CURLOPT_SOCKS5_GSSAPI_SERVICE is marked as deprecated as of
+  7.49.0.
+
+- urldata: Use bool for socks5_gssapi_nec as it is a flag
   
-  Bug: https://github.com/curl/curl/issues/983
-  Reported-by: Christian Fillion
+  This value is set to TRUE or FALSE so should be a bool and not a long.
 
-Kamil Dudka (26 Aug 2016)
-- [Peter Wang brought this change]
+- url: Ternary operator code style changes
 
-  nss: work around race condition in PK11_FindSlotByName()
-  
-  Serialise the call to PK11_FindSlotByName() to avoid spurious errors in
-  a multi-threaded environment. The underlying cause is a race condition
-  in nssSlot_IsTokenPresent().
-  
-  Bug: https://bugzilla.mozilla.org/1297397
+- CODE_STYLE: Added ternary operator example to 'Space around operators'
   
-  Closes #985
+  Following conversation on the libcurl mailing list.
 
-- nss: refuse previously loaded certificate from file
+- sasl: Fixed compilation errors from commit 9d89a0387
   
-  ... when we are not asked to use a certificate from file
+  ...when GSS-API or Windows SSPI are not used.
 
-Daniel Stenberg (26 Aug 2016)
-- ftp_done: remove dead code
+- url: Corrected comments following 9d89a0387
 
-- TLS: random file/egd doesn't have to match for conn reuse
+- docs: Added clarification following commit 9d89a0387
 
-- test161: add comment for the exit code
+- Makefile: Fixed echo of checksrc check
 
-Dan Fandrich (26 Aug 2016)
-- test219: Add http as a required feature
+- checksrc: Fix issue with the autobuilds not picking up the whitelist
 
-Daniel Stenberg (25 Aug 2016)
-- [Michael Kaufmann brought this change]
+- checksrc: Added missing vauth and vtls directories
 
-  HTTP: stop parsing headers when switching to unknown protocols
-  
-  - unknown protocols probably won't send more headers (e.g. WebSocket)
-  - improved comments and moved them to the correct case statements
+- ftp/imap/pop3/smtp: Allow the service name to be overridden
   
-  Closes #899
+  Allow the service name to be overridden for DIGIST-MD5 and Kerberos 5
+  authentication in FTP, IMAP, POP3 and SMTP.
 
-- openssl: make build with 1.1.0 again
+- http_negotiate: Calculate service name and proxy service name locally
   
-  synced with OpenSSL git master commit cc06906707
+  Calculate the service name and proxy service names locally, rather than
+  in url.c which will allow for us to support overriding the service name
+  for other protocols such as FTP, IMAP, POP3 and SMTP.
 
-- INTERNALS: fix title
+- ROADMAP: Updated following the move of the authentication code
 
-- configure: detect zlib with our pkg-config macros
-  
-  ... instead of relying on the pkg-config autoconf macros to be present.
-  
-  Fixes #972 (again...)
+Patrick Monnerat (8 Apr 2016)
+- KNOWN_BUGS: openldap hangs. TODO: binary SASL.
 
-Jay Satiro (25 Aug 2016)
-- http2: Remove incorrect comments
+Daniel Stenberg (8 Apr 2016)
+- KNOWN_BUGS: 5.6 Improper use of Autoconf cache variables
   
-  .. also remove same from scp
-
-Daniel Stenberg (23 Aug 2016)
-- [Ales Novak brought this change]
+  Closes #603
 
-  ftp: fix wrong poll on the secondary socket
-  
-  When we're uploading using FTP and the server issues a tiny pause
-  between opening the connection to the client's secondary socket, the
-  client's initial poll() times out, which leads to second poll() which
-  does not wait for POLLIN on the secondary socket. So that poll() also
-  has to time out, creating a long (200ms) pause.
-  
-  This patch adds the correct flag to the secondary socket, making the
-  second poll() correctly wait for the connection there too.
-  
-  Signed-off-by: Ales Novak <alnovak@suse.cz>
+- KNOWN_BUGS: 11.2 error buffer not set...
   
-  Closes #978
-
-- RELEASE-NOTES: synced with 95ded2c56
+  Closes #544
 
-- configure: make it work without PKG_CHECK_MODULES
-  
-  With commit c2f9b78 we added a new dependency on pkg-config for
-  developers which may be unwanted. This change make the configure script
-  still work as before if pkg-config isn't installed, it'll just use the
-  old zlib detection logic without pkg-config.
-  
-  Reported-by: Marc Hörsken
+- KNOWN_BUGS: 11.1 Curl leaks .onion hostnames in DNS
   
-  Fixes #972
+  Closes #543
 
-Marc Hoersken (21 Aug 2016)
-- Revert "KNOWN_BUGS: SOCKS proxy not working via IPv6"
-  
-  This reverts commit 9cb1059f92286a6eb5d28c477fdd3f26aed1d554.
+- KNOWN_BUGS: 1.8 DNS timing is wrong for HTTP redirects
   
-  As discussed in #835 SOCKS5 supports IPv6 proxies and destinations.
+  Closes #522
 
-Daniel Stenberg (21 Aug 2016)
-- [Marco Deckel brought this change]
+- TODO: HTTP/2 "prior knowledge" is implemented!
 
-  win: Basic support for Universal Windows Platform apps
-  
-  Closes #820
+- [Damien Vielpeau brought this change]
 
-Steve Holme (21 Aug 2016)
-- sasl: Don't use GSSAPI authentication when domain name not specified
+  mbedtls: fix MBEDTLS_DEBUG builds
+
+- mbedtls: implement and provide *_data_pending()
   
-  Only choose the GSSAPI authentication mechanism when the user name
-  contains a Windows domain name or the user is a valid UPN.
+  ... as otherwise we might get stuck thinking there's no more data to
+  handle.
   
-  Fixes #718
-
-- vauth: Added check for supported SSPI based authentication mechanisms
+  Reported-by: Damien Vielpeau
   
-  Completing commit 00417fd66c and 2708d4259b.
+  Fixes #737
 
-- http.c: Remove duplicate (authp->avail & CURLAUTH_DIGEST) check
-  
-  From commit 2708d4259b.
+- mbedtls: follow-up for the previous commit
 
-Marc Hoersken (20 Aug 2016)
-- socks.c: display the hostname returned by the SOCKS5 proxy server
-  
-  Instead of displaying the requested hostname the one returned
-  by the SOCKS5 proxy server is used in case of connection error.
-  The requested hostname is displayed earlier in the connection sequence.
-  
-  The upper-value of the port is moved to a temporary variable and
-  replaced with a 0-byte to make sure the hostname is 0-terminated.
+- mbedtls.c: name space pollution fix, Use 'Curl_'
 
-Steve Holme (20 Aug 2016)
-- urldata.h: Corrected comment for httpcode which is also populated by SMTP
+- mbedtls.c: changed private prefix to mbed_
   
-  As of 7.25.0 and commit 5430007222.
+  mbedtls_ is the prefix used by the mbedTLS library itself so we should
+  avoid using that for our private functions.
 
-Marc Hoersken (20 Aug 2016)
-- socks.c: use Curl_printable_address in SOCKS5 connection sequence
-  
-  Replace custom string formatting with Curl_printable_address.
-  Add additional debug and error output in case of failures.
+- mbedtls.h: fix compiler warnings
 
-- socks.c: align SOCKS4 connection sequence with SOCKS5
+- Revert "winbuild: trying to set some files eol=crlf for git"
   
-  Calling sscanf is not required since the raw IPv4 address is
-  available and the protocol can be detected using ai_family.
+  This reverts commit 9c08b4f1e7eced5a4d3782a3e0daa484c9d77d21.
+  
+  Didn't help. Caused problems.
+  
+  Fixes #756
 
-Steve Holme (20 Aug 2016)
-- http.c: Corrected indentation change from commit 2708d4259b
+- curl.1: use example.com more
   
-  Made by Visual Studio's auto-correct feature and missed by me in my own
-  code reviews!
+  Make (most) example snippets use the example.com domain instead of the
+  random ones picked and used before. Some of those were probably
+  legitimate sites and some not. example.com is designed for this purpose.
 
-- http: Added calls to Curl_auth_is_<mechansism>_supported()
+- [Michael Kaufmann brought this change]
+
+  HTTP2: Add a space character after the status code
   
-  Hooked up the HTTP authentication layer to query the new 'is mechanism
-  supported' functions when deciding what mechanism to use.
+  The space character after the status code is mandatory, even if the
+  reason phrase is empty (see RFC 7230 section 3.1.2)
   
-  As per commit 00417fd66c existing functionality is maintained for now.
-
-Marc Hoersken (20 Aug 2016)
-- socks.c: improve verbose output of SOCKS5 connection sequence
+  Closes #755
 
-- configure.ac: add missing quotes to PKG_CHECK_MODULES
+- [Viktor Szakats brought this change]
 
-Steve Holme (20 Aug 2016)
-- sasl: Added calls to Curl_auth_is_<mechansism>_supported()
-  
-  Hooked up the SASL authentication layer to query the new 'is mechanism
-  supported' functions when deciding what mechanism to use.
+  URLs: change http to https in many places
   
-  For now existing functionality is maintained.
+  Closes #754
 
-Daniel Stenberg (19 Aug 2016)
-- [Miroslav Franc brought this change]
+- winbuild: trying to set some files eol=crlf for git
+  
+  Thinking it might help to apply patches etc with git.
 
-  spnego_sspi: fix memory leak in case *outlen is zero (#970)
+- [Theodore Dubois brought this change]
 
-- CURLMOPT_MAX_TOTAL_CONNECTIONS.3: mention it can also multiplex
+  curl.1: change example for -F
+  
+  It's a bad idea to send your passwords anywhere, especially over HTTP.
+  Modified example to send a picture instead.
+  
+  Fixes #752
 
-Steve Holme (18 Aug 2016)
-- vauth: Introduced Curl_auth_is_<mechansism>_supported() functions
+- KNOWN_BUGS: reorganized and cleaned up
   
-  As Windows SSPI authentication calls fail when a particular mechanism
-  isn't available, introduced these functions for DIGEST, NTLM, Kerberos 5
-  and Negotiate to allow both HTTP and SASL authentication the opportunity
-  to query support for a supported mechanism before selecting it.
+  Now sorted into categories and organized in the same style we do the
+  TODO document. It will make each issue linked properly on the
+  https://curl.haxx.se/docs/knownbugs.html web page.
   
-  For now each function returns TRUE to maintain compatability with the
-  existing code when called.
+  The sections should make it easier to find issues and issues related to
+  areas of the reader's specific interest.
 
-Daniel Stenberg (18 Aug 2016)
-- test1144: verify HEAD with body-only response
+Jay Satiro (6 Apr 2016)
+- KNOWN_BUGS: #95 curl in Windows can't handle Unicode arguments
 
-Steve Holme (17 Aug 2016)
-- RELEASE-PROCEDURE: Added some more future release dates
-  
-  ...and removed some old ones
+Steve Holme (6 Apr 2016)
+- KNOWN_BUGS: Use https://curl.haxx.se URL for github based issues
 
-Daniel Stenberg (17 Aug 2016)
-- [David Woodhouse brought this change]
+- CHECKSRC.md: Corrected some typos
 
-  curl: allow "pkcs11:" prefix for client certificates
+- RELEASE-NOTES: Corrected last updated
   
-  RFC7512 provides a standard method to reference certificates in PKCS#11
-  tokens, by means of a URI starting 'pkcs11:'.
+  Included a summary of the checksrc.bat updates and combined two krb5
+  changes as they should have been implemented at the same time.
+
+- vauth: Corrected a number of typos in comments
   
-  We're working on fixing various applications so that whenever they would
-  have been able to use certificates from a file, users can simply insert
-  a PKCS#11 URI instead and expect it to work. This expectation is now a
-  part of the Fedora packaging guidelines, for example.
+  Reported-by: Michael Osipov
+
+Jay Satiro (5 Apr 2016)
+- KNOWN_BUGS: #94 IMAP custom requests use the LIST handler
   
-  This doesn't work with cURL because of the way that the colon is used
-  to separate the certificate argument from the passphrase. So instead of
+  Bug: https://github.com/curl/curl/issues/536
+  Reported-by: eXeC64@users.noreply.github.com
+
+Daniel Stenberg (5 Apr 2016)
+- KNOWN_BUGS: remove 68, 70 and 72.
   
-     curl -E 'pkcs11:manufacturer=piv_II;id=%01' …
+  Due to their age (we don't fully know if they actually remain) and lack
+  of detail - very few people will bother to find out what they're about
+  or work on them. If people truly still suffer from any of these, I
+  assume they will be reported again and then we'll deal with them.
   
-  I instead need to invoke cURL with the colon escaped, like this:
+  72. "Pausing pipeline problems."
+    https://curl.haxx.se/mail/lib-2009-07/0214.html
   
-     curl -E 'pkcs11\:manufacturer=piv_II;id=%01' …
+  70. Problem re-using easy handle after call to curl_multi_remove_handle
+    https://curl.haxx.se/mail/lib-2009-07/0249.html
   
-  This is suboptimal because we want *consistency* — the URI should be
-  usable in place of a filename anywhere, without having strange
-  differences for different applications.
+  68. "More questions about ares behavior".
+    https://curl.haxx.se/mail/lib-2009-08/0012.html
+
+- KNOWN_BUGS: remove 92 and 88, fixed
+
+- http2: fix connection reuse when PING comes after last DATA
   
-  This patch therefore disables the processing in parse_cert_parameter()
-  when the string starts with 'pkcs11:'. It means you can't pass a
-  passphrase with an unescaped PKCS#11 URI, but there's no need to do so
-  because RFC7512 allows a PIN to be given as a 'pin-value' attribute in
-  the URI itself.
+  It turns out the google GFE HTTP/2 servers send a PING frame immediately
+  after a stream ends and its last DATA has been received by curl. So if
+  we don't drain that from the socket, it makes the socket readable in
+  subsequent checks and libcurl then (wrongly) assumes the connection is
+  dead when trying to reuse the connection.
   
-  Also, if users are already using RFC7512 URIs with the colon escaped as
-  in the above example — even providing a passphrase for cURL to handling
-  instead of using a pin-value attribute, that will continue to work
-  because their string will start 'pkcs11\:' and won't match the check.
+  Reported-by: Joonas Kuorilehto
   
-  What *does* break with this patch is the extremely unlikely case that a
-  user has a file which is in the local directory and literally named
-  just "pkcs11", and they have a passphrase on it. If that ever happened,
-  the user would need to refer to it as './pkcs11:<passphrase>' instead.
+  Discussed in #750
 
-- nss: make the global variables static
+- multi: remove trailing space in debug output
 
-- openssl: use regular malloc instead of OPENSSL_malloc
-  
-  This allows for better memmory debugging and torture tests.
+- RELEASE-NOTES: synced with 86e97b642fb
 
-- proxy: fix tests as follow-up to 93b0d907d5
-  
-  This fixes tests that were added after 113f04e664b as the tests would
-  fail otherwise.
-  
-  We bring back "Proxy-Connection: Keep-Alive" now unconditionally to fix
-  regressions with old and stupid proxies, but we could possibly switch to
-  using it only for CONNECT or only for NTLM in a future if we want to
-  gradually reduce it.
-  
-  Fixes #954
+- CHECKSRC.md: mention cmdline options, fix the bullet list
+
+- docs/CHECKSRC.md: initial version
+
+Steve Holme (3 Apr 2016)
+- checksrc.bat: Added support for the examples
+
+Daniel Stenberg (3 Apr 2016)
+- lib/src: fix the checksrc invoke
   
-  Reported-by: János Fekete
+  ... now works correctly when invoke from the root makefile
 
-- Revert "Proxy-Connection: stop sending this header by default"
+- nw: please the stricter checksrc
+
+Steve Holme (3 Apr 2016)
+- checksrc.bat: Re-enabled the tests directory by default
   
-  This reverts commit 113f04e664b16b944e64498a73a4dab990fe9a68.
+  Following the recent changes to the source in the tests directory,
+  re-enabled tests for the default scan.
 
-- CURLOPT_PROXY.3: unsupported schemes cause errors now
+- checksrc.bat: Added tests/server directory support
   
-  Follow-up to a96319ebb9 (document the new behavior)
+  In addition to commit 83b174b3f0 and following the recent changes.
 
-- tests/README: mention nghttpx for HTTP/2 tests
+- tests: Fixed header files to comply with our code style
 
-- README.md: add our CII Best Practices badge
+Daniel Stenberg (3 Apr 2016)
+- make checksrc: run it in docs/examples too by default
 
-- proxy: polished the error message for unsupported schemes
+- docs/examples: remove spurious white spaces all over
   
-  Follow up to a96319ebb93
+  ... to please the new, slightly picker, checksrc.pl
 
-- test219: verify unsupported scheme for proxies get rejected
+- tests: fix make checksrc in servers/
 
-- proxy: reject attempts to use unsupported proxy schemes
-  
-  I discovered some people have been using "https://example.com" style
-  strings as proxy and it "works" (curl doesn't complain) because curl
-  ignores unknown schemes and then assumes plain HTTP instead.
-  
-  I think this misleads users into believing curl uses HTTPS to proxies
-  when it doesn't. Now curl rejects proxy strings using unsupported
-  schemes instead of just ignoring and defaulting to HTTP.
+- tests: 'make checksrc' now checks server/ too
 
-- RELEASE-NOTES: synced with b7ee5316c2fd5b
+- root/make: have checksrc run in include/curl too
 
-Marc Hoersken (14 Aug 2016)
-- socks.c: Correctly calculate position of port in response packet
-  
-  Third commit to fix issue #944 regarding SOCKS5 error handling.
-  
-  Reported-by: David Kalnischkies
+- tests/server: comply with our code style
 
-- socks.c: Do not modify and invalidate calculated response length
-  
-  Second commit to fix issue #944 regarding SOCKS5 error handling.
-  
-  Reported-by: David Kalnischkies
+- code: style updates
 
-- socks.c: Move error output after reading the whole response packet
+- checksrc: check for more malplaced spaces
+
+- unit: make unit test source code checksrc compliant
+
+- checksrc: run checksrc in tests when 'make checksrc' in root
+
+- checksrc: remove debug crap
+
+- lib557: allow too long lines
+
+- checksrc: allow ignore of specific warnings within a file (section)
+
+- checksrc: add warning names, explain on help output
+
+Steve Holme (3 Apr 2016)
+- checksrc.bat: Disable tests by default until warnings are fixed
+
+- checksrc.bat: Added support for the tests directory
+
+- vauth: Removed the need for a separate GSS-API based SPN function
+
+- curl_sasl: Fixed potential null pointer utilisation
   
-  First commit to fix issue #944 regarding SOCKS5 error handling.
+  Although this should never happen due to the relationship between the
+  'mech' and 'resp' variables, and the way they are allocated together,
+  it does cause problems for code analysis tools:
   
-  Reported-by: David Kalnischkies
-
-Daniel Stenberg (13 Aug 2016)
-- [Ronnie Mose brought this change]
+  V595 The 'mech' pointer was utilized before it was verified against
+       nullptr. Check lines: 376, 381. curl_sasl.c 376
+  
+  Bug: https://github.com/curl/curl/issues/745
+  Reported-by: Alexis La Goutte
 
-  MANUAL: Remove invalid link to LDAP documentation (#962)
+- spnego: Small code tidy up
   
-  The server developer.netscape.com does not resolve into any
-  ip address and can be removed.
+  * Prefer dereference of string pointer rather than strlen()
+  * Free challenge pointer in one place
+  * Additional comments
 
-Jay Satiro (13 Aug 2016)
-- openssl: accept subjectAltName iPAddress if no dNSName match
+- krb5: Small code tidy up
   
-  Undo change introduced in d4643d6 which caused iPAddress match to be
-  ignored if dNSName was present but did not match.
+  * Prefer dereference of string pointer rather than strlen()
+  * Free challenge pointer in one place
+  * Additional comments
+
+- krb5_gssapi: Only process challenge when present
   
-  Also, if iPAddress is present but does not match, and dNSName is not
-  present, fail as no-match. Prior to this change in such a case the CN
-  would be checked for a match.
+  This wouldn't cause a problem because of the way the function is called,
+  but prior to this change, we were processing the challenge message when
+  the credentials were NULL rather than when the challenge message was
+  populated.
   
-  Bug: https://github.com/curl/curl/issues/959
-  Reported-by: wmsch@users.noreply.github.com
-
-Daniel Stenberg (12 Aug 2016)
-- [Dambaev Alexander brought this change]
+  This also brings this part of the Kerberos 5 code in line with the
+  Negotiate code.
 
-  configure.ac: add zlib search with pkg-config
+- krb5: Fixed missing client response when mutual authentication enabled
   
-  Closes #956
+  Although mutual authentication is currently turned off and can only be
+  enabled by changing libcurl source code, authentication using Kerberos
+  5 has been broken since commit 79543caf90 in this use case.
 
-- rtsp: ignore whitespace in session id
+- krb5_sspi: Only process challenge when present
   
-  Follow-up to e577c43bb to fix test case 569 brekage: stop the parser at
-  whitespace as well.
+  This wouldn't cause a problem because of the way the function is called,
+  but prior to this change, we were processing the challenge message when
+  the credentials were NULL rather than when the challenge message was
+  populated.
   
-  Help-by: Erik Janssen
+  This also brings this part of the Kerberos 5 code in line with the
+  Negotiate code.
 
-- HTTP: retry failed HEAD requests too
+- krb5_sspi: Only generate the output token when its not allocated
   
-  Mark's new document about HTTP Retries
-  (https://mnot.github.io/I-D/httpbis-retry/) made me check our code and I
-  spotted that we don't retry failed HEAD requests which seems totally
-  inconsistent and I can't see any reason for that separate treatment.
+  Prior to this change, we were generating the output token when the
+  credentials were NULL rather than when the output token was NULL.
   
-  So, no separate treatment for HEAD starting now. A HTTP request sent
-  over a reused connection that gets cut off before a single byte is
-  received will be retried on a fresh connection.
+  This also brings this part of the Kerberos 5 code in line with the
+  Negotiate code.
+
+- krb5: Only generate a SPN when its not known
+  
+  Prior to this change, we were generating the SPN in the SSPI code when
+  the credentials were NULL and in the GSS-API code when the context was
+  empty. It is better to decouple the SPN generation from these checks
+  and only generate it when the SPN itself is NULL.
   
-  Made-aware-by: Mark Nottingham
+  This also brings this part of the Kerberos 5 code in line with the
+  Negotiate code.
 
-- mk-ca-bundle.1: document -m, added in 1.26
+Daniel Stenberg (3 Apr 2016)
+- tests/libtest: follow our code style guidelines better
+  
+  ... checksrc of all test code is pending.
 
-- RELEASE-NOTES: synced with e577c43bb5
+- checksrc.whitelist: remove fopen() uses
 
-- [Erik Janssen brought this change]
+- formdata: use appropriate fopen() macros
 
-  rtsp: accept any RTSP session id
-  
-  Makes libcurl work in communication with gstreamer-based RTSP
-  servers. The original code validates the session id to be in accordance
-  with the RFC. I think it is better not to do that:
+- checksrc: improve the fopen() parser somewhat
   
-  - For curl the actual content is a don't care.
+  The quote scanner was too fragile, now look for a comma instead to find
+  the mode argument.
+
+- unit1604: fix snprintf
   
-  - The clarity of the RFC is debatable, is $ allowed or only as \$, that
-    is imho not clear
+  follow-up to 0326b06
   
-  - Gstreamer seems to url-encode the session id but % is not allowed by
-  the RFC
+  sizeof(pointer) is no good for the buffer size!
   
-  - less code
+  Reported-by: Viktor Szakats
+
+Steve Holme (3 Apr 2016)
+- unittests: Fixed compilation warnings
   
-  With this patch curl will correctly handle real-life lines like:
-  Session: biTN4Kc.8%2B1w-AF.; timeout=60
+  warning: implicit declaration of function 'sprintf_was_used'
+           [-Wimplicit-function-declaration]
   
-  Bug: https://curl.haxx.se/mail/lib-2016-08/0076.html
+  Follow up to the modications made to tests/libtest in commit 55452ebdff
+  as we prefer not to use sprintf() now.
 
-- symbols-in-versions: add CURL_STRICTER
+Daniel Stenberg (2 Apr 2016)
+- curl.1: -w filename_effective was introduced in 7.26.0
   
-  Added in 5fce88aa8c12564
+  We never made a 7.25.1 release
 
-- [Simon Warta brought this change]
+- 7.49.0: next release version
 
-  winbuild: Allow changing C compiler via environment variable CC (#952)
+- http2: make use of the nghttp2 error callback
   
-  This makes it possible to use specific compilers or a cache.
+  It offers extra info from nghttp2 in certain error cases. Like for
+  example when trying prior-knowledge http2 on a server that doesn't speak
+  http2 at all. The error message is passed on as a verbose message to
+  libcurl.
   
-  Sample use for clcache:
-  set CC=clcache.bat
-  nmake /f Makefile.vc DEBUG=no MODE=static VC=14 GEN_PDB=no
-
-- LICENSE-MIXING.md: switched to markdown
+  Discussed in #722
+  
+  The error callback was added in nghttp2 1.9.0
 
-- docs-make: have markdown files use .md
+Steve Holme (2 Apr 2016)
+- spnego: Renamed the context's SPN variable
+  
+  To be consistent with the Kerberos 5 context and other authentication
+  code.
 
-- curl.h: make CURL_NO_OLDIES define CURL_STRICTER
+- krb5_gssapi: Renamed the status variables
+  
+  For consistency with the spnego code.
 
-- HISTORY.md: use markdown extension
+- krb5: Moved host from Curl_auth_create_gssapi_user_message() to be argument
+  
+  For consistency with the spnego and oauth2 code moved the setting of
+  the host name outside of the Curl_auth_create_gssapi_user_messag()
+  function.
+  
+  This will allow us to more easily override it in the future.
 
-- SSLCERTS.md: renamed to markdown extension
+- test1119: Fixed missing CURL_DID_MEMORY_FUNC_TYPEDEFS symbol
 
-- INTERNALS.md: use markdown extension for markdown content
+- RELEASE-NOTES: Removed "http_negotiate: Corrected host and proxy host name"
+  
+  As this was introduced in the recent vauth changes and not a prior
+  release.
 
-- CONTRIBUTE.md: markdown extension
+Daniel Stenberg (1 Apr 2016)
+- RELEASE-NOTES: synced with 0aa8da10bbdafa
 
-- CONTRIBUTE: changed to markdown
+Steve Holme (1 Apr 2016)
+- http_negotiate: Corrected host and proxy host name being wrong way round
+  
+  I had accidentally used the proxy server name for the host and the host
+  server name for the proxy in commit ad5e9bfd5d and 6d6f9ca1d9. Whilst
+  Windows SSPI was quite happy with this, GSS-API wasn't.
+  
+  Thanks-to:  Michael Osipov
 
-- CONTRIBUTE: refreshed
+- build: Changed the Visual Studio projects warning level from 3 to 4
+  
+  After squashing most of our compiler warnings, up'ed the default
+  warning level from 3 to 4 in order to increase the likelyhood of
+  catching future warnings.
 
-- TODO: added an SSH section and two SFTP things to do
+Daniel Stenberg (1 Apr 2016)
+- [ehlertjd@gmail.com brought this change]
 
-- TODO: remove the 1.22 duplicated item
+  IMAP: check pointer before dereferencing it
+  
+  may be null in the CURLOPT_CONNECT_ONLY case
+  
+  Fixes #747
 
-- TODO: move "CURLOPT_MAIL_CLIENT" to SMTP section
+Steve Holme (1 Apr 2016)
+- .gitignore: Added new VC14 SQLite based program database files
 
-- TODO: API for URL parsing/splitting
+- curl_memory.h: Fixed typo in comment
+  
+  From commit 7218b52c49.
 
-- TODO: move QUIC to the HTTP section
+- spnego: Corrected some typos in comments
+  
+  Corrected typos from commit ad5e9bfd5d and 6d6f9ca1d9.
 
-- [Simon Warta brought this change]
+- memdebug: Ensure curl/curl.h is included before curl_memory.h
+  
+  Follow up to commit 7db9782dd6.
 
-  winbuild: Free name $(CC) in Makefile (#950)
+Daniel Stenberg (1 Apr 2016)
+- upload: missing rewind call could make libcurl hang
   
-  In the old line number 290, CC and CURL_CC had the same value. After
-  that, /DCURL_STATICLIB was added to CC but not CURL_CC (intended?).
+  When an upload is done, there are two places where that can be detected
+  and only one of them would rewind the input stream - which sometimes is
+  necessary for example when doing NTLM HTTP POSTs and more.
   
-  This gets rid of the CC variable entirely. It is a first step to make it
-  possible to manualyl set a CC variable in order to be able to change the
-  compiler.
-
-- TODO: Use huge HTTP/2 windows
-
-- [Simon Warta brought this change]
-
-  winbuild: Avoid setting redundant CFLAGS to compile commands (#949)
+  This could then end up libcurl hanging.
   
-  $(CURL_CC) is always used with $(CURL_CFLAGS) appended, so before this,
-  all arguments in CURL_CFLAGS have been added twice.
+  Figured-out-by: Isaac Boukris
+  Reported-by: Anatol Belski
+  
+  Fixes #741
 
-Jay Satiro (8 Aug 2016)
-- cmake: Enable win32 threaded resolver by default
+- curl.h: define CURL_DID_MEMORY_FUNC_TYPEDEFS
   
-  - Turn on USE_THREADS_WIN32 in Windows if ares isn't on
+  So that we only do the extra typedefs in curl_memory.h when we really
+  need to and avoid double typedefs.
   
-  This change is similar to what we already do in the autotools build.
+  follow-up commit to 7218b52c49aeb1
+  
+  Thanks-to: Steve Holme
 
-- cmake: Enable win32 large file support by default
+- curl/mprintf.h: remove support for _MPRINTF_REPLACE
   
-  All compilers used by cmake in Windows should support large files.
+  The define is not in our name space and is therefore not protected by
+  our API promises.
   
-  - Add test SIZEOF_OFF_T
-  - Remove outdated test SIZEOF_CURL_OFF_T
-  - Turn on USE_WIN32_LARGE_FILES in Windows
-  - Check for 'Largefile' during the features output
+  It was only really used by libcurl internals but was mostly erased from
+  there already in 8aabbf5 (March 2015). This is supposedly the final
+  death blow to that define from everywhere.
+  
+  As a side-effect, making sure _MPRINTF_REPLACE is gone and not used, I
+  made the lib tests in tests/libtest/ use curl_printf.h for its redefine
+  magic and then subsequently the use of sprintf() got banned in the tests
+  as well (as it is in libcurl internals) and I then replaced them all
+  with snprintf().
+  
+  In the unlikely event that any users is actually using this define and
+  gets sad by this change, it is very easily copied to the user's own
+  code.
 
-Daniel Stenberg (7 Aug 2016)
-- TODO: added several ideas, removed SPDY
+- curl_memory.h: avoid the curl/curl.h include
+  
+  Discussed in #743
 
-- http2: always wait for readable socket
+Steve Holme (1 Apr 2016)
+- url: Corrected get protocol family for FTP and LDAP
   
-  Since the server can at any time send a HTTP/2 frame to us, we need to
-  wait for the socket to be readable during all transfers so that we can
-  act on incoming frames even when uploading etc.
+  Fixed copy/paste error from commit a5aec58726.
+
+Jay Satiro (31 Mar 2016)
+- strerror: don't bit shift a signed integer
   
-  Reminded-by: Tatsuhiro Tsujikawa
+  Bug: https://github.com/curl/curl/issues/744
+  Reported-by: Alexis La Goutte
 
-- RELEASE-NOTES: synced with 7b4bf37a44791
+Daniel Stenberg (31 Mar 2016)
+- http2: more documentation for prior knowledge
 
-- [Thomas Glanzmann brought this change]
+- [Diego Bes brought this change]
 
-  mbedtls: set debug threshold to 4 (verbose) when MBEDTLS_DEBUG is defined
+  http2: support "prior knowledge", no upgrade from HTTP/1.1
   
-  In order to make MBEDTLS_DEBUG work, the debug threshold must be unequal
-  to 0.  This patch also adds a comment how mbedtls must be compiled in
-  order to make debugging work, and explains the possible debug levels.
-
-- CURLOPT_TCP_NODELAY: now enabled by default
+  Supports HTTP/2 over clear TCP
   
-  After a few wasted hours hunting down the reason for slowness during a
-  TLS handshake that turned out to be because of TCP_NODELAY not being
-  set, I think we have enough motivation to toggle the default for this
-  option. We now enable TCP_NODELAY by default and allow applications to
-  switch it off.
+  - Optimize switching to HTTP/2 by removing calls to init and setup
+  before switching. Switching will eventually call setup and setup calls
+  init.
   
-  This also makes --tcp-nodelay unnecessary, but --no-tcp-nodelay can be
-  used to disable it.
+  - Supports new version to “force” the use of HTTP/2 over clean TCP
   
-  Thanks-to: Tim Rühsen
-  Bug: https://curl.haxx.se/mail/lib-2016-06/0143.html
+  - Add common line parameter “--http2-prior-knowledge” to the Curl
+    command line tool.
 
-- [Serj Kalichev brought this change]
-
-  TFTP: Fix upload problem with piped input
+- imap: remove duplicated function
   
-  When input stream for curl is stdin and input stream is not a file but
-  generated by a script then curl can truncate data transfer to arbitrary
-  size since a partial packet is treated as end of transfer by TFTP.
+  The list and search response functions were identical! Merged into one
+  now. Detected by PVS Studio.
   
-  Fixes #857
+  Reported-by: Alexis La Goutte
 
-- mk-ca-bundle.pl: -m keeps ca cert meta data in output
+- SOCKS5_gssapi_negotiate: don't assume little-endian ints
   
-  Makes the script pass on comments holding meta data to the output
-  file. Like fingerprinters, issuer, date ranges etc.
+  The code copied one byte from a 32bit integer, which works fine as long
+  as the byte order is the same. Not a fine assumption. Reported by PVS
+  Studio.
   
-  Closes #937
+  Reported-by: Alexis La Goutte
 
-- multi: make Curl_expire() work with 0 ms timeouts
+- http: remove ((expression)) double parentheses
+
+- Curl_add_buffer_send: avoid possible NULL dereference
   
-  Previously, passing a timeout of zero to Curl_expire() was a magic code
-  for clearing all timeouts for the handle. That is now instead made with
-  the new Curl_expire_clear() function and thus a 0 timeout is fine to set
-  and will trigger a timeout ASAP.
+  ... as we check for a NULL pointer below, we move the derefence to after
+  the check. Detected by PVS Studio.
   
-  This will help removing short delays, in particular notable when doing
-  HTTP/2.
+  Reported-by: Alexis La Goutte
 
-- transfer: return without select when the read loop reached maxcount
+- file: remove duplicate checks of the same variable
   
-  Regression added in 790d6de48515. The was then added to avoid one
-  particular transfer to starve out others. But when aborting due to
-  reading the maxcount, the connection must be marked to be read from
-  again without first doing a select as for some protocols (like SFTP/SCP)
-  the data may already have been read off the socket.
+  ... as it doesn't change in between. Deteced by PVS Studio.
   
-  Reported-by: Dan Donahue
-  Bug: https://curl.haxx.se/mail/lib-2016-07/0057.html
+  Reported-by: Alexis La Goutte
 
-Steve Holme (3 Aug 2016)
-- [Bill Nagel brought this change]
+Steve Holme (30 Mar 2016)
+- [Marcel Raad brought this change]
 
-  mbedtls: Added support for NTLM
+  openssl: Fix compilation warnings
+  
+  When compiling with OpenSSL 1.1.0 (so that the HAVE_X509_GET0_SIGNATURE
+  && HAVE_X509_GET0_EXTENSIONS pre-processor block is active), Visual C++
+  14 complains:
+  
+  warning C4701: potentially uninitialized local variable 'palg' used
+  warning C4701: potentially uninitialized local variable 'psig' used
 
-Daniel Stenberg (3 Aug 2016)
-- [Sergei Nikulov brought this change]
+Daniel Stenberg (30 Mar 2016)
+- multi: turn Curl_done into file local multi_done
+  
+  ... as it now is used by multi.c only.
 
-  travis: removed option to rebuild autotool from source
+- multi: multi_reconnect_request is the former Curl_reconnect_request
   
-  Fixes #943
+  now a file local function in multi.c
 
-- bump: start working toward 7.50.2
+- multi: move Curl_do and Curl_do_done to multi.c and make static
+  
+  ... called multi_do and multi_do_done as they're file local now.
 
-Version 7.50.1 (3 Aug 2016)
+Jay Satiro (29 Mar 2016)
+- wolfssl: Use ECC supported curves extension
+  
+  https://github.com/wolfSSL/wolfssl/issues/366
 
-Daniel Stenberg (3 Aug 2016)
-- THANKS: 7 new contributors from the 7.50.1 release
+- build-wolfssl: Allow a broader range of ciphers (Visual Studio)
+  
+  This is an update to the build-time options used to build wolfSSL in
+  Visual Studio for greater compatibility, and make it behave similar to
+  the way OpenSSL 1.0.2 behaves. Starting in wolfSSL v3.6.6 static ciphers
+  and SSLv3 are disabled by default at build time, but we can use both.
+  
+  - Enable static cipher suites TLS_ECDH_ and TLS_RSA_.
+  
+  - Enable SSLv3 hello. Though in libcurl we disable it by default at
+  runtime, we make it available so the user can manually select it if
+  necessary.
 
-- RELEASE-NOTES: 7.50.1
+Daniel Stenberg (29 Mar 2016)
+- [Isaac Boukris brought this change]
 
-- TLS: only reuse connections with the same client cert
+  GSS: make Curl_gss_log_error more verbose
   
-  CVE-2016-5420
-  Bug: https://curl.haxx.se/docs/adv_20160803B.html
-
-- TLS: switch off SSL session id when client cert is used
+  Also display the GSS_C_GSS_CODE (major code) when specified instead of
+  only GSS_C_MECH_CODE (minor code).
   
-  CVE-2016-5419
-  Bug: https://curl.haxx.se/docs/adv_20160803A.html
-  Reported-by: Bru Rom
-  Contributions-by: Eric Rescorla and Ray Satiro
-
-- curl_multi_cleanup: clear connection pointer for easy handles
+  In addition, the old code was printing a colon twice after the prefix
+  and also miscalculated the length of the buffer in between calls to
+  gss_display_status (the length of ": " was missing).
   
-  CVE-2016-5421
-  Bug: https://curl.haxx.se/docs/adv_20160803C.html
-  Reported-by: Marcelo Echeverria and Fernando Muñoz
-
-- KNOWN_BUGS: SOCKS proxy not working via IPv6
+  Also, gss_buffer is not guaranteed to be NULL terminated and thus need
+  to restrict reading by its length.
   
-  Closes #835
+  Closes #738
 
-- KNOWN_BUGS: CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
+- build: use roffit 0.11 feature
   
-  Closes #768
+  ... load file specified as argument.
 
-- KNOWN_BUGS: transfer-encoding: chunked in HTTP/2
+- http2: set correct scheme in handler structs [regression]
   
-  Closes #662
+  Since commit a5aec58 the handler schemes need to match for the
+  connections to be reused and for HTTP/2 multiplexing to work, reusing
+  connections is very important!
+  
+  Closes #736
 
-- TODO: Provide cmake config-file
+- hostip.c: minor white space edit for style
+
+- [Viktor Szakats brought this change]
+
+  TODO: use secure protocol in recently added URL
   
-  Closes #885
+  Closes #733
 
-Patrick Monnerat (2 Aug 2016)
-- os400: define BUILDING_LIBCURL in make script.
+- HTTP2.md: mention libressl and boringssl too
 
-Daniel Stenberg (1 Aug 2016)
-- RELEASE-NOTES: synced with aa9f536a18b
+- docs/HTTP-COOKIES: converted to markdown
 
-Jay Satiro (1 Aug 2016)
-- [Thomas Glanzmann brought this change]
+- HTTP2: s/polarssl/mbedtls
 
-  mbedtls: Fix debug function name
+Jay Satiro (28 Mar 2016)
+- wolfssl: Add ALPN support
+
+- tool_operate: remove mixed declaration
   
-  This patch is necessary so that curl compiles if MBEDTLS_DEBUG is
-  defined.
+  This is a follow up to the previous commit.
+
+Daniel Stenberg (28 Mar 2016)
+- curl: warn for --capath use if not supported by libcurl
   
-  Bug: https://curl.haxx.se/mail/lib-2016-08/0001.html
+  Closes #492
 
-Daniel Stenberg (1 Aug 2016)
-- [Sergei Nikulov brought this change]
+- TODO: 2.5 Edge-triggered sockets should work
 
-  travis: fix OSX build by re-installing libtool
+- Makefile.am: skip the scripts dir
   
-  Apparently due to a broken homebrew install
+  Skipping the scripts dir is primarily done for 'make install' so that it
+  does not attempt to install the zsh completion script as we've not yet
+  found a proper way to do/run that at install time.
   
-  fixes #934
-  Closes #939
+  By leaving the script dir's Makefile in place, a user can still opt to
+  run make install manually in there.
+  
+  Closes #620
 
-- [Martin Vejnár brought this change]
+- CURLMOPT_SOCKETFUNCTION.3: describe the 'what' argument
 
-  win32: fix a potential memory leak in Curl_load_library
-  
-  If a call to GetSystemDirectory fails, the `path` pointer that was
-  previously allocated would be leaked. This makes sure that `path` is
-  always freed.
+- curl_multi_socket_action.3: mark the options properly
   
-  Closes #938
+  ... to make them appear as links on the html version.
 
-- include: revert 9adf3c4 and make public types void * again
+Steve Holme (27 Mar 2016)
+- RELEASE-NOTES: Synced with f0bdd72c10
+
+- http_ntlm: Renamed from curl_ntlm.[c|h]
   
-  Many applications assume the actual contents of the public types and use
-  that do for example forward declarations (saving them from including our
-  public header) which then breaks when we switch from void * to a struct
-  *.
+  Renamed the header and source files for this module as they are HTTP
+  specific and as such, they should use the naming convention as other
+  HTTP authentication source files do - this revert commit 260ee6b7bf.
   
-  I'm not convinced we were wrong, but since this practise seems
-  widespread enough I'm willing to (partly) step down.
+  Note: We could also rename curl_ntlm_wb.[c|h], however, the Winbind
+  code needs separating from the HTTP protocol and migrating into the
+  vauth directory, thus adding support for Winbind to the SASL based
+  protocols such as IMAP, POP3 and SMTP.
+
+Daniel Stenberg (27 Mar 2016)
+- [marquis-de-muesli brought this change]
+
+  docs: curlinfo_filetime sftp support, new curlopt_quote "statvfs"
   
-  Now libcurl uses the struct itself when it is built and it allows
-  applications to use the struct type if CURL_STRICTER is defined at the
-  time of the #include.
+  Closes #677
+
+- [marquis-de-muesli brought this change]
+
+  SSH: new CURLOPT_QUOTE command "statvfs"
   
-  Reported-by: Peter Frühberger
-  Fixes #926
+  usage: "statvfs path"
+  returns remote file system statistics
 
-Jay Satiro (28 Jul 2016)
-- [Yonggang Luo brought this change]
+- [marquis-de-muesli brought this change]
 
-  cmake: Fix for schannel support
+  SSH: support CURLINFO_FILETIME
+
+- [Karlson2k brought this change]
+
+  sshserver.pl: use quotes for given options
   
-  The check_library_exists_concat do not check crypt32 library properly.
-  So include it directly.
+  Fixed failed redirection of stderr with some options. At least on Msys2,
+  perl fails to redirect stderr if $value contains newline or other weird
+  characters.
+
+Jay Satiro (26 Mar 2016)
+- url: don't use bad offset in tld_check_name to show error
   
-  Bug: https://github.com/curl/curl/pull/917
-  Reported-by: Yonggang Luo
+  libidn's tld_check_lz returns an error offset of the first character
+  that it failed to process, however that offset is not a byte offset and
+  may not even be in the locale encoding therefore we can't use it to show
+  the user the character that failed to process.
   
-  Bug: https://github.com/curl/curl/issues/935
-  Reported-by: Alain Danteny
+  Bug: https://github.com/curl/curl/issues/731
+  Reported-by: Karlson2k
 
-- Revert "travis: Install libtool for OS X builds"
+Steve Holme (26 Mar 2016)
+- http_negotiate: Combine GSS-API and SSPI source files
   
-  Didn't work.
+  As the GSS-API and SSPI based source files are no longer library/API
+  specific, following the extraction of that authentication code to the
+  vauth directory, combine these files rather than maintain two separate
+  versions.
+
+- vauth: Moved the Negotiate authentication code to the new vauth directory
   
-  This reverts commit 50723585ed380744358de054e2a55dccee65dfd7.
+  Part 2 of 2 - Moved the GSS-API based Negotiate authentication code.
 
-- travis: Install libtool for OS X builds
+- vauth: Moved the Negotiate authentication code to the new vauth directory
   
-  CI is failing due to missing libtoolize, so I'm trying this.
+  Part 1 of 2 - Moved the SSPI based Negotiate authentication code.
 
-Daniel Stenberg (26 Jul 2016)
-- [Viktor Szakats brought this change]
+- warnless.h: Removed spurious character from commit 696bc6b9c9
+  
+  Not picked up by checksrc or Visual Studio but my own code review, this
+  would haven broken Intel based Unix builds - Perhaps I should learn to
+  type on my laptop's keyboard before committing!
 
-  TODO: minor typo in last commit
+- schannel: Fixed compilation warning from commit f8d88a4913
   
-  merged #931
+  warning C4244: '=': conversion from 'int' to 'unsigned short', possible
+                      loss of data
 
-- TODO: Timeout idle connections from the pool
+- warnless?: Added some integer based conversion functions
 
-Patrick Monnerat (25 Jul 2016)
-- os400: minimum supported OS version: V6R1M0.
-  Do not log compilation informational messages.
+Daniel Stenberg (25 Mar 2016)
+- [Dusty Mabe brought this change]
 
-Jay Satiro (24 Jul 2016)
-- tests: Fix for http/2 feature
+  docs/TODO: Add feature request for metalink in HTTP headers
   
-  Bug: https://curl.haxx.se/mail/lib-2016-07/0070.html
-  Reported-by: Paul Howarth
+  Closes #729
+  Closes #728
 
-Steve Holme (23 Jul 2016)
-- README: Mention wolfSSL in the 'Dependencies' section
+Steve Holme (25 Mar 2016)
+- build: Corrected typos from commit 70e56939aa
 
-- vauth.h: No need to query HAVE_GSSAPI || USE_WINDOWS_SSPI for SPNEGO
+- vauth: Refactored function names after move to new vauth directory
   
-  As SPNEGO is only defined when these pre-processor variables are defined
-  there is no need to query them explicitly.
+  Renamed all the SASL functions that moved to the new vauth directory to
+  include the correct module name.
 
-- spnego: Corrected miss-placed * in Curl_auth_spnego_cleanup() declaration
+- vauth: Updated the copyright year after recent changes
   
-  Typo introduced in commit ad5e9bfd5d.
+  As most of this work was performed in 2015 but not pushed until 2016
+  updated the copyright year to reflect the public facing changes.
 
-Daniel Stenberg (22 Jul 2016)
-- SECURITY: mention how to get windows-specific CVEs
-  
-  ... and make the distros link a proper link
+- vauth: Moved the OAuth 2.0 authentication code to the new vauth directory
 
-Dan Fandrich (21 Jul 2016)
-- test558: fix test by stripping file paths from FD lines
+- vauth: Moved the NTLM authentication code to the new vauth directory
 
-Kamil Dudka (21 Jul 2016)
-- tests: distribute the http2-server.pl script, too
+- vauth: Moved the Kerberos V5 authentication code to the new vauth directory
 
-- docs: distribute the CURLINFO_HTTP_VERSION(3) man page, too
+- digest.c: Fixed checksrc warnings
 
-Daniel Stenberg (21 Jul 2016)
-- bump: start working on 7.50.1
+- vauth: Moved the DIGEST authentication code to the new vauth directory
 
-Version 7.50.0 (21 Jul 2016)
+- vauth: Moved the CRAM-MD5 authentication code to the new vauth directory
 
-Daniel Stenberg (21 Jul 2016)
-- RELEASE-NOTES: version 7.50.0 ready
+- vauth: Moved the ClearText authentication code to the new vauth directory
 
-- THANKS: 13 new contributors from the 7.50.0 release
+- vauth: Moved Curl_sasl_build_spn() to create the initial vauth source files
 
-Jay Satiro (21 Jul 2016)
-- winbuild: fix embedded manifest option
-  
-  Embedded manifest option didn't work due to typo.
-  
-  Reported-by: Stefan Kanthak
+- checksrc.bat: Added support for checking the new vauth directory
 
-- vauth: Fix memleak by freeing credentials if out of memory
+- build: Updated all makefiles and project files for the new vauth directory
   
-  This is a follow up to the parent commit dcdd4be which fixes one leak
-  but creates another by failing to free the credentials handle if out of
-  memory. Also there's a second location a few lines down where we fail to
-  do same. This commit fixes both of those issues.
+  Updated the makefiles and Visual Studio project files to support moving
+  the authentication code to the new lib/vauth directory that was started
+  in commit 0d04e859e1.
 
-Daniel Stenberg (20 Jul 2016)
-- [Saurav Babu brought this change]
+Daniel Stenberg (24 Mar 2016)
+- [JDepooter brought this change]
 
-  vauth: Fixed memory leak due to function returning without free
+  schannel: Add ALPN support
   
-  This patch allocates memory to "output_token" only when it is required
-  so that memory is not leaked if function returns.
-
-- test558: updated after ipv6-check move
+  Add ALPN support for schannel. This allows cURL to negotiate
+  HTTP/2.0 connections when built with schannel.
   
-  Follow-up commit to c50980807c5 to make this test pass.
+  Closes #724
 
-Jay Satiro (20 Jul 2016)
-- connect: disable TFO on Linux when using SSL
+Steve Holme (24 Mar 2016)
+- http: Minor update based on CODE_STYLE guidelines
+
+Daniel Stenberg (23 Mar 2016)
+- multi: fix "Operation timed out after" timer
   
-  - Linux TFO + TLS is not implemented yet.
+  Use the local, reasonably updated, 'now' value when creating the message
+  string to output for the timeout condition.
   
-  Bug: https://github.com/curl/curl/issues/907
+  Fixes #619
 
-Daniel Stenberg (19 Jul 2016)
-- ROADMAP: QUIC and TLS 1.3
+- openssl: boringssl provides the same numbering as openssl
+  
+  ... so we don't need extra boringssl precautions for for
+  HAVE_ERR_REMOVE_THREAD_STATE_NOARG.
+  
+  Pointed-out-by: David Benjamin
 
-- RELEASE-NOTES: synced with c50980807c5
+- openssl: fix ERR_remove_thread_state() for boringssl/libressl
+  
+  The removed arg is only done in OpenSSL
+  
+  Bug: https://twitter.com/xtraemeat/status/712564874098917376
 
-Jay Satiro (18 Jul 2016)
-- [Brian Prodoehl brought this change]
+- bump: work on 7.48.1
 
-  curl_global_init: Check if IPv6 works
+- RELEASE-PROCEDURE: mention the github release tag edit
   
-  - Curl_ipv6works() is not thread-safe until after the first call, so
-  call it once during global init to avoid a possible race condition.
+  ... and update the coming release dates a bit
+
+Steve Holme (23 Mar 2016)
+- checksrc.bat: Updated the help to be consistent with generate.bat
   
-  Bug: https://github.com/curl/curl/issues/915
-  PR: https://github.com/curl/curl/pull/918
+  Follow up to commit a8c7f0fcbf prior to release.
 
-- [Timothy Polich brought this change]
+Version 7.48.0 (23 Mar 2016)
 
-  CURLMOPT_SOCKETFUNCTION.3: fix typo
+Daniel Stenberg (23 Mar 2016)
+- RELEASE-NOTES: curl 7.48.0
+
+- THANKS: 15 new contributors from 7.48.0 release
+
+Jay Satiro (23 Mar 2016)
+- CURLINFO_TLS_SSL_PTR.3: Warn about limitations
   
-  Closes https://github.com/curl/curl/pull/914
+  Bug: https://github.com/curl/curl/issues/685
 
-- [Miroslav Franc brought this change]
+Daniel Stenberg (22 Mar 2016)
+- Revert "sshserver: remove use of AuthorizedKeysFile2"
+  
+  It seems we may have some autobuild problems after this commit went
+  in. Trying to see if a revert helps to get them back.
+  
+  This reverts commit 2716350d1f3edc8e929f6ceeee05051090f6d642.
 
-  library: Fix memory leaks found during static analysis
+- maketgz: add -j to make dist
   
-  Closes https://github.com/curl/curl/pull/913
+  ... makes it a lot faster
 
-- [Viktor Szakats brought this change]
+- libcurl-thread.3: minor nroff format fix
 
-  cookie.c: Fix misleading indentation
+- CURLINFO_TLS_SSL_PTR.3: minor nroff format fix
+
+- CODE_STYLE: indend example code
   
-  Closes https://github.com/curl/curl/pull/911
+  ... to make it look nicer in markdown outputa
 
-- FAQ: Update FTP directory listing section for MLSD command
+Jay Satiro (22 Mar 2016)
+- build-wolfssl: Update VS properties for wolfSSL v3.9.0
   
-  Explain how some FTP servers support the machine readable listing
-  format MLSD from RFC 3659 and compare it to LIST.
+  - Do not use wolfSSL's sample user-setting files.
   
-  Ref: https://github.com/curl/curl/issues/906
+  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.
 
-Daniel Stenberg (1 Jul 2016)
-- [Sergei Nikulov brought this change]
+Steve Holme (22 Mar 2016)
+- hostip6: Fixed compilation warnings when verbose strings disabled
+  
+  warning C4189: 'data': local variable is initialized but not referenced
+  
+  ...and some minor formatting/spacing changes.
 
-  Appveyor: Updates for options - CURL_STATICLIB/BUILD_TESTING
+Daniel Stenberg (21 Mar 2016)
+- sshserver: remove use of AuthorizedKeysFile2
   
-  Closes #892
+  Support for the (undocumented) AuthorizedKeysFile2 was removed in
+  OpenSSH 5.9, released in September 2011
+  
+  Closes #715
 
-- TODO: 17.4 also brings more HTTP/2 support
+Steve Holme (20 Mar 2016)
+- connect/ntlm/http: Fixed compilation warnings when verbose strings disabled
+  
+  warning C4189: 'data': local variable is initialized but not referenced
 
-- TODO: try next proxy if one doesn't work
+- openssl: Fixed compilation warning when /Wall enabled
   
-  Closes #896
+  warning C4706: assignment within conditional expression
 
-- conn: don't free easy handle data in handler->disconnect
+- CODE_STYLE: Use boolean conditions
   
-  Reported-by: Gou Lingfeng
-  Bug: https://curl.haxx.se/mail/lib-2016-06/0139.html
+  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.
 
-- test1244: test different proxy ports same URL
+- inet_pton.c: Fixed compilation warnings
+  
+  warning: conversion to 'unsigned char' from 'int' may alter its value
 
-- curl_global_init.3: improved formatting of the flags
+Daniel Stenberg (19 Mar 2016)
+- RELEASE-NOTES: synced with 80851028efc2fa9
 
-- curl_global_init.3: expand on the SSL and WIN32 bits purpose
+- mbedtls: fix compiler warning
   
-  Reported-by: Richard Gray
-  Bug: https://curl.haxx.se/mail/lib-2016-06/0136.html
+  vtls/mbedtls.h:67:36: warning: implicit declaration of function
+  ‘mbedtls_sha256’ [-Wimplicit-function-declaration]
 
-- [Michael Kaufmann brought this change]
+Steve Holme (19 Mar 2016)
+- easy: Minor coding standard and style updates
+  
+  Following commit c5744340db. Additionally removes the need for a second
+  'result code' variable as well.
 
-  cleanup: minor code cleanup in Curl_http_readwrite_headers()
+Jay Satiro (19 Mar 2016)
+- easy: Remove poll failure check in easy_transfer
   
-  - the expression of an 'if' was always true
-  - a 'while' contained a condition that was always true
-  - use 'if(k->exp100 > EXP100_SEND_DATA)' instead of 'if(k->exp100)'
-  - fixed a typo
+  .. because curl_multi_wait can no longer signal poll failure.
   
-  Closes #889
+  follow-up to 77e1726
+  
+  Bug: https://github.com/curl/curl/issues/707
 
-- SFTP: set a generic error when no SFTP one exists...
+Steve Holme (19 Mar 2016)
+- build: Added missing Visual Studio filter files for VC10 onwards
   
-  ... as otherwise we could get a 0 which would count as no error and we'd
-  wrongly continue and could end up segfaulting.
+  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.
   
-  Bug: https://curl.haxx.se/mail/lib-2016-06/0052.html
-  Reported-by: 暖和的和暖
+  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.
 
-- ROADMAP: http2 tests are merged, mention http2 perf
+- ftp/imap/pop3/smtp: Fixed compilation warning when /Wall enabled
+  
+  warning C4706: assignment within conditional expression
 
-- docs/README.md: to render nicer pages on github
+- config-w32.h: Fixed compilation warning when /Wall enabled
   
-  ... as previously the README.cmake would be picked and put at the bottom
-  of the docs page there and it wasn't very representative!
+  warning C4668: 'USE_IPV6' is not defined as a preprocessor macro,
+                 replacing with '0' for '#if/#elif'
 
-- README.md: change host name for the svg logo
+- imap.c: Fixed compilation warning with /Wall enabled
   
-  rawgit.com asks to use the domain cdn.rawgit.com for production
+  warning C4701: potentially uninitialized local variable 'size' used
   
-  See #900
-
-- [Viktor Szakats brought this change]
+  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.
 
-  README.md: use the SVG logo
+- KNOWN_BUGS: #93 Issue with CURLFORM_CONTENTLEN in arrays on 32-bit platforms
 
-- README.md: logo on top!
+Daniel Stenberg (18 Mar 2016)
+- bump: the coming release is 7.48.0
 
-- KNOWN_BUGS: 3.4 POP3 expects "CRLF.CRLF" eob for some
+- configure: use cpp -P when needed
   
-  Closes #740
-
-- RELEASE-NOTES: synced with d61c80515aa8
-
-- [Michael Osipov brought this change]
+  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.
+  
+  Fixes #719
 
-  acinclude.m4: improve autodetection of CA bundle on FreeBSD
+Steve Holme (18 Mar 2016)
+- formdata.c: Fixed compilation warning
   
-  The FreeBSD Port security/ca_root_nss installs the Mozilla NSS CA bundle
-  to /usr/local/share/certs/ca-root-nss.crt. Use this bundle in the
-  discovery process.
+  formdata.c:390: warning: cast from pointer to integer of different size
   
-  This change also removes the former FreeBSD path that has been obsolete
-  for 8 years since this FreeBSD ports commit:
-  https://svnweb.freebsd.org/ports/head/security/?view=revision&revision=215953
+  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.
   
-  Closes #894
-
-- configure: don't specify .lib for libs on windows
+  This doesn't happen in 64-bit land as a pointer is the same size as a
+  curl_off_t.
   
-  Another follow up for crypt32.lib linking with winssl
+  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.
 
-- configure: fix winssl LIBS change typo
-  
-  follow-up from 120bf29e
+Daniel Stenberg (18 Mar 2016)
+- FAQ: 2.5 Install libcurl for both 32bit and 64bit?
 
-- TODO: "TCP Fast Open" is done, add monitor pool connections
+- [Gisle Vanem brought this change]
 
-- configure: add crypt32.lib for winssl builds
+  openssl: adapt to API breakage in ERR_remove_thread_state()
   
-  Necessary since 6cabd78531f
+  The OpenSSL API change that broke this is "Convert ERR_STATE to new
+  multi-threading API": openssl commit 8509dcc.
+  
+  Closes #713
 
-- Makefile.vc: link with crypt32.lib for winssl builds
+- version: init moved to private name space, added protos
   
-  Necessary since 6cabd78531f
+  follow-up to 80015cdd52145
+
+- openssl: verbose: show matching SAN pattern
   
-  Fixes #853
+  ... 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.
 
-- [Joel Depooter brought this change]
+Jay Satiro (16 Mar 2016)
+- version: thread safety
 
-  VC: Add crypt32.lib to Visual Sudio project template files
+Steve Holme (16 Mar 2016)
+- transfer: Removed redundant HTTP authentication include files
   
-  Closes #854
+  It would also seem that share.h is not required here either as there
+  are no references to the Curl_share structure or functions.
 
-- vc: fix the build for schannel certinfo support
-  
-  Broken since 6cabd785, which adds use of the Curl_extract_certinfo
-  function from the x509asn1.c file.
+- easy: Removed redundant HTTP authentication include files
 
-- typedefs: use the full structs in internal code...
+Jay Satiro (15 Mar 2016)
+- CURLOPT_SSLENGINE.3: Only for OpenSSL built with engine support
   
-  ... and save the typedef'ed names for headers and external APIs.
+  Bug: https://curl.haxx.se/mail/lib-2016-03/0150.html
+  Reported-by: Oliver Graute
 
-- internals: rename the SessionHandle struct to Curl_easy
+Steve Holme (15 Mar 2016)
+- curl_sasl: Minor code indent fixes
 
-- headers: forward declare CURL, CURLM and CURLSH as structs
+Daniel Stenberg (14 Mar 2016)
+- runtests: mention when run event-based
+
+- easy: add check to malloc() when running event-based
   
-  Instead of typedef'ing to void, typedef to their corresponding actual
-  struct names to allow compilers to type-check.
+  ... to allow torture tests then too.
+
+- memdebug: skip logging the limit countdown, fflush when reached
+
+- CODE_STYLE: Space around operators
   
-  Assisted-by: Reinhard Max
+  As just discussed on the mailing list, also document how we prefer
+  spacing in expressions.
 
-Jay Satiro (22 Jun 2016)
-- vtls: Only call add/getsession if session id is enabled
+- curl: glob_range: no need to check unsigned variable for negative
   
-  Prior to this change we called Curl_ssl_getsessionid and
-  Curl_ssl_addsessionid regardless of whether session ID reusing was
-  enabled. According to comments that is in case session ID reuse was
-  disabled but then later enabled.
+  cppcheck warned:
   
-  The old way was not intuitive and probably not something users expected.
-  When a user disables session ID caching I'd guess they don't expect the
-  session ID to be cached anyway in case the caching is later enabled.
+  [src/tool_urlglob.c:283]: (style) Checking if unsigned variable 'step_n'
+  is less than zero.
 
-Daniel Stenberg (22 Jun 2016)
-- curl.1: the used progress meter suffix is k in lower case
-  
-  Closes #883
+- CODE_STYLE: add example for indent style as well
 
-- [Sergei Nikulov brought this change]
+- CODE_STYLE: mention braces for functions too
 
-  cmake: now using BUILD_TESTING=ON/OFF
-  
-  CMake build now using BUILD_TESTING=ON/OFF (default is OFF) to build
-  tests and enabling CTest integration. Options BUILD_CURL_TESTS and
-  BUILD_DASHBOARD_REPORTS was removed.
-  
-  Closes #882
+- docs/Makefile.am: include CODE_STYLE in tarball too
+
+- CONTRIBUTE: moved out code style to a separate document
+
+- CODE_STYLE: initial version
   
-  Reviewed-by: Brad King
+  Ripped out from CONTRIBUTE into its own document, but also extended from
+  there.
 
-- [Michael Kaufmann brought this change]
+- curl_sasl.c: minor code indent fixes
 
-  cleanup: fix method names in code comments
+- multi: simplified singlesocket
   
-  Closes #887
+  Since sh_getentry() now checks for invalid sockets itself and by
+  narrowing the scope of the remove_sock_from_hash variable.
 
-Kamil Dudka (21 Jun 2016)
-- curl-compilers.m4: improve detection of GCC's -fvisibility= flag
+- multi: introduce sh_getentry() for looking up sockets in the sockhash
   
-  Some builds of GCC produce output on both stdout and stderr when --help
-  --verbose is used.  The 2>&1 redirection caused them to be arbitrarily
-  interleaved with each other because of stream buffering.  Consequently,
-  grep failed to match the fvisibility= string in the mixed output, even
-  though the string was present in GCC's standard output.
+  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.
+
+- [Jaime Fullaondo brought this change]
+
+  multi hash: ensure modulo performed on curl_socket_t
   
-  This led to silently disabling symbol hiding in some builds of curl.
+  Closes #712
 
-Daniel Stenberg (19 Jun 2016)
-- tests: fix the HTTP/2 tests
+Steve Holme (13 Mar 2016)
+- base64: Minor coding standard and style updates
+
+- base64: Use 'CURLcode result' for curl result codes
+
+- negotiate: Use 'CURLcode result' for curl result codes
+
+Daniel Stenberg (13 Mar 2016)
+- [Maksim Kuzevanov brought this change]
+
+  multi_runsingle: avoid loop in CURLM_STATE_WAITPROXYCONNECT
   
-  The HTTP/2 tests brought with commit bf05606ef1f were using the internal
-  name 'http2' for the HTTP/2 server, while in fact that name was already
-  used for the second instance of the HTTP server. This made tests using
-  the second instance (like test 2050) fail after a HTTP/2 test had run.
+  Closes #703
+
+- TODO: Use the RFC6265 test suite
+
+Steve Holme (13 Mar 2016)
+- checksrc.bat: Added the ability to scan src and lib source independently
+
+- digest: Use boolean based success code for Curl_sasl_digest_get_pair()
   
-  The server is now known as HTTP/2 internally and within the <server>
-  section in test cases. 1700, 1701 and 1702 were updated accordingly.
+  Rather than use a 0 and 1 integer base result code use a TRUE / FALSE
+  based success code.
 
-- openssl: use more 'const' to fix build warnings with 1.1.0 branch
+- digest: Corrected some typos in comments
 
-- curl.1: missed 'T' in the progress unit suffixes
+- krb5: Corrected some typos in function descriptions
 
-- curl.1: mention the unix for the progress meter
+- ntlm: Corrected some typos in function descriptions
 
-Patrick Monnerat (16 Jun 2016)
-- os400: add new definitions to ILE/RPG binding.
+- url: Corrected indentation when calling idna_to_ascii_lz()
 
-Daniel Stenberg (16 Jun 2016)
-- openssl: fix cert check with non-DNS name fields present
-  
-  Regression introduced in 5f5b62635 (released in 7.48.0)
+- idn_win32: Use boolean based success codes
   
-  Reported-by: Fabian Ruff
-  Fixes #875
+  Rather than use 0 and 1 integer base result codes use a FALSE / TRUE
+  based success code.
 
-Dan Fandrich (16 Jun 2016)
-- axtls: Use Curl_wait_ms instead of the less-portable usleep
+Daniel Stenberg (10 Mar 2016)
+- idn_win32.c: warning: Trailing whitespace
 
-- axtls: Fixed compile after compile 31c521b0
+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
 
-- tests: Added HTTP proxy keywords to tests 1141 & 1142
+Daniel Stenberg (10 Mar 2016)
+- THANKS-filter: unify Michael König
 
-Jay Satiro (15 Jun 2016)
-- [Sergei Nikulov brought this change]
+- RELEASE-NOTES: synced with 863c5766dd
 
-  cmake: Fix build with winldap
+- ftp: remove a check for NULL(!)
   
-  Bug: https://github.com/curl/curl/pull/874
-  Reported-by: Sergei Nikulov
+  ... 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.
 
-- CURLOPT_POSTFIELDS.3: Clarify what happens when set empty
-  
-  When CURLOPT_POSTFIELDS is set to an empty string libcurl will send a
-  zero-byte POST. Prior to this change it was documented as sending data
-  from the read callback.
+- cookies: first n/v pair in Set-Cookie: is the cookie, then parameters
   
-  This also changes the wording of what happens when empty or NULL so that
-  it's hopefully easier to understand for people whose primary language
-  isn't English.
+  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.
   
-  Bug: https://github.com/curl/curl/issues/862
-  Reported-by: Askar Safin
-
-- [Michael Wallner brought this change]
-
-  curl_multi_socket_action.3: Fix rewording
+  libcurl previously had a more liberal approach which causes significant
+  problems when introducing new cookie parameters, like the suggested new
+  cookie priority draft.
   
-  - Remove some erroneous text.
+  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'.
   
-  Closes https://github.com/curl/curl/pull/865
+  Fixes #709
 
-- [Luo Jinghua brought this change]
+- krb5: improved type handling to avoid clang compiler warnings
 
-  resolve: enable protocol family logic for synthesized IPv6
-  
-  - Enable protocol family logic for IPv6 resolves even when support
-  for synthesized addresses is enabled.
+- url.c: fix clang warning: no newline at end of file
+
+- curl_multi_wait: never return -1 in 'numfds'
   
-  This is a follow up to the parent commit that added support for
-  synthesized IPv6 addresses from IPv4 on iOS/OS X. The protocol family
-  logic needed for IPv6 was inadvertently excluded if support for
-  synthesized addresses was enabled.
+  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.
   
-  Bug: https://github.com/curl/curl/issues/863
-  Ref: https://github.com/curl/curl/pull/866
-  Ref: https://github.com/curl/curl/pull/867
+  Reported-by: Jay Satiro
+  Closes #707
 
-Daniel Stenberg (7 Jun 2016)
-- [Luo Jinghua brought this change]
+- HTTP2.md: add CURL_HTTP_VERSION_2TLS and updated alt-svc link
 
-  resolve: add support for IPv6 DNS64/NAT64 Networks on OS X + iOS
+- curl_multi_wait.3: add example
+
+Steve Holme (8 Mar 2016)
+- imap/pop3/smtp: Fixed connections upgraded with TLS are not reused
   
-  Use getaddrinfo() to resolve the IPv4 address literal on iOS/Mac OS X.
-  If the current network interface doesn’t support IPv4, but supports
-  IPv6, NAT64, and DNS64.
+  Regression since commit 710f14edba.
   
-  Closes #866
-  Fixes #863
+  Bug: https://github.com/curl/curl/issues/422
+  Reported-by: Justin Ehlert
 
-- tests: two more HTTP/2 tests
+Jay Satiro (8 Mar 2016)
+- opt-docs: fix heading macros
   
-  1701 and 1702
+  ..SH should be .SH
+  
+  Bug: https://github.com/curl/curl/issues/705
+  Reported-by: Eric S. Raymond
 
-- runtests: don't display logs when http2 server fails to start
+Kamil Dudka (8 Mar 2016)
+- [Tim Rühsen brought this change]
 
-- runtests: make stripfile work on stdout as well
+  cookie: do not refuse cookies for localhost
   
-  ... and have test 1700 use that to strip out the nghttpx server: headers
+  Closes #658
 
-- http2-tests: test1700 is the first real HTTP/2 test
-  
-  It requires that 'nghttpx' is in the PATH, and it will run the tests
-  using nghttpx as a front-end proxy in front of the standard HTTP/1 test
-  server. This uses HTTP/2 over plain TCP.
+Daniel Stenberg (8 Mar 2016)
+- ftp_done: clear tunnel_state when secondary socket closes
   
-  If you like me have nghttpx installed in a custom path, you can run test 1700
-  like this:
+  Introducing a function for closing the secondary connection to make this
+  bug less likely to happen again.
   
-  $ PATH=$PATH:$HOME/build-nghttp2/bin/ ./runtests.pl 1700
+  Reported-by: daboul
+  Closes #701
 
-- RELEASE-NOTES: synced with 34855feeb4c299
+- [Gisle Vanem brought this change]
 
-Steve Holme (6 Jun 2016)
-- schannel: Disable ALPN on Windows < 8.1
+  openssl: use the correct OpenSSL/BoringSSL/LibreSSL in messages
+
+- HTTP2.md: HTTP/2 by default for curl's HTTPS connections
+
+- [Anders Bakken brought this change]
+
+  pipeline: Sanity check pipeline pointer before accessing it.
   
-  Calling QueryContextAttributes with SECPKG_ATTR_APPLICATION_PROTOCOL
-  fails on Windows < 8.1 so we need to disable ALPN on these OS versions.
+  I got a crash with this stack:
   
-  Inspiration provide by: Daniel Seither
+  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)
   
-  Closes #848
-  Fixes #840
+  Closes #704
 
-Jay Satiro (5 Jun 2016)
-- checksrc: Add LoadLibrary to the banned functions list
-  
-  LoadLibrary was supplanted by Curl_load_library for security
-  reasons in 6df916d.
+- HTTP2.md: mention the disable ALPN and NPN options
 
-- http: Fix HTTP/2 connection reuse
-  
-  - Change the parser to not require a minor version for HTTP/2.
+- TODO: 17.12 keep running, read instructions from pipe/socket
   
-  HTTP/2 connection reuse broke when we changed from HTTP/2.0 to HTTP/2
-  in 8243a95 because the parser still expected a minor version.
+  And delete trailing whitespace
+  And rename section 17 to "command line tool" from "client"
   
-  Bug: https://github.com/curl/curl/issues/855
-  Reported-by: Andrew Robbins, Frank Gevaerts
+  Closes #702
 
-Steve Holme (4 Jun 2016)
-- connect.c: Fixed compilation warning from commit 332e8d6164
+- README.md: linkified
   
-  connect.c:952:5: warning: suggest explicit braces to avoid ambiguous 'else'
+  It also makes it less readable as plain text, so let's keep this
+  primarily for github use.
+  
+  Removed the top ascii art logo, as it looks weird when markdownified.
 
-- win32: Used centralised verify windows version function
+- README.md: markdown version of README
   
-  Closes #845
+  Attempt to make it look more appealing on github
 
-- win32: Added verify windows version functionality
+Jay Satiro (6 Mar 2016)
+- mprintf: update trio project link
 
-- win32: Introduced centralised verify windows version function
+Daniel Stenberg (6 Mar 2016)
+- CURLOPT_ACCEPTTIMEOUT_MS.3: added example
 
-Kamil Dudka (3 Jun 2016)
-- tool_urlglob: fix off-by-one error in glob_parse()
-  
-  ... causing SIGSEGV while parsing URL with too many globs.
-  Minimal example:
-  
-  $ curl $(for i in $(seq 101); do printf '{a}'; done)
+- CURLOPT_ACCEPT_ENCODING.3: added example
+
+- CURLOPT_APPEND.3: added example
+
+- CURLOPT_NOPROGRESS.3: added example, conform to stardard style
+
+Steve Holme (6 Mar 2016)
+- build-openssl/checksrc.bat: Fixed prepend vs append of Perl path
   
-  Reported-by: Romain Coltel
-  Bug: https://bugzilla.redhat.com/1340757
+  Fixed inconsistency from commit 1eae114065 and 0ad6c72227 of the order
+  in which Perl was added to the PATH.
 
-Daniel Stenberg (1 Jun 2016)
-- [Benjamin Kircher brought this change]
+Daniel Stenberg (6 Mar 2016)
+- opts: added two examples
 
-  libcurl-multi.3: fix small typo
+- CURLOPT_SSL_CTX_FUNCTION.3: use .NF for example
+
+- CURLOPT_SSL_CTX_FUNCTION.3: added example
   
-  Closes #850
+  and removed erroneous reference to test case lib509
 
-- [Viktor Szakats brought this change]
+- curlx.c: use more curl style code
 
-  makefile.m32: add crypt32 for winssl builds
+- test46: change cookie expiry date
   
-  Dependency added by 6cabd78
+  Since two of the cookies would now otherwise expire and cause the test
+  to fail after commit 20de9b4f09
   
-  Closes #849
+  Discussed in #697
 
-- [Ivan Avdeev brought this change]
+Jay Satiro (5 Mar 2016)
+- [Viktor Szakats brought this change]
 
-  vtls: fix ssl session cache race condition
+  makefile.m32: add missing libs for static -winssl-ssh2 builds
   
-  Sessionid cache management is inseparable from managing individual
-  session lifetimes. E.g. for reference-counted sessions (like those in
-  SChannel and OpenSSL engines) every session addition and removal
-  should be accompanied with refcount increment and decrement
-  respectively. Failing to do so synchronously leads to a race condition
-  that causes symptoms like use-after-free and memory corruption.
-  This commit:
-   - makes existing session cache locking explicit, thus allowing
-     individual engines to manage lock's scope.
-   - fixes OpenSSL and SChannel engines by putting refcount management
-     inside this lock's scope in relevant places.
-   - adds these explicit locking calls to other engines that use
-     sessionid cache to accommodate for this change. Note, however,
-     that it is unknown whether any of these engines could also have
-     this race.
+  Bug: https://github.com/curl/curl/pull/693
+
+- mbedtls: fix user-specified SSL protocol version
   
-  Bug: https://github.com/curl/curl/issues/815
-  Fixes #815
-  Closes #847
+  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.
 
-- [Andrew Kurushin brought this change]
+Steve Holme (5 Mar 2016)
+- .gitignore: Added *.VC.opendb and *.vcxproj.user files for VC14
 
-  schannel: add CURLOPT_CERTINFO support
-  
-  Closes #822
+- build-openssl.bat: Fixed cannot find perl if installed but not in path
 
-- RELEASE-NOTES: synced with 142ee9fa15002315
+- checksrc.bat: Fixed cannot find perl if installed but not in path
 
-- openssl: rename the private SSL_strerror
+Jay Satiro (5 Mar 2016)
+- [Viktor Szakats brought this change]
+
+  makefile.m32: fix to allow -ssh2-winssl combination
   
-  ... to make it not look like an OpenSSL function
+  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.
 
-- [Michael Kaufmann brought this change]
+- cookie: Don't expire session cookies in remove_expired
+  
+  Prior to this change cookies with an expiry date that failed parsing
+  and were converted to session cookies could be purged in remove_expired.
+  
+  Bug: https://github.com/curl/curl/issues/697
+  Reported-by: Seth Mos
 
-  openssl: Use correct buffer sizes for error messages
+Daniel Stenberg (3 Mar 2016)
+- cookie: remove redundant check
   
-  Closes #844
+  ... as it was already checked previously within the function.
+  
+  Reported-by: Dmitry-Me
+  Closes #695
 
-- curl: fix -q [regression]
+Jay Satiro (1 Mar 2016)
+- [Anders Bakken brought this change]
+
+  url: if Curl_done is premature then pipeline not in use
   
-  This broke in 7.49.0 with commit e200034425a7625
+  Prevent a crash if 2 (or more) requests are made to the same host and
+  pipelining is enabled and the connection does not complete.
   
-  Fixes #842
+  Bug: https://github.com/curl/curl/pull/690
 
-- URL parser: allow URLs to use one, two or three slashes
+- [Viktor Szakats brought this change]
+
+  makefile.m32: allow to pass .dll/.exe-specific LDFLAGS
   
-  Mostly in order to support broken web sites that redirect to broken URLs
-  that are accepted by browsers.
+  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.
   
-  Browsers are typically even more leniant than this as the WHATWG URL
-  spec they should allow an _infinite_ amount. I tested 8000 slashes with
-  Firefox and it just worked.
+  Ref: https://github.com/curl/curl/pull/670#issuecomment-190863985
   
-  Added test case 1141, 1142 and 1143 to verify the new parser.
+  Closes https://github.com/curl/curl/pull/689
+
+Daniel Stenberg (29 Feb 2016)
+- formpost: fix memory leaks in AddFormData error branches
   
-  Closes #791
+  Reported-by: Dmitry-Me
+  Fixes #688
 
-- [Renaud Lehoux brought this change]
+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.
 
-  cmake: Added missing mbedTLS support
+- getinfo: Add support for mbedTLS TLS session info
   
-  Closes #837
+  .. and preprocessor check TLS session info is defined for all backends.
 
-- [Renaud Lehoux brought this change]
+Daniel Stenberg (26 Feb 2016)
+- ROADMAP: clarify on the TLS proxy, mention HTTP cookies to work on
 
-  mbedtls: removed unused variables
+- file: try reading from files with no size
   
-  Closes #838
+  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.
+  
+  Reported-by: Jesse Tan
+  
+  Closes #681
 
-- [Frank Gevaerts brought this change]
+Jay Satiro (25 Feb 2016)
+- configure: warn on invalid ca bundle or path
+  
+  - Warn if --with-ca-bundle file does not exist.
+  
+  - Warn if --with-ca-path directory does not contain certificates.
+  
+  - Improve help messages for both.
+  
+  Example configure output:
+  
+    ca cert bundle:   /some/file   (warning: certs not found)
+    ca cert path:     /some/dir   (warning: certs not found)
+  
+  Bug: https://github.com/curl/curl/issues/404
+  Reported-by: Jeffrey Walton
 
-  http: add CURLINFO_HTTP_VERSION and %{http_version}
+Daniel Stenberg (24 Feb 2016)
+- Curl_read: check for activated HTTP/1 pipelining, not only requested
   
-  Adds access to the effectively used http version to both libcurl and
-  curl.
+  ... 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.
   
-  Closes #799
+  Reported-by: Anders Bakken
 
-- bump: start the journey toward 7.50.0
+Patrick Monnerat (24 Feb 2016)
+- os400: Fix ILE/RPG definition of CURLOPT_TFTP_NO_OPTIONS
 
-- [Marcel Raad brought this change]
+Jay Satiro (23 Feb 2016)
+- getinfo: CURLINFO_TLS_SSL_PTR supersedes CURLINFO_TLS_SESSION
+  
+  The two options are almost the same, except in the case of OpenSSL:
+  
+  CURLINFO_TLS_SESSION OpenSSL session internals is SSL_CTX *.
+  
+  CURLINFO_TLS_SSL_PTR OpenSSL session internals is SSL *.
+  
+  For backwards compatibility we couldn't modify CURLINFO_TLS_SESSION to
+  return an SSL pointer for OpenSSL.
+  
+  Also, add support for the 'internals' member to point to SSL object for
+  the other backends axTLS, PolarSSL, Secure Channel, Secure Transport and
+  wolfSSL.
+  
+  Bug: https://github.com/curl/curl/issues/234
+  Reported-by: dkjjr89@users.noreply.github.com
+  
+  Bug: https://curl.haxx.se/mail/lib-2015-09/0127.html
+  Reported-by: Michael König
 
-  openssl: fix build with OPENSSL_NO_COMP
+Daniel Stenberg (23 Feb 2016)
+- multi_remove_handle: keep the timeout list until after disconnect
   
-  With OPENSSL_NO_COMP defined, there is no function
-  SSL_COMP_free_compression_methods
+  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.
   
-  Closes #836
+  Reported-by: 蔡文凱
+  Bug: https://curl.haxx.se/mail/lib-2016-02/0097.html
 
-- [Gisle Vanem brought this change]
+Kamil Dudka (23 Feb 2016)
+- tests/sshserver.pl: use RSA instead of DSA for host auth
+  
+  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.
+  
+  Reported-by: Karlson2k
+  
+  Closes #676
 
-  memdebug: fix MSVC crash with -DMEMDEBUG_LOG_SYNC
+Jay Satiro (23 Feb 2016)
+- TFTP: add option to suppress TFTP option requests (Part 2)
   
-  Fixes #828
+  - Add tests.
+  
+  - Add an example to CURLOPT_TFTP_NO_OPTIONS.3.
+  
+  - Add --tftp-no-options to expose CURLOPT_TFTP_NO_OPTIONS.
+  
+  Bug: https://github.com/curl/curl/issues/481
 
-- [Jonathan brought this change]
+- [Michael Koenig brought this change]
 
-  README.md: polish
+  TFTP: add option to suppress TFTP option requests (Part 1)
   
-  Closes #834
+  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.
+  
+  Bug: https://github.com/curl/curl/issues/481
 
-- RELEASE-NOTES: fix vuln link
+Daniel Stenberg (22 Feb 2016)
+- [Karlson2k brought this change]
 
-Version 7.49.1 (30 May 2016)
+  runtests: Fixed usage of %PWD on MinGW64
+  
+  Closes #672
 
-Daniel Stenberg (30 May 2016)
-- RELEASE-NOTES: 7.49.1
+Jay Satiro (20 Feb 2016)
+- CURLOPT_DEBUGFUNCTION.3: Fix example
 
-- [Steve Holme brought this change]
+- [Viktor Szakats brought this change]
 
-  loadlibrary: Only load system DLLs from the system directory
+  src/Makefile.m32: add CURL_{LD,C}FLAGS_EXTRAS support
   
-  Inspiration provided by: Daniel Stenberg and Ray Satiro
-  
-  Bug: https://curl.haxx.se/docs/adv_20160530.html
+  Sync with lib/Makefile.m32 which already uses those variables.
   
-  Ref: Windows DLL hijacking with curl, CVE-2016-4802
+  Bug: https://github.com/curl/curl/pull/670
 
-- ssh: fix version number check typo
+Dan Fandrich (20 Feb 2016)
+- Enabled test 1437 after the bug fix in commit 3fa220a6
 
-Jay Satiro (29 May 2016)
-- curl_share_setopt.3: Add min ver needed for ssl session lock
-  
-  Bug: https://github.com/curl/curl/issues/826
-  Reported-by: Michael Wallner
+Jay Satiro (19 Feb 2016)
+- [Emil Lerner brought this change]
 
-Daniel Stenberg (29 May 2016)
-- ssh: fix build for libssh2 before 1.2.6
+  curl_sasl: Fix memory leak in digest parser
   
-  The statvfs functionality was added to libssh2 in that version, so we
-  switch off that functionality when built with older libraries.
+  If any parameter in a HTTP DIGEST challenge message is present multiple
+  times, memory allocated for all but the last entry should be freed.
   
-  Fixes #831
+  Bug: https://github.com/curl/curl/pull/667
 
-- mbedtls: fix includes so snprintf() works
+Dan Fandrich (19 Feb 2016)
+- Added test 1437 to verify a memory leak
   
-  Regression from the previous *printf() rearrangements, this file missed to
-  include the correct header to make sure snprintf() works universally.
+  Reported-by: neex@users.noreply.github.com
+
+Jay Satiro (18 Feb 2016)
+- CURLOPT_COOKIEFILE.3: HTTP headers must be Set-Cookie style
   
-  Reported-by: Moti Avrahami
-  Bug: https://curl.haxx.se/mail/lib-2016-05/0196.html
+  Bug: https://github.com/curl/curl/issues/666
+  Reported-by: baumanj@users.noreply.github.com
 
-Steve Holme (23 May 2016)
-- checksrc.pl: Added variants of strcat() & strncat() to banned function list
+- curl.1: HTTP headers for --cookie must be Set-Cookie style
   
-  Added support for checking the tchar, unicode and mbcs variants of
-  strcat() and strncat() in the banned function list.
+  Bug: https://github.com/curl/curl/issues/666
+  Reported-by: baumanj@users.noreply.github.com
 
-Daniel Stenberg (23 May 2016)
-- smtp: minor ident (white space) fixes
+Daniel Stenberg (18 Feb 2016)
+- curl.1: add a missing dash
 
-- THANKS: updated after script fixes
+- CONTRIBUTING.md: fix links
+
+- ISSUE_TEMPLATE: github issue template
   
-  Now giving credit properly to github user names, fixed some UTF-8 issues
-  and added names discovered when contrithanks was improved.
+  First version, try this out!
+
+- CONTRIBUTING.md: move into .github
+  
+  To hide github specific files somewhat from the rest.
 
-- THANKS-filter: more name cleanups
+- opts: add references
 
-- contrithanks.sh: exclude existing names case insensitively
+- examples/make: add 'checksrc' target
 
-- contrithanks.sh: use same grep pattern and -a flag as contributors.sh
+- 10-at-a-time: typecast the argument passed to sleep()
 
-- contributors.sh: better grep pattern, use grep -a
+- externalsocket.c: fix compiler warning for fwrite return type
 
-- THANKS-filter: fix more names
+- anyauthput.c: fix compiler warnings
 
-- contrithanks.sh: do the same github fix as contributors.sh
+- simplessl.c: warning: while with space
+
+- curlx.c: i2s_ASN1_IA5STRING() clashes with an openssl function
   
-  from 1577bfa35ba
+  Reported-By: Gisle Vanem
 
-Jay Satiro (23 May 2016)
-- contributors: Show GitHub username if real name unknown
+- http2: don't decompress gzip decoding automatically
   
-  Prior to this change if a GitHub contributor's real name was unknown
-  they would be omitted from the list.
+  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.
   
-  Bug: https://github.com/curl/curl/issues/824
+  Reported-by: Kazuho Oku
+  
+  Closes #661
 
-Daniel Stenberg (21 May 2016)
-- RELEASE-NOTES: synced with 3caaeffbe8ded4
+Jay Satiro (16 Feb 2016)
+- [Tatsuhiro Tsujikawa brought this change]
 
-Jay Satiro (20 May 2016)
-- openssl: cleanup must free compression methods
+  http: Don't break the header into chunks if HTTP/2
   
-  - Free compression methods if OpenSSL 1.0.2 to avoid a memory leak.
+  nghttp2 callback deals with TLS layer and therefore the header does not
+  need to be broken into chunks.
   
-  Bug: https://github.com/curl/curl/issues/817
-  Reported-by: jveazey@users.noreply.github.com
+  Bug: https://github.com/curl/curl/issues/659
+  Reported-by: Kazuho Oku
 
-Daniel Stenberg (20 May 2016)
-- [Gisle Vanem brought this change]
+Daniel Stenberg (16 Feb 2016)
+- [Viktor Szakats brought this change]
 
-  curl_multibyte: fix compiler error
+  openssl: use macro to guard the opaque EVP_PKEY branch
+
+- [Viktor Szakats brought this change]
+
+  openssl: avoid direct PKEY access with OpenSSL 1.1.0
   
-  While compiling lib/curl_multibyte.c with '-DUSE_WIN32_IDN' etc. I was
-  getting:
+  by using API instead of accessing an internal structure.
+  This is required starting OpenSSL 1.1.0-pre3.
   
-  f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2054: expected '('
-  to follow 'CURL_EXTERN'
+  Closes #650
+
+- RELEASE-NOTES: synced with ede0bfc079da
+
+- [Clint Clayton brought this change]
+
+  CURLOPT_CONNECTTIMEOUT_MS.3: Fix example to use milliseconds option
   
-  f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2085:
-  'curl_domalloc': not in formal parameter list
+  Change the example in the docs for CURLOPT_CONNECTTIMEOUT_MS to use
+  CURLOPT_CONNECTTIMEOUT_MS instead of CURLOPT_CONNECTTIMEOUT.
+  
+  Closes #653
 
-- THANKS-filter: make Jan-E get proper credit
+- opt-docs: add more references
 
-- [Jan-E brought this change]
+- [David Byron brought this change]
 
-  winbuild/Makefile.vc: Fix check on SSL, MBEDTLS, WINSSL exclusivity
+  SCP: use libssh2_scp_recv2 to support > 2GB files on windows
   
-  Closes #818
+  libssh2_scp_recv2 is introduced in libssh2 1.7.0 - to be released "any
+  day now.
+  
+  Closes #451
 
-- [Alexander Traud brought this change]
+Jay Satiro (13 Feb 2016)
+- [Shine Fan brought this change]
 
-  libcurl.m4: Avoid obsolete warning
+  gtls: fix for builds lacking encrypted key file support
   
-  Closes #821
+  Bug: https://github.com/curl/curl/pull/651
 
-Jay Satiro (20 May 2016)
-- [Michael Kaufmann brought this change]
+Dan Fandrich (13 Feb 2016)
+- test1604: Add to Makefile.inc so it gets run
 
-  CURLOPT_CONNECT_TO.3: user must not free the list prematurely
+Jay Satiro (12 Feb 2016)
+- generate.bat: Fix comment bug by removing old comments
   
-  The connect-to list isn't copied so as long as the handle may be used
-  for a transfer the list must be valid.
+  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.
   
-  Bug: https://github.com/curl/curl/pull/819
-  Reported-by: Michael Kaufmann
-
-Daniel Stenberg (19 May 2016)
-- RELEASE-NOTES: synced with 48114a8634242c
+  Closes https://github.com/curl/curl/issues/649
 
-- openssl: ERR_remove_thread_state() is deprecated in latest 1.1.0
+Kamil Dudka (12 Feb 2016)
+- curl.1: --disable-{eprt,epsv} are ignored for IPv6 hosts
   
-  See OpenSSL commit 21e001747d4a
+  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: https://bugzilla.redhat.com/1305970
 
-- http2: use HTTP/2 in the HTTP/1.1-alike header
+Daniel Stenberg (12 Feb 2016)
+- dist: ship buildconf.bat too
   
-  ... when generating them, not "2.0" as the protocol is called just
-  HTTP/2 and nothing else.
+  As the winbuild/* stuff uses it!
 
-Jay Satiro (19 May 2016)
-- dist: include curl_multi_socket_all.3
+- curlx_tvdiff: handle 32bit time_t overflows
   
-  Closes https://github.com/curl/curl/pull/816
+  On 32bit systems, make sure we don't overflow and return funky values
+  for very large time differences.
+  
+  Reported-by: Anders Bakken
+  
+  Closes #646
 
-Steve Holme (18 May 2016)
-- bump: Start work on 7.49.1
+- examples: fix some compiler warnings
 
-Daniel Stenberg (18 May 2016)
-- curlbuild.h.dist: check __LP64__ as well to fix MIPS build
+- simplessl.c: fix my breakage
+
+- examples: adhere to curl code style
   
-  The preprocessor check that sets up the 32bit defines for non-configure
-  builds didn't work properly for MIPS systems as __mips__ is defined for
-  both 32bit and 64bit. Now __LP64__ is also checked and indicates 64bit.
+  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.
   
-  Reported-by: Tomas Jakobsson
-  Fixes #813
-
-- [Marcel Raad brought this change]
+  573 checksrc warnings were addressed.
 
-  schannel: fix compile break with MSVC XP toolset
+- examples/cookie_interface.c: add cleanup call
   
-  For the Windows XP toolset of Visual C++ 2013/2015, the old Windows SDK
-  7.1 is used. In this case, _USING_V110_SDK71_ is defined.
+  cleaning up handles is a good idea as we leak memory otherwise
   
-  Closes #812
+  Also, line wrapped before 80 columns.
 
-- dist: include CHECKSRC.md
+Kamil Dudka (10 Feb 2016)
+- nss: search slash in forward direction in dup_nickname()
   
-  Reported-by: Paul Howarth
-  Bug: https://curl.haxx.se/mail/lib-2016-05/0116.html
+  It is wasteful to search it backwards if we look for _any_ slash.
 
-- test/Makefile.am: include manpage-scan.pl and nroff-scan.pl in dist
+- nss: do not count enabled cipher-suites
   
-  Reported-by: Ray Satiro
-  Bug: https://curl.haxx.se/mail/lib-2016-05/0113.html
+  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.
 
-Version 7.49.0 (17 May 2016)
+Daniel Stenberg (10 Feb 2016)
+- contributors.sh: make 79 the max column width (from 80)
 
-Daniel Stenberg (17 May 2016)
-- THANKS: 24 new names from 7.49.0 release notes
+- RELEASE-NOTES: synced with c276aefee3995
 
-- RELEASE-NOTES: 7.49.0
+- mbedtls.c: re-indent to better match curl standards
 
-- mbedtls/polarssl: set "hostname" unconditionally
+- [Rafael Antonio brought this change]
+
+  mbedtls: fix memory leak when destroying SSL connection data
   
-  ...as otherwise the TLS libs will skip the CN/SAN check and just allow
-  connection to any server. curl previously skipped this function when SNI
-  wasn't used or when connecting to an IP address specified host.
+  Closes #626
+
+- mbedtls: fix ALPN usage segfault
   
-  CVE-2016-3739
+  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.
   
-  Bug: https://curl.haxx.se/docs/adv_20160518A.html
-  Reported-by: Moti Avrahami
+  Closes #642
 
-- [Frank Gevaerts brought this change]
+Jay Satiro (9 Feb 2016)
+- [Timotej Lazar brought this change]
 
-  CURLOPT_RESOLVE.3: fix typo
-  
-  Closes #811
+  opts: update references to renamed options
 
-- docs: CURLOPT_RESOLVE overrides CURLOPT_IPRESOLVE
+- KNOWN_BUGS: Update #92 - Windows device prefix
 
-- KNOWN_BUGS: GnuTLS backend skips really long certificate fields
+- tool_doswin: Support for literal path prefix \\?\
   
-  Closes #762
+  For example something like --output \\?\C:\foo
 
-- CURLOPT_HTTPPOST.3: the data needs to be around while in use
+Daniel Stenberg (9 Feb 2016)
+- configure: state "BoringSSL" in summary when that was detected
 
-- openssl: get_cert_chain: fix NULL dereference
-  
-  CID 1361815: Explicit null dereferenced (FORWARD_NULL)
+- [David Benjamin brought this change]
 
-- openssl: get_cert_chain: avoid NULL dereference
+  openssl: remove most BoringSSL #ifdefs.
   
-  CID 1361811: Explicit null dereferenced (FORWARD_NULL)
-
-- dprintf_formatf: fix (false?) Coverity warning
+  As of https://boringssl-review.googlesource.com/#/c/6980/, almost all of
+  BoringSSL #ifdefs in cURL should be unnecessary:
   
-  CID 1024412: Memory - illegal accesses (OVERRUN). Claimed to happen when
-  we run over 'workend' but the condition says <= workend and for all I
-  can see it should be safe. Compensating for the warning by adding a byte
-  margin in the buffer.
+  - BoringSSL provides no-op stubs for compatibility which replaces most
+    #ifdefs.
   
-  Also, removed the extra brace level indentation in the code and made it
-  so that 'workend' is only assigned once within the function.
-
-- RELEASE-NOTES: synced with 2dcb5adc72d6
+  - DES_set_odd_parity has been in BoringSSL for nearly a year now. Remove
+    the compatibility codepath.
+  
+  - With a small tweak to an extend_key_56_to_64 call, the NTLM code
+    builds fine.
+  
+  - Switch OCSP-related #ifdefs to the more generally useful
+    OPENSSL_NO_OCSP.
+  
+  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.)
+  
+  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!)
+  
+  Closes #640
 
-- THANKS-filter: fixed Jonathan Cardoso
+Jay Satiro (8 Feb 2016)
+- KNOWN_BUGS: Windows device prefix is required for devices
 
-Jay Satiro (15 May 2016)
-- ftp: fix incorrect out-of-memory code in Curl_pretransfer
+- tool_urlglob: Allow reserved dos device names (Windows)
   
-  - Return value type must match function type.
+  Allow --output to reserved dos device names without the device prefix
+  for backwards compatibility.
   
-  s/CURLM_OUT_OF_MEMORY/CURLE_OUT_OF_MEMORY/
+  Example: --output NUL can be used instead of --output \\.\NUL
   
-  Caught by Travis CI
+  Bug: https://github.com/curl/curl/commit/4520534#commitcomment-15954863
+  Reported-by: Gisle Vanem
 
-Daniel Stenberg (15 May 2016)
-- ftp wildcard: segfault due to init only in multi_perform
+Daniel Stenberg (8 Feb 2016)
+- cookies: allow spaces in cookie names, cut of trailing spaces
   
-  The proper FTP wildcard init is now more properly done in Curl_pretransfer()
-  and the corresponding cleanup in Curl_close().
+  It turns out Firefox and Chrome both allow spaces in cookie names and
+  there are sites out there using that.
   
-  The previous place of init/cleanup code made the internal pointer to be NULL
-  when this feature was used with the multi_socket() API, as it was made within
-  the curl_multi_perform() function.
+  Turned out the code meant to strip off trailing space from cookie names
+  didn't work. Fixed now.
   
-  Reported-by: Jonathan Cardoso Machado
-  Fixes #800
-
-Jay Satiro (13 May 2016)
-- libcurl-tlibcurl-thread: Update OpenSSL links
+  Test case 8 modified to verify both these changes.
   
-  Because the old OpenSSL link now redirects to their master documentation
-  (currently 1.1.0), which does not document the required actions for
-  OpenSSL <= 1.0.2.
+  Closes #639
 
-Daniel Stenberg (13 May 2016)
-- [Viktor Szakats brought this change]
+Patrick Monnerat (8 Feb 2016)
+- Merge branch 'master' of github.com:curl/curl
 
-  darwinssl.c: fix OS X codename typo in comment
+- os400: sync ILE/RPG definitions with latest public header files.
 
-- RELEASE-NOTES: synced with 68701e51c1f7
-  
-  Added 8 bug fixes and 5 more contrbutors
+Daniel Stenberg (8 Feb 2016)
+- [Ludwig Nussel brought this change]
 
-- [Jay Satiro brought this change]
+  SSLCERTS: update wrt SSL CA certificate store
 
-  mprintf: Fix processing of width and prec args
-  
-  Prior to this change a width arg could be erroneously output, and also
-  width and precision args could not be used together without crashing.
+- [Ludwig Nussel brought this change]
+
+  configure: --with-ca-fallback: use built-in TLS CA fallback
   
-  "%0*d%s", 2, 9, "foo"
+  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.
   
-  Before: "092"
-  After: "09foo"
+  Closes #569
+
+- Proxy-Connection: stop sending this header by default
   
-  "%*.*s", 5, 2, "foo"
+  RFC 7230 says we should stop. Firefox already stopped.
   
-  Before: crash
-  After: "   fo"
+  Bug: https://github.com/curl/curl/issues/633
+  Reported-By: Brad Fitzpatrick
   
-  Test 557 is updated to verify this and more
-
-- [Michael Kaufmann brought this change]
+  Closes #633
 
-  ConnectionExists: follow-up fix for proxy re-use
-  
-  Follow-up commit to 5823179
-  
-  Closes #648
+- bump: work toward the next release
 
-- [Per Malmberg brought this change]
+- THANKS: 2 contributors from the 7.47.1 release
 
-  darwinssl: fix certificate verification disable on OS X 10.8
-  
-  The new way of disabling certificate verification doesn't work on
-  Mountain Lion (OS X 10.8) so we need to use the old way in that version
-  too. I've tested this solution on versions 10.7.5, 10.8, 10.9, 10.10.2
-  and 10.11.
+- RELEASE-PROCEDURE: remove the github upload part
   
-  Closes #802
+  ... as we're HTTPS on the main site now, there's no point in that
+  extra step
 
-- [Cory Benfield brought this change]
+Version 7.47.1 (8 Feb 2016)
 
-  http2: Add space between colon and header value
-  
-  curl's representation of HTTP/2 responses involves transforming the
-  response to a format that is similar to HTTP/1.1. Prior to this change,
-  curl would do this by separating header names and values with only a
-  colon, without introducing a space after the colon.
-  
-  While this is technically a valid way to represent a HTTP/1.1 header
-  block, it is much more common to see a space following the colon. This
-  change introduces that space, to ensure that incautious tools are safely
-  able to parse the header block.
+Daniel Stenberg (8 Feb 2016)
+- RELEASE-NOTES: curl 7.47.1 time!
+
+Jay Satiro (8 Feb 2016)
+- tool_operhlp: Check for backslashes in get_url_file_name
   
-  This also ensures that the difference between the HTTP/1.1 and HTTP/2
-  response layout is as minimal as possible.
+  Extract the filename from the last slash or backslash. Prior to this
+  change backslashes could be part of the filename.
   
-  Bug: https://github.com/curl/curl/issues/797
+  This change needed for the curl tool built for Cygwin. Refer to the
+  CYGWIN addendum in advisory 20160127B.
   
-  Closes #798
-  Fixes #797
+  Bug: https://curl.haxx.se/docs/adv_20160127B.html
 
-Kamil Dudka (12 May 2016)
-- openssl: fix compile-time warning in Curl_ossl_check_cxn()
+Daniel Stenberg (7 Feb 2016)
+- RELEASE-NOTES: synced with d6a8869ea34
+
+Jay Satiro (6 Feb 2016)
+- openssl: Fix signed/unsigned mismatch warning in X509V3_ext
   
-  ... introduced in curl-7_48_0-293-g2968c83:
+  sk_X509_EXTENSION_num may return an unsigned integer, however the value
+  will fit in an int.
   
-  Error: COMPILER_WARNING:
-  lib/vtls/openssl.c: scope_hint: In function ‘Curl_ossl_check_cxn’
-  lib/vtls/openssl.c:767:15: warning: conversion to ‘int’ from ‘ssize_t’
-  may alter its value [-Wconversion]
+  Bug: https://github.com/curl/curl/commit/dd1b44c#commitcomment-15913896
+  Reported-by: Gisle Vanem
 
-Jay Satiro (11 May 2016)
-- openssl: stricter connection check function
+Daniel Stenberg (7 Feb 2016)
+- TODO: 17.11 -w output to stderr
+
+Jay Satiro (6 Feb 2016)
+- [Michael Kaufmann brought this change]
+
+  idn_win32: Better error checking
   
-  - In the case of recv error, limit returning 'connection still in place'
-  to EINPROGRESS, EAGAIN and EWOULDBLOCK.
+  .. also fix a conversion bug in the unused function
+  curl_win32_ascii_to_idn().
   
-  This is an improvement on the parent commit which changed the openssl
-  connection check to use recv MSG_PEEK instead of SSL_peek.
+  And remove wprintfs on error (Jay).
   
-  Ref: https://github.com/curl/curl/commit/856baf5#comments
+  Bug: https://github.com/curl/curl/pull/637
 
-Daniel Stenberg (11 May 2016)
-- [Anders Bakken brought this change]
+- [Gisle Vanem brought this change]
 
-  TLS: SSL_peek is not a const operation
-  
-  Calling SSL_peek can cause bytes to be read from the raw socket which in
-  turn can upset the select machinery that determines whether there's data
-  available on the socket.
-  
-  Since Curl_ossl_check_cxn only tries to determine whether the socket is
-  alive and doesn't actually need to see the bytes SSL_peek seems like
-  the wrong function to call.
+  examples/asiohiper: Avoid function name collision on Windows
   
-  We're able to occasionally reproduce a connect timeout due to this
-  bug. What happens is that Curl doesn't know to call SSL_connect again
-  after the peek happens since data is buffered in the SSL buffer and thus
-  select won't fire for this socket.
+  closesocket => close_socket
+  Winsock already has the former.
   
-  Closes #795
+  Bug: https://curl.haxx.se/mail/lib-2016-02/0016.html
 
-Jay Satiro (9 May 2016)
-- [Daniel Stenberg brought this change]
+- [Gisle Vanem brought this change]
 
-  TLS: move the ALPN/NPN enable bits to the connection
-  
-  Only protocols that actually have a protocol registered for ALPN and NPN
-  should try to get that negotiated in the TLS handshake. That is only
-  HTTPS (well, http/1.1 and http/2) right now. Previously ALPN and NPN
-  would wrongly be used in all handshakes if libcurl was built with it
-  enabled.
+  examples/htmltitle: Use _stricmp on Windows
   
-  Reported-by: Jay Satiro
+  Bug: https://curl.haxx.se/mail/lib-2016-02/0017.html
+
+Daniel Stenberg (6 Feb 2016)
+- COPYING: clarify that Daniel is not the sole author
   
-  Fixes #789
+  ... done on request and as it is a fair point.
 
-Daniel Stenberg (8 May 2016)
-- libcurl-thread.3: openssl 1.1.0 is safe, and so is boringssl
+Jay Satiro (5 Feb 2016)
+- unit1604: Fix unit setup return code
 
-- [Antonio Larrosa brought this change]
+- tool_doswin: Use type SANITIZEcode in sanitize_file_name
 
-  connect: fix invalid "Network is unreachable" errors
+- tool_doswin: Improve sanitization processing
   
-  Sometimes, in systems with both ipv4 and ipv6 addresses but where the
-  network doesn't support ipv6, Curl_is_connected returns an error
-  (intermittently) even if the ipv4 socket connects successfully.
+  - Add unit test 1604 to test the sanitize_file_name function.
   
-  This happens because there's a for-loop that iterates on the sockets but
-  the error variable is not resetted when the ipv4 is checked and is ok.
+  - Use -DCURL_STATICLIB when building libcurltool for unit testing.
   
-  This patch fixes this problem by setting error to 0 when checking the
-  second socket and not having a result yet.
+  - Better detection of reserved DOS device names.
   
-  Fixes #794
+  - New flags to modify sanitize behavior:
+  
+  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
+  
+  - Restore sanitization of banned characters from user-specified outfile.
+  
+  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.
+  
+  
+  Closes https://github.com/curl/curl/issues/624
+  Reported-by: Octavio Schroeder
 
-Jay Satiro (5 May 2016)
-- FAQ: refer to thread safety guidelines
+- [Viktor Szakats brought this change]
 
-Daniel Stenberg (3 May 2016)
-- connections: non-HTTP proxies on different ports aren't reused either
+  URLs: change more http to https
+
+- sasl_sspi: Fix memory leak in domain populate
   
-  Reported-by: Oleg Pudeyev and fuchaoqun
+  Free an existing domain before replacing it.
   
-  Fixes #648
+  Bug: https://github.com/curl/curl/issues/635
+  Reported-by: silveja1@users.noreply.github.com
 
-- http: make sure a blank header overrides accept_decoding
+Daniel Stenberg (4 Feb 2016)
+- [Viktor Szakats brought this change]
+
+  URLs: follow GitHub project rename (also Travis CI)
   
-  Reported-by: rcanavan
-  Assisted-by: Isaac Boukris
-  Closes #785
+  Closes #632
 
-- CHECKSRC.md: clarified, explained the whitelist file
+- CHANGES.o: fix references to curl.haxx.nu
+  
+  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.
 
-- nroff-scan.pl: verify that references are made with \fI
+- HISTORY: add some info about when we used which host names
 
-- docs: unified man page references to use \fI
+Jay Satiro (2 Feb 2016)
+- [Viktor Szakats brought this change]
 
-- TODO: 17.14 --fail without --location should treat 3xx as a failure
+  URLs: change more http to https
+
+Dan Fandrich (3 Feb 2016)
+- URLs: Change more haxx.se URLs from http: to https:
+
+Daniel Stenberg (3 Feb 2016)
+- RELEASE-NOTES: synced with 4af40b364
+
+- URLs: change all http:// URLs to https://
+
+- configure: update the copyright year range in output
+
+- dotdot: allow an empty input string too
   
-  Closes #727
+  It isn't used by the code in current conditions but for safety it seems
+  sensible to at least not crash on such input.
+  
+  Extended unit test 1395 to verify this too as well as a plain "/" input.
 
-- RELEASE-NOTES: synced with 7987f5cb14d
+- HTTPS: update a bunch of URLs from HTTP to HTTPS
 
-- [Isaac Boukris brought this change]
+- [Sergei Nikulov brought this change]
 
-  CURLOPT_ACCEPT_ENCODING.3: Follow-up clarification
+  AppVeyor: updated to handle OpenSSL/WinSSL builds
   
-  Mention possible content-length mismatch with sum of bytes reported
-  by write callbacks when auto decoding is enabled.
+  Closes #621
+
+Jay Satiro (1 Feb 2016)
+- tool_operate: Don't sanitize --output path (Windows)
   
-  See #785
+  Due to path separators being incorrectly sanitized in --output
+  pathnames, eg -o c:\foo => c__foo
+  
+  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.
+  
+  Bug: https://github.com/bagder/curl/issues/624
+  Reported-by: Octavio Schroeder
 
-- test1140: run nroff-scan to verify man pages
+- curl.1: Explain remote-name behavior if file already exists
+  
+  .. also warn about letting the server pick the filename.
 
-- nroff-scan.pl: verify the .BR references as well
+- [Gisle Vanem brought this change]
 
-- CURLOPT_CONV_TO_NETWORK_FUNCTION.3: fix bad man page reference
+  urldata: Error on missing SSL backend-specific connect info
 
-- CURLOPT_BUFFERSIZE.3: fix reference to CURLOPT_MAX_RECV_SPEED_LARGE
+Daniel Stenberg (28 Jan 2016)
+- bump: towards the next (7.47.1 ?)
 
-- curl_easy_pause.3: fix man page reference
+- [Sergei Nikulov brought this change]
 
-Jay Satiro (1 May 2016)
-- tool_cb_hdr: Fix --remote-header-name with schemeless URL
+  cmake: fixed when OpenSSL enabled on Windows and schannel detected
   
-  - Move the existing scheme check from tool_operate.
-  
-  In the case of --remote-header-name we want to parse Content-disposition
-  for a filename, but only if the scheme is http or https. A recent
-  adjustment 0dc4d8e was made to account for schemeless URLs however it's
-  not 100% accurate. To remedy that I've moved the scheme check to the
-  header callback, since at that point the library has already determined
-  the scheme.
+  Closes #617
+
+Jay Satiro (28 Jan 2016)
+- [Sergei Nikulov brought this change]
+
+  urldata: moved common variable out of ifdef
   
-  Bug: https://github.com/curl/curl/issues/760
-  Reported-by: Kai Noda
+  Closes https://github.com/bagder/curl/pull/618
 
-Daniel Stenberg (1 May 2016)
-- tls: make setting pinnedkey option fail if not supported
+- [Viktor Szakats brought this change]
+
+  tool_doswin: silence unused function warning
   
-  to make it obvious to users trying to use the feature with TLS backends
-  not supporting it.
+  tool_doswin.c:185:14: warning: 'msdosify' defined but not used
+  [-Wunused-function]
   
-  Discussed in #781
-  Reported-by: Travis Burtrum
+  Closes https://github.com/bagder/curl/pull/616
 
-- nroff-scan.pl: verifies nroff pages
+Daniel Stenberg (27 Jan 2016)
+- getredirect.c: fix variable name
   
-  ... not used by any test yet but can be used stand-alone.
+  Reported-by: Bernard Spil
 
-- opts: fix broken/bad references
+Version 7.47.0 (27 Jan 2016)
 
-- [Michael Kaufmann brought this change]
+Daniel Stenberg (27 Jan 2016)
+- examples/Makefile.inc: specify programs without .c!
 
-  docs: fix bugs in CURLOPT_HTTP_VERSION.3 and CURLOPT_PIPEWAIT.3
-  
-  Closes #786
+- THANKS: 6 new contributors from 7.47.0 release notes
 
-- CURLOPT_ACCEPT_ENCODING.3: clarified
-  
-  As discussed in #785
+- [Isaac Boukris brought this change]
 
-- curl.1: --mail-rcpt can be used multiple times
+  NTLM: Fix ConnectionExists to compare Proxy credentials
   
-  Reported-by: mgendre
-  Closes #784
+  Proxy NTLM authentication should compare credentials when
+  re-using a connection similar to host authentication, as it
+  authenticate the connection.
+  
+  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
 
-- [Karlson2k brought this change]
+- [Ray Satiro brought this change]
 
-  tests: Use 'pathhelp' for paths conversions in secureserver.pl
+  curl: avoid local drive traversal when saving file (Windows)
   
-  Closes #675
+  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.
+  
+  CVE-2016-0754
+  
+  Bug: http://curl.haxx.se/docs/adv_20160127B.html
 
-- [Karlson2k brought this change]
+- RELEASE-NOTES: 7.47.0
 
-  tests: Use 'pathhelp' for paths conversions in sshserver.pl
+- FAQ: language fix in 4.19
 
-- [Karlson2k brought this change]
+- [paulehoffman brought this change]
 
-  tests: Use 'pathhelp' for current path in runtests.pl
+  FAQ: Update to point to GitHub
+  
+  Current FAQ didn't make it clear where the main repo is.
+  
+  Closes #612
 
-- [Karlson2k brought this change]
+- maketgz: generate date stamp with LC_TIME=C
+  
+  bug: http://curl.haxx.se/mail/lib-2016-01/0123.html
 
-  tests: pathhelp.pm to process paths on Msys/Cygwin
+- curl_multi_socket_action.3: line wrap
 
-- lib: include curl_printf.h as one of the last headers
+- RELEASE-NOTES: synced with d58ba66eeceb
+
+Steve Holme (21 Jan 2016)
+- TODO: "Create remote directories" for SMB
+
+Jay Satiro (18 Jan 2016)
+- mbedtls: Fix pinned key return value on fail
   
-  curl_printf.h defines printf to curl_mprintf, etc. This can cause
-  problems with external headers which may use
-  __attribute__((format(printf, ...))) markers etc.
+  - Switch from verifying a pinned public key in a callback during the
+  certificate verification to inline after the certificate verification.
   
-  To avoid that they cause problems with system includes, we include
-  curl_printf.h after any system headers. That makes the three last
-  headers to always be, and we keep them in this order:
+  The callback method had three problems:
   
-   curl_printf.h
-   curl_memory.h
-   memdebug.h
+  1. If a pinned public key didn't match, CURLE_SSL_PINNEDPUBKEYNOTMATCH
+  was not returned.
   
-  None of them include system headers, they all do funny #defines.
+  2. If peer certificate verification was disabled the pinned key
+  verification did not take place as it should.
   
-  Reported-by: David Benjamin
+  3. (related to #2) If there was no certificate of depth 0 the callback
+  would not have checked the pinned public key.
   
-  Fixes #743
-
-- memdebug.h: remove inclusion of other headers
+  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.
   
-  Mostly because they're not needed, because memdebug.h is always included
-  last of all headers so the others already included the correct ones.
+  Ref: http://curl.haxx.se/mail/lib-2016-01/0047.html
+  Ref: https://github.com/bagder/curl/pull/601
+
+- tests: Add a test for pinnedpubkey fail even when insecure
   
-  But also, starting now we don't want this to accidentally include any
-  system headers, as the header included _before_ this header may add
-  defines and other fun stuff that we won't want used in system includes.
+  Because disabling the peer verification (--insecure) must not disable
+  the public key pinning check (--pinnedpubkey).
 
-- [Jay Satiro brought this change]
+- [Daniel Schauenberg brought this change]
 
-  curl -J: make it work even without http:// scheme on URL
-  
-  It does open up a miniscule risk that one of the other protocols that
-  libcurl could use would send back a Content-Disposition header and then
-  curl would act on it even if not HTTP.
+  CURLINFO_RESPONSE_CODE.3: add example
+
+Kamil Dudka (15 Jan 2016)
+- ssh: make CURLOPT_SSH_PUBLIC_KEYFILE treat "" as NULL
   
-  A future mitigation for this risk would be to allow the callback to ask
-  libcurl which protocol is being used.
+  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.
   
-  Verified with test 1312
+  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.
   
-  Closes #760
+  Bug: http://curl.haxx.se/mail/lib-2016-01/0072.html
 
-- manpage-scan.pl: also verify the command line option docs
+Daniel Stenberg (14 Jan 2016)
+- RELEASE-NOTES: synced with 35083ca60ed035a
+
+- openssl: improved error detection/reporting
   
-  This script now also scans src/tool_getparam.c, docs/curl.1 and
-  src/tool_help.c and will warn if any of them lists a command line option
-  not mentioned in one of the other places.
+  ... 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.
 
-- curl: show the long option version of -q in the -h list
+- openssl: for 1.1.0+ they now provide a SSLeay() macro of their own
 
-- curl: remove "--socks" as "--socks5" turned 8
+- CURLOPT_RESOLVE.3: minor language polish
+
+- configure: assume IPv6 works when cross-compiled
   
-  In commit 2e42b0a2524 (Jan 2008) we made the option "--socks" deprecated
-  and it has not been documented since. The more explicit socks options
-  (like --socks4 or --socks5) should be used.
+  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
 
-- curl.1: document the deprecated --ftp-ssl option
+- TODO: "Try to URL encode given URL"
+  
+  Closes #514
 
-- curl: remove --http-request
+- ConnectionExists: only do pipelining/multiplexing when asked
   
-  It was mentioned as deprecated already in commit ae1912cb0d4 from
-  1999. It has not been documented in this millennium.
+  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.
+  
+  It should only pipelined if explicitly asked to.
+  
+  Closes #584
 
-- curl: mention --ntlm-wb in -h list
+- [Mohammad AlSaleh brought this change]
 
-- curl: -h output lacked --proxy-header
+  lib: Prefix URLs with lower-case protocol names/schemes
+  
+  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.
+  
+  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".
+  
+  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>
 
-- curl.1: document --ntlm-wb
+- [Alessandro Ghedini brought this change]
 
-- curl.1: document the long format of -q: --disable
+  scripts: don't generate and install zsh completion when cross-compiling
 
-- curl.1: mention the deprecated --krb4 option
+- [Alessandro Ghedini brought this change]
 
-- curl.1: document --ftp-ssl-reqd
+  scripts: fix zsh completion generation
   
-  Even if deprecated, document it so that people will find it as old
-  scripts may still use it.
+  The script should use the just-built curl, not the system one. This fixes
+  zsh completion generation when no system curl is installed.
 
-- curl: use --telnet-option as documented
+- [Alessandro Ghedini brought this change]
+
+  zsh.pl: fail if no curl is found
   
-  The code said "telnet-options" but no documentation ever said so. It
-  worked fine since the code is fine with a unique match of the first
-  part.
+  Instead of generation a broken completion file.
 
-- getparam: remove support for --ftpport
+- [Michael Kaufmann brought this change]
+
+  IDN host names: Remove the port number before converting to ACE
   
-  It has been deprecated and undocumented since commit ad5ead8bed7 (Dec
-  2003). --ftp-port is the proper long option name.
+  Closes #596
 
-- curl: make --disable work as long form of -q
+Jay Satiro (10 Jan 2016)
+- runtests: Add mbedTLS to the SSL backends
   
-  To make the aliases list reflect reality.
+  .. and enable SSLpinning tests for mbedTLS, BoringSSL and LibreSSL.
 
-- aliases: remove trailing space from capath string
+Daniel Stenberg (10 Jan 2016)
+- [Thomas Glanzmann brought this change]
 
-- cmdline parse: only single letter options have single-letter strings
-  
-  ... moved around options so that parsing the code to find all
-  single-letter options easier.
+  mbedtls: implement CURLOPT_PINNEDPUBLICKEY
 
-Jay Satiro (28 Apr 2016)
-- CURLINFO_TLS_SSL_PTR.3: Clarify SSL pointer availability
-  
-  Bug: https://curl.haxx.se/mail/lib-2016-04/0126.html
-  Reported-by: Bru Rom
+Jay Satiro (9 Jan 2016)
+- [Tatsuhiro Tsujikawa brought this change]
 
-Daniel Stenberg (28 Apr 2016)
-- curl_easy_getinfo.3: remove superfluous blank lines
+  url: Fix compile error with --enable-werror
 
-- test1139: verifies libcurl option man page presence
-  
-  - checks that each option has its own man page present
-  
-  - checks that each option is mentioned in its corresponding index man
-    page
+- [Tatsuhiro Tsujikawa brought this change]
 
-- curl_easy_getinfo.3: added missing mention of CURLINFO_TLS_SESSION
+  http2: Ensure that http2_handle_stream_close is called
   
-  ... although it is deprecated.
+  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.
+  
+  Discussed in https://github.com/bagder/curl/pull/564
 
-Jay Satiro (28 Apr 2016)
-- mbedtls: Fix session resume
+Daniel Stenberg (8 Jan 2016)
+- http2: handle the received SETTINGS frame
   
-  This also fixes PolarSSL session resume.
+  This regression landed in 5778e6f5 and made libcurl not act on received
+  settings and instead stayed with its internal defaults.
   
-  Prior to this change the TLS session information wasn't properly
-  saved and restored for PolarSSL and mbedTLS.
+  Bug: http://curl.haxx.se/mail/lib-2016-01/0031.html
+  Reported-by: Bankde
+
+- Revert "multiplex: allow only once HTTP/2 is actually used"
   
-  Bug: https://curl.haxx.se/mail/lib-2016-01/0070.html
-  Reported-by: Thomas Glanzmann
+  This reverts commit 46cb70e9fa81c9a56de484cdd7c5d9d0d9fbec36.
   
-  Bug: https://curl.haxx.se/mail/lib-2016-04/0095.html
-  Reported-by: Moti Avrahami
-
-Daniel Stenberg (27 Apr 2016)
-- RELEASE-NOTES: synced with f4298fcc6d2
+  Bug: http://curl.haxx.se/mail/lib-2016-01/0031.html
 
-- [Michael Kaufmann brought this change]
+Jay Satiro (8 Jan 2016)
+- [Tatsuhiro Tsujikawa brought this change]
 
-  opts: Fix some syntax errors in example code fragments
+  http2: Fix PUSH_PROMISE headers being treated as trailers
   
-  Fixes #779
+  Discussed in https://github.com/bagder/curl/pull/564
 
-- openssl: avoid BN_print a NULL bignum
+Daniel Stenberg (8 Jan 2016)
+- [Michael Kaufmann brought this change]
+
+  connection reuse: IDN host names fixed
   
-  OpenSSL 1.1.0-pre seems to return NULL(?) for a whole lot of those
-  numbers so make sure the function handles this.
+  Use the ACE form of IDN hostnames as key in the connection cache.  Add
+  new tests.
   
-  Reported-by: Linus Nordberg
+  Closes #592
 
-- [Marcel Raad brought this change]
+- tests: mark IPv6 FTP and FTPS tests with the FTP keyword
 
-  CONNECT_ONLY: don't close connection on GSS 401/407 reponses
+Jay Satiro (7 Jan 2016)
+- mbedtls: Fix ALPN support
   
-  Previously, connections were closed immediately before the user had a
-  chance to extract the socket when the proxy required Negotiate
-  authentication.
+  - Fix ALPN reply detection.
   
-  This regression was brought in with the security fix in commit
-  79b9d5f1a42578f
+  - Wrap nghttp2 code in ifdef USE_NGHTTP2.
   
-  Closes #655
+  
+  Prior to this change ALPN and HTTP/2 did not work properly in mbedTLS.
 
-- CURLINFO_TLS_SESSION.3: clarify TLS library support before 7.48.0
+- http2: Fix client write for trailers on stream close
+  
+  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
 
-- mbedtls.c: silly spellfix of a comment
+Daniel Stenberg (7 Jan 2016)
+- COPYING: update general copyright year range
 
-- KNOWN_BUGS: 1.10 Strips trailing dot from host name
+- ConnectionExists: add missing newline in infof() call
   
-  Closes #716
+  Mistake from commit a464f33843ee1
 
-- test1322: verify stripping of trailing dot from host name
+- multiplex: allow only once HTTP/2 is actually used
   
-  While being debated (in #716) and a violation of RFC 7230 section 5.4,
-  this test verifies that the existing functionality works as intended. It
-  strips the dot from the host name and uses the host without dot
-  throughout the internals.
+  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
 
-- multi: accidentally used resolved host name instead of proxy
+Jay Satiro (4 Jan 2016)
+- curl_global_init.3: Add Windows-specific info for init via DLL
   
-  Regression introduced in 09b5a998
+  - 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.
   
-  Bug: https://curl.haxx.se/mail/lib-2016-04/0084.html
-  Reported-by: BoBo
+  Bug: https://github.com/bagder/curl/issues/586
+  Reported-by: marc-groundctl@users.noreply.github.com
 
-- symbols-in-versions: added new CURLSSLBACKEND_ symbols
+Daniel Stenberg (4 Jan 2016)
+- FAQ: clarify who to mail about ECCN clarifications
 
-- test148: fixed after the --ftp-create-dirs retry change
-  
-  follow-up commit to 3c1e84f569 as it made curl try a little harder
+- progressfunc.c: spellfix description
 
-- curl.h: clarify curl_sslbackend for openssl clones and renames
+- docs/examples/multi-app.c: fix bad desc formatting
 
-- [Karlson2k brought this change]
+- examples: added descriptions
 
-  url.c: fixed DEBUGASSERT() for WinSock workaround
+- example/simple.c: add description
+
+- getredirect.c: a new example
+
+Marc Hoersken (27 Dec 2015)
+- RELEASE-NOTES: add 5e0e81a9c4e35f04ca
+
+Daniel Stenberg (26 Dec 2015)
+- RELEASE-NOTES: synced with 2aec4359db1088b10d
+
+Marc Hoersken (26 Dec 2015)
+- test 1515: add data check
+
+- test 1515: add MSYS support by passing a relative path
   
-  If buffer is allocated, but nothing is received during prereceive
-  stage, than number of processed bytes must be zero.
+  MSYS would otherwise turn a /-style path into a C:\-style path.
+
+- test 539: use datacheck mode text for ASCII-mode LISTings
   
-  Closes #778
+  While still using datacheck mode binary for the inline reply data.
 
-- KNOWN_BUGS: --interface for ipv6 binds to unusable IP address
+- runtests.pl: check up to 5 data parts with different text modes
   
-  Closes #686 for now.
+  Move the text-mode conversion for reply/replycheck from the verify
+  section into the load section and add support for 4 more check parts.
 
-- TODO: 1.17 Add support for IRIs
+Daniel Stenberg (24 Dec 2015)
+- CURLOPT_RANGE: for HTTP servers, range support is optional
+
+Marc Hoersken (24 Dec 2015)
+- tests 1048 and 1050: use datacheck mode text for ASCII-mode LISTings
+
+- tests 706 and 707: use datacheck mode text for ASCII-mode LISTings
+
+- tests 400,403,406: use datacheck mode text for ASCII-mode LISTings
+
+- sockfilt.c: fix calculation of sleep timeout on Windows
   
-  Adding support for IRIs is a mouthful, but is probably interesting at
-  least for areas and countries where the use of such "URLs" are growing
-  popularity.
+  Not converting to double caused small timeouts to be skipped.
+
+- tests first.c: fix calculation of sleep timeout on Windows
   
-  Closes #776
+  Not converting to double caused small timeouts to be skipped.
 
-- THANKS-filter: Travis Burtrum
+- test 573: add more debug output
 
-- lib1517: checksrc compliance
+- ftplistparser.c: fix handling of file LISTings using Windows EOL
+  
+  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.
+  
+  Spotted using test 576 on Windows.
 
-- [moparisthebest brought this change]
+- test 16: fix on Linux (and Windows) by using plain ASCII characters
+  
+  Follow up on b064ff0c351bb287557228575ef4c1d079b866fb, thanks Daniel.
 
-  PolarSSL: Implement public key pinning
+- tftpd server: add Windows support by writing files in binary mode
 
-Patrick Monnerat (22 Apr 2016)
-- os400: upgrade ILE/RPG binding
+- tests 252-255: use datacheck mode text for ASCII-mode LISTings
 
-- curl.h: CURLOPT_CONNECT_TO sets a struct slist *, not a string
+- test 16: fix on Windows by converting data file from ANSI to UTF-8
 
-Daniel Stenberg (22 Apr 2016)
-- contributors.sh: make --releasenotes implied
+Daniel Stenberg (23 Dec 2015)
+- Makefile.inc: s/curl_SOURCES/CURL_FILES
   
-  It got too annoying to type =)
+  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.
+  
+  Closes #577
 
-- RELEASE-NOTES: synced with 3c1e84f5693d8093
+- [Anders Bakken brought this change]
 
-- curl: make --ftp-create-dirs retry on failure
-  
-  The underlying libcurl option used for this feature is
-  CURLOPT_FTP_CREATE_MISSING_DIRS which has the ability to retry the dir
-  creation, but it was never set to do that by the command line tool.
+  ConnectionExists: with *PIPEWAIT, wait for connections
   
-  Now it does.
+  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.
   
-  Bug: https://curl.haxx.se/mail/archive-2016-04/0021.html
-  Reported-by: John Wanghui
-  Help-by: Leif W
+  Closes #575
 
-- [Henrik Gaßmann brought this change]
+- [Anders Bakken brought this change]
 
-  winbuild: add mbedtls support
+  Add .dir-locals and set c-basic-offset to 2.
   
-  Add WITH_MBEDTLS option. Make WITH_SSL, WITH_MBEDTLS and ENABLE_WINSSL
-  options mutual exclusive.
+  This makes it easier for emacs users to automatically get the right
+  2-space indentation when they edit curl source files.
   
-  Closes #606
-
-- KNOWN_BUGS: fixed "5.6 Improper use of Autoconf cache variables"
+  c++-mode is in there as well because Emacs can't easily know if
+  something is a C or C++ header.
   
-  As of commit d9f3b365a3
+  Closes #574
 
-- [Irfan Adilovic brought this change]
+- [Johannes Schindelin brought this change]
 
-  configure: ac_cv_ -> curl_cv_ for write-only vars
+  configure: detect IPv6 support on Windows
   
-  These configure vars are modified in a curl-specific way but never
-  evaluated or loaded from cache, even though they are designated as
-  _cv_. We could either implement proper AC_CACHE_CHECKs for them, or
-  remove them completely.
+  This patch was "nicked" from the MINGW-packages project by Daniel.
   
-  Fixes #603 as ac_cv_func_gethostbyname is no longer clobbered, and
-  AC_CHECK_FUNC(gethostbyname...) will no longer spuriously succeed after
-  the first configure run with caching.
+  https://github.com/Alexpux/MINGW-packages/commit/9253d0bf58a1486e91f7efb5316e7fdb48fa4007
+  Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+
+- configure: allow static builds on mingw
   
-  `ac_cv_func_strcasecmp` is curious, see #770.
+  This patch is adopted from the MINGW-packages project. It makes it
+  possible to build curl both shared and static again.
   
-  `eval "ac_cv_func_$func=yes"` can still cause problems as it works in
-  tandem with AC_CHECK_FUNCS and then potentially modifies its result. It
-  would be best to rewrite this test to use a new CURL_CHECK_FUNCS macro,
-  which works the same as AC_CHECK_FUNCS but relies on caching the values
-  of curl_cv_func_* variables, without modifiying ac_cv_func_*.
+  URL: https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-curl
 
-- [Irfan Adilovic brought this change]
+Marc Hoersken (17 Dec 2015)
+- test 1326: fix file check since curl is outputting binary data
 
-  configure: ac_cv_ -> curl_cv_ for r/w vars
+- test 1326: fix getting stuck on Windows due to incomplete request
   
-  These configure vars are modified in a curl-specific way and modified by
-  the configure process, but are never loaded from cache, even though they
-  are designated as _cv_. We should implement proper AC_CACHE_CHECKs for
-  them eventually.
+  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.
 
-- [Irfan Adilovic brought this change]
+Daniel Stenberg (17 Dec 2015)
+- RELEASE-NOTES: command line option recount
 
-  configure: ac_cv_func_clock_gettime -> curl_...
-  
-  This variable must not be cached in its current form, as any cached
-  information will prevent the next configure run from determining the
-  correct LIBS needed for the function. Thus, rename prefix `ac_cv_` to
-  just `curl_`.
+Dan Fandrich (16 Dec 2015)
+- scripts/Makefile: build zsh script even in an out-of-tree build
 
-- [Irfan Adilovic brought this change]
+Marc Hoersken (16 Dec 2015)
+- sockfilt.c: added some debug output to select_ws
 
-  configure: ac_cv_ -> curl_cv_ for all cached vars
-  
-  This was automated by:
-  
-  sed -b -i -f <(ack -A1 AC_CACHE_CHECK | \
-                 ack -o 'ac_cv_.*?\b' | \
-                 sort -u | xargs -n1 bash -c \
-                      'echo "s/$0/curl_cv_${0#ac_cv_}/g"') \
-      $(git ls-files)
+- sockfilt.c: keep lines shorter than 80 chars
+
+- sockfilt.c: do not wait on unreliable file or pipe handle
   
-  This only changed the prefix for 16 variables actually checked with
-  AC_CACHE_CHECK.
+  The previous implementation caused issues on modern MSYS2 runtimes.
 
-- openssl: builds with OpenSSL 1.1.0-pre5
+Daniel Stenberg (16 Dec 2015)
+- cyassl: deal with lack of *get_peer_certificate
   
-  The RSA, DSA and DH structs are now opaque and require use of new APIs
+  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.
   
-  Fixes #763
-
-Steve Holme (20 Apr 2016)
-- url.c: Prefer we don't use explicit NULLs in conditions
+  Also fix the mistake in configure that checks for the wrong lib name.
   
-  Fixed commit fa5fa65a30 to not use NULLs in if condition.
+  Closes #566
 
-Daniel Stenberg (20 Apr 2016)
-- [Isaac Boukris brought this change]
+- wolfssl: handle builds without SSLv3 support
 
-  NTLM: check for NULL pointer before deferencing
+- [Tatsuhiro Tsujikawa brought this change]
+
+  http2: Support trailer fields
   
-  At ConnectionExists, both check->proxyuser and check->proxypasswd
-  could be NULL, so make sure to check first.
+  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.
   
-  Fixes #765
-
-- [Karlson2k brought this change]
-
-  tests: added test1517
+  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.
   
-  ... for checking ability to receive full HTTP response when POST request
-  is used with slow read callback function.
+  We can deliver trailer field one by one using NGHTTP2_ERR_PAUSE
+  mechanism, but current method is far more simple.
   
-  This test checks for bug #657 and verifies the work-around from
-  72d5e144fbc6.
+  Another possibility is use chunked encoding internally for HTTP/2
+  traffic.  I have not tested it, but it could add another overhead.
   
-  Closes #720
+  Closes #564
 
-- [Karlson2k brought this change]
+- RELEASE-NOTES: synced with 6c2c019654e658a
 
-  sendf.c: added ability to call recv() before send() as workaround
+Jay Satiro (15 Dec 2015)
+- x509asn1: Fix host altname verification
   
-  WinSock destroys recv() buffer if send() is failed. As result - server
-  response may be lost if server sent it while curl is still sending
-  request. This behavior noticeable on HTTP server short replies if
-  libcurl use several send() for request (usually for POST request).
-  To workaround this problem, libcurl use recv() before every send() and
-  keeps received data in intermediate buffer for further processing.
+  - In Curl_verifyhost check all altnames in the certificate.
   
-  Fixes: #657
-  Closes: #668
-
-Kamil Dudka (19 Apr 2016)
-- connect: make sure that rc is initialized in singleipconnect()
+  Prior to this change only the first altname was checked. Only the GSKit
+  SSL backend was affected by this bug.
   
-  This commit fixes a Clang warning introduced in curl-7_48_0-190-g8f72b13:
+  Bug: http://curl.haxx.se/mail/lib-2015-12/0062.html
+  Reported-by: John Kohl
+
+Daniel Stenberg (15 Dec 2015)
+- curl --expect100-timeout: added
   
-  Error: CLANG_WARNING:
-  lib/connect.c:1120:11: warning: The right operand of '==' is a garbage value
-  1118|       }
-  1119|
-  1120|->     if(-1 == rc)
-  1121|         error = SOCKERRNO;
-  1122|     }
+  This is the new command line option to set the value for the existing
+  libcurl option CURLOPT_EXPECT_100_TIMEOUT_MS
 
-Daniel Stenberg (19 Apr 2016)
-- make/checksrc: use $srcdir, not $top_srcdir
+- cyassl: fix compiler warning on type conversion
 
-- src/checksrc.whitelist: removed
+- curlver: the pending release will become 7.47.0
 
-- tool_operate: switch to inline checksrc ignore
+- [Anders Bakken brought this change]
 
-- lib/checksrc.whitelist: not needed anymore
+  setstropt: const-correctness
   
-  ... as checksrc now skips comments
+  Closes #565
 
-- vtls.h: remove a space before semicolon
-  
-  ... that the new checksrc detected
+- ROADMAP: implemented HTTP2 for HTTPS-only
 
-- darwinssl: removed commented out code
+- HTTP2.md: spell fix and remove TODO now implemented
 
-- http_chunks: removed checksrc disable
-  
-  ... since checksrc now skips comments
+- libressl: the latest openssl x509 funcs are not in libressl
 
-- imap: inlined checksrc disable instead of whitelist edit
+- 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.
 
-- checksrc: taught to skip comments
+- http: add libcurl option to allow HTTP/2 for HTTPS only
   
-  ... but output non-stripped version of the line, even if that then can
-  make the script identify the wrong position in the line at
-  times. Showing the line stripped (ie without comments) is just too
-  surprising.
+  ... and stick to 1.1 for HTTP. This is in line with what browsers do and
+  should have very little risk.
 
-- opts/Makefile.am: list all docs file one by one
+- openssl: adapt to openssl >= 1.1.0 X509 opaque structs
   
-  ... to make it easier to add lines in patches that won't just break all
-  other patches trying to add lines too.
+  Closes #491
 
-- curl_easy_setopt.3: mention CURLOPT_TCP_FASTOPEN
+- openssl: avoid BIO_reset() warnings since it returns a value
 
-- RELEASE-NOTES: synced with 03de4e4b219
+- openssl: adapt to 1.1.0+ name changes
+
+- scripts/makefile: add standard header
+
+- scripts/Makefile: fix GNUism and survive no perl
   
-  (since we just merged two major features)
+  Closes #555
+  
+  Reported-by: Thomas Klausner
 
-- [Alessandro Ghedini brought this change]
+- fix b6d5cb40d7038fe
 
-  connect: implement TCP Fast Open for Linux
+- [Tatsuhiro Tsujikawa brought this change]
+
+  http2: Fix hanging paused stream
   
-  Closes #660
+  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
 
-- [Alessandro Ghedini brought this change]
+- [Christian Stewart brought this change]
 
-  tool: add --tcp-fastopen option
+  build: fix compilation error with CURL_DISABLE_VERBOSE_STRINGS
+  
+  With curl disable verbose strings in http.c the compilation fails due to
+  the data variable being undefined later on in the function.
+  
+  Closes #558
 
-- [Alessandro Ghedini brought this change]
+Jay Satiro (7 Dec 2015)
+- [Gisle Vanem brought this change]
 
-  connect: implement TCP Fast Open for OS X
+  config-win32: Fix warning HAVE_WINSOCK2_H undefined
 
-- [Alessandro Ghedini brought this change]
+- [Gisle Vanem brought this change]
 
-  url: add CURLOPT_TCP_FASTOPEN option
+  openssl: BoringSSL doesn't have CONF_modules_free
 
-- checksrc: pass on -D so the whitelists are found correctly
+- [Gisle Vanem brought this change]
 
-- configure: remove check for libresolve
+  lwip: Fix compatibility issues with later versions
   
-  'strncasecmp' was once provided by libresolv (no trailing e) for SunOS,
-  but this check is broken and most likely adds nothing useful. Removing
-  now.
+  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).
   
-  Reported-by: Irfan Adilovic
+  Other fixes:
   
-  Discussed in #770
-
-- scripts/make: use $(EXEEXT) for executables
+  - In curl_setup.h, the problem with an old PSDK doesn't apply if lwIP is
+  used.
   
-  Reported-by: bodop
+  - In memdebug.h, the 'socket' should be undefined first due to lwIP's
+  lwip_socket() macro.
   
-  Fixes #771
+  - In curl_addrinfo.c lwIP's getaddrinfo() + freeaddrinfo() macros need
+  special handling because they were undef'ed in memdebug.h.
+  
+  - In select.c we can't use preprocessor conditionals inside select if
+  MSVC and select is a macro, as it is with lwIP.
+  
+  http://curl.haxx.se/mail/lib-2015-12/0023.html
+  http://curl.haxx.se/mail/lib-2015-12/0024.html
 
-- includes: avoid duplicate memory callback typdefs even harder
+Patrick Monnerat (7 Dec 2015)
+- os400: define CURL_VERSION_PSL in ILE/RPG binding
 
-- checksrc/makefile.am: use $top_srcdir to find source files
-  
-  ... to properly support out of source tree builds.
+Jay Satiro (7 Dec 2015)
+- [Gisle Vanem brought this change]
 
-- RELEASE-NOTES: synced with 26ec93dd6aeba8dfb5
+  version: Add flag CURL_VERSION_PSL for libpsl
 
-- opts: fix option references missing (section)
+- formdata: Check if length is too large for memory
+  
+  - 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.
+  
+  Bug: https://github.com/bagder/curl/issues/425#issuecomment-154518679
+  Reported-by: Steve Holme
 
-- [Michael Kaufmann brought this change]
+Steve Holme (3 Dec 2015)
+- tests: Corrected copy and pasted comments from commit e643c5c908
 
-  news: CURLOPT_CONNECT_TO and --connect-to
+Daniel Stenberg (3 Dec 2015)
+- curl: remove keepalive #ifdef checks done on libcurl's behalf
   
-  Makes curl connect to the given host+port instead of the host+port found
-  in the URL.
+  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.
 
-- makefile.vc6: use d suffix on debug object
+Steve Holme (2 Dec 2015)
+- test947: Corrected typo in test name
+
+- tests: Disable the OAUTHBEARER tests when using a non-default port number
   
-  To allow both release and debug builds in parallel.
+  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.
   
-  Reported-by: Rod Widdowson
+  Suggested by: Kamil Dudka
+  Bug: http://curl.haxx.se/mail/lib-2015-12/0003.html
+
+Daniel Stenberg (2 Dec 2015)
+- bump: towards next release
   
-  Fixes #769
+  for all we know now, it might be called 7.46.1
+
+Version 7.46.0 (1 Dec 2015)
+
+Daniel Stenberg (1 Dec 2015)
+- RELEASE-NOTES: updated contributor count for 7.46.0
+
+- THANKS: new contributors from the 7.46.0 release
+
+- THANKS-filter: single Tim Rühsen spelling
+
+- docs/examples: gitignore some more built examples
+
+- RELEASE-NOTES; this bug was never released
+
+- RELEASE-NOTES: synced with e55f15454efacb0
+
+- [Flavio Medeiros brought this change]
 
-Jay Satiro (12 Apr 2016)
-- http2: Use size_t type for data drain count
+  Curl_read_plain: clean up ifdefs that break statements
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
+  Closes #546
 
-- http2: Improve header parsing
-  
-  - Error if a header line is larger than supported.
+- http2: convert some verbose output into debug-only output
+
+- http2 push: add missing inits of new stream
   
-  - Warn if cumulative header line length may be larger than supported.
+  - set the correct stream_id for pushed streams
+  - init maxdownload and size properly
+
+- http2 push: set weight for new stream
   
-  - Allow spaces when parsing the path component.
+  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
   
-  - Make sure each header line ends in \r\n. This fixes an out of bounds.
+  Fixes warnings 78c25c854a added.
+
+- nonblock: fix setting non-blocking mode for Amiga
   
-  - Disallow header continuation lines until we decide what to do.
+  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!
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
+  Bug: http://curl.haxx.se/mail/lib-2015-11/0088.html
+  Reported-by: Norbert Kett
 
-- http2: Add Curl_http2_strerror for HTTP/2 error codes
+- zsh install: fix DESTDIR support
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
+  Reported-by: Mohammad AlSaleh
 
-- [Tatsuhiro Tsujikawa brought this change]
+Dan Fandrich (27 Nov 2015)
+- lib: Only define curl_dofreeaddrinfo if struct addrinfo is available
 
-  http2: Don't increment drain when one header field is received
-  
-  Sicne we write header field in temporary location, not in the memory
-  that upper layer provides, incrementing drain should not happen.
+Steve Holme (27 Nov 2015)
+- tool_paramhlp: Fixed display of URL index in password prompt for --next
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
-
-- [Tatsuhiro Tsujikawa brought this change]
+  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.
 
-  http2: Ensure that http2_handle_stream_close is called
+Daniel Stenberg (25 Nov 2015)
+- timecond: do not add if-modified-since without timecondition
   
-  This commit ensures that streams which was closed in on_stream_close
-  callback gets passed to http2_handle_stream_close.  Previously, this
-  might not happen.  To achieve this, we increment drain property to
-  forcibly call recv function for that stream.
+  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.
   
-  To more accurately check that we have no pending event before shutting
-  down HTTP/2 session, we sum up drain property into
-  http_conn.drain_total.  We only shutdown session if that value is 0.
+  Also, an unknown non-zero CURLOPT_TIMECONDITION value no longer equals
+  CURL_TIMECOND_IFMODSINCE.
   
-  With this commit, when stream was closed before reading response
-  header fields, error code CURLE_HTTP2_STREAM is returned even if
-  HTTP/2 level error is NO_ERROR.  This signals the upper layer that
-  stream was closed by error just like TCP connection close in HTTP/1.
+  Bug: http://stackoverflow.com/questions/33903982/curl-timecond-none-doesnt-work-how-to-remove-if-modified-since-header
+
+- RELEASE-NOTES: synced with 99d17a5e2ba77e58
+
+- examples/README: cut out the incomplete list
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
+  ... and add a generic explanation for them instead. Each example file
+  should contain its own description these days.
 
-- [Tatsuhiro Tsujikawa brought this change]
+- test1513: make sure the callback is only called once
 
-  http2: Process paused data first before tear down http2 session
+- [Daniel Shahaf brought this change]
+
+  build: Install zsh completion
   
-  This commit ensures that data from network are processed before HTTP/2
-  session is terminated.  This is achieved by pausing nghttp2 whenever
-  different stream than current easy handle receives data.
+  Fixes #534
+  Closes #537
+
+- done: make sure the final progress update is made
   
-  This commit also fixes the bug that sometimes processing hangs when
-  multiple HTTP/2 streams are multiplexed.
+  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.
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
-
-- [Tatsuhiro Tsujikawa brought this change]
-
-  http2: Check session closure early in http2_recv
+  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.
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
+  Reported-by: Lukas Ruzicka
+  
+  Closes #538
 
-- [Tatsuhiro Tsujikawa brought this change]
+- curl: expanded the -XHEAD warning text
+  
+  ... to also mention the specific options used.
 
-  http2: Add handling stream level error
+- Revert "cleanup: general removal of TODO (and similar) comments"
   
-  Previously, when a stream was closed with other than NGHTTP2_NO_ERROR
-  by RST_STREAM, underlying TCP connection was dropped.  This is
-  undesirable since there may be other streams multiplexed and they are
-  very much fine.  This change introduce new error code
-  CURLE_HTTP2_STREAM, which indicates stream error that only affects the
-  relevant stream, and connection should be kept open.  The existing
-  CURLE_HTTP2 means connection error in general.
+  This reverts commit 64e959ffe37c436503f9fed1ce2d6ee6ae50bd9a.
   
-  Ref: https://github.com/curl/curl/issues/659
-  Ref: https://github.com/curl/curl/pull/663
+  Feedback-by: Dan Fandrich
+  URL: http://curl.haxx.se/mail/lib-2015-11/0062.html
 
-Daniel Stenberg (11 Apr 2016)
-- http2: drain the socket better...
-  
-  ... but ignore EAGAIN if the stream has ended so that we don't end up in
-  a loop. This is a follow-up to c8ab613 in order to avoid the problem
-  d261652 was made to fix.
+- CURLOPT_HEADERFUNCTION.3: fix typo
   
-  Reported-by: Jay Satiro
-  Clues-provided-by: Tatsuhiro Tsujikawa
+  Refer to _HEADERDATA not _WRITEDATA.
   
-  Discussed in #750
+  Reported-by: Michał Piechowski
 
-- KNOWN_BUGS: added info for "Hangs with PolarSSL"
+- TODO: TCP Fast Open
 
-- KNOWN_BUGS: 1.9 HTTP/2 frames while in the connection pool kill reuse
+Steve Holme (22 Nov 2015)
+- examples: Added website parse-able descriptions to the e-mail examples
+
+- TODO: Added another 'multi-interface' idea
+
+- smb.c: Fixed compilation warnings
   
-  Closes #750
+  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
 
-- build: include scripts/ in the dist
+- schannel: Corrected copy/paste error in commit 8d17117683
 
-Steve Holme (9 Apr 2016)
-- CURLOPT_SOCKS5_GSSAPI_SERVICE: Merged with CURLOPT_PROXY_SERVICE_NAME
+- schannel: Use GetVersionEx() when VerifyVersionInfo() isn't available
   
-  As these two options provide identical functionality, the former for
-  SOCK5 proxies and the latter for HTTP proxies, merged the two options
-  together.
+  Regression from commit 7a8e861a5 as highlighted in the msys autobuilds.
+
+- examples: Fixed compilation warnings
   
-  As such CURLOPT_SOCKS5_GSSAPI_SERVICE is marked as deprecated as of
-  7.49.0.
+  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'
 
-- urldata: Use bool for socks5_gssapi_nec as it is a flag
+- Makefile.inc: Fixed test run error
   
-  This value is set to TRUE or FALSE so should be a bool and not a long.
+  test845 not present in tests/data/Makefile.inc
 
-- url: Ternary operator code style changes
+Daniel Stenberg (20 Nov 2015)
+- TODO: remove duplicated title
 
-- CODE_STYLE: Added ternary operator example to 'Space around operators'
+- TODO: added two more libcurl ideas
   
-  Following conversation on the libcurl mailing list.
+  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".
 
-- sasl: Fixed compilation errors from commit 9d89a0387
-  
-  ...when GSS-API or Windows SSPI are not used.
+Steve Holme (20 Nov 2015)
+- tests: Re-enabled tests 889 and 890 following POP3 fix
 
-- url: Corrected comments following 9d89a0387
+- pop3: Differentiate between success and continuation responses
 
-- docs: Added clarification following commit 9d89a0387
+- pop3: Added clarity on some server response codes
 
-- Makefile: Fixed echo of checksrc check
+Daniel Stenberg (20 Nov 2015)
+- [Daniel Shahaf brought this change]
 
-- checksrc: Fix issue with the autobuilds not picking up the whitelist
+  build: Fix theoretical infinite loops
+  
+  Add error-checking to 'cd' in a few cases where omitting the checks
+  might result in an infinite loop.
+  
+  Closes #535
 
-- checksrc: Added missing vauth and vtls directories
+Patrick Monnerat (19 Nov 2015)
+- curl.h: s/#defien/#define/
 
-- ftp/imap/pop3/smtp: Allow the service name to be overridden
-  
-  Allow the service name to be overridden for DIGIST-MD5 and Kerberos 5
-  authentication in FTP, IMAP, POP3 and SMTP.
+- os400: synchronize ILE/RPG header file
 
-- http_negotiate: Calculate service name and proxy service name locally
-  
-  Calculate the service name and proxy service names locally, rather than
-  in url.c which will allow for us to support overriding the service name
-  for other protocols such as FTP, IMAP, POP3 and SMTP.
+- os400: Provide options for libssh2 use in compile scripts. Adjust README.
 
-- ROADMAP: Updated following the move of the authentication code
+Daniel Stenberg (19 Nov 2015)
+- [danielsh@apache.org brought this change]
 
-Patrick Monnerat (8 Apr 2016)
-- KNOWN_BUGS: openldap hangs. TODO: binary SASL.
+  zsh completion: Preserve single quotes in output
+  
+  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
 
-Daniel Stenberg (8 Apr 2016)
-- KNOWN_BUGS: 5.6 Improper use of Autoconf cache variables
+Jay Satiro (18 Nov 2015)
+- [MaxGiting brought this change]
+
+  FAQ: Grammar changes
   
-  Closes #603
+  Closes https://github.com/bagder/curl/pull/533
 
-- KNOWN_BUGS: 11.2 error buffer not set...
+Daniel Stenberg (17 Nov 2015)
+- http2: http_done: don't free already-freed push headers
   
-  Closes #544
+  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.
+  
+  Reported-by: Davey Shafik
 
-- KNOWN_BUGS: 11.1 Curl leaks .onion hostnames in DNS
+- [Anders Bakken brought this change]
+
+  getconnectinfo: Don't call recv(2) if socket == -1
   
-  Closes #543
+  Closes #528
 
-- KNOWN_BUGS: 1.8 DNS timing is wrong for HTTP redirects
+- CURLMOPT_PUSHFUNCTION.3: *_byname() returns only the first header
   
-  Closes #522
+  ... if there are more than one using the same name
 
-- TODO: HTTP/2 "prior knowledge" is implemented!
+- http2: minor comment typo
 
-- [Damien Vielpeau brought this change]
+- sasl; fix checksrc warnings
 
-  mbedtls: fix MBEDTLS_DEBUG builds
+Steve Holme (15 Nov 2015)
+- RELEASE-NOTES: Adjusted for the recent OAuth 2.0 activity
 
-- mbedtls: implement and provide *_data_pending()
+- tests: Disabled 889 and 890 until we support POP3 continuation responses
   
-  ... as otherwise we might get stuck thinking there's no more data to
-  handle.
+  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:
   
-  Reported-by: Damien Vielpeau
+  + something else from the server
+  +OK final response
   
-  Fixes #737
+  Disabled these tests until such a time we can tell the responses apart.
 
-- mbedtls: follow-up for the previous commit
+- tests: Corrected typos from commit ba4d8f7eba
 
-- mbedtls.c: name space pollution fix, Use 'Curl_'
+- tests: Added OAUTHBEARER failure response tests
 
-- mbedtls.c: changed private prefix to mbed_
+- oauth2: Support OAUTHBEARER failures sent as continuation responses
   
-  mbedtls_ is the prefix used by the mbedTLS library itself so we should
-  avoid using that for our private functions.
+  According to RFC7628 a failure message may be sent by the server in a
+  base64 encoded JSON string as a continuation response.
+  
+  Currently only implemented for OAUTHBEARER and not XAUTH2.
 
-- mbedtls.h: fix compiler warnings
+Daniel Stenberg (15 Nov 2015)
+- RELEASE-NOTES: synced with 808a17ee675
 
-- Revert "winbuild: trying to set some files eol=crlf for git"
+Steve Holme (14 Nov 2015)
+- tests: Renamed existing OAuth 2.0 (XOAUTH) tests
+
+- tests: Added OAuth 2.0 (OAUTHBEARER) tests
+
+- oauth2: Added support for OAUTHBEARER SASL mechanism to IMAP, POP3 and SNMP
   
-  This reverts commit 9c08b4f1e7eced5a4d3782a3e0daa484c9d77d21.
+  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.
+
+Daniel Stenberg (13 Nov 2015)
+- RELEASE-NOTES: recounted curl_easy_setopt() options
+
+- typecheck-gcc.h: add missing slist-using options
   
-  Didn't help. Caused problems.
+  CURLOPT_RESOLVE and CURLOPT_PROXYHEADER were missing
   
-  Fixes #756
+  Also sorted the list.
 
-- curl.1: use example.com more
+- typecheck-gcc.h: added CURLOPT_CLOSESOCKETDATA
   
-  Make (most) example snippets use the example.com domain instead of the
-  random ones picked and used before. Some of those were probably
-  legitimate sites and some not. example.com is designed for this purpose.
+  ... and sorted curl_is_cb_data_option alphabetically
 
-- [Michael Kaufmann brought this change]
+Jay Satiro (13 Nov 2015)
+- [Sebastian Pohlschmidt brought this change]
 
-  HTTP2: Add a space character after the status code
+  openssl: Free modules on cleanup
   
-  The space character after the status code is mandatory, even if the
-  reason phrase is empty (see RFC 7230 section 3.1.2)
+  Curl_ossl_init calls OPENSSL_load_builtin_modules() but
+  Curl_ossl_cleanup doesn't make a call to free these modules.
   
-  Closes #755
+  Bug: https://github.com/bagder/curl/issues/526
 
-- [Viktor Szakats brought this change]
-
-  URLs: change http to https in many places
+Steve Holme (13 Nov 2015)
+- symbols-in-versions: Added new CURLOPTTYPE_STRINGPOINT alias
   
-  Closes #754
+  ...following commit aba281e762 to fix test 1119.
 
-- winbuild: trying to set some files eol=crlf for git
+Daniel Stenberg (13 Nov 2015)
+- curl: mark two more options strings for --libcurl output
+
+- typecheck-gcc.h: add some missing string types
   
-  Thinking it might help to apply patches etc with git.
+  Also sorted that list alphabetically
 
-- [Theodore Dubois brought this change]
+- curl.h: introducing the STRINGPOINT alias
+  
+  As an alias for OBJECTPOINT. Provided to allow us to grep for all string
+  options easier.
 
-  curl.1: change example for -F
+- cleanup: general removal of TODO (and similar) comments
   
-  It's a bad idea to send your passwords anywhere, especially over HTTP.
-  Modified example to send a picture instead.
+  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
+
+- openssl: all supported versions have X509_STORE_set_flags
   
-  Fixes #752
+  Simplify by removing #ifdefs and macros
 
-- KNOWN_BUGS: reorganized and cleaned up
+- openssl: remove 0.9.3 check
+
+- openssl: remove #ifdefs for < 0.9.5 support
   
-  Now sorted into categories and organized in the same style we do the
-  TODO document. It will make each issue linked properly on the
-  https://curl.haxx.se/docs/knownbugs.html web page.
+  We only support >= 0.9.7
+
+- lib/vtls/openssl: remove unused traces of yassl ifdefs
+
+Dan Fandrich (12 Nov 2015)
+- [dfandrich brought this change]
+
+  unit1603: Demote hash mismatch failure to a warning
   
-  The sections should make it easier to find issues and issues related to
-  areas of the reader's specific interest.
+  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.
 
-Jay Satiro (6 Apr 2016)
-- KNOWN_BUGS: #95 curl in Windows can't handle Unicode arguments
+- [dfandrich brought this change]
 
-Steve Holme (6 Apr 2016)
-- KNOWN_BUGS: Use https://curl.haxx.se URL for github based issues
+  unit1603: Added unit tests for hash functions
 
-- CHECKSRC.md: Corrected some typos
+- [dfandrich brought this change]
 
-- RELEASE-NOTES: Corrected last updated
-  
-  Included a summary of the checksrc.bat updates and combined two krb5
-  changes as they should have been implemented at the same time.
+  unit1602: Fixed failure in torture test
 
-- vauth: Corrected a number of typos in comments
+Steve Holme (12 Nov 2015)
+- sasl: Re-introduced XOAUTH2 in the default enabled authentication mechanism
   
-  Reported-by: Michael Osipov
+  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.
+  
+  Note: OAuth 2.0 will only be used when the bearer is specified.
 
-Jay Satiro (5 Apr 2016)
-- KNOWN_BUGS: #94 IMAP custom requests use the LIST handler
+- [Stefan Bühler brought this change]
+
+  sasl_sspi: fix identity memory leak in digest authentication
+
+- [Stefan Bühler brought this change]
+
+  sasl_sspi: fixed unicode build for digest authentication
   
-  Bug: https://github.com/curl/curl/issues/536
-  Reported-by: eXeC64@users.noreply.github.com
+  Closes #525
 
-Daniel Stenberg (5 Apr 2016)
-- KNOWN_BUGS: remove 68, 70 and 72.
+- oauth2: Re-factored OAuth 2.0 state variable
+
+- sasl: Don't choose OAuth 2.0 if mechanism not advertised
   
-  Due to their age (we don't fully know if they actually remain) and lack
-  of detail - very few people will bother to find out what they're about
-  or work on them. If people truly still suffer from any of these, I
-  assume they will be reported again and then we'll deal with them.
+  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 (12 Nov 2015)
+- runtests: more compact "System characteristics" output
   
-  72. "Pausing pipeline problems."
-    https://curl.haxx.se/mail/lib-2009-07/0214.html
+  - no point in repeating curl features that is already listed as features
+    from the curl -V output
   
-  70. Problem re-using easy handle after call to curl_multi_remove_handle
-    https://curl.haxx.se/mail/lib-2009-07/0249.html
+  - remove the port numbers/unix domain path from the output unless
+    verbose is used, as that is rarely interesting to users.
+
+- runtests: rename conditional curl-features to $has_[name]
+
+Steve Holme (11 Nov 2015)
+- oauth2: Introduced support for host and port details
   
-  68. "More questions about ares behavior".
-    https://curl.haxx.se/mail/lib-2009-08/0012.html
+  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.
 
-- KNOWN_BUGS: remove 92 and 88, fixed
+- curl_setup.h: Removed duplicate CURL_DISABLE_RTSP when HTTP_ONLY defined
 
-- http2: fix connection reuse when PING comes after last DATA
+- cmake: Add missing feature macros in config header (Part 2)
   
-  It turns out the google GFE HTTP/2 servers send a PING frame immediately
-  after a stream ends and its last DATA has been received by curl. So if
-  we don't drain that from the socket, it makes the socket readable in
-  subsequent checks and libcurl then (wrongly) assumes the connection is
-  dead when trying to reuse the connection.
+  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
   
-  Reported-by: Joonas Kuorilehto
+  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.
   
-  Discussed in #750
+  Closes #523
 
-- multi: remove trailing space in debug output
+- [Douglas Creager brought this change]
 
-- RELEASE-NOTES: synced with 86e97b642fb
+  BoringSSL: Work with stricter BIO_get_mem_data()
+  
+  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
 
-- CHECKSRC.md: mention cmdline options, fix the bullet list
+- http2: rectify the http2 version #if check
+  
+  We need 1.0.0 or later. Also verified by configure.
 
-- docs/CHECKSRC.md: initial version
+Steve Holme (9 Nov 2015)
+- oauth2: Don't use XAUTH2 in OAuth 2.0 function name
 
-Steve Holme (3 Apr 2016)
-- checksrc.bat: Added support for the examples
+- oauth2: Don't use XOAUTH2 in OAuth 2.0 variables
 
-Daniel Stenberg (3 Apr 2016)
-- lib/src: fix the checksrc invoke
+- oauth2: Use OAuth 2.0 rather than XOAUTH2 in comments
   
-  ... now works correctly when invoke from the root makefile
+  When referring to OAuth 2.0 we should use the official name rather the
+  SASL mechanism name.
diff --git a/CMake/CurlSymbolHiding.cmake b/CMake/CurlSymbolHiding.cmake
deleted file mode 100644 (file)
index 9f7d296..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-include(CheckCSourceCompiles)
-
-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(CURL_HIDDEN_SYMBOLS)
-    set(SUPPORTS_SYMBOL_HIDING FALSE)
-
-    if(CMAKE_C_COMPILER_ID MATCHES "Clang")
-        set(SUPPORTS_SYMBOL_HIDING TRUE)
-        set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))")
-        set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
-    elseif(CMAKE_COMPILER_IS_GNUCC)
-        if(NOT CMAKE_VERSION VERSION_LESS 2.8.10)
-            set(GCC_VERSION ${CMAKE_C_COMPILER_VERSION})
-        else()
-            execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
-                            OUTPUT_VARIABLE GCC_VERSION)
-        endif()
-        if(NOT GCC_VERSION VERSION_LESS 3.4)
-            # note: this is considered buggy prior to 4.0 but the autotools don't care, so let's ignore that fact
-            set(SUPPORTS_SYMBOL_HIDING TRUE)
-            set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))")
-            set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
-        endif()
-    elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0)
-        set(SUPPORTS_SYMBOL_HIDING TRUE)
-        set(_SYMBOL_EXTERN "__global")
-        set(_CFLAG_SYMBOLS_HIDE "-xldscope=hidden")
-    elseif(CMAKE_C_COMPILER_ID MATCHES "Intel" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.0)
-        # note: this should probably just check for version 9.1.045 but I'm not 100% sure
-        #       so let's to it the same way autotools do.
-        set(SUPPORTS_SYMBOL_HIDING TRUE)
-        set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))")
-        set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
-        check_c_source_compiles("#include <stdio.h>
-            int main (void) { printf(\"icc fvisibility bug test\"); return 0; }" _no_bug)
-        if(NOT _no_bug)
-            set(SUPPORTS_SYMBOL_HIDING FALSE)
-            set(_SYMBOL_EXTERN "")
-            set(_CFLAG_SYMBOLS_HIDE "")
-        endif()
-    elseif(MSVC)
-        set(SUPPORTS_SYMBOL_HIDING TRUE)
-    endif()
-
-    set(HIDES_CURL_PRIVATE_SYMBOLS ${SUPPORTS_SYMBOL_HIDING})
-elseif(MSVC)
-    if(NOT CMAKE_VERSION VERSION_LESS 3.7)
-        set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) #present since 3.4.3 but broken
-        set(HIDES_CURL_PRIVATE_SYMBOLS FALSE)
-    else()
-        message(WARNING "Hiding private symbols regardless CURL_HIDDEN_SYMBOLS being disabled.")
-        set(HIDES_CURL_PRIVATE_SYMBOLS TRUE)
-    endif()
-elseif()
-    set(HIDES_CURL_PRIVATE_SYMBOLS FALSE)
-endif()
-
-set(CURL_CFLAG_SYMBOLS_HIDE ${_CFLAG_SYMBOLS_HIDE})
-set(CURL_EXTERN_SYMBOL ${_SYMBOL_EXTERN})
index bc36c8e..ceff391 100644 (file)
@@ -533,19 +533,3 @@ main () {
     return 0;
 }
 #endif
-#ifdef HAVE_FSETXATTR_6
-#include <sys/xattr.h> /* header from libc, not from libattr */
-int
-main() {
-  fsetxattr(0, 0, 0, 0, 0, 0);
-  return 0;
-}
-#endif
-#ifdef HAVE_FSETXATTR_5
-#include <sys/xattr.h> /* header from libc, not from libattr */
-int
-main() {
-  fsetxattr(0, 0, 0, 0, 0);
-  return 0;
-}
-#endif
diff --git a/CMake/FindCARES.cmake b/CMake/FindCARES.cmake
deleted file mode 100644 (file)
index c4ab5f1..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# - Find c-ares
-# Find the c-ares includes and library
-# This module defines
-#  CARES_INCLUDE_DIR, where to find ares.h, etc.
-#  CARES_LIBRARIES, the libraries needed to use c-ares.
-#  CARES_FOUND, If false, do not try to use c-ares.
-# also defined, but not for general use are
-# CARES_LIBRARY, where to find the c-ares library.
-
-FIND_PATH(CARES_INCLUDE_DIR ares.h
-  /usr/local/include
-  /usr/include
-  )
-
-SET(CARES_NAMES ${CARES_NAMES} cares)
-FIND_LIBRARY(CARES_LIBRARY
-  NAMES ${CARES_NAMES}
-  PATHS /usr/lib /usr/local/lib
-  )
-
-IF (CARES_LIBRARY AND CARES_INCLUDE_DIR)
-  SET(CARES_LIBRARIES ${CARES_LIBRARY})
-  SET(CARES_FOUND "YES")
-ELSE (CARES_LIBRARY AND CARES_INCLUDE_DIR)
-  SET(CARES_FOUND "NO")
-ENDIF (CARES_LIBRARY AND CARES_INCLUDE_DIR)
-
-
-IF (CARES_FOUND)
-  IF (NOT CARES_FIND_QUIETLY)
-    MESSAGE(STATUS "Found c-ares: ${CARES_LIBRARIES}")
-  ENDIF (NOT CARES_FIND_QUIETLY)
-ELSE (CARES_FOUND)
-  IF (CARES_FIND_REQUIRED)
-    MESSAGE(FATAL_ERROR "Could not find c-ares library")
-  ENDIF (CARES_FIND_REQUIRED)
-ENDIF (CARES_FOUND)
-
-MARK_AS_ADVANCED(
-  CARES_LIBRARY
-  CARES_INCLUDE_DIR
-  )
diff --git a/CMake/FindLibSSH2.cmake b/CMake/FindLibSSH2.cmake
deleted file mode 100644 (file)
index 12a7c61..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# - Try to find the libssh2 library
-# Once done this will define
-#
-# LIBSSH2_FOUND - system has the libssh2 library
-# LIBSSH2_INCLUDE_DIR - the libssh2 include directory
-# LIBSSH2_LIBRARY - the libssh2 library name
-
-if (LIBSSH2_INCLUDE_DIR AND LIBSSH2_LIBRARY)
-  set(LibSSH2_FIND_QUIETLY TRUE)
-endif (LIBSSH2_INCLUDE_DIR AND LIBSSH2_LIBRARY)
-
-FIND_PATH(LIBSSH2_INCLUDE_DIR libssh2.h
-)
-
-FIND_LIBRARY(LIBSSH2_LIBRARY NAMES ssh2
-)
-
-if(LIBSSH2_INCLUDE_DIR)
-  file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" libssh2_version_str REGEX "^#define[\t ]+LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9][0-9][0-9][0-9][0-9].*")
-
-  string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_MAJOR "${libssh2_version_str}")
-  string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9]([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_MINOR  "${libssh2_version_str}")
-  string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9][0-9][0-9]([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_PATCH "${libssh2_version_str}")
-
-  string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_MAJOR "${LIBSSH2_VERSION_MAJOR}")
-  string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_MINOR "${LIBSSH2_VERSION_MINOR}")
-  string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_PATCH "${LIBSSH2_VERSION_PATCH}")
-
-  set(LIBSSH2_VERSION "${LIBSSH2_VERSION_MAJOR}.${LIBSSH2_VERSION_MINOR}.${LIBSSH2_VERSION_PATCH}")
-endif(LIBSSH2_INCLUDE_DIR)
-
-include(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibSSH2 DEFAULT_MSG LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY )
-
-MARK_AS_ADVANCED(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY LIBSSH2_VERSION_MAJOR LIBSSH2_VERSION_MINOR LIBSSH2_VERSION_PATCH LIBSSH2_VERSION)
diff --git a/CMake/FindNGHTTP2.cmake b/CMake/FindNGHTTP2.cmake
deleted file mode 100644 (file)
index 4e566cf..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-include(FindPackageHandleStandardArgs)
-
-find_path(NGHTTP2_INCLUDE_DIR "nghttp2/nghttp2.h")
-
-find_library(NGHTTP2_LIBRARY NAMES nghttp2)
-
-find_package_handle_standard_args(NGHTTP2
-    FOUND_VAR
-      NGHTTP2_FOUND
-    REQUIRED_VARS
-      NGHTTP2_LIBRARY
-      NGHTTP2_INCLUDE_DIR
-    FAIL_MESSAGE
-      "Could NOT find NGHTTP2"
-)
-
-set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INCLUDE_DIR} )
-set(NGHTTP2_LIBRARIES ${NGHTTP2_LIBRARY})
index 3b203c5..d599498 100644 (file)
@@ -179,20 +179,17 @@ int main(void) {
 
 
 include(CheckCSourceRuns)
-# See HAVE_POLL in CMakeLists.txt for why poll is disabled on macOS
-if(NOT APPLE)
-  set(CMAKE_REQUIRED_FLAGS)
-  if(HAVE_SYS_POLL_H)
-    set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H")
-  endif(HAVE_SYS_POLL_H)
-  check_c_source_runs("
-    #ifdef HAVE_SYS_POLL_H
-    #  include <sys/poll.h>
-    #endif
-    int main(void) {
-      return poll((void *)0, 0, 10 /*ms*/);
-    }" HAVE_POLL_FINE)
-endif()
+set(CMAKE_REQUIRED_FLAGS)
+if(HAVE_SYS_POLL_H)
+  set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H")
+endif(HAVE_SYS_POLL_H)
+check_c_source_runs("
+  #ifdef HAVE_SYS_POLL_H
+  #  include <sys/poll.h>
+  #endif
+  int main(void) {
+    return poll((void *)0, 0, 10 /*ms*/);
+  }" HAVE_POLL_FINE)
 
 set(HAVE_SIG_ATOMIC_T 1)
 set(CMAKE_REQUIRED_FLAGS)
index 17606bf..7113c7e 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2016, 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
@@ -19,7 +19,7 @@
 # KIND, either express or implied.
 #
 ###########################################################################
-# curl/libcurl CMake script
+# cURL/libcurl CMake script
 # by Tetetest and Sukender (Benoit Neil)
 
 # TODO:
@@ -72,7 +72,7 @@ set(OS "\"${CMAKE_SYSTEM_NAME}\"")
 include_directories(${PROJECT_BINARY_DIR}/include/curl)
 include_directories( ${CURL_SOURCE_DIR}/include )
 
-option(BUILD_CURL_EXE "Set to ON to build curl executable." ON)
+option(BUILD_CURL_EXE "Set to ON to build cURL executable." 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)
 if(WIN32)
@@ -119,7 +119,8 @@ if(MSVC)
   mark_as_advanced(BUILD_RELEASE_DEBUG_DIRS)
 endif()
 
-include(CurlSymbolHiding)
+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)
 
 option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
 mark_as_advanced(HTTP_ONLY)
@@ -251,7 +252,7 @@ include (CMakeDependentOption)
 
 # On windows preload settings
 if(WIN32)
-  set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_=")
+  set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_")
   include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake)
 endif(WIN32)
 
@@ -332,13 +333,6 @@ if(CMAKE_USE_OPENSSL)
   endif()
 endif()
 
-option(USE_NGHTTP2 "Use Nghttp2 library" OFF)
-if(USE_NGHTTP2)
-  find_package(NGHTTP2 REQUIRED)
-  include_directories(${NGHTTP2_INCLUDE_DIRS})
-  list(APPEND CURL_LIBS ${NGHTTP2_LIBRARIES})
-endif()
-
 if(NOT CURL_DISABLE_LDAP)
   if(WIN32)
     option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON)
@@ -449,12 +443,12 @@ if(NOT CURL_DISABLE_LDAPS)
 endif()
 
 # Check for idn
-check_library_exists_concat("idn2" idn2_lookup_ul HAVE_LIBIDN2)
+check_library_exists_concat("idn" idna_to_ascii_lz HAVE_LIBIDN)
 
 # Check for symbol dlopen (same as HAVE_LIBDL)
 check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
 
-option(CURL_ZLIB "Set to ON to enable building curl with zlib support." ON)
+option(CURL_ZLIB "Set to ON to enable building cURL with zlib support." ON)
 set(HAVE_LIBZ OFF)
 set(HAVE_ZLIB_H OFF)
 set(HAVE_ZLIB OFF)
@@ -590,8 +584,6 @@ if(NOT UNIX)
         set(CURL_LIBS ${CURL_LIBS} "crypt32")
       endif()
     endif()
-  elseif(USE_OPENSSL)
-    set(CURL_LIBS ${CURL_LIBS} "crypt32")
   endif()
 endif(NOT UNIX)
 
@@ -611,7 +603,6 @@ check_include_file_concat("sys/types.h"      HAVE_SYS_TYPES_H)
 check_include_file_concat("sys/uio.h"        HAVE_SYS_UIO_H)
 check_include_file_concat("sys/un.h"         HAVE_SYS_UN_H)
 check_include_file_concat("sys/utime.h"      HAVE_SYS_UTIME_H)
-check_include_file_concat("sys/xattr.h"      HAVE_SYS_XATTR_H)
 check_include_file_concat("alloca.h"         HAVE_ALLOCA_H)
 check_include_file_concat("arpa/inet.h"      HAVE_ARPA_INET_H)
 check_include_file_concat("arpa/tftp.h"      HAVE_ARPA_TFTP_H)
@@ -621,7 +612,7 @@ check_include_file_concat("des.h"            HAVE_DES_H)
 check_include_file_concat("err.h"            HAVE_ERR_H)
 check_include_file_concat("errno.h"          HAVE_ERRNO_H)
 check_include_file_concat("fcntl.h"          HAVE_FCNTL_H)
-check_include_file_concat("idn2.h"           HAVE_IDN2_H)
+check_include_file_concat("idn-free.h"       HAVE_IDN_FREE_H)
 check_include_file_concat("ifaddrs.h"        HAVE_IFADDRS_H)
 check_include_file_concat("io.h"             HAVE_IO_H)
 check_include_file_concat("krb.h"            HAVE_KRB_H)
@@ -651,6 +642,7 @@ check_include_file_concat("stropts.h"        HAVE_STROPTS_H)
 check_include_file_concat("termio.h"         HAVE_TERMIO_H)
 check_include_file_concat("termios.h"        HAVE_TERMIOS_H)
 check_include_file_concat("time.h"           HAVE_TIME_H)
+check_include_file_concat("tld.h"            HAVE_TLD_H)
 check_include_file_concat("unistd.h"         HAVE_UNISTD_H)
 check_include_file_concat("utime.h"          HAVE_UTIME_H)
 check_include_file_concat("x509.h"           HAVE_X509_H)
@@ -664,6 +656,9 @@ check_include_file_concat("netinet/if_ether.h" HAVE_NETINET_IF_ETHER_H)
 check_include_file_concat("stdint.h"        HAVE_STDINT_H)
 check_include_file_concat("sockio.h"        HAVE_SOCKIO_H)
 check_include_file_concat("sys/utsname.h"   HAVE_SYS_UTSNAME_H)
+check_include_file_concat("idna.h"          HAVE_IDNA_H)
+
+
 
 check_type_size(size_t  SIZEOF_SIZE_T)
 check_type_size(ssize_t  SIZEOF_SSIZE_T)
@@ -745,11 +740,7 @@ endif()
 
 check_symbol_exists(basename      "${CURL_INCLUDES}" HAVE_BASENAME)
 check_symbol_exists(socket        "${CURL_INCLUDES}" HAVE_SOCKET)
-# poll on macOS is unreliable, it first did not exist, then was broken until
-# fixed in 10.9 only to break again in 10.12.
-if(NOT APPLE)
-  check_symbol_exists(poll        "${CURL_INCLUDES}" HAVE_POLL)
-endif()
+check_symbol_exists(poll          "${CURL_INCLUDES}" HAVE_POLL)
 check_symbol_exists(select        "${CURL_INCLUDES}" HAVE_SELECT)
 check_symbol_exists(strdup        "${CURL_INCLUDES}" HAVE_STRDUP)
 check_symbol_exists(strstr        "${CURL_INCLUDES}" HAVE_STRSTR)
@@ -785,6 +776,8 @@ if(CMAKE_USE_OPENSSL)
   check_symbol_exists(RAND_status   "${CURL_INCLUDES}" HAVE_RAND_STATUS)
   check_symbol_exists(RAND_screen   "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
   check_symbol_exists(RAND_egd      "${CURL_INCLUDES}" HAVE_RAND_EGD)
+  check_symbol_exists(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}"
+    HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
   if(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
     set(USE_OPENSSL 1)
   endif(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
@@ -814,6 +807,9 @@ check_symbol_exists(pipe           "${CURL_INCLUDES}" HAVE_PIPE)
 check_symbol_exists(ftruncate      "${CURL_INCLUDES}" HAVE_FTRUNCATE)
 check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
 check_symbol_exists(getrlimit      "${CURL_INCLUDES}" HAVE_GETRLIMIT)
+check_symbol_exists(idn_free       "${CURL_INCLUDES}" HAVE_IDN_FREE)
+check_symbol_exists(idna_strerror  "${CURL_INCLUDES}" HAVE_IDNA_STRERROR)
+check_symbol_exists(tld_strerror   "${CURL_INCLUDES}" HAVE_TLD_STRERROR)
 check_symbol_exists(setlocale      "${CURL_INCLUDES}" HAVE_SETLOCALE)
 check_symbol_exists(setrlimit      "${CURL_INCLUDES}" HAVE_SETRLIMIT)
 check_symbol_exists(fcntl          "${CURL_INCLUDES}" HAVE_FCNTL)
@@ -823,13 +819,6 @@ check_symbol_exists(setsockopt     "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
 # symbol exists in win32, but function does not.
 check_function_exists(inet_pton HAVE_INET_PTON)
 
-check_symbol_exists(fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR)
-if(HAVE_FSETXATTR)
-  foreach(CURL_TEST HAVE_FSETXATTR_5 HAVE_FSETXATTR_6)
-    curl_internal_test_run(${CURL_TEST})
-  endforeach(CURL_TEST)
-endif(HAVE_FSETXATTR)
-
 # sigaction and sigsetjmp are special. Use special mechanism for
 # detecting those, but only if previous attempt failed.
 if(HAVE_SIGNAL_H)
@@ -1085,7 +1074,7 @@ _add_if("IPv6"          ENABLE_IPV6)
 _add_if("unix-sockets"  USE_UNIX_SOCKETS)
 _add_if("libz"          HAVE_LIBZ)
 _add_if("AsynchDNS"     USE_ARES OR USE_THREADS_POSIX OR USE_THREADS_WIN32)
-_add_if("IDN"           HAVE_LIBIDN2)
+_add_if("IDN"           HAVE_LIBIDN)
 _add_if("Largefile"     (CURL_SIZEOF_CURL_OFF_T GREATER 4) AND
                         ((SIZEOF_OFF_T GREATER 4) OR USE_WIN32_LARGE_FILES))
 # TODO SSP1 (WinSSL) check is missing
@@ -1153,7 +1142,9 @@ set(CURL_CA_BUNDLE          "")
 set(CURLVERSION             "${CURL_VERSION}")
 set(ENABLE_SHARED           "yes")
 if(CURL_STATICLIB)
-  set(ENABLE_STATIC         "yes")
+  # Broken: LIBCURL_LIBS below; .a lib is not built
+  message(WARNING "Static linking is broken!")
+  set(ENABLE_STATIC         "no")
 else()
   set(ENABLE_STATIC         "no")
 endif()
@@ -1162,12 +1153,9 @@ set(includedir              "\${prefix}/include")
 set(LDFLAGS                 "${CMAKE_SHARED_LINKER_FLAGS}")
 set(LIBCURL_LIBS            "")
 set(libdir                  "${CMAKE_INSTALL_PREFIX}/lib")
+# TODO CURL_LIBS also contains absolute paths which don't work with static -l...
 foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS})
-  if(_lib MATCHES ".*/.*")
-    set(LIBCURL_LIBS          "${LIBCURL_LIBS} ${_lib}")
-  else()
-    set(LIBCURL_LIBS          "${LIBCURL_LIBS} -l${_lib}")
-  endif()
+  set(LIBCURL_LIBS          "${LIBCURL_LIBS} -l${_lib}")
 endforeach()
 # "a" (Linux) or "lib" (Windows)
 string(REPLACE "." "" libext "${CMAKE_STATIC_LIBRARY_SUFFIX}")
diff --git a/COPYING b/COPYING
index 1e45a5e..a98663e 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,6 +1,6 @@
 COPYRIGHT AND PERMISSION NOTICE
 
-Copyright (c) 1996 - 2017, Daniel Stenberg, <daniel@haxx.se>, and many
+Copyright (c) 1996 - 2016, Daniel Stenberg, <daniel@haxx.se>, and many
 contributors, see the THANKS file.
 
 All rights reserved.
index 8577c8a..329e4f3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -20,6 +20,8 @@
 #
 ###########################################################################
 
+VC=vc6
+
 all:
        ./configure
        make
@@ -85,13 +87,366 @@ mingw32%:
        $(MAKE) -C lib -f Makefile.m32 CFG=$@
        $(MAKE) -C src -f Makefile.m32 CFG=$@
 
-vc:
-       cd winbuild
-       nmake /f Makefile.vc MACHINE=x86
+vc-clean: $(VC)
+       cd lib
+       nmake -f Makefile.$(VC) clean
+       cd ..\src
+       nmake -f Makefile.$(VC) clean
+
+vc-all: $(VC)
+       cd lib
+       nmake -f Makefile.$(VC) cfg=release
+       nmake -f Makefile.$(VC) cfg=release-ssl
+       nmake -f Makefile.$(VC) cfg=release-zlib
+       nmake -f Makefile.$(VC) cfg=release-ssl-zlib
+       nmake -f Makefile.$(VC) cfg=release-ssl-dll
+       nmake -f Makefile.$(VC) cfg=release-zlib-dll
+       nmake -f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
+       nmake -f Makefile.$(VC) cfg=release-dll
+       nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll
+       nmake -f Makefile.$(VC) cfg=release-dll-zlib-dll
+       nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
+       nmake -f Makefile.$(VC) cfg=debug
+       nmake -f Makefile.$(VC) cfg=debug-ssl
+       nmake -f Makefile.$(VC) cfg=debug-zlib
+       nmake -f Makefile.$(VC) cfg=debug-ssl-zlib
+       nmake -f Makefile.$(VC) cfg=debug-ssl-dll
+       nmake -f Makefile.$(VC) cfg=debug-zlib-dll
+       nmake -f Makefile.$(VC) cfg=debug-ssl-dll-zlib-dll
+       nmake -f Makefile.$(VC) cfg=debug-dll
+       nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll
+       nmake -f Makefile.$(VC) cfg=debug-dll-zlib-dll
+       nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll-zlib-dll
+
+vc: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release
+       cd ..\src
+       nmake /f Makefile.$(VC)
+
+vc-x64: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release
+
+vc-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
+
+vc-x64-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release WINDOWS_SSPI=1
+
+vc-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release USE_IDN=1
+
+vc-x64-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1
+
+vc-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release USE_IDN=1 WINDOWS_SSPI=1
+
+vc-x64-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 WINDOWS_SSPI=1
+
+vc-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-zlib
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-zlib
+
+vc-x64-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib
+
+vc-zlib-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-zlib WINDOWS_SSPI=1
+
+vc-x64-zlib-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib WINDOWS_SSPI=1
+
+vc-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1
+
+vc-x64-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1
+
+vc-zlib-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-x64-zlib-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-ssl: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl
+
+vc-x64-ssl: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl
+
+vc-ssl-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl WINDOWS_SSPI=1
+
+vc-x64-ssl-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl WINDOWS_SSPI=1
+
+vc-ssl-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1
+
+vc-x64-ssl-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1
+
+vc-ssl-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1
+
+vc-x64-ssl-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1
+
+vc-ssl-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib
+
+vc-x64-ssl-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib
+
+vc-ssl-zlib-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib WINDOWS_SSPI=1
+
+vc-x64-ssl-zlib-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib WINDOWS_SSPI=1
+
+vc-ssl-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1
+
+vc-x64-ssl-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1
+
+vc-ssl-zlib-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-x64-ssl-zlib-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-ssl-ssh2-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib
+
+vc-x64-ssl-ssh2-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib
+
+vc-ssl-ssh2-zlib-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1
+
+vc-x64-ssl-ssh2-zlib-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1
+
+vc-ssl-ssh2-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1
+
+vc-x64-ssl-ssh2-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1
+
+vc-ssl-ssh2-zlib-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-x64-ssl-ssh2-zlib-idn-sspi: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-winssl: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1
+
+vc-x64-winssl: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1
+
+vc-winssl-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1
+
+vc-x64-winssl-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1
+
+vc-winssl-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-winssl-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-winssl-zlib WINDOWS_SSPI=1
 
-vc-x64:
-       cd winbuild
-       nmake /f Makefile.vc MACHINE=x64
+vc-x64-winssl-zlib: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib WINDOWS_SSPI=1
+
+vc-winssl-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-x64-winssl-zlib-idn: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+       cd ..\src
+       nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1
+
+vc-ssl-dll: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-dll
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-dll
+
+vc-dll-ssl-dll: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
+
+vc-dll: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-dll
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-dll
+
+vc-dll-zlib-dll: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
+
+vc-dll-ssl-dll-zlib-dll: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
+
+vc-ssl-dll-zlib-dll: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
+
+vc-zlib-dll: $(VC)
+       cd lib
+       nmake /f Makefile.$(VC) cfg=release-zlib-dll
+       cd ..\src
+       nmake /f Makefile.$(VC) cfg=release-zlib-dll
 
 djgpp:
        $(MAKE) -C lib -f Makefile.dj
@@ -142,6 +497,86 @@ linux: all
 
 linux-ssl: ssl
 
+# We don't need to do anything for vc6.
+vc6:
+
+# VC7 makefiles are for use with VS.NET and VS.NET 2003
+vc7: lib/Makefile.vc7 src/Makefile.vc7
+
+lib/Makefile.vc7: lib/Makefile.vc6
+       @echo "generate $@"
+       @sed -e "s/VC6/VC7/g" lib/Makefile.vc6 > lib/Makefile.vc7
+
+src/Makefile.vc7: src/Makefile.vc6
+       @echo "generate $@"
+       @sed -e "s/VC6/VC7/g" src/Makefile.vc6 > src/Makefile.vc7
+
+# VC8 makefiles are for use with VS2005
+vc8: lib/Makefile.vc8 src/Makefile.vc8
+
+lib/Makefile.vc8: 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 bufferoverflowu.lib/g" -e "s/VC6/VC8/g" lib/Makefile.vc6 > lib/Makefile.vc8
+
+src/Makefile.vc8: 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 bufferoverflowu.lib/g" -e "s/VC6/VC8/g" src/Makefile.vc6 > src/Makefile.vc8
+
+# VC9 makefiles are for use with VS2008
+vc9: lib/Makefile.vc9 src/Makefile.vc9
+
+lib/Makefile.vc9: 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/vc9/g" -e "s/VC6/VC9/g" lib/Makefile.vc6 > lib/Makefile.vc9
+
+src/Makefile.vc9: 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/vc9/g" -e "s/VC6/VC9/g" src/Makefile.vc6 > src/Makefile.vc9
+
+# VC10 makefiles are for use with VS2010
+vc10: lib/Makefile.vc10 src/Makefile.vc10
+
+lib/Makefile.vc10: 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/vc10/g" -e "s/VC6/VC10/g" lib/Makefile.vc6 > lib/Makefile.vc10
+
+src/Makefile.vc10: 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/vc10/g" -e "s/VC6/VC10/g" src/Makefile.vc6 > src/Makefile.vc10
+
+# VC11 makefiles are for use with VS2012
+vc11: lib/Makefile.vc11 src/Makefile.vc11
+
+lib/Makefile.vc11: 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/vc11/g" -e "s/VC6/VC11/g" lib/Makefile.vc6 > lib/Makefile.vc11
+
+src/Makefile.vc11: 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/vc11/g" -e "s/VC6/VC11/g" src/Makefile.vc6 > src/Makefile.vc11
+
+# VC12 makefiles are for use with VS2013
+vc12: lib/Makefile.vc12 src/Makefile.vc12
+
+lib/Makefile.vc12: 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/vc12/g" -e "s/VC6/VC12/g" lib/Makefile.vc6 > lib/Makefile.vc12
+
+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 33f900a..2986acf 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -24,13 +24,10 @@ AUTOMAKE_OPTIONS = foreign
 
 ACLOCAL_AMFLAGS = -I m4
 
-CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in      \
- CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake   \
- CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake       \
- include/curl/curlbuild.h.cmake CMake/Macros.cmake              \
- CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake             \
- CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake
-
+CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in     \
+ CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake  \
+ CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake      \
+ include/curl/curlbuild.h.cmake CMake/Macros.cmake
 
 VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
 VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
@@ -136,7 +133,8 @@ VC_DIST = projects/README                           \
  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/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 scripts/zsh.pl \
index 9d8c066..f86dfc4 100644 (file)
@@ -21,7 +21,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -495,12 +495,10 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 ACLOCAL_AMFLAGS = -I m4
-CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in      \
- CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake   \
- CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake       \
- include/curl/curlbuild.h.cmake CMake/Macros.cmake              \
- CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake             \
- CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake
+CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in     \
+ CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake  \
+ CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake      \
+ include/curl/curlbuild.h.cmake CMake/Macros.cmake
 
 VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
 VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
@@ -597,7 +595,8 @@ VC_DIST = projects/README                           \
  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/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 scripts/zsh.pl \
@@ -634,31 +633,31 @@ LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.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       \
   ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
-  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
+  getinfo.c transfer.c strequal.c easy.c security.c curl_fnmatch.c      \
   fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
   strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c  \
   http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c    \
   strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c         \
   inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
-  ssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c            \
+  ssh.c rawstr.c curl_addrinfo.c socks_gssapi.c socks_sspi.c            \
   curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
   pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
   openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
   http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
-  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
+  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c               \
   curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c          \
   x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.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         \
   speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
-  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
+  strequal.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h         \
   wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
   hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
   http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
   inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
   easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
-  socks.h ssh.h curl_base64.h curl_addrinfo.h curl_sspi.h      \
+  socks.h ssh.h curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h      \
   slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
   rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
   curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
@@ -666,7 +665,7 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.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 curl_des.h           \
-  curl_printf.h system_win32.h rand.h
+  curl_printf.h system_win32.h
 
 LIB_RCFILES = libcurl.rc
 CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES)
@@ -676,12 +675,14 @@ HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES)
 # the official API, but we re-use the code here to avoid duplication.
 CURLX_CFILES = \
        ../lib/strtoofft.c \
+       ../lib/rawstr.c \
        ../lib/nonblock.c \
        ../lib/warnless.c
 
 CURLX_HFILES = \
        ../lib/curl_setup.h \
        ../lib/strtoofft.h \
+       ../lib/rawstr.h \
        ../lib/nonblock.h \
        ../lib/warnless.h
 
index 27ca118..2973b75 100644 (file)
@@ -1,20 +1,61 @@
-Curl and libcurl 7.53.1
+Curl and libcurl 7.50.2
 
- Public curl releases:         164
- Command line options:         205
- curl_easy_setopt() options:   244
+ Public curl releases:         158
+ Command line options:         185
+ curl_easy_setopt() options:   224
  Public functions in libcurl:  61
- Contributors:                 1507
+ Contributors:                 1441
 
 This release includes the following bugfixes:
 
- o cyassl: fix typo
- o url: Improve CURLOPT_PROXY_CAPATH error handling [1]
- o urldata: include curl_sspi.h when Windows SSPI is enabled [2]
- o formdata: check for EOF when reading from stdin [3]
- o tests: Set CHARSET & LANG to UTF-8 in 1035, 2046 and 2047 [4]
- o url: Default the proxy CA bundle location to CURL_CA_BUNDLE [5]
- o rand: added missing #ifdef HAVE_FCNTL_H around fcntl.h header [6]
+ o mbedtls: Added support for NTLM
+ o SSH: fixed SFTP/SCP transfer problems [1]
+ o multi: make Curl_expire() work with 0 ms timeouts
+ o mk-ca-bundle.pl: -m keeps ca cert meta data in output [2]
+ o TFTP: Fix upload problem with piped input [3]
+ o CURLOPT_TCP_NODELAY: now enabled by default [4]
+ o mbedtls: set verbose TLS debug when MBEDTLS_DEBUG is defined [5]
+ o http2: always wait for readable socket
+ o cmake: Enable win32 large file support by default
+ o cmake: Enable win32 threaded resolver by default
+ o winbuild: Avoid setting redundant CFLAGS to compile commands [6]
+ o curl.h: make CURL_NO_OLDIES define CURL_STRICTER
+ o docs: make more markdown files use .md extension
+ o docs: CONTRIBUTE and LICENSE-MIXING were converted to markdown
+ o winbuild: Allow changing C compiler via environment variable CC [7]
+ o rtsp: accept any RTSP session id [8]
+ o HTTP: retry failed HEAD requests on reused connections too
+ o configure: add zlib search with pkg-config [9]
+ o openssl: accept subjectAltName iPAddress if no dNSName match [10]
+ o MANUAL: Remove invalid link to LDAP documentation [11]
+ o socks: improved connection procedure [12]
+ o proxy: reject attempts to use unsupported proxy schemes
+ o proxy: bring back use of "Proxy-Connection:" [13]
+ o curl: allow "pkcs11:" prefix for client certificates [14]
+ o spnego_sspi: fix memory leak in case *outlen is zero [15]
+ o SOCKS: improve verbose output of SOCKS5 connection sequence
+ o SOCKS: display the hostname returned by the SOCKS5 proxy server
+ o http/sasl: Query authentication mechanism supported by SSPI before using
+ o sasl: Don't use GSSAPI authentication when domain name not specified [16]
+ o win: Basic support for Universal Windows Platform apps [17]
+ o nss: fix incorrect use of a previously loaded certificate from file
+ o nss: work around race condition in PK11_FindSlotByName() [18]
+ o ftp: fix wrong poll on the secondary socket [19]
+ o openssl: build warning-free with 1.1.0 (again)
+ o HTTP: stop parsing headers when switching to unknown protocols [20]
+ o test219: Add http as a required feature
+ o TLS: random file/egd doesn't have to match for conn reuse
+ o schannel: Disable ALPN for Wine since it is causing problems [21]
+ o http2: make sure stream errors don't needlessly close the connection [22]
+ o http2: return CURLE_HTTP2_STREAM for unexpected stream close [23]
+ o darwinssl: --cainfo is intended for backward compatibility only
+ o speed caps: not based on average speeds anymore [24]
+ o configure: make the cpp -P detection not clobber CPPFLAGS [25]
+ o http2: use named define instead of magic constant in read callback
+ o http2: skip the content-length parsing, detect unknown size
+ o http2: return EOF when done uploading without known size [26]
+ o darwinssl: test for errSecSuccess in PKCS12 import rather than noErr [27]
+ o openssl: fix CURLINFO_SSL_VERIFYRESULT [28]
 
 This release includes the following known bugs:
 
@@ -23,17 +64,45 @@ This release includes the following known bugs:
 This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
-  Dan Fandrich, Daniel Stenberg, İsmail Dönmez, jveazey on github, Ray Satiro,
-  Sergii Pylypenko, Shachaf Ben-Kiki, Viktor Szakáts,
-  (8 contributors)
+  Ales Novak, Bill Nagel, Christian Fillion, Craig Davison, Dambaev Alexander,
+  Dan Donahue, Dan Fandrich, Daniel Gustafsson, Daniel Stenberg,
+  David Kalnischkies, David Woodhouse, Erik Janssen, Gaurav Malhotra,
+  János Fekete, Kamil Dudka, Marcel Raad, Marc Hörsken, Marco Deckel,
+  Mark Hamilton, Mark Nottingham, Michael Kaufmann, Miroslav Franc,
+  Nick Zitzmann, Olivier Brunel, Peter Wang, Ray Satiro, Ronnie Mose,
+  Sergei Nikulov, Serj Kalichev, Simon Warta, Steve Holme, Tatsuhiro Tsujikawa,
+  Thomas Glanzmann, Tim Rühsen, wmsch on github,
+  (35 contributors)
 
         Thanks! (and sorry if I forgot to mention someone)
 
 References to bug reports and discussions on issues:
 
- [1] = https://curl.haxx.se/bug/?i=1257
- [2] = https://curl.haxx.se/bug/?i=1276
- [3] = https://curl.haxx.se/bug/?i=1281
- [4] = https://curl.haxx.se/bug/?i=1277
- [5] = https://curl.haxx.se/bug/?i=1257
- [6] = https://curl.haxx.se/bug/?i=1285
+ [1] = https://curl.haxx.se/mail/lib-2016-07/0057.html
+ [2] = https://curl.haxx.se/bug/?i=937
+ [3] = https://curl.haxx.se/bug/?i=857
+ [4] = https://curl.haxx.se/mail/lib-2016-06/0143.html
+ [5] = https://curl.haxx.se/mail/lib-2016-08/0017.html
+ [6] = https://curl.haxx.se/bug/?i=949
+ [7] = https://curl.haxx.se/bug/?i=952
+ [8] = https://curl.haxx.se/mail/lib-2016-08/0076.html
+ [9] = https://curl.haxx.se/bug/?i=956
+ [10] = https://curl.haxx.se/bug/?i=959
+ [11] = https://curl.haxx.se/bug/?i=962
+ [12] = https://curl.haxx.se/bug/?i=944
+ [13] = https://curl.haxx.se/bug/?i=954
+ [14] = https://curl.haxx.se/mail/lib-2016-08/0122.html
+ [15] = https://curl.haxx.se/bug/?i=970
+ [16] = https://curl.haxx.se/bug/?i=718
+ [17] = https://curl.haxx.se/bug/?i=820
+ [18] = https://bugzilla.mozilla.org/1297397
+ [19] = https://curl.haxx.se/bug/?i=978
+ [20] = https://curl.haxx.se/bug/?i=899
+ [21] = https://curl.haxx.se/bug/?i=983
+ [22] = https://curl.haxx.se/bug/?i=941
+ [23] = https://curl.haxx.se/bug/?i=986
+ [24] = https://curl.haxx.se/bug/?i=971
+ [25] = https://curl.haxx.se/bug/?i=958
+ [26] = https://curl.haxx.se/bug/?i=982
+ [27] = https://curl.haxx.se/bug/?i=993
+ [28] = https://curl.haxx.se/bug/?i=995
index 2abae8d..312efcb 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2016, 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
@@ -1856,7 +1856,7 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
   AC_MSG_CHECKING([for monotonic clock_gettime])
   #
-  if test "x$dontwant_rt" = "xno" ; then
+  if test "x$dontwant_rt" == "xno" ; then
     AC_COMPILE_IFELSE([
       AC_LANG_PROGRAM([[
 #ifdef HAVE_SYS_TYPES_H
@@ -3199,47 +3199,3 @@ TEST EINVAL TEST
     CPPPFLAG=""
   fi
 ])
-
-
-dnl CURL_MAC_CFLAGS
-dnl
-dnl Check if -mmacosx-version-min, -miphoneos-version-min or any
-dnl similar are set manually, otherwise do. And set
-dnl -Werror=partial-availability.
-dnl
-
-AC_DEFUN([CURL_MAC_CFLAGS], [
-
-  tst_cflags="no"
-  case $host_os in
-    darwin*)
-      tst_cflags="yes"
-      ;;
-  esac
-
-  AC_MSG_CHECKING([for good-to-use Mac CFLAGS])
-  AC_MSG_RESULT([$tst_cflags]);
-
-  if test "$tst_cflags" = "yes"; then
-    AC_MSG_CHECKING([for *version-min in CFLAGS])
-    min=""
-    if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then
-      min="-mmacosx-version-min=10.8"
-      CFLAGS="$CFLAGS $min"
-    fi
-    if test -z "$min"; then
-      AC_MSG_RESULT([set by user])
-    else
-      AC_MSG_RESULT([$min set])
-    fi
-
-    old_CFLAGS=$CFLAGS
-    CFLAGS="$CFLAGS -Werror=partial-availability"
-    AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
-      [AC_MSG_RESULT([yes])],
-      [AC_MSG_RESULT([no])
-      CFLAGS=$old_CFLAGS])
-  fi
-
-])
index 2e9ad7f..0967f2a 100755 (executable)
@@ -2,7 +2,7 @@
 # Attempt to guess a canonical system name.
 #   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2016-10-02'
+timestamp='2016-04-02'
 
 # 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
@@ -186,12 +186,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
            *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
        esac
        # The Operating System including object format, if it has switched
-       # to ELF recently (or will in the future) and ABI.
+       # to ELF recently, or will in the future.
        case "${UNAME_MACHINE_ARCH}" in
-           earm*)
-               os=netbsdelf
-               ;;
-           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__
@@ -1000,9 +997,6 @@ EOF
        eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
        test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
        ;;
-    mips64el:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
     openrisc*:Linux:*:*)
        echo or1k-unknown-linux-${LIBC}
        exit ;;
@@ -1035,9 +1029,6 @@ EOF
     ppcle:Linux:*:*)
        echo powerpcle-unknown-linux-${LIBC}
        exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
        echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
        exit ;;
@@ -1417,17 +1408,18 @@ esac
 cat >&2 <<EOF
 $0: unable to guess system type
 
-This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite
-config.guess and config.sub with the latest versions from:
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
 
   http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
   http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If $0 has already been updated, send the following data and any
-information you think might be pertinent to config-patches@gnu.org to
-provide the necessary information to handle your system.
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
 
 config.guess timestamp = $timestamp
 
index dd2ca93..8d39c4b 100755 (executable)
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2016-11-04'
+timestamp='2016-03-30'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -117,7 +117,7 @@ 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* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | cloudabi*-eabi* | \
+  kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -301,7 +301,6 @@ case $basic_machine in
        | open8 | or1k | or1knd | or32 \
        | pdp10 | pdp11 | pj | pjl \
        | powerpc | powerpc64 | powerpc64le | powerpcle \
-       | pru \
        | pyramid \
        | riscv32 | riscv64 \
        | rl78 | rx \
@@ -429,7 +428,6 @@ case $basic_machine in
        | orion-* \
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
        | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-       | pru-* \
        | pyramid-* \
        | riscv32-* | riscv64-* \
        | rl78-* | romp-* | rs6000-* | rx-* \
@@ -645,14 +643,6 @@ case $basic_machine in
                basic_machine=m68k-bull
                os=-sysv3
                ;;
-       e500v[12])
-               basic_machine=powerpc-unknown
-               os=$os"spe"
-               ;;
-       e500v[12]-*)
-               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=$os"spe"
-               ;;
        ebmon29k)
                basic_machine=a29k-amd
                os=-ebmon
@@ -1032,7 +1022,7 @@ case $basic_machine in
        ppc-* | ppcbe-*)
                basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
-       ppcle | powerpclittle)
+       ppcle | powerpclittle | ppc-le | powerpc-little)
                basic_machine=powerpcle-unknown
                ;;
        ppcle-* | powerpclittle-*)
@@ -1042,7 +1032,7 @@ case $basic_machine in
                ;;
        ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
-       ppc64le | powerpc64little)
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
                basic_machine=powerpc64le-unknown
                ;;
        ppc64le-* | powerpc64little-*)
@@ -1399,7 +1389,7 @@ case $os in
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
              | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+             | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
              | -linux-newlib* | -linux-musl* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
@@ -1409,7 +1399,7 @@ case $os in
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
              | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
              | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-             | -onefs* | -tirtos* | -phoenix* | -fuchsia*)
+             | -onefs* | -tirtos*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
index b7030ff..721af36 100755 (executable)
--- a/configure
+++ b/configure
@@ -1168,11 +1168,10 @@ with_libssh2
 with_librtmp
 enable_versioned_symbols
 with_winidn
-with_libidn2
+with_libidn
 with_nghttp2
 with_zsh_functions_dir
 enable_threaded_resolver
-enable_pthreads
 enable_verbose
 enable_sspi
 enable_crypto_auth
@@ -1900,8 +1899,6 @@ Optional Features:
                           Enable threaded resolver
   --disable-threaded-resolver
                           Disable threaded resolver
-  --enable-pthreads       Enable POSIX threads (default for threaded resolver)
-  --disable-pthreads      Disable POSIX threads
   --enable-verbose        Enable verbose strings
   --disable-verbose       Disable verbose strings
   --enable-sspi           Enable SSPI
@@ -1943,8 +1940,8 @@ Optional Packages:
   --with-gssapi=DIR       Where to look for GSS-API
   --with-winssl           enable Windows native SSL/TLS
   --without-winssl        disable Windows native SSL/TLS
-  --with-darwinssl        enable Apple OS native SSL/TLS
-  --without-darwinssl     disable Apple OS native SSL/TLS
+  --with-darwinssl        enable iOS/Mac OS X native SSL/TLS
+  --without-darwinssl     disable iOS/Mac OS X native SSL/TLS
   --with-ssl=PATH         Where to look for OpenSSL, PATH points to the SSL
                           installation (default: /usr/local/ssl); when
                           possible, set the PKG_CONFIG_PATH environment
@@ -1999,8 +1996,8 @@ Optional Packages:
   --without-librtmp       disable LIBRTMP
   --with-winidn=PATH      enable Windows native IDN
   --without-winidn        disable Windows native IDN
-  --with-libidn2=PATH     Enable libidn2 usage
-  --without-libidn2       Disable libidn2 usage
+  --with-libidn=PATH      Enable libidn usage
+  --without-libidn        Disable libidn usage
   --with-nghttp2=PATH     Enable nghttp2 usage
   --without-nghttp2       Disable nghttp2 usage
   --with-zsh-functions-dir=PATH
@@ -5630,7 +5627,7 @@ VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/in
 
 
 PKGADD_PKG="HAXXcurl"
-PKGADD_NAME="curl - a client that groks URLs"
+PKGADD_NAME="cURL - a client that groks URLs"
 PKGADD_VENDOR="curl.haxx.se"
 
 
@@ -5644,7 +5641,7 @@ curl_tls_srp_msg="no      (--enable-tls-srp)"
     curl_res_msg="default (--enable-ares / --enable-threaded-resolver)"
    curl_ipv6_msg="no      (--enable-ipv6)"
 curl_unix_sockets_msg="no      (--enable-unix-sockets)"
-    curl_idn_msg="no      (--with-{libidn2,winidn})"
+    curl_idn_msg="no      (--with-{libidn,winidn})"
  curl_manual_msg="no      (--enable-manual)"
 curl_libcurl_msg="enabled (--disable-libcurl-option)"
 curl_verbose_msg="enabled (--disable-verbose)"
@@ -17257,7 +17254,7 @@ $as_echo "no" >&6; }
 ***
 *** Whatever settings are present in CFLAGS will be used for this run.
 ***
-*** If you wish to help the curl project to better support your compiler
+*** 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: https://cool.haxx.se/mailman/listinfo/curl-library/
 ***
@@ -19207,63 +19204,6 @@ $as_echo "no" >&6; }
   esac
 
 
-
-
-  tst_cflags="no"
-  case $host_os in
-    darwin*)
-      tst_cflags="yes"
-      ;;
-  esac
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good-to-use Mac CFLAGS" >&5
-$as_echo_n "checking for good-to-use Mac CFLAGS... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tst_cflags" >&5
-$as_echo "$tst_cflags" >&6; };
-
-  if test "$tst_cflags" = "yes"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for *version-min in CFLAGS" >&5
-$as_echo_n "checking for *version-min in CFLAGS... " >&6; }
-    min=""
-    if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then
-      min="-mmacosx-version-min=10.8"
-      CFLAGS="$CFLAGS $min"
-    fi
-    if test -z "$min"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: set by user" >&5
-$as_echo "set by user" >&6; }
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $min set" >&5
-$as_echo "$min set" >&6; }
-    fi
-
-    old_CFLAGS=$CFLAGS
-    CFLAGS="$CFLAGS -Werror=partial-availability"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Werror=partial-availability" >&5
-$as_echo_n "checking whether $CC accepts -Werror=partial-availability... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int main (void)
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      CFLAGS=$old_CFLAGS
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  fi
-
-
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support http" >&5
 $as_echo_n "checking whether to support http... " >&6; }
 # Check whether --enable-http was given.
@@ -20496,7 +20436,7 @@ done
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for monotonic clock_gettime" >&5
 $as_echo_n "checking for monotonic clock_gettime... " >&6; }
   #
-  if test "x$dontwant_rt" = "xno" ; then
+  if test "x$dontwant_rt" == "xno" ; then
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -22075,8 +22015,8 @@ if test "${with_darwinssl+set}" = set; then :
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Apple OS native SSL/TLS" >&5
-$as_echo_n "checking whether to enable Apple OS native SSL/TLS... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable iOS/Mac OS X native SSL/TLS" >&5
+$as_echo_n "checking whether to enable iOS/Mac OS X native SSL/TLS... " >&6; }
 if test "$curl_ssl_msg" = "$init_ssl_msg"; then
   if test "x$OPT_DARWINSSL" != "xno" &&
      test -d "/System/Library/Frameworks/Security.framework"; then
@@ -22087,7 +22027,7 @@ $as_echo "#define USE_DARWINSSL 1" >>confdefs.h
 
     USE_DARWINSSL=1
 
-    curl_ssl_msg="enabled (Apple OS-native)"
+    curl_ssl_msg="enabled (iOS/Mac OS X-native)"
     DARWINSSL_ENABLED=1
     LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security"
   else
 
 
 
-    for ac_func in RAND_egd \
+    for ac_func in RAND_status \
+                    RAND_screen \
+                    RAND_egd \
                     ENGINE_cleanup \
+                    CRYPTO_cleanup_all_ex_data \
                     SSL_get_shutdown \
                     SSLv2_client_method
 do :
@@ -23807,13 +23750,12 @@ $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 gnutls_alpn_set_protocols gnutls_ocsp_req_init
+        for ac_func in gnutls_certificate_set_x509_key_file2
 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 :
+  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 `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2 1
 _ACEOF
 
 fi
@@ -25994,7 +25936,7 @@ $as_echo "found" >&6; }
     DIR_SSH2=${PREFIX_SSH2}/lib$libsuff
   fi
 
-  LDFLAGS="$LD_SSH2 $LDFLAGS"
+  LDFLAGS="$LDFLAGS $LD_SSH2"
   CPPFLAGS="$CPPFLAGS $CPP_SSH2"
   LIBS="$LIB_SSH2 $LIBS"
 
@@ -26504,13 +26446,13 @@ $as_echo "$as_me: WARNING: Cannot find libraries for IDN support: IDN disabled"
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with libidn2" >&5
-$as_echo_n "checking whether to build with libidn2... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with libidn" >&5
+$as_echo_n "checking whether to build with libidn... " >&6; }
 OPT_IDN="default"
 
-# Check whether --with-libidn2 was given.
-if test "${with_libidn2+set}" = set; then :
-  withval=$with_libidn2; OPT_IDN=$withval
+# Check whether --with-libidn was given.
+if test "${with_libidn+set}" = set; then :
+  withval=$with_libidn; OPT_IDN=$withval
 fi
 
 case "$OPT_IDN" in
     fi
 
     if test "x$PKGCONFIG" != "xno"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn2 options with pkg-config" >&5
-$as_echo_n "checking for libidn2 options with pkg-config... " >&6; }
+      { $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=`
     if test -n "$IDN_PCDIR"; then
       PKG_CONFIG_LIBDIR="$IDN_PCDIR"
       export PKG_CONFIG_LIBDIR
     fi
-         $PKGCONFIG --exists libidn2 >/dev/null 2>&1 && echo 1`
+         $PKGCONFIG --exists libidn >/dev/null 2>&1 && echo 1`
 
       if test -z "$itexists"; then
                         PKGCONFIG="no"
@@ -26679,22 +26621,22 @@ $as_echo "found" >&6; }
       PKG_CONFIG_LIBDIR="$IDN_PCDIR"
       export PKG_CONFIG_LIBDIR
     fi
-         $PKGCONFIG --libs-only-l libidn2 2>/dev/null`
+         $PKGCONFIG --libs-only-l libidn 2>/dev/null`
       IDN_LDFLAGS=`
     if test -n "$IDN_PCDIR"; then
       PKG_CONFIG_LIBDIR="$IDN_PCDIR"
       export PKG_CONFIG_LIBDIR
     fi
-         $PKGCONFIG --libs-only-L libidn2 2>/dev/null`
+         $PKGCONFIG --libs-only-L libidn 2>/dev/null`
       IDN_CPPFLAGS=`
     if test -n "$IDN_PCDIR"; then
       PKG_CONFIG_LIBDIR="$IDN_PCDIR"
       export PKG_CONFIG_LIBDIR
     fi
-         $PKGCONFIG --cflags-only-I libidn2 2>/dev/null`
+         $PKGCONFIG --cflags-only-I libidn 2>/dev/null`
       IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'`
     else
-            IDN_LIBS="-lidn2"
+            IDN_LIBS="-lidn"
       IDN_LDFLAGS="-L$want_idn_path/lib$libsuff"
       IDN_CPPFLAGS="-I$want_idn_path/include"
       IDN_DIR="$want_idn_path/lib$libsuff"
     fi
 
     if test "x$PKGCONFIG" != "xno"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn2 options with pkg-config" >&5
-$as_echo_n "checking for libidn2 options with pkg-config... " >&6; }
+      { $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=`
     if test -n ""; then
       PKG_CONFIG_LIBDIR=""
       export PKG_CONFIG_LIBDIR
     fi
-         $PKGCONFIG --exists libidn2 >/dev/null 2>&1 && echo 1`
+         $PKGCONFIG --exists libidn >/dev/null 2>&1 && echo 1`
 
       if test -z "$itexists"; then
                         PKGCONFIG="no"
@@ -26827,12 +26769,12 @@ $as_echo "found" >&6; }
     fi
 
     if test "$PKGCONFIG" != "no"; then
-      IDN_LIBS=`$PKGCONFIG --libs-only-l libidn2 2>/dev/null`
-      IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn2 2>/dev/null`
-      IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn2 2>/dev/null`
+      IDN_LIBS=`$PKGCONFIG --libs-only-l libidn 2>/dev/null`
+      IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn 2>/dev/null`
+      IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn 2>/dev/null`
       IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'`
     else
-            IDN_LIBS="-lidn2"
+            IDN_LIBS="-lidn"
     fi
   fi
   #
@@ -26860,30 +26802,30 @@ $as_echo "$as_me: IDN_DIR: \"$IDN_DIR\"" >&6;}
   LDFLAGS="$IDN_LDFLAGS $LDFLAGS"
   LIBS="$IDN_LIBS $LIBS"
   #
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if idn2_lookup_ul can be linked" >&5
-$as_echo_n "checking if idn2_lookup_ul can be linked... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if idna_to_ascii_4i can be linked" >&5
+$as_echo_n "checking if idna_to_ascii_4i can be linked... " >&6; }
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 
-#define idn2_lookup_ul innocuous_idn2_lookup_ul
+#define idna_to_ascii_4i innocuous_idna_to_ascii_4i
 #ifdef __STDC__
 # include <limits.h>
 #else
 # include <assert.h>
 #endif
-#undef idn2_lookup_ul
+#undef idna_to_ascii_4i
 #ifdef __cplusplus
 extern "C"
 #endif
-char idn2_lookup_ul ();
-#if defined __stub_idn2_lookup_ul || defined __stub___idn2_lookup_ul
+char idna_to_ascii_4i ();
+#if defined __stub_idna_to_ascii_4i || defined __stub___idna_to_ascii_4i
 choke me
 #endif
 
 int main (void)
 {
-return idn2_lookup_ul ();
+return idna_to_ascii_4i ();
  ;
  return 0;
 }
@@ -26904,8 +26846,70 @@ $as_echo "no" >&6; }
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+  if test "$tst_links_libidn" = "no"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if idna_to_ascii_lz can be linked" >&5
+$as_echo_n "checking if idna_to_ascii_lz can be linked... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define idna_to_ascii_lz innocuous_idna_to_ascii_lz
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef idna_to_ascii_lz
+#ifdef __cplusplus
+extern "C"
+#endif
+char idna_to_ascii_lz ();
+#if defined __stub_idna_to_ascii_lz || defined __stub___idna_to_ascii_lz
+choke me
+#endif
+
+int main (void)
+{
+return idna_to_ascii_lz ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      tst_links_libidn="yes"
+
+else
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      tst_links_libidn="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  fi
   #
-  for ac_header in idn2.h
+  if test "$tst_links_libidn" = "yes"; then
+
+$as_echo "#define HAVE_LIBIDN 1" >>confdefs.h
+
+        for ac_func in idn_free idna_strerror tld_strerror
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+    for ac_header in idn-free.h tld.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
 
 done
 
+    if test "x$ac_cv_header_tld_h" = "xyes"; then
+      IDN_ENABLED=1
 
-  if test "$tst_links_libidn" = "yes"; then
-
-$as_echo "#define HAVE_LIBIDN2 1" >>confdefs.h
-
-
-    IDN_ENABLED=1
-
-    curl_idn_msg="enabled (libidn2)"
-    if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then
-      LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR"
-      export LD_LIBRARY_PATH
-      { $as_echo "$as_me:${as_lineno-$LINENO}: Added $IDN_DIR to LD_LIBRARY_PATH" >&5
+      curl_idn_msg="enabled"
+      if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then
+        LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR"
+        export LD_LIBRARY_PATH
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Added $IDN_DIR to LD_LIBRARY_PATH" >&5
 $as_echo "$as_me: Added $IDN_DIR to LD_LIBRARY_PATH" >&6;}
+      fi
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libraries for IDN support too old: IDN disabled" >&5
+$as_echo "$as_me: WARNING: Libraries for IDN support too old: IDN disabled" >&2;}
+      CPPFLAGS="$clean_CPPFLAGS"
+      LDFLAGS="$clean_LDFLAGS"
+      LIBS="$clean_LIBS"
     fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find libraries for IDN support: IDN disabled" >&5
@@ -35849,9 +35855,8 @@ $as_echo "no" >&6; }
   tst_allow_poll="unknown"
   #
   case $host_os in
-    darwin*|interix*)
-                                          curl_disallow_poll="yes"
-      tst_compi_poll="no"
+    darwin[123456789].*|darwin10.*|darwin11.*|darwin12.*|interix*)
+                              curl_disallow_poll="yes"
       ;;
   esac
   #
@@ -35969,30 +35974,14 @@ else
 
         $curl_includes_stdlib
         $curl_includes_poll
-        $curl_includes_time
 
 int main (void)
 {
 
-        /* detect the original poll() breakage */
         if(0 != poll(0, 0, 10))
           exit(1); /* fail */
-        else {
-          /* detect the 10.12 poll() breakage */
-          struct timeval before, after;
-          int rc;
-          size_t us;
-
-          gettimeofday(&before, NULL);
-          rc = poll(NULL, 0, 500);
-          gettimeofday(&after, NULL);
-
-          us = (after.tv_sec - before.tv_sec) * 1000000 +
-            (after.tv_usec - before.tv_usec);
-
-          if(us < 400000)
-            exit(1);
-        }
+        else
+          exit(0);
 
  ;
  return 0;
@@ -40198,31 +40187,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
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use POSIX threads for threaded resolver" >&5
-$as_echo_n "checking whether to use POSIX threads for threaded resolver... " >&6; }
-# Check whether --enable-pthreads was given.
-if test "${enable_pthreads+set}" = set; then :
-  enableval=$enable_pthreads;  case "$enableval" in
-  no)  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       want_pthreads=no
-       ;;
-  *)   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-       want_pthreads=yes
-       ;;
-  esac
-else
-
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: auto" >&5
-$as_echo "auto" >&6; }
-       want_pthreads=auto
-
-
-fi
-
-if test "$want_thres" = "yes" && test "$dontwant_rt" = "no" && \
-   test "$want_pthreads" != "no"; 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 :
 
@@ -40288,28 +40253,13 @@ $as_echo "#define USE_THREADS_POSIX 1" >>confdefs.h
         curl_res_msg="POSIX threaded"
       fi
 
-fi
 
 
 fi
-if test "x$USE_THREADS_POSIX" != "x1"; then
-  if test "$want_pthreads" = "yes"; then
-    as_fn_error $? "--enable-pthreads but pthreads was not found" "$LINENO" 5
-  fi
-  if test "$want_thres" = "yes"; then
-        if test "$curl_cv_native_windows" = "yes"; then
-      USE_THREADS_WIN32=1
 
-$as_echo "#define USE_THREADS_WIN32 1" >>confdefs.h
 
-      curl_res_msg="Win32 threaded"
-    else
-      as_fn_error $? "Threaded resolver enabled but no thread library found" "$LINENO" 5
-    fi
-  fi
 fi
 
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable verbose strings" >&5
 $as_echo_n "checking whether to enable verbose strings... " >&6; }
 # Check whether --enable-verbose was given.
@@ -40657,8 +40607,7 @@ fi
 if test "x$HAVE_LIBZ" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES libz"
 fi
-if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \
-                            -o "x$USE_THREADS_WIN32" = "x1"; then
+if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
 fi
 if test "x$IDN_ENABLED" = "x1"; then
@@ -40707,11 +40656,6 @@ if test "x$USE_NGHTTP2" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2"
 fi
 
-if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \
-    -o "x$NSS_ENABLED" = "x1"; then
-  SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy"
-fi
-
 
 
 if test "x$CURL_DISABLE_HTTP" != "x1"; then
@@ -40980,7 +40924,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 docs/cmdline-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"
+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
@@ -42065,7 +42009,6 @@ do
     "docs/examples/Makefile") CONFIG_FILES="$CONFIG_FILES docs/examples/Makefile" ;;
     "docs/libcurl/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libcurl/Makefile" ;;
     "docs/libcurl/opts/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libcurl/opts/Makefile" ;;
-    "docs/cmdline-opts/Makefile") CONFIG_FILES="$CONFIG_FILES docs/cmdline-opts/Makefile" ;;
     "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
     "include/curl/Makefile") CONFIG_FILES="$CONFIG_FILES include/curl/Makefile" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
index 1e76c49..083e18c 100644 (file)
@@ -141,7 +141,7 @@ AC_SUBST(VERSIONNUM)
 
 dnl Solaris pkgadd support definitions
 PKGADD_PKG="HAXXcurl"
-PKGADD_NAME="curl - a client that groks URLs"
+PKGADD_NAME="cURL - a client that groks URLs"
 PKGADD_VENDOR="curl.haxx.se"
 AC_SUBST(PKGADD_PKG)
 AC_SUBST(PKGADD_NAME)
@@ -157,7 +157,7 @@ curl_tls_srp_msg="no      (--enable-tls-srp)"
     curl_res_msg="default (--enable-ares / --enable-threaded-resolver)"
    curl_ipv6_msg="no      (--enable-ipv6)"
 curl_unix_sockets_msg="no      (--enable-unix-sockets)"
-    curl_idn_msg="no      (--with-{libidn2,winidn})"
+    curl_idn_msg="no      (--with-{libidn,winidn})"
  curl_manual_msg="no      (--enable-manual)"
 curl_libcurl_msg="enabled (--disable-libcurl-option)"
 curl_verbose_msg="enabled (--disable-verbose)"
@@ -357,8 +357,6 @@ case X-"$curl_cv_native_windows" in
 esac
 CURL_CHECK_WIN32_LARGEFILE
 
-CURL_MAC_CFLAGS
-
 dnl ************************************************************
 dnl switch off particular protocols
 dnl
@@ -1373,18 +1371,18 @@ fi
 
 OPT_DARWINSSL=no
 AC_ARG_WITH(darwinssl,dnl
-AC_HELP_STRING([--with-darwinssl],[enable Apple OS native SSL/TLS])
-AC_HELP_STRING([--without-darwinssl], [disable Apple OS native SSL/TLS]),
+AC_HELP_STRING([--with-darwinssl],[enable iOS/Mac OS X native SSL/TLS])
+AC_HELP_STRING([--without-darwinssl], [disable iOS/Mac OS X native SSL/TLS]),
   OPT_DARWINSSL=$withval)
 
-AC_MSG_CHECKING([whether to enable Apple OS native SSL/TLS])
+AC_MSG_CHECKING([whether to enable iOS/Mac OS X native SSL/TLS])
 if test "$curl_ssl_msg" = "$init_ssl_msg"; then
   if test "x$OPT_DARWINSSL" != "xno" &&
      test -d "/System/Library/Frameworks/Security.framework"; then
     AC_MSG_RESULT(yes)
-    AC_DEFINE(USE_DARWINSSL, 1, [to enable Apple OS native SSL/TLS support])
+    AC_DEFINE(USE_DARWINSSL, 1, [to enable iOS/Mac OS X native SSL/TLS support])
     AC_SUBST(USE_DARWINSSL, [1])
-    curl_ssl_msg="enabled (Apple OS-native)"
+    curl_ssl_msg="enabled (iOS/Mac OS X-native)"
     DARWINSSL_ENABLED=1
     LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security"
   else
@@ -1637,8 +1635,11 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
     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_egd \
+    AC_CHECK_FUNCS( RAND_status \
+                    RAND_screen \
+                    RAND_egd \
                     ENGINE_cleanup \
+                    CRYPTO_cleanup_all_ex_data \
                     SSL_get_shutdown \
                     SSLv2_client_method )
 
@@ -1847,7 +1848,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 gnutls_alpn_set_protocols gnutls_ocsp_req_init])
+        AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2)
       fi
 
     fi
@@ -2581,7 +2582,7 @@ if test X"$OPT_LIBSSH2" != Xno; then
     DIR_SSH2=${PREFIX_SSH2}/lib$libsuff
   fi
 
-  LDFLAGS="$LD_SSH2 $LDFLAGS"
+  LDFLAGS="$LDFLAGS $LD_SSH2"
   CPPFLAGS="$CPPFLAGS $CPP_SSH2"
   LIBS="$LIB_SSH2 $LIBS"
 
@@ -2828,15 +2829,15 @@ dnl **********************************************************************
 dnl Check for the presence of IDN libraries and headers
 dnl **********************************************************************
 
-AC_MSG_CHECKING([whether to build with libidn2])
+AC_MSG_CHECKING([whether to build with libidn])
 OPT_IDN="default"
-AC_ARG_WITH(libidn2,
-AC_HELP_STRING([--with-libidn2=PATH],[Enable libidn2 usage])
-AC_HELP_STRING([--without-libidn2],[Disable libidn2 usage]),
+AC_ARG_WITH(libidn,
+AC_HELP_STRING([--with-libidn=PATH],[Enable libidn usage])
+AC_HELP_STRING([--without-libidn],[Disable libidn usage]),
   [OPT_IDN=$withval])
 case "$OPT_IDN" in
   no)
-    dnl --without-libidn2 option used
+    dnl --without-libidn option used
     want_idn="no"
     AC_MSG_RESULT([no])
     ;;
@@ -2847,13 +2848,13 @@ case "$OPT_IDN" in
     AC_MSG_RESULT([(assumed) yes])
     ;;
   yes)
-    dnl --with-libidn2 option used without path
+    dnl --with-libidn option used without path
     want_idn="yes"
     want_idn_path="default"
     AC_MSG_RESULT([yes])
     ;;
   *)
-    dnl --with-libidn2 option used with path
+    dnl --with-libidn option used with path
     want_idn="yes"
     want_idn_path="$withval"
     AC_MSG_RESULT([yes ($withval)])
@@ -2870,33 +2871,33 @@ if test "$want_idn" = "yes"; then
   if test "$want_idn_path" != "default"; then
     dnl path has been specified
     IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig"
-    CURL_CHECK_PKGCONFIG(libidn2, [$IDN_PCDIR])
+    CURL_CHECK_PKGCONFIG(libidn, [$IDN_PCDIR])
     if test "$PKGCONFIG" != "no"; then
       IDN_LIBS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl
-        $PKGCONFIG --libs-only-l libidn2 2>/dev/null`
+        $PKGCONFIG --libs-only-l libidn 2>/dev/null`
       IDN_LDFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl
-        $PKGCONFIG --libs-only-L libidn2 2>/dev/null`
+        $PKGCONFIG --libs-only-L libidn 2>/dev/null`
       IDN_CPPFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl
-        $PKGCONFIG --cflags-only-I libidn2 2>/dev/null`
+        $PKGCONFIG --cflags-only-I libidn 2>/dev/null`
       IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'`
     else
       dnl pkg-config not available or provides no info
-      IDN_LIBS="-lidn2"
+      IDN_LIBS="-lidn"
       IDN_LDFLAGS="-L$want_idn_path/lib$libsuff"
       IDN_CPPFLAGS="-I$want_idn_path/include"
       IDN_DIR="$want_idn_path/lib$libsuff"
     fi
   else
     dnl path not specified
-    CURL_CHECK_PKGCONFIG(libidn2)
+    CURL_CHECK_PKGCONFIG(libidn)
     if test "$PKGCONFIG" != "no"; then
-      IDN_LIBS=`$PKGCONFIG --libs-only-l libidn2 2>/dev/null`
-      IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn2 2>/dev/null`
-      IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn2 2>/dev/null`
+      IDN_LIBS=`$PKGCONFIG --libs-only-l libidn 2>/dev/null`
+      IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn 2>/dev/null`
+      IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn 2>/dev/null`
       IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'`
     else
       dnl pkg-config not available or provides no info
-      IDN_LIBS="-lidn2"
+      IDN_LIBS="-lidn"
     fi
   fi
   #
@@ -2916,9 +2917,9 @@ if test "$want_idn" = "yes"; then
   LDFLAGS="$IDN_LDFLAGS $LDFLAGS"
   LIBS="$IDN_LIBS $LIBS"
   #
-  AC_MSG_CHECKING([if idn2_lookup_ul can be linked])
+  AC_MSG_CHECKING([if idna_to_ascii_4i can be linked])
   AC_LINK_IFELSE([
-    AC_LANG_FUNC_LINK_TRY([idn2_lookup_ul])
+    AC_LANG_FUNC_LINK_TRY([idna_to_ascii_4i])
   ],[
     AC_MSG_RESULT([yes])
     tst_links_libidn="yes"
@@ -2926,19 +2927,37 @@ if test "$want_idn" = "yes"; then
     AC_MSG_RESULT([no])
     tst_links_libidn="no"
   ])
+  if test "$tst_links_libidn" = "no"; then
+    AC_MSG_CHECKING([if idna_to_ascii_lz can be linked])
+    AC_LINK_IFELSE([
+      AC_LANG_FUNC_LINK_TRY([idna_to_ascii_lz])
+    ],[
+      AC_MSG_RESULT([yes])
+      tst_links_libidn="yes"
+    ],[
+      AC_MSG_RESULT([no])
+      tst_links_libidn="no"
+    ])
+  fi
   #
-  AC_CHECK_HEADERS( idn2.h )
-
   if test "$tst_links_libidn" = "yes"; then
-    AC_DEFINE(HAVE_LIBIDN2, 1, [Define to 1 if you have the `idn2' library (-lidn2).])
+    AC_DEFINE(HAVE_LIBIDN, 1, [Define to 1 if you have the `idn' library (-lidn).])
     dnl different versions of libidn have different setups of these:
-
-    AC_SUBST([IDN_ENABLED], [1])
-    curl_idn_msg="enabled (libidn2)"
-    if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then
-      LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR"
-      export LD_LIBRARY_PATH
-      AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH])
+    AC_CHECK_FUNCS( idn_free idna_strerror tld_strerror )
+    AC_CHECK_HEADERS( idn-free.h tld.h )
+    if test "x$ac_cv_header_tld_h" = "xyes"; then
+      AC_SUBST([IDN_ENABLED], [1])
+      curl_idn_msg="enabled"
+      if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then
+        LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR"
+        export LD_LIBRARY_PATH
+        AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH])
+      fi
+    else
+      AC_MSG_WARN([Libraries for IDN support too old: IDN disabled])
+      CPPFLAGS="$clean_CPPFLAGS"
+      LDFLAGS="$clean_LDFLAGS"
+      LIBS="$clean_LIBS"
     fi
   else
     AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled])
@@ -3407,28 +3426,7 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then
 [Options --enable-threaded-resolver and --enable-ares are mutually exclusive])
 fi
 
-dnl ************************************************************
-dnl disable POSIX threads
-dnl
-AC_MSG_CHECKING([whether to use POSIX threads for threaded resolver])
-AC_ARG_ENABLE(pthreads,
-AC_HELP_STRING([--enable-pthreads],
-               [Enable POSIX threads (default for threaded resolver)])
-AC_HELP_STRING([--disable-pthreads],[Disable POSIX threads]),
-[ case "$enableval" in
-  no)  AC_MSG_RESULT(no)
-       want_pthreads=no
-       ;;
-  *)   AC_MSG_RESULT(yes)
-       want_pthreads=yes
-       ;;
-  esac ], [
-       AC_MSG_RESULT(auto)
-       want_pthreads=auto
-       ]
-)
-if test "$want_thres" = "yes" && test "$dontwant_rt" = "no" && \
-   test "$want_pthreads" != "no"; 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"
@@ -3450,24 +3448,10 @@ if test "$want_thres" = "yes" && test "$dontwant_rt" = "no" && \
         AC_DEFINE(USE_THREADS_POSIX, 1, [if you want POSIX threaded DNS lookup])
         curl_res_msg="POSIX threaded"
       fi
+
+
   ])
 fi
-if test "x$USE_THREADS_POSIX" != "x1"; then
-  if test "$want_pthreads" = "yes"; then
-    AC_MSG_ERROR([--enable-pthreads but pthreads was not found])
-  fi
-  if test "$want_thres" = "yes"; then
-    dnl If native Windows fallback on Win32 threads since no POSIX threads
-    if test "$curl_cv_native_windows" = "yes"; then
-      USE_THREADS_WIN32=1
-      AC_DEFINE(USE_THREADS_WIN32, 1, [if you want Win32 threaded DNS lookup])
-      curl_res_msg="Win32 threaded"
-    else
-      AC_MSG_ERROR([Threaded resolver enabled but no thread library found])
-    fi
-  fi
-fi
-
 
 dnl ************************************************************
 dnl disable verbose text strings
@@ -3696,8 +3680,7 @@ fi
 if test "x$HAVE_LIBZ" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES libz"
 fi
-if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \
-                            -o "x$USE_THREADS_WIN32" = "x1"; then
+if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
 fi
 if test "x$IDN_ENABLED" = "x1"; then
@@ -3746,11 +3729,6 @@ if test "x$USE_NGHTTP2" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2"
 fi
 
-if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \
-    -o "x$NSS_ENABLED" = "x1"; then
-  SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy"
-fi
-
 AC_SUBST(SUPPORT_FEATURES)
 
 dnl For supported protocols in pkg-config file
@@ -3863,7 +3841,6 @@ AC_CONFIG_FILES([Makefile \
            docs/examples/Makefile \
            docs/libcurl/Makefile \
            docs/libcurl/opts/Makefile \
-           docs/cmdline-opts/Makefile \
            include/Makefile \
            include/curl/Makefile \
            src/Makefile \
diff --git a/docs/BINDINGS b/docs/BINDINGS
new file mode 100644 (file)
index 0000000..eb67c3d
--- /dev/null
@@ -0,0 +1,260 @@
+                                  _   _ ____  _
+                              ___| | | |  _ \| |
+                             / __| | | | |_) | |
+                            | (__| |_| |  _ <| |___
+                             \___|\___/|_| \_\_____|
+
+                               libcurl bindings
+
+ Creative people have written bindings or interfaces for various environments
+ and programming languages. Using one of these allows you to take advantage of
+ curl powers from within your favourite language or system.
+
+ This is a list of all known interfaces as of this writing.
+
+ The bindings listed below are not part of the curl/libcurl distribution
+ archives, but must be downloaded and installed separately.
+
+Ada95
+
+  Writtten by Andreas Almroth
+  http://www.almroth.com/adacurl/index.html
+
+Basic
+
+  ScriptBasic bindings to libcurl. Writtten by Peter Verhas
+  http://scriptbasic.com/
+
+C
+  libcurl is a C library in itself!
+  https://curl.haxx.se/libcurl/
+
+C++
+
+  Written by Jean-Philippe Barrette-LaPierre
+  http://curlpp.org/
+
+Ch
+
+  Written by Stephen Nestinger and Jonathan Rogado
+  http://chcurl.sourceforge.net/
+
+Cocoa
+
+  BBHTTP: written by Bruno de Carvalho
+  https://github.com/brunodecarvalho/BBHTTP
+
+  curlhandle: Written by Dan Wood
+  http://curlhandle.sourceforge.net/
+
+D
+
+  Written by Kenneth Bogert
+  http://dlang.org/library/std/net/curl.html
+
+Dylan
+
+  Written by Chris Double
+  http://dylanlibs.sourceforge.net/
+
+Eiffel
+
+  Written by Eiffel Software
+  https://room.eiffel.com/library/curl
+
+Euphoria
+
+  Written by Ray Smith
+  http://rays-web.com/eulibcurl.htm
+
+Falcon
+
+  http://www.falconpl.org/index.ftd?page_id=prjs&prj_id=curl
+
+Ferite
+
+  Written by Paul Querna
+  http://www.ferite.org/
+
+Gambas
+
+  http://gambas.sourceforge.net/
+
+glib/GTK+
+
+  Written by Richard Atterer
+  http://atterer.net/glibcurl/
+
+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
+  http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl
+
+Java
+
+  https://github.com/pjlegato/curl-java
+
+Julia
+
+  Written by Paul Howe
+  https://github.com/forio/Curl.jl
+
+Lisp
+
+  Written by Liam Healy
+  http://common-lisp.net/project/cl-curl/
+
+Lua
+
+  luacurl by Alexander Marinov
+  http://luacurl.luaforge.net/
+
+  Lua-cURL by Jürgen Hötzel
+  http://luaforge.net/projects/lua-curl/
+
+Mono
+
+  Written by Jeffrey Phillips
+  http://forge.novell.com/modules/xfmod/project/?libcurl-mono
+
+.NET
+
+  libcurl-net by Jeffrey Phillips
+  https://sourceforge.net/projects/libcurl-net/
+
+node.js
+
+  node-libcurl by Jonathan Cardoso Machado
+  https://github.com/JCMais/node-libcurl
+
+Object-Pascal
+
+  Free Pascal, Delphi and Kylix binding written by Christophe Espern.
+  http://www.tekool.com/opcurl
+
+O'Caml
+
+  Written by Lars Nilsson
+  https://sourceforge.net/projects/ocurl/
+
+Pascal
+
+  Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
+  http://houston.quik.com/jkp/curlpas/
+
+Perl
+
+  Maintained by Cris Bailiff and Bálint Szilakszi
+  https://github.com/szbalint/WWW--Curl
+
+PHP
+
+  Written by Sterling Hughes
+  https://php.net/curl
+
+PostgreSQL
+
+  Written by Gian Paolo Ciceri
+  http://gborg.postgresql.org/project/pgcurl/projdisplay.php
+
+Python
+
+  PycURL by Kjetil Jacobsen
+  http://pycurl.sourceforge.net/
+
+R
+
+  http://cran.r-project.org/package=curl
+
+Rexx
+
+  Written Mark Hessling
+  http://rexxcurl.sourceforge.net/
+
+RPG
+
+  Support for ILE/RPG on OS/400 is included in source distribution
+  https://curl.haxx.se/libcurl/
+  See packages/OS400/README.OS400 and packages/OS400/curl.inc.in
+
+Ruby
+
+  curb - written by Ross Bamford
+  http://curb.rubyforge.org/
+
+  ruby-curl-multi - written by Kristjan Petursson and Keith Rarick
+  http://curl-multi.rubyforge.org/
+
+Rust
+
+  curl-rust - by Carl Lerche
+  https://github.com/carllerche/curl-rust
+
+Scheme
+
+  Bigloo binding by Kirill Lisovsky
+  http://www.metapaper.net/lisovsky/web/curl/
+
+S-Lang
+
+  S-Lang binding by John E Davis
+  http://www.jedsoft.org/slang/modules/curl.html
+
+Smalltalk
+
+  Smalltalk binding by Danil Osipchuk
+  http://www.squeaksource.com/CurlPlugin/
+
+SP-Forth
+
+  SP-Forth binding by ygrek
+  http://www.forth.org.ru/~ac/lib/lin/curl/
+
+SPL
+
+  SPL binding by Clifford Wolf
+  http://www.clifford.at/spl/
+
+Tcl
+
+  Tclcurl by Andrés García
+  http://mirror.yellow5.com/tclcurl/
+
+Visual Basic
+
+  libcurl-vb by Jeffrey Phillips
+  https://sourceforge.net/projects/libcurl-vb/
+
+Visual Foxpro
+
+  by Carlos Alloatti
+  http://www.ctl32.com.ar/libcurl.asp
+
+Q
+  The libcurl module is part of the default install
+  http://q-lang.sourceforge.net/
+
+wxWidgets
+
+  Written by Casey O'Donnell
+  http://wxcode.sourceforge.net/components/wxcurl/
+
+XBLite
+
+  Written by David Szafranski
+  http://perso.wanadoo.fr/xblite/libraries.html
+
+Xojo
+
+  Written by Andrew Lambert
+  https://github.com/charonn0/RB-libcURL
diff --git a/docs/BINDINGS.md b/docs/BINDINGS.md
deleted file mode 100644 (file)
index a11cb4c..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-libcurl bindings
-================
-
- Creative people have written bindings or interfaces for various environments
- and programming languages. Using one of these allows you to take advantage of
- curl powers from within your favourite language or system.
-
- This is a list of all known interfaces as of this writing.
-
- The bindings listed below are not part of the curl/libcurl distribution
- archives, but must be downloaded and installed separately.
-
-[Ada95](http://www.almroth.com/adacurl/index.html)  Written by Andreas Almroth
-
-[Basic](http://scriptbasic.com/) ScriptBasic bindings written by Peter Verhas
-
-[C++](http://curlpp.org/) Written by Jean-Philippe Barrette-LaPierre
-
-[Ch](https://chcurl.sourceforge.io/) Written by Stephen Nestinger and Jonathan Rogado
-
-Cocoa: [BBHTTP](https://github.com/brunodecarvalho/BBHTTP) written by Bruno de Carvalho
-[curlhandle](https://github.com/karelia/curlhandle) Written by Dan Wood
-
-[D](https://dlang.org/library/std/net/curl.html) Written by Kenneth Bogert
-
-[Dylan](https://dylanlibs.sourceforge.io/) Written by Chris Double
-
-[Eiffel](https://room.eiffel.com/library/curl) Written by Eiffel Software
-
-[Euphoria](http://rays-web.com/eulibcurl.htm) Written by Ray Smith
-
-[Falcon](http://www.falconpl.org/index.ftd?page_id=prjs&prj_id=curl)
-
-[Ferite](http://www.ferite.org/) Written by Paul Querna
-
-[Gambas](https://gambas.sourceforge.io/)
-
-[glib/GTK+](http://atterer.net/glibcurl/) Written by Richard Atterer
-
-[Guile](http://www.lonelycactus.com/guile-curl.html) Written by Michael L. Gran
-
-[Harbour](https://github.com/vszakats/harbour-core/tree/master/contrib/hbcurl) Written by Viktor Szakáts
-
-[Haskell](https://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl) Written by Galois, Inc
-
-[Java](https://github.com/pjlegato/curl-java)
-
-[Julia](https://github.com/forio/Curl.jl) Written by Paul Howe
-
-[Lisp](https://common-lisp.net/project/cl-curl/) Written by Liam Healy
-
-Lua: [luacurl](http://luacurl.luaforge.net/) by Alexander Marinov, [Lua-cURL](http://luaforge.net/projects/lua-curl/) by Jürgen Hötzel
-
-[Mono](https://forge.novell.com/modules/xfmod/project/?libcurl-mono) Written by Jeffrey Phillips
-
-[.NET](https://sourceforge.net/projects/libcurl-net/) libcurl-net by Jeffrey Phillips
-
-[node.js](https://github.com/JCMais/node-libcurl) node-libcurl by Jonathan Cardoso Machado
-
-[Object-Pascal](http://www.tekool.com/opcurl) Free Pascal, Delphi and Kylix binding written by Christophe Espern.
-
-[O'Caml](https://sourceforge.net/projects/ocurl/) Written by Lars Nilsson
-
-[Pascal](http://houston.quik.com/jkp/curlpas/) Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
-
-[Perl](https://github.com/szbalint/WWW--Curl) Maintained by Cris Bailiff and Bálint Szilakszi
-
-[PHP](https://php.net/curl) Originally written by Sterling Hughes
-
-[PostgreSQL](http://gborg.postgresql.org/project/pgcurl/projdisplay.php) Written by Gian Paolo Ciceri
-
-[Python](http://pycurl.io/) PycURL by Kjetil Jacobsen
-
-[R](https://cran.r-project.org/package=curl)
-
-[Rexx](https://rexxcurl.sourceforge.io/) Written Mark Hessling
-
-RPG, support for ILE/RPG on OS/400 is included in source distribution
-
-Ruby: [curb](http://curb.rubyforge.org/) written by Ross Bamford, [ruby-curl-multi](http://curl-multi.rubyforge.org/) written by Kristjan Petursson and Keith Rarick
-
-[Rust](https://github.com/carllerche/curl-rust) curl-rust - by Carl Lerche
-
-[Scheme](https://www.metapaper.net/lisovsky/web/curl/) Bigloo binding by Kirill Lisovsky
-
-[S-Lang](http://www.jedsoft.org/slang/modules/curl.html) by John E Davis
-
-[Smalltalk](http://www.squeaksource.com/CurlPlugin/) Written by Danil Osipchuk
-
-[SP-Forth](http://www.forth.org.ru/~ac/lib/lin/curl/) Written by ygrek
-
-[SPL](http://www.clifford.at/spl/) Written by Clifford Wolf
-
-[Tcl](http://mirror.yellow5.com/tclcurl/) Tclcurl by Andrés García
-
-[Visual Basic](https://sourceforge.net/projects/libcurl-vb/) libcurl-vb by Jeffrey Phillips
-
-[Visual Foxpro](http://www.ctl32.com.ar/libcurl.asp) by Carlos Alloatti
-
-[Q](https://q-lang.sourceforge.io/) The libcurl module is part of the default install
-
-[wxWidgets](https://wxcode.sourceforge.io/components/wxcurl/) Written by Casey O'Donnell
-
-[XBLite](http://perso.wanadoo.fr/xblite/libraries.html) Written by David Szafranski
-
-[Xojo](https://github.com/charonn0/RB-libcURL) Written by Andrew Lambert
index 8cabbd2..dfd9b20 100644 (file)
--- a/docs/BUGS
+++ b/docs/BUGS
@@ -15,16 +15,6 @@ BUGS
   1.6 How to get a stack trace
   1.7 Bugs in libcurl bindings
 
- 2. Bug fixing procedure
- 2.1 What happens on first filing
- 2.2 First response
- 2.3 Not reproducible
- 2.4 Unresponsive
- 2.5 Lack of time/interest
- 2.6 KNOWN_BUGS
- 2.7 TODO
- 2.8 Closing off stalled bugs
-
 ==============================================================================
 
 1.1 There are still bugs
@@ -86,6 +76,8 @@ BUGS
 
 1.4 libcurl problems
 
+  First, post all libcurl problems on the curl-library mailing list.
+
   When you've written your own application with libcurl to perform transfers,
   it is even more important to be specific and detailed when reporting bugs.
 
@@ -152,96 +144,3 @@ BUGS
   If you suspect that the problem exists in the underlying libcurl, then
   please convert your program over to plain C and follow the steps outlined
   above.
-
-2. Bug fixing procedure
-
-2.1 What happens on first filing
-
-  When a new issue is posted in the issue tracker or on the mailing list, the
-  team of developers first need to see the report. Maybe they took the day
-  off, maybe they're off in the woods hunting. Have patience. Allow at least a
-  few days before expecting someone to have responded.
-
-  In the issue tracker you can expect that some labels will be set on the
-  issue to help categorize it.
-
-2.2 First response
-
-  If your issue/bug report wasn't perfect at once (and few are), chances are
-  that someone will ask follow-up questions. Which version did you use? Which
-  options did you use? How often does the problem occur? How can we reproduce
-  this problem? Which protocols does it involve? Or perhaps much more specific
-  and deep diving questions. It all depends on your specific issue.
-
-  You should then respond to these follow-up questions and provide more info
-  about the problem, so that we can help you figure it out. Or maybe you can
-  help us figure it out. An active back-and-forth communication is important
-  and the key for finding a cure and landing a fix.
-
-2.3 Not reproducible
-
-  For problems that we can't reproduce and can't understand even after having
-  gotten all the info we need and having studied the source code over again,
-  are really hard to solve so then we may require further work from you who
-  actually see or experience the problem.
-
-2.4 Unresponsive
-
-  If the problem haven't been understood or reproduced, and there's nobody
-  responding to follow-up questions or questions asking for clarifications or
-  for discussing possible ways to move forward with the task, we take that as
-  a strong suggestion that the bug is not important.
-
-  Unimportant issues will be closed as inactive sooner or later as they can't
-  be fixed. The inactivity period (waiting for responses) should not be
-  shorter than two weeks but may extend months.
-
-2.5 Lack of time/interest
-
-  Bugs that are filed and are understood can unfortunately end up in the
-  "nobody cares enough about it to work on it" category. Such bugs are
-  perfectly valid problems that *should* get fixed but apparently aren't. We
-  try to mark such bugs as "KNOWN_BUGS material" after a time of inactivity
-  and if no activity is noticed after yet some time those bugs are added to
-  KNOWN_BUGS and are closed in the issue tracker.
-
-2.6 KNOWN_BUGS
-
-  This is a list of known bugs. Bugs we know exist and that have been pointed
-  out but that haven't yet been fixed. The reasons for why they haven't been
-  fixed can involve anything really, but the primary reason is that nobody has
-  considered these problems to be important enough to spend the necesary time
-  and effort to have them fixed.
-
-  The KNOWN_BUGS are always up for grabs and we will always love the ones who
-  bring one of them back to live and offers solutions to them.
-
-  The KNOWN_BUGS document has a sibling document known as TODO.
-
-2.7 TODO
-
-  Issues that are filed or reported that aren't really bugs but more missing
-  features or ideas for future improvements and so on are marked as
-  'enhancement' or 'feature-request' and will be added to the TODO document
-  instead and the issue is closed. We don't keep TODO items in the issue
-  tracker.
-
-  The TODO document is full of ideas and suggestions of what we can add or fix
-  one day. You're always encouraged and free to grab one of those items and
-  take up a discussion with the curl development team on how that could be
-  implemented or provided in the project so that you can work on ticking it
-  odd that document.
-
-  If the issue is rather a bug and not a missing feature or functionality, it
-  is listed in KNOWN_BUGS instead.
-
-2.8 Closing off stalled bugs
-
-  The issue and pull request trackers on https://github.com/curl/curl will
-  only hold "active" entries (using a non-precise defintion of what active
-  actually is, but they're at least not completely dead). Those that are
-  abandonded or in other ways dormant will be closed and sometimes added to
-  TODO and KNOWN_BUGS instead.
-
-  This way, we only have "active" issues open on github. Irrelevant issues and
-  pull requests will not distract developes or casual visitors.
index b42de84..591e066 100644 (file)
@@ -20,7 +20,7 @@ when, for example, one of the files is generated.
 
 checksrc does not check and verify the code against the entire style guide,
 but the script is instead an effort to detect the most common mistakes and
-syntax mistakes that contributors make before they get accustomed to our code
+syntax mistakes that contributers make before they get accustomed to our code
 style. Heck, many of us regulars do the mistakes too and this script helps us
 keep the code in shape.
 
@@ -33,7 +33,7 @@ warnings are:
 - `BADCOMMAND`: There's a bad !checksrc! instruction in the code. See the
    **Ignore certain warnings** section below for details.
 
-- `BANNEDFUNC`: A banned function was used. The functions sprintf, vsprintf,
+- `BANNEDFUNC`: A banned function was used. The funtions sprintf, vsprintf,
    strcat, strncat, gets are **never** allowed in curl source code.
 
 - `BRACEELSE`: '} else' on the same line. The else is supposed to be on the
index ba5f710..73a4d94 100644 (file)
@@ -1,4 +1,4 @@
-# curl C code style
+# 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
@@ -9,8 +9,8 @@ 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.
+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
@@ -28,8 +28,7 @@ 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](INTERNALS.md) document on how we name non-exported
-library-global symbols.
+See the INTERNALS document on how we name non-exported library-global symbols.
 
 ## Indenting
 
@@ -51,7 +50,7 @@ introduced in the C standard until C99. We use only `/*` and `*/` comments:
 
 ## Long lines
 
-Source code in curl may never be wider than 79 columns and there are two
+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:
 
@@ -73,12 +72,8 @@ the initial keyword. Like this:
       /* clearly a youngster */
     }
 
-You may omit the braces if they would contain only a one-line statement:
-
-    if(!x)
-      continue;
-
-For functions the opening brace should be on a separate line:
+When we write functions however, the opening brace should be in the first
+column of the first line:
 
     int main(int argc, char **argv)
     {
@@ -167,53 +162,6 @@ Examples:
     complement = ~bits;
     empty = (!*string) ? TRUE : FALSE;
 
-## Column alignment
-
-Some statements cannot be completed on a single line because the line would
-be too long, the statement too hard to read, or due to other style guidelines
-above. In such a case the statement will span multiple lines.
-
-If a continuation line is part of an expression or sub-expression then you
-should align on the appropriate column so that it's easy to tell what part of
-the statement it is. Operators should not start continuation lines. In other
-cases follow the 2-space indent guideline. Here are some examples from libcurl:
-
-~~~c
-    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;
-~~~
-
-~~~c
-  case CURLOPT_KEEP_SENDING_ON_ERROR:
-    data->set.http_keep_sending_on_error = (0 != va_arg(param, long)) ?
-                                           TRUE : FALSE;
-    break;
-~~~
-
-~~~c
-    data->set.http_disable_hostname_check_before_authentication =
-      (0 != va_arg(param, long)) ? TRUE : FALSE;
-~~~
-
-~~~c
-  if(option) {
-    result = parse_login_details(option, strlen(option),
-                                 (userp ? &user : NULL),
-                                 (passwdp ? &passwd : NULL),
-                                 NULL);
-  }
-~~~
-
-~~~c
-        DEBUGF(infof(data, "Curl_pp_readresp_ %d bytes of trailing "
-                     "server response left\n",
-                     (int)clipamount));
-~~~
-
 ## Platform dependent code
 
 Use `#ifdef HAVE_FEATURE` to do conditional code. We avoid checking for
index e77c365..cbda0c0 100644 (file)
@@ -4,7 +4,7 @@ This document is intended to offer guidelines on how to best contribute to the
 curl project. This concerns new features as well as corrections to existing
 flaws or bugs.
 
-## Learning curl
+## Learning cURL
 
 ### Join the Community
 
@@ -83,14 +83,14 @@ It is annoying when you get a huge patch from someone that is said to fix 511
 odd problems, but discussions and opinions don't agree with 510 of them - or
 509 of them were already fixed in a different way. Then the person merging
 this change needs to extract the single interesting patch from somewhere
-within the huge pile of source, and that creates a lot of extra work.
+within the huge pile of source, and that gives a lot of extra work.
 
-Preferably, each fix that corrects a problem should be in its own patch/commit
+Preferably, each fix that correct a problem should be in its own patch/commit
 with its own description/commit message stating exactly what they correct so
 that all changes can be selectively applied by the maintainer or other
 interested parties.
 
-Also, separate changes enable bisecting much better for tracking problems
+Also, separate changes enable bisecting much better when we track problems
 and regression in the future.
 
 ### Patch Against Recent Sources
@@ -103,9 +103,9 @@ release archive is quite OK as well!
 ### Documentation
 
 Writing docs is dead boring and one of the big problems with many open source
-projects. But someone's gotta do it! It makes things a lot easier if you 
-submit a small description of your fix or your new features with every
-contribution so that it can be swiftly added to the package documentation.
+projects. Someone's gotta do it. It makes it a lot easier if you submit a
+small description of your fix or your new features with every contribution so
+that it can be swiftly added to the package documentation.
 
 The documentation is always made in man pages (nroff formatted) or plain
 ASCII files. All HTML files on the web site and in the release archives are
@@ -134,9 +134,9 @@ patch to [the curl-library mailing
 list](https://curl.haxx.se/mail/list.cgi?list=curl-library).
 
 Either way, your change will be reviewed and discussed there and you will be
-expected to correct flaws pointed out and update accordingly, or the change 
-risks stalling and eventually just getting deleted without action. As a
-submitter of a change, you are the owner of that change until it has been merged.
+expected to correct flaws pointed out and update accordingly, or the change
+risk stalling and eventually just get deleted without action. As a submitter
+of a change, you are the owner of that change until it has been merged.
 
 Respond on the list or on github about the change and answer questions and/or
 fix nits/flaws. This is very important. We will take lack of replies as a
@@ -151,14 +151,14 @@ changes merged.
 
 We prefer pull requests to mailed patches, as it makes it a proper git commit
 that is easy to merge and they are easy to track and not that easy to loose
-in the flood of many emails, like they sometimes do on the mailing lists.
+in a flood of many emails, like they sometimes do on the mailing lists.
 
-When you adjust your pull requests after review, consider squashing the
+When you ajust your pull requests after review, consider squashing the
 commits so that we can review the full updated version more easily.
 
 ### Making quality patches
 
-Make the patch against as recent source versions as possible.
+Make the patch against as recent sources as possible.
 
 If you've followed the tips in this document and your patch still hasn't been
 incorporated or responded to after some weeks, consider resubmitting it to
@@ -204,8 +204,8 @@ local repository:
 
     git commit [file]
 
-As usual, group your commits so that you commit all changes at once that
-constitute a logical change.
+As usual, group your commits so that you commit all changes that at once that
+constitutes a logical change.
 
 Once you have done all your commits and you're happy with what you see, you
 can make patches out of your changes that are suitable for mailing:
@@ -243,5 +243,5 @@ For unix-like operating systems:
 
 For Windows:
 
- - [https://gnuwin32.sourceforge.io/packages/patch.htm](https://gnuwin32.sourceforge.io/packages/patch.htm)
- - [https://gnuwin32.sourceforge.io/packages/diffutils.htm](https://gnuwin32.sourceforge.io/packages/diffutils.htm)
+ - [http://gnuwin32.sourceforge.net/packages/patch.htm](http://gnuwin32.sourceforge.net/packages/patch.htm)
+ - [http://gnuwin32.sourceforge.net/packages/diffutils.htm](http://gnuwin32.sourceforge.net/packages/diffutils.htm)
index f8cb644..d9e538a 100644 (file)
--- a/docs/FAQ
+++ b/docs/FAQ
@@ -81,7 +81,7 @@ FAQ
   4.16 My HTTP POST or PUT requests are slow!
   4.17 Non-functional connect timeouts on Windows
   4.18 file:// URLs containing drive letters (Windows, NetWare)
-  4.19 Why doesn't curl return an error when the network cable is unplugged?
+  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?
 
@@ -215,22 +215,22 @@ FAQ
   another tool that uses libcurl.
 
   We do not add things to curl that other small and available tools already do
-  very well at the side. Curl's output can be piped into another program or
-  redirected to another file for the next program to interpret.
+  very fine at the side. Curl's output is fine to pipe into another program or
+  redirect to another file for the next program to interpret.
 
   We focus on protocol related issues and improvements. If you wanna do more
-  magic with the supported protocols than curl currently does, chances are good
+  magic with the supported protocols than curl currently does, chances are big
   we will agree. If you wanna add more protocols, we may very well agree.
 
-  If you want someone else to do all the work while you wait for us to
+  If you want someone else to make all the work while you wait for us to
   implement it for you, that is not a very friendly attitude. We spend a
   considerable time already on maintaining and developing curl. In order to
   get more out of us, you should consider trading in some of your time and
-  effort in return. Simply go to the GitHub repo which resides at
+  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 better that it will get into curl faster.
+  If you write the code, chances are bigger that it will get into curl faster.
 
   1.5 Who makes curl?
 
@@ -238,7 +238,7 @@ FAQ
   project leader and main developer, but other persons' submissions are
   important and crucial. Anyone can contribute and post their changes and
   improvements and have them inserted in the main sources (of course on the
-  condition that developers agree that the fixes are good).
+  condition that developers agree on that the fixes are good).
 
   The full list of all contributors is found in the docs/THANKS file.
 
@@ -247,9 +247,9 @@ FAQ
   1.6 What do you get for making curl?
 
   Project cURL is entirely free and open. No person gets paid for developing
-  curl full time. We do this voluntarily, mostly in our spare time.
+  curl on full time. We do this voluntarily, mostly on spare time.
   Occasionally companies pay individual developers to work on curl, but that's
-  up to each company and developer. This is not controlled by nor supervised in
+  up to each company and developer. It is not controlled by nor supervised in
   any way by the project.
 
   We still get help from companies. Haxx provides web site, bandwidth, mailing
@@ -260,11 +260,11 @@ FAQ
   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 with coding, documenting or testing etc.
+  or even better: by helping us coding, documenting, testing etc.
 
   1.7 What about CURL from curl.com?
 
-  During the summer of 2001, curl.com was busy advertising their client-side
+  During the summer 2001, curl.com was busy advertising their client-side
   programming language for the web, named CURL.
 
   We are in no way associated with curl.com or their CURL programming
@@ -277,7 +277,7 @@ FAQ
   We recognize that we will be living in parallel with curl.com and wish them
   every success.
 
-  1.8 I have a problem whom do I mail?
+  1.8 I have a problem who do I mail?
 
   Please do not mail any single individual unless you really need to. Keep
   curl-related questions on a suitable mailing list. All available mailing
@@ -285,8 +285,8 @@ FAQ
   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, to contribute their
-  suggestions and to spread their wisdom. Keeping discussions on public mailing
+  others to join in and help, to share their ideas, contribute their
+  suggestions and spread their wisdom. Keeping discussions on public mailing
   lists also allows for others to learn from this (both current and future
   users thanks to the web based archives of the mailing lists), thus saving us
   from having to repeat ourselves even more. Thanks for respecting this.
@@ -324,9 +324,9 @@ FAQ
 
   1.11 Why don't you update ca-bundle.crt
 
-  The ca cert bundle that used to be shipped with curl was very outdated and 
-  must be replaced with an up-to-date version by anyone who wants to verify
-  peers. It is no longer provided by curl. The last curl release that ever
+  The ca cert bundle that used to shipped with curl was very outdated and must
+  be replaced with an up-to-date version by anyone who wants to verify
+  peers. It is no longer provided by curl. The last curl release ever that
   shipped a ca cert bundle was curl 7.18.0.
 
   In the cURL project we've decided not to attempt to keep this file updated
@@ -347,7 +347,7 @@ FAQ
   1.12 I have a problem who can I chat with?
 
   There's a bunch of friendly people hanging out in the #curl channel on the
-  IRC network irc.freenode.net. If you're polite and nice, chances are good
+  IRC network irc.freenode.net. If you're polite and nice, chances are big
   that you can get -- or provide -- help instantly.
 
   1.13 curl's ECCN number?
@@ -430,7 +430,7 @@ FAQ
     2.1.2 only the libssl lib is missing
 
     If all include files and the libcrypto lib is present, with only the
-    libssl being missing according to configure, this is most likely because
+    libssl being missing according to configure, this is mostly likely because
     a few functions are left out from the libssl.
 
     If the function names missing include RSA or RSAREF you can be certain
@@ -467,7 +467,7 @@ FAQ
 
   2.5 Install libcurl for both 32bit and 64bit?
 
-  In curl's configure procedure one of the regular include files gets created
+  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.
@@ -520,14 +520,11 @@ FAQ
 
   3.3 Why doesn't my posting using -F work?
 
-  You can't arbitrarily use -F or -d, the choice between -F or -d depends on the 
-  HTTP operation you need curl to do and what the web server that will receive 
-  your post expects. 
-
-  If the form you're trying to submit uses the type 'multipart/form-data', then 
-  and only then you must use the -F type. In all the most common cases, you 
-  should use -d which then causes a posting with the type 
-  'application/x-www-form-urlencoded'.
+  You can't simply use -F or -d at your choice. The web server that will
+  receive your post expects one of the formats. If the form you're trying to
+  submit uses the type 'multipart/form-data', then and only then you must use
+  the -F type. In all the most common cases, you should use -d which then
+  causes a posting with the type 'application/x-www-form-urlencoded'.
 
   This is described in some detail in the MANUAL and TheArtOfHttpScripting
   documents, and if you don't understand it the first time, read it again
@@ -614,7 +611,7 @@ FAQ
   XML-RPC are all such ones. You can use -X to set custom requests and -H to
   set custom headers (or replace internally generated ones).
 
-  Using libcurl is of course just as good and you'd just use the proper
+  Using libcurl is of course just as fine and you'd just use the proper
   library options to do the same.
 
   3.11 How do I POST with a different Content-Type?
@@ -634,7 +631,7 @@ FAQ
   There is one exception to this rule, and that is if you can "tunnel through"
   the given HTTP proxy. Proxy tunneling is enabled with a special option (-p)
   and is generally not available as proxy admins usually disable tunneling to
-  ports other than 443 (which is used for HTTPS access through proxies).
+  other ports than 443 (which is used for HTTPS access through proxies).
 
   3.13 Why does my single/double quotes fail?
 
@@ -653,7 +650,7 @@ FAQ
   Windows/DOS prompts I believe you're forced to use double (") quotes.
 
   Please study the documentation for your particular environment. Examples in
-  the curl docs will use a mix of both of these as shown above. You must
+  the curl docs will use a mix of both these ones as shown above. You must
   adjust them to work in your environment.
 
   Remember that curl works and runs on more operating systems than most single
@@ -688,7 +685,7 @@ FAQ
   No. curl itself has no code that performs recursive operations, such as
   those performed by wget and similar tools.
 
-  There exists wrapper scripts with that functionality (for example the
+  There exist wrapper scripts with that functionality (for example the
   curlmirror perl script), and you can write programs based on libcurl to do
   it, but the command line tool curl itself cannot.
 
@@ -699,9 +696,9 @@ FAQ
 
   CLIENT CERTIFICATE
 
-  The server you communicate with may require that you can provide this in 
-  order to prove that you actually are who you claim to be.  If the server 
-  doesn't require this, you don't need a client certificate.
+  The server you communicate may require that you can provide this in order to
+  prove that you actually are who you claim to be.  If the server doesn't
+  require this, you don't need a client certificate.
 
   A client certificate is always used together with a private key, and the
   private key has a pass phrase that protects it.
@@ -862,14 +859,14 @@ FAQ
 
   4.3 How can I use {, }, [ or ] to specify multiple URLs?
 
-  Because those letters have a special meaning to the shell, to be used in
+  Because those letters have a special meaning to the shell, and to be used in
   a URL specified to curl you must quote them.
 
-  An example that downloads two URLs (sequentially) would be:
+  An example that downloads two URLs (sequentially) would do:
 
     curl '{curl,www}.haxx.se'
 
-  To be able to use those characters as actual parts of the URL (without using
+  To be able to use those letters as actual parts of the URL (without using
   them for the curl URL "globbing" system), use the -g/--globoff option:
 
     curl -g 'www.site.com/weirdname[].html'
@@ -1019,16 +1016,14 @@ FAQ
 
   4.13 Why is curl -R on Windows one hour off?
 
-  Since curl 7.53.0 this issue should be fixed as long as curl was built with
-  any modern compiler that allows for a 64-bit curl_off_t type. For older
-  compilers or prior curl versions it may set a time that appears one hour off.
-  This happens due to a flaw in how Windows stores and uses file modification
-  times and it is not easily worked around. For more details read this:
-  http://www.codeproject.com/datetime/dstbugs.asp
+  During daylight savings time, when -R is used, curl will set a time that
+  appears one hour off. This happens due to a flaw in how Windows stores and
+  uses file modification times and it is not easily worked around. For details
+  on this problem, read this: http://www.codeproject.com/datetime/dstbugs.asp
 
   4.14 Redirects work in browser but not with curl!
 
-  curl supports HTTP redirects well (see item 3.8). Browsers generally support
+  curl supports HTTP redirects fine (see item 3.8). Browsers generally support
   at least two other ways to perform redirects that curl does not:
 
   Meta tags. You can write a HTML tag that will cause the browser to redirect
@@ -1052,7 +1047,7 @@ FAQ
 
   To use explicit FTPS, you use a FTP:// URL and the --ftp-ssl option (or one
   of its related flavours). This is the most common method, and the one
-  mandated by RFC4217. This kind of connection will then of course use the
+  mandated by RFC4217. This kind of connection then of course uses the
   standard FTP port 21 by default.
 
   4.16 My HTTP POST or PUT requests are slow!
@@ -1060,7 +1055,7 @@ FAQ
   libcurl makes all POST and PUT requests (except for POST requests with a
   very tiny request body) use the "Expect: 100-continue" header. This header
   allows the server to deny the operation early so that libcurl can bail out
-  before having to send any data. This is useful in authentication
+  already before having to send any data. This is useful in authentication
   cases and others.
 
   However, many servers don't implement the Expect: stuff properly and if the
@@ -1088,18 +1083,18 @@ FAQ
 
   4.18 file:// URLs containing drive letters (Windows, NetWare)
 
-  When using curl to try to download a local file, one might use a URL
+  When using cURL to try to download a local file, one might use a URL
   in this format:
 
   file://D:/blah.txt
 
-  You'll find that even if D:\blah.txt does exist, curl returns a 'file
+  You'll find that even if D:\blah.txt does exist, cURL returns a 'file
   not found' error.
 
   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'.
+  host component, and is taken away. Thus, cURL tries to open '/blah.txt'.
   If your system is installed to drive C:, that will resolve to 'C:\blah.txt',
   and if that doesn't exist you will get the not found error.
 
@@ -1112,9 +1107,9 @@ FAQ
 
   file://localhost/D:/blah.txt
 
-  In either case, curl should now be looking for the correct file.
+  In either case, cURL should now be looking for the correct file.
 
-  4.19 Why doesn't curl return an error when the network cable is unplugged?
+  4.19 Why doesn't cURL return an error when the network cable is unplugged?
 
   Unplugging a cable is not an error situation. The TCP/IP protocol stack
   was designed to be fault tolerant, so even though there may be a physical
@@ -1151,7 +1146,7 @@ FAQ
   When doing HTTP transfers, curl will perform exactly what you're asking it
   to do and if successful it will not return an error. You can use curl to
   test your web server's "file not found" page (that gets 404 back), you can
-  use it to check your authentication protected web pages (that gets a 401
+  use it to check your authentication protected web pages (that get a 401
   back) and so on.
 
   The specific HTTP response code does not constitute a problem or error for
@@ -1166,7 +1161,7 @@ FAQ
   libcurl speak).
 
   You can also use the -w option and the variable %{response_code} to extract
-  the exact response code that was returned in the response.
+  the exact response code that was return in the response.
 
   4.21 Why is there a HTTP/1.1 in my HTTP/2 request?
 
@@ -1176,8 +1171,8 @@ FAQ
   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.
+  "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
 
@@ -1259,10 +1254,10 @@ FAQ
   libcurl will reuse connections for all transfers that are made using the
   same libcurl handle.
 
-  When you use the easy interface the connection cache is kept within the easy 
-  handle. If you instead use the multi interface, the connection cache will be 
-  kept within the multi handle and will be shared among all the easy handles 
-  that are used within the same multi handle.
+  When you use the easy interface, the connection cache is kept within the
+  easy handle. If you instead use the multi interface, the connection cache
+  will be kept within the multi handle and will be shared among all the easy
+  handles that are used within the same multi handle.
 
   5.7 Link errors when building libcurl on Windows!
 
@@ -1321,8 +1316,8 @@ FAQ
   you want to change name resolver function you must rebuild libcurl and tell
   it to use a different function.
 
-  - The non-IPv6 resolver that can use one of four different host name resolve 
-  calls (depending on what your system supports):
+  - The non-IPv6 resolver that can use one out of four host name resolve calls
+    (depending on what your system supports):
 
       A - gethostbyname()
       B - gethostbyname_r() with 3 arguments
@@ -1356,7 +1351,7 @@ FAQ
   5.12 Can I make libcurl fake or hide my real IP address?
 
   No. libcurl operates on a higher level. Besides, faking IP address would
-  imply sending IP packets with a made-up source address, and then you normally
+  imply sending IP packet with a made-up source address, and then you normally
   get a problem with receiving the packet sent back as they would then not be
   routed to you!
 
@@ -1386,18 +1381,18 @@ FAQ
 
   libcurl is a C library, it doesn't know anything about C++ member functions.
 
-  You can overcome this "limitation" with relative ease using a static
+  You can overcome this "limitation" with relative ease using a static
   member function that is passed a pointer to the class:
 
      // f is the pointer to your object.
-     static size_t YourClass::func(void *buffer, size_t sz, size_t n, void *f)
+     static YourClass::func(void *buffer, size_t sz, size_t n, void *f)
      {
        // Call non-static member function.
        static_cast<YourClass*>(f)->nonStaticFunction();
      }
 
      // This is how you pass pointer to the static function:
-     curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, YourClass::func);
+     curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, YourClass:func);
      curl_easy_setopt(hcurl, CURLOPT_WRITEDATA, this);
 
   5.15 How do I get an FTP directory listing?
index 551e7d2..ea402c6 100644 (file)
@@ -1,14 +1,20 @@
-How curl Became Like This
+                                  _   _ ____  _
+                              ___| | | |  _ \| |
+                             / __| | | | |_) | |
+                            | (__| |_| |  _ <| |___
+                             \___|\___/|_| \_\_____|
+
+How cURL Became Like This
 =========================
 
 Towards the end of 1996, Daniel Stenberg was spending time writing an IRC bot
 for an Amiga related channel on EFnet. He then came up with the idea to make
 currency-exchange calculations available to Internet Relay Chat (IRC)
-users. All the necessary data were published on the Web; he just needed to
+users. All the necessary data are published on the Web; he just needed to
 automate their retrieval.
 
 Daniel simply adopted an existing command-line open-source tool, httpget, that
-Brazilian Rafael Sagula had written and recently released version 0.1 of. After
+Brazilian Rafael Sagula had written and recently release version 0.1 of. After
 a few minor adjustments, it did just what he needed.
 
 1997
@@ -35,14 +41,14 @@ was revealed to us much later.)
 
 SSL support was added, powered by the SSLeay library.
 
-August: first announcement of curl on freshmeat.net.
+August, first announcement of curl on freshmeat.net.
 
-October: with the curl 4.9 release and the introduction of cookie support,
+October, with the curl 4.9 release and the introduction of cookie support,
 curl was no longer released under the GPL license. Now we're at 4000 lines of
 code, we switched over to the MPL license to restrict the effects of
 "copyleft".
 
-November: configure script and reported successful compiles on several
+November, configure script and reported successful compiles on several
 major operating systems. The never-quite-understood -F option was added and
 curl could now simulate quite a lot of a browser. TELNET support was added.
 
@@ -52,30 +58,30 @@ page. People started making Linux RPM packages out of it.
 1999
 ----
 
-January: DICT support added.
+January, DICT support added.
 
-OpenSSL took over and SSLeay was abandoned.
+OpenSSL took over where SSLeay was abandoned.
 
-May: first Debian package.
+May, first Debian package.
 
-August: LDAP:// and FILE:// support added. The curl web site gets 1300 visits
+August, LDAP:// and FILE:// support added. The curl web site gets 1300 visits
 weekly. Moved site to curl.haxx.nu.
 
-September: Released curl 6.0. 15000 lines of code.
+Released curl 6.0 in September. 15000 lines of code.
 
-December 28: added the project on Sourceforge and started using its services
+December 28, added the project on Sourceforge and started using its services
 for managing the project.
 
 2000
 ----
 
-Spring: major internal overhaul to provide a suitable library interface.
+Spring 2000, major internal overhaul to provide a suitable library interface.
 The first non-beta release was named 7.1 and arrived in August. This offered
 the easy interface and turned out to be the beginning of actually getting
-other software and programs to be based on and powered by libcurl. Almost
+other software and programs to get based on and powered by libcurl. Almost
 20000 lines of code.
 
-June: the curl site moves to "curl.haxx.se"
+June 2000: the curl site moves to "curl.haxx.se"
 
 August, the curl web site gets 4000 visits weekly.
 
@@ -84,40 +90,41 @@ party libcurl binding showed up. CURL has been a supported module in PHP since
 the release of PHP 4.0.2. This would soon get followers. More than 16
 different bindings exist at the time of this writing.
 
-September: kerberos4 support was added.
+September, kerberos4 support was added.
 
-November: started the work on a test suite for curl. It was later re-written
+In November started the work on a test suite for curl. It was later re-written
 from scratch again. The libcurl major SONAME number was set to 1.
 
 2001
 ----
 
-January: Daniel released curl 7.5.2 under a new license again: MIT (or
-MPL). The MIT license is extremely liberal and can be combined with GPL
+January, Daniel released curl 7.5.2 under a new license again: MIT (or
+MPL). The MIT license is extremely liberal and can be used combined with GPL
 in other projects. This would finally put an end to the "complaints" from
 people involved in GPLed projects that previously were prohibited from using
 libcurl while it was released under MPL only. (Due to the fact that MPL is
 deemed "GPL incompatible".)
 
-March 22: curl supports HTTP 1.1 starting with the release of 7.7. This
+curl supports HTTP 1.1 starting with the release of 7.7, March 22 2001. This
 also introduced libcurl's ability to do persistent connections. 24000 lines of
 code. The libcurl major SONAME number was bumped to 2 due to this overhaul.
-The first experimental ftps:// support was added.
 
-August: curl is bundled in Mac OS X, 10.1. It was already becoming more and
+The first experimental ftps:// support was added in March 2001.
+
+August. curl is bundled in Mac OS X, 10.1. It was already becoming more and
 more of a standard utility of Linux distributions and a regular in the BSD
 ports collections. The curl web site gets 8000 visits weekly. Curl Corporation
 contacted Daniel to discuss "the name issue". After Daniel's reply, they have
-never since got back in touch again.
+never since got in touch again.
 
-September: libcurl 7.9 introduces cookie jar and curl_formadd(). During the
+September, libcurl 7.9 introduces cookie jar and curl_formadd(). During the
 forthcoming 7.9.x releases, we introduced the multi interface slowly and
-without many whistles.
+without much whistles.
 
 2002
 ----
 
-June: the curl web site gets 13000 visits weekly. curl and libcurl is
+June, the curl web site gets 13000 visits weekly. curl and libcurl is
 35000 lines of code. Reported successful compiles on more than 40 combinations
 of CPUs and operating systems.
 
@@ -126,15 +133,15 @@ impossible. Around 5000 downloaded packages each week from the main site gives
 a hint, but the packages are mirrored extensively, bundled with numerous OS
 distributions and otherwise retrieved as part of other software.
 
-September: with the release of curl 7.10 it is released under the MIT license
+September, with the release of curl 7.10 it is released under the MIT license
 only.
 
 2003
 ----
 
-January: Started working on the distributed curl tests. The autobuilds.
+January. Started working on the distributed curl tests. The autobuilds.
 
-February: the curl site averages at 20000 visits weekly. At any given moment,
+February, the curl site averages at 20000 visits weekly. At any given moment,
 there's an average of 3 people browsing the curl.haxx.se site.
 
 Multiple new authentication schemes are supported: Digest (May), NTLM (June)
@@ -143,7 +150,7 @@ and Negotiate (June).
 November: curl 7.10.8 is released. 45000 lines of code. ~55000 unique visitors
 to the curl.haxx.se site. Five official web mirrors.
 
-December: full-fledged SSL for FTP is supported.
+December, full-fledged SSL for FTP is supported.
 
 2004
 ----
@@ -157,18 +164,18 @@ curl_formparse() function
 
 August: Curl and libcurl 7.12.1
 
-    Public curl release number:                82
+    Public curl release number:               82
     Releases counted from the very beginning: 109
-    Available command line options:            96
+    Available command line options:           96
     Available curl_easy_setopt() options:     120
-    Number of public functions in libcurl:     36
-    Amount of public web site mirrors:         12
-    Number of known libcurl bindings:          26
+    Number of public functions in libcurl:    36
+    Amount of public web site mirrors:        12
+    Number of known libcurl bindings:         26
 
 2005
 ----
 
-April: GnuTLS can now optionally be used for the secure layer when curl is
+April. GnuTLS can now optionally be used for the secure layer when curl is
 built.
 
 April: Added the multi_socket() API
@@ -182,8 +189,8 @@ December: security vulnerability: libcurl URL Buffer Overflow
 2006
 ----
 
-January: We dropped support for Gopher. We found bugs in the implementation
-that turned out to have been introduced years ago, so with the conclusion that
+January. We dropped support for Gopher. We found bugs in the implementation
+that turned out having been introduced years ago, so with the conclusion that
 nobody had found out in all this time we removed it instead of fixing it.
 
 March: security vulnerability: libcurl TFTP Packet Buffer Overflow
@@ -207,8 +214,8 @@ November:
 
     Command line options:         128
     curl_easy_setopt() options:   158
-    Public functions in libcurl:   58
-    Known libcurl bindings:        37
+    Public functions in libcurl:  58
+    Known libcurl bindings:       37
     Contributors:                 683
 
  145,000 unique visitors. >100 GB downloaded.
@@ -241,11 +248,11 @@ August:
     Public curl releases:         117
     Command line options:         138
     curl_easy_setopt() options:   180
-    Public functions in libcurl:   58
-    Known libcurl bindings:        39
+    Public functions in libcurl:  58
+    Known libcurl bindings:       39
     Contributors:                 808
 
- Gopher support added (re-added actually, see January 2006)
+ Gopher support added (re-added actually)
 
 2012
 ----
index efbe699..cc5a5b3 100644 (file)
@@ -96,31 +96,18 @@ curl tool
 
 curl offers the `--http2` command line option to enable use of HTTP/2.
 
-curl offers the `--http2-prior-knowledge` command line option to enable use of
+curl offers the `--http2-prior-knowledge` command line option to enable use of 
 HTTP/2 without HTTP/1.1 Upgrade.
 
 Since 7.47.0, the curl tool enables HTTP/2 by default for HTTPS connections.
 
-curl tool limitations
----------------------
-
-The command line tool won't do any HTTP/2 multiplexing even though libcurl
-supports it, simply because the curl tool is not written to take advantage of
-the libcurl API that's necessary for this (the multi interface). We have an
-outstanding TODO item for this and **you** can help us make it happen.
-
-The command line tool also doesn't support HTTP/2 server push for the same
-reason it doesn't do multiplexing: it needs to use the multi interface for
-that so that multiplexing is supported.
-
 HTTP Alternative Services
 -------------------------
 
-Alt-Svc is an 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 application and/or let a
-subsequent request use the alternate route automatically.
-
-[Detailed in RFC 7838](https://tools.ietf.org/html/rfc7838)
+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)
index ff260b1..2e1075b 100644 (file)
 
                                 How To Compile
 
-see INSTALL.md
+Installing Binary Packages
+==========================
+
+   Lots of people download binary distributions of curl and libcurl. This
+   document does not describe how to install curl or libcurl using such a
+   binary package. This document describes how to compile, build and install
+   curl and libcurl from source code.
+
+Building from git
+=================
+
+   If you get your code off a git repository, see the GIT-INFO file in the
+   root directory for specific instructions on how to proceed.
+
+Unix
+====
+
+   A normal Unix installation is made in three or four steps (after you've
+   unpacked the source archive):
+
+        ./configure
+        make
+        make test (optional)
+        make install
+
+   You probably need to be root when doing the last command.
+
+   If you have checked out the sources from the git repository, read the
+   GIT-INFO on how to proceed.
+
+   Get a full listing of all available configure options by invoking it like:
+
+        ./configure --help
+
+   If you want to install curl in a different file hierarchy than /usr/local,
+   you need to specify that already when running configure:
+
+        ./configure --prefix=/path/to/curl/tree
+
+   If you happen to have write permission in that directory, you can do 'make
+   install' without being root. An example of this would be to make a local
+   install in your own home directory:
+
+        ./configure --prefix=$HOME
+        make
+        make install
+
+   The configure script always tries to find a working SSL library unless
+   explicitly told not to. If you have OpenSSL installed in the default search
+   path for your compiler/linker, you don't need to do anything special. If
+   you have OpenSSL installed in /usr/local/ssl, you can run configure like:
+
+        ./configure --with-ssl
+
+   If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL)
+   and you have pkg-config installed, set the pkg-config path first, like this:
+
+        env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl
+
+   Without pkg-config installed, use this:
+
+        ./configure --with-ssl=/opt/OpenSSL
+
+   If you insist on forcing a build without SSL support, even though you may
+   have OpenSSL installed in your system, you can run configure like this:
+
+        ./configure --without-ssl
+
+   If you have OpenSSL installed, but with the libraries in one place and the
+   header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
+   environment variables prior to running configure.  Something like this
+   should work:
+
+     (with the Bourne shell and its clones):
+
+        CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
+           ./configure
+
+     (with csh, tcsh and their clones):
+
+        env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
+           ./configure
+
+   If you have shared SSL libs installed in a directory where your run-time
+   linker doesn't find them (which usually causes configure failures), you can
+   provide the -R option to ld on some operating systems to set a hard-coded
+   path to the run-time linker:
+
+        env LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
+
+   MORE OPTIONS
+   ------------
+
+     To force configure to use the standard cc compiler if both cc and gcc are
+     present, run configure like
+
+       CC=cc ./configure
+         or
+       env CC=cc ./configure
+
+     To force a static library compile, disable the shared library creation
+     by running configure like:
+
+       ./configure --disable-shared
+
+     To tell the configure script to skip searching for thread-safe functions,
+     add an option like:
+
+       ./configure --disable-thread
+
+     If you're a curl developer and use gcc, you might want to enable more
+     debug options with the --enable-debug option.
+
+     curl can be built to use a whole range of libraries to provide various
+     useful services, and configure will try to auto-detect a decent
+     default. But if you want to alter it, you can select how to deal with
+     each individual library.
+
+     To build with GnuTLS for SSL/TLS, use both --without-ssl and
+     --with-gnutls.
+
+     To build with Cyassl for SSL/TLS, use both --without-ssl and
+     --with-cyassl.
+
+     To build with NSS for SSL/TLS, use both --without-ssl and --with-nss.
+
+     To build with PolarSSL for SSL/TLS, use both --without-ssl and
+     --with-polarssl.
+
+     To build with axTLS for SSL/TLS, use both --without-ssl and --with-axtls.
+
+     To build with GSS-API support, use --with-gssapi and have the MIT Kerberos
+     or Heimdal packages installed.
+
+     To get support for SCP and SFTP, build with --with-libssh2 and have
+     libssh2 0.16 or later installed.
+
+     To get Metalink support, build with --with-libmetalink and have the
+     libmetalink packages installed.
+
+   SPECIAL CASES
+   -------------
+
+   Some versions of uClibc require configuring with CPPFLAGS=-D_GNU_SOURCE=1
+   to get correct large file support.
+
+   The Open Watcom C compiler on Linux requires configuring with the variables:
+
+       ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \
+           RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra
+
+Win32
+=====
+
+   Building Windows DLLs and C run-time (CRT) linkage issues
+   ---------------------------------------------------------
+
+   As a general rule, building a DLL with static CRT linkage is highly
+   discouraged, and intermixing CRTs in the same app is something to
+   avoid at any cost.
+
+   Reading and comprehension of Microsoft Knowledge Base articles
+   KB94248 and KB140584 is a must for any Windows developer. Especially
+   important is full understanding if you are not going to follow the
+   advice given above.
+
+   KB94248  - How To Use the C Run-Time
+              https://support.microsoft.com/kb/94248/en-us
+
+   KB140584 - How to link with the correct C Run-Time (CRT) library
+              https://support.microsoft.com/kb/140584/en-us
+
+   KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
+              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
+   first to rebuild every single library your app uses as well as your
+   app using the debug multithreaded dynamic C runtime.
+
+   If you get linkage errors read section 5.7 of the FAQ document.
+
+   MingW32
+   -------
+
+   Make sure that MinGW32's bin dir is in the search path, for example:
+
+     set PATH=c:\mingw32\bin;%PATH%
+
+   then run 'mingw32-make mingw32' in the root dir. There are other
+   make targets available to build libcurl with more features, use:
+   'mingw32-make mingw32-zlib' to build with Zlib support;
+   'mingw32-make mingw32-ssl-zlib' to build with SSL and Zlib enabled;
+   'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2, SSL, Zlib;
+   'mingw32-make mingw32-ssh2-ssl-sspi-zlib' to build with SSH2, SSL, Zlib
+   and SSPI support.
+
+   If you have any problems linking libraries or finding header files, be sure
+   to verify that the provided "Makefile.m32" files use the proper paths, and
+   adjust as necessary. It is also possible to override these paths with
+   environment variables, for example:
+
+     set ZLIB_PATH=c:\zlib-1.2.8
+     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!
+   Use 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2 and SSL enabled.
+
+   It is now also possible to build with other LDAP SDKs than MS LDAP;
+   currently it is possible to build with native Win32 OpenLDAP, or with the
+   Novell CLDAP SDK. If you want to use these you need to set these vars:
+
+     set LDAP_SDK=c:\openldap
+     set USE_LDAP_OPENLDAP=1
+
+   or for using the Novell SDK:
+
+     set USE_LDAP_NOVELL=1
+
+   If you want to enable LDAPS support then set LDAPS=1.
+
+   - optional MingW32-built OpenLDAP SDK available from:
+     http://www.gknw.net/mirror/openldap/
+   - optional recent Novell CLDAP SDK available from:
+     https://www.novell.com/developer/ndk/ldap_libraries_for_c.html
+
+   Cygwin
+   ------
+
+   Almost identical to the unix installation. Run the configure script in the
+   curl root with 'sh configure'. Make sure you have the sh executable in
+   /bin/ or you'll see the configure fail toward the end.
+
+   Run 'make'
+
+   Dev-Cpp
+   -------
+
+   See the separate INSTALL.devcpp file for details.
+
+   MSVC 6 caveats
+   --------------
+
+   If you use MSVC 6 it is required that you use the February 2003 edition of
+   the 'Platform SDK' which can be downloaded from:
+
+   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
+   the problems in the first corner or ten miles ahead, depending mostly on your
+   choice of static vs dynamic runtime and third party libraries. Anyone using
+   software built in such way will at some point regret having done so.
+
+   If the compiler has been updated with the installation of a service pack as
+   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
+   software generated in such an environment will be using outdated system
+   header files and libraries with bugs and security issues which have already
+   been addressed and fixed long time ago.
+
+   So, building curl and libcurl with MSVC 6 without PSDK is absolutely
+   discouraged for the benefit of anyone using software built in such
+   environment. And it will not be supported in any way, as we could just
+   be hunting bugs which have already been fixed way back in 2003.
+
+   When building with MSVC 6 we attempt to detect if PSDK is not being used,
+   and if this is the case the build process will fail hard with an error
+   message stating that the February 2003 PSDK is required. This is done to
+   protect the unsuspecting and avoid PEBKAC issues.
+
+   Additionally it might happen that a die hard MSVC hacker still wants to
+   build curl and libcurl with MSVC 6 without PSDK installed, even knowing
+   that this is a highly discouraged and unsupported build environment. In
+   this case the brave of heart will be able to build in such an environment
+   with the requisite of defining preprocessor symbol ALLOW_MSVC6_WITHOUT_PSDK
+   in lib/config-win32.h and knowing that LDAP and IPv6 support will be missing.
+
+   MSVC from command line
+   ----------------------
+
+   Run the 'vcvars32.bat' file to get a proper environment. The
+   vcvars32.bat file is part of the Microsoft development environment and
+   you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
+   provided that you installed Visual C/C++ 6 in the default directory.
+
+   Then run 'nmake vc' in curl's root directory.
+
+   If you want to compile with zlib support, you will need to build
+   zlib (http://www.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:
+
+     set ZLIB_PATH=c:\zlib-1.2.8
+
+   Then run 'nmake vc-zlib' in curl's root directory.
+
+   If you want to compile with SSL support you need the OpenSSL package.
+   Please read the OpenSSL documentation on how to compile and install
+   the OpenSSL libraries.  The build process of OpenSSL generates the
+   libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
+   the OpenSSL home directory.  OpenSSL static libraries (libeay32.lib,
+   ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
+
+   Before running nmake define the OPENSSL_PATH environment variable with
+   the root/base directory of OpenSSL, for example:
+
+     set OPENSSL_PATH=c:\openssl-0.9.8zc
+
+   Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
+   directory.  'nmake vc-ssl' will create a libcurl static and dynamic
+   libraries in the lib subdirectory, as well as a statically linked
+   version of curl.exe in the src subdirectory.  This statically linked
+   version is a standalone executable not requiring any DLL at
+   runtime. This make method requires that you have the static OpenSSL
+   libraries available in OpenSSL's out32 subdirectory.
+   'nmake vc-ssl-dll' creates the libcurl dynamic library and
+   links curl.exe against libcurl and OpenSSL dynamically.
+   This executable requires libcurl.dll and the OpenSSL DLLs
+   at runtime.
+   Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
+
+   MSVC IDE
+   --------
+
+   A fairly comprehensive set of Visual Studio project files are available for
+   v6.0 through v12.0 and are located in the projects folder to allow proper
+   building of both the libcurl library as well as the curl tool.
+
+   For more information about these projects and building via Visual Studio
+   please see the README file located in the projects folder.
+
+   Borland C++ compiler
+   --------------------
+
+   Ensure that your build environment is properly set up to use the compiler
+   and associated tools. PATH environment variable must include the path to
+   bin subdirectory of your compiler installation, eg: c:\Borland\BCC55\bin
+
+   It is advisable to set environment variable BCCDIR to the base path of
+   the compiler installation.
+
+     set BCCDIR=c:\Borland\BCC55
+
+   In order to build a plain vanilla version of curl and libcurl run the
+   following command from curl's root directory:
+
+     make borland
+
+   To build curl and libcurl with zlib and OpenSSL support set environment
+   variables ZLIB_PATH and OPENSSL_PATH to the base subdirectories of the
+   already built zlib and OpenSSL libraries and from curl's root directory
+   run command:
+
+     make borland-ssl-zlib
+
+   libcurl library will be built in 'lib' subdirectory while curl tool
+   is built in 'src' subdirectory. In order to use libcurl library it is
+   advisable to modify compiler's configuration file bcc32.cfg located
+   in c:\Borland\BCC55\bin to reflect the location of libraries include
+   paths for example the '-I' line could result in something like:
+
+     -I"c:\Borland\BCC55\include;c:\curl\include;c:\openssl\inc32"
+
+   bcc3.cfg '-L' line could also be modified to reflect the location of
+   of libcurl library resulting for example:
+
+     -L"c:\Borland\BCC55\lib;c:\curl\lib;c:\openssl\out32"
+
+   In order to build sample program 'simple.c' from the docs\examples
+   subdirectory run following command from mentioned subdirectory:
+
+     bcc32 simple.c libcurl.lib cw32mt.lib
+
+   In order to build sample program simplessl.c an SSL enabled libcurl
+   is required, as well as the OpenSSL libeay32.lib and ssleay32.lib
+   libraries.
+
+   OTHER MSVC IDEs
+   ---------------
+
+   If you use VC++, Borland or similar compilers. Include all lib source
+   files in a static lib "project" (all .c and .h files that is).
+   (you should name it libcurl or similar)
+
+   Make the sources in the src/ drawer be a "win32 console application"
+   project. Name it curl.
+
+   Disabling Specific Protocols in Win32 builds
+   --------------------------------------------
+
+   The configure utility, unfortunately, is not available for the Windows
+   environment, therefore, you cannot use the various disable-protocol
+   options of the configure utility on this platform.
+
+   However, you can use the following defines to disable specific
+   protocols:
+
+   HTTP_ONLY             disables all protocols except HTTP
+   CURL_DISABLE_FTP      disables FTP
+   CURL_DISABLE_LDAP     disables LDAP
+   CURL_DISABLE_TELNET   disables TELNET
+   CURL_DISABLE_DICT     disables DICT
+   CURL_DISABLE_FILE     disables FILE
+   CURL_DISABLE_TFTP     disables TFTP
+   CURL_DISABLE_HTTP     disables HTTP
+   CURL_DISABLE_IMAP     disables IMAP
+   CURL_DISABLE_POP3     disables POP3
+   CURL_DISABLE_SMTP     disables SMTP
+
+   If you want to set any of these defines you have the following options:
+
+   - Modify lib/config-win32.h
+   - Modify lib/curl_setup.h
+   - Modify lib/Makefile.vc6
+   - Modify the "Preprocessor Definitions" in the libcurl project
+
+   Note: The pre-processor settings can be found using the Visual Studio IDE
+   under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
+   Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
+   versions.
+
+   Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds
+   --------------------------------------------------------------------
+
+   In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack
+   it is necessary to make definition of preprocessor symbol USE_LWIPSOCK
+   visible to libcurl and curl compilation processes. To set this definition
+   you have the following alternatives:
+
+   - Modify lib/config-win32.h and src/config-win32.h
+   - Modify lib/Makefile.vc6
+   - Modify the "Preprocessor Definitions" in the libcurl project
+
+   Note: The pre-processor settings can be found using the Visual Studio IDE
+   under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
+   Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
+   versions.
+
+   Once that libcurl has been built with BSD-style lwIP TCP/IP stack support,
+   in order to use it with your program it is mandatory that your program
+   includes lwIP header file <lwip/opt.h> (or another lwIP header that includes
+   this) before including any libcurl header. Your program does not need the
+   USE_LWIPSOCK preprocessor definition which is for libcurl internals only.
+
+   Compilation has been verified with lwIP 1.4.0 and contrib-1.4.0 from:
+
+   http://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip
+   http://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip
+
+   This BSD-style lwIP TCP/IP stack support must be considered experimental
+   given that it has been verified that lwIP 1.4.0 still needs some polish,
+   and libcurl might yet need some additional adjustment, caveat emptor.
+
+   Important static libcurl usage note
+   -----------------------------------
+
+   When building an application that uses the static libcurl library, you must
+   add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will look for
+   dynamic import symbols.
+
+   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
+======================
+
+   On recent Apple operating systems, curl can be built to use Apple's
+   SSL/TLS implementation, Secure Transport, instead of OpenSSL. To build with
+   Secure Transport for SSL/TLS, use the configure option --with-darwinssl. (It
+   is not necessary to use the option --without-ssl.) This feature requires iOS
+   5.0 or later, or OS X 10.5 ("Leopard") or later.
+
+   When Secure Transport is in use, the curl options --cacert and --capath and
+   their libcurl equivalents, will be ignored, because Secure Transport uses
+   the certificates stored in the Keychain to evaluate whether or not to trust
+   the server. This, of course, includes the root certificates that ship with
+   the OS. The --cert and --engine options, and their libcurl equivalents, are
+   currently unimplemented in curl with Secure Transport.
+
+   For OS X users: In OS X 10.8 ("Mountain Lion"), Apple made a major
+   overhaul to the Secure Transport API that, among other things, added
+   support for the newer TLS 1.1 and 1.2 protocols. To get curl to support
+   TLS 1.1 and 1.2, you must build curl on Mountain Lion or later, or by
+   using the equivalent SDK. If you set the MACOSX_DEPLOYMENT_TARGET
+   environmental variable to an earlier version of OS X prior to building curl,
+   then curl will use the new Secure Transport API on Mountain Lion and later,
+   and fall back on the older API when the same curl binary is executed on
+   older cats. For example, running these commands in curl's directory in the
+   shell will build the code such that it will run on cats as old as OS X 10.6
+   ("Snow Leopard") (using bash):
+
+      export MACOSX_DEPLOYMENT_TARGET="10.6"
+      ./configure --with-darwinssl
+      make
+
+IBM OS/2
+========
+
+   Building under OS/2 is not much different from building under unix.
+   You need:
+
+      - emx 0.9d
+      - GNU make
+      - GNU patch
+      - ksh
+      - GNU bison
+      - GNU file utilities
+      - GNU sed
+      - autoconf 2.13
+
+   If you want to build with OpenSSL or OpenLDAP support, you'll need to
+   download those libraries, too. Dirk Ohme has done some work to port SSL
+   libraries under OS/2, but it looks like he doesn't care about emx.  You'll
+   find his patches on: http://come.to/Dirk_Ohme
+
+   If during the linking you get an error about _errno being an undefined
+   symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
+   in your definitions.
+
+   If everything seems to work fine but there's no curl.exe, you need to add
+   -Zexe to your linker flags.
+
+   If you're getting huge binaries, probably your makefiles have the -g in
+   CFLAGS.
+
+VMS
+===
+
+   (The VMS section is in whole contributed by the friendly Nico Baggus)
+
+   Curl seems to work with FTP & HTTP other protocols are not tested.  (the
+   perl http/ftp testing server supplied as testing too cannot work on VMS
+   because vms has no concept of fork(). [ I tried to give it a whack, but
+   that's of no use.
+
+   SSL stuff has not been ported.
+
+   Telnet has about the same issues as for Win32. When the changes for Win32
+   are clear maybe they'll work for VMS too. The basic problem is that select
+   ONLY works for sockets.
+
+   Marked instances of fopen/[f]stat that might become a problem, especially
+   for non stream files. In this regard, the files opened for writing will be
+   created stream/lf and will thus be safe. Just keep in mind that non-binary
+   read/wring from/to files will have a records size limit of 32767 bytes
+   imposed.
+
+   Stat to get the size of the files is again only safe for stream files &
+   fixed record files without implied CC.
+
+   -- My guess is that only allowing access to stream files is the quickest
+   way to get around the most issues. Therefore all files need to to be
+   checked to be sure they will be stream/lf before processing them.  This is
+   the easiest way out, I know. The reason for this is that code that needs to
+   report the filesize will become a pain in the ass otherwise.
+
+   Exit status.... Well we needed something done here,
+
+   VMS has a structured exist status:
+   | 3  |       2    |     1       |  0|
+   |1098|765432109876|5432109876543|210|
+   +----+------------+-------------+---+
+   |Ctrl|  Facility  | Error code  |sev|
+   +----+------------+-------------+---+
+
+   With the Ctrl-bits an application can tell if part or the whole message has
+   already been printed from the program, DCL doesn't need to print it again.
+
+   Facility - basically the program ID. A code assigned to the program
+   the name can be fetched from external or internal message libraries
+   Error code - the err codes assigned by the application
+   Sev. - severity: Even = error, off = non error
+
+      0 = Warning
+      1 = Success
+      2 = Error
+      3 = Information
+      4 = Fatal
+      <5-7> reserved.
+
+   This all presents itself with:
+   %<FACILITY>-<Sev>-<Errorname>, <Error message>
+
+   See also the src/curlmsg.msg file, it has the source for the messages In
+   src/main.c a section is devoted to message status values, the globalvalues
+   create symbols with certain values, referenced from a compiled message
+   file. Have all exit function use a exit status derived from a translation
+   table with the compiled message codes.
+
+   This was all compiled with:
+
+      Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
+
+   So far for porting notes as of:
+
+   13-jul-2001
+   N. Baggus
+
+QNX
+===
+
+   (This section was graciously brought to us by David Bentham)
+
+   As QNX is targeted for resource constrained environments, the QNX headers
+   set conservative limits. This includes the FD_SETSIZE macro, set by default
+   to 32. Socket descriptors returned within the CURL library may exceed this,
+   resulting in memory faults/SIGSEGV crashes when passed into select(..)
+   calls using fd_set macros.
+
+   A good all-round solution to this is to override the default when building
+   libcurl, by overriding CFLAGS during configure, example
+
+   #  configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
+
+RISC OS
+=======
+
+   The library can be cross-compiled using gccsdk as follows:
+
+        CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
+             --host=arm-riscos-aof --without-random --disable-shared
+        make
+
+   where riscos-gcc and riscos-ar are links to the gccsdk tools.
+   You can then link your program with curl/lib/.libs/libcurl.a
+
+AmigaOS
+=======
+
+   (This section was graciously brought to us by Diego Casorran)
+
+   To build cURL/libcurl on AmigaOS just type 'make amiga' ...
+
+   What you need is:    (not tested with others versions)
+
+        GeekGadgets / gcc 2.95.3 (http://www.geekgadgets.org/)
+
+        AmiTCP SDK v4.3 (http://www.aminet.net/comm/tcp/AmiTCP-SDK-4.3.lha)
+
+        Native Developer Kit (http://www.amiga.com/3.9/download/NDK3.9.lha)
+
+   As no ixemul.library is required you will be able to build it for
+   WarpOS/PowerPC (not tested by me), as well a MorphOS version should be
+   possible with no problems.
+
+   To enable SSL support, you need a OpenSSL native version (without ixemul),
+   you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
+
+NetWare
+=======
+
+   To compile curl.nlm / libcurl.nlm you need:
+
+   - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
+   - gnu make and awk running on the platform you compile on;
+     native Win32 versions can be downloaded from:
+     http://www.gknw.net/development/prgtools/
+   - recent Novell LibC or Novell CLib SDK available from:
+     https://www.novell.com/developer/ndk/
+   - optional recent Novell CLDAP SDK available from:
+     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/
+   - optional OpenSSL sources (version 0.9.8 or later build with BSD sockets);
+     you can find precompiled packages at:
+     http://www.gknw.net/development/ossl/netware/
+     for CLIB-based builds OpenSSL 0.9.8h or later is required  - earlier versions
+     don't support building with CLIB BSD sockets.
+   - optional SSH2 sources (version 0.17 or later);
+
+   Set a search path to your compiler, linker and tools; on Linux make
+   sure that the var OSTYPE contains the string 'linux'; set the var
+   NDKBASE to point to the base of your Novell NDK; and then type
+   'make netware' from the top source directory; other targets available
+   are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares';
+   if you need other combinations you can control the build with the
+   environment variables WITH_SSL, WITH_ZLIB, WITH_ARES, WITH_SSH2, and
+   ENABLE_IPV6; you can set LINK_STATIC=1 to link curl.nlm statically.
+   By default LDAP support is enabled, however currently you will need a patch
+   in order to use the CLDAP NDK with BSD sockets (Novell Bug 300237):
+   http://www.gknw.net/test/curl/cldap_ndk/ldap_ndk.diff
+   I found on some Linux systems (RH9) that OS detection didn't work although
+   a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
+   with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
+   Any help in testing appreciated!
+   Builds automatically created 8 times a day from current git are here:
+   http://www.gknw.net/mirror/curl/autobuilds/
+   the status of these builds can be viewed at the autobuild table:
+   https://curl.haxx.se/dev/builds.html
+
+eCos
+====
+
+   curl does not use the eCos build system, so you must first build eCos
+   separately, then link curl to the resulting eCos library.  Here's a sample
+   configure line to do so on an x86 Linux box targeting x86:
+
+   GCCLIB=`gcc -print-libgcc-file-name` && \
+   CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \
+    -I`dirname $GCCLIB`/include" \
+   LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \
+    -L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \
+   ./configure --host=i386 --disable-shared \
+    --without-ssl --without-zlib --disable-manual --disable-ldap
+
+   In most cases, eCos users will be using libcurl from within a custom
+   embedded application.  Using the standard 'curl' executable from
+   within eCos means facing the limitation of the standard eCos C
+   startup code which does not allow passing arguments in main().  To
+   run 'curl' from eCos and have it do something useful, you will need
+   to either modify the eCos startup code to pass in some arguments, or
+   modify the curl application itself to retrieve its arguments from
+   some location set by the bootloader or hard-code them.
+
+   Something like the following patch could be used to hard-code some
+   arguments.  The MTAB_ENTRY line mounts a RAM disk as the root filesystem
+   (without mounting some kind of filesystem, eCos errors out all file
+   operations which curl does not take to well).  The next section synthesizes
+   some command-line arguments for curl to use, in this case to direct curl
+   to read further arguments from a file.  It then creates that file on the
+   RAM disk and places within it a URL to download: a file: URL that
+   just happens to point to the configuration file itself.  The results
+   of running curl in this way is the contents of the configuration file
+   printed to the console.
+
+--- src/main.c  19 Jul 2006 19:09:56 -0000    1.363
++++ src/main.c  24 Jul 2006 21:37:23 -0000
+@@ -4286,11 +4286,31 @@
+ }
+
+
++#ifdef __ECOS
++#include <cyg/fileio/fileio.h>
++MTAB_ENTRY( testfs_mte1,
++                   "/",
++                   "ramfs",
++                   "",
++                   0);
++#endif
+
+ int main(int argc, char *argv[])
+ {
+   int res;
+   struct Configurable config;
++#ifdef __ECOS
++  char *args[] = {"ecos-curl", "-K", "curlconf.txt"};
++  FILE *f;
++  argc = sizeof(args)/sizeof(args[0]);
++  argv = args;
++
++  f = fopen("curlconf.txt", "w");
++  if (f) {
++    fprintf(f, "--url file:curlconf.txt");
++    fclose(f);
++  }
++#endif
+   memset(&config, 0, sizeof(struct Configurable));
+
+   config.errors = stderr; /* default errors to stderr */
+
+Minix
+=====
+
+   curl can be compiled on Minix 3 using gcc or ACK (starting with
+   ver. 3.1.3).  Ensure that GNU gawk and bash are both installed and
+   available in the PATH.
+
+   ACK
+   ---
+   Increase the heap sizes of the compiler with the command:
+
+     binsizes xxl
+
+   then configure and compile curl with:
+
+     ./configure CC=cc LD=cc AR=/usr/bin/aal GREP=grep \
+      CPPFLAGS='-D_POSIX_SOURCE=1 -I/usr/local/include'
+     make
+     chmem =256000 src/curl
+
+   GCC
+   ---
+   Make sure gcc is in your PATH with the command:
+
+     export PATH=/usr/gnu/bin:$PATH
+
+   then configure and compile curl with:
+
+     ./configure CC=gcc AR=/usr/gnu/bin/gar GREP=grep
+     make
+     chmem =256000 src/curl
+
+Symbian OS
+==========
+
+   The Symbian OS port uses the Symbian build system to compile.  From the
+   packages/Symbian/group/ directory, run:
+
+      bldmake bldfiles
+      abld build
+
+   to compile and install curl and libcurl using SBSv1. If your Symbian
+   SDK doesn't include support for P.I.P.S., you will need to contact
+   your SDK vendor to obtain that first.
+
+VxWorks
+========
+
+   Build for VxWorks is performed using cross compilation.
+   That means you build on Windows machine using VxWorks tools and
+   run the built image on the VxWorks device.
+
+   To build libcurl for VxWorks you need:
+
+      - CYGWIN (free, https://cygwin.com/)
+      - Wind River Workbench (commercial)
+
+   If you have CYGWIN and Workbench installed on you machine
+   follow after next steps:
+
+    1. Open the Command Prompt window and change directory ('cd')
+       to the libcurl 'lib' folder.
+    2. Add CYGWIN 'bin' folder to the PATH environment variable.
+       For example, type 'set PATH=C:/embedded/cygwin/bin;%PATH%'.
+    3. Adjust environment variables defined in 'Environment' section
+       of the Makefile.vxworks file to point to your software folders.
+    4. Build the libcurl by typing 'make -f ./Makefile.vxworks'
+
+   As a result the libcurl.a library should be created in the 'lib' folder.
+   To clean the build results type 'make -f ./Makefile.vxworks clean'.
+
+Android
+=======
+
+   Method using the static makefile:
+
+      - see the build notes in the packages/Android/Android.mk file.
+
+   Method using a configure cross-compile (tested with Android NDK r7c, r8):
+
+      - prepare the toolchain of the Android NDK for standalone use; this can
+        be done by invoking the script:
+        ./build/tools/make-standalone-toolchain.sh
+        which creates a usual cross-compile toolchain. Lets assume that you put
+        this toolchain below /opt then invoke configure with something like:
+        export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH
+        ./configure --host=arm-linux-androideabi [more configure options]
+        make
+      - if you want to compile directly from our GIT repo you might run into
+        this issue with older automake stuff:
+        checking host system type...
+        Invalid configuration `arm-linux-androideabi':
+        system `androideabi' not recognized
+        configure: error: /bin/sh ./config.sub arm-linux-androideabi failed
+        this issue can be fixed with using more recent versions of config.sub
+        and config.guess which can be obtained here:
+        http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree
+        you need to replace your system-own versions which usually can be
+        found in your automake folder:
+        find /usr -name config.sub
+
+   Wrapper for pkg-config:
+
+      - In order to make proper use of pkg-config so that configure is able to
+        find all dependencies you should create a wrapper script for pkg-config;
+        file /opt/arm-linux-androideabi-4.4.3/bin/arm-linux-androideabi-pkg-config:
+
+        #!/bin/sh
+        SYSROOT=$(dirname ${0%/*})/sysroot
+        export PKG_CONFIG_DIR=
+        export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/local/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig
+        export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
+        exec pkg-config "$@"
+
+        also create a copy or symlink with name arm-unknown-linux-androideabi-pkg-config.
+
+CROSS COMPILE
+=============
+
+   (This section was graciously brought to us by Jim Duey, with additions by
+   Dan Fandrich)
+
+   Download and unpack the cURL package.
+
+   'cd' to the new directory. (e.g. cd curl-7.12.3)
+
+   Set environment variables to point to the cross-compile toolchain and call
+   configure with any options you need.  Be sure and specify the '--host' and
+   '--build' parameters at configuration time.  The following script is an
+   example of cross-compiling for the IBM 405GP PowerPC processor using the
+   toolchain from MonteVista for Hardhat Linux.
+
+   (begin script)
+
+   #! /bin/sh
+
+   export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
+   export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
+   export AR=ppc_405-ar
+   export AS=ppc_405-as
+   export LD=ppc_405-ld
+   export RANLIB=ppc_405-ranlib
+   export CC=ppc_405-gcc
+   export NM=ppc_405-nm
+
+   ./configure --target=powerpc-hardhat-linux \
+        --host=powerpc-hardhat-linux \
+        --build=i586-pc-linux-gnu \
+        --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
+        --exec-prefix=/usr/local
+
+   (end script)
+
+   You may also need to provide a parameter like '--with-random=/dev/urandom'
+   to configure as it cannot detect the presence of a random number
+   generating device for a target system.  The '--prefix' parameter
+   specifies where cURL will be installed.  If 'configure' completes
+   successfully, do 'make' and 'make install' as usual.
+
+   In some cases, you may be able to simplify the above commands to as
+   little as:
+
+       ./configure --host=ARCH-OS
+
+REDUCING SIZE
+=============
+
+   There are a number of configure options that can be used to reduce the
+   size of libcurl for embedded applications where binary size is an
+   important factor.  First, be sure to set the CFLAGS variable when
+   configuring with any relevant compiler optimization flags to reduce the
+   size of the binary.  For gcc, this would mean at minimum the -Os option,
+   and potentially the -march=X, -mdynamic-no-pic and -flto options as well,
+   e.g.
+
+      ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'...
+
+   Note that newer compilers often produce smaller code than older versions
+   due to improved optimization.
+
+   Be sure to specify as many --disable- and --without- flags on the configure
+   command-line as you can to disable all the libcurl features that you
+   know your application is not going to need.  Besides specifying the
+   --disable-PROTOCOL flags for all the types of URLs your application
+   will not use, here are some other flags that can reduce the size of the
+   library:
+
+     --disable-ares (disables support for the C-ARES DNS library)
+     --disable-cookies (disables support for HTTP cookies)
+     --disable-crypto-auth (disables HTTP cryptographic authentication)
+     --disable-ipv6 (disables support for IPv6)
+     --disable-manual (disables support for the built-in documentation)
+     --disable-proxy (disables support for HTTP and SOCKS proxies)
+     --disable-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)
+     --without-ssl (disables support for SSL/TLS)
+     --without-zlib (disables support for on-the-fly decompression)
+
+   The GNU compiler and linker have a number of options that can reduce the
+   size of the libcurl dynamic libraries on some platforms even further.
+   Specify them by providing appropriate CFLAGS and LDFLAGS variables on the
+   configure command-line, e.g.
+
+     CFLAGS="-Os -ffunction-sections -fdata-sections \
+             -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
+   compiling using 'strip' (or the appropriate variant if cross-compiling).
+   If space is really tight, you may be able to remove some unneeded
+   sections of the shared library using the -R option to objcopy (e.g. the
+   .comment section).
+
+   Using these techniques it is possible to create a basic HTTP-only shared
+   libcurl library for i386 Linux platforms that is only 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.
+
+   Note that the curl test harness can detect the use of some, but not all, of
+   the --disable statements suggested above. Use will cause tests relying on
+   those features to fail.  The test harness can be manually forced to skip
+   the relevant tests by specifying certain key words on the runtests.pl
+   command line.  Following is a list of appropriate key words:
+
+     --disable-cookies          !cookies
+     --disable-manual           !--manual
+     --disable-proxy            !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5
+
+PORTS
+=====
+
+   This is a probably incomplete list of known hardware and operating systems
+   that curl has been compiled for. If you know a system curl compiles and
+   runs on, that isn't listed, please let us know!
+
+        - Alpha DEC OSF 4
+        - Alpha Digital UNIX v3.2
+        - Alpha FreeBSD 4.1, 4.5
+        - Alpha Linux 2.2, 2.4
+        - Alpha NetBSD 1.5.2
+        - Alpha OpenBSD 3.0
+        - Alpha OpenVMS V7.1-1H2
+        - Alpha Tru64 v5.0 5.1
+        - AVR32 Linux
+        - ARM Android 1.5, 2.1, 2.3, 3.2, 4.x
+        - ARM INTEGRITY
+        - ARM iOS
+        - Cell Linux
+        - Cell Cell OS
+        - HP-PA HP-UX 9.X 10.X 11.X
+        - HP-PA Linux
+        - HP3000 MPE/iX
+        - MicroBlaze uClinux
+        - MIPS IRIX 6.2, 6.5
+        - MIPS Linux
+        - OS/400
+        - Pocket PC/Win CE 3.0
+        - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
+        - PowerPC Darwin 1.0
+        - PowerPC INTEGRITY
+        - PowerPC Linux
+        - PowerPC Mac OS 9
+        - PowerPC Mac OS X
+        - SH4 Linux 2.6.X
+        - SH4 OS21
+        - SINIX-Z v5
+        - Sparc Linux
+        - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
+        - Sparc SunOS 4.1.X
+        - StrongARM (and other ARM) RISC OS 3.1, 4.02
+        - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
+        - StrongARM NetBSD 1.4.1
+        - Symbian OS (P.I.P.S.) 9.x
+        - TPF
+        - Ultrix 4.3a
+        - UNICOS 9.0
+        - i386 BeOS
+        - i386 DOS
+        - i386 eCos 1.3.1
+        - i386 Esix 4.1
+        - i386 FreeBSD
+        - i386 HURD
+        - i386 Haiku OS
+        - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
+        - i386 Mac OS X
+        - i386 MINIX 3.1
+        - i386 NetBSD
+        - i386 Novell NetWare
+        - i386 OS/2
+        - i386 OpenBSD
+        - i386 QNX 6
+        - i386 SCO unix
+        - i386 Solaris 2.7
+        - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
+        - i486 ncr-sysv4.3.03 (NCR MP-RAS)
+        - ia64 Linux 2.3.99
+        - m68k AmigaOS 3
+        - m68k Linux
+        - m68k uClinux
+        - m68k OpenBSD
+        - m88k dg-dgux5.4R3.00
+        - s390 Linux
+        - x86_64 Linux
+        - XScale/PXA250 Linux 2.4
+        - Nios II uClinux
+
+Useful URLs
+===========
+
+axTLS        http://axtls.sourceforge.net/
+c-ares       http://c-ares.haxx.se/
+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      https://www.libssh2.org/
+MIT Kerberos http://web.mit.edu/kerberos/www/dist/
+NSS          https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
+OpenLDAP     http://www.openldap.org/
+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/
+MinGW-w64    http://mingw-w64.sourceforge.net/
+OpenWatcom   http://www.openwatcom.org/
diff --git a/docs/INSTALL.devcpp b/docs/INSTALL.devcpp
new file mode 100644 (file)
index 0000000..f989d52
--- /dev/null
@@ -0,0 +1,302 @@
+DevCpp-Mingw Install & Compilation                                   Sept 2005
+==================================
+
+Reference Emails available at curl@haxx.se:
+
+  Libcurl Install and Use Issues
+  Awaiting an Answer for Win 32 Install
+  res = curl_easy_perform(curl); Error
+  Makefile Issues
+
+
+Having previously done a thorough review of what was available that met my
+requirements under GPL, I settled for Libcurl as the software of choice for
+many reasons not the least of which was the support.
+
+Background
+----------
+
+This quest started when I innocently tried to incorporate the libcurl library
+into my simple source code. I figured that a few easy steps would accomplish
+this without major headaches. I had no idea that I would be facing an almost
+insurmountable challenge.
+
+The main problem lies in two areas. First the bulk of support for libcurl
+exists for a Unix/linux command line environments. This is of little help when
+it comes to Windows O/S.
+
+Secondly the help that does exist for the Windows O/S focused around mingw
+through a command line argument environment.
+
+You may ask "Why is this a problem?"
+
+I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with
+DevCpp, it is a window shell GUI that replaces the command line environment
+for gcc. A definite improvement that I am unwilling to give up. However using
+DevCpp presented its own set of issues. Inadvertently I also made some
+careless errors such as compiling the 7.14 version of Makefile with an older
+version of source code. Thanks to Dan Fandrich for picking this up.
+
+I did eventually with the help of Daniel, Phillipe and others manage to
+implement successfully (the only mingw available version)
+curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the
+dynamic libcurl.dll libcurldll.a libraries worked. The static library which I
+was interested in did not. Furthermore when I tried to implement one of the
+examples included with the curl package (get info.c) it caused the executable
+to crash. Tracing the bug I found it in the code and function res =
+curl_easy_perform(curl);.
+
+At this point I had to make a choice as to whether invest my limited
+time-energy resource to fixing the bug or to compile the new version
+available. After searching the archives I found a very similar or the same bug
+reported from version 7.12x on. Daniel did inform me that he thought that this
+bug had been fixed with the latest version. So I proceeded to compile the
+latest SSL version where I faced other challenges.
+
+In order to make this process unremarkable for others using the same
+environment I decided to document the process so that others will find it
+routine. It would be a shame if newbies could not implement this excellent
+package for their use.
+
+I would like to thank the many others in this forum and in the DevCpp forum
+for their help. Without your help I may either have given up or it would have
+taken me many times longer to achieve success.
+
+The Cookbook Approach
+---------------------
+
+This discussion will be confined to a SSL static library compilation and
+installation. Limited mention and comments will be inserted where appropriate
+to help with non-SSL, dynamic libraries and executables.
+
+
+   Using Makefile from DevCpp to compile Libcurl libraries
+
+Preamble
+--------
+
+Using the latest version release - curl-7.14.0.tar.gz. Curl source code is
+platform independent. This simply means that the source code can be compiled
+for any Operating System (Linux/Unix Windows etc. and variations of thereof).
+
+The first thing to note is that inside curl-7.14.0 you will find two folders
+lib and src. Both contain Makefile.m32 (required for win mingw library or exe
+compilation) files which are different. The main difference between these two
+folders and the makefiles is that the src folder contents are used to compile
+an executable file(curl.exe) while the lib folder contents are used to compile
+a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be
+used to compile libcurl with your own source code so that one can use and
+access all libcurl functions.
+
+Before we start please make sure that DevCpp is installed properly. In
+particular make sure you have no spaces in the name of any of the directories
+and subdirectories where DevCpp is installed. Failure to comply with the
+install instructions may produce erratic behaviour in DevCpp. For further info
+check the following sites
+
+http://aditsu.freeunixhost.com/dev-cpp-faq.html
+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;
+just substitute the src folder makefile in its stead.
+
+First use a text processor Notepad, or your own favourite text processor. To
+engage your favourite text processor, select Makefile.m32 click once with your
+mouse on file icon; icon turns blue, press the shift key and right-click on
+mouse, menu appears select "Open with", select your favourite text processor.
+
+Next read the contents of Makefile.m32. It includes instructions on its use.
+
+Method I - DOS Command Line
+---------------------------
+
+Note - The only reason I have included this method is that Method II which is
+the preferred method for compiling does not allow for the setting of option
+switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the
+Dev-Cpp forum.
+
+1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original"
+place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example)
+
+2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
+version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that
+the make.exe file resides in this folder. Make.exe will use - Makefile.m32,
+Makefile.inc, and the source code included in the lib folder to compile the
+source code. There is a PATH issue with make.exe that remains unresolved at
+least for me. Unless the entire source code to be compiled is placed entirely
+within the directory of make.exe an error message will be generated - "file
+xxxx.yyy not available".
+
+3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window
+quickly pop up and close very quickly. Not to worry! Please do not skip this
+step.
+
+4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up
+Type the disk drive letter (e.g. E: ) engage the enter button. The path should
+automatically take you to the directory of the make.exe file.
+
+5- To compile the source code simply type at the DOS prompt make -f
+Makefile.m32 as per instructions contained in the Makefile.m32 file (use any
+text processor to read instructions). I don't believe that this makefile
+allows for the option of non SSL. Ignore any warnings.
+
+6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o
+compilations you might need in another directory outside of the bin directory
+as you will need this files shortly to set up libcurl for use with
+Dev-cpp. For most apps *.o is not required. Later on we will show what to do
+with these files.
+
+7- You are finished but before closing we need to do cleanup - erase the bin
+folder and rename the "bin Original" folder created in step 1 to bin.
+
+Note to compile a curl executable the process is probably similar but instead
+of using the LIB folder contents use the SRC folder contents and Makefiles in
+curl-7.14.0.tar.gz. File directories relative placements must be respected for
+compiling to take place successfully. This may not be possible with the PATH
+problem that make.exe experiences. If anyone has solved this PATH issue and
+please make sure it actually works on Win 9x/2000/XP before letting me
+know. Then please let me or Daniel in on the solution so that it can be
+included with these instructions. Thanks.
+
+or
+
+Method II - Dev-Cpp GUI
+-----------------------
+
+1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
+version into any folder outside of (Dev-Cpp\bin).
+
+2- Drop the File/New/click on Project.
+
+3- New Project Dialogue box appears. Double click on the Static Library.
+
+4- Create Project Dialogue box appears. Select the LIB folder location to
+place and locate your Project File Name. Placing the Project File Name
+elsewhere may cause problems (PATH issue problem again).
+
+5- Drop down the Project/Project Options. Project Options Dialogue box
+appears.
+
+6- Select the Makefile tab in the Project Options Dialogue Box. Check Box -
+Use Custom Makefile. Click on the Folder icon at the extreme right of the
+Check Box. Select Makefile.m32 in the folder wherever you have placed the
+contents of the LIB Folder. Press OK and close the Dialogue Box.
+
+7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box
+appears.  The Dialogue Box should open in the folder wherever you have placed
+the contents of the LIB Folder. If not go there.
+
+8- Select Crtl-A to select all files in the LIB folder. Click on open to add
+files and close box. Wait till all files are added. This may take 30 seconds
+or longer.
+
+9- Drop the Menu Execute/Click on Compile.
+
+10- That's it.
+
+
+   The following steps must be completed if Curl is to work properly
+   =================================================================
+
+LIB folder inclusions (*.a placement)
+-------------------------------------
+
+1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a
+and install it in the directory C( or whichever drive Dev is installed)
+:\Dev-Cpp\lib.
+
+
+Include Folder
+--------------
+
+1- Create a new folder by the name of curl (do not change the name curl to
+some other name as it will cause major issues) in the directory
+C:\Dev-Cpp\include.
+
+2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip
+ version into the newly created curl directory - C:\Dev-Cpp\include\curl.
+
+Links To Include And Lib Folder
+-------------------------------
+
+1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure
+that C( or whichever drive Dev is installed):\DEV-CPP\lib is included.
+
+2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make
+sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included.
+
+3- Next select the Menu - Tools\Compiler Options\Directories\C++
+Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are
+included.
+
+Linker Links
+------------
+
+1- Drop the Menu - Tools\Compiler Options\Directories\Compiler.
+
+2- Make sure that the box "Add these commands to the linker command line" is
+checked.
+
+3- Include in the white space immediately below the box referred in 2 -lcurl
+-lws2_32.
+
+SSL Files
+---------
+
+1- Get the latest openSSL (as of time of this writing)
+openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e
+binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1
+development environment. The file may be downloaded at
+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
+users and c:\winnt\system32 for NT-family users.
+
+Multithreading Files
+--------------------
+
+To be completed
+
+#define
+-------
+
+1- Make sure that your program includes the following - #define CURL_STATICLIB
+must be declared FIRST before any other define functions may be
+added. Otherwise you may experience link errors.
+
+2- Don't forget to include   #include "curl/curl.h".
+
+e.g.
+    #define CURL_STATICLIB
+#include <windows.h>
+    #include "curl/curl.h"
+#include <fstream>
+#include <iostream>
+#include <vector>
+etc...
+
+
+Static or Dynamic Library
+-------------------------
+
+The above steps apply for the use by a static library. Should you choose to
+use a dynamic library you will be required to perform these additional steps.
+
+1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the
+directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for
+NT-family users.
+
+2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll.
+
+Voila you're done.
+
+The non-SSL static Library build may not be possible to use at least as of the
+time of this writing - v7.14. Check reference emails - Phillipe and I found it
+impossible to fully compile as certain files were missing for linking. No big
+loss as SSL is a major plus.
+
+Hope this Helps
+
+Tom
diff --git a/docs/INSTALL.md b/docs/INSTALL.md
deleted file mode 100644 (file)
index ff56600..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-# how to install curl and libcurl
-
-## Installing Binary Packages
-
-Lots of people download binary distributions of curl and libcurl. This
-document does not describe how to install curl or libcurl using such a binary
-package. This document describes how to compile, build and install curl and
-libcurl from source code.
-
-## Building from git
-
-If you get your code off a git repository instead of a release tarball, see
-the `GIT-INFO` file in the root directory for specific instructions on how to
-proceed.
-
-# Unix
-
-A normal Unix installation is made in three or four steps (after you've
-unpacked the source archive):
-
-    ./configure
-    make
-    make test (optional)
-    make install
-
-You probably need to be root when doing the last command.
-
-Get a full listing of all available configure options by invoking it like:
-
-    ./configure --help
-
-If you want to install curl in a different file hierarchy than `/usr/local`,
-specify that when running configure:
-
-    ./configure --prefix=/path/to/curl/tree
-
-If you have write permission in that directory, you can do 'make install'
-without being root. An example of this would be to make a local install in
-your own home directory:
-
-    ./configure --prefix=$HOME
-    make
-    make install
-
-The configure script always tries to find a working SSL library unless
-explicitly told not to. If you have OpenSSL installed in the default search
-path for your compiler/linker, you don't need to do anything special. If you
-have OpenSSL installed in /usr/local/ssl, you can run configure like:
-
-    ./configure --with-ssl
-
-If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL) and
-you have pkg-config installed, set the pkg-config path first, like this:
-
-    env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl
-
-Without pkg-config installed, use this:
-
-   ./configure --with-ssl=/opt/OpenSSL
-
-If you insist on forcing a build without SSL support, even though you may
-have OpenSSL installed in your system, you can run configure like this:
-
-   ./configure --without-ssl
-
-If you have OpenSSL installed, but with the libraries in one place and the
-header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
-environment variables prior to running configure.  Something like this should
-work:
-
-    CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" ./configure
-
-If you have shared SSL libs installed in a directory where your run-time
-linker doesn't find them (which usually causes configure failures), you can
-provide the -R option to ld on some operating systems to set a hard-coded
-path to the run-time linker:
-
-    LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
-
-## More Options
-
-To force a static library compile, disable the shared library creation by
-running configure like:
-
-    ./configure --disable-shared
-
-To tell the configure script to skip searching for thread-safe functions, add
-an option like:
-
-    ./configure --disable-thread
-
-If you're a curl developer and use gcc, you might want to enable more debug
-options with the `--enable-debug` option.
-
-curl can be built to use a whole range of libraries to provide various useful
-services, and configure will try to auto-detect a decent default. But if you
-want to alter it, you can select how to deal with each individual library.
-
-## Select TLS backend
-
-The default OpenSSL configure check will also detect and use BoringSSL or
-libressl.
-
- - GnuTLS: `--without-ssl --with-gnutls`.
- - Cyassl: `--without-ssl --with-cyassl`
- - NSS: `--without-ssl --with-nss`
- - PolarSSL: `--without-ssl --with-polarssl`
- - mbedTLS: `--without-ssl --with-mbedtls`
- - axTLS: `--without-ssl --with-axtls`
- - schannel: `--without-ssl --with-winssl`
- - secure transport: `--with-winssl --with-darwinssl`
-
-# Windows
-
-## Building Windows DLLs and C run-time (CRT) linkage issues
-
- As a general rule, building a DLL with static CRT linkage is highly
- discouraged, and intermixing CRTs in the same app is something to avoid at
- any cost.
-
- Reading and comprehending Microsoft Knowledge Base articles KB94248 and
- KB140584 is a must for any Windows developer. Especially important is full
- understanding if you are not going to follow the advice given above.
-
- - [How To Use the C Run-Time](https://support.microsoft.com/kb/94248/en-us)
- - [How to link with the correct C Run-Time CRT library](https://support.microsoft.com/kb/140584/en-us)
- - [Potential Errors Passing CRT Objects Across DLL Boundaries](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 first to
-rebuild every single library your app uses as well as your app using the
-debug multithreaded dynamic C runtime.
-
- If you get linkage errors read section 5.7 of the FAQ document.
-
-## MingW32
-
-Make sure that MinGW32's bin dir is in the search path, for example:
-
-    set PATH=c:\mingw32\bin;%PATH%
-
-then run `mingw32-make mingw32` in the root dir. There are other
-make targets available to build libcurl with more features, use:
-
- - `mingw32-make mingw32-zlib` to build with Zlib support;
- - `mingw32-make mingw32-ssl-zlib` to build with SSL and Zlib enabled;
- - `mingw32-make mingw32-ssh2-ssl-zlib` to build with SSH2, SSL, Zlib;
- - `mingw32-make mingw32-ssh2-ssl-sspi-zlib` to build with SSH2, SSL, Zlib
-   and SSPI support.
-
-If you have any problems linking libraries or finding header files, be sure
-to verify that the provided "Makefile.m32" files use the proper paths, and
-adjust as necessary. It is also possible to override these paths with
-environment variables, for example:
-
-    set ZLIB_PATH=c:\zlib-1.2.8
-    set OPENSSL_PATH=c:\openssl-1.0.2c
-    set LIBSSH2_PATH=c:\libssh2-1.6.0
-
-It is also possible to build with other LDAP SDKs than MS LDAP; currently
-it is possible to build with native Win32 OpenLDAP, or with the Novell CLDAP
-SDK. If you want to use these you need to set these vars:
-
-    set LDAP_SDK=c:\openldap
-    set USE_LDAP_OPENLDAP=1
-
-or for using the Novell SDK:
-
-    set USE_LDAP_NOVELL=1
-
-If you want to enable LDAPS support then set LDAPS=1.
-
-## Cygwin
-
-Almost identical to the unix installation. Run the configure script in the
-curl source tree root with `sh configure`. Make sure you have the sh
-executable in /bin/ or you'll see the configure fail toward the end.
-
-Run `make`
-
-## Borland C++ compiler
-
-Ensure that your build environment is properly set up to use the compiler and
-associated tools. PATH environment variable must include the path to bin
-subdirectory of your compiler installation, eg: `c:\Borland\BCC55\bin`
-
-It is advisable to set environment variable BCCDIR to the base path of the
-compiler installation.
-
-    set BCCDIR=c:\Borland\BCC55
-
-In order to build a plain vanilla version of curl and libcurl run the
-following command from curl's root directory:
-
-    make borland
-
-To build curl and libcurl with zlib and OpenSSL support set environment
-variables `ZLIB_PATH` and `OPENSSL_PATH` to the base subdirectories of the
-already built zlib and OpenSSL libraries and from curl's root directory run
-command:
-
-    make borland-ssl-zlib
-
-libcurl library will be built in 'lib' subdirectory while curl tool is built
-in 'src' subdirectory. In order to use libcurl library it is advisable to
-modify compiler's configuration file bcc32.cfg located in
-`c:\Borland\BCC55\bin` to reflect the location of libraries include paths for
-example the '-I' line could result in something like:
-
-    -I"c:\Borland\BCC55\include;c:\curl\include;c:\openssl\inc32"
-
-bcc3.cfg `-L` line could also be modified to reflect the location of of
-libcurl library resulting for example:
-
-    -L"c:\Borland\BCC55\lib;c:\curl\lib;c:\openssl\out32"
-
-In order to build sample program `simple.c` from the docs\examples
-subdirectory run following command from mentioned subdirectory:
-
-    bcc32 simple.c libcurl.lib cw32mt.lib
-
-In order to build sample program simplessl.c an SSL enabled libcurl is
-required, as well as the OpenSSL libeay32.lib and ssleay32.lib libraries.
-
-## Disabling Specific Protocols in Windows builds
-
-The configure utility, unfortunately, is not available for the Windows
-environment, therefore, you cannot use the various disable-protocol options of
-the configure utility on this platform.
-
-However, you can use the following defines to disable specific
-protocols:
-
- - `HTTP_ONLY`             disables all protocols except HTTP
- - `CURL_DISABLE_FTP`      disables FTP
- - `CURL_DISABLE_LDAP`     disables LDAP
- - `CURL_DISABLE_TELNET`   disables TELNET
- - `CURL_DISABLE_DICT`     disables DICT
- - `CURL_DISABLE_FILE`     disables FILE
- - `CURL_DISABLE_TFTP`     disables TFTP
- - `CURL_DISABLE_HTTP`     disables HTTP
- - `CURL_DISABLE_IMAP`     disables IMAP
- - `CURL_DISABLE_POP3`     disables POP3
- - `CURL_DISABLE_SMTP`     disables SMTP
-
-If you want to set any of these defines you have the following options:
-
- - Modify lib/config-win32.h
- - Modify lib/curl_setup.h
- - Modify winbuild/Makefile.vc
- - Modify the "Preprocessor Definitions" in the libcurl project
-
-Note: The pre-processor settings can be found using the Visual Studio IDE
-under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
-Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
-versions.
-
-## Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds
-
-In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack it is
-necessary to make definition of preprocessor symbol USE_LWIPSOCK visible to
-libcurl and curl compilation processes. To set this definition you have the
-following alternatives:
-
- - Modify lib/config-win32.h and src/config-win32.h
- - Modify winbuild/Makefile.vc
- - Modify the "Preprocessor Definitions" in the libcurl project
-
-Note: The pre-processor settings can be found using the Visual Studio IDE
-under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
-Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
-versions.
-
-Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, in
-order to use it with your program it is mandatory that your program includes
-lwIP header file `<lwip/opt.h>` (or another lwIP header that includes this)
-before including any libcurl header. Your program does not need the
-`USE_LWIPSOCK` preprocessor definition which is for libcurl internals only.
-
-Compilation has been verified with [lwIP
-1.4.0](http://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip) and
-[contrib-1.4.0](http://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip).
-
-This BSD-style lwIP TCP/IP stack support must be considered experimental given
-that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl
-might yet need some additional adjustment, caveat emptor.
-
-## Important static libcurl usage note
-
-When building an application that uses the static libcurl library on Windows,
-you must 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
-
-On modern Apple operating systems, curl can be built to use Apple's SSL/TLS
-implementation, Secure Transport, instead of OpenSSL. To build with Secure
-Transport for SSL/TLS, use the configure option `--with-darwinssl`. (It is not
-necessary to use the option `--without-ssl`.) This feature requires iOS 5.0 or
-later, or OS X 10.5 ("Leopard") or later.
-
-When Secure Transport is in use, the curl options `--cacert` and `--capath`
-and their libcurl equivalents, will be ignored, because Secure Transport uses
-the certificates stored in the Keychain to evaluate whether or not to trust
-the server. This, of course, includes the root certificates that ship with the
-OS. The `--cert` and `--engine` options, and their libcurl equivalents, are
-currently unimplemented in curl with Secure Transport.
-
-For OS X users: In OS X 10.8 ("Mountain Lion"), Apple made a major overhaul to
-the Secure Transport API that, among other things, added support for the newer
-TLS 1.1 and 1.2 protocols. To get curl to support TLS 1.1 and 1.2, you must
-build curl on Mountain Lion or later, or by using the equivalent SDK. If you
-set the `MACOSX_DEPLOYMENT_TARGET` environmental variable to an earlier
-version of OS X prior to building curl, then curl will use the new Secure
-Transport API on Mountain Lion and later, and fall back on the older API when
-the same curl binary is executed on older cats. For example, running these
-commands in curl's directory in the shell will build the code such that it
-will run on cats as old as OS X 10.6 ("Snow Leopard") (using bash):
-
-    export MACOSX_DEPLOYMENT_TARGET="10.6"
-    ./configure --with-darwinssl
-    make
-
-# Cross compile
-
-Download and unpack the curl package.
-
-'cd' to the new directory. (e.g. `cd curl-7.12.3`)
-
-Set environment variables to point to the cross-compile toolchain and call
-configure with any options you need.  Be sure and specify the `--host` and
-`--build` parameters at configuration time.  The following script is an
-example of cross-compiling for the IBM 405GP PowerPC processor using the
-toolchain from MonteVista for Hardhat Linux.
-
-    #! /bin/sh
-
-    export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
-    export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
-    export AR=ppc_405-ar
-    export AS=ppc_405-as
-    export LD=ppc_405-ld
-    export RANLIB=ppc_405-ranlib
-    export CC=ppc_405-gcc
-    export NM=ppc_405-nm
-
-    ./configure --target=powerpc-hardhat-linux
-        --host=powerpc-hardhat-linux
-        --build=i586-pc-linux-gnu
-        --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local
-        --exec-prefix=/usr/local
-
-You may also need to provide a parameter like `--with-random=/dev/urandom` to
-configure as it cannot detect the presence of a random number generating
-device for a target system.  The `--prefix` parameter specifies where curl
-will be installed.  If `configure` completes successfully, do `make` and `make
-install` as usual.
-
-In some cases, you may be able to simplify the above commands to as little as:
-
-    ./configure --host=ARCH-OS
-
-# REDUCING SIZE
-
-There are a number of configure options that can be used to reduce the size of
-libcurl for embedded applications where binary size is an important factor.
-First, be sure to set the CFLAGS variable when configuring with any relevant
-compiler optimization flags to reduce the size of the binary.  For gcc, this
-would mean at minimum the -Os option, and potentially the `-march=X`,
-`-mdynamic-no-pic` and `-flto` options as well, e.g.
-
-    ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'...
-
-Note that newer compilers often produce smaller code than older versions
-due to improved optimization.
-
-Be sure to specify as many `--disable-` and `--without-` flags on the
-configure command-line as you can to disable all the libcurl features that you
-know your application is not going to need.  Besides specifying the
-`--disable-PROTOCOL` flags for all the types of URLs your application will not
-use, here are some other flags that can reduce the size of the library:
-
- - `--disable-ares` (disables support for the C-ARES DNS library)
- - `--disable-cookies` (disables support for HTTP cookies)
- - `--disable-crypto-auth` (disables HTTP cryptographic authentication)
- - `--disable-ipv6` (disables support for IPv6)
- - `--disable-manual` (disables support for the built-in documentation)
- - `--disable-proxy` (disables support for HTTP and SOCKS proxies)
- - `--disable-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)
- - `--without-ssl` (disables support for SSL/TLS)
- - `--without-zlib` (disables support for on-the-fly decompression)
-
-The GNU compiler and linker have a number of options that can reduce the
-size of the libcurl dynamic libraries on some platforms even further.
-Specify them by providing appropriate CFLAGS and LDFLAGS variables on the
-configure command-line, e.g.
-
-    CFLAGS="-Os -ffunction-sections -fdata-sections
-            -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 compiling
-using 'strip' (or the appropriate variant if cross-compiling).  If space is
-really tight, you may be able to remove some unneeded sections of the shared
-library using the -R option to objcopy (e.g. the .comment section).
-
-Using these techniques it is possible to create a basic HTTP-only shared
-libcurl library for i386 Linux platforms that is only 113 KiB in size, and an
-FTP-only library that is 113 KiB in size (as of libcurl version 7.50.3, using
-gcc 5.4.0).
-
-You may find that statically linking libcurl to your application will result
-in a lower total size than dynamically linking.
-
-Note that the curl test harness can detect the use of some, but not all, of
-the `--disable` statements suggested above. Use will cause tests relying on
-those features to fail.  The test harness can be manually forced to skip the
-relevant tests by specifying certain key words on the runtests.pl command
-line.  Following is a list of appropriate key words:
-
- - `--disable-cookies`          !cookies
- - `--disable-manual`           !--manual
- - `--disable-proxy`            !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5
-
-# PORTS
-
-This is a probably incomplete list of known hardware and operating systems
-that curl has been compiled for. If you know a system curl compiles and
-runs on, that isn't listed, please let us know!
-
-  - Alpha DEC OSF 4
-  - Alpha Digital UNIX v3.2
-  - Alpha FreeBSD 4.1, 4.5
-  - Alpha Linux 2.2, 2.4
-  - Alpha NetBSD 1.5.2
-  - Alpha OpenBSD 3.0
-  - Alpha OpenVMS V7.1-1H2
-  - Alpha Tru64 v5.0 5.1
-  - AVR32 Linux
-  - ARM Android 1.5, 2.1, 2.3, 3.2, 4.x
-  - ARM INTEGRITY
-  - ARM iOS
-  - Cell Linux
-  - Cell Cell OS
-  - HP-PA HP-UX 9.X 10.X 11.X
-  - HP-PA Linux
-  - HP3000 MPE/iX
-  - MicroBlaze uClinux
-  - MIPS IRIX 6.2, 6.5
-  - MIPS Linux
-  - OS/400
-  - Pocket PC/Win CE 3.0
-  - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
-  - PowerPC Darwin 1.0
-  - PowerPC INTEGRITY
-  - PowerPC Linux
-  - PowerPC Mac OS 9
-  - PowerPC Mac OS X
-  - SH4 Linux 2.6.X
-  - SH4 OS21
-  - SINIX-Z v5
-  - Sparc Linux
-  - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
-  - Sparc SunOS 4.1.X
-  - StrongARM (and other ARM) RISC OS 3.1, 4.02
-  - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
-  - StrongARM NetBSD 1.4.1
-  - Symbian OS (P.I.P.S.) 9.x
-  - TPF
-  - Ultrix 4.3a
-  - UNICOS 9.0
-  - i386 BeOS
-  - i386 DOS
-  - i386 eCos 1.3.1
-  - i386 Esix 4.1
-  - i386 FreeBSD
-  - i386 HURD
-  - i386 Haiku OS
-  - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
-  - i386 Mac OS X
-  - i386 MINIX 3.1
-  - i386 NetBSD
-  - i386 Novell NetWare
-  - i386 OS/2
-  - i386 OpenBSD
-  - i386 QNX 6
-  - i386 SCO unix
-  - i386 Solaris 2.7
-  - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
-  - i486 ncr-sysv4.3.03 (NCR MP-RAS)
-  - ia64 Linux 2.3.99
-  - m68k AmigaOS 3
-  - m68k Linux
-  - m68k uClinux
-  - m68k OpenBSD
-  - m88k dg-dgux5.4R3.00
-  - s390 Linux
-  - x86_64 Linux
-  - XScale/PXA250 Linux 2.4
-  - Nios II uClinux
index a733e1f..1691fcc 100644 (file)
@@ -56,7 +56,7 @@ git
 
  All changes to the sources are committed to the git repository as soon as
  they're somewhat verified to work. Changes shall be committed as independently
- as possible so that individual changes can be easily spotted and tracked
+ as possible so that individual changes can be easier spotted and tracked
  afterwards.
 
  Tagging shall be used extensively, and by the time we release new archives we
@@ -88,7 +88,7 @@ Dependencies
  - MIT Kerberos 1.2.4
  - GSKit        V5R3M0
  - NSS          3.14.x
- - axTLS        2.1.0
+ - axTLS        1.2.7
  - PolarSSL     1.3.0
  - Heimdal      ?
  - nghttp2      1.0.0
@@ -98,7 +98,7 @@ 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 correctly on:
+ curl running fine on:
 
  - Windows      98
  - AS/400       V5R3M0
@@ -126,13 +126,13 @@ Build tools
 Windows vs Unix
 ===============
 
- There are a few differences in how to program curl the Unix way compared to
- the Windows way. Perhaps the four most notable details are:
+ There are a few differences in how to program curl the unix way compared to
+ the Windows way. The four perhaps most notable details are:
 
  1. Different function names for socket operations.
 
    In curl, this is solved with defines and macros, so that the source looks
-   the same in all places except for the header file that defines them. The
+   the same at all places except for the header file that defines them. The
    macros in use are sclose(), sread() and swrite().
 
  2. Windows requires a couple of init calls for the socket stuff.
@@ -142,7 +142,7 @@ Windows vs Unix
    behaviour.
 
  3. The file descriptors for network communication and file operations are
-    not as easily interchangeable as in Unix.
+    not easily interchangeable as in unix.
 
    We avoid this by not trying any funny tricks on file descriptors.
 
@@ -156,11 +156,11 @@ Windows vs Unix
  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 like a `curl_config.h` file would have looked like on a Windows
+ 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!
+ operating systems. Don't walk on the edge.
 
 <a name="Library"></a>
 Library
@@ -174,7 +174,7 @@ Library
  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.
@@ -184,14 +184,14 @@ Library
 
  [ `curl_easy_init()`][2] allocates an internal struct and makes some
  initializations.  The returned handle does not reveal internals. This is the
`Curl_easy` struct which works as an "anchor" struct for all `curl_easy`
'Curl_easy' 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()`][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 `Curl_easy` struct.
+ the 'Curl_easy' struct.
 
  `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()`,
@@ -218,7 +218,7 @@ Curl_connect()
    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 `Curl_easy` struct.
+   inited/inherited from the Curl_easy struct.
 
 <a name="Curl_do"></a>
 Curl_do()
@@ -250,8 +250,8 @@ Curl_readwrite()
 
    Called during the transfer of the actual protocol payload.
 
-   During transfer, the progress functions in lib/progress.c are called at
-   frequent intervals (or at the user's choice, a specified callback might get
+   During transfer, the progress functions in lib/progress.c are called at a
+   frequent interval (or at the user's choice, a specified callback might get
    called). The speedcheck functions in lib/speedcheck.c are also used to
    verify that the transfer is as fast as required.
 
@@ -272,7 +272,7 @@ Curl_disconnect()
    When doing normal connections and transfers, no one ever tries to close any
    connections so this is not normally called when `curl_easy_perform()` is
    used. This function is only used when we are certain that no more transfers
-   are going to be made on the connection. It can be also closed by force, or
+   is going to be made on the connection. It can be also closed by force, or
    it can be called to make sure that libcurl doesn't keep too many
    connections alive at the same time.
 
@@ -290,7 +290,7 @@ HTTP(S)
  base64-functions for user+password stuff (and more) is in (lib/base64.c) and
  all functions for parsing and sending cookies are found in (lib/cookie.c).
 
- HTTPS uses in almost every case the same procedure as HTTP, with only two
+ 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
@@ -301,7 +301,8 @@ HTTP(S)
 
  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 finished the entire request is sent off in one single write. This is done this way to overcome problems with flawed firewalls and lame servers.
+ 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.
 
 <a name="ftp"></a>
 FTP
@@ -384,23 +385,23 @@ Persistent Connections
  The persistent connection support in libcurl requires some considerations on
  how to do things inside of the library.
 
- - The `Curl_easy` struct returned in the [`curl_easy_init()`][2] call
+ - The 'Curl_easy' 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 `Curl_easy` struct holds the "connection cache" (an array of
+ - The 'Curl_easy' struct holds the "connection cache" (an array of
    pointers to 'connectdata' structs).
 
  - 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 to the cache. If the cache is full already when a new
-   connection is added, it will first close the oldest unused one.
+   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.
 
  - 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.
+   closure on connections and then they won't be kept open of course.
 
  - When `curl_easy_cleanup()` is called, we close all still opened connections,
    unless of course the multi interface "owns" the connections.
@@ -413,7 +414,7 @@ multi interface/non-blocking
 ============================
 
  The multi interface is a non-blocking interface to the library. To make that
- interface work as well as possible, no low-level functions within libcurl
+ interface work as good as possible, no low-level functions within libcurl
  must be written to work in a blocking manner. (There are still a few spots
  violating this rule.)
 
@@ -464,7 +465,7 @@ Return Codes and Informationals
  description.
 
  In aiding the user to understand what's happening and to debug curl usage, we
- must supply a fair number of informational messages by using the
+ 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.
@@ -484,11 +485,11 @@ Client
  main() resides in `src/tool_main.c`.
 
  `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
+ 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 sets up its 'config' struct properly, then
+ 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.
@@ -541,13 +542,13 @@ Test Suite
 
  The main test script is runtests.pl that will invoke test servers like
  httpserver.pl and ftpserver.pl before all the test cases are performed. The
- test suite currently only runs on Unix-like platforms.
+ test suite currently only runs on unix-like platforms.
 
  You'll find a description of the test suite in the tests/README file, and the
  test case data files in the tests/FILEFORMAT file.
 
  The test suite automatically detects if curl was built with the memory
- debugging enabled, and if it was, it will detect memory leaks, too.
+ debugging enabled, and if it was it will detect memory leaks, too.
 
 <a name="asyncdns"></a>
 Asynchronous name resolves
@@ -588,7 +589,7 @@ Asynchronous name resolves
 `curl_off_t`
 ==========
 
`curl_off_t` is a data type provided by the external libcurl include
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.
@@ -606,10 +607,10 @@ curlx
 
 `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
+   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`
+   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()`
@@ -623,17 +624,17 @@ curlx
 
 `curlx_tvdiff_secs()`
 ---------------------
-   returns the same as `curlx_tvdiff` but with full usec resolution (as a
+   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_`
+ 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 be built
properly with the new function names. The concerned functions are:
+ 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`
@@ -658,7 +659,7 @@ Content Encoding
  [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 server
+ 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
@@ -718,7 +719,7 @@ hostip.c explained
 
  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.
+ account. Hosts that aren't IPv6-enabled have CURLRES_IPV4 defined.
 
 ## `CURLRES_ARES`
 
@@ -749,7 +750,7 @@ hostip.c explained
  - 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.
+ `CURLRES_*` defines based on the config*.h and curl_setup.h defines.
 
 <a name="memoryleak"></a>
 Track Down Memory Leaks
@@ -766,7 +767,7 @@ Track Down Memory Leaks
 
   Rebuild libcurl with -DCURLDEBUG (usually, rerunning configure with
   --enable-debug fixes this). 'make clean' first, then 'make' so that all
-  files are actually rebuilt properly. It will also make sense to build
+  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.
 
@@ -827,16 +828,16 @@ Track Down Memory Leaks
   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 struct to each easy handle in which we store
+  Internally, there's an added 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 there is until the next nearest timer expires
+  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) returns the easy handle that waits for action on
+  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).
 
@@ -857,7 +858,7 @@ for older and later versions as things don't change drastically that often.
 
 ## Curl_easy
 
-  The `Curl_easy` struct is the one returned to the outside in the external API
+  The Curl_easy 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.
 
@@ -865,27 +866,27 @@ for older and later versions as things don't change drastically that often.
   '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
-  `Curl_easy->easy_conn`.
+  Curl_easy->easy_conn.
 
   Data and information that regard this particular single transfer is put in
   the SingleRequest sub-struct.
 
-  When the `Curl_easy` 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 `Curl_easy` structs that are added to
-  that same multi handle. libcurl always uses multi so ->multi *will* point to
-  `Curl_multi` when a transfer is in progress.
+  When the Curl_easy 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 Curl_easy 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 `Curl_easy`. When
+  ->mstate is the multi state of this particular Curl_easy. 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 `Curl_easy` when [`curl_multi_fdset()`][12] is called etc.
+  specific Curl_easy when [`curl_multi_fdset()`][12] is called etc.
 
   The libcurl source code generally use the name 'data' for the variable that
-  points to the `Curl_easy`.
+  points to the Curl_easy.
 
-  When doing multiplexed HTTP/2 transfers, each `Curl_easy` is associated with
+  When doing multiplexed HTTP/2 transfers, each Curl_easy 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!
 
@@ -900,21 +901,21 @@ for older and later versions as things don't change drastically that often.
   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 `Curl_easy` can be used multiple times and each time select
+  Thus, the same Curl_easy 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 `Curl_easy`.
+  connection or the Curl_easy.
 
   Functions in libcurl will assume that connectdata->data points to the
-  `Curl_easy` that uses this connection (for the moment).
+  Curl_easy 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 `Curl_easy` may no longer be around when the time comes to shut down
+  original Curl_easy 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` `Curl_easy` in the `Curl_multi` struct to use when needed.
+  `closure_handle` Curl_easy 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
@@ -928,37 +929,36 @@ for older and later versions as things don't change drastically that often.
   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.
+  `Curl_multi` is the multi handle struct exposed as "CURLM *" in external APIs.
 
-  This struct holds a list of `Curl_easy` structs that have been added to this
+  This struct holds a list of Curl_easy 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 `Curl_easy`s.
+  ->easyp and ->num_easy is a counter of added Curl_easys.
 
-  `->msglist` is a linked list of messages to send back when
+  ->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 `Curl_easy`'s transfer has completed.
+  list when an individual Curl_easy'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.
+  ->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 `Curl_easy`s, sorted by the remaining time
-  until it should be checked - normally some sort of timeout. Each `Curl_easy`
+  ->timetree points to a tree of Curl_easys, sorted by the remaining time
+  until it should be checked - normally some sort of timeout. Each Curl_easy
   has one node in the tree.
 
-  `->sockhash` is a hash table to allow fast lookups of socket descriptor for
-  which `Curl_easy` uses that descriptor. This is necessary for the
+  ->sockhash is a hash table to allow fast lookups of socket descriptor to
+  which Curl_easy that uses that descriptor. This is necessary for the
   `multi_socket` API.
 
-  `->conn_cache` points to the connection cache. It keeps track of all
+  ->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.
+  ->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.
+  points to the Curl_multi struct.
 
 ## Curl_handler
 
@@ -971,40 +971,41 @@ for older and later versions as things don't change drastically that often.
   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 protocol need their own `Curl_handler` setup so HTTPS separate from HTTP.
+  ->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 `Curl_easy` 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 `Curl_easy->req.protop` to point to it.
+  ->setup_connection is called to allow the protocol code to allocate protocol
+  specific data that then gets associated with that Curl_easy 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
+  Curl_easy->req.protop to point to it.
 
-  `->connect_it` allows a protocol to do some specific actions after the TCP
+  ->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.
+  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.
+  ->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
+  ->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
-  separate piece of the DO state called `DO_MORE`.
+  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)
+  ->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
+  ->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.
+  ->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`
@@ -1033,11 +1034,11 @@ for older and later versions as things don't change drastically that often.
 
   - `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
-    of protocol handlers.
+    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 with.
+    concern itself about.
 
   - `PROTOPT_NONETWORK` - a protocol that doesn't use network (read file:)
 
@@ -1049,21 +1050,21 @@ for older and later versions as things don't change drastically that often.
 
 ## conncache
 
-  Is a hash table with connections for later re-use. Each `Curl_easy` has a
+  Is a hash table with connections for later re-use. Each Curl_easy has a
   pointer to its connection cache. Each multi handle sets up a connection
-  cache that all added `Curl_easy`s share by default.
+  cache that all added Curl_easys share by default.
 
 ## 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 its own versions of caches and
+  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 `Curl_easy`s will use the caches/pools that this share handle
+  specific Curl_easys will use the caches/pools that this share handle
   holds.
 
-  Then individual `Curl_easy` structs can be made to share specific things
+  Then individual Curl_easy 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
@@ -1072,7 +1073,7 @@ for older and later versions as things don't change drastically that often.
 ## CookieInfo
 
   This is the main cookie struct. It holds all known cookies and related
-  information. Each `Curl_easy` has its own private CookieInfo even when
+  information. Each Curl_easy 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 12eeedd..5230ecb 100644 (file)
@@ -18,15 +18,18 @@ problems may have been fixed or changed somewhat since this was written!
  1.4 multipart formposts file name encoding
  1.5 Expect-100 meets 417
  1.6 Unnecessary close when 401 received waiting for 100
+ 1.7 CONNECT response larger than 16KB
  1.8 DNS timing is wrong for HTTP redirects
  1.9 HTTP/2 frames while in the connection pool kill reuse
  1.10 Strips trailing dot from host name
- 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
+ 1.11 transfer-encoding: chunked in HTTP/2
+ 1.12 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
 
  2. TLS
- 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
- 2.2 DER in keychain
- 2.3 GnuTLS backend skips really long certificate fields
+ 2.1 Hangs with PolarSSL
+ 2.2 CURLINFO_SSL_VERIFYRESULT has limited support
+ 2.3 DER in keychain
+ 2.4 GnuTLS backend skips really long certificate fields
 
  3. Email protocols
  3.1 IMAP SEARCH ALL truncated response
@@ -47,9 +50,6 @@ problems may have been fixed or changed somewhat since this was written!
  5.5 can't handle Unicode arguments in Windows
  5.6 cmake support gaps
  5.7 Visual Studio project gaps
- 5.8 configure finding libs in wrong directory
- 5.9 Utilize Requires.private directives in libcurl.pc
- 5.10 Fix the gcc typechecks
 
  6. Authentication
  6.1 NTLM authentication and unicode
@@ -83,12 +83,11 @@ problems may have been fixed or changed somewhat since this was written!
  11. Internals
  11.1 Curl leaks .onion hostnames in DNS
  11.2 error buffer not set if connection to multiple addresses fails
- 11.3 c-ares deviates from stock resolver on http://1346569778
 
  12. LDAP and OpenLDAP
  12.1 OpenLDAP hangs after returning results
 
- 13. TCP/IP
+ 13 TCP/IP
  13.1 --interface for ipv6 binds to unusable IP address
 
 
@@ -141,6 +140,13 @@ problems may have been fixed or changed somewhat since this was written!
  waiting for the the 100-continue response.
  https://curl.haxx.se/mail/lib-2008-08/0462.html
 
+1.7 CONNECT response larger than 16KB
+
+ If a CONNECT response-headers are larger than BUFSIZE (16KB) when the
+ connection is meant to be kept alive (like for NTLM proxy auth), the function
+ will return prematurely and will confuse the rest of the HTTP protocol
+ code. This should be very rare.
+
 1.8 DNS timing is wrong for HTTP redirects
 
  When extracting timing information after HTTP redirects, only the last
@@ -192,7 +198,15 @@ problems may have been fixed or changed somewhat since this was written!
 
  See https://github.com/curl/curl/issues/716 for the discussion.
 
-1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
+1.11 transfer-encoding: chunked in HTTP/2
+
+ For HTTP/1, when -H transfer-encoding:chunked option is given, curl encodes
+ the request using chunked encoding. But when HTTP/2 is being used, the
+ command wrongly sends a request with both content-length and
+ transfer-encoding: chunked headers being set (and the request body is not
+ chunked-encoded). See https://github.com/curl/curl/issues/662
+
+1.12 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
 
  I'm using libcurl to POST form data using a FILE* with the CURLFORM_STREAM
  option of curl_formadd(). I've noticed that if the connection drops at just
@@ -206,17 +220,26 @@ problems may have been fixed or changed somewhat since this was written!
 
 2. TLS
 
-2.1 CURLINFO_SSL_VERIFYRESULT has limited support
+2.1 Hangs with PolarSSL
+
+ "curl_easy_perform hangs with imap and PolarSSL"
+ https://github.com/curl/curl/issues/334
+
+ Most likely, a fix similar to commit c111178bd4 (for mbedTLS) is
+ necessary. Or if we just wait a little longer we'll rip out all support for
+ PolarSSL instead...
+
+2.2 CURLINFO_SSL_VERIFYRESULT has limited support
 
  CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
  backends, so relying on this information in a generic app is flaky.
 
-2.2 DER in keychain
+2.3 DER in keychain
 
  Curl doesn't recognize certificates in DER format in keychain, but it works
  with PEM.  https://curl.haxx.se/bug/view.cgi?id=1065
 
-2.3 GnuTLS backend skips really long certificate fields
+2.4 GnuTLS backend skips really long certificate fields
 
  libcurl calls gnutls_x509_crt_get_dn() with a fixed buffer size and if the
  field is too long in the cert, it'll just return an error and the field will
@@ -345,35 +368,6 @@ problems may have been fixed or changed somewhat since this was written!
   - support for other development IDEs
   - add PATH environment variables for third-party DLLs
 
-5.8 configure finding libs in wrong directory
-
- When the configure script checks for third-party libraries, it adds those
- directories to the LDFLAGS variable and then tries linking to see if it
- works. When successful, the found directory is kept in the LDFLAGS variable
- when the script continues to execute and do more tests and possibly check for
- more libraries.
-
- This can make subsequent checks for libraries wrongly detect another
- installation in a directory that was previously added to LDFLAGS by another
- library check!
-
- A possibly better way to do these checks would be to keep the pristine LDFLAGS
- even after successful checks and instead add those verified paths to a
- separate variable that only after all library checks have been performed gets
- appended to LDFLAGS.
-
-5.9 Utilize Requires.private directives in libcurl.pc
-
- https://github.com/curl/curl/issues/864
-
-5.10 Fix the gcc typechecks
-
- Issue #846 identifies a problem with the gcc-typechecks and how the types are
- documented and checked for CURLINFO_CERTINFO but our attempts to fix the
- issue were futile and needs more attention.
-
- https://github.com/curl/curl/issues/846
-
 6. Authentication
 
 6.1 NTLM authentication and unicode
@@ -558,18 +552,6 @@ problems may have been fixed or changed somewhat since this was written!
  CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER
  remains empty. Issue: https://github.com/curl/curl/issues/544
 
-11.3 c-ares deviates from stock resolver on http://1346569778
-
- When using the socket resolvers, that URL becomes:
-
-     * Rebuilt URL to: http://1346569778/
-     *   Trying 80.67.6.50...
-
- but with c-ares it instead says "Could not resolve: 1346569778 (Domain name
- not found)"
-
- See https://github.com/curl/curl/issues/893
-
 
 12. LDAP and OpenLDAP
 
@@ -593,7 +575,7 @@ problems may have been fixed or changed somewhat since this was written!
      https://curl.haxx.se/mail/lib-2016-01/0101.html
 
 
-13. TCP/IP
+13 TCP/IP
 
 13.1 --interface for ipv6 binds to unusable IP address
 
index 5376bdb..0bff73e 100644 (file)
@@ -45,7 +45,7 @@ not have the announcement clause that collides with GPL.
 
 ## WolfSSL
 
- (May be used for SSL/TLS support) Uses the GPL license or a proprietary
+ (May be used for SSL/TLS support) Uses the GPL license or a propietary
  license. If this is a problem for you, consider using another TLS library.
 
 ## NSS
@@ -63,11 +63,8 @@ not have the announcement clause that collides with GPL.
 
 ## mbedTLS
 
- (May be used for SSL/TLS support) Uses the [Apache 2.0
- license](https://opensource.org/licenses/Apache-2.0) or the GPL license.
- You may choose to license the code under Apache 2.0 terms or GPL terms.
- These licenses grant you different permissions and impose different
- obligations. You should select the license that best meets your needs.
+ (May be used for SSL/TLS support) Uses the GPL license or a propietary
+ license. If this is a problem for you, consider using another TLS library.
 
 ## BoringSSL
 
index 897fc9f..7505800 100644 (file)
@@ -38,17 +38,17 @@ MAIL ETIQUETTE
   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.
 
-  Each mailing list has hundreds up to thousands of readers, meaning that
-  each mail sent will be received and read by a very large number of people.
+  Each mailing list have hundreds up to thousands of readers, meaning that
+  each mail sent will be received and read by a very large amount of people.
   People from various cultures, regions, religions and continents.
 
   1.2 Netiquette
 
-  Netiquette is a common term for how to behave on the internet. Of course, in
+  Netiquette is a common name for how to behave on the internet. Of course, in
   each particular group and subculture there will be differences in what is
   acceptable and what is considered good manners.
 
-  This document outlines what we in the curl project consider to be good
+  This document outlines what we in the cURL project considers to be good
   etiquette, and primarily this focus on how to behave on and how to use our
   mailing lists.
 
@@ -56,7 +56,7 @@ MAIL ETIQUETTE
 
   Many people send one question to one person. One person gets many mails, and
   there is only one person who can give you a reply. The question may be
-  something that other people would also like to ask. These other people have
+  something that other people are also wanting to ask. These other people have
   no way to read the reply, but to ask the one person the question. The one
   person consequently gets overloaded with mail.
 
@@ -79,8 +79,8 @@ MAIL ETIQUETTE
   1.5 Moderation of new posters
 
   Several of the curl mailing lists automatically make all posts from new
-  subscribers be moderated. This means that after you've subscribed and
-  sent your first mail to a list, that mail will not be let through to the
+  subscribers require moderation. This means that after you've subscribed and
+  send your first mail to a list, that mail will not be let through to the
   list until a mailing list administrator has verified that it is OK and
   permits it to get posted.
 
@@ -104,26 +104,26 @@ MAIL ETIQUETTE
   messages"
 
   No matter what, we NEVER EVER respond to trolls or spammers on the list. If
-  you believe the list admin should do something in particular, contact him/her
-  off-list. The subject will be taken care of as much as possible to prevent
-  repeated offenses, but responding on the list to such messages never leads to
+  you believe the list admin should do something particular, contact him/her
+  off-list. The subject will be taken care of as good as possible to prevent
+  repeated offenses, but responding on the list to such messages never lead to
   anything good and only puts the light even more on the offender: which was
-  the entire purpose of it getting sent to the list in the first place.
+  the entire purpose of it getting to the list in the first place.
 
   Don't feed the trolls!
 
   1.7 How to unsubscribe
 
-  You can unsubscribe the same way you subscribed in the first place. You go
-  to the page for the particular mailing list you're subscribed to and you enter
+  You unsubscribe the same way you subscribed in the first place. You go to
+  the page for the particular mailing list you're subscribed to and you enter
   your email address and password and press the unsubscribe button.
 
-  Also, the instructions to unsubscribe are included in the headers of every 
-  mail that is sent out to all curl related mailing lists and there's a footer 
-  in each mail that links to the "admin" page on which you can unsubscribe and 
-  change other options.
+  Also, this information is included in the headers of every mail that is sent
+  out to all curl related mailing lists and there's footer in each mail that
+  links to the "admin" page on which you can unsubscribe and change other
+  options.
 
-  You NEVER EVER email the mailing list requesting someone else to take you off
+  You NEVER EVER email the mailing list requesting someone else to get you off
   the list.
 
   1.8 I posted, now what?
@@ -132,35 +132,35 @@ MAIL ETIQUETTE
   send the email, your post will just be silently discarded.
 
   If you posted for the first time to the mailing list, you first need to wait
-  for an administrator to allow your email to go through (moderated). This normally
+  for an administrator to allow your email to go through. This normally
   happens very quickly but in case we're asleep, you may have to wait a few
   hours.
 
   Once your email goes through it is sent out to several hundred or even
-  thousands of recipients.  Your email may cover an area that not that many people
+  thousand recipients.  Your email may cover an area that not that many people
   know about or are interested in. Or possibly the person who knows about it
-  is on vacation or under a very heavy work load right now. You may have to wait
-  for a response and you should not expect to get a response at all, but
+  is on vacation or under a very heavy work load right now. You have to wait
+  for a response and you must not expect to get a response at all, but
   hopefully you get an answer within a couple of days.
 
   You do yourself and all of us a service when you include as many details as
   possible already in your first email. Mention your operating system and
   environment. Tell us which curl version you're using and tell us what you
   did, what happened and what you expected would happen. Preferably, show us
-  what you did with details enough to allow others to help point out the problem
-  or repeat the same steps in their locations.
+  what you did in details enough to allow others to help point out the problem
+  or repeat the same steps in their places.
 
   Failing to include details will only delay responses and make people respond
-  and ask for more details and you will have to send a follow-up email that 
-  includes them.
+  and ask for the details and you have to send a follow-up email that includes
+  them.
 
-  Expect the responses to primarily help YOU debug the issue, or ask YOU
+  Expect the responses to primarily help YOU debug the issue, or ask you
   questions that can lead you or others towards a solution or explanation to
   whatever you experience.
 
   If you are a repeat offender to the guidelines outlined in this document,
   chances are that people will ignore you at will and your chances to get
-  responses in the future will greatly diminish.
+  responses will greatly diminish.
 
 
 2. Sending mail
@@ -183,7 +183,7 @@ MAIL ETIQUETTE
 
   We're actively discouraging replying back to the single person by setting
   the Reply-To: field in outgoing mails back to the mailing list address,
-  making it harder for people to mail the author directly, if only by mistake.
+  making it harder for people to mail the author only by mistake.
 
   2.3 Use a Sensible Subject
 
@@ -198,9 +198,10 @@ MAIL ETIQUETTE
   mail conversation below. It forces users to read the mail in a backwards
   order to properly understand it.
 
-  This is why top posting is so bad (in top posting order):
+  This is why top posting is so bad:
 
-      A: Because it messes up the order in which people normally read text.
+      A: Because it messes up the order in which people normally read
+         text.
       Q: Why is top-posting such a bad thing?
       A: Top-posting.
       Q: What is the most annoying thing in e-mail?
@@ -254,7 +255,7 @@ MAIL ETIQUETTE
   If you are the one who asks, please consider responding once more in case
   one of the hints was what solved your problems. The guys who write answers
   feel good to know that they provided a good answer and that you fixed the
-  problem. Far too often, the person who asked the question is never heard from
+  problem. Far too often, the person who asked the question is never heard of
   again, and we never get to know if he/she is gone because the problem was
   solved or perhaps because the problem was unsolvable!
 
index ee8f607..149e0af 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -29,24 +29,21 @@ PDFPAGES = curl.pdf curl-config.pdf mk-ca-bundle.pdf
 
 HTMLPAGES = $(GENHTMLPAGES) index.html
 
-SUBDIRS = examples libcurl cmdline-opts
+SUBDIRS = examples libcurl
 
-CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) curl.1
+CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
 
-EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md  \
- README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS KNOWN_BUGS \
BINDINGS.md $(man_MANS) HISTORY.md INSTALL INSTALL.md LICENSE-MIXING.md         \
README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE  \
SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md         \
- CHECKSRC.md
+EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \
+ README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS      \
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY.md INSTALL        \
$(PDFPAGES) LICENSE-MIXING.md README.netware INSTALL.devcpp               \
MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE SSL-PROBLEMS.md \
HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md CHECKSRC.md
 
 MAN2HTML= roffit $< >$@
 
 SUFFIXES = .1 .html .pdf
 
-curl.1:
-       cd cmdline-opts && make
-
 html: $(HTMLPAGES)
        cd libcurl && make html
 
index 90ee8a2..0e96309 100644 (file)
@@ -21,7 +21,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -446,14 +446,14 @@ noinst_man_MANS = mk-ca-bundle.1
 GENHTMLPAGES = curl.html curl-config.html mk-ca-bundle.html
 PDFPAGES = curl.pdf curl-config.pdf mk-ca-bundle.pdf
 HTMLPAGES = $(GENHTMLPAGES) index.html
-SUBDIRS = examples libcurl cmdline-opts
-CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) curl.1
-EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md  \
- README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS KNOWN_BUGS \
BINDINGS.md $(man_MANS) HISTORY.md INSTALL INSTALL.md LICENSE-MIXING.md         \
README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE  \
SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md         \
- CHECKSRC.md
+SUBDIRS = examples libcurl
+CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
+EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \
+ README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS      \
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY.md INSTALL        \
$(PDFPAGES) LICENSE-MIXING.md README.netware INSTALL.devcpp               \
MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE SSL-PROBLEMS.md \
HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md CHECKSRC.md
 
 MAN2HTML = roffit $< >$@
 SUFFIXES = .1 .html .pdf
@@ -816,9 +816,6 @@ uninstall-man: uninstall-man1
 .PRECIOUS: Makefile
 
 
-curl.1:
-       cd cmdline-opts && make
-
 html: $(HTMLPAGES)
        cd libcurl && make html
 
index 9028963..12065f3 100644 (file)
@@ -11,16 +11,17 @@ README.netware
   Curl has been successfully compiled with gcc / nlmconv on different flavours
   of Linux as well as with the official Metrowerks CodeWarrior compiler.
   While not being the main development target, a continuously growing share of
-  curl users are NetWare-based, especially also consuming the lib from PHP.
+  curl users are NetWare-based, specially also consuming the lib from PHP.
 
-  The unix-style man pages are tricky to read on windows, so therefore all
-  those pages are also provided as web pages on the curl web site.
+  The unix-style man pages are tricky to read on windows, so therefore are all
+  those pages converted to HTML as well as pdf, and included in the release
+  archives.
 
   The main curl.1 man page is also "built-in" in the command line tool. Use a
   command line similar to this in order to extract a separate text file:
 
         curl -M >manual.txt
 
-  Read the INSTALL file for instructions on how to compile curl self.
+  Read the INSTALL file for instructions how to compile curl self.
 
 
index 00ca197..cfd45dd 100644 (file)
@@ -12,14 +12,15 @@ README.win32
   systems. While not being the main develop target, a fair share of curl users
   are win32-based.
 
-  The unix-style man pages are tricky to read on windows, so therefore all
-  those pages are also provided as web pages on the curl web site.
+  The unix-style man pages are tricky to read on windows, so therefore are all
+  those pages converted to HTML as well as pdf, and included in the release
+  archives.
 
   The main curl.1 man page is also "built-in" in the command line tool. Use a
   command line similar to this in order to extract a separate text file:
 
         curl -M >manual.txt
 
-  Read the INSTALL file for instructions on how to compile curl self.
+  Read the INSTALL file for instructions how to compile curl self.
 
 
index a7c7433..1b57452 100644 (file)
@@ -83,9 +83,10 @@ Coming dates
 Based on the description above, here are some planned release dates (at the
 time of this writing):
 
-- February 22, 2017 (version 7.53.0)
+- September 7, 2016 (version 7.50.2)
+- November 2, 2016
+- December 28, 2016
+- February 22, 2017
 - April 19, 2017
 - June 14, 2017
 - August 9, 2017
-- October 4, 2017
-- December 29, 2017
index 1007ccb..367130d 100644 (file)
@@ -5,6 +5,15 @@ 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
+------
+
+Improve performance. Measurements and tests have shown that in several cases
+doing transfers over HTTP/2 can be notably slower than the same transfer done
+over HTTP/1. Some of that difference can be attributed the inefficient window
+size handling currently in use but there are probably more to be learned and
+worked on to optimize this.
+
 QUIC
 ----
 
@@ -16,6 +25,15 @@ handle the binary/framing layer in a similar fashion to how HTTP/2 is
 implemented. This, to allow other projects to benefit from the work and to
 thus broaden the interest and chance of others to participate.
 
+TLS 1.3
+-------
+
+The new version of the TLS protocol is in the pipeline and will soon start to
+get used out in the wild. It offers some new interesting features and will
+need the TLS libraries to adapt and quite likely provide additional or
+modified APIs. libcurl needs to adapt accordingly.
+
+
 HTTP cookies
 ------------
 
@@ -34,17 +52,19 @@ 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.
-
-Or perhaps even better: revamp the formpost API completely while we're at it
-and making something that is easier to use and understand:
-
- https://github.com/curl/curl/wiki/formpost-API-redesigned
+deprecating the old ones to allow custom mallocs and more
 
 Third-party SASL
 ----------------
@@ -100,14 +120,18 @@ Improve
 
 2. curl -h output (considered overwhelming to users)
 
-3. we have > 200 command line options, is there a way to redo things to
+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. authentication framework (consider merging HTTP and SASL authentication to
+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)
 
-5. Perform some of the clean up from the TODO document, removing old
+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
 
index c88cc9c..3c07e0b 100644 (file)
@@ -1,3 +1,9 @@
+                                  _   _ ____  _
+                              ___| | | |  _ \| |
+                             / __| | | | |_) | |
+                            | (__| |_| |  _ <| |___
+                             \___|\___/|_| \_\_____|
+
 curl security for developers
 ============================
 
@@ -75,11 +81,9 @@ announcement.
   to the 'distros' mailing list to allow them to use the fix prior to the
   public announcement.
 
-- No more than 48 hours before the release, the private branch is merged into
-  the master branch and pushed. Once pushed, the information is accessible to
-  the public and the actual release should follow suit immediately afterwards.
-  The time between the push and the release is used for final tests and
-  reviews.
+- At the day of the next release, the private branch is merged into the master
+  branch and pushed. Once pushed, the information is accessible to the public
+  and the actual release should follow suit immediately afterwards.
 
 - The project team creates a release that includes the fix.
 
@@ -90,19 +94,9 @@ announcement.
 - The security web page on the web site should get the new vulnerability
   mentioned.
 
-Pre-notification
-----------------
-
-If you think you are or should be eligible for a pre-notification about
-upcoming security announcements for curl, we urge OS distros and similar
-vendors to primarily join the distros@openwall list as that is one of the
-purposes of that list - and not just for curl of course.
 
-If you are not a distro or otherwise not suitable for distros@openwall and yet
-want pre-notifications from us, contact the curl security team with a detailed
-and clear explanation why this is the case.
 
-curl-security (at haxx dot se)
+CURL-SECURITY (at haxx dot se)
 ------------------------------
 
 Who is on this list? There are a couple of criteria you must meet, and then we
@@ -112,5 +106,5 @@ curl project and you have shown an understanding for the project and its way
 of working. You must've been around for a good while and you should have no
 plans in vanishing in the near future.
 
-We do not make the list of participants public mostly because it tends to vary
+We do not make the list of partipants public mostly because it tends to vary
 somewhat over time and a list somewhere will only risk getting outdated.
index 0336e29..803818f 100644 (file)
@@ -11,7 +11,6 @@ Aaron Oneal
 Aaron Orenstein
 Abram Pousada
 Adam D. Moss
-Adam Langley
 Adam Light
 Adam Piggott
 Adam Sampson
@@ -21,7 +20,6 @@ Adriano Meirelles
 Ajit Dhumale
 Aki Koskinen
 Akos Pasztory
-Akshay Vernekar
 Alain Danteny
 Alan Pinstein
 Albert Chin-A-Young
@@ -34,12 +32,10 @@ Ales Novak
 Alessandro Ghedini
 Alessandro Vesely
 Alex Bligh
-Alex Chan
 Alex Fishman
 Alex Gruz
 Alex McLellan
 Alex Neblett
-Alex Rousskov
 Alex Suykov
 Alex Vinnik
 Alex aka WindEagle
@@ -52,7 +48,6 @@ Alexander Krasnostavsky
 Alexander Lazic
 Alexander Pepper
 Alexander Peslyak
-Alexander Sinditskiy
 Alexander Traud
 Alexander Zhuravlev
 Alexey Borzov
@@ -81,14 +76,11 @@ Andreas Malzahn
 Andreas Ntaflos
 Andreas Olsson
 Andreas Rieke
-Andreas Roth
 Andreas Schuldei
-Andreas Streichardt
 Andreas Wurf
 Andrei Benea
 Andrei Cipu
 Andrei Kurushin
-Andrei Sedoi
 Andrej E Baranov
 Andrew Benham
 Andrew Biggs
@@ -111,7 +103,6 @@ Anthon Pang
 Anthony Avina
 Anthony Bryan
 Anthony G. Basile
-Antoine Aubert
 Antoine Calando
 Anton Bychkov
 Anton Kalmykov
@@ -193,14 +184,12 @@ Brian Ulm
 Brock Noland
 Bru Rom
 Bruce Mitchener
-Bruce Stephens
 Bruno Thomsen
 Bruno de Carvalho
 Bryan Henderson
 Bryan Kemp
 Byrial Jensen
 Cameron Kaiser
-Cameron MacMinn
 Camille Moncelier
 Caolan McNamara
 Carlo Wood
@@ -226,7 +215,6 @@ Chris Smowton
 Chris Young
 Christian Fillion
 Christian Grothoff
-Christian Heimes
 Christian Hägele
 Christian Krause
 Christian Kurz
@@ -241,7 +229,6 @@ Christopher Conroy
 Christopher Palow
 Christopher R. Palmer
 Christopher Stone
-Chungtsun Li
 Ciprian Badescu
 Claes Jakobsson
 Clarence Gardner
@@ -280,9 +267,7 @@ Dan C
 Dan Cristian
 Dan Donahue
 Dan Fandrich
-Dan Jacobson
 Dan Locks
-Dan McNulty
 Dan Nelson
 Dan Petitt
 Dan Torop
@@ -297,7 +282,6 @@ Daniel Kahn Gillmor
 Daniel Lee Hwang
 Daniel Melani
 Daniel Mentz
-Daniel Romero
 Daniel Schauenberg
 Daniel Seither
 Daniel Shahaf
@@ -307,7 +291,6 @@ Daniel Theron
 Daniel at touchtunes
 Darryl House
 Darshan Mody
-Darío Hereñú
 Dave Dribin
 Dave Halbakken
 Dave Hamilton
@@ -338,7 +321,6 @@ David Odin
 David Phillips
 David Rosenstrauch
 David Ryskalczyk
-David Schweikert
 David Shaw
 David Strauss
 David Tarendash
@@ -377,7 +359,6 @@ Dmitry S. Baikov
 Dolbneff A.V
 Domenico Andreoli
 Dominick Meglio
-Dominik Hölzl
 Dominique Leuenberger
 Doug Kaufman
 Doug Porter
@@ -413,7 +394,6 @@ Emil Romanus
 Emiliano Ida
 Enrico Scholz
 Enrik Berkhan
-Eramoto Masaya
 Eric Cooper
 Eric Hu
 Eric Landes
@@ -446,7 +426,6 @@ Fabian Hiernaux
 Fabian Keil
 Fabian Ruff
 Fabrizio Ammollo
-Fahim Chandurwala
 Fedor Karpelevitch
 Feist Josselin
 Felix Yan
@@ -517,7 +496,6 @@ Greg Morse
 Greg Onufer
 Greg Pratt
 Greg Zavertnik
-Gregory Szorc
 Grigory Entin
 Guenole Bescon
 Guenter Knauf
@@ -538,7 +516,6 @@ Hans Steegers
 Hans-Jurgen May
 Hardeep Singh
 Haris Okanovic
-Harold Stuart
 Harshal Pradhan
 Hauke Duden
 He Qin
@@ -619,7 +596,6 @@ Javier G. Sogo
 Jay Austin
 Jayesh A Shah
 Jaz Fresh
-Jean Gressmann
 Jean Jacques Drouin
 Jean-Claude Chauve
 Jean-Francois Bertrand
@@ -641,7 +617,6 @@ Jens Rantil
 Jeremy Friesner
 Jeremy Huddleston
 Jeremy Lin
-Jeremy Pearson
 Jeroen Koekkoek
 Jeroen Ooms
 Jerome Muffat-Meridol
@@ -661,7 +636,7 @@ Jim Meyering
 Jiri Dvorak
 Jiri Hruska
 Jiri Jaburek
-Jiří Malák
+Jiri Malak
 Jocelyn Jaubert
 Joe Halpin
 Joe Malicki
@@ -774,7 +749,6 @@ Kevin Fisk
 Kevin Lussier
 Kevin Reed
 Kevin Roth
-Kim Minjoong
 Kim Rinnewitz
 Kim Vandry
 Kimmo Kinnunen
@@ -791,7 +765,6 @@ Kurt Fankhauser
 Kyle J. McKay
 Kyle L. Huff
 Kyle Sallee
-Kyselgov E.N
 Lachlan O'Dea
 Larry Campbell
 Larry Fahnoe
@@ -843,7 +816,6 @@ Luke Call
 Luke Dashjr
 Luo Jinghua
 Luong Dinh Dung
-Luật Nguyễn
 Lyndon Hill
 Maciej Karpiuk
 Maciej Puzio
@@ -872,7 +844,6 @@ Marcin Konicki
 Marco Deckel
 Marco G. Salvagno
 Marco Maggi
-Marcus Hoffmann
 Marcus Sundberg
 Marcus Webster
 Mario Schroeder
@@ -893,18 +864,16 @@ Markus Elfring
 Markus Koetter
 Markus Moeller
 Markus Oberhumer
-Markus Westerlind
 Marquis de Muesli
 Martijn Koster
 Martin C. Martin
 Martin Drasar
-Martin Frodl
 Martin Hager
 Martin Hedenfalk
 Martin Jansen
 Martin Lemke
 Martin Skinner
-Martin Storsjö
+Martin Storsjo
 Martin Vejnár
 Marty Kuhrt
 Maruko
@@ -926,9 +895,7 @@ Matthew Hall
 Matthias Bolte
 Maurice Barnum
 Mauro Iorio
-Mauro Rappa
 Max Katsev
-Max Khon
 Maxim Ivanov
 Maxim Perenesenko
 Maxim Prohorov
@@ -980,8 +947,6 @@ Mike Power
 Mike Protts
 Mike Revi
 Miklos Nemeth
-Miloš Ljumović
-Mingliang Zhu
 Miroslav Franc
 Miroslav Spousta
 Mitz Wark
@@ -999,13 +964,11 @@ Nathanael Nerode
 Nathaniel Waisbrot
 Naveen Chandran
 Naveen Noel
-Neal Poole
 Neil Bowers
 Neil Dunbar
 Neil Spring
 Nic Roets
 Nicholas Maniscalco
-Nick Draffen
 Nick Gimbrone
 Nick Humfrey
 Nick Zitzmann
@@ -1029,7 +992,6 @@ Norbert Kett
 Norbert Novotny
 Octavio Schroeder
 Ofer
-Okhin Vasilij
 Ola Mork
 Olaf Flebbe
 Olaf Stüben
@@ -1068,7 +1030,6 @@ Pau Garcia i Quiles
 Paul Donohue
 Paul Harrington
 Paul Howarth
-Paul Joyce
 Paul Marks
 Paul Marquis
 Paul Moore
@@ -1125,13 +1086,11 @@ Pierre Ynard
 Pooyan McSporran
 Pramod Sharma
 Prash Dush
-Praveen Pvs
 Priyanka Shah
 Puneet Pawaia
 Quagmire
 Quanah Gibson-Mount
 Quinn Slack
-R. Dennis Steed
 Radu Simionescu
 Rafa Muyo
 Rafael Antonio
@@ -1141,14 +1100,12 @@ Rafaël Carré
 Rainer Canavan
 Rainer Jung
 Rainer Koenig
-Rainer Müller
 Rajesh Naganathan
 Rajkumar Mandal
 Ralf S. Engelschall
 Ralph Beckmann
 Ralph Mitchell
 Ramana Mokkapati
-Randy Armstrong
 Randy McMurchy
 Ravi Pratap
 Ray Dassen
@@ -1158,7 +1115,6 @@ Razvan Cojocaru
 Reinhard Max
 Reinout van Schouwen
 Remi Gacogne
-Remo E
 Renato Botelho
 Renaud Chaillat
 Renaud Duhaut
@@ -1185,11 +1141,8 @@ Richard Moore
 Richard Prescott
 Richard Silverman
 Richard van den Berg
-Richy Kim
 Rick Jones
 Rick Richardson
-Ricki Hirner
-Rider Linden
 Rob Crittenden
 Rob Davies
 Rob Jones
@@ -1233,7 +1186,6 @@ Ryan Braud
 Ryan Chan
 Ryan Nelson
 Ryan Schmidt
-Ryan Scott
 Rémy Léone
 S. Moonesamy
 Salvador Dávila
@@ -1261,21 +1213,16 @@ Scott Cantor
 Scott Davis
 Scott McCreary
 Sean Boudreau
-Sean Burford
-Sebastian Mundry
 Sebastian Pohlschmidt
 Sebastian Rasmussen
 Senthil Raja Velu
-Sergei Kuzmin
 Sergei Nikulov
 Sergey Tatarincev
-Sergii Pylypenko
 Sergio Ballestrero
 Serj Kalichev
 Seshubabu Pasam
 Seth Mos
 Sh Diao
-Shachaf Ben-Kiki
 Shao Shuchao
 Sharad Gupta
 Shard
@@ -1310,7 +1257,6 @@ Stefan Tomanek
 Stefan Ulrich
 Steinar H. Gunderson
 Stephan Bergmann
-Stephen Brokenshire
 Stephen Collyer
 Stephen Kick
 Stephen More
@@ -1381,7 +1327,6 @@ Tobias Stoeckmann
 Toby Peterson
 Todd A Ouska
 Todd Kulesza
-Todd Short
 Todd Vierling
 Tom Benoist
 Tom Donovan
@@ -1406,10 +1351,8 @@ Tommie Gannert
 Tommy Tam
 Ton Voon
 Toni Moreno
-Tony Kelman
 Toon Verwaest
 Tor Arntsen
-Torben Dannhauer
 Torsten Foertsch
 Toshio Kuratomi
 Toshiyuki Maezawa
@@ -1425,8 +1368,6 @@ Ulf Samuelsson
 Ulrich Doehner
 Ulrich Telle
 Ulrich Zadow
-Valentin David
-Vasy Okhin
 Venkat Akella
 Victor Snezhko
 Vijay Panghal
@@ -1487,27 +1428,20 @@ Zdenek Pavlas
 Zekun Ni
 Zmey Petroff
 Zvi Har'El
-afrind on github
 asavah on github
 baumanj on github
 bsammon on github
 dkjjr89 on github
 eXeC64 on github
-jonrumsey on github
 jveazey on github
 kreshano on github
-lukaszgn on github
 marc-groundctl on github
 neex on github
 nk
-nopjmp on github
 silveja1 on github
 swalkaus at yahoo.com
-tarek112 on github
 tommink[at]post.pl
 vanillajonathan on github
 wmsch on github
-zelinchen on github
-İsmail Dönmez
 Štefan Kremeň
 Никита Дорохин
index 15c1b27..40b8cc8 100644 (file)
--- a/docs/TODO
+++ b/docs/TODO
@@ -6,7 +6,7 @@
 
                 Things that could be nice to do in the future
 
- Things to do in project curl. Please tell us what you think, contribute and
+ 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
@@ -23,8 +23,9 @@
  1.5 get rid of PATH_MAX
  1.6 Modified buffer size approach
  1.7 Detect when called from within callbacks
- 1.8 CURLOPT_RESOLVE for any port number
+ 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.14 Typesafe curl_easy_setopt()
@@ -36,8 +37,6 @@
  1.20 SRV and URI DNS records
  1.21 API for URL parsing/splitting
  1.23 Offer API to flush the connection pool
- 1.24 TCP Fast Open for windows
- 1.25 Remove the generated include file
 
  2. libcurl - multi interface
  2.1 More non-blocking
  5.1 Better persistency for HTTP 1.0
  5.2 support FF3 sqlite cookie files
  5.3 Rearrange request header order
- 5.4 HTTP Digest using SHA-256
+ 5.4 Use huge HTTP/2 windows
  5.5 auth= in URLs
  5.6 Refuse "downgrade" redirects
  5.7 Brotli compression
  5.8 QUIC
- 5.9 Improve formpost API
- 5.10 Leave secure cookies alone
- 5.11 Chunked transfer multipart formpost
- 5.12 OPTIONS *
 
  6. TELNET
  6.1 ditch stdin
  13.1 Disable specific versions
  13.2 Provide mutex locking API
  13.3 Evaluate SSL patches
- 13.4 Cache/share OpenSSL contexts
+ 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
- 13.10 Support SSLKEYLOGFILE
- 13.11 Support intermediate & root pinning for PINNEDPUBLICKEY
- 13.12 Support HSTS
- 13.13 Support HPKP
+ 13.9 Support TLS v1.3
 
  14. GnuTLS
  14.1 SSL engine stuff
  17. SSH protocols
  17.1 Multiplexing
  17.2 SFTP performance
- 17.3 Support better than MD5 hostkey hash
 
  18. Command line tool
  18.1 sync
  18.12 keep running, read instructions from pipe/socket
  18.13 support metalink in http headers
  18.14 --fail without --location should treat 3xx as a failure
- 18.15 --retry should resume
- 18.16 send only part of --data
- 18.17 consider file name from the redirected URL with -O ?
 
  19. Build
  19.1 roffit
- 19.2 Enable PIE and RELRO by default
 
  20. Test suite
  20.1 SSL tunnel
  subsequently can add code within libcurl that returns error if called within
  callbacks for when that's not supported.
 
-1.8 CURLOPT_RESOLVE for any port number
+1.8 Allow SSL (HTTPS) to proxy
 
- This option allows applications to set a replacement IP address for a given
- host + port pair. Consider making support for providing a replacement address
- for the host name on all port numbers.
+ To prevent local users from snooping on your traffic to the proxy. Supported
+ by Firefox and Chrome already:
+ https://www.chromium.org/developers/design-documents/secure-web-proxy
 
- See https://github.com/curl/curl/issues/1264
+ See this stale work in progress branch:
+ https://github.com/curl/curl/tree/HTTPS-proxy based on this PR:
+ https://github.com/curl/curl/pull/305
 
 1.9 Cache negative name resolves
 
  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
  An API could allow a forced flush or just a forced loop that would properly
  close all connections that have been closed by the server already.
 
-1.24 TCP Fast Open for windows
-
- libcurl supports the CURLOPT_TCP_FASTOPEN option since 7.49.0 for Linux and
- Mac OS. Windows supports TCP Fast Open starting with Windows 10, version 1607
- and we should add support for it.
-
-1.25 Remove the generated include file
-
- When curl and libcurl are built, one of the public include files are
- generated and is populated with a set of defines that are derevid from sizes
- and constants for the particular target architecture that build is made. For
- platforms that can select between 32 bit and 64 bit at build time, this
- approach makes the libcurl build only create a set of public headers suitable
- for one of the architectures and not both. If you build libcurl for such a
- platform and you want to allow applications to get built using either 32/64
- version, you must generate the libcurl headers once for each setup and you
- must then add a replacement curl header that would itself select the correct
- 32 or 64 bit specific header as necessary.
-
- Your curl/curl.h alternative could then look like (replace with suitable CPP
- variable to check):
-
-     #ifdef ARCH_32bit
-     #include <curl32/curl.h>
-     #else /* ARCH_64bit  */
-     #include <curl64/curl.h>
-     #endif
-
- A fix would either (A) fix the 32/64 setup automatically or even better (B)
- work away the architecture specific defines from the headers so that they can
- be used for all architectures independently of what libcurl was built for.
-
 
 2. libcurl - multi interface
 
  Make sure we don't ever loop because of non-blocking sockets returning
  EWOULDBLOCK or similar. Blocking cases include:
 
- - Name resolves on non-windows unless c-ares or the threaded resolver is used
+ - Name resolves on non-windows unless c-ares is used
+ - NSS SSL connections
  - HTTP proxy CONNECT operations
  - SOCKS proxy handshakes
  - file:// transfers
@@ -527,14 +491,12 @@ This is not detailed in any FTP specification.
  headers use a default value so only headers that need to be moved have to be
  specified.
 
-5.4 HTTP Digest using SHA-256
-
- RFC 7616 introduces an update to the HTTP Digest authentication
- specification, which amongst other thing defines how new digest algorithms
- can be used instead of MD5 which is considered old and not recommanded.
+5.4 Use huge HTTP/2 windows
 
- See https://tools.ietf.org/html/rfc7616 and
- https://github.com/curl/curl/issues/1018
+ We're currently using nghttp2's default window size which is terribly small
+ (64K). This becomes a bottle neck over high bandwidth networks. We should
+ instead make the window size to be very big (512MB?) as we really don't do
+ much flow control anyway.
 
 5.5 auth= in URLs
 
@@ -557,9 +519,11 @@ This is not detailed in any FTP specification.
 
 5.7 Brotli compression
 
- Brotli compression performs better than gzip and is being implemented by
- browsers and servers widely. The algorithm: https://github.com/google/brotli
- The Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=366559
+ 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
 
 5.8 QUIC
 
@@ -571,46 +535,6 @@ This is not detailed in any FTP specification.
  implemented. This, to allow other projects to benefit from the work and to
  thus broaden the interest and chance of others to participate.
 
-5.9 Improve formpost API
-
- Revamp the formpost API and making something that is easier to use and
- understand:
-
- https://github.com/curl/curl/wiki/formpost-API-redesigned
-
-5.10 Leave secure cookies alone
-
- Non-secure origins (HTTP sites) should not be allowed to set or modify
- cookies with the 'secure' property:
-
- https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01
-
-5.11 Chunked transfer multipart formpost
-
- For a case where the file is being made during the upload is progressing
- (like passed on stdin to the curl tool), we cannot know the size before-hand
- and we rather not read the entire thing into memory before it can start the
- upload.
-
- https://github.com/curl/curl/issues/1139
-
-5.12 OPTIONS *
-
- HTTP defines an OPTIONS method that can be sent with an asterisk option like
- "OPTIONS *" to ask about options from the server and not a specific URL
- resource. https://tools.ietf.org/html/rfc7230#section-5.3.4
-
- libcurl as it currently works will always sent HTTP methods with a path that
- starts with a slash so there's no way for an application to send a proper
- "OPTIONS *" using libcurl. This should be fixed.
-
- I can't think of any other non-slash paths we should support so it will
- probably make sense to add a new boolean option for issuign an "OPTIONS *"
- request. CURLOPT_OPTIONSASTERISK perhaps (and a corresponding command line
- option)?
-
- See https://github.com/curl/curl/issues/1280
-
 
 6. TELNET
 
@@ -731,7 +655,7 @@ that doesn't exist on the server, just like --ftp-create-dirs.
  Evaluate/apply Gertjan van Wingerde's SSL patches:
  https://curl.haxx.se/mail/lib-2004-03/0087.html
 
-13.4 Cache/share 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
@@ -741,12 +665,6 @@ that doesn't exist on the server, just like --ftp-create-dirs.
  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.
 
- Technically, the "caching" is probably best implemented by getting added to
- the share interface so that easy handles who want to and can reuse the
- context specify that by sharing with the right properties set.
-
- https://github.com/curl/curl/issues/1110
-
 13.5 Export session ids
 
  Add an interface to libcurl that enables "session IDs" to get
@@ -781,51 +699,14 @@ that doesn't exist on the server, just like --ftp-create-dirs.
  Björn Stenberg wrote a separate initial take on DANE that was never
  completed.
 
-13.10 Support SSLKEYLOGFILE
+13.9 Support TLS v1.3
 
- When used, Firefox and Chrome dumps their master TLS keys to the file name
- this environment variable specifies. This allows tools like for example
- Wireshark to capture and decipher TLS traffic to/from those clients. libcurl
- could be made to support this more widely (presumably this already works when
- built with NSS). Peter Wu made a OpenSSL preload to make possible that can be
- used as inspiration and guidance
- https://git.lekensteyn.nl/peter/wireshark-notes/tree/src/sslkeylog.c
+ TLS version 1.3 is about to ship and is getting implemented by TLS libraries
+ as we speak. We should start to support the symbol and make sure all backends
+ handle it accordingly, then gradually add support as the TLS libraries add
+ the corresponding support. There may be a need to add some additional options
+ to allow libcurl to take advantage of the new features in 1.3.
 
-13.11 Support intermediate & root pinning for PINNEDPUBLICKEY
-
- CURLOPT_PINNEDPUBLICKEY does not consider the hashes of intermediate & root
- certificates when comparing the pinned keys. Therefore it is not compatible
- with "HTTP Public Key Pinning" as there also intermediate and root certificates
- can be pinned. This is very useful as it prevents webadmins from "locking
- themself out of their servers".
-
- Adding this feature would make curls pinning 100% compatible to HPKP and allow
- more flexible pinning.
-
-13.12 Support HSTS
-
- "HTTP Strict Transport Security" is TOFU (trust on first use), time-based
- features indicated by a HTTP header send by the webserver. It is widely used
- in browsers and it's purpose is to prevent insecure HTTP connections after
- a previous HTTPS connection. It protects against SSLStripping attacks.
-
- Doc: https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security
- RFC 6797: https://tools.ietf.org/html/rfc6797
-
-13.13 Support HPKP
-
- "HTTP Public Key Pinning" is TOFU (trust on first use), time-based
- features indicated by a HTTP header send by the webserver. It's purpose is
- to prevent Man-in-the-middle attacks by trusted CAs by allowing webadmins
- to specify which CAs/certificates/public keys to trust when connection to
- their websites.
-
- It can be build based on PINNEDPUBLICKEY.
-
- Wikipedia: https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning
- OWASP: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning
- Doc: https://developer.mozilla.org/de/docs/Web/Security/Public_Key_Pinning
- RFC: https://tools.ietf.org/html/draft-ietf-websec-key-pinning-21
 
 14. GnuTLS
 
@@ -910,16 +791,6 @@ that doesn't exist on the server, just like --ftp-create-dirs.
  libcurl's SFTP transfer performance is sub par and can be improved, mostly by
  the approach mentioned in "1.6 Modified buffer size approach".
 
-17.3 Support better than MD5 hostkey hash
-
- libcurl offers the CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 option for verifying the
- server's key. MD5 is generally being deprecated so we should implement
- support for stronger hashing algorithms. libssh2 itself is what provides this
- underlying functionality and it supports at least SHA-1 as an alternative.
- SHA-1 is also being deprecated these days so we should consider workign with
- libssh2 to instead offer support for SHA-256 or similar.
-
-
 18. Command line tool
 
 18.1 sync
@@ -938,7 +809,7 @@ that doesn't exist on the server, just like --ftp-create-dirs.
 
 18.3 prevent file overwriting
 
- Add an option that prevents curl from overwriting existing local files. When
+ Add an option that prevents cURL from overwriting existing local files. When
  used, and there already is an existing file with the target file name
  (either -O or -o), a number should be appended (and increased if already
  existing). So that index.html becomes first index.html.1 and then
@@ -1043,42 +914,6 @@ that doesn't exist on the server, just like --ftp-create-dirs.
  way to implement this is probably to add that new logic in the command line
  tool only and not in the underlying CURLOPT_FAILONERROR logic.
 
-18.15 --retry should resume
-
- When --retry is used and curl actually retries transfer, it should use the
- already transfered data and do a resumed transfer for the rest (when
- possible) so that it doesn't have to transfer the same data again that was
- already tranfered before the retry.
-
- See https://github.com/curl/curl/issues/1084
-
-18.16 send only part of --data
-
- When the user only wants to send a small piece of the data provided with
- --data or --data-binary, like when that data is a huge file, consider a way
- to specify that curl should only send a piece of that. One suggested syntax
- would be: "--data-binary @largefile.zip!1073741823-2147483647".
-
- See https://github.com/curl/curl/issues/1200
-
-18.17 consider file name from the redirected URL with -O ?
-
- When a user gives a URL and uses -O, and curl follows a redirect to a new
- URL, the file name is not extracted and used from the newly redirected-to URL
- even if the new URL may have a much more sensible file name.
-
- This is clearly documented and helps for security since there's no surprise
- to users which file name that might get overwritten. But maybe a new option
- could allow for this or maybe -J should imply such a treatment as well as -J
- already allows for the server to decide what file name to use so it already
- provides the "may overwrite any file" risk.
-
- This is extra tricky if the original URL has no file name part at all since
- then the current code path will error out with an error message, and we can't
- *know* already at that point if curl will be redirected to a URL that has a
- file name...
-
- See https://github.com/curl/curl/issues/1241
 
 19. Build
 
@@ -1087,19 +922,6 @@ that doesn't exist on the server, just like --ftp-create-dirs.
  Consider extending 'roffit' to produce decent ASCII output, and use that
  instead of (g)nroff when building src/tool_hugehelp.c
 
-19.2 Enable PIE and RELRO by default
-
- Especially when having programs that execute curl via the command line, PIE
- renders the exploitation of memory corruption vulnerabilities a lot more
- difficult. This can be attributed to the additional information leaks being
- required to conduct a successful attack. RELRO, on the other hand, masks
- different binary sections like the GOT as read-only and thus kills a handful
- of techniques that come in handy when attackers are able to arbitrarily
- overwrite memory. A few tests showed that enabling these features had close
- to no impact, neither on the performance nor on the general functionality of
- curl.
-
-
 20. Test suite
 
 20.1 SSL tunnel
index b2bd9db..047db80 100644 (file)
@@ -145,7 +145,7 @@ The Art Of Scripting HTTP Requests Using Curl
  address and that's what curl will communicate with. Alternatively you specify
  the IP address directly in the URL instead of a name.
 
- For development and other trying out situations, you can point to a different
+ For development and other trying out situation, you can point out a different
  IP address for a host name than what would otherwise be used, by using curl's
  --resolve option:
 
@@ -153,7 +153,7 @@ The Art Of Scripting HTTP Requests Using Curl
  
  2.3 Port number
 
- Each protocol curl supports operates on a default port number, be it over TCP
+ Each protocol curl supports operate on a default port number, be it over TCP
  or in some cases UDP. Normally you don't have to take that into
  consideration, but at times you run test servers on other ports or
  similar. Then you can specify the port number in the URL with a colon and a
@@ -164,7 +164,7 @@ The Art Of Scripting HTTP Requests Using Curl
 
  The port number you specify in the URL is the number that the server uses to
  offer its services. Sometimes you may use a local proxy, and then you may
- need to specify that proxy's port number separately for what curl needs to
+ need to specify that proxy's port number separate on what curl needs to
  connect to locally. Like when using a HTTP proxy on port 4321:
 
       curl --proxy http://proxy.example.org:4321 http://remote.example.org/
@@ -172,7 +172,7 @@ The Art Of Scripting HTTP Requests Using Curl
  2.4 User name and password
 
  Some services are setup to require HTTP authentication and then you need to
- provide name and password which is then transferred to the remote site in
+ provide name and password which then is transferred to the remote site in
  various ways depending on the exact authentication protocol used.
 
  You can opt to either insert the user and password in the URL or you can
@@ -198,7 +198,7 @@ The Art Of Scripting HTTP Requests Using Curl
 
  3.1 GET
 
- The simplest and most common request/operation made using HTTP is to GET a
+ The simplest and most common request/operation made using HTTP is to get a
  URL. The URL could itself refer to a web page, an image or a file. The client
  issues a GET request to the server and receives the document it asked for.
  If you issue the command line
@@ -269,14 +269,14 @@ The Art Of Scripting HTTP Requests Using Curl
  4.1 Forms explained
 
  Forms are the general way a web site can present a HTML page with fields for
- the user to enter data in, and then press some kind of 'OK' or 'Submit'
+ the user to enter data in, and then press some kind of 'OK' or 'submit'
  button to get that data sent to the server. The server then typically uses
  the posted data to decide how to act. Like using the entered words to search
- in a database, or to add the info in a bug tracking system, display the entered
+ in a database, or to add the info in a bug track system, display the entered
  address on a map or using the info as a login-prompt verifying that the user
  is allowed to see what it is about to see.
 
- Of course there has to be some kind of program on the server end to receive
+ Of course there has to be some kind of program in the server end to receive
  the data you send. You cannot just invent something out of the air.
 
  4.2 GET
@@ -369,7 +369,7 @@ The Art Of Scripting HTTP Requests Using Curl
 
  4.5 Hidden Fields
 
-  A very common way for HTML based applications to pass state information
+  A very common way for HTML based application to pass state information
   between pages is to add hidden fields to the forms. Hidden fields are
   already filled in, they aren't displayed to the user and they get passed
   along just as all the other fields.
@@ -383,7 +383,7 @@ The Art Of Scripting HTTP Requests Using Curl
       <input type=submit name="press" value="OK">
     </form>
 
-  To POST this with curl, you won't have to think about if the fields are
+  To post this with curl, you won't have to think about if the fields are
   hidden or not. To curl they're all the same:
 
         curl --data "birthyear=1905&press=OK&person=daniel" [URL]
@@ -405,7 +405,7 @@ The Art Of Scripting HTTP Requests Using Curl
 
  5.1 PUT
 
Perhaps the best way to upload data to a HTTP server is to use PUT. Then
The perhaps best way to upload data to a HTTP server is to use PUT. Then
  again, this of course requires that someone put a program or script on the
  server end that knows how to receive a HTTP PUT stream.
 
@@ -446,7 +446,7 @@ The Art Of Scripting HTTP Requests Using Curl
  If your proxy requires the authentication to be done using the NTLM method,
  use --proxy-ntlm, if it requires Digest use --proxy-digest.
 
- If you use any one of these user+password options but leave out the password
+ If you use any one these user+password options but leave out the password
  part, curl will prompt for the password interactively.
 
  6.4 Hiding credentials
@@ -508,7 +508,7 @@ The Art Of Scripting HTTP Requests Using Curl
  to redirect is Location:.
 
  Curl does not follow Location: headers by default, but will simply display
- such pages in the same manner it displays all HTTP replies. It does however
+ such pages in the same manner it display all HTTP replies. It does however
  feature an option that will make it attempt to follow the Location: pointers.
 
  To tell curl to follow a Location:
@@ -562,7 +562,7 @@ The Art Of Scripting HTTP Requests Using Curl
  (Take note that the --cookie-jar option described below is a better way to
  store cookies.)
 
- Curl has a full blown cookie parsing engine built-in that comes in use if you
+ Curl has a full blown cookie parsing engine built-in that comes to use if you
  want to reconnect to a server and use cookies that were stored from a
  previous connection (or hand-crafted manually to fool the server into
  believing you had a previous connection). To use previously stored cookies,
@@ -592,7 +592,7 @@ The Art Of Scripting HTTP Requests Using Curl
 
  10.1 HTTPS is HTTP secure
 
- There are a few ways to do secure HTTP transfers. By far the most common
+ There are a few ways to do secure HTTP transfers. The by far most common
  protocol for doing this is what is generally known as HTTPS, HTTP over
  SSL. SSL encrypts all the data that is sent and received over the network and
  thus makes it harder for attackers to spy on sensitive information.
@@ -680,7 +680,7 @@ The Art Of Scripting HTTP Requests Using Curl
 
  12.1 Some login tricks
 
- While not strictly just HTTP related, it still causes a lot of people problems
+ While not strictly just HTTP related, it still cause a lot of people problems
  so here's the executive run-down of how the vast majority of all login forms
  work and how to login to them using curl.
 
@@ -693,7 +693,7 @@ The Art Of Scripting HTTP Requests Using Curl
  make sure you got there through their login page) so you should make a habit
  of first getting the login-form page to capture the cookies set there.
 
- Some web-based login systems feature various amounts of javascript, and
+ Some web-based login systems features various amounts of javascript, and
  sometimes they use such code to set or modify cookie contents. Possibly they
  do that to prevent programmed logins, like this manual describes how to...
  Anyway, if reading the code isn't enough to let you repeat the behavior
@@ -755,4 +755,4 @@ The Art Of Scripting HTTP Requests Using Curl
 
  14.2 Sites
 
- https://curl.haxx.se is the home of the curl project
+ https://curl.haxx.se is the home of the cURL project
diff --git a/docs/cmdline-opts/MANPAGE.md b/docs/cmdline-opts/MANPAGE.md
deleted file mode 100644 (file)
index 1ba00c8..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# curl man page generator
-
-This is the curl man page generator. It generates a single nroff man page
-output from the set of sources files in this directory.
-
-There is one source file for each supported command line option. The format is
-described below.
-
-## Option files
-
-Each command line option is described in a file named `<long name>.d`, where
-option name is written without any prefixing dashes. Like the file name for
-the -v, --verbose option is named `verbose.d`.
-
-Each file has a set of meta-data and a body of text.
-
-### Meta-data
-
-    Short: (single letter, without dash)
-    Long: (long form name, without dashes)
-    Arg: (the argument the option takes)
-    Magic: (description of "magic" options)
-    Tags: (space separated list)
-    Protocols: (space separated list for which protocols this option works)
-    Added: (version number in which this was added)
-    Mutexed: (space separated list of options this overrides)
-    Requires: (space separated list of features this option requires)
-    See-also: (space separated list of related options)
-    Help: (short text for the --help output for this option)
-    --- (end of meta-data)
-
-### Body
-
-The body of the description. Only refer to options with their long form option
-version, like --verbose. The output generator will replace such with the
-correct markup that shows both short and long version.
-
-## Header
-
-`page-header` is the nroff formatted file that will be output before the
-generated options output for the master man page.
-
-## Generate
-
-`./gen.pl mainpage`
-
-This command outputs a single huge nroff file, meant to become `curl.1`. The
-full curl man page.
-
-`./gen.pl listhelp`
-
-Generates a full `curl --help` output for all known command line options.
diff --git a/docs/cmdline-opts/Makefile.am b/docs/cmdline-opts/Makefile.am
deleted file mode 100644 (file)
index c844bca..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#***************************************************************************
-#                                  _   _ ____  _
-#  Project                     ___| | | |  _ \| |
-#                             / __| | | | |_) | |
-#                            | (__| |_| |  _ <| |___
-#                             \___|\___/|_| \_\_____|
-#
-# Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software 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.
-#
-###########################################################################
-
-AUTOMAKE_OPTIONS = foreign no-dependencies
-
-MANPAGE = $(top_builddir)/docs/curl.1
-
-DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \
-  cert-status.d cert-type.d ciphers.d compressed.d config.d            \
-  connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d   \
-  create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d     \
-  data-raw.d data-urlencode.d delegation.d digest.d disable.d          \
-  disable-eprt.d disable-epsv.d dns-interface.d dns-ipv4-addr.d                \
-  dns-ipv6-addr.d dns-servers.d dump-header.d egd-file.d engine.d      \
-  environment.d expect100-timeout.d fail.d fail-early.d false-start.d  \
-  form.d form-string.d ftp-account.d ftp-alternative-to-user.d         \
-  ftp-create-dirs.d ftp-method.d ftp-pasv.d ftp-port.d ftp-pret.d      \
-  ftp-skip-pasv-ip.d ftp-ssl-ccc.d ftp-ssl-ccc-mode.d ftp-ssl-control.d        \
-  get.d globoff.d head.d header.d help.d hostpubmd5.d http1.0.d                \
-  http1.1.d http2.d http2-prior-knowledge.d ignore-content-length.d    \
-  include.d insecure.d interface.d ipv4.d ipv6.d junk-session-cookies.d        \
-  keepalive-time.d key.d key-type.d krb.d libcurl.d limit-rate.d       \
-  list-only.d local-port.d location.d location-trusted.d               \
-  login-options.d mail-auth.d mail-from.d mail-rcpt.d manual.d         \
-  max-filesize.d max-redirs.d max-time.d metalink.d negotiate.d netrc.d        \
-  netrc-file.d netrc-optional.d next.d no-alpn.d no-buffer.d           \
-  no-keepalive.d no-npn.d noproxy.d no-sessionid.d ntlm.d ntlm-wb.d    \
-  oauth2-bearer.d output.d pass.d path-as-is.d pinnedpubkey.d post301.d        \
-  post302.d post303.d preproxy.d progress-bar.d proto.d proto-default.d        \
-  proto-redir.d proxy1.0.d proxy-anyauth.d proxy-basic.d proxy-cacert.d        \
-  proxy-capath.d proxy-cert.d proxy-cert-type.d proxy-ciphers.d                \
-  proxy-crlfile.d proxy.d proxy-digest.d proxy-header.d                        \
-  proxy-insecure.d proxy-key.d proxy-key-type.d proxy-negotiate.d      \
-  proxy-ntlm.d proxy-pass.d proxy-service-name.d                       \
-  proxy-ssl-allow-beast.d proxy-tlsauthtype.d proxy-tlspassword.d      \
-  proxy-tlsuser.d proxy-tlsv1.d proxytunnel.d proxy-user.d pubkey.d    \
-  quote.d random-file.d range.d raw.d referer.d remote-header-name.d   \
-  remote-name-all.d remote-name.d remote-time.d request.d resolve.d    \
-  retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \
-  service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d     \
-  socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d                \
-  speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d   \
-  ssl-reqd.d sslv2.d sslv3.d stderr.d tcp-fastopen.d tcp-nodelay.d     \
-  telnet-option.d tftp-blksize.d tftp-no-options.d time-cond.d         \
-  tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d  \
-  tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d   \
-  unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d    \
-  verbose.d version.d write-out.d xattr.d
-
-OTHERPAGES = page-footer page-header
-
-EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES)
-
-all: $(MANPAGE)
-
-$(MANPAGE): $(DPAGES) $(OTHERPAGES)
-       @PERL@ $(srcdir)/gen.pl mainpage $(srcdir) > $(MANPAGE)
diff --git a/docs/cmdline-opts/Makefile.in b/docs/cmdline-opts/Makefile.in
deleted file mode 100644 (file)
index fb2a689..0000000
+++ /dev/null
@@ -1,598 +0,0 @@
-# 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@
-
-#***************************************************************************
-#                                  _   _ ____  _
-#  Project                     ___| | | |  _ \| |
-#                             / __| | | | |_) | |
-#                            | (__| |_| |  _ <| |___
-#                             \___|\___/|_| \_\_____|
-#
-# Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software 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.
-#
-###########################################################################
-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 = docs/cmdline-opts
-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 = 
-depcomp =
-am__depfiles_maybe =
-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@
-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@
-AUTOMAKE_OPTIONS = foreign no-dependencies
-MANPAGE = $(top_builddir)/docs/curl.1
-DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \
-  cert-status.d cert-type.d ciphers.d compressed.d config.d            \
-  connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d   \
-  create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d     \
-  data-raw.d data-urlencode.d delegation.d digest.d disable.d          \
-  disable-eprt.d disable-epsv.d dns-interface.d dns-ipv4-addr.d                \
-  dns-ipv6-addr.d dns-servers.d dump-header.d egd-file.d engine.d      \
-  environment.d expect100-timeout.d fail.d fail-early.d false-start.d  \
-  form.d form-string.d ftp-account.d ftp-alternative-to-user.d         \
-  ftp-create-dirs.d ftp-method.d ftp-pasv.d ftp-port.d ftp-pret.d      \
-  ftp-skip-pasv-ip.d ftp-ssl-ccc.d ftp-ssl-ccc-mode.d ftp-ssl-control.d        \
-  get.d globoff.d head.d header.d help.d hostpubmd5.d http1.0.d                \
-  http1.1.d http2.d http2-prior-knowledge.d ignore-content-length.d    \
-  include.d insecure.d interface.d ipv4.d ipv6.d junk-session-cookies.d        \
-  keepalive-time.d key.d key-type.d krb.d libcurl.d limit-rate.d       \
-  list-only.d local-port.d location.d location-trusted.d               \
-  login-options.d mail-auth.d mail-from.d mail-rcpt.d manual.d         \
-  max-filesize.d max-redirs.d max-time.d metalink.d negotiate.d netrc.d        \
-  netrc-file.d netrc-optional.d next.d no-alpn.d no-buffer.d           \
-  no-keepalive.d no-npn.d noproxy.d no-sessionid.d ntlm.d ntlm-wb.d    \
-  oauth2-bearer.d output.d pass.d path-as-is.d pinnedpubkey.d post301.d        \
-  post302.d post303.d preproxy.d progress-bar.d proto.d proto-default.d        \
-  proto-redir.d proxy1.0.d proxy-anyauth.d proxy-basic.d proxy-cacert.d        \
-  proxy-capath.d proxy-cert.d proxy-cert-type.d proxy-ciphers.d                \
-  proxy-crlfile.d proxy.d proxy-digest.d proxy-header.d                        \
-  proxy-insecure.d proxy-key.d proxy-key-type.d proxy-negotiate.d      \
-  proxy-ntlm.d proxy-pass.d proxy-service-name.d                       \
-  proxy-ssl-allow-beast.d proxy-tlsauthtype.d proxy-tlspassword.d      \
-  proxy-tlsuser.d proxy-tlsv1.d proxytunnel.d proxy-user.d pubkey.d    \
-  quote.d random-file.d range.d raw.d referer.d remote-header-name.d   \
-  remote-name-all.d remote-name.d remote-time.d request.d resolve.d    \
-  retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \
-  service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d     \
-  socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d                \
-  speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d   \
-  ssl-reqd.d sslv2.d sslv3.d stderr.d tcp-fastopen.d tcp-nodelay.d     \
-  telnet-option.d tftp-blksize.d tftp-no-options.d time-cond.d         \
-  tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d  \
-  tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d   \
-  unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d    \
-  verbose.d version.d write-out.d xattr.d
-
-OTHERPAGES = page-footer page-header
-EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES)
-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 docs/cmdline-opts/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --foreign docs/cmdline-opts/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
-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-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 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-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: $(MANPAGE)
-
-$(MANPAGE): $(DPAGES) $(OTHERPAGES)
-       @PERL@ $(srcdir)/gen.pl mainpage $(srcdir) > $(MANPAGE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/docs/cmdline-opts/abstract-unix-socket.d b/docs/cmdline-opts/abstract-unix-socket.d
deleted file mode 100644 (file)
index bb4467b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: abstract-unix-socket
-Arg: <path>
-Help: Connect through an abstract Unix domain socket
-Added: 7.53.0
-Protocols: HTTP
----
-Connect through an abstract Unix domain socket, instead of using the network.
-Note: netstat shows the path of an abstract socket prefixed with '@', however
-the <path> argument should not have this leading character.
diff --git a/docs/cmdline-opts/anyauth.d b/docs/cmdline-opts/anyauth.d
deleted file mode 100644 (file)
index c32d1ed..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Long: anyauth
-Help: Pick any authentication method
-Protocols: HTTP
-See-also: proxy-anyauth basic digest
----
-Tells curl to figure out authentication method by itself, and use the most
-secure one the remote site claims to support. This is done by first doing a
-request and checking the response-headers, thus possibly inducing an extra
-network round-trip. This is used instead of setting a specific authentication
-method, which you can do with --basic, --digest, --ntlm, and --negotiate.
-
-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.
-
-Used together with --user.
diff --git a/docs/cmdline-opts/append.d b/docs/cmdline-opts/append.d
deleted file mode 100644 (file)
index f001b12..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Short: a
-Long: append
-Help: Append to target file when uploading
-Protocols: FTP SFTP
----
-When used in an upload, this makes curl append to the target file instead of
-overwriting it. If the remote file doesn't exist, it will be created.  Note
-that this flag is ignored by some SFTP servers (including OpenSSH).
diff --git a/docs/cmdline-opts/basic.d b/docs/cmdline-opts/basic.d
deleted file mode 100644 (file)
index 09d42af..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: basic
-Help: Use HTTP Basic Authentication
-See-also: proxy-basic
-Protocols: HTTP
----
-Tells curl to use HTTP Basic authentication with the remote host. This is the
-default and this option is usually pointless, unless you use it to override a
-previously set option that sets a different authentication method (such as
---ntlm, --digest, or --negotiate).
-
-Used together with --user.
diff --git a/docs/cmdline-opts/cacert.d b/docs/cmdline-opts/cacert.d
deleted file mode 100644 (file)
index 04e1139..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-Long: cacert
-Arg: <CA certificate>
-Help: CA certificate to verify peer against
-Protocols: TLS
----
-Tells curl to use the specified certificate file to verify the peer. The file
-may contain multiple CA certificates. The certificate(s) must be in PEM
-format. Normally curl is built to use a default file for this, so this option
-is typically used to alter that default file.
-
-curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is
-set, and uses the given path as a path to a CA cert bundle. This option
-overrides that variable.
-
-The windows version of curl will automatically look for a CA certs file named
-\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
-Current Working Directory, or in any folder along your PATH.
-
-If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
-(libnsspem.so) needs to be available for this option to work properly.
-
-(iOS and macOS only) If curl is built against Secure Transport, then this
-option is supported for backward compatibility with other SSL engines, but it
-should not be set. If the option is not set, then curl will use the
-certificates in the system and user Keychain to verify the peer, which is the
-preferred method of verifying the peer's certificate chain.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/capath.d b/docs/cmdline-opts/capath.d
deleted file mode 100644 (file)
index 0763f7a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Long: capath
-Arg: <dir>
-Help: CA directory to verify peer against
-Protocols: TLS
----
-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 --capath can allow
-OpenSSL-powered curl to make SSL-connections much more efficiently than using
---cacert if the --cacert file contains many CA certificates.
-
-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.
diff --git a/docs/cmdline-opts/cert-status.d b/docs/cmdline-opts/cert-status.d
deleted file mode 100644 (file)
index f1aaa21..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Long: cert-status
-Protocols: TLS
-Added: 7.41.0
-Help: Verify the status of the server certificate
----
-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.
diff --git a/docs/cmdline-opts/cert-type.d b/docs/cmdline-opts/cert-type.d
deleted file mode 100644 (file)
index a04bdce..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: cert-type
-Protocols: TLS
-Arg: <type>
-Help: Certificate file type (DER/PEM/ENG)
-See-also: cert key key-type
----
-Tells curl what certificate type the provided certificate is in. PEM, DER and
-ENG are recognized types.  If not specified, PEM is assumed.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/cert.d b/docs/cmdline-opts/cert.d
deleted file mode 100644 (file)
index 0cd5d53..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-Short: E
-Long: cert
-Arg: <certificate[:password]>
-Help: Client certificate file and password
-Protocols: TLS
-See-also: cert-type key key-type
----
-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 client certificate concatenated! See --cert and --key 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
-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.
-
-(iOS and macOS 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.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/ciphers.d b/docs/cmdline-opts/ciphers.d
deleted file mode 100644 (file)
index d3bac60..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: ciphers
-Arg: <list of ciphers>
-help: SSL ciphers to use
-Protocols: TLS
----
-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:
-
- https://curl.haxx.se/docs/ssl-ciphers.html
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/compressed.d b/docs/cmdline-opts/compressed.d
deleted file mode 100644 (file)
index dc130c1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: compressed
-Help: Request compressed response
-Protocols: 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.
diff --git a/docs/cmdline-opts/config.d b/docs/cmdline-opts/config.d
deleted file mode 100644 (file)
index 4a32512..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Long: config
-Arg: <file>
-Help: Read config from a file
-Short: K
----
-Specify which config file to read curl arguments from. The config file is a
-text file in which command line arguments can be written which then will be
-used as if they were written on the actual command line.
-
-Options and their parameters must be specified on the same config file line,
-separated by whitespace, colon, 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.
-
-If the parameter is to contain whitespace, the parameter must be enclosed
-within quotes. Within double quotes, the following escape sequences are
-available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash preceding any other
-letter is ignored. If the first column of a config line is a '#' character,
-the rest of the line will be treated as a comment. Only write one option per
-physical line in the config file.
-
-Specify the filename to --config as '-' to make curl read the file from stdin.
-
-Note that to be able to specify a URL in the config file, you need to specify
-it using the --url option, and not by simply writing the URL on its own
-line. So, it could look similar to this:
-
-url = "https://curl.haxx.se/docs/"
-
-When curl is invoked, it always (unless --disable is used) checks for a
-default config file and uses it if found. The default config file is checked
-for in the following places in this order:
-
-1) curl tries to find the "home dir": It first checks for the CURL_HOME and
-then the HOME environment variables. Failing that, it uses getpwuid() on
-Unix-like systems (which returns the home dir given the current user in your
-system). On Windows, it then checks for the APPDATA variable, or as a last
-resort the '%USERPROFILE%\\Application Data'.
-
-2) On windows, if there is no _curlrc file in the home dir, it checks for one
-in the same dir the curl executable is placed. On Unix-like systems, it will
-simply try to load .curlrc from the determined home dir.
-
-.nf
-# --- Example file ---
-# this is a comment
-url = "example.com"
-output = "curlhere.html"
-user-agent = "superagent/1.0"
-
-# and fetch another URL too
-url = "example.com/docs/manpage.html"
--O
-referer = "http://nowhereatall.example.com/"
-# --- End of example file ---
-.fi
-
-This option can be used multiple times to load multiple config files.
diff --git a/docs/cmdline-opts/connect-timeout.d b/docs/cmdline-opts/connect-timeout.d
deleted file mode 100644 (file)
index 3a32d86..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: connect-timeout
-Arg: <seconds>
-Help: Maximum time allowed for connection
-See-also: max-time
----
-Maximum time in seconds that you allow curl's connection to take.  This only
-limits the connection phase, so if curl connects within the given period it
-will continue - if not it will exit.  Since version 7.32.0, this option
-accepts decimal values.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/connect-to.d b/docs/cmdline-opts/connect-to.d
deleted file mode 100644 (file)
index 3fa0568..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Long: connect-to
-Arg: <HOST1:PORT1:HOST2:PORT2>
-Help: Connect to host
-Added: 7.49.0
-See-also: resolve header
----
-
-For a request to the given HOST:PORT pair, connect to
-CONNECT-TO-HOST:CONNECT-TO-PORT instead.  This option is suitable to direct
-requests at a specific server, e.g. at a specific cluster node in a cluster of
-servers.  This option is only used to establish the network connection. It
-does NOT affect the hostname/port that is used for TLS/SSL (e.g. SNI,
-certificate verification) or for the application protocols.  "host" and "port"
-may be the empty string, meaning "any host/port".  "connect-to-host" and
-"connect-to-port" may also be the empty string, meaning "use the request's
-original host/port".
-
-This option can be used many times to add many connect rules.
diff --git a/docs/cmdline-opts/continue-at.d b/docs/cmdline-opts/continue-at.d
deleted file mode 100644 (file)
index 733f494..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Short: C
-Long: continue-at
-Arg: <offset>
-Help: Resumed transfer offset
-See-also: range
----
-Continue/Resume a previous file transfer at the given offset. The given offset
-is the exact number of bytes that will be skipped, counting from the beginning
-of the source file before it is transferred to the destination.  If used with
-uploads, the FTP server command SIZE will not be used by curl.
-
-Use "-C -" to tell curl to automatically find out where/how to resume the
-transfer. It then uses the given output/input files to figure that out.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/cookie-jar.d b/docs/cmdline-opts/cookie-jar.d
deleted file mode 100644 (file)
index da79777..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Short: c
-Long: cookie-jar
-Arg: <filename>
-Protocols: HTTP
-Help: Write cookies to <filename> after operation
----
-Specify to which file you want curl to write all cookies after a completed
-operation. Curl writes all cookies from its in-memory cookie storage to the
-given file at the end of operations. 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.
-
-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 --cookie
-option.
-
-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 --verbose will get a warning
-displayed, but that is the only visible feedback you get about this possibly
-lethal situation.
-
-If this option is used several times, the last specified file name will be
-used.
diff --git a/docs/cmdline-opts/cookie.d b/docs/cmdline-opts/cookie.d
deleted file mode 100644 (file)
index 383adda..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-Short: b
-Long: cookie
-Arg: <data>
-Protocols: HTTP
-Help: Send cookies from string/file
----
-Pass the data to the HTTP server in the Cookie header. It is supposedly
-the data previously received from the server in a "Set-Cookie:" line.  The
-data should be in the format "NAME1=VALUE1; NAME2=VALUE2".
-
-If no '=' symbol is used in the argument, it is instead treated as a filename
-to read previously stored cookie from. This option also activates the cookie
-engine which will make curl record incoming cookies, which may be handy if
-you're using this in combination with the --location option or do multiple URL
-transfers on the same invoke.
-
-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.
-
-The file specified with --cookie is only used as input. No cookies will be
-written to the file. To store cookies, use the --cookie-jar 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.
-
-Users very often want to both read cookies from a file and write updated
-cookies back to a file, so using both --cookie and --cookie-jar in the same
-command line is common.
diff --git a/docs/cmdline-opts/create-dirs.d b/docs/cmdline-opts/create-dirs.d
deleted file mode 100644 (file)
index 49e22e7..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: create-dirs
-Help: Create necessary local directory hierarchy
----
-When used in conjunction with the --output option, curl will create the
-necessary local directory hierarchy as needed. This option creates the dirs
-mentioned with the --output option, nothing else. If the --output file name
-uses no dir or if the dirs it mentions already exist, no dir will be created.
-
-To create remote directories when using FTP or SFTP, try --ftp-create-dirs.
diff --git a/docs/cmdline-opts/crlf.d b/docs/cmdline-opts/crlf.d
deleted file mode 100644 (file)
index f6694b6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: crlf
-Help: Convert LF to CRLF in upload
-Protocols: FTP SMTP
----
-Convert LF to CRLF in upload. Useful for MVS (OS/390).
-
-(SMTP added in 7.40.0)
diff --git a/docs/cmdline-opts/crlfile.d b/docs/cmdline-opts/crlfile.d
deleted file mode 100644 (file)
index 0fcc63c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: crlfile
-Arg: <file>
-Protocols: TLS
-Help: Get a CRL list in PEM format from the given file
-Added: 7.19.7
----
-Provide a file using PEM format with a Certificate Revocation List that may
-specify peer certificates that are to be considered revoked.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/data-ascii.d b/docs/cmdline-opts/data-ascii.d
deleted file mode 100644 (file)
index bda4abc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: data-ascii
-Arg: <data>
-Help: HTTP POST ASCII data
-Protocols: HTTP
----
-This is just an alias for --data.
diff --git a/docs/cmdline-opts/data-binary.d b/docs/cmdline-opts/data-binary.d
deleted file mode 100644 (file)
index c6721c6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Long: data-binary
-Arg: <data>
-Help: HTTP POST binary data
-Protocols: HTTP
----
-This posts data exactly as specified with no extra processing whatsoever.
-
-If you start the data with the letter @, the rest should be a filename.  Data
-is posted in a similar manner as --data does, except that newlines 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 --data.
diff --git a/docs/cmdline-opts/data-raw.d b/docs/cmdline-opts/data-raw.d
deleted file mode 100644 (file)
index 7669b4a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: data-raw
-Arg: <data>
-Protocols: HTTP
-Help: HTTP POST data, '@' allowed
-Added: 7.43.0
-See-also: data
----
-This posts data similarly to --data but without the special
-interpretation of the @ character.
diff --git a/docs/cmdline-opts/data-urlencode.d b/docs/cmdline-opts/data-urlencode.d
deleted file mode 100644 (file)
index 9873f33..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Long: data-urlencode
-Arg: <data>
-Help: HTTP POST data url encoded
-Protocols: HTTP
-See-also: data data-raw
-Added: 7.18.0
----
-This posts data, similar to the other --data options with the exception
-that this performs URL-encoding.
-
-To be CGI-compliant, the <data> part should begin with a \fIname\fP followed
-by a separator and a content specification. The <data> part can be passed to
-curl using one of the following syntaxes:
-.RS
-.IP "content"
-This will make curl URL-encode the content and pass that on. Just be careful
-so that the content doesn't contain any = or @ symbols, as that will then make
-the syntax match one of the other cases below!
-.IP "=content"
-This will make curl URL-encode the content and pass that on. The preceding =
-symbol is not included in the data.
-.IP "name=content"
-This will make curl URL-encode the content part and pass that on. Note that
-the name part is expected to be URL-encoded already.
-.IP "@filename"
-This will make curl load data from the given file (including any newlines),
-URL-encode that data and pass it on in the POST.
-.IP "name@filename"
-This will make curl load data from the given file (including any newlines),
-URL-encode that data and pass it on in the POST. The name part gets an equal
-sign appended, resulting in \fIname=urlencoded-file-content\fP. Note that the
-name is expected to be URL-encoded already.
-.RE
diff --git a/docs/cmdline-opts/data.d b/docs/cmdline-opts/data.d
deleted file mode 100644 (file)
index 1572858..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-Long: data
-Short: d
-Arg: <data>
-Help: HTTP POST data
-Protocols: HTTP
-See-also: data-binary data-urlencode data-raw
-Mutexed: form head upload
----
-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 --form.
-
---data-raw is almost the same but does not have a special interpretation of
-the @ character. To post data purely binary, you should instead use the
---data-binary option.  To URL-encode the value of a form field you may use
---data-urlencode.
-
-If any of these options is used more than once on the same command line, the
-data pieces specified will be merged together with a separating
-&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
-chunk that looks like \&'name=daniel&skill=lousy'.
-
-If you start the data with the letter @, the rest should be a file name to
-read the data from, or - if you want curl to read the data from
-stdin. Multiple files can also be specified. Posting data from a file named
-'foobar' would thus be done with --data @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 --data-raw
-instead.
diff --git a/docs/cmdline-opts/delegation.d b/docs/cmdline-opts/delegation.d
deleted file mode 100644 (file)
index 138d823..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Long: delegation
-Arg: <LEVEL>
-Help: GSS-API delegation permission
-Protocols: GSS/kerberos
----
-Set LEVEL to tell the server what it is allowed to delegate when it
-comes to user credentials.
-.RS
-.IP "none"
-Don't allow any delegation.
-.IP "policy"
-Delegates if and only if the OK-AS-DELEGATE flag is set in the Kerberos
-service ticket, which is a matter of realm policy.
-.IP "always"
-Unconditionally allow the server to delegate.
-.RE
diff --git a/docs/cmdline-opts/digest.d b/docs/cmdline-opts/digest.d
deleted file mode 100644 (file)
index 5cdd925..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: digest
-Help: Use HTTP Digest Authentication
-Protocols: HTTP
-Mutexed: basic ntlm negotiate
-See-also: user proxy-digest anyauth
----
-Enables HTTP Digest authentication. This is an authentication scheme that
-prevents the password from being sent over the wire in clear text. Use this in
-combination with the normal --user option to set user name and password.
-
-If this option is used several times, only the first one is used.
diff --git a/docs/cmdline-opts/disable-eprt.d b/docs/cmdline-opts/disable-eprt.d
deleted file mode 100644 (file)
index a1e53c0..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Long: disable-eprt
-Help: Inhibit using EPRT or LPRT
-Protocols: 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.
-
---eprt can be used to explicitly enable EPRT again and --no-eprt is an alias
-for --disable-eprt.
-
-If the server is accessed using IPv6, 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 --ftp-port or force it with --ftp-pasv.
diff --git a/docs/cmdline-opts/disable-epsv.d b/docs/cmdline-opts/disable-epsv.d
deleted file mode 100644 (file)
index 6d2cb70..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Long: disable-epsv
-Help: Inhibit using EPSV
-Protocols: FTP
----
-(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.
-
---epsv can be used to explicitly enable EPSV again and --no-epsv is an alias
-for --disable-epsv.
-
-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 --ftp-port.
diff --git a/docs/cmdline-opts/disable.d b/docs/cmdline-opts/disable.d
deleted file mode 100644 (file)
index 20b27b4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: disable
-Short: q
-Help: Disable .curlrc
----
-If used as the first parameter on the command line, the \fIcurlrc\fP config
-file will not be read and used. See the --config for details on the default
-config file search path.
diff --git a/docs/cmdline-opts/dns-interface.d b/docs/cmdline-opts/dns-interface.d
deleted file mode 100644 (file)
index 45e5af2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: dns-interface
-Arg: <interface>
-Help: Interface to use for DNS requests
-Protocols: DNS
-See-also: dns-ipv4-addr dns-ipv6-addr
-Added: 7.33.0
-Requires: c-ares
----
-Tell curl to send outgoing DNS requests through <interface>. This option is a
-counterpart to --interface (which does not affect DNS). The supplied string
-must be an interface name (not an address).
diff --git a/docs/cmdline-opts/dns-ipv4-addr.d b/docs/cmdline-opts/dns-ipv4-addr.d
deleted file mode 100644 (file)
index 597b858..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: dns-ipv4-addr
-Arg: <address>
-Help: IPv4 address to use for DNS requests
-Protocols: DNS
-See-also: dns-interface dns-ipv6-addr
-Added: 7.33.0
-Requires: c-ares
----
-Tell curl to bind to <ip-address> when making IPv4 DNS requests, so that
-the DNS requests originate from this address. The argument should be a
-single IPv4 address.
diff --git a/docs/cmdline-opts/dns-ipv6-addr.d b/docs/cmdline-opts/dns-ipv6-addr.d
deleted file mode 100644 (file)
index 581f019..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: dns-ipv6-addr
-Arg: <address>
-Help: IPv6 address to use for DNS requests
-Protocols: DNS
-See-also: dns-interface dns-ipv4-addr
-Added: 7.33.0
-Requires: c-ares
----
-Tell curl to bind to <ip-address> when making IPv6 DNS requests, so that
-the DNS requests originate from this address. The argument should be a
-single IPv6 address.
diff --git a/docs/cmdline-opts/dns-servers.d b/docs/cmdline-opts/dns-servers.d
deleted file mode 100644 (file)
index a98fd07..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: dns-servers
-Arg: <addresses>
-Help: DNS server addrs to use
-Requires: c-ares
-Added: 7.33.0
----
-Set the list of DNS servers to be used instead of the system default.
-The list of IP addresses should be separated with commas. Port numbers
-may also optionally be given as \fI:<port-number>\fP after each IP
-address.
diff --git a/docs/cmdline-opts/dump-header.d b/docs/cmdline-opts/dump-header.d
deleted file mode 100644 (file)
index 05c10af..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Long: dump-header
-Short: D
-Arg: <filename>
-Help: Write the received headers to <filename>
-Protocols: HTTP FTP
-See-also: output
----
-Write the received protocol headers to the specified file.
-
-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 --cookie option! The --cookie-jar option is a
-better way to store cookies.
-
-When used in FTP, the FTP server response lines are considered being "headers"
-and thus are saved there.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/egd-file.d b/docs/cmdline-opts/egd-file.d
deleted file mode 100644 (file)
index c22790f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: egd-file
-Arg: <file>
-Help: EGD socket path for random data
-Protocols: TLS
-See-also: random-file
----
-Specify the path name to the Entropy Gathering Daemon socket. The socket is
-used to seed the random engine for SSL connections.
diff --git a/docs/cmdline-opts/engine.d b/docs/cmdline-opts/engine.d
deleted file mode 100644 (file)
index cde1a47..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: engine
-Arg: <name>
-Help: Crypto engine to use
-Protocols: TLS
----
-Select the OpenSSL crypto engine to use for cipher operations. Use --engine
-list to print a list of build-time supported engines. Note that not all (or
-none) of the engines may be available at run-time.
diff --git a/docs/cmdline-opts/environment.d b/docs/cmdline-opts/environment.d
deleted file mode 100644 (file)
index 6289e53..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: environment
-Help: Write results to environment variables
-Requires: RISC OS
----
-Sets a range of environment variables, using the names the --write-out option
-supports, to allow easier extraction of useful information after having run
-curl.
diff --git a/docs/cmdline-opts/expect100-timeout.d b/docs/cmdline-opts/expect100-timeout.d
deleted file mode 100644 (file)
index c88f0b8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: expect100-timeout
-Arg: <seconds>
-Help: How long to wait for 100-continue
-Protocols: HTTP
-Added: 7.47.0
-See-also: connect-timeout
----
-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.
diff --git a/docs/cmdline-opts/fail-early.d b/docs/cmdline-opts/fail-early.d
deleted file mode 100644 (file)
index 4489b4f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Long: fail-early
-Help: Fail on first transfer error, do not continue
-Added: 7.52.0
----
-Fail and exit on first detected error.
-
-When curl is used to do multiple transfers on the command line, it will
-attempt to operate on each given URL, one by one. By default, it will ignore
-errors if there are more URLs given and the last URL's success will determine
-the error code curl returns. So early failures will be "hidden" by subsequent
-successful transfers.
-
-Using this option, curl will instead return an error on the first transfers
-that fails, independent on the amount of more URLs that are given on the
-command line. This way, no transfer failures go undetected by scripts and
-similar.
-
-This option will apply for all given URLs even if you use --next.
diff --git a/docs/cmdline-opts/fail.d b/docs/cmdline-opts/fail.d
deleted file mode 100644 (file)
index c46c571..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Long: fail
-Short: f
-Protocols: HTTP
-Help: Fail silently (no output at all) on HTTP errors
----
-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.
-
-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).
diff --git a/docs/cmdline-opts/false-start.d b/docs/cmdline-opts/false-start.d
deleted file mode 100644 (file)
index 65a8afb..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: false-start
-Help: Enable TLS False Start
-Protocols: TLS
-Added: 7.42.0
----
-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.
diff --git a/docs/cmdline-opts/form-string.d b/docs/cmdline-opts/form-string.d
deleted file mode 100644 (file)
index 8079055..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: form-string
-Help: Specify HTTP multipart POST data
-Protocols: HTTP
-Arg: <name=string>
-See-also: form
----
-Similar to --form except that the value string for the named parameter is used
-literally. Leading \&'@' and \&'<' characters, and the \&';type=' string in
-the value have no special meaning. Use this in preference to --form if
-there's any possibility that the string value may accidentally trigger the
-\&'@' or \&'<' features of --form.
diff --git a/docs/cmdline-opts/form.d b/docs/cmdline-opts/form.d
deleted file mode 100644 (file)
index 87a7d07..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-Long: form
-Short: F
-Arg: <name=content>
-Help: Specify HTTP multipart POST data
-Protocols: HTTP
-Mutexed: data head upload
----
-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 RFC 2388. This enables uploading of binary
-files etc. To force the 'content' part to be a file, prefix the file name with
-an @ sign. To just get the content part from a file, prefix the file name with
-the symbol <. The difference between @ and < is then that @ makes a file get
-attached in the post as a file upload, while the < makes a text field and just
-get the contents for that text field from a file.
-
-Example: to send an image to a server, where \&'profile' is the name of the
-form-field to which portrait.jpg will be the input:
-
- curl -F profile=@portrait.jpg https://example.com/upload.cgi
-
-To read content from stdin instead of a file, use - as the filename. This goes
-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:
-
- curl -F "web=@index.html;type=text/html" example.com
-
-or
-
- curl -F "name=daniel;type=text/foo" example.com
-
-You can also explicitly change the name field of a file upload part by setting
-filename=, like this:
-
- curl -F "file=@localfile;filename=nameinpost" example.com
-
-If filename/path contains ',' or ';', it must be quoted by double-quotes like:
-
- curl -F "file=@\\"localfile\\";filename=\\"nameinpost\\"" example.com
-
-or
-
- curl -F 'file=@"localfile";filename="nameinpost"' example.com
-
-Note that if a filename/path is quoted by double-quotes, any double-quote
-or backslash within the filename must be escaped by backslash.
-
-See further examples and details in the MANUAL.
-
-This option can be used multiple times.
diff --git a/docs/cmdline-opts/ftp-account.d b/docs/cmdline-opts/ftp-account.d
deleted file mode 100644 (file)
index 013c4f3..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: ftp-account
-Arg: <data>
-Help: Account data string
-Protocols: FTP
-Added: 7.13.0
----
-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.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/ftp-alternative-to-user.d b/docs/cmdline-opts/ftp-alternative-to-user.d
deleted file mode 100644 (file)
index 8982ba8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: ftp-alternative-to-user
-Arg: <command>
-Help: String to replace USER [name]
-Protocols: FTP
-Added: 7.15.5
----
-If authenticating with the USER and PASS commands fails, send this command.
-When connecting to Tumbleweed's Secure Transport server over FTPS using a
-client certificate, using "SITE AUTH" will tell the server to retrieve the
-username from the certificate.
diff --git a/docs/cmdline-opts/ftp-create-dirs.d b/docs/cmdline-opts/ftp-create-dirs.d
deleted file mode 100644 (file)
index ede5710..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: ftp-create-dirs
-Protocols: FTP SFTP
-Help: Create the remote dirs if not present
-See-also: create-dirs
----
-When an FTP or SFTP URL/operation uses a path that doesn't currently exist on
-the server, the standard behavior of curl is to fail. Using this option, curl
-will instead attempt to create missing directories.
diff --git a/docs/cmdline-opts/ftp-method.d b/docs/cmdline-opts/ftp-method.d
deleted file mode 100644 (file)
index 95aa522..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Long: ftp-method
-Arg: <method>
-Help: Control CWD usage
-Protocols: FTP
-Added: 7.15.1
----
-Control what method curl should use to reach a file on an FTP(S)
-server. The method argument should be one of the following alternatives:
-.RS
-.IP multicwd
-curl does a single CWD operation for each path part in the given URL. For deep
-hierarchies this means very many commands. This is how RFC 1738 says it should
-be done. This is the default but the slowest behavior.
-.IP nocwd
-curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full
-path to the server for all these commands. This is the fastest behavior.
-.IP singlecwd
-curl does one CWD with the full target directory and then operates on the file
-\&"normally" (like in the multicwd case). This is somewhat more standards
-compliant than 'nocwd' but without the full penalty of 'multicwd'.
-.RE
diff --git a/docs/cmdline-opts/ftp-pasv.d b/docs/cmdline-opts/ftp-pasv.d
deleted file mode 100644 (file)
index 44103e2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Long: ftp-pasv
-Help: Use PASV/EPSV instead of PORT
-Protocols: FTP
-Added: 7.11.0
-See-also: disable-epsv
----
-Use passive mode for the data connection. Passive is the internal default
-behavior, but using this option can be used to override a previous --ftp-port
-option.
-
-If this option is used several times, only the first one is used. Undoing an
-enforced passive really isn't doable but you must then instead enforce the
-correct --ftp-port again.
-
-Passive mode means that curl will try the EPSV command first and then PASV,
-unless --disable-epsv is used.
diff --git a/docs/cmdline-opts/ftp-port.d b/docs/cmdline-opts/ftp-port.d
deleted file mode 100644 (file)
index a852e90..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-Long: ftp-port
-Arg: <address>
-Help: Use PORT instead of PASV
-Short: P
-Protocols: FTP
-See-also: ftp-pasv disable-eprt
----
-Reverses the default initiator/listener roles when connecting with FTP. This
-option makes curl use active mode. curl then tells the server to connect back
-to the client's specified address and port, while passive mode asks the server
-to setup an IP address and port for it to connect to. <address> should be one
-of:
-.RS
-.IP interface
-i.e "eth0" to specify which interface's IP address you want to use (Unix only)
-.IP "IP address"
-i.e "192.168.10.1" to specify the exact IP address
-.IP "host name"
-i.e "my.host.domain" to specify the machine
-.IP "-"
-make curl pick the same IP address that is already used for the control
-connection
-.RE
-
-If this option is used several times, the last one will be used. Disable the
-use of PORT with --ftp-pasv. Disable the attempt to use the EPRT command
-instead of PORT by using --disable-eprt. EPRT is really PORT++.
-
-Since 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.
diff --git a/docs/cmdline-opts/ftp-pret.d b/docs/cmdline-opts/ftp-pret.d
deleted file mode 100644 (file)
index dac4c35..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: ftp-pret
-Help: Send PRET before PASV
-Protocols: FTP
-Added: 7.20.0
----
-Tell curl to send a PRET command before PASV (and EPSV). Certain FTP servers,
-mainly drftpd, require this non-standard command for directory listings as
-well as up and downloads in PASV mode.
diff --git a/docs/cmdline-opts/ftp-skip-pasv-ip.d b/docs/cmdline-opts/ftp-skip-pasv-ip.d
deleted file mode 100644 (file)
index da6ab11..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: ftp-skip-pasv-ip
-Help: Skip the IP address for PASV
-Protocols: FTP
-Added: 7.14.2
-See-also: ftp-pasv
----
-Tell curl to not use the IP address the server suggests in its response
-to curl's PASV command when curl connects the data connection. Instead curl
-will re-use the same IP address it already uses for the control
-connection.
-
-This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
diff --git a/docs/cmdline-opts/ftp-ssl-ccc-mode.d b/docs/cmdline-opts/ftp-ssl-ccc-mode.d
deleted file mode 100644 (file)
index be10294..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: ftp-ssl-ccc-mode
-Arg: <active/passive>
-Help: Set CCC mode
-Protocols: FTP
-Added: 7.16.2
-See-also: ftp-ssl-ccc
----
-Sets the CCC mode. The passive mode will not initiate the shutdown, but
-instead wait for the server to do it, and will not reply to the shutdown from
-the server. The active mode initiates the shutdown and waits for a reply from
-the server.
diff --git a/docs/cmdline-opts/ftp-ssl-ccc.d b/docs/cmdline-opts/ftp-ssl-ccc.d
deleted file mode 100644 (file)
index c6edc5b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: ftp-ssl-ccc
-Help: Send CCC after authenticating
-Protocols: FTP
-See-also: ssl ftp-ssl-ccc-mode
-Added: 7.16.1
----
-Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer after
-authenticating. The rest of the control channel communication will be
-unencrypted. This allows NAT routers to follow the FTP transaction. The
-default mode is passive.
diff --git a/docs/cmdline-opts/ftp-ssl-control.d b/docs/cmdline-opts/ftp-ssl-control.d
deleted file mode 100644 (file)
index 87a8225..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: ftp-ssl-control
-Help: Require SSL/TLS for FTP login, clear for transfer
-Protocols: FTP
-Added: 7.16.0
----
-Require SSL/TLS for the FTP login, clear for transfer.  Allows secure
-authentication, but non-encrypted data transfers for efficiency.  Fails the
-transfer if the server doesn't support SSL/TLS.
diff --git a/docs/cmdline-opts/gen.pl b/docs/cmdline-opts/gen.pl
deleted file mode 100755 (executable)
index 91e893f..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-#!/usr/bin/perl
-
-=begin comment
-
-This script generates the manpage.
-
-Example: gen.pl mainpage > curl.1
-
-Dev notes:
-
-We open *input* files in :crlf translation (a no-op on many platforms) in
-case we have CRLF line endings in Windows but a perl that defaults to LF.
-Unfortunately it seems some perls like msysgit can't handle a global input-only
-:crlf so it has to be specified on each file open for text input.
-
-=end comment
-=cut
-
-my $some_dir=$ARGV[1] || ".";
-
-opendir(my $dh, $some_dir) || die "Can't opendir $some_dir: $!";
-my @s = grep { /\.d$/ && -f "$some_dir/$_" } readdir($dh);
-closedir $dh;
-
-my %optshort;
-my %optlong;
-my %helplong;
-my %arglong;
-my %redirlong;
-my %protolong;
-
-# get the long name version, return the man page string
-sub manpageify {
-    my ($k)=@_;
-    my $l;
-    if($optlong{$k} ne "") {
-        # both short + long
-        $l = "\\fI-".$optlong{$k}.", --$k\\fP";
-    }
-    else {
-        # only long
-        $l = "\\fI--$k\\fP";
-    }
-    return $l;
-}
-
-sub printdesc {
-    my @desc = @_;
-    for my $d (@desc) {
-        # skip lines starting with space (examples)
-        if($d =~ /^[^ ]/) {
-            for my $k (keys %optlong) {
-                my $l = manpageify($k);
-                $d =~ s/--$k([^a-z0-9_-])/$l$1/;
-            }
-        }
-        print $d;
-    }
-}
-
-sub seealso {
-    my($standalone, $data)=@_;
-    if($standalone) {
-        return sprintf
-            ".SH \"SEE ALSO\"\n$data\n";
-    }
-    else {
-        return "See also $data. ";
-    }
-}
-
-sub overrides {
-    my ($standalone, $data)=@_;
-    if($standalone) {
-        return ".SH \"OVERRIDES\"\n$data\n";
-    }
-    else {
-        return $data;
-    }
-}
-
-sub protocols {
-    my ($standalone, $data)=@_;
-    if($standalone) {
-        return ".SH \"PROTOCOLS\"\n$data\n";
-    }
-    else {
-        return "($data) ";
-    }
-}
-
-sub added {
-    my ($standalone, $data)=@_;
-    if($standalone) {
-        return ".SH \"ADDED\"\nAdded in curl version $data\n";
-    }
-    else {
-        return "Added in $data. ";
-    }
-}
-
-sub single {
-    my ($f, $standalone)=@_;
-    open(F, "<:crlf", "$some_dir/$f") ||
-        return 1;
-    my $short;
-    my $long;
-    my $tags;
-    my $added;
-    my $protocols;
-    my $arg;
-    my $mutexed;
-    my $requires;
-    my $seealso;
-    my $magic; # cmdline special option
-    while(<F>) {
-        if(/^Short: *(.)/i) {
-            $short=$1;
-        }
-        elsif(/^Long: *(.*)/i) {
-            $long=$1;
-        }
-        elsif(/^Added: *(.*)/i) {
-            $added=$1;
-        }
-        elsif(/^Tags: *(.*)/i) {
-            $tags=$1;
-        }
-        elsif(/^Arg: *(.*)/i) {
-            $arg=$1;
-        }
-        elsif(/^Magic: *(.*)/i) {
-            $magic=$1;
-        }
-        elsif(/^Mutexed: *(.*)/i) {
-            $mutexed=$1;
-        }
-        elsif(/^Protocols: *(.*)/i) {
-            $protocols=$1;
-        }
-        elsif(/^See-also: *(.*)/i) {
-            $seealso=$1;
-        }
-        elsif(/^Requires: *(.*)/i) {
-            $requires=$1;
-        }
-        elsif(/^Help: *(.*)/i) {
-            ;
-        }
-        elsif(/^---/) {
-            if(!$long) {
-                print STDERR "WARN: no 'Long:' in $f\n";
-            }
-            last;
-        }
-        else {
-            chomp;
-            print STDERR "WARN: unrecognized line in $f, ignoring:\n:'$_';"
-        }
-    }
-    my @dest;
-    while(<F>) {
-        push @desc, $_;
-    }
-    close(F);
-    my $opt;
-    if(defined($short) && $long) {
-        $opt = "-$short, --$long";
-    }
-    elsif($short && !$long) {
-        $opt = "-$short";
-    }
-    elsif($long && !$short) {
-        $opt = "--$long";
-    }
-
-    if($arg) {
-        $opt .= " $arg";
-    }
-
-    if($standalone) {
-        print ".TH curl 1 \"30 Nov 2016\" \"curl 7.52.0\" \"curl manual\"\n";
-        print ".SH OPTION\n";
-        print "curl $opt\n";
-    }
-    else {
-        print ".IP \"$opt\"\n";
-    }
-    if($protocols) {
-        print protocols($standalone, $protocols);
-    }
-
-    if($standalone) {
-        print ".SH DESCRIPTION\n";
-    }
-
-    printdesc(@desc);
-    undef @desc;
-
-    my @foot;
-    if($seealso) {
-        my @m=split(/ /, $seealso);
-        my $mstr;
-        for my $k (@m) {
-            my $l = manpageify($k);
-            $mstr .= sprintf "%s$l", $mstr?" and ":"";
-        }
-        push @foot, seealso($standalone, $mstr);
-    }
-    if($requires) {
-        my $l = manpageify($long);
-        push @foot, "$l requires that the underlying libcurl".
-            " was built to support $requires. ";
-    }
-    if($mutexed) {
-        my @m=split(/ /, $mutexed);
-        my $mstr;
-        for my $k (@m) {
-            my $l = manpageify($k);
-            $mstr .= sprintf "%s$l", $mstr?" and ":"";
-        }
-        push @foot, overrides($standalone, "This option overrides $mstr. ");
-    }
-    if($added) {
-        push @foot, added($standalone, $added);
-    }
-    if($foot[0]) {
-        print "\n";
-        my $f = join("", @foot);
-        $f =~ s/ +\z//; # remove trailing space
-        print "$f\n";
-    }
-    return 0;
-}
-
-sub getshortlong {
-    my ($f)=@_;
-    open(F, "<:crlf", "$some_dir/$f");
-    my $short;
-    my $long;
-    my $help;
-    my $arg;
-    my $protocols;
-    while(<F>) {
-        if(/^Short: (.)/i) {
-            $short=$1;
-        }
-        elsif(/^Long: (.*)/i) {
-            $long=$1;
-        }
-        elsif(/^Help: (.*)/i) {
-            $help=$1;
-        }
-        elsif(/^Arg: (.*)/i) {
-            $arg=$1;
-        }
-        elsif(/^Protocols: (.*)/i) {
-            $protocols=$1;
-        }
-        elsif(/^---/) {
-            last;
-        }
-    }
-    close(F);
-    if($short) {
-        $optshort{$short}=$long;
-    }
-    if($long) {
-        $optlong{$long}=$short;
-        $helplong{$long}=$help;
-        $arglong{$long}=$arg;
-        $protolong{$long}=$protocols;
-    }
-}
-
-sub indexoptions {
-  foreach my $f (@s) {
-    getshortlong($f);
-  }
-}
-
-sub header {
-    my ($f)=@_;
-    open(F, "<:crlf", "$some_dir/$f");
-    my @d;
-    while(<F>) {
-        push @d, $_;
-    }
-    close(F);
-    printdesc(@d);
-}
-
-sub listhelp {
-    foreach my $f (sort keys %helplong) {
-        my $long = $f;
-        my $short = $optlong{$long};
-        my $opt;
-
-        if(defined($short) && $long) {
-            $opt = "-$short, --$long";
-        }
-        elsif($long && !$short) {
-            $opt = "    --$long";
-        }
-
-        my $arg = $arglong{$long};
-        if($arg) {
-            $opt .= " $arg";
-        }
-
-        my $line = sprintf " %-19s %s\n", $opt, $helplong{$f};
-
-        if(length($line) > 79) {
-            print STDERR "WARN: the --$long line is too long\n";
-        }
-        print $line;
-    }
-}
-
-sub mainpage {
-    # show the page header
-    header("page-header");
-
-    # output docs for all options
-    foreach my $f (sort @s) {
-        single($f, 0);
-    }
-
-    header("page-footer");
-}
-
-sub showonly {
-    my ($f) = @_;
-    if(single($f, 1)) {
-        print STDERR "$f: failed\n";
-    }
-}
-
-sub showprotocols {
-    my %prots;
-    foreach my $f (keys %optlong) {
-        my @p = split(/ /, $protolong{$f});
-        for my $p (@p) {
-            $prots{$p}++;
-        }
-    }
-    for(sort keys %prots) {
-        printf "$_ (%d options)\n", $prots{$_};
-    }
-}
-
-sub getargs {
-    my $f;
-    do {
-        $f = shift @ARGV;
-        if($f eq "mainpage") {
-            mainpage();
-            return;
-        }
-        elsif($f eq "listhelp") {
-            listhelp();
-            return;
-        }
-        elsif($f eq "single") {
-            showonly(shift @ARGV);
-            return;
-        }
-        elsif($f eq "protos") {
-            showprotocols();
-            return;
-        }
-    } while($f);
-
-    print "Usage: gen.pl <mainpage/listhelp/single FILE/protos> [srcdir]\n";
-}
-
-#------------------------------------------------------------------------
-
-# learn all existing options
-indexoptions();
-
-getargs();
-
diff --git a/docs/cmdline-opts/get.d b/docs/cmdline-opts/get.d
deleted file mode 100644 (file)
index be7cb25..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Long: get
-Short: G
-Help: Put the post data in the URL and use GET
----
-When used, this option will make all data specified with --data, --data-binary
-or --data-urlencode to be used in an HTTP GET request instead of the POST
-request that otherwise would be used. The data will be appended to the URL
-with a '?' separator.
-
-If used in combination with --head, the POST data will instead be appended to
-the URL with a HEAD request.
-
-If this option is used several times, only the first one is used. This is
-because undoing a GET doesn't make sense, but you should then instead enforce
-the alternative method you prefer.
diff --git a/docs/cmdline-opts/globoff.d b/docs/cmdline-opts/globoff.d
deleted file mode 100644 (file)
index fff6516..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: globoff
-Short: g
-Help: Disable URL sequences and ranges using {} and []
----
-This option switches off the "URL globbing parser". When you set this option,
-you can specify URLs that contain the letters {}[] without having them being
-interpreted by curl itself. Note that these letters are not normal legal URL
-contents but they should be encoded according to the URI standard.
diff --git a/docs/cmdline-opts/head.d b/docs/cmdline-opts/head.d
deleted file mode 100644 (file)
index 350a100..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: head
-Short: I
-Help: Show document info only
-Protocols: HTTP FTP FILE
----
-Fetch the headers only! HTTP-servers feature the command HEAD which this uses
-to get nothing but the header of a document. When used on an FTP or FILE file,
-curl displays the file size and last modification time only.
diff --git a/docs/cmdline-opts/header.d b/docs/cmdline-opts/header.d
deleted file mode 100644 (file)
index 90af735..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-Long: header
-Short: H
-Arg: <header>
-Help: Pass custom header LINE to server
-Protocols: HTTP
----
-
-Extra header to include in the request when sending HTTP to a server. You may
-specify any number of extra headers. Note that if you should add a custom
-header that has the same name as one of the internal ones curl would use, your
-externally set header will be used instead of the internal one. This allows
-you to make even trickier stuff than curl would normally do. You should not
-replace internally set headers without knowing perfectly well what you're
-doing. Remove an internal header by giving a replacement without content on
-the right side of the colon, as in: -H \&"Host:". If you send the custom
-header with no-value then its header must be terminated with a semicolon, such
-as \-H \&"X-Custom-Header;" to send "X-Custom-Header:".
-
-curl will make sure that each header you add/replace is sent with the proper
-end-of-line marker, you should thus \fBnot\fP add that as a part of the header
-content: do not add newlines or carriage returns, they will only mess things up
-for you.
-
-See also the --user-agent and --referer options.
-
-Starting in 7.37.0, you need --proxy-header to send custom headers intended
-for a proxy.
-
-Example:
-
- curl -H "X-First-Name: Joe" http://example.com/
-
-\fBWARNING\fP: headers set with this option will be set in all requests - even
-after redirects are followed, like when told with --location. 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.
diff --git a/docs/cmdline-opts/help.d b/docs/cmdline-opts/help.d
deleted file mode 100644 (file)
index 64aa696..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: help
-Short: h
-Help: This help text
----
-Usage help. This lists all current command line options with a short
-description.
diff --git a/docs/cmdline-opts/hostpubmd5.d b/docs/cmdline-opts/hostpubmd5.d
deleted file mode 100644 (file)
index a851158..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: hostpubmd5
-Arg: <md5>
-Help: Acceptable MD5 hash of the host public key
-Protocols: SFTP SCP
-Added: 7.17.1
----
-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.
diff --git a/docs/cmdline-opts/http1.0.d b/docs/cmdline-opts/http1.0.d
deleted file mode 100644 (file)
index d9bbd76..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Short: 0
-Long: http1.0
-Tags: Versions
-Protocols: HTTP
-Added:
-Mutexed: http1.1 http2
-Help: Use HTTP 1.0
----
-Tells curl to use HTTP version 1.0 instead of using its internally preferred
-HTTP version.
diff --git a/docs/cmdline-opts/http1.1.d b/docs/cmdline-opts/http1.1.d
deleted file mode 100644 (file)
index f1e6b5c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: http1.1
-Tags: Versions
-Protocols: HTTP
-Added: 7.33.0
-Mutexed: http1.0 http2
-Help: Use HTTP 1.1
----
-Tells curl to use HTTP version 1.1.
diff --git a/docs/cmdline-opts/http2-prior-knowledge.d b/docs/cmdline-opts/http2-prior-knowledge.d
deleted file mode 100644 (file)
index f793f77..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: http2-prior-knowledge
-Tags: Versions
-Protocols: HTTP
-Added: 7.49.0
-Mutexed: http1.1 http1.0 http2
-Requires: HTTP/2
-Help: Use HTTP 2 without HTTP/1.1 Upgrade
----
-Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1
-Upgrade. It requires prior knowledge that the server supports HTTP/2 straight
-away. HTTPS requests will still do HTTP/2 the standard way with negotiated
-protocol version in the TLS handshake.
diff --git a/docs/cmdline-opts/http2.d b/docs/cmdline-opts/http2.d
deleted file mode 100644 (file)
index 04cff00..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: http2
-Tags: Versions
-Protocols: HTTP
-Added: 7.33.0
-Mutexed: http1.1 http1.0 http2-prior-knowledge
-Requires: HTTP/2
-See-also: no-alpn
-Help: Use HTTP 2
----
-Tells curl to use HTTP version 2.
diff --git a/docs/cmdline-opts/ignore-content-length.d b/docs/cmdline-opts/ignore-content-length.d
deleted file mode 100644 (file)
index 53524f5..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: ignore-content-length
-Help: Ignore the size of the remote resource
-Protocols: FTP HTTP
----
-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.
diff --git a/docs/cmdline-opts/include.d b/docs/cmdline-opts/include.d
deleted file mode 100644 (file)
index e55d516..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: include
-Short: i
-Help: Include protocol headers in the output
-See-also: verbose
----
-Include the HTTP-header in the output. The HTTP-header includes things like
-server-name, date of the document, HTTP-version and more...
diff --git a/docs/cmdline-opts/insecure.d b/docs/cmdline-opts/insecure.d
deleted file mode 100644 (file)
index 1dd0fa8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: insecure
-Short: k
-Help: Allow insecure connections when using SSL
-Protocols: TLS
----
-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 --insecure is used.
-
-See this online resource for further details:
- https://curl.haxx.se/docs/sslcerts.html
diff --git a/docs/cmdline-opts/interface.d b/docs/cmdline-opts/interface.d
deleted file mode 100644 (file)
index da84cd2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: interface
-Arg: <name>
-Help: Use network INTERFACE (or address)
-See-also: dns-interface
----
-
-Perform an operation using a specified interface. You can enter interface
-name, IP address or host name. An example could look like:
-
- curl --interface eth0:1 https://www.example.com/
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/ipv4.d b/docs/cmdline-opts/ipv4.d
deleted file mode 100644 (file)
index 9c40c8c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Short: 4
-Long: ipv4
-Tags: Versions
-Protocols:
-Added:
-Mutexed: ipv6
-Requires:
-See-also: http1.1 http2
-Help: Resolve names to IPv4 addresses
----
-This option tells curl to resolve names to IPv4 addresses only, and not for
-example try IPv6.
diff --git a/docs/cmdline-opts/ipv6.d b/docs/cmdline-opts/ipv6.d
deleted file mode 100644 (file)
index c2392e7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Short: 6
-Long: ipv6
-Tags: Versions
-Protocols:
-Added:
-Mutexed: ipv6
-Requires:
-See-also: http1.1 http2
-Help: Resolve names to IPv6 addresses
----
-This option tells curl to resolve names to IPv6 addresses only, and not for
-example try IPv4.
diff --git a/docs/cmdline-opts/junk-session-cookies.d b/docs/cmdline-opts/junk-session-cookies.d
deleted file mode 100644 (file)
index 40ccd9c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: junk-session-cookies
-Short: j
-Help: Ignore session cookies read from file
-Protocols: HTTP
-See-also: cookie cookie-jar
----
-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.
diff --git a/docs/cmdline-opts/keepalive-time.d b/docs/cmdline-opts/keepalive-time.d
deleted file mode 100644 (file)
index c816e13..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Long: keepalive-time
-Arg: <seconds>
-Help: Interval time for keepalive probes
-Added: 7.18.0
----
-This option sets the time a connection needs to remain idle before sending
-keepalive probes and the time between individual keepalive probes. It is
-currently effective on operating systems offering the TCP_KEEPIDLE and
-TCP_KEEPINTVL socket options (meaning Linux, recent AIX, HP-UX and more). This
-option has no effect if --no-keepalive is used.
-
-If this option is used several times, the last one will be used. If
-unspecified, the option defaults to 60 seconds.
diff --git a/docs/cmdline-opts/key-type.d b/docs/cmdline-opts/key-type.d
deleted file mode 100644 (file)
index bf39bcd..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: key-type
-Arg: <type>
-Help: Private key file type (DER/PEM/ENG)
-Protocols: TLS
----
-Private key file type. Specify which type your --key provided private key
-is. DER, PEM, and ENG are supported. If not specified, PEM is assumed.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/key.d b/docs/cmdline-opts/key.d
deleted file mode 100644 (file)
index fbf583a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: key
-Arg: <key>
-Protocols: TLS SSH
-Help: Private key file name
----
-Private key file name. Allows you to provide your private key in this separate
-file. For SSH, if not specified, curl tries the following candidates in order:
-'~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/krb.d b/docs/cmdline-opts/krb.d
deleted file mode 100644 (file)
index 19547af..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: krb
-Arg: <level>
-Help: Enable Kerberos with security <level>
-Protocols: FTP
-Requires: Kerberos
----
-Enable Kerberos authentication and use. The level must be entered and should
-be one of 'clear', 'safe', 'confidential', or 'private'. Should you use a
-level that is not one of these, 'private' will instead be used.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/libcurl.d b/docs/cmdline-opts/libcurl.d
deleted file mode 100644 (file)
index ef132fe..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: libcurl
-Arg: <file>
-Help: Dump libcurl equivalent code of this command line
-Added: 7.16.1
----
-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!
-
-If this option is used several times, the last given file name will be
-used.
diff --git a/docs/cmdline-opts/limit-rate.d b/docs/cmdline-opts/limit-rate.d
deleted file mode 100644 (file)
index 8784a84..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Long: limit-rate
-Arg: <speed>
-Help: Limit transfer speed to RATE
----
-Specify the maximum transfer rate you want curl to use - for both downloads
-and uploads. This feature is useful if you have a limited pipe and you'd like
-your transfer not to use your entire bandwidth. To make it slower than it
-otherwise would be.
-
-The given speed is measured in bytes/second, unless a suffix is appended.
-Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it
-megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
-
-If you also use the --speed-limit option, that option will take precedence and
-might cripple the rate-limiting slightly, to help keeping the speed-limit
-logic working.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/list-only.d b/docs/cmdline-opts/list-only.d
deleted file mode 100644 (file)
index 4c56304..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Long: list-only
-Short: l
-Protocols: FTP POP3
-Help: List only mode
-Added: 7.21.5
----
-(FTP)
-When listing an FTP directory, this switch forces a name-only view. This is
-especially useful if the user wants to machine-parse the contents of an FTP
-directory since the normal directory view doesn't use a standard look or
-format. When used like this, the option causes a NLST command to be sent to
-the server instead of LIST.
-
-Note: Some FTP servers list only files in their response to NLST; they do not
-include sub-directories and symbolic links.
-
-(POP3)
-When retrieving a specific email from POP3, this switch forces a LIST command
-to be performed instead of RETR. This is particularly useful if the user wants
-to see if a specific message id exists on the server and what size it is.
-
-Note: When combined with --request, this option can be used to send an UIDL
-command instead, so the user may use the email's unique identifier rather than
-it's message id to make the request.
diff --git a/docs/cmdline-opts/local-port.d b/docs/cmdline-opts/local-port.d
deleted file mode 100644 (file)
index d96b46e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: local-port
-Arg: <num/range>
-Help: Force use of RANGE for local port numbers
-Added: 7.15.2
----
-Set a preferred single number or range (FROM-TO) of local port numbers to use
-for the connection(s).  Note that port numbers by nature are a scarce resource
-that will be busy at times so setting this range to something too narrow might
-cause unnecessary connection setup failures.
diff --git a/docs/cmdline-opts/location-trusted.d b/docs/cmdline-opts/location-trusted.d
deleted file mode 100644 (file)
index 995a871..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: location-trusted
-Help: Like --location, and send auth to other hosts
-Protocols: HTTP
-See-also: user
----
-Like --location, but will allow sending the name + password to all hosts that
-the site may redirect to. This may or may not introduce a security breach if
-the site redirects you to a site to which you'll send your authentication info
-(which is plaintext in the case of HTTP Basic authentication).
diff --git a/docs/cmdline-opts/location.d b/docs/cmdline-opts/location.d
deleted file mode 100644 (file)
index 7c70e69..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-Long: location
-Short: L
-Help: Follow redirects
-Protocols: HTTP
----
-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
---include or --head, 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 --location-trusted on how to change
-this. You can limit the amount of redirects to follow by using the
---max-redirs option.
-
-When curl follows a redirect and the request is not a plain GET (for example
-POST or PUT), it will do the following request with a GET if the HTTP response
-was 301, 302, or 303. If the response code was any other 3xx code, curl will
-re-send the following request using the same unmodified method.
-
-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: --post301, --post302 and
---post303.
diff --git a/docs/cmdline-opts/login-options.d b/docs/cmdline-opts/login-options.d
deleted file mode 100644 (file)
index 8bad051..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Long: login-options
-Arg: <options>
-Protocols: IMAP POP3 SMTP
-Help: Server login options
-Added: 7.34.0
----
-Specify the login options to use during server authentication.
-
-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
-RFC 2384, RFC 5092 and IETF draft draft-earhart-url-smtp-00.txt
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/mail-auth.d b/docs/cmdline-opts/mail-auth.d
deleted file mode 100644 (file)
index 70cf0ed..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: mail-auth
-Arg: <address>
-Protocols: SMTP
-Help: Originator address of the original email
-Added: 7.25.0
-See-also: mail-rcpt mail-from
----
-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.
diff --git a/docs/cmdline-opts/mail-from.d b/docs/cmdline-opts/mail-from.d
deleted file mode 100644 (file)
index 1d93234..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: mail-from
-Arg: <address>
-Help: Mail from this address
-Protocols: SMTP
-Added: 7.20.0
-See-also: mail-rcpt mail-auth
----
-Specify a single address that the given mail should get sent from.
diff --git a/docs/cmdline-opts/mail-rcpt.d b/docs/cmdline-opts/mail-rcpt.d
deleted file mode 100644 (file)
index d747cea..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Long: mail-rcpt
-Arg: <address>
-Help: Mail from this address
-Protocols: SMTP
-Added: 7.20.0
----
-Specify a single address, user name or mailing list name. Repeat this
-option several times to send to multiple recipients.
-
-When performing a mail transfer, the recipient should specify a valid email
-address to send the mail to.
-
-When performing an address verification (VRFY command), the recipient should be
-specified as the user name or user name and domain (as per Section 3.5 of
-RFC5321). (Added in 7.34.0)
-
-When performing a mailing list expand (EXPN command), the recipient should be
-specified using the mailing list name, such as "Friends" or "London-Office".
-(Added in 7.34.0)
diff --git a/docs/cmdline-opts/manual.d b/docs/cmdline-opts/manual.d
deleted file mode 100644 (file)
index a9dbb0c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Long: manual
-Short: M
-Help: Display the full manual
----
-Manual. Display the huge help text.
diff --git a/docs/cmdline-opts/max-filesize.d b/docs/cmdline-opts/max-filesize.d
deleted file mode 100644 (file)
index e92ef58..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: max-filesize
-Arg: <bytes>
-Help: Maximum file size to download
-See-also: limit-rate
----
-Specify the maximum size (in bytes) of a file to download. If the file
-requested is larger than this value, the transfer will not start and curl will
-return with exit code 63.
-
-\fBNOTE:\fP The file size is not always known prior to download, and for such
-files this option has no effect even if the file transfer ends up being larger
-than this given limit. This concerns both FTP and HTTP transfers.
diff --git a/docs/cmdline-opts/max-redirs.d b/docs/cmdline-opts/max-redirs.d
deleted file mode 100644 (file)
index 04b824b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: max-redirs
-Arg: <num>
-Help: Maximum number of redirects allowed
-Protocols: HTTP
----
-Set maximum number of redirection-followings allowed. When --location is used,
-is 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
-unlimited.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/max-time.d b/docs/cmdline-opts/max-time.d
deleted file mode 100644 (file)
index c22343d..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Long: max-time
-Short: m
-Arg: <time>
-Help: Maximum time allowed for the transfer
-See-also: connect-timeout
----
-Maximum time in seconds that you allow the whole operation to take.  This is
-useful for preventing your batch jobs from hanging for hours due to slow
-networks or links going down.  Since 7.32.0, this option accepts decimal
-values, but the actual timeout will decrease in accuracy as the specified
-timeout increases in decimal precision.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/metalink.d b/docs/cmdline-opts/metalink.d
deleted file mode 100644 (file)
index 8047e9f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Long: metalink
-Help: Process given URLs as metalink XML file
-Added: 7.27.0
-Requires: metalink
----
-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.
-
-Example to use a remote Metalink file:
-
- curl --metalink http://www.example.com/example.metalink
-
-To use a Metalink file in the local file system, use FILE protocol (file://):
-
- curl --metalink file://example.metalink
-
-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 --metalink and
---include are used together, --include 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.
-
diff --git a/docs/cmdline-opts/negotiate.d b/docs/cmdline-opts/negotiate.d
deleted file mode 100644 (file)
index 69a6b91..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Long: negotiate
-Help: Use HTTP Negotiate (SPNEGO) authentication
-Protocols: HTTP
-See-also: basic ntlm anyauth proxy-negotiate
----
-Enables Negotiate (SPNEGO) authentication.
-
-This option requires a library built with GSS-API or SSPI support. Use
---version to see if your curl supports GSS-API/SSPI or SPNEGO.
-
-When using this option, you must also provide a fake --user option to activate
-the authentication code properly. Sending a '-u :' is enough as the user name
-and password from the --user option aren't actually used.
-
-If this option is used several times, only the first one is used.
diff --git a/docs/cmdline-opts/netrc-file.d b/docs/cmdline-opts/netrc-file.d
deleted file mode 100644 (file)
index 4118b4d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: netrc-file
-Help: Specify FILE for netrc
-Arg: <filemame>
-Added: 7.21.5
-Mutexed: netrc
----
-This option is similar to --netrc, except that you provide the path (absolute
-or relative) to the netrc file that Curl should use.  You can only specify one
-netrc file per invocation. If several --netrc-file options are provided,
-the last one will be used.
-
-It will abide by --netrc-optional if specified.
diff --git a/docs/cmdline-opts/netrc-optional.d b/docs/cmdline-opts/netrc-optional.d
deleted file mode 100644 (file)
index c285403..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: netrc-optional
-Help: Use either .netrc or URL
-Mutexed: netrc
-See-also: netrc-file
----
-Very similar to --netrc, but this option makes the .netrc usage \fBoptional\fP
-and not mandatory as the --netrc option does.
diff --git a/docs/cmdline-opts/netrc.d b/docs/cmdline-opts/netrc.d
deleted file mode 100644 (file)
index 2df2678..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Long: netrc
-Short: n
-Help: Must read .netrc for user name and password
----
-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
-\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
-\&'secret' should look similar to:
-
-.B "machine host.domain.com login myself password secret"
diff --git a/docs/cmdline-opts/next.d b/docs/cmdline-opts/next.d
deleted file mode 100644 (file)
index 1d1e70a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Short: :
-Long: next
-Tags:
-Protocols:
-Added: 7.36.0
-Magic: divider
-Help: Make next URL use its separate set of options
----
-Tells curl to use a separate operation for the following URL and associated
-options. This allows you to send several URL requests, each with their own
-specific options, for example, such as different user names or custom requests
-for each.
-
---next will reset all local options and only global ones will have their
-values survive over to the operation following the --next instruction. Global
-options include --verbose, --trace, --trace-ascii and --fail-early.
-
-For example, you can do both a GET and a POST in a single command line:
-
- curl www1.example.com --next -d postthis www2.example.com
diff --git a/docs/cmdline-opts/no-alpn.d b/docs/cmdline-opts/no-alpn.d
deleted file mode 100644 (file)
index 88abb83..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: no-alpn
-Tags: HTTP/2
-Protocols: HTTPS
-Added: 7.36.0
-See-also: no-npn http2
-Requires: TLS
-Help: Disable the ALPN TLS extension
----
-Disable the ALPN TLS extension. ALPN is enabled by default if libcurl was built
-with an SSL library that supports ALPN. ALPN is used by a libcurl that supports
-HTTP/2 to negotiate HTTP/2 support with the server during https sessions.
diff --git a/docs/cmdline-opts/no-buffer.d b/docs/cmdline-opts/no-buffer.d
deleted file mode 100644 (file)
index 65a6282..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: no-buffer
-Short: N
-Help: Disable buffering of the output stream
----
-Disables the buffering of the output stream. In normal work situations, curl
-will use a standard buffered output stream that will have the effect that it
-will output the data in chunks, not necessarily exactly when the data arrives.
-Using this option will disable that buffering.
-
-Note that this is the negated option name documented. You can thus use
---buffer to enforce the buffering.
diff --git a/docs/cmdline-opts/no-keepalive.d b/docs/cmdline-opts/no-keepalive.d
deleted file mode 100644 (file)
index 7eb3d63..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: no-keepalive
-Help: Disable TCP keepalive on the connection
----
-Disables the use of keepalive messages on the TCP connection. curl otherwis
-enables them by default.
-
-Note that this is the negated option name documented. You can thus use
---keepalive to enforce keepalive.
diff --git a/docs/cmdline-opts/no-npn.d b/docs/cmdline-opts/no-npn.d
deleted file mode 100644 (file)
index ab0f6de..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: no-npn
-Tags: Versions HTTP/2
-Protocols: HTTPS
-Added: 7.36.0
-Mutexed:
-See-also: no-alpn http2
-Requires: TLS
-Help: Disable the NPN TLS extension
----
-Disable the NPN TLS extension. NPN is enabled by default if libcurl was built
-with an SSL library that supports NPN. NPN is used by a libcurl that supports
-HTTP/2 to negotiate HTTP/2 support with the server during https sessions.
diff --git a/docs/cmdline-opts/no-sessionid.d b/docs/cmdline-opts/no-sessionid.d
deleted file mode 100644 (file)
index 397a158..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Long: no-sessionid
-Help: Disable SSL session-ID reusing
-Protocols: TLS
-Added: 7.16.0
----
-Disable curl's use of SSL session-ID caching.  By default all transfers are
-done using the cache. Note that while nothing should ever get hurt by
-attempting to reuse SSL session-IDs, there seem to be broken SSL
-implementations in the wild that may require you to disable this in order for
-you to succeed.
-
-Note that this is the negated option name documented. You can thus use
---sessionid to enforce session-ID caching.
diff --git a/docs/cmdline-opts/noproxy.d b/docs/cmdline-opts/noproxy.d
deleted file mode 100644 (file)
index a216e75..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Long: noproxy
-Arg: <no-proxy-list>
-Help: List of hosts which do not use proxy
-Added: 7.19.4
----
-Comma-separated list of hosts which do not use a proxy, if one is specified.
-The only wildcard is a single * character, which matches all hosts, and
-effectively disables the proxy. Each name in this list is matched as either
-a domain which contains the hostname, or the hostname itself. For example,
-local.com would match local.com, local.com:80, and www.local.com, but not
-www.notlocal.com.
-
-Since 7.53.0, This option overrides the environment variables that disable the
-proxy. If there's an environment variable disabling a proxy, you can set
-noproxy list to \&"" to override it.
diff --git a/docs/cmdline-opts/ntlm-wb.d b/docs/cmdline-opts/ntlm-wb.d
deleted file mode 100644 (file)
index 7b93384..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: ntlm-wb
-Help: Use HTTP NTLM authentication with winbind
-Protocols: HTTP
-See-also: ntlm proxy-ntlm
----
-Enables NTLM much in the style --ntlm does, but hand over the authentication
-to the separate binary ntlmauth application that is executed when needed.
diff --git a/docs/cmdline-opts/ntlm.d b/docs/cmdline-opts/ntlm.d
deleted file mode 100644 (file)
index d71cd43..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Long: ntlm
-Help: Use HTTP NTLM authentication
-Mutexed: basic negotiated digest anyauth
-See-also: proxy-ntlm
-Protocols: HTTP
-Requires: TLS
----
-Enables NTLM authentication. The NTLM authentication method was designed by
-Microsoft and is used by IIS web servers. It is a proprietary protocol,
-reverse-engineered by clever people and implemented in curl based on their
-efforts. This kind of behavior should not be endorsed, you should encourage
-everyone who uses NTLM to switch to a public and documented authentication
-method instead, such as Digest.
-
-If you want to enable NTLM for your proxy authentication, then use
---proxy-ntlm.
-
-If this option is used several times, only the first one is used.
diff --git a/docs/cmdline-opts/oauth2-bearer.d b/docs/cmdline-opts/oauth2-bearer.d
deleted file mode 100644 (file)
index adad532..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: oauth2-bearer
-Help: OAuth 2 Bearer Token
-Protocols: IMAP POP3 SMTP
----
-Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token
-is used in conjunction with the user name which can be specified as part of
-the --url or --user options.
-
-The Bearer Token and user name are formatted according to RFC 6750.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/output.d b/docs/cmdline-opts/output.d
deleted file mode 100644 (file)
index 35f52a2..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-Long: output
-Arg: <file>
-Short: o
-Help: Write to file instead of stdout
-See-also: remote-name remote-name-all remote-header-name
----
-Write output to <file> instead of stdout. If you are using {} or [] to fetch
-multiple documents, you can use '#' followed by a number in the <file>
-specifier. That variable will be replaced with the current string for the URL
-being fetched. Like in:
-
- curl http://{one,two}.example.com -o "file_#1.txt"
-
-or use several variables like:
-
- curl http://{site,host}.host[1-5].com -o "#1_#2"
-
-You may use this option as many times as the number of URLs you have. For
-example, if you specify two URLs on the same command line, you can use it like
-this:
-
-  curl -o aa example.com -o bb example.net
-
-and the order of the -o options and the URLs doesn't matter, just that the
-first -o is for the first URL and so on, so the above command line can also be
-written as
-
-  curl example.com example.net -o aa -o bb
-
-See also the --create-dirs option to create the local directories
-dynamically. Specifying the output as '-' (a single dash) will force the
-output to be done to stdout.
diff --git a/docs/cmdline-opts/page-footer b/docs/cmdline-opts/page-footer
deleted file mode 100644 (file)
index 55aefb2..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-.SH FILES
-.I ~/.curlrc
-.RS
-Default config file, see --config for details.
-.SH ENVIRONMENT
-The environment variables can be specified in lower case or upper case. The
-lower case version has precedence. http_proxy is an exception as it is only
-available in lower case.
-
-Using an environment variable to set the proxy has the same effect as using
-the --proxy option.
-
-.IP "http_proxy [protocol://]<host>[:port]"
-Sets the proxy server to use for HTTP.
-.IP "HTTPS_PROXY [protocol://]<host>[:port]"
-Sets the proxy server to use for HTTPS.
-.IP "[url-protocol]_PROXY [protocol://]<host>[:port]"
-Sets the proxy server to use for [url-protocol], where the protocol is a
-protocol that curl supports and as specified in a URL. FTP, FTPS, POP3, IMAP,
-SMTP, LDAP etc.
-.IP "ALL_PROXY [protocol://]<host>[:port]"
-Sets the proxy server to use if no protocol-specific proxy is set.
-.IP "NO_PROXY <comma-separated list of hosts>"
-list of host names that shouldn't go through any proxy. If set to a asterisk
-\&'*' only, it matches all hosts.
-
-Since 7.53.0, this environment variable disable the proxy even if specify
---proxy option. That is
-.B NO_PROXY=direct.example.com curl -x http://proxy.example.com
-.B http://direct.example.com
-accesses the target URL directly, and
-.B NO_PROXY=direct.example.com curl -x http://proxy.example.com
-.B http://somewhere.example.com
-accesses the target URL through proxy.
-
-.SH "PROXY PROTOCOL PREFIXES"
-Since curl version 7.21.7, the proxy string may be specified with a
-protocol:// prefix to specify alternative proxy protocols.
-
-If no protocol is specified in the proxy string or if the string doesn't match
-a supported one, the proxy will be treated as an HTTP proxy.
-
-The supported proxy protocol prefixes are as follows:
-.IP "socks4://"
-Makes it the equivalent of --socks4
-.IP "socks4a://"
-Makes it the equivalent of --socks4a
-.IP "socks5://"
-Makes it the equivalent of --socks5
-.IP "socks5h://"
-Makes it the equivalent of --socks5-hostname
-.SH EXIT CODES
-There are a bunch of different error codes and their corresponding error
-messages that may appear during bad conditions. At the time of this writing,
-the exit codes are:
-.IP 1
-Unsupported protocol. This build of curl has no support for this protocol.
-.IP 2
-Failed to initialize.
-.IP 3
-URL malformed. The syntax was not correct.
-.IP 4
-A feature or option that was needed to perform the desired request was not
-enabled or was explicitly disabled at build-time. To make curl able to do
-this, you probably need another build of libcurl!
-.IP 5
-Couldn't resolve proxy. The given proxy host could not be resolved.
-.IP 6
-Couldn't resolve host. The given remote host was not resolved.
-.IP 7
-Failed to connect to host.
-.IP 8
-Weird server reply. The server sent data curl couldn't parse.
-.IP 9
-FTP access denied. The server denied login or denied access to the particular
-resource or directory you wanted to reach. Most often you tried to change to a
-directory that doesn't exist on the server.
-.IP 10
-FTP accept failed. While waiting for the server to connect back when an active
-FTP session is used, an error code was sent over the control connection or
-similar.
-.IP 11
-FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.
-.IP 12
-During an active FTP session while waiting for the server to connect back to
-curl, the timeout expired.
-.IP 13
-FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.
-.IP 14
-FTP weird 227 format. Curl couldn't parse the 227-line the server sent.
-.IP 15
-FTP can't get host. Couldn't resolve the host IP we got in the 227-line.
-.IP 16
-HTTP/2 error. A problem was detected in the HTTP2 framing layer. This is
-somewhat generic and can be one out of several problems, see the error message
-for details.
-.IP 17
-FTP couldn't set binary. Couldn't change transfer method to binary.
-.IP 18
-Partial file. Only a part of the file was transferred.
-.IP 19
-FTP couldn't download/access the given file, the RETR (or similar) command
-failed.
-.IP 21
-FTP quote error. A quote command returned error from the server.
-.IP 22
-HTTP page not retrieved. The requested url was not found or returned another
-error with the HTTP error code being 400 or above. This return code only
-appears if --fail is used.
-.IP 23
-Write error. Curl couldn't write data to a local filesystem or similar.
-.IP 25
-FTP couldn't STOR file. The server denied the STOR operation, used for FTP
-uploading.
-.IP 26
-Read error. Various reading problems.
-.IP 27
-Out of memory. A memory allocation request failed.
-.IP 28
-Operation timeout. The specified time-out period was reached according to the
-conditions.
-.IP 30
-FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT
-command, try doing a transfer using PASV instead!
-.IP 31
-FTP couldn't use REST. The REST command failed. This command is used for
-resumed FTP transfers.
-.IP 33
-HTTP range error. The range "command" didn't work.
-.IP 34
-HTTP post error. Internal post-request generation error.
-.IP 35
-SSL connect error. The SSL handshaking failed.
-.IP 36
-Bad download resume. Couldn't continue an earlier aborted download.
-.IP 37
-FILE couldn't read file. Failed to open the file. Permissions?
-.IP 38
-LDAP cannot bind. LDAP bind operation failed.
-.IP 39
-LDAP search failed.
-.IP 41
-Function not found. A required LDAP function was not found.
-.IP 42
-Aborted by callback. An application told curl to abort the operation.
-.IP 43
-Internal error. A function was called with a bad parameter.
-.IP 45
-Interface error. A specified outgoing interface could not be used.
-.IP 47
-Too many redirects. When following redirects, curl hit the maximum amount.
-.IP 48
-Unknown option specified to libcurl. This indicates that you passed a weird
-option to curl that was passed on to libcurl and rejected. Read up in the
-manual!
-.IP 49
-Malformed telnet option.
-.IP 51
-The peer's SSL certificate or SSH MD5 fingerprint was not OK.
-.IP 52
-The server didn't reply anything, which here is considered an error.
-.IP 53
-SSL crypto engine not found.
-.IP 54
-Cannot set SSL crypto engine as default.
-.IP 55
-Failed sending network data.
-.IP 56
-Failure in receiving network data.
-.IP 58
-Problem with the local certificate.
-.IP 59
-Couldn't use specified SSL cipher.
-.IP 60
-Peer certificate cannot be authenticated with known CA certificates.
-.IP 61
-Unrecognized transfer encoding.
-.IP 62
-Invalid LDAP URL.
-.IP 63
-Maximum file size exceeded.
-.IP 64
-Requested FTP SSL level failed.
-.IP 65
-Sending the data requires a rewind that failed.
-.IP 66
-Failed to initialise SSL Engine.
-.IP 67
-The user name, password, or similar was not accepted and curl failed to log in.
-.IP 68
-File not found on TFTP server.
-.IP 69
-Permission problem on TFTP server.
-.IP 70
-Out of disk space on TFTP server.
-.IP 71
-Illegal TFTP operation.
-.IP 72
-Unknown TFTP transfer ID.
-.IP 73
-File already exists (TFTP).
-.IP 74
-No such user (TFTP).
-.IP 75
-Character conversion failed.
-.IP 76
-Character conversion functions required.
-.IP 77
-Problem with reading the SSL CA cert (path? access rights?).
-.IP 78
-The resource referenced in the URL does not exist.
-.IP 79
-An unspecified error occurred during the SSH session.
-.IP 80
-Failed to shut down the SSL connection.
-.IP 82
-Could not load CRL file, missing or wrong format (added in 7.19.0).
-.IP 83
-Issuer check failed (added in 7.19.0).
-.IP 84
-The FTP PRET command failed
-.IP 85
-RTSP: mismatch of CSeq numbers
-.IP 86
-RTSP: mismatch of Session Identifiers
-.IP 87
-unable to parse FTP file list
-.IP 88
-FTP chunk callback reported error
-.IP 89
-No connection available, the session will be queued
-.IP 90
-SSL public key does not matched pinned public key
-.IP XX
-More error codes will appear here in future releases. The existing ones
-are meant to never change.
-.SH AUTHORS / CONTRIBUTORS
-Daniel Stenberg is the main author, but the whole list of contributors is
-found in the separate THANKS file.
-.SH WWW
-https://curl.haxx.se
-.SH "SEE ALSO"
-.BR ftp (1),
-.BR wget (1)
diff --git a/docs/cmdline-opts/page-header b/docs/cmdline-opts/page-header
deleted file mode 100644 (file)
index ee5af14..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  Project                     ___| | | |  _ \| |
-.\" *                             / __| | | | |_) | |
-.\" *                            | (__| |_| |  _ <| |___
-.\" *                             \___|\___/|_| \_\_____|
-.\" *
-.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
-.\" *
-.\" * This software 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.
-.\" *
-.\" **************************************************************************
-.\"
-.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
-.\"
-.TH curl 1 "16 Dec 2016" "Curl 7.52.0" "Curl Manual"
-.SH NAME
-curl \- transfer a URL
-.SH SYNOPSIS
-.B curl [options]
-.I [URL...]
-.SH DESCRIPTION
-.B curl
-is a tool to transfer data from or to a server, using one of the supported
-protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP,
-LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET
-and TFTP). The command is designed to work without user interaction.
-
-curl offers a busload of useful tricks like proxy support, user
-authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer
-resume, 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
-\fIlibcurl(3)\fP for details.
-.SH URL
-The URL syntax is protocol-dependent. You'll find a detailed description in
-RFC 3986.
-
-You can specify multiple URLs or parts of URLs by writing part sets within
-braces as in:
-
-  http://site.{one,two,three}.com
-
-or you can get sequences of alphanumeric series by using [] as in:
-
-  ftp://ftp.example.com/file[1-100].txt
-
-  ftp://ftp.example.com/file[001-100].txt    (with leading zeros)
-
-  ftp://ftp.example.com/file[a-z].txt
-
-Nested sequences are not supported, but you can use several ones next to each
-other:
-
-  http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
-
-You can specify any amount of URLs on the command line. They will be fetched
-in a sequential manner in the specified order.
-
-You can specify a step counter for the ranges to get every Nth number or
-letter:
-
-  http://example.com/file[1-100:10].txt
-
-  http://example.com/file[a-z:2].txt
-
-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 '*'.
-
-Provide the IPv6 zone index in the URL with an escaped percentage sign and the
-interface name. Like in
-
-  http://[fe80::3%25eth0]/
-
-If you specify URL without protocol:// prefix, curl will attempt to guess what
-protocol you might want. It will then default to HTTP but try other protocols
-based on often-used host name prefixes. For example, for host names starting
-with "ftp." curl will assume you want to speak FTP.
-
-curl will do its best to use what you pass to it as a URL. It is not trying to
-validate it as a syntactically correct URL by any means but is instead
-\fBvery\fP liberal with what it accepts.
-
-curl will attempt to re-use connections for multiple file transfers, so that
-getting many files from the same server will not do multiple connects /
-handshakes. This improves speed. Of course this is only done on files
-specified on a single command line and cannot be used between separate curl
-invokes.
-.SH "PROGRESS METER"
-curl normally displays a progress meter during operations, indicating the
-amount of transferred data, transfer speeds and estimated time left, etc. The
-progress meter displays number of bytes and the speeds are in bytes per
-second. The suffixes (k, M, G, T, P) are 1024 based. For example 1k is 1024
-bytes. 1M is 1048576 bytes.
-
-curl displays this data to the terminal by default, so if you invoke curl to
-do an operation and it is about to write data to the terminal, it
-\fIdisables\fP the progress meter as otherwise it would mess up the output
-mixing progress meter and response data.
-
-If you want a progress meter for HTTP POST or PUT requests, you need to
-redirect the response output to a file, using shell redirect (>), --output or
-similar.
-
-It is not the same case for FTP upload as that operation does not spit out
-any response data to the terminal.
-
-If you prefer a progress "bar" instead of the regular meter, --progress-bar is
-your friend. You can also disable the progress meter completely with the
---silent option.
-.SH OPTIONS
-Options start with one or two dashes. Many of the options require an
-additional value next to them.
-
-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.
-
-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.
-
-In general, all boolean options are enabled with --\fBoption\fP and yet again
-disabled with --\fBno-\fPoption. That is, you use the exact same option name
-but prefix it with "no-". However, in this list we mostly only list and show
-the --option version of them. (This concept with --no options was added in
-7.19.0. Previously most options were toggled on/off on repeated use of the
-same command line option.)
diff --git a/docs/cmdline-opts/pass.d b/docs/cmdline-opts/pass.d
deleted file mode 100644 (file)
index 2639cb9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: pass
-Arg: <phrase>
-Help: Pass phrase for the private key
-Protocols: SSH TLS
----
-Passphrase for the private key
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/path-as-is.d b/docs/cmdline-opts/path-as-is.d
deleted file mode 100644 (file)
index 946e2f0..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: path-as-is
-Help: Do not squash .. sequences in URL path
-Added: 7.42.0
----
-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.
diff --git a/docs/cmdline-opts/pinnedpubkey.d b/docs/cmdline-opts/pinnedpubkey.d
deleted file mode 100644 (file)
index 0657e6e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Long: pinnedpubkey
-Arg: <hashes>
-Help: FILE/HASHES Public key to verify peer against
-Protocols: TLS
----
-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.
-
-PEM/DER support:
-  7.39.0: OpenSSL, GnuTLS and GSKit
-  7.43.0: NSS and wolfSSL/CyaSSL
-  7.47.0: mbedtls
-  7.49.0: PolarSSL
-sha256 support:
-  7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL.
-  7.47.0: mbedtls
-  7.49.0: PolarSSL
-Other SSL backends not supported.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/post301.d b/docs/cmdline-opts/post301.d
deleted file mode 100644 (file)
index 87a9fe7..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: post301
-Help: Do not switch to GET after following a 301
-Protocols: HTTP
-See-also: post302 post303 location
-Added: 7.17.1
----
-Tells curl to respect RFC 7231/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 --location.
diff --git a/docs/cmdline-opts/post302.d b/docs/cmdline-opts/post302.d
deleted file mode 100644 (file)
index caf0d87..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: post302
-Help: Do not switch to GET after following a 302
-Protocols: HTTP
-See-also: post301 post303 location
-Added: 7.19.1
----
-Tells curl to respect RFC 7231/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 --location.
diff --git a/docs/cmdline-opts/post303.d b/docs/cmdline-opts/post303.d
deleted file mode 100644 (file)
index f8a60ec..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: post303
-Help: Do not switch to GET after following a 303
-Protocols: HTTP
-See-also: post302 post301 location
-Added: 7.26.0
----
-Tells curl to respect RFC 7231/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 --location.
diff --git a/docs/cmdline-opts/preproxy.d b/docs/cmdline-opts/preproxy.d
deleted file mode 100644 (file)
index b8eb77f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Long: preproxy
-Arg: [protocol://]host[:port]
-Help: Use this proxy first
-Added: 7.52.0
----
-Use the specified SOCKS proxy before connecting to an HTTP or HTTPS --proxy. In
-such a case curl first connects to the SOCKS proxy and then connects (through
-SOCKS) to the HTTP or HTTPS proxy. Hence pre proxy.
-
-The pre proxy string should be specified with a protocol:// prefix to specify
-alternative proxy protocols. Use socks4://, socks4a://, socks5:// or
-socks5h:// to request the specific SOCKS version to be used. No protocol
-specified will make curl default to SOCKS4.
-
-If the port number is not specified in the proxy string, it is assumed to be
-1080.
-
-User and password that might be provided in the proxy string are URL decoded
-by curl. This allows you to pass in special characters such as @ by using %40
-or pass in a colon with %3a.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/progress-bar.d b/docs/cmdline-opts/progress-bar.d
deleted file mode 100644 (file)
index 11e95b4..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Short: #
-Long: progress-bar
-Help: Display transfer progress as a bar
----
-Make curl display transfer progress as a simple progress bar instead of the
-standard, more informational, meter.
-
-This progress bar draws a single line of '#' characters across the screen and
-shows a percentage if the transfer size is known. For transfers without a
-known size, it will instead output one '#' character for every 1024 bytes
-transferred.
diff --git a/docs/cmdline-opts/proto-default.d b/docs/cmdline-opts/proto-default.d
deleted file mode 100644 (file)
index ccc3b85..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Long: proto-default
-Help: Use PROTOCOL for any URL missing a scheme
-Arg: <protocol>
-Added: 7.45.0
----
-Tells curl to use \fIprotocol\fP for any URL missing a scheme name.
-
-Example:
-
- curl --proto-default https ftp.mozilla.org
-
-An unknown or unsupported protocol causes error
-\fICURLE_UNSUPPORTED_PROTOCOL\fP (1).
-
-This option does not change the default proxy protocol (http).
-
-Without this option curl would make a guess based on the host, see --url for
-details.
diff --git a/docs/cmdline-opts/proto-redir.d b/docs/cmdline-opts/proto-redir.d
deleted file mode 100644 (file)
index c9eeeab..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Long: proto-redir
-Arg: <protocols>
-Help: Enable/disable PROTOCOLS on redirect
-Added: 7.20.2
----
-Tells curl to limit what protocols it may use on redirect. Protocols denied by
---proto are not overridden by this option. See --proto for how protocols are
-represented.
-
-Example, allow only HTTP and HTTPS on redirect:
-
- curl --proto-redir -all,http,https http://example.com
-
-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.
diff --git a/docs/cmdline-opts/proto.d b/docs/cmdline-opts/proto.d
deleted file mode 100644 (file)
index 1513fdc..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-Long: proto
-Arg: <protocols>
-Help: Enable/disable PROTOCOLS
-See-also: proto-redir proto-default
-Added: 7.20.2
----
-Tells curl to limit what protocols it may use in the transfer. Protocols are
-evaluated left to right, are comma separated, and are each a protocol name or
-'all', optionally prefixed by zero or more modifiers. Available modifiers are:
-.RS
-.TP 3
-.B +
-Permit this protocol in addition to protocols already permitted (this is
-the default if no modifier is used).
-.TP
-.B -
-Deny this protocol, removing it from the list of protocols already permitted.
-.TP
-.B =
-Permit only this protocol (ignoring the list already permitted), though
-subject to later modification by subsequent entries in the comma separated
-list.
-.RE
-.IP
-For example:
-.RS
-.TP 15
-.B --proto -ftps
-uses the default protocols, but disables ftps
-.TP
-.B  --proto -all,https,+http
-only enables http and https
-.TP
-.B --proto =http,https
-also only enables http and https
-.RE
-
-Unknown protocols produce a warning. This allows scripts to safely rely on
-being able to disable potentially dangerous protocols, without relying upon
-support for that protocol being built into curl to avoid an error.
-
-This option can be used multiple times, in which case the effect is the same
-as concatenating the protocols into one instance of the option.
diff --git a/docs/cmdline-opts/proxy-anyauth.d b/docs/cmdline-opts/proxy-anyauth.d
deleted file mode 100644 (file)
index b60d0a0..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: proxy-anyauth
-Help: Pick any proxy authentication method
-Added: 7.13.2
-See-also: proxy proxy-basic proxy-digest
----
-Tells curl to pick a suitable authentication method when communicating with
-the given HTTP proxy. This might cause an extra request/response round-trip.
diff --git a/docs/cmdline-opts/proxy-basic.d b/docs/cmdline-opts/proxy-basic.d
deleted file mode 100644 (file)
index 566f890..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: proxy-basic
-Help: Use Basic authentication on the proxy
-See-also: proxy proxy-anyauth proxy-digest
----
-Tells curl to use HTTP Basic authentication when communicating with the given
-proxy. Use --basic for enabling HTTP Basic with a remote host. Basic is the
-default authentication method curl uses with proxies.
diff --git a/docs/cmdline-opts/proxy-cacert.d b/docs/cmdline-opts/proxy-cacert.d
deleted file mode 100644 (file)
index 2713dd2..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: proxy-cacert
-Help: CA certificate to verify peer against for proxy
-Arg: <file>
-Added: 7.52.0
-See-also: proxy-capath cacert capath proxy
----
-Same as --cacert but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-capath.d b/docs/cmdline-opts/proxy-capath.d
deleted file mode 100644 (file)
index 177246a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: proxy-capath
-Help: CA directory to verify peer against for proxy
-Arg: <dir>
-Added: 7.52.0
-See-also: proxy-cacert proxy capath
----
-Same as --capath but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-cert-type.d b/docs/cmdline-opts/proxy-cert-type.d
deleted file mode 100644 (file)
index 8c9e788..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-cert-type
-Arg: <type>
-Added: 7.52.0
-Help: Client certificate type for HTTS proxy
----
-Same as --cert-type but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-cert.d b/docs/cmdline-opts/proxy-cert.d
deleted file mode 100644 (file)
index 43acd39..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-cert
-Arg: <cert[:passwd]>
-Help: Set client certificate for proxy
-Added: 7.52.0
----
-Same as --cert but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-ciphers.d b/docs/cmdline-opts/proxy-ciphers.d
deleted file mode 100644 (file)
index dcac812..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-ciphers
-Arg: <list>
-Help: SSL ciphers to use for proxy
-Added: 7.52.0
----
-Same as --ciphers but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-crlfile.d b/docs/cmdline-opts/proxy-crlfile.d
deleted file mode 100644 (file)
index 1d6247f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-crlfile
-Arg: <file>
-Help: Set a CRL list for proxy
-Added: 7.52.0
----
-Same as --crlfile but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-digest.d b/docs/cmdline-opts/proxy-digest.d
deleted file mode 100644 (file)
index ccf4663..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-digest
-Help: Use Digest authentication on the proxy
-See-also: proxy proxy-anyauth proxy-basic
----
-Tells curl to use HTTP Digest authentication when communicating with the given
-proxy. Use --digest for enabling HTTP Digest with a remote host.
diff --git a/docs/cmdline-opts/proxy-header.d b/docs/cmdline-opts/proxy-header.d
deleted file mode 100644 (file)
index 1ef696b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Long: proxy-header
-Arg: <header>
-Help: Pass custom header LINE to proxy
-Protocols: HTTP
-Added: 7.37.0
----
-Extra header to include in the request when sending HTTP to a proxy. You may
-specify any number of extra headers. This is the equivalent option to --header
-but is for proxy communication only like in CONNECT requests when you want a
-separate header sent to the proxy to what is sent to the actual remote host.
-
-curl will make sure that each header you add/replace is sent with the proper
-end-of-line marker, you should thus \fBnot\fP add that as a part of the header
-content: do not add newlines or carriage returns, they will only mess things
-up for you.
-
-Headers specified with this option will not be included in requests that curl
-knows will not be sent to a proxy.
-
-This option can be used multiple times to add/replace/remove multiple headers.
diff --git a/docs/cmdline-opts/proxy-insecure.d b/docs/cmdline-opts/proxy-insecure.d
deleted file mode 100644 (file)
index 762828f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Long: proxy-insecure
-Help: Do HTTPS proxy connections without verifying the proxy
-Added: 7.52.0
----
-Same as --insecure but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-key-type.d b/docs/cmdline-opts/proxy-key-type.d
deleted file mode 100644 (file)
index ce7482a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-key-type
-Arg: <type>
-Help: Private key file type for proxy
-Added: 7.52.0
----
-Same as --key-type but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-key.d b/docs/cmdline-opts/proxy-key.d
deleted file mode 100644 (file)
index e61eb18..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Long: proxy-key
-Help: Private key for HTTPS proxy
-Arg: <key>
----
-Same as --key but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-negotiate.d b/docs/cmdline-opts/proxy-negotiate.d
deleted file mode 100644 (file)
index 775f62a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: proxy-negotiate
-Help: Use HTTP Negotiate (SPNEGO) authentication on the proxy
-Added: 7.17.1
-See-also: proxy-anyauth proxy-basic
----
-Tells curl to use HTTP Negotiate (SPNEGO) authentication when communicating
-with the given proxy. Use --negotiate for enabling HTTP Negotiate (SPNEGO)
-with a remote host.
diff --git a/docs/cmdline-opts/proxy-ntlm.d b/docs/cmdline-opts/proxy-ntlm.d
deleted file mode 100644 (file)
index c30db53..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-ntlm
-Help: Use NTLM authentication on the proxy
-See-also: proxy-negotiate proxy-anyauth
----
-Tells curl to use HTTP NTLM authentication when communicating with the given
-proxy. Use --ntlm for enabling NTLM with a remote host.
diff --git a/docs/cmdline-opts/proxy-pass.d b/docs/cmdline-opts/proxy-pass.d
deleted file mode 100644 (file)
index 3371714..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-pass
-Arg: <phrase>
-Help: Pass phrase for the private key for HTTPS proxy
-Added: 7.52.0
----
-Same as --pass but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-service-name.d b/docs/cmdline-opts/proxy-service-name.d
deleted file mode 100644 (file)
index e774d24..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-long: proxy-service-name
-Arg: <name>
-Help: SPNEGO proxy service name
-Added: 7.43.0
----
-This option allows you to change the service name for proxy negotiation.
diff --git a/docs/cmdline-opts/proxy-ssl-allow-beast.d b/docs/cmdline-opts/proxy-ssl-allow-beast.d
deleted file mode 100644 (file)
index de96b84..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Long: proxy-ssl-allow-beast
-Help: Allow security flaw for interop for HTTPS proxy
-Added: 7.52.0
----
-Same as --ssl-allow-beast but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-tlsauthtype.d b/docs/cmdline-opts/proxy-tlsauthtype.d
deleted file mode 100644 (file)
index 7d0ce8e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-tlsauthtype
-Arg: <type>
-Help: TLS authentication type for HTTPS proxy
-Added: 7.52.0
----
-Same as --tlsauthtype but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-tlspassword.d b/docs/cmdline-opts/proxy-tlspassword.d
deleted file mode 100644 (file)
index cf00384..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-tlspassword
-Arg: <string>
-Help: TLS password for HTTPS proxy
-Added: 7.52.0
----
-Same as --tlspassword but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-tlsuser.d b/docs/cmdline-opts/proxy-tlsuser.d
deleted file mode 100644 (file)
index 758a7c9..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: proxy-tlsuser
-Arg: <name>
-Help: TLS username for HTTPS proxy
-Added: 7.52.0
----
-Same as --tlsuser but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-tlsv1.d b/docs/cmdline-opts/proxy-tlsv1.d
deleted file mode 100644 (file)
index d024eea..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Long: proxy-tlsv1
-Help: Use TLSv1 for HTTPS proxy
-Added: 7.52.0
----
-Same as --tlsv1 but used in HTTPS proxy context.
diff --git a/docs/cmdline-opts/proxy-user.d b/docs/cmdline-opts/proxy-user.d
deleted file mode 100644 (file)
index b1f6f6e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: proxy-user
-Short: U
-Arg: <user:password>
-Help: Proxy user and password
----
-Specify the user name and password to use for proxy authentication.
-
-If you use a Windows SSPI-enabled curl binary and do either Negotiate or NTLM
-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 :".
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/proxy.d b/docs/cmdline-opts/proxy.d
deleted file mode 100644 (file)
index 6506692..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-Long: proxy
-Short: x
-Arg: [protocol://]host[:port]
-Help: Use this proxy
----
-Use the specified proxy.
-
-The proxy string can be specified with a protocol:// prefix. No protocol
-specified or http:// will be treated as HTTP proxy. Use socks4://, socks4a://,
-socks5:// or socks5h:// to request a specific SOCKS version to be used.
-(The protocol support was added in curl 7.21.7)
-
-HTTPS proxy support via https:// protocol prefix was added in 7.52.0 for
-OpenSSL, GnuTLS and NSS.
-
-Unrecognized and unsupported proxy protocols cause an error since 7.52.0.
-Prior versions may ignore the protocol and use http:// instead.
-
-If the port number is not specified in the proxy string, it is assumed to be
-1080.
-
-This option overrides existing environment variables that set the proxy to
-use. If there's an environment variable setting a proxy, you can set proxy to
-\&"" to override it.
-
-All operations that are performed over an HTTP proxy will transparently be
-converted to HTTP. It means that certain protocol specific operations might
-not be available. This is not the case if you can tunnel through the proxy, as
-one with the --proxytunnel option.
-
-User and password that might be provided in the proxy string are URL decoded
-by curl. This allows you to pass in special characters such as @ by using %40
-or pass in a colon with %3a.
-
-The proxy host can be specified the exact same way as the proxy environment
-variables, including the protocol prefix (http://) and the embedded user +
-password.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/proxy1.0.d b/docs/cmdline-opts/proxy1.0.d
deleted file mode 100644 (file)
index 4a931bd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: proxy1.0
-Arg: <host[:port]>
-Help: Use HTTP/1.0 proxy on given port
----
-Use the specified HTTP 1.0 proxy. If the port number is not specified, it is
-assumed at port 1080.
-
-The only difference between this and the HTTP proxy option --proxy, is that
-attempts to use CONNECT through the proxy will specify an HTTP 1.0 protocol
-instead of the default HTTP 1.1.
diff --git a/docs/cmdline-opts/proxytunnel.d b/docs/cmdline-opts/proxytunnel.d
deleted file mode 100644 (file)
index 09855ed..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: proxytunnel
-Short: p
-Help: Operate through a HTTP proxy tunnel (using CONNECT)
-See-also: proxy
----
-When an HTTP proxy is used --proxy, this option will cause non-HTTP protocols
-to attempt to tunnel through the proxy instead of merely using it to do
-HTTP-like operations. The tunnel approach is made with the HTTP proxy CONNECT
-request and requires that the proxy allows direct connect to the remote port
-number curl wants to tunnel through to.
diff --git a/docs/cmdline-opts/pubkey.d b/docs/cmdline-opts/pubkey.d
deleted file mode 100644 (file)
index b2e11c0..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Long: pubkey
-Arg: <key>
-Protocols: SFTP SCP
-Help: SSH Public key file name
----
-Public key file name. Allows you to provide your public key in this separate
-file.
-
-If this option is used several times, the last one will be used.
-
-(As of 7.39.0, curl attempts to automatically extract the public key from the
-private key file, so passing this option is generally not required. Note that
-this public key extraction requires libcurl to be linked against a copy of
-libssh2 1.2.8 or higher that is itself linked against OpenSSL.)
diff --git a/docs/cmdline-opts/quote.d b/docs/cmdline-opts/quote.d
deleted file mode 100644 (file)
index cdd3ca6..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-Long: quote
-Short: Q
-Help: Send command(s) to server before transfer
-Protocols: FTP SFTP
----
-
-Send an arbitrary command to the remote FTP or SFTP server. Quote commands are
-sent BEFORE the transfer takes place (just after the initial PWD command in an
-FTP transfer, to be exact). To make commands take place after a successful
-transfer, prefix them with a dash '-'.  To make commands be sent after curl
-has changed the working directory, just before the transfer command(s), prefix
-the command with a '+' (this is only supported for FTP). You may specify any
-number of commands.
-
-If the server returns failure for one of the commands, the entire operation
-will be aborted. You must send syntactically correct FTP commands as RFC 959
-defines to FTP servers, or one of the commands listed below to SFTP servers.
-
-This option can be used multiple times. When speaking to an FTP server, prefix
-the command with an asterisk (*) to make curl continue even if the command
-fails as by default curl will stop at first failure.
-
-SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP quote commands
-itself before sending them to the server.  File names may be quoted
-shell-style to embed spaces or special characters.  Following is the list of
-all supported SFTP quote commands:
-.RS
-.IP "chgrp group file"
-The chgrp command sets the group ID of the file named by the file operand to
-the group ID specified by the group operand. The group operand is a decimal
-integer group ID.
-.IP "chmod mode file"
-The chmod command modifies the file mode bits of the specified file. The
-mode operand is an octal integer mode number.
-.IP "chown user file"
-The chown command sets the owner of the file named by the file operand to the
-user ID specified by the user operand. The user operand is a decimal
-integer user ID.
-.IP "ln source_file target_file"
-The ln and symlink commands create a symbolic link at the target_file location
-pointing to the source_file location.
-.IP "mkdir directory_name"
-The mkdir command creates the directory named by the directory_name operand.
-.IP "pwd"
-The pwd command returns the absolute pathname of the current working directory.
-.IP "rename source target"
-The rename command renames the file or directory named by the source
-operand to the destination path named by the target operand.
-.IP "rm file"
-The rm command removes the file specified by the file operand.
-.IP "rmdir directory"
-The rmdir command removes the directory entry specified by the directory
-operand, provided it is empty.
-.IP "symlink source_file target_file"
-See ln.
-.RE
diff --git a/docs/cmdline-opts/random-file.d b/docs/cmdline-opts/random-file.d
deleted file mode 100644 (file)
index 51626f8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: random-file
-Arg: <file>
-Help: File for reading random data from
----
-Specify the path name to file containing what will be considered as random
-data. The data may be used to seed the random engine for SSL connections.  See
-also the --egd-file option.
diff --git a/docs/cmdline-opts/range.d b/docs/cmdline-opts/range.d
deleted file mode 100644 (file)
index 760d15e..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-Long: range
-Short: r
-Help: Retrieve only the bytes within RANGE
-Arg: <range>
-Protocols: HTTP FTP SFTP FILE
----
-Retrieve a byte range (i.e a partial document) from a HTTP/1.1, FTP or SFTP
-server or a local FILE. Ranges can be specified in a number of ways.
-.RS
-.TP 10
-.B 0-499
-specifies the first 500 bytes
-.TP
-.B 500-999
-specifies the second 500 bytes
-.TP
-.B -500
-specifies the last 500 bytes
-.TP
-.B 9500-
-specifies the bytes from offset 9500 and forward
-.TP
-.B 0-0,-1
-specifies the first and last byte only(*)(HTTP)
-.TP
-.B 100-199,500-599
-specifies two separate 100-byte ranges(*) (HTTP)
-.RE
-.IP
-(*) = NOTE that this will cause the server to reply with a multipart
-response!
-
-Only digit characters (0-9) are valid in the 'start' and 'stop' fields of the
-\&'start-stop' range syntax. If a non-digit character is given in the range,
-the server's response will be unspecified, depending on the server's
-configuration.
-
-You should also be aware that many HTTP/1.1 servers do not have this feature
-enabled, so that when you attempt to get a range, you'll instead get the whole
-document.
-
-FTP and SFTP range downloads only support the simple 'start-stop' syntax
-(optionally with one of the numbers omitted). FTP use depends on the extended
-FTP command SIZE.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/raw.d b/docs/cmdline-opts/raw.d
deleted file mode 100644 (file)
index c3328e6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: raw
-Help: Do HTTP "raw"; no transfer decoding
-Added: 7.16.2
-Protocols: HTTP
----
-When used, it disables all internal HTTP decoding of content or transfer
-encodings and instead makes them passed on unaltered, raw.
diff --git a/docs/cmdline-opts/referer.d b/docs/cmdline-opts/referer.d
deleted file mode 100644 (file)
index 1d45211..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Long: referer
-Short: e
-Arg: <URL>
-Protocols: HTTP
-Help: Referer URL
-See-also: user-agent header
----
-Sends the "Referrer Page" information to the HTTP server. This can also be set
-with the --header flag of course.  When used with --location you can append
-";auto" to the --referer URL to make curl automatically set the previous URL
-when it follows a Location: header. The \&";auto" string can be used alone,
-even if you don't set an initial --referer.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/remote-header-name.d b/docs/cmdline-opts/remote-header-name.d
deleted file mode 100644 (file)
index 771b6d4..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Long: remote-header-name
-Short: J
-Protocols: HTTP
-Help: Use the header-provided filename
----
-This option tells the --remote-name option to use the 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.
diff --git a/docs/cmdline-opts/remote-name-all.d b/docs/cmdline-opts/remote-name-all.d
deleted file mode 100644 (file)
index f7a1996..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: remote-name-all
-Help: Use the remote file name for all URLs
-Added: 7.19.0
----
-This option changes the default action for all given URLs to be dealt with as
-if --remote-name were used for each one. So if you want to disable that for a
-specific URL after --remote-name-all has been used, you must use "-o -" or
---no-remote-name.
diff --git a/docs/cmdline-opts/remote-name.d b/docs/cmdline-opts/remote-name.d
deleted file mode 100644 (file)
index 9fed64b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Long: remote-name
-Short: O
-Help: Write output to a file named as the remote file
----
-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 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.
-
-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 --remote-header-name 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.
-
-You may use this option as many times as the number of URLs you have.
diff --git a/docs/cmdline-opts/remote-time.d b/docs/cmdline-opts/remote-time.d
deleted file mode 100644 (file)
index 0f369e0..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-long: remote-time
-short: R
-Help: Set the remote file's time on the local output
----
-When used, this will make curl attempt to figure out the timestamp of the
-remote file, and if that is available make the local file get that same
-timestamp.
diff --git a/docs/cmdline-opts/request.d b/docs/cmdline-opts/request.d
deleted file mode 100644 (file)
index 3919d42..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-Long: request
-Short: X
-Arg: <command>
-Help: Specify request command to use
----
-(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.
-
-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.
-
-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 --head option.
-
-The method string you set with --request will be used for all requests, which
-if you for example use --location 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.
-
-(POP3)
-Specifies a custom POP3 command to use instead of LIST or RETR. (Added in
-7.26.0)
-
-(IMAP)
-Specifies a custom IMAP command to use instead of LIST. (Added in 7.30.0)
-
-(SMTP)
-Specifies a custom SMTP command to use instead of HELP or VRFY. (Added in 7.34.0)
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/resolve.d b/docs/cmdline-opts/resolve.d
deleted file mode 100644 (file)
index ba3967a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Long: resolve
-Arg: <host:port:address>
-Help: Resolve the host+port to this address
-Added: 7.21.3
----
-Provide a custom address for a specific host and port pair. Using this, you
-can make the curl requests(s) use a specified address and prevent the
-otherwise normally resolved address to be used. Consider it a sort of
-/etc/hosts alternative provided on the command line. The port number should be
-the number used for the specific protocol the host will be used for. It means
-you need several entries if you want to provide address for the same host but
-different ports.
-
-The provided address set by this option will be used even if --ipv4 or --ipv6
-is set to make curl use another IP version.
-
-This option can be used many times to add many host names to resolve.
diff --git a/docs/cmdline-opts/retry-connrefused.d b/docs/cmdline-opts/retry-connrefused.d
deleted file mode 100644 (file)
index 6a78e1f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: retry-connrefused
-Help: Retry on connection refused (use with --retry)
-Added: 7.52.0
----
-In addition to the other conditions, consider ECONNREFUSED as a transient
-error too for --retry. This option is used together with --retry.
diff --git a/docs/cmdline-opts/retry-delay.d b/docs/cmdline-opts/retry-delay.d
deleted file mode 100644 (file)
index 43c5aff..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-long: retry-delay
-arg: <seconds>
-Help: Wait time between retries
-Added: 7.12.3
----
-Make curl sleep this amount of time before each retry when a transfer has
-failed with a transient error (it changes the default backoff time algorithm
-between retries). This option is only interesting if --retry is also
-used. Setting this delay to zero will make curl use the default backoff time.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/retry-max-time.d b/docs/cmdline-opts/retry-max-time.d
deleted file mode 100644 (file)
index 1c2f972..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-long: retry-max-time
-Arg: <seconds>
-Help: Retry only within this period
-Added: 7.12.3
----
-The retry timer is reset before the first transfer attempt. Retries will be
-done as usual (see --retry) as long as the timer hasn't reached this given
-limit. Notice that if the timer hasn't reached the limit, the request will be
-made and while performing, it may take longer than this given time period. To
-limit a single request\'s maximum time, use --max-time.  Set this option to
-zero to not timeout retries.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/retry.d b/docs/cmdline-opts/retry.d
deleted file mode 100644 (file)
index 35215df..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Long: retry
-Arg: <num>
-Added: 7.12.3
-Help: Retry request if transient problems occur
----
-If a transient error is returned when curl tries to perform a transfer, it
-will retry this number of times before giving up. Setting the number to 0
-makes curl do no retries (which is the default). Transient error means either:
-a timeout, an FTP 4xx response code or an HTTP 5xx response code.
-
-When curl is about to retry a transfer, it will first wait one second and then
-for all forthcoming retries it will double the waiting time until it reaches
-10 minutes which then will be the delay between the rest of the retries.  By
-using --retry-delay you disable this exponential backoff algorithm. See also
---retry-max-time to limit the total time allowed for retries.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/sasl-ir.d b/docs/cmdline-opts/sasl-ir.d
deleted file mode 100644 (file)
index 120b19d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-long: sasl-ir
-Help: Enable initial response in SASL authentication
-Added: 7.31.0
----
-Enable initial response in SASL authentication.
diff --git a/docs/cmdline-opts/service-name.d b/docs/cmdline-opts/service-name.d
deleted file mode 100644 (file)
index 4dfeb27..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: service-name
-Help: SPNEGO service name
-Arg: <name>
-Added: 7.43.0
----
-This option allows you to change the service name for SPNEGO.
-
-Examples: --negotiate --service-name sockd would use sockd/server-name.
diff --git a/docs/cmdline-opts/show-error.d b/docs/cmdline-opts/show-error.d
deleted file mode 100644 (file)
index ede174b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-long: show-error
-Short: S
-Help: Show error even when -s is used
----
-When used with --silent, it makes curl show an error message if it fails.
diff --git a/docs/cmdline-opts/silent.d b/docs/cmdline-opts/silent.d
deleted file mode 100644 (file)
index 7603b76..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-long: silent
-Short: s
-Help: Silent mode
-See-also: verbose stderr
----
-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.
-
-Use --show-error in addition to this option to disable progress meter but
-still show error messages.
diff --git a/docs/cmdline-opts/socks4.d b/docs/cmdline-opts/socks4.d
deleted file mode 100644 (file)
index 11f6ae0..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Long: socks4
-Arg: <host[:port]>
-Help: SOCKS4 proxy on given host + port
-Added: 7.15.2
----
-Use the specified SOCKS4 proxy. If the port number is not specified, it is
-assumed at port 1080.
-
-This option overrides any previous use of --proxy, as they are mutually
-exclusive.
-
-Since 7.21.7, this option is superfluous since you can specify a socks4 proxy
-with --proxy using a socks4:// protocol prefix.
-
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/socks4a.d b/docs/cmdline-opts/socks4a.d
deleted file mode 100644 (file)
index ae254ae..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Long: socks4a
-Arg: <host[:port]>
-Help: SOCKS4a proxy on given host + port
-Added: 7.18.0
----
-Use the specified SOCKS4a proxy. If the port number is not specified, it is
-assumed at port 1080.
-
-This option overrides any previous use of --proxy, as they are mutually
-exclusive.
-
-Since 7.21.7, this option is superfluous since you can specify a socks4a proxy
-with --proxy using a socks4a:// protocol prefix.
-
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/socks5-gssapi-nec.d b/docs/cmdline-opts/socks5-gssapi-nec.d
deleted file mode 100644 (file)
index 477e218..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: socks5-gssapi-nec
-Help: Compatibility with NEC SOCKS5 server
-Added: 7.19.4
----
-As part of the GSS-API negotiation a protection mode is negotiated. RFC 1961
-says in section 4.3/4.4 it should be protected, but the NEC reference
-implementation does not.  The option --socks5-gssapi-nec allows the
-unprotected exchange of the protection mode negotiation.
diff --git a/docs/cmdline-opts/socks5-gssapi-service.d b/docs/cmdline-opts/socks5-gssapi-service.d
deleted file mode 100644 (file)
index eb3b240..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: socks5-gssapi-service
-Arg: <name>
-Help: SOCKS5 proxy service name for GSS-API
-Added: 7.19.4
----
-The default service name for a socks server is rcmd/server-fqdn. This option
-allows you to change it.
-
-Examples: --socks5 proxy-name --socks5-gssapi-service sockd would use
-sockd/proxy-name --socks5 proxy-name --socks5-gssapi-service sockd/real-name
-would use sockd/real-name for cases where the proxy-name does not match the
-principal name.
diff --git a/docs/cmdline-opts/socks5-hostname.d b/docs/cmdline-opts/socks5-hostname.d
deleted file mode 100644 (file)
index 9d9d946..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Long: socks5-hostname
-Arg: <host[:port]>
-Help: SOCKS5 proxy, pass host name to proxy
-Added: 7.18.0
----
-Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If
-the port number is not specified, it is assumed at port 1080.
-
-This option overrides any previous use of --proxy, as they are mutually
-exclusive.
-
-Since 7.21.7, this option is superfluous since you can specify a socks5
-hostname proxy with --proxy using a socks5h:// protocol prefix.
-
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/socks5.d b/docs/cmdline-opts/socks5.d
deleted file mode 100644 (file)
index 22fae76..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Long: socks5
-Arg: <host[:port]>
-Help: SOCKS5 proxy on given host + port
-Added: 7.18.0
----
-Use the specified SOCKS5 proxy - but resolve the host name locally. If the
-port number is not specified, it is assumed at port 1080.
-
-This option overrides any previous use of --proxy, as they are mutually
-exclusive.
-
-Since 7.21.7, this option is superfluous since you can specify a socks5 proxy
-with --proxy using a socks5:// protocol prefix.
-
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
-If this option is used several times, the last one will be used.
-
-This option (as well as --socks4) does not work with IPV6, FTPS or LDAP.
diff --git a/docs/cmdline-opts/speed-limit.d b/docs/cmdline-opts/speed-limit.d
deleted file mode 100644 (file)
index e2b81c7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: speed-limit
-Short: Y
-Arg: <speed>
-Help: Stop transfers slower than this
----
-If a download is slower than this given speed (in bytes per second) for
-speed-time seconds it gets aborted. speed-time is set with --speed-time and is
-30 if not set.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/speed-time.d b/docs/cmdline-opts/speed-time.d
deleted file mode 100644 (file)
index 98d6ae1..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Long: speed-time
-Short: y
-Arg: <seconds>
-Help: Trigger 'speed-limit' abort after this time
----
-If a download is slower than speed-limit bytes per second during a speed-time
-period, the download gets aborted. If speed-time is used, the default
-speed-limit will be 1 unless set with --speed-limit.
-
-This option controls transfers and thus will not affect slow connects etc. If
-this is a concern for you, try the --connect-timeout option.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/ssl-allow-beast.d b/docs/cmdline-opts/ssl-allow-beast.d
deleted file mode 100644 (file)
index 973fcd4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: ssl-allow-beast
-Help: Allow security flaw to improve interop
-Added: 7.25.0
----
-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.
diff --git a/docs/cmdline-opts/ssl-no-revoke.d b/docs/cmdline-opts/ssl-no-revoke.d
deleted file mode 100644 (file)
index cdb6fb5..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: ssl-no-revoke
-Help: Disable cert revocation checks (WinSSL)
-Added: 7.44.0
----
-(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.
diff --git a/docs/cmdline-opts/ssl-reqd.d b/docs/cmdline-opts/ssl-reqd.d
deleted file mode 100644 (file)
index b21aed1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-long: ssl-reqd
-Help: Require SSL/TLS
-Protocols: FTP IMAP POP3 SMTP
-Added: 7.20.0
----
-Require SSL/TLS for the connection.  Terminates the connection if the server
-doesn't support SSL/TLS.
-
-This option was formerly known as --ftp-ssl-reqd.
diff --git a/docs/cmdline-opts/ssl.d b/docs/cmdline-opts/ssl.d
deleted file mode 100644 (file)
index 71c187a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-long: ssl
-Help: Try SSL/TLS
-Protocols: FTP IMAP POP3 SMTP
-Added: 7.20.0
----
-
-Try to use SSL/TLS for the connection.  Reverts to a non-secure connection if
-the server doesn't support SSL/TLS.  See also --ftp-ssl-control and --ssl-reqd
-for different levels of encryption required.
-
-This option was formerly known as --ftp-ssl (Added in 7.11.0). That option
-name can still be used but will be removed in a future version.
diff --git a/docs/cmdline-opts/sslv2.d b/docs/cmdline-opts/sslv2.d
deleted file mode 100644 (file)
index 67d2b85..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Short: 2
-Long: sslv2
-Tags: Versions
-Protocols: SSL
-Added:
-Mutexed: sslv3 tlsv1 tlsv1.1 tlsv1.2
-Requires: TLS
-See-also: http1.1 http2
-Help: Use SSLv2
----
-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 RFC 6176).
diff --git a/docs/cmdline-opts/sslv3.d b/docs/cmdline-opts/sslv3.d
deleted file mode 100644 (file)
index 101ad10..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Short: 3
-Long: sslv3
-Tags: Versions
-Protocols: SSL
-Added:
-Mutexed: sslv2 tlsv1 tlsv1.1 tlsv1.2
-Requires: TLS
-See-also: http1.1 http2
-Help: Use SSLv3
----
-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 RFC 7568).
diff --git a/docs/cmdline-opts/stderr.d b/docs/cmdline-opts/stderr.d
deleted file mode 100644 (file)
index e8cf7ba..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: stderr
-Help: Where to redirect stderr
-See-also: verbose silent
----
-Redirect all writes to stderr to the specified file instead. If the file name
-is a plain '-', it is instead written to stdout.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/tcp-fastopen.d b/docs/cmdline-opts/tcp-fastopen.d
deleted file mode 100644 (file)
index 08e141d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Long: tcp-fastopen
-Added: 7.49.0
-Help: Use TCP Fast Open
----
-Enable use of TCP Fast Open (RFC7413).
diff --git a/docs/cmdline-opts/tcp-nodelay.d b/docs/cmdline-opts/tcp-nodelay.d
deleted file mode 100644 (file)
index 0c0ddd0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: tcp-nodelay
-Help: Use the TCP_NODELAY option
-Added: 7.11.2
----
-Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
-details about this option.
-
-Since 7.50.2, curl sets this option by default and you need to explictitly
-switch it off if you don't want it on.
diff --git a/docs/cmdline-opts/telnet-option.d b/docs/cmdline-opts/telnet-option.d
deleted file mode 100644 (file)
index a67cb62..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Long: telnet-option
-Short: t
-Arg: <opt=val>
-Help: Set telnet option
----
-Pass options to the telnet protocol. Supported options are:
-
-TTYPE=<term> Sets the terminal type.
-
-XDISPLOC=<X display> Sets the X display location.
-
-NEW_ENV=<var,val> Sets an environment variable.
diff --git a/docs/cmdline-opts/tftp-blksize.d b/docs/cmdline-opts/tftp-blksize.d
deleted file mode 100644 (file)
index 04c6c53..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: tftp-blksize
-Arg: <value>
-help: Set TFTP BLKSIZE option
-Protocols: TFTP
-Added: 7.20.0
----
-Set TFTP BLKSIZE option (must be >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.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/tftp-no-options.d b/docs/cmdline-opts/tftp-no-options.d
deleted file mode 100644 (file)
index e2a4dac..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Long: tftp-no-options
-Help: Do not send any TFTP options
-Protocols: TFTP
-Added: 7.48.0
----
-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 --tftp-blksize is
-ignored.
diff --git a/docs/cmdline-opts/time-cond.d b/docs/cmdline-opts/time-cond.d
deleted file mode 100644 (file)
index 830b4e1..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Long: time-cond
-Short: z
-Arg: <time>
-Help: Transfer based on a time condition
-Protocols: HTTP FTP
----
-Request a file that has been modified later than the given time and date, or
-one that has been modified before that time. The <date expression> can be all
-sorts of date strings or if it doesn't match any internal ones, it is taken as
-a filename and tries to get the modification date (mtime) from <file>
-instead. See the \fIcurl_getdate(3)\fP man pages for date expression details.
-
-Start the date expression with a dash (-) to make it request for a document
-that is older than the given date/time, default is a document that is newer
-than the specified date/time.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/tlsauthtype.d b/docs/cmdline-opts/tlsauthtype.d
deleted file mode 100644 (file)
index 1b1481f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: tlsauthtype
-Arg: <type>
-Help: TLS authentication type
-Added: 7.21.4
----
-Set TLS authentication type. Currently, the only supported option is "SRP",
-for TLS-SRP (RFC 5054). If --tlsuser and --tlspassword are specified but
---tlsauthtype is not, then this option defaults to "SRP".
diff --git a/docs/cmdline-opts/tlspassword.d b/docs/cmdline-opts/tlspassword.d
deleted file mode 100644 (file)
index 234a116..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: tlspassword
-Help: TLS password
-Added: 7.21.4
----
-Set password for use with the TLS authentication method specified with
---tlsauthtype. Requires that --tlsuser also be set.
diff --git a/docs/cmdline-opts/tlsuser.d b/docs/cmdline-opts/tlsuser.d
deleted file mode 100644 (file)
index 72f1e16..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: tlsuser
-Arg: <name>
-Help: TLS user name
-Added: 7.21.4
----
-Set username for use with the TLS authentication method specified with
---tlsauthtype. Requires that --tlspassword also is set.
diff --git a/docs/cmdline-opts/tlsv1.0.d b/docs/cmdline-opts/tlsv1.0.d
deleted file mode 100644 (file)
index 8789025..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: tlsv1.0
-Help: Use TLSv1.0
-Protocols: TLS
-Added: 7.34.0
----
-Forces curl to use TLS version 1.0 when connecting to a remote TLS server.
diff --git a/docs/cmdline-opts/tlsv1.1.d b/docs/cmdline-opts/tlsv1.1.d
deleted file mode 100644 (file)
index 9bfdc35..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: tlsv1.1
-Help: Use TLSv1.1
-Protocols: TLS
-Added: 7.34.0
----
-Forces curl to use TLS version 1.1 when connecting to a remote TLS server.
diff --git a/docs/cmdline-opts/tlsv1.2.d b/docs/cmdline-opts/tlsv1.2.d
deleted file mode 100644 (file)
index 6db94dc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Long: tlsv1.2
-Help: Use TLSv1.2
-Protocols: TLS
-Added: 7.34.0
----
-Forces curl to use TLS version 1.2 when connecting to a remote TLS server.
diff --git a/docs/cmdline-opts/tlsv1.3.d b/docs/cmdline-opts/tlsv1.3.d
deleted file mode 100644 (file)
index 7d9640e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Long: tlsv1.3
-Help: Use TLSv1.3
-Protocols: TLS
-Added: 7.52.0
----
-Forces curl to use TLS version 1.3 when connecting to a remote TLS server.
-
-Note that TLS 1.3 is only supported by a subset of TLS backends. At the time
-of writing this, those are BoringSSL and NSS only.
diff --git a/docs/cmdline-opts/tlsv1.d b/docs/cmdline-opts/tlsv1.d
deleted file mode 100644 (file)
index 9c9f6b3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Short: 1
-Long: tlsv1
-Tags: Versions
-Protocols: SSL
-Added:
-Mutexed: tlsv1.1 tlsv1.2 tlsv1.3
-Requires: TLS
-See-also: http1.1 http2
-Help: Use TLSv1.0 or greater
----
-Tells curl to use TLS version 1.x when negotiating with a remote TLS
-server. That means TLS version 1.0, 1.1 or 1.2.
diff --git a/docs/cmdline-opts/tr-encoding.d b/docs/cmdline-opts/tr-encoding.d
deleted file mode 100644 (file)
index 01bb62b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: tr-encoding
-Added: 7.21.6
-Help: Request compressed transfer encoding
-Protocols: HTTP
----
-Request a compressed Transfer-Encoding response using one of the algorithms
-curl supports, and uncompress the data while receiving it.
diff --git a/docs/cmdline-opts/trace-ascii.d b/docs/cmdline-opts/trace-ascii.d
deleted file mode 100644 (file)
index fceaa71..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Long: trace-ascii
-Arg: <file>
-Help: Like --trace, but without hex output
-Mutexed: trace verbose
----
-Enables a full trace dump of all incoming and outgoing data, including
-descriptive information, to the given output file. Use "-" as filename to have
-the output sent to stdout.
-
-This is very similar to --trace, but leaves out the hex part and only shows
-the ASCII part of the dump. It makes smaller output that might be easier to
-read for untrained humans.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/trace-time.d b/docs/cmdline-opts/trace-time.d
deleted file mode 100644 (file)
index 27dcc42..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Long: trace-time
-Help: Add time stamps to trace/verbose output
-Added: 7.14.0
----
-Prepends a time stamp to each trace or verbose line that curl displays.
diff --git a/docs/cmdline-opts/trace.d b/docs/cmdline-opts/trace.d
deleted file mode 100644 (file)
index 334ea5a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Long: trace
-Arg: <file>
-Help: Write a debug trace to FILE
-Mutexed: verbose trace-ascii
----
-Enables a full trace dump of all incoming and outgoing data, including
-descriptive information, to the given output file. Use "-" as filename to have
-the output sent to stdout. Use "%" as filename to have the output sent to
-stderr.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/unix-socket.d b/docs/cmdline-opts/unix-socket.d
deleted file mode 100644 (file)
index 812d20f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Long: unix-socket
-Arg: <path>
-Help: Connect through this Unix domain socket
-Added: 7.40.0
-Protocols: HTTP
----
-Connect through this Unix domain socket, instead of using the network.
diff --git a/docs/cmdline-opts/upload-file.d b/docs/cmdline-opts/upload-file.d
deleted file mode 100644 (file)
index 6f01dbf..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Long: upload-file
-Short: T
-Arg: <file>
-Help: Transfer local FILE to destination
----
-This transfers the specified local file to the remote URL. If there is no file
-part in the specified URL, curl will append the local file name. NOTE that you
-must use a trailing / on the last directory to really prove to Curl that there
-is no file name or curl will think that your last directory name is the remote
-file name to use. That will most likely cause the upload operation to fail. If
-this is used on an HTTP(S) server, the PUT command will be used.
-
-Use the file name "-" (a single dash) to use stdin instead of a given file.
-Alternately, the file name "." (a single period) may be specified instead
-of "-" to use stdin in non-blocking mode to allow reading server output
-while stdin is being uploaded.
-
-You can specify one --upload-file for each URL on the command line. Each
---upload-file + URL pair specifies what to upload and to where. curl also
-supports "globbing" of the --upload-file argument, meaning that you can upload
-multiple files to a single URL by using the same URL globbing style supported
-in the URL, like this:
-
- curl --upload-file "{file1,file2}" http://www.example.com
-
-or even
-
- curl -T "img[1-1000].png" ftp://ftp.example.com/upload/
-
-When uploading to an SMTP server: the uploaded data is assumed to be RFC 5322
-formatted. It has to feature the necessary set of headers and mail body
-formatted correctly by the user as curl will not transcode nor encode it
-further in any way.
diff --git a/docs/cmdline-opts/url.d b/docs/cmdline-opts/url.d
deleted file mode 100644 (file)
index c54e1ea..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-long: url
-Arg: <url>
-Help: URL to work with
----
-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 --proto-default for details.
-
-This option may be used any number of times. To control where this URL is
-written, use the --output or the --remote-name options.
diff --git a/docs/cmdline-opts/use-ascii.d b/docs/cmdline-opts/use-ascii.d
deleted file mode 100644 (file)
index d59fad9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Short: B
-Long: use-ascii
-Help: Use ASCII/text transfer
-Protocols: FTP LDAP
----
-Enable ASCII transfer. For FTP, this can also be enforced by using a URL that
-ends with ";type=A". This option causes data sent to stdout to be in text mode
-for win32 systems.
diff --git a/docs/cmdline-opts/user-agent.d b/docs/cmdline-opts/user-agent.d
deleted file mode 100644 (file)
index c98619d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Short: A
-Long: user-agent
-Arg: <name>
-Help: Send User-Agent <name> to server
-Protocols: HTTP
----
-
-Specify the User-Agent string to send to the HTTP server. To encode blanks in
-the string, surround the string with single quote marks. This can also be set
-with the --header option of course.
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/user.d b/docs/cmdline-opts/user.d
deleted file mode 100644 (file)
index 439def3..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Long: user
-Short: u
-Arg: <user:password>
-Help: Server user and password
----
-Specify the user name and password to use for server authentication. Overrides
---netrc and --netrc-optional.
-
-If you simply specify the user name, curl will prompt for a password.
-
-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.
-
-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.
-
-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.
-
-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.
-
-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 :".
-
-If this option is used several times, the last one will be used.
diff --git a/docs/cmdline-opts/verbose.d b/docs/cmdline-opts/verbose.d
deleted file mode 100644 (file)
index 5d33521..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Short: v
-Long: verbose
-Mutexed: trace trace-ascii
-Help: Make the operation more talkative
-See-also: include
----
-Makes curl verbose during the operation. Useful for debugging and seeing
-what's going on "under the hood". A line starting with '>' means "header data"
-sent by curl, '<' means "header data" received by curl that is hidden in
-normal cases, and a line starting with '*' means additional info provided by
-curl.
-
-If you only want HTTP headers in the output, --include might be the option
-you're looking for.
-
-If you think this option still doesn't give you enough details, consider using
---trace or --trace-ascii instead.
-
-Use --silent to make curl really quiet.
diff --git a/docs/cmdline-opts/version.d b/docs/cmdline-opts/version.d
deleted file mode 100644 (file)
index 196a4a9..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Long: version
-Short: V
-Help: Show version number and quit
----
-Displays information about curl and the libcurl version it uses.
-
-The first line includes the full version of curl, libcurl and other 3rd party
-libraries linked with the executable.
-
-The second line (starts with "Protocols:") shows all protocols that libcurl
-reports to support.
-
-The third line (starts with "Features:") shows specific features libcurl
-reports to offer. Available features include:
-.RS
-.IP "IPv6"
-You can use IPv6 with this.
-.IP "krb4"
-Krb4 for FTP is supported.
-.IP "SSL"
-SSL versions of various protocols are supported, such as HTTPS, FTPS, POP3S
-and so on.
-.IP "libz"
-Automatic decompression of compressed files over HTTP is supported.
-.IP "NTLM"
-NTLM authentication is supported.
-.IP "Debug"
-This curl uses a libcurl built with Debug. This enables more error-tracking
-and memory debugging etc. For curl-developers only!
-.IP "AsynchDNS"
-This curl uses asynchronous name resolves. Asynchronous name resolves can be
-done using either the c-ares or the threaded resolver backends.
-.IP "SPNEGO"
-SPNEGO authentication is supported.
-.IP "Largefile"
-This curl supports transfers of large files, files larger than 2GB.
-.IP "IDN"
-This curl supports IDN - international domain names.
-.IP "GSS-API"
-GSS-API is supported.
-.IP "SSPI"
-SSPI is supported.
-.IP "TLS-SRP"
-SRP (Secure Remote Password) authentication is supported for TLS.
-.IP "HTTP2"
-HTTP/2 support has been built-in.
-.IP "UnixSockets"
-Unix sockets support is provided.
-.IP "HTTPS-proxy"
-This curl is built to support HTTPS proxy.
-.IP "Metalink"
-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).
-.IP "PSL"
-PSL is short for Public Suffix List and means that this curl has been built
-with knowledge about "public suffixes".
-.RE
diff --git a/docs/cmdline-opts/write-out.d b/docs/cmdline-opts/write-out.d
deleted file mode 100644 (file)
index 03506c9..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-Long: write-out
-Short: w
-Arg: <format>
-Help: Use output FORMAT after completion
----
-Make curl display information on stdout after a completed transfer. The format
-is a string that may contain plain text mixed with any number of
-variables. The format can be specified as a literal "string", or you can have
-curl read the format from a file with "@filename" and to tell curl to read the
-format from stdin you write "@-".
-
-The variables present in the output format will be substituted by the value or
-text that curl thinks fit, as described below. All variables are specified as
-%{variable_name} and to output a normal % you just write them as %%. You can
-output a newline by using \\n, a carriage return with \\r and a tab space with
-\\t.
-
-.B NOTE:
-The %-symbol is a special symbol in the win32-environment, where all
-occurrences of % must be doubled when using this option.
-
-The variables available are:
-.RS
-.TP 15
-.B content_type
-The Content-Type of the requested document, if there was any.
-.TP
-.B filename_effective
-The ultimate filename that curl writes out to. This is only meaningful if curl
-is told to write to a file with the --remote-name or --output
-option. It's most useful in combination with the --remote-header-name
-option. (Added in 7.26.0)
-.TP
-.B ftp_entry_path
-The initial path curl ended up in when logging on to the remote FTP
-server. (Added in 7.15.4)
-.TP
-.B http_code
-The numerical response code that was found in the last retrieved HTTP(S) or
-FTP(s) transfer. In 7.18.2 the alias \fBresponse_code\fP was added to show the
-same info.
-.TP
-.B http_connect
-The numerical code that was found in the last response (from a proxy) to a
-curl CONNECT request. (Added in 7.12.4)
-.TP
-.B http_version
-The http version that was effectively used. (Added in 7.50.0)
-.TP
-.B local_ip
-The IP address of the local end of the most recently done connection - can be
-either IPv4 or IPv6 (Added in 7.29.0)
-.TP
-.B local_port
-The local port number of the most recently done connection (Added in 7.29.0)
-.TP
-.B num_connects
-Number of new connects made in the recent transfer. (Added in 7.12.3)
-.TP
-.B num_redirects
-Number of redirects that were followed in the request. (Added in 7.12.3)
-.TP
-.B proxy_ssl_verify_result
-The result of the HTTPS proxy's SSL peer certificate verification that was
-requested. 0 means the verification was successful. (Added in 7.52.0)
-.TP
-.B redirect_url
-When an HTTP request was made without -L to follow redirects, this variable
-will show the actual URL a redirect \fIwould\fP take you to. (Added in 7.18.2)
-.TP
-.B remote_ip
-The remote IP address of the most recently done connection - can be either
-IPv4 or IPv6 (Added in 7.29.0)
-.TP
-.B remote_port
-The remote port number of the most recently done connection (Added in 7.29.0)
-.TP
-.B scheme
-The URL scheme (sometimes called protocol) that was effectively used (Added in 7.52.0)
-.TP
-.B size_download
-The total amount of bytes that were downloaded.
-.TP
-.B size_header
-The total amount of bytes of the downloaded headers.
-.TP
-.B size_request
-The total amount of bytes that were sent in the HTTP request.
-.TP
-.B size_upload
-The total amount of bytes that were uploaded.
-.TP
-.B speed_download
-The average download speed that curl measured for the complete download. Bytes
-per second.
-.TP
-.B speed_upload
-The average upload speed that curl measured for the complete upload. Bytes per
-second.
-.TP
-.B ssl_verify_result
-The result of the SSL peer certificate verification that was requested. 0
-means the verification was successful. (Added in 7.19.0)
-.TP
-.B time_appconnect
-The time, in seconds, it took from the start until the SSL/SSH/etc
-connect/handshake to the remote host was completed. (Added in 7.19.0)
-.TP
-.B time_connect
-The time, in seconds, it took from the start until the TCP connect to the
-remote host (or proxy) was completed.
-.TP
-.B time_namelookup
-The time, in seconds, it took from the start until the name resolving was
-completed.
-.TP
-.B time_pretransfer
-The time, in seconds, it took from the start until the file transfer was just
-about to begin. This includes all pre-transfer commands and negotiations that
-are specific to the particular protocol(s) involved.
-.TP
-.B time_redirect
-The time, in seconds, it took for all redirection steps include name lookup,
-connect, pretransfer and transfer before the final transaction was
-started. time_redirect shows the complete execution time for multiple
-redirections. (Added in 7.12.3)
-.TP
-.B time_starttransfer
-The time, in seconds, it took from the start until the first byte was just
-about to be transferred. This includes time_pretransfer and also the time the
-server needed to calculate the result.
-.TP
-.B time_total
-The total time, in seconds, that the full operation lasted.
-.TP
-.B url_effective
-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.
diff --git a/docs/cmdline-opts/xattr.d b/docs/cmdline-opts/xattr.d
deleted file mode 100644 (file)
index b7553da..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Long: xattr
-Help: Store metadata in extended file attributes
----
-When saving output to a file, this option tells curl to store certain file
-metadata in extended file attributes. Currently, the URL is stored in the
-xdg.origin.url attribute and, for HTTP, the content type is stored in
-the mime_type attribute. If the file system does not support extended
-attributes, a warning is issued.
diff --git a/docs/curl-config.html b/docs/curl-config.html
new file mode 100644 (file)
index 0000000..83bf13f
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl-config 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">curl-config - Get information about a libcurl installation <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">curl-config [options]</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><span Class="bold">curl-config</span> displays information about the curl and libcurl installation. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="--ca"></a><span class="nroffip">--ca</span> 
+<p class="level1">Displays the built-in path to the CA cert bundle this libcurl uses. 
+<p class="level0"><a name="--cc"></a><span class="nroffip">--cc</span> 
+<p class="level1">Displays the compiler used to build libcurl. 
+<p class="level0"><a name="--cflags"></a><span class="nroffip">--cflags</span> 
+<p class="level1">Set of compiler options (CFLAGS) to use when compiling files that use libcurl. Currently that is only the include path to the curl include files. 
+<p class="level0"><a name="--checkfor"></a><span class="nroffip">--checkfor [version]</span> 
+<p class="level1">Specify the oldest possible libcurl version string you want, and this script will return 0 if the current installation is new enough or it returns 1 and outputs a text saying that the current version is not new enough. (Added in 7.15.4) 
+<p class="level0"><a name="--configure"></a><span class="nroffip">--configure</span> 
+<p class="level1">Displays the arguments given to configure when building curl. 
+<p class="level0"><a name="--feature"></a><span class="nroffip">--feature</span> 
+<p class="level1">Lists what particular main features the installed libcurl was built with. At the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume any particular order. The keywords will be separated by newlines. There may be none, one, or several keywords in the list. 
+<p class="level0"><a name="--help"></a><span class="nroffip">--help</span> 
+<p class="level1">Displays the available options. 
+<p class="level0"><a name="--libs"></a><span class="nroffip">--libs</span> 
+<p class="level1">Shows the complete set of libs and other linker options you will need in order to link your application with libcurl. 
+<p class="level0"><a name="--prefix"></a><span class="nroffip">--prefix</span> 
+<p class="level1">This is the prefix used when libcurl was installed. Libcurl is then installed in $prefix/lib and its header files are installed in $prefix/include and so on. The prefix is set with "configure --prefix". 
+<p class="level0"><a name="--protocols"></a><span class="nroffip">--protocols</span> 
+<p class="level1">Lists what particular protocols the installed libcurl was built to support. At the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols will be listed using uppercase and are separated by newlines. There may be none, one, or several protocols in the list. (Added in 7.13.0) 
+<p class="level0"><a name="--static-libs"></a><span class="nroffip">--static-libs</span> 
+<p class="level1">Shows the complete set of libs and other linker options you will need in order to link your application with libcurl statically. (Added in 7.17.1) 
+<p class="level0"><a name="--version"></a><span class="nroffip">--version</span> 
+<p class="level1">Outputs version information about the installed libcurl. 
+<p class="level0"><a name="--vernum"></a><span class="nroffip">--vernum</span> 
+<p class="level1">Outputs version information about the installed libcurl, in numerical mode. This outputs the version number, in hexadecimal, with 8 bits for each part; major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl 12.13.14 would appear as 0c0d0e... Note that the initial zero might be omitted. (This option was broken in the 7.15.0 release.) <a name="EXAMPLES"></a><h2 class="nroffsh">EXAMPLES</h2>
+<p class="level0">What linker options do I need when I link with libcurl? 
+<p class="level0">&nbsp; $ curl-config --libs 
+<p class="level0">What compiler options do I need when I compile using libcurl functions? 
+<p class="level0">&nbsp; $ curl-config --cflags 
+<p class="level0">How do I know if libcurl was built with SSL support? 
+<p class="level0">&nbsp; $ curl-config --feature | grep SSL 
+<p class="level0">What's the installed libcurl version? 
+<p class="level0">&nbsp; $ curl-config --version 
+<p class="level0">How do I build a single file with a one-line command? 
+<p class="level0">&nbsp; $ `curl-config --cc --cflags` -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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/curl-config.pdf b/docs/curl-config.pdf
new file mode 100644 (file)
index 0000000..4129028
Binary files /dev/null and b/docs/curl-config.pdf differ
index 600853e..7a6cbbd 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2017, 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
@@ -20,9 +20,7 @@
 .\" *
 .\" **************************************************************************
 .\"
-.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
-.\"
-.TH curl 1 "16 Dec 2016" "Curl 7.52.0" "Curl Manual"
+.TH curl 1 "30 Nov 2014" "Curl 7.40.0" "Curl Manual"
 .SH NAME
 curl \- transfer a URL
 .SH SYNOPSIS
@@ -111,22 +109,21 @@ do an operation and it is about to write data to the terminal, it
 mixing progress meter and response data.
 
 If you want a progress meter for HTTP POST or PUT requests, you need to
-redirect the response output to a file, using shell redirect (>), \fI-o, --output\fP or
+redirect the response output to a file, using shell redirect (>), -o [file] or
 similar.
 
 It is not the same case for FTP upload as that operation does not spit out
 any response data to the terminal.
 
-If you prefer a progress "bar" instead of the regular meter, \fI-#, --progress-bar\fP is
-your friend. You can also disable the progress meter completely with the
-\fI-s, --silent\fP option.
+If you prefer a progress "bar" instead of the regular meter, \fI-#\fP is your
+friend.
 .SH OPTIONS
 Options start with one or two dashes. Many of the options require an
 additional value next to them.
 
 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, \fI-d, --data\fP for example, requires a space
+separator. The long "double-dash" form, --data for example, requires a space
 between it and its value.
 
 Short version options that don't need any additional values can be used
@@ -139,212 +136,149 @@ but prefix it with "no-". However, in this list we mostly only list and show
 the --option version of them. (This concept with --no options was added in
 7.19.0. Previously most options were toggled on/off on repeated use of the
 same command line option.)
-.IP "--abstract-unix-socket <path>"
-(HTTP) Connect through an abstract Unix domain socket, instead of using the network.
-Note: netstat shows the path of an abstract socket prefixed with '@', however
-the <path> argument should not have this leading character.
-
-Added in 7.53.0.
-.IP "--anyauth"
-(HTTP) Tells curl to figure out authentication method by itself, and use the most
-secure one the remote site claims to support. This is done by first doing a
-request and checking the response-headers, thus possibly inducing an extra
-network round-trip. This is used instead of setting a specific authentication
-method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and \fI--negotiate\fP.
+.IP "-#, --progress-bar"
+Make curl display progress as a simple progress bar instead of the standard,
+more informational, meter.
+.IP "-:, --next"
+Tells curl to use a separate operation for the following URL and associated
+options. This allows you to send several URL requests, each with their own
+specific options, for example, such as different user names or custom requests
+for each. (Added in 7.36.0)
+.IP "-0, --http1.0"
+(HTTP) Tells curl to use HTTP version 1.0 instead of using its internally
+preferred: HTTP 1.1.
+.IP "--http1.1"
+(HTTP) Tells curl to use HTTP version 1.1. This is the internal default
+version. (Added in 7.33.0)
+.IP "--http2"
+(HTTP) Tells curl to issue its requests using HTTP 2. This requires that the
+underlying libcurl was built to support it. (Added in 7.33.0)
+.IP "--http2-prior-knowledge"
+(HTTP) Tells curl to issue its non-TLS HTTP requests using HTTP/2 without
+HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2
+straight away. HTTPS requests will still do HTTP/2 the standard way with
+negotiated protocol version in the TLS handshake.
 
-Using \fI--anyauth\fP 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.
+HTTP/2 support in general also requires that the underlying libcurl was built
+to support it. (Added in 7.49.0)
+.IP "--no-npn"
+Disable the NPN TLS extension. NPN is enabled by default if libcurl was built
+with an SSL library that supports NPN. NPN is used by a libcurl that supports
+HTTP 2 to negotiate HTTP 2 support with the server during https sessions.
 
-Used together with \fI-u, --user\fP.
+(Added in 7.36.0)
+.IP "--no-alpn"
+Disable the ALPN TLS extension. ALPN is enabled by default if libcurl was built
+with an SSL library that supports ALPN. ALPN is used by a libcurl that supports
+HTTP 2 to negotiate HTTP 2 support with the server during https sessions.
 
-See also \fI--proxy-anyauth\fP and \fI--basic\fP and \fI--digest\fP.
+(Added in 7.36.0)
+.IP "-1, --tlsv1"
+(SSL)
+Forces curl to use TLS version 1.x when negotiating with a remote TLS server.
+You can use options \fI--tlsv1.0\fP, \fI--tlsv1.1\fP, and \fI--tlsv1.2\fP to
+control the TLS version more precisely (if the SSL backend in use supports such
+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 (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. 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.
+.IP "-6, --ipv6"
+This option tells curl to resolve names to IPv6 addresses only, and not for
+example try IPv4.
 .IP "-a, --append"
-(FTP SFTP) When used in an upload, this makes curl append to the target file instead of
-overwriting it. If the remote file doesn't exist, it will be created.  Note
-that this flag is ignored by some SFTP servers (including OpenSSH).
-.IP "--basic"
-(HTTP) Tells curl to use HTTP Basic authentication with the remote host. This is the
-default and this option is usually pointless, unless you use it to override a
-previously set option that sets a different authentication method (such as
-\fI--ntlm\fP, \fI--digest\fP, or \fI--negotiate\fP).
-
-Used together with \fI-u, --user\fP.
-
-See also \fI--proxy-basic\fP.
-.IP "--cacert <CA certificate>"
-(TLS) Tells curl to use the specified certificate file to verify the peer. The file
-may contain multiple CA certificates. The certificate(s) must be in PEM
-format. Normally curl is built to use a default file for this, so this option
-is typically used to alter that default file.
-
-curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is
-set, and uses the given path as a path to a CA cert bundle. This option
-overrides that variable.
-
-The windows version of curl will automatically look for a CA certs file named
-\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
-Current Working Directory, or in any folder along your PATH.
-
-If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
-(libnsspem.so) needs to be available for this option to work properly.
-
-(iOS and macOS only) If curl is built against Secure Transport, then this
-option is supported for backward compatibility with other SSL engines, but it
-should not be set. If the option is not set, then curl will use the
-certificates in the system and user Keychain to verify the peer, which is the
-preferred method of verifying the peer's certificate chain.
-
-If this option is used several times, the last one will be used.
-.IP "--capath <dir>"
-(TLS) 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 \fI--capath\fP can allow
-OpenSSL-powered curl to make SSL-connections much more efficiently than using
-\fI--cacert\fP if the --cacert file contains many CA certificates.
-
-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 "--cert-status"
-(TLS) 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 "--cert-type <type>"
-(TLS) Tells curl what certificate type the provided certificate is in. PEM, DER and
-ENG are recognized types.  If not specified, PEM is assumed.
-
-If this option is used several times, the last one will be used.
-
-See also \fI-E, --cert\fP and \fI--key\fP and \fI--key-type\fP.
-.IP "-E, --cert <certificate[:password]>"
-(TLS) 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 client certificate concatenated! See \fI-E, --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
-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.
-
-(iOS and macOS 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.
+(FTP/SFTP) When used in an upload, this makes curl append to the target file
+instead of overwriting it. If the remote file doesn't exist, it will be
+created.  Note that this flag is ignored by some SFTP servers (including
+OpenSSH).
+.IP "-A, --user-agent <agent string>"
+(HTTP) Specify the User-Agent string to send to the HTTP server. Some badly
+done CGIs fail if this field isn't set to "Mozilla/4.0". To encode blanks in
+the string, surround the string with single quote marks. This can also be set
+with the \fI-H, --header\fP option of course.
 
 If this option is used several times, the last one will be used.
+.IP "--anyauth"
+(HTTP) Tells curl to figure out authentication method by itself, and use the
+most secure one the remote site claims to support. This is done by first
+doing a request and checking the response-headers, thus possibly inducing an
+extra network round-trip. This is used instead of setting a specific
+authentication method, which you can do with \fI--basic\fP, \fI--digest\fP,
+\fI--ntlm\fP, and \fI--negotiate\fP.
+
+Note that using --anyauth is not recommended if you do uploads from stdin,
+since it may require data to be sent twice and then the client must be able to
+rewind. If the need should arise when uploading from stdin, the upload
+operation will fail.
+.IP "-b, --cookie <name=data>"
+(HTTP) Pass the data to the HTTP server as a cookie. It is supposedly the data
+previously received from the server in a "Set-Cookie:" line.  The data should
+be in the format "NAME1=VALUE1; NAME2=VALUE2".
+
+If no '=' symbol is used in the line, it is treated as a filename to use to
+read previously stored cookie lines from, which should be used in this session
+if they match. Using this method also activates the cookie 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 (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.
 
-See also \fI--cert-type\fP and \fI--key\fP and \fI--key-type\fP.
-.IP "--ciphers <list of ciphers>"
-(TLS) 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:
-
- https://curl.haxx.se/docs/ssl-ciphers.html
+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 "--compressed"
-(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.
-.IP "-K, --config <file>"
-Specify which config file to read curl arguments from. The config file is a
-text file in which command line arguments can be written which then will be
-used as if they were written on the actual command line.
-
-Options and their parameters must be specified on the same config file line,
-separated by whitespace, colon, 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.
-
-If the parameter is to contain whitespace, the parameter must be enclosed
-within quotes. Within double quotes, the following escape sequences are
-available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash preceding any other
-letter is ignored. If the first column of a config line is a '#' character,
-the rest of the line will be treated as a comment. Only write one option per
-physical line in the config file.
-
-Specify the filename to \fI-K, --config\fP as '-' to make curl read the file from stdin.
-
-Note that to be able to specify a URL in the config file, you need to specify
-it using the \fI--url\fP option, and not by simply writing the URL on its own
-line. So, it could look similar to this:
-
-url = "https://curl.haxx.se/docs/"
-
-When curl is invoked, it always (unless \fI-q, --disable\fP is used) checks for a
-default config file and uses it if found. The default config file is checked
-for in the following places in this order:
-
-1) curl tries to find the "home dir": It first checks for the CURL_HOME and
-then the HOME environment variables. Failing that, it uses getpwuid() on
-Unix-like systems (which returns the home dir given the current user in your
-system). On Windows, it then checks for the APPDATA variable, or as a last
-resort the '%USERPROFILE%\\Application Data'.
-
-2) On windows, if there is no _curlrc file in the home dir, it checks for one
-in the same dir the curl executable is placed. On Unix-like systems, it will
-simply try to load .curlrc from the determined home dir.
-
-.nf
-# --- Example file ---
-# this is a comment
-url = "example.com"
-output = "curlhere.html"
-user-agent = "superagent/1.0"
-
-# and fetch another URL too
-url = "example.com/docs/manpage.html"
--O
-referer = "http://nowhereatall.example.com/"
-# --- End of example file ---
-.fi
+.IP "-B, --use-ascii"
+(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.
+.IP "--basic"
+(HTTP) Tells curl to use HTTP Basic authentication with the remote host. This
+is the default and this option is usually pointless, unless you use it to
+override a previously set option that sets a different authentication method
+(such as \fI--ntlm\fP, \fI--digest\fP, or \fI--negotiate\fP).
 
-This option can be used multiple times to load multiple config files.
-.IP "--connect-timeout <seconds>"
-Maximum time in seconds that you allow curl's connection to take.  This only
-limits the connection phase, so if curl connects within the given period it
-will continue - if not it will exit.  Since version 7.32.0, this option
-accepts decimal values.
+Used together with \fI-u, --user\fP and \fI-x, --proxy\fP.
 
-If this option is used several times, the last one will be used.
+See also \fI--proxy-basic\fP.
+.IP "-c, --cookie-jar <file name>"
+(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.
 
-See also \fI-m, --max-time\fP.
-.IP "--connect-to <HOST1:PORT1:HOST2:PORT2>"
+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 \fI-b,
+--cookie\fP option.
 
-For a request to the given HOST:PORT pair, connect to
-CONNECT-TO-HOST:CONNECT-TO-PORT instead.  This option is suitable to direct
-requests at a specific server, e.g. at a specific cluster node in a cluster of
-servers.  This option is only used to establish the network connection. It
-does NOT affect the hostname/port that is used for TLS/SSL (e.g. SNI,
-certificate verification) or for the application protocols.  "host" and "port"
-may be the empty string, meaning "any host/port".  "connect-to-host" and
-"connect-to-port" may also be the empty string, meaning "use the request's
-original host/port".
+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.
 
-This option can be used many times to add many connect rules.
+Since 7.43.0 cookies that were imported in the Set-Cookie format without a
+domain name are not exported by this option.
 
-See also \fI--resolve\fP and \fI-H, --header\fP. Added in 7.49.0.
+If this option is used several times, the last specified file name will be
+used.
 .IP "-C, --continue-at <offset>"
 Continue/Resume a previous file transfer at the given offset. The given offset
 is the exact number of bytes that will be skipped, counting from the beginning
@@ -355,95 +289,103 @@ Use "-C -" to tell curl to automatically find out where/how to resume the
 transfer. It then uses the given output/input files to figure that out.
 
 If this option is used several times, the last one will be used.
+.IP "--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:
+\fIhttps://www.openssl.org/docs/apps/ciphers.html\fP
 
-See also \fI-r, --range\fP.
-.IP "-c, --cookie-jar <filename>"
-(HTTP) Specify to which file you want curl to write all cookies after a completed
-operation. Curl writes all cookies from its in-memory cookie storage to the
-given file at the end of operations. 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.
-
-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 \fI-b, --cookie\fP
-option.
+NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of NSS
+ciphers is in the NSSCipherSuite entry at this URL:
+\fIhttps://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP
 
-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 \fI-v, --verbose\fP will get a warning
-displayed, but that is the only visible feedback you get about this possibly
-lethal situation.
+If this option is used several times, the last one will be used.
+.IP "--compressed"
+(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.
+.IP "--connect-timeout <seconds>"
+Maximum time in seconds that you allow curl's connection to take.  This only
+limits the connection phase, so if curl connects within the given period it
+will continue - if not it will exit.  Since version 7.32.0, this option
+accepts decimal values.
 
-If this option is used several times, the last specified file name will be
-used.
-.IP "-b, --cookie <data>"
-(HTTP) Pass the data to the HTTP server in the Cookie header. It is supposedly
-the data previously received from the server in a "Set-Cookie:" line.  The
-data should be in the format "NAME1=VALUE1; NAME2=VALUE2".
-
-If no '=' symbol is used in the argument, it is instead treated as a filename
-to read previously stored cookie from. This option also activates the cookie
-engine which will make curl record incoming cookies, which may be handy if
-you're using this in combination with the \fI-L, --location\fP option or do multiple URL
-transfers on the same invoke.
-
-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.
-
-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.
+See also the \fI-m, --max-time\fP option.
 
 If this option is used several times, the last one will be used.
-
-Users very often want to both read cookies from a file and write updated
-cookies back to a file, so using both \fI-b, --cookie\fP and \fI-c, --cookie-jar\fP in the same
-command line is common.
 .IP "--create-dirs"
-When used in conjunction with the \fI-o, --output\fP option, curl will create the
+When used in conjunction with the \fI-o\fP option, curl will create the
 necessary local directory hierarchy as needed. This option creates the dirs
-mentioned with the \fI-o, --output\fP option, nothing else. If the --output file name
+mentioned with the \fI-o\fP option, nothing else. If the \fI-o\fP file name
 uses no dir or if the dirs it mentions already exist, no dir will be created.
 
-To create remote directories when using FTP or SFTP, try \fI--ftp-create-dirs\fP.
+To create remote directories when using FTP or SFTP, try
+\fI--ftp-create-dirs\fP.
 .IP "--crlf"
-(FTP SMTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
+Convert LF to CRLF in upload. Useful for MVS (OS/390).
 
 (SMTP added in 7.40.0)
 .IP "--crlfile <file>"
-(TLS) Provide a file using PEM format with a Certificate Revocation List that may
-specify peer certificates that are to be considered revoked.
+(HTTPS/FTPS) Provide a file using PEM format with a Certificate Revocation
+List that may specify peer certificates that are to be considered revoked.
 
 If this option is used several times, the last one will be used.
 
-Added in 7.19.7.
+(Added in 7.19.7)
+.IP "-d, --data <data>"
+(HTTP) Sends the specified data in a POST request to the HTTP server, in the
+same way that a browser does when a user has filled in an HTML form and
+presses the submit button. This will cause curl to pass the data to the server
+using the content-type application/x-www-form-urlencoded.  Compare to
+\fI-F, --form\fP.
+
+\fI-d, --data\fP is the same as \fI--data-ascii\fP. \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
+&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
+chunk that looks like \&'name=daniel&skill=lousy'.
+
+If you start the data with the letter @, the rest should be a file name to
+read the data from, or - if you want curl to read the data from
+stdin. 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. 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.
+
+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 \fI-b, --cookie\fP option! The
+\fI-c, --cookie-jar\fP option is a better way to store cookies.
+
+When used in FTP, the FTP server response lines are considered being "headers"
+and thus are saved there.
+
+If this option is used several times, the last one will be used.
 .IP "--data-ascii <data>"
-(HTTP) This is just an alias for \fI-d, --data\fP.
+See \fI-d, --data\fP.
 .IP "--data-binary <data>"
-(HTTP) This posts data exactly as specified with no extra processing whatsoever.
+(HTTP) This posts data exactly as specified with no extra processing
+whatsoever.
 
 If you start the data with the letter @, the rest should be a filename.  Data
-is posted in a similar manner as \fI-d, --data\fP does, except that newlines and
-carriage returns are preserved and conversions are never done.
+is posted in a similar manner as \fI--data-ascii\fP does, except that newlines
+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-d, --data\fP but without the special
-interpretation of the @ character.
-
-See also \fI-d, --data\fP. Added in 7.43.0.
+(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 \fI-d, --data\fP options with the exception
-that this performs URL-encoding.
+(HTTP) This posts data, similar to the other --data options with the exception
+that this performs URL-encoding. (Added in 7.18.0)
 
 To be CGI-compliant, the <data> part should begin with a \fIname\fP followed
 by a separator and a content specification. The <data> part can be passed to
@@ -468,36 +410,9 @@ URL-encode that data and pass it on in the POST. The name part gets an equal
 sign appended, resulting in \fIname=urlencoded-file-content\fP. Note that the
 name is expected to be URL-encoded already.
 .RE
-
-See also \fI-d, --data\fP and \fI--data-raw\fP. Added in 7.18.0.
-.IP "-d, --data <data>"
-(HTTP) Sends the specified data in a POST request to the HTTP server, in the same way
-that a browser does when a user has filled in an HTML form and presses the
-submit button. This will cause curl to pass the data to the server using the
-content-type application/x-www-form-urlencoded.  Compare to \fI-F, --form\fP.
-
-\fI--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
-&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
-chunk that looks like \&'name=daniel&skill=lousy'.
-
-If you start the data with the letter @, the rest should be a file name to
-read the data from, or - if you want curl to read the data from
-stdin. Multiple files can also be specified. Posting data from a file named
-'foobar' would thus be done with \fI-d, --data\fP @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 \fI--data-raw\fP
-instead.
-
-See also \fI--data-binary\fP and \fI--data-urlencode\fP and \fI--data-raw\fP. This option overrides \fI-F, --form\fP and \fI-I, --head\fP and \fI--upload\fP.
-.IP "--delegation <LEVEL>"
-(GSS/kerberos) Set LEVEL to tell the server what it is allowed to delegate when it
-comes to user credentials.
+.IP "--delegation LEVEL"
+Set \fILEVEL\fP to tell the server what it is allowed to delegate when it
+comes to user credentials. Used with GSS/kerberos.
 .RS
 .IP "none"
 Don't allow any delegation.
@@ -508,155 +423,226 @@ service ticket, which is a matter of realm policy.
 Unconditionally allow the server to delegate.
 .RE
 .IP "--digest"
-(HTTP) Enables HTTP Digest authentication. This is an authentication scheme that
-prevents the password from being sent over the wire in clear text. Use this in
-combination with the normal \fI-u, --user\fP option to set user name and password.
+(HTTP) Enables HTTP Digest authentication. This is an authentication scheme
+that prevents the password from being sent over the wire in clear text. Use
+this in combination with the normal \fI-u, --user\fP option to set user name
+and password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for
+related options.
 
 If this option is used several times, only the first one is used.
-
-See also \fI-u, --user\fP and \fI--proxy-digest\fP and \fI--anyauth\fP. This option overrides \fI--basic\fP and \fI--ntlm\fP and \fI--negotiate\fP.
 .IP "--disable-eprt"
-(FTP) Tell curl to disable the use of the EPRT and LPRT commands when doing active
-FTP transfers. Curl will normally always first attempt to use EPRT, then LPRT
-before using PORT, but with this option, it will use PORT right away. EPRT and
-LPRT are extensions to the original FTP protocol, and may not work on all
-servers, but they enable more functionality in a better way than the
-traditional PORT command.
+(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.
 
---eprt can be used to explicitly enable EPRT again and --no-eprt is an alias
-for \fI--disable-eprt\fP.
+\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 accessed using IPv6, this option will have no effect as EPRT
-is necessary then.
+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.
+passive mode you need to not use \fI-P, --ftp-port\fP or force it with
+\fI--ftp-pasv\fP.
 .IP "--disable-epsv"
-(FTP) (FTP) Tell curl to disable the use of the EPSV command when doing passive FTP
+(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.
 
---epsv can be used to explicitly enable EPSV again and --no-epsv is an alias
-for \fI--disable-epsv\fP.
+\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 "-q, --disable"
-If used as the first parameter on the command line, the \fIcurlrc\fP config
-file will not be read and used. See the \fI-K, --config\fP for details on the default
-config file search path.
 .IP "--dns-interface <interface>"
-(DNS) Tell curl to send outgoing DNS requests through <interface>. This option is a
-counterpart to \fI--interface\fP (which does not affect DNS). The supplied string
-must be an interface name (not an address).
-
-See also \fI--dns-ipv4-addr\fP and \fI--dns-ipv6-addr\fP. \fI--dns-interface\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "--dns-ipv4-addr <address>"
-(DNS) Tell curl to bind to <ip-address> when making IPv4 DNS requests, so that
+Tell curl to send outgoing DNS requests through <interface>. This option
+is a counterpart to \fI--interface\fP (which does not affect DNS). The
+supplied string must be an interface name (not an address).
+
+This option requires that libcurl was built with a resolver backend that
+supports this operation. The c-ares backend is the only such one. (Added in
+7.33.0)
+.IP "--dns-ipv4-addr <ip-address>"
+Tell curl to bind to <ip-address> when making IPv4 DNS requests, so that
 the DNS requests originate from this address. The argument should be a
 single IPv4 address.
 
-See also \fI--dns-interface\fP and \fI--dns-ipv6-addr\fP. \fI--dns-ipv4-addr\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "--dns-ipv6-addr <address>"
-(DNS) Tell curl to bind to <ip-address> when making IPv6 DNS requests, so that
+This option requires that libcurl was built with a resolver backend that
+supports this operation. The c-ares backend is the only such one.  (Added in
+7.33.0)
+.IP "--dns-ipv6-addr <ip-address>"
+Tell curl to bind to <ip-address> when making IPv6 DNS requests, so that
 the DNS requests originate from this address. The argument should be a
 single IPv6 address.
 
-See also \fI--dns-interface\fP and \fI--dns-ipv4-addr\fP. \fI--dns-ipv6-addr\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "--dns-servers <addresses>"
+This option requires that libcurl was built with a resolver backend that
+supports this operation. The c-ares backend is the only such one.  (Added in
+7.33.0)
+.IP "--dns-servers <ip-address,ip-address>"
 Set the list of DNS servers to be used instead of the system default.
 The list of IP addresses should be separated with commas. Port numbers
 may also optionally be given as \fI:<port-number>\fP after each IP
 address.
 
-\fI--dns-servers\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "-D, --dump-header <filename>"
-(HTTP FTP) Write the received protocol headers to the specified file.
-
-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 \fI-b, --cookie\fP option! The \fI-c, --cookie-jar\fP option is a
-better way to store cookies.
-
-When used in FTP, the FTP server response lines are considered being "headers"
-and thus are saved there.
+This option requires that libcurl was built with a resolver backend that
+supports this operation. The c-ares backend is the only such one.  (Added in
+7.33.0)
+.IP "-e, --referer <URL>"
+(HTTP) Sends the "Referrer Page" information to the HTTP server. This can also
+be set with the \fI-H, --header\fP flag of course.  When used with
+\fI-L, --location\fP you can append ";auto" to the --referer URL to make curl
+automatically set the previous URL when it follows a Location: header. The
+\&";auto" string can be used alone, even if you don't set an initial --referer.
 
 If this option is used several times, the last one will be used.
+.IP "-E, --cert <certificate[:password]>"
+(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 client certificate concatenated! See \fI--cert\fP and
+\fI--key\fP to specify them independently.
 
-See also \fI-o, --output\fP.
-.IP "--egd-file <file>"
-(TLS) Specify the path name to the Entropy Gathering Daemon socket. The socket is
-used to seed the random engine for SSL connections.
+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.
+
+(iOS and macOS 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.
 
-See also \fI--random-file\fP.
+If this option is used several times, the last one will be used.
 .IP "--engine <name>"
-(TLS) Select the OpenSSL crypto engine to use for cipher operations. Use \fI--engine\fP
-list to print a list of build-time supported engines. Note that not all (or
-none) of the engines may be available at run-time.
+Select the OpenSSL crypto engine to use for cipher
+operations. Use \fI--engine list\fP to print a list of build-time supported
+engines. Note that not all (or none) of the engines may be available at
+run-time.
 .IP "--environment"
-Sets a range of environment variables, using the names the \fI-w, --write-out\fP option
-supports, to allow easier extraction of useful information after having run
-curl.
-
-\fI--environment\fP requires that the underlying libcurl was built to support RISC OS.
+(RISC OS ONLY) Sets a range of environment variables, using the names the
+\fI-w\fP option supports, to allow easier extraction of useful information
+after having run curl.
+.IP "--egd-file <file>"
+(SSL) Specify the path name to the Entropy Gathering Daemon socket. The socket
+is used to seed the random engine for SSL connections. See also the
+\fI--random-file\fP option.
 .IP "--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.
 
-See also \fI--connect-timeout\fP. Added in 7.47.0.
-.IP "--fail-early"
-Fail and exit on first detected error.
+(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.
 
-When curl is used to do multiple transfers on the command line, it will
-attempt to operate on each given URL, one by one. By default, it will ignore
-errors if there are more URLs given and the last URL's success will determine
-the error code curl returns. So early failures will be "hidden" by subsequent
-successful transfers.
+If this option is used several times, the last one will be used.
+.IP "--cacert <CA certificate>"
+(SSL) Tells curl to use the specified certificate file to verify the peer. The
+file may contain multiple CA certificates. The certificate(s) must be in PEM
+format. Normally curl is built to use a default file for this, so this option
+is typically used to alter that default file.
 
-Using this option, curl will instead return an error on the first transfers
-that fails, independent on the amount of more URLs that are given on the
-command line. This way, no transfer failures go undetected by scripts and
-similar.
+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.
 
-This option will apply for all given URLs even if you use \fI-:, --next\fP.
+The windows version of curl will automatically look for a CA certs file named
+\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
+Current Working Directory, or in any folder along your PATH.
 
-Added in 7.52.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 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.
+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.
 
-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).
+(iOS and macOS only) If curl is built against Secure Transport, then this
+option is supported for backward compatibility with other SSL engines, but it
+should not be set. If the option is not set, then curl will use the
+certificates in the system and user Keychain to verify the peer, which is the
+preferred method of verifying the peer's certificate chain.
+
+If this option is used several times, the last one will be used.
+.IP "--capath <CA certificate directory>"
+(SSL) Tells curl to use the specified certificate directory to verify the
+peer. 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 \fI--capath\fP can allow
+OpenSSL-powered curl to make SSL-connections much more efficiently than using
+\fI--cacert\fP if the \fI--cacert\fP file contains many CA certificates.
+
+If this option is 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 (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.
+
+PEM/DER support:
+  7.39.0: OpenSSL, GnuTLS and GSKit
+  7.43.0: NSS and wolfSSL/CyaSSL
+  7.47.0: mbedtls
+  7.49.0: PolarSSL
+sha256 support:
+  7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL.
+  7.47.0: mbedtls
+  7.49.0: PolarSSL
+Other SSL backends not supported.
+
+If this option is used several times, the last one will be used.
+.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"
-(TLS) 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
+
+(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
+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.
 
-Added in 7.42.0.
-.IP "--form-string <name=string>"
-(HTTP) Similar to \fI-F, --form\fP except that the value string for the named parameter is used
-literally. Leading \&'@' and \&'<' characters, and the \&';type=' string in
-the value have no special meaning. Use this in preference to \fI-F, --form\fP if
-there's any possibility that the string value may accidentally trigger the
-\&'@' or \&'<' features of \fI-F, --form\fP.
-
-See also \fI-F, --form\fP.
+This method is not fail-safe and there are occasions where non-successful
+response codes will slip through, especially when authentication is involved
+(response codes 401 and 407).
 .IP "-F, --form <name=content>"
-(HTTP) This lets curl emulate a filled-in form in which a user has pressed the submit
-button. This causes curl to POST data using the Content-Type
+(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 RFC 2388. 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
@@ -667,7 +653,7 @@ get the contents for that text field from a file.
 Example: to send an image to a server, where \&'profile' is the name of the
 form-field to which portrait.jpg will be the input:
 
- curl -F profile=@portrait.jpg https://example.com/upload.cgi
+\fBcurl\fP -F profile=@portrait.jpg https://example.com/upload.cgi
 
 To read content from stdin instead of a file, use - as the filename. This goes
 for both @ and < constructs. Unfortunately it does not support reading the
@@ -677,24 +663,24 @@ transfer starts.
 You can also tell curl what Content-Type to use by using 'type=', in a manner
 similar to:
 
- curl -F "web=@index.html;type=text/html" example.com
+\fBcurl\fP -F "web=@index.html;type=text/html" example.com
 
 or
 
- curl -F "name=daniel;type=text/foo" example.com
+\fBcurl\fP -F "name=daniel;type=text/foo" example.com
 
 You can also explicitly change the name field of a file upload part by setting
 filename=, like this:
 
- curl -F "file=@localfile;filename=nameinpost" example.com
+\fBcurl\fP -F "file=@localfile;filename=nameinpost" example.com
 
 If filename/path contains ',' or ';', it must be quoted by double-quotes like:
 
- curl -F "file=@\\"localfile\\";filename=\\"nameinpost\\"" example.com
+\fBcurl\fP -F "file=@\\"localfile\\";filename=\\"nameinpost\\"" example.com
 
 or
 
- curl -F 'file=@"localfile";filename="nameinpost"' example.com
+\fBcurl\fP -F 'file=@"localfile";filename="nameinpost"' example.com
 
 Note that if a filename/path is quoted by double-quotes, any double-quote
 or backslash within the filename must be escaped by backslash.
@@ -702,29 +688,23 @@ or backslash within the filename must be escaped by backslash.
 See further examples and details in the MANUAL.
 
 This option can be used multiple times.
-
-This option overrides \fI-d, --data\fP and \fI-I, --head\fP and \fI--upload\fP.
-.IP "--ftp-account <data>"
-(FTP) When an FTP server asks for "account data" after user name and password has
-been provided, this data is sent off using the ACCT command.
+.IP "--ftp-account [data]"
+(FTP) When an FTP server asks for "account data" after user name and password
+has been provided, this data is sent off using the ACCT command. (Added in
+7.13.0)
 
 If this option is used several times, the last one will be used.
-
-Added in 7.13.0.
 .IP "--ftp-alternative-to-user <command>"
-(FTP) If authenticating with the USER and PASS commands fails, send this command.
-When connecting to Tumbleweed's Secure Transport server over FTPS using a
-client certificate, using "SITE AUTH" will tell the server to retrieve the
-username from the certificate.
-
-Added in 7.15.5.
+(FTP) If authenticating with the USER and PASS commands fails, send this
+command.  When connecting to Tumbleweed's Secure Transport server over FTPS
+using a client certificate, using "SITE AUTH" will tell the server to retrieve
+the username from the certificate. (Added in 7.15.5)
 .IP "--ftp-create-dirs"
-(FTP SFTP) When an FTP or SFTP URL/operation uses a path that doesn't currently exist on
-the server, the standard behavior of curl is to fail. Using this option, curl
-will instead attempt to create missing directories.
-
-See also \fI--create-dirs\fP.
-.IP "--ftp-method <method>"
+(FTP/SFTP) When an FTP or SFTP URL/operation uses a path that doesn't
+currently exist on the server, the standard behavior of curl is to
+fail. Using this option, curl will instead attempt to create missing
+directories.
+.IP "--ftp-method [method]"
 (FTP) Control what method curl should use to reach a file on an FTP(S)
 server. The method argument should be one of the following alternatives:
 .RS
@@ -740,12 +720,12 @@ curl does one CWD with the full target directory and then operates on the file
 \&"normally" (like in the multicwd case). This is somewhat more standards
 compliant than 'nocwd' but without the full penalty of 'multicwd'.
 .RE
-
-Added in 7.15.1.
+.IP
+(Added in 7.15.1)
 .IP "--ftp-pasv"
 (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 \fI-P, --ftp-port\fP
-option.
+behavior, but using this option can be used to override a previous
+\fI-P/-ftp-port\fP option. (Added in 7.11.0)
 
 If this option is used several times, only the first one is used. Undoing an
 enforced passive really isn't doable but you must then instead enforce the
@@ -753,104 +733,75 @@ correct \fI-P, --ftp-port\fP again.
 
 Passive mode means that curl will try the EPSV command first and then PASV,
 unless \fI--disable-epsv\fP is used.
-
-See also \fI--disable-epsv\fP. Added in 7.11.0.
-.IP "-P, --ftp-port <address>"
-(FTP) Reverses the default initiator/listener roles when connecting with FTP. This
-option makes curl use active mode. curl then tells the server to connect back
-to the client's specified address and port, while passive mode asks the server
-to setup an IP address and port for it to connect to. <address> should be one
-of:
-.RS
-.IP interface
-i.e "eth0" to specify which interface's IP address you want to use (Unix only)
-.IP "IP address"
-i.e "192.168.10.1" to specify the exact IP address
-.IP "host name"
-i.e "my.host.domain" to specify the machine
-.IP "-"
-make curl pick the same IP address that is already used for the control
-connection
-.RE
-
-If this option is used several times, the last one will be used. Disable the
-use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command
-instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.
-
-Since 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.
-
-See also \fI--ftp-pasv\fP and \fI--disable-eprt\fP.
-.IP "--ftp-pret"
-(FTP) Tell curl to send a PRET command before PASV (and EPSV). Certain FTP servers,
-mainly drftpd, require this non-standard command for directory listings as
-well as up and downloads in PASV mode.
-
-Added in 7.20.0.
 .IP "--ftp-skip-pasv-ip"
 (FTP) Tell curl to not use the IP address the server suggests in its response
 to curl's PASV command when curl connects the data connection. Instead curl
 will re-use the same IP address it already uses for the control
-connection.
+connection. (Added in 7.14.2)
 
 This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
-
-See also \fI--ftp-pasv\fP. Added in 7.14.2.
-.IP "--ftp-ssl-ccc-mode <active/passive>"
-(FTP) Sets the CCC mode. The passive mode will not initiate the shutdown, but
-instead wait for the server to do it, and will not reply to the shutdown from
-the server. The active mode initiates the shutdown and waits for a reply from
-the server.
-
-See also \fI--ftp-ssl-ccc\fP. Added in 7.16.2.
+.IP "--ftp-pret"
+(FTP) Tell curl to send a PRET command before PASV (and EPSV). Certain
+FTP servers, mainly drftpd, require this non-standard command for
+directory listings as well as up and downloads in PASV mode.
+(Added in 7.20.x)
 .IP "--ftp-ssl-ccc"
-(FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer after
-authenticating. The rest of the control channel communication will be
-unencrypted. This allows NAT routers to follow the FTP transaction. The
-default mode is passive.
-
-See also \fI--ssl\fP and \fI--ftp-ssl-ccc-mode\fP. Added in 7.16.1.
+(FTP) Use CCC (Clear Command Channel)
+Shuts down the SSL/TLS layer after authenticating. The rest of the
+control channel communication will be unencrypted. This allows
+NAT routers to follow the FTP transaction. The default mode is
+passive. See \fI--ftp-ssl-ccc-mode\fP for other modes.
+(Added in 7.16.1)
+.IP "--ftp-ssl-ccc-mode [active/passive]"
+(FTP) Use CCC (Clear Command Channel)
+Sets the CCC mode. The passive mode will not initiate the shutdown, but
+instead wait for the server to do it, and will not reply to the
+shutdown from the server. The active mode initiates the shutdown and
+waits for a reply from the server.
+(Added in 7.16.2)
 .IP "--ftp-ssl-control"
 (FTP) Require SSL/TLS for the FTP login, clear for transfer.  Allows secure
 authentication, but non-encrypted data transfers for efficiency.  Fails the
-transfer if the server doesn't support SSL/TLS.
-
-Added in 7.16.0.
+transfer if the server doesn't support SSL/TLS.  (Added in 7.16.0)
+that can still be used but will be removed in a future version.
+.IP "--ftp-ssl"
+(FTP) This deprecated option is now known as \fI--ssl\fP.
+.IP "--ftp-ssl-reqd"
+(FTP) This deprecated option is now known as \fI--ssl-reqd\fP.
+.IP "--form-string <name=string>"
+(HTTP) Similar to \fI--form\fP except that the value string for the named
+parameter is used literally. Leading \&'@' and \&'<' characters, and the
+\&';type=' string in the value have no special meaning. Use this in preference
+to \fI--form\fP if there's any possibility that the string value may
+accidentally trigger the \&'@' or \&'<' features of \fI--form\fP.
+.IP "-g, --globoff"
+This option switches off the "URL globbing parser". When you set this option,
+you can specify URLs that contain the letters {}[] without having them being
+interpreted by curl itself. Note that these letters are not normal legal URL
+contents but they should be encoded according to the URI standard.
 .IP "-G, --get"
-When used, this option will make all data specified with \fI-d, --data\fP, \fI--data-binary\fP
-or \fI--data-urlencode\fP to be used in an HTTP GET request instead of the POST
-request that otherwise would be used. The data will be appended to the URL
-with a '?' separator.
+When used, this option will make all data specified with \fI-d, --data\fP,
+\fI--data-binary\fP or \fI--data-urlencode\fP to be used in an HTTP GET
+request instead of the POST request that otherwise would be used. The data
+will be appended to the URL with a '?' separator.
 
-If used in combination with \fI-I, --head\fP, the POST data will instead be appended to
-the URL with a HEAD request.
+If used in combination with -I, the POST data will instead be appended to the
+URL with a HEAD request.
 
 If this option is used several times, only the first one is used. This is
 because undoing a GET doesn't make sense, but you should then instead enforce
 the alternative method you prefer.
-.IP "-g, --globoff"
-This option switches off the "URL globbing parser". When you set this option,
-you can specify URLs that contain the letters {}[] without having them being
-interpreted by curl itself. Note that these letters are not normal legal URL
-contents but they should be encoded according to the URI standard.
-.IP "-I, --head"
-(HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the command HEAD which this uses
-to get nothing but the header of a document. When used on an FTP or FILE file,
-curl displays the file size and last modification time only.
 .IP "-H, --header <header>"
-(HTTP) 
-Extra header to include in the request when sending HTTP to a server. You may
-specify any number of extra headers. Note that if you should add a custom
-header that has the same name as one of the internal ones curl would use, your
-externally set header will be used instead of the internal one. This allows
-you to make even trickier stuff than curl would normally do. You should not
-replace internally set headers without knowing perfectly well what you're
-doing. Remove an internal header by giving a replacement without content on
-the right side of the colon, as in: -H \&"Host:". If you send the custom
-header with no-value then its header must be terminated with a semicolon, such
-as \-H \&"X-Custom-Header;" to send "X-Custom-Header:".
+(HTTP) Extra header to include in the request when sending HTTP to a
+server. You may specify any number of extra headers. Note that if you should
+add a custom header that has the same name as one of the internal ones curl
+would use, your externally set header will be used instead of the internal
+one. This allows you to make even trickier stuff than curl would normally
+do. You should not replace internally set headers without knowing perfectly
+well what you're doing. Remove an internal header by giving a replacement
+without content on the right side of the colon, as in: -H \&"Host:". If you
+send the custom header with no-value then its header must be terminated with a
+semicolon, such as \-H \&"X-Custom-Header;" to send "X-Custom-Header:".
 
 curl will make sure that each header you add/replace is sent with the proper
 end-of-line marker, you should thus \fBnot\fP add that as a part of the header
@@ -859,151 +810,167 @@ for you.
 
 See also the \fI-A, --user-agent\fP and \fI-e, --referer\fP options.
 
-Starting in 7.37.0, you need \fI--proxy-header\fP to send custom headers intended
-for a proxy.
+Starting in 7.37.0, you need \fI--proxy-header\fP to send custom headers
+intended for a proxy.
 
 Example:
 
- curl -H "X-First-Name: Joe" http://example.com/
+\&# curl -H "X-First-Name: Joe" http://example.com/
 
 \fBWARNING\fP: headers set with this option will be set in all requests - even
-after redirects are followed, like when told with \fI-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.
+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 "-h, --help"
-Usage help. This lists all current command line options with a short
-description.
 .IP "--hostpubmd5 <md5>"
-(SFTP SCP) Pass a string containing 32 hexadecimal digits. The string should
+(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 "-0, --http1.0"
-(HTTP) Tells curl to use HTTP version 1.0 instead of using its internally preferred
-HTTP version.
-
-This option overrides \fI--http1.1\fP and \fI--http2\fP.
-.IP "--http1.1"
-(HTTP) Tells curl to use HTTP version 1.1.
-
-This option overrides \fI-0, --http1.0\fP and \fI--http2\fP. Added in 7.33.0.
-.IP "--http2-prior-knowledge"
-(HTTP) Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1
-Upgrade. It requires prior knowledge that the server supports HTTP/2 straight
-away. HTTPS requests will still do HTTP/2 the standard way with negotiated
-protocol version in the TLS handshake.
-
-\fI--http2-prior-knowledge\fP requires that the underlying libcurl was built to support HTTP/2. This option overrides \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2\fP. Added in 7.49.0.
-.IP "--http2"
-(HTTP) Tells curl to use HTTP version 2.
-
-See also \fI--no-alpn\fP. \fI--http2\fP requires that the underlying libcurl was built to support HTTP/2. This option overrides \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2-prior-knowledge\fP. Added in 7.33.0.
+the connection with the host unless the md5sums match. (Added in 7.17.1)
 .IP "--ignore-content-length"
-(FTP HTTP) For HTTP, Ignore the Content-Length header. This is particularly useful for
+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"
-Include the HTTP-header in the output. The HTTP-header includes things like
-server-name, date of the document, HTTP-version and more...
-
-See also \fI-v, --verbose\fP.
-.IP "-k, --insecure"
-(TLS) This option explicitly allows curl to perform "insecure" SSL connections and
-transfers. All SSL connections are attempted to be made secure by using the CA
-certificate bundle installed by default. This makes all connections considered
-\&"insecure" fail unless \fI-k, --insecure\fP is used.
-
-See this online resource for further details:
- https://curl.haxx.se/docs/sslcerts.html
+(HTTP) Include the HTTP-header in the output. The HTTP-header includes things
+like server-name, date of the document, HTTP-version and more...
+.IP "-I, --head"
+(HTTP/FTP/FILE)
+Fetch the HTTP-header only! HTTP-servers feature the command HEAD
+which this uses to get nothing but the header of a document. When used
+on an FTP or FILE file, curl displays the file size and last modification
+time only.
 .IP "--interface <name>"
-
 Perform an operation using a specified interface. You can enter interface
 name, IP address or host name. An example could look like:
 
  curl --interface eth0:1 https://www.example.com/
 
 If this option is used several times, the last one will be used.
+.IP "-j, --junk-session-cookies"
+(HTTP) When curl is told to read cookies from a given file, this option will
+make it discard all "session cookies". This will basically have the same effect
+as if a new session is started. Typical browsers always discard session
+cookies when they're closed down.
+.IP "-J, --remote-header-name"
+(HTTP) This option tells the \fI-O, --remote-name\fP option to use the
+server-specified Content-Disposition filename instead of extracting a filename
+from the URL.
 
-See also \fI--dns-interface\fP.
-.IP "-4, --ipv4"
-This option tells curl to resolve names to IPv4 addresses only, and not for
-example try IPv6.
+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.
 
-See also \fI--http1.1\fP and \fI--http2\fP. This option overrides \fI-6, --ipv6\fP.
-.IP "-6, --ipv6"
-This option tells curl to resolve names to IPv6 addresses only, and not for
-example try IPv4.
+There's no attempt to decode %-sequences (yet) in the provided file name, so
+this option may provide you with rather unexpected file names.
 
-See also \fI--http1.1\fP and \fI--http2\fP. This option overrides \fI-6, --ipv6\fP.
-.IP "-j, --junk-session-cookies"
-(HTTP) When curl is told to read cookies from a given file, this option will make it
-discard all "session cookies". This will basically have the same effect as if
-a new session is started. Typical browsers always discard session cookies when
-they're closed down.
+\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
+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:
+\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
+used as if they were written on the actual command line.
+
+Options and their parameters must be specified on the same config file line,
+separated by whitespace, colon, 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.
+
+If the parameter is to contain whitespace, the parameter must be enclosed
+within quotes. Within double quotes, the following escape sequences are
+available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash preceding any other
+letter is ignored. If the first column of a config line is a '#' character,
+the rest of the line will be treated as a comment. Only write one option per
+physical line in the config file.
+
+Specify the filename to -K, --config as '-' to make curl read the file from
+stdin.
+
+Note that to be able to specify a URL in the config file, you need to specify
+it using the \fI--url\fP option, and not by simply writing the URL on its own
+line. So, it could look similar to this:
+
+url = "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
+the following places in this order:
+
+1) curl tries to find the "home dir": It first checks for the CURL_HOME and
+then the HOME environment variables. Failing that, it uses getpwuid() on
+Unix-like systems (which returns the home dir given the current user in your
+system). On Windows, it then checks for the APPDATA variable, or as a last
+resort the '%USERPROFILE%\\Application Data'.
+
+2) On windows, if there is no _curlrc file in the home dir, it checks for one
+in the same dir the curl executable is placed. On Unix-like systems, it will
+simply try to load .curlrc from the determined home dir.
+
+.nf
+# --- Example file ---
+# this is a comment
+url = "example.com"
+output = "curlhere.html"
+user-agent = "superagent/1.0"
+
+# and fetch another URL too
+url = "example.com/docs/manpage.html"
+-O
+referer = "http://nowhereatall.example.com/"
+# --- End of example file ---
+.fi
 
-See also \fI-b, --cookie\fP and \fI-c, --cookie-jar\fP.
+This option can be used multiple times to load multiple config files.
 .IP "--keepalive-time <seconds>"
 This option sets the time a connection needs to remain idle before sending
 keepalive probes and the time between individual keepalive probes. It is
 currently effective on operating systems offering the TCP_KEEPIDLE and
 TCP_KEEPINTVL socket options (meaning Linux, recent AIX, HP-UX and more). This
-option has no effect if \fI--no-keepalive\fP is used.
+option has no effect if \fI--no-keepalive\fP is used. (Added in 7.18.0)
 
 If this option is used several times, the last one will be used. If
 unspecified, the option defaults to 60 seconds.
-
-Added in 7.18.0.
-.IP "--key-type <type>"
-(TLS) Private key file type. Specify which type your \fI--key\fP provided private key
-is. DER, PEM, and ENG are supported. If not specified, PEM is assumed.
-
-If this option is used several times, the last one will be used.
 .IP "--key <key>"
-(TLS SSH) Private key file name. Allows you to provide your private key in this separate
-file. For SSH, if not specified, curl tries the following candidates in order:
-'~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'.
+(SSL/SSH) Private key file name. Allows you to provide your private key in this
+separate file. For SSH, if not specified, curl tries the following candidates
+in order: '~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'.
 
 If this option is used several times, the last one will be used.
-.IP "--krb <level>"
-(FTP) Enable Kerberos authentication and use. The level must be entered and should
-be one of 'clear', 'safe', 'confidential', or 'private'. Should you use a
-level that is not one of these, 'private' will instead be used.
+.IP "--key-type <type>"
+(SSL) Private key file type. Specify which type your \fI--key\fP provided
+private key is. DER, PEM, and ENG are supported. If not specified, PEM is
+assumed.
 
 If this option is used several times, the last one will be used.
+.IP "--krb <level>"
+(FTP) Enable Kerberos authentication and use. The level must be entered and
+should be one of 'clear', 'safe', 'confidential', or 'private'. Should you use
+a level that is not one of these, 'private' will instead be used.
 
-\fI--krb\fP requires that the underlying libcurl was built to support Kerberos.
-.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
-of what your command-line operation does!
-
-If this option is used several times, the last given file name will be
-used.
-
-Added in 7.16.1.
-.IP "--limit-rate <speed>"
-Specify the maximum transfer rate you want curl to use - for both downloads
-and uploads. This feature is useful if you have a limited pipe and you'd like
-your transfer not to use your entire bandwidth. To make it slower than it
-otherwise would be.
-
-The given speed is measured in bytes/second, unless a suffix is appended.
-Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it
-megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
-
-If you also use the \fI-Y, --speed-limit\fP option, that option will take precedence and
-might cripple the rate-limiting slightly, to help keeping the speed-limit
-logic working.
+This option requires a library built with kerberos4 support. This is not
+very common. Use \fI-V, --version\fP to see if your curl supports it.
 
 If this option is used several times, the last one will be used.
+.IP "--krb4 <level>"
+(FTP) This is the former name for \fI--krb\fP. Do not use.
 .IP "-l, --list-only"
-(FTP POP3) (FTP)
+(FTP)
 When listing an FTP directory, this switch forces a name-only view. This is
 especially useful if the user wants to machine-parse the contents of an FTP
 directory since the normal directory view doesn't use a standard look or
@@ -1018,34 +985,18 @@ When retrieving a specific email from POP3, this switch forces a LIST command
 to be performed instead of RETR. This is particularly useful if the user wants
 to see if a specific message id exists on the server and what size it is.
 
-Note: When combined with \fI-X, --request\fP, this option can be used to send an UIDL
-command instead, so the user may use the email's unique identifier rather than
-it's message id to make the request.
-
-Added in 7.21.5.
-.IP "--local-port <num/range>"
-Set a preferred single number or range (FROM-TO) of local port numbers to use
-for the connection(s).  Note that port numbers by nature are a scarce resource
-that will be busy at times so setting this range to something too narrow might
-cause unnecessary connection setup failures.
-
-Added in 7.15.2.
-.IP "--location-trusted"
-(HTTP) Like \fI-L, --location\fP, but will allow sending the name + password to all hosts that
-the site may redirect to. This may or may not introduce a security breach if
-the site redirects you to a site to which you'll send your authentication info
-(which is plaintext in the case of HTTP Basic authentication).
-
-See also \fI-u, --user\fP.
+Note: When combined with \fI-X, --request <command>\fP, this option can be used
+to send an UIDL command instead, so the user may use the email's unique
+identifier rather than it's message id to make the request. (Added in 7.21.5)
 .IP "-L, --location"
-(HTTP) If the server reports that the requested page has moved to a different
-location (indicated with a Location: header and a 3XX response code), this
-option will make curl redo the request on the new place. If used together with
-\fI-i, --include\fP or \fI-I, --head\fP, headers from all requested pages will be shown. When
-authentication is used, curl only sends its credentials to the initial
-host. If a redirect takes curl to a different host, it won't be able to
-intercept the user+password. See also \fI--location-trusted\fP on how to change
-this. You can limit the amount of redirects to follow by using the
+(HTTP/HTTPS) If the server reports that the requested page has moved to a
+different location (indicated with a Location: header and a 3XX response code),
+this option will make curl redo the request on the new place. If used together
+with \fI-i, --include\fP or \fI-I, --head\fP, headers from all requested pages
+will be shown. When authentication is used, curl only sends its credentials to
+the initial host. If a redirect takes curl to a different host, it won't be
+able to intercept the user+password. See also \fI--location-trusted\fP on how
+to change this. You can limit the amount of redirects to follow by using the
 \fI--max-redirs\fP option.
 
 When curl follows a redirect and the request is not a plain GET (for example
@@ -1054,35 +1005,84 @@ 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.
 
 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.
+response by using the dedicated options for that: \fI--post301\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
+of what your command-line operation does!
+
+If this option is used several times, the last given file name will be
+used. (Added in 7.16.1)
+.IP "--limit-rate <speed>"
+Specify the maximum transfer rate you want curl to use - for both downloads
+and uploads. This feature is useful if you have a limited pipe and you'd like
+your transfer not to use your entire bandwidth. To make it slower than it
+otherwise would be.
+
+The given speed is measured in bytes/second, unless a suffix is appended.
+Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it
+megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
+
+If you also use the \fI-Y, --speed-limit\fP option, that option will take
+precedence and might cripple the rate-limiting slightly, to help keeping the
+speed-limit logic working.
+
+If this option is used several times, the last one will be used.
+.IP "--local-port <num>[-num]"
+Set a preferred number or range of local port numbers to use for the
+connection(s).  Note that port numbers by nature are a scarce resource that
+will be busy at times so setting this range to something too narrow might
+cause unnecessary connection setup failures. (Added in 7.15.2)
+.IP "--location-trusted"
+(HTTP/HTTPS) Like \fI-L, --location\fP, but will allow sending the name +
+password to all hosts that the site may redirect to. This may or may not
+introduce a security breach if the site redirects you to a site to which
+you'll send your authentication info (which is plaintext in the case of HTTP
+Basic authentication).
+.IP "-m, --max-time <seconds>"
+Maximum time in seconds that you allow the whole operation to take.  This is
+useful for preventing your batch jobs from hanging for hours due to slow
+networks or links going down.  Since 7.32.0, this option accepts decimal
+values, but the actual timeout will decrease in accuracy as the specified
+timeout increases in decimal precision.  See also the \fI--connect-timeout\fP
+option.
+
+If this option is used several times, the last one will be used.
 .IP "--login-options <options>"
-(IMAP POP3 SMTP) Specify the login options to use during server authentication.
+Specify the login options to use during server authentication.
 
 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
-RFC 2384, RFC 5092 and IETF draft draft-earhart-url-smtp-00.txt
+RFC 2384, RFC 5092 and IETF draft draft-earhart-url-smtp-00.txt (Added in
+7.34.0).
 
 If this option is used several times, the last one will be used.
-
-Added in 7.34.0.
 .IP "--mail-auth <address>"
-(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.
+(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.
 
-See also \fI--mail-rcpt\fP and \fI--mail-from\fP. Added in 7.25.0.
+(Added in 7.25.0)
 .IP "--mail-from <address>"
 (SMTP) Specify a single address that the given mail should get sent from.
 
-See also \fI--mail-rcpt\fP and \fI--mail-auth\fP. Added in 7.20.0.
-.IP "--mail-rcpt <address>"
-(SMTP) Specify a single address, user name or mailing list name. Repeat this
-option several times to send to multiple recipients.
+(Added in 7.20.0)
+.IP "--max-filesize <bytes>"
+Specify the maximum size (in bytes) of a file to download. If the file
+requested is larger than this value, the transfer will not start and curl will
+return with exit code 63.
+
+\fBNOTE:\fP The file size is not always known prior to download, and for such
+files this option has no effect even if the file transfer ends up being larger
+than this given limit. This concerns both FTP and HTTP transfers.
+.IP "--mail-rcpt <address>"
+(SMTP) Specify a single address, user name or mailing list name. Repeat this
+option several times to send to multiple recipients.
 
 When performing a mail transfer, the recipient should specify a valid email
-address to send the mail to.
+address to send the mail to. (Added in 7.20.0)
 
 When performing an address verification (VRFY command), the recipient should be
 specified as the user name or user name and domain (as per Section 3.5 of
@@ -1091,37 +1091,13 @@ RFC5321). (Added in 7.34.0)
 When performing a mailing list expand (EXPN command), the recipient should be
 specified using the mailing list name, such as "Friends" or "London-Office".
 (Added in 7.34.0)
-
-Added in 7.20.0.
-.IP "-M, --manual"
-Manual. Display the huge help text.
-.IP "--max-filesize <bytes>"
-Specify the maximum size (in bytes) of a file to download. If the file
-requested is larger than this value, the transfer will not start and curl will
-return with exit code 63.
-
-\fBNOTE:\fP The file size is not always known prior to download, and for such
-files this option has no effect even if the file transfer ends up being larger
-than this given limit. This concerns both FTP and HTTP transfers.
-
-See also \fI--limit-rate\fP.
 .IP "--max-redirs <num>"
-(HTTP) Set maximum number of redirection-followings allowed. When \fI-L, --location\fP is used,
-is 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
-unlimited.
-
-If this option is used several times, the last one will be used.
-.IP "-m, --max-time <time>"
-Maximum time in seconds that you allow the whole operation to take.  This is
-useful for preventing your batch jobs from hanging for hours due to slow
-networks or links going down.  Since 7.32.0, this option accepts decimal
-values, but the actual timeout will decrease in accuracy as the specified
-timeout increases in decimal precision.
+Set maximum number of redirection-followings allowed. If \fI-L, --location\fP
+is used, this option can be used to prevent curl from following redirections
+\&"in absurdum". By default, the limit is set to 50 redirections. Set this
+option to -1 to make it limitless.
 
 If this option is used several times, the last one will be used.
-
-See also \fI--connect-timeout\fP.
 .IP "--metalink"
 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
@@ -1132,48 +1108,21 @@ not stored in the local file system.
 
 Example to use a remote Metalink file:
 
- curl --metalink http://www.example.com/example.metalink
-
-To use a Metalink file in the local file system, use FILE protocol (file://):
-
- curl --metalink file://example.metalink
+\fBcurl\fP --metalink http://www.example.com/example.metalink
 
-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 \fI--metalink\fP and
-\fI-i, --include\fP are used together, --include 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.
+To use a Metalink file in the local file system, use FILE protocol
+(file://):
 
+\fBcurl\fP --metalink file://example.metalink
 
-\fI--metalink\fP requires that the underlying libcurl was built to support metalink. Added in 7.27.0.
-.IP "--negotiate"
-(HTTP) Enables Negotiate (SPNEGO) authentication.
-
-This option requires a library built with GSS-API or SSPI support. Use
-\fI-V, --version\fP to see if your curl supports GSS-API/SSPI or SPNEGO.
-
-When using this option, you must also provide a fake \fI-u, --user\fP option to activate
-the authentication code properly. Sending a '-u :' is enough as the user name
-and password from the \fI-u, --user\fP option aren't actually used.
-
-If this option is used several times, only the first one is used.
-
-See also \fI--basic\fP and \fI--ntlm\fP and \fI--anyauth\fP and \fI--proxy-negotiate\fP.
-.IP "--netrc-file <filemame>"
-This option is similar to \fI-n, --netrc\fP, except that you provide the path (absolute
-or relative) to the netrc file that Curl should use.  You can only specify one
-netrc file per invocation. If several \fI--netrc-file\fP options are provided,
-the last one will be used.
-
-It will abide by \fI--netrc-optional\fP if specified.
+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
+\fI--metalink\fP and \fI--include\fP are used together, \fI--include\fP 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.
 
-This option overrides \fI-n, --netrc\fP. Added in 7.21.5.
-.IP "--netrc-optional"
-Very similar to \fI-n, --netrc\fP, but this option makes the .netrc usage \fBoptional\fP
-and not mandatory as the \fI-n, --netrc\fP option does.
-
-See also \fI--netrc-file\fP. This option overrides \fI-n, --netrc\fP.
+(Added in 7.27.0, if built against the libmetalink library.)
 .IP "-n, --netrc"
 Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) file in the user's
 home directory for login name and password. This is typically used for FTP on
@@ -1188,27 +1137,6 @@ to FTP to the machine host.domain.com with user name \&'myself' and password
 \&'secret' should look similar to:
 
 .B "machine host.domain.com login myself password secret"
-.IP "-:, --next"
-Tells curl to use a separate operation for the following URL and associated
-options. This allows you to send several URL requests, each with their own
-specific options, for example, such as different user names or custom requests
-for each.
-
-\fI-:, --next\fP will reset all local options and only global ones will have their
-values survive over to the operation following the \fI-:, --next\fP instruction. Global
-options include \fI-v, --verbose\fP, \fI--trace\fP, \fI--trace-ascii\fP and \fI--fail-early\fP.
-
-For example, you can do both a GET and a POST in a single command line:
-
- curl www1.example.com --next -d postthis www2.example.com
-
-Added in 7.36.0.
-.IP "--no-alpn"
-(HTTPS) Disable the ALPN TLS extension. ALPN is enabled by default if libcurl was built
-with an SSL library that supports ALPN. ALPN is used by a libcurl that supports
-HTTP/2 to negotiate HTTP/2 support with the server during https sessions.
-
-See also \fI--no-npn\fP and \fI--http2\fP. \fI--no-alpn\fP requires that the underlying libcurl was built to support TLS. Added in 7.36.0.
 .IP "-N, --no-buffer"
 Disables the buffering of the output stream. In normal work situations, curl
 will use a standard buffered output stream that will have the effect that it
@@ -1216,219 +1144,220 @@ will output the data in chunks, not necessarily exactly when the data arrives.
 Using this option will disable that buffering.
 
 Note that this is the negated option name documented. You can thus use
---buffer to enforce the buffering.
+\fI--buffer\fP to enforce the buffering.
+.IP "--netrc-file"
+This option is similar to \fI--netrc\fP, except that you provide the path
+(absolute or relative) to the netrc file that Curl should use.
+You can only specify one netrc file per invocation. If several
+\fI--netrc-file\fP options are provided, only the \fBlast one\fP will be used.
+(Added in 7.21.5)
+
+This option overrides any use of \fI--netrc\fP as they are mutually exclusive.
+It will also abide by \fI--netrc-optional\fP if specified.
+
+.IP "--netrc-optional"
+Very similar to \fI--netrc\fP, but this option makes the .netrc usage
+\fBoptional\fP and not mandatory as the \fI--netrc\fP option does.
+
+.IP "--negotiate"
+(HTTP) Enables Negotiate (SPNEGO) authentication.
+
+If you want to enable Negotiate (SPNEGO) for proxy authentication, then use
+\fI--proxy-negotiate\fP.
+
+This option requires a library built with GSS-API or SSPI support. Use \fI-V,
+--version\fP to see if your curl supports GSS-API/SSPI and SPNEGO.
+
+When using this option, you must also provide a fake \fI-u, --user\fP option to
+activate the authentication code properly. Sending a '-u :' is enough as the
+user name and password from the \fI-u\fP option aren't actually used.
+
+If this option is used several times, only the first one is used.
 .IP "--no-keepalive"
-Disables the use of keepalive messages on the TCP connection. curl otherwis
-enables them by default.
+Disables the use of keepalive messages on the TCP connection, as by default
+curl enables them.
 
 Note that this is the negated option name documented. You can thus use
---keepalive to enforce keepalive.
-.IP "--no-npn"
-(HTTPS) Disable the NPN TLS extension. NPN is enabled by default if libcurl was built
-with an SSL library that supports NPN. NPN is used by a libcurl that supports
-HTTP/2 to negotiate HTTP/2 support with the server during https sessions.
-
-See also \fI--no-alpn\fP and \fI--http2\fP. \fI--no-npn\fP requires that the underlying libcurl was built to support TLS. Added in 7.36.0.
+\fI--keepalive\fP to enforce keepalive.
 .IP "--no-sessionid"
-(TLS) Disable curl's use of SSL session-ID caching.  By default all transfers are
-done using the cache. Note that while nothing should ever get hurt by
+(SSL) Disable curl's use of SSL session-ID caching.  By default all transfers
+are done using the cache. Note that while nothing should ever get hurt by
 attempting to reuse SSL session-IDs, there seem to be broken SSL
 implementations in the wild that may require you to disable this in order for
-you to succeed.
+you to succeed. (Added in 7.16.0)
 
 Note that this is the negated option name documented. You can thus use
---sessionid to enforce session-ID caching.
-
-Added in 7.16.0.
+\fI--sessionid\fP to enforce session-ID caching.
 .IP "--noproxy <no-proxy-list>"
 Comma-separated list of hosts which do not use a proxy, if one is specified.
 The only wildcard is a single * character, which matches all hosts, and
 effectively disables the proxy. Each name in this list is matched as either
 a domain which contains the hostname, or the hostname itself. For example,
 local.com would match local.com, local.com:80, and www.local.com, but not
-www.notlocal.com.
-
-Since 7.53.0, This option overrides the environment variables that disable the
-proxy. If there's an environment variable disabling a proxy, you can set
-noproxy list to \&"" to override it.
-
-Added in 7.19.4.
-.IP "--ntlm-wb"
-(HTTP) Enables NTLM much in the style \fI--ntlm\fP does, but hand over the authentication
-to the separate binary ntlmauth application that is executed when needed.
-
-See also \fI--ntlm\fP and \fI--proxy-ntlm\fP.
+www.notlocal.com.  (Added in 7.19.4).
+.IP "--connect-to <host:port:connect-to-host:connect-to-port>"
+For a request to the given "host:port" pair, connect to
+"connect-to-host:connect-to-port" instead.
+This is suitable to direct the request at a specific server, e.g. at a specific
+cluster node in a cluster of servers.
+This option is only used to establish the network connection. It does NOT
+affect the hostname/port that is used for TLS/SSL (e.g. SNI, certificate
+verification) or for the application protocols.
+"host" and "port" may be the empty string, meaning "any host/port".
+"connect-to-host" and "connect-to-port" may also be the empty string,
+meaning "use the request's original host/port".
+This option can be used many times to add many connect rules.
+(Added in 7.49.0).
 .IP "--ntlm"
-(HTTP) Enables NTLM authentication. The NTLM authentication method was designed by
-Microsoft and is used by IIS web servers. It is a proprietary protocol,
-reverse-engineered by clever people and implemented in curl based on their
-efforts. This kind of behavior should not be endorsed, you should encourage
-everyone who uses NTLM to switch to a public and documented authentication
-method instead, such as Digest.
+(HTTP) Enables NTLM authentication. The NTLM authentication method was
+designed by Microsoft and is used by IIS web servers. It is a proprietary
+protocol, reverse-engineered by clever people and implemented in curl based
+on their efforts. This kind of behavior should not be endorsed, you should
+encourage everyone who uses NTLM to switch to a public and documented
+authentication method instead, such as Digest.
 
 If you want to enable NTLM for your proxy authentication, then use
 \fI--proxy-ntlm\fP.
 
-If this option is used several times, only the first one is used.
-
-See also \fI--proxy-ntlm\fP. \fI--ntlm\fP requires that the underlying libcurl was built to support TLS. This option overrides \fI--basic\fP and \fI--negotiated\fP and \fI--digest\fP and \fI--anyauth\fP.
-.IP "--oauth2-bearer"
-(IMAP POP3 SMTP) Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token
-is used in conjunction with the user name which can be specified as part of
-the \fI--url\fP or \fI-u, --user\fP options.
-
-The Bearer Token and user name are formatted according to RFC 6750.
+This option requires a library built with SSL support. Use
+\fI-V, --version\fP to see if your curl supports NTLM.
 
-If this option is used several times, the last one will be used.
+If this option is used several times, only the first one is used.
+.IP "--ntlm-wb"
+(HTTP) Enables NTLM much in the style \fI--ntlm\fP does, but hand over the
+authentication to the separate binary ntlmauth application that is executed
+when needed.
 .IP "-o, --output <file>"
 Write output to <file> instead of stdout. If you are using {} or [] to fetch
 multiple documents, you can use '#' followed by a number in the <file>
 specifier. That variable will be replaced with the current string for the URL
 being fetched. Like in:
 
- curl http://{one,two}.example.com -o "file_#1.txt"
 curl http://{one,two}.example.com -o "file_#1.txt"
 
 or use several variables like:
 
- curl http://{site,host}.host[1-5].com -o "#1_#2"
-
-You may use this option as many times as the number of URLs you have. For
-example, if you specify two URLs on the same command line, you can use it like
-this:
-
-  curl -o aa example.com -o bb example.net
-
-and the order of the -o options and the URLs doesn't matter, just that the
-first -o is for the first URL and so on, so the above command line can also be
-written as
+  curl http://{site,host}.host[1-5].com -o "#1_#2"
 
-  curl example.com example.net -o aa -o bb
+You may use this option as many times as the number of URLs you have.
 
 See also the \fI--create-dirs\fP option to create the local directories
 dynamically. Specifying the output as '-' (a single dash) will force the
 output to be done to stdout.
+.IP "-O, --remote-name"
+Write output to a local file named like the remote file we get. (Only the file
+part of the remote file is used, the path is cut off.)
 
-See also \fI-O, --remote-name\fP and \fI--remote-name-all\fP and \fI-J, --remote-header-name\fP.
-.IP "--pass <phrase>"
-(SSH TLS) Passphrase for the private key
+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.
 
-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.
+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.
 
-Added in 7.42.0.
-.IP "--pinnedpubkey <hashes>"
-(TLS) 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 \';\'
+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.
 
-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.
+You may use this option as many times as the number of URLs you have.
+.IP "--oauth2-bearer"
+(IMAP, POP3, SMTP)
+Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token
+is used in conjunction with the user name which can be specified as part of the
+\fI--url\fP or \fI-u, --user\fP options.
 
-PEM/DER support:
-  7.39.0: OpenSSL, GnuTLS and GSKit
-  7.43.0: NSS and wolfSSL/CyaSSL
-  7.47.0: mbedtls
-  7.49.0: PolarSSL
-sha256 support:
-  7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL.
-  7.47.0: mbedtls
-  7.49.0: PolarSSL
-Other SSL backends not supported.
+The Bearer Token and user name are formatted according to RFC 6750.
 
 If this option is used several times, the last one will be used.
-.IP "--post301"
-(HTTP) Tells curl to respect RFC 7231/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.
-
-See also \fI--post302\fP and \fI--post303\fP and \fI-L, --location\fP. Added in 7.17.1.
-.IP "--post302"
-(HTTP) Tells curl to respect RFC 7231/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.
+.IP "--proxy-header <header>"
+(HTTP) Extra header to include in the request when sending HTTP to a
+proxy. You may specify any number of extra headers. This is the equivalent
+option to \fI-H, --header\fP but is for proxy communication only like in
+CONNECT requests when you want a separate header sent to the proxy to what is
+sent to the actual remote host.
 
-See also \fI--post301\fP and \fI--post303\fP and \fI-L, --location\fP. Added in 7.19.1.
-.IP "--post303"
-(HTTP) Tells curl to respect RFC 7231/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 \fI-L, --location\fP.
+curl will make sure that each header you add/replace is sent with the proper
+end-of-line marker, you should thus \fBnot\fP add that as a part of the header
+content: do not add newlines or carriage returns, they will only mess things
+up for you.
 
-See also \fI--post302\fP and \fI--post301\fP and \fI-L, --location\fP. Added in 7.26.0.
-.IP "--preproxy [protocol://]host[:port]"
-Use the specified SOCKS proxy before connecting to an HTTP or HTTPS \fI-x, --proxy\fP. In
-such a case curl first connects to the SOCKS proxy and then connects (through
-SOCKS) to the HTTP or HTTPS proxy. Hence pre proxy.
+Headers specified with this option will not be included in requests that curl
+knows will not be sent to a proxy.
 
-The pre proxy string should be specified with a protocol:// prefix to specify
-alternative proxy protocols. Use socks4://, socks4a://, socks5:// or
-socks5h:// to request the specific SOCKS version to be used. No protocol
-specified will make curl default to SOCKS4.
+This option can be used multiple times to add/replace/remove multiple headers.
 
-If the port number is not specified in the proxy string, it is assumed to be
-1080.
+(Added in 7.37.0)
+.IP "-p, --proxytunnel"
+When an HTTP proxy is used (\fI-x, --proxy\fP), this option will cause non-HTTP
+protocols to attempt to tunnel through the proxy instead of merely using it to
+do HTTP-like operations. The tunnel approach is made with the HTTP proxy
+CONNECT request and requires that the proxy allows direct connect to the
+remote port number curl wants to tunnel through to.
+.IP "-P, --ftp-port <address>"
+(FTP) Reverses the default initiator/listener roles when connecting with
+FTP. This switch makes curl use active mode. In practice, curl then tells the
+server to connect back to the client's specified address and port, while
+passive mode asks the server to setup an IP address and port for it to connect
+to. <address> should be one of:
+.RS
+.IP interface
+i.e "eth0" to specify which interface's IP address you want to use (Unix only)
+.IP "IP address"
+i.e "192.168.10.1" to specify the exact IP address
+.IP "host name"
+i.e "my.host.domain" to specify the machine
+.IP "-"
+make curl pick the same IP address that is already used for the control
+connection
+.RE
+.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++.
 
-User and password that might be provided in the proxy string are URL decoded
-by curl. This allows you to pass in special characters such as @ by using %40
-or pass in a colon with %3a.
+Starting in 7.19.5, you can append \&":[start]-[end]\&" to the right of the
+address, to tell curl what TCP port range to use. That means you specify a
+port range, from a lower to a higher number. A single number works as well,
+but do note that it increases the risk of failure since the port may not be
+available.
+.IP "--pass <phrase>"
+(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.52.0.
-.IP "-#, --progress-bar"
-Make curl display transfer progress as a simple progress bar instead of the
-standard, more informational, meter.
-
-This progress bar draws a single line of '#' characters across the screen and
-shows a percentage if the transfer size is known. For transfers without a
-known size, it will instead output one '#' character for every 1024 bytes
-transferred.
-.IP "--proto-default <protocol>"
-Tells curl to use \fIprotocol\fP for any URL missing a scheme name.
-
-Example:
-
- curl --proto-default https ftp.mozilla.org
-
-An unknown or unsupported protocol causes error
-\fICURLE_UNSUPPORTED_PROTOCOL\fP (1).
-
-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 limit what protocols it may use on redirect. Protocols denied by
-\fI--proto\fP are not overridden by this option. See --proto for how protocols are
-represented.
-
-Example, allow only HTTP and HTTPS on redirect:
-
- curl --proto-redir -all,http,https http://example.com
-
-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.
+(Added in 7.42.0)
+.IP "--post301"
+(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 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 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
+a redirection. This option is meaningful only when using \fI-L, --location\fP
+(Added in 7.26.0)
 .IP "--proto <protocols>"
-Tells curl to limit what protocols it may use in the transfer. 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:
+Tells curl to use the listed protocols for its initial retrieval. Protocols
+are evaluated left to right, are comma separated, and are each a protocol
+name or 'all', optionally prefixed by zero or more modifiers. Available
+modifiers are:
 .RS
 .TP 3
 .B +
@@ -1447,16 +1376,16 @@ list.
 For example:
 .RS
 .TP 15
-.B \fI--proto\fP -ftps
+.B --proto -ftps
 uses the default protocols, but disables ftps
 .TP
-.B  \fI--proto\fP -all,https,+http
+.B  --proto -all,https,+http
 only enables http and https
 .TP
-.B \fI--proto\fP =http,https
+.B --proto =http,https
 also only enables http and https
 .RE
-
+.IP
 Unknown protocols produce a warning. This allows scripts to safely rely on
 being able to disable potentially dangerous protocols, without relying upon
 support for that protocol being built into curl to avoid an error.
@@ -1464,174 +1393,76 @@ support for that protocol being built into curl to avoid an error.
 This option can be used multiple times, in which case the effect is the same
 as concatenating the protocols into one instance of the option.
 
-See also \fI--proto-redir\fP and \fI--proto-default\fP. Added in 7.20.2.
-.IP "--proxy-anyauth"
-Tells curl to pick a suitable authentication method when communicating with
-the given HTTP proxy. This might cause an extra request/response round-trip.
+(Added in 7.20.2)
+.IP "--proto-default <protocol>"
+Tells curl to use \fIprotocol\fP for any URL missing a scheme name.
 
-See also \fI-x, --proxy\fP and \fI--proxy-basic\fP and \fI--proxy-digest\fP. Added in 7.13.2.
-.IP "--proxy-basic"
-Tells curl to use HTTP Basic authentication when communicating with the given
-proxy. Use \fI--basic\fP for enabling HTTP Basic with a remote host. Basic is the
-default authentication method curl uses with proxies.
+Example:
+
+.RS
+.IP "--proto-default https ftp.mozilla.org"
+https://ftp.mozilla.org
+.RE
 
-See also \fI-x, --proxy\fP and \fI--proxy-anyauth\fP and \fI--proxy-digest\fP.
-.IP "--proxy-cacert <file>"
-Same as \fI--cacert\fP but used in HTTPS proxy context.
+An unknown or unsupported protocol causes error
+\fICURLE_UNSUPPORTED_PROTOCOL\fP.
+
+This option does not change the default proxy protocol (http).
 
-See also \fI--proxy-capath\fP and \fI--cacert\fP and \fI--capath\fP and \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "--proxy-capath <dir>"
-Same as \fI--capath\fP but used in HTTPS proxy context.
+Without this option curl would make a guess based on the host, see \fI--url\fP
+for details.
 
-See also \fI--proxy-cacert\fP and \fI-x, --proxy\fP and \fI--capath\fP. Added in 7.52.0.
-.IP "--proxy-cert-type <type>"
-Same as \fI--cert-type\fP but used in HTTPS proxy context.
+(Added in 7.45.0)
+.IP "--proto-redir <protocols>"
+Tells curl to use the listed protocols on redirect. See --proto for how
+protocols are represented.
 
-Added in 7.52.0.
-.IP "--proxy-cert <cert[:passwd]>"
-Same as \fI-E, --cert\fP but used in HTTPS proxy context.
+Example:
 
-Added in 7.52.0.
-.IP "--proxy-ciphers <list>"
-Same as \fI--ciphers\fP but used in HTTPS proxy context.
+.RS
+.IP "--proto-redir -all,http,https"
+Allow only HTTP and HTTPS on redirect.
+.RE
 
-Added in 7.52.0.
-.IP "--proxy-crlfile <file>"
-Same as \fI--crlfile\fP but used in HTTPS proxy context.
+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.52.0.
+(Added in 7.20.2)
+.IP "--proxy-anyauth"
+Tells curl to pick a suitable authentication method when communicating with
+the given proxy. This might cause an extra request/response round-trip. (Added
+in 7.13.2)
+.IP "--proxy-basic"
+Tells curl to use HTTP Basic authentication when communicating with the given
+proxy. Use \fI--basic\fP for enabling HTTP Basic with a remote host. Basic is
+the default authentication method curl uses with proxies.
 .IP "--proxy-digest"
 Tells curl to use HTTP Digest authentication when communicating with the given
 proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host.
-
-See also \fI-x, --proxy\fP and \fI--proxy-anyauth\fP and \fI--proxy-basic\fP.
-.IP "--proxy-header <header>"
-(HTTP) Extra header to include in the request when sending HTTP to a proxy. You may
-specify any number of extra headers. This is the equivalent option to \fI-H, --header\fP
-but is for proxy communication only like in CONNECT requests when you want a
-separate header sent to the proxy to what is sent to the actual remote host.
-
-curl will make sure that each header you add/replace is sent with the proper
-end-of-line marker, you should thus \fBnot\fP add that as a part of the header
-content: do not add newlines or carriage returns, they will only mess things
-up for you.
-
-Headers specified with this option will not be included in requests that curl
-knows will not be sent to a proxy.
-
-This option can be used multiple times to add/replace/remove multiple headers.
-
-Added in 7.37.0.
-.IP "--proxy-insecure"
-Same as \fI-k, --insecure\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "--proxy-key-type <type>"
-Same as \fI--key-type\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "--proxy-key <key>"
-Same as \fI--key\fP but used in HTTPS proxy context.
 .IP "--proxy-negotiate"
 Tells curl to use HTTP Negotiate (SPNEGO) authentication when communicating
 with the given proxy. Use \fI--negotiate\fP for enabling HTTP Negotiate (SPNEGO)
-with a remote host.
-
-See also \fI--proxy-anyauth\fP and \fI--proxy-basic\fP. Added in 7.17.1.
+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.
-
-See also \fI--proxy-negotiate\fP and \fI--proxy-anyauth\fP.
-.IP "--proxy-pass <phrase>"
-Same as \fI--pass\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "--proxy-service-name <name>"
+.IP "--proxy-service-name <servicename>"
 This option allows you to change the service name for proxy negotiation.
 
-Added in 7.43.0.
-.IP "--proxy-ssl-allow-beast"
-Same as \fI--ssl-allow-beast\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "--proxy-tlsauthtype <type>"
-Same as \fI--tlsauthtype\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "--proxy-tlspassword <string>"
-Same as \fI--tlspassword\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "--proxy-tlsuser <name>"
-Same as \fI--tlsuser\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "--proxy-tlsv1"
-Same as \fI-1, --tlsv1\fP but used in HTTPS proxy context.
-
-Added in 7.52.0.
-.IP "-U, --proxy-user <user:password>"
-Specify the user name and password to use for proxy authentication.
-
-If you use a Windows SSPI-enabled curl binary and do either Negotiate or NTLM
-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 :".
-
-If this option is used several times, the last one will be used.
-.IP "-x, --proxy [protocol://]host[:port]"
-Use the specified proxy.
-
-The proxy string can be specified with a protocol:// prefix. No protocol
-specified or http:// will be treated as HTTP proxy. Use socks4://, socks4a://,
-socks5:// or socks5h:// to request a specific SOCKS version to be used.
-(The protocol support was added in curl 7.21.7)
-
-HTTPS proxy support via https:// protocol prefix was added in 7.52.0 for
-OpenSSL, GnuTLS and NSS.
-
-Unrecognized and unsupported proxy protocols cause an error since 7.52.0.
-Prior versions may ignore the protocol and use http:// instead.
-
-If the port number is not specified in the proxy string, it is assumed to be
-1080.
-
-This option overrides existing environment variables that set the proxy to
-use. If there's an environment variable setting a proxy, you can set proxy to
-\&"" to override it.
-
-All operations that are performed over an HTTP proxy will transparently be
-converted to HTTP. It means that certain protocol specific operations might
-not be available. This is not the case if you can tunnel through the proxy, as
-one with the \fI-p, --proxytunnel\fP option.
-
-User and password that might be provided in the proxy string are URL decoded
-by curl. This allows you to pass in special characters such as @ by using %40
-or pass in a colon with %3a.
-
-The proxy host can be specified the exact same way as the proxy environment
-variables, including the protocol prefix (http://) and the embedded user +
-password.
-
-If this option is used several times, the last one will be used.
-.IP "--proxy1.0 <host[:port]>"
+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.
 
-The only difference between this and the HTTP proxy option \fI-x, --proxy\fP, is that
-attempts to use CONNECT through the proxy will specify an HTTP 1.0 protocol
-instead of the default HTTP 1.1.
-.IP "-p, --proxytunnel"
-When an HTTP proxy is used \fI-x, --proxy\fP, this option will cause non-HTTP protocols
-to attempt to tunnel through the proxy instead of merely using it to do
-HTTP-like operations. The tunnel approach is made with the HTTP proxy CONNECT
-request and requires that the proxy allows direct connect to the remote port
-number curl wants to tunnel through to.
-
-See also \fI-x, --proxy\fP.
+The only difference between this and the HTTP proxy option (\fI-x, --proxy\fP),
+is that attempts to use CONNECT through the proxy will specify an HTTP 1.0
+protocol instead of the default HTTP 1.1.
 .IP "--pubkey <key>"
-(SFTP SCP) Public key file name. Allows you to provide your public key in this separate
-file.
+(SSH) Public key file name. Allows you to provide your public key in this
+separate file.
 
 If this option is used several times, the last one will be used.
 
@@ -1639,23 +1470,24 @@ If this option is used several times, the last one will be used.
 private key file, so passing this option is generally not required. Note that
 this public key extraction requires libcurl to be linked against a copy of
 libssh2 1.2.8 or higher that is itself linked against OpenSSL.)
-.IP "-Q, --quote"
-(FTP SFTP) 
-Send an arbitrary command to the remote FTP or SFTP server. Quote commands are
-sent BEFORE the transfer takes place (just after the initial PWD command in an
-FTP transfer, to be exact). To make commands take place after a successful
-transfer, prefix them with a dash '-'.  To make commands be sent after curl
-has changed the working directory, just before the transfer command(s), prefix
-the command with a '+' (this is only supported for FTP). You may specify any
-number of commands.
-
-If the server returns failure for one of the commands, the entire operation
-will be aborted. You must send syntactically correct FTP commands as RFC 959
-defines to FTP servers, or one of the commands listed below to SFTP servers.
-
-This option can be used multiple times. When speaking to an FTP server, prefix
-the command with an asterisk (*) to make curl continue even if the command
-fails as by default curl will stop at first failure.
+.IP "-q, --disable"
+If used as the first parameter on the command line, the \fIcurlrc\fP config
+file will not be read and used. See the \fI-K, --config\fP for details on the
+default config file search path.
+.IP "-Q, --quote <command>"
+(FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP server. Quote
+commands are sent BEFORE the transfer takes place (just after the initial PWD
+command in an FTP transfer, to be exact). To make commands take place after a
+successful transfer, prefix them with a dash '-'.  To make commands be sent
+after curl has changed the working directory, just before the transfer
+command(s), prefix the command with a '+' (this is only supported for
+FTP). You may specify any number of commands. If the server returns failure
+for one of the commands, the entire operation will be aborted. You must send
+syntactically correct FTP commands as RFC 959 defines to FTP servers, or one
+of the commands listed below to SFTP servers.  This option can be used
+multiple times. When speaking to an FTP server, prefix the command with an
+asterisk (*) to make curl continue even if the command fails as by default
+curl will stop at first failure.
 
 SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP quote commands
 itself before sending them to the server.  File names may be quoted
@@ -1691,13 +1523,10 @@ operand, provided it is empty.
 .IP "symlink source_file target_file"
 See ln.
 .RE
-.IP "--random-file <file>"
-Specify the path name to file containing what will be considered as random
-data. The data may be used to seed the random engine for SSL connections.  See
-also the \fI--egd-file\fP option.
 .IP "-r, --range <range>"
-(HTTP FTP SFTP FILE) Retrieve a byte range (i.e a partial document) from a HTTP/1.1, FTP or SFTP
-server or a local FILE. Ranges can be specified in a number of ways.
+(HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial document) from a
+HTTP/1.1, FTP or SFTP server or a local FILE. Ranges can be specified
+in a number of ways.
 .RS
 .TP 10
 .B 0-499
@@ -1736,100 +1565,22 @@ FTP and SFTP range downloads only support the simple 'start-stop' syntax
 FTP command SIZE.
 
 If this option is used several times, the last one will be used.
-.IP "--raw"
-(HTTP) When used, it disables all internal HTTP decoding of content or transfer
-encodings and instead makes them passed on unaltered, raw.
-
-Added in 7.16.2.
-.IP "-e, --referer <URL>"
-(HTTP) Sends the "Referrer Page" information to the HTTP server. This can also be set
-with the \fI-H, --header\fP flag of course.  When used with \fI-L, --location\fP you can append
-";auto" to the \fI-e, --referer\fP 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 \fI-e, --referer\fP.
-
-If this option is used several times, the last one will be used.
-
-See also \fI-A, --user-agent\fP and \fI-H, --header\fP.
-.IP "-J, --remote-header-name"
-(HTTP) This option tells the \fI-O, --remote-name\fP option to use the 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 "--remote-name-all"
-This option changes the default action for all given URLs to be dealt with as
-if \fI-O, --remote-name\fP were used for each one. So if you want to disable that for a
-specific URL after \fI--remote-name-all\fP has been used, you must use "-o -" or
---no-remote-name.
-
-Added in 7.19.0.
-.IP "-O, --remote-name"
-Write output to a local file named like the remote file we get. (Only the file
-part of the remote file is used, the path is cut off.)
-
-The 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.
-
-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.
-
-You may use this option as many times as the number of URLs you have.
 .IP "-R, --remote-time"
 When used, this will make curl attempt to figure out the timestamp of the
 remote file, and if that is available make the local file get that same
 timestamp.
-.IP "-X, --request <command>"
-(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.
-
-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.
-
-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 \fI-I, --head\fP option.
-
-The method string you set with \fI-X, --request\fP will be used for all requests, which
-if you for example use \fI-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.
-
-(POP3)
-Specifies a custom POP3 command to use instead of LIST or RETR. (Added in
-7.26.0)
-
-(IMAP)
-Specifies a custom IMAP command to use instead of LIST. (Added in 7.30.0)
-
-(SMTP)
-Specifies a custom SMTP command to use instead of HELP or VRFY. (Added in 7.34.0)
-
-If this option is used several times, the last one will be used.
+.IP "--random-file <file>"
+(SSL) Specify the path name to file containing what will be considered as
+random data. The data is used to seed the random engine for SSL connections.
+See also the \fI--egd-file\fP option.
+.IP "--raw"
+(HTTP) When used, it disables all internal HTTP decoding of content or transfer
+encodings and instead makes them passed on unaltered, raw. (Added in 7.16.2)
+.IP "--remote-name-all"
+This option changes the default action for all given URLs to be dealt with as
+if \fI-O, --remote-name\fP were used for each one. So if you want to disable
+that for a specific URL after \fI--remote-name-all\fP has been used, you must
+use "-o -" or \fI--no-remote-name\fP. (Added in 7.19.0)
 .IP "--resolve <host:port:address>"
 Provide a custom address for a specific host and port pair. Using this, you
 can make the curl requests(s) use a specified address and prevent the
@@ -1839,37 +1590,12 @@ the number used for the specific protocol the host will be used for. It means
 you need several entries if you want to provide address for the same host but
 different ports.
 
-The provided address set by this option will be used even if \fI-4, --ipv4\fP or \fI-6, --ipv6\fP
-is set to make curl use another IP version.
+The provided address set by this option will be used even if \fI-4, --ipv4\fP
+or \fI-6, --ipv6\fP is set to make curl use another IP version.
 
 This option can be used many times to add many host names to resolve.
 
-Added in 7.21.3.
-.IP "--retry-connrefused"
-In addition to the other conditions, consider ECONNREFUSED as a transient
-error too for \fI--retry\fP. This option is used together with --retry.
-
-Added in 7.52.0.
-.IP "--retry-delay <seconds>"
-Make curl sleep this amount of time before each retry when a transfer has
-failed with a transient error (it changes the default backoff time algorithm
-between retries). This option is only interesting if \fI--retry\fP is also
-used. Setting this delay to zero will make curl use the default backoff time.
-
-If this option is used several times, the last one will be used.
-
-Added in 7.12.3.
-.IP "--retry-max-time <seconds>"
-The retry timer is reset before the first transfer attempt. Retries will be
-done as usual (see \fI--retry\fP) as long as the timer hasn't reached this given
-limit. Notice that if the timer hasn't reached the limit, the request will be
-made and while performing, it may take longer than this given time period. To
-limit a single request\'s maximum time, use \fI-m, --max-time\fP.  Set this option to
-zero to not timeout retries.
-
-If this option is used several times, the last one will be used.
-
-Added in 7.12.3.
+(Added in 7.21.3)
 .IP "--retry <num>"
 If a transient error is returned when curl tries to perform a transfer, it
 will retry this number of times before giving up. Setting the number to 0
@@ -1879,310 +1605,145 @@ a timeout, an FTP 4xx response code or an HTTP 5xx response code.
 When curl is about to retry a transfer, it will first wait one second and then
 for all forthcoming retries it will double the waiting time until it reaches
 10 minutes which then will be the delay between the rest of the retries.  By
-using \fI--retry-delay\fP you disable this exponential backoff algorithm. See also
-\fI--retry-max-time\fP to limit the total time allowed for retries.
+using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
+also \fI--retry-max-time\fP to limit the total time allowed for
+retries. (Added in 7.12.3)
 
 If this option is used several times, the last one will be used.
+.IP "--retry-delay <seconds>"
+Make curl sleep this amount of time before each retry when a transfer has
+failed with a transient error (it changes the default backoff time algorithm
+between retries). This option is only interesting if \fI--retry\fP is also
+used. Setting this delay to zero will make curl use the default backoff time.
+(Added in 7.12.3)
 
-Added in 7.12.3.
-.IP "--sasl-ir"
-Enable initial response in SASL authentication.
-
-Added in 7.31.0.
-.IP "--service-name <name>"
-This option allows you to change the service name for SPNEGO.
-
-Examples: \fI--negotiate\fP \fI--service-name\fP sockd would use sockd/server-name.
+If this option is used several times, the last one will be used.
+.IP "--retry-max-time <seconds>"
+The retry timer is reset before the first transfer attempt. Retries will be
+done as usual (see \fI--retry\fP) as long as the timer hasn't reached this
+given limit. Notice that if the timer hasn't reached the limit, the request
+will be made and while performing, it may take longer than this given time
+period. To limit a single request\'s maximum time, use \fI-m, --max-time\fP.
+Set this option to zero to not timeout retries. (Added in 7.12.3)
 
-Added in 7.43.0.
-.IP "-S, --show-error"
-When used with \fI-s, --silent\fP, it makes curl show an error message if it fails.
+If this option is used several times, the last one will be used.
 .IP "-s, --silent"
 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.
+.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.
 
-Use \fI-S, --show-error\fP in addition to this option to disable progress meter but
-still show error messages.
+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"
+(FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.  Reverts to a
+non-secure connection if the server doesn't support SSL/TLS.  See also
+\fI--ftp-ssl-control\fP and \fI--ssl-reqd\fP for different levels of
+encryption required. (Added in 7.20.0)
+
+This option was formerly known as \fI--ftp-ssl\fP (Added in 7.11.0). That
+option name can still be used but will be removed in a future version.
+.IP "--ssl-reqd"
+(FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.  Terminates the
+connection if the server doesn't support SSL/TLS. (Added in 7.20.0)
 
-See also \fI-v, --verbose\fP and \fI--stderr\fP.
+This option was formerly known as \fI--ftp-ssl-reqd\fP.
+.IP "--ssl-allow-beast"
+(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)
+.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.
+assumed at port 1080. (Added in 7.15.2)
 
-This option overrides any previous use of \fI-x, --proxy\fP, as they are mutually
-exclusive.
+This option overrides any previous use of \fI-x, --proxy\fP, as they are
+mutually exclusive.
 
 Since 7.21.7, this option is superfluous since you can specify a socks4 proxy
 with \fI-x, --proxy\fP using a socks4:// protocol prefix.
 
-Since 7.52.0, \fI--preproxy\fP can be used to specify a SOCKS proxy at the same time
-\fI-x, --proxy\fP is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
 If this option is used several times, the last one will be used.
-
-Added in 7.15.2.
 .IP "--socks4a <host[:port]>"
 Use the specified SOCKS4a proxy. If the port number is not specified, it is
-assumed at port 1080.
+assumed at port 1080. (Added in 7.18.0)
 
-This option overrides any previous use of \fI-x, --proxy\fP, as they are mutually
-exclusive.
+This option overrides any previous use of \fI-x, --proxy\fP, as they are
+mutually exclusive.
 
 Since 7.21.7, this option is superfluous since you can specify a socks4a proxy
 with \fI-x, --proxy\fP using a socks4a:// protocol prefix.
 
-Since 7.52.0, \fI--preproxy\fP can be used to specify a SOCKS proxy at the same time
-\fI-x, --proxy\fP is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
 If this option is used several times, the last one will be used.
-
-Added in 7.18.0.
-.IP "--socks5-gssapi-nec"
-As part of the GSS-API negotiation a protection mode is negotiated. RFC 1961
-says in section 4.3/4.4 it should be protected, but the NEC reference
-implementation does not.  The option \fI--socks5-gssapi-nec\fP allows the
-unprotected exchange of the protection mode negotiation.
-
-Added in 7.19.4.
-.IP "--socks5-gssapi-service <name>"
-The default service name for a socks server is rcmd/server-fqdn. This option
-allows you to change it.
-
-Examples: \fI--socks5\fP proxy-name \fI--socks5-gssapi-service\fP sockd would use
-sockd/proxy-name \fI--socks5\fP proxy-name \fI--socks5-gssapi-service\fP sockd/real-name
-would use sockd/real-name for cases where the proxy-name does not match the
-principal name.
-
-Added in 7.19.4.
 .IP "--socks5-hostname <host[:port]>"
 Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If
-the port number is not specified, it is assumed at port 1080.
+the port number is not specified, it is assumed at port 1080. (Added in
+7.18.0)
 
-This option overrides any previous use of \fI-x, --proxy\fP, as they are mutually
-exclusive.
+This option overrides any previous use of \fI-x, --proxy\fP, as they are
+mutually exclusive.
 
 Since 7.21.7, this option is superfluous since you can specify a socks5
 hostname proxy with \fI-x, --proxy\fP using a socks5h:// protocol prefix.
 
-Since 7.52.0, \fI--preproxy\fP can be used to specify a SOCKS proxy at the same time
-\fI-x, --proxy\fP is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
-If this option is used several times, the last one will be used.
-
-Added in 7.18.0.
+If this option is used several times, the last one will be used. (This option
+was previously wrongly documented and used as --socks without the number
+appended.)
 .IP "--socks5 <host[:port]>"
 Use the specified SOCKS5 proxy - but resolve the host name locally. If the
 port number is not specified, it is assumed at port 1080.
 
-This option overrides any previous use of \fI-x, --proxy\fP, as they are mutually
-exclusive.
+This option overrides any previous use of \fI-x, --proxy\fP, as they are
+mutually exclusive.
 
 Since 7.21.7, this option is superfluous since you can specify a socks5 proxy
 with \fI-x, --proxy\fP using a socks5:// protocol prefix.
 
-Since 7.52.0, \fI--preproxy\fP can be used to specify a SOCKS proxy at the same time
-\fI-x, --proxy\fP is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
-
-If this option is used several times, the last one will be used.
+If this option is used several times, the last one will be used. (This option
+was previously wrongly documented and used as --socks without the number
+appended.)
 
 This option (as well as \fI--socks4\fP) does not work with IPV6, FTPS or LDAP.
+.IP "--socks5-gssapi-service <servicename>"
+The default service name for a socks server is rcmd/server-fqdn. This option
+allows you to change it.
 
-Added in 7.18.0.
-.IP "-Y, --speed-limit <speed>"
-If a download is slower than this given speed (in bytes per second) for
-speed-time seconds it gets aborted. speed-time is set with \fI-y, --speed-time\fP and is
-30 if not set.
-
-If this option is used several times, the last one will be used.
-.IP "-y, --speed-time <seconds>"
-If a download is slower than speed-limit bytes per second during a speed-time
-period, the download gets aborted. If speed-time is used, the default
-speed-limit will be 1 unless set with \fI-Y, --speed-limit\fP.
-
-This option controls transfers and thus will not affect slow connects etc. If
-this is a concern for you, try the \fI--connect-timeout\fP option.
-
-If this option is used several times, the last one will be used.
-.IP "--ssl-allow-beast"
-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.
-.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 "--ssl-reqd"
-(FTP IMAP POP3 SMTP) Require SSL/TLS for the connection.  Terminates the connection if the server
-doesn't support SSL/TLS.
-
-This option was formerly known as --ftp-ssl-reqd.
-
-Added in 7.20.0.
-.IP "--ssl"
-(FTP IMAP POP3 SMTP) 
-Try to use SSL/TLS for the connection.  Reverts to a non-secure connection if
-the server doesn't support SSL/TLS.  See also \fI--ftp-ssl-control\fP and \fI--ssl-reqd\fP
-for different levels of encryption required.
-
-This option was formerly known as --ftp-ssl (Added in 7.11.0). That option
-name can still be used but will be removed in a future version.
-
-Added in 7.20.0.
-.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 (see RFC 6176).
-
-See also \fI--http1.1\fP and \fI--http2\fP. \fI-2, --sslv2\fP requires that the underlying libcurl was built to support TLS. This option overrides \fI-3, --sslv3\fP and \fI-1, --tlsv1\fP and \fI--tlsv1.1\fP and \fI--tlsv1.2\fP.
-.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. SSLv3 is widely
-considered insecure (see RFC 7568).
-
-See also \fI--http1.1\fP and \fI--http2\fP. \fI-3, --sslv3\fP requires that the underlying libcurl was built to support TLS. This option overrides \fI-2, --sslv2\fP and \fI-1, --tlsv1\fP and \fI--tlsv1.1\fP and \fI--tlsv1.2\fP.
-.IP "--stderr"
+Examples: --socks5 proxy-name \fI--socks5-gssapi-service\fP sockd would use
+sockd/proxy-name --socks5 proxy-name \fI--socks5-gssapi-service\fP
+sockd/real-name would use sockd/real-name for cases where the proxy-name does
+not match the principal name.  (Added in 7.19.4).
+.IP "--socks5-gssapi-nec"
+As part of the GSS-API negotiation a protection mode is negotiated. RFC 1961
+says in section 4.3/4.4 it should be protected, but the NEC reference
+implementation does not.  The option \fI--socks5-gssapi-nec\fP allows the
+unprotected exchange of the protection mode negotiation. (Added in 7.19.4).
+.IP "--stderr <file>"
 Redirect all writes to stderr to the specified file instead. If the file name
-is a plain '-', it is instead written to stdout.
-
-If this option is used several times, the last one will be used.
-
-See also \fI-v, --verbose\fP and \fI-s, --silent\fP.
-.IP "--tcp-fastopen"
-Enable use of TCP Fast Open (RFC7413).
-
-Added in 7.49.0.
-.IP "--tcp-nodelay"
-Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
-details about this option.
-
-Since 7.50.2, curl sets this option by default and you need to explictitly
-switch it off if you don't want it on.
-
-Added in 7.11.2.
-.IP "-t, --telnet-option <opt=val>"
-Pass options to the telnet protocol. Supported options are:
-
-TTYPE=<term> Sets the terminal type.
-
-XDISPLOC=<X display> Sets the X display location.
-
-NEW_ENV=<var,val> Sets an environment variable.
-.IP "--tftp-blksize <value>"
-(TFTP) Set TFTP BLKSIZE option (must be >512). This is the block size that curl will
-try to use when transferring data to or from a TFTP server. By default 512
-bytes will be used.
-
-If this option is used several times, the last one will be used.
-
-Added in 7.20.0.
-.IP "--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 "-z, --time-cond <time>"
-(HTTP FTP) Request a file that has been modified later than the given time and date, or
-one that has been modified before that time. The <date expression> can be all
-sorts of date strings or if it doesn't match any internal ones, it is taken as
-a filename and tries to get the modification date (mtime) from <file>
-instead. See the \fIcurl_getdate(3)\fP man pages for date expression details.
-
-Start the date expression with a dash (-) to make it request for a document
-that is older than the given date/time, default is a document that is newer
-than the specified date/time.
-
-If this option is used several times, the last one will be used.
-.IP "--tlsauthtype <type>"
-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 specified but
-\fI--tlsauthtype\fP is not, then this option defaults to "SRP".
-
-Added in 7.21.4.
-.IP "--tlspassword"
-Set password for use with the TLS authentication method specified with
-\fI--tlsauthtype\fP. Requires that \fI--tlsuser\fP also be set.
-
-Added in 7.21.4.
-.IP "--tlsuser <name>"
-Set username for use with the TLS authentication method specified with
-\fI--tlsauthtype\fP. Requires that \fI--tlspassword\fP also is set.
-
-Added in 7.21.4.
-.IP "--tlsv1.0"
-(TLS) Forces curl to use TLS version 1.0 when connecting to a remote TLS server.
-
-Added in 7.34.0.
-.IP "--tlsv1.1"
-(TLS) Forces curl to use TLS version 1.1 when connecting to a remote TLS server.
-
-Added in 7.34.0.
-.IP "--tlsv1.2"
-(TLS) Forces curl to use TLS version 1.2 when connecting to a remote TLS server.
-
-Added in 7.34.0.
-.IP "--tlsv1.3"
-(TLS) Forces curl to use TLS version 1.3 when connecting to a remote TLS server.
-
-Note that TLS 1.3 is only supported by a subset of TLS backends. At the time
-of writing this, those are BoringSSL and NSS only.
-
-Added in 7.52.0.
-.IP "-1, --tlsv1"
-(SSL) Tells curl to use TLS version 1.x when negotiating with a remote TLS
-server. That means TLS version 1.0, 1.1 or 1.2.
-
-See also \fI--http1.1\fP and \fI--http2\fP. \fI-1, --tlsv1\fP requires that the underlying libcurl was built to support TLS. This option overrides \fI--tlsv1.1\fP and \fI--tlsv1.2\fP and \fI--tlsv1.3\fP.
-.IP "--tr-encoding"
-(HTTP) Request a compressed Transfer-Encoding response using one of the algorithms
-curl supports, and uncompress the data while receiving it.
-
-Added in 7.21.6.
-.IP "--trace-ascii <file>"
-Enables a full trace dump of all incoming and outgoing data, including
-descriptive information, to the given output file. Use "-" as filename to have
-the output sent to stdout.
-
-This is very similar to \fI--trace\fP, but leaves out the hex part and only shows
-the ASCII part of the dump. It makes smaller output that might be easier to
-read for untrained humans.
+is a plain '-', it is instead written to stdout.
 
 If this option is used several times, the last one will be used.
+.IP "-t, --telnet-option <OPT=val>"
+Pass options to the telnet protocol. Supported options are:
 
-This option overrides \fI--trace\fP and \fI-v, --verbose\fP.
-.IP "--trace-time"
-Prepends a time stamp to each trace or verbose line that curl displays.
-
-Added in 7.14.0.
-.IP "--trace <file>"
-Enables a full trace dump of all incoming and outgoing data, including
-descriptive information, to the given output file. Use "-" as filename to have
-the output sent to stdout. Use "%" as filename to have the output sent to
-stderr.
-
-If this option is used several times, the last one will be used.
+TTYPE=<term> Sets the terminal type.
 
-This option overrides \fI-v, --verbose\fP and \fI--trace-ascii\fP.
-.IP "--unix-socket <path>"
-(HTTP) Connect through this Unix domain socket, instead of using the network.
+XDISPLOC=<X display> Sets the X display location.
 
-Added in 7.40.0.
+NEW_ENV=<var,val> Sets an environment variable.
 .IP "-T, --upload-file <file>"
 This transfers the specified local file to the remote URL. If there is no file
-part in the specified URL, curl will append the local file name. NOTE that you
+part in the specified URL, Curl will append the local file name. NOTE that you
 must use a trailing / on the last directory to really prove to Curl that there
 is no file name or curl will think that your last directory name is the remote
 file name to use. That will most likely cause the upload operation to fail. If
@@ -2193,45 +1754,94 @@ Alternately, the file name "." (a single period) may be specified instead
 of "-" to use stdin in non-blocking mode to allow reading server output
 while stdin is being uploaded.
 
-You can specify one \fI-T, --upload-file\fP for each URL on the command line. Each
-\fI-T, --upload-file\fP + URL pair specifies what to upload and to where. curl also
-supports "globbing" of the \fI-T, --upload-file\fP argument, meaning that you can upload
-multiple files to a single URL by using the same URL globbing style supported
-in the URL, like this:
+You can specify one -T for each URL on the command line. Each -T + URL pair
+specifies what to upload and to where. curl also supports "globbing" of the -T
+argument, meaning that you can upload multiple files to a single URL by using
+the same URL globbing style supported in the URL, like this:
 
- curl --upload-file "{file1,file2}" http://www.example.com
+curl -T "{file1,file2}" http://www.example.com
 
 or even
 
- curl -T "img[1-1000].png" ftp://ftp.example.com/upload/
+curl -T "img[1-1000].png" ftp://ftp.example.com/upload/
+.IP "--tcp-nodelay"
+Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
+details about this option. (Added in 7.11.2)
+.IP "--tcp-fastopen"
+Enable use of TCP Fast Open (RFC7413). (Added in 7.49.0)
+.IP "--tftp-blksize <value>"
+(TFTP) Set TFTP BLKSIZE option (must be >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.
+
+If this option is used several times, the last one will be used.
 
-When uploading to an SMTP server: the uploaded data is assumed to be RFC 5322
-formatted. It has to feature the necessary set of headers and mail body
-formatted correctly by the user as curl will not transcode nor encode it
-further in any way.
-.IP "--url <url>"
-Specify a URL to fetch. This option is mostly handy when you want to specify
-URL(s) in a config file.
+(Added in 7.20.0)
+.IP "--tftp-no-options"
+(TFTP) Tells curl not to send TFTP options requests.
 
-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 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.
 
-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 "-B, --use-ascii"
-(FTP LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using a URL that
-ends with ";type=A". This option causes data sent to stdout to be in text mode
-for win32 systems.
-.IP "-A, --user-agent <name>"
-(HTTP) 
-Specify the User-Agent string to send to the HTTP server. To encode blanks in
-the string, surround the string with single quote marks. This can also be set
-with the \fI-H, --header\fP option of course.
+(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
+specified but \fI--tlsauthtype\fP is not, then this option defaults to "SRP".
+(Added in 7.21.4)
+.IP "--tlspassword <password>"
+Set password for use with the TLS authentication method specified with
+\fI--tlsauthtype\fP. Requires that \fI--tlsuser\fP also be set.  (Added in
+7.21.4)
+.IP "--tlsuser <user>"
+Set username for use with the TLS authentication method specified with
+\fI--tlsauthtype\fP. Requires that \fI--tlspassword\fP also be set.  (Added in
+7.21.4)
+.IP "--tlsv1.0"
+(SSL)
+Forces curl to use TLS version 1.0 when negotiating with a remote TLS server.
+(Added in 7.34.0)
+.IP "--tlsv1.1"
+(SSL)
+Forces curl to use TLS version 1.1 when negotiating with a remote TLS server.
+(Added in 7.34.0)
+.IP "--tlsv1.2"
+(SSL)
+Forces curl to use TLS version 1.2 when negotiating with a remote TLS server.
+(Added in 7.34.0)
+.IP "--tr-encoding"
+(HTTP) Request a compressed Transfer-Encoding response using one of the
+algorithms curl supports, and uncompress the data while receiving it.
+
+(Added in 7.21.6)
+.IP "--trace <file>"
+Enables a full trace dump of all incoming and outgoing data, including
+descriptive information, to the given output file. Use "-" as filename to have
+the output sent to stdout.
+
+This option overrides previous uses of \fI-v, --verbose\fP or
+\fI--trace-ascii\fP.
+
+If this option is used several times, the last one will be used.
+.IP "--trace-ascii <file>"
+Enables a full trace dump of all incoming and outgoing data, including
+descriptive information, to the given output file. Use "-" as filename to have
+the output sent to stdout.
+
+This is very similar to \fI--trace\fP, but leaves out the hex part and only
+shows the ASCII part of the dump. It makes smaller output that might be easier
+to read for untrained humans.
+
+This option overrides previous uses of \fI-v, --verbose\fP or \fI--trace\fP.
 
 If this option is used several times, the last one will be used.
+.IP "--trace-time"
+Prepends a time stamp to each trace or verbose line that curl displays.
+(Added in 7.14.0)
+.IP "--unix-socket <path>"
+(HTTP) Connect through this Unix domain socket, instead of using the
+network. (Added in 7.40.0)
 .IP "-u, --user <user:password>"
 Specify the user name and password to use for server authentication. Overrides
 \fI-n, --netrc\fP and \fI--netrc-optional\fP.
@@ -2261,77 +1871,42 @@ the user name and password from your environment by specifying a single colon
 with this option: "-u :".
 
 If this option is used several times, the last one will be used.
-.IP "-v, --verbose"
-Makes curl verbose during the operation. Useful for debugging and seeing
-what's going on "under the hood". A line starting with '>' means "header data"
-sent by curl, '<' means "header data" received by curl that is hidden in
-normal cases, and a line starting with '*' means additional info provided by
-curl.
+.IP "-U, --proxy-user <user:password>"
+Specify the user name and password to use for proxy authentication.
+
+If you use a Windows SSPI-enabled curl binary and do either Negotiate or NTLM
+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 :".
 
-If you only want HTTP headers in the output, \fI-i, --include\fP might be the option
-you're looking for.
+If this option is used several times, the last one will be used.
+.IP "--url <URL>"
+Specify a URL to fetch. This option is mostly handy when you want to specify
+URL(s) in a config file.
 
-If you think this option still doesn't give you enough details, consider using
-\fI--trace\fP or \fI--trace-ascii\fP instead.
+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.
 
-Use \fI-s, --silent\fP to make curl really quiet.
+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"
+Be more verbose/talkative during the operation. Useful for debugging and
+seeing what's going on "under the hood". A line starting with '>' means
+"header data" sent by curl, '<' means "header data" received by curl that is
+hidden in normal cases, and a line starting with '*' means additional info
+provided by curl.
 
-See also \fI-i, --include\fP. This option overrides \fI--trace\fP and \fI--trace-ascii\fP.
-.IP "-V, --version"
-Displays information about curl and the libcurl version it uses.
+Note that if you only want HTTP headers in the output, \fI-i, --include\fP
+might be the option you're looking for.
 
-The first line includes the full version of curl, libcurl and other 3rd party
-libraries linked with the executable.
+If you think this option still doesn't give you enough details, consider using
+\fI--trace\fP or \fI--trace-ascii\fP instead.
 
-The second line (starts with "Protocols:") shows all protocols that libcurl
-reports to support.
+This option overrides previous uses of \fI--trace-ascii\fP or \fI--trace\fP.
 
-The third line (starts with "Features:") shows specific features libcurl
-reports to offer. Available features include:
-.RS
-.IP "IPv6"
-You can use IPv6 with this.
-.IP "krb4"
-Krb4 for FTP is supported.
-.IP "SSL"
-SSL versions of various protocols are supported, such as HTTPS, FTPS, POP3S
-and so on.
-.IP "libz"
-Automatic decompression of compressed files over HTTP is supported.
-.IP "NTLM"
-NTLM authentication is supported.
-.IP "Debug"
-This curl uses a libcurl built with Debug. This enables more error-tracking
-and memory debugging etc. For curl-developers only!
-.IP "AsynchDNS"
-This curl uses asynchronous name resolves. Asynchronous name resolves can be
-done using either the c-ares or the threaded resolver backends.
-.IP "SPNEGO"
-SPNEGO authentication is supported.
-.IP "Largefile"
-This curl supports transfers of large files, files larger than 2GB.
-.IP "IDN"
-This curl supports IDN - international domain names.
-.IP "GSS-API"
-GSS-API is supported.
-.IP "SSPI"
-SSPI is supported.
-.IP "TLS-SRP"
-SRP (Secure Remote Password) authentication is supported for TLS.
-.IP "HTTP2"
-HTTP/2 support has been built-in.
-.IP "UnixSockets"
-Unix sockets support is provided.
-.IP "HTTPS-proxy"
-This curl is built to support HTTPS proxy.
-.IP "Metalink"
-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).
-.IP "PSL"
-PSL is short for Public Suffix List and means that this curl has been built
-with knowledge about "public suffixes".
-.RE
+Use \fI-s, --silent\fP to make curl quiet.
 .IP "-w, --write-out <format>"
 Make curl display information on stdout after a completed transfer. The format
 is a string that may contain plain text mixed with any number of
@@ -2340,10 +1915,10 @@ curl read the format from a file with "@filename" and to tell curl to read the
 format from stdin you write "@-".
 
 The variables present in the output format will be substituted by the value or
-text that curl thinks fit, as described below. All variables are specified as
-%{variable_name} and to output a normal % you just write them as %%. You can
-output a newline by using \\n, a carriage return with \\r and a tab space with
-\\t.
+text that curl thinks fit, as described below. All variables are specified
+as %{variable_name} and to output a normal % you just write them as
+%%. You can output a newline by using \\n, a carriage return with \\r and a tab
+space with \\t.
 
 .B NOTE:
 The %-symbol is a special symbol in the win32-environment, where all
@@ -2357,8 +1932,8 @@ The Content-Type of the requested document, if there was any.
 .TP
 .B filename_effective
 The ultimate filename that curl writes out to. This is only meaningful if curl
-is told to write to a file with the \fI-O, --remote-name\fP or \fI-o, --output\fP
-option. It's most useful in combination with the \fI-J, --remote-header-name\fP
+is told to write to a file with the \fI--remote-name\fP or \fI--output\fP
+option. It's most useful in combination with the \fI--remote-header-name\fP
 option. (Added in 7.26.0)
 .TP
 .B ftp_entry_path
@@ -2390,10 +1965,6 @@ Number of new connects made in the recent transfer. (Added in 7.12.3)
 .B num_redirects
 Number of redirects that were followed in the request. (Added in 7.12.3)
 .TP
-.B proxy_ssl_verify_result
-The result of the HTTPS proxy's SSL peer certificate verification that was
-requested. 0 means the verification was successful. (Added in 7.52.0)
-.TP
 .B redirect_url
 When an HTTP request was made without -L to follow redirects, this variable
 will show the actual URL a redirect \fIwould\fP take you to. (Added in 7.18.2)
@@ -2405,9 +1976,6 @@ IPv4 or IPv6 (Added in 7.29.0)
 .B remote_port
 The remote port number of the most recently done connection (Added in 7.29.0)
 .TP
-.B scheme
-The URL scheme (sometimes called protocol) that was effectively used (Added in 7.52.0)
-.TP
 .B size_download
 The total amount of bytes that were downloaded.
 .TP
@@ -2461,7 +2029,8 @@ about to be transferred. This includes time_pretransfer and also the time the
 server needed to calculate the result.
 .TP
 .B time_total
-The total time, in seconds, that the full operation lasted.
+The total time, in seconds, that the full operation lasted. The time will be
+displayed with millisecond resolution.
 .TP
 .B url_effective
 The URL that was fetched last. This is most meaningful if you've told curl
@@ -2469,12 +2038,160 @@ 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.
+
+The proxy string can be specified with a protocol:// prefix to specify
+alternative proxy protocols. Use socks4://, socks4a://, socks5:// or
+socks5h:// to request the specific SOCKS version to be used. No protocol
+specified, http:// and all others will be treated as HTTP proxies. (The
+protocol support was added in curl 7.21.7)
+
+If the port number is not specified in the proxy string, it is assumed to be
+1080.
+
+This option overrides existing environment variables that set the proxy to
+use. If there's an environment variable setting a proxy, you can set proxy to
+\&"" to override it.
+
+All operations that are performed over an HTTP proxy will transparently be
+converted to HTTP. It means that certain protocol specific operations might
+not be available. This is not the case if you can tunnel through the proxy, as
+one with the \fI-p, --proxytunnel\fP option.
+
+User and password that might be provided in the proxy string are URL decoded
+by curl. This allows you to pass in special characters such as @ by using %40
+or pass in a colon with %3a.
+
+The proxy host can be specified the exact same way as the proxy environment
+variables, including the protocol prefix (http://) and the embedded user +
+password.
+
+If this option is used several times, the last one will be used.
+.IP "-X, --request <command>"
+(HTTP) Specifies a custom request method to use when communicating with the
+HTTP server.  The specified request 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.
+
+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.
+
+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 \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.
+
+(POP3)
+Specifies a custom POP3 command to use instead of LIST or RETR. (Added in
+7.26.0)
+
+(IMAP)
+Specifies a custom IMAP command to use instead of LIST. (Added in 7.30.0)
+
+(SMTP)
+Specifies a custom SMTP command to use instead of HELP or VRFY. (Added in 7.34.0)
+
+If this option is used several times, the last one will be used.
 .IP "--xattr"
 When saving output to a file, this option tells curl to store certain file
 metadata in extended file attributes. Currently, the URL is stored in the
 xdg.origin.url attribute and, for HTTP, the content type is stored in
 the mime_type attribute. If the file system does not support extended
 attributes, a warning is issued.
+
+.IP "-y, --speed-time <time>"
+If a download is slower than speed-limit bytes per second during a speed-time
+period, the download gets aborted. If speed-time is used, the default
+speed-limit will be 1 unless set with \fI-Y\fP.
+
+This option controls transfers and thus will not affect slow connects etc. If
+this is a concern for you, try the \fI--connect-timeout\fP option.
+
+If this option is used several times, the last one will be used.
+.IP "-Y, --speed-limit <speed>"
+If a download is slower than this given speed (in bytes per second) for
+speed-time seconds it gets aborted. speed-time is set with \fI-y\fP and is 30
+if not set.
+
+If this option is used several times, the last one will be used.
+.IP "-z, --time-cond <date expression>|<file>"
+(HTTP/FTP) Request a file that has been modified later than the given time and
+date, or one that has been modified before that time. The <date expression>
+can be all sorts of date strings or if it doesn't match any internal ones, it
+is taken as a filename and tries to get the modification date (mtime) from
+<file> instead. See the \fIcurl_getdate(3)\fP man pages for date expression
+details.
+
+Start the date expression with a dash (-) to make it request for a document
+that is older than the given date/time, default is a document that is newer
+than the specified date/time.
+
+If this option is used several times, the last one will be used.
+.IP "-h, --help"
+Usage help. This lists all current command line options with a short
+description.
+.IP "-M, --manual"
+Manual. Display the huge help text.
+.IP "-V, --version"
+Displays information about curl and the libcurl version it uses.
+
+The first line includes the full version of curl, libcurl and other 3rd party
+libraries linked with the executable.
+
+The second line (starts with "Protocols:") shows all protocols that libcurl
+reports to support.
+
+The third line (starts with "Features:") shows specific features libcurl
+reports to offer. Available features include:
+.RS
+.IP "IPv6"
+You can use IPv6 with this.
+.IP "krb4"
+Krb4 for FTP is supported.
+.IP "SSL"
+SSL versions of various protocols are supported, such as HTTPS, FTPS, POP3S
+and so on.
+.IP "libz"
+Automatic decompression of compressed files over HTTP is supported.
+.IP "NTLM"
+NTLM authentication is supported.
+.IP "Debug"
+This curl uses a libcurl built with Debug. This enables more error-tracking
+and memory debugging etc. For curl-developers only!
+.IP "AsynchDNS"
+This curl uses asynchronous name resolves. Asynchronous name resolves can be
+done using either the c-ares or the threaded resolver backends.
+.IP "SPNEGO"
+SPNEGO authentication is supported.
+.IP "Largefile"
+This curl supports transfers of large files, files larger than 2GB.
+.IP "IDN"
+This curl supports IDN - international domain names.
+.IP "GSS-API"
+GSS-API is supported.
+.IP "SSPI"
+SSPI is supported.
+.IP "TLS-SRP"
+SRP (Secure Remote Password) authentication is supported for TLS.
+.IP "HTTP2"
+HTTP/2 support has been built-in.
+.IP "Metalink"
+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).
+.RE
 .SH FILES
 .I ~/.curlrc
 .RS
@@ -2485,7 +2202,7 @@ lower case version has precedence. http_proxy is an exception as it is only
 available in lower case.
 
 Using an environment variable to set the proxy has the same effect as using
-the \fI-x, --proxy\fP option.
+the \fI--proxy\fP option.
 
 .IP "http_proxy [protocol://]<host>[:port]"
 Sets the proxy server to use for HTTP.
@@ -2500,16 +2217,6 @@ Sets the proxy server to use if no protocol-specific proxy is set.
 .IP "NO_PROXY <comma-separated list of hosts>"
 list of host names that shouldn't go through any proxy. If set to a asterisk
 \&'*' only, it matches all hosts.
-
-Since 7.53.0, this environment variable disable the proxy even if specify
-\fI-x, --proxy\fP option. That is
-.B NO_PROXY=direct.example.com curl -x http://proxy.example.com
-.B http://direct.example.com
-accesses the target URL directly, and
-.B NO_PROXY=direct.example.com curl -x http://proxy.example.com
-.B http://somewhere.example.com
-accesses the target URL through proxy.
-
 .SH "PROXY PROTOCOL PREFIXES"
 Since curl version 7.21.7, the proxy string may be specified with a
 protocol:// prefix to specify alternative proxy protocols.
@@ -2547,30 +2254,19 @@ Couldn't resolve host. The given remote host was not resolved.
 .IP 7
 Failed to connect to host.
 .IP 8
-Weird server reply. The server sent data curl couldn't parse.
+FTP weird server reply. The server sent data curl couldn't parse.
 .IP 9
 FTP access denied. The server denied login or denied access to the particular
 resource or directory you wanted to reach. Most often you tried to change to a
 directory that doesn't exist on the server.
-.IP 10
-FTP accept failed. While waiting for the server to connect back when an active
-FTP session is used, an error code was sent over the control connection or
-similar.
 .IP 11
 FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.
-.IP 12
-During an active FTP session while waiting for the server to connect back to
-curl, the timeout expired.
 .IP 13
 FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.
 .IP 14
 FTP weird 227 format. Curl couldn't parse the 227-line the server sent.
 .IP 15
 FTP can't get host. Couldn't resolve the host IP we got in the 227-line.
-.IP 16
-HTTP/2 error. A problem was detected in the HTTP2 framing layer. This is
-somewhat generic and can be one out of several problems, see the error message
-for details.
 .IP 17
 FTP couldn't set binary. Couldn't change transfer method to binary.
 .IP 18
@@ -2609,7 +2305,7 @@ HTTP post error. Internal post-request generation error.
 .IP 35
 SSL connect error. The SSL handshaking failed.
 .IP 36
-Bad download resume. Couldn't continue an earlier aborted download.
+FTP bad download resume. Couldn't continue an earlier aborted download.
 .IP 37
 FILE couldn't read file. Failed to open the file. Permissions?
 .IP 38
@@ -2716,6 +2412,8 @@ Daniel Stenberg is the main author, but the whole list of contributors is
 found in the separate THANKS file.
 .SH WWW
 https://curl.haxx.se
+.SH FTP
+ftp://ftp.sunet.se/pub/www/utilities/curl/
 .SH "SEE ALSO"
 .BR ftp (1),
 .BR wget (1)
diff --git a/docs/curl.html b/docs/curl.html
new file mode 100644 (file)
index 0000000..1359016
--- /dev/null
@@ -0,0 +1,1107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl 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">curl - transfer a URL <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">curl [options]</span> <a class="emphasis" href="#URL">[URL...]</a> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><span Class="bold">curl</span> is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, 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="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">or you can get sequences of alphanumeric series by using [] as in: 
+<p class="level0">&nbsp; <a href="ftp://ftp.example.com/file[1-100].txt">ftp://ftp.example.com/file[1-100].txt</a> 
+<p class="level0">&nbsp; <a href="ftp://ftp.example.com/file[001-100].txt">ftp://ftp.example.com/file[001-100].txt</a>    (with leading zeros) 
+<p class="level0">&nbsp; <a href="ftp://ftp.example.com/file[a-z].txt">ftp://ftp.example.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://example.com/archive[1996-1999]/vol[1-4]/part">http://example.com/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://example.com/file[1-100:10].txt">http://example.com/file[1-100:10].txt</a> 
+<p class="level0">&nbsp; <a href="http://example.com/file[a-z:2].txt">http://example.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; <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>
+<p class="level0">curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc. The progress meter displays number of bytes and the speeds are in bytes per second. The suffixes (k, M, G, T, P) are 1024 based. For example 1k is 1024 bytes. 1M is 1048576 bytes. 
+<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, <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. 
+<p class="level0">In general, all boolean options are enabled with --<span Class="bold">option</span> and yet again disabled with --<span Class="bold">no-</span>option. That is, you use the exact same option name but prefix it with "no-". However, in this list we mostly only list and show the --option version of them. (This concept with --no options was added in 7.19.0. Previously most options were toggled on/off on repeated use of the same command line option.) 
+<p class="level0"><a name="-"></a><span class="nroffip">-#, --progress-bar</span> 
+<p class="level1">Make curl display progress as a simple progress bar instead of the standard, more informational, meter. 
+<p class="level0"><a name="-"></a><span class="nroffip">-:, --next</span> 
+<p class="level1">Tells curl to use a separate operation for the following URL and associated options. This allows you to send several URL requests, each with their own specific options, for example, such as different user names or custom requests for each. (Added in 7.36.0) 
+<p class="level0"><a name="-0"></a><span class="nroffip">-0, --http1.0</span> 
+<p class="level1">(HTTP) Tells curl to use HTTP version 1.0 instead of using its internally preferred: HTTP 1.1. 
+<p class="level0"><a name="--http11"></a><span class="nroffip">--http1.1</span> 
+<p class="level1">(HTTP) Tells curl to use HTTP version 1.1. This is the internal default version. (Added in 7.33.0) 
+<p class="level0"><a name="--http2"></a><span class="nroffip">--http2</span> 
+<p class="level1">(HTTP) Tells curl to issue its requests using HTTP 2. This requires that the underlying libcurl was built to support it. (Added in 7.33.0) 
+<p class="level0"><a name="--http2-prior-knowledge"></a><span class="nroffip">--http2-prior-knowledge</span> 
+<p class="level1">(HTTP) Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2 straight away. HTTPS requests will still do HTTP/2 the standard way with negotiated protocol version in the TLS handshake. 
+<p class="level1">HTTP/2 support in general also requires that the underlying libcurl was built to support it. (Added in 7.49.0) 
+<p class="level0"><a name="--no-npn"></a><span class="nroffip">--no-npn</span> 
+<p class="level1">Disable the NPN TLS extension. NPN is enabled by default if libcurl was built with an SSL library that supports NPN. NPN is used by a libcurl that supports HTTP 2 to negotiate HTTP 2 support with the server during https sessions. 
+<p class="level1">(Added in 7.36.0) 
+<p class="level0"><a name="--no-alpn"></a><span class="nroffip">--no-alpn</span> 
+<p class="level1">Disable the ALPN TLS extension. ALPN is enabled by default if libcurl was built with an SSL library that supports ALPN. ALPN is used by a libcurl that supports HTTP 2 to negotiate HTTP 2 support with the server during https sessions. 
+<p class="level1">(Added in 7.36.0) 
+<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 (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. 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> 
+<p class="level1">This option tells curl to resolve names to IPv6 addresses only, and not for example try IPv4. 
+<p class="level0"><a name="-a"></a><span class="nroffip">-a, --append</span> 
+<p class="level1">(FTP/SFTP) When used in an upload, this makes curl append to the target file instead of overwriting it. If the remote file doesn't exist, it will be created.  Note that this flag is ignored by some SFTP servers (including OpenSSH). 
+<p class="level0"><a name="-A"></a><span class="nroffip">-A, --user-agent &lt;agent string&gt;</span> 
+<p class="level1">(HTTP) Specify the User-Agent string to send to the HTTP server. Some badly done CGIs fail if this field isn't set to "Mozilla/4.0". To encode blanks in the string, surround the string with single quote marks. This can also be set with the <a class="emphasis" href="#-H">-H, --header</a> option of course. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--anyauth"></a><span class="nroffip">--anyauth</span> 
+<p class="level1">(HTTP) Tells curl to figure out authentication method by itself, and use the most secure one the remote site claims to support. This is done by first doing a request and checking the response-headers, thus possibly inducing an extra network round-trip. This is used instead of setting a specific authentication method, which you can do with <a class="emphasis" href="#--basic">--basic</a>, <a class="emphasis" href="#--digest">--digest</a>, <a class="emphasis" href="#--ntlm">--ntlm</a>, and <a class="emphasis" href="#--negotiate">--negotiate</a>. 
+<p class="level1">Note that using --anyauth is not recommended if you do uploads from stdin, since it may require data to be sent twice and then the client must be able to rewind. If the need should arise when uploading from stdin, the upload operation will fail. 
+<p class="level0"><a name="-b"></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 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. 
+<p class="level0"><a name="--basic"></a><span class="nroffip">--basic</span> 
+<p class="level1">(HTTP) Tells curl to use HTTP Basic authentication with the remote host. This is the default and this option is usually pointless, unless you use it to override a previously set option that sets a different authentication method (such as <a class="emphasis" href="#--ntlm">--ntlm</a>, <a class="emphasis" href="#--digest">--digest</a>, or <a class="emphasis" href="#--negotiate">--negotiate</a>). 
+<p class="level1">Used together with <a class="emphasis" href="#-u">-u, --user</a> and <a class="emphasis" href="#-x">-x, --proxy</a>. 
+<p class="level1">See also <a class="emphasis" href="#--proxy-basic">--proxy-basic</a>. 
+<p class="level0"><a name="-c"></a><span class="nroffip">-c, --cookie-jar &lt;file name&gt;</span> 
+<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">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. 
+<p class="level0"><a name="--connect-timeout"></a><span class="nroffip">--connect-timeout &lt;seconds&gt;</span> 
+<p class="level1">Maximum time in seconds that you allow curl's connection to take.  This only limits the connection phase, so if curl connects within the given period it will continue - if not it will exit.  Since version 7.32.0, this option accepts decimal values. 
+<p class="level1">See also the <a class="emphasis" href="#-m">-m, --max-time</a> option. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--create-dirs"></a><span class="nroffip">--create-dirs</span> 
+<p class="level1">When used in conjunction with the <a class="emphasis" href="#-o">-o</a> option, curl will create the necessary local directory hierarchy as needed. This option creates the dirs mentioned with the <a class="emphasis" href="#-o">-o</a> option, nothing else. If the <a class="emphasis" href="#-o">-o</a> file name uses no dir or if the dirs it mentions already exist, no dir will be created. 
+<p class="level1">To create remote directories when using FTP or SFTP, try <a class="emphasis" href="#--ftp-create-dirs">--ftp-create-dirs</a>. 
+<p class="level0"><a name="--crlf"></a><span class="nroffip">--crlf</span> 
+<p class="level1">Convert LF to CRLF in upload. Useful for MVS (OS/390). 
+<p class="level1">(SMTP added in 7.40.0) 
+<p class="level0"><a name="--crlfile"></a><span class="nroffip">--crlfile &lt;file&gt;</span> 
+<p class="level1">(HTTPS/FTPS) Provide a file using PEM format with a Certificate Revocation List that may specify peer certificates that are to be considered revoked. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level1">(Added in 7.19.7) 
+<p class="level0"><a name="-d"></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>. <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. 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. 
+<p class="level1">When used in FTP, the FTP server response lines are considered being "headers" and thus are saved there. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--data-ascii"></a><span class="nroffip">--data-ascii &lt;data&gt;</span> 
+<p class="level1">See <a class="emphasis" href="#-d">-d, --data</a>. 
+<p class="level0"><a name="--data-binary"></a><span class="nroffip">--data-binary &lt;data&gt;</span> 
+<p class="level1">(HTTP) This posts data exactly as specified with no extra processing whatsoever. 
+<p class="level1">If you start the data with the letter @, the rest should be a filename.  Data is posted in a similar manner as <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: 
+<p class="level2">
+<p class="level1"><a name="content"></a><span class="nroffip">content</span> 
+<p class="level2">This will make curl URL-encode the content and pass that on. Just be careful so that the content doesn't contain any = or @ symbols, as that will then make the syntax match one of the other cases below! 
+<p class="level1"><a name="content"></a><span class="nroffip">=content</span> 
+<p class="level2">This will make curl URL-encode the content and pass that on. The preceding = symbol is not included in the data. 
+<p class="level1"><a name="namecontent"></a><span class="nroffip">name=content</span> 
+<p class="level2">This will make curl URL-encode the content part and pass that on. Note that the name part is expected to be URL-encoded already. 
+<p class="level1"><a name="filename"></a><span class="nroffip">@filename</span> 
+<p class="level2">This will make curl load data from the given file (including any newlines), URL-encode that data and pass it on in the POST. 
+<p class="level1"><a name="namefilename"></a><span class="nroffip">name@filename</span> 
+<p class="level2">This will make curl load data from the given file (including any newlines), URL-encode that data and pass it on in the POST. The name part gets an equal sign appended, resulting in <span Class="emphasis">name=urlencoded-file-content</span>. Note that the name is expected to be URL-encoded already. 
+<p class="level1">
+<p class="level0"><a name="--delegation"></a><span class="nroffip">--delegation LEVEL</span> 
+<p class="level1">Set <span Class="emphasis">LEVEL</span> to tell the server what it is allowed to delegate when it comes to user credentials. Used with GSS/kerberos. 
+<p class="level2">
+<p class="level1"><a name="none"></a><span class="nroffip">none</span> 
+<p class="level2">Don't allow any delegation. 
+<p class="level1"><a name="policy"></a><span class="nroffip">policy</span> 
+<p class="level2">Delegates if and only if the OK-AS-DELEGATE flag is set in the Kerberos service ticket, which is a matter of realm policy. 
+<p class="level1"><a name="always"></a><span class="nroffip">always</span> 
+<p class="level2">Unconditionally allow the server to delegate. 
+<p class="level1">
+<p class="level0"><a name="--digest"></a><span class="nroffip">--digest</span> 
+<p class="level1">(HTTP) Enables HTTP Digest authentication. This is an authentication scheme that prevents the password from being sent over the wire in clear text. Use this in combination with the normal <a class="emphasis" href="#-u">-u, --user</a> option to set user name and password. See also <a class="emphasis" href="#--ntlm">--ntlm</a>, <a class="emphasis" href="#--negotiate">--negotiate</a> and <a class="emphasis" href="#--anyauth">--anyauth</a> for related options. 
+<p class="level1">If this option is used several times, only the first one is used. 
+<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). 
+<p class="level1">This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. (Added in 7.33.0) 
+<p class="level0"><a name="--dns-ipv4-addr"></a><span class="nroffip">--dns-ipv4-addr &lt;ip-address&gt;</span> 
+<p class="level1">Tell curl to bind to &lt;ip-address&gt; when making IPv4 DNS requests, so that the DNS requests originate from this address. The argument should be a single IPv4 address. 
+<p class="level1">This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one.  (Added in 7.33.0) 
+<p class="level0"><a name="--dns-ipv6-addr"></a><span class="nroffip">--dns-ipv6-addr &lt;ip-address&gt;</span> 
+<p class="level1">Tell curl to bind to &lt;ip-address&gt; when making IPv6 DNS requests, so that the DNS requests originate from this address. The argument should be a single IPv6 address. 
+<p class="level1">This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one.  (Added in 7.33.0) 
+<p class="level0"><a name="--dns-servers"></a><span class="nroffip">--dns-servers &lt;ip-address,ip-address&gt;</span> 
+<p class="level1">Set the list of DNS servers to be used instead of the system default. The list of IP addresses should be separated with commas. Port numbers may also optionally be given as <span Class="emphasis">:&lt;port-number&gt;</span> after each IP address. 
+<p class="level1">This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one.  (Added in 7.33.0) 
+<p class="level0"><a name="-e"></a><span class="nroffip">-e, --referer &lt;URL&gt;</span> 
+<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&#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 macOS 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. 
+<p class="level0"><a name="--environment"></a><span class="nroffip">--environment</span> 
+<p class="level1">(RISC OS ONLY) Sets a range of environment variables, using the names the <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. 
+<p class="level0"><a name="--cacert"></a><span class="nroffip">--cacert &lt;CA certificate&gt;</span> 
+<p class="level1">(SSL) Tells curl to use the specified certificate file to verify the peer. The file may contain multiple CA certificates. The certificate(s) must be in PEM format. Normally curl is built to use a default file for this, so this option is typically used to alter that default file. 
+<p class="level1">curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is set, and uses the given path as a path to a CA cert bundle. This option overrides that variable. 
+<p class="level1">The windows version of curl will automatically look for a CA certs file named &acute;curl-ca-bundle.crt&acute;, either in the same directory as curl.exe, or in the Current Working Directory, or in any folder along your PATH. 
+<p class="level1">If curl is built against the NSS SSL library, the NSS PEM PKCS&#35;11 module (libnsspem.so) needs to be available for this option to work properly. 
+<p class="level1">(iOS and macOS only) If curl is built against Secure Transport, then this option is supported for backward compatibility with other SSL engines, but it should not be set. If the option is not set, then curl will use the certificates in the system and user Keychain to verify the peer, which is the preferred method of verifying the peer's certificate chain. 
+<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 (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">PEM/DER support: &nbsp; 7.39.0: OpenSSL, GnuTLS and GSKit &nbsp; 7.43.0: NSS and wolfSSL/CyaSSL &nbsp; 7.47.0: mbedtls &nbsp; 7.49.0: PolarSSL sha256 support: &nbsp; 7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL. &nbsp; 7.47.0: mbedtls &nbsp; 7.49.0: PolarSSL 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). 
+<p class="level0"><a name="-F"></a><span class="nroffip">-F, --form &lt;name=content&gt;</span> 
+<p class="level1">(HTTP) This lets curl emulate a filled-in form in which a user has pressed the submit button. This causes curl to POST data using the Content-Type multipart/form-data according to <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 an image to a server, where 'profile' is the name of the form-field to which portrait.jpg will be the input: 
+<p class="level1"><span Class="bold">curl</span> -F profile=@portrait.jpg <a href="https://example.com/upload.cgi">https://example.com/upload.cgi</a> 
+<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" example.com 
+<p class="level1">or 
+<p class="level1"><span Class="bold">curl</span> -F "name=daniel;type=text/foo" example.com 
+<p class="level1">You can also explicitly change the name field of a file upload part by setting filename=, like this: 
+<p class="level1"><span Class="bold">curl</span> -F "file=@localfile;filename=nameinpost" example.com 
+<p class="level1">If filename/path contains ',' or ';', it must be quoted by double-quotes like: 
+<p class="level1"><span Class="bold">curl</span> -F "file=@\"localfile\";filename=\"nameinpost\"" example.com 
+<p class="level1">or 
+<p class="level1"><span Class="bold">curl</span> -F 'file=@"localfile";filename="nameinpost"' example.com 
+<p class="level1">Note that if a filename/path is quoted by double-quotes, any double-quote or backslash within the filename must be escaped by backslash. 
+<p class="level1">See further examples and details in the MANUAL. 
+<p class="level1">This option can be used multiple times. 
+<p class="level0"><a name="--ftp-account"></a><span class="nroffip">--ftp-account [data]</span> 
+<p class="level1">(FTP) When an FTP server asks for "account data" after user name and password has been provided, this data is sent off using the ACCT command. (Added in 7.13.0) 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--ftp-alternative-to-user"></a><span class="nroffip">--ftp-alternative-to-user &lt;command&gt;</span> 
+<p class="level1">(FTP) If authenticating with the USER and PASS commands fails, send this command.  When connecting to Tumbleweed's Secure Transport server over FTPS using a client certificate, using "SITE AUTH" will tell the server to retrieve the username from the certificate. (Added in 7.15.5) 
+<p class="level0"><a name="--ftp-create-dirs"></a><span class="nroffip">--ftp-create-dirs</span> 
+<p class="level1">(FTP/SFTP) When an FTP or SFTP URL/operation uses a path that doesn't currently exist on the server, the standard behavior of curl is to fail. Using this option, curl will instead attempt to create missing directories. 
+<p class="level0"><a name="--ftp-method"></a><span class="nroffip">--ftp-method [method]</span> 
+<p class="level1">(FTP) Control what method curl should use to reach a file on an FTP(S) server. The method argument should be one of the following alternatives: 
+<p class="level2">
+<p class="level1"><a name="multicwd"></a><span class="nroffip">multicwd</span> 
+<p class="level2">curl does a single CWD operation for each path part in the given URL. For deep hierarchies this means very many commands. This is how <a href="http://www.ietf.org/rfc/rfc1738.txt">RFC 1738</a> says it should be done. This is the default but the slowest behavior. 
+<p class="level1"><a name="nocwd"></a><span class="nroffip">nocwd</span> 
+<p class="level2">curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full path to the server for all these commands. This is the fastest behavior. 
+<p class="level1"><a name="singlecwd"></a><span class="nroffip">singlecwd</span> 
+<p class="level2">curl does one CWD with the full target directory and then operates on the file "normally" (like in the multicwd case). This is somewhat more standards compliant than 'nocwd' but without the full penalty of 'multicwd'. 
+<p class="level1">
+<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) 
+<p class="level1">If this option is used several times, only the first one is used. Undoing an enforced passive really isn't doable but you must then instead enforce the correct <a class="emphasis" href="#-P">-P, --ftp-port</a> again. 
+<p class="level1">Passive mode means that curl will try the EPSV command first and then PASV, unless <a class="emphasis" href="#--disable-epsv">--disable-epsv</a> is used. 
+<p class="level0"><a name="--ftp-skip-pasv-ip"></a><span class="nroffip">--ftp-skip-pasv-ip</span> 
+<p class="level1">(FTP) Tell curl to not use the IP address the server suggests in its response to curl's PASV command when curl connects the data connection. Instead curl will re-use the same IP address it already uses for the control connection. (Added in 7.14.2) 
+<p class="level1">This option has no effect if PORT, EPRT or EPSV is used instead of PASV. 
+<p class="level0"><a name="--ftp-pret"></a><span class="nroffip">--ftp-pret</span> 
+<p class="level1">(FTP) Tell curl to send a PRET command before PASV (and EPSV). Certain FTP servers, mainly drftpd, require this non-standard command for directory listings as well as up and downloads in PASV mode. (Added in 7.20.x) 
+<p class="level0"><a name="--ftp-ssl-ccc"></a><span class="nroffip">--ftp-ssl-ccc</span> 
+<p class="level1">(FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer after authenticating. The rest of the control channel communication will be unencrypted. This allows NAT routers to follow the FTP transaction. The default mode is passive. See <a class="emphasis" href="#--ftp-ssl-ccc-mode">--ftp-ssl-ccc-mode</a> for other modes. (Added in 7.16.1) 
+<p class="level0"><a name="--ftp-ssl-ccc-mode"></a><span class="nroffip">--ftp-ssl-ccc-mode [active/passive]</span> 
+<p class="level1">(FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The passive mode will not initiate the shutdown, but instead wait for the server to do it, and will not reply to the shutdown from the server. The active mode initiates the shutdown and waits for a reply from the server. (Added in 7.16.2) 
+<p class="level0"><a name="--ftp-ssl-control"></a><span class="nroffip">--ftp-ssl-control</span> 
+<p class="level1">(FTP) Require SSL/TLS for the FTP login, clear for transfer.  Allows secure authentication, but non-encrypted data transfers for efficiency.  Fails the transfer if the server doesn't support SSL/TLS.  (Added in 7.16.0) that can still be used but will be removed in a future version. 
+<p class="level0"><a name="--ftp-ssl"></a><span class="nroffip">--ftp-ssl</span> 
+<p class="level1">(FTP) This deprecated option is now known as <a class="emphasis" href="#--ssl">--ssl</a>. 
+<p class="level0"><a name="--ftp-ssl-reqd"></a><span class="nroffip">--ftp-ssl-reqd</span> 
+<p class="level1">(FTP) This deprecated option is now known as <a class="emphasis" href="#--ssl-reqd">--ssl-reqd</a>. 
+<p class="level0"><a name="--form-string"></a><span class="nroffip">--form-string &lt;name=string&gt;</span> 
+<p class="level1">(HTTP) Similar to <span Class="emphasis">--form</span> except that the value string for the named parameter is used literally. Leading '@' and '&lt;' characters, and the ';type=' string in the value have no special meaning. Use this in preference to <span Class="emphasis">--form</span> if there's any possibility that the string value may accidentally trigger the '@' or '&lt;' features of <span Class="emphasis">--form</span>. 
+<p class="level0"><a name="-g"></a><span class="nroffip">-g, --globoff</span> 
+<p class="level1">This option switches off the "URL globbing parser". When you set this option, you can specify URLs that contain the letters {}[] without having them being interpreted by curl itself. Note that these letters are not normal legal URL contents but they should be encoded according to the URI standard. 
+<p class="level0"><a name="-G"></a><span class="nroffip">-G, --get</span> 
+<p class="level1">When used, this option will make all data specified with <a class="emphasis" href="#-d">-d, --data</a>, <a class="emphasis" href="#--data-binary">--data-binary</a> or <a class="emphasis" href="#--data-urlencode">--data-urlencode</a> to be used in an HTTP GET request instead of the POST request that otherwise would be used. The data will be appended to the URL with a '?' separator. 
+<p class="level1">If used in combination with -I, the POST data will instead be appended to the URL with a HEAD request. 
+<p class="level1">If this option is used several times, only the first one is used. This is because undoing a GET doesn't make sense, but you should then instead enforce the alternative method you prefer. 
+<p class="level0"><a name="-H"></a><span class="nroffip">-H, --header &lt;header&gt;</span> 
+<p class="level1">(HTTP) Extra header to include in the request when sending HTTP to a server. You may specify any number of extra headers. Note that if you should add a custom header that has the same name as one of the internal ones curl would use, your externally set header will be used instead of the internal one. This allows you to make even trickier stuff than curl would normally do. You should not replace internally set headers without knowing perfectly well what you're doing. Remove an internal header by giving a replacement without content on the right side of the colon, as in: -H "Host:". If you send the custom header with no-value then its header must be terminated with a semicolon, such as -H "X-Custom-Header;" to send "X-Custom-Header:". 
+<p class="level1">curl will make sure that each header you add/replace is sent with the proper end-of-line marker, you should thus <span Class="bold">not</span> add that as a part of the header content: do not add newlines or carriage returns, they will only mess things up for you. 
+<p class="level1">See also the <a class="emphasis" href="#-A">-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">&#35; curl -H "X-First-Name: Joe" <a href="http://example.com/">http://example.com/</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">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> 
+<p class="level1">(HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on an FTP or FILE file, curl displays the file size and last modification time only. 
+<p class="level0"><a name="--interface"></a><span class="nroffip">--interface &lt;name&gt;</span> 
+<p class="level1">Perform an operation using a specified interface. You can enter interface name, IP address or host name. An example could look like: 
+<p class="level1">&nbsp;curl --interface eth0:1 <a href="https://www.example.com/">https://www.example.com/</a> 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-j"></a><span class="nroffip">-j, --junk-session-cookies</span> 
+<p class="level1">(HTTP) When curl is told to read cookies from a given file, this option will make it discard all "session cookies". This will basically have the same effect as if a new session is started. Typical browsers always discard session cookies when they're closed down. 
+<p class="level0"><a name="-J"></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">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 '&#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="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 class="level1">
+&#35; --- Example file ---
+&#35; this is a comment
+url = "example.com"
+output = "curlhere.html"
+user-agent = "superagent/1.0"
+&nbsp;
+&#35; and fetch another URL too
+url = "example.com/docs/manpage.html"
+-O
+referer = "http://nowhereatall.example.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. 
+<p class="level0"><a name="--keepalive-time"></a><span class="nroffip">--keepalive-time &lt;seconds&gt;</span> 
+<p class="level1">This option sets the time a connection needs to remain idle before sending keepalive probes and the time between individual keepalive probes. It is currently effective on operating systems offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options (meaning Linux, recent AIX, HP-UX and more). This option has no effect if <a class="emphasis" href="#--no-keepalive">--no-keepalive</a> is used. (Added in 7.18.0) 
+<p class="level1">If this option is used several times, the last one will be used. If unspecified, the option defaults to 60 seconds. 
+<p class="level0"><a name="--key"></a><span class="nroffip">--key &lt;key&gt;</span> 
+<p class="level1">(SSL/SSH) Private key file name. Allows you to provide your private key in this separate file. For SSH, if not specified, curl tries the following candidates in order: '~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--key-type"></a><span class="nroffip">--key-type &lt;type&gt;</span> 
+<p class="level1">(SSL) Private key file type. Specify which type your <a class="emphasis" href="#--key">--key</a> provided private key is. DER, PEM, and ENG are supported. If not specified, PEM is assumed. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--krb"></a><span class="nroffip">--krb &lt;level&gt;</span> 
+<p class="level1">(FTP) Enable Kerberos authentication and use. The level must be entered and should be one of 'clear', 'safe', 'confidential', or 'private'. Should you use a level that is not one of these, 'private' will instead be used. 
+<p class="level1">This option requires a library built with kerberos4 support. This is not very common. Use <a class="emphasis" href="#-V">-V, --version</a> to see if your curl supports it. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--krb4"></a><span class="nroffip">--krb4 &lt;level&gt;</span> 
+<p class="level1">(FTP) This is the former name for <a class="emphasis" href="#--krb">--krb</a>. Do not use. 
+<p class="level0"><a name="-l"></a><span class="nroffip">-l, --list-only</span> 
+<p class="level1">(FTP) When listing an FTP directory, this switch forces a name-only view. This is especially useful if the user wants to machine-parse the contents of an FTP directory since the normal directory view doesn't use a standard look or format. When used like this, the option causes a NLST command to be sent to the server instead of LIST. 
+<p class="level1">Note: Some FTP servers list only files in their response to NLST; they do not include sub-directories and symbolic links. 
+<p class="level1">(POP3) When retrieving a specific email from POP3, this switch forces a LIST command to be performed instead of RETR. This is particularly useful if the user wants to see if a specific message id exists on the server and what size it is. 
+<p class="level1">Note: When combined with <a class="emphasis" href="#-X">-X, --request &lt;command&gt;</a>, this option can be used to send an UIDL command instead, so the user may use the email's unique identifier rather than it's message id to make the request. (Added in 7.21.5) 
+<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 <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) 
+<p class="level0"><a name="--limit-rate"></a><span class="nroffip">--limit-rate &lt;speed&gt;</span> 
+<p class="level1">Specify the maximum transfer rate you want curl to use - for both downloads and uploads. This feature is useful if you have a limited pipe and you'd like your transfer not to use your entire bandwidth. To make it slower than it otherwise would be. 
+<p class="level1">The given speed is measured in bytes/second, unless a suffix is appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G. 
+<p class="level1">If you also use the <a class="emphasis" href="#-Y">-Y, --speed-limit</a> option, that option will take precedence and might cripple the rate-limiting slightly, to help keeping the speed-limit logic working. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--local-port"></a><span class="nroffip">--local-port &lt;num&gt;[-num]</span> 
+<p class="level1">Set a preferred number or range of local port numbers to use for the connection(s).  Note that port numbers by nature are a scarce resource that will be busy at times so setting this range to something too narrow might cause unnecessary connection setup failures. (Added in 7.15.2) 
+<p class="level0"><a name="--location-trusted"></a><span class="nroffip">--location-trusted</span> 
+<p class="level1">(HTTP/HTTPS) Like <a class="emphasis" href="#-L">-L, --location</a>, but will allow sending the name + password to all hosts that the site may redirect to. This may or may not introduce a security breach if the site redirects you to a site to which you'll send your authentication info (which is plaintext in the case of HTTP Basic authentication). 
+<p class="level0"><a name="-m"></a><span class="nroffip">-m, --max-time &lt;seconds&gt;</span> 
+<p class="level1">Maximum time in seconds that you allow the whole operation to take.  This is useful for preventing your batch jobs from hanging for hours due to slow networks or links going down.  Since 7.32.0, this option accepts decimal values, but the actual timeout will decrease in accuracy as the specified timeout increases in decimal precision.  See also the <a class="emphasis" href="#--connect-timeout">--connect-timeout</a> option. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--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>, <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. 
+<p class="level1">(Added in 7.25.0) 
+<p class="level0"><a name="--mail-from"></a><span class="nroffip">--mail-from &lt;address&gt;</span> 
+<p class="level1">(SMTP) Specify a single address that the given mail should get sent from. 
+<p class="level1">(Added in 7.20.0) 
+<p class="level0"><a name="--max-filesize"></a><span class="nroffip">--max-filesize &lt;bytes&gt;</span> 
+<p class="level1">Specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and curl will return with exit code 63. 
+<p class="level1"><span Class="bold">NOTE:</span> The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers. 
+<p class="level0"><a name="--mail-rcpt"></a><span class="nroffip">--mail-rcpt &lt;address&gt;</span> 
+<p class="level1">(SMTP) Specify a single address, user name or mailing list name. Repeat this option several times to send to multiple recipients. 
+<p class="level1">When performing a mail transfer, the recipient should specify a valid email address to send the mail to. (Added in 7.20.0) 
+<p class="level1">When performing an address verification (VRFY command), the recipient should be specified as the user name or user name and domain (as per Section 3.5 of <a href="http://www.ietf.org/rfc/rfc5321.txt">RFC 5321</a>). (Added in 7.34.0) 
+<p class="level1">When performing a mailing list expand (EXPN command), the recipient should be specified using the mailing list name, such as "Friends" or "London-Office". (Added in 7.34.0) 
+<p class="level0"><a name="--max-redirs"></a><span class="nroffip">--max-redirs &lt;num&gt;</span> 
+<p class="level1">Set maximum number of redirection-followings allowed. If <a class="emphasis" href="#-L">-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 (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://): 
+<p class="level1"><span Class="bold">curl</span> --metalink file://example.metalink 
+<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="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> 
+<p class="level1">Disables the buffering of the output stream. In normal work situations, curl will use a standard buffered output stream that will have the effect that it will output the data in chunks, not necessarily exactly when the data arrives. Using this option will disable that buffering. 
+<p class="level1">Note that this is the negated option name documented. You can thus use <span Class="emphasis">--buffer</span> to enforce the buffering. 
+<p class="level0"><a name="--netrc-file"></a><span class="nroffip">--netrc-file</span> 
+<p class="level1">This option is similar to <span Class="emphasis">--netrc</span>, except that you provide the path (absolute or relative) to the netrc file that Curl should use. You can only specify one netrc file per invocation. If several <a class="emphasis" href="#--netrc-file">--netrc-file</a> options are provided, only the <span Class="bold">last one</span> will be used. (Added in 7.21.5) 
+<p class="level1">This option overrides any use of <span Class="emphasis">--netrc</span> as they are mutually exclusive. It will also abide by <a class="emphasis" href="#--netrc-optional">--netrc-optional</a> if specified. 
+<p class="level1">
+<p class="level0"><a name="--netrc-optional"></a><span class="nroffip">--netrc-optional</span> 
+<p class="level1">Very similar to <span Class="emphasis">--netrc</span>, but this option makes the .netrc usage <span Class="bold">optional</span> and not mandatory as the <span Class="emphasis">--netrc</span> option does. 
+<p class="level1">
+<p class="level0"><a name="--negotiate"></a><span class="nroffip">--negotiate</span> 
+<p class="level1">(HTTP) Enables Negotiate (SPNEGO) authentication. 
+<p class="level1">If you want to enable Negotiate (SPNEGO) for proxy authentication, then use <a class="emphasis" href="#--proxy-negotiate">--proxy-negotiate</a>. 
+<p class="level1">This option requires a library built with GSS-API or SSPI support. Use <span class="emphasis">-V, --version</span> to see if your curl supports GSS-API/SSPI and SPNEGO. 
+<p class="level1">When using this option, you must also provide a fake <a class="emphasis" href="#-u">-u, --user</a> option to activate the authentication code properly. Sending a '-u :' is enough as the user name and password from the <a class="emphasis" href="#-u">-u</a> option aren't actually used. 
+<p class="level1">If this option is used several times, only the first one is used. 
+<p class="level0"><a name="--no-keepalive"></a><span class="nroffip">--no-keepalive</span> 
+<p class="level1">Disables the use of keepalive messages on the TCP connection, as by default curl enables them. 
+<p class="level1">Note that this is the negated option name documented. You can thus use <span Class="emphasis">--keepalive</span> to enforce keepalive. 
+<p class="level0"><a name="--no-sessionid"></a><span class="nroffip">--no-sessionid</span> 
+<p class="level1">(SSL) Disable curl's use of SSL session-ID caching.  By default all transfers are done using the cache. Note that while nothing should ever get hurt by attempting to reuse SSL session-IDs, there seem to be broken SSL implementations in the wild that may require you to disable this in order for you to succeed. (Added in 7.16.0) 
+<p class="level1">Note that this is the negated option name documented. You can thus use <span Class="emphasis">--sessionid</span> to enforce session-ID caching. 
+<p class="level0"><a name="--noproxy"></a><span class="nroffip">--noproxy &lt;no-proxy-list&gt;</span> 
+<p class="level1">Comma-separated list of hosts which do not use a proxy, if one is specified. The only wildcard is a single * character, which matches all hosts, and effectively disables the proxy. Each name in this list is matched as either a domain which contains the hostname, or the hostname itself. For example, local.com would match local.com, local.com:80, and www.local.com, but not www.notlocal.com.  (Added in 7.19.4). 
+<p class="level0"><a name="--connect-to"></a><span class="nroffip">--connect-to &lt;host:port:connect-to-host:connect-to-port&gt;</span> 
+<p class="level1">For a request to the given "host:port" pair, connect to "connect-to-host:connect-to-port" instead. This is suitable to direct the request at a specific server, e.g. at a specific cluster node in a cluster of servers. This option is only used to establish the network connection. It does NOT affect the hostname/port that is used for TLS/SSL (e.g. SNI, certificate verification) or for the application protocols. "host" and "port" may be the empty string, meaning "any host/port". "connect-to-host" and "connect-to-port" may also be the empty string, meaning "use the request's original host/port". This option can be used many times to add many connect rules. (Added in 7.49.0). 
+<p class="level0"><a name="--ntlm"></a><span class="nroffip">--ntlm</span> 
+<p class="level1">(HTTP) Enables NTLM authentication. The NTLM authentication method was designed by Microsoft and is used by IIS web servers. It is a proprietary protocol, reverse-engineered by clever people and implemented in curl based on their efforts. This kind of behavior should not be endorsed, you should encourage everyone who uses NTLM to switch to a public and documented authentication method instead, such as Digest. 
+<p class="level1">If you want to enable NTLM for your proxy authentication, then use <a class="emphasis" href="#--proxy-ntlm">--proxy-ntlm</a>. 
+<p class="level1">This option requires a library built with SSL support. Use <a class="emphasis" href="#-V">-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="--ntlm-wb"></a><span class="nroffip">--ntlm-wb</span> 
+<p class="level1">(HTTP) Enables NTLM much in the style <a class="emphasis" href="#--ntlm">--ntlm</a> does, but hand over the authentication to the separate binary ntlmauth application that is executed when needed. 
+<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 '&#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}.example.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 "&#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 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> 
+<p class="level1">(IMAP, POP3, SMTP) Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token is used in conjunction with the user name which can be specified as part of the <a class="emphasis" href="#--url">--url</a> or <a class="emphasis" href="#-u">-u, --user</a> options. 
+<p class="level1">The Bearer Token and user name are formatted according to <a href="http://www.ietf.org/rfc/rfc6750.txt">RFC 6750</a>. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--proxy-header"></a><span class="nroffip">--proxy-header &lt;header&gt;</span> 
+<p class="level1">(HTTP) Extra header to include in the request when sending HTTP to a proxy. You may specify any number of extra headers. This is the equivalent option to <a class="emphasis" href="#-H">-H, --header</a> but is for proxy communication only like in CONNECT requests when you want a separate header sent to the proxy to what is sent to the actual remote host. 
+<p class="level1">curl will make sure that each header you add/replace is sent with the proper end-of-line marker, you should thus <span Class="bold">not</span> add that as a part of the header content: do not add newlines or carriage returns, they will only mess things up for you. 
+<p class="level1">Headers specified with this option will not be included in requests that curl knows will not be sent to a proxy. 
+<p class="level1">This option can be used multiple times to add/replace/remove multiple headers. 
+<p class="level1">(Added in 7.37.0) 
+<p class="level0"><a name="-p"></a><span class="nroffip">-p, --proxytunnel</span> 
+<p class="level1">When an HTTP proxy is used (<a class="emphasis" href="#-x">-x, --proxy</a>), this option will cause non-HTTP protocols to attempt to tunnel through the proxy instead of merely using it to do HTTP-like operations. The tunnel approach is made with the HTTP proxy CONNECT request and requires that the proxy allows direct connect to the remote port number curl wants to tunnel through to. 
+<p class="level0"><a name="-P"></a><span class="nroffip">-P, --ftp-port &lt;address&gt;</span> 
+<p class="level1">(FTP) Reverses the default initiator/listener roles when connecting with FTP. This switch makes curl use active mode. In practice, curl then tells the server to connect back to the client's specified address and port, while passive mode asks the server to setup an IP address and port for it to connect to. &lt;address&gt; should be one of: 
+<p class="level2">
+<p class="level1"><a name="interface"></a><span class="nroffip">interface</span> 
+<p class="level2">i.e "eth0" to specify which interface's IP address you want to use (Unix only) 
+<p class="level1"><a name="IP"></a><span class="nroffip">IP address</span> 
+<p class="level2">i.e "192.168.10.1" to specify the exact IP address 
+<p class="level1"><a name="host"></a><span class="nroffip">host name</span> 
+<p class="level2">i.e "my.host.domain" to specify the machine 
+<p class="level1"><a name="-"></a><span class="nroffip">-</span> 
+<p class="level2">make curl pick the same IP address that is already used for the control connection 
+<p class="level1">
+<p class="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/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/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/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">
+<p class="level2"><a class="bold" href="#">+</a> Permit this protocol in addition to protocols already permitted (this is the default if no modifier is used). 
+<p class="level2"><a class="bold" href="#-">-</a> Deny this protocol, removing it from the list of protocols already permitted. 
+<p class="level2"><a class="bold" href="#">=</a> Permit only this protocol (ignoring the list already permitted), though subject to later modification by subsequent entries in the comma separated list. 
+<p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip"></span> 
+<p class="level1">For example: 
+<p class="level2">
+<p class="level2"><a class="bold" href="#--proto">--proto -ftps</a> uses the default protocols, but disables ftps 
+<p class="level2"><a class="bold" href="#--proto">--proto -all,https,+http</a> only enables http and https 
+<p class="level2"><a class="bold" href="#--proto">--proto =http,https</a> also only enables http and https 
+<p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip"></span> 
+<p class="level1">Unknown protocols produce a warning. This allows scripts to safely rely on being able to disable potentially dangerous protocols, without relying upon support for that protocol being built into curl to avoid an error. 
+<p class="level1">This option can be used multiple times, in which case the effect is the same as concatenating the protocols into one instance of the option. 
+<p class="level1">(Added in 7.20.2) 
+<p class="level0"><a name="--proto-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 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) 
+<p class="level0"><a name="--proxy-basic"></a><span class="nroffip">--proxy-basic</span> 
+<p class="level1">Tells curl to use HTTP Basic authentication when communicating with the given proxy. Use <a class="emphasis" href="#--basic">--basic</a> for enabling HTTP Basic with a remote host. Basic is the default authentication method curl uses with proxies. 
+<p class="level0"><a name="--proxy-digest"></a><span class="nroffip">--proxy-digest</span> 
+<p class="level1">Tells curl to use HTTP Digest authentication when communicating with the given proxy. Use <a class="emphasis" href="#--digest">--digest</a> for enabling HTTP Digest with a remote host. 
+<p class="level0"><a name="--proxy-negotiate"></a><span class="nroffip">--proxy-negotiate</span> 
+<p class="level1">Tells curl to use HTTP Negotiate (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. 
+<p class="level0"><a name="--pubkey"></a><span class="nroffip">--pubkey &lt;key&gt;</span> 
+<p class="level1">(SSH) Public key file name. Allows you to provide your public key in this separate file. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level1">(As of 7.39.0, curl attempts to automatically extract the public key from the private key file, so passing this option is generally not required. Note that this public key extraction requires libcurl to be linked against a copy of libssh2 1.2.8 or higher that is itself linked against OpenSSL.) 
+<p class="level0"><a name="-q"></a><span class="nroffip">-q, --disable</span> 
+<p class="level1">If used as the first parameter on the command line, the <span Class="emphasis">curlrc</span> config file will not be read and used. See the <a class="emphasis" href="#-K">-K, --config</a> for details on the default config file search path. 
+<p class="level0"><a name="-Q"></a><span class="nroffip">-Q, --quote &lt;command&gt;</span> 
+<p class="level1">(FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP server. Quote commands are sent BEFORE the transfer takes place (just after the initial PWD command in an FTP transfer, to be exact). To make commands take place after a successful transfer, prefix them with a dash '-'.  To make commands be sent after curl has changed the working directory, just before the transfer command(s), prefix the command with a '+' (this is only supported for FTP). You may specify any number of commands. If the server returns failure for one of the commands, the entire operation will be aborted. You must send syntactically correct FTP commands as <a href="http://www.ietf.org/rfc/rfc959.txt">RFC 959</a> defines to FTP servers, or one of the commands listed below to SFTP servers.  This option can be used multiple times. When speaking to an FTP server, prefix the command with an asterisk (*) to make curl continue even if the command fails as by default curl will stop at first failure. 
+<p class="level1">SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP quote commands itself before sending them to the server.  File names may be quoted shell-style to embed spaces or special characters.  Following is the list of all supported SFTP quote commands: 
+<p class="level2">
+<p class="level1"><a name="chgrp"></a><span class="nroffip">chgrp group file</span> 
+<p class="level2">The chgrp command sets the group ID of the file named by the file operand to the group ID specified by the group operand. The group operand is a decimal integer group ID. 
+<p class="level1"><a name="chmod"></a><span class="nroffip">chmod mode file</span> 
+<p class="level2">The chmod command modifies the file mode bits of the specified file. The mode operand is an octal integer mode number. 
+<p class="level1"><a name="chown"></a><span class="nroffip">chown user file</span> 
+<p class="level2">The chown command sets the owner of the file named by the file operand to the user ID specified by the user operand. The user operand is a decimal integer user ID. 
+<p class="level1"><a name="ln"></a><span class="nroffip">ln source_file target_file</span> 
+<p class="level2">The ln and symlink commands create a symbolic link at the target_file location pointing to the source_file location. 
+<p class="level1"><a name="mkdir"></a><span class="nroffip">mkdir directory_name</span> 
+<p class="level2">The mkdir command creates the directory named by the directory_name operand. 
+<p class="level1"><a name="pwd"></a><span class="nroffip">pwd</span> 
+<p class="level2">The pwd command returns the absolute pathname of the current working directory. 
+<p class="level1"><a name="rename"></a><span class="nroffip">rename source target</span> 
+<p class="level2">The rename command renames the file or directory named by the source operand to the destination path named by the target operand. 
+<p class="level1"><a name="rm"></a><span class="nroffip">rm file</span> 
+<p class="level2">The rm command removes the file specified by the file operand. 
+<p class="level1"><a name="rmdir"></a><span class="nroffip">rmdir directory</span> 
+<p class="level2">The rmdir command removes the directory entry specified by the directory operand, provided it is empty. 
+<p class="level1"><a name="symlink"></a><span class="nroffip">symlink source_file target_file</span> 
+<p class="level2">See ln. 
+<p class="level1">
+<p class="level0"><a name="-r"></a><span class="nroffip">-r, --range &lt;range&gt;</span> 
+<p class="level1">(HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial document) from a HTTP/1.1, FTP or SFTP server or a local FILE. Ranges can be specified in a number of ways. 
+<p class="level2">
+<p class="level2"><span Class="bold">0-499</span> specifies the first 500 bytes 
+<p class="level2"><span Class="bold">500-999</span> specifies the second 500 bytes 
+<p class="level2"><span Class="bold">-500</span> specifies the last 500 bytes 
+<p class="level2"><span Class="bold">9500-</span> specifies the bytes from offset 9500 and forward 
+<p class="level2"><span Class="bold">0-0,-1</span> specifies the first and last byte only(*)(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. 
+<p class="level1">FTP and SFTP range downloads only support the simple 'start-stop' syntax (optionally with one of the numbers omitted). FTP use depends on the extended FTP command SIZE. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-R"></a><span class="nroffip">-R, --remote-time</span> 
+<p class="level1">When used, this will make curl attempt to figure out the timestamp of the remote file, and if that is available make the local file get that same timestamp. 
+<p class="level0"><a name="--random-file"></a><span class="nroffip">--random-file &lt;file&gt;</span> 
+<p class="level1">(SSL) Specify the path name to file containing what will be considered as random data. The data is used to seed the random engine for SSL connections. See also the <a class="emphasis" href="#--egd-file">--egd-file</a> option. 
+<p class="level0"><a name="--raw"></a><span class="nroffip">--raw</span> 
+<p class="level1">(HTTP) When used, it disables all internal HTTP decoding of content or transfer encodings and instead makes them passed on unaltered, raw. (Added in 7.16.2) 
+<p class="level0"><a name="--remote-name-all"></a><span class="nroffip">--remote-name-all</span> 
+<p class="level1">This option changes the default action for all given URLs to be dealt with as if <a class="emphasis" href="#-O">-O, --remote-name</a> were used for each one. So if you want to disable that for a specific URL after <a class="emphasis" href="#--remote-name-all">--remote-name-all</a> has been used, you must use "-o -" or <span Class="emphasis">--no-remote-name</span>. (Added in 7.19.0) 
+<p class="level0"><a name="--resolve"></a><span class="nroffip">--resolve &lt;host:port:address&gt;</span> 
+<p class="level1">Provide a custom address for a specific host and port pair. Using this, you can make the curl requests(s) use a specified address and prevent the otherwise normally resolved address to be used. Consider it a sort of /etc/hosts alternative provided on the command line. The port number should be the number used for the specific protocol the host will be used for. It means you need several entries if you want to provide address for the same host but different ports. 
+<p class="level1">The provided address set by this option will be used even if <a class="emphasis" href="#-4">-4, --ipv4</a> or <a class="emphasis" href="#-6">-6, --ipv6</a> is set to make curl use another IP version. 
+<p class="level1">This option can be used many times to add many host names to resolve. 
+<p class="level1">(Added in 7.21.3) 
+<p class="level0"><a name="--retry"></a><span class="nroffip">--retry &lt;num&gt;</span> 
+<p class="level1">If a transient error is returned when curl tries to perform a transfer, it will retry this number of times before giving up. Setting the number to 0 makes curl do no retries (which is the default). Transient error means either: a timeout, an FTP 4xx response code or an HTTP 5xx response code. 
+<p class="level1">When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries.  By using <a class="emphasis" href="#--retry-delay">--retry-delay</a> you disable this exponential backoff algorithm. See also <a class="emphasis" href="#--retry-max-time">--retry-max-time</a> to limit the total time allowed for retries. (Added in 7.12.3) 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--retry-delay"></a><span class="nroffip">--retry-delay &lt;seconds&gt;</span> 
+<p class="level1">Make curl sleep this amount of time before each retry when a transfer has failed with a transient error (it changes the default backoff time algorithm between retries). This option is only interesting if <a class="emphasis" href="#--retry">--retry</a> is also used. Setting this delay to zero will make curl use the default backoff time. (Added in 7.12.3) 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--retry-max-time"></a><span class="nroffip">--retry-max-time &lt;seconds&gt;</span> 
+<p class="level1">The retry timer is reset before the first transfer attempt. Retries will be done as usual (see <a class="emphasis" href="#--retry">--retry</a>) as long as the timer hasn't reached this given limit. Notice that if the timer hasn't reached the limit, the request will be made and while performing, it may take longer than this given time period. To limit a single request&acute;s maximum time, use <a class="emphasis" href="#-m">-m, --max-time</a>. Set this option to zero to not timeout retries. (Added in 7.12.3) 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-s"></a><span class="nroffip">-s, --silent</span> 
+<p class="level1">Silent or quiet mode. Don't show progress meter or error messages.  Makes Curl mute. 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> 
+<p class="level1">(FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.  Reverts to a non-secure connection if the server doesn't support SSL/TLS.  See also <a class="emphasis" href="#--ftp-ssl-control">--ftp-ssl-control</a> and <a class="emphasis" href="#--ssl-reqd">--ssl-reqd</a> for different levels of encryption required. (Added in 7.20.0) 
+<p class="level1">This option was formerly known as <a class="emphasis" href="#--ftp-ssl">--ftp-ssl</a> (Added in 7.11.0). That option name can still be used but will be removed in a future version. 
+<p class="level0"><a name="--ssl-reqd"></a><span class="nroffip">--ssl-reqd</span> 
+<p class="level1">(FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.  Terminates the connection if the server doesn't support SSL/TLS. (Added in 7.20.0) 
+<p class="level1">This option was formerly known as <a class="emphasis" href="#--ftp-ssl-reqd">--ftp-ssl-reqd</a>. 
+<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. 
+<p class="level1">Since 7.21.7, this option is superfluous since you can specify a socks4 proxy with <a class="emphasis" href="#-x">-x, --proxy</a> using a socks4:// protocol prefix. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--socks4a"></a><span class="nroffip">--socks4a &lt;host[:port]&gt;</span> 
+<p class="level1">Use the specified SOCKS4a proxy. If the port number is not specified, it is assumed at port 1080. (Added in 7.18.0) 
+<p class="level1">This option overrides any previous use of <a class="emphasis" href="#-x">-x, --proxy</a>, as they are mutually exclusive. 
+<p class="level1">Since 7.21.7, this option is superfluous since you can specify a socks4a proxy with <a class="emphasis" href="#-x">-x, --proxy</a> using a socks4a:// protocol prefix. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--socks5-hostname"></a><span class="nroffip">--socks5-hostname &lt;host[:port]&gt;</span> 
+<p class="level1">Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If the port number is not specified, it is assumed at port 1080. (Added in 7.18.0) 
+<p class="level1">This option overrides any previous use of <a class="emphasis" href="#-x">-x, --proxy</a>, as they are mutually exclusive. 
+<p class="level1">Since 7.21.7, this option is superfluous since you can specify a socks5 hostname proxy with <a class="emphasis" href="#-x">-x, --proxy</a> using a socks5h:// protocol prefix. 
+<p class="level1">If this option is used several times, the last one will be used. (This option was previously wrongly documented and used as --socks without the number appended.) 
+<p class="level0"><a name="--socks5"></a><span class="nroffip">--socks5 &lt;host[:port]&gt;</span> 
+<p class="level1">Use the specified SOCKS5 proxy - but resolve the host name locally. If the port number is not specified, it is assumed at port 1080. 
+<p class="level1">This option overrides any previous use of <a class="emphasis" href="#-x">-x, --proxy</a>, as they are mutually exclusive. 
+<p class="level1">Since 7.21.7, this option is superfluous since you can specify a socks5 proxy with <a class="emphasis" href="#-x">-x, --proxy</a> using a socks5:// protocol prefix. 
+<p class="level1">If this option is used several times, the last one will be used. (This option was previously wrongly documented and used as --socks without the number appended.) 
+<p class="level1">This option (as well as <a class="emphasis" href="#--socks4">--socks4</a>) does not work with IPV6, FTPS or LDAP. 
+<p class="level0"><a name="--socks5-gssapi-service"></a><span class="nroffip">--socks5-gssapi-service &lt;servicename&gt;</span> 
+<p class="level1">The default service name for a socks server is rcmd/server-fqdn. This option allows you to change it. 
+<p class="level1">Examples: --socks5 proxy-name <a class="emphasis" href="#--socks5-gssapi-service">--socks5-gssapi-service</a> sockd would use sockd/proxy-name --socks5 proxy-name <a class="emphasis" href="#--socks5-gssapi-service">--socks5-gssapi-service</a> sockd/real-name would use sockd/real-name for cases where the proxy-name does not match the principal name.  (Added in 7.19.4). 
+<p class="level0"><a name="--socks5-gssapi-nec"></a><span class="nroffip">--socks5-gssapi-nec</span> 
+<p class="level1">As part of the GSS-API negotiation a protection mode is negotiated. <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.  The option <a class="emphasis" href="#--socks5-gssapi-nec">--socks5-gssapi-nec</a> allows the unprotected exchange of the protection mode negotiation. (Added in 7.19.4). 
+<p class="level0"><a name="--stderr"></a><span class="nroffip">--stderr &lt;file&gt;</span> 
+<p class="level1">Redirect all writes to stderr to the specified file instead. If the file name is a plain '-', it is instead written to stdout. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-t"></a><span class="nroffip">-t, --telnet-option &lt;OPT=val&gt;</span> 
+<p class="level1">Pass options to the telnet protocol. Supported options are: 
+<p class="level1">TTYPE=&lt;term&gt; Sets the terminal type. 
+<p class="level1">XDISPLOC=&lt;X display&gt; Sets the X display location. 
+<p class="level1">NEW_ENV=&lt;var,val&gt; Sets an environment variable. 
+<p class="level0"><a name="-T"></a><span class="nroffip">-T, --upload-file &lt;file&gt;</span> 
+<p class="level1">This transfers the specified local file to the remote URL. If there is no file part in the specified URL, Curl will append the local file name. NOTE that you must use a trailing / on the last directory to really prove to Curl that there is no file name or curl will think that your last directory name is the remote file name to use. That will most likely cause the upload operation to fail. If this is used on an HTTP(S) server, the PUT command will be used. 
+<p class="level1">Use the file name "-" (a single dash) to use stdin instead of a given file. Alternately, the file name "." (a single period) may be specified instead of "-" to use stdin in non-blocking mode to allow reading server output while stdin is being uploaded. 
+<p class="level1">You can specify one -T for each URL on the command line. Each -T + URL pair specifies what to upload and to where. curl also supports "globbing" of the -T argument, meaning that you can upload multiple files to a single URL by using the same URL globbing style supported in the URL, like this: 
+<p class="level1">curl -T "{file1,file2}" <a href="http://www.example.com">http://www.example.com</a> 
+<p class="level1">or even 
+<p class="level1">curl -T "img[1-1000].png" <a href="ftp://ftp.example.com/upload/">ftp://ftp.example.com/upload/</a> 
+<p class="level0"><a name="--tcp-nodelay"></a><span class="nroffip">--tcp-nodelay</span> 
+<p class="level1">Turn on the TCP_NODELAY option. See the <span Class="emphasis">curl_easy_setopt(3)</span> man page for details about this option. (Added in 7.11.2) 
+<p class="level0"><a name="--tcp-fastopen"></a><span class="nroffip">--tcp-fastopen</span> 
+<p class="level1">Enable use of TCP Fast Open (RFC7413). (Added in 7.49.0) 
+<p class="level0"><a name="--tftp-blksize"></a><span class="nroffip">--tftp-blksize &lt;value&gt;</span> 
+<p class="level1">(TFTP) Set TFTP BLKSIZE option (must be &gt;512). This is the block size that curl will try to use when 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 (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> 
+<p class="level1">Set username for use with the TLS authentication method specified with <a class="emphasis" href="#--tlsauthtype">--tlsauthtype</a>. Requires that <a class="emphasis" href="#--tlspassword">--tlspassword</a> also be set.  (Added in 7.21.4) 
+<p class="level0"><a name="--tlsv10"></a><span class="nroffip">--tlsv1.0</span> 
+<p class="level1">(SSL) Forces curl to use TLS version 1.0 when negotiating with a remote TLS server. (Added in 7.34.0) 
+<p class="level0"><a name="--tlsv11"></a><span class="nroffip">--tlsv1.1</span> 
+<p class="level1">(SSL) Forces curl to use TLS version 1.1 when negotiating with a remote TLS server. (Added in 7.34.0) 
+<p class="level0"><a name="--tlsv12"></a><span class="nroffip">--tlsv1.2</span> 
+<p class="level1">(SSL) Forces curl to use TLS version 1.2 when negotiating with a remote TLS server. (Added in 7.34.0) 
+<p class="level0"><a name="--tr-encoding"></a><span class="nroffip">--tr-encoding</span> 
+<p class="level1">(HTTP) Request a compressed Transfer-Encoding response using one of the algorithms curl supports, and uncompress the data while receiving it. 
+<p class="level1">(Added in 7.21.6) 
+<p class="level0"><a name="--trace"></a><span class="nroffip">--trace &lt;file&gt;</span> 
+<p class="level1">Enables a full trace dump of all incoming and outgoing data, including descriptive information, to the given output file. Use "-" as filename to have the output sent to stdout. 
+<p class="level1">This option overrides previous uses of <a class="emphasis" href="#-v">-v, --verbose</a> or <a class="emphasis" href="#--trace-ascii">--trace-ascii</a>. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--trace-ascii"></a><span class="nroffip">--trace-ascii &lt;file&gt;</span> 
+<p class="level1">Enables a full trace dump of all incoming and outgoing data, including descriptive information, to the given output file. Use "-" as filename to have the output sent to stdout. 
+<p class="level1">This is very similar to <a class="emphasis" href="#--trace">--trace</a>, but leaves out the hex part and only shows the ASCII part of the dump. It makes smaller output that might be easier to read for untrained humans. 
+<p class="level1">This option overrides previous uses of <a class="emphasis" href="#-v">-v, --verbose</a> or <a class="emphasis" href="#--trace">--trace</a>. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--trace-time"></a><span class="nroffip">--trace-time</span> 
+<p class="level1">Prepends a time stamp to each trace or verbose line that curl displays. (Added in 7.14.0) 
+<p class="level0"><a name="--unix-socket"></a><span class="nroffip">--unix-socket &lt;path&gt;</span> 
+<p class="level1">(HTTP) Connect through this Unix domain socket, instead of using the network. (Added in 7.40.0) 
+<p class="level0"><a name="-u"></a><span class="nroffip">-u, --user &lt;user:password&gt;</span> 
+<p class="level1">Specify the user name and password to use for server authentication. Overrides <a class="emphasis" href="#-n">-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 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 :". 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-U"></a><span class="nroffip">-U, --proxy-user &lt;user:password&gt;</span> 
+<p class="level1">Specify the user name and password to use for proxy authentication. 
+<p class="level1">If you use a Windows SSPI-enabled curl binary and do either Negotiate or NTLM 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 :". 
+<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. 
+<p class="level1">Note that if you only want HTTP headers in the output, <a class="emphasis" href="#-i">-i, --include</a> might be the option you're looking for. 
+<p class="level1">If you think this option still doesn't give you enough details, consider using <a class="emphasis" href="#--trace">--trace</a> or <a class="emphasis" href="#--trace-ascii">--trace-ascii</a> instead. 
+<p class="level1">This option overrides previous uses of <a class="emphasis" href="#--trace-ascii">--trace-ascii</a> or <a class="emphasis" href="#--trace">--trace</a>. 
+<p class="level1">Use <a class="emphasis" href="#-s">-s, --silent</a> to make curl quiet. 
+<p class="level0"><a name="-w"></a><span class="nroffip">-w, --write-out &lt;format&gt;</span> 
+<p class="level1">Make curl display information on stdout after a completed transfer. The format is a string that may contain plain text mixed with any number of variables. The format can be specified as a literal "string", or you can have curl read the format from a file with "@filename" and to tell curl to read the format from stdin you write "@-". 
+<p class="level1">The variables present in the output format will be substituted by the value or text that curl thinks fit, as described below. All variables are specified as %{variable_name} and to output a normal % you just write them as %%. You can output a newline by using \n, a carriage return with \r and a tab space with \t. 
+<p class="level1"><span Class="bold">NOTE:</span> The %-symbol is a special symbol in the win32-environment, where all occurrences of % must be doubled when using this option. 
+<p class="level1">The variables available are: 
+<p class="level2">
+<p class="level2"><span Class="bold">content_type</span> The Content-Type of the requested document, if there was any. 
+<p class="level2"><span Class="bold">filename_effective</span> The ultimate filename that curl writes out to. This is only meaningful if curl is told to write to a file with the <span Class="emphasis">--remote-name</span> or <span Class="emphasis">--output</span> option. It's most useful in combination with the <span Class="emphasis">--remote-header-name</span> option. (Added in 7.26.0) 
+<p class="level2"><span Class="bold">ftp_entry_path</span> The initial path curl ended up in when logging on to the remote FTP server. (Added in 7.15.4) 
+<p class="level2"><span Class="bold">http_code</span> The numerical response code that was found in the last retrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias <span Class="bold">response_code</span> was added to show the same info. 
+<p class="level2"><span Class="bold">http_connect</span> The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4) 
+<p class="level2"><span Class="bold">http_version</span> The http version that was effectively used. (Added in 7.50.0) 
+<p class="level2"><span Class="bold">local_ip</span> The IP address of the local end of the most recently done connection - can be either IPv4 or IPv6 (Added in 7.29.0) 
+<p class="level2"><span Class="bold">local_port</span> The local port number of the most recently done connection (Added in 7.29.0) 
+<p class="level2"><span Class="bold">num_connects</span> Number of new connects made in the recent transfer. (Added in 7.12.3) 
+<p class="level2"><span Class="bold">num_redirects</span> Number of redirects that were followed in the request. (Added in 7.12.3) 
+<p class="level2"><span Class="bold">redirect_url</span> When an HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect <span Class="emphasis">would</span> take you to. (Added in 7.18.2) 
+<p class="level2"><span Class="bold">remote_ip</span> The remote IP address of the most recently done connection - can be either IPv4 or IPv6 (Added in 7.29.0) 
+<p class="level2"><span Class="bold">remote_port</span> The remote port number of the most recently done connection (Added in 7.29.0) 
+<p class="level2"><span Class="bold">size_download</span> The total amount of bytes that were downloaded. 
+<p class="level2"><span Class="bold">size_header</span> The total amount of bytes of the downloaded headers. 
+<p class="level2"><span Class="bold">size_request</span> The total amount of bytes that were sent in the HTTP request. 
+<p class="level2"><span Class="bold">size_upload</span> The total amount of bytes that were uploaded. 
+<p class="level2"><span Class="bold">speed_download</span> The average download speed that curl measured for the complete download. Bytes per second. 
+<p class="level2"><span Class="bold">speed_upload</span> The average upload speed that curl measured for the complete upload. Bytes per second. 
+<p class="level2"><span Class="bold">ssl_verify_result</span> The result of the SSL peer certificate verification that was requested. 0 means the verification was successful. (Added in 7.19.0) 
+<p class="level2"><span Class="bold">time_appconnect</span> The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0) 
+<p class="level2"><span Class="bold">time_connect</span> The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed. 
+<p class="level2"><span Class="bold">time_namelookup</span> The time, in seconds, it took from the start until the name resolving was completed. 
+<p class="level2"><span Class="bold">time_pretransfer</span> The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved. 
+<p class="level2"><span Class="bold">time_redirect</span> The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3) 
+<p class="level2"><span Class="bold">time_starttransfer</span> The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result. 
+<p class="level2"><span Class="bold">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. 
+<p class="level1">The proxy string can be specified with a protocol:// prefix to specify alternative proxy protocols. Use socks4://, socks4a://, socks5:// or socks5h:// to request the specific SOCKS version to be used. No protocol specified, http:// and all others will be treated as HTTP proxies. (The protocol support was added in curl 7.21.7) 
+<p class="level1">If the port number is not specified in the proxy string, it is assumed to be 1080. 
+<p class="level1">This option overrides existing environment variables that set the proxy to use. If there's an environment variable setting a proxy, you can set proxy to "" to override it. 
+<p class="level1">All operations that are performed over an HTTP proxy will transparently be converted to HTTP. It means that certain protocol specific operations might not be available. This is not the case if you can tunnel through the proxy, as one with the <a class="emphasis" href="#-p">-p, --proxytunnel</a> option. 
+<p class="level1">User and password that might be provided in the proxy string are URL decoded by curl. This allows you to pass in special characters such as @ by using %40 or pass in a colon with %3a. 
+<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 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) 
+<p class="level1">(SMTP) Specifies a custom SMTP command to use instead of HELP or VRFY. (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="--xattr"></a><span class="nroffip">--xattr</span> 
+<p class="level1">When saving output to a file, this option tells curl to store certain file metadata in extended file attributes. Currently, the URL is stored in the xdg.origin.url attribute and, for HTTP, the content type is stored in the mime_type attribute. If the file system does not support extended attributes, a warning is issued. 
+<p class="level1">
+<p class="level0"><a name="-y"></a><span class="nroffip">-y, --speed-time &lt;time&gt;</span> 
+<p class="level1">If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with <a class="emphasis" href="#-Y">-Y</a>. 
+<p class="level1">This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the <a class="emphasis" href="#--connect-timeout">--connect-timeout</a> option. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-Y"></a><span class="nroffip">-Y, --speed-limit &lt;speed&gt;</span> 
+<p class="level1">If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with <a class="emphasis" href="#-y">-y</a> and is 30 if not set. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-z"></a><span class="nroffip">-z, --time-cond &lt;date expression&gt;|&lt;file&gt;</span> 
+<p class="level1">(HTTP/FTP) Request a file that has been modified later than the given time and date, or one that has been modified before that time. The &lt;date expression&gt; can be all sorts of date strings or if it doesn't match any internal ones, it is taken as a filename and tries to get the modification date (mtime) from &lt;file&gt; instead. See the <span Class="emphasis">curl_getdate(3)</span> man pages for date expression details. 
+<p class="level1">Start the date expression with a dash (-) to make it request for a document that is older than the given date/time, default is a document that is newer than the specified date/time. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="-h"></a><span class="nroffip">-h, --help</span> 
+<p class="level1">Usage help. This lists all current command line options with a short description. 
+<p class="level0"><a name="-M"></a><span class="nroffip">-M, --manual</span> 
+<p class="level1">Manual. Display the huge help text. 
+<p class="level0"><a name="-V"></a><span class="nroffip">-V, --version</span> 
+<p class="level1">Displays information about curl and the libcurl version it uses. 
+<p class="level1">The first line includes the full version of curl, libcurl and other 3rd party libraries linked with the executable. 
+<p class="level1">The second line (starts with "Protocols:") shows all protocols that libcurl reports to support. 
+<p class="level1">The third line (starts with "Features:") shows specific features libcurl reports to offer. Available features include: 
+<p class="level2">
+<p class="level1"><a name="IPv6"></a><span class="nroffip">IPv6</span> 
+<p class="level2">You can use IPv6 with this. 
+<p class="level1"><a name="krb4"></a><span class="nroffip">krb4</span> 
+<p class="level2">Krb4 for FTP is supported. 
+<p class="level1"><a name="SSL"></a><span class="nroffip">SSL</span> 
+<p class="level2">SSL versions of various protocols are supported, such as HTTPS, FTPS, POP3S and so on. 
+<p class="level1"><a name="libz"></a><span class="nroffip">libz</span> 
+<p class="level2">Automatic decompression of compressed files over HTTP is supported. 
+<p class="level1"><a name="NTLM"></a><span class="nroffip">NTLM</span> 
+<p class="level2">NTLM authentication is supported. 
+<p class="level1"><a name="Debug"></a><span class="nroffip">Debug</span> 
+<p class="level2">This curl uses a libcurl built with Debug. This enables more error-tracking and memory debugging etc. For curl-developers only! 
+<p class="level1"><a name="AsynchDNS"></a><span class="nroffip">AsynchDNS</span> 
+<p class="level2">This curl uses asynchronous name resolves. Asynchronous name resolves can be done using either the c-ares or the threaded resolver backends. 
+<p class="level1"><a name="SPNEGO"></a><span class="nroffip">SPNEGO</span> 
+<p class="level2">SPNEGO authentication is supported. 
+<p class="level1"><a name="Largefile"></a><span class="nroffip">Largefile</span> 
+<p class="level2">This curl supports transfers of large files, files larger than 2GB. 
+<p class="level1"><a name="IDN"></a><span class="nroffip">IDN</span> 
+<p class="level2">This curl supports IDN - international domain names. 
+<p class="level1"><a name="GSS-API"></a><span class="nroffip">GSS-API</span> 
+<p class="level2">GSS-API is supported. 
+<p class="level1"><a name="SSPI"></a><span class="nroffip">SSPI</span> 
+<p class="level2">SSPI is supported. 
+<p class="level1"><a name="TLS-SRP"></a><span class="nroffip">TLS-SRP</span> 
+<p class="level2">SRP (Secure Remote Password) authentication is supported for TLS. 
+<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 (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>
+<p class="level0">The environment variables can be specified in lower case or upper case. The lower case version has precedence. http_proxy is an exception as it is only available in lower case. 
+<p class="level0">Using an environment variable to set the proxy has the same effect as using the <span Class="emphasis">--proxy</span> option. 
+<p class="level0">
+<p class="level0"><a name="httpproxy"></a><span class="nroffip">http_proxy [protocol://]&lt;host&gt;[:port]</span> 
+<p class="level1">Sets the proxy server to use for HTTP. 
+<p class="level0"><a name="HTTPSPROXY"></a><span class="nroffip">HTTPS_PROXY [protocol://]&lt;host&gt;[:port]</span> 
+<p class="level1">Sets the proxy server to use for HTTPS. 
+<p class="level0"><a name="url-protocolPROXY"></a><span class="nroffip">[url-protocol]_PROXY [protocol://]&lt;host&gt;[:port]</span> 
+<p class="level1">Sets the proxy server to use for [url-protocol], where the protocol is a protocol that curl supports and as specified in a URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP etc. 
+<p class="level0"><a name="ALLPROXY"></a><span class="nroffip">ALL_PROXY [protocol://]&lt;host&gt;[:port]</span> 
+<p class="level1">Sets the proxy server to use if no protocol-specific proxy is set. 
+<p class="level0"><a name="NOPROXY"></a><span class="nroffip">NO_PROXY &lt;comma-separated list of hosts&gt;</span> 
+<p class="level1">list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts. <a name="PROXY"></a><h2 class="nroffsh">PROXY PROTOCOL PREFIXES</h2>
+<p class="level0">Since curl version 7.21.7, the proxy string may be specified with a protocol:// prefix to specify alternative proxy protocols. 
+<p class="level0">If no protocol is specified in the proxy string or if the string doesn't match a supported one, the proxy will be treated as an HTTP proxy. 
+<p class="level0">The supported proxy protocol prefixes are as follows: 
+<p class="level0"><a name="socks4"></a><span class="nroffip">socks4://</span> 
+<p class="level1">Makes it the equivalent of <a class="emphasis" href="#--socks4">--socks4</a> 
+<p class="level0"><a name="socks4a"></a><span class="nroffip">socks4a://</span> 
+<p class="level1">Makes it the equivalent of <a class="emphasis" href="#--socks4a">--socks4a</a> 
+<p class="level0"><a name="socks5"></a><span class="nroffip">socks5://</span> 
+<p class="level1">Makes it the equivalent of <a class="emphasis" href="#--socks5">--socks5</a> 
+<p class="level0"><a name="socks5h"></a><span class="nroffip">socks5h://</span> 
+<p class="level1">Makes it the equivalent of <a class="emphasis" href="#--socks5-hostname">--socks5-hostname</a> <a name="EXIT"></a><h2 class="nroffsh">EXIT CODES</h2>
+<p class="level0">There are a bunch of different error codes and their corresponding error messages that may appear during bad conditions. At the time of this writing, the exit codes are: 
+<p class="level0"><a name="1"></a><span class="nroffip">1</span> 
+<p class="level1">Unsupported protocol. This build of curl has no support for this protocol. 
+<p class="level0"><a name="2"></a><span class="nroffip">2</span> 
+<p class="level1">Failed to initialize. 
+<p class="level0"><a name="3"></a><span class="nroffip">3</span> 
+<p class="level1">URL malformed. The syntax was not correct. 
+<p class="level0"><a name="4"></a><span class="nroffip">4</span> 
+<p class="level1">A feature or option that was needed to perform the desired request was not enabled or was explicitly disabled at build-time. To make curl able to do this, you probably need another build of libcurl! 
+<p class="level0"><a name="5"></a><span class="nroffip">5</span> 
+<p class="level1">Couldn't resolve proxy. The given proxy host could not be resolved. 
+<p class="level0"><a name="6"></a><span class="nroffip">6</span> 
+<p class="level1">Couldn't resolve host. The given remote host was not resolved. 
+<p class="level0"><a name="7"></a><span class="nroffip">7</span> 
+<p class="level1">Failed to connect to host. 
+<p class="level0"><a name="8"></a><span class="nroffip">8</span> 
+<p class="level1">FTP weird server reply. The server sent data curl couldn't parse. 
+<p class="level0"><a name="9"></a><span class="nroffip">9</span> 
+<p class="level1">FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server. 
+<p class="level0"><a name="11"></a><span class="nroffip">11</span> 
+<p class="level1">FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request. 
+<p class="level0"><a name="13"></a><span class="nroffip">13</span> 
+<p class="level1">FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request. 
+<p class="level0"><a name="14"></a><span class="nroffip">14</span> 
+<p class="level1">FTP weird 227 format. Curl couldn't parse the 227-line the server sent. 
+<p class="level0"><a name="15"></a><span class="nroffip">15</span> 
+<p class="level1">FTP can't get host. Couldn't resolve the host IP we got in the 227-line. 
+<p class="level0"><a name="17"></a><span class="nroffip">17</span> 
+<p class="level1">FTP couldn't set binary. Couldn't change transfer method to binary. 
+<p class="level0"><a name="18"></a><span class="nroffip">18</span> 
+<p class="level1">Partial file. Only a part of the file was transferred. 
+<p class="level0"><a name="19"></a><span class="nroffip">19</span> 
+<p class="level1">FTP couldn't download/access the given file, the RETR (or similar) command failed. 
+<p class="level0"><a name="21"></a><span class="nroffip">21</span> 
+<p class="level1">FTP quote error. A quote command returned error from the server. 
+<p class="level0"><a name="22"></a><span class="nroffip">22</span> 
+<p class="level1">HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if <a class="emphasis" href="#-f">-f, --fail</a> is used. 
+<p class="level0"><a name="23"></a><span class="nroffip">23</span> 
+<p class="level1">Write error. Curl couldn't write data to a local filesystem or similar. 
+<p class="level0"><a name="25"></a><span class="nroffip">25</span> 
+<p class="level1">FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading. 
+<p class="level0"><a name="26"></a><span class="nroffip">26</span> 
+<p class="level1">Read error. Various reading problems. 
+<p class="level0"><a name="27"></a><span class="nroffip">27</span> 
+<p class="level1">Out of memory. A memory allocation request failed. 
+<p class="level0"><a name="28"></a><span class="nroffip">28</span> 
+<p class="level1">Operation timeout. The specified time-out period was reached according to the conditions. 
+<p class="level0"><a name="30"></a><span class="nroffip">30</span> 
+<p class="level1">FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead! 
+<p class="level0"><a name="31"></a><span class="nroffip">31</span> 
+<p class="level1">FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers. 
+<p class="level0"><a name="33"></a><span class="nroffip">33</span> 
+<p class="level1">HTTP range error. The range "command" didn't work. 
+<p class="level0"><a name="34"></a><span class="nroffip">34</span> 
+<p class="level1">HTTP post error. Internal post-request generation error. 
+<p class="level0"><a name="35"></a><span class="nroffip">35</span> 
+<p class="level1">SSL connect error. The SSL handshaking failed. 
+<p class="level0"><a name="36"></a><span class="nroffip">36</span> 
+<p class="level1">FTP bad download resume. Couldn't continue an earlier aborted download. 
+<p class="level0"><a name="37"></a><span class="nroffip">37</span> 
+<p class="level1">FILE couldn't read file. Failed to open the file. Permissions? 
+<p class="level0"><a name="38"></a><span class="nroffip">38</span> 
+<p class="level1">LDAP cannot bind. LDAP bind operation failed. 
+<p class="level0"><a name="39"></a><span class="nroffip">39</span> 
+<p class="level1">LDAP search failed. 
+<p class="level0"><a name="41"></a><span class="nroffip">41</span> 
+<p class="level1">Function not found. A required LDAP function was not found. 
+<p class="level0"><a name="42"></a><span class="nroffip">42</span> 
+<p class="level1">Aborted by callback. An application told curl to abort the operation. 
+<p class="level0"><a name="43"></a><span class="nroffip">43</span> 
+<p class="level1">Internal error. A function was called with a bad parameter. 
+<p class="level0"><a name="45"></a><span class="nroffip">45</span> 
+<p class="level1">Interface error. A specified outgoing interface could not be used. 
+<p class="level0"><a name="47"></a><span class="nroffip">47</span> 
+<p class="level1">Too many redirects. When following redirects, curl hit the maximum amount. 
+<p class="level0"><a name="48"></a><span class="nroffip">48</span> 
+<p class="level1">Unknown option specified to libcurl. This indicates that you passed a weird option to curl that was passed on to libcurl and rejected. Read up in the manual! 
+<p class="level0"><a name="49"></a><span class="nroffip">49</span> 
+<p class="level1">Malformed telnet option. 
+<p class="level0"><a name="51"></a><span class="nroffip">51</span> 
+<p class="level1">The peer's SSL certificate or SSH MD5 fingerprint was not OK. 
+<p class="level0"><a name="52"></a><span class="nroffip">52</span> 
+<p class="level1">The server didn't reply anything, which here is considered an error. 
+<p class="level0"><a name="53"></a><span class="nroffip">53</span> 
+<p class="level1">SSL crypto engine not found. 
+<p class="level0"><a name="54"></a><span class="nroffip">54</span> 
+<p class="level1">Cannot set SSL crypto engine as default. 
+<p class="level0"><a name="55"></a><span class="nroffip">55</span> 
+<p class="level1">Failed sending network data. 
+<p class="level0"><a name="56"></a><span class="nroffip">56</span> 
+<p class="level1">Failure in receiving network data. 
+<p class="level0"><a name="58"></a><span class="nroffip">58</span> 
+<p class="level1">Problem with the local certificate. 
+<p class="level0"><a name="59"></a><span class="nroffip">59</span> 
+<p class="level1">Couldn't use specified SSL cipher. 
+<p class="level0"><a name="60"></a><span class="nroffip">60</span> 
+<p class="level1">Peer certificate cannot be authenticated with known CA certificates. 
+<p class="level0"><a name="61"></a><span class="nroffip">61</span> 
+<p class="level1">Unrecognized transfer encoding. 
+<p class="level0"><a name="62"></a><span class="nroffip">62</span> 
+<p class="level1">Invalid LDAP URL. 
+<p class="level0"><a name="63"></a><span class="nroffip">63</span> 
+<p class="level1">Maximum file size exceeded. 
+<p class="level0"><a name="64"></a><span class="nroffip">64</span> 
+<p class="level1">Requested FTP SSL level failed. 
+<p class="level0"><a name="65"></a><span class="nroffip">65</span> 
+<p class="level1">Sending the data requires a rewind that failed. 
+<p class="level0"><a name="66"></a><span class="nroffip">66</span> 
+<p class="level1">Failed to initialise SSL Engine. 
+<p class="level0"><a name="67"></a><span class="nroffip">67</span> 
+<p class="level1">The user name, password, or similar was not accepted and curl failed to log in. 
+<p class="level0"><a name="68"></a><span class="nroffip">68</span> 
+<p class="level1">File not found on TFTP server. 
+<p class="level0"><a name="69"></a><span class="nroffip">69</span> 
+<p class="level1">Permission problem on TFTP server. 
+<p class="level0"><a name="70"></a><span class="nroffip">70</span> 
+<p class="level1">Out of disk space on TFTP server. 
+<p class="level0"><a name="71"></a><span class="nroffip">71</span> 
+<p class="level1">Illegal TFTP operation. 
+<p class="level0"><a name="72"></a><span class="nroffip">72</span> 
+<p class="level1">Unknown TFTP transfer ID. 
+<p class="level0"><a name="73"></a><span class="nroffip">73</span> 
+<p class="level1">File already exists (TFTP). 
+<p class="level0"><a name="74"></a><span class="nroffip">74</span> 
+<p class="level1">No such user (TFTP). 
+<p class="level0"><a name="75"></a><span class="nroffip">75</span> 
+<p class="level1">Character conversion failed. 
+<p class="level0"><a name="76"></a><span class="nroffip">76</span> 
+<p class="level1">Character conversion functions required. 
+<p class="level0"><a name="77"></a><span class="nroffip">77</span> 
+<p class="level1">Problem with reading the SSL CA cert (path? access rights?). 
+<p class="level0"><a name="78"></a><span class="nroffip">78</span> 
+<p class="level1">The resource referenced in the URL does not exist. 
+<p class="level0"><a name="79"></a><span class="nroffip">79</span> 
+<p class="level1">An unspecified error occurred during the SSH session. 
+<p class="level0"><a name="80"></a><span class="nroffip">80</span> 
+<p class="level1">Failed to shut down the SSL connection. 
+<p class="level0"><a name="82"></a><span class="nroffip">82</span> 
+<p class="level1">Could not load CRL file, missing or wrong format (added in 7.19.0). 
+<p class="level0"><a name="83"></a><span class="nroffip">83</span> 
+<p class="level1">Issuer check failed (added in 7.19.0). 
+<p class="level0"><a name="84"></a><span class="nroffip">84</span> 
+<p class="level1">The FTP PRET command failed 
+<p class="level0"><a name="85"></a><span class="nroffip">85</span> 
+<p class="level1">RTSP: mismatch of CSeq numbers 
+<p class="level0"><a name="86"></a><span class="nroffip">86</span> 
+<p class="level1">RTSP: mismatch of Session Identifiers 
+<p class="level0"><a name="87"></a><span class="nroffip">87</span> 
+<p class="level1">unable to parse FTP file list 
+<p class="level0"><a name="88"></a><span class="nroffip">88</span> 
+<p class="level1">FTP chunk callback reported error 
+<p class="level0"><a name="89"></a><span class="nroffip">89</span> 
+<p class="level1">No connection available, the session will be queued 
+<p class="level0"><a name="90"></a><span class="nroffip">90</span> 
+<p class="level1">SSL public key does not matched pinned public key 
+<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="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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/curl.pdf b/docs/curl.pdf
new file mode 100644 (file)
index 0000000..7240101
Binary files /dev/null and b/docs/curl.pdf differ
index 4555291..aa1862e 100644 (file)
@@ -86,7 +86,7 @@ static const char *urls[] = {
 };
 
 #define MAX 10 /* number of simultaneous transfers */
-#define CNT sizeof(urls)/sizeof(char *) /* total number of transfers to do */
+#define CNT sizeof(urls)/sizeof(char*) /* total number of transfers to do */
 
 static size_t cb(char *d, size_t n, size_t l, void *p)
 {
index 9fe9db4..2d85e73 100644 (file)
@@ -60,7 +60,7 @@ endif
 TARGET  = examples
 VERSION        = $(LIBCURL_VERSION)
 COPYR  = Copyright (C) $(LIBCURL_COPYRIGHT_STR)
-DESCR  = curl ($(LIBARCH))
+DESCR  = cURL ($(LIBARCH))
 MTSAFE = YES
 STACK  = 8192
 SCREEN = Example Program
index 1c9f965..b1367de 100644 (file)
@@ -147,13 +147,13 @@ 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);
index ced4ef4..d6065e5 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2012 - 2017, 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
@@ -40,8 +40,8 @@
  * Note:
  *  For the sake of simplicity, URL is hard coded to "www.google.com"
  *
- * 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.
  */
 
 
@@ -85,12 +85,14 @@ static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
   /* cancel running timer */
   timer.cancel();
 
-  if(timeout_ms > 0) {
+  if(timeout_ms > 0)
+  {
     /* update timer */
     timer.expires_from_now(boost::posix_time::millisec(timeout_ms));
     timer.async_wait(boost::bind(&timer_cb, _1, g));
   }
-  else {
+  else
+  {
     /* call timeout function immediately */
     boost::system::error_code error; /*success*/
     timer_cb(error, g);
@@ -102,9 +104,11 @@ 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) {
+    switch(code)
+    {
     case CURLM_CALL_MULTI_PERFORM:
       s = "CURLM_CALL_MULTI_PERFORM";
       break;
@@ -154,8 +158,10 @@ static void check_multi_info(GlobalInfo *g)
 
   fprintf(MSG_OUT, "\nREMAINING: %d", 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);
@@ -171,55 +177,33 @@ static void check_multi_info(GlobalInfo *g)
 
 /* Called by asio when there is an action on a socket */
 static void event_cb(GlobalInfo *g, boost::asio::ip::tcp::socket *tcp_socket,
-                     int action, const boost::system::error_code & error,
-                     int *fdp)
+                     int action)
 {
   fprintf(MSG_OUT, "\nevent_cb: action=%d", action);
 
-  /* make sure the event matches what are wanted */
-  if(*fdp == action || *fdp == CURL_POLL_INOUT) {
-    curl_socket_t s = tcp_socket->native_handle();
-    CURLMcode rc;
-    if(error)
-      action = CURL_CSELECT_ERR;
-    rc = curl_multi_socket_action(g->multi, s, action, &g->still_running);
-
-    mcode_or_die("event_cb: curl_multi_socket_action", rc);
-    check_multi_info(g);
+  CURLMcode rc;
+  rc = curl_multi_socket_action(g->multi, tcp_socket->native_handle(), action,
+                                &g->still_running);
 
-    if(g->still_running <= 0) {
-      fprintf(MSG_OUT, "\nlast transfer done, kill timeout");
-      timer.cancel();
-    }
+  mcode_or_die("event_cb: curl_multi_socket_action", rc);
+  check_multi_info(g);
 
-    /* keep on watching.
-     * the socket may have been closed and/or fdp may have been changed
-     * in curl_multi_socket_action(), so check them both */
-    if(!error && socket_map.find(s) != socket_map.end() &&
-       (*fdp == action || *fdp == CURL_POLL_INOUT)) {
-      if(action == CURL_POLL_IN) {
-        tcp_socket->async_read_some(boost::asio::null_buffers(),
-                                    boost::bind(&event_cb, g, tcp_socket,
-                                                action, _1, fdp));
-      }
-      if(action == CURL_POLL_OUT) {
-        tcp_socket->async_write_some(boost::asio::null_buffers(),
-                                     boost::bind(&event_cb, g, tcp_socket,
-                                                 action, _1, fdp));
-      }
-    }
+  if(g->still_running <= 0)
+  {
+    fprintf(MSG_OUT, "\nlast transfer done, kill timeout");
+    timer.cancel();
   }
 }
 
 /* Called by asio when our timeout expires */
 static void timer_cb(const boost::system::error_code & error, GlobalInfo *g)
 {
-  if(!error) {
+  if(!error)
+  {
     fprintf(MSG_OUT, "\ntimer_cb: ");
 
     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);
@@ -231,21 +215,22 @@ static void remsock(int *f, GlobalInfo *g)
 {
   fprintf(MSG_OUT, "\nremsock: ");
 
-  if(f) {
+  if(f)
+  {
     free(f);
   }
 }
 
-static void setsock(int *fdp, curl_socket_t s, CURL *e, int act, int oldact,
-                    GlobalInfo *g)
+static void setsock(int *fdp, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
 {
   fprintf(MSG_OUT, "\nsetsock: socket=%d, act=%d, fdp=%p", s, act, fdp);
 
-  std::map<curl_socket_t, boost::asio::ip::tcp::socket *>::iterator it =
-    socket_map.find(s);
+  std::map<curl_socket_t, boost::asio::ip::tcp::socket *>::iterator it = socket_map.find(s);
 
-  if(it == socket_map.end()) {
+  if(it == socket_map.end())
+  {
     fprintf(MSG_OUT, "\nsocket %d is a c-ares socket, ignoring", s);
+
     return;
   }
 
@@ -253,34 +238,29 @@ static void setsock(int *fdp, curl_socket_t s, CURL *e, int act, int oldact,
 
   *fdp = act;
 
-  if(act == CURL_POLL_IN) {
+  if(act == CURL_POLL_IN)
+  {
     fprintf(MSG_OUT, "\nwatching for socket to become readable");
-    if(oldact != CURL_POLL_IN && oldact != CURL_POLL_INOUT) {
-      tcp_socket->async_read_some(boost::asio::null_buffers(),
-                                  boost::bind(&event_cb, g, tcp_socket,
-                                              CURL_POLL_IN, _1, fdp));
-    }
+
+    tcp_socket->async_read_some(boost::asio::null_buffers(),
+                                boost::bind(&event_cb, g, tcp_socket, act));
   }
-  else if(act == CURL_POLL_OUT) {
+  else if (act == CURL_POLL_OUT)
+  {
     fprintf(MSG_OUT, "\nwatching for socket to become writable");
-    if(oldact != CURL_POLL_OUT && oldact != CURL_POLL_INOUT) {
-      tcp_socket->async_write_some(boost::asio::null_buffers(),
-                                   boost::bind(&event_cb, g, tcp_socket,
-                                               CURL_POLL_OUT, _1, fdp));
-    }
+
+    tcp_socket->async_write_some(boost::asio::null_buffers(),
+                                 boost::bind(&event_cb, g, tcp_socket, act));
   }
-  else if(act == CURL_POLL_INOUT) {
+  else if(act == CURL_POLL_INOUT)
+  {
     fprintf(MSG_OUT, "\nwatching for socket to become readable & writable");
-    if(oldact != CURL_POLL_IN && oldact != CURL_POLL_INOUT) {
-      tcp_socket->async_read_some(boost::asio::null_buffers(),
-                                  boost::bind(&event_cb, g, tcp_socket,
-                                              CURL_POLL_IN, _1, fdp));
-    }
-    if(oldact != CURL_POLL_OUT && oldact != CURL_POLL_INOUT) {
-      tcp_socket->async_write_some(boost::asio::null_buffers(),
-                                   boost::bind(&event_cb, g, tcp_socket,
-                                               CURL_POLL_OUT, _1, fdp));
-    }
+
+    tcp_socket->async_read_some(boost::asio::null_buffers(),
+                                boost::bind(&event_cb, g, tcp_socket, act));
+
+    tcp_socket->async_write_some(boost::asio::null_buffers(),
+                                 boost::bind(&event_cb, g, tcp_socket, act));
   }
 }
 
@@ -289,7 +269,7 @@ static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g)
   /* fdp is used to store current action */
   int *fdp = (int *) calloc(sizeof(int), 1);
 
-  setsock(fdp, s, easy, action, 0, g);
+  setsock(fdp, s, easy, action, g);
   curl_multi_assign(g->multi, s, fdp);
 }
 
@@ -305,20 +285,24 @@ static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
   fprintf(MSG_OUT,
           "\nsocket 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(actionp, g);
   }
-  else {
-    if(!actionp) {
+  else
+  {
+    if(!actionp)
+    {
       fprintf(MSG_OUT, "\nAdding data: %s", whatstr[what]);
       addsock(s, e, what, g);
     }
-    else {
+    else
+    {
       fprintf(MSG_OUT,
               "\nChanging action from %s to %s",
               whatstr[*actionp], whatstr[what]);
-      setsock(actionp, s, e, what, *actionp, g);
+      setsock(actionp, s, e, what, g);
     }
   }
 
@@ -328,8 +312,9 @@ static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
 /* CURLOPT_WRITEFUNCTION */
 static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
 {
+
   size_t written = size * nmemb;
-  char *pBuffer = (char *)malloc(written + 1);
+  char* pBuffer = (char *) malloc(written + 1);
 
   strncpy(pBuffer, (const char *)ptr, written);
   pBuffer[written] = '\0';
@@ -365,28 +350,28 @@ static curl_socket_t opensocket(void *clientp, curlsocktype purpose,
   curl_socket_t sockfd = CURL_SOCKET_BAD;
 
   /* restrict to IPv4 */
-  if(purpose == CURLSOCKTYPE_IPCXN && address->family == AF_INET) {
+  if(purpose == CURLSOCKTYPE_IPCXN && address->family == AF_INET)
+  {
     /* create a tcp socket object */
-    boost::asio::ip::tcp::socket *tcp_socket =
-      new boost::asio::ip::tcp::socket(io_service);
+    boost::asio::ip::tcp::socket *tcp_socket = new boost::asio::ip::tcp::socket(io_service);
 
     /* open it and get the native handle*/
     boost::system::error_code ec;
     tcp_socket->open(boost::asio::ip::tcp::v4(), ec);
 
-    if(ec) {
+    if(ec)
+    {
       /* An error occurred */
-      std::cout << std::endl << "Couldn't open socket [" << ec << "][" <<
-        ec.message() << "]";
+      std::cout << std::endl << "Couldn't open socket [" << ec << "][" << ec.message() << "]";
       fprintf(MSG_OUT, "\nERROR: Returning CURL_SOCKET_BAD to signal error");
     }
-    else {
+    else
+    {
       sockfd = tcp_socket->native_handle();
       fprintf(MSG_OUT, "\nOpened socket %d", sockfd);
 
       /* save it for monitoring */
-      socket_map.insert(std::pair<curl_socket_t,
-                        boost::asio::ip::tcp::socket *>(sockfd, tcp_socket));
+      socket_map.insert(std::pair<curl_socket_t, boost::asio::ip::tcp::socket *>(sockfd, tcp_socket));
     }
   }
 
@@ -398,10 +383,10 @@ static int close_socket(void *clientp, curl_socket_t item)
 {
   fprintf(MSG_OUT, "\nclose_socket : %d", item);
 
-  std::map<curl_socket_t, boost::asio::ip::tcp::socket *>::iterator it =
-    socket_map.find(item);
+  std::map<curl_socket_t, boost::asio::ip::tcp::socket *>::iterator it = socket_map.find(item);
 
-  if(it != socket_map.end()) {
+  if(it != socket_map.end())
+  {
     delete it->second;
     socket_map.erase(it);
   }
@@ -418,8 +403,10 @@ static void new_conn(char *url, GlobalInfo *g)
   conn = (ConnInfo *) calloc(1, sizeof(ConnInfo));
 
   conn->easy = curl_easy_init();
-  if(!conn->easy) {
+  if(!conn->easy)
+  {
     fprintf(MSG_OUT, "\ncurl_easy_init() failed, exiting!");
+
     exit(2);
   }
 
index ace58e4..bba8c72 100644 (file)
@@ -34,12 +34,12 @@ size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream)
   return (nmemb*size);
 }
 
-static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
+static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm)
 {
-  X509_STORE *store;
-  X509 *cert=NULL;
-  BIO *bio;
-  char *mypem = /* www.cacert.org */
+  X509_STORE * store;
+  X509 * cert=NULL;
+  BIO * bio;
+  char * mypem = /* www.cacert.org */
     "-----BEGIN CERTIFICATE-----\n"\
     "MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290\n"\
     "IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB\n"\
@@ -107,7 +107,7 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
 
 int main(void)
 {
-  CURL *ch;
+  CURL * ch;
   CURLcode rv;
 
   rv=curl_global_init(CURL_GLOBAL_ALL);
index cd1677a..155da23 100644 (file)
@@ -133,14 +133,14 @@ 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;
+  unsigned char * p12file;
+  const char * pst;
+  PKCS12 * p12;
+  EVP_PKEY * pkey;
+  X509 * usercert;
   STACK_OF(X509) * ca;
-  CURL *curl;
-  BIO *errorbio;
+  CURL * curl;
+  BIO * errorbio;
   int accesstype;
   int verbose;
 
@@ -196,12 +196,11 @@ static int ssl_app_verify_callback(X509_STORE_CTX *ctx, void *arg)
     BIO_printf(p->errorbio, "entering ssl_app_verify_callback\n");
 
   if((ok= X509_verify_cert(ctx)) && ctx->cert) {
-    unsigned char *accessinfo;
+    unsigned char * accessinfo;
     if(p->verbose > 1)
       X509_print_ex(p->errorbio, ctx->cert, 0, 0);
 
-    accessinfo = my_get_ext(ctx->cert, p->accesstype, NID_sinfo_access);
-    if(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);
 
@@ -229,10 +228,10 @@ static int ssl_app_verify_callback(X509_STORE_CTX *ctx, void *arg)
    - 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;
+  sslctxparm * p = (sslctxparm *) parm;
+  SSL_CTX * ctx = (SSL_CTX *) sslctx;
 
   if(!SSL_CTX_use_certificate(ctx, p->usercert)) {
     BIO_printf(p->errorbio, "SSL_CTX_use_certificate problem\n");
@@ -271,30 +270,30 @@ int main(int argc, char **argv)
   BIO* in=NULL;
   BIO* out=NULL;
 
-  char *outfile = NULL;
-  char *infile = NULL;
+  char * outfile = NULL;
+  char * infile = NULL;
 
   int tabLength=100;
   char *binaryptr;
-  char *mimetype;
-  char *mimetypeaccept=NULL;
-  char *contenttype;
-  const char **pp;
-  unsigned char *hostporturl = NULL;
-  BIO *p12bio;
+  charmimetype;
+  charmimetypeaccept=NULL;
+  charcontenttype;
+  const char** pp;
+  unsigned charhostporturl = NULL;
+  BIO * p12bio;
   char **args = argv + 1;
-  unsigned char *serverurl;
+  unsigned char * serverurl;
   sslctxparm p;
   char *response;
 
   CURLcode res;
-  struct curl_slist *headers=NULL;
+  struct curl_slist * headers=NULL;
   int badarg=0;
 
   binaryptr = malloc(tabLength);
 
   p.verbose = 0;
-  p.errorbio = BIO_new_fp(stderr, BIO_NOCLOSE);
+  p.errorbio = BIO_new_fp (stderr, BIO_NOCLOSE);
 
   curl_global_init(CURL_GLOBAL_DEFAULT);
 
@@ -356,8 +355,7 @@ int main(int argc, char **argv)
     }
     else if(strcmp(*args, "-accesstype") == 0) {
       if(args[1]) {
-        p.accesstype = OBJ_obj2nid(OBJ_txt2obj(*++args, 0));
-        if(p.accesstype == 0)
+        if((p.accesstype = OBJ_obj2nid(OBJ_txt2obj(*++args, 0))) == 0)
           badarg=1;
       }
       else
@@ -410,21 +408,18 @@ int main(int argc, char **argv)
   }
 
 
-  p.errorbio = BIO_new_fp(stderr, BIO_NOCLOSE);
+  p.errorbio = BIO_new_fp (stderr, BIO_NOCLOSE);
 
-  p.curl = curl_easy_init();
-  if(!p.curl) {
+  if(!(p.curl = curl_easy_init())) {
     BIO_printf(p.errorbio, "Cannot init curl lib\n");
     goto err;
   }
 
-  p12bio = BIO_new_file(p.p12file, "rb");
-  if(!p12bio) {
+  if(!(p12bio = BIO_new_file(p.p12file, "rb"))) {
     BIO_printf(p.errorbio, "Error opening P12 file %s\n", p.p12file);
     goto err;
   }
-  p.p12 = d2i_PKCS12_bio(p12bio, NULL);
-  if(!p.p12) {
+  if(!(p.p12 = d2i_PKCS12_bio (p12bio, NULL))) {
     BIO_printf(p.errorbio, "Cannot decode P12 structure %s\n", p.p12file);
     goto err;
   }
@@ -452,19 +447,16 @@ int main(int argc, char **argv)
   }
   else if(p.accesstype != 0) { /* see whether we can find an AIA or SIA for a
                                   given access type */
-    serverurl = my_get_ext(p.usercert, p.accesstype, NID_info_access);
-    if(!serverurl) {
+    if(!(serverurl = my_get_ext(p.usercert, p.accesstype, NID_info_access))) {
       int j=0;
       BIO_printf(p.errorbio, "no service URL in user cert "
                  "cherching in others certificats\n");
       for(j=0; j<sk_X509_num(p.ca); j++) {
-        serverurl = my_get_ext(sk_X509_value(p.ca, j), p.accesstype,
-                               NID_info_access);
-        if(serverurl)
+        if((serverurl = my_get_ext(sk_X509_value(p.ca, j), p.accesstype,
+                                    NID_info_access)))
           break;
-        serverurl = my_get_ext(sk_X509_value(p.ca, j), p.accesstype,
-                               NID_sinfo_access);
-        if(serverurl)
+        if((serverurl = my_get_ext(sk_X509_value(p.ca, j), p.accesstype,
+                                    NID_sinfo_access)))
           break;
       }
     }
@@ -513,7 +505,7 @@ int main(int argc, char **argv)
 
   {
     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) {
         tabLength+=100;
index cbf1c11..f5d58bf 100644 (file)
@@ -88,7 +88,7 @@ int my_trace(CURL *handle, curl_infotype type,
   const char *text;
   (void)handle; /* prevent compiler warning */
 
-  switch(type) {
+  switch (type) {
   case CURLINFO_TEXT:
     fprintf(stderr, "== Info: %s", data);
   default: /* in case a new one is introduced to shock us */
index efe4247..118f152 100644 (file)
@@ -86,7 +86,7 @@ typedef struct _GlobalInfo
   struct ev_timer timer_event;
   CURLM *multi;
   int still_running;
-  FILE *input;
+  FILEinput;
 } GlobalInfo;
 
 
@@ -134,7 +134,7 @@ static void mcode_or_die(const char *where, CURLMcode code)
 {
   if(CURLM_OK != code) {
     const char *s;
-    switch(code) {
+    switch (code) {
     case CURLM_BAD_HANDLE:
       s="CURLM_BAD_HANDLE";
       break;
@@ -243,8 +243,7 @@ static void remsock(SockInfo *f, GlobalInfo *g)
 
 
 /* Assign information to a SockInfo structure */
-static void setsock(SockInfo *f, curl_socket_t s, CURL *e, int act,
-                    GlobalInfo *g)
+static void setsock(SockInfo*f, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
 {
   printf("%s  \n", __PRETTY_FUNCTION__);
 
@@ -317,8 +316,8 @@ static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
 
 
 /* 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;
   (void)ult;
@@ -388,7 +387,7 @@ static void fifo_cb(EV_P_ struct ev_io *w, int revents)
 }
 
 /* Create a named pipe and tell libevent to monitor it */
-static int init_fifo(GlobalInfo *g)
+static int init_fifo (GlobalInfo *g)
 {
   struct stat st;
   static const char *fifo = "hiper.fifo";
@@ -399,18 +398,18 @@ static int init_fifo(GlobalInfo *g)
     if((st.st_mode & S_IFMT) == S_IFREG) {
       errno = EEXIST;
       perror("lstat");
-      exit(1);
+      exit (1);
     }
   }
   unlink(fifo);
   if(mkfifo (fifo, 0600) == -1) {
     perror("mkfifo");
-    exit(1);
+    exit (1);
   }
   sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
   if(sockfd == -1) {
     perror("open");
-    exit(1);
+    exit (1);
   }
   g->input = fdopen(sockfd, "r");
 
index 918f082..9b144b4 100644 (file)
@@ -90,8 +90,9 @@ int main(void)
 
 #ifdef WIN32
   WSADATA wsaData;
-  int initwsa = WSAStartup(MAKEWORD(2, 0), &wsaData);
-  if(initwsa != 0) {
+  int initwsa;
+
+  if((initwsa = WSAStartup(MAKEWORD(2, 0), &wsaData)) != 0) {
     printf("WSAStartup failed: %d\n", initwsa);
     return 1;
   }
@@ -106,8 +107,7 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
 
     /* Create the socket "manually" */
-    sockfd = socket(AF_INET, SOCK_STREAM, 0);
-    if(sockfd == CURL_SOCKET_BAD) {
+    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == CURL_SOCKET_BAD) {
       printf("Error creating listening socket.\n");
       return 3;
     }
@@ -116,8 +116,7 @@ int main(void)
     servaddr.sin_family = AF_INET;
     servaddr.sin_port   = htons(PORTNUM);
 
-    servaddr.sin_addr.s_addr = inet_addr(IPADDR);
-    if(INADDR_NONE == servaddr.sin_addr.s_addr)
+    if(INADDR_NONE == (servaddr.sin_addr.s_addr = inet_addr(IPADDR)))
       return 2;
 
     if(connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) ==
index 6b05c4c..363fae6 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -37,12 +37,16 @@ int main(void)
   FILE *fd;
 
   fd = fopen("debugit", "rb"); /* open file to upload */
-  if(!fd)
+  if(!fd) {
+
     return 1; /* can't continue */
+  }
 
   /* to get the file size */
-  if(fstat(fileno(fd), &file_info) != 0)
+  if(fstat(fileno(fd), &file_info) != 0) {
+
     return 1; /* can't continue */
+  }
 
   curl = curl_easy_init();
   if(curl) {
@@ -82,6 +86,5 @@ int main(void)
     /* always cleanup */
     curl_easy_cleanup(curl);
   }
-  fclose(fd);
   return 0;
 }
index 7435264..71be178 100644 (file)
@@ -84,7 +84,7 @@ URL_FILE *url_fopen(const char *url, const char *operation);
 int url_fclose(URL_FILE *file);
 int url_feof(URL_FILE *file);
 size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file);
-char *url_fgets(char *ptr, size_t size, URL_FILE *file);
+char * url_fgets(char *ptr, size_t size, URL_FILE *file);
 void url_rewind(URL_FILE *file);
 
 /* we use a global one for convenience */
index 41e2d80..bba0c4d 100644 (file)
@@ -127,7 +127,7 @@ int main(void)
               curl_easy_strerror(res));
 
     /* clean up the FTP commands list */
-    curl_slist_free_all(headerlist);
+    curl_slist_free_all (headerlist);
 
     /* always cleanup */
     curl_easy_cleanup(curl);
index 8f7f45d..6415634 100644 (file)
@@ -36,8 +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
 
 
@@ -77,7 +77,7 @@ size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
 }
 
 
-int upload(CURL *curlhandle, const char *remotepath, const char *localpath,
+int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
            long timeout, long tries)
 {
   FILE *f;
index a1af4c5..7317a63 100644 (file)
@@ -94,11 +94,10 @@ typedef struct _SockInfo {
 } SockInfo;
 
 /* Die if we get a bad CURLMcode somewhere */
-static void mcode_or_die(const char *where, CURLMcode code)
-{
+static void mcode_or_die(const char *where, CURLMcode code) {
   if(CURLM_OK != code) {
     const char *s;
-    switch(code) {
+    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;
@@ -207,8 +206,7 @@ static void remsock(SockInfo *f)
 }
 
 /* Assign information to a SockInfo structure */
-static void setsock(SockInfo *f, curl_socket_t s, CURL *e, int act,
-                    GlobalInfo *g)
+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);
@@ -272,8 +270,8 @@ static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
 }
 
 /* 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);
@@ -318,7 +316,7 @@ static void new_conn(char *url, GlobalInfo *g)
 }
 
 /* This gets called by glib whenever data is received from the fifo */
-static gboolean fifo_cb(GIOChannel *ch, GIOCondition condition, gpointer data)
+static gboolean fifo_cb (GIOChannel *ch, GIOCondition condition, gpointer data)
 {
 #define BUF_SIZE 1024
   gsize len, tp;
@@ -380,21 +378,21 @@ int init_fifo(void)
     if((st.st_mode & S_IFMT) == S_IFREG) {
       errno = EEXIST;
       perror("lstat");
-      exit(1);
+      exit (1);
     }
   }
 
-  unlink(fifo);
+  unlink (fifo);
   if(mkfifo (fifo, 0600) == -1) {
     perror("mkfifo");
-    exit(1);
+    exit (1);
   }
 
-  socket = open(fifo, O_RDWR | O_NONBLOCK, 0);
+  socket = open (fifo, O_RDWR | O_NONBLOCK, 0);
 
   if(socket == -1) {
     perror("open");
-    exit(1);
+    exit (1);
   }
   MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
 
index f08fcda..98bcafe 100644 (file)
@@ -82,7 +82,7 @@ typedef struct _GlobalInfo
   struct event *timer_event;
   CURLM *multi;
   int still_running;
-  FILE *input;
+  FILEinput;
 } GlobalInfo;
 
 
@@ -128,7 +128,7 @@ static void mcode_or_die(const char *where, CURLMcode code)
 {
   if(CURLM_OK != code) {
     const char *s;
-    switch(code) {
+    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;
@@ -230,8 +230,7 @@ static void remsock(SockInfo *f)
 
 
 /* Assign information to a SockInfo structure */
-static void setsock(SockInfo *f, curl_socket_t s, CURL *e, int act,
-                    GlobalInfo *g)
+static void setsock(SockInfo*f, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
 {
   int kind =
      (act&CURL_POLL_IN?EV_READ:0)|(act&CURL_POLL_OUT?EV_WRITE:0)|EV_PERSIST;
@@ -300,8 +299,8 @@ static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
 
 
 /* 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;
   (void)ult;
@@ -371,7 +370,7 @@ static void fifo_cb(int fd, short event, void *arg)
 
 /* Create a named pipe and tell libevent to monitor it */
 static const char *fifo = "hiper.fifo";
-static int init_fifo(GlobalInfo *g)
+static int init_fifo (GlobalInfo *g)
 {
   struct stat st;
   curl_socket_t sockfd;
@@ -381,18 +380,18 @@ static int init_fifo(GlobalInfo *g)
     if((st.st_mode & S_IFMT) == S_IFREG) {
       errno = EEXIST;
       perror("lstat");
-      exit(1);
+      exit (1);
     }
   }
   unlink(fifo);
   if(mkfifo (fifo, 0600) == -1) {
     perror("mkfifo");
-    exit(1);
+    exit (1);
   }
   sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
   if(sockfd == -1) {
     perror("open");
-    exit(1);
+    exit (1);
   }
   g->input = fdopen(sockfd, "r");
 
index 8148888..5e6b4a0 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 /* <DESC>
  * Get a web page, extract the title with libxml.
  * </DESC>
+ */
+// Written by Lars Nilsson
+//
+// GNU C++ compile command line suggestion (edit paths accordingly):
+//
+// g++ -Wall -I/opt/curl/include -I/opt/libxml/include/libxml2 htmltitle.cpp \
+// -o htmltitle -L/opt/curl/lib -L/opt/libxml/lib -lcurl -lxml2
 
- Written by Lars Nilsson
-
- GNU C++ compile command line suggestion (edit paths accordingly):
-
- g++ -Wall -I/opt/curl/include -I/opt/libxml/include/libxml2 htmltitle.cpp \
- -o htmltitle -L/opt/curl/lib -L/opt/libxml/lib -lcurl -lxml2
-*/
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -72,7 +72,7 @@ static std::string buffer;
 static int writer(char *data, size_t size, size_t nmemb,
                   std::string *writerData)
 {
-  if(writerData == NULL)
+  if (writerData == NULL)
     return 0;
 
   writerData->append(data, size*nmemb);
@@ -90,38 +90,50 @@ static bool init(CURL *&conn, char *url)
 
   conn = curl_easy_init();
 
-  if(conn == NULL) {
+  if (conn == NULL)
+  {
     fprintf(stderr, "Failed to create CURL connection\n");
+
     exit(EXIT_FAILURE);
   }
 
   code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
-  if(code != CURLE_OK) {
+  if (code != CURLE_OK)
+  {
     fprintf(stderr, "Failed to set error buffer [%d]\n", code);
+
     return false;
   }
 
   code = curl_easy_setopt(conn, CURLOPT_URL, url);
-  if(code != CURLE_OK) {
+  if (code != CURLE_OK)
+  {
     fprintf(stderr, "Failed to set URL [%s]\n", errorBuffer);
+
     return false;
   }
 
   code = curl_easy_setopt(conn, CURLOPT_FOLLOWLOCATION, 1L);
-  if(code != CURLE_OK) {
+  if (code != CURLE_OK)
+  {
     fprintf(stderr, "Failed to set redirect option [%s]\n", errorBuffer);
+
     return false;
   }
 
   code = curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, writer);
-  if(code != CURLE_OK) {
+  if (code != CURLE_OK)
+  {
     fprintf(stderr, "Failed to set writer [%s]\n", errorBuffer);
+
     return false;
   }
 
   code = curl_easy_setopt(conn, CURLOPT_WRITEDATA, &buffer);
-  if(code != CURLE_OK) {
+  if (code != CURLE_OK)
+  {
     fprintf(stderr, "Failed to set write data [%s]\n", errorBuffer);
+
     return false;
   }
 
@@ -138,7 +150,8 @@ static void StartElement(void *voidContext,
 {
   Context *context = (Context *)voidContext;
 
-  if(COMPARE((char *)name, "TITLE")) {
+  if (COMPARE((char *)name, "TITLE"))
+  {
     context->title = "";
     context->addTitle = true;
   }
@@ -154,7 +167,7 @@ static void EndElement(void *voidContext,
 {
   Context *context = (Context *)voidContext;
 
-  if(COMPARE((char *)name, "TITLE"))
+  if (COMPARE((char *)name, "TITLE"))
     context->addTitle = false;
 }
 
@@ -166,7 +179,7 @@ static void handleCharacters(Context *context,
                              const xmlChar *chars,
                              int length)
 {
-  if(context->addTitle)
+  if (context->addTitle)
     context->title.append((char *)chars, length);
 }
 
@@ -260,8 +273,10 @@ int main(int argc, char *argv[])
 
   // Ensure one argument is given
 
-  if(argc != 2) {
+  if (argc != 2)
+  {
     fprintf(stderr, "Usage: %s <url>\n", argv[0]);
+
     exit(EXIT_FAILURE);
   }
 
@@ -269,8 +284,10 @@ int main(int argc, char *argv[])
 
   // Initialize CURL connection
 
-  if(!init(conn, argv[1])) {
+  if (!init(conn, argv[1]))
+  {
     fprintf(stderr, "Connection initializion failed\n");
+
     exit(EXIT_FAILURE);
   }
 
@@ -279,15 +296,19 @@ int main(int argc, char *argv[])
   code = curl_easy_perform(conn);
   curl_easy_cleanup(conn);
 
-  if(code != CURLE_OK) {
+  if (code != CURLE_OK)
+  {
     fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer);
+
     exit(EXIT_FAILURE);
   }
 
   // Parse the (assumed) HTML code
+
   parseHtml(buffer, title);
 
   // Display the extracted title
+
   printf("Title: %s\n", title.c_str());
 
   return EXIT_SUCCESS;
index c82fed2..9e87a06 100644 (file)
@@ -114,7 +114,7 @@ int my_trace(CURL *handle, curl_infotype type,
   int num = hnd2num(handle);
   (void)handle; /* prevent compiler warning */
   (void)userp;
-  switch(type) {
+  switch (type) {
   case CURLINFO_TEXT:
     fprintf(stderr, "== %d Info: %s", num, data);
   default: /* in case a new one is introduced to shock us */
index ecd9cc5..1a8c69b 100644 (file)
@@ -93,7 +93,7 @@ int my_trace(CURL *handle, curl_infotype type,
   const char *text;
   (void)handle; /* prevent compiler warning */
   (void)userp;
-  switch(type) {
+  switch (type) {
   case CURLINFO_TEXT:
     fprintf(stderr, "== Info: %s", data);
   default: /* in case a new one is introduced to shock us */
index 67e17f3..b635371 100644 (file)
@@ -133,7 +133,7 @@ int my_trace(CURL *handle, curl_infotype type,
   snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld",
            now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec);
 
-  switch(type) {
+  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 */
index bbf9fe4..3f83289 100644 (file)
@@ -85,8 +85,6 @@ int main(void)
 {
   CURL *curl;
   CURLcode res = CURLE_OK;
-  const char **p;
-  long infilesize;
   struct upload_status upload_ctx;
 
   upload_ctx.lines_read = 0;
@@ -109,12 +107,6 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
     curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 
-    infilesize = 0;
-    for(p = payload_text; *p; ++p) {
-      infilesize += (long)strlen(*p);
-    }
-    curl_easy_setopt(curl, CURLOPT_INFILESIZE, infilesize);
-
     /* Perform the append */
     res = curl_easy_perform(curl);
 
index 9a8ecfe..f844793 100644 (file)
@@ -156,7 +156,7 @@ int main(void)
           break;
       }
 
-      switch(idx) {
+      switch (idx) {
       case HTTP_HANDLE:
         printf("HTTP transfer completed with status %d\n", msg->data.result);
         break;
index be241fc..d07cc3b 100644 (file)
@@ -96,7 +96,7 @@ int my_trace(CURL *handle, curl_infotype type,
   (void)userp;
   (void)handle; /* prevent compiler warning */
 
-  switch(type) {
+  switch (type) {
   case CURLINFO_TEXT:
     fprintf(stderr, "== Info: %s", data);
   default: /* in case a new one is introduced to shock us */
index cc2ca18..5d9abc1 100644 (file)
@@ -165,7 +165,7 @@ int main(void)
     curl_formfree(formpost);
 
     /* free slist */
-    curl_slist_free_all(headerlist);
+    curl_slist_free_all (headerlist);
   }
   return 0;
 }
index 37e4f47..51526c8 100644 (file)
  * multi_socket API using libuv
  * </DESC>
  */
-/* Example application using the multi socket interface to download multiple
-   files in parallel, powered by libuv.
+/* 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.
+   It supports epoll, kqueue, etc. on unixes and fast IO completion ports on
+   Windows, which means, it should be very fast on all platforms..
+
+   Written by Clemens Gruber, based on an outdated example from uvbook and
+   some tests from libuv.
 
    Requires libuv and (of course) libcurl.
 
-   See https://nikhilm.github.com/uvbook/ for more information on libuv.
+   See http://nikhilm.github.com/uvbook/ for more information on libuv.
 */
 
 #include <stdio.h>
@@ -46,7 +52,7 @@ typedef struct curl_context_s {
   curl_socket_t sockfd;
 } curl_context_t;
 
-static curl_context_t* create_curl_context(curl_socket_t sockfd)
+curl_context_t* create_curl_context(curl_socket_t sockfd)
 {
   curl_context_t *context;
 
@@ -60,18 +66,19 @@ static curl_context_t* create_curl_context(curl_socket_t sockfd)
   return context;
 }
 
-static void curl_close_cb(uv_handle_t *handle)
+void curl_close_cb(uv_handle_t *handle)
 {
   curl_context_t *context = (curl_context_t *) handle->data;
   free(context);
 }
 
-static void destroy_curl_context(curl_context_t *context)
+void destroy_curl_context(curl_context_t *context)
 {
   uv_close((uv_handle_t *) &context->poll_handle, curl_close_cb);
 }
 
-static void add_download(const char *url, int num)
+
+void add_download(const char *url, int num)
 {
   char filename[50];
   FILE *file;
@@ -95,28 +102,22 @@ static void add_download(const char *url, int num)
 
 static void check_multi_info(void)
 {
+  int running_handles;
   char *done_url;
   CURLMsg *message;
   int pending;
-  CURL *easy_handle;
   FILE *file;
 
   while((message = curl_multi_info_read(curl_handle, &pending))) {
     switch(message->msg) {
     case CURLMSG_DONE:
-      /* Do not use message data after calling curl_multi_remove_handle() and
-         curl_easy_cleanup(). As per curl_multi_info_read() docs:
-         "WARNING: The data the returned pointer points to will not survive
-         calling curl_multi_cleanup, curl_multi_remove_handle or
-         curl_easy_cleanup." */
-      easy_handle = message->easy_handle;
-
-      curl_easy_getinfo(easy_handle, CURLINFO_EFFECTIVE_URL, &done_url);
-      curl_easy_getinfo(easy_handle, CURLINFO_PRIVATE, &file);
+      curl_easy_getinfo(message->easy_handle, CURLINFO_EFFECTIVE_URL,
+                        &done_url);
+      curl_easy_getinfo(message->easy_handle, CURLINFO_PRIVATE, &file);
       printf("%s DONE\n", done_url);
 
-      curl_multi_remove_handle(curl_handle, easy_handle);
-      curl_easy_cleanup(easy_handle);
+      curl_multi_remove_handle(curl_handle, message->easy_handle);
+      curl_easy_cleanup(message->easy_handle);
       if(file) {
         fclose(file);
       }
@@ -129,18 +130,23 @@ static void check_multi_info(void)
   }
 }
 
-static void curl_perform(uv_poll_t *req, int status, int events)
+void curl_perform(uv_poll_t *req, int status, int events)
 {
   int running_handles;
   int flags = 0;
   curl_context_t *context;
+  char *done_url;
+  CURLMsg *message;
+  int pending;
+
+  uv_timer_stop(&timeout);
 
   if(events & UV_READABLE)
     flags |= CURL_CSELECT_IN;
   if(events & UV_WRITABLE)
     flags |= CURL_CSELECT_OUT;
 
-  context = (curl_context_t *) req->data;
+  context = (curl_context_t *) req;
 
   curl_multi_socket_action(curl_handle, context->sockfd, flags,
                            &running_handles);
@@ -148,7 +154,7 @@ static void curl_perform(uv_poll_t *req, int status, int events)
   check_multi_info();
 }
 
-static void on_timeout(uv_timer_t *req, int status)
+void on_timeout(uv_timer_t *req, int status)
 {
   int running_handles;
   curl_multi_socket_action(curl_handle, CURL_SOCKET_TIMEOUT, 0,
@@ -156,41 +162,34 @@ static void on_timeout(uv_timer_t *req, int status)
   check_multi_info();
 }
 
-static int start_timeout(CURLM *multi, long timeout_ms, void *userp)
+void start_timeout(CURLM *multi, long timeout_ms, void *userp)
 {
-  if(timeout_ms < 0) {
-    uv_timer_stop(&timeout);
-  }
-  else {
-    if(timeout_ms == 0)
-      timeout_ms = 1; /* 0 means directly call socket_action, but we'll do it
-                         in a bit */
-    uv_timer_start(&timeout, on_timeout, timeout_ms, 0);
-  }
-  return 0;
+  if(timeout_ms <= 0)
+    timeout_ms = 1; /* 0 means directly call socket_action, but we'll do it in
+                       a bit */
+  uv_timer_start(&timeout, on_timeout, timeout_ms, 0);
 }
 
-static int handle_socket(CURL *easy, curl_socket_t s, int action, void *userp,
+int handle_socket(CURL *easy, curl_socket_t s, int action, void *userp,
                   void *socketp)
 {
   curl_context_t *curl_context;
-  int events = 0;
+  if(action == CURL_POLL_IN || action == CURL_POLL_OUT) {
+    if(socketp) {
+      curl_context = (curl_context_t *) socketp;
+    }
+    else {
+      curl_context = create_curl_context(s);
+    }
+    curl_multi_assign(curl_handle, s, (void *) curl_context);
+  }
 
   switch(action) {
   case CURL_POLL_IN:
+    uv_poll_start(&curl_context->poll_handle, UV_READABLE, curl_perform);
+    break;
   case CURL_POLL_OUT:
-  case CURL_POLL_INOUT:
-    curl_context = socketp ?
-      (curl_context_t *) socketp : create_curl_context(s);
-
-    curl_multi_assign(curl_handle, s, (void *) curl_context);
-
-    if(action != CURL_POLL_IN)
-      events |= UV_WRITABLE;
-    if(action != CURL_POLL_OUT)
-      events |= UV_READABLE;
-
-    uv_poll_start(&curl_context->poll_handle, events, curl_perform);
+    uv_poll_start(&curl_context->poll_handle, UV_WRITABLE, curl_perform);
     break;
   case CURL_POLL_REMOVE:
     if(socketp) {
@@ -214,7 +213,7 @@ int main(int argc, char **argv)
     return 0;
 
   if(curl_global_init(CURL_GLOBAL_ALL)) {
-    fprintf(stderr, "Could not init curl\n");
+    fprintf(stderr, "Could not init cURL\n");
     return 1;
   }
 
index 26c40f5..475e8fc 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 /*
   List of URLs to fetch.
 
-  If you intend to use a SSL-based protocol here you might need to setup TLS
-  library mutex callbacks as described here:
+  If you intend to use a SSL-based protocol here you MUST setup the OpenSSL
+  callback functions as described here:
 
-  https://curl.haxx.se/libcurl/c/threadsafe.html
+  https://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
 
 */
 const char * const urls[NUMT]= {
index 6f86c7f..eebc42e 100644 (file)
@@ -52,7 +52,7 @@ void handle_error(const char *file, int lineno, const char *msg)
 /* 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)
+static void locking_function(int mode, int n, const char * file, int line)
 {
   if(mode & CRYPTO_LOCK)
     MUTEX_LOCK(mutex_buf[n]);
index ef50a66..67e685f 100644 (file)
@@ -101,7 +101,7 @@ int main(int argc, char *argv[])
     /* then cleanup the formpost chain */
     curl_formfree(formpost);
     /* free slist */
-    curl_slist_free_all(headerlist);
+    curl_slist_free_all (headerlist);
   }
   return 0;
 }
index 5c66aa6..63c46e1 100644 (file)
@@ -61,15 +61,13 @@ static int _getch(void)
 #define VERSION_STR  "V1.0"
 
 /* error handling macros */
-#define my_curl_easy_setopt(A, B, C)                             \
-  res = curl_easy_setopt((A), (B), (C));                         \
-  if(!res)                                                       \
+#define my_curl_easy_setopt(A, B, C) \
+  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)                                     \
-  res = curl_easy_perform(A);                                       \
-  if(!res)                                                          \
+#define my_curl_easy_perform(A) \
+  if((res = curl_easy_perform((A))) != CURLE_OK) \
     fprintf(stderr, "curl_easy_perform(%s) failed: %d\n", #A, res);
 
 
@@ -190,7 +188,7 @@ int main(int argc, char * const argv[])
 
   printf("\nRTSP request %s\n", VERSION_STR);
   printf("    Project web site: http://code.google.com/p/rtsprequest/\n");
-  printf("    Requires curl V7.20 or greater\n\n");
+  printf("    Requires cURL V7.20 or greater\n\n");
 
   /* check command line */
   if((argc != 2) && (argc != 3)) {
@@ -228,7 +226,7 @@ int main(int argc, char * const argv[])
     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);
+      fprintf(stderr, "    cURL V%s loaded\n", data->version);
 
       /* initialize this curl session */
       curl = curl_easy_init();
index 6623234..41e283c 100644 (file)
@@ -62,9 +62,10 @@ int main(void)
   CURLcode res;
   /* Minimalistic http request */
   const char *request = "GET / HTTP/1.0\r\nHost: example.com\r\n\r\n";
-  size_t request_len = strlen(request);
-  curl_socket_t sockfd;
-  size_t nsent_total = 0;
+  curl_socket_t sockfd; /* socket */
+  long sockextr;
+  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
@@ -81,76 +82,54 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
     res = curl_easy_perform(curl);
 
-    if(res != CURLE_OK) {
-      printf("Error: %s\n", curl_easy_strerror(res));
+    if(CURLE_OK != res) {
+      printf("Error: %s\n", strerror(res));
       return 1;
     }
 
-    /* Extract the socket from the curl handle - we'll need it for waiting. */
-    res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
+    /* Extract the socket from the curl handle - we'll need it for waiting.
+     * Note that this API takes a pointer to a 'long' while we use
+     * curl_socket_t for sockets otherwise.
+     */
+    res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockextr);
 
-    if(res != CURLE_OK) {
+    if(CURLE_OK != res) {
       printf("Error: %s\n", curl_easy_strerror(res));
       return 1;
     }
 
-    printf("Sending request.\n");
-
-    do {
-      /* Warning: This example program may loop indefinitely.
-       * A production-quality program must define a timeout and exit this loop
-       * as soon as the timeout has expired. */
-      size_t nsent;
-      do {
-        nsent = 0;
-        res = curl_easy_send(curl, request + nsent_total,
-            request_len - nsent_total, &nsent);
-        nsent_total += nsent;
-
-        if(res == CURLE_AGAIN && !wait_on_socket(sockfd, 0, 60000L)) {
-          printf("Error: timeout.\n");
-          return 1;
-        }
-      } while(res == CURLE_AGAIN);
+    sockfd = (curl_socket_t)sockextr;
 
-      if(res != CURLE_OK) {
-        printf("Error: %s\n", curl_easy_strerror(res));
-        return 1;
-      }
-
-      printf("Sent %" CURL_FORMAT_CURL_OFF_T " bytes.\n",
-        (curl_off_t)nsent);
+    /* wait for the socket to become ready for sending */
+    if(!wait_on_socket(sockfd, 0, 60000L)) {
+      printf("Error: timeout.\n");
+      return 1;
+    }
 
-    } while(nsent_total < request_len);
+    puts("Sending request.");
+    /* Send the request. Real applications should check the iolen
+     * to see if all the request has been sent */
+    res = curl_easy_send(curl, request, strlen(request), &iolen);
 
-    printf("Reading response.\n");
+    if(CURLE_OK != res) {
+      printf("Error: %s\n", curl_easy_strerror(res));
+      return 1;
+    }
+    puts("Reading response.");
 
+    /* read the response */
     for(;;) {
-      /* Warning: This example program may loop indefinitely (see above). */
       char buf[1024];
-      size_t nread;
-      do {
-        nread = 0;
-        res = curl_easy_recv(curl, buf, sizeof(buf), &nread);
-
-        if(res == CURLE_AGAIN && !wait_on_socket(sockfd, 1, 60000L)) {
-          printf("Error: timeout.\n");
-          return 1;
-        }
-      } while(res == CURLE_AGAIN);
-
-      if(res != CURLE_OK) {
-        printf("Error: %s\n", curl_easy_strerror(res));
-        break;
-      }
 
-      if(nread == 0) {
-        /* end of the response */
+      wait_on_socket(sockfd, 1, 60000L);
+      res = curl_easy_recv(curl, buf, 1024, &iolen);
+
+      if(CURLE_OK != res)
         break;
-      }
 
-      printf("Received %" CURL_FORMAT_CURL_OFF_T " bytes.\n",
-        (curl_off_t)nread);
+      nread = (curl_off_t)iolen;
+
+      printf("Received %" CURL_FORMAT_CURL_OFF_T " bytes.\n", nread);
     }
 
     /* always cleanup */
index 024a0e1..11c87cd 100644 (file)
@@ -24,7 +24,7 @@
  * </DESC>
  */
 
-/* Note that this example currently requires curl to be linked against
+/* Note that this example currently requires cURL to be linked against
    GnuTLS (and this program must also be linked against -lgnutls). */
 
 #include <stdio.h>
index 713fcc6..547cc0f 100644 (file)
@@ -105,7 +105,7 @@ void *pull_one_url(void *NaN)
 
       curl_easy_cleanup(curl);
     }
-    g_free(http);
+    g_free (http);
 
     /* Adds more latency, testing the mutex.*/
     sleep(1);
@@ -118,7 +118,7 @@ void *pull_one_url(void *NaN)
 gboolean pulse_bar(gpointer data)
 {
   gdk_threads_enter();
-  gtk_progress_bar_pulse(GTK_PROGRESS_BAR (data));
+  gtk_progress_bar_pulse (GTK_PROGRESS_BAR (data));
   gdk_threads_leave();
 
   /* Return true so the function will be called again;
@@ -182,8 +182,8 @@ int main(int argc, char **argv)
 
   /* Init thread */
   g_thread_init(NULL);
-  gdk_threads_init();
-  gdk_threads_enter();
+  gdk_threads_init ();
+  gdk_threads_enter ();
 
   gtk_init(&argc, &argv);
 
@@ -203,9 +203,9 @@ int main(int argc, char **argv)
 
   /* Progress bar */
   progress_bar = gtk_progress_bar_new();
-  gtk_progress_bar_pulse(GTK_PROGRESS_BAR (progress_bar));
+  gtk_progress_bar_pulse (GTK_PROGRESS_BAR (progress_bar));
   /* Make uniform pulsing */
-  gint pulse_ref = g_timeout_add(300, pulse_bar, progress_bar);
+  gint pulse_ref = g_timeout_add (300, pulse_bar, progress_bar);
   g_object_set_data(G_OBJECT(progress_bar), "pulse_id",
                     GINT_TO_POINTER(pulse_ref));
   gtk_container_add(GTK_CONTAINER(inside_frame), progress_bar);
index 48377f5..1c787bb 100644 (file)
@@ -152,9 +152,9 @@ size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
                                          TmpStr1 & 2? */
         AutoSyncTime = 0;
       else {
-        RetVal = sscanf((char *)(ptr), "Date: %s %hu %s %hu %hu:%hu:%hu",
-                        TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear,
-                        &SYSTime.wHour, &SYSTime.wMinute, &SYSTime.wSecond);
+        RetVal = sscanf ((char *)(ptr), "Date: %s %hu %s %hu %hu:%hu:%hu",
+                         TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear,
+                         &SYSTime.wHour, &SYSTime.wMinute, &SYSTime.wSecond);
 
         if(RetVal == 7) {
           SYSTime.wMilliseconds = 500;    /* adjust to midpoint, 0.5 sec */
index 77fde91..47573eb 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2013 - 2017, 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
@@ -20,7 +20,8 @@
  *
  ***************************************************************************/
 /* <DESC>
- * Use an in-memory user certificate and RSA key and retrieve an https page.
+/* Example using an in memory PEM user certificate and RSA key to retrieve an
+ * https page.
  * </DESC>
  */
 /* Written by Ishan SinghLevett, based on Theo Borm's cacertinmem.c.
diff --git a/docs/index.html b/docs/index.html
new file mode 100644 (file)
index 0000000..4390378
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Index to Curl documentation</title>
+</head>
+
+<body>
+<h1 align="center">Index to Curl documentation</h1>
+
+<h2>Programs</h2>
+<a href="curl-config.html">curl-config</A>
+<br><a href="curl.html">curl</A>
+
+<h2>Tutorial</h2>
+<a href="TheArtOfHttpScripting">The Art Of Scripting HTTP Requests Using Curl</a> (plain text)
+
+<h2>libcurl</h2>
+See the <a href="libcurl/index.html">libcurl section</a>
+
+</body></html>
index 2d51b46..49acd97 100644 (file)
@@ -90,8 +90,8 @@ dist_m4macro_DATA = libcurl.m4
 
 CLEANFILES = $(HTMLPAGES) $(PDFPAGES) $(TESTS) libcurl-symbols.3
 
-EXTRA_DIST = $(man_MANS) index.html ABI symbols-in-versions symbols.pl  \
-  mksymbolsmanpage.pl
+EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) ABI \
+  symbols-in-versions symbols.pl mksymbolsmanpage.pl
 MAN2HTML= roffit --mandir=. $< >$@
 
 SUFFIXES = .3 .html
index 782272d..aafb20c 100644 (file)
@@ -685,8 +685,8 @@ PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf                       \
 m4macrodir = $(datadir)/aclocal
 dist_m4macro_DATA = libcurl.m4
 CLEANFILES = $(HTMLPAGES) $(PDFPAGES) $(TESTS) libcurl-symbols.3
-EXTRA_DIST = $(man_MANS) index.html ABI symbols-in-versions symbols.pl  \
-  mksymbolsmanpage.pl
+EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) ABI \
+  symbols-in-versions symbols.pl mksymbolsmanpage.pl
 
 MAN2HTML = roffit --mandir=. $< >$@
 SUFFIXES = .3 .html
diff --git a/docs/libcurl/curl_easy_cleanup.html b/docs/libcurl/curl_easy_cleanup.html
new file mode 100644 (file)
index 0000000..f5be22b
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_cleanup 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">curl_easy_cleanup - End a libcurl easy handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">void curl_easy_cleanup(CURL * handle );</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function must be the last function to call for an easy session. It is the opposite of the <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> function and must be called with the same <span Class="emphasis">handle</span> as input that a <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> call returned. 
+<p class="level0">This might close all connections this handle has used and possibly has kept open until now - unless it was attached to a multi handle while doing the transfers. Don't call this function if you intend to transfer more files, re-using handles is a key to good performance with libcurl. 
+<p class="level0">Occasionally you may get your progress callback or header callback called from within <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a> (if previously set for the handle using <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a>). Like if libcurl decides to shut down the connection and the protocol is of a kind that requires a command/response sequence before disconnect. Examples of such protocols are FTP, POP3 and IMAP. 
+<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 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_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>
diff --git a/docs/libcurl/curl_easy_cleanup.pdf b/docs/libcurl/curl_easy_cleanup.pdf
new file mode 100644 (file)
index 0000000..0f02434
Binary files /dev/null and b/docs/libcurl/curl_easy_cleanup.pdf differ
diff --git a/docs/libcurl/curl_easy_duphandle.html b/docs/libcurl/curl_easy_duphandle.html
new file mode 100644 (file)
index 0000000..4a46435
--- /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>curl_easy_duphandle 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">curl_easy_duphandle - Clone a libcurl session handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURL *curl_easy_duphandle(CURL *handle );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function will return a new curl handle, a duplicate, using all the options previously set in the input curl <span Class="emphasis">handle</span>. Both handles can subsequently be used independently and they must both be freed with <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>. 
+<p class="level0">All strings that the input handle has been told to point to (as opposed to copy) with previous calls to <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> using char * inputs, will be pointed to by the new handle as well. You must therefore make sure to keep the data around until both handles have been cleaned up. 
+<p class="level0">The new handle will <span Class="bold">not</span> inherit any state information, no connections, no SSL sessions and no cookies. 
+<p class="level0"><span Class="bold">Note</span> that even in multi-threaded programs, this function must be called in a synchronous way, the input handle may not be in use when cloned. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If this function returns NULL, something went wrong and no valid handle was returned. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</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>
diff --git a/docs/libcurl/curl_easy_duphandle.pdf b/docs/libcurl/curl_easy_duphandle.pdf
new file mode 100644 (file)
index 0000000..5194974
Binary files /dev/null and b/docs/libcurl/curl_easy_duphandle.pdf differ
diff --git a/docs/libcurl/curl_easy_escape.html b/docs/libcurl/curl_easy_escape.html
new file mode 100644 (file)
index 0000000..ae7852a
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_escape 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">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 , 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="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 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">RFC 3986</span><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_escape.pdf b/docs/libcurl/curl_easy_escape.pdf
new file mode 100644 (file)
index 0000000..78b9479
Binary files /dev/null and b/docs/libcurl/curl_easy_escape.pdf differ
index fabc7e9..9ffcd14 100644 (file)
@@ -104,9 +104,6 @@ See \fICURLINFO_REQUEST_SIZE(3)\fP
 .IP CURLINFO_SSL_VERIFYRESULT
 Certificate verification result.
 See \fICURLINFO_SSL_VERIFYRESULT(3)\fP
-.IP CURLINFO_PROXY_SSL_VERIFYRESULT
-Proxy certificate verification result.
-See \fICURLINFO_PROXY_SSL_VERIFYRESULT(3)\fP
 .IP CURLINFO_SSL_ENGINES
 A list of OpenSSL crypto engines.
 See \fICURLINFO_SSL_ENGINES(3)\fP
@@ -183,12 +180,6 @@ See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP
 .IP CURLINFO_RTSP_CSEQ_RECV
 RTSP CSeq last received.
 See \fICURLINFO_RTSP_CSEQ_RECV(3)\fP
-.IP CURLINFO_PROTOCOL
-The protocol used for the connection. (Added in 7.52.0)
-See \fICURLINFO_PROTOCOL(3)\fP
-.IP CURLINFO_SCHEME
-The scheme used for the connection. (Added in 7.52.0)
-See \fICURLINFO_SCHEME(3)\fP
 .SH TIMES
 .nf
 An overview of the six time values available from curl_easy_getinfo()
diff --git a/docs/libcurl/curl_easy_getinfo.html b/docs/libcurl/curl_easy_getinfo.html
new file mode 100644 (file)
index 0000000..6bfc02e
--- /dev/null
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_getinfo 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">curl_easy_getinfo - extract information from a curl handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Request internal information from the curl session with this function.  The third argument <span Class="bold">MUST</span> be a pointer to a long, a pointer to a char *, a pointer to a struct curl_slist * or a pointer to a double (as this documentation describes further down).  The data pointed-to will be filled in accordingly and can be relied upon only if the function returns CURLE_OK.  Use this function AFTER a performed transfer if you want to get transfer 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"><a name="CURLINFOEFFECTIVEURL"></a><span class="nroffip">CURLINFO_EFFECTIVE_URL</span> 
+<p class="level1">Last used URL. See <span Class="emphasis">CURLINFO_EFFECTIVE_URL(3)</span> 
+<p class="level0"><a name="CURLINFORESPONSECODE"></a><span class="nroffip">CURLINFO_RESPONSE_CODE</span> 
+<p class="level1">Last received response code. See <span Class="emphasis">CURLINFO_RESPONSE_CODE(3)</span> 
+<p class="level0"><a name="CURLINFOHTTPCONNECTCODE"></a><span class="nroffip">CURLINFO_HTTP_CONNECTCODE</span> 
+<p class="level1">Last proxy CONNECT response code. See <span Class="emphasis">CURLINFO_HTTP_CONNECTCODE(3)</span> 
+<p class="level0"><a name="CURLINFOHTTPVERSION"></a><span class="nroffip">CURLINFO_HTTP_VERSION</span> 
+<p class="level1">The http version used in the connection. See <span Class="emphasis">CURLINFO_HTTP_VERSION(3)</span> 
+<p class="level0"><a name="CURLINFOFILETIME"></a><span class="nroffip">CURLINFO_FILETIME</span> 
+<p class="level1">Remote time of the retrieved document. See <span Class="emphasis">CURLINFO_FILETIME(3)</span> 
+<p class="level0"><a name="CURLINFOTOTALTIME"></a><span class="nroffip">CURLINFO_TOTAL_TIME</span> 
+<p class="level1">Total time of previous transfer. See <span Class="emphasis">CURLINFO_TOTAL_TIME(3)</span> 
+<p class="level0"><a name="CURLINFONAMELOOKUPTIME"></a><span class="nroffip">CURLINFO_NAMELOOKUP_TIME</span> 
+<p class="level1">Time from start until name resolving completed. See <span Class="emphasis">CURLINFO_NAMELOOKUP_TIME(3)</span> 
+<p class="level0"><a name="CURLINFOCONNECTTIME"></a><span class="nroffip">CURLINFO_CONNECT_TIME</span> 
+<p class="level1">Time from start until remote host or proxy completed. See <span Class="emphasis">CURLINFO_CONNECT_TIME(3)</span> 
+<p class="level0"><a name="CURLINFOAPPCONNECTTIME"></a><span class="nroffip">CURLINFO_APPCONNECT_TIME</span> 
+<p class="level1">Time from start until SSL/SSH handshake completed. See <span Class="emphasis">CURLINFO_APPCONNECT_TIME(3)</span> 
+<p class="level0"><a name="CURLINFOPRETRANSFERTIME"></a><span class="nroffip">CURLINFO_PRETRANSFER_TIME</span> 
+<p class="level1">Time from start until just before the transfer begins. See <span Class="emphasis">CURLINFO_PRETRANSFER_TIME(3)</span> 
+<p class="level0"><a name="CURLINFOSTARTTRANSFERTIME"></a><span class="nroffip">CURLINFO_STARTTRANSFER_TIME</span> 
+<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="level0"><a name="CURLINFOREDIRECTTIME"></a><span class="nroffip">CURLINFO_REDIRECT_TIME</span> 
+<p class="level1">Time taken for all redirect steps before the final transfer. See <span Class="emphasis">CURLINFO_REDIRECT_TIME(3)</span> 
+<p class="level0"><a name="CURLINFOREDIRECTCOUNT"></a><span class="nroffip">CURLINFO_REDIRECT_COUNT</span> 
+<p class="level1">Total number of redirects that were followed. See <span Class="emphasis">CURLINFO_REDIRECT_COUNT(3)</span> 
+<p class="level0"><a name="CURLINFOREDIRECTURL"></a><span class="nroffip">CURLINFO_REDIRECT_URL</span> 
+<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="level0"><a name="CURLINFOSIZEUPLOAD"></a><span class="nroffip">CURLINFO_SIZE_UPLOAD</span> 
+<p class="level1">Number of bytes uploaded. See <span Class="emphasis">CURLINFO_SIZE_UPLOAD(3)</span> 
+<p class="level0"><a name="CURLINFOSIZEDOWNLOAD"></a><span class="nroffip">CURLINFO_SIZE_DOWNLOAD</span> 
+<p class="level1">Number of bytes downloaded. See <span Class="emphasis">CURLINFO_SIZE_DOWNLOAD(3)</span> 
+<p class="level0"><a name="CURLINFOSPEEDDOWNLOAD"></a><span class="nroffip">CURLINFO_SPEED_DOWNLOAD</span> 
+<p class="level1">Average download speed. See <span Class="emphasis">CURLINFO_SPEED_DOWNLOAD(3)</span> 
+<p class="level0"><a name="CURLINFOSPEEDUPLOAD"></a><span class="nroffip">CURLINFO_SPEED_UPLOAD</span> 
+<p class="level1">Average upload speed. See <span Class="emphasis">CURLINFO_SPEED_UPLOAD(3)</span> 
+<p class="level0"><a name="CURLINFOHEADERSIZE"></a><span class="nroffip">CURLINFO_HEADER_SIZE</span> 
+<p class="level1">Number of bytes of all headers received. See <span Class="emphasis">CURLINFO_HEADER_SIZE(3)</span> 
+<p class="level0"><a name="CURLINFOREQUESTSIZE"></a><span class="nroffip">CURLINFO_REQUEST_SIZE</span> 
+<p class="level1">Number of bytes sent in the issued HTTP requests. See <span Class="emphasis">CURLINFO_REQUEST_SIZE(3)</span> 
+<p class="level0"><a name="CURLINFOSSLVERIFYRESULT"></a><span class="nroffip">CURLINFO_SSL_VERIFYRESULT</span> 
+<p class="level1">Certificate verification result. See <span Class="emphasis">CURLINFO_SSL_VERIFYRESULT(3)</span> 
+<p class="level0"><a name="CURLINFOSSLENGINES"></a><span class="nroffip">CURLINFO_SSL_ENGINES</span> 
+<p class="level1">A list of OpenSSL crypto engines. See <span Class="emphasis">CURLINFO_SSL_ENGINES(3)</span> 
+<p class="level0"><a name="CURLINFOCONTENTLENGTHDOWNLOAD"></a><span class="nroffip">CURLINFO_CONTENT_LENGTH_DOWNLOAD</span> 
+<p class="level1">Content length from the Content-Length header. See <span Class="emphasis">CURLINFO_CONTENT_LENGTH_DOWNLOAD(3)</span> 
+<p class="level0"><a name="CURLINFOCONTENTLENGTHUPLOAD"></a><span class="nroffip">CURLINFO_CONTENT_LENGTH_UPLOAD</span> 
+<p class="level1">Upload size. See <span Class="emphasis">CURLINFO_CONTENT_LENGTH_UPLOAD(3)</span> 
+<p class="level0"><a name="CURLINFOCONTENTTYPE"></a><span class="nroffip">CURLINFO_CONTENT_TYPE</span> 
+<p class="level1">Content type from the Content-Type header. See <span Class="emphasis">CURLINFO_CONTENT_TYPE(3)</span> 
+<p class="level0"><a name="CURLINFOPRIVATE"></a><span class="nroffip">CURLINFO_PRIVATE</span> 
+<p class="level1">User's private data pointer. See <span Class="emphasis">CURLINFO_PRIVATE(3)</span> 
+<p class="level0"><a name="CURLINFOHTTPAUTHAVAIL"></a><span class="nroffip">CURLINFO_HTTPAUTH_AVAIL</span> 
+<p class="level1">Available HTTP authentication methods. See <span Class="emphasis">CURLINFO_HTTPAUTH_AVAIL(3)</span> 
+<p class="level0"><a name="CURLINFOPROXYAUTHAVAIL"></a><span class="nroffip">CURLINFO_PROXYAUTH_AVAIL</span> 
+<p class="level1">Available HTTP proxy authentication methods. See <span Class="emphasis">CURLINFO_PROXYAUTH_AVAIL(3)</span> 
+<p class="level0"><a name="CURLINFOOSERRNO"></a><span class="nroffip">CURLINFO_OS_ERRNO</span> 
+<p class="level1">The errno from the last failure to connect. See <span Class="emphasis">CURLINFO_OS_ERRNO(3)</span> 
+<p class="level0"><a name="CURLINFONUMCONNECTS"></a><span class="nroffip">CURLINFO_NUM_CONNECTS</span> 
+<p class="level1">Number of new successful connections used for previous transfer. See <span Class="emphasis">CURLINFO_NUM_CONNECTS(3)</span> 
+<p class="level0"><a name="CURLINFOPRIMARYIP"></a><span class="nroffip">CURLINFO_PRIMARY_IP</span> 
+<p class="level1">IP address of the last connection. See <span Class="emphasis">CURLINFO_PRIMARY_IP(3)</span> 
+<p class="level0"><a name="CURLINFOPRIMARYPORT"></a><span class="nroffip">CURLINFO_PRIMARY_PORT</span> 
+<p class="level1">Port of the last connection. See <span Class="emphasis">CURLINFO_PRIMARY_PORT(3)</span> 
+<p class="level0"><a name="CURLINFOLOCALIP"></a><span class="nroffip">CURLINFO_LOCAL_IP</span> 
+<p class="level1">Local-end IP address of last connection. See <span Class="emphasis">CURLINFO_LOCAL_IP(3)</span> 
+<p class="level0"><a name="CURLINFOLOCALPORT"></a><span class="nroffip">CURLINFO_LOCAL_PORT</span> 
+<p class="level1">Local-end port of last connection. See <span Class="emphasis">CURLINFO_LOCAL_PORT(3)</span> 
+<p class="level0"><a name="CURLINFOCOOKIELIST"></a><span class="nroffip">CURLINFO_COOKIELIST</span> 
+<p class="level1">List of all known cookies. See <span Class="emphasis">CURLINFO_COOKIELIST(3)</span> 
+<p class="level0"><a name="CURLINFOLASTSOCKET"></a><span class="nroffip">CURLINFO_LASTSOCKET</span> 
+<p class="level1">Last socket used. See <span Class="emphasis">CURLINFO_LASTSOCKET(3)</span> 
+<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="level0"><a name="CURLINFOFTPENTRYPATH"></a><span class="nroffip">CURLINFO_FTP_ENTRY_PATH</span> 
+<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="level0"><a name="CURLINFOCERTINFO"></a><span class="nroffip">CURLINFO_CERTINFO</span> 
+<p class="level1">Certificate chain. See <span Class="emphasis">CURLINFO_CERTINFO(3)</span> 
+<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="level0"><a name="CURLINFOTLSSESSION"></a><span class="nroffip">CURLINFO_TLS_SESSION</span> 
+<p class="level1">TLS session info that can be used for further processing.  See <span Class="emphasis">CURLINFO_TLS_SESSION(3)</span>. Deprecated option, use <span Class="emphasis">CURLINFO_TLS_SSL_PTR(3)</span> instead! 
+<p class="level0"><a name="CURLINFOCONDITIONUNMET"></a><span class="nroffip">CURLINFO_CONDITION_UNMET</span> 
+<p class="level1">Whether or not a time conditional was met. See <span Class="emphasis">CURLINFO_CONDITION_UNMET(3)</span> 
+<p class="level0"><a name="CURLINFORTSPSESSIONID"></a><span class="nroffip">CURLINFO_RTSP_SESSION_ID</span> 
+<p class="level1">RTSP session ID. See <span Class="emphasis">CURLINFO_RTSP_SESSION_ID(3)</span> 
+<p class="level0"><a name="CURLINFORTSPCLIENTCSEQ"></a><span class="nroffip">CURLINFO_RTSP_CLIENT_CSEQ</span> 
+<p class="level1">RTSP CSeq that will next be used. See <span Class="emphasis">CURLINFO_RTSP_CLIENT_CSEQ(3)</span> 
+<p class="level0"><a name="CURLINFORTSPSERVERCSEQ"></a><span class="nroffip">CURLINFO_RTSP_SERVER_CSEQ</span> 
+<p class="level1">RTSP CSeq that will next be expected. See <span Class="emphasis">CURLINFO_RTSP_SERVER_CSEQ(3)</span> 
+<p class="level0"><a name="CURLINFORTSPCSEQRECV"></a><span class="nroffip">CURLINFO_RTSP_CSEQ_RECV</span> 
+<p class="level1">RTSP CSeq last received. See <span Class="emphasis">CURLINFO_RTSP_CSEQ_RECV(3)</span> <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> 
+<p class="level1"><a class="emphasis" href="#CURLINFONAMELOOKUPTIME">CURLINFO_NAMELOOKUP_TIME</a>. The time it took from the start until the name resolving was completed. 
+<p class="level0"><a name="CONNECT"></a><span class="nroffip">CONNECT</span> 
+<p class="level1"><a class="emphasis" href="#CURLINFOCONNECTTIME">CURLINFO_CONNECT_TIME</a>. The time it took from the start until the connect to the remote host (or proxy) was completed. 
+<p class="level0"><a name="APPCONNECT"></a><span class="nroffip">APPCONNECT</span> 
+<p class="level1"><a class="emphasis" href="#CURLINFOAPPCONNECTTIME">CURLINFO_APPCONNECT_TIME</a>. The time it took from the start until the SSL connect/handshake with the remote host was completed. (Added in in 7.19.0) 
+<p class="level0"><a name="PRETRANSFER"></a><span class="nroffip">PRETRANSFER</span> 
+<p class="level1"><a class="emphasis" href="#CURLINFOPRETRANSFERTIME">CURLINFO_PRETRANSFER_TIME</a>. The time it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved. 
+<p class="level0"><a name="STARTTRANSFER"></a><span class="nroffip">STARTTRANSFER</span> 
+<p class="level1"><a class="emphasis" href="#CURLINFOSTARTTRANSFERTIME">CURLINFO_STARTTRANSFER_TIME</a>. The time it took from the start until the first byte is received by libcurl. 
+<p class="level0"><a name="TOTAL"></a><span class="nroffip">TOTAL</span> 
+<p class="level1"><a class="emphasis" href="#CURLINFOTOTALTIME">CURLINFO_TOTAL_TIME</a>. Total time of the previous request. 
+<p class="level0"><a name="REDIRECT"></a><span class="nroffip">REDIRECT</span> 
+<p class="level1"><a class="emphasis" href="#CURLINFOREDIRECTTIME">CURLINFO_REDIRECT_TIME</a>. The time it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. So, this is zero if no redirection took place. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If the operation was successful, CURLE_OK is returned. Otherwise an appropriate error code will be returned. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_getinfo.pdf b/docs/libcurl/curl_easy_getinfo.pdf
new file mode 100644 (file)
index 0000000..f50ebc2
Binary files /dev/null and b/docs/libcurl/curl_easy_getinfo.pdf differ
diff --git a/docs/libcurl/curl_easy_init.html b/docs/libcurl/curl_easy_init.html
new file mode 100644 (file)
index 0000000..dba66b6
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_init 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">curl_easy_init - Start a libcurl easy session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURL *curl_easy_init( );</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function must be the first function to call, and it returns a CURL easy handle that you must use as input to other functions in the easy interface. This call <span Class="bold">MUST</span> have a corresponding call to <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a> when the operation is complete. 
+<p class="level0">If you did not already call <a Class="emphasis" href="./curl_global_init.html">curl_global_init</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 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>, <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>
diff --git a/docs/libcurl/curl_easy_init.pdf b/docs/libcurl/curl_easy_init.pdf
new file mode 100644 (file)
index 0000000..37d7817
Binary files /dev/null and b/docs/libcurl/curl_easy_init.pdf differ
diff --git a/docs/libcurl/curl_easy_pause.html b/docs/libcurl/curl_easy_pause.html
new file mode 100644 (file)
index 0000000..704e974
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_pause 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">curl_easy_pause - pause and unpause a connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLcode curl_easy_pause(CURL *handle , int bitmask  );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Using this function, you can explicitly mark a running connection to get paused, and you can unpause a connection that was previously paused. 
+<p class="level0">A connection can be paused by using this function or by letting the read or the write callbacks return the proper magic return code (<span Class="emphasis">CURL_READFUNC_PAUSE</span> and <span Class="emphasis">CURL_WRITEFUNC_PAUSE</span>). A write callback that returns pause signals to the library that it couldn't take care of any data at all, and that data will then be delivered again to the callback when the writing is later unpaused. 
+<p class="level0">While it may feel tempting, take care and notice that you cannot call this function from another thread. To unpause, you may for example call it from the progress callback (<span Class="emphasis">CURLOPT_PROGRESSFUNCTION(3)</span>), which gets called at least once per second, even if the connection is paused. 
+<p class="level0">When this function is called to unpause reading, the chance is high that you will get your write callback called before this function returns. 
+<p class="level0">The <span Class="bold">handle</span> argument is of course identifying the handle that operates on the connection you want to pause or unpause. 
+<p class="level0">The <span Class="bold">bitmask</span> argument is a set of bits that sets the new state of the connection. The following bits can be used: 
+<p class="level0"><a name="CURLPAUSERECV"></a><span class="nroffip">CURLPAUSE_RECV</span> 
+<p class="level1">Pause receiving data. There will be no data received on this connection until this function is called again without this bit set. Thus, the write callback (<span Class="emphasis">CURLOPT_WRITEFUNCTION(3)</span>) won't be called. 
+<p class="level0"><a name="CURLPAUSESEND"></a><span class="nroffip">CURLPAUSE_SEND</span> 
+<p class="level1">Pause sending data. There will be no data sent on this connection until this function is called again without this bit set. Thus, the read callback (<span Class="emphasis">CURLOPT_READFUNCTION(3)</span>) won't be called. 
+<p class="level0"><a name="CURLPAUSEALL"></a><span class="nroffip">CURLPAUSE_ALL</span> 
+<p class="level1">Convenience define that pauses both directions. 
+<p class="level0"><a name="CURLPAUSECONT"></a><span class="nroffip">CURLPAUSE_CONT</span> 
+<p class="level1">Convenience define that unpauses both directions. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLE_OK (zero) means that the option was set properly, and a non-zero return code means something wrong occurred after the new state was set.  See the <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>
+<p class="level0">Before libcurl 7.32.0, when a specific handle was unpaused with this function, there was no particular forced rechecking or similar of the socket's state, which made the continuation of the transfer get delayed until next multi-socket call invoke or even longer. Alternatively, the user could forcibly call for example <a Class="emphasis" href="./curl_multi_socket_all.html">curl_multi_socket_all</a> - with a rather hefty performance penalty. 
+<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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_pause.pdf b/docs/libcurl/curl_easy_pause.pdf
new file mode 100644 (file)
index 0000000..0cdb7bd
Binary files /dev/null and b/docs/libcurl/curl_easy_pause.pdf differ
diff --git a/docs/libcurl/curl_easy_perform.html b/docs/libcurl/curl_easy_perform.html
new file mode 100644 (file)
index 0000000..0a8198d
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_perform 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">curl_easy_perform - perform a blocking file transfer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLcode curl_easy_perform(CURL * easy_handle );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Invoke this function after <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> and all the <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> calls are made, and will perform the transfer as described in the options. It must be called with the same <span Class="bold">easy_handle</span> as input as the <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> call returned. 
+<p class="level0"><a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> performs the entire request in a blocking manner and returns when done, or if it failed. For non-blocking behavior, see <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a>. 
+<p class="level0">You can do any amount of calls to <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> while using the same <span Class="bold">easy_handle</span>. If you intend to transfer more than one file, you are even encouraged to do so. libcurl will then attempt to re-use the same connection for the following transfers, thus making the operations faster, less CPU intense and using less network resources. Just note that you will have to use <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> between the invokes to set options for the following curl_easy_perform. 
+<p class="level0">You must never call this function simultaneously from two places using the same <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="emphasis">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 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>, <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>
diff --git a/docs/libcurl/curl_easy_perform.pdf b/docs/libcurl/curl_easy_perform.pdf
new file mode 100644 (file)
index 0000000..6897de0
Binary files /dev/null and b/docs/libcurl/curl_easy_perform.pdf differ
index 7a812dd..3560cc5 100644 (file)
@@ -46,21 +46,12 @@ 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.
 
-The call will return \fBCURLE_AGAIN\fP if there is no data to read - the
-socket is used in non-blocking mode internally. When \fBCURLE_AGAIN\fP is
-returned, use your operating system facilities like \fIselect(2)\fP to wait
-for data. The socket may be obtained using \fIcurl_easy_getinfo(3)\fP with
-\fICURLINFO_ACTIVESOCKET(3)\fP.
-
-Wait on the socket only if \fIcurl_easy_recv(3)\fP returns \fBCURLE_AGAIN\fP.
-The reason for this is libcurl or the SSL library may internally cache some
-data, therefore you should call \fIcurl_easy_recv(3)\fP until all data is
-read which would include any cached data.
-
-Furthermore if you wait on the socket and it tells you there is data to read,
-\fIcurl_easy_recv(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was
-read was for internal SSL processing, and no other data is available.
-
+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 \fICURLINFO_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
 Added in 7.18.2.
 .SH RETURN VALUE
@@ -69,13 +60,13 @@ On success, returns \fBCURLE_OK\fP, stores the received data into
 
 On failure, returns the appropriate error code.
 
-The function may return \fBCURLE_AGAIN\fP. In this case, use your operating
-system facilities to wait until data can be read, and retry.
+If there is no data to read, the function returns \fBCURLE_AGAIN\fP. Use your
+operating system facilities to wait until the data is ready, and retry.
 
-Reading exactly 0 bytes indicates a closed connection.
+Reading exactly 0 bytes would indicate a closed connection.
 
 If there's no socket available to use from the previous transfer, this function
-returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP.
+returns CURLE_UNSUPPORTED_PROTOCOL.
 .SH EXAMPLE
 See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example.
 .SH "SEE ALSO"
diff --git a/docs/libcurl/curl_easy_recv.html b/docs/libcurl/curl_easy_recv.html
new file mode 100644 (file)
index 0000000..1257c21
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_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">curl_easy_recv - receives raw data on an "easy" connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/easy.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLcode curl_easy_recv( CURL * curl , void * buffer ,</span> <span Class="bold">size_t  buflen , size_t * n );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function receives raw data from the established connection. You may use it together with <a Class="emphasis" href="./curl_easy_send.html">curl_easy_send</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="emphasis">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="emphasis">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. 
+<p class="level0">If there is no data to read, the function returns <span Class="bold">CURLE_AGAIN</span>. Use your operating system facilities to wait until the data is ready, and retry. 
+<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>, <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>
diff --git a/docs/libcurl/curl_easy_recv.pdf b/docs/libcurl/curl_easy_recv.pdf
new file mode 100644 (file)
index 0000000..af76229
Binary files /dev/null and b/docs/libcurl/curl_easy_recv.pdf differ
diff --git a/docs/libcurl/curl_easy_reset.html b/docs/libcurl/curl_easy_reset.html
new file mode 100644 (file)
index 0000000..c0b2197
--- /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>curl_easy_reset 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">curl_easy_reset - reset all options of a libcurl session handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">void curl_easy_reset(CURL *handle );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Re-initializes all options previously set on a specified CURL handle to the default values. This puts back the handle to the same state as it was in when it was just created with <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a>. 
+<p class="level0">It does not change the following information kept in the handle: live connections, the Session ID cache, the DNS cache, the cookies and shares. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.12.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Nothing <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</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>
diff --git a/docs/libcurl/curl_easy_reset.pdf b/docs/libcurl/curl_easy_reset.pdf
new file mode 100644 (file)
index 0000000..8c980d6
Binary files /dev/null and b/docs/libcurl/curl_easy_reset.pdf differ
index 47976f3..2a74439 100644 (file)
@@ -40,20 +40,16 @@ connection set-up.
 The variable \fBn\fP points to will receive the number of sent bytes.
 
 To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before
-calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that
+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.
 
-The call will return \fBCURLE_AGAIN\fP if it's not possible to send data right
-now - the socket is used in non-blocking mode internally. When
-\fBCURLE_AGAIN\fP is returned, use your operating system facilities like
-\fIselect(2)\fP to wait until the socket is writable. The socket may be
-obtained using \fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP.
-
-Furthermore if you wait on the socket and it tells you it's writable,
-\fIcurl_easy_send(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was
-sent was for internal SSL processing, and no other data could be sent.
-
+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 \fICURLINFO_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
 Added in 7.18.2.
 .SH RETURN VALUE
@@ -63,11 +59,8 @@ wanted to send.
 
 On failure, returns the appropriate error code.
 
-This function may return \fBCURLE_AGAIN\fP. In this case, use your operating
-system facilities to wait until the socket is writable, and retry.
-
 If there's no socket available to use from the previous transfer, this function
-returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP.
+returns CURLE_UNSUPPORTED_PROTOCOL.
 .SH EXAMPLE
 See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example.
 .SH "SEE ALSO"
diff --git a/docs/libcurl/curl_easy_send.html b/docs/libcurl/curl_easy_send.html
new file mode 100644 (file)
index 0000000..3626b27
--- /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>curl_easy_send 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">curl_easy_send - sends raw data over an "easy" connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/easy.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLcode curl_easy_send( CURL * curl , const void * buffer ,</span> <span Class="bold"> size_t  buflen , size_t * n );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function sends arbitrary data over the established connection. You may use it together with <a Class="emphasis" href="./curl_easy_recv.html">curl_easy_recv</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="emphasis">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="emphasis">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>, <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>
diff --git a/docs/libcurl/curl_easy_send.pdf b/docs/libcurl/curl_easy_send.pdf
new file mode 100644 (file)
index 0000000..bbe5042
Binary files /dev/null and b/docs/libcurl/curl_easy_send.pdf differ
index 422cb85..75f1ce4 100644 (file)
@@ -144,8 +144,6 @@ Error message buffer. See \fICURLOPT_ERRORBUFFER(3)\fP
 stderr replacement stream. See \fICURLOPT_STDERR(3)\fP
 .IP CURLOPT_FAILONERROR
 Fail on HTTP 4xx errors. \fICURLOPT_FAILONERROR(3)\fP
-.IP CURLOPT_KEEP_SENDING_ON_ERROR
-Keep sending on HTTP >= 300 errors. \fICURLOPT_KEEP_SENDING_ON_ERROR(3)\fP
 .SH NETWORK OPTIONS
 .IP CURLOPT_URL
 URL to work on. See \fICURLOPT_URL(3)\fP
@@ -159,8 +157,6 @@ Protocols to allow redirects to. See \fICURLOPT_REDIR_PROTOCOLS(3)\fP
 Default protocol. See \fICURLOPT_DEFAULT_PROTOCOL(3)\fP
 .IP CURLOPT_PROXY
 Proxy to use. See \fICURLOPT_PROXY(3)\fP
-.IP CURLOPT_PRE_PROXY
-Socks proxy to use. See \fICURLOPT_PRE_PROXY(3)\fP
 .IP CURLOPT_PROXYPORT
 Proxy port to use. See \fICURLOPT_PROXYPORT(3)\fP
 .IP CURLOPT_PROXYTYPE
@@ -190,7 +186,7 @@ Timeout for DNS cache. See \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP
 .IP CURLOPT_DNS_USE_GLOBAL_CACHE
 OBSOLETE Enable global DNS cache. See \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP
 .IP CURLOPT_BUFFERSIZE
-Ask for alternate buffer size. See \fICURLOPT_BUFFERSIZE(3)\fP
+Ask for smaller buffer size. See \fICURLOPT_BUFFERSIZE(3)\fP
 .IP CURLOPT_PORT
 Port number to connect to. See \fICURLOPT_PORT(3)\fP
 .IP CURLOPT_TCP_FASTOPEN
@@ -207,8 +203,6 @@ Idle time before sending keep-alive. See \fICURLOPT_TCP_KEEPIDLE(3)\fP
 Interval between keep-alive probes. See \fICURLOPT_TCP_KEEPINTVL(3)\fP
 .IP CURLOPT_UNIX_SOCKET_PATH
 Path to a Unix domain socket. See \fICURLOPT_UNIX_SOCKET_PATH(3)\fP
-.IP CURLOPT_ABSTRACT_UNIX_SOCKET
-Path to an abstract Unix domain socket. See \fICURLOPT_ABSTRACT_UNIX_SOCKET(3)\fP
 .SH NAMES and PASSWORDS OPTIONS (Authentication)
 .IP CURLOPT_NETRC
 Enable .netrc parsing. See \fICURLOPT_NETRC(3)\fP
@@ -232,16 +226,10 @@ Proxy password. See \fICURLOPT_PROXYPASSWORD(3)\fP
 HTTP server authentication methods. See \fICURLOPT_HTTPAUTH(3)\fP
 .IP CURLOPT_TLSAUTH_USERNAME
 TLS authentication user name. See \fICURLOPT_TLSAUTH_USERNAME(3)\fP
-.IP CURLOPT_PROXY_TLSAUTH_USERNAME
-Proxy TLS authentication user name. See \fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP
 .IP CURLOPT_TLSAUTH_PASSWORD
 TLS authentication password. See \fICURLOPT_TLSAUTH_PASSWORD(3)\fP
-.IP CURLOPT_PROXY_TLSAUTH_PASSWORD
-Proxy TLS authentication password. See \fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP
 .IP CURLOPT_TLSAUTH_TYPE
 TLS authentication methods. See \fICURLOPT_TLSAUTH_TYPE(3)\fP
-.IP CURLOPT_PROXY_TLSAUTH_TYPE
-Proxy TLS authentication methods. See \fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP
 .IP CURLOPT_PROXYAUTH
 HTTP proxy authentication methods. See \fICURLOPT_PROXYAUTH(3)\fP
 .IP CURLOPT_SASL_IR
@@ -457,24 +445,14 @@ Timeout for waiting for the server's connect back to be accepted. See \fICURLOPT
 .SH SSL and SECURITY OPTIONS
 .IP CURLOPT_SSLCERT
 Client cert. See \fICURLOPT_SSLCERT(3)\fP
-.IP CURLOPT_PROXY_SSLCERT
-Proxy client cert. See \fICURLOPT_PROXY_SSLCERT(3)\fP
 .IP CURLOPT_SSLCERTTYPE
 Client cert type.  See \fICURLOPT_SSLCERTTYPE(3)\fP
-.IP CURLOPT_PROXY_SSLCERTTYPE
-Proxy client cert type.  See \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP
 .IP CURLOPT_SSLKEY
 Client key. See \fICURLOPT_SSLKEY(3)\fP
-.IP CURLOPT_PROXY_SSLKEY
-Proxy client key. See \fICURLOPT_PROXY_SSLKEY(3)\fP
 .IP CURLOPT_SSLKEYTYPE
 Client key type. See \fICURLOPT_SSLKEYTYPE(3)\fP
-.IP CURLOPT_PROXY_SSLKEYTYPE
-Proxy client key type. See \fICURLOPT_PROXY_SSLKEYTYPE(3)\fP
 .IP CURLOPT_KEYPASSWD
 Client key password. See \fICURLOPT_KEYPASSWD(3)\fP
-.IP CURLOPT_PROXY_KEYPASSWD
-Proxy client key password. See \fICURLOPT_PROXY_KEYPASSWD(3)\fP
 .IP CURLOPT_SSL_ENABLE_ALPN
 Enable use of ALPN. See \fICURLOPT_SSL_ENABLE_ALPN(3)\fP
 .IP CURLOPT_SSL_ENABLE_NPN
@@ -487,53 +465,34 @@ Default SSL engine. See \fICURLOPT_SSLENGINE_DEFAULT(3)\fP
 Enable TLS False Start. See \fICURLOPT_SSL_FALSESTART(3)\fP
 .IP CURLOPT_SSLVERSION
 SSL version to use. See \fICURLOPT_SSLVERSION(3)\fP
-.IP CURLOPT_PROXY_SSLVERSION
-Proxy SSL version to use. See \fICURLOPT_PROXY_SSLVERSION(3)\fP
 .IP CURLOPT_SSL_VERIFYHOST
 Verify the host name in the SSL certificate. See \fICURLOPT_SSL_VERIFYHOST(3)\fP
-.IP CURLOPT_PROXY_SSL_VERIFYHOST
-Verify the host name in the proxy SSL certificate. See \fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP
 .IP CURLOPT_SSL_VERIFYPEER
 Verify the SSL certificate. See \fICURLOPT_SSL_VERIFYPEER(3)\fP
-.IP CURLOPT_PROXY_SSL_VERIFYPEER
-Verify the proxy SSL certificate. See \fICURLOPT_PROXY_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_PROXY_CAINFO
-Proxy CA cert bundle. See \fICURLOPT_PROXY_CAINFO(3)\fP
 .IP CURLOPT_ISSUERCERT
 Issuer certificate. See \fICURLOPT_ISSUERCERT(3)\fP
 .IP CURLOPT_CAPATH
 Path to CA cert bundle. See \fICURLOPT_CAPATH(3)\fP
-.IP CURLOPT_PROXY_CAPATH
-Path to proxy CA cert bundle. See \fICURLOPT_PROXY_CAPATH(3)\fP
 .IP CURLOPT_CRLFILE
 Certificate Revocation List. See \fICURLOPT_CRLFILE(3)\fP
-.IP CURLOPT_PROXY_CRLFILE
-Proxy Certificate Revocation List. See \fICURLOPT_PROXY_CRLFILE(3)\fP
 .IP CURLOPT_CERTINFO
 Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP
 .IP CURLOPT_PINNEDPUBLICKEY
 Set pinned SSL public key . See \fICURLOPT_PINNEDPUBLICKEY(3)\fP
-.IP CURLOPT_PROXY_PINNEDPUBLICKEY
-Set the proxy's pinned SSL public key. See
-\fICURLOPT_PROXY_PINNEDPUBLICKEY(3)\fP
 .IP CURLOPT_RANDOM_FILE
 Provide source for entropy random data. See \fICURLOPT_RANDOM_FILE(3)\fP
 .IP CURLOPT_EGDSOCKET
 Identify EGD socket for entropy. See \fICURLOPT_EGDSOCKET(3)\fP
 .IP CURLOPT_SSL_CIPHER_LIST
 Ciphers to use. See \fICURLOPT_SSL_CIPHER_LIST(3)\fP
-.IP CURLOPT_PROXY_SSL_CIPHER_LIST
-Proxy ciphers to use. See \fICURLOPT_PROXY_SSL_CIPHER_LIST(3)\fP
 .IP CURLOPT_SSL_SESSIONID_CACHE
 Disable SSL session-id cache. See \fICURLOPT_SSL_SESSIONID_CACHE(3)\fP
 .IP CURLOPT_SSL_OPTIONS
 Control SSL behavior. See \fICURLOPT_SSL_OPTIONS(3)\fP
-.IP CURLOPT_PROXY_SSL_OPTIONS
-Control proxy SSL behavior. See \fICURLOPT_PROXY_SSL_OPTIONS(3)\fP
 .IP CURLOPT_KRBLEVEL
 Kerberos security level. See \fICURLOPT_KRBLEVEL(3)\fP
 .IP CURLOPT_GSSAPI_DELEGATION
diff --git a/docs/libcurl/curl_easy_setopt.html b/docs/libcurl/curl_easy_setopt.html
new file mode 100644 (file)
index 0000000..106839e
--- /dev/null
@@ -0,0 +1,544 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_setopt 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">curl_easy_setopt - set options for a curl easy handle <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, 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">
+<p class="level0"><a name="CURLOPTVERBOSE"></a><span class="nroffip">CURLOPT_VERBOSE</span> 
+<p class="level1">Display verbose information. See <span Class="emphasis">CURLOPT_VERBOSE(3)</span> 
+<p class="level0"><a name="CURLOPTHEADER"></a><span class="nroffip">CURLOPT_HEADER</span> 
+<p class="level1">Include the header in the body output. See <span Class="emphasis">CURLOPT_HEADER(3)</span> 
+<p class="level0"><a name="CURLOPTNOPROGRESS"></a><span class="nroffip">CURLOPT_NOPROGRESS</span> 
+<p class="level1">Shut off the progress meter. See <span Class="emphasis">CURLOPT_NOPROGRESS(3)</span> 
+<p class="level0"><a name="CURLOPTNOSIGNAL"></a><span class="nroffip">CURLOPT_NOSIGNAL</span> 
+<p class="level1">Do not install signal handlers. See <span Class="emphasis">CURLOPT_NOSIGNAL(3)</span> 
+<p class="level0"><a name="CURLOPTWILDCARDMATCH"></a><span class="nroffip">CURLOPT_WILDCARDMATCH</span> 
+<p class="level1">Transfer multiple files according to a file name pattern. See <span Class="emphasis">CURLOPT_WILDCARDMATCH(3)</span> <a name="CALLBACK"></a><h2 class="nroffsh">CALLBACK OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTWRITEFUNCTION"></a><span class="nroffip">CURLOPT_WRITEFUNCTION</span> 
+<p class="level1">Callback for writing data. See <span Class="emphasis">CURLOPT_WRITEFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTWRITEDATA"></a><span class="nroffip">CURLOPT_WRITEDATA</span> 
+<p class="level1">Data pointer to pass to the write callback. See <span Class="emphasis">CURLOPT_WRITEDATA(3)</span> 
+<p class="level0"><a name="CURLOPTREADFUNCTION"></a><span class="nroffip">CURLOPT_READFUNCTION</span> 
+<p class="level1">Callback for reading data. See <span Class="emphasis">CURLOPT_READFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTREADDATA"></a><span class="nroffip">CURLOPT_READDATA</span> 
+<p class="level1">Data pointer to pass to the read callback. See <span Class="emphasis">CURLOPT_READDATA(3)</span> 
+<p class="level0"><a name="CURLOPTIOCTLFUNCTION"></a><span class="nroffip">CURLOPT_IOCTLFUNCTION</span> 
+<p class="level1">Callback for I/O operations. See <span Class="emphasis">CURLOPT_IOCTLFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTIOCTLDATA"></a><span class="nroffip">CURLOPT_IOCTLDATA</span> 
+<p class="level1">Data pointer to pass to the I/O callback. See <span Class="emphasis">CURLOPT_IOCTLDATA(3)</span> 
+<p class="level0"><a name="CURLOPTSEEKFUNCTION"></a><span class="nroffip">CURLOPT_SEEKFUNCTION</span> 
+<p class="level1">Callback for seek operations. See <span Class="emphasis">CURLOPT_SEEKFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTSEEKDATA"></a><span class="nroffip">CURLOPT_SEEKDATA</span> 
+<p class="level1">Data pointer to pass to the seek callback. See <span Class="emphasis">CURLOPT_SEEKDATA(3)</span> 
+<p class="level0"><a name="CURLOPTSOCKOPTFUNCTION"></a><span class="nroffip">CURLOPT_SOCKOPTFUNCTION</span> 
+<p class="level1">Callback for sockopt operations. See <span Class="emphasis">CURLOPT_SOCKOPTFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTSOCKOPTDATA"></a><span class="nroffip">CURLOPT_SOCKOPTDATA</span> 
+<p class="level1">Data pointer to pass to the sockopt callback. See <span Class="emphasis">CURLOPT_SOCKOPTDATA(3)</span> 
+<p class="level0"><a name="CURLOPTOPENSOCKETFUNCTION"></a><span class="nroffip">CURLOPT_OPENSOCKETFUNCTION</span> 
+<p class="level1">Callback for socket creation. See <span Class="emphasis">CURLOPT_OPENSOCKETFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTOPENSOCKETDATA"></a><span class="nroffip">CURLOPT_OPENSOCKETDATA</span> 
+<p class="level1">Data pointer to pass to the open socket callback. See <span Class="emphasis">CURLOPT_OPENSOCKETDATA(3)</span> 
+<p class="level0"><a name="CURLOPTCLOSESOCKETFUNCTION"></a><span class="nroffip">CURLOPT_CLOSESOCKETFUNCTION</span> 
+<p class="level1">Callback for closing socket. See <span Class="emphasis">CURLOPT_CLOSESOCKETFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTCLOSESOCKETDATA"></a><span class="nroffip">CURLOPT_CLOSESOCKETDATA</span> 
+<p class="level1">Data pointer to pass to the close socket callback. See <span Class="emphasis">CURLOPT_CLOSESOCKETDATA(3)</span> 
+<p class="level0"><a name="CURLOPTPROGRESSFUNCTION"></a><span class="nroffip">CURLOPT_PROGRESSFUNCTION</span> 
+<p class="level1">OBSOLETE callback for progress meter. See <span Class="emphasis">CURLOPT_PROGRESSFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTPROGRESSDATA"></a><span class="nroffip">CURLOPT_PROGRESSDATA</span> 
+<p class="level1">Data pointer to pass to the progress meter callback. See <span Class="emphasis">CURLOPT_PROGRESSDATA(3)</span> 
+<p class="level0"><a name="CURLOPTXFERINFOFUNCTION"></a><span class="nroffip">CURLOPT_XFERINFOFUNCTION</span> 
+<p class="level1">Callback for progress meter. See <span Class="emphasis">CURLOPT_XFERINFOFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTXFERINFODATA"></a><span class="nroffip">CURLOPT_XFERINFODATA</span> 
+<p class="level1">Data pointer to pass to the progress meter callback. See <span Class="emphasis">CURLOPT_XFERINFODATA(3)</span> 
+<p class="level0"><a name="CURLOPTHEADERFUNCTION"></a><span class="nroffip">CURLOPT_HEADERFUNCTION</span> 
+<p class="level1">Callback for writing received headers. See <span Class="emphasis">CURLOPT_HEADERFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTHEADERDATA"></a><span class="nroffip">CURLOPT_HEADERDATA</span> 
+<p class="level1">Data pointer to pass to the header callback. See <span Class="emphasis">CURLOPT_HEADERDATA(3)</span> 
+<p class="level0"><a name="CURLOPTDEBUGFUNCTION"></a><span class="nroffip">CURLOPT_DEBUGFUNCTION</span> 
+<p class="level1">Callback for debug information. See <span Class="emphasis">CURLOPT_DEBUGFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTDEBUGDATA"></a><span class="nroffip">CURLOPT_DEBUGDATA</span> 
+<p class="level1">Data pointer to pass to the debug callback. See <span Class="emphasis">CURLOPT_DEBUGDATA(3)</span> 
+<p class="level0"><a name="CURLOPTSSLCTXFUNCTION"></a><span class="nroffip">CURLOPT_SSL_CTX_FUNCTION</span> 
+<p class="level1">Callback for SSL context logic. See <span Class="emphasis">CURLOPT_SSL_CTX_FUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTSSLCTXDATA"></a><span class="nroffip">CURLOPT_SSL_CTX_DATA</span> 
+<p class="level1">Data pointer to pass to the SSL context callback. See <span Class="emphasis">CURLOPT_SSL_CTX_DATA(3)</span> 
+<p class="level0"><a name="CURLOPTCONVTONETWORKFUNCTION"></a><span class="nroffip">CURLOPT_CONV_TO_NETWORK_FUNCTION</span> 
+<p class="level1">Callback for code base conversion. See <span Class="emphasis">CURLOPT_CONV_TO_NETWORK_FUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTCONVFROMNETWORKFUNCTION"></a><span class="nroffip">CURLOPT_CONV_FROM_NETWORK_FUNCTION</span> 
+<p class="level1">Callback for code base conversion. See <span Class="emphasis">CURLOPT_CONV_FROM_NETWORK_FUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTCONVFROMUTF8FUNCTION"></a><span class="nroffip">CURLOPT_CONV_FROM_UTF8_FUNCTION</span> 
+<p class="level1">Callback for code base conversion. See <span Class="emphasis">CURLOPT_CONV_FROM_UTF8_FUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTINTERLEAVEFUNCTION"></a><span class="nroffip">CURLOPT_INTERLEAVEFUNCTION</span> 
+<p class="level1">Callback for RTSP interleaved data. See <span Class="emphasis">CURLOPT_INTERLEAVEFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTINTERLEAVEDATA"></a><span class="nroffip">CURLOPT_INTERLEAVEDATA</span> 
+<p class="level1">Data pointer to pass to the RTSP interleave callback. See <span Class="emphasis">CURLOPT_INTERLEAVEDATA(3)</span> 
+<p class="level0"><a name="CURLOPTCHUNKBGNFUNCTION"></a><span class="nroffip">CURLOPT_CHUNK_BGN_FUNCTION</span> 
+<p class="level1">Callback for wildcard download start of chunk. See <span Class="emphasis">CURLOPT_CHUNK_BGN_FUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTCHUNKENDFUNCTION"></a><span class="nroffip">CURLOPT_CHUNK_END_FUNCTION</span> 
+<p class="level1">Callback for wildcard download end of chunk. See <span Class="emphasis">CURLOPT_CHUNK_END_FUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTCHUNKDATA"></a><span class="nroffip">CURLOPT_CHUNK_DATA</span> 
+<p class="level1">Data pointer to pass to the chunk callbacks. See <span Class="emphasis">CURLOPT_CHUNK_DATA(3)</span> 
+<p class="level0"><a name="CURLOPTFNMATCHFUNCTION"></a><span class="nroffip">CURLOPT_FNMATCH_FUNCTION</span> 
+<p class="level1">Callback for wildcard matching. See <span Class="emphasis">CURLOPT_FNMATCH_FUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTFNMATCHDATA"></a><span class="nroffip">CURLOPT_FNMATCH_DATA</span> 
+<p class="level1">Data pointer to pass to the wildcard matching callback. See <span Class="emphasis">CURLOPT_FNMATCH_DATA(3)</span> <a name="ERROR"></a><h2 class="nroffsh">ERROR OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTERRORBUFFER"></a><span class="nroffip">CURLOPT_ERRORBUFFER</span> 
+<p class="level1">Error message buffer. See <span Class="emphasis">CURLOPT_ERRORBUFFER(3)</span> 
+<p class="level0"><a name="CURLOPTSTDERR"></a><span class="nroffip">CURLOPT_STDERR</span> 
+<p class="level1">stderr replacement stream. See <span Class="emphasis">CURLOPT_STDERR(3)</span> 
+<p class="level0"><a name="CURLOPTFAILONERROR"></a><span class="nroffip">CURLOPT_FAILONERROR</span> 
+<p class="level1">Fail on HTTP 4xx errors. <span Class="emphasis">CURLOPT_FAILONERROR(3)</span> <a name="NETWORK"></a><h2 class="nroffsh">NETWORK OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTURL"></a><span class="nroffip">CURLOPT_URL</span> 
+<p class="level1">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> 
+<p class="level1">Proxy port to use. See <span Class="emphasis">CURLOPT_PROXYPORT(3)</span> 
+<p class="level0"><a name="CURLOPTPROXYTYPE"></a><span class="nroffip">CURLOPT_PROXYTYPE</span> 
+<p class="level1">Proxy type. See <span Class="emphasis">CURLOPT_PROXYTYPE(3)</span> 
+<p class="level0"><a name="CURLOPTNOPROXY"></a><span class="nroffip">CURLOPT_NOPROXY</span> 
+<p class="level1">Filter out hosts from proxy use. <span Class="emphasis">CURLOPT_NOPROXY(3)</span> 
+<p class="level0"><a name="CURLOPTHTTPPROXYTUNNEL"></a><span class="nroffip">CURLOPT_HTTPPROXYTUNNEL</span> 
+<p class="level1">Tunnel through the HTTP proxy. <span Class="emphasis">CURLOPT_HTTPPROXYTUNNEL(3)</span> 
+<p class="level0"><a name="CURLOPTCONNECTTO"></a><span class="nroffip">CURLOPT_CONNECT_TO</span> 
+<p class="level1">Connect to a specific host and port. See <span Class="emphasis">CURLOPT_CONNECT_TO(3)</span> 
+<p class="level0"><a name="CURLOPTSOCKS5GSSAPISERVICE"></a><span class="nroffip">CURLOPT_SOCKS5_GSSAPI_SERVICE</span> 
+<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 authentication 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">Authentication 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> 
+<p class="level1">Bind connection locally to this port. See <span Class="emphasis">CURLOPT_LOCALPORT(3)</span> 
+<p class="level0"><a name="CURLOPTLOCALPORTRANGE"></a><span class="nroffip">CURLOPT_LOCALPORTRANGE</span> 
+<p class="level1">Bind connection locally to port range. See <span Class="emphasis">CURLOPT_LOCALPORTRANGE(3)</span> 
+<p class="level0"><a name="CURLOPTDNSCACHETIMEOUT"></a><span class="nroffip">CURLOPT_DNS_CACHE_TIMEOUT</span> 
+<p class="level1">Timeout for DNS cache. See <span Class="emphasis">CURLOPT_DNS_CACHE_TIMEOUT(3)</span> 
+<p class="level0"><a name="CURLOPTDNSUSEGLOBALCACHE"></a><span class="nroffip">CURLOPT_DNS_USE_GLOBAL_CACHE</span> 
+<p class="level1">OBSOLETE Enable global DNS cache. See <span Class="emphasis">CURLOPT_DNS_USE_GLOBAL_CACHE(3)</span> 
+<p class="level0"><a name="CURLOPTBUFFERSIZE"></a><span class="nroffip">CURLOPT_BUFFERSIZE</span> 
+<p class="level1">Ask for smaller buffer size. See <span Class="emphasis">CURLOPT_BUFFERSIZE(3)</span> 
+<p class="level0"><a name="CURLOPTPORT"></a><span class="nroffip">CURLOPT_PORT</span> 
+<p class="level1">Port number to connect to. See <span Class="emphasis">CURLOPT_PORT(3)</span> 
+<p class="level0"><a name="CURLOPTTCPFASTOPEN"></a><span class="nroffip">CURLOPT_TCP_FASTOPEN</span> 
+<p class="level1">Enable TFO, TCP Fast Open. See <span Class="emphasis">CURLOPT_TCP_FASTOPEN(3)</span> 
+<p class="level0"><a name="CURLOPTTCPNODELAY"></a><span class="nroffip">CURLOPT_TCP_NODELAY</span> 
+<p class="level1">Disable the Nagle algorithm. See <span Class="emphasis">CURLOPT_TCP_NODELAY(3)</span> 
+<p class="level0"><a name="CURLOPTADDRESSSCOPE"></a><span class="nroffip">CURLOPT_ADDRESS_SCOPE</span> 
+<p class="level1">IPv6 scope for local addresses. See <span Class="emphasis">CURLOPT_ADDRESS_SCOPE(3)</span> 
+<p class="level0"><a name="CURLOPTTCPKEEPALIVE"></a><span class="nroffip">CURLOPT_TCP_KEEPALIVE</span> 
+<p class="level1">Enable TCP keep-alive. See <span Class="emphasis">CURLOPT_TCP_KEEPALIVE(3)</span> 
+<p class="level0"><a name="CURLOPTTCPKEEPIDLE"></a><span class="nroffip">CURLOPT_TCP_KEEPIDLE</span> 
+<p class="level1">Idle time before sending keep-alive. See <span Class="emphasis">CURLOPT_TCP_KEEPIDLE(3)</span> 
+<p class="level0"><a name="CURLOPTTCPKEEPINTVL"></a><span class="nroffip">CURLOPT_TCP_KEEPINTVL</span> 
+<p class="level1">Interval between keep-alive probes. See <span Class="emphasis">CURLOPT_TCP_KEEPINTVL(3)</span> 
+<p class="level0"><a name="CURLOPTUNIXSOCKETPATH"></a><span class="nroffip">CURLOPT_UNIX_SOCKET_PATH</span> 
+<p class="level1">Path to a Unix domain socket. See <span Class="emphasis">CURLOPT_UNIX_SOCKET_PATH(3)</span> <a name="NAMES"></a><h2 class="nroffsh">NAMES and PASSWORDS OPTIONS (Authentication)</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTNETRC"></a><span class="nroffip">CURLOPT_NETRC</span> 
+<p class="level1">Enable .netrc parsing. See <span Class="emphasis">CURLOPT_NETRC(3)</span> 
+<p class="level0"><a name="CURLOPTNETRCFILE"></a><span class="nroffip">CURLOPT_NETRC_FILE</span> 
+<p class="level1">.netrc file name. See <span Class="emphasis">CURLOPT_NETRC_FILE(3)</span> 
+<p class="level0"><a name="CURLOPTUSERPWD"></a><span class="nroffip">CURLOPT_USERPWD</span> 
+<p class="level1">User name and password. See <span Class="emphasis">CURLOPT_USERPWD(3)</span> 
+<p class="level0"><a name="CURLOPTPROXYUSERPWD"></a><span class="nroffip">CURLOPT_PROXYUSERPWD</span> 
+<p class="level1">Proxy user name and password. See <span Class="emphasis">CURLOPT_PROXYUSERPWD(3)</span> 
+<p class="level0"><a name="CURLOPTUSERNAME"></a><span class="nroffip">CURLOPT_USERNAME</span> 
+<p class="level1">User name. See <span Class="emphasis">CURLOPT_USERNAME(3)</span> 
+<p class="level0"><a name="CURLOPTPASSWORD"></a><span class="nroffip">CURLOPT_PASSWORD</span> 
+<p class="level1">Password. See <span Class="emphasis">CURLOPT_PASSWORD(3)</span> 
+<p class="level0"><a name="CURLOPTLOGINOPTIONS"></a><span class="nroffip">CURLOPT_LOGIN_OPTIONS</span> 
+<p class="level1">Login options. See <span Class="emphasis">CURLOPT_LOGIN_OPTIONS(3)</span> 
+<p class="level0"><a name="CURLOPTPROXYUSERNAME"></a><span class="nroffip">CURLOPT_PROXYUSERNAME</span> 
+<p class="level1">Proxy user name. See <span Class="emphasis">CURLOPT_PROXYUSERNAME(3)</span> 
+<p class="level0"><a name="CURLOPTPROXYPASSWORD"></a><span class="nroffip">CURLOPT_PROXYPASSWORD</span> 
+<p class="level1">Proxy password. See <span Class="emphasis">CURLOPT_PROXYPASSWORD(3)</span> 
+<p class="level0"><a name="CURLOPTHTTPAUTH"></a><span class="nroffip">CURLOPT_HTTPAUTH</span> 
+<p class="level1">HTTP server authentication methods. See <span Class="emphasis">CURLOPT_HTTPAUTH(3)</span> 
+<p class="level0"><a name="CURLOPTTLSAUTHUSERNAME"></a><span class="nroffip">CURLOPT_TLSAUTH_USERNAME</span> 
+<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> 
+<p class="level1">Enable SASL initial response. See <span Class="emphasis">CURLOPT_SASL_IR(3)</span> 
+<p class="level0"><a name="CURLOPTXOAUTH2BEARER"></a><span class="nroffip">CURLOPT_XOAUTH2_BEARER</span> 
+<p class="level1">OAuth2 bearer token. See <span Class="emphasis">CURLOPT_XOAUTH2_BEARER(3)</span> <a name="HTTP"></a><h2 class="nroffsh">HTTP OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTAUTOREFERER"></a><span class="nroffip">CURLOPT_AUTOREFERER</span> 
+<p class="level1">Automatically set Referer: header. See <span Class="emphasis">CURLOPT_AUTOREFERER(3)</span> 
+<p class="level0"><a name="CURLOPTACCEPTENCODING"></a><span class="nroffip">CURLOPT_ACCEPT_ENCODING</span> 
+<p class="level1">Accept-Encoding and automatic decompressing data. See <span Class="emphasis">CURLOPT_ACCEPT_ENCODING(3)</span> 
+<p class="level0"><a name="CURLOPTTRANSFERENCODING"></a><span class="nroffip">CURLOPT_TRANSFER_ENCODING</span> 
+<p class="level1">Request Transfer-Encoding. See <span Class="emphasis">CURLOPT_TRANSFER_ENCODING(3)</span> 
+<p class="level0"><a name="CURLOPTFOLLOWLOCATION"></a><span class="nroffip">CURLOPT_FOLLOWLOCATION</span> 
+<p class="level1">Follow HTTP redirects. See <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span> 
+<p class="level0"><a name="CURLOPTUNRESTRICTEDAUTH"></a><span class="nroffip">CURLOPT_UNRESTRICTED_AUTH</span> 
+<p class="level1">Do not restrict authentication to original host. <span Class="emphasis">CURLOPT_UNRESTRICTED_AUTH(3)</span> 
+<p class="level0"><a name="CURLOPTMAXREDIRS"></a><span class="nroffip">CURLOPT_MAXREDIRS</span> 
+<p class="level1">Maximum number of redirects to follow. See <span Class="emphasis">CURLOPT_MAXREDIRS(3)</span> 
+<p class="level0"><a name="CURLOPTPOSTREDIR"></a><span class="nroffip">CURLOPT_POSTREDIR</span> 
+<p class="level1">How to act on redirects after POST. See <span Class="emphasis">CURLOPT_POSTREDIR(3)</span> 
+<p class="level0"><a name="CURLOPTPUT"></a><span class="nroffip">CURLOPT_PUT</span> 
+<p class="level1">Issue a HTTP PUT request. See <span Class="emphasis">CURLOPT_PUT(3)</span> 
+<p class="level0"><a name="CURLOPTPOST"></a><span class="nroffip">CURLOPT_POST</span> 
+<p class="level1">Issue a HTTP POST request. See <span Class="emphasis">CURLOPT_POST(3)</span> 
+<p class="level0"><a name="CURLOPTPOSTFIELDS"></a><span class="nroffip">CURLOPT_POSTFIELDS</span> 
+<p class="level1">Send a POST with this data. See <span Class="emphasis">CURLOPT_POSTFIELDS(3)</span> 
+<p class="level0"><a name="CURLOPTPOSTFIELDSIZE"></a><span class="nroffip">CURLOPT_POSTFIELDSIZE</span> 
+<p class="level1">The POST data is this big. See <span Class="emphasis">CURLOPT_POSTFIELDSIZE(3)</span> 
+<p class="level0"><a name="CURLOPTPOSTFIELDSIZELARGE"></a><span class="nroffip">CURLOPT_POSTFIELDSIZE_LARGE</span> 
+<p class="level1">The POST data is this big. See <span Class="emphasis">CURLOPT_POSTFIELDSIZE_LARGE(3)</span> 
+<p class="level0"><a name="CURLOPTCOPYPOSTFIELDS"></a><span class="nroffip">CURLOPT_COPYPOSTFIELDS</span> 
+<p class="level1">Send a POST with this data - and copy it. See <span Class="emphasis">CURLOPT_COPYPOSTFIELDS(3)</span> 
+<p class="level0"><a name="CURLOPTHTTPPOST"></a><span class="nroffip">CURLOPT_HTTPPOST</span> 
+<p class="level1">Multipart formpost HTTP POST. See <span Class="emphasis">CURLOPT_HTTPPOST(3)</span> 
+<p class="level0"><a name="CURLOPTREFERER"></a><span class="nroffip">CURLOPT_REFERER</span> 
+<p class="level1">Referer: header. See <span Class="emphasis">CURLOPT_REFERER(3)</span> 
+<p class="level0"><a name="CURLOPTUSERAGENT"></a><span class="nroffip">CURLOPT_USERAGENT</span> 
+<p class="level1">User-Agent: header. See <span Class="emphasis">CURLOPT_USERAGENT(3)</span> 
+<p class="level0"><a name="CURLOPTHTTPHEADER"></a><span class="nroffip">CURLOPT_HTTPHEADER</span> 
+<p class="level1">Custom HTTP headers. See <span Class="emphasis">CURLOPT_HTTPHEADER(3)</span> 
+<p class="level0"><a name="CURLOPTHEADEROPT"></a><span class="nroffip">CURLOPT_HEADEROPT</span> 
+<p class="level1">Control custom headers. See <span Class="emphasis">CURLOPT_HEADEROPT(3)</span> 
+<p class="level0"><a name="CURLOPTPROXYHEADER"></a><span class="nroffip">CURLOPT_PROXYHEADER</span> 
+<p class="level1">Custom HTTP headers sent to proxy. See <span Class="emphasis">CURLOPT_PROXYHEADER(3)</span> 
+<p class="level0"><a name="CURLOPTHTTP200ALIASES"></a><span class="nroffip">CURLOPT_HTTP200ALIASES</span> 
+<p class="level1">Alternative versions of 200 OK. See <span Class="emphasis">CURLOPT_HTTP200ALIASES(3)</span> 
+<p class="level0"><a name="CURLOPTCOOKIE"></a><span class="nroffip">CURLOPT_COOKIE</span> 
+<p class="level1">Cookie(s) to send. See <span Class="emphasis">CURLOPT_COOKIE(3)</span> 
+<p class="level0"><a name="CURLOPTCOOKIEFILE"></a><span class="nroffip">CURLOPT_COOKIEFILE</span> 
+<p class="level1">File to read cookies from. See <span Class="emphasis">CURLOPT_COOKIEFILE(3)</span> 
+<p class="level0"><a name="CURLOPTCOOKIEJAR"></a><span class="nroffip">CURLOPT_COOKIEJAR</span> 
+<p class="level1">File to write cookies to. See <span Class="emphasis">CURLOPT_COOKIEJAR(3)</span> 
+<p class="level0"><a name="CURLOPTCOOKIESESSION"></a><span class="nroffip">CURLOPT_COOKIESESSION</span> 
+<p class="level1">Start a new cookie session. See <span Class="emphasis">CURLOPT_COOKIESESSION(3)</span> 
+<p class="level0"><a name="CURLOPTCOOKIELIST"></a><span class="nroffip">CURLOPT_COOKIELIST</span> 
+<p class="level1">Add or control cookies. See <span Class="emphasis">CURLOPT_COOKIELIST(3)</span> 
+<p class="level0"><a name="CURLOPTHTTPGET"></a><span class="nroffip">CURLOPT_HTTPGET</span> 
+<p class="level1">Do a HTTP GET request. See <span Class="emphasis">CURLOPT_HTTPGET(3)</span> 
+<p class="level0"><a name="CURLOPTHTTPVERSION"></a><span class="nroffip">CURLOPT_HTTP_VERSION</span> 
+<p class="level1">HTTP version to use. <span Class="emphasis">CURLOPT_HTTP_VERSION(3)</span> 
+<p class="level0"><a name="CURLOPTIGNORECONTENTLENGTH"></a><span class="nroffip">CURLOPT_IGNORE_CONTENT_LENGTH</span> 
+<p class="level1">Ignore Content-Length. See <span Class="emphasis">CURLOPT_IGNORE_CONTENT_LENGTH(3)</span> 
+<p class="level0"><a name="CURLOPTHTTPCONTENTDECODING"></a><span class="nroffip">CURLOPT_HTTP_CONTENT_DECODING</span> 
+<p class="level1">Disable Content decoding. See <span Class="emphasis">CURLOPT_HTTP_CONTENT_DECODING(3)</span> 
+<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> 
+<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> 
+<p class="level0"><a name="CURLOPTMAILRCPT"></a><span class="nroffip">CURLOPT_MAIL_RCPT</span> 
+<p class="level1">Address of the recipients. See <span Class="emphasis">CURLOPT_MAIL_RCPT(3)</span> 
+<p class="level0"><a name="CURLOPTMAILAUTH"></a><span class="nroffip">CURLOPT_MAIL_AUTH</span> 
+<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> 
+<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> 
+<p class="level0"><a name="CURLOPTQUOTE"></a><span class="nroffip">CURLOPT_QUOTE</span> 
+<p class="level1">Commands to run before transfer. See <span Class="emphasis">CURLOPT_QUOTE(3)</span> 
+<p class="level0"><a name="CURLOPTPOSTQUOTE"></a><span class="nroffip">CURLOPT_POSTQUOTE</span> 
+<p class="level1">Commands to run after transfer. See <span Class="emphasis">CURLOPT_POSTQUOTE(3)</span> 
+<p class="level0"><a name="CURLOPTPREQUOTE"></a><span class="nroffip">CURLOPT_PREQUOTE</span> 
+<p class="level1">Commands to run just before transfer. See <span Class="emphasis">CURLOPT_PREQUOTE(3)</span> 
+<p class="level0"><a name="CURLOPTAPPEND"></a><span class="nroffip">CURLOPT_APPEND</span> 
+<p class="level1">Append to remote file. See <span Class="emphasis">CURLOPT_APPEND(3)</span> 
+<p class="level0"><a name="CURLOPTFTPUSEEPRT"></a><span class="nroffip">CURLOPT_FTP_USE_EPRT</span> 
+<p class="level1">Use EPTR. See <span Class="emphasis">CURLOPT_FTP_USE_EPRT(3)</span> 
+<p class="level0"><a name="CURLOPTFTPUSEEPSV"></a><span class="nroffip">CURLOPT_FTP_USE_EPSV</span> 
+<p class="level1">Use EPSV. See <span Class="emphasis">CURLOPT_FTP_USE_EPSV(3)</span> 
+<p class="level0"><a name="CURLOPTFTPUSEPRET"></a><span class="nroffip">CURLOPT_FTP_USE_PRET</span> 
+<p class="level1">Use PRET. See <span Class="emphasis">CURLOPT_FTP_USE_PRET(3)</span> 
+<p class="level0"><a name="CURLOPTFTPCREATEMISSINGDIRS"></a><span class="nroffip">CURLOPT_FTP_CREATE_MISSING_DIRS</span> 
+<p class="level1">Create missing directories on the remote server. See <span Class="emphasis">CURLOPT_FTP_CREATE_MISSING_DIRS(3)</span> 
+<p class="level0"><a name="CURLOPTFTPRESPONSETIMEOUT"></a><span class="nroffip">CURLOPT_FTP_RESPONSE_TIMEOUT</span> 
+<p class="level1">Timeout for FTP responses. See <span Class="emphasis">CURLOPT_FTP_RESPONSE_TIMEOUT(3)</span> 
+<p class="level0"><a name="CURLOPTFTPALTERNATIVETOUSER"></a><span class="nroffip">CURLOPT_FTP_ALTERNATIVE_TO_USER</span> 
+<p class="level1">Alternative to USER. See <span Class="emphasis">CURLOPT_FTP_ALTERNATIVE_TO_USER(3)</span> 
+<p class="level0"><a name="CURLOPTFTPSKIPPASVIP"></a><span class="nroffip">CURLOPT_FTP_SKIP_PASV_IP</span> 
+<p class="level1">Ignore the IP address in the PASV response. See <span Class="emphasis">CURLOPT_FTP_SKIP_PASV_IP(3)</span> 
+<p class="level0"><a name="CURLOPTFTPSSLAUTH"></a><span class="nroffip">CURLOPT_FTPSSLAUTH</span> 
+<p class="level1">Control how to do TLS. See <span Class="emphasis">CURLOPT_FTPSSLAUTH(3)</span> 
+<p class="level0"><a name="CURLOPTFTPSSLCCC"></a><span class="nroffip">CURLOPT_FTP_SSL_CCC</span> 
+<p class="level1">Back to non-TLS again after authentication. See <span Class="emphasis">CURLOPT_FTP_SSL_CCC(3)</span> 
+<p class="level0"><a name="CURLOPTFTPACCOUNT"></a><span class="nroffip">CURLOPT_FTP_ACCOUNT</span> 
+<p class="level1">Send ACCT command. See <span Class="emphasis">CURLOPT_FTP_ACCOUNT(3)</span> 
+<p class="level0"><a name="CURLOPTFTPFILEMETHOD"></a><span class="nroffip">CURLOPT_FTP_FILEMETHOD</span> 
+<p class="level1">Specify how to reach files. See <span Class="emphasis">CURLOPT_FTP_FILEMETHOD(3)</span> <a name="RTSP"></a><h2 class="nroffsh">RTSP OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTRTSPREQUEST"></a><span class="nroffip">CURLOPT_RTSP_REQUEST</span> 
+<p class="level1">RTSP request. See <span Class="emphasis">CURLOPT_RTSP_REQUEST(3)</span> 
+<p class="level0"><a name="CURLOPTRTSPSESSIONID"></a><span class="nroffip">CURLOPT_RTSP_SESSION_ID</span> 
+<p class="level1">RTSP session-id. See <span Class="emphasis">CURLOPT_RTSP_SESSION_ID(3)</span> 
+<p class="level0"><a name="CURLOPTRTSPSTREAMURI"></a><span class="nroffip">CURLOPT_RTSP_STREAM_URI</span> 
+<p class="level1">RTSP stream URI. See <span Class="emphasis">CURLOPT_RTSP_STREAM_URI(3)</span> 
+<p class="level0"><a name="CURLOPTRTSPTRANSPORT"></a><span class="nroffip">CURLOPT_RTSP_TRANSPORT</span> 
+<p class="level1">RTSP Transport: header. See <span Class="emphasis">CURLOPT_RTSP_TRANSPORT(3)</span> 
+<p class="level0"><a name="CURLOPTRTSPCLIENTCSEQ"></a><span class="nroffip">CURLOPT_RTSP_CLIENT_CSEQ</span> 
+<p class="level1">Client CSEQ number. See <span Class="emphasis">CURLOPT_RTSP_CLIENT_CSEQ(3)</span> 
+<p class="level0"><a name="CURLOPTRTSPSERVERCSEQ"></a><span class="nroffip">CURLOPT_RTSP_SERVER_CSEQ</span> 
+<p class="level1">CSEQ number for RTSP Server-&gt;Client request. See <span Class="emphasis">CURLOPT_RTSP_SERVER_CSEQ(3)</span> <a name="PROTOCOL"></a><h2 class="nroffsh">PROTOCOL OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTTRANSFERTEXT"></a><span class="nroffip">CURLOPT_TRANSFERTEXT</span> 
+<p class="level1">Use text transfer. See <span Class="emphasis">CURLOPT_TRANSFERTEXT(3)</span> 
+<p class="level0"><a name="CURLOPTPROXYTRANSFERMODE"></a><span class="nroffip">CURLOPT_PROXY_TRANSFER_MODE</span> 
+<p class="level1">Add transfer mode to URL over proxy. See <span Class="emphasis">CURLOPT_PROXY_TRANSFER_MODE(3)</span> 
+<p class="level0"><a name="CURLOPTCRLF"></a><span class="nroffip">CURLOPT_CRLF</span> 
+<p class="level1">Convert newlines. See <span Class="emphasis">CURLOPT_CRLF(3)</span> 
+<p class="level0"><a name="CURLOPTRANGE"></a><span class="nroffip">CURLOPT_RANGE</span> 
+<p class="level1">Range requests. See <span Class="emphasis">CURLOPT_RANGE(3)</span> 
+<p class="level0"><a name="CURLOPTRESUMEFROM"></a><span class="nroffip">CURLOPT_RESUME_FROM</span> 
+<p class="level1">Resume a transfer. See <span Class="emphasis">CURLOPT_RESUME_FROM(3)</span> 
+<p class="level0"><a name="CURLOPTRESUMEFROMLARGE"></a><span class="nroffip">CURLOPT_RESUME_FROM_LARGE</span> 
+<p class="level1">Resume a transfer. See <span Class="emphasis">CURLOPT_RESUME_FROM_LARGE(3)</span> 
+<p class="level0"><a name="CURLOPTCUSTOMREQUEST"></a><span class="nroffip">CURLOPT_CUSTOMREQUEST</span> 
+<p class="level1">Custom request/method. See <span Class="emphasis">CURLOPT_CUSTOMREQUEST(3)</span> 
+<p class="level0"><a name="CURLOPTFILETIME"></a><span class="nroffip">CURLOPT_FILETIME</span> 
+<p class="level1">Request file modification date and time. See <span Class="emphasis">CURLOPT_FILETIME(3)</span> 
+<p class="level0"><a name="CURLOPTDIRLISTONLY"></a><span class="nroffip">CURLOPT_DIRLISTONLY</span> 
+<p class="level1">List only. See <span Class="emphasis">CURLOPT_DIRLISTONLY(3)</span> 
+<p class="level0"><a name="CURLOPTNOBODY"></a><span class="nroffip">CURLOPT_NOBODY</span> 
+<p class="level1">Do not get the body contents. See <span Class="emphasis">CURLOPT_NOBODY(3)</span> 
+<p class="level0"><a name="CURLOPTINFILESIZE"></a><span class="nroffip">CURLOPT_INFILESIZE</span> 
+<p class="level1">Size of file to send. <span Class="emphasis">CURLOPT_INFILESIZE(3)</span> 
+<p class="level0"><a name="CURLOPTINFILESIZELARGE"></a><span class="nroffip">CURLOPT_INFILESIZE_LARGE</span> 
+<p class="level1">Size of file to send. <span Class="emphasis">CURLOPT_INFILESIZE_LARGE(3)</span> 
+<p class="level0"><a name="CURLOPTUPLOAD"></a><span class="nroffip">CURLOPT_UPLOAD</span> 
+<p class="level1">Upload data. See <span Class="emphasis">CURLOPT_UPLOAD(3)</span> 
+<p class="level0"><a name="CURLOPTMAXFILESIZE"></a><span class="nroffip">CURLOPT_MAXFILESIZE</span> 
+<p class="level1">Maximum file size to get. See <span Class="emphasis">CURLOPT_MAXFILESIZE(3)</span> 
+<p class="level0"><a name="CURLOPTMAXFILESIZELARGE"></a><span class="nroffip">CURLOPT_MAXFILESIZE_LARGE</span> 
+<p class="level1">Maximum file size to get. See <span Class="emphasis">CURLOPT_MAXFILESIZE_LARGE(3)</span> 
+<p class="level0"><a name="CURLOPTTIMECONDITION"></a><span class="nroffip">CURLOPT_TIMECONDITION</span> 
+<p class="level1">Make a time conditional request. See <span Class="emphasis">CURLOPT_TIMECONDITION(3)</span> 
+<p class="level0"><a name="CURLOPTTIMEVALUE"></a><span class="nroffip">CURLOPT_TIMEVALUE</span> 
+<p class="level1">Time value for the time conditional request. See <span Class="emphasis">CURLOPT_TIMEVALUE(3)</span> <a name="CONNECTION"></a><h2 class="nroffsh">CONNECTION OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTTIMEOUT"></a><span class="nroffip">CURLOPT_TIMEOUT</span> 
+<p class="level1">Timeout for the entire request. See <span Class="emphasis">CURLOPT_TIMEOUT(3)</span> 
+<p class="level0"><a name="CURLOPTTIMEOUTMS"></a><span class="nroffip">CURLOPT_TIMEOUT_MS</span> 
+<p class="level1">Millisecond timeout for the entire request. See <span Class="emphasis">CURLOPT_TIMEOUT_MS(3)</span> 
+<p class="level0"><a name="CURLOPTLOWSPEEDLIMIT"></a><span class="nroffip">CURLOPT_LOW_SPEED_LIMIT</span> 
+<p class="level1">Low speed limit to abort transfer. See <span Class="emphasis">CURLOPT_LOW_SPEED_LIMIT(3)</span> 
+<p class="level0"><a name="CURLOPTLOWSPEEDTIME"></a><span class="nroffip">CURLOPT_LOW_SPEED_TIME</span> 
+<p class="level1">Time to be below the speed to trigger low speed abort. See <span Class="emphasis">CURLOPT_LOW_SPEED_TIME(3)</span> 
+<p class="level0"><a name="CURLOPTMAXSENDSPEEDLARGE"></a><span class="nroffip">CURLOPT_MAX_SEND_SPEED_LARGE</span> 
+<p class="level1">Cap the upload speed to this. See <span Class="emphasis">CURLOPT_MAX_SEND_SPEED_LARGE(3)</span> 
+<p class="level0"><a name="CURLOPTMAXRECVSPEEDLARGE"></a><span class="nroffip">CURLOPT_MAX_RECV_SPEED_LARGE</span> 
+<p class="level1">Cap the download speed to this. See <span Class="emphasis">CURLOPT_MAX_RECV_SPEED_LARGE(3)</span> 
+<p class="level0"><a name="CURLOPTMAXCONNECTS"></a><span class="nroffip">CURLOPT_MAXCONNECTS</span> 
+<p class="level1">Maximum number of connections in the connection pool. See <span Class="emphasis">CURLOPT_MAXCONNECTS(3)</span> 
+<p class="level0"><a name="CURLOPTFRESHCONNECT"></a><span class="nroffip">CURLOPT_FRESH_CONNECT</span> 
+<p class="level1">Use a new connection. <span Class="emphasis">CURLOPT_FRESH_CONNECT(3)</span> 
+<p class="level0"><a name="CURLOPTFORBIDREUSE"></a><span class="nroffip">CURLOPT_FORBID_REUSE</span> 
+<p class="level1">Prevent subsequent connections from re-using this. See <span Class="emphasis">CURLOPT_FORBID_REUSE(3)</span> 
+<p class="level0"><a name="CURLOPTCONNECTTIMEOUT"></a><span class="nroffip">CURLOPT_CONNECTTIMEOUT</span> 
+<p class="level1">Timeout for the connection phase. See <span Class="emphasis">CURLOPT_CONNECTTIMEOUT(3)</span> 
+<p class="level0"><a name="CURLOPTCONNECTTIMEOUTMS"></a><span class="nroffip">CURLOPT_CONNECTTIMEOUT_MS</span> 
+<p class="level1">Millisecond timeout for the connection phase. See <span Class="emphasis">CURLOPT_CONNECTTIMEOUT_MS(3)</span> 
+<p class="level0"><a name="CURLOPTIPRESOLVE"></a><span class="nroffip">CURLOPT_IPRESOLVE</span> 
+<p class="level1">IP version to resolve to. See <span Class="emphasis">CURLOPT_IPRESOLVE(3)</span> 
+<p class="level0"><a name="CURLOPTCONNECTONLY"></a><span class="nroffip">CURLOPT_CONNECT_ONLY</span> 
+<p class="level1">Only connect, nothing else. See <span Class="emphasis">CURLOPT_CONNECT_ONLY(3)</span> 
+<p class="level0"><a name="CURLOPTUSESSL"></a><span class="nroffip">CURLOPT_USE_SSL</span> 
+<p class="level1">Use TLS/SSL. See <span Class="emphasis">CURLOPT_USE_SSL(3)</span> 
+<p class="level0"><a name="CURLOPTRESOLVE"></a><span class="nroffip">CURLOPT_RESOLVE</span> 
+<p class="level1">Provide fixed/fake name resolves. See <span Class="emphasis">CURLOPT_RESOLVE(3)</span> 
+<p class="level0"><a name="CURLOPTDNSINTERFACE"></a><span class="nroffip">CURLOPT_DNS_INTERFACE</span> 
+<p class="level1">Bind name resolves to this interface. See <span Class="emphasis">CURLOPT_DNS_INTERFACE(3)</span> 
+<p class="level0"><a name="CURLOPTDNSLOCALIP4"></a><span class="nroffip">CURLOPT_DNS_LOCAL_IP4</span> 
+<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">
+<p class="level0"><a name="CURLOPTSSLCERT"></a><span class="nroffip">CURLOPT_SSLCERT</span> 
+<p class="level1">Client cert. See <span Class="emphasis">CURLOPT_SSLCERT(3)</span> 
+<p class="level0"><a name="CURLOPTSSLCERTTYPE"></a><span class="nroffip">CURLOPT_SSLCERTTYPE</span> 
+<p class="level1">Client cert type.  See <span Class="emphasis">CURLOPT_SSLCERTTYPE(3)</span> 
+<p class="level0"><a name="CURLOPTSSLKEY"></a><span class="nroffip">CURLOPT_SSLKEY</span> 
+<p class="level1">Client key. See <span Class="emphasis">CURLOPT_SSLKEY(3)</span> 
+<p class="level0"><a name="CURLOPTSSLKEYTYPE"></a><span class="nroffip">CURLOPT_SSLKEYTYPE</span> 
+<p class="level1">Client key type. See <span Class="emphasis">CURLOPT_SSLKEYTYPE(3)</span> 
+<p class="level0"><a name="CURLOPTKEYPASSWD"></a><span class="nroffip">CURLOPT_KEYPASSWD</span> 
+<p class="level1">Client key password. See <span Class="emphasis">CURLOPT_KEYPASSWD(3)</span> 
+<p class="level0"><a name="CURLOPTSSLENABLEALPN"></a><span class="nroffip">CURLOPT_SSL_ENABLE_ALPN</span> 
+<p class="level1">Enable use of ALPN. See <span Class="emphasis">CURLOPT_SSL_ENABLE_ALPN(3)</span> 
+<p class="level0"><a name="CURLOPTSSLENABLENPN"></a><span class="nroffip">CURLOPT_SSL_ENABLE_NPN</span> 
+<p class="level1">Enable use of NPN. See <span Class="emphasis">CURLOPT_SSL_ENABLE_NPN(3)</span> 
+<p class="level0"><a name="CURLOPTSSLENGINE"></a><span class="nroffip">CURLOPT_SSLENGINE</span> 
+<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> 
+<p class="level1">Issuer certificate. See <span Class="emphasis">CURLOPT_ISSUERCERT(3)</span> 
+<p class="level0"><a name="CURLOPTCAPATH"></a><span class="nroffip">CURLOPT_CAPATH</span> 
+<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="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> 
+<p class="level1">Set pinned SSL public key . See <span Class="emphasis">CURLOPT_PINNEDPUBLICKEY(3)</span> 
+<p class="level0"><a name="CURLOPTRANDOMFILE"></a><span class="nroffip">CURLOPT_RANDOM_FILE</span> 
+<p class="level1">Provide source for entropy random data. See <span Class="emphasis">CURLOPT_RANDOM_FILE(3)</span> 
+<p class="level0"><a name="CURLOPTEGDSOCKET"></a><span class="nroffip">CURLOPT_EGDSOCKET</span> 
+<p class="level1">Identify EGD socket for entropy. See <span Class="emphasis">CURLOPT_EGDSOCKET(3)</span> 
+<p class="level0"><a name="CURLOPTSSLCIPHERLIST"></a><span class="nroffip">CURLOPT_SSL_CIPHER_LIST</span> 
+<p class="level1">Ciphers to use. See <span Class="emphasis">CURLOPT_SSL_CIPHER_LIST(3)</span> 
+<p class="level0"><a name="CURLOPTSSLSESSIONIDCACHE"></a><span class="nroffip">CURLOPT_SSL_SESSIONID_CACHE</span> 
+<p class="level1">Disable SSL session-id cache. See <span Class="emphasis">CURLOPT_SSL_SESSIONID_CACHE(3)</span> 
+<p class="level0"><a name="CURLOPTSSLOPTIONS"></a><span class="nroffip">CURLOPT_SSL_OPTIONS</span> 
+<p class="level1">Control SSL behavior. See <span Class="emphasis">CURLOPT_SSL_OPTIONS(3)</span> 
+<p class="level0"><a name="CURLOPTKRBLEVEL"></a><span class="nroffip">CURLOPT_KRBLEVEL</span> 
+<p class="level1">Kerberos security level. See <span Class="emphasis">CURLOPT_KRBLEVEL(3)</span> 
+<p class="level0"><a name="CURLOPTGSSAPIDELEGATION"></a><span class="nroffip">CURLOPT_GSSAPI_DELEGATION</span> 
+<p class="level1">Disable GSS-API delegation. See <span Class="emphasis">CURLOPT_GSSAPI_DELEGATION(3)</span> <a name="SSH"></a><h2 class="nroffsh">SSH OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTSSHAUTHTYPES"></a><span class="nroffip">CURLOPT_SSH_AUTH_TYPES</span> 
+<p class="level1">SSH authentication types. See <span Class="emphasis">CURLOPT_SSH_AUTH_TYPES(3)</span> 
+<p class="level0"><a name="CURLOPTSSHHOSTPUBLICKEYMD5"></a><span class="nroffip">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</span> 
+<p class="level1">MD5 of host's public key. See <span Class="emphasis">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3)</span> 
+<p class="level0"><a name="CURLOPTSSHPUBLICKEYFILE"></a><span class="nroffip">CURLOPT_SSH_PUBLIC_KEYFILE</span> 
+<p class="level1">File name of public key. See <span Class="emphasis">CURLOPT_SSH_PUBLIC_KEYFILE(3)</span> 
+<p class="level0"><a name="CURLOPTSSHPRIVATEKEYFILE"></a><span class="nroffip">CURLOPT_SSH_PRIVATE_KEYFILE</span> 
+<p class="level1">File name of private key. See <span Class="emphasis">CURLOPT_SSH_PRIVATE_KEYFILE(3)</span> 
+<p class="level0"><a name="CURLOPTSSHKNOWNHOSTS"></a><span class="nroffip">CURLOPT_SSH_KNOWNHOSTS</span> 
+<p class="level1">File name with known hosts. See <span Class="emphasis">CURLOPT_SSH_KNOWNHOSTS(3)</span> 
+<p class="level0"><a name="CURLOPTSSHKEYFUNCTION"></a><span class="nroffip">CURLOPT_SSH_KEYFUNCTION</span> 
+<p class="level1">Callback for known hosts handling. See <span Class="emphasis">CURLOPT_SSH_KEYFUNCTION(3)</span> 
+<p class="level0"><a name="CURLOPTSSHKEYDATA"></a><span class="nroffip">CURLOPT_SSH_KEYDATA</span> 
+<p class="level1">Custom pointer to pass to ssh key callback. See <span Class="emphasis">CURLOPT_SSH_KEYDATA(3)</span> <a name="OTHER"></a><h2 class="nroffsh">OTHER OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTPRIVATE"></a><span class="nroffip">CURLOPT_PRIVATE</span> 
+<p class="level1">Private pointer to store. See <span Class="emphasis">CURLOPT_PRIVATE(3)</span> 
+<p class="level0"><a name="CURLOPTSHARE"></a><span class="nroffip">CURLOPT_SHARE</span> 
+<p class="level1">Share object to use. See <span Class="emphasis">CURLOPT_SHARE(3)</span> 
+<p class="level0"><a name="CURLOPTNEWFILEPERMS"></a><span class="nroffip">CURLOPT_NEW_FILE_PERMS</span> 
+<p class="level1">Mode for creating new remote files. See <span Class="emphasis">CURLOPT_NEW_FILE_PERMS(3)</span> 
+<p class="level0"><a name="CURLOPTNEWDIRECTORYPERMS"></a><span class="nroffip">CURLOPT_NEW_DIRECTORY_PERMS</span> 
+<p class="level1">Mode for creating new remote directories. See <span Class="emphasis">CURLOPT_NEW_DIRECTORY_PERMS(3)</span> <a name="TELNET"></a><h2 class="nroffsh">TELNET OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTTELNETOPTIONS"></a><span class="nroffip">CURLOPT_TELNETOPTIONS</span> 
+<p class="level1">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 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>, <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>
diff --git a/docs/libcurl/curl_easy_setopt.pdf b/docs/libcurl/curl_easy_setopt.pdf
new file mode 100644 (file)
index 0000000..dfee03b
Binary files /dev/null and b/docs/libcurl/curl_easy_setopt.pdf differ
diff --git a/docs/libcurl/curl_easy_strerror.html b/docs/libcurl/curl_easy_strerror.html
new file mode 100644 (file)
index 0000000..45bbded
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_easy_strerror 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">curl_easy_strerror - return string describing error code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_strerror.pdf b/docs/libcurl/curl_easy_strerror.pdf
new file mode 100644 (file)
index 0000000..eda58c6
Binary files /dev/null and b/docs/libcurl/curl_easy_strerror.pdf differ
index 50ce97d..06fd6fc 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2016, 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
@@ -40,10 +40,7 @@ will use strlen() on the input \fIurl\fP string to find out the size.
 
 If \fBoutlength\fP is non-NULL, the function will write the length of the
 returned string in the integer it points to. This allows an escaped string
-containing %00 to still get used properly after unescaping. Since this is a
-pointer to an \fIint\fP type, it can only return a value up to INT_MAX so no
-longer string can be unescaped if the string length is returned in this
-parameter.
+containing %00 to still get used properly after unescaping.
 
 You must \fIcurl_free(3)\fP the returned string when you're done with it.
 .SH AVAILABILITY
diff --git a/docs/libcurl/curl_easy_unescape.html b/docs/libcurl/curl_easy_unescape.html
new file mode 100644 (file)
index 0000000..537dbd4
--- /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>curl_easy_unescape 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">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 , 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. 
+<p class="level0">If <span Class="bold">outlength</span> is non-NULL, the function will write the length of the returned string in the integer it points to. This allows an escaped string containing %00 to still get used properly after unescaping. 
+<p class="level0">You must <a Class="emphasis" href="./curl_free.html">curl_free</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">RFC 3986</span><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_unescape.pdf b/docs/libcurl/curl_easy_unescape.pdf
new file mode 100644 (file)
index 0000000..b9e5ded
Binary files /dev/null and b/docs/libcurl/curl_easy_unescape.pdf differ
diff --git a/docs/libcurl/curl_escape.html b/docs/libcurl/curl_escape.html
new file mode 100644 (file)
index 0000000..28db84f
--- /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>curl_escape 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">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( 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). 
+<p class="level0">If the 'length' argument is set to 0, curl_escape() will use strlen() on the input 'url' string to find out the size. 
+<p class="level0">You must curl_free() the returned string when you're done with it. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Since 7.15.4, <a Class="emphasis" href="./curl_easy_escape.html">curl_easy_escape</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">RFC 2396</span><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_escape.pdf b/docs/libcurl/curl_escape.pdf
new file mode 100644 (file)
index 0000000..c831353
Binary files /dev/null and b/docs/libcurl/curl_escape.pdf differ
index 5d1faa5..6923913 100644 (file)
@@ -105,8 +105,6 @@ content then you must make sure strlen() on the data pointer returns zero.
 followed by a filename, causes that file to be read and its contents used
 as data in this part. This part does \fInot\fP automatically become a file
 upload part simply because its data was read from a file.
-
-The specified file needs to kept around until the associated transfer is done.
 .IP CURLFORM_FILE
 followed by a filename, makes this part a file upload part. It sets the
 \fIfilename\fP field to the basename of the provided filename, it reads the
@@ -119,8 +117,6 @@ providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename
 
 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.
-
-The specified file needs to kept around until the associated transfer is done.
 .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
@@ -148,8 +144,8 @@ data. The parameter you pass to \fICURLFORM_STREAM\fP is the pointer passed on
 to the read callback's fourth argument. If you want the part to look like a
 file upload one, set the \fICURLFORM_FILENAME\fP parameter as well. Note that
 when using \fICURLFORM_STREAM\fP, \fICURLFORM_CONTENTSLENGTH\fP must also be
-set with the total expected length of the part unless the formpost is sent
-chunked encoded. (Option added in libcurl 7.18.2)
+set with the total expected length of the part. (Option added in libcurl
+7.18.2)
 .IP CURLFORM_ARRAY
 Another possibility to send options to curl_formadd() is the
 \fBCURLFORM_ARRAY\fP option, that passes a struct curl_forms array pointer as
diff --git a/docs/libcurl/curl_formadd.html b/docs/libcurl/curl_formadd.html
new file mode 100644 (file)
index 0000000..23ffd92
--- /dev/null
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_formadd 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">curl_formadd - add a section to a multipart/formdata HTTP POST <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLFORMcode curl_formadd(struct curl_httppost **  firstitem,</span> <span Class="bold">struct curl_httppost **  lastitem,  ...);</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_formadd() is used to append sections when building a multipart/formdata HTTP POST (sometimes referred to as <a href="http://www.ietf.org/rfc/rfc2388.txt">RFC 2388</a>-style posts). Append one section at a time until you've added all the sections you want included and then you pass the <span Class="emphasis">firstitem</span> pointer as parameter to <span Class="emphasis">CURLOPT_HTTPPOST(3)</span>. <span Class="emphasis">lastitem</span> is set after each <a Class="emphasis" href="./curl_formadd.html">curl_formadd</a> call and on repeated invokes it should be left as set to allow repeated invokes to find the end of the list faster. 
+<p class="level0">After the <span Class="emphasis">lastitem</span> pointer follow the real arguments. 
+<p class="level0">The pointers <span Class="emphasis">firstitem</span> and <span Class="emphasis">lastitem</span> should both be pointing to NULL in the first call to this function. All list-data will be allocated by the function itself. You must call <a Class="emphasis" href="./curl_formfree.html">curl_formfree</a> on the <span Class="emphasis">firstitem</span> after the form post has been done to free the resources. 
+<p class="level0">Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with <span Class="emphasis">CURLOPT_HTTPHEADER(3)</span> as usual. 
+<p class="level0">First, there are some basics you need to understand about multipart/formdata posts. Each part consists of at least a NAME and a CONTENTS part. If the part is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME. Below, we'll discuss what options you use to set these properties in the parts you want to add to your post. 
+<p class="level0">The options listed first are for making normal parts. The options from <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a> through <a class="emphasis" href="#CURLFORMBUFFERLENGTH">CURLFORM_BUFFERLENGTH</a> are for file upload parts. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLFORMCOPYNAME"></a><span class="nroffip">CURLFORM_COPYNAME</span> 
+<p class="level1">followed by a string which provides the <span Class="emphasis">name</span> of this part. libcurl copies the string so your application doesn't need to keep it around after this function call. If the name isn't NUL-terminated, or if you'd like it to contain zero bytes, you must set its length with <span Class="bold">CURLFORM_NAMELENGTH</span>. The copied data will be freed by <a Class="emphasis" href="./curl_formfree.html">curl_formfree</a>. 
+<p class="level0"><a name="CURLFORMPTRNAME"></a><span class="nroffip">CURLFORM_PTRNAME</span> 
+<p class="level1">followed by a string which provides the <span Class="emphasis">name</span> of this part. libcurl will use the pointer and refer to the data in your application, so you must make sure it remains until curl no longer needs it. If the name isn't NUL-terminated, or if you'd like it to contain zero bytes, you must set its length with <span Class="bold">CURLFORM_NAMELENGTH</span>. 
+<p class="level0"><a name="CURLFORMCOPYCONTENTS"></a><span class="nroffip">CURLFORM_COPYCONTENTS</span> 
+<p class="level1">followed by a pointer to the contents of this part, the actual data to send away. libcurl copies the provided data, so your application doesn't need to keep it around after this function call. If the data isn't null terminated, or if you'd like it to contain zero bytes, you must set the length of the name with <a class="bold" href="#CURLFORMCONTENTSLENGTH">CURLFORM_CONTENTSLENGTH</a>. The copied data will be freed by <a Class="emphasis" href="./curl_formfree.html">curl_formfree</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> 
+<p class="level1">is used in combination with <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a>. Followed by a pointer to a string, it tells libcurl to use the given string as the <span Class="emphasis">filename</span> in the file upload part instead of the actual file name. 
+<p class="level0"><a name="CURLFORMBUFFER"></a><span class="nroffip">CURLFORM_BUFFER</span> 
+<p class="level1">is used for custom file upload parts without use of <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a>.  It tells libcurl that the file contents are already present in a buffer.  The parameter is a string which provides the <span Class="emphasis">filename</span> field in the content header. 
+<p class="level0"><a name="CURLFORMBUFFERPTR"></a><span class="nroffip">CURLFORM_BUFFERPTR</span> 
+<p class="level1">is used in combination with <a class="emphasis" href="#CURLFORMBUFFER">CURLFORM_BUFFER</a>. The parameter is a pointer to the buffer to be uploaded. This buffer must not be freed until after <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a> is called. You must also use <a class="emphasis" href="#CURLFORMBUFFERLENGTH">CURLFORM_BUFFERLENGTH</a> to set the number of bytes in the buffer. 
+<p class="level0"><a name="CURLFORMBUFFERLENGTH"></a><span class="nroffip">CURLFORM_BUFFERLENGTH</span> 
+<p class="level1">is used in combination with <a class="emphasis" href="#CURLFORMBUFFER">CURLFORM_BUFFER</a>. The parameter is a long which gives the length of the buffer. 
+<p class="level0"><a name="CURLFORMSTREAM"></a><span class="nroffip">CURLFORM_STREAM</span> 
+<p class="level1">Tells libcurl to use the <span Class="emphasis">CURLOPT_READFUNCTION(3)</span> callback to get data. The parameter you pass to <a class="emphasis" href="#CURLFORMSTREAM">CURLFORM_STREAM</a> is the pointer passed on to the read callback's fourth argument. If you want the part to look like a file upload one, set the <a class="emphasis" href="#CURLFORMFILENAME">CURLFORM_FILENAME</a> parameter as well. Note that when using <a class="emphasis" href="#CURLFORMSTREAM">CURLFORM_STREAM</a>, <a class="emphasis" href="#CURLFORMCONTENTSLENGTH">CURLFORM_CONTENTSLENGTH</a> must also be set with the total expected length of the part. (Option added in libcurl 7.18.2) 
+<p class="level0"><a name="CURLFORMARRAY"></a><span class="nroffip">CURLFORM_ARRAY</span> 
+<p class="level1">Another possibility to send options to curl_formadd() is the <a class="bold" href="#CURLFORMARRAY">CURLFORM_ARRAY</a> option, that passes a struct curl_forms array pointer as its value. Each curl_forms structure element has a CURLformoption and a char pointer. The final element in the array must be a CURLFORM_END. All available options can be used in an array, except the CURLFORM_ARRAY option itself!  The last argument in such an array must always be <span Class="bold">CURLFORM_END</span>. 
+<p class="level0"><a name="CURLFORMCONTENTHEADER"></a><span class="nroffip">CURLFORM_CONTENTHEADER</span> 
+<p class="level1">specifies extra headers for the form POST section.  This takes a curl_slist prepared in the usual way using <span Class="bold">curl_slist_append</span> and appends the list of headers to those libcurl automatically generates. The list must exist while the POST occurs, if you free it before the post completes you may experience problems. 
+<p class="level1">When you've passed the HttpPost pointer to <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</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 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>, <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>
diff --git a/docs/libcurl/curl_formadd.pdf b/docs/libcurl/curl_formadd.pdf
new file mode 100644 (file)
index 0000000..464a412
Binary files /dev/null and b/docs/libcurl/curl_formadd.pdf differ
diff --git a/docs/libcurl/curl_formfree.html b/docs/libcurl/curl_formfree.html
new file mode 100644 (file)
index 0000000..c1f528f
--- /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>curl_formfree 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">curl_formfree - free a previously build multipart/formdata HTTP POST chain <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">void curl_formfree(struct curl_httppost * form);</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_formfree() is used to clean up data previously built/appended with <a Class="emphasis" href="./curl_formadd.html">curl_formadd</a>. This must be called when the data has been used, which typically means after <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> has been called. 
+<p class="level0">The pointer to free is the same pointer you passed to the <span Class="emphasis">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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_formfree.pdf b/docs/libcurl/curl_formfree.pdf
new file mode 100644 (file)
index 0000000..1a7d327
Binary files /dev/null and b/docs/libcurl/curl_formfree.pdf differ
diff --git a/docs/libcurl/curl_formget.html b/docs/libcurl/curl_formget.html
new file mode 100644 (file)
index 0000000..66119d2
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_formget 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">curl_formget - serialize a previously built multipart/formdata HTTP POST chain <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_formget.pdf b/docs/libcurl/curl_formget.pdf
new file mode 100644 (file)
index 0000000..9230d22
Binary files /dev/null and b/docs/libcurl/curl_formget.pdf differ
diff --git a/docs/libcurl/curl_free.html b/docs/libcurl/curl_free.html
new file mode 100644 (file)
index 0000000..70ffd12
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_free 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">curl_free - reclaim memory that has been obtained through a libcurl call <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">void curl_free( char * ptr  );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_free reclaims memory that has been obtained through a libcurl call.  Use <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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_free.pdf b/docs/libcurl/curl_free.pdf
new file mode 100644 (file)
index 0000000..e21d228
Binary files /dev/null and b/docs/libcurl/curl_free.pdf differ
diff --git a/docs/libcurl/curl_getdate.html b/docs/libcurl/curl_getdate.html
new file mode 100644 (file)
index 0000000..ed6d217
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_getdate 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">curl_getdate - Convert a date string to number of seconds <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">time_t curl_getdate(char * datestring , time_t *now  );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><a Class="emphasis" href="./curl_getdate.html">curl_getdate</a> returns the number of seconds since the Epoch, January 1st 1970 00:00:00 in the UTC time zone, for the date and time that the <span Class="emphasis">datestring</span> parameter specifies. The <span Class="emphasis">now</span> parameter is not used, pass a NULL there. <a name="PARSING"></a><h2 class="nroffsh">PARSING DATES AND TIMES</h2>
+<p class="level0">A "date" is a string containing several items separated by whitespace. The order of the items is immaterial.  A date string may contain many flavors of items: 
+<p class="level0"><span Class="bold">calendar date items</span> Can be specified several ways. Month names can only be three-letter english abbreviations, numbers can be zero-prefixed and the year may use 2 or 4 digits. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6. 
+<p class="level0"><span Class="bold">time of the day items</span> This string specifies the time on a given day. You must specify it with 6 digits with two colons: HH:MM:SS. To not include the time in a date string, will make the function assume 00:00:00. Example: 18:19:21. 
+<p class="level0"><span Class="bold">time zone items</span> Specifies international time zone. There are a few acronyms supported, but in general you should instead use the specific relative time compared to UTC. Supported formats include: -1200, MST, +0100. 
+<p class="level0"><span Class="bold">day of the week items</span> Specifies a day of the week. Days of the week may be spelled out in full (using english): `Sunday', `Monday', etc or they may be abbreviated to their first three letters. This is usually not info that adds anything. 
+<p class="level0"><span Class="bold">pure numbers</span> If a decimal number of the form YYYYMMDD appears, then YYYY is read as the year, MM as the month number and DD as the day of the month, for the specified calendar date. 
+<p class="level0"><a name="EXAMPLES"></a><h2 class="nroffsh">EXAMPLES</h2>
+<p class="level0"><pre 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 <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">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>
diff --git a/docs/libcurl/curl_getdate.pdf b/docs/libcurl/curl_getdate.pdf
new file mode 100644 (file)
index 0000000..61210cd
Binary files /dev/null and b/docs/libcurl/curl_getdate.pdf differ
diff --git a/docs/libcurl/curl_getenv.html b/docs/libcurl/curl_getenv.html
new file mode 100644 (file)
index 0000000..caa5d86
--- /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>curl_getenv 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">curl_getenv - return value for environment name <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">char *curl_getenv(const char * name );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_getenv() is a portable wrapper for the getenv() function, meant to emulate its behaviour and provide an identical interface for all operating systems libcurl builds on (including win32). <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function will be removed from the public libcurl API in a near future. It will instead be made "available" by source code access only, and then as curlx_getenv(). <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If successful, curl_getenv() returns a pointer to the value of the specified environment. The memory it refers to is malloc()ed so the application must free() this when the data is no longer needed. When <a Class="emphasis" href="./curl_getenv.html">curl_getenv</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><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_getenv.pdf b/docs/libcurl/curl_getenv.pdf
new file mode 100644 (file)
index 0000000..4ae4170
Binary files /dev/null and b/docs/libcurl/curl_getenv.pdf differ
index 04ab043..2e3ff03 100644 (file)
@@ -42,14 +42,8 @@ these other libraries.
 
 See the description in \fIlibcurl(3)\fP of global environment requirements for
 details of how to use this function.
-.SH CAUTION
-\fIcurl_global_cleanup(3)\fP does not block waiting for any libcurl-created
-threads to terminate (such as threads used for name resolving). If a module
-containing libcurl is dynamically unloaded while libcurl-created threads are
-still running then your program may crash or other corruption may occur. We
-recommend you do not run libcurl from any module that may be unloaded
-dynamically. This behavior may be addressed in the future.
+
 .SH "SEE ALSO"
 .BR curl_global_init "(3), "
 .BR libcurl "(3), "
-.BR libcurl-thread "(3), "
+
diff --git a/docs/libcurl/curl_global_cleanup.html b/docs/libcurl/curl_global_cleanup.html
new file mode 100644 (file)
index 0000000..57d5dd0
--- /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>curl_global_cleanup 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">curl_global_cleanup - global libcurl cleanup <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">void curl_global_cleanup(void);</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function releases resources acquired by <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a>. 
+<p class="level0">You should call <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a> once for each call you make to <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a>, after you are done using libcurl. 
+<p class="level0"><span Class="bold">This function is not thread safe.</span> You must not call it when any other thread in the program (i.e. a thread sharing the same memory) is running. This doesn't just mean no other thread that is using libcurl.  Because <a Class="emphasis" 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="emphasis" 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>, <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>
diff --git a/docs/libcurl/curl_global_cleanup.pdf b/docs/libcurl/curl_global_cleanup.pdf
new file mode 100644 (file)
index 0000000..a0d98de
Binary files /dev/null and b/docs/libcurl/curl_global_cleanup.pdf differ
diff --git a/docs/libcurl/curl_global_init.html b/docs/libcurl/curl_global_init.html
new file mode 100644 (file)
index 0000000..075ab04
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_global_init 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">curl_global_init - Global libcurl initialisation <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLcode curl_global_init(long  flags );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function sets up the program environment that libcurl needs.  Think of it as an extension of the library loader. 
+<p class="level0">This function must be called at least once within a program (a program is all the code that shares a memory space) before the program calls any other function in libcurl.  The environment it sets up is constant for the life of the program and is the same for every program, so multiple calls have the same effect as one call. 
+<p class="level0">The flags option is a bit pattern that tells libcurl exactly what features to init, as described below. Set the desired bits by ORing the values together. In normal operation, you must specify CURL_GLOBAL_ALL.  Don't use any other value unless you are familiar with it and mean to control internal operations of libcurl. 
+<p class="level0"><span Class="bold">This function is not thread safe.</span> You must not call it when any other thread in the program (i.e. a thread sharing the same memory) is running. This doesn't just mean no other thread that is using libcurl.  Because <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="emphasis" href="./libcurl.html">libcurl</a> of global environment requirements for details of how to use this function. <a name="FLAGS"></a><h2 class="nroffsh">FLAGS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLGLOBALALL"></a><span class="nroffip">CURL_GLOBAL_ALL</span> 
+<p class="level1">Initialize everything possible. This sets all known bits except <a class="bold" href="#CURLGLOBALACKEINTR">CURL_GLOBAL_ACK_EINTR</a>. 
+<p class="level1">
+<p class="level0"><a name="CURLGLOBALSSL"></a><span class="nroffip">CURL_GLOBAL_SSL</span> 
+<p class="level1">Initialize SSL. 
+<p class="level1">The implication here is that if this bit is not set, the initialization of the SSL layer needs to be done by the application or at least outside of libcurl. The exact procedure how to do SSL initializtion depends on the TLS backend libcurl uses. 
+<p class="level1">Doing TLS based transfers without having the TLS layer initialized may lead to unexpected behaviors. 
+<p class="level0"><a name="CURLGLOBALWIN32"></a><span class="nroffip">CURL_GLOBAL_WIN32</span> 
+<p class="level1">Initialize the Win32 socket libraries. 
+<p class="level1">The implication here is that if this bit is not set, the initialization of winsock has to be done by the application or you risk getting undefined behaviors. This option exists for when the initialization is handled outside of libcurl so there's no need for libcurl to do it again. 
+<p class="level0"><a name="CURLGLOBALNOTHING"></a><span class="nroffip">CURL_GLOBAL_NOTHING</span> 
+<p class="level1">Initialise nothing extra. This sets no bit. 
+<p class="level0"><a name="CURLGLOBALDEFAULT"></a><span class="nroffip">CURL_GLOBAL_DEFAULT</span> 
+<p class="level1">A sensible default. It will init both SSL and Win32. Right now, this equals the functionality of the <a class="bold" href="#CURLGLOBALALL">CURL_GLOBAL_ALL</a> mask. 
+<p class="level0"><a name="CURLGLOBALACKEINTR"></a><span class="nroffip">CURL_GLOBAL_ACK_EINTR</span> 
+<p class="level1">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>, <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>
diff --git a/docs/libcurl/curl_global_init.pdf b/docs/libcurl/curl_global_init.pdf
new file mode 100644 (file)
index 0000000..73234cc
Binary files /dev/null and b/docs/libcurl/curl_global_init.pdf differ
diff --git a/docs/libcurl/curl_global_init_mem.html b/docs/libcurl/curl_global_init_mem.html
new file mode 100644 (file)
index 0000000..407ec7f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_global_init_mem 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">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 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">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> 
+<p class="level1">To replace free() 
+<p class="level0"><a name="void"></a><span class="nroffip">void *realloc_callback(void *ptr, size_t size);</span> 
+<p class="level1">To replace realloc() 
+<p class="level0"><a name="char"></a><span class="nroffip">char *strdup_callback(const char *str);</span> 
+<p class="level1">To replace strdup() 
+<p class="level0"><a name="void"></a><span class="nroffip">void *calloc_callback(size_t nmemb, size_t size);</span> 
+<p class="level1">To replace calloc() 
+<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>, <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>
diff --git a/docs/libcurl/curl_global_init_mem.pdf b/docs/libcurl/curl_global_init_mem.pdf
new file mode 100644 (file)
index 0000000..68135ac
Binary files /dev/null and b/docs/libcurl/curl_global_init_mem.pdf differ
diff --git a/docs/libcurl/curl_mprintf.html b/docs/libcurl/curl_mprintf.html
new file mode 100644 (file)
index 0000000..64d703a
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_printf 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">curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf, curl_mvsprintf - formatted output conversion <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/mprintf.h&gt;</span> 
+<p class="level0"><span Class="bold">int curl_mprintf(const char * format , ...);</span> <br><span Class="bold">int curl_mfprintf(FILE * fd , const char * format , ...);</span> <br><span Class="bold">int curl_msprintf(char * buffer , const char * format , ...);</span> <br><span Class="bold">int curl_msnprintf(char * buffer , size_t  maxlength , const char * format , ...);</span> <br><span Class="bold">int curl_mvprintf(const char * format , va_list  args );</span> <br><span Class="bold">int curl_mvfprintf(FILE * fd , const char * format , va_list  args );</span> <br><span Class="bold">int curl_mvsprintf(char * buffer , const char * format , va_list  args );</span> <br><span Class="bold">int curl_mvsnprintf(char * buffer , size_t  maxlength , const char * format , va_list  args );</span> <br><span Class="bold">char *curl_maprintf(const char * format , ...);</span> <br><span Class="bold">char *curl_mvaprintf(const char * format , va_list  args );</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">These are all functions that produce output according to a format string and given arguments. These are mostly clones of the well-known C-style functions and there will be no detailed explanation of all available formatting rules and usage here. 
+<p class="level0">See this table for notable exceptions. 
+<p class="level1">
+<p class="level1"><span Class="bold">curl_mprintf()</span> Normal printf() clone. 
+<p class="level1"><span Class="bold">curl_mfprintf()</span> Normal fprintf() clone. 
+<p class="level1"><span Class="bold">curl_msprintf()</span> Normal sprintf() clone. 
+<p class="level1"><span Class="bold">curl_msnprintf()</span> snprintf() clone. Many systems don't have this. It is just like <span Class="bold">sprintf</span> but with an extra argument after the buffer that specifies the length of the target buffer. 
+<p class="level1"><span Class="bold">curl_mvprintf()</span> Normal vprintf() clone. 
+<p class="level1"><span Class="bold">curl_mvfprintf()</span> Normal vfprintf() clone. 
+<p class="level1"><span Class="bold">curl_mvsprintf()</span> Normal vsprintf() clone. 
+<p class="level1"><span Class="bold">curl_mvsnprintf()</span> vsnprintf() clone.  Many systems don't have this. It is just like <span Class="bold">vsprintf</span> but with an extra argument after the buffer that specifies the length of the target buffer. 
+<p class="level1"><span Class="bold">curl_maprintf()</span> Like printf() but returns the output string as a malloc()ed string. The returned string must be free()ed by the receiver. 
+<p class="level1"><span Class="bold">curl_mvaprintf()</span> Like curl_maprintf() but takes a va_list pointer argument instead of a variable amount of arguments. 
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">These functions will be removed from the public libcurl API in the future. Do not use them in any new programs or projects. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">The <span Class="bold">curl_maprintf</span> and <span Class="bold">curl_mvaprintf</span> functions return a pointer to a newly allocated string, or NULL if it failed. 
+<p class="level0">All other functions return the number of characters they actually outputted. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">printf (3)</span>, <span Class="manpage">sprintf (3)</span>, <span Class="manpage">fprintf (3)</span>, <span Class="manpage">vprintf (3)</span><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_mprintf.pdf b/docs/libcurl/curl_mprintf.pdf
new file mode 100644 (file)
index 0000000..dbe8d2d
Binary files /dev/null and b/docs/libcurl/curl_mprintf.pdf differ
diff --git a/docs/libcurl/curl_multi_add_handle.html b/docs/libcurl/curl_multi_add_handle.html
new file mode 100644 (file)
index 0000000..e8b4def
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_add_handle 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">curl_multi_add_handle - add an easy handle to a multi session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 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. 
+<p class="level0">The easy handle will remain added to the multi handle until you remove it again with <a Class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle</a> - even when a transfer with that specific easy handle is completed. 
+<p class="level0">You should remove the easy handle from the multi stack before you terminate first the easy handle and then the multi handle: 
+<p class="level0">1 - <a Class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle</a> 
+<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>, <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>
diff --git a/docs/libcurl/curl_multi_add_handle.pdf b/docs/libcurl/curl_multi_add_handle.pdf
new file mode 100644 (file)
index 0000000..4f20861
Binary files /dev/null and b/docs/libcurl/curl_multi_add_handle.pdf differ
diff --git a/docs/libcurl/curl_multi_assign.html b/docs/libcurl/curl_multi_assign.html
new file mode 100644 (file)
index 0000000..1e3f83f
--- /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>curl_multi_assign 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">curl_multi_assign - set data to associate with an internal socket <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">If the given <span Class="emphasis">sockfd</span> isn't already in use by libcurl, this function will return an error. 
+<p class="level0">libcurl only keeps one single pointer associated with a socket, so calling this function several times for the same socket will make the last set pointer get used. 
+<p class="level0">The idea here being that this association (socket to private pointer) is something that just about every application that uses this API will need and then libcurl can just as well do it since it already has an internal hash table lookup for this. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">The standard CURLMcode for multi interface error codes. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">In a typical application you allocate a struct or at least use some kind of semi-dynamic data for each socket that we must wait for action on when using the <a Class="emphasis" href="./curl_multi_socket_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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_assign.pdf b/docs/libcurl/curl_multi_assign.pdf
new file mode 100644 (file)
index 0000000..6873ce9
Binary files /dev/null and b/docs/libcurl/curl_multi_assign.pdf differ
diff --git a/docs/libcurl/curl_multi_cleanup.html b/docs/libcurl/curl_multi_cleanup.html
new file mode 100644 (file)
index 0000000..492bca7
--- /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>curl_multi_cleanup 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">curl_multi_cleanup - close down a multi session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLMcode curl_multi_cleanup( CURLM *multi_handle );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Cleans up and removes a whole multi stack. It does not free or touch any individual easy handles in any way - they still need to be closed individually, using the usual <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a> way. The order of cleaning up should be: 
+<p class="level0">1 - <a Class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle</a> before any easy handles are cleaned up 
+<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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_cleanup.pdf b/docs/libcurl/curl_multi_cleanup.pdf
new file mode 100644 (file)
index 0000000..6a7b7c8
Binary files /dev/null and b/docs/libcurl/curl_multi_cleanup.pdf differ
diff --git a/docs/libcurl/curl_multi_fdset.html b/docs/libcurl/curl_multi_fdset.html
new file mode 100644 (file)
index 0000000..dac545f
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_fdset 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">curl_multi_fdset - extracts file descriptor information from a multi handle <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_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. 
+<p class="level0">If the <span Class="emphasis">write_fd_set</span> argument is not a null pointer, it points to an object of type fd_set that on return specifies the file descriptors to be checked for being ready to write. 
+<p class="level0">If the <span Class="emphasis">exc_fd_set</span> argument is not a null pointer, it points to an object of type fd_set that on return specifies the file descriptors to be checked for error conditions pending. 
+<p class="level0">If no file descriptors are set by libcurl, <span Class="emphasis">max_fd</span> will contain -1 when this function returns. Otherwise it will contain the highest descriptor number libcurl set. When libcurl returns -1 in <span Class="emphasis">max_fd</span>, it is because libcurl currently does something that isn't possible for your application to monitor with a socket and unfortunately you can then not know exactly when the current action is completed using select(). You then need to wait a while before you proceed and call <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> anyway. How long to wait? We suggest 100 milliseconds at least, but you may want to test it out in your own particular conditions to find a suitable value. 
+<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>, <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>
diff --git a/docs/libcurl/curl_multi_fdset.pdf b/docs/libcurl/curl_multi_fdset.pdf
new file mode 100644 (file)
index 0000000..85fa985
Binary files /dev/null and b/docs/libcurl/curl_multi_fdset.pdf differ
diff --git a/docs/libcurl/curl_multi_info_read.html b/docs/libcurl/curl_multi_info_read.html
new file mode 100644 (file)
index 0000000..698d418
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_info_read 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">curl_multi_info_read - read multi stack informationals <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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" 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="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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_info_read.pdf b/docs/libcurl/curl_multi_info_read.pdf
new file mode 100644 (file)
index 0000000..c5856a2
Binary files /dev/null and b/docs/libcurl/curl_multi_info_read.pdf differ
diff --git a/docs/libcurl/curl_multi_init.html b/docs/libcurl/curl_multi_init.html
new file mode 100644 (file)
index 0000000..6efcf84
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_init 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">curl_multi_init - create a multi handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLM *curl_multi_init( );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function returns a CURLM handle to be used as input to all the other multi-functions, sometimes referred to as a multi handle in some places in the documentation. This init call MUST have a corresponding call to <a Class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup</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"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_init.pdf b/docs/libcurl/curl_multi_init.pdf
new file mode 100644 (file)
index 0000000..1878220
Binary files /dev/null and b/docs/libcurl/curl_multi_init.pdf differ
diff --git a/docs/libcurl/curl_multi_perform.html b/docs/libcurl/curl_multi_perform.html
new file mode 100644 (file)
index 0000000..f033986
--- /dev/null
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_perform 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">curl_multi_perform - reads/writes available data from each easy handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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="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>, <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>
diff --git a/docs/libcurl/curl_multi_perform.pdf b/docs/libcurl/curl_multi_perform.pdf
new file mode 100644 (file)
index 0000000..4e0ab45
Binary files /dev/null and b/docs/libcurl/curl_multi_perform.pdf differ
diff --git a/docs/libcurl/curl_multi_remove_handle.html b/docs/libcurl/curl_multi_remove_handle.html
new file mode 100644 (file)
index 0000000..f0c71d2
--- /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>curl_multi_remove_handle 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">curl_multi_remove_handle - remove an easy handle from a multi session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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> 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>, <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>
diff --git a/docs/libcurl/curl_multi_remove_handle.pdf b/docs/libcurl/curl_multi_remove_handle.pdf
new file mode 100644 (file)
index 0000000..9a4e91d
Binary files /dev/null and b/docs/libcurl/curl_multi_remove_handle.pdf differ
diff --git a/docs/libcurl/curl_multi_setopt.html b/docs/libcurl/curl_multi_setopt.html
new file mode 100644 (file)
index 0000000..804e7ba
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_setopt 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">curl_multi_setopt - set options for a curl multi handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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="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="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="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>, <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>
diff --git a/docs/libcurl/curl_multi_setopt.pdf b/docs/libcurl/curl_multi_setopt.pdf
new file mode 100644 (file)
index 0000000..a3c36fd
Binary files /dev/null and b/docs/libcurl/curl_multi_setopt.pdf differ
index ea29e71..52abf1e 100644 (file)
@@ -118,7 +118,7 @@ the return code means that libcurl may have more data available to return or
 that there may be more data to send off before it is "satisfied".
 
 In modern libcurls, \fICURLM_CALL_MULTI_PERFORM\fP or
-\fICURLM_CALL_MULTI_SOCKET\fP should not be returned and no application needs
+\fICURLM_CALL_MULTI_SOKCET\fP should not be returned and no application needs
 to care about them.
 
 NOTE that the return code is for the whole multi stack. Problems still might have
diff --git a/docs/libcurl/curl_multi_socket.html b/docs/libcurl/curl_multi_socket.html
new file mode 100644 (file)
index 0000000..e690415
--- /dev/null
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_socket 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">curl_multi_socket - reads/writes available data <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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! 
+<p class="level0">At return, the integer <span Class="bold">running_handles</span> points to will contain the number of still running easy handles within the multi handle. When this number reaches zero, all transfers are complete/done. Note that when you call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> on a specific socket and the counter decreases by one, it DOES NOT necessarily mean that this exact socket/transfer is the one that completed. Use <a Class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read</a> to figure out which easy handle that completed. 
+<p class="level0">The <a Class="emphasis" 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="emphasis" 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. 
+<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="emphasis" 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 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. 
+<p class="level0">The <span Class="emphasis">s</span> argument is the actual socket value as you use it within your system. 
+<p class="level0">The <span Class="emphasis">action</span> argument to the callback has one of five values: 
+<p class="level1">
+<p class="level0"><a name="CURLPOLLNONE"></a><span class="nroffip">CURL_POLL_NONE (0)</span> 
+<p class="level1">register, not interested in readiness (yet) 
+<p class="level0"><a name="CURLPOLLIN"></a><span class="nroffip">CURL_POLL_IN (1)</span> 
+<p class="level1">register, interested in read readiness 
+<p class="level0"><a name="CURLPOLLOUT"></a><span class="nroffip">CURL_POLL_OUT (2)</span> 
+<p class="level1">register, interested in write readiness 
+<p class="level0"><a name="CURLPOLLINOUT"></a><span class="nroffip">CURL_POLL_INOUT (3)</span> 
+<p class="level1">register, interested in both read and write readiness 
+<p class="level0"><a name="CURLPOLLREMOVE"></a><span class="nroffip">CURL_POLL_REMOVE (4)</span> 
+<p class="level1">unregister 
+<p class="level0">
+<p class="level0">The <span Class="emphasis">socketp</span> argument is a private pointer you have previously set with <a Class="emphasis" href="./curl_multi_assign.html">curl_multi_assign</a> to be associated with the <span Class="emphasis">s</span> socket. If no pointer has been set, socketp will be NULL. This argument is of course a service to applications that want to keep certain data or structs that are strictly associated to the given socket. 
+<p class="level0">The <span Class="emphasis">userp</span> argument is a private pointer you have previously set with <a Class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt</a> and the CURLMOPT_SOCKETDATA option. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code. 
+<p class="level0">Legacy: If you receive <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span>, this basically means that you should call <a Class="emphasis" href="./curl_multi_socket.html">curl_multi_socket</a> again, before you wait for more actions on libcurl's sockets. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied". 
+<p class="level0">In modern libcurls, <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span> or <span Class="emphasis">CURLM_CALL_MULTI_SOKCET</span> should not be returned and no application needs to care about them. 
+<p class="level0">NOTE that the return code is for the whole multi stack. Problems still might have occurred on individual transfers even when one of these functions return OK. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">1. Create a multi handle 
+<p class="level0">2. Set the socket callback with CURLMOPT_SOCKETFUNCTION 
+<p class="level0">3. Set the timeout callback with CURLMOPT_TIMERFUNCTION, to get to know what timeout value to use when waiting for socket activities. 
+<p class="level0">4. Add easy handles with curl_multi_add_handle() 
+<p class="level0">5. Provide some means to manage the sockets libcurl is using, so you can check them for activity. This can be done through your application code, or by way of an external library such as libevent or glib. 
+<p class="level0">6. Wait for activity on any of libcurl's sockets, use the timeout value your callback has been told 
+<p class="level0">7, When activity is detected, call curl_multi_socket_action() for the socket(s) that got action. If no activity is detected and the timeout expires, call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> with <span Class="emphasis">CURL_SOCKET_TIMEOUT</span> 
+<p class="level0">8. Go back to step 6. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0. 
+<p class="level0"><a Class="emphasis" href="./curl_multi_socket.html">curl_multi_socket</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>, <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>
diff --git a/docs/libcurl/curl_multi_socket.pdf b/docs/libcurl/curl_multi_socket.pdf
new file mode 100644 (file)
index 0000000..6da2ef7
Binary files /dev/null and b/docs/libcurl/curl_multi_socket.pdf differ
diff --git a/docs/libcurl/curl_multi_socket_action.html b/docs/libcurl/curl_multi_socket_action.html
new file mode 100644 (file)
index 0000000..dc07c0d
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_socket_action 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">curl_multi_socket_action - reads/writes available data given an action <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_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. 
+<p class="level0">At return, <span Class="bold">running_handles</span> points to the number of running easy handles within the multi handle. When this number reaches zero, all transfers are complete/done. When you call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> on a specific socket and the counter decreases by one, it DOES NOT necessarily mean that this exact socket/transfer is the one that completed. Use <a Class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read</a> to figure out which easy handle that completed. 
+<p class="level0">The <a Class="emphasis" 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 <span Class="emphasis">CURLMOPT_SOCKETFUNCTION(3)</span> 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(3)</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="emphasis" 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 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="emphasis">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. 
+<p class="level0">The <span Class="emphasis">s</span> argument is the actual socket value as you use it within your system. 
+<p class="level0">The <span Class="emphasis">action</span> argument to the callback has one of five values: 
+<p class="level1">
+<p class="level0"><a name="CURLPOLLNONE"></a><span class="nroffip">CURL_POLL_NONE (0)</span> 
+<p class="level1">register, not interested in readiness (yet) 
+<p class="level0"><a name="CURLPOLLIN"></a><span class="nroffip">CURL_POLL_IN (1)</span> 
+<p class="level1">register, interested in read readiness 
+<p class="level0"><a name="CURLPOLLOUT"></a><span class="nroffip">CURL_POLL_OUT (2)</span> 
+<p class="level1">register, interested in write readiness 
+<p class="level0"><a name="CURLPOLLINOUT"></a><span class="nroffip">CURL_POLL_INOUT (3)</span> 
+<p class="level1">register, interested in both read and write readiness 
+<p class="level0"><a name="CURLPOLLREMOVE"></a><span class="nroffip">CURL_POLL_REMOVE (4)</span> 
+<p class="level1">unregister 
+<p class="level0">
+<p class="level0">The <span Class="emphasis">socketp</span> argument is a private pointer you have previously set with <a Class="emphasis" href="./curl_multi_assign.html">curl_multi_assign</a> to be associated with the <span Class="emphasis">s</span> socket. If no pointer has been set, socketp will be NULL. This argument is of course a service to applications that want to keep certain data or structs that are strictly associated to the given socket. 
+<p class="level0">The <span Class="emphasis">userp</span> argument is a private pointer you have previously set with <a Class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt</a> and the CURLMOPT_SOCKETDATA option. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code. 
+<p class="level0">Before version 7.20.0: If you receive <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span>, this basically means that you should call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> again before you wait for more actions on libcurl's sockets. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied". 
+<p class="level0">The return code from this function is for the whole multi stack.  Problems still might have occurred on individual transfers even when one of these functions return OK. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">1. Create a multi handle 
+<p class="level0">2. Set the socket callback with CURLMOPT_SOCKETFUNCTION 
+<p class="level0">3. Set the timeout callback with CURLMOPT_TIMERFUNCTION, to get to know what timeout value to use when waiting for socket activities. 
+<p class="level0">4. Add easy handles with curl_multi_add_handle() 
+<p class="level0">5. Provide some means to manage the sockets libcurl is using, so you can check them for activity. This can be done through your application code, or by way of an external library such as libevent or glib. 
+<p class="level0">6. Call curl_multi_socket_action(..., CURL_SOCKET_TIMEOUT, 0, ...) to kickstart everything. To get one or more callbacks called. 
+<p class="level0">7. Wait for activity on any of libcurl's sockets, use the timeout value your callback has been told. 
+<p class="level0">8, When activity is detected, call curl_multi_socket_action() for the socket(s) that got action. If no activity is detected and the timeout expires, call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</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>, <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>
diff --git a/docs/libcurl/curl_multi_socket_action.pdf b/docs/libcurl/curl_multi_socket_action.pdf
new file mode 100644 (file)
index 0000000..5724287
Binary files /dev/null and b/docs/libcurl/curl_multi_socket_action.pdf differ
diff --git a/docs/libcurl/curl_multi_socket_all.html b/docs/libcurl/curl_multi_socket_all.html
new file mode 100644 (file)
index 0000000..5ac3295
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>secret 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>
+See the man3/curl_multi_socket.3 man page.
+
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_socket_all.pdf b/docs/libcurl/curl_multi_socket_all.pdf
new file mode 100644 (file)
index 0000000..fddfa84
Binary files /dev/null and b/docs/libcurl/curl_multi_socket_all.pdf differ
diff --git a/docs/libcurl/curl_multi_strerror.html b/docs/libcurl/curl_multi_strerror.html
new file mode 100644 (file)
index 0000000..b04e734
--- /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>curl_multi_strerror 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">curl_multi_strerror - return string describing error code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_strerror.pdf b/docs/libcurl/curl_multi_strerror.pdf
new file mode 100644 (file)
index 0000000..c6aae72
Binary files /dev/null and b/docs/libcurl/curl_multi_strerror.pdf differ
diff --git a/docs/libcurl/curl_multi_timeout.html b/docs/libcurl/curl_multi_timeout.html
new file mode 100644 (file)
index 0000000..3f74cfd
--- /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>curl_multi_timeout 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">curl_multi_timeout - how long to wait for action before proceeding <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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="emphasis" 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="emphasis" 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="emphasis" 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="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="emphasis" 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="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset</a> or by a previous call to <a Class="emphasis" 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>, <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>
diff --git a/docs/libcurl/curl_multi_timeout.pdf b/docs/libcurl/curl_multi_timeout.pdf
new file mode 100644 (file)
index 0000000..70dccd9
Binary files /dev/null and b/docs/libcurl/curl_multi_timeout.pdf differ
diff --git a/docs/libcurl/curl_multi_wait.html b/docs/libcurl/curl_multi_wait.html
new file mode 100644 (file)
index 0000000..9911c95
--- /dev/null
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_multi_wait 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">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 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 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 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> 
+<p class="level1">Bit flag to curl_waitfd.events indicating the socket should poll on read events such as new data received. 
+<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="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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_wait.pdf b/docs/libcurl/curl_multi_wait.pdf
new file mode 100644 (file)
index 0000000..e77b05d
Binary files /dev/null and b/docs/libcurl/curl_multi_wait.pdf differ
diff --git a/docs/libcurl/curl_share_cleanup.html b/docs/libcurl/curl_share_cleanup.html
new file mode 100644 (file)
index 0000000..d2526b7
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_share_cleanup 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">curl_share_cleanup - Clean up a shared object <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLSHcode curl_share_cleanup(CURLSH * share_handle );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function deletes a shared object. The share handle cannot be used anymore when this function has been called. 
+<p class="level0"><a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as <span Class="emphasis">&lt;curl/curl.h&gt;</span> defines. See the <span Class="emphasis">libcurl-errors.3</span> man page for the full list with descriptions. If an error occurs, then the share object will not be deleted. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./curl_share_init.html">curl_share_init</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>
diff --git a/docs/libcurl/curl_share_cleanup.pdf b/docs/libcurl/curl_share_cleanup.pdf
new file mode 100644 (file)
index 0000000..405b20b
Binary files /dev/null and b/docs/libcurl/curl_share_cleanup.pdf differ
diff --git a/docs/libcurl/curl_share_init.html b/docs/libcurl/curl_share_init.html
new file mode 100644 (file)
index 0000000..249c885
--- /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>curl_share_init 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">curl_share_init - Create a shared object <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">CURLSH *curl_share_init( );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function returns a CURLSH handle to be used as input to all the other share-functions, sometimes referred to as a share handle in some places in the documentation. This init call MUST have a corresponding call to <span Class="emphasis">curl_share_cleanup</span> when all operations using the share are complete. 
+<p class="level0">This <span Class="emphasis">share handle</span> is what you pass to curl using the <span Class="emphasis">CURLOPT_SHARE(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"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_share_init.pdf b/docs/libcurl/curl_share_init.pdf
new file mode 100644 (file)
index 0000000..69b8e98
Binary files /dev/null and b/docs/libcurl/curl_share_init.pdf differ
diff --git a/docs/libcurl/curl_share_setopt.html b/docs/libcurl/curl_share_setopt.html
new file mode 100644 (file)
index 0000000..9e5c44e
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_share_setopt 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">curl_share_setopt - Set options for a shared object <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0">CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter); 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set the <span Class="emphasis">option</span> to <span Class="emphasis">parameter</span> for the given <span Class="emphasis">share</span>. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLSHOPTLOCKFUNC"></a><span class="nroffip">CURLSHOPT_LOCKFUNC</span> 
+<p class="level1">The <span Class="emphasis">parameter</span> must be a pointer to a function matching the following prototype: 
+<p class="level1">void lock_function(CURL *handle, curl_lock_data data, curl_lock_access access, void *userptr); 
+<p class="level1"><span Class="emphasis">data</span> defines what data libcurl wants to lock, and you must make sure that only one lock is given at any time for each kind of data. 
+<p class="level1"><span Class="emphasis">access</span> defines what access type libcurl wants, shared or single. 
+<p class="level1"><span Class="emphasis">userptr</span> is the pointer you set with <a class="emphasis" href="#CURLSHOPTUSERDATA">CURLSHOPT_USERDATA</a>. 
+<p class="level0"><a name="CURLSHOPTUNLOCKFUNC"></a><span class="nroffip">CURLSHOPT_UNLOCKFUNC</span> 
+<p class="level1">The <span Class="emphasis">parameter</span> must be a pointer to a function matching the following prototype: 
+<p class="level1">void unlock_function(CURL *handle, curl_lock_data data, void *userptr); 
+<p class="level1"><span Class="emphasis">data</span> defines what data libcurl wants to unlock, and you must make sure that only one lock is given at any time for each kind of data. 
+<p class="level1"><span Class="emphasis">userptr</span> is the pointer you set with <a class="emphasis" href="#CURLSHOPTUSERDATA">CURLSHOPT_USERDATA</a>. 
+<p class="level0"><a name="CURLSHOPTSHARE"></a><span class="nroffip">CURLSHOPT_SHARE</span> 
+<p class="level1">The <span Class="emphasis">parameter</span> specifies a type of data that should be shared. This may be set to one of the values described below. 
+<p class="level2">
+<p class="level1"><a name="CURLLOCKDATACOOKIE"></a><span class="nroffip">CURL_LOCK_DATA_COOKIE</span> 
+<p class="level2">Cookie data will be shared across the easy handles using this shared object. 
+<p class="level1"><a name="CURLLOCKDATADNS"></a><span class="nroffip">CURL_LOCK_DATA_DNS</span> 
+<p class="level2">Cached DNS hosts will be shared across the easy handles using this shared object. Note that when you use the multi interface, all easy handles added to the same multi handle will share DNS cache by default without this having to be used! 
+<p class="level1"><a name="CURLLOCKDATASSLSESSION"></a><span class="nroffip">CURL_LOCK_DATA_SSL_SESSION</span> 
+<p class="level2">SSL session IDs will be shared across the easy handles using this shared object. This will reduce the time spent in the SSL handshake when reconnecting to the same server. Note SSL session IDs are reused within the same easy handle by default. Note this symbol was added in 7.10.3 but was not implemented until 7.23.0. 
+<p class="level1">
+<p class="level0"><a name="CURLSHOPTUNSHARE"></a><span class="nroffip">CURLSHOPT_UNSHARE</span> 
+<p class="level1">This option does the opposite of <a class="emphasis" href="#CURLSHOPTSHARE">CURLSHOPT_SHARE</a>. It specifies that the specified <span Class="emphasis">parameter</span> will no longer be shared. Valid values are the same as those for <a class="emphasis" href="#CURLSHOPTSHARE">CURLSHOPT_SHARE</a>. 
+<p class="level0"><a name="CURLSHOPTUSERDATA"></a><span class="nroffip">CURLSHOPT_USERDATA</span> 
+<p class="level1">The <span Class="emphasis">parameter</span> allows you to specify a pointer to data that will be passed to the lock_function and unlock_function each time it is called. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as <span Class="emphasis">&lt;curl/curl.h&gt;</span> defines. See the <span Class="emphasis">libcurl-errors.3</span> man page for the full list with descriptions. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./curl_share_cleanup.html">curl_share_cleanup</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>
diff --git a/docs/libcurl/curl_share_setopt.pdf b/docs/libcurl/curl_share_setopt.pdf
new file mode 100644 (file)
index 0000000..6fdb7e2
Binary files /dev/null and b/docs/libcurl/curl_share_setopt.pdf differ
diff --git a/docs/libcurl/curl_share_strerror.html b/docs/libcurl/curl_share_strerror.html
new file mode 100644 (file)
index 0000000..44a914a
--- /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>curl_share_strerror 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">curl_share_strerror - return string describing error code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_share_strerror.pdf b/docs/libcurl/curl_share_strerror.pdf
new file mode 100644 (file)
index 0000000..4b9210b
Binary files /dev/null and b/docs/libcurl/curl_share_strerror.pdf differ
diff --git a/docs/libcurl/curl_slist_append.html b/docs/libcurl/curl_slist_append.html
new file mode 100644 (file)
index 0000000..f8674ad
--- /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>curl_slist_append 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">curl_slist_append - add a string to an slist <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">struct curl_slist *curl_slist_append(struct curl_slist * list,</span> <span Class="bold">const char * string );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_slist_append() appends a specified string to a linked list of strings. The existing <span Class="emphasis">list</span> should be passed as the first argument while the new list is returned from this function. The specified <span Class="emphasis">string</span> has been appended when this function returns. curl_slist_append() copies the string. 
+<p class="level0">The list should be freed again (after usage) with <a Class="emphasis" 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 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><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_slist_append.pdf b/docs/libcurl/curl_slist_append.pdf
new file mode 100644 (file)
index 0000000..d4255b3
Binary files /dev/null and b/docs/libcurl/curl_slist_append.pdf differ
diff --git a/docs/libcurl/curl_slist_free_all.html b/docs/libcurl/curl_slist_free_all.html
new file mode 100644 (file)
index 0000000..4ed487b
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_slist_free_all 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">curl_slist_free_all - free an entire curl_slist list <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">void curl_slist_free_all(struct curl_slist * list);</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_slist_free_all() removes all traces of a previously built curl_slist linked list. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Nothing. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./curl_slist_append.html">curl_slist_append</a>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_slist_free_all.pdf b/docs/libcurl/curl_slist_free_all.pdf
new file mode 100644 (file)
index 0000000..575ff62
Binary files /dev/null and b/docs/libcurl/curl_slist_free_all.pdf differ
diff --git a/docs/libcurl/curl_strequal.html b/docs/libcurl/curl_strequal.html
new file mode 100644 (file)
index 0000000..33a4620
--- /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>curl_strequal 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">curl_strequal, curl_strnequal - case insensitive string comparisons <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">int curl_strequal(char * str1 , char * str2 );</span> 
+<p class="level0"><span Class="bold">int curl_strenqual(char * str1 , char * str2 , size_t  len );</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">The <span Class="bold">curl_strequal()</span> function compares the two strings <span Class="emphasis">str1</span> and <span Class="emphasis">str2</span>, ignoring the case of the characters. It returns a non-zero (TRUE) integer if the strings are identical. 
+<p class="level0">The <span Class="bold">curl_strnequal()</span> function is similar, except it only compares the first <span Class="emphasis">len</span> characters of <span Class="emphasis">str1</span>. 
+<p class="level0">These functions are provided by libcurl to enable applications to compare strings in a truly portable manner. There are no standard portable case insensitive string comparison functions. These two work on all platforms. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">These functions will be removed from the public libcurl API in a near future. They will instead be made "available" by source code access only, and then as curlx_strequal() and curlx_strenqual(). <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Non-zero if the strings are identical. Zero if they're not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">strcmp (3)</span>, <span Class="manpage">strcasecmp (3)</span><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_strequal.pdf b/docs/libcurl/curl_strequal.pdf
new file mode 100644 (file)
index 0000000..7f92278
Binary files /dev/null and b/docs/libcurl/curl_strequal.pdf differ
diff --git a/docs/libcurl/curl_unescape.html b/docs/libcurl/curl_unescape.html
new file mode 100644 (file)
index 0000000..1f6c654
--- /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>curl_unescape 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">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( 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. 
+<p class="level0">If the 'length' argument is set to 0, curl_unescape() will use strlen() on the input 'url' string to find out the size. 
+<p class="level0">You must <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">RFC 2396</span><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_unescape.pdf b/docs/libcurl/curl_unescape.pdf
new file mode 100644 (file)
index 0000000..1e955b9
Binary files /dev/null and b/docs/libcurl/curl_unescape.pdf differ
diff --git a/docs/libcurl/curl_version.html b/docs/libcurl/curl_version.html
new file mode 100644 (file)
index 0000000..39b258a
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_version 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">curl_version - returns the libcurl version string <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">char *curl_version( );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Returns a human readable string with the version number of libcurl and some of its important components (like OpenSSL version). 
+<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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_version.pdf b/docs/libcurl/curl_version.pdf
new file mode 100644 (file)
index 0000000..98b5b3c
Binary files /dev/null and b/docs/libcurl/curl_version.pdf differ
index ebb11c3..5244c21 100644 (file)
@@ -153,9 +153,6 @@ libcurl was built with support for Unix domain sockets.
 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)
-.IP CURL_VERSION_HTTPS_PROXY
-libcurl was built with support for HTTPS-proxy.
-(Added in 7.52.0)
 .RE
 \fIssl_version\fP is an ASCII string for the OpenSSL version used. If libcurl
 has no SSL support, this is NULL.
diff --git a/docs/libcurl/curl_version_info.html b/docs/libcurl/curl_version_info.html
new file mode 100644 (file)
index 0000000..535af3b
--- /dev/null
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>curl_version_info 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">curl_version_info - returns run-time libcurl version info <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
+<p class="level0"><span Class="bold">curl_version_info_data *curl_version_info( CURLversion type );</span> 
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Returns a pointer to a filled in static struct with information about various features in the running version of libcurl. <span Class="emphasis">type</span> should be set to the version of this functionality by the time you write your program. This way, libcurl will always return a proper struct that your program understands, while programs in the future might get a different struct. <span Class="bold">CURLVERSION_NOW</span> will be the most recent one for the library you have installed: 
+<p class="level0">&nbsp;       data = curl_version_info(CURLVERSION_NOW); 
+<p class="level0">Applications should use this information to judge if things are possible to do or not, instead of using compile-time checks, as dynamic/DLL libraries can be changed independent of applications. 
+<p class="level0">The curl_version_info_data struct looks like this 
+<p class="level0"><pre 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. 
+<p class="level0"><span Class="emphasis">version</span> is just an ascii string for the libcurl version. 
+<p class="level0"><span Class="emphasis">version_num</span> is a 24 bit number created like this: &lt;8 bits major number&gt; | &lt;8 bits minor number&gt; | &lt;8 bits patch number&gt;. Version 7.9.8 is therefore returned as 0x070908. 
+<p class="level0"><span Class="emphasis">host</span> is an ascii string showing what host information that this libcurl was built for. As discovered by a configure script or set by the build environment. 
+<p class="level0"><span Class="emphasis">features</span> can have none, one or more bits set, and the currently defined bits are: 
+<p class="level1">
+<p class="level0"><a name="CURLVERSIONIPV6"></a><span class="nroffip">CURL_VERSION_IPV6</span> 
+<p class="level1">supports IPv6 
+<p class="level0"><a name="CURLVERSIONKERBEROS4"></a><span class="nroffip">CURL_VERSION_KERBEROS4</span> 
+<p class="level1">supports Kerberos V4 (when using FTP) 
+<p class="level0"><a name="CURLVERSIONKERBEROS5"></a><span class="nroffip">CURL_VERSION_KERBEROS5</span> 
+<p class="level1">supports Kerberos V5 authentication for FTP, IMAP, POP3, SMTP and SOCKSv5 proxy (Added in 7.40.0) 
+<p class="level0"><a name="CURLVERSIONSSL"></a><span class="nroffip">CURL_VERSION_SSL</span> 
+<p class="level1">supports SSL (HTTPS/FTPS) (Added in 7.10) 
+<p class="level0"><a name="CURLVERSIONLIBZ"></a><span class="nroffip">CURL_VERSION_LIBZ</span> 
+<p class="level1">supports HTTP deflate using libz (Added in 7.10) 
+<p class="level0"><a name="CURLVERSIONNTLM"></a><span class="nroffip">CURL_VERSION_NTLM</span> 
+<p class="level1">supports HTTP NTLM (added in 7.10.6) 
+<p class="level0"><a name="CURLVERSIONGSSNEGOTIATE"></a><span class="nroffip">CURL_VERSION_GSSNEGOTIATE</span> 
+<p class="level1">supports HTTP GSS-Negotiate (added in 7.10.6) 
+<p class="level0"><a name="CURLVERSIONDEBUG"></a><span class="nroffip">CURL_VERSION_DEBUG</span> 
+<p class="level1">libcurl was built with debug capabilities (added in 7.10.6) 
+<p class="level0"><a name="CURLVERSIONCURLDEBUG"></a><span class="nroffip">CURL_VERSION_CURLDEBUG</span> 
+<p class="level1">libcurl was built with memory tracking debug capabilities. This is mainly of interest for libcurl hackers. (added in 7.19.6) 
+<p class="level0"><a name="CURLVERSIONASYNCHDNS"></a><span class="nroffip">CURL_VERSION_ASYNCHDNS</span> 
+<p class="level1">libcurl was built with support for asynchronous name lookups, which allows more exact timeouts (even on Windows) and less blocking when using the multi interface. (added in 7.10.7) 
+<p class="level0"><a name="CURLVERSIONSPNEGO"></a><span class="nroffip">CURL_VERSION_SPNEGO</span> 
+<p class="level1">libcurl was built with support for SPNEGO authentication (Simple and Protected GSS-API Negotiation Mechanism, defined in <a href="http://www.ietf.org/rfc/rfc2478.txt">RFC 2478</a>.) (added in 7.10.8) 
+<p class="level0"><a name="CURLVERSIONLARGEFILE"></a><span class="nroffip">CURL_VERSION_LARGEFILE</span> 
+<p class="level1">libcurl was built with support for large files. (Added in 7.11.1) 
+<p class="level0"><a name="CURLVERSIONIDN"></a><span class="nroffip">CURL_VERSION_IDN</span> 
+<p class="level1">libcurl was built with support for IDNA, domain names with international letters. (Added in 7.12.0) 
+<p class="level0"><a name="CURLVERSIONSSPI"></a><span class="nroffip">CURL_VERSION_SSPI</span> 
+<p class="level1">libcurl was built with support for SSPI. This is only available on Windows and makes libcurl use Windows-provided functions for Kerberos, NTLM, SPNEGO and Digest authentication. It also allows libcurl to use the current user credentials without the app having to pass them on. (Added in 7.13.2) 
+<p class="level0"><a name="CURLVERSIONGSSAPI"></a><span class="nroffip">CURL_VERSION_GSSAPI</span> 
+<p class="level1">libcurl was built with support for GSS-API. This makes libcurl use provided functions for Kerberos and SPNEGO authentication. It also allows libcurl to use the current user credentials without the app having to pass them on. (Added in 7.38.0) 
+<p class="level0"><a name="CURLVERSIONCONV"></a><span class="nroffip">CURL_VERSION_CONV</span> 
+<p class="level1">libcurl was built with support for character conversions, as provided by the CURLOPT_CONV_* callbacks. (Added in 7.15.4) 
+<p class="level0"><a name="CURLVERSIONTLSAUTHSRP"></a><span class="nroffip">CURL_VERSION_TLSAUTH_SRP</span> 
+<p class="level1">libcurl was built with support for TLS-SRP. (Added in 7.21.4) 
+<p class="level0"><a name="CURLVERSIONNTLMWB"></a><span class="nroffip">CURL_VERSION_NTLM_WB</span> 
+<p class="level1">libcurl was built with support for NTLM delegation to a winbind helper. (Added in 7.22.0) 
+<p class="level0"><a name="CURLVERSIONHTTP2"></a><span class="nroffip">CURL_VERSION_HTTP2</span> 
+<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. 
+<p class="level0"><span Class="emphasis">protocols</span> is a pointer to an array of char * pointers, containing the names protocols that libcurl supports (using lowercase letters). The protocol names are the same as would be used in URLs. The array is terminated by a NULL entry. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a curl_version_info_data struct. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="emphasis" href="./curl_version.html">curl_version</a> 
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_version_info.pdf b/docs/libcurl/curl_version_info.pdf
new file mode 100644 (file)
index 0000000..4429a64
Binary files /dev/null and b/docs/libcurl/curl_version_info.pdf differ
diff --git a/docs/libcurl/libcurl-easy.html b/docs/libcurl/libcurl-easy.html
new file mode 100644 (file)
index 0000000..c92eee5
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>libcurl 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-easy - easy interface overview <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">When using libcurl's "easy" interface you init your session and get a handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> to get the handle. 
+<p class="level0">You continue by setting all the options you want in the upcoming transfer, the most important among them is the URL itself (you can't transfer anything without a specified URL as you may have figured out yourself). You might want to set some callbacks as well that will be called from the library when data is available etc. <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> is used for all this. 
+<p class="level0"><span Class="emphasis">CURLOPT_URL(3)</span> is only option you really must set, as otherwise there can be no transfer. Another commonly used option is <span Class="emphasis">CURLOPT_VERBOSE(3)</span> that will help you see what libcurl is doing under the hood, very useful when debugging for example. The <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> man page has a full index of the over 200 available options. 
+<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>, <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>
diff --git a/docs/libcurl/libcurl-easy.pdf b/docs/libcurl/libcurl-easy.pdf
new file mode 100644 (file)
index 0000000..fe9c7f9
Binary files /dev/null and b/docs/libcurl/libcurl-easy.pdf differ
index 1b6e34f..0a21a75 100644 (file)
@@ -60,8 +60,9 @@ Couldn't resolve host. The given remote host was not resolved.
 .IP "CURLE_COULDNT_CONNECT (7)"
 Failed to connect() to host or proxy.
 .IP "CURLE_FTP_WEIRD_SERVER_REPLY (8)"
-The server sent data libcurl couldn't parse. This error code is used for more
-than just FTP and is aliased as \fICURLE_WEIRD_SERVER_REPLY\fP since 7.51.0.
+After connecting to a FTP server, libcurl expects to get a certain reply
+back. This error code implies that it got a strange or bad reply. The given
+remote server is probably not an OK FTP server.
 .IP "CURLE_REMOTE_ACCESS_DENIED (9)"
 We were denied access to the resource given in the URL.  For FTP, this occurs
 while trying to change to the remote directory.
diff --git a/docs/libcurl/libcurl-errors.html b/docs/libcurl/libcurl-errors.html
new file mode 100644 (file)
index 0000000..c305e3f
--- /dev/null
@@ -0,0 +1,262 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>libcurl-errors 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-errors - error codes in libcurl <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem are also included. <a name="CURLcode"></a><h2 class="nroffsh">CURLcode</h2>
+<p class="level0">Almost all "easy" interface functions return a CURLcode error code. No matter what, using the <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> option <span Class="emphasis">CURLOPT_ERRORBUFFER(3)</span> is a good idea as it will give you a human readable error string that may offer more details about the cause of the error than just the error code. <a Class="emphasis" href="./curl_easy_strerror.html">curl_easy_strerror</a> can be called to get an error string from a given CURLcode number. 
+<p class="level0">CURLcode is one of the following: 
+<p class="level0"><a name="CURLEOK"></a><span class="nroffip">CURLE_OK (0)</span> 
+<p class="level1">All fine. Proceed as usual. 
+<p class="level0"><a name="CURLEUNSUPPORTEDPROTOCOL"></a><span class="nroffip">CURLE_UNSUPPORTED_PROTOCOL (1)</span> 
+<p class="level1">The URL you passed to libcurl used a protocol that this libcurl does not support. The support might be a compile-time option that you didn't use, it can be a misspelled protocol string or just a protocol libcurl has no code for. 
+<p class="level0"><a name="CURLEFAILEDINIT"></a><span class="nroffip">CURLE_FAILED_INIT (2)</span> 
+<p class="level1">Very early initialization code failed. This is likely to be an internal error or problem, or a resource problem where something fundamental couldn't get done at init time. 
+<p class="level0"><a name="CURLEURLMALFORMAT"></a><span class="nroffip">CURLE_URL_MALFORMAT (3)</span> 
+<p class="level1">The URL was not properly formatted. 
+<p class="level0"><a name="CURLENOTBUILTIN"></a><span class="nroffip">CURLE_NOT_BUILT_IN (4)</span> 
+<p class="level1">A requested feature, protocol or option was not found built-in in this libcurl due to a build-time decision. This means that a feature or option was not enabled or explicitly disabled when libcurl was built and in order to get it to function you have to get a rebuilt libcurl. 
+<p class="level0"><a name="CURLECOULDNTRESOLVEPROXY"></a><span class="nroffip">CURLE_COULDNT_RESOLVE_PROXY (5)</span> 
+<p class="level1">Couldn't resolve proxy. The given proxy host could not be resolved. 
+<p class="level0"><a name="CURLECOULDNTRESOLVEHOST"></a><span class="nroffip">CURLE_COULDNT_RESOLVE_HOST (6)</span> 
+<p class="level1">Couldn't resolve host. The given remote host was not resolved. 
+<p class="level0"><a name="CURLECOULDNTCONNECT"></a><span class="nroffip">CURLE_COULDNT_CONNECT (7)</span> 
+<p class="level1">Failed to connect() to host or proxy. 
+<p class="level0"><a name="CURLEFTPWEIRDSERVERREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_SERVER_REPLY (8)</span> 
+<p class="level1">After connecting to a FTP server, libcurl expects to get a certain reply back. This error code implies that it got a strange or bad reply. The given remote server is probably not an OK FTP server. 
+<p class="level0"><a name="CURLEREMOTEACCESSDENIED"></a><span class="nroffip">CURLE_REMOTE_ACCESS_DENIED (9)</span> 
+<p class="level1">We were denied access to the resource given in the URL.  For FTP, this occurs while trying to change to the remote directory. 
+<p class="level0"><a name="CURLEFTPACCEPTFAILED"></a><span class="nroffip">CURLE_FTP_ACCEPT_FAILED (10)</span> 
+<p class="level1">While waiting for the server to connect back when an active FTP session is used, an error code was sent over the control connection or similar. 
+<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_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> 
+<p class="level1">FTP servers return a 227-line as a response to a PASV command. If libcurl fails to parse that line, this return code is passed back. 
+<p class="level0"><a name="CURLEFTPCANTGETHOST"></a><span class="nroffip">CURLE_FTP_CANT_GET_HOST (15)</span> 
+<p class="level1">An internal failure to lookup the host used for the new connection. 
+<p class="level0"><a name="CURLEHTTP2"></a><span class="nroffip">CURLE_HTTP2 (16)</span> 
+<p class="level1">A problem was detected in the HTTP2 framing layer. This is somewhat generic and can be one out of several problems, see the error buffer for details. 
+<p class="level0"><a name="CURLEFTPCOULDNTSETTYPE"></a><span class="nroffip">CURLE_FTP_COULDNT_SET_TYPE (17)</span> 
+<p class="level1">Received an error when trying to set the transfer mode to binary or ASCII. 
+<p class="level0"><a name="CURLEPARTIALFILE"></a><span class="nroffip">CURLE_PARTIAL_FILE (18)</span> 
+<p class="level1">A file transfer was shorter or larger than expected. This happens when the server first reports an expected transfer size, and then delivers data that doesn't match the previously given size. 
+<p class="level0"><a name="CURLEFTPCOULDNTRETRFILE"></a><span class="nroffip">CURLE_FTP_COULDNT_RETR_FILE (19)</span> 
+<p class="level1">This was either a weird reply to a 'RETR' command or a zero byte transfer complete. 
+<p class="level0"><a name="CURLEQUOTEERROR"></a><span class="nroffip">CURLE_QUOTE_ERROR (21)</span> 
+<p class="level1">When sending custom "QUOTE" commands to the remote server, one of the commands returned an error code that was 400 or higher (for FTP) or otherwise indicated unsuccessful completion of the command. 
+<p class="level0"><a name="CURLEHTTPRETURNEDERROR"></a><span class="nroffip">CURLE_HTTP_RETURNED_ERROR (22)</span> 
+<p class="level1">This is returned if <span Class="emphasis">CURLOPT_FAILONERROR(3)</span> is set TRUE and the HTTP server returns an error code that is &gt;= 400. 
+<p class="level0"><a name="CURLEWRITEERROR"></a><span class="nroffip">CURLE_WRITE_ERROR (23)</span> 
+<p class="level1">An error occurred when writing received data to a local file, or an error was returned to libcurl from a write callback. 
+<p class="level0"><a name="CURLEUPLOADFAILED"></a><span class="nroffip">CURLE_UPLOAD_FAILED (25)</span> 
+<p class="level1">Failed starting the upload. For FTP, the server typically denied the STOR command. The error buffer usually contains the server's explanation for this. 
+<p class="level0"><a name="CURLEREADERROR"></a><span class="nroffip">CURLE_READ_ERROR (26)</span> 
+<p class="level1">There was a problem reading a local file or an error returned by the read callback. 
+<p class="level0"><a name="CURLEOUTOFMEMORY"></a><span class="nroffip">CURLE_OUT_OF_MEMORY (27)</span> 
+<p class="level1">A memory allocation request failed. This is serious badness and things are severely screwed up if this ever occurs. 
+<p class="level0"><a name="CURLEOPERATIONTIMEDOUT"></a><span class="nroffip">CURLE_OPERATION_TIMEDOUT (28)</span> 
+<p class="level1">Operation timeout. The specified time-out period was reached according to the conditions. 
+<p class="level0"><a name="CURLEFTPPORTFAILED"></a><span class="nroffip">CURLE_FTP_PORT_FAILED (30)</span> 
+<p class="level1">The FTP PORT command returned error. This mostly happens when you haven't specified a good enough address for libcurl to use. See <span Class="emphasis">CURLOPT_FTPPORT(3)</span>. 
+<p class="level0"><a name="CURLEFTPCOULDNTUSEREST"></a><span class="nroffip">CURLE_FTP_COULDNT_USE_REST (31)</span> 
+<p class="level1">The FTP REST command returned error. This should never happen if the server is sane. 
+<p class="level0"><a name="CURLERANGEERROR"></a><span class="nroffip">CURLE_RANGE_ERROR (33)</span> 
+<p class="level1">The server does not support or accept range requests. 
+<p class="level0"><a name="CURLEHTTPPOSTERROR"></a><span class="nroffip">CURLE_HTTP_POST_ERROR (34)</span> 
+<p class="level1">This is an odd error that mainly occurs due to internal confusion. 
+<p class="level0"><a name="CURLESSLCONNECTERROR"></a><span class="nroffip">CURLE_SSL_CONNECT_ERROR (35)</span> 
+<p class="level1">A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others. 
+<p class="level0"><a name="CURLEBADDOWNLOADRESUME"></a><span class="nroffip">CURLE_BAD_DOWNLOAD_RESUME (36)</span> 
+<p class="level1">The download could not be resumed because the specified offset was out of the file boundary. 
+<p class="level0"><a name="CURLEFILECOULDNTREADFILE"></a><span class="nroffip">CURLE_FILE_COULDNT_READ_FILE (37)</span> 
+<p class="level1">A file given with FILE:// couldn't be opened. Most likely because the file path doesn't identify an existing file. Did you check file permissions? 
+<p class="level0"><a name="CURLELDAPCANNOTBIND"></a><span class="nroffip">CURLE_LDAP_CANNOT_BIND (38)</span> 
+<p class="level1">LDAP cannot bind. LDAP bind operation failed. 
+<p class="level0"><a name="CURLELDAPSEARCHFAILED"></a><span class="nroffip">CURLE_LDAP_SEARCH_FAILED (39)</span> 
+<p class="level1">LDAP search failed. 
+<p class="level0"><a name="CURLEFUNCTIONNOTFOUND"></a><span class="nroffip">CURLE_FUNCTION_NOT_FOUND (41)</span> 
+<p class="level1">Function not found. A required zlib function was not found. 
+<p class="level0"><a name="CURLEABORTEDBYCALLBACK"></a><span class="nroffip">CURLE_ABORTED_BY_CALLBACK (42)</span> 
+<p class="level1">Aborted by callback. A callback returned "abort" to libcurl. 
+<p class="level0"><a name="CURLEBADFUNCTIONARGUMENT"></a><span class="nroffip">CURLE_BAD_FUNCTION_ARGUMENT (43)</span> 
+<p class="level1">Internal error. A function was called with a bad parameter. 
+<p class="level0"><a name="CURLEINTERFACEFAILED"></a><span class="nroffip">CURLE_INTERFACE_FAILED (45)</span> 
+<p class="level1">Interface error. A specified outgoing interface could not be used. Set which interface to use for outgoing connections' source IP address with <span Class="emphasis">CURLOPT_INTERFACE(3)</span>. 
+<p class="level0"><a name="CURLETOOMANYREDIRECTS"></a><span class="nroffip">CURLE_TOO_MANY_REDIRECTS (47)</span> 
+<p class="level1">Too many redirects. When following redirects, libcurl hit the maximum amount. Set your limit with <span Class="emphasis">CURLOPT_MAXREDIRS(3)</span>. 
+<p class="level0"><a name="CURLEUNKNOWNOPTION"></a><span class="nroffip">CURLE_UNKNOWN_OPTION (48)</span> 
+<p class="level1">An option passed to libcurl is not recognized/known. Refer to the appropriate documentation. This is most likely a problem in the program that uses libcurl. The error buffer might contain more specific information about which exact option it concerns. 
+<p class="level0"><a name="CURLETELNETOPTIONSYNTAX"></a><span class="nroffip">CURLE_TELNET_OPTION_SYNTAX (49)</span> 
+<p class="level1">A telnet option string was Illegally formatted. 
+<p class="level0"><a name="CURLEPEERFAILEDVERIFICATION"></a><span class="nroffip">CURLE_PEER_FAILED_VERIFICATION (51)</span> 
+<p class="level1">The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK. 
+<p class="level0"><a name="CURLEGOTNOTHING"></a><span class="nroffip">CURLE_GOT_NOTHING (52)</span> 
+<p class="level1">Nothing was returned from the server, and under the circumstances, getting nothing is considered an error. 
+<p class="level0"><a name="CURLESSLENGINENOTFOUND"></a><span class="nroffip">CURLE_SSL_ENGINE_NOTFOUND (53)</span> 
+<p class="level1">The specified crypto engine wasn't found. 
+<p class="level0"><a name="CURLESSLENGINESETFAILED"></a><span class="nroffip">CURLE_SSL_ENGINE_SETFAILED (54)</span> 
+<p class="level1">Failed setting the selected SSL crypto engine as default! 
+<p class="level0"><a name="CURLESENDERROR"></a><span class="nroffip">CURLE_SEND_ERROR (55)</span> 
+<p class="level1">Failed sending network data. 
+<p class="level0"><a name="CURLERECVERROR"></a><span class="nroffip">CURLE_RECV_ERROR (56)</span> 
+<p class="level1">Failure with receiving network data. 
+<p class="level0"><a name="CURLESSLCERTPROBLEM"></a><span class="nroffip">CURLE_SSL_CERTPROBLEM (58)</span> 
+<p class="level1">problem with the local client certificate. 
+<p class="level0"><a name="CURLESSLCIPHER"></a><span class="nroffip">CURLE_SSL_CIPHER (59)</span> 
+<p class="level1">Couldn't use specified cipher. 
+<p class="level0"><a name="CURLESSLCACERT"></a><span class="nroffip">CURLE_SSL_CACERT (60)</span> 
+<p class="level1">Peer certificate cannot be authenticated with known CA certificates. 
+<p class="level0"><a name="CURLEBADCONTENTENCODING"></a><span class="nroffip">CURLE_BAD_CONTENT_ENCODING (61)</span> 
+<p class="level1">Unrecognized transfer encoding. 
+<p class="level0"><a name="CURLELDAPINVALIDURL"></a><span class="nroffip">CURLE_LDAP_INVALID_URL (62)</span> 
+<p class="level1">Invalid LDAP URL. 
+<p class="level0"><a name="CURLEFILESIZEEXCEEDED"></a><span class="nroffip">CURLE_FILESIZE_EXCEEDED (63)</span> 
+<p class="level1">Maximum file size exceeded. 
+<p class="level0"><a name="CURLEUSESSLFAILED"></a><span class="nroffip">CURLE_USE_SSL_FAILED (64)</span> 
+<p class="level1">Requested FTP SSL level failed. 
+<p class="level0"><a name="CURLESENDFAILREWIND"></a><span class="nroffip">CURLE_SEND_FAIL_REWIND (65)</span> 
+<p class="level1">When doing a send operation curl had to rewind the data to retransmit, but the rewinding operation failed. 
+<p class="level0"><a name="CURLESSLENGINEINITFAILED"></a><span class="nroffip">CURLE_SSL_ENGINE_INITFAILED (66)</span> 
+<p class="level1">Initiating the SSL Engine failed. 
+<p class="level0"><a name="CURLELOGINDENIED"></a><span class="nroffip">CURLE_LOGIN_DENIED (67)</span> 
+<p class="level1">The remote server denied curl to login (Added in 7.13.1) 
+<p class="level0"><a name="CURLETFTPNOTFOUND"></a><span class="nroffip">CURLE_TFTP_NOTFOUND (68)</span> 
+<p class="level1">File not found on TFTP server. 
+<p class="level0"><a name="CURLETFTPPERM"></a><span class="nroffip">CURLE_TFTP_PERM (69)</span> 
+<p class="level1">Permission problem on TFTP server. 
+<p class="level0"><a name="CURLEREMOTEDISKFULL"></a><span class="nroffip">CURLE_REMOTE_DISK_FULL (70)</span> 
+<p class="level1">Out of disk space on the server. 
+<p class="level0"><a name="CURLETFTPILLEGAL"></a><span class="nroffip">CURLE_TFTP_ILLEGAL (71)</span> 
+<p class="level1">Illegal TFTP operation. 
+<p class="level0"><a name="CURLETFTPUNKNOWNID"></a><span class="nroffip">CURLE_TFTP_UNKNOWNID (72)</span> 
+<p class="level1">Unknown TFTP transfer ID. 
+<p class="level0"><a name="CURLEREMOTEFILEEXISTS"></a><span class="nroffip">CURLE_REMOTE_FILE_EXISTS (73)</span> 
+<p class="level1">File already exists and will not be overwritten. 
+<p class="level0"><a name="CURLETFTPNOSUCHUSER"></a><span class="nroffip">CURLE_TFTP_NOSUCHUSER (74)</span> 
+<p class="level1">This error should never be returned by a properly functioning TFTP server. 
+<p class="level0"><a name="CURLECONVFAILED"></a><span class="nroffip">CURLE_CONV_FAILED (75)</span> 
+<p class="level1">Character conversion failed. 
+<p class="level0"><a name="CURLECONVREQD"></a><span class="nroffip">CURLE_CONV_REQD (76)</span> 
+<p class="level1">Caller must register conversion callbacks. 
+<p class="level0"><a name="CURLESSLCACERTBADFILE"></a><span class="nroffip">CURLE_SSL_CACERT_BADFILE (77)</span> 
+<p class="level1">Problem with reading the SSL CA cert (path? access rights?) 
+<p class="level0"><a name="CURLEREMOTEFILENOTFOUND"></a><span class="nroffip">CURLE_REMOTE_FILE_NOT_FOUND (78)</span> 
+<p class="level1">The resource referenced in the URL does not exist. 
+<p class="level0"><a name="CURLESSH"></a><span class="nroffip">CURLE_SSH (79)</span> 
+<p class="level1">An unspecified error occurred during the SSH session. 
+<p class="level0"><a name="CURLESSLSHUTDOWNFAILED"></a><span class="nroffip">CURLE_SSL_SHUTDOWN_FAILED (80)</span> 
+<p class="level1">Failed to shut down the SSL connection. 
+<p class="level0"><a name="CURLEAGAIN"></a><span class="nroffip">CURLE_AGAIN (81)</span> 
+<p class="level1">Socket is not ready for send/recv wait till it's ready and try again. This return code is only returned from <a Class="emphasis" href="./curl_easy_recv.html">curl_easy_recv</a> and <a Class="emphasis" href="./curl_easy_send.html">curl_easy_send</a> (Added in 7.18.2) 
+<p class="level0"><a name="CURLESSLCRLBADFILE"></a><span class="nroffip">CURLE_SSL_CRL_BADFILE (82)</span> 
+<p class="level1">Failed to load CRL file (Added in 7.19.0) 
+<p class="level0"><a name="CURLESSLISSUERERROR"></a><span class="nroffip">CURLE_SSL_ISSUER_ERROR (83)</span> 
+<p class="level1">Issuer check failed (Added in 7.19.0) 
+<p class="level0"><a name="CURLEFTPPRETFAILED"></a><span class="nroffip">CURLE_FTP_PRET_FAILED (84)</span> 
+<p class="level1">The FTP server does not understand the PRET command at all or does not support the given argument. Be careful when using <span Class="emphasis">CURLOPT_CUSTOMREQUEST(3)</span>, a custom LIST command will be sent with PRET CMD before PASV as well. (Added in 7.20.0) 
+<p class="level0"><a name="CURLERTSPCSEQERROR"></a><span class="nroffip">CURLE_RTSP_CSEQ_ERROR (85)</span> 
+<p class="level1">Mismatch of RTSP CSeq numbers. 
+<p class="level0"><a name="CURLERTSPSESSIONERROR"></a><span class="nroffip">CURLE_RTSP_SESSION_ERROR (86)</span> 
+<p class="level1">Mismatch of RTSP Session Identifiers. 
+<p class="level0"><a name="CURLEFTPBADFILELIST"></a><span class="nroffip">CURLE_FTP_BAD_FILE_LIST (87)</span> 
+<p class="level1">Unable to parse FTP file list (during FTP wildcard downloading). 
+<p class="level0"><a name="CURLECHUNKFAILED"></a><span class="nroffip">CURLE_CHUNK_FAILED (88)</span> 
+<p class="level1">Chunk callback reported error. 
+<p class="level0"><a name="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="CURLEHTTP2STREAM"></a><span class="nroffip">CURLE_HTTP2_STREAM (92)</span> 
+<p class="level1">Stream error in the HTTP/2 framing layer. 
+<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>. 
+<p class="level0"><a name="CURLMCALLMULTIPERFORM"></a><span class="nroffip">CURLM_CALL_MULTI_PERFORM (-1)</span> 
+<p class="level1">This is not really an error. It means you should call <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> again without doing select() or similar in between. Before version 7.20.0 this could be returned by <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a>, but in later versions this return code is never used. 
+<p class="level0"><a name="CURLMOK"></a><span class="nroffip">CURLM_OK (0)</span> 
+<p class="level1">Things are fine. 
+<p class="level0"><a name="CURLMBADHANDLE"></a><span class="nroffip">CURLM_BAD_HANDLE (1)</span> 
+<p class="level1">The passed-in handle is not a valid CURLM handle. 
+<p class="level0"><a name="CURLMBADEASYHANDLE"></a><span class="nroffip">CURLM_BAD_EASY_HANDLE (2)</span> 
+<p class="level1">An easy handle was not good/valid. It could mean that it isn't an easy handle at all, or possibly that the handle already is in used by this or another multi handle. 
+<p class="level0"><a name="CURLMOUTOFMEMORY"></a><span class="nroffip">CURLM_OUT_OF_MEMORY (3)</span> 
+<p class="level1">You are doomed. 
+<p class="level0"><a name="CURLMINTERNALERROR"></a><span class="nroffip">CURLM_INTERNAL_ERROR (4)</span> 
+<p class="level1">This can only be returned if libcurl bugs. Please report it to us! 
+<p class="level0"><a name="CURLMBADSOCKET"></a><span class="nroffip">CURLM_BAD_SOCKET (5)</span> 
+<p class="level1">The passed-in socket is not a valid one that libcurl already knows about. (Added in 7.15.4) 
+<p class="level0"><a name="CURLMUNKNOWNOPTION"></a><span class="nroffip">CURLM_UNKNOWN_OPTION (6)</span> 
+<p class="level1">curl_multi_setopt() with unsupported option (Added in 7.15.4) 
+<p class="level0"><a name="CURLMADDEDALREADY"></a><span class="nroffip">CURLM_ADDED_ALREADY (7)</span> 
+<p class="level1">An easy handle already added to a multi handle was attempted to get added a second time. (Added in 7.32.1) <a name="CURLSHcode"></a><h2 class="nroffsh">CURLSHcode</h2>
+<p class="level0">The "share" interface will return a CURLSHcode to indicate when an error has occurred.  Also consider <a Class="emphasis" href="./curl_share_strerror.html">curl_share_strerror</a>. 
+<p class="level0"><a name="CURLSHEOK"></a><span class="nroffip">CURLSHE_OK (0)</span> 
+<p class="level1">All fine. Proceed as usual. 
+<p class="level0"><a name="CURLSHEBADOPTION"></a><span class="nroffip">CURLSHE_BAD_OPTION (1)</span> 
+<p class="level1">An invalid option was passed to the function. 
+<p class="level0"><a name="CURLSHEINUSE"></a><span class="nroffip">CURLSHE_IN_USE (2)</span> 
+<p class="level1">The share object is currently in use. 
+<p class="level0"><a name="CURLSHEINVALID"></a><span class="nroffip">CURLSHE_INVALID (3)</span> 
+<p class="level1">An invalid share object was passed to the function. 
+<p class="level0"><a name="CURLSHENOMEM"></a><span class="nroffip">CURLSHE_NOMEM (4)</span> 
+<p class="level1">Not enough memory was available. (Added in 7.12.0) 
+<p class="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>, <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>
diff --git a/docs/libcurl/libcurl-errors.pdf b/docs/libcurl/libcurl-errors.pdf
new file mode 100644 (file)
index 0000000..8e43775
Binary files /dev/null and b/docs/libcurl/libcurl-errors.pdf differ
index d25a1b0..e5a5892 100644 (file)
@@ -42,7 +42,7 @@ and when to ask libcurl to get/send data.
 complicated for the application.
 
 3. Enable the application to wait for action on its own file descriptors and
-curl's file descriptors simultaneously.
+curl's file descriptors simultaneous easily.
 
 4. Enable event-based handling and scaling transfers up to and beyond
 thousands of parallel connections.
@@ -173,6 +173,7 @@ the future, you should be aware of the following current restrictions:
 
 .nf
  - Name resolves unless the c-ares or threaded-resolver backends are used
+ - NSS SSL connections
  - HTTP proxy CONNECT operations
  - SOCKS proxy handshakes
  - file:// transfers
diff --git a/docs/libcurl/libcurl-multi.html b/docs/libcurl/libcurl-multi.html
new file mode 100644 (file)
index 0000000..ae7a195
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>libcurl-multi 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-multi - how to use the multi interface <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This is an overview on how to use the libcurl multi interface in your C programs. There are specific man pages for each function mentioned in here. There's also the <a Class="emphasis" href="./libcurl-tutorial.html">libcurl-tutorial</a> man page for a complete tutorial to programming with libcurl and the <a Class="emphasis" href="./libcurl-easy.html">libcurl-easy</a> man page for an overview of the libcurl easy interface. 
+<p class="level0">All functions in the multi interface are prefixed with curl_multi. <a name="OBJECTIVES"></a><h2 class="nroffsh">OBJECTIVES</h2>
+<p class="level0">The multi interface offers several abilities that the easy interface doesn't. They are mainly: 
+<p class="level0">1. Enable a "pull" interface. The application that uses libcurl decides where and when to ask libcurl to get/send data. 
+<p class="level0">2. Enable multiple simultaneous transfers in the same thread without making it complicated for the application. 
+<p class="level0">3. Enable the application to wait for action on its own file descriptors and curl's file descriptors simultaneous easily. 
+<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 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 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, 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 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. 
+<p class="level0">This API is typically used with an event-driven underlying functionality (like libevent, libev, kqueue, epoll or similar) with which the application "subscribes" on socket changes. This allows applications and libcurl to much better scale upward and beyond thousands of simultaneous transfers without losing performance. 
+<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 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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-multi.pdf b/docs/libcurl/libcurl-multi.pdf
new file mode 100644 (file)
index 0000000..fdd488b
Binary files /dev/null and b/docs/libcurl/libcurl-multi.pdf differ
diff --git a/docs/libcurl/libcurl-share.html b/docs/libcurl/libcurl-share.html
new file mode 100644 (file)
index 0000000..e5c94eb
--- /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>libcurl-share 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-share - how to use the share interface <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This is an overview on how to use the libcurl share interface in your C programs. There are specific man pages for each function mentioned in here. 
+<p class="level0">All functions in the share interface are prefixed with curl_share. 
+<p class="level0"><a name="OBJECTIVES"></a><h2 class="nroffsh">OBJECTIVES</h2>
+<p class="level0">The share interface was added to enable sharing of data between curl "handles". <a name="ONE"></a><h2 class="nroffsh">ONE SET OF DATA - MANY TRANSFERS</h2>
+<p class="level0">You can have multiple easy handles share data between them. Have them update and use the <span Class="bold">same</span> cookie database, DNS cache, TLS session cache! This way, each single transfer will take advantage from data updates made by the other transfer(s). The sharing interface, however, does not share active or persistent connections between different easy handles. <a name="SHARE"></a><h2 class="nroffsh">SHARE OBJECT</h2>
+<p class="level0">You create a shared object with <a Class="emphasis" href="./curl_share_init.html">curl_share_init</a>. It returns a handle for a newly created one. 
+<p class="level0">You tell the shared object what data you want it to share by using <a Class="emphasis" href="./curl_share_setopt.html">curl_share_setopt</a>. 
+<p class="level0">Since you can use this share from multiple threads, and libcurl has no internal thread synchronization, you must provide mutex callbacks if you're using this multi-threaded. You set lock and unlock functions with <a Class="emphasis" href="./curl_share_setopt.html">curl_share_setopt</a> too. 
+<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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-share.pdf b/docs/libcurl/libcurl-share.pdf
new file mode 100644 (file)
index 0000000..0236d31
Binary files /dev/null and b/docs/libcurl/libcurl-share.pdf differ
index cbbae6f..3cd563c 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2017, 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
@@ -19,7 +19,7 @@
 .\" * KIND, either express or implied.
 .\" *
 .\" **************************************************************************
-.TH libcurl-symbols 3 "feb 22, 2017" "libcurl 7.41.0" "libcurl symbols"
+.TH libcurl-symbols 3 "sep  7, 2016" "libcurl 7.41.0" "libcurl symbols"
 .SH NAME
 libcurl-symbols \- libcurl symbol version information
 .SH "libcurl symbols"
@@ -315,8 +315,6 @@ Introduced in 7.1
 Deprecated since 7.17.0
 .IP CURLE_USE_SSL_FAILED
 Introduced in 7.17.0
-.IP CURLE_WEIRD_SERVER_REPLY
-Introduced in 7.51.0
 .IP CURLE_WRITE_ERROR
 Introduced in 7.1
 .IP CURLFILETYPE_DEVICE_BLOCK
@@ -522,12 +520,8 @@ Introduced in 7.19.0
 Introduced in 7.21.0
 .IP CURLINFO_PRIVATE
 Introduced in 7.10.3
-.IP CURLINFO_PROTOCOL
-Introduced in 7.52.0
 .IP CURLINFO_PROXYAUTH_AVAIL
 Introduced in 7.10.8
-.IP CURLINFO_PROXY_SSL_VERIFYRESULT
-Introduced in 7.52.0
 .IP CURLINFO_REDIRECT_COUNT
 Introduced in 7.9.7
 .IP CURLINFO_REDIRECT_TIME
@@ -546,8 +540,6 @@ Introduced in 7.20.0
 Introduced in 7.20.0
 .IP CURLINFO_RTSP_SESSION_ID
 Introduced in 7.20.0
-.IP CURLINFO_SCHEME
-Introduced in 7.52.0
 .IP CURLINFO_SIZE_DOWNLOAD
 Introduced in 7.4.1
 .IP CURLINFO_SIZE_UPLOAD
@@ -679,8 +671,6 @@ Introduced in 7.1
 Introduced in 7.11.0
 .IP CURLOPTTYPE_STRINGPOINT
 Introduced in 7.46.0
-.IP CURLOPT_ABSTRACT_UNIX_SOCKET
-Introduced in 7.53.0
 .IP CURLOPT_ACCEPTTIMEOUT_MS
 Introduced in 7.24.0
 .IP CURLOPT_ACCEPT_ENCODING
@@ -886,8 +876,6 @@ Introduced in 7.10.8
 Introduced in 7.19.0
 .IP CURLOPT_KEYPASSWD
 Introduced in 7.17.0
-.IP CURLOPT_KEEP_SENDING_ON_ERROR
-Introduced in 7.51.0
 .IP CURLOPT_KRB4LEVEL
 Introduced in 7.3
 Deprecated since 7.17.0
@@ -988,8 +976,6 @@ Introduced in 7.1
 Introduced in 7.19.1
 .IP CURLOPT_PREQUOTE
 Introduced in 7.9.5
-.IP CURLOPT_PRE_PROXY
-Introduced in 7.52.0
 .IP CURLOPT_PRIVATE
 Introduced in 7.10.3
 .IP CURLOPT_PROGRESSDATA
@@ -1015,42 +1001,8 @@ Introduced in 7.10
 Introduced in 7.19.1
 .IP CURLOPT_PROXYUSERPWD
 Introduced in 7.1
-.IP CURLOPT_PROXY_CAINFO
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_CAPATH
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_CRLFILE
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_KEYPASSWD
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_PINNEDPUBLICKEY
-Introduced in 7.52.0
 .IP CURLOPT_PROXY_SERVICE_NAME
 Introduced in 7.43.0
-.IP CURLOPT_PROXY_SSLCERT
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSLCERTTYPE
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSLKEY
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSLKEYTYPE
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSLVERSION
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSL_CIPHER_LIST
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSL_OPTIONS
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSL_VERIFYHOST
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_SSL_VERIFYPEER
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_TLSAUTH_PASSWORD
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_TLSAUTH_TYPE
-Introduced in 7.52.0
-.IP CURLOPT_PROXY_TLSAUTH_USERNAME
-Introduced in 7.52.0
 .IP CURLOPT_PROXY_TRANSFER_MODE
 Introduced in 7.18.0
 .IP CURLOPT_PUT
@@ -1338,8 +1290,6 @@ Introduced in 7.19.4
 Introduced in 7.10
 .IP CURLPROXY_HTTP_1_0
 Introduced in 7.19.4
-.IP CURLPROXY_HTTPS
-Introduced in 7.52.0
 .IP CURLPROXY_SOCKS4
 Introduced in 7.10
 .IP CURLPROXY_SOCKS4A
@@ -1568,8 +1518,6 @@ Introduced in 7.10
 Introduced in 7.10
 .IP CURL_MAX_HTTP_HEADER
 Introduced in 7.19.7
-.IP CURL_MAX_READ_SIZE
-Introduced in 7.53.0
 .IP CURL_MAX_WRITE_SIZE
 Introduced in 7.9.7
 .IP CURL_NETRC_IGNORED
@@ -1666,8 +1614,6 @@ Introduced in
 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
@@ -1695,8 +1641,6 @@ Introduced in 7.10.6
 Deprecated since 7.38.0
 .IP CURL_VERSION_HTTP2
 Introduced in 7.33.0
-.IP CURL_VERSION_HTTPS_PROXY
-Introduced in 7.52.0
 .IP CURL_VERSION_IDN
 Introduced in 7.12.0
 .IP CURL_VERSION_IPV6
diff --git a/docs/libcurl/libcurl-symbols.html b/docs/libcurl/libcurl-symbols.html
new file mode 100644 (file)
index 0000000..31c8ac9
--- /dev/null
@@ -0,0 +1,1640 @@
+<!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="CURLEHTTP2STREAM"></a><span class="nroffip">CURLE_HTTP2_STREAM</span> 
+<p class="level1">Introduced in 7.49.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="CURLINFOHTTPVERSION"></a><span class="nroffip">CURLINFO_HTTP_VERSION</span> 
+<p class="level1">Introduced in 7.50.0 
+<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="CURLOPTCONNECTTO"></a><span class="nroffip">CURLOPT_CONNECT_TO</span> 
+<p class="level1">Introduced in 7.49.0 
+<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 Deprecated since 7.49.0 
+<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="CURLOPTTCPFASTOPEN"></a><span class="nroffip">CURLOPT_TCP_FASTOPEN</span> 
+<p class="level1">Introduced in 7.49.0 
+<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="CURLSSLBACKENDBORINGSSL"></a><span class="nroffip">CURLSSLBACKEND_BORINGSSL</span> 
+<p class="level1">Introduced in 7.49.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="CURLSSLBACKENDLIBRESSL"></a><span class="nroffip">CURLSSLBACKEND_LIBRESSL</span> 
+<p class="level1">Introduced in 7.49.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="CURLSSLBACKENDWOLFSSL"></a><span class="nroffip">CURLSSLBACKEND_WOLFSSL</span> 
+<p class="level1">Introduced in 7.49.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="CURLDIDMEMORYFUNCTYPEDEFS"></a><span class="nroffip">CURL_DID_MEMORY_FUNC_TYPEDEFS</span> 
+<p class="level1">Introduced in 7.49.0 
+<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="CURLHTTPVERSION2PRIORKNOWLEDGE"></a><span class="nroffip">CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE</span> 
+<p class="level1">Introduced in 7.49.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="CURLSTRICTER"></a><span class="nroffip">CURL_STRICTER</span> 
+<p class="level1">Introduced in 7.50.2 
+<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..48fcc36
Binary files /dev/null and b/docs/libcurl/libcurl-symbols.pdf differ
diff --git a/docs/libcurl/libcurl-thread.html b/docs/libcurl/libcurl-thread.html
new file mode 100644 (file)
index 0000000..2e95750
--- /dev/null
@@ -0,0 +1,96 @@
+<!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">OpenSSL 1.1.0 "can be safely used in multi-threaded applications provided that support for the underlying OS threading API is built-in." 
+<p class="level1"><a href="https://www.openssl.org/docs/manmaster/crypto/threads.html&#35;DESCRIPTION">https://www.openssl.org/docs/manmaster/crypto/threads.html&#35;DESCRIPTION</a> 
+<p class="level1">OpenSSL &lt;= 1.0.2 the user must set callbacks. 
+<p class="level1"><a href="https://www.openssl.org/docs/man1.0.2/crypto/threads.html&#35;DESCRIPTION">https://www.openssl.org/docs/man1.0.2/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="level1">
+<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. 
+<p class="level0"><a name="BoringSSL"></a><span class="nroffip">BoringSSL</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..bbb99f4
Binary files /dev/null and b/docs/libcurl/libcurl-thread.pdf differ
diff --git a/docs/libcurl/libcurl-tutorial.html b/docs/libcurl/libcurl-tutorial.html
new file mode 100644 (file)
index 0000000..b569c45
--- /dev/null
@@ -0,0 +1,565 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>libcurl-tutorial 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-tutorial - libcurl programming tutorial <a name="Objective"></a><h2 class="nroffsh">Objective</h2>
+<p class="level0">This document attempts to describe the general principles and some basic approaches to consider when programming with libcurl. The text will focus mainly on the C interface but might apply fairly well on other interfaces as well as they usually follow the C one pretty closely. 
+<p class="level0">This document will refer to 'the user' as the person writing the source code that uses libcurl. That would probably be you or someone in your position. What will be generally referred to as 'the program' will be the collected source code that you write that is using libcurl for transfers. The program is outside libcurl and libcurl is outside of the program. 
+<p class="level0">To get more details on all options and functions described herein, please refer to their respective man pages. 
+<p class="level0"><a name="Building"></a><h2 class="nroffsh">Building</h2>
+<p class="level0">There are many different ways to build C programs. This chapter will assume a Unix style build process. If you use a different build system, you can still read this to get general information that may apply to your environment as well. 
+<p class="level0"><a name="Compiling"></a><span class="nroffip">Compiling the Program</span> 
+<p class="level1">Your compiler needs to know where the libcurl headers are located. Therefore you must set your compiler's include path to point to the directory where you installed them. The 'curl-config'[3] tool can be used to get this information: 
+<p class="level1">$ curl-config --cflags 
+<p class="level1">
+<p class="level0"><a name="Linking"></a><span class="nroffip">Linking the Program with libcurl</span> 
+<p class="level1">When having compiled the program, you need to link your object files to create a single executable. For that to succeed, you need to link with libcurl and possibly also with other libraries that libcurl itself depends on. Like the OpenSSL libraries, but even some standard OS libraries may be needed on the command line. To figure out which flags to use, once again the 'curl-config' tool comes to the rescue: 
+<p class="level1">$ curl-config --libs 
+<p class="level1">
+<p class="level0"><a name="SSL"></a><span class="nroffip">SSL or Not</span> 
+<p class="level1">libcurl can be built and customized in many ways. One of the things that varies from different libraries and builds is the support for SSL-based transfers, like HTTPS and FTPS. If a supported SSL library was detected properly at build-time, libcurl will be built with SSL support. To figure out if an installed libcurl has been built with SSL support enabled, use 'curl-config' like this: 
+<p class="level1">$ curl-config --feature 
+<p class="level1">And if SSL is supported, the keyword 'SSL' will be written to stdout, possibly together with a few other features that could be either on or off on for different libcurls. 
+<p class="level1">See also the "Features libcurl Provides" further down. 
+<p class="level0"><a name="autoconf"></a><span class="nroffip">autoconf macro</span> 
+<p class="level1">When you write your configure script to detect libcurl and setup variables accordingly, we offer a prewritten macro that probably does everything you need in this area. See docs/libcurl/libcurl.m4 file - it includes docs on how to use it. 
+<p class="level1"><a name="Portable"></a><h2 class="nroffsh">Portable Code in a Portable World</h2>
+<p class="level0">The people behind libcurl have put a considerable effort to make libcurl work on a large amount of different operating systems and environments. 
+<p class="level0">You program libcurl the same way on all platforms that libcurl runs on. There are only very few minor considerations that differ. If you just make sure to write your code portable enough, you may very well create yourself a very portable program. libcurl shouldn't stop you from that. 
+<p class="level0"><a name="Global"></a><h2 class="nroffsh">Global Preparation</h2>
+<p class="level0">The program must initialize some of the libcurl functionality globally. That means it should be done exactly once, no matter how many times you intend to use the library. Once for your program's entire life time. This is done using 
+<p class="level0">&nbsp;curl_global_init() 
+<p class="level0">and it takes one parameter which is a bit pattern that tells libcurl what to initialize. Using <span Class="emphasis">CURL_GLOBAL_ALL</span> will make it initialize all known internal sub modules, and might be a good default option. The current two bits that are specified are: 
+<p class="level1">
+<p class="level0"><a name="CURLGLOBALWIN32"></a><span class="nroffip">CURL_GLOBAL_WIN32</span> 
+<p class="level1">which only does anything on Windows machines. When used on a Windows machine, it'll make libcurl initialize the win32 socket stuff. Without having that initialized properly, your program cannot use sockets properly. You should only do this once for each application, so if your program already does this or of another library in use does it, you should not tell libcurl to do this as well. 
+<p class="level0"><a name="CURLGLOBALSSL"></a><span class="nroffip">CURL_GLOBAL_SSL</span> 
+<p class="level1">which only does anything on libcurls compiled and built SSL-enabled. On these systems, this will make libcurl initialize the SSL library properly for this application. This only needs to be done once for each application so if your program or another library already does this, this bit should not be needed. 
+<p class="level0">
+<p class="level0">libcurl has a default protection mechanism that detects if <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> hasn't been called by the time <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> is called and if that is the case, libcurl runs the function itself with a guessed bit pattern. Please note that depending solely on this is not considered nice nor very good. 
+<p class="level0">When the program no longer uses libcurl, it should call <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a>, which is the opposite of the init call. It will then do the reversed operations to cleanup the resources the <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> call initialized. 
+<p class="level0">Repeated calls to <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> should be avoided. They should only be called once each. 
+<p class="level0"><a name="Features"></a><h2 class="nroffsh">Features libcurl Provides</h2>
+<p class="level0">It is considered best-practice to determine libcurl features at run-time rather than at build-time (if possible of course). By calling <a Class="emphasis" href="./curl_version_info.html">curl_version_info</a> and checking out the details of the returned struct, your program can figure out exactly what the currently running libcurl supports. 
+<p class="level0"><a name="Two"></a><h2 class="nroffsh">Two Interfaces</h2>
+<p class="level0">libcurl first introduced the so called easy interface. All operations in the easy interface are prefixed with 'curl_easy'. The easy interface lets you do single transfers with a synchronous and blocking function call. 
+<p class="level0">libcurl also offers another interface that allows multiple simultaneous transfers in a single thread, the so called multi interface. More about that interface is detailed in a separate chapter further down. You still need to understand the easy interface first, so please continue reading for better understanding. <a name="Handle"></a><h2 class="nroffsh">Handle the Easy libcurl</h2>
+<p class="level0">To use the easy interface, you must first create yourself an easy handle. You need one handle for each easy session you want to perform. Basically, you should use one handle for every thread you plan to use for transferring. You must never share the same handle in multiple threads. 
+<p class="level0">Get an easy handle with 
+<p class="level0">&nbsp;easyhandle = curl_easy_init(); 
+<p class="level0">It returns an easy handle. Using that you proceed to the next step: setting up your preferred actions. A handle is just a logic entity for the upcoming transfer or series of transfers. 
+<p class="level0">You set properties and options for this handle using <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a>. They control how the subsequent transfer or transfers will be made. Options remain set in the handle until set again to something different. They are sticky. Multiple requests using the same handle will use the same options. 
+<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 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: 
+<p class="level0">&nbsp;size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp); 
+<p class="level0">You tell libcurl to pass all data to this function by issuing a function similar to this: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data); 
+<p class="level0">You can control what data your callback function gets in the fourth argument by setting another property: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &internal_struct); 
+<p class="level0">Using that property, you can easily pass local data between your application and the function that gets invoked by libcurl. libcurl itself won't touch the data you pass with <span Class="emphasis">CURLOPT_WRITEDATA(3)</span>. 
+<p class="level0">libcurl offers its own default internal callback that will take care of the data if you don't set the callback with <span Class="emphasis">CURLOPT_WRITEFUNCTION(3)</span>. It will then simply output the received data to stdout. You can have the default callback write the data to a different file handle by passing a 'FILE *' to a file opened for writing with the <span Class="emphasis">CURLOPT_WRITEDATA(3)</span> option. 
+<p class="level0">Now, we need to take a step back and have a deep breath. Here's one of those rare platform-dependent nitpicks. Did you spot it? On some platforms[2], libcurl won't be able to operate on files opened by the program. Thus, if you use the default callback and pass in an open file with <span Class="emphasis">CURLOPT_WRITEDATA(3)</span>, it will crash. You should therefore avoid this to make your program run fine virtually everywhere. 
+<p class="level0">(<span Class="emphasis">CURLOPT_WRITEDATA(3)</span> was formerly known as <span Class="emphasis">CURLOPT_FILE</span>. Both names still work and do the same thing). 
+<p class="level0">If you're using libcurl as a win32 DLL, you MUST use the <span Class="emphasis">CURLOPT_WRITEFUNCTION(3)</span> if you set <span Class="emphasis">CURLOPT_WRITEDATA(3)</span> - or you will experience crashes. 
+<p class="level0">There are of course many more options you can set, and we'll get back to a few of them later. Let's instead continue to the actual transfer: 
+<p class="level0">&nbsp;success = curl_easy_perform(easyhandle); 
+<p class="level0"><a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> will connect to the remote site, do the necessary commands and receive the transfer. Whenever it receives data, it calls the callback function we previously set. The function may get one byte at a time, or it may get many kilobytes at once. libcurl delivers as much as possible as often as possible. Your callback function should return the number of bytes it "took care of". If that is not the exact same amount of bytes that was passed to it, libcurl will abort the operation and return with an error code. 
+<p class="level0">When the transfer is complete, the function returns a return code that informs you if it succeeded in its mission or not. If a return code isn't enough for you, you can use the <span Class="emphasis">CURLOPT_ERRORBUFFER(3)</span> to point libcurl to a buffer of yours where it'll store a human readable error message as well. 
+<p class="level0">If you then want to transfer another file, the handle is ready to be used again. Mind you, it is even preferred that you re-use an existing handle if you intend to make another transfer. libcurl will then attempt to re-use the previous connection. 
+<p class="level0">For some protocols, downloading a file can involve a complicated process of logging in, setting the transfer mode, changing the current directory and finally transferring the file data. libcurl takes care of all that complication for you. Given simply the URL to a file, libcurl will take care of all the details needed to get the file moved from one machine to another. 
+<p class="level0"><a name="Multi-threading"></a><h2 class="nroffsh">Multi-threading Issues</h2>
+<p class="level0">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. 
+<p class="level0">Of course, there are bugs left. We need to know about them to be able to fix them, so we're quite dependent on your bug reports! When you do report suspected bugs in libcurl, please include as many details as you possibly can: a protocol dump that <span Class="emphasis">CURLOPT_VERBOSE(3)</span> produces, library version, as much as possible of your code that uses libcurl, operating system name and version, compiler name and version etc. 
+<p class="level0">If <span Class="emphasis">CURLOPT_VERBOSE(3)</span> is not enough, you increase the level of debug data your application receive by using the <span Class="emphasis">CURLOPT_DEBUGFUNCTION(3)</span>. 
+<p class="level0">Getting some in-depth knowledge about the protocols involved is never wrong, and if you're trying to do funny things, you might very well understand libcurl and how to use it better if you study the appropriate RFC documents at least briefly. 
+<p class="level0"><a name="Upload"></a><h2 class="nroffsh">Upload Data to a Remote Site</h2>
+<p class="level0">libcurl tries to keep a protocol independent approach to most transfers, thus uploading to a remote FTP site is very similar to uploading data to a HTTP server with a PUT request. 
+<p class="level0">Of course, first you either create an easy handle or you re-use one existing one. Then you set the URL to operate on just like before. This is the remote URL, that we now will upload. 
+<p class="level0">Since we write an application, we most likely want libcurl to get the upload data by asking us for it. To make it do that, we set the read callback and the custom pointer libcurl will pass to our read callback. The read callback should have a prototype similar to: 
+<p class="level0">&nbsp;size_t function(char *bufptr, size_t size, size_t nitems, void *userp); 
+<p class="level0">Where bufptr is the pointer to a buffer we fill in with data to upload and size*nitems is the size of the buffer and therefore also the maximum amount of data we can return to libcurl in this call. The 'userp' pointer is the custom pointer we set to point to a struct of ours to pass private data between the application and the callback. 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_READFUNCTION, read_function); 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_READDATA, &filedata); 
+<p class="level0">Tell libcurl that we want to upload: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_UPLOAD, 1L); 
+<p class="level0">A few protocols won't behave properly when uploads are done without any prior knowledge of the expected file size. So, set the upload file size using the <span Class="emphasis">CURLOPT_INFILESIZE_LARGE(3)</span> for all known file sizes like this[1]: 
+<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. 
+<p class="level0"><a name="Passwords"></a><h2 class="nroffsh">Passwords</h2>
+<p class="level0">Many protocols use or even require that user name and password are provided to be able to download or upload the data of your choice. libcurl offers several ways to specify them. 
+<p class="level0">Most protocols support that you specify the name and password in the URL itself. libcurl will detect this and use them accordingly. This is written like this: 
+<p class="level0">&nbsp;protocol://user:password@example.com/path/ 
+<p class="level0">If you need any odd letters in your user name or password, you should enter them URL encoded, as %XX where XX is a two-digit hexadecimal number. 
+<p class="level0">libcurl also provides options to set various passwords. The user name and password as shown embedded in the URL can instead get set with the <span Class="emphasis">CURLOPT_USERPWD(3)</span> option. The argument passed to libcurl should be a char * to a string in the format "user:password". In a manner like this: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_USERPWD, "myname:thesecret"); 
+<p class="level0">Another case where name and password might be needed at times, is for those users who need to authenticate themselves to a proxy they use. libcurl offers another option for this, the <span Class="emphasis">CURLOPT_PROXYUSERPWD(3)</span>. It is used quite similar to the <span Class="emphasis">CURLOPT_USERPWD(3)</span> option like this: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "myname:thesecret"); 
+<p class="level0">There's a long time Unix "standard" way of storing FTP user names and passwords, namely in the $HOME/.netrc file. The file should be made private so that only the user may read it (see also the "Security Considerations" chapter), as it might contain the password in plain text. libcurl has the ability to use this file to figure out what set of user name and password to use for a particular host. As an extension to the normal functionality, libcurl also supports this file for non-FTP protocols such as HTTP. To make curl use this file, use the <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 class="level0">
+&nbsp;machine myhost.mydomain.com
+&nbsp;login userlogin
+&nbsp;password secretword
+</pre>
+
+<p class="level0">
+<p class="level0">All these examples have been cases where the password has been optional, or at least you could leave it out and have libcurl attempt to do its job without it. There are times when the password isn't optional, like when you're using an SSL private key for secure transfers. 
+<p class="level0">To pass the known private key password to libcurl: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_KEYPASSWD, "keypassword"); 
+<p class="level0"><a name="HTTP"></a><h2 class="nroffsh">HTTP Authentication</h2>
+<p class="level0">The previous chapter showed how to set user name and password for getting URLs that require authentication. When using the HTTP protocol, there are many different ways a client can provide those credentials to the server and you can control which way libcurl will (attempt to) use them. The default HTTP authentication method is called 'Basic', which is sending the name and password in clear-text in the HTTP request, base64-encoded. This is insecure. 
+<p class="level0">At the time of this writing, libcurl can be built to use: Basic, Digest, NTLM, Negotiate (SPNEGO). You can tell libcurl which one to use with <span Class="emphasis">CURLOPT_HTTPAUTH(3)</span> as in: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); 
+<p class="level0">And when you send authentication to a proxy, you can also set authentication type the same way but instead with <span Class="emphasis">CURLOPT_PROXYAUTH(3)</span>: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM); 
+<p class="level0">Both these options allow you to set multiple types (by ORing them together), to make libcurl pick the most secure one out of the types the server/proxy claims to support. This method does however add a round-trip since libcurl must first ask the server what it supports: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, &nbsp;CURLAUTH_DIGEST|CURLAUTH_BASIC); 
+<p class="level0">For convenience, you can use the 'CURLAUTH_ANY' define (instead of a list with specific types) which allows libcurl to use whatever method it wants. 
+<p class="level0">When asking for multiple types, libcurl will pick the available one it considers "best" in its own internal order of preference. 
+<p class="level0"><a name="HTTP"></a><h2 class="nroffsh">HTTP POSTing</h2>
+<p class="level0">We get many questions regarding how to issue HTTP POSTs with libcurl the proper way. This chapter will thus include examples using both different versions of HTTP POST that libcurl supports. 
+<p class="level0">The first version is the simple POST, the most common version, that most HTML pages using the &lt;form&gt; tag uses. We provide a pointer to the data and tell libcurl to post it all to the remote site: 
+<p class="level0"><pre 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 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 <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 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 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: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPGET, 1L); 
+<p class="level0">Just setting <span Class="emphasis">CURLOPT_POSTFIELDS(3)</span> to "" or NULL will *not* stop libcurl from doing a POST. It will just make it POST without any data to send! 
+<p class="level0"><a name="Showing"></a><h2 class="nroffsh">Showing Progress</h2>
+<p class="level0">
+<p class="level0">For historical and traditional reasons, libcurl has a built-in progress meter that can be switched on and then makes it present a progress meter in your terminal. 
+<p class="level0">Switch on the progress meter by, oddly enough, setting <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 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. 
+<p class="level0"><a name="libcurl"></a><h2 class="nroffsh">libcurl with C++</h2>
+<p class="level0">
+<p class="level0">There's basically only one thing to keep in mind when using C++ instead of C when interfacing libcurl: 
+<p class="level0">The callbacks CANNOT be non-static class member functions 
+<p class="level0">Example C++ code: 
+<p class="level0"><pre class="level0">
+class AClass {
+&nbsp;   static size_t write_data(void *ptr, size_t size, size_t nmemb,
+&nbsp;                            void *ourpointer)
+&nbsp;   {
+&nbsp;     /* do what you want with the data */
+&nbsp;   }
+&nbsp;}
+</pre>
+
+<p class="level0">
+<p class="level0"><a name="Proxies"></a><h2 class="nroffsh">Proxies</h2>
+<p class="level0">
+<p class="level0">What "proxy" means according to Merriam-Webster: "a person authorized to act for another" but also "the agency, function, or office of a deputy who acts as a substitute for another". 
+<p class="level0">Proxies are exceedingly common these days. Companies often only offer Internet access to employees through their proxies. Network clients or user-agents ask the proxy for documents, the proxy does the actual request and then it returns them. 
+<p class="level0">libcurl supports SOCKS and HTTP proxies. When a given URL is wanted, libcurl will ask the proxy for it instead of trying to connect to the actual host identified in the URL. 
+<p class="level0">If you're using a SOCKS proxy, you may find that libcurl doesn't quite support all operations through it. 
+<p class="level0">For HTTP proxies: the fact that the proxy is a HTTP proxy puts certain restrictions on what can actually happen. A requested URL that might not be a HTTP URL will be still be passed to the HTTP proxy to deliver back to libcurl. This happens transparently, and an application may not need to know. I say "may", because at times it is very important to understand that all operations over a HTTP proxy use the HTTP protocol. For example, you can't invoke your own custom FTP commands or even proper FTP directory listings. 
+<p class="level0">
+<p class="level0"><a name="Proxy"></a><span class="nroffip">Proxy Options</span> 
+<p class="level1">
+<p class="level1">To tell libcurl to use a proxy at a given port number: 
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXY, "proxy-host.com:8080"); 
+<p class="level1">Some proxies require user authentication before allowing a request, and you pass that information similar to this: 
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "user:password"); 
+<p class="level1">If you want to, you can specify the host name only in the <span Class="emphasis">CURLOPT_PROXY(3)</span> option, and set the port number separately with <span Class="emphasis">CURLOPT_PROXYPORT(3)</span>. 
+<p class="level1">Tell libcurl what kind of proxy it is with <span Class="emphasis">CURLOPT_PROXYTYPE(3)</span> (if not, it will default to assume a HTTP proxy): 
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); 
+<p class="level1">
+<p class="level0"><a name="Environment"></a><span class="nroffip">Environment Variables</span> 
+<p class="level1">
+<p class="level1">libcurl automatically checks and uses a set of environment variables to know what proxies to use for certain protocols. The names of the variables are following an ancient de facto standard and are built up as "[protocol]_proxy" (note the lower casing). Which makes the variable 'http_proxy' checked for a name of a proxy to use when the input URL is HTTP. Following the same rule, the variable named 'ftp_proxy' is checked for FTP URLs. Again, the proxies are always HTTP proxies, the different names of the variables simply allows different HTTP proxies to be used. 
+<p class="level1">The proxy environment variable contents should be in the format "[protocol://][user:password@]machine[:port]". Where the protocol:// part is simply ignored if present (so <a href="http://proxy">http://proxy</a> and bluerk://proxy will do the same) and the optional port number specifies on which port the proxy operates on the host. If not specified, the internal default port number will be used and that is most likely *not* the one you would like it to be. 
+<p class="level1">There are two special environment variables. 'all_proxy' is what sets proxy for any URL in case the protocol specific variable wasn't set, and 'no_proxy' defines a list of hosts that should not use a proxy even though a variable may say so. If 'no_proxy' is a plain asterisk ("*") it matches all hosts. 
+<p class="level1">To explicitly disable libcurl's checking for and using the proxy environment variables, set the proxy name to "" - an empty string - with <span Class="emphasis">CURLOPT_PROXY(3)</span>. 
+<p class="level0"><a name="SSL"></a><span class="nroffip">SSL and Proxies</span> 
+<p class="level1">
+<p class="level1">SSL is for secure point-to-point connections. This involves strong encryption and similar things, which effectively makes it impossible for a proxy to operate as a "man in between" which the proxy's task is, as previously discussed. Instead, the only way to have SSL work over a HTTP proxy is to ask the proxy to tunnel trough everything without being able to check or fiddle with the traffic. 
+<p class="level1">Opening an SSL connection over a HTTP proxy is therefor a matter of asking the proxy for a straight connection to the target host on a specified port. This is made with the HTTP request CONNECT. ("please mr proxy, connect me to that remote host"). 
+<p class="level1">Because of the nature of this operation, where the proxy has no idea what kind of data that is passed in and out through this tunnel, this breaks some of the very few advantages that come from using a proxy, such as caching.  Many organizations prevent this kind of tunneling to other destination port numbers than 443 (which is the default HTTPS port number). 
+<p class="level1">
+<p class="level0"><a name="Tunneling"></a><span class="nroffip">Tunneling Through Proxy</span> 
+<p class="level1">As explained above, tunneling is required for SSL to work and often even restricted to the operation intended for SSL; HTTPS. 
+<p class="level1">This is however not the only time proxy-tunneling might offer benefits to you or your application. 
+<p class="level1">As tunneling opens a direct connection from your application to the remote machine, it suddenly also re-introduces the ability to do non-HTTP operations over a HTTP proxy. You can in fact use things such as FTP upload or FTP custom commands this way. 
+<p class="level1">Again, this is often prevented by the administrators of proxies and is rarely allowed. 
+<p class="level1">Tell libcurl to use proxy tunneling like this: 
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPPROXYTUNNEL, 1L); 
+<p class="level1">In fact, there might even be times when you want to do plain HTTP operations using a tunnel like this, as it then enables you to operate on the remote server instead of asking the proxy to do so. libcurl will not stand in the way for such innovative actions either! 
+<p class="level1">
+<p class="level0"><a name="Proxy"></a><span class="nroffip">Proxy Auto-Config</span> 
+<p class="level1">
+<p class="level1">Netscape first came up with this. It is basically a web page (usually using a .pac extension) with a Javascript that when executed by the browser with the requested URL as input, returns information to the browser on how to connect to the URL. The returned information might be "DIRECT" (which means no proxy should be used), "PROXY host:port" (to tell the browser where the proxy for this particular URL is) or "SOCKS host:port" (to direct the browser to a SOCKS proxy). 
+<p class="level1">libcurl has no means to interpret or evaluate Javascript and thus it doesn't support this. If you get yourself in a position where you face this nasty invention, the following advice have been mentioned and used in the past: 
+<p class="level1">- Depending on the Javascript complexity, write up a script that translates it to another language and execute that. 
+<p class="level1">- Read the Javascript code and rewrite the same logic in another language. 
+<p class="level1">- Implement a Javascript interpreter; people have successfully used the Mozilla Javascript engine in the past. 
+<p class="level1">- Ask your admins to stop this, for a static proxy setup or similar. 
+<p class="level1"><a name="Persistence"></a><h2 class="nroffsh">Persistence Is The Way to Happiness</h2>
+<p class="level0">
+<p class="level0">Re-cycling the same easy handle several times when doing multiple requests is the way to go. 
+<p class="level0">After each single <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> operation, libcurl will keep the connection alive and open. A subsequent request using the same easy handle to the same host might just be able to use the already open connection! This reduces network impact a lot. 
+<p class="level0">Even if the connection is dropped, all connections involving SSL to the same host again, will benefit from libcurl's session ID cache that drastically reduces re-connection time. 
+<p class="level0">FTP connections that are kept alive save a lot of time, as the command- response round-trips are skipped, and also you don't risk getting blocked without permission to login again like on many FTP servers only allowing N persons to be logged in at the same time. 
+<p class="level0">libcurl caches DNS name resolving results, to make lookups of a previously looked up name a lot faster. 
+<p class="level0">Other interesting details that improve performance for subsequent requests may also be added in the future. 
+<p class="level0">Each easy handle will attempt to keep the last few connections alive for a while in case they are to be used again. You can set the size of this "cache" with the <span Class="emphasis">CURLOPT_MAXCONNECTS(3)</span> option. Default is 5. There is very seldom any point in changing this value, and if you think of changing this it is often just a matter of thinking again. 
+<p class="level0">To force your upcoming request to not use an already existing connection (it will even close one first if there happens to be one alive to the same host you're about to operate on), you can do that by setting <span Class="emphasis">CURLOPT_FRESH_CONNECT(3)</span> to 1. In a similar spirit, you can also forbid the upcoming request to be "lying" around and possibly get re-used after the request by setting <span Class="emphasis">CURLOPT_FORBID_REUSE(3)</span> to 1. 
+<p class="level0"><a name="HTTP"></a><h2 class="nroffsh">HTTP Headers Used by libcurl</h2>
+<p class="level0">When you use libcurl to do HTTP requests, it'll pass along a series of headers automatically. It might be good for you to know and understand these. You can replace or remove them by using the <span Class="emphasis">CURLOPT_HTTPHEADER(3)</span> option. 
+<p class="level0">
+<p class="level0"><a name="Host"></a><span class="nroffip">Host</span> 
+<p class="level1">This header is required by HTTP 1.1 and even many 1.0 servers and should be the name of the server we want to talk to. This includes the port number if anything but default. 
+<p class="level1">
+<p class="level0"><a name="Accept"></a><span class="nroffip">Accept</span> 
+<p class="level1">"*/*". 
+<p class="level1">
+<p class="level0"><a name="Expect"></a><span class="nroffip">Expect</span> 
+<p class="level1">When doing POST requests, libcurl sets this header to "100-continue" to ask the server for an "OK" message before it proceeds with sending the data part of the post. If the POSTed data amount is deemed "small", libcurl will not use this header. 
+<p class="level1"><a name="Customizing"></a><h2 class="nroffsh">Customizing Operations</h2>
+<p class="level0">There is an ongoing development today where more and more protocols are built upon HTTP for transport. This has obvious benefits as HTTP is a tested and reliable protocol that is widely deployed and has excellent proxy-support. 
+<p class="level0">When you use one of these protocols, and even when doing other kinds of programming you may need to change the traditional HTTP (or FTP or...) manners. You may need to change words, headers or various data. 
+<p class="level0">libcurl is your friend here too. 
+<p class="level0">
+<p class="level0"><a name="CUSTOMREQUEST"></a><span class="nroffip">CUSTOMREQUEST</span> 
+<p class="level1">If just changing the actual HTTP request keyword is what you want, like when GET, HEAD or POST is not good enough for you, <span Class="emphasis">CURLOPT_CUSTOMREQUEST(3)</span> is there for you. It is very simple to use: 
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNREQUEST"); 
+<p class="level1">When using the custom request, you change the request keyword of the actual request you are performing. Thus, by default you make a GET request but you can also make a POST operation (as described before) and then replace the POST keyword if you want to. You're the boss. 
+<p class="level1">
+<p class="level0"><a name="Modify"></a><span class="nroffip">Modify Headers</span> 
+<p class="level1">HTTP-like protocols pass a series of headers to the server when doing the request, and you're free to pass any amount of extra headers that you think fit. Adding headers is this easy: 
+<p class="level1"><pre 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 class="level1">
+&nbsp;headers = curl_slist_append(headers, "Accept: Agent-007");
+&nbsp;headers = curl_slist_append(headers, "Host: munged.host.line");
+</pre>
+
+<p class="level1">
+<p class="level1">
+<p class="level0"><a name="Delete"></a><span class="nroffip">Delete Headers</span> 
+<p class="level1">If you replace an existing header with one with no contents, you will prevent the header from being sent. For instance, if you want to completely prevent the "Accept:" header from being sent, you can disable it with code similar to this: 
+<p class="level1">&nbsp;headers = curl_slist_append(headers, "Accept:"); 
+<p class="level1">Both replacing and canceling internal headers should be done with careful consideration and you should be aware that you may violate the HTTP protocol when doing so. 
+<p class="level1">
+<p class="level0"><a name="Enforcing"></a><span class="nroffip">Enforcing chunked transfer-encoding</span> 
+<p class="level1">
+<p class="level1">By making sure a request uses the custom header "Transfer-Encoding: chunked" when doing a non-GET HTTP operation, libcurl will switch over to "chunked" upload, even though the size of the data to upload might be known. By default, libcurl usually switches over to chunked upload automatically if the upload data size is unknown. 
+<p class="level1">
+<p class="level0"><a name="HTTP"></a><span class="nroffip">HTTP Version</span> 
+<p class="level1">
+<p class="level1">All HTTP requests includes the version number to tell the server which version we support. libcurl speaks HTTP 1.1 by default. Some very old servers don't like getting 1.1-requests and when dealing with stubborn old things like that, you can tell libcurl to use 1.0 instead by doing something like this: 
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); 
+<p class="level1">
+<p class="level0"><a name="FTP"></a><span class="nroffip">FTP Custom Commands</span> 
+<p class="level1">
+<p class="level1">Not all protocols are HTTP-like, and thus the above may not help you when you want to make, for example, your FTP transfers to behave differently. 
+<p class="level1">Sending custom commands to a FTP server means that you need to send the commands exactly as the FTP server expects them (RFC959 is a good guide here), and you can only use commands that work on the control-connection alone. All kinds of commands that require data interchange and thus need a data-connection must be left to libcurl's own judgement. Also be aware that libcurl will do its very best to change directory to the target directory before doing any transfer, so if you change directory (with CWD or similar) you might confuse libcurl and then it might not attempt to transfer the file in the correct remote directory. 
+<p class="level1">A little example that deletes a given file before an operation: 
+<p class="level1"><pre 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. 
+<p class="level1">The custom FTP command will be issued to the server in the same order they are added to the list, and if a command gets an error code returned back from the server, no more commands will be issued and libcurl will bail out with an error code (CURLE_QUOTE_ERROR). Note that if you use <span Class="emphasis">CURLOPT_QUOTE(3)</span> to send commands before a transfer, no transfer will actually take place when a quote command has failed. 
+<p class="level1">If you set the <span Class="emphasis">CURLOPT_HEADER(3)</span> to 1, you will tell libcurl to get information about the target file and output "headers" about it. The headers will be in "HTTP-style", looking like they do in HTTP. 
+<p class="level1">The option to enable headers or to run custom FTP commands may be useful to combine with <span Class="emphasis">CURLOPT_NOBODY(3)</span>. If this option is set, no actual file content transfer will be performed. 
+<p class="level1">
+<p class="level0"><a name="FTP"></a><span class="nroffip">FTP Custom CUSTOMREQUEST</span> 
+<p class="level1">If you do want to list the contents of a FTP directory using your own defined FTP command, <span Class="emphasis">CURLOPT_CUSTOMREQUEST(3)</span> will do just that. "NLST" is the default one for listing directories but you're free to pass in your idea of a good alternative. 
+<p class="level1"><a name="Cookies"></a><h2 class="nroffsh">Cookies Without Chocolate Chips</h2>
+<p class="level0">In the HTTP sense, a cookie is a name with an associated value. A server sends the name and value to the client, and expects it to get sent back on every subsequent request to the server that matches the particular conditions set. The conditions include that the domain name and path match and that the cookie hasn't become too old. 
+<p class="level0">In real-world cases, servers send new cookies to replace existing ones to update them. Server use cookies to "track" users and to keep "sessions". 
+<p class="level0">Cookies are sent from server to clients with the header Set-Cookie: and they're sent from clients to servers with the Cookie: header. 
+<p class="level0">To just send whatever cookie you want to a server, you can use <span Class="emphasis">CURLOPT_COOKIE(3)</span> to set a cookie string like this: 
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_COOKIE, "name1=var1; name2=var2;"); 
+<p class="level0">In many cases, that is not enough. You might want to dynamically save whatever cookies the remote server passes to you, and make sure those cookies are then used accordingly on later requests. 
+<p class="level0">One way to do this, is to save all headers you receive in a plain file and when you make a request, you tell libcurl to read the previous headers to figure out which cookies to use. Set the header file to read cookies from with <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 <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>
+<p class="level0">
+<p class="level0">FTP transfers use a second TCP/IP connection for the data transfer. This is usually a fact you can forget and ignore but at times this fact will come back to haunt you. libcurl offers several different ways to customize how the second connection is being made. 
+<p class="level0">libcurl can either connect to the server a second time or tell the server to connect back to it. The first option is the default and it is also what works best for all the people behind firewalls, NATs or IP-masquerading setups. libcurl then tells the server to open up a new port and wait for a second connection. This is by default attempted with EPSV first, and if that doesn't work it tries PASV instead. (EPSV is an extension to the original FTP spec and does not exist nor work on all FTP servers.) 
+<p class="level0">You can prevent libcurl from first trying the EPSV command by setting <span Class="emphasis">CURLOPT_FTP_USE_EPSV(3)</span> to zero. 
+<p class="level0">In some cases, you will prefer to have the server connect back to you for the second connection. This might be when the server is perhaps behind a firewall or something and only allows connections on a single port. libcurl then informs the remote server which IP address and port number to connect to. This is made with the <span Class="emphasis">CURLOPT_FTPPORT(3)</span> option. If you set it to "-", libcurl will use your system's "default IP address". If you want to use a particular IP, you can set the full IP address, a host name to resolve to an IP address or even a local network interface name that libcurl will get the IP address from. 
+<p class="level0">When doing the "PORT" approach, libcurl will attempt to use the EPRT and the LPRT before trying PORT, as they work with more protocols. You can disable this behavior by setting <span Class="emphasis">CURLOPT_FTP_USE_EPRT(3)</span> to zero. 
+<p class="level0"><a name="Headers"></a><h2 class="nroffsh">Headers Equal Fun</h2>
+<p class="level0">
+<p class="level0">Some protocols provide "headers", meta-data separated from the normal data. These headers are by default not included in the normal data stream, but you can make them appear in the data stream by setting <span Class="emphasis">CURLOPT_HEADER(3)</span> to 1. 
+<p class="level0">What might be even more useful, is libcurl's ability to separate the headers from the data and thus make the callbacks differ. You can for example set a different pointer to pass to the ordinary write callback by setting <span Class="emphasis">CURLOPT_HEADERDATA(3)</span>. 
+<p class="level0">Or, you can set an entirely separate function to receive the headers, by using <span Class="emphasis">CURLOPT_HEADERFUNCTION(3)</span>. 
+<p class="level0">The headers are passed to the callback function one by one, and you can depend on that fact. It makes it easier for you to add custom header parsers etc. 
+<p class="level0">"Headers" for FTP transfers equal all the FTP server responses. They aren't actually true headers, but in this case we pretend they are! ;-) 
+<p class="level0"><a name="Post"></a><h2 class="nroffsh">Post Transfer Information</h2>
+<p class="level0">
+<p class="level0">&nbsp;[ curl_easy_getinfo ] 
+<p class="level0"><a name="Security"></a><h2 class="nroffsh">Security Considerations</h2>
+<p class="level0">
+<p class="level0">The libcurl project takes security seriously.  The library is written with caution and precautions are taken to mitigate many kinds of risks encountered while operating with potentially malicious servers on the Internet.  It is a powerful library, however, which allows application writers to make trade offs between ease of writing and exposure to potential risky operations.  If used the right way, you can use libcurl to transfer data pretty safely. 
+<p class="level0">Many applications are used in closed networks where users and servers can be trusted, but many others are used on arbitrary servers and are fed input from potentially untrusted users.  Following is a discussion about some risks in the ways in which applications commonly use libcurl and potential mitigations of those risks. It is by no means comprehensive, but shows classes of attacks that robust applications should consider. The Common Weakness Enumeration project at <a href="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. 
+<p class="level1">To avoid this problem, never feed sensitive things to programs using command line options. Write them to a protected file and use the -K option to avoid this. 
+<p class="level1">
+<p class="level0"><a name="netrc"></a><span class="nroffip">.netrc</span> 
+<p class="level1">.netrc is a pretty handy file/feature that allows you to login quickly and automatically to frequently visited sites. The file contains passwords in clear text and is a real security risk. In some cases, your .netrc is also stored in a home directory that is NFS mounted or used on another network based file system, so the clear text password will fly through your network every time anyone reads that file! 
+<p class="level1">To avoid this problem, don't use .netrc files and never store passwords in plain text anywhere. 
+<p class="level1">
+<p class="level0"><a name="Clear"></a><span class="nroffip">Clear Text Passwords</span> 
+<p class="level1">Many of the protocols libcurl supports send name and password unencrypted as clear text (HTTP Basic authentication, FTP, TELNET etc). It is very easy for anyone on your network or a network nearby yours to just fire up a network analyzer tool and eavesdrop on your passwords. Don't let the fact that HTTP Basic uses base64 encoded passwords fool you. They may not look readable at a first glance, but they very easily "deciphered" by anyone within seconds. 
+<p class="level1">To avoid this problem, use 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. 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. 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?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> 
+<p class="level1">A user who can control the DNS server of a domain being passed in within a URL can change the address of the host to a local, private address which a server-side libcurl-using application could then use. e.g. the innocuous URL <a href="http://fuzzybunnies.example.com/">http://fuzzybunnies.example.com/</a> could actually resolve to the IP address of a server behind a firewall, such as 127.0.0.1 or 10.1.2.3.  Apps can mitigate against this by setting a <span Class="emphasis">CURLOPT_OPENSOCKETFUNCTION(3)</span> and checking the address before a connection. 
+<p class="level1">All the malicious scenarios regarding redirected URLs apply just as well to non-redirected URLs, if the user is allowed to specify an arbitrary URL that could point to a private resource. For example, a web app providing a translation service might happily translate file://localhost/etc/passwd and display the result.  Apps can mitigate against this with the <span Class="emphasis">CURLOPT_PROTOCOLS(3)</span> option as well as by similar mitigation techniques for redirections. 
+<p class="level1">A malicious FTP server could in response to the PASV command return an IP address and port number for a server local to the app running libcurl but behind a firewall.  Apps can mitigate against this by using the <span Class="emphasis">CURLOPT_FTP_SKIP_PASV_IP(3)</span> option or <span Class="emphasis">CURLOPT_FTPPORT(3)</span>. 
+<p class="level1">
+<p class="level0"><a name="IPv6"></a><span class="nroffip">IPv6 Addresses</span> 
+<p class="level1">libcurl will normally handle IPv6 addresses transparently and just as easily as IPv4 addresses. That means that a sanitizing function that filters out addressses like 127.0.0.1 isn't sufficient--the equivalent IPv6 addresses ::1, ::, 0:00::0:1, ::127.0.0.1 and ::ffff:7f00:1 supplied somehow by an attacker would all bypass a naive filter and could allow access to undesired local resources.  IPv6 also has special address blocks like link-local and site-local that generally shouldn't be accessed by a server-side libcurl-using application.  A poorly-configured firewall installed in a data center, organization or server may also be configured to limit IPv4 connections but leave IPv6 connections wide open.  In some cases, the CURL_IPRESOLVE_V4 option can be used to limit resolved addresses to IPv4 only and bypass these issues. 
+<p class="level1">
+<p class="level0"><a name="Uploads"></a><span class="nroffip">Uploads</span> 
+<p class="level1">When uploading, a redirect can cause a local (or remote) file to be overwritten.  Apps must not allow any unsanitized URL to be passed in for uploads.  Also, <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span> should not be used on uploads. Instead, the app should handle redirects itself, sanitizing each URL first. 
+<p class="level1">
+<p class="level0"><a name="Authentication"></a><span class="nroffip">Authentication</span> 
+<p class="level1">Use of <span Class="emphasis">CURLOPT_UNRESTRICTED_AUTH(3)</span> could cause authentication information to be sent to an unknown second server.  Apps can mitigate against this by disabling <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span> and handling redirects itself, sanitizing where necessary. 
+<p class="level1">Use of the CURLAUTH_ANY option to <span Class="emphasis">CURLOPT_HTTPAUTH(3)</span> could result in user name and password being sent in clear text to an HTTP server.  Instead, use CURLAUTH_ANYSAFE which ensures that the password is encrypted over the network, or else fail the request. 
+<p class="level1">Use of the CURLUSESSL_TRY option to <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?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. 
+<p class="level1">
+<p class="level0"><a name="Denial"></a><span class="nroffip">Denial of Service</span> 
+<p class="level1">A malicious server could cause libcurl to effectively hang by sending a trickle of data through, or even no data at all but just keeping the TCP connection open.  This could result in a denial-of-service attack. The <span Class="emphasis">CURLOPT_TIMEOUT(3)</span> and/or <span Class="emphasis">CURLOPT_LOW_SPEED_LIMIT(3)</span> options can be used to mitigate against this. 
+<p class="level1">A malicious server could cause libcurl to effectively hang by starting to send data, then severing the connection without cleanly closing the TCP connection. The app could install a <span Class="emphasis">CURLOPT_SOCKOPTFUNCTION(3)</span> callback function and set the TCP SO_KEEPALIVE option to mitigate against this.  Setting one of the timeout options would also work against this attack. 
+<p class="level1">A malicious server could cause libcurl to download an infinite amount of data, potentially causing all of memory or disk to be filled. Setting the <span Class="emphasis">CURLOPT_MAXFILESIZE_LARGE(3)</span> option is not sufficient to guard against this.  Instead, the app should monitor the amount of data received within the write or progress callback and abort once the limit is reached. 
+<p class="level1">A malicious HTTP server could cause an infinite redirection loop, causing a denial-of-service. This can be mitigated by using the <span Class="emphasis">CURLOPT_MAXREDIRS(3)</span> option. 
+<p class="level1">
+<p class="level0"><a name="Arbitrary"></a><span class="nroffip">Arbitrary Headers</span> 
+<p class="level1">User-supplied data must be sanitized when used in options like <span Class="emphasis">CURLOPT_USERAGENT(3)</span>, <span Class="emphasis">CURLOPT_HTTPHEADER(3)</span>, <span Class="emphasis">CURLOPT_POSTFIELDS(3)</span> and others that are used to generate structured data. Characters like embedded carriage returns or ampersands could allow the user to create additional headers or fields that could cause malicious transactions. 
+<p class="level1">
+<p class="level0"><a name="Server-supplied"></a><span class="nroffip">Server-supplied Names</span> 
+<p class="level1">A server can supply data which the application may, in some cases, use as a file name. The curl command-line tool does this with --remote-header-name, using the Content-disposition: header to generate a file name.  An application could also use CURLINFO_EFFECTIVE_URL to generate a file name from a server-supplied redirect URL. Special care must be taken to sanitize such names to avoid the possibility of a malicious server supplying one like "/etc/passwd", "\autoexec.bat", "prn:" or even ".bashrc". 
+<p class="level1">
+<p class="level0"><a name="Server"></a><span class="nroffip">Server Certificates</span> 
+<p class="level1">A secure application should never use the <span Class="emphasis">CURLOPT_SSL_VERIFYPEER(3)</span> option to disable certificate validation. There are numerous attacks that are enabled by apps that fail to properly validate server TLS/SSL certificates, thus enabling a malicious server to spoof a legitimate one. HTTPS without validated certificates is potentially as insecure as a plain HTTP connection. 
+<p class="level1">
+<p class="level0"><a name="Showing"></a><span class="nroffip">Showing What You Do</span> 
+<p class="level1">On a related issue, be aware that even in situations like when you have problems with libcurl and ask someone for help, everything you reveal in order to get best possible help might also impose certain security related risks. Host names, user names, paths, operating system specifics, etc. (not to mention passwords of course) may in fact be used by intruders to gain additional information of a potential target. 
+<p class="level1">Be sure to limit access to application logs if they could hold private or security-related data.  Besides the obvious candidates like user names and passwords, things like URLs, cookies or even file names could also hold sensitive data. 
+<p class="level1">To avoid this problem, you must of course use your common sense. Often, you can just edit out the sensitive data or just search/replace your true information with faked data. 
+<p class="level1"><a name="The"></a><h2 class="nroffsh">The multi Interface</h2>
+<p class="level0">The easy interface as described in detail in this document is a synchronous interface that transfers one file at a time and doesn't return until it is done. 
+<p class="level0">The multi interface, on the other hand, allows your program to transfer multiple files in both directions at the same time, without forcing you to use multiple threads.  The name might make it seem that the multi interface is for multi-threaded programs, but the truth is almost the reverse.  The multi interface allows a single-threaded application to perform the same kinds of multiple, simultaneous transfers that multi-threaded programs can perform.  It allows many of the benefits of multi-threaded transfers without the complexity of managing and synchronizing many threads. 
+<p class="level0">To complicate matters somewhat more, there are even two versions of the multi interface. The event based one, also called multi_socket and the "normal one" designed for using with select(). See the libcurl-multi.3 man page for details on the multi_socket event based API, this description here is for the select() oriented one. 
+<p class="level0">To use this interface, you are better off if you first understand the basics of how to use the easy interface. The multi interface is simply a way to make multiple transfers at the same time by adding up multiple easy handles into a "multi stack". 
+<p class="level0">You create the easy handles you want, one for each concurrent transfer, and you set all the options just like you learned above, and then you create a multi handle with <a Class="emphasis" href="./curl_multi_init.html">curl_multi_init</a> and add all those easy handles to that multi handle with <a Class="emphasis" href="./curl_multi_add_handle.html">curl_multi_add_handle</a>. 
+<p class="level0">When you've added the handles you have for the moment (you can still add new ones at any time), you start the transfers by calling <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a>. 
+<p class="level0"><a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> is asynchronous. It will only perform what can be done now and then return back control to your program. It is designed to never block. You need to keep calling the function until all transfers are completed. 
+<p class="level0">The best usage of this interface is when you do a select() on all possible file descriptors or sockets to know when to call libcurl again. This also makes it easy for you to wait and respond to actions on your own application's sockets/handles. You figure out what to select() for by using <a Class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset</a>, that fills in a set of fd_set variables for you with the particular file descriptors libcurl uses for the moment. 
+<p class="level0">When you then call select(), it'll return when one of the file handles signal action and you then call <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> to allow libcurl to do what it wants to do. Take note that libcurl does also feature some time-out code so we advise you to never use very long timeouts on select() before you call <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> again. <a Class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout</a> is provided to help you get a suitable timeout period. 
+<p class="level0">Another precaution you should use: always call <a Class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset</a> immediately before the select() call since the current set of file descriptors may change in any curl function invoke. 
+<p class="level0">If you want to stop the transfer of one of the easy handles in the stack, you can use <a Class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle</a> to remove individual easy handles. Remember that easy handles should be <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>ed. 
+<p class="level0">When a transfer within the multi stack has finished, the counter of running transfers (as filled in by <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a>) will decrease. When the number reaches zero, all transfers are done. 
+<p class="level0"><a Class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read</a> can be used to get information about completed transfers. It then returns the CURLcode for each easy transfer, to allow you to figure out success on each individual transfer. 
+<p class="level0"><a name="SSL"></a><h2 class="nroffsh">SSL, Certificates and Other Tricks</h2>
+<p class="level0">
+<p class="level0">&nbsp;[ seeding, passwords, keys, certificates, ENGINE, ca certs ] 
+<p class="level0"><a name="Sharing"></a><h2 class="nroffsh">Sharing Data Between Easy Handles</h2>
+<p class="level0">You can share some data between easy handles when the easy interface is used, and some data is share automatically when you use the multi interface. 
+<p class="level0">When you add easy handles to a multi handle, these easy handles will automatically share a lot of the data that otherwise would be kept on a per-easy handle basis when the easy interface is used. 
+<p class="level0">The DNS cache is shared between handles within a multi handle, making subsequent name resolving faster, and the connection pool that is kept to better allow persistent connections and connection re-use is also shared. If you're using the easy interface, you can still share these between specific easy handles by using the share interface, see <a Class="emphasis" href="./libcurl-share.html">libcurl-share</a>. 
+<p class="level0">Some things are never shared automatically, not within multi handles, like for example cookies so the only way to share that is with the share interface. <a name="Footnotes"></a><h2 class="nroffsh">Footnotes</h2>
+<p class="level0">
+<p class="level0">
+<p class="level0"><a name="1"></a><span class="nroffip">[1]</span> 
+<p class="level1">libcurl 7.10.3 and later have the ability to switch over to chunked Transfer-Encoding in cases where HTTP uploads are done with data of an unknown size. 
+<p class="level0"><a name="2"></a><span class="nroffip">[2]</span> 
+<p class="level1">This happens on Windows machines when libcurl is built and used as a DLL. However, you can still do this on Windows if you link with a static library. 
+<p class="level0"><a name="3"></a><span class="nroffip">[3]</span> 
+<p class="level1">The curl-config tool is generated at build-time (on Unix-like systems) and should be installed with the 'make install' or similar instruction that installs the library, header files, man pages etc. 
+<p class="level0"><a name="4"></a><span class="nroffip">[4]</span> 
+<p class="level1">This behavior was different in versions before 7.17.0, where strings had to remain valid past the end of the <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</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">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-tutorial.pdf b/docs/libcurl/libcurl-tutorial.pdf
new file mode 100644 (file)
index 0000000..55d3a78
Binary files /dev/null and b/docs/libcurl/libcurl-tutorial.pdf differ
diff --git a/docs/libcurl/libcurl.html b/docs/libcurl/libcurl.html
new file mode 100644 (file)
index 0000000..d459a01
--- /dev/null
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>libcurl 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 - client-side URL transfers <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This is a short overview on how to use libcurl in your C programs. There are specific man pages for each function mentioned in here. There are also the <a Class="emphasis" href="./libcurl-easy.html">libcurl-easy</a> man page, the <a Class="emphasis" href="./libcurl-multi.html">libcurl-multi</a> man page, the <a Class="emphasis" href="./libcurl-share.html">libcurl-share</a> man page and the <a Class="emphasis" href="./libcurl-tutorial.html">libcurl-tutorial</a> man page for in-depth understanding on how to program with libcurl. 
+<p class="level0">There are many bindings available that bring libcurl access to your favourite language. Look elsewhere for documentation on those. 
+<p class="level0">libcurl has a global constant environment that you must set up and maintain while using libcurl.  This essentially means you call <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> at the start of your program and <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a> at the end.  See <a class="bold" href="#GLOBAL">GLOBAL CONSTANTS</a> below for details. 
+<p class="level0">To transfer files, you create an "easy handle" using <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> for a single individual transfer (in either direction). You then set your desired set of options in that handle with <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a>. Options you set with <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> stick. They will be used on every repeated use of this handle until you either change the option, or you reset them all with <a Class="emphasis" href="./curl_easy_reset.html">curl_easy_reset</a>. 
+<p class="level0">To actually transfer data you have the option of using the "easy" interface, or the "multi" interface. 
+<p class="level0">The easy interface is a synchronous interface with which you call <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> and let it perform the transfer. When it is completed, the function returns and you can continue. More details are found in the <a Class="emphasis" href="./libcurl-easy.html">libcurl-easy</a> man page. 
+<p class="level0">The multi interface on the other hand is an asynchronous interface, that you call and that performs only a little piece of the transfer on each invoke. It is perfect if you want to do things while the transfer is in progress, or similar. The multi interface allows you to select() on libcurl action, and even to easily download multiple files simultaneously using a single thread. See further details in the <a Class="emphasis" href="./libcurl-multi.html">libcurl-multi</a> man page. 
+<p class="level0">You can have multiple easy handles share certain data, even if they are used in different threads. This magic is setup using the share interface, as described in the <a Class="emphasis" href="./libcurl-share.html">libcurl-share</a> man page. 
+<p class="level0">There is also a series of other helpful functions to use, including these: 
+<p class="level1">
+<p class="level0"><a name="curlversioninfo"></a><span class="nroffip">curl_version_info()</span> 
+<p class="level1">gets detailed libcurl (and other used libraries) version info 
+<p class="level0"><a name="curlgetdate"></a><span class="nroffip">curl_getdate()</span> 
+<p class="level1">converts a date string to time_t 
+<p class="level0"><a name="curleasygetinfo"></a><span class="nroffip">curl_easy_getinfo()</span> 
+<p class="level1">get information about a performed transfer 
+<p class="level0"><a name="curlformadd"></a><span class="nroffip">curl_formadd()</span> 
+<p class="level1">helps building an HTTP form POST 
+<p class="level0"><a name="curlformfree"></a><span class="nroffip">curl_formfree()</span> 
+<p class="level1">free a list built with <a Class="emphasis" href="./curl_formadd.html">curl_formadd</a> 
+<p class="level0"><a name="curlslistappend"></a><span class="nroffip">curl_slist_append()</span> 
+<p class="level1">builds a linked list 
+<p class="level0"><a name="curlslistfreeall"></a><span class="nroffip">curl_slist_free_all()</span> 
+<p class="level1">frees a whole curl_slist 
+<p class="level0">
+<p class="level0"><a name="LINKING"></a><h2 class="nroffsh">LINKING WITH LIBCURL</h2>
+<p class="level0">On unix-like machines, there's a tool named curl-config that gets installed with the rest of the curl stuff when 'make install' is performed. 
+<p class="level0">curl-config is added to make it easier for applications to link with libcurl and developers to learn about libcurl and how to use it. 
+<p class="level0">Run 'curl-config --libs' to get the (additional) linker options you need to link with the particular version of libcurl you've installed. See the <span Class="emphasis">curl-config(1)</span> man page for further details. 
+<p class="level0">Unix-like operating system that ship libcurl as part of their distributions often don't provide the curl-config tool, but simply install the library and headers in the common path for this purpose. 
+<p class="level0">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">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>. 
+<p class="level0">To allow libcurl to take full advantage of persistent connections, you should do as many of your file transfers as possible using the same handle. 
+<p class="level0">If you use the easy interface, and you call <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, all the possibly open connections held by libcurl will be closed and forgotten. 
+<p class="level0">When you've created a multi handle and are using the multi interface, the connection pool is instead kept in the multi handle so closing and creating new easy handles to do transfers will not affect them. Instead all added easy handles can take advantage of the single shared pool. <a name="GLOBAL"></a><h2 class="nroffsh">GLOBAL CONSTANTS</h2>
+<p class="level0">There are a variety of constants that libcurl uses, mainly through its internal use of other libraries, which are too complicated for the library loader to set up.  Therefore, a program must call a library function after the program is loaded and running to finish setting up the library code.  For example, when libcurl is built for SSL capability via the GNU TLS library, there is an elaborate tree inside that library that describes the SSL protocol. 
+<p class="level0"><a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> is the function that you must call.  This may allocate resources (e.g. the memory for the GNU TLS tree mentioned above), so the companion function <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a> releases them. 
+<p class="level0">The basic rule for constructing a program that uses libcurl is this: Call <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a>, with a <span Class="emphasis">CURL_GLOBAL_ALL</span> argument, immediately after the program starts, while it is still only one thread and before it uses libcurl at all.  Call <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a> immediately before the program exits, when the program is again only one thread and after its last use of libcurl. 
+<p class="level0">You can call both of these multiple times, as long as all calls meet these requirements and the number of calls to each is the same. 
+<p class="level0">It isn't actually required that the functions be called at the beginning and end of the program -- that's just usually the easiest way to do it. It <span Class="emphasis">is</span> required that the functions be called when no other thread in the program is running. 
+<p class="level0">These global constant functions are <span Class="emphasis">not thread safe</span>, so you must not call them when any other thread in the program is running.  It isn't good enough that no other thread is using libcurl at the time, because these functions internally call similar functions of other libraries, and those functions are similarly thread-unsafe.  You can't generally know what these libraries are, or whether other threads are using them. 
+<p class="level0">The global constant situation merits special consideration when the code you are writing to use libcurl is not the main program, but rather a modular piece of a program, e.g. another library.  As a module, your code doesn't know about other parts of the program -- it doesn't know whether they use libcurl or not.  And its code doesn't necessarily run at the start and end of the whole program. 
+<p class="level0">A module like this must have global constant functions of its own, just like <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. (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. 
+<p class="level0">This failsafe feature exists mainly for backward compatibility because there was a time when the global functions didn't exist.  Because it is sufficient only in the simplest of programs, it is not recommended for any program to rely on it. <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl.pdf b/docs/libcurl/libcurl.pdf
new file mode 100644 (file)
index 0000000..9b8f25f
Binary files /dev/null and b/docs/libcurl/libcurl.pdf differ
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..a2b7a61
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.pdf differ
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..de03407
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_CERTINFO.html b/docs/libcurl/opts/CURLINFO_CERTINFO.html
new file mode 100644 (file)
index 0000000..822eda2
--- /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, schannel or GSKit support. schannel support added in 7.50.0 
+<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..3e5a011
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CERTINFO.pdf differ
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..89e2a4c
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.pdf differ
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..1b750dc
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.pdf differ
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..f51205b
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.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..d554024
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.pdf differ
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..2e13ce2
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.pdf differ
index b9f75f4..961fd98 100644 (file)
@@ -30,7 +30,7 @@ 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
+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.
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..e4f0322
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_COOKIELIST.pdf differ
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..577d84c
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_FILETIME.html b/docs/libcurl/opts/CURLINFO_FILETIME.html
new file mode 100644 (file)
index 0000000..bbc3a25
--- /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), 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.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..ebf1386
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_FILETIME.pdf differ
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..bab68b5
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.pdf differ
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..184b2e8
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.pdf differ
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..2796830
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.pdf differ
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..e6ef24d
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.pdf differ
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..43db002
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_LASTSOCKET.pdf differ
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..6f69293
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_LOCAL_IP.pdf differ
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..b283677
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.pdf differ
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..ffd44c7
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.pdf differ
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..b6149c0
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.pdf differ
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..0d55a7a
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_OS_ERRNO.pdf differ
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..8c3fcbe
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.pdf differ
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..5b13986
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.pdf differ
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..2dbed11
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.pdf differ
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..1356aaf
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRIVATE.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_PROTOCOL.3 b/docs/libcurl/opts/CURLINFO_PROTOCOL.3
deleted file mode 100644 (file)
index b821118..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROTOCOL 3 "23 November 2016" "libcurl 7.52.0" "curl_easy_getinfo options"
-.SH NAME
-CURLINFO_PROTOCOL \- get the protocol used in the connection
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p);
-.SH DESCRIPTION
-Pass a pointer to a long to receive the version used in the last http connection.
-The returned value will be one of the CURLPROTO_* values.
-.SH PROTOCOLS
-All
-.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 protocol;
-    curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
-  }
-  curl_easy_cleanup(curl);
-}
-.fi
-.SH AVAILABILITY
-Added in 7.52.0
-.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_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..f5cd593
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3 b/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3
deleted file mode 100644 (file)
index 3a80f97..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSL_VERIFYRESULT 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_getinfo options"
-.SH NAME
-CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, long *result);
-.SH DESCRIPTION
-Pass a pointer to a long to receive the result of the certificate verification
-that was requested (using the \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option.
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.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_SSL_VERIFYRESULT "(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..935e843
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.pdf differ
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..69dbedc
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.pdf differ
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..4f07d42
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.pdf differ
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..7f0013a
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.pdf differ
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..8b14028
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.pdf differ
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..89c5ae2
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.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..c6f16ab
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.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..b0e7b48
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.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..24f6f2a
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_SCHEME.3 b/docs/libcurl/opts/CURLINFO_SCHEME.3
deleted file mode 100644 (file)
index 78c3d68..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_SCHEME 3 "23 November 2016" "libcurl 7.52.0" "curl_easy_getinfo options"
-.SH NAME
-CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, long *p);
-.SH DESCRIPTION
-Pass a pointer to a char pointer to receive the pointer to a zero-terminated
-string holding the URL scheme used for the most recent connection done with this
-\fBcurl\fP handle.
-
-The \fBid\fP pointer will be NULL or pointing to private read-only memory you
-MUST NOT free or modify.
-.SH PROTOCOLS
-All
-.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) {
-    char * scheme;
-    curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
-  }
-  curl_easy_cleanup(curl);
-}
-.fi
-.SH AVAILABILITY
-Added in 7.52.0
-.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_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..8d34cb1
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.pdf differ
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..560fe29
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.pdf differ
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..46b561b
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.pdf differ
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..921a19e
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.pdf differ
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..58ff8da
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.pdf differ
index 1651a9b..a87ccfe 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2016, 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
 .\"
 .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 certificate verification
+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 server SSL certificate
+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
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..2344dac
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.pdf differ
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..269ccd8
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.pdf differ
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..8f2f630
--- /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, and supported OpenSSL, GnuTLS, NSS and gskit only up until 7.48.0 was released. <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..276b9d5
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_TLS_SESSION.pdf differ
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..05e7bd7
--- /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_context * 
+<p class="level0"><a name="PolarSSL"></a><span class="nroffip">PolarSSL</span> 
+<p class="level1">ssl_context * 
+<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, an SSL session has not yet been established or the connection is no longer associated with the easy handle (eg curl_easy_perform has returned). <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..72c516a
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.pdf differ
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..c8cb4cb
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html
new file mode 100644 (file)
index 0000000..5c2aaf7
--- /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>CURLMOPT_CHUNK_LENGTH_PENALTY_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">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE - chunk length threshold for pipelining <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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>
+<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_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>
diff --git a/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf
new file mode 100644 (file)
index 0000000..4648ccd
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html
new file mode 100644 (file)
index 0000000..642a6db
--- /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>CURLMOPT_CONTENT_LENGTH_PENALTY_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">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE - size threshold for pipelining penalty <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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>
+<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_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>
diff --git a/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf
new file mode 100644 (file)
index 0000000..c1b30bc
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.html b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.html
new file mode 100644 (file)
index 0000000..fdca60d
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLMOPT_MAXCONNECTS 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_MAXCONNECTS - set size of connection cache <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">When the cache is full, curl closes the oldest one in the cache to prevent the number of open connections from increasing. 
+<p class="level0">This option is for the multi handle's use only, when using the easy interface you should instead use the <a Class="emphasis" href="./CURLOPT_MAXCONNECTS.html">CURLOPT_MAXCONNECTS</a> option. 
+<p class="level0">See <a Class="emphasis" href="./CURLMOPT_MAX_TOTAL_CONNECTIONS.html">CURLMOPT_MAX_TOTAL_CONNECTIONS</a> for limiting the number of active connections. 
+<p class="level0"><a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">See DESCRIPTION <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.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>, <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>
diff --git a/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf
new file mode 100644 (file)
index 0000000..1f37bbf
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.html b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.html
new file mode 100644 (file)
index 0000000..1c3e7f2
--- /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>CURLMOPT_MAX_HOST_CONNECTIONS 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_MAX_HOST_CONNECTIONS - set max number of connections to a single host <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 (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><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_MAX_HOST_CONNECTIONS.pdf b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf
new file mode 100644 (file)
index 0000000..3cf0bfd
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf differ
index 1204a0f..cac3c71 100644 (file)
@@ -29,8 +29,8 @@ CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline
 CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, long max);
 .SH DESCRIPTION
 Pass a long. The set \fBmax\fP number will be used as the maximum amount of
-outstanding requests in an HTTP/1.1 pipelined connection. This option is only
-used for HTTP/1.1 pipelining, not for HTTP/2 multiplexing.
+outstanding requests in a pipelined connection. Only used if pipelining is
+enabled.
 
 When this limit is reached, libcurl will use another connection to the same
 host (see \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP), or queue the request until
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.html b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.html
new file mode 100644 (file)
index 0000000..b7fa9fb
--- /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>CURLMOPT_MAX_PIPELINE_LENGTH 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_MAX_PIPELINE_LENGTH - maximum number of requests in a pipeline <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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>
+<p class="level0">5 <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_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/CURLMOPT_MAX_PIPELINE_LENGTH.pdf b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf
new file mode 100644 (file)
index 0000000..e96cd70
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.html b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.html
new file mode 100644 (file)
index 0000000..6dcf0d4
--- /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>CURLMOPT_MAX_TOTAL_CONNECTIONS 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_MAX_TOTAL_CONNECTIONS - max simultaneously open connections <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 or use multiplexing 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>
+<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.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><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_MAX_TOTAL_CONNECTIONS.pdf b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf
new file mode 100644 (file)
index 0000000..ec4f842
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING.html b/docs/libcurl/opts/CURLMOPT_PIPELINING.html
new file mode 100644 (file)
index 0000000..8a1da62
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLMOPT_PIPELINING 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_PIPELINING - enable HTTP pipelining and multiplexing <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass in the <span Class="bold">bitmask</span> parameter to instruct libcurl to enable HTTP pipelining and/or HTTP/2 multiplexing for this multi handle. 
+<p class="level0">When enabled, libcurl will attempt to use those protocol features when doing parallel requests to the same hosts. 
+<p class="level0">For pipelining, 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">For multiplexing, this means that follow-up requests can re-use an existing connection and send the new request multiplexed over that at the same time as other transfers are already using that single connection. 
+<p class="level0">There are 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">Before 7.43.0, this option was set to 1 and 0 to enable and disable HTTP/1.1 pipelining. 
+<p class="level0">Starting in 7.43.0, <span Class="bold">bitmask</span>'s second bit also has a meaning, and you can ask for pipelining and multiplexing independently of each other by toggling the correct 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 (both pipeline and multiplexing are 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. 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>, <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>
diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING.pdf b/docs/libcurl/opts/CURLMOPT_PIPELINING.pdf
new file mode 100644 (file)
index 0000000..48cf891
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_PIPELINING.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.html b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.html
new file mode 100644 (file)
index 0000000..3c39cc3
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLMOPT_PIPELINING_SERVER_BL 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_PIPELINING_SERVER_BL - pipelining server blacklist <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 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><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_PIPELINING_SERVER_BL.pdf b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf
new file mode 100644 (file)
index 0000000..66ffc85
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.html b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.html
new file mode 100644 (file)
index 0000000..f74d541
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLMOPT_PIPELINING_SITE_BL 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_PIPELINING_SITE_BL - pipelining host blacklist <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 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><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_PIPELINING_SITE_BL.pdf b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf
new file mode 100644 (file)
index 0000000..91d1832
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf differ
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..16b1d07
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_PUSHDATA.pdf differ
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..4cdac46
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETDATA.html b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.html
new file mode 100644 (file)
index 0000000..40e2336
--- /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_SOCKETDATA 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_SOCKETDATA - custom pointer passed to the socket 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_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>
+<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">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>, <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>
diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf
new file mode 100644 (file)
index 0000000..404f345
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.html b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.html
new file mode 100644 (file)
index 0000000..5ec5e38
--- /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>CURLMOPT_SOCKETFUNCTION 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_SOCKETFUNCTION - callback informed about what to wait for <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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,        /* describes the socket */
+&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. 
+<p class="level0">The <span Class="bold">what</span> parameter informs the callback on the status of the given socket. It can hold one of these values: 
+<p class="level0"><a name="CURLPOLLIN"></a><span class="nroffip">CURL_POLL_IN</span> 
+<p class="level1">Wait for incoming data. For the socket to become readable. 
+<p class="level0"><a name="CURLPOLLOUT"></a><span class="nroffip">CURL_POLL_OUT</span> 
+<p class="level1">Wait for outgoing data. For the socket to become writable. 
+<p class="level0"><a name="CURLPOLLINOUT"></a><span class="nroffip">CURL_POLL_INOUT</span> 
+<p class="level1">Wait for incoming and outgoing data. For the socket to become readable or writable. 
+<p class="level0"><a name="CURLPOLLREMOVE"></a><span class="nroffip">CURL_POLL_REMOVE</span> 
+<p class="level1">The specified socket/file descriptor is no longer used by libcurl. <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">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.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>, <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>
diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf
new file mode 100644 (file)
index 0000000..57ff647
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_TIMERDATA.html b/docs/libcurl/opts/CURLMOPT_TIMERDATA.html
new file mode 100644 (file)
index 0000000..4cb6e27
--- /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_TIMERDATA 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_TIMERDATA - custom pointer to pass to timer 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_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>
+<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">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><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_TIMERDATA.pdf b/docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf
new file mode 100644 (file)
index 0000000..91aaeeb
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.html b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.html
new file mode 100644 (file)
index 0000000..abcc407
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLMOPT_TIMERFUNCTION 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_TIMERFUNCTION - set callback to receive timeout values <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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">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"><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><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_TIMERFUNCTION.pdf b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf
new file mode 100644 (file)
index 0000000..30d5b1f
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3 b/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3
deleted file mode 100644 (file)
index 8b61854..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  Project                     ___| | | |  _ \| |
-.\" *                             / __| | | | |_) | |
-.\" *                            | (__| |_| |  _ <| |___
-.\" *                             \___|\___/|_| \_\_____|
-.\" *
-.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
-.\" *
-.\" * This software 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_ABSTRACT_UNIX_SOCKET 3 "08 Jan 2017" "libcurl 7.53.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_ABSTRACT_UNIX_SOCKET \- set an abstract Unix domain socket
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, char *path);
-.SH DESCRIPTION
-Enables the use of an abstract Unix domain socket instead of establishing a TCP
-connection to a host. The parameter should be a char * to a zero terminated string
-holding the path of the socket. The path will be set to \fIpath\fP prefixed by a
-NULL byte (this is the convention for abstract sockets, however it should be stressed
-that the path passed to this function should not contain a leading NULL).
-
-On non-supporting platforms, the abstract address will be interpreted as an empty
-string and fail gracefully, generating a run-time error.
-
-This option shares the same semantics as
-.BR CURLOPT_UNIX_SOCKET_PATH "(3)
-in which documentation more details can be found. Internally, these two options share
-the same storage and therefore only one of them can be set per handle.
-
-.SH DEFAULT
-Default is NULL.
-.SH EXAMPLE
-.nf
-    curl_easy_setopt(curl_handle, CURLOPT_ABSTRACT_UNIX_SOCKET, "/tmp/foo.sock");
-    curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost/");
-.fi
-
-.SH AVAILABILITY
-Since 7.53.0.
-.SH RETURN VALUE
-Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
-.SH "SEE ALSO"
-.BR CURLOPT_UNIX_SOCKET_PATH "(3), " unix "(7), "
diff --git a/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.html b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.html
new file mode 100644 (file)
index 0000000..e303e9c
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_ACCEPTTIMEOUT_MS 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_ACCEPTTIMEOUT_MS - timeout waiting for FTP server to connect back <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_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">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"><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><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_ACCEPTTIMEOUT_MS.pdf b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf
new file mode 100644 (file)
index 0000000..4662730
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf differ
index 3a5fc16..c312631 100644 (file)
@@ -58,9 +58,6 @@ The Content-Length: servers send for a compressed response is supposed to
 indicate the length of the compressed content so when auto decoding is enabled
 it may not match the sum of bytes reported by the write callbacks (although,
 sending the length of the non-compressed content is a common server mistake).
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.html b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.html
new file mode 100644 (file)
index 0000000..f1faded
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_ACCEPT_ENCODING 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_ACCEPT_ENCODING - enables automatic decompression of HTTP downloads <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_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>, meaning non-compressed, <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. 
+<p class="level0">If a zero-length string is set like "", then an Accept-Encoding: header containing all built-in supported encodings is sent. 
+<p class="level0">Set this option to NULL to explicitly disable it, which makes libcurl not send an Accept-Encoding: header and not decompress contents automatically. 
+<p class="level0">You can also opt to just include the Accept-Encoding: header in your request with <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> but then there will be no automatic decompressing when receiving data. 
+<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. 
+<p class="level0">Servers might respond with Content-Encoding even without getting a Accept-Encoding: in the request. Servers might respond with a different Content-Encoding than what was asked for in the request. 
+<p class="level0">The Content-Length: servers send for a compressed response is supposed to indicate the length of the compressed content so when auto decoding is enabled it may not match the sum of bytes reported by the write callbacks (although, sending the length of the non-compressed content is a common server mistake). <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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf
new file mode 100644 (file)
index 0000000..6f00dbe
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.html b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.html
new file mode 100644 (file)
index 0000000..b84aede
--- /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_ADDRESS_SCOPE 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_ADDRESS_SCOPE - set scope for local IPv6 addresses <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_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>
+<p class="level0">All, when using IPv6 <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"><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>
diff --git a/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf
new file mode 100644 (file)
index 0000000..c0ffbb3
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_APPEND.html b/docs/libcurl/opts/CURLOPT_APPEND.html
new file mode 100644 (file)
index 0000000..274e6d0
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_APPEND 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_APPEND - enable appending to the remote file <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_APPEND, long append); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</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"><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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_APPEND.pdf b/docs/libcurl/opts/CURLOPT_APPEND.pdf
new file mode 100644 (file)
index 0000000..9a4727e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_APPEND.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_AUTOREFERER.html b/docs/libcurl/opts/CURLOPT_AUTOREFERER.html
new file mode 100644 (file)
index 0000000..6ce41a3
--- /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_AUTOREFERER 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_AUTOREFERER - automatically update the referer header <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_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>
+<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_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>
diff --git a/docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf b/docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf
new file mode 100644 (file)
index 0000000..5afb9cb
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf differ
index dc5bf74..113118e 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2017, 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
@@ -30,22 +30,20 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size);
 .SH DESCRIPTION
 Pass a long specifying your preferred \fIsize\fP (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. Secondly, for some protocols,
-there's a benefit of having a larger buffer for performance.
+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.
 
-This is just treated as a request, not an order. You cannot be guaranteed to
-actually get the given size.
-
-This buffer size is by default \fICURL_MAX_WRITE_SIZE\fP (16kB). The maximum
-buffer size allowed to set is \fICURL_MAX_READ_SIZE\fP (512kB).
+This size is by default set as big as possible (\fICURL_MAX_WRITE_SIZE\fP), so
+it only makes sense to use this option if you want it smaller.
 .SH DEFAULT
-CURL_MAX_WRITE_SIZE (16kB)
+CURL_MAX_WRITE_SIZE
 .SH PROTOCOLS
 All
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-Added in 7.10.  Growing the buffer was added in 7.53.0.
+Added in 7.10
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
diff --git a/docs/libcurl/opts/CURLOPT_BUFFERSIZE.html b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.html
new file mode 100644 (file)
index 0000000..793aa67
--- /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>CURLOPT_BUFFERSIZE 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_BUFFERSIZE - set preferred receive buffer size <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_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>
+<p class="level0">CURL_MAX_WRITE_SIZE <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 <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_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>
diff --git a/docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf
new file mode 100644 (file)
index 0000000..6e6adb8
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf differ
index 127b904..7db50a8 100644 (file)
@@ -46,9 +46,6 @@ option is supported for backward compatibility with other SSL engines, but it
 should not be set. If the option is not set, then curl will use the
 certificates in the system and user Keychain to verify the peer, which is the
 preferred method of verifying the peer's certificate chain.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 Built-in system specific
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_CAINFO.html b/docs/libcurl/opts/CURLOPT_CAINFO.html
new file mode 100644 (file)
index 0000000..74a7d83
--- /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_CAINFO 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_CAINFO - path to Certificate Authority (CA) bundle <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_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&#35;11 module (libnsspem.so) needs to be available for this option to work properly. 
+<p class="level0">(iOS and macOS only) If curl is built against Secure Transport, then this option is supported for backward compatibility with other SSL engines, but it should not be set. If the option is not set, then curl will use the certificates in the system and user Keychain to verify the peer, which is the preferred method of verifying the peer's certificate chain. <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, 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">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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_CAINFO.pdf b/docs/libcurl/opts/CURLOPT_CAINFO.pdf
new file mode 100644 (file)
index 0000000..ae8de11
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CAINFO.pdf differ
index b19994b..0369f89 100644 (file)
@@ -36,9 +36,6 @@ This makes sense only when used in combination with the
 
 The \fICURLOPT_CAPATH(3)\fP function apparently does not work in Windows due
 to some limitation in openssl.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
@@ -49,13 +46,8 @@ TODO
 This option is supported by the OpenSSL, GnuTLS and PolarSSL backends. The NSS
 backend provides the option only for backward compatibility.
 .SH RETURN VALUE
-CURLE_OK if supported; or an error such as:
-
-CURLE_NOT_BUILT_IN - Not supported by the SSL backend
-
-CURLE_UNKNOWN_OPTION
-
-CURLE_OUT_OF_MEMORY
+Returns CURLE_OK if TLS enabled, and CURLE_UNKNOWN_OPTION if not, or
+CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 .SH "SEE ALSO"
 .BR CURLOPT_CAINFO "(3), "
 .BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_CAPATH.html b/docs/libcurl/opts/CURLOPT_CAPATH.html
new file mode 100644 (file)
index 0000000..8083872
--- /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>CURLOPT_CAPATH 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_CAPATH - specify directory holding CA certificates <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_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, 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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_CAPATH.pdf b/docs/libcurl/opts/CURLOPT_CAPATH.pdf
new file mode 100644 (file)
index 0000000..2af7bd7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CAPATH.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CERTINFO.html b/docs/libcurl/opts/CURLOPT_CERTINFO.html
new file mode 100644 (file)
index 0000000..ecf4d51
--- /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_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">CURLOPT_CERTINFO - request SSL certificate information <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_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 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">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><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_CERTINFO.pdf b/docs/libcurl/opts/CURLOPT_CERTINFO.pdf
new file mode 100644 (file)
index 0000000..77f448c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CERTINFO.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.html b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.html
new file mode 100644 (file)
index 0000000..2fd9526
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CHUNK_BGN_FUNCTION 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_CHUNK_BGN_FUNCTION - callback before a transfer with FTP wildcardmatch <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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). 
+<p class="level0">The <span Class="emphasis">transfer_info</span> pointer will point to a struct curl_fileinfo with details about the file that is about to get transferred. 
+<p class="level0">This callback makes sense only when using the <a Class="emphasis" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a> option for now. 
+<p class="level0">The target of transfer_info parameter is a "feature depended" structure. For the FTP wildcard download, the target is curl_fileinfo structure (see <span Class="emphasis">curl/curl.h</span>).  The parameter <span Class="emphasis">ptr</span> is a pointer given by <a Class="emphasis" href="./CURLOPT_CHUNK_DATA.html">CURLOPT_CHUNK_DATA</a>. The parameter remains contains number of chunks remaining per the transfer. If the feature is not available, the parameter has zero value. 
+<p class="level0">Return <span Class="emphasis">CURL_CHUNK_BGN_FUNC_OK</span> if everything is fine, <span Class="emphasis">CURL_CHUNK_BGN_FUNC_SKIP</span> if you want to skip the concrete chunk or <span Class="emphasis">CURL_CHUNK_BGN_FUNC_FAIL</span> to tell libcurl to stop if some error occurred. <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">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><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_CHUNK_BGN_FUNCTION.pdf b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf
new file mode 100644 (file)
index 0000000..2c9ed44
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_DATA.html b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.html
new file mode 100644 (file)
index 0000000..f86939c
--- /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_CHUNK_DATA 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_CHUNK_DATA - custom pointer to the FTP chunk callbacks <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_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 <a Class="emphasis" href="./CURLOPT_CHUNK_BGN_FUNCTION.html">CURLOPT_CHUNK_BGN_FUNCTION</a> and <a Class="emphasis" href="./CURLOPT_CHUNK_END_FUNCTION.html">CURLOPT_CHUNK_END_FUNCTION</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">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><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_CHUNK_DATA.pdf b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf
new file mode 100644 (file)
index 0000000..d07f0af
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.html b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.html
new file mode 100644 (file)
index 0000000..e2e0093
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CHUNK_END_FUNCTION 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_CHUNK_END_FUNCTION - callback after a transfer with FTP wildcardmatch <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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). 
+<p class="level0">Return <span Class="emphasis">CURL_CHUNK_END_FUNC_OK</span> if everything is fine or <span Class="bold">CURL_CHUNK_END_FUNC_FAIL</span> to tell the lib to stop if some error occurred. <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_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>
diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf
new file mode 100644 (file)
index 0000000..e002a30
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.html b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.html
new file mode 100644 (file)
index 0000000..e8c934f
--- /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_CLOSESOCKETDATA 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_CLOSESOCKETDATA - pointer passed to the socket close callback <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_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>
+<p class="level0">All except 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">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><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_CLOSESOCKETDATA.pdf b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf
new file mode 100644 (file)
index 0000000..786a725
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.html b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.html
new file mode 100644 (file)
index 0000000..c77fd18
--- /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_CLOSESOCKETFUNCTION 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_CLOSESOCKETFUNCTION - callback to socket close replacement function <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">This callback function gets called by libcurl instead of the <span Class="emphasis">close(3)</span> or <span Class="emphasis">closesocket(3)</span> call when sockets are closed (not for any other file descriptors). This is pretty much the reverse to the <a Class="emphasis" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a> option. Return 0 to signal success and 1 if there was an error. 
+<p class="level0">The <span Class="emphasis">clientp</span> pointer is set with <a Class="emphasis" href="./CURLOPT_CLOSESOCKETDATA.html">CURLOPT_CLOSESOCKETDATA</a>. <span Class="emphasis">item</span> is the socket libcurl wants to be closed. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">By default libcurl uses the standard socket close function. <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.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><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_CLOSESOCKETFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf
new file mode 100644 (file)
index 0000000..c9adb10
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.html b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.html
new file mode 100644 (file)
index 0000000..f8e1308
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CONNECTTIMEOUT 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_CONNECTTIMEOUT - timeout for the connect phase <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_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"><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><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_CONNECTTIMEOUT.pdf b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf
new file mode 100644 (file)
index 0000000..9dc7422
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.html b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.html
new file mode 100644 (file)
index 0000000..8f265f5
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CONNECTTIMEOUT_MS 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_CONNECTTIMEOUT_MS - timeout for the connect phase <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_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"><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><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_CONNECTTIMEOUT_MS.pdf b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf
new file mode 100644 (file)
index 0000000..d29f95b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf differ
index 973c2ae..61289e8 100644 (file)
@@ -49,4 +49,3 @@ Added in 7.15.2
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
 .BR CURLOPT_VERBOSE "(3), " CURLOPT_HTTPPROXYTUNNEL  "(3), "
-.BR curl_easy_recv "(3), " curl_easy_send "(3) "
diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.html b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.html
new file mode 100644 (file)
index 0000000..e7e74fc
--- /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>CURLOPT_CONNECT_ONLY 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_CONNECT_ONLY - stop when connected to target 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_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 <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><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_CONNECT_ONLY.pdf b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf
new file mode 100644 (file)
index 0000000..314c632
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_TO.html b/docs/libcurl/opts/CURLOPT_CONNECT_TO.html
new file mode 100644 (file)
index 0000000..eb599d1
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CONNECT_TO 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_CONNECT_TO - Connect to a specific host and port instead of the URL's host and port <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_CONNECT_TO,
+&nbsp;                         struct curl_slist *connect_to);
+</pre>
+
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a linked list of strings with "connect to" information to use for establishing network connections 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 string should be written using the format HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT where HOST is the host of the request, PORT is the port of the request, CONNECT-TO-HOST is the host name to connect to, and CONNECT-TO-PORT is the port to connect to. 
+<p class="level0">The first string that matches the request's host and port is used. 
+<p class="level0">Dotted numerical IP addresses are supported for HOST and CONNECT-TO-HOST. A numerical IPv6 address must be written within [brackets]. 
+<p class="level0">Any of the four values may be empty. When the HOST or PORT is empty, the host or port will always match (the request's host or port is ignored). When CONNECT-TO-HOST or CONNECT-TO-PORT is empty, the "connect to" feature will be disabled for the host or port, and the request's host or port will be used to establish the network connection. 
+<p class="level0">This option is suitable to direct the request at a specific server, e.g. at a specific cluster node in a cluster of servers. 
+<p class="level0">The "connect to" host and port are only used to establish the network connection. They do NOT affect the host and port that are used for TLS/SSL (e.g. SNI, certificate verification) or for the application protocols. 
+<p class="level0">In contrast to <a Class="emphasis" href="./CURLOPT_RESOLVE.html">CURLOPT_RESOLVE</a>, the option <a Class="emphasis" href="./CURLOPT_CONNECT_TO.html">CURLOPT_CONNECT_TO</a> does not pre-populate the DNS cache and therefore it does not affect future transfers of other easy handles that have been added to the same multi handle. 
+<p class="level0">The "connect to" host and port are ignored if they are equal to the host and the port in the request URL, because connecting to the host and the port in the request URL is the default behavior. 
+<p class="level0">If an HTTP proxy is used for a request having a special "connect to" host or port, and the "connect to" host or port differs from the requests's host and port, the HTTP proxy is automatically switched to tunnel mode for this specific request. This is necessary because it is not possible to connect to a specific host or port in normal (non-tunnel) mode. 
+<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"><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 class="level0">
+CURL *curl;
+struct curl_slist *connect_to = NULL;
+connect_to = curl_slist_append(NULL, "example.com::server1.example.com:");
+&nbsp;
+curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+&nbsp;
+&nbsp; /* always cleanup */
+&nbsp; curl_easy_cleanup(curl);
+}
+&nbsp;
+curl_slist_free_all(connect_to);
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.49.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_URL.html">CURLOPT_URL</a>, <a Class="manpage" href="./CURLOPT_RESOLVE.html">CURLOPT_RESOLVE</a>, <a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</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>
diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_TO.pdf b/docs/libcurl/opts/CURLOPT_CONNECT_TO.pdf
new file mode 100644 (file)
index 0000000..4c240e3
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CONNECT_TO.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.html b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.html
new file mode 100644 (file)
index 0000000..823ee76
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CONV_FROM_NETWORK_FUNCTION 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_CONV_FROM_NETWORK_FUNCTION - convert data from network to host encoding <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">The data to be converted is in a buffer pointed to by the <span Class="emphasis">ptr</span> parameter. The amount of data to convert is indicated by the <span Class="emphasis">length</span> parameter.  The converted data overlays the input data in the buffer pointed to by the ptr parameter. <span Class="emphasis">CURLE_OK</span> must be returned upon successful conversion.  A CURLcode return value defined by curl.h, such as <span Class="emphasis">CURLE_CONV_FAILED</span>, should be returned if an error was encountered. 
+<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;&#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;&#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><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_CONV_FROM_NETWORK_FUNCTION.pdf b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf
new file mode 100644 (file)
index 0000000..7e4fe66
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.html b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.html
new file mode 100644 (file)
index 0000000..d3b1a46
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CONV_FROM_UTF8_FUNCTION 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_CONV_FROM_UTF8_FUNCTION - convert data from UTF8 to host encoding <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">The data to be converted is in a buffer pointed to by the <span Class="emphasis">ptr</span> parameter. The amount of data to convert is indicated by the <span Class="emphasis">length</span> parameter.  The converted data overlays the input data in the buffer pointed to by the ptr parameter. <span Class="emphasis">CURLE_OK</span> must be returned upon successful conversion.  A CURLcode return value defined by curl.h, such as <span Class="emphasis">CURLE_CONV_FAILED</span>, should be returned if an error was encountered. 
+<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;&#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;&#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><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_CONV_FROM_UTF8_FUNCTION.pdf b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf
new file mode 100644 (file)
index 0000000..239776d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.html b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.html
new file mode 100644 (file)
index 0000000..fc7edaa
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_CONV_TO_NETWORK_FUNCTION 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_CONV_TO_NETWORK_FUNCTION - convert data to network from host encoding <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">The data to be converted is in a buffer pointed to by the <span Class="emphasis">ptr</span> parameter. The amount of data to convert is indicated by the <span Class="emphasis">length</span> parameter.  The converted data overlays the input data in the buffer pointed to by the ptr parameter. <span Class="emphasis">CURLE_OK</span> must be returned upon successful conversion.  A CURLcode return value defined by curl.h, such as <span Class="emphasis">CURLE_CONV_FAILED</span>, should be returned if an error was encountered. 
+<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;&#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;&#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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf
new file mode 100644 (file)
index 0000000..c13bed8
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf differ
index d0da3f1..32c2fc2 100644 (file)
@@ -55,9 +55,6 @@ previous ones.
 This option will not enable the cookie engine. Use \fICURLOPT_COOKIEFILE(3)\fP
 or \fICURLOPT_COOKIEJAR(3)\fP to enable parsing and sending cookies
 automatically.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL, no cookies
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_COOKIE.html b/docs/libcurl/opts/CURLOPT_COOKIE.html
new file mode 100644 (file)
index 0000000..b1f55d1
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_COOKIE 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_COOKIE - set contents of HTTP Cookie header <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_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"><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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_COOKIE.pdf b/docs/libcurl/opts/CURLOPT_COOKIE.pdf
new file mode 100644 (file)
index 0000000..9b639b7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_COOKIE.pdf differ
index ba2d1e3..00816b1 100644 (file)
@@ -53,9 +53,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_COOKIEFILE.html b/docs/libcurl/opts/CURLOPT_COOKIEFILE.html
new file mode 100644 (file)
index 0000000..65a4c49
--- /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>CURLOPT_COOKIEFILE 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_COOKIEFILE - file name to read cookies from <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_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 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><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_COOKIEFILE.pdf b/docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf
new file mode 100644 (file)
index 0000000..c421d5d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf differ
index 3c1f541..79a3723 100644 (file)
@@ -46,9 +46,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_COOKIEJAR.html b/docs/libcurl/opts/CURLOPT_COOKIEJAR.html
new file mode 100644 (file)
index 0000000..568d92e
--- /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_COOKIEJAR 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_COOKIEJAR - file name to store cookies 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_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. 
+<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><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_COOKIEJAR.pdf b/docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf
new file mode 100644 (file)
index 0000000..40f30bd
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_COOKIELIST.html b/docs/libcurl/opts/CURLOPT_COOKIELIST.html
new file mode 100644 (file)
index 0000000..7f03f1e
--- /dev/null
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_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">CURLOPT_COOKIELIST - add to or manipulate cookies held in memory <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_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 
+<p class="level1">
+<p class="level0"><a name="SESS"></a><span class="nroffip">SESS</span> 
+<p class="level1">erases all session cookies held in memory 
+<p class="level1">
+<p class="level0"><a name="FLUSH"></a><span class="nroffip">FLUSH</span> 
+<p class="level1">writes all known cookies to the file specified by <a Class="emphasis" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a> 
+<p class="level1">
+<p class="level0"><a name="RELOAD"></a><span class="nroffip">RELOAD</span> 
+<p class="level1">loads all cookies from the files specified by <a Class="emphasis" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a> 
+<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"><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;
+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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_COOKIELIST.pdf b/docs/libcurl/opts/CURLOPT_COOKIELIST.pdf
new file mode 100644 (file)
index 0000000..957c792
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_COOKIELIST.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_COOKIESESSION.html b/docs/libcurl/opts/CURLOPT_COOKIESESSION.html
new file mode 100644 (file)
index 0000000..5949d6d
--- /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>CURLOPT_COOKIESESSION 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_COOKIESESSION - start a new cookie session <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_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>
+<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">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><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_COOKIESESSION.pdf b/docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf
new file mode 100644 (file)
index 0000000..b4976ba
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.html b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.html
new file mode 100644 (file)
index 0000000..bf62903
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_COPYPOSTFIELDS 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_COPYPOSTFIELDS - have libcurl copy data to POST <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_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 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><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_COPYPOSTFIELDS.pdf b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf
new file mode 100644 (file)
index 0000000..ef198f9
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_CRLF.html b/docs/libcurl/opts/CURLOPT_CRLF.html
new file mode 100644 (file)
index 0000000..aea1aa0
--- /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>CURLOPT_CRLF 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_CRLF - enable/disable CRLF conversion <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_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>
+<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">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><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_CRLF.pdf b/docs/libcurl/opts/CURLOPT_CRLF.pdf
new file mode 100644 (file)
index 0000000..0413847
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CRLF.pdf differ
index 4ab7a64..6bb035e 100644 (file)
@@ -45,9 +45,6 @@ A specific error code (\fICURLE_SSL_CRL_BADFILE\fP) is defined with the
 option. It is returned when the SSL exchange fails because the CRL file cannot
 be loaded.  A failure in certificate verification due to a revocation
 information found in the CRL does not trigger this specific error.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_CRLFILE.html b/docs/libcurl/opts/CURLOPT_CRLFILE.html
new file mode 100644 (file)
index 0000000..770a00a
--- /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_CRLFILE 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_CRLFILE - specify a Certificate Revocation List file <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_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. 
+<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. 
+<p class="level0">A specific error code (<span Class="emphasis">CURLE_SSL_CRL_BADFILE</span>) is defined with the option. It is returned when the SSL exchange fails because the CRL file cannot be loaded.  A failure in certificate verification due to a revocation information found in the CRL does not trigger this specific error. <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 <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, 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><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_CRLFILE.pdf b/docs/libcurl/opts/CURLOPT_CRLFILE.pdf
new file mode 100644 (file)
index 0000000..4a0165a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CRLFILE.pdf differ
index 2bd3517..553d408 100644 (file)
@@ -80,9 +80,6 @@ Normally a multiline response is returned which can be used, in conjunction
 with \fICURLOPT_MAIL_RCPT(3)\fP, to specify an EXPN request. If the
 \fICURLOPT_NOBODY(3)\fP option is specified then the request can be used to
 issue NOOP and RSET commands.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.html b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.html
new file mode 100644 (file)
index 0000000..95d7062
--- /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_CUSTOMREQUEST 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_CUSTOMREQUEST - custom string for 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_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="emphasis" 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. 
+<p class="level0">Restore to the internal default by setting this to NULL. 
+<p class="level0">This option can be used to specify the request: 
+<p class="level0"><a name="HTTP"></a><span class="nroffip">HTTP</span> 
+<p class="level1">Instead of GET or HEAD when performing HTTP based requests. This is particularly useful, for example, for performing a HTTP DELETE request. 
+<p class="level1">For example: 
+<p class="level1">When you tell libcurl to do a HEAD request, but then specify a GET though a custom request libcurl will still act as if it sent a HEAD. To switch to a proper HEAD use <a Class="emphasis" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a>, to switch to a proper POST use <a Class="emphasis" href="./CURLOPT_POST.html">CURLOPT_POST</a> or <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> and to switch to a proper GET use <a Class="emphasis" href="./CURLOPT_HTTPGET.html">CURLOPT_HTTPGET</a>. 
+<p class="level1">Many people have wrongly used this option to replace the entire request with their own, including multiple headers and POST contents. While that might work in many cases, it will cause libcurl to send invalid requests and it could possibly confuse the remote server badly. Use <a Class="emphasis" href="./CURLOPT_POST.html">CURLOPT_POST</a> and <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> to set POST data. Use <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> to replace or extend the set of headers sent by libcurl. Use <a Class="emphasis" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a> to change HTTP version. 
+<p class="level1">
+<p class="level0"><a name="FTP"></a><span class="nroffip">FTP</span> 
+<p class="level1">Instead of LIST and NLST when performing FTP directory listings. 
+<p class="level0"><a name="IMAP"></a><span class="nroffip">IMAP</span> 
+<p class="level1">Instead of LIST when issuing IMAP based requests. 
+<p class="level0"><a name="POP3"></a><span class="nroffip">POP3</span> 
+<p class="level1">Instead of LIST and RETR when issuing POP3 based requests. 
+<p class="level1">For example: 
+<p class="level1">When you tell libcurl to use a custom request it will behave like a LIST or RETR command was sent where it expects data to be returned by the server. As such <a Class="emphasis" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a> should be used when specifying commands such as DELE and NOOP for example. 
+<p class="level0"><a name="SMTP"></a><span class="nroffip">SMTP</span> 
+<p class="level1">Instead of a HELP or VRFY when issuing SMTP based requests. 
+<p class="level1">For example: 
+<p class="level1">Normally a multiline response is returned which can be used, in conjunction with <a Class="emphasis" href="./CURLOPT_MAIL_RCPT.html">CURLOPT_MAIL_RCPT</a>, to specify an EXPN request. If the <a Class="emphasis" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a> option is specified then the request can be used to issue NOOP and RSET commands. <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, IMAP, POP3 and SMTP <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">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><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_CUSTOMREQUEST.pdf b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf
new file mode 100644 (file)
index 0000000..fd7b43b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_DEBUGDATA.html b/docs/libcurl/opts/CURLOPT_DEBUGDATA.html
new file mode 100644 (file)
index 0000000..f0c6a29
--- /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_DEBUGDATA 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_DEBUGDATA - custom pointer for debug callback <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_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="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><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_DEBUGDATA.pdf b/docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf
new file mode 100644 (file)
index 0000000..02b5cb5
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf differ
index 535c530..bf07499 100644 (file)
@@ -119,7 +119,6 @@ int my_trace(CURL *handle, curl_infotype type,
 {
   const char *text;
   (void)handle; /* prevent compiler warning */
-  (void)userp;
 
   switch (type) {
   case CURLINFO_TEXT:
diff --git a/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.html b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.html
new file mode 100644 (file)
index 0000000..5d7617f
--- /dev/null
@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_DEBUGFUNCTION 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_DEBUGFUNCTION - debug callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">The <span Class="emphasis">userptr</span> argument is the pointer set with <a Class="emphasis" href="./CURLOPT_DEBUGDATA.html">CURLOPT_DEBUGDATA</a>. 
+<p class="level0">Available curl_infotype values: 
+<p class="level0"><a name="CURLINFOTEXT"></a><span class="nroffip">CURLINFO_TEXT</span> 
+<p class="level1">The data is informational text. 
+<p class="level0"><a name="CURLINFOHEADERIN"></a><span class="nroffip">CURLINFO_HEADER_IN</span> 
+<p class="level1">The data is header (or header-like) data received from the peer. 
+<p class="level0"><a name="CURLINFOHEADEROUT"></a><span class="nroffip">CURLINFO_HEADER_OUT</span> 
+<p class="level1">The data is header (or header-like) data sent to the peer. 
+<p class="level0"><a name="CURLINFODATAIN"></a><span class="nroffip">CURLINFO_DATA_IN</span> 
+<p class="level1">The data is protocol data received from the peer. 
+<p class="level0"><a name="CURLINFODATAOUT"></a><span class="nroffip">CURLINFO_DATA_OUT</span> 
+<p class="level1">The data is protocol data sent to the peer. 
+<p class="level0"><a name="CURLINFOSSLDATAOUT"></a><span class="nroffip">CURLINFO_SSL_DATA_OUT</span> 
+<p class="level1">The data is SSL/TLS (binary) data sent to the peer. 
+<p class="level0"><a name="CURLINFOSSLDATAIN"></a><span class="nroffip">CURLINFO_SSL_DATA_IN</span> 
+<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 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><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_DEBUGFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf
new file mode 100644 (file)
index 0000000..689280e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf differ
index a39c6b3..f7f890c 100644 (file)
@@ -49,9 +49,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL (make a guess based on the host)
 .SH PROTOCOLS
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..6bd7436
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_DIRLISTONLY.html b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.html
new file mode 100644 (file)
index 0000000..dfb8c9c
--- /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_DIRLISTONLY 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_DIRLISTONLY - ask for names only in a directory listing <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_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. 
+<p class="level0">Note: For FTP this causes a NLST command to be sent to the FTP server.  Beware that some FTP servers list only files in their response to NLST; they might not include subdirectories and symbolic links. 
+<p class="level0">Setting this option to 1 also implies a directory listing even if the URL doesn't end with a slash, which otherwise is necessary. 
+<p class="level0">Do NOT use this option if you also use <a Class="emphasis" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a> as it will effectively break that feature then. <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, SFTP and 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">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><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_DIRLISTONLY.pdf b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf
new file mode 100644 (file)
index 0000000..9af3cab
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.html b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.html
new file mode 100644 (file)
index 0000000..adbe8f7
--- /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_DNS_CACHE_TIMEOUT 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_DNS_CACHE_TIMEOUT - set life-time for DNS cache entries <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_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. 
+<p class="level0">Note that DNS entries have a "TTL" property but libcurl doesn't use that. This DNS cache timeout is entirely speculative that a name will resolve to the same address for a certain small amount of time into the future. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">60 <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">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><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_DNS_CACHE_TIMEOUT.pdf b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf
new file mode 100644 (file)
index 0000000..12f61b6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf differ
index 8df700a..f764398 100644 (file)
@@ -32,9 +32,6 @@ 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).
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.html b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.html
new file mode 100644 (file)
index 0000000..65f1b19
--- /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_DNS_INTERFACE 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_DNS_INTERFACE - set interface to speak DNS over <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_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>
+<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.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><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_DNS_INTERFACE.pdf b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf
new file mode 100644 (file)
index 0000000..495d2d6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf differ
index 1c4470e..ef9f1e2 100644 (file)
@@ -32,9 +32,6 @@ Set the local IPv4 \fIaddress\fP 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).
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.html b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.html
new file mode 100644 (file)
index 0000000..64868b5
--- /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>CURLOPT_DNS_LOCAL_IP4 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_DNS_LOCAL_IP4 - IPv4 address to bind DNS resolves 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_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>
+<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">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><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_DNS_LOCAL_IP4.pdf b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf
new file mode 100644 (file)
index 0000000..b4a8cfd
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf differ
index 3c78347..7d82bdf 100644 (file)
@@ -32,9 +32,6 @@ Set the local IPv6 \fIaddress\fP 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).
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.html b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.html
new file mode 100644 (file)
index 0000000..796226e
--- /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>CURLOPT_DNS_LOCAL_IP6 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_DNS_LOCAL_IP6 - IPv6 address to bind DNS resolves 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_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>
+<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">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><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_DNS_LOCAL_IP6.pdf b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf
new file mode 100644 (file)
index 0000000..80a1646
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf differ
index 522eabc..14c9f9b 100644 (file)
@@ -36,9 +36,6 @@ host[:port][,host[:port]]...
 For example:
 
 192.168.1.100,192.168.1.101,3.4.5.6
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL - use system default
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_DNS_SERVERS.html b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.html
new file mode 100644 (file)
index 0000000..8d9fa9f
--- /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_DNS_SERVERS 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_DNS_SERVERS - set preferred DNS servers <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_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]]... 
+<p class="level0">For example: 
+<p class="level0">192.168.1.100,192.168.1.101,3.4.5.6 <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL - use system default <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">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><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_DNS_SERVERS.pdf b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf
new file mode 100644 (file)
index 0000000..bb47bf7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.html b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.html
new file mode 100644 (file)
index 0000000..d2190b4
--- /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>CURLOPT_DNS_USE_GLOBAL_CACHE 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_DNS_USE_GLOBAL_CACHE - enable/disable global DNS cache <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_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>
+<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">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><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_DNS_USE_GLOBAL_CACHE.pdf b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf
new file mode 100644 (file)
index 0000000..1f52eb7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf differ
index 117ed3b..ad91c3f 100644 (file)
@@ -30,9 +30,6 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path);
 .SH DESCRIPTION
 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_EGDSOCKET.html b/docs/libcurl/opts/CURLOPT_EGDSOCKET.html
new file mode 100644 (file)
index 0000000..8e7012f
--- /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_EGDSOCKET 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_EGDSOCKET - set EGD socket path <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_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, 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><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_EGDSOCKET.pdf b/docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf
new file mode 100644 (file)
index 0000000..2a1f125
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_ERRORBUFFER.html b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.html
new file mode 100644 (file)
index 0000000..9133d29
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_ERRORBUFFER 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_ERRORBUFFER - set error buffer for error messages <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_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. 
+<p class="level0">Consider <a Class="emphasis" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a> and <a Class="emphasis" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a> to better debug and trace why errors happen. 
+<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 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">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>
diff --git a/docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf
new file mode 100644 (file)
index 0000000..772aa07
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.html b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.html
new file mode 100644 (file)
index 0000000..9010148
--- /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>CURLOPT_EXPECT_100_TIMEOUT_MS 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_EXPECT_100_TIMEOUT_MS - timeout for Expect: 100-continue response <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_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>
+<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.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><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_EXPECT_100_TIMEOUT_MS.pdf b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf
new file mode 100644 (file)
index 0000000..9bddf9f
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf differ
index 93d8ba6..79474ce 100644 (file)
@@ -53,4 +53,4 @@ Along with HTTP
 .SH RETURN VALUE
 Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
-.BR CURLOPT_HTTP200ALIASES "(3), " CURLOPT_KEEP_SENDING_ON_ERROR "(3), "
+.BR CURLOPT_HTTP200ALIASES "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_FAILONERROR.html b/docs/libcurl/opts/CURLOPT_FAILONERROR.html
new file mode 100644 (file)
index 0000000..d435af9
--- /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_FAILONERROR 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_FAILONERROR - request failure on HTTP response &gt;= 400 <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_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. 
+<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><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_FAILONERROR.pdf b/docs/libcurl/opts/CURLOPT_FAILONERROR.pdf
new file mode 100644 (file)
index 0000000..d3e6b3c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FAILONERROR.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FILETIME.html b/docs/libcurl/opts/CURLOPT_FILETIME.html
new file mode 100644 (file)
index 0000000..bb5180f
--- /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_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">CURLOPT_FILETIME - get the modification time of the remote resource <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_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 <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, for SFTP since 7.49.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"><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>
diff --git a/docs/libcurl/opts/CURLOPT_FILETIME.pdf b/docs/libcurl/opts/CURLOPT_FILETIME.pdf
new file mode 100644 (file)
index 0000000..5907196
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FILETIME.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.html b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.html
new file mode 100644 (file)
index 0000000..f391b54
--- /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>CURLOPT_FNMATCH_DATA 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_FNMATCH_DATA - custom pointer to fnmatch callback <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_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 <a Class="emphasis" href="./CURLOPT_FNMATCH_FUNCTION.html">CURLOPT_FNMATCH_FUNCTION</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">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_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>
diff --git a/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf
new file mode 100644 (file)
index 0000000..a185f22
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.html b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.html
new file mode 100644 (file)
index 0000000..4807d4f
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_FNMATCH_FUNCTION 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_FNMATCH_FUNCTION - wildcard matching function callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 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><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_FNMATCH_FUNCTION.pdf b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf
new file mode 100644 (file)
index 0000000..0922dd2
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.html b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.html
new file mode 100644 (file)
index 0000000..fa6b4cf
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_FOLLOWLOCATION 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_FOLLOWLOCATION - follow HTTP 3xx 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_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf
new file mode 100644 (file)
index 0000000..6bdb022
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FORBID_REUSE.html b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.html
new file mode 100644 (file)
index 0000000..f8283a4
--- /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>CURLOPT_FORBID_REUSE 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_FORBID_REUSE - make connection get closed at once after use <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_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>
+<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">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><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_FORBID_REUSE.pdf b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf
new file mode 100644 (file)
index 0000000..f971a1d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.html b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.html
new file mode 100644 (file)
index 0000000..e30d22c
--- /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_FRESH_CONNECT 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_FRESH_CONNECT - force a new connection to be 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_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. 
+<p class="level0">Set <span Class="emphasis">fresh</span> to 0 to have libcurl attempt re-using an existing connection (default behavior). <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">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><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_FRESH_CONNECT.pdf b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf
new file mode 100644 (file)
index 0000000..be2c680
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf differ
index 0f2a9f7..8e300bc 100644 (file)
@@ -57,9 +57,6 @@ Examples with specified ports:
 
 You disable PORT again and go back to using the passive version by setting
 this option to NULL.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_FTPPORT.html b/docs/libcurl/opts/CURLOPT_FTPPORT.html
new file mode 100644 (file)
index 0000000..5fcae31
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_FTPPORT 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_FTPPORT - make FTP transfer active <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_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 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>
+<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">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><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_FTPPORT.pdf b/docs/libcurl/opts/CURLOPT_FTPPORT.pdf
new file mode 100644 (file)
index 0000000..c74fb60
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTPPORT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.html b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.html
new file mode 100644 (file)
index 0000000..acf3620
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_FTPSSLAUTH 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_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">&#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: 
+<p class="level0"><a name="CURLFTPAUTHDEFAULT"></a><span class="nroffip">CURLFTPAUTH_DEFAULT</span> 
+<p class="level1">Allow libcurl to decide. 
+<p class="level0"><a name="CURLFTPAUTHSSL"></a><span class="nroffip">CURLFTPAUTH_SSL</span> 
+<p class="level1">Try "AUTH SSL" first, and only if that fails try "AUTH TLS". 
+<p class="level0"><a name="CURLFTPAUTHTLS"></a><span class="nroffip">CURLFTPAUTH_TLS</span> 
+<p class="level1">Try "AUTH TLS" first, and only if that fails try "AUTH SSL". <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURLFTPAUTH_DEFAULT <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.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><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_FTPSSLAUTH.pdf b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf
new file mode 100644 (file)
index 0000000..a3c3c1b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf differ
index 5422a6b..0d768d7 100644 (file)
@@ -31,9 +31,6 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ACCOUNT, char *account);
 Pass a pointer to a zero terminated string (or NULL to disable). When an FTP
 server asks for "account data" after user name and password has been provided,
 this data is sent off using the ACCT command.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.html b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.html
new file mode 100644 (file)
index 0000000..93c1644
--- /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_FTP_ACCOUNT 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_FTP_ACCOUNT - set account info for FTP <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_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>
+<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.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><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_FTP_ACCOUNT.pdf b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf
new file mode 100644 (file)
index 0000000..155da7c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf differ
index cd444b6..5758109 100644 (file)
@@ -35,9 +35,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.html b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.html
new file mode 100644 (file)
index 0000000..642b3a4
--- /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>CURLOPT_FTP_ALTERNATIVE_TO_USER 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_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 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>
+<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.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><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_FTP_ALTERNATIVE_TO_USER.pdf b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf
new file mode 100644 (file)
index 0000000..6446eef
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.html b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.html
new file mode 100644 (file)
index 0000000..0316c65
--- /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>CURLOPT_FTP_CREATE_MISSING_DIRS 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_FTP_CREATE_MISSING_DIRS - create missing dirs for FTP and SFTP <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">For SFTP requests, libcurl will attempt to create the remote directory if it can't obtain a handle to the target-location. The creation will fail if a file of the same name as the directory to create already exists or lack of permissions prevents creation. 
+<p class="level0">Setting <span Class="emphasis">create</span> to <span Class="emphasis">CURLFTP_CREATE_DIR_RETRY</span> (2), tells libcurl to retry the CWD command again if the subsequent MKD command fails. This is especially useful if you're doing many simultaneous connections against the same server and they all have this option enabled, as then CWD may first fail but then another connection does MKD before this connection and thus MKD fails but trying CWD works! <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURLFTP_CREATE_DIR_NONE (0) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">FTP 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.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><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_FTP_CREATE_MISSING_DIRS.pdf b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf
new file mode 100644 (file)
index 0000000..6026059
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.html b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.html
new file mode 100644 (file)
index 0000000..8d81e7a
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_FTP_FILEMETHOD 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_FTP_FILEMETHOD - select directory traversing method for FTP <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_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. 
+<p class="level0">The argument should be one of the following alternatives: 
+<p class="level0"><a name="CURLFTPMETHODMULTICWD"></a><span class="nroffip">CURLFTPMETHOD_MULTICWD</span> 
+<p class="level1">libcurl does a single CWD operation for each path part in the given URL. For deep hierarchies this means many commands. This is how <a href="http://www.ietf.org/rfc/rfc1738.txt">RFC 1738</a> says it should be done. This is the default but the slowest behavior. 
+<p class="level0"><a name="CURLFTPMETHODNOCWD"></a><span class="nroffip">CURLFTPMETHOD_NOCWD</span> 
+<p class="level1">libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a full path to the server for all these commands. This is the fastest behavior. 
+<p class="level0"><a name="CURLFTPMETHODSINGLECWD"></a><span class="nroffip">CURLFTPMETHOD_SINGLECWD</span> 
+<p class="level1">libcurl does one CWD with the full target directory and then operates on the file "normally" (like in the multicwd case). This is somewhat more standards compliant than 'nocwd' but without the full penalty of 'multicwd'. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURLFTPMETHOD_MULTICWD <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.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"><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>
diff --git a/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf
new file mode 100644 (file)
index 0000000..e29bc27
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.html b/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.html
new file mode 100644 (file)
index 0000000..4d5e798
--- /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_FTP_RESPONSE_TIMEOUT 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_FTP_RESPONSE_TIMEOUT - time allowed to wait for FTP response <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_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>
+<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.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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf b/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf
new file mode 100644 (file)
index 0000000..d9c733a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.html b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.html
new file mode 100644 (file)
index 0000000..b253c93
--- /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_FTP_SKIP_PASV_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">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">&#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. 
+<p class="level0">This option has no effect if PORT, EPRT or EPSV is used instead of PASV. <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">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.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><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_FTP_SKIP_PASV_IP.pdf b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf
new file mode 100644 (file)
index 0000000..831eaa3
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.html b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.html
new file mode 100644 (file)
index 0000000..4201326
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_FTP_SSL_CCC 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_FTP_SSL_CCC - switch off SSL again with FTP after auth <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_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> 
+<p class="level1">Don't attempt to use CCC. 
+<p class="level0"><a name="CURLFTPSSLCCCPASSIVE"></a><span class="nroffip">CURLFTPSSL_CCC_PASSIVE</span> 
+<p class="level1">Do not initiate the shutdown, but wait for the server to do it. Do not send a reply. 
+<p class="level0"><a name="CURLFTPSSLCCCACTIVE"></a><span class="nroffip">CURLFTPSSL_CCC_ACTIVE</span> 
+<p class="level1">Initiate the shutdown and wait for a reply. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURLFTPSSL_CCC_NONE <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.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><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_FTP_SSL_CCC.pdf b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf
new file mode 100644 (file)
index 0000000..db380d5
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.html b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.html
new file mode 100644 (file)
index 0000000..9b34e57
--- /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>CURLOPT_FTP_USE_EPRT 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_FTP_USE_EPRT - enable/disable use of EPRT with FTP <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_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>
+<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"><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><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_FTP_USE_EPRT.pdf b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf
new file mode 100644 (file)
index 0000000..6796a7e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.html b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.html
new file mode 100644 (file)
index 0000000..841e9ef
--- /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>CURLOPT_FTP_USE_EPSV 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_FTP_USE_EPSV - enable/disable use of EPSV <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_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>
+<p class="level0">1 <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">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><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_FTP_USE_EPSV.pdf b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf
new file mode 100644 (file)
index 0000000..75ce41b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.html b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.html
new file mode 100644 (file)
index 0000000..115212c
--- /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_FTP_USE_PRET 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_FTP_USE_PRET - enable the PRET command <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_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>
+<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.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><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_FTP_USE_PRET.pdf b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf
new file mode 100644 (file)
index 0000000..10bad14
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.html b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.html
new file mode 100644 (file)
index 0000000..b158fdf
--- /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_GSSAPI_DELEGATION 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_GSSAPI_DELEGATION - set allowed GSS-API delegation <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_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>
+<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.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><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_GSSAPI_DELEGATION.pdf b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf
new file mode 100644 (file)
index 0000000..0b9a5cd
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HEADER.html b/docs/libcurl/opts/CURLOPT_HEADER.html
new file mode 100644 (file)
index 0000000..a44d85a
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_HEADER 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_HEADER - pass headers to the data stream <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_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. 
+<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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_HEADER.pdf b/docs/libcurl/opts/CURLOPT_HEADER.pdf
new file mode 100644 (file)
index 0000000..b5e687f
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HEADER.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HEADERDATA.html b/docs/libcurl/opts/CURLOPT_HEADERDATA.html
new file mode 100644 (file)
index 0000000..c6e8bce
--- /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_HEADERDATA 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_HEADERDATA - pointer to pass to header callback <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_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. 
+<p class="level0">If neither of those options are set, <span Class="emphasis">pointer</span> must be a valid FILE * and it will be used by a plain fwrite() to write headers to. <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">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><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_HEADERDATA.pdf b/docs/libcurl/opts/CURLOPT_HEADERDATA.pdf
new file mode 100644 (file)
index 0000000..0bea596
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HEADERDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.html b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.html
new file mode 100644 (file)
index 0000000..bf4681f
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_HEADERFUNCTION 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_HEADERFUNCTION - callback that receives header data <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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">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. 
+<p class="level0">When a server sends a chunked encoded transfer, it may contain a trailer. That trailer is identical to a HTTP header and if such a trailer is received it is passed to the application using this callback as well. There are several ways to detect it being a trailer and not an ordinary header: 1) it comes after the response-body. 2) it comes after the final header line (CR LF) 3) a Trailer: header among the regular response-headers mention what header(s) to expect in the trailer. 
+<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"><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><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_HEADERFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf
new file mode 100644 (file)
index 0000000..9b4f6b1
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HEADEROPT.html b/docs/libcurl/opts/CURLOPT_HEADEROPT.html
new file mode 100644 (file)
index 0000000..c67842b
--- /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_HEADEROPT 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_HEADEROPT - set how to send HTTP 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_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> - 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_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><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_HEADEROPT.pdf b/docs/libcurl/opts/CURLOPT_HEADEROPT.pdf
new file mode 100644 (file)
index 0000000..48b74f4
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HEADEROPT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.html b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.html
new file mode 100644 (file)
index 0000000..7720f01
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_HTTP200ALIASES 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_HTTP200ALIASES - specify alternative matches for HTTP 200 OK <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_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, 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>
+<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.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><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_HTTP200ALIASES.pdf b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf
new file mode 100644 (file)
index 0000000..79548e8
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTPAUTH.html b/docs/libcurl/opts/CURLOPT_HTTPAUTH.html
new file mode 100644 (file)
index 0000000..bc5c024
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_HTTPAUTH 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_HTTPAUTH - set HTTP server authentication methods to try <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_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. 
+<p class="level0">For authentication with a proxy, see <a Class="emphasis" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>. 
+<p class="level0">
+<p class="level0"><a name="CURLAUTHBASIC"></a><span class="nroffip">CURLAUTH_BASIC</span> 
+<p class="level1">HTTP Basic authentication. This is the default choice, and the only method that is in wide-spread use and supported virtually everywhere. This sends the user name and password over the network in plain text, easily captured by others. 
+<p class="level0"><a name="CURLAUTHDIGEST"></a><span class="nroffip">CURLAUTH_DIGEST</span> 
+<p class="level1">HTTP Digest authentication.  Digest authentication is defined in <a href="http://www.ietf.org/rfc/rfc2617.txt">RFC 2617</a> and is a more secure way to do authentication over public networks than the regular old-fashioned Basic method. 
+<p class="level0"><a name="CURLAUTHDIGESTIE"></a><span class="nroffip">CURLAUTH_DIGEST_IE</span> 
+<p class="level1">HTTP Digest authentication with an IE flavor.  Digest authentication is defined in <a href="http://www.ietf.org/rfc/rfc2617.txt">RFC 2617</a> and is a more secure way to do authentication over public networks than the regular old-fashioned Basic method. The IE flavor is simply that libcurl will use a special "quirk" that IE is known to have used before version 7 and that some servers require the client to use. 
+<p class="level0"><a name="CURLAUTHNEGOTIATE"></a><span class="nroffip">CURLAUTH_NEGOTIATE</span> 
+<p class="level1">HTTP Negotiate (SPNEGO) authentication. Negotiate authentication is defined in <a href="http://www.ietf.org/rfc/rfc4559.txt">RFC 4559</a> and is the most secure way to perform authentication over HTTP. 
+<p class="level1">You need to build libcurl with a suitable GSS-API library or SSPI on Windows for this to work. 
+<p class="level0"><a name="CURLAUTHNTLM"></a><span class="nroffip">CURLAUTH_NTLM</span> 
+<p class="level1">HTTP NTLM authentication. A proprietary protocol invented and used by Microsoft. It uses a challenge-response and hash concept similar to Digest, to prevent the password from being eavesdropped. 
+<p class="level1">You need to build libcurl with either OpenSSL, GnuTLS or NSS support for this option to work, or build libcurl on Windows with SSPI support. 
+<p class="level0"><a name="CURLAUTHNTLMWB"></a><span class="nroffip">CURLAUTH_NTLM_WB</span> 
+<p class="level1">NTLM delegating to winbind helper. Authentication is performed by a separate binary application that is executed when needed. The name of the application is specified at compile time but is typically /usr/bin/ntlm_auth 
+<p class="level1">Note that libcurl will fork when necessary to run the winbind application and kill it when complete, calling waitpid() to await its exit when done. On POSIX operating systems, killing the process will cause a SIGCHLD signal to be raised (regardless of whether <a Class="emphasis" href="./CURLOPT_NOSIGNAL.html">CURLOPT_NOSIGNAL</a> is set), which must be handled intelligently by the application. In particular, the application must not unconditionally call wait() in its SIGCHLD signal handler to avoid being subject to a race condition.  This behavior is subject to change in future versions of libcurl. 
+<p class="level0"><a name="CURLAUTHANY"></a><span class="nroffip">CURLAUTH_ANY</span> 
+<p class="level1">This is a convenience macro that sets all bits and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure. 
+<p class="level0"><a name="CURLAUTHANYSAFE"></a><span class="nroffip">CURLAUTH_ANYSAFE</span> 
+<p class="level1">This is a convenience macro that sets all bits except Basic and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure. 
+<p class="level0"><a name="CURLAUTHONLY"></a><span class="nroffip">CURLAUTH_ONLY</span> 
+<p class="level1">This is a meta symbol. OR this value together with a single specific auth value to force libcurl to probe for un-restricted auth and if not, only that single auth algorithm is acceptable. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURLAUTH_BASIC <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">Option Added in 7.10.6. 
+<p class="level0">CURLAUTH_DIGEST_IE was added added in 7.19.3 
+<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><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_HTTPAUTH.pdf b/docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf
new file mode 100644 (file)
index 0000000..867a8b1
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTPGET.html b/docs/libcurl/opts/CURLOPT_HTTPGET.html
new file mode 100644 (file)
index 0000000..c7e9210
--- /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>CURLOPT_HTTPGET 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_HTTPGET - ask for a HTTP GET 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_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 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><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_HTTPGET.pdf b/docs/libcurl/opts/CURLOPT_HTTPGET.pdf
new file mode 100644 (file)
index 0000000..8983a0d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTPGET.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTPHEADER.html b/docs/libcurl/opts/CURLOPT_HTTPHEADER.html
new file mode 100644 (file)
index 0000000..567db37
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_HTTPHEADER 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_HTTPHEADER - set custom HTTP 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_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). 
+<p class="level0">The headers included in the linked list <span Class="bold">must not</span> be CRLF-terminated, because libcurl adds CRLF after each header item. Failure to comply with this will result in strange bugs because the server will most likely ignore part of the headers you specified. 
+<p class="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>. 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"><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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf b/docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf
new file mode 100644 (file)
index 0000000..195f7fb
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTPPOST.html b/docs/libcurl/opts/CURLOPT_HTTPPOST.html
new file mode 100644 (file)
index 0000000..26ca38f
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_HTTPPOST 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_HTTPPOST - specify the multipart formpost content <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_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 as long as the curl transfer is alive and is using it. 
+<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 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">curl_formadd (3)</span>, <span Class="manpage">curl_formfree (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/CURLOPT_HTTPPOST.pdf b/docs/libcurl/opts/CURLOPT_HTTPPOST.pdf
new file mode 100644 (file)
index 0000000..f541ff4
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTPPOST.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.html b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.html
new file mode 100644 (file)
index 0000000..265453b
--- /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_HTTPPROXYTUNNEL 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_HTTPPROXYTUNNEL - tunnel through HTTP proxy <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_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. 
+<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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf
new file mode 100644 (file)
index 0000000..c8b1b66
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.html b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.html
new file mode 100644 (file)
index 0000000..9a16368
--- /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>CURLOPT_HTTP_CONTENT_DECODING 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_HTTP_CONTENT_DECODING - enable/disable HTTP content decoding <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_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>
+<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.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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf
new file mode 100644 (file)
index 0000000..076e9b6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.html b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.html
new file mode 100644 (file)
index 0000000..fc6d00c
--- /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>CURLOPT_HTTP_TRANSFER_DECODING 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_HTTP_TRANSFER_DECODING - enable/disable HTTP transfer decoding <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_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>
+<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.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><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_HTTP_TRANSFER_DECODING.pdf b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf
new file mode 100644 (file)
index 0000000..d10dd11
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_HTTP_VERSION.html b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.html
new file mode 100644 (file)
index 0000000..2a1549b
--- /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_HTTP_VERSION 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_HTTP_VERSION - specify HTTP protocol version to use <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_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 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. 
+<p class="level0"><a name="CURLHTTPVERSION10"></a><span class="nroffip">CURL_HTTP_VERSION_1_0</span> 
+<p class="level1">Enforce HTTP 1.0 requests. 
+<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 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> 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) 
+<p class="level0"><a name="CURLHTTPVERSION2PRIORKNOWLEDGE"></a><span class="nroffip">CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE</span> 
+<p class="level1">Issue non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2 straight away. HTTPS requests will still do HTTP/2 the standard way with negotiated protocol version in the TLS handshake. (Added in 7.49.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><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_HTTP_VERSION.pdf b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf
new file mode 100644 (file)
index 0000000..93fb5da
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.html b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.html
new file mode 100644 (file)
index 0000000..8486ef3
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_IGNORE_CONTENT_LENGTH 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_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 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"><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><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_IGNORE_CONTENT_LENGTH.pdf b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf
new file mode 100644 (file)
index 0000000..27bb037
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_INFILESIZE.html b/docs/libcurl/opts/CURLOPT_INFILESIZE.html
new file mode 100644 (file)
index 0000000..d8ae44e
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_INFILESIZE 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_INFILESIZE - set size of the input file to send off <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_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. 
+<p class="level0">To unset this value again, set it to -1. 
+<p class="level0">When sending emails using SMTP, this command can be used to specify the optional SIZE parameter for the MAIL FROM command. 
+<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"><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><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_INFILESIZE.pdf b/docs/libcurl/opts/CURLOPT_INFILESIZE.pdf
new file mode 100644 (file)
index 0000000..15973f6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_INFILESIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.html b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.html
new file mode 100644 (file)
index 0000000..ee20b6f
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_INFILESIZE_LARGE 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_INFILESIZE_LARGE - set size of the input file to send off <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_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. 
+<p class="level0">To unset this value again, set it to -1. 
+<p class="level0">When sending emails using SMTP, this command can be used to specify the optional SIZE parameter for the MAIL FROM command. 
+<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"><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><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_INFILESIZE_LARGE.pdf b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf
new file mode 100644 (file)
index 0000000..b1adf47
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf differ
index 8b7aff0..77db372 100644 (file)
@@ -40,9 +40,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL, use whatever the TCP stack finds suitable
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_INTERFACE.html b/docs/libcurl/opts/CURLOPT_INTERFACE.html
new file mode 100644 (file)
index 0000000..3b226f2
--- /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>CURLOPT_INTERFACE 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_INTERFACE - source interface for outgoing traffic <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_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>
+<p class="level0">NULL, use whatever the TCP stack finds suitable <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">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><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_INTERFACE.pdf b/docs/libcurl/opts/CURLOPT_INTERFACE.pdf
new file mode 100644 (file)
index 0000000..86b3e53
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_INTERFACE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.html b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.html
new file mode 100644 (file)
index 0000000..758548d
--- /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_INTERLEAVEDATA 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_INTERLEAVEDATA - custom pointer to RTSP interleave callback <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_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>
+<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><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_INTERLEAVEDATA.pdf b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf
new file mode 100644 (file)
index 0000000..733f81d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.html b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.html
new file mode 100644 (file)
index 0000000..ffe5b33
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_INTERLEAVEFUNCTION 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_INTERLEAVEFUNCTION - callback function for RTSP interleaved data <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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">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><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_INTERLEAVEFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf
new file mode 100644 (file)
index 0000000..c092ef4
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_IOCTLDATA.html b/docs/libcurl/opts/CURLOPT_IOCTLDATA.html
new file mode 100644 (file)
index 0000000..2bc57f7
--- /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_IOCTLDATA 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_IOCTLDATA - custom pointer passed to I/O callback <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_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>
+<p class="level0">Used with 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.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><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_IOCTLDATA.pdf b/docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf
new file mode 100644 (file)
index 0000000..7ddc716
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.html b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.html
new file mode 100644 (file)
index 0000000..94725dd
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_IOCTLFUNCTION 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_IOCTLFUNCTION - callback for I/O operations <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">The callback MUST return <span Class="emphasis">CURLIOE_UNKNOWNCMD</span> if the input <span Class="emphasis">cmd</span> is not <span Class="emphasis">CURLIOCMD_RESTARTREAD</span>. 
+<p class="level0">The <span Class="emphasis">clientp</span> argument to the callback is set with the <a Class="emphasis" href="./CURLOPT_IOCTLDATA.html">CURLOPT_IOCTLDATA</a> option. 
+<p class="level0">This option is deprecated! Do not use it. Use <a Class="emphasis" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a> instead to provide seeking! If <a Class="emphasis" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a> is set, this parameter will be ignored when seeking. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">By default, this parameter is set to NULL. Not used. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">Used with 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.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><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_IOCTLFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf
new file mode 100644 (file)
index 0000000..0e5892c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_IPRESOLVE.html b/docs/libcurl/opts/CURLOPT_IPRESOLVE.html
new file mode 100644 (file)
index 0000000..a2b464e
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_IPRESOLVE 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_IPRESOLVE - specify which IP protocol version to use <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_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> 
+<p class="level1">Default, resolves addresses to all IP versions that your system allows. 
+<p class="level0"><a name="CURLIPRESOLVEV4"></a><span class="nroffip">CURL_IPRESOLVE_V4</span> 
+<p class="level1">Resolve to IPv4 addresses. 
+<p class="level0"><a name="CURLIPRESOLVEV6"></a><span class="nroffip">CURL_IPRESOLVE_V6</span> 
+<p class="level1">Resolve to IPv6 addresses. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURL_IPRESOLVE_WHATEVER <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">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><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_IPRESOLVE.pdf b/docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf
new file mode 100644 (file)
index 0000000..da247c5
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf differ
index 8919039..61198ea 100644 (file)
@@ -43,9 +43,6 @@ A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option,
 which is returned if the setup of the SSL/TLS session has failed due to a
 mismatch with the issuer of peer certificate (\fICURLOPT_SSL_VERIFYPEER(3)\fP
 has to be set too for the check to fail). (Added in 7.19.0)
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_ISSUERCERT.html b/docs/libcurl/opts/CURLOPT_ISSUERCERT.html
new file mode 100644 (file)
index 0000000..45e76a4
--- /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_ISSUERCERT 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_ISSUERCERT - issuer SSL certificate filename <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_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. 
+<p class="level0">A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option, which is returned if the setup of the SSL/TLS session has failed due to a mismatch with the issuer of peer certificate (<a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> has to be set too for the check to fail). (Added in 7.19.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 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">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><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_ISSUERCERT.pdf b/docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf
new file mode 100644 (file)
index 0000000..d2e2ffc
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3 b/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3
deleted file mode 100644 (file)
index 277125b..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_KEEP_SENDING_ON_ERROR 3 "22 Sep 2016" "libcurl 7.51.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_KEEP_SENDING_ON_ERROR \- keep sending on early HTTP response >= 300
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEEP_SENDING_ON_ERROR,
-                          long keep_sending);
-.SH DESCRIPTION
-A long parameter set to 1 tells the library to keep sending the request body
-if the HTTP code returned is equal to or larger than 300. The default action
-would be to stop sending and close the stream or connection.
-
-This option is suitable for manual NTLM authentication, i.e. if an application
-does not use \fICURLOPT_HTTPAUTH(3)\fP, but instead sets "Authorization: NTLM ..."
-headers manually using \fICURLOPT_HTTPHEADER(3)\fP.
-
-Most applications do not need this option.
-.SH DEFAULT
-0, stop sending on error
-.SH PROTOCOLS
-HTTP
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Along with HTTP. Added in 7.51.0.
-.SH RETURN VALUE
-Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
-.SH "SEE ALSO"
-.BR CURLOPT_FAILONERROR "(3), " CURLOPT_HTTPHEADER "(3), "
index 45f6aca..9b85b82 100644 (file)
@@ -32,9 +32,6 @@ Pass a pointer to a zero terminated string as parameter. It will be used as
 the password required to use the \fICURLOPT_SSLKEY(3)\fP or
 \fICURLOPT_SSH_PRIVATE_KEYFILE(3)\fP private key.  You never needed a pass
 phrase to load a certificate but you need one to load your private key.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_KEYPASSWD.html b/docs/libcurl/opts/CURLOPT_KEYPASSWD.html
new file mode 100644 (file)
index 0000000..422456e
--- /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_KEYPASSWD 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_KEYPASSWD - set passphrase to private 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_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, 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><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_KEYPASSWD.pdf b/docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf
new file mode 100644 (file)
index 0000000..4c3dee0
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf differ
index f23d72c..6ebd2f2 100644 (file)
@@ -33,9 +33,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_KRBLEVEL.html b/docs/libcurl/opts/CURLOPT_KRBLEVEL.html
new file mode 100644 (file)
index 0000000..21fefda
--- /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_KRBLEVEL 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_KRBLEVEL - set FTP kerberos security level <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_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>
+<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">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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf b/docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf
new file mode 100644 (file)
index 0000000..fec89d9
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_LOCALPORT.html b/docs/libcurl/opts/CURLOPT_LOCALPORT.html
new file mode 100644 (file)
index 0000000..f62b0a3
--- /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_LOCALPORT 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_LOCALPORT - set local port number to use for 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_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>
+<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 <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><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_LOCALPORT.pdf b/docs/libcurl/opts/CURLOPT_LOCALPORT.pdf
new file mode 100644 (file)
index 0000000..dd0a2e8
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_LOCALPORT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.html b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.html
new file mode 100644 (file)
index 0000000..25e5262
--- /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_LOCALPORTRANGE 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_LOCALPORTRANGE - number of additional local ports to try <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_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>
+<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"><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>
diff --git a/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf
new file mode 100644 (file)
index 0000000..09f3316
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf differ
index 5688bb9..a9ca192 100644 (file)
@@ -38,9 +38,6 @@ IETF draft draft-earhart-url-smtp-00.txt
 options, such as the preferred authentication mechanism via "AUTH=NTLM" or
 "AUTH=*", and should be used in conjunction with the \fICURLOPT_USERNAME(3)\fP
 option.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.html b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.html
new file mode 100644 (file)
index 0000000..6c8109c
--- /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_LOGIN_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_LOGIN_OPTIONS - set login options <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_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>, <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="emphasis" 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><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_LOGIN_OPTIONS.pdf b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf
new file mode 100644 (file)
index 0000000..1603335
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.html b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.html
new file mode 100644 (file)
index 0000000..700bc70
--- /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_LOW_SPEED_LIMIT 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_LOW_SPEED_LIMIT - set low speed limit in bytes per second <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_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>
+<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">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><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_LOW_SPEED_LIMIT.pdf b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf
new file mode 100644 (file)
index 0000000..95487b0
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.html b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.html
new file mode 100644 (file)
index 0000000..b521077
--- /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_LOW_SPEED_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">CURLOPT_LOW_SPEED_TIME - set low speed limit time period <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_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>
+<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">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><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_LOW_SPEED_TIME.pdf b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf
new file mode 100644 (file)
index 0000000..a75604a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf differ
index ef91779..bd581f0 100644 (file)
@@ -43,9 +43,6 @@ Unlike \fICURLOPT_MAIL_FROM(3)\fP and \fICURLOPT_MAIL_RCPT(3)\fP, the address
 should not be specified within a pair of angled brackets (<>). However, if an
 empty string is used then a pair of brackets will be sent by libcurl as
 required by RFC2554.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_MAIL_AUTH.html b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.html
new file mode 100644 (file)
index 0000000..6479901
--- /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_MAIL_AUTH 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_MAIL_AUTH - SMTP authentication address <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_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. 
+<p class="level0">Unlike <a Class="emphasis" href="./CURLOPT_MAIL_FROM.html">CURLOPT_MAIL_FROM</a> and <a Class="emphasis" href="./CURLOPT_MAIL_RCPT.html">CURLOPT_MAIL_RCPT</a>, the address should not be specified within a pair of angled brackets (&lt;&gt;). However, if an empty string is used then a pair of brackets will be sent by libcurl as required by <a href="http://www.ietf.org/rfc/rfc2554.txt">RFC 2554</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">SMTP <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, 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><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_MAIL_AUTH.pdf b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf
new file mode 100644 (file)
index 0000000..62f86df
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf differ
index 4283f90..0420d49 100644 (file)
@@ -36,9 +36,6 @@ around it, which if not specified will be added automatically.
 
 If this parameter is not specified then an empty address will be sent to the
 mail server which may cause the email to be rejected.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 blank
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_MAIL_FROM.html b/docs/libcurl/opts/CURLOPT_MAIL_FROM.html
new file mode 100644 (file)
index 0000000..f09e209
--- /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_MAIL_FROM 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_MAIL_FROM - SMTP sender address <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_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. 
+<p class="level0">If this parameter is not specified then an empty address will be sent to the mail server which may cause the email to be rejected. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">blank <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">SMTP <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, 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><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_MAIL_FROM.pdf b/docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf
new file mode 100644 (file)
index 0000000..db20315
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_MAIL_RCPT.html b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.html
new file mode 100644 (file)
index 0000000..1def8cf
--- /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>CURLOPT_MAIL_RCPT 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_MAIL_RCPT - list of SMTP mail recipients <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_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. 
+<p class="level0">When performing an address verification (VRFY command), each recipient should be specified as the user name or user name and domain (as per Section 3.5 of <a href="http://www.ietf.org/rfc/rfc5321.txt">RFC 5321</a>). 
+<p class="level0">When performing a mailing list expand (EXPN command), each recipient should be specified using the mailing list name, such as "Friends" or "London-Office". <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">SMTP <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. 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><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_MAIL_RCPT.pdf b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf
new file mode 100644 (file)
index 0000000..afa9f06
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_MAXCONNECTS.html b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.html
new file mode 100644 (file)
index 0000000..16c2458
--- /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_MAXCONNECTS 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_MAXCONNECTS - maximum connection cache size <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_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. 
+<p class="level0">If you already have performed transfers with this curl handle, setting a smaller <a Class="emphasis" href="./CURLOPT_MAXCONNECTS.html">CURLOPT_MAXCONNECTS</a> than before may cause open connections to get closed unnecessarily. 
+<p class="level0">If you add this easy handle to a multi handle, this setting is not acknowledged, and you must instead use <span Class="emphasis">curl_multi_setopt(3)</span> and the <a Class="emphasis" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a> option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">5 <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">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><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_MAXCONNECTS.pdf b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf
new file mode 100644 (file)
index 0000000..697335c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_MAXFILESIZE.html b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.html
new file mode 100644 (file)
index 0000000..713c132
--- /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_MAXFILESIZE 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_MAXFILESIZE - maximum file size allowed to 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_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. 
+<p class="level0">If you want a limit above 2GB, use <a Class="emphasis" href="./CURLOPT_MAXFILESIZE_LARGE.html">CURLOPT_MAXFILESIZE_LARGE</a>. <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">FTP and 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">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><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_MAXFILESIZE.pdf b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf
new file mode 100644 (file)
index 0000000..e40c4ce
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.html b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.html
new file mode 100644 (file)
index 0000000..f0752b2
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_MAXFILESIZE_LARGE 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_MAXFILESIZE_LARGE - maximum file size allowed to download <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_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>
+<p class="level0">None <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">FTP and 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.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><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_MAXFILESIZE_LARGE.pdf b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf
new file mode 100644 (file)
index 0000000..12a22fc
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_MAXREDIRS.html b/docs/libcurl/opts/CURLOPT_MAXREDIRS.html
new file mode 100644 (file)
index 0000000..dce0f90
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_MAXREDIRS 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_MAXREDIRS - maximum number of redirects allowed <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_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 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><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_MAXREDIRS.pdf b/docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf
new file mode 100644 (file)
index 0000000..cc140bf
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.html b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.html
new file mode 100644 (file)
index 0000000..180ea78
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_MAX_RECV_SPEED_LARGE 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_MAX_RECV_SPEED_LARGE - rate limit data download speed <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_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) the transfer will pause to keep the speed 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>
+<p class="level0">0, disabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All but file:// <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.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><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_MAX_RECV_SPEED_LARGE.pdf b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf
new file mode 100644 (file)
index 0000000..ac3b6d4
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.html b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.html
new file mode 100644 (file)
index 0000000..32b8e0c
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_MAX_SEND_SPEED_LARGE 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_MAX_SEND_SPEED_LARGE - rate limit data upload speed <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_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) the transfer will pause to keep the speed 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>
+<p class="level0">0, disabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All except 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">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><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_MAX_SEND_SPEED_LARGE.pdf b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf
new file mode 100644 (file)
index 0000000..08d2622
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_NETRC.html b/docs/libcurl/opts/CURLOPT_NETRC.html
new file mode 100644 (file)
index 0000000..65b3cec
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_NETRC 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_NETRC - request that .netrc is 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_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. 
+<p class="level0">Only machine name, user name and password are taken into account (init macros and similar things aren't supported). 
+<p class="level0">libcurl does not verify that the file has the correct properties set (as the standard Unix ftp client does). It should only be readable by user. 
+<p class="level0"><span Class="emphasis">level</span> should be set to one of the values described below. 
+<p class="level0">
+<p class="level0"><a name="CURLNETRCOPTIONAL"></a><span class="nroffip">CURL_NETRC_OPTIONAL</span> 
+<p class="level1">The use of your <span Class="emphasis">~/.netrc</span> file is optional, and information in the URL is to be preferred.  The file will be scanned for the host and user name (to find the password only) or for the host only, to find the first user name and password after that <span Class="emphasis">machine</span>, which ever information is not specified in the URL. 
+<p class="level1">Undefined values of the option will have this effect. 
+<p class="level0"><a name="CURLNETRCIGNORED"></a><span class="nroffip">CURL_NETRC_IGNORED</span> 
+<p class="level1">The library will ignore the file and use only the information in the URL. 
+<p class="level1">This is the default. 
+<p class="level0"><a name="CURLNETRCREQUIRED"></a><span class="nroffip">CURL_NETRC_REQUIRED</span> 
+<p class="level1">This value tells the library that use of the file is required, to ignore the information in the URL, and to search the file for the host only. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURL_NETRC_IGNORED <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">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><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_NETRC.pdf b/docs/libcurl/opts/CURLOPT_NETRC.pdf
new file mode 100644 (file)
index 0000000..1ef7746
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NETRC.pdf differ
index b713256..d3ecc95 100644 (file)
@@ -33,9 +33,6 @@ the full path name to the \fIfile\fP you want libcurl to use as .netrc
 file. If this option is omitted, and \fICURLOPT_NETRC(3)\fP is set, libcurl
 will attempt to find a .netrc file in the current user's home
 directory.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_NETRC_FILE.html b/docs/libcurl/opts/CURLOPT_NETRC_FILE.html
new file mode 100644 (file)
index 0000000..e401fa6
--- /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_NETRC_FILE 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_NETRC_FILE - file name to read .netrc info from <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_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>
+<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.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><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_NETRC_FILE.pdf b/docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf
new file mode 100644 (file)
index 0000000..9eaafd5
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.html b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.html
new file mode 100644 (file)
index 0000000..8ea9fcc
--- /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>CURLOPT_NEW_DIRECTORY_PERMS 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_NEW_DIRECTORY_PERMS - permissions for remotely created directories <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_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>
+<p class="level0">SFTP, SCP 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">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><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_NEW_DIRECTORY_PERMS.pdf b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf
new file mode 100644 (file)
index 0000000..5a91864
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.html b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.html
new file mode 100644 (file)
index 0000000..eeb2904
--- /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>CURLOPT_NEW_FILE_PERMS 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_NEW_FILE_PERMS - permissions for remotely created files <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_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>
+<p class="level0">SFTP, SCP 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">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><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_NEW_FILE_PERMS.pdf b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf
new file mode 100644 (file)
index 0000000..ce6c06d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_NOBODY.html b/docs/libcurl/opts/CURLOPT_NOBODY.html
new file mode 100644 (file)
index 0000000..bfd44db
--- /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>CURLOPT_NOBODY 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_NOBODY - do the download request without getting the body <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_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 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><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_NOBODY.pdf b/docs/libcurl/opts/CURLOPT_NOBODY.pdf
new file mode 100644 (file)
index 0000000..4f3efe9
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NOBODY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_NOPROGRESS.html b/docs/libcurl/opts/CURLOPT_NOPROGRESS.html
new file mode 100644 (file)
index 0000000..42f7a9a
--- /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>CURLOPT_NOPROGRESS 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_NOPROGRESS - switch off the progress meter <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_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="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><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_NOPROGRESS.pdf b/docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf
new file mode 100644 (file)
index 0000000..cbb03c7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf differ
index 1048b55..2998a30 100644 (file)
@@ -36,9 +36,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_NOPROXY.html b/docs/libcurl/opts/CURLOPT_NOPROXY.html
new file mode 100644 (file)
index 0000000..354183f
--- /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_NOPROXY 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_NOPROXY - disable proxy use for specific hosts <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_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>
+<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.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><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_NOPROXY.pdf b/docs/libcurl/opts/CURLOPT_NOPROXY.pdf
new file mode 100644 (file)
index 0000000..550578e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NOPROXY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_NOSIGNAL.html b/docs/libcurl/opts/CURLOPT_NOSIGNAL.html
new file mode 100644 (file)
index 0000000..8453ca5
--- /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>CURLOPT_NOSIGNAL 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_NOSIGNAL - skip all signal handling <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_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. 
+<p class="level0">Setting <a Class="emphasis" href="./CURLOPT_NOSIGNAL.html">CURLOPT_NOSIGNAL</a> to 1 makes libcurl NOT ask the system to ignore SIGPIPE signals, which otherwise are sent by the system when trying to send data to a socket which is closed in the other end. libcurl makes an effort to never cause such SIGPIPEs to trigger, but some operating systems have no way to avoid them and even on those that have there are some corner cases when they may still happen, contrary to our desire. In addition, using <span Class="emphasis">CURLAUTH_NTLM_WB</span> authentication could cause a SIGCHLD signal to be raised. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 <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. <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_NOSIGNAL.pdf b/docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf
new file mode 100644 (file)
index 0000000..eb50832
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.html b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.html
new file mode 100644 (file)
index 0000000..4908ddb
--- /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_OPENSOCKETDATA 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_OPENSOCKETDATA - custom pointer passed to open socket callback <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_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>
+<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.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><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_OPENSOCKETDATA.pdf b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf
new file mode 100644 (file)
index 0000000..8ae4cf8
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.html b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.html
new file mode 100644 (file)
index 0000000..4f03508
--- /dev/null
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_OPENSOCKETFUNCTION 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_OPENSOCKETFUNCTION - set callback for opening sockets <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf
new file mode 100644 (file)
index 0000000..2dcf512
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf differ
index e9f6d06..06ed9e1 100644 (file)
@@ -33,9 +33,6 @@ password to use for the transfer.
 
 The \fICURLOPT_PASSWORD(3)\fP option should be used in conjunction with the
 \fICURLOPT_USERNAME(3)\fP option.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 blank
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_PASSWORD.html b/docs/libcurl/opts/CURLOPT_PASSWORD.html
new file mode 100644 (file)
index 0000000..9f88509
--- /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_PASSWORD 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_PASSWORD - password to use in authentication <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_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>
+<p class="level0">blank <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.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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_PASSWORD.pdf b/docs/libcurl/opts/CURLOPT_PASSWORD.pdf
new file mode 100644 (file)
index 0000000..4ac054c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PASSWORD.pdf differ
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..294b8c7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.pdf differ
index 1951c88..4e673bd 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2016, 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
@@ -39,9 +39,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
@@ -94,23 +91,14 @@ footer:
 .fi
 .SH AVAILABILITY
 PEM/DER support:
-
   7.39.0: OpenSSL, GnuTLS and GSKit
-
   7.43.0: NSS and wolfSSL/CyaSSL
-
   7.47.0: mbedtls
-
   7.49.0: PolarSSL
-
 sha256 support:
-
-  7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL
-
+  7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL.
   7.47.0: mbedtls
-
   7.49.0: PolarSSL
-
 Other SSL backends not supported.
 .SH RETURN VALUE
 Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
diff --git a/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.html b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.html
new file mode 100644 (file)
index 0000000..8048597
--- /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">PEM/DER support: &nbsp; 7.39.0: OpenSSL, GnuTLS and GSKit &nbsp; 7.43.0: NSS and wolfSSL/CyaSSL &nbsp; 7.47.0: mbedtls &nbsp; 7.49.0: PolarSSL sha256 support: &nbsp; 7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL. &nbsp; 7.47.0: mbedtls &nbsp; 7.49.0: PolarSSL 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..6d9fc6c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PIPEWAIT.html b/docs/libcurl/opts/CURLOPT_PIPEWAIT.html
new file mode 100644 (file)
index 0000000..a0b4673
--- /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 <a Class="emphasis" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a> 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..1346af5
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PIPEWAIT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PORT.html b/docs/libcurl/opts/CURLOPT_PORT.html
new file mode 100644 (file)
index 0000000..6d42cf5
--- /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_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">CURLOPT_PORT - set remote port number to work with <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_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. 
+<p class="level0">While this option accepts a 'long', a port number is usually a 16 bit number and therefore using a port number over 65535 will cause a run-time error. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">By default this is 0 which makes it not used. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">Used for all protocols that speak to a port number. <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_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>
diff --git a/docs/libcurl/opts/CURLOPT_PORT.pdf b/docs/libcurl/opts/CURLOPT_PORT.pdf
new file mode 100644 (file)
index 0000000..3352316
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PORT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_POST.html b/docs/libcurl/opts/CURLOPT_POST.html
new file mode 100644 (file)
index 0000000..f340029
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_POST 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_POST - request a HTTP POST <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_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. 
+<p class="level0">Optionally, you can provide data to POST using the <a Class="emphasis" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a> and <a Class="emphasis" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</a> options but then you must make sure to not set <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> to anything but NULL. When providing data with a callback, you must transmit it using chunked transfer-encoding or you must set the size of the data with the <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a> or <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE_LARGE.html">CURLOPT_POSTFIELDSIZE_LARGE</a> options. To enable chunked encoding, you simply pass in the appropriate Transfer-Encoding header, see the post-callback.c example. 
+<p class="level0">You can override the default POST Content-Type: header by setting your own with <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>. 
+<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">If you use POST to a HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>. With HTTP 1.0 or without chunked transfer, you must specify the size in the request. 
+<p class="level0">When setting <a Class="emphasis" href="./CURLOPT_POST.html">CURLOPT_POST</a> to 1, it will automatically set <a Class="emphasis" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a> to 0. 
+<p class="level0">If you issue a POST request and then want to make a HEAD or GET using the same re-used handle, you must explicitly set the new request type using <a Class="emphasis" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a> or <a Class="emphasis" href="./CURLOPT_HTTPGET.html">CURLOPT_HTTPGET</a> or similar. <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 <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_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>
diff --git a/docs/libcurl/opts/CURLOPT_POST.pdf b/docs/libcurl/opts/CURLOPT_POST.pdf
new file mode 100644 (file)
index 0000000..2bd3dca
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_POST.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDS.html b/docs/libcurl/opts/CURLOPT_POSTFIELDS.html
new file mode 100644 (file)
index 0000000..08a75fa
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_POSTFIELDS 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_POSTFIELDS - specify data to POST to 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_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">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">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">If <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> is explicitly set to NULL then libcurl will get the POST data from the read callback. If you want to send a zero-byte POST set <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> to an empty string, or set <a Class="emphasis" href="./CURLOPT_POST.html">CURLOPT_POST</a> to 1 and <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a> to 0. 
+<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 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><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_POSTFIELDS.pdf b/docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf
new file mode 100644 (file)
index 0000000..c00779a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.html b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.html
new file mode 100644 (file)
index 0000000..372f8ab
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_POSTFIELDSIZE 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_POSTFIELDSIZE - size of POST data pointed 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_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 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><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_POSTFIELDSIZE.pdf b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf
new file mode 100644 (file)
index 0000000..0a3112a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.html b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.html
new file mode 100644 (file)
index 0000000..73b3bca
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_POSTFIELDSIZE_LARGE 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_POSTFIELDSIZE_LARGE - size of POST data pointed to <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_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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf
new file mode 100644 (file)
index 0000000..d0d2ff3
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_POSTQUOTE.html b/docs/libcurl/opts/CURLOPT_POSTQUOTE.html
new file mode 100644 (file)
index 0000000..6e45358
--- /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>CURLOPT_POSTQUOTE 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_POSTQUOTE - (S)FTP commands to run after the 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_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>
+<p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">SFTP and 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">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><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_POSTQUOTE.pdf b/docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf
new file mode 100644 (file)
index 0000000..a474613
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_POSTREDIR.html b/docs/libcurl/opts/CURLOPT_POSTREDIR.html
new file mode 100644 (file)
index 0000000..e40cea4
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_POSTREDIR 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_POSTREDIR - how to act on a HTTP POST redirect <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_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/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 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><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_POSTREDIR.pdf b/docs/libcurl/opts/CURLOPT_POSTREDIR.pdf
new file mode 100644 (file)
index 0000000..ddcdcb4
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_POSTREDIR.pdf differ
index 2e77e99..6b95265 100644 (file)
@@ -26,8 +26,7 @@ CURLOPT_PREQUOTE \- commands to run before FTP or SFTP transfer
 .SH SYNOPSIS
 #include <curl/curl.h>
 
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE,
-                          struct curl_slist *cmds);
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE, char *cmds);
 .SH DESCRIPTION
 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
diff --git a/docs/libcurl/opts/CURLOPT_PREQUOTE.html b/docs/libcurl/opts/CURLOPT_PREQUOTE.html
new file mode 100644 (file)
index 0000000..0889b07
--- /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_PREQUOTE 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_PREQUOTE - commands to run before FTP or SFTP 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_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>
+<p class="level0">FTP 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">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><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_PREQUOTE.pdf b/docs/libcurl/opts/CURLOPT_PREQUOTE.pdf
new file mode 100644 (file)
index 0000000..92219c7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PREQUOTE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PRE_PROXY.3 b/docs/libcurl/opts/CURLOPT_PRE_PROXY.3
deleted file mode 100644 (file)
index c5f6dcf..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PRE_PROXY 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PRE_PROXY \- set pre-proxy to use
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRE_PROXY, char *preproxy);
-.SH DESCRIPTION
-Set the \fIpreproxy\fP 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].
-
-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 \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to
-using port 1080 for proxies.
-
-A pre proxy is a SOCKS proxy that curl connects to before it connects to the
-HTTP(S) proxy specified in the \fICURLOPT_PROXY\fP option. The pre proxy can
-only be a SOCKS proxy.
-
-The pre proxy string should be prefixed with [scheme]:// to specify which kind
-of socks 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
-\fICURLPROXY_SOCKS5_HOSTNAME\fP type) to request the specific SOCKS version to
-be used. Otherwise SOCKS4 is used as default.
-
-Setting the pre proxy string to "" (an empty string) will explicitly disable
-the use of a pre proxy.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-Default is NULL, meaning no pre proxy is used.
-
-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!
-.SH PROTOCOLS
-All except file://. Note that some protocols don't do very well over proxy.
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-.SH RETURN VALUE
-Returns CURLE_OK if proxies are 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_HTTPPROXYTUNNEL "(3), "
-
diff --git a/docs/libcurl/opts/CURLOPT_PRIVATE.html b/docs/libcurl/opts/CURLOPT_PRIVATE.html
new file mode 100644 (file)
index 0000000..9934b90
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_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">CURLOPT_PRIVATE - store a 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_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"><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><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_PRIVATE.pdf b/docs/libcurl/opts/CURLOPT_PRIVATE.pdf
new file mode 100644 (file)
index 0000000..0a20daf
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PRIVATE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROGRESSDATA.html b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.html
new file mode 100644 (file)
index 0000000..adfecec
--- /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_PROGRESSDATA 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_PROGRESSDATA - custom pointer passed to the progress callback <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_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="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><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_PROGRESSDATA.pdf b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf
new file mode 100644 (file)
index 0000000..c029c24
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.html b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.html
new file mode 100644 (file)
index 0000000..46a6f91
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PROGRESSFUNCTION 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_PROGRESSFUNCTION - callback to progress meter function <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">We encourage users to use the newer <a Class="emphasis" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a> instead, if you can. 
+<p class="level0">This function gets called by libcurl instead of its internal equivalent with a frequent interval. While data is being transferred it will be called very frequently, and during slow periods like when nothing is being transferred it can slow down to about one call per second. 
+<p class="level0"><span Class="emphasis">clientp</span> is the pointer set with <a Class="emphasis" href="./CURLOPT_PROGRESSDATA.html">CURLOPT_PROGRESSDATA</a>, it is not used by libcurl but is only passed along from the application to the callback. 
+<p class="level0">The callback gets told how much data libcurl will transfer and has transferred, in number of bytes. <span Class="emphasis">dltotal</span> is the total number of bytes libcurl expects to download in this transfer. <span Class="emphasis">dlnow</span> is the number of bytes downloaded so far. <span Class="emphasis">ultotal</span> is the total number of bytes libcurl expects to upload in this transfer. <span Class="emphasis">ulnow</span> is the number of bytes uploaded so far. 
+<p class="level0">Unknown/unused argument values passed to the callback will be set to zero (like if you only download data, the upload size will remain 0). Many times the callback will be called one or more times first, before it knows the data sizes so a program must be made to handle that. 
+<p class="level0">Returning a non-zero value from this callback will cause libcurl to abort the transfer and return <span Class="emphasis">CURLE_ABORTED_BY_CALLBACK</span>. 
+<p class="level0">If you transfer data with the multi interface, this function will not be called during periods of idleness unless you call the appropriate libcurl function that performs transfers. 
+<p class="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="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><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_PROGRESSFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf
new file mode 100644 (file)
index 0000000..cb0c18b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROTOCOLS.html b/docs/libcurl/opts/CURLOPT_PROTOCOLS.html
new file mode 100644 (file)
index 0000000..72d0ce7
--- /dev/null
@@ -0,0 +1,112 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PROTOCOLS 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_PROTOCOLS - set allowed protocols <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_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 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 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><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_PROTOCOLS.pdf b/docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf
new file mode 100644 (file)
index 0000000..6e19e72
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf differ
index 65f84f5..64b74fa 100644 (file)
@@ -38,22 +38,10 @@ option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to
 using port 1080 for proxies.
 
 The proxy string may be prefixed with [scheme]:// to specify which kind of
-proxy is used.
-
-.RS
-.IP http://
-HTTP Proxy. Default when no scheme or proxy type is specified.
-.IP https://
-HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)
-.IP socks4://
-SOCKS4 Proxy.
-.IP socks4a://
-SOCKS4a Proxy. Proxy resolves URL hostname.
-.IP socks5://
-SOCKS5 Proxy.
-.IP socks5h://
-SOCKS5 Proxy. Proxy resolves URL hostname.
-.RE
+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
+\fICURLPROXY_SOCKS5_HOSTNAME\fP type) to request the specific SOCKS version to
+be used. No scheme specified or http://, will be treated as HTTP proxies.
 
 Without a scheme prefix, \fICURLOPT_PROXYTYPE(3)\fP can be used to specify
 which kind of proxy the string identifies.
@@ -74,9 +62,6 @@ use of a proxy, even if there is an environment variable set for it.
 
 A proxy host string can also include protocol scheme (http://) and embedded
 user + password.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 Default is NULL, meaning no proxy is used.
 
diff --git a/docs/libcurl/opts/CURLOPT_PROXY.html b/docs/libcurl/opts/CURLOPT_PROXY.html
new file mode 100644 (file)
index 0000000..491b7be
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PROXY 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 - set proxy to use <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, 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 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 scheme specified or <a href="http://,">http://,</a> 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 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>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<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". 
+<p class="level0">Since 7.50.2, unsupported schemes in proxy strings cause libcurl to return error. <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>, <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.pdf b/docs/libcurl/opts/CURLOPT_PROXY.pdf
new file mode 100644 (file)
index 0000000..179a75e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROXYAUTH.html b/docs/libcurl/opts/CURLOPT_PROXYAUTH.html
new file mode 100644 (file)
index 0000000..d9c5f55
--- /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>CURLOPT_PROXYAUTH 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_PROXYAUTH - set HTTP proxy authentication methods to try <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_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>
+<p class="level0">CURLAUTH_BASIC <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, 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf b/docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf
new file mode 100644 (file)
index 0000000..57e996c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROXYHEADER.html b/docs/libcurl/opts/CURLOPT_PROXYHEADER.html
new file mode 100644 (file)
index 0000000..5290cf9
--- /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>CURLOPT_PROXYHEADER 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_PROXYHEADER - custom HTTP headers to pass to proxy <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_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. 
+<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. 
+<p class="level0">Pass a NULL to this to reset back to no custom headers. <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">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><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_PROXYHEADER.pdf b/docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf
new file mode 100644 (file)
index 0000000..d3c0aa1
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf differ
index c7fbb17..18272c3 100644 (file)
@@ -33,9 +33,6 @@ password to use for authentication with the proxy.
 
 The \fICURLOPT_PROXYPASSWORD(3)\fP option should be used in conjunction with
 the \fICURLOPT_PROXYUSERNAME(3)\fP option.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 blank
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.html b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.html
new file mode 100644 (file)
index 0000000..aa74a9f
--- /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>CURLOPT_PROXYPASSWORD 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_PROXYPASSWORD - password to use with proxy authentication <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_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>
+<p class="level0">blank <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.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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf
new file mode 100644 (file)
index 0000000..0d585a6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf differ
index 0e22289..2380e09 100644 (file)
@@ -29,8 +29,7 @@ CURLOPT_PROXYPORT \- port number the proxy listens on
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port);
 .SH DESCRIPTION
 Pass a long with this option to set the proxy port to connect to unless it is
-specified in the proxy string \fICURLOPT_PROXY(3)\fP or uses 443 for https
-proxies and 1080 for all others as default.
+specified in the proxy string \fICURLOPT_PROXY(3)\fP or uses the default one.
 
 While this accepts a 'long', the port number is 16 bit so it can't be larger
 than 65535.
diff --git a/docs/libcurl/opts/CURLOPT_PROXYPORT.html b/docs/libcurl/opts/CURLOPT_PROXYPORT.html
new file mode 100644 (file)
index 0000000..4424a2e
--- /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>CURLOPT_PROXYPORT 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_PROXYPORT - port number the proxy listens 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_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>
+<p class="level0">0, not specified which makes it use the default port <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">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><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_PROXYPORT.pdf b/docs/libcurl/opts/CURLOPT_PROXYPORT.pdf
new file mode 100644 (file)
index 0000000..7f4ee3f
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXYPORT.pdf differ
index 1985619..d2d9242 100644 (file)
@@ -28,26 +28,15 @@ CURLOPT_PROXYTYPE \- proxy protocol type
 
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type);
 .SH DESCRIPTION
-Pass one of the values below to set the type of the proxy.
+Pass a long with this option to set type of the proxy. Available options for
+this are \fICURLPROXY_HTTP\fP, \fICURLPROXY_HTTP_1_0\fP
+\fICURLPROXY_SOCKS4\fP, \fICURLPROXY_SOCKS5\fP, \fICURLPROXY_SOCKS4A\fP and
+\fICURLPROXY_SOCKS5_HOSTNAME\fP. The HTTP type is default.
 
-.RS
-.IP CURLPROXY_HTTP
-HTTP Proxy. Default.
-.IP CURLPROXY_HTTPS
-HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)
-.IP CURLPROXY_HTTP_1_0
-HTTP 1.0 Proxy. This is very similar to CURLPROXY_HTTP except it uses HTTP/1.0
-for any CONNECT tunnelling. It does not change the HTTP version of the actual
-HTTP requests, controlled by \fICURLOPT_HTTP_VERSION(3)\fP.
-.IP CURLPROXY_SOCKS4
-SOCKS4 Proxy.
-.IP CURLPROXY_SOCKS4A
-SOCKS4a Proxy. Proxy resolves URL hostname.
-.IP CURLPROXY_SOCKS5
-SOCKS5 Proxy.
-.IP CURLPROXY_SOCKS5_HOSTNAME
-SOCKS5 Proxy. Proxy resolves URL hostname.
-.RE
+If you set \fICURLOPT_PROXYTYPE(3)\fP to \fICURLPROXY_HTTP_1_0\fP, 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
+\fICURLOPT_HTTP_VERSION(3)\fP.
 
 Often it is more convenient to specify the proxy type with the scheme part of
 the \fICURLOPT_PROXY(3)\fP string.
diff --git a/docs/libcurl/opts/CURLOPT_PROXYTYPE.html b/docs/libcurl/opts/CURLOPT_PROXYTYPE.html
new file mode 100644 (file)
index 0000000..c3edf65
--- /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_PROXYTYPE 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_PROXYTYPE - proxy protocol 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_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="emphasis" 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>. 
+<p class="level0">Often it is more convenient to specify the proxy type with the scheme part of the <a Class="emphasis" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a> string. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">CURLPROXY_HTTP <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">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><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_PROXYTYPE.pdf b/docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf
new file mode 100644 (file)
index 0000000..255af39
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf differ
index 46ecac6..0d7a241 100644 (file)
@@ -37,9 +37,6 @@ user name to use for the transfer.
 authentication with the proxy.
 
 To specify the proxy password use the \fICURLOPT_PROXYPASSWORD(3)\fP.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 blank
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.html b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.html
new file mode 100644 (file)
index 0000000..5c73dcc
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PROXYUSERNAME 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_PROXYUSERNAME - user name to use for proxy authentication <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_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="emphasis" href="./CURLOPT_PROXYUSERNAME.html">CURLOPT_PROXYUSERNAME</a> sets the user name to be used in protocol authentication with the proxy. 
+<p class="level0">To specify the proxy password use the <a Class="emphasis" href="./CURLOPT_PROXYPASSWORD.html">CURLOPT_PROXYPASSWORD</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">blank <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.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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf
new file mode 100644 (file)
index 0000000..1fb2d5b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf differ
index ebfcfcc..1b47b89 100644 (file)
@@ -35,9 +35,6 @@ should encode it as %3A. (This is different to how \fICURLOPT_USERPWD(3)\fP is
 used - beware.)
 
 Use \fICURLOPT_PROXYAUTH(3)\fP to specify the authentication method.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 This is NULL by default.
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.html b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.html
new file mode 100644 (file)
index 0000000..7279f2b
--- /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>CURLOPT_PROXYUSERPWD 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_PROXYUSERPWD - user name and password to use for proxy authentication <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_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>
+<p class="level0">This is NULL by default. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">Used with all protocols that can use a proxy <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 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><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_PROXYUSERPWD.pdf b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf
new file mode 100644 (file)
index 0000000..3de48f5
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3 b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3
deleted file mode 100644 (file)
index 43bc32b..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_CAINFO 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_CAINFO \- path to proxy Certificate Authority (CA) bundle
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAINFO, char *path);
-.SH DESCRIPTION
-This option is for connecting to a HTTPS proxy, not a HTTPS server.
-
-Pass a char * to a zero terminated string naming a file holding one or more
-certificates to verify the HTTPS proxy with.
-
-If \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the
-server's certificate, \fICURLOPT_PROXY_CAINFO(3)\fP need not even indicate an
-accessible file.
-
-This option is by default set to the system path where libcurl's cacert bundle
-is assumed to be stored, as established at build time.
-
-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.
-
-(iOS and macOS only) If curl is built against Secure Transport, then this
-option is supported for backward compatibility with other SSL engines, but it
-should not be set. If the option is not set, then curl will use the
-certificates in the system and user Keychain to verify the peer, which is the
-preferred method of verifying the peer's certificate chain.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-Built-in system specific
-.SH PROTOCOLS
-Used with HTTPS proxy
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-
-For TLS backends that don't support certificate files, the
-\fICURLOPT_PROXY_CAINFO(3)\fP 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.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_CAPATH "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_CAPATH "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3 b/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3
deleted file mode 100644 (file)
index dc317f0..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_CAPATH 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_CAPATH \- specify directory holding proxy CA certificates
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAPATH, char *capath);
-.SH DESCRIPTION
-Pass a char * to a zero terminated string naming a directory holding multiple
-CA certificates to verify the HTTPS proxy with. If libcurl is built against
-OpenSSL, the certificate directory must be prepared using the openssl c_rehash
-utility. This makes sense only when \fICURLOPT_SSL_VERIFYPEER(3)\fP is enabled
-(which it is by default).
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-Everything used over an HTTPS proxy
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-
-This option is supported by the OpenSSL, GnuTLS and PolarSSL backends. The NSS
-backend provides the option only for backward compatibility.
-.SH RETURN VALUE
-CURLE_OK if supported; or an error such as:
-
-CURLE_NOT_BUILT_IN - Not supported by the SSL backend
-
-CURLE_UNKNOWN_OPTION
-
-CURLE_OUT_OF_MEMORY
-.SH "SEE ALSO"
-.BR CURLOPT_CAINFO "(3), "
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3 b/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3
deleted file mode 100644 (file)
index 9a079a9..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_CRLFILE 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_CRLFILE \- specify a proxy Certificate Revocation List file
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CRLFILE, char *file);
-.SH DESCRIPTION
-This option is for connecting to a HTTPS proxy, not a HTTPS server.
-
-Pass a char * to a zero terminated string naming a \fIfile\fP with the
-concatenation of CRL (in PEM format) to use in the certificate validation that
-occurs during the SSL exchange.
-
-When curl is built to use NSS or GnuTLS, there is no way to influence the use
-of CRL passed to help in the verification process. When libcurl is built with
-OpenSSL support, X509_V_FLAG_CRL_CHECK and X509_V_FLAG_CRL_CHECK_ALL are both
-set, requiring CRL check against all the elements of the certificate chain if
-a CRL file is passed.
-
-This option makes sense only when used in combination with the
-\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option.
-
-A specific error code (\fICURLE_SSL_CRL_BADFILE\fP) is defined with the
-option. It is returned when the SSL exchange fails because the CRL file cannot
-be loaded.  A failure in certificate verification due to a revocation
-information found in the CRL does not trigger this specific error.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-Used with HTTPS proxy.
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.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_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3 b/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3
deleted file mode 100644 (file)
index 50019e1..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_KEYPASSWD 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_KEYPASSWD \- set passphrase to proxy private key
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd);
-.SH DESCRIPTION
-This option is for connecting to a HTTPS proxy, not a HTTPS server.
-
-Pass a pointer to a zero terminated string as parameter. It will be used as
-the password required to use the \fICURLOPT_PROXY_SSLKEY(3)\fP private key.
-You never needed a pass phrase to load a certificate but you need one to load
-your private key.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-Used with HTTPS proxy
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-.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_PROXY_SSLKEY "(3), " CURLOPT_SSH_PRIVATE_KEYFILE "(3), "
-.BR CURLOPT_SSLKEY "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3 b/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3
deleted file mode 100644 (file)
index ebe3d7f..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_PINNEDPUBLICKEY 3 "24 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_PINNEDPUBLICKEY \- set pinned public key for https proxy
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_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 https proxy 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.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
-.SH EXAMPLE
-.nf
-TODO
-.fi
-.SH PUBLIC KEY EXTRACTION
-If you do not have the https proxy server's public key file you can extract it
-from the https proxy 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
-PEM/DER support:
-
-  7.52.0: GSKit, GnuTLS, NSS, OpenSSL, PolarSSL, mbedtls, wolfSSL/CyaSSL
-
-sha256 support:
-
-  7.52.0: GnuTLS, NSS, OpenSSL, PolarSSL, mbedtls, 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_PROXY_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_PROXY_CAINFO "(3), "
-.BR CURLOPT_PROXY_CAPATH "(3), "
index 27467d9..a010382 100644 (file)
@@ -31,9 +31,6 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char *name);
 Pass a char * as parameter to a string holding the \fIname\fP of the
 service. The default service name is "HTTP" for HTTP based proxies and "rcmd"
 for SOCKS5. This option allows you to change it.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 See above
 .SH PROTOCOLS
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..1b561c2
--- /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 authentication 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" for HTTP based proxies and "rcmd" for SOCKS5. 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">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">Added in 7.43.0 for HTTP proxies, 7.49.0 for SOCKS5 proxies. <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..b55778c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3
deleted file mode 100644 (file)
index c1b7f27..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSLCERT 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSLCERT \- set SSL proxy client certificate
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERT, char *cert);
-.SH DESCRIPTION
-This option is for connecting to a HTTPS proxy, not a HTTPS server.
-
-Pass a pointer to a zero terminated string as parameter. The string should be
-the file name of your client certificate used to connect to the HTTPS proxy.
-The default format is "P12" on Secure Transport and "PEM" on other engines,
-and can be changed with \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP.
-
-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.
-
-When using a client certificate, you most likely also need to provide a
-private key with \fICURLOPT_PROXY_SSLKEY(3)\fP.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-Used with HTTPS proxy
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-.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_PROXY_SSLCERTTYPE "(3), " CURLOPT_PROXY_SSLKEY "(3), "
-.BR CURLOPT_SSLCERT "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3
deleted file mode 100644 (file)
index 5e8aa4b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSLCERTTYPE 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSLCERTTYPE \- specify type of the proxy client SSL certificate
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERTTYPE, char *type);
-.SH DESCRIPTION
-Pass a pointer to a zero terminated string as parameter. The string should be
-the format of your client certificate used when connecting to a HTTPS proxy.
-
-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.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-"PEM"
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-
-If built TLS enabled.
-.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.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLCERT "(3), " CURLOPT_PROXY_SSLKEY "(3), "
-.BR CURLOPT_SSLCERTTYPE "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3
deleted file mode 100644 (file)
index b38f8c0..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSLKEY 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSLKEY \- specify private keyfile for TLS and SSL proxy client cert
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEY, char *keyfile);
-.SH DESCRIPTION
-Pass a pointer to a zero terminated string as parameter. The string should be
-the file name of your private key used for connecting to the HTTPS proxy. The
-default format is "PEM" and can be changed with
-\fICURLOPT_PROXY_SSLKEYTYPE(3)\fP.
-
-(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.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-
-If built TLS enabled.
-.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.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLKEYTYPE "(3), " CURLOPT_PROXY_SSLCERT "(3), "
-.BR CURLOPT_SSLKEYTYPE "(3), " CURLOPT_SSLCERT "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3
deleted file mode 100644 (file)
index 66e7ce8..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSLKEYTYPE 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSLKEYTYPE \- set type of the proxy private key file
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEYTYPE, char *type);
-.SH DESCRIPTION
-This option is for connecting to a HTTPS proxy, not a HTTPS server.
-
-Pass a pointer to a zero terminated string as parameter. The string should be
-the format of your private key. Supported formats are "PEM", "DER" and "ENG".
-
-The application does not have to keep the string around after setting this
-option.
-.SH PROTOCOLS
-Used with HTTPS proxy
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-.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.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLKEY "(3), " CURLOPT_PROXY_SSLCERT "(3), "
-.BR CURLOPT_SSLKEYTYPE "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3
deleted file mode 100644 (file)
index f96a9e6..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSLVERSION 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSLVERSION \- set preferred proxy TLS/SSL version
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLVERSION, long version);
-.SH DESCRIPTION
-Pass a long as parameter to control which version of SSL/TLS to attempt to use
-when connecting to an HTTPS proxy.
-
-Use one of the available defines for this purpose. The available options are:
-.RS
-.IP CURL_SSLVERSION_DEFAULT
-The default action. This will attempt to figure out the remote SSL protocol
-version.
-.IP CURL_SSLVERSION_TLSv1
-TLSv1.x
-.IP CURL_SSLVERSION_TLSv1_0
-TLSv1.0
-.IP CURL_SSLVERSION_TLSv1_1
-TLSv1.1
-.IP CURL_SSLVERSION_TLSv1_2
-TLSv1.2
-.IP CURL_SSLVERSION_TLSv1_3
-TLSv1.3
-.RE
-.SH DEFAULT
-CURL_SSLVERSION_DEFAULT
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-.nf
-CURL *curl = curl_easy_init();
-if(curl) {
-  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
-
-  /* ask libcurl to use TLS version 1.0 or later */
-  curl_easy_setopt(curl, CURLOPT_PROXY_SSLVERSION, CURL_SSLVERSION_TLSv1);
-
-  /* Perform the request */
-  curl_easy_perform(curl);
-}
-.fi
-.SH AVAILABILITY
-Added in 7.52.0
-.SH RETURN VALUE
-Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
-.SH "SEE ALSO"
-.BR CURLOPT_USE_SSL "(3), " CURLOPT_HTTP_VERSION "(3), "
-.BR CURLOPT_IPRESOLVE "(3) " CURLOPT_SSLVERSION "(3), "
-
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3
deleted file mode 100644 (file)
index 5cff16d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSL_CIPHER_LIST 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSL_CIPHER_LIST \- specify ciphers to use for proxy TLS
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_CIPHER_LIST, char *list);
-.SH DESCRIPTION
-Pass a char *, pointing to a zero terminated string holding the list of
-ciphers to use for the connection to the HTTPS proxy. The list must be
-syntactically correct, it consists of one or more cipher strings separated by
-colons. Commas or spaces are also acceptable separators but colons are
-normally used, \&!, \&- and \&+ can be used as operators.
-
-For OpenSSL and GnuTLS valid examples of cipher lists include 'RC4-SHA',
-\'SHA1+DES\', 'TLSv1' and 'DEFAULT'. The default list is normally set when you
-compile OpenSSL.
-
-You'll find more details about cipher lists on this URL:
-
- 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
-this option then all known ciphers are disabled and only those passed in are
-enabled.
-
-You'll find more details about the NSS cipher lists on this URL:
-
- http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL, use internal default
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-
-If built TLS enabled.
-.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.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_USE_SSL "(3), "
-.BR CURLOPT_SSLVERSION "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3
deleted file mode 100644 (file)
index bed10da..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSL_OPTIONS 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSL_OPTIONS \- set proxy SSL behavior options
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_OPTIONS, long bitmask);
-.SH DESCRIPTION
-Pass a long with a bitmask to tell libcurl about specific SSL behaviors.
-
-\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.
-
-\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
-All
-.SH AVAILABLE
-Added in 7.52.0
-.SH EXAMPLE
-TODO
-.SH RETURN VALUE
-Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_PROXY_SSL_CIPHER_LIST "(3), "
-.BR CURLOPT_SSLVERSION "(3), " CURLOPT_SSL_CIPHER_LIST "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3
deleted file mode 100644 (file)
index de4b15b..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSL_VERIFYHOST 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSL_VERIFYHOST \- verify the proxy certificate's name against host
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYHOST, long verify);
-.SH DESCRIPTION
-Pass a long set to 2L as asking curl to \fIverify\fP in the HTTPS proxy's
-certificate name fields against the proxy name.
-
-This option determines whether libcurl verifies that the proxy cert contains
-the correct name for the name it is known as.
-
-When \fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP is 2, the proxy certificate must
-indicate that the server is the proxy to which you meant to connect to, or the
-connection fails.
-
-Curl considers the proxy the intended one when the Common Name field or a
-Subject Alternate Name field in the certificate matches the host name in the
-proxy string which you told curl to use.
-
-When the \fIverify\fP value is 1L, \fIcurl_easy_setopt\fP will return an error
-and the option value will not be changed due to old legacy reasons.
-
-When the \fIverify\fP value is 0L, the connection succeeds regardless of the
-names used in the certificate. Use that ability with caution!
-
-See also \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP to verify the digital signature
-of the proxy certificate.  If libcurl is built against NSS and
-\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is zero,
-\fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP is also set to zero and cannot be
-overridden.
-.SH DEFAULT
-2
-.SH PROTOCOLS
-All protocols when used over a HTTPS proxy.
-.SH EXAMPLE
-.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_PROXY_SSL_VERIFYHOST, 2L);
-
-  curl_easy_perform(curl);
-}
-.fi
-.SH AVAILABILITY
-Added in 7.52.0.
-
-If built TLS enabled.
-.SH RETURN VALUE
-Returns CURLE_OK if TLS is supported, and CURLE_UNKNOWN_OPTION if not.
-
-If 1 is set as argument, \fICURLE_BAD_FUNCTION_ARGUMENT\fP is returned.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_CAINFO "(3), ",
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_CAINFO "(3), ",
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3
deleted file mode 100644 (file)
index 9473495..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_SSL_VERIFYPEER 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_SSL_VERIFYPEER \- verify the proxy's SSL certificate
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYPEER, long verify);
-.SH DESCRIPTION
-Pass a long as parameter set to 1L to enable or 0L to disable.
-
-This option tells curl to verifies the authenticity of the HTTPS proxy's
-certificate. A value of 1 means curl verifies; 0 (zero) means it doesn't.
-
-This is the proxy version of \fICURLOPT_SSL_VERIFYPEER(3)\fP that's used for
-ordinary HTTPS servers.
-
-When negotiating a TLS or SSL connection, the server sends a certificate
-indicating its identity. Curl verifies whether the certificate is authentic,
-i.e. that you can trust that the server is who the certificate says it is.
-This trust is based on a chain of digital signatures, rooted in certification
-authority (CA) certificates you supply.  curl uses a default bundle of CA
-certificates (the path for that is determined at build time) and you can
-specify alternate certificates with the \fICURLOPT_PROXY_CAINFO(3)\fP option
-or the \fICURLOPT_PROXY_CAPATH(3)\fP option.
-
-When \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is enabled, and the verification
-fails to prove that the certificate is authentic, the connection fails.  When
-the option is zero, the peer certificate verification succeeds regardless.
-
-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 \fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP 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
-\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option.
-
-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.
-.SH DEFAULT
-1
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-.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_PROXY_SSL_VERIFYPEER, 1L);
-
-  curl_easy_perform(curl);
-}
-.fi
-.SH AVAILABILITY
-Added in 7.52.0
-
-If built TLS enabled.
-.SH RETURN VALUE
-Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_SSL_VERIFYHOST "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3 b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3
deleted file mode 100644 (file)
index b9b6232..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_TLSAUTH_PASSWORD 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_TLSAUTH_PASSWORD \- password to use for proxy TLS authentication
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_PASSWORD, char *pwd);
-.SH DESCRIPTION
-Pass a char * as parameter, which should point to the zero terminated password
-to use for the TLS authentication method specified with the
-\fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP option. Requires that the
-\fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP option also be set.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.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_TLSAUTH_TYPE "(3), " CURLOPT_PROXY_TLSAUTH_USERNAME "(3), "
-.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_USERNAME "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3 b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3
deleted file mode 100644 (file)
index 5a30a78..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_TLSAUTH_TYPE 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_TLSAUTH_TYPE \- set proxy TLS authentication methods
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_TYPE, char *type);
-.SH DESCRIPTION
-Pass a pointer to a zero terminated string as parameter. The string should be
-the method of the TLS authentication used for the HTTPS connection. Supported
-method is "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_PROXY_TLSAUTH_USERNAME(3)\fP and
-\fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP options.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-blank
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.0
-
-You need to build libcurl with GnuTLS or OpenSSL with TLS-SRP support for this
-to work.
-.SH RETURN VALUE
-Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
-.SH "SEE ALSO"
-.BR CURLOPT_PROXY_TLSAUTH_USERNAME "(3), " CURLOPT_PROXY_TLSAUTH_PASSWORD "(3), "
-.BR CURLOPT_TLSAUTH_USERNAME "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3 b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3
deleted file mode 100644 (file)
index 3ba4ef9..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-.\" **************************************************************************
-.\" *                                  _   _ ____  _
-.\" *  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_PROXY_TLSAUTH_USERNAME 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
-.SH NAME
-CURLOPT_PROXY_TLSAUTH_USERNAME \- user name to use for proxy TLS authentication
-.SH SYNOPSIS
-#include <curl/curl.h>
-
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_USERNAME, char *user);
-.SH DESCRIPTION
-Pass a char * as parameter, which should point to the zero terminated username
-to use for the HTTPS proxy TLS authentication method specified with the
-\fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP option. Requires that the
-\fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP option also be set.
-
-The application does not have to keep the string around after setting this
-option.
-.SH DEFAULT
-NULL
-.SH PROTOCOLS
-All
-.SH EXAMPLE
-TODO
-.SH AVAILABILITY
-Added in 7.52.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_TLSAUTH_TYPE "(3), " CURLOPT_PROXY_TLSAUTH_PASSWORD "(3), "
-.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.html b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.html
new file mode 100644 (file)
index 0000000..fa4f697
--- /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_TRANSFER_MODE 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_TRANSFER_MODE - append FTP transfer mode to URL for proxy <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_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>
+<p class="level0">FTP over proxy <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.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><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_TRANSFER_MODE.pdf b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf
new file mode 100644 (file)
index 0000000..8778a20
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PUT.html b/docs/libcurl/opts/CURLOPT_PUT.html
new file mode 100644 (file)
index 0000000..eb17c66
--- /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>CURLOPT_PUT 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_PUT - make a HTTP PUT 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_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>
+<p class="level0">0, disabled <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">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><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_PUT.pdf b/docs/libcurl/opts/CURLOPT_PUT.pdf
new file mode 100644 (file)
index 0000000..e0b8fae
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PUT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_QUOTE.html b/docs/libcurl/opts/CURLOPT_QUOTE.html
new file mode 100644 (file)
index 0000000..b1858f5
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_QUOTE 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_QUOTE - (S)FTP commands to run before 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_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). 
+<p class="level0">The valid SFTP commands are: 
+<p class="level1">
+<p class="level0"><a name="chgrp"></a><span class="nroffip">chgrp group file</span> 
+<p class="level1">The chgrp command sets the group ID of the file named by the file operand to the group ID specified by the group operand. The group operand is a decimal integer group ID. 
+<p class="level0"><a name="chmod"></a><span class="nroffip">chmod mode file</span> 
+<p class="level1">The chmod command modifies the file mode bits of the specified file. The mode operand is an octal integer mode number. 
+<p class="level0"><a name="chown"></a><span class="nroffip">chown user file</span> 
+<p class="level1">The chown command sets the owner of the file named by the file operand to the user ID specified by the user operand. The user operand is a decimal integer user ID. 
+<p class="level0"><a name="ln"></a><span class="nroffip">ln source_file target_file</span> 
+<p class="level1">The ln and symlink commands create a symbolic link at the target_file location pointing to the source_file location. 
+<p class="level0"><a name="mkdir"></a><span class="nroffip">mkdir directory_name</span> 
+<p class="level1">The mkdir command creates the directory named by the directory_name operand. 
+<p class="level0"><a name="pwd"></a><span class="nroffip">pwd</span> 
+<p class="level1">The pwd command returns the absolute pathname of the current working directory. 
+<p class="level0"><a name="rename"></a><span class="nroffip">rename source target</span> 
+<p class="level1">The rename command renames the file or directory named by the source operand to the destination path named by the target operand. 
+<p class="level0"><a name="rm"></a><span class="nroffip">rm file</span> 
+<p class="level1">The rm command removes the file specified by the file operand. 
+<p class="level0"><a name="rmdir"></a><span class="nroffip">rmdir directory</span> 
+<p class="level1">The rmdir command removes the directory entry specified by the directory operand, provided it is empty. 
+<p class="level0"><a name="statvfs"></a><span class="nroffip">statvfs file</span> 
+<p class="level1">The statvfs command returns statistics on the file system in which specified file resides. (Added in 7.49.0) 
+<p class="level0"><a name="symlink"></a><span class="nroffip">symlink source_file target_file</span> 
+<p class="level1">See ln. 
+<p class="level0"><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 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">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><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_QUOTE.pdf b/docs/libcurl/opts/CURLOPT_QUOTE.pdf
new file mode 100644 (file)
index 0000000..79933de
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_QUOTE.pdf differ
index 4c3e13f..c822325 100644 (file)
@@ -30,9 +30,6 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path);
 .SH DESCRIPTION
 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL, not used
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_RANDOM_FILE.html b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.html
new file mode 100644 (file)
index 0000000..c005acc
--- /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_RANDOM_FILE 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_RANDOM_FILE - specify a source for random data <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_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>
+<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">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><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_RANDOM_FILE.pdf b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf
new file mode 100644 (file)
index 0000000..e5a8b5f
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf differ
index e90696c..375a944 100644 (file)
@@ -44,9 +44,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_RANGE.html b/docs/libcurl/opts/CURLOPT_RANGE.html
new file mode 100644 (file)
index 0000000..c072042
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_RANGE 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_RANGE - set byte range to 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_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). Unfortunately, the HTTP standard (RFC 7233 section 3.1) allows servers to ignore range requests so even when you set <a Class="emphasis" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a> 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 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><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_RANGE.pdf b/docs/libcurl/opts/CURLOPT_RANGE.pdf
new file mode 100644 (file)
index 0000000..1b9f084
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RANGE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_READDATA.html b/docs/libcurl/opts/CURLOPT_READDATA.html
new file mode 100644 (file)
index 0000000..3db38bf
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_READDATA 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_READDATA - custom pointer passed to the read callback <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_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"><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 CURLOPT_INFILE, the name <a Class="emphasis" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</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_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>
diff --git a/docs/libcurl/opts/CURLOPT_READDATA.pdf b/docs/libcurl/opts/CURLOPT_READDATA.pdf
new file mode 100644 (file)
index 0000000..f321b28
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_READDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_READFUNCTION.html b/docs/libcurl/opts/CURLOPT_READFUNCTION.html
new file mode 100644 (file)
index 0000000..f9c3d08
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_READFUNCTION 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_READFUNCTION - read callback for data uploads <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 - 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. 
+<p class="level0">The callback can return <span Class="emphasis">CURL_READFUNC_PAUSE</span> to cause reading from this connection to pause. See <span Class="emphasis">curl_easy_pause(3)</span> for further details. 
+<p class="level0"><span Class="bold">Bugs</span>: when doing TFTP uploads, you must return the exact amount of data that the callback wants, or it will be considered the final packet by the server end and the transfer will end there. 
+<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="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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_READFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_READFUNCTION.pdf
new file mode 100644 (file)
index 0000000..36d2792
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_READFUNCTION.pdf differ
index 3a5c3fc..8bd76f6 100644 (file)
@@ -34,9 +34,6 @@ 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.
 
-Protocols denied by \fICURLOPT_PROTOCOLS(3)\fP are not overridden by this
-option.
-
 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
diff --git a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.html b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.html
new file mode 100644 (file)
index 0000000..77d92f4
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_REDIR_PROTOCOLS 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_REDIR_PROTOCOLS - set protocols allowed to redirect 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_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. 
+<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 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 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><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_REDIR_PROTOCOLS.pdf b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf
new file mode 100644 (file)
index 0000000..f52200a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf differ
index 881f48c..71aae83 100644 (file)
@@ -32,9 +32,6 @@ Pass a pointer to a zero terminated string as parameter. It will be used to
 set the Referer: header in the http request sent to the remote server. This
 can be used to fool servers or scripts. You can also set any custom header
 with \fICURLOPT_HTTPHEADER(3)\fP.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_REFERER.html b/docs/libcurl/opts/CURLOPT_REFERER.html
new file mode 100644 (file)
index 0000000..0dc1958
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_REFERER 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_REFERER - set the HTTP referer header <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_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"><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><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_REFERER.pdf b/docs/libcurl/opts/CURLOPT_REFERER.pdf
new file mode 100644 (file)
index 0000000..566cbb3
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_REFERER.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_RESOLVE.html b/docs/libcurl/opts/CURLOPT_RESOLVE.html
new file mode 100644 (file)
index 0000000..958134f
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_RESOLVE 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_RESOLVE - provide custom host name to IP address resolves <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_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 set with <a Class="emphasis" href="./CURLOPT_RESOLVE.html">CURLOPT_RESOLVE</a> will not time-out from the DNS cache like ordinary entries. 
+<p class="level0">The provided ADDRESS set by this option will be used even if <a Class="emphasis" href="./CURLOPT_IPRESOLVE.html">CURLOPT_IPRESOLVE</a> is set to make libcurl use another IP version. 
+<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. <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 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;
+&nbsp; 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. 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>, <a Class="manpage" href="./CURLOPT_CONNECT_TO.html">CURLOPT_CONNECT_TO</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_RESOLVE.pdf b/docs/libcurl/opts/CURLOPT_RESOLVE.pdf
new file mode 100644 (file)
index 0000000..3565e35
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RESOLVE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM.html b/docs/libcurl/opts/CURLOPT_RESUME_FROM.html
new file mode 100644 (file)
index 0000000..179fc01
--- /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_RESUME_FROM 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_RESUME_FROM - set a point to resume transfer from <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_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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf b/docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf
new file mode 100644 (file)
index 0000000..aae22b9
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.html b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.html
new file mode 100644 (file)
index 0000000..a0bcffa
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_RESUME_FROM_LARGE 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_RESUME_FROM_LARGE - set a point to resume transfer from <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_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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf
new file mode 100644 (file)
index 0000000..d3ee2ef
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.html b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.html
new file mode 100644 (file)
index 0000000..c8776e0
--- /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_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">CURLOPT_RTSP_CLIENT_CSEQ - set the RTSP client CSEQ 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_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>
+<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_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>
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf
new file mode 100644 (file)
index 0000000..8107c75
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.html b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.html
new file mode 100644 (file)
index 0000000..84b4a34
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_RTSP_REQUEST 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_RTSP_REQUEST - specify RTSP 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_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> 
+<p class="level1">Used to retrieve the available methods of the server. The application is responsible for parsing and obeying the response. <span class="bold">(The session ID is not needed for this method.)</span> 
+<p class="level0"><a name="CURLRTSPREQDESCRIBE"></a><span class="nroffip">CURL_RTSPREQ_DESCRIBE</span> 
+<p class="level1">Used to get the low level description of a stream. The application should note what formats it understands in the <span Class="emphasis">'Accept:'</span> header. Unless set manually, libcurl will automatically fill in <span class="emphasis">'Accept: application/sdp'</span>. Time-condition headers will be added to Describe requests if the <a Class="emphasis" href="./CURLOPT_TIMECONDITION.html">CURLOPT_TIMECONDITION</a> option is active. <span class="bold">(The session ID is not needed for this method)</span> 
+<p class="level0"><a name="CURLRTSPREQANNOUNCE"></a><span class="nroffip">CURL_RTSPREQ_ANNOUNCE</span> 
+<p class="level1">When sent by a client, this method changes the description of the session. For example, if a client is using the server to record a meeting, the client can use Announce to inform the server of all the meta-information about the session.  ANNOUNCE acts like a HTTP PUT or POST just like <a class="emphasis" href="#CURLRTSPREQSETPARAMETER">CURL_RTSPREQ_SET_PARAMETER</a> 
+<p class="level0"><a name="CURLRTSPREQSETUP"></a><span class="nroffip">CURL_RTSPREQ_SETUP</span> 
+<p class="level1">Setup is used to initialize the transport layer for the session. The application must set the desired Transport options for a session by using the <a Class="emphasis" href="./CURLOPT_RTSP_TRANSPORT.html">CURLOPT_RTSP_TRANSPORT</a> option prior to calling setup. If no session ID is currently set with <a Class="emphasis" href="./CURLOPT_RTSP_SESSION_ID.html">CURLOPT_RTSP_SESSION_ID</a>, libcurl will extract and use the session ID in the response to this request. <span class="bold">(The session ID is not needed for this method).</span> 
+<p class="level0"><a name="CURLRTSPREQPLAY"></a><span class="nroffip">CURL_RTSPREQ_PLAY</span> 
+<p class="level1">Send a Play command to the server. Use the <a Class="emphasis" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a> option to modify the playback time (e.g. 'npt=10-15'). 
+<p class="level0"><a name="CURLRTSPREQPAUSE"></a><span class="nroffip">CURL_RTSPREQ_PAUSE</span> 
+<p class="level1">Send a Pause command to the server. Use the <a Class="emphasis" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a> option with a single value to indicate when the stream should be halted. (e.g. npt='25') 
+<p class="level0"><a name="CURLRTSPREQTEARDOWN"></a><span class="nroffip">CURL_RTSPREQ_TEARDOWN</span> 
+<p class="level1">This command terminates an RTSP session. Simply closing a connection does not terminate the RTSP session since it is valid to control an RTSP session over different connections. 
+<p class="level0"><a name="CURLRTSPREQGETPARAMETER"></a><span class="nroffip">CURL_RTSPREQ_GET_PARAMETER</span> 
+<p class="level1">Retrieve a parameter from the server. By default, libcurl will automatically include a <span Class="emphasis">Content-Type: text/parameters</span> header on all non-empty requests unless a custom one is set. GET_PARAMETER acts just like a HTTP PUT or POST (see <a class="emphasis" href="#CURLRTSPREQSETPARAMETER">CURL_RTSPREQ_SET_PARAMETER</a>). Applications wishing to send a heartbeat message (e.g. in the presence of a server-specified timeout) should send use an empty GET_PARAMETER request. 
+<p class="level0"><a name="CURLRTSPREQSETPARAMETER"></a><span class="nroffip">CURL_RTSPREQ_SET_PARAMETER</span> 
+<p class="level1">Set a parameter on the server. By default, libcurl will automatically include a <span Class="emphasis">Content-Type: text/parameters</span> header unless a custom one is set. The interaction with SET_PARAMETER is much like a HTTP PUT or POST. An application may either use <a Class="emphasis" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a> with <a Class="emphasis" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</a> like a HTTP PUT, or it may use <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> like a HTTP POST. No chunked transfers are allowed, so the application must set the <a Class="emphasis" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a> in the former and <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a> in the latter. Also, there is no use of multi-part POSTs within RTSP. 
+<p class="level0"><a name="CURLRTSPREQRECORD"></a><span class="nroffip">CURL_RTSPREQ_RECORD</span> 
+<p class="level1">Used to tell the server to record a session. Use the <a Class="emphasis" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a> option to modify the record time. 
+<p class="level0"><a name="CURLRTSPREQRECEIVE"></a><span class="nroffip">CURL_RTSPREQ_RECEIVE</span> 
+<p class="level1">This is a special request because it does not send any data to the server. The application may call this function in order to receive interleaved RTP data. It will return after processing one read buffer of data in order to give the application a chance to run. <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">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><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_RTSP_REQUEST.pdf b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf
new file mode 100644 (file)
index 0000000..2942e30
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.html b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.html
new file mode 100644 (file)
index 0000000..f6cb9d6
--- /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_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">CURLOPT_RTSP_SERVER_CSEQ - set the RTSP server CSEQ 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_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>
+<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_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>
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf
new file mode 100644 (file)
index 0000000..1d61d01
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf differ
index 8f5cdff..cd31899 100644 (file)
@@ -34,9 +34,6 @@ set to any non-NULL value, libcurl will return \fICURLE_RTSP_SESSION_ERROR\fP
 if ID received from the server does not match. If unset (or set to NULL),
 libcurl will automatically set the ID the first time the server sets it in a
 response.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.html b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.html
new file mode 100644 (file)
index 0000000..05ab11e
--- /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_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">CURLOPT_RTSP_SESSION_ID - set 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_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>
+<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, 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><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_RTSP_SESSION_ID.pdf b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf
new file mode 100644 (file)
index 0000000..b7eed80
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf differ
index 356455b..1abb61f 100644 (file)
@@ -38,9 +38,6 @@ with RTSP, the \fICURLOPT_RTSP_STREAM_URI(3)\fP indicates what URL to send to
 the server in the request header while the \fICURLOPT_URL(3)\fP indicates
 where to make the connection to.  (e.g. the \fICURLOPT_URL(3)\fP for the above
 examples might be set to \fIrtsp://foo/twister\fP
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 '*'
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.html b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.html
new file mode 100644 (file)
index 0000000..11c83a7
--- /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_RTSP_STREAM_URI 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_RTSP_STREAM_URI - set RTSP stream URI <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_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 <a Class="emphasis" href="./CURLOPT_RTSP_STREAM_URI.html">CURLOPT_RTSP_STREAM_URI</a> 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>
+<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, 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><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_RTSP_STREAM_URI.pdf b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf
new file mode 100644 (file)
index 0000000..7234f7f
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf differ
index 52d6078..367236b 100644 (file)
@@ -34,9 +34,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.html b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.html
new file mode 100644 (file)
index 0000000..4e8b4bf
--- /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>CURLOPT_RTSP_TRANSPORT 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_RTSP_TRANSPORT - set RTSP Transport: header <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_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>
+<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, 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><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_RTSP_TRANSPORT.pdf b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf
new file mode 100644 (file)
index 0000000..d1082a2
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SASL_IR.html b/docs/libcurl/opts/CURLOPT_SASL_IR.html
new file mode 100644 (file)
index 0000000..b53682f
--- /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_SASL_IR 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_SASL_IR - enable sending initial response in first packet <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_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 
+<p class="level0">Note: Whilst IMAP supports this option there is no need to explicitly set it, as libcurl can determine the feature itself when the server supports the SASL-IR CAPABILITY. <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">IMAP, POP3 and SMTP <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.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><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_SASL_IR.pdf b/docs/libcurl/opts/CURLOPT_SASL_IR.pdf
new file mode 100644 (file)
index 0000000..1cf6488
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SASL_IR.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SEEKDATA.html b/docs/libcurl/opts/CURLOPT_SEEKDATA.html
new file mode 100644 (file)
index 0000000..c2dfec0
--- /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_SEEKDATA 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_SEEKDATA - custom pointer passed to the seek callback <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_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>
+<p class="level0">HTTP, FTP, SFTP <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.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><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_SEEKDATA.pdf b/docs/libcurl/opts/CURLOPT_SEEKDATA.pdf
new file mode 100644 (file)
index 0000000..0065142
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SEEKDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.html b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.html
new file mode 100644 (file)
index 0000000..58030c0
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SEEKFUNCTION 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_SEEKFUNCTION - user callback for seeking in input stream <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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 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>
+<p class="level0">By default, this is NULL and unused. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP, FTP, 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.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><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_SEEKFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf
new file mode 100644 (file)
index 0000000..c735817
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf differ
index baed963..b9f491b 100644 (file)
@@ -32,9 +32,6 @@ Pass a char * as parameter to a string holding the \fIname\fP of the service
 for DIGEST-MD5, SPNEGO and Kerberos 5 authentication mechanisms. The default
 service names are "ftp", "HTTP", "imap", "pop" and "smtp". This option allows
 you to change them.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 See above
 .SH PROTOCOLS
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..02ddcba
--- /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 - authentication 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 for DIGEST-MD5, SPNEGO and Kerberos 5 authentication mechanisms. The default service names are "ftp", "HTTP", "imap", "pop" and "smtp". This option allows you to change them. <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">HTTP, FTP, IMAP, POP and SMTP <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 for HTTP, 7.49.0 for FTP, IMAP, POP3 and SMTP. <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..70962a9
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SHARE.html b/docs/libcurl/opts/CURLOPT_SHARE.html
new file mode 100644 (file)
index 0000000..bf02326
--- /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_SHARE 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_SHARE - specify share handle to use <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_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. 
+<p class="level0">Data that the share object is not set to share will be dealt with the usual way, as if no share was used. 
+<p class="level0">Set this option to NULL again to stop using that share object. <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">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><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_SHARE.pdf b/docs/libcurl/opts/CURLOPT_SHARE.pdf
new file mode 100644 (file)
index 0000000..e984c51
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SHARE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.html b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.html
new file mode 100644 (file)
index 0000000..4b2a91b
--- /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_SOCKOPTDATA 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_SOCKOPTDATA - custom pointer to pass to sockopt callback <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_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>
+<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.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><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_SOCKOPTDATA.pdf b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf
new file mode 100644 (file)
index 0000000..04e0b62
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.html b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.html
new file mode 100644 (file)
index 0000000..2615137
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SOCKOPTFUNCTION 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_SOCKOPTFUNCTION - set callback for setting socket options <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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: 
+<p class="level0"><span Class="emphasis">CURLSOCKTYPE_IPCXN</span> for actively created connections or since 7.28.0 <span Class="emphasis">CURLSOCKTYPE_ACCEPT</span> for FTP when the connection was setup with PORT/EPSV (in earlier versions these sockets weren't passed to this callback). 
+<p class="level0">Future versions of libcurl may support more purposes. libcurl passes the newly created socket descriptor to the callback in the <span Class="emphasis">curlfd</span> parameter so additional setsockopt() calls can be done at the user's discretion. 
+<p class="level0">The <span Class="emphasis">clientp</span> pointer contains whatever user-defined value set using the <a Class="emphasis" href="./CURLOPT_SOCKOPTDATA.html">CURLOPT_SOCKOPTDATA</a> function. 
+<p class="level0">Return <span Class="emphasis">CURL_SOCKOPT_OK</span> from the callback on success. Return <span Class="emphasis">CURL_SOCKOPT_ERROR</span> from the callback function to signal an unrecoverable error to the library and it will close the socket and return <span Class="emphasis">CURLE_COULDNT_CONNECT</span>. Alternatively, the callback function can return <span Class="emphasis">CURL_SOCKOPT_ALREADY_CONNECTED</span>, to tell libcurl that the socket is already connected and then libcurl will not attempt to connect it. This allows an application to pass in an already connected socket with <a Class="emphasis" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a> and then have this function make libcurl not attempt to connect (again). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">By default, this callback is NULL and unused. <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.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><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_SOCKOPTFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf
new file mode 100644 (file)
index 0000000..ec0bc58
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.html b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.html
new file mode 100644 (file)
index 0000000..304db63
--- /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_SOCKS5_GSSAPI_NEC 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_SOCKS5_GSSAPI_NEC - set socks proxy gssapi negotiation protection <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_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>
+<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.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><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_SOCKS5_GSSAPI_NEC.pdf b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf
new file mode 100644 (file)
index 0000000..e4a4298
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf differ
index 1eda29c..440f089 100644 (file)
@@ -33,9 +33,6 @@ Deprecated since 7.49.0. Use \fICURLOPT_PROXY_SERVICE_NAME(3)\fP instead.
 Pass a char * as parameter to a string holding the \fIname\fP of the service.
 The default service name for a SOCKS5 server is "rcmd". This option allows you
 to change it.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 See above
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.html b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.html
new file mode 100644 (file)
index 0000000..a71de57
--- /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>CURLOPT_SOCKS5_GSSAPI_SERVICE 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_SOCKS5_GSSAPI_SERVICE - SOCKS5 proxy authentication 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_SOCKS5_GSSAPI_SERVICE, char *name); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Deprecated since 7.49.0. Use <a Class="emphasis" href="./CURLOPT_PROXY_SERVICE_NAME.html">CURLOPT_PROXY_SERVICE_NAME</a> instead. 
+<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". 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">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">Added in 7.19.4, deprecated in 7.49.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_SOCKS5_GSSAPI_SERVICE.pdf b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf
new file mode 100644 (file)
index 0000000..eae9cb0
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.html b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.html
new file mode 100644 (file)
index 0000000..96a2aed
--- /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>CURLOPT_SSH_AUTH_TYPES 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_SSH_AUTH_TYPES - set desired auth types for SFTP and SCP <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_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>
+<p class="level0">None <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">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><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_SSH_AUTH_TYPES.pdf b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf
new file mode 100644 (file)
index 0000000..02a5476
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf differ
index d9001b5..2ea2360 100644 (file)
@@ -33,9 +33,6 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
 Pass a char * pointing to a string containing 32 hexadecimal digits. The
 string should be the 128 bit MD5 checksum of the remote host's public key, and
 libcurl will reject the connection to the host unless the md5sums match.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html
new file mode 100644 (file)
index 0000000..2eb6be4
--- /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>CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 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_SSH_HOST_PUBLIC_KEY_MD5 - checksum of SSH server public key <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_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>
+<p class="level0">SCP 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.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><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_SSH_HOST_PUBLIC_KEY_MD5.pdf b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf
new file mode 100644 (file)
index 0000000..7d0dc68
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.html b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.html
new file mode 100644 (file)
index 0000000..edb0f0e
--- /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_SSH_KEYDATA 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_SSH_KEYDATA - pointer to pass to the SSH key callback <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_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>
+<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">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><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_SSH_KEYDATA.pdf b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf
new file mode 100644 (file)
index 0000000..d260654
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.html b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.html
new file mode 100644 (file)
index 0000000..967adbe
--- /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_SSH_KEYFUNCTION 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_SSH_KEYFUNCTION - callback for known host matching logic <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">This callback function gets passed the CURL handle, the key from the known_hosts file <span Class="emphasis">knownkey</span>, the key from the remote site <span Class="emphasis">foundkey</span>, info from libcurl on the matching status and a custom pointer (set with <a Class="emphasis" href="./CURLOPT_SSH_KEYDATA.html">CURLOPT_SSH_KEYDATA</a>). It MUST return one of the following return codes to tell libcurl how to act: 
+<p class="level0">
+<p class="level0"><a name="CURLKHSTATFINEADDTOFILE"></a><span class="nroffip">CURLKHSTAT_FINE_ADD_TO_FILE</span> 
+<p class="level1">The host+key is accepted and libcurl will append it to the known_hosts file before continuing with the connection. This will also add the host+key combo to the known_host pool kept in memory if it wasn't already present there. The adding of data to the file is done by completely replacing the file with a new copy, so the permissions of the file must allow this. 
+<p class="level0"><a name="CURLKHSTATFINE"></a><span class="nroffip">CURLKHSTAT_FINE</span> 
+<p class="level1">The host+key is accepted libcurl will continue with the connection. This will also add the host+key combo to the known_host pool kept in memory if it wasn't already present there. 
+<p class="level0"><a name="CURLKHSTATREJECT"></a><span class="nroffip">CURLKHSTAT_REJECT</span> 
+<p class="level1">The host+key is rejected. libcurl will deny the connection to continue and it will be closed. 
+<p class="level0"><a name="CURLKHSTATDEFER"></a><span class="nroffip">CURLKHSTAT_DEFER</span> 
+<p class="level1">The host+key is rejected, but the SSH connection is asked to be kept alive. This feature could be used when the app wants to somehow return back and act on the host+key situation and then retry without needing the overhead of setting it up from scratch again. <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">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><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_SSH_KEYFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf
new file mode 100644 (file)
index 0000000..4d1e0f7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf differ
index e82ee42..9ea0c86 100644 (file)
@@ -34,9 +34,6 @@ format as supported by libssh2. If this file is specified, libcurl will only
 accept connections with hosts that are known and present in that file, with a
 matching public key. Use \fICURLOPT_SSH_KEYFUNCTION(3)\fP to alter the default
 behavior on host and key (mis)matching.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.html b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.html
new file mode 100644 (file)
index 0000000..e1844ad
--- /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_SSH_KNOWNHOSTS 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_SSH_KNOWNHOSTS - file name holding the SSH known hosts <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_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>
+<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">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><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_SSH_KNOWNHOSTS.pdf b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf
new file mode 100644 (file)
index 0000000..1f2b777
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf differ
index 7c24a90..0c35ed5 100644 (file)
@@ -36,9 +36,6 @@ is set, and just "id_dsa" in the current directory if HOME is not set.
 
 If the file is password-protected, set the password with
 \fICURLOPT_KEYPASSWD(3)\fP.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 As explained above
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.html b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.html
new file mode 100644 (file)
index 0000000..f13673c
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSH_PRIVATE_KEYFILE 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_SSH_PRIVATE_KEYFILE - set private key file for SSH auth <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_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>
+<p class="level0">As explained above <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">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><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_SSH_PRIVATE_KEYFILE.pdf b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf
new file mode 100644 (file)
index 0000000..a709701
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf differ
index 1dbdf65..f9aaeae 100644 (file)
@@ -38,9 +38,6 @@ set.
 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.html b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.html
new file mode 100644 (file)
index 0000000..0a6473e
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSH_PUBLIC_KEYFILE 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_SSH_PUBLIC_KEYFILE - set public key file for SSH auth <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_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 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><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_SSH_PUBLIC_KEYFILE.pdf b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf
new file mode 100644 (file)
index 0000000..dfd48e9
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf differ
index dd6e48b..b5d68cf 100644 (file)
@@ -40,9 +40,6 @@ prefix, in order to avoid confusion with a nickname.
 
 When using a client certificate, you most likely also need to provide a
 private key with \fICURLOPT_SSLKEY(3)\fP.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSLCERT.html b/docs/libcurl/opts/CURLOPT_SSLCERT.html
new file mode 100644 (file)
index 0000000..d0a8950
--- /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_SSLCERT 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_SSLCERT - set SSL client certificate <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_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, 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><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_SSLCERT.pdf b/docs/libcurl/opts/CURLOPT_SSLCERT.pdf
new file mode 100644 (file)
index 0000000..bfd5555
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSLCERT.pdf differ
index d68362a..98df39d 100644 (file)
@@ -33,9 +33,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 "PEM"
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.html b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.html
new file mode 100644 (file)
index 0000000..5d44dcd
--- /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_SSLCERTTYPE 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_SSLCERTTYPE - specify type of the client SSL certificate <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_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&#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, 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><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_SSLCERTTYPE.pdf b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf
new file mode 100644 (file)
index 0000000..de80b1b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf differ
index c691a85..d0c48a4 100644 (file)
@@ -30,9 +30,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE.html b/docs/libcurl/opts/CURLOPT_SSLENGINE.html
new file mode 100644 (file)
index 0000000..fac92fd
--- /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>CURLOPT_SSLENGINE 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_SSLENGINE - set SSL engine identifier <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_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. <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">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<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>
diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE.pdf b/docs/libcurl/opts/CURLOPT_SSLENGINE.pdf
new file mode 100644 (file)
index 0000000..53c0f96
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSLENGINE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.html b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.html
new file mode 100644 (file)
index 0000000..e94aa3d
--- /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>CURLOPT_SSLENGINE_DEFAULT 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_SSLENGINE_DEFAULT - make SSL engine default <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_SSLENGINE_DEFAULT, long val); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</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 <a Class="emphasis" href="./CURLOPT_SSLENGINE.html">CURLOPT_SSLENGINE</a>. <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, 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">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>
diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf
new file mode 100644 (file)
index 0000000..917eddb
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf differ
index b8027c4..8bc8205 100644 (file)
@@ -35,9 +35,6 @@ changed with \fICURLOPT_SSLKEYTYPE(3)\fP.
 (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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSLKEY.html b/docs/libcurl/opts/CURLOPT_SSLKEY.html
new file mode 100644 (file)
index 0000000..dcac3bf
--- /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>CURLOPT_SSLKEY 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_SSLKEY - specify private keyfile for TLS and SSL client cert <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_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&#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, 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><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_SSLKEY.pdf b/docs/libcurl/opts/CURLOPT_SSLKEY.pdf
new file mode 100644 (file)
index 0000000..9ddb615
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSLKEY.pdf differ
index 2e04434..7616a3f 100644 (file)
@@ -35,9 +35,6 @@ The format "ENG" enables you to load the private key from a crypto engine. In
 this case \fICURLOPT_SSLKEY(3)\fP is used as an identifier passed to the
 engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE(3)\fP.
 \&"DER" format key file currently does not work because of a bug in OpenSSL.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 "PEM"
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.html b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.html
new file mode 100644 (file)
index 0000000..c0f230e
--- /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>CURLOPT_SSLKEYTYPE 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_SSLKEYTYPE - set type of the private key file <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_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, 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><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_SSLKEYTYPE.pdf b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf
new file mode 100644 (file)
index 0000000..35546f4
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf differ
index 77dfcd4..2f40e46 100644 (file)
@@ -48,8 +48,6 @@ TLSv1.0 (Added in 7.34.0)
 TLSv1.1 (Added in 7.34.0)
 .IP CURL_SSLVERSION_TLSv1_2
 TLSv1.2 (Added in 7.34.0)
-.IP CURL_SSLVERSION_TLSv1_3
-TLSv1.3 (Added in 7.52.0)
 .RE
 .SH DEFAULT
 CURL_SSLVERSION_DEFAULT
diff --git a/docs/libcurl/opts/CURLOPT_SSLVERSION.html b/docs/libcurl/opts/CURLOPT_SSLVERSION.html
new file mode 100644 (file)
index 0000000..e1bd845
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSLVERSION 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_SSLVERSION - set preferred TLS/SSL version <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_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: 
+<p class="level1">
+<p class="level0"><a name="CURLSSLVERSIONDEFAULT"></a><span class="nroffip">CURL_SSLVERSION_DEFAULT</span> 
+<p class="level1">The default action. This will attempt to figure out the remote SSL protocol version. 
+<p class="level0"><a name="CURLSSLVERSIONTLSv1"></a><span class="nroffip">CURL_SSLVERSION_TLSv1</span> 
+<p class="level1">TLSv1.x 
+<p class="level0"><a name="CURLSSLVERSIONSSLv2"></a><span class="nroffip">CURL_SSLVERSION_SSLv2</span> 
+<p class="level1">SSLv2 
+<p class="level0"><a name="CURLSSLVERSIONSSLv3"></a><span class="nroffip">CURL_SSLVERSION_SSLv3</span> 
+<p class="level1">SSLv3 
+<p class="level0"><a name="CURLSSLVERSIONTLSv10"></a><span class="nroffip">CURL_SSLVERSION_TLSv1_0</span> 
+<p class="level1">TLSv1.0 (Added in 7.34.0) 
+<p class="level0"><a name="CURLSSLVERSIONTLSv11"></a><span class="nroffip">CURL_SSLVERSION_TLSv1_1</span> 
+<p class="level1">TLSv1.1 (Added in 7.34.0) 
+<p class="level0"><a name="CURLSSLVERSIONTLSv12"></a><span class="nroffip">CURL_SSLVERSION_TLSv1_2</span> 
+<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, 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_SSLVERSION.pdf b/docs/libcurl/opts/CURLOPT_SSLVERSION.pdf
new file mode 100644 (file)
index 0000000..de96166
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSLVERSION.pdf differ
index ddf2c05..71833b5 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2016, 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
@@ -40,18 +40,16 @@ compile OpenSSL.
 
 You'll find more details about cipher lists on this URL:
 
- https://curl.haxx.se/docs/ssl-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
 this option then all known ciphers are disabled and only those passed in are
 enabled.
 
-For WolfSSL, valid examples of cipher lists include
-\'ECDHE-RSA-RC4-SHA\', 'AES256-SHA:AES256-SHA256', etc.
+You'll find more details about the NSS cipher lists on this URL:
 
-The application does not have to keep the string around after setting this
-option.
+ http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives
 .SH DEFAULT
 NULL, use internal default
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.html b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.html
new file mode 100644 (file)
index 0000000..090df66
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSL_CIPHER_LIST 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_CIPHER_LIST - specify ciphers to use for TLS <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_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;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;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, 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><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_CIPHER_LIST.pdf b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf
new file mode 100644 (file)
index 0000000..5eac8bc
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.html b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.html
new file mode 100644 (file)
index 0000000..e25c9f2
--- /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_CTX_DATA 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_CTX_DATA - custom pointer passed to ssl_ctx callback <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_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, 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 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><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_CTX_DATA.pdf b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf
new file mode 100644 (file)
index 0000000..ff7203e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.html b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.html
new file mode 100644 (file)
index 0000000..6fc4524
--- /dev/null
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSL_CTX_FUNCTION 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_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 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 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 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, 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><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_CTX_FUNCTION.pdf b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf
new file mode 100644 (file)
index 0000000..eebc063
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.html b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.html
new file mode 100644 (file)
index 0000000..bea4c30
--- /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_ENABLE_ALPN 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_ENABLE_ALPN - enable ALPN <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_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>
+<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.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><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_ENABLE_ALPN.pdf b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf
new file mode 100644 (file)
index 0000000..321aeb6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.html b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.html
new file mode 100644 (file)
index 0000000..e81c76d
--- /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_ENABLE_NPN 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_ENABLE_NPN - enable NPN <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_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>
+<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.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><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_ENABLE_NPN.pdf b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf
new file mode 100644 (file)
index 0000000..b4d26fb
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf differ
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..f5c4181
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.html b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.html
new file mode 100644 (file)
index 0000000..9491b4f
--- /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>CURLOPT_SSL_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_SSL_OPTIONS - set SSL behavior options <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_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> 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><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_OPTIONS.pdf b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf
new file mode 100644 (file)
index 0000000..faf0f88
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.html b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.html
new file mode 100644 (file)
index 0000000..7e6777a
--- /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>CURLOPT_SSL_SESSIONID_CACHE 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_SESSIONID_CACHE - enable/disable use of the SSL session-ID cache <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_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>
+<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.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><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_SESSIONID_CACHE.pdf b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf
new file mode 100644 (file)
index 0000000..1e07e16
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.html b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.html
new file mode 100644 (file)
index 0000000..40b8381
--- /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_SSL_VERIFYHOST 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_VERIFYHOST - verify the certificate's name against host <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_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. 
+<p class="level0">When negotiating TLS and SSL connections, the server sends a certificate indicating its identity. 
+<p class="level0">When <a Class="emphasis" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a> is 2, that certificate must indicate that the server is the server to which you meant to connect, or the connection fails. Simply put, it means it has to have the same name in the certificate as is in the URL you operate against. 
+<p class="level0">Curl considers the server the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the URL to which you told Curl to connect. 
+<p class="level0">When the <span Class="emphasis">verify</span> value is 1, <span Class="emphasis">curl_easy_setopt</span> will return an error and the option value will not be changed.  It was previously (in 7.28.0 and earlier) a debug option of some sorts, but it is no longer supported due to frequently leading to programmer mistakes. Future versions will stop returning an error for 1 and just treat 1 and 2 the same. 
+<p class="level0">When the <span Class="emphasis">verify</span> value is 0, the connection succeeds regardless of the names in the certificate. Use that ability with caution! 
+<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, 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><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_VERIFYHOST.pdf b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf
new file mode 100644 (file)
index 0000000..4fe09f6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf differ
index f7ff1b2..5a63481 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2017, 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
@@ -79,5 +79,3 @@ If built TLS enabled.
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
 .BR CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.html b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.html
new file mode 100644 (file)
index 0000000..df73b74
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSL_VERIFYPEER 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_VERIFYPEER - verify the peer's SSL certificate <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_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. 
+<p class="level0">When negotiating a TLS or SSL connection, the server sends a certificate indicating its identity.  Curl verifies whether the certificate is authentic, i.e. that you can trust that the server is who the certificate says it is. This trust is based on a chain of digital signatures, rooted in certification authority (CA) certificates you supply.  curl uses a default bundle of CA certificates (the path for that is determined at build time) and you can specify alternate certificates with the <a Class="emphasis" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a> option or the <a Class="emphasis" href="./CURLOPT_CAPATH.html">CURLOPT_CAPATH</a> option. 
+<p class="level0">When <a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> is enabled, and the verification fails to prove that the certificate is authentic, the connection fails.  When the option is zero, the peer certificate verification succeeds regardless. 
+<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, 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><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_VERIFYPEER.pdf b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf
new file mode 100644 (file)
index 0000000..333dd52
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf differ
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..6fbb525
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_STDERR.html b/docs/libcurl/opts/CURLOPT_STDERR.html
new file mode 100644 (file)
index 0000000..d4fe496
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_STDERR 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_STDERR - redirect stderr to another stream <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_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"><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><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_STDERR.pdf b/docs/libcurl/opts/CURLOPT_STDERR.pdf
new file mode 100644 (file)
index 0000000..f8d7315
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_STDERR.pdf differ
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..682c3fc
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.pdf differ
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..2caf052
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.pdf differ
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..e823c44
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.html b/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.html
new file mode 100644 (file)
index 0000000..1601005
--- /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_TCP_FASTOPEN 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_TCP_FASTOPEN - enable TCP Fast Open <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_TCP_FASTOPEN, 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">TCP Fast Open (RFC7413) is a mechanism that allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, saving up to one full round-trip time (RTT). <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">Added in 7.49.0. This option is currently only supported on Linux and  OS X El Capitan. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if fast open is supported by the operating system, 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_TCP_FASTOPEN.pdf b/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.pdf
new file mode 100644 (file)
index 0000000..8aa2615
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.html b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.html
new file mode 100644 (file)
index 0000000..015202d
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_TCP_KEEPALIVE 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_TCP_KEEPALIVE - enable TCP keep-alive probing <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_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"><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><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_TCP_KEEPALIVE.pdf b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf
new file mode 100644 (file)
index 0000000..1c1ede0
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf differ
index 4d587a9..f5f5762 100644 (file)
@@ -32,7 +32,7 @@ Pass a long. Sets the \fIdelay\fP, in seconds, that the operating system will
 wait while the connection is idle before sending keepalive probes. Not all
 operating systems support this option.
 .SH DEFAULT
-60
+?
 .SH PROTOCOLS
 All
 .SH EXAMPLE
diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.html b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.html
new file mode 100644 (file)
index 0000000..a1edda3
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_TCP_KEEPIDLE 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_TCP_KEEPIDLE - set TCP keep-alive idle time wait <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_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"><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><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_TCP_KEEPIDLE.pdf b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf
new file mode 100644 (file)
index 0000000..825a2b3
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf differ
index a755c05..f332a8f 100644 (file)
@@ -32,9 +32,7 @@ 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)
 .SH DEFAULT
-60
 .SH PROTOCOLS
-All
 .SH EXAMPLE
 .nf
 CURL *curl = curl_easy_init();
@@ -44,7 +42,7 @@ if(curl) {
   /* enable TCP keep-alive for this transfer */
   curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
 
-  /* set keep-alive idle time to 120 seconds */
+  /* keep-alive idle time to 120 seconds */
   curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
 
   /* interval time between keep-alive probes: 60 seconds */
diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.html b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.html
new file mode 100644 (file)
index 0000000..3bcf4fb
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_TCP_KEEPINTVL 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_TCP_KEEPINTVL - set TCP keep-alive interval <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_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"><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><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_TCP_KEEPINTVL.pdf b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf
new file mode 100644 (file)
index 0000000..9f33fdd
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TCP_NODELAY.html b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.html
new file mode 100644 (file)
index 0000000..b19ac98
--- /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_TCP_NODELAY 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_TCP_NODELAY - set the TCP_NODELAY option <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_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 set 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). 
+<p class="level0">Maximizing the amount of data sent per TCP segment is good because it amortizes the overhead of the send. However, in some cases small segments may need to be sent without delay. This is less efficient than sending larger amounts of data at a time, and can contribute to congestion on the network if overdone. <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">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">Always. The default was changed to 1 from 0 in 7.50.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_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>
diff --git a/docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf
new file mode 100644 (file)
index 0000000..eb83249
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.html b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.html
new file mode 100644 (file)
index 0000000..25f2923
--- /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_TELNETOPTIONS 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_TELNETOPTIONS - custom telnet options <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_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>
+<p class="level0">TELNET <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 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><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_TELNETOPTIONS.pdf b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf
new file mode 100644 (file)
index 0000000..84d8f2e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.html b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.html
new file mode 100644 (file)
index 0000000..237e4e7
--- /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_TFTP_BLKSIZE 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_BLKSIZE - TFTP block size <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_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>
+<p class="level0">TFTP <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"><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>
diff --git a/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf
new file mode 100644 (file)
index 0000000..ed03d6b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf differ
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..28908ef
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TIMECONDITION.html b/docs/libcurl/opts/CURLOPT_TIMECONDITION.html
new file mode 100644 (file)
index 0000000..2cc7d2e
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_TIMECONDITION 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_TIMECONDITION - select condition for a time 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_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"><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><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_TIMECONDITION.pdf b/docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf
new file mode 100644 (file)
index 0000000..d54b777
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT.html b/docs/libcurl/opts/CURLOPT_TIMEOUT.html
new file mode 100644 (file)
index 0000000..5f0fe62
--- /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_TIMEOUT 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_TIMEOUT - set maximum time the request is allowed to take <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_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. 
+<p class="level0">If both <a Class="emphasis" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a> and <a Class="emphasis" href="./CURLOPT_TIMEOUT_MS.html">CURLOPT_TIMEOUT_MS</a> are set, the value set last will be used. 
+<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"><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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT.pdf b/docs/libcurl/opts/CURLOPT_TIMEOUT.pdf
new file mode 100644 (file)
index 0000000..df3f23e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TIMEOUT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.html b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.html
new file mode 100644 (file)
index 0000000..503694a
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_TIMEOUT_MS 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_TIMEOUT_MS - set maximum time the request is allowed to take <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_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. 
+<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. 
+<p class="level0">If both <a Class="emphasis" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a> and <a Class="emphasis" href="./CURLOPT_TIMEOUT_MS.html">CURLOPT_TIMEOUT_MS</a> are set, the value set last will be used. 
+<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"><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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf
new file mode 100644 (file)
index 0000000..c97bcf1
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TIMEVALUE.html b/docs/libcurl/opts/CURLOPT_TIMEVALUE.html
new file mode 100644 (file)
index 0000000..0863394
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_TIMEVALUE 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_TIMEVALUE - set time value for 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_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"><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><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_TIMEVALUE.pdf b/docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf
new file mode 100644 (file)
index 0000000..ebb563d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf differ
index c6b6a74..78fad0e 100644 (file)
@@ -32,9 +32,6 @@ Pass a char * as parameter, which should point to the zero terminated password
 to use for the TLS authentication method specified with the
 \fICURLOPT_TLSAUTH_TYPE(3)\fP option. Requires that the
 \fICURLOPT_TLSAUTH_USERNAME(3)\fP option also be set.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.html b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.html
new file mode 100644 (file)
index 0000000..da60f3c
--- /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_TLSAUTH_PASSWORD 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_TLSAUTH_PASSWORD - password to use for TLS authentication <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_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>
+<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.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><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_TLSAUTH_PASSWORD.pdf b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf
new file mode 100644 (file)
index 0000000..aa4a1bd
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf differ
index 8620423..5655e7d 100644 (file)
@@ -37,9 +37,6 @@ 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 blank
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.html b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.html
new file mode 100644 (file)
index 0000000..df70349
--- /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_TLSAUTH_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">CURLOPT_TLSAUTH_TYPE - set TLS 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_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="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">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><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_TLSAUTH_TYPE.pdf b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf
new file mode 100644 (file)
index 0000000..43b2859
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf differ
index a9b46e3..5022e4e 100644 (file)
@@ -32,9 +32,6 @@ Pass a char * as parameter, which should point to the zero terminated username
 to use for the TLS authentication method specified with the
 \fICURLOPT_TLSAUTH_TYPE(3)\fP option. Requires that the
 \fICURLOPT_TLSAUTH_PASSWORD(3)\fP option also be set.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.html b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.html
new file mode 100644 (file)
index 0000000..f5873cb
--- /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_TLSAUTH_USERNAME 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_TLSAUTH_USERNAME - user name to use for TLS authentication <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_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>
+<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.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><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_TLSAUTH_USERNAME.pdf b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf
new file mode 100644 (file)
index 0000000..933f1b7
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.html b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.html
new file mode 100644 (file)
index 0000000..a852a68
--- /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>CURLOPT_TRANSFERTEXT 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_TRANSFERTEXT - request a text based transfer for FTP <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_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>
+<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">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><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_TRANSFERTEXT.pdf b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf
new file mode 100644 (file)
index 0000000..1bcfaf6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.html b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.html
new file mode 100644 (file)
index 0000000..a8f9390
--- /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_TRANSFER_ENCODING 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_TRANSFER_ENCODING - ask for HTTP Transfer Encoding <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_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. 
+<p class="level0">Transfer-Encoding differs slightly from the Content-Encoding you ask for with <a Class="emphasis" href="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a> in that a Transfer-Encoding is strictly meant to be for the transfer and thus MUST be decoded before the data arrives in the client. Traditionally, Transfer-Encoding has been much less used and supported by both HTTP clients and HTTP servers. <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.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><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_TRANSFER_ENCODING.pdf b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf
new file mode 100644 (file)
index 0000000..5805e51
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf differ
index 8cf4d24..299c3cc 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * 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
@@ -33,9 +33,9 @@ to \fIpath\fP. If \fIpath\fP 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.
 
-When enabled, curl will connect to the Unix domain socket instead of
+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.
+cURL does not need to resolve the DNS hostname in the URL.
 
 The maximum path length on Cygwin, Linux and Solaris is 107. On other platforms
 it might be even less.
@@ -46,9 +46,6 @@ are not supported. Proxy options such as
 .BR CURLOPT_PROXY "(3)
 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.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 Default is NULL, meaning that no Unix domain sockets are used.
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.html b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.html
new file mode 100644 (file)
index 0000000..83733fb
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_UNIX_SOCKET_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">CURLOPT_UNIX_SOCKET_PATH - set Unix domain 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_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">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 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 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><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_UNIX_SOCKET_PATH.pdf b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf
new file mode 100644 (file)
index 0000000..fe3748a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.html b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.html
new file mode 100644 (file)
index 0000000..daa98f1
--- /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>CURLOPT_UNRESTRICTED_AUTH 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_UNRESTRICTED_AUTH - send credentials to other hosts too <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_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>
+<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_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>
diff --git a/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf
new file mode 100644 (file)
index 0000000..a0623de
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_UPLOAD.html b/docs/libcurl/opts/CURLOPT_UPLOAD.html
new file mode 100644 (file)
index 0000000..7de44b8
--- /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>CURLOPT_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">CURLOPT_UPLOAD - enable data 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_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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_UPLOAD.pdf b/docs/libcurl/opts/CURLOPT_UPLOAD.pdf
new file mode 100644 (file)
index 0000000..cae4897
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_UPLOAD.pdf differ
index 879f183..a7d81df 100644 (file)
@@ -283,9 +283,6 @@ 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".
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 There is no default URL. If this option isn't set, no transfer can be
 performed.
diff --git a/docs/libcurl/opts/CURLOPT_URL.html b/docs/libcurl/opts/CURLOPT_URL.html
new file mode 100644 (file)
index 0000000..e9a87d2
--- /dev/null
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_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">CURLOPT_URL - provide the URL to use in the 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_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 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. 
+<p class="level0">The host part of the URL contains the address of the server that you want to connect to. This can be the fully qualified domain name of the server, the local network name of the machine on your network or the IP address of the server or machine represented by either an IPv4 or IPv6 address. For example: 
+<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"><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: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: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">
+<p class="level0"><a name="HTTP"></a><span class="nroffip">HTTP</span> 
+<p class="level1">The path part of a HTTP request specifies the file to retrieve and from what directory. If the directory is not specified then the web server's root directory is used. If the file is omitted then the default document will be retrieved for either the directory specified or the root directory. The exact resource returned for each URL is entirely dependent on the server's configuration. 
+<p class="level1"><a href="http://www.example.com">http://www.example.com</a> - This gets the main page from the web server. 
+<p class="level1"><a href="http://www.example.com/index.html">http://www.example.com/index.html</a> - This returns the main page by explicitly requesting it. 
+<p class="level1"><a href="http://www.example.com/contactus/">http://www.example.com/contactus/</a> - This returns the default document from the contactus directory. 
+<p class="level1">
+<p class="level0"><a name="FTP"></a><span class="nroffip">FTP</span> 
+<p class="level1">The path part of an FTP 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 directory is omitted then the directory listing for the root / home directory will be returned. 
+<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: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. 
+<p class="level1">smtp://mail.example.com - This connects to the mail server at example.com and sends your local computer's host name in the HELO / EHLO command. 
+<p class="level1">smtp://mail.example.com/client.example.com - This will send client.example.com in the HELO / EHLO command to the mail server at example.com. 
+<p class="level1">
+<p class="level0"><a name="POP3"></a><span class="nroffip">POP3</span> 
+<p class="level1">The path part of a POP3 request specifies the message ID to retrieve. If the ID is not specified then a list of waiting messages is returned instead. 
+<p class="level1">pop3://user:password@mail.example.com - This lists the available messages for the user 
+<p class="level1">pop3://user:password@mail.example.com/1 - This retrieves the first message for the user 
+<p class="level1">
+<p class="level0"><a name="IMAP"></a><span class="nroffip">IMAP</span> 
+<p class="level1">The path part of an IMAP request not only specifies the mailbox to list (Added in 7.30.0) or select, but can also be used to check the UIDVALIDITY of the mailbox, to specify the UID, SECTION (Added in 7.30.0) and PARTIAL octets (Added in 7.37.0) of the message to fetch and to specify what messages to search for (Added in 7.37.0). 
+<p class="level1">imap://user:password@mail.example.com - Performs a top level folder list 
+<p class="level1">imap://user:password@mail.example.com/INBOX - Performs a folder list on the user's inbox 
+<p class="level1">imap://user:password@mail.example.com/INBOX/;UID=1 - Selects the user's inbox and fetches message 1 
+<p class="level1">imap://user:password@mail.example.com/INBOX;UIDVALIDITY=50/;UID=2 - Selects the user's inbox, checks the UIDVALIDITY of the mailbox is 50 and fetches message 2 if it is 
+<p class="level1">imap://user:password@mail.example.com/INBOX/;UID=3/;SECTION=TEXT - Selects the user's inbox and fetches the text portion of message 3 
+<p class="level1">imap://user:password@mail.example.com/INBOX/;UID=4/;PARTIAL=0.1024 - Selects the user's inbox and fetches the first 1024 octets of message 4 
+<p class="level1">imap://user:password@mail.example.com/INBOX?NEW - Selects the user's inbox and checks for NEW messages 
+<p class="level1">imap://user:password@mail.example.com/INBOX?SUBJECT%20shadows - Selects the user's inbox and searches for messages containing "shadows" in the subject line 
+<p class="level1">For more information about the individual components of an IMAP URL please see <a href="http://www.ietf.org/rfc/rfc5092.txt">RFC 5092</a>. 
+<p class="level1">
+<p class="level0"><a name="SCP"></a><span class="nroffip">SCP</span> 
+<p class="level1">The path part of a SCP request specifies the file to retrieve and from what directory. The file part may not be omitted. The file is taken as an absolute path from the root directory on the server. To specify a path relative to the user's home directory on the server, prepend ~/ to the path portion.  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">scp://user@example.com/etc/issue - This specifies the file /etc/issue 
+<p class="level1">scp://example.com/~/my-file - This specifies the file my-file in the user's home directory on the server 
+<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">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. 
+<p class="level1">smb://server.example.com/files/issue - This specifies the file "issue" located in the root of the "files" share 
+<p class="level1">smb://server.example.com/files/ -T issue - This specifies the file "issue" will be uploaded to the root of the "files" share. 
+<p class="level1">
+<p class="level0"><a name="LDAP"></a><span class="nroffip">LDAP</span> 
+<p class="level1">The path part of a LDAP request can be used to specify the: Distinguished Name, Attributes, Scope, Filter and Extension for a LDAP search. Each field is separated by a question mark and when that field is not required an empty string with the question mark separator should be included. 
+<p class="level1">ldap://ldap.example.com/o=My%20Organisation - This will perform a LDAP search with the DN as My Organisation. 
+<p class="level1">ldap://ldap.example.com/o=My%20Organisation?postalAddress - This will perform the same search but will only return postalAddress attributes. 
+<p class="level1">ldap://ldap.example.com/?rootDomainNamingContext - This specifies an empty DN and requests information about the rootDomainNamingContext attribute for an Active Directory server. 
+<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 '&#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 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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_URL.pdf b/docs/libcurl/opts/CURLOPT_URL.pdf
new file mode 100644 (file)
index 0000000..1e51827
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_URL.pdf differ
index bf58f2b..c769e95 100644 (file)
@@ -32,9 +32,6 @@ Pass a pointer to a zero terminated string as parameter. It will be used to
 set the User-Agent: header in the HTTP request sent to the remote server. This
 can be used to fool servers or scripts. You can also set any custom header
 with \fICURLOPT_HTTPHEADER(3)\fP.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL, no User-Agent: header is used by default.
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_USERAGENT.html b/docs/libcurl/opts/CURLOPT_USERAGENT.html
new file mode 100644 (file)
index 0000000..52f7f97
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_USERAGENT 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_USERAGENT - set HTTP user-agent header <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_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"><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><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_USERAGENT.pdf b/docs/libcurl/opts/CURLOPT_USERAGENT.pdf
new file mode 100644 (file)
index 0000000..46fa31c
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_USERAGENT.pdf differ
index 1e4b90f..ec60010 100644 (file)
@@ -55,9 +55,6 @@ authentication as well.
 
 To specify the password and login options, along with the user name, use the
 \fICURLOPT_PASSWORD(3)\fP and \fICURLOPT_LOGIN_OPTIONS(3)\fP options.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 blank
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_USERNAME.html b/docs/libcurl/opts/CURLOPT_USERNAME.html
new file mode 100644 (file)
index 0000000..60e6ffa
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_USERNAME 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_USERNAME - user name to use in authentication <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_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="emphasis" 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. 
+<p class="level0">When using Kerberos V5 authentication with a Windows based server, you should include 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. 
+<p class="level0">When using NTLM, the user name can be specified simply as the user name without the domain name should the server be part of a single domain and forest. 
+<p class="level0">To include 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="level0">Some HTTP servers (on Windows) support inclusion of the domain for Basic authentication as well. 
+<p class="level0">To specify the password and login options, along with the user name, use the <a Class="emphasis" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a> and <a Class="emphasis" href="./CURLOPT_LOGIN_OPTIONS.html">CURLOPT_LOGIN_OPTIONS</a> options. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">blank <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.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>, <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>
diff --git a/docs/libcurl/opts/CURLOPT_USERNAME.pdf b/docs/libcurl/opts/CURLOPT_USERNAME.pdf
new file mode 100644 (file)
index 0000000..3ac6328
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_USERNAME.pdf differ
index ad57420..19404f6 100644 (file)
@@ -61,9 +61,6 @@ SMTP options.
 The user and password strings are not URL decoded, so there's no way to send
 in a user name containing a colon using this option. Use
 \fICURLOPT_USERNAME(3)\fP for that, or include it in the URL.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_USERPWD.html b/docs/libcurl/opts/CURLOPT_USERPWD.html
new file mode 100644 (file)
index 0000000..659c99a
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_USERPWD 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_USERPWD - user name and password to use in authentication <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_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. 
+<p class="level0">When using NTLM, the user name can be specified simply as the user name without the domain name should the server be part of a single domain and forest. 
+<p class="level0">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="level0">Some HTTP servers (on Windows) support inclusion of the domain for Basic authentication as well. 
+<p class="level0">When using HTTP and <a Class="emphasis" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>, libcurl might perform several requests to possibly different hosts. libcurl will only send this user and password information to hosts using the initial host name (unless <a Class="emphasis" href="./CURLOPT_UNRESTRICTED_AUTH.html">CURLOPT_UNRESTRICTED_AUTH</a> is set), so if libcurl follows locations to other hosts it will not send the user and password to those. This is enforced to prevent accidental information leakage. 
+<p class="level0">Use <a Class="emphasis" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a> to specify the authentication method for HTTP based connections or <a Class="emphasis" href="./CURLOPT_LOGIN_OPTIONS.html">CURLOPT_LOGIN_OPTIONS</a> to control IMAP, POP3 and SMTP options. 
+<p class="level0">The user and password strings are not URL decoded, so there's no way to send in a user name containing a colon using this option. Use <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> for that, or include it in the URL. <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">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">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><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_USERPWD.pdf b/docs/libcurl/opts/CURLOPT_USERPWD.pdf
new file mode 100644 (file)
index 0000000..6fcd452
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_USERPWD.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_USE_SSL.html b/docs/libcurl/opts/CURLOPT_USE_SSL.html
new file mode 100644 (file)
index 0000000..639be8d
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_USE_SSL 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_USE_SSL - request using SSL / TLS for the 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_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. 
+<p class="level0">This is for enabling SSL/TLS when you use FTP, SMTP, POP3, IMAP etc. 
+<p class="level0"><a name="CURLUSESSLNONE"></a><span class="nroffip">CURLUSESSL_NONE</span> 
+<p class="level1">Don't attempt to use SSL. 
+<p class="level0"><a name="CURLUSESSLTRY"></a><span class="nroffip">CURLUSESSL_TRY</span> 
+<p class="level1">Try using SSL, proceed as normal otherwise. 
+<p class="level0"><a name="CURLUSESSLCONTROL"></a><span class="nroffip">CURLUSESSL_CONTROL</span> 
+<p class="level1">Require SSL for the control connection or fail with <span Class="emphasis">CURLE_USE_SSL_FAILED</span>. 
+<p class="level0"><a name="CURLUSESSLALL"></a><span class="nroffip">CURLUSESSL_ALL</span> 
+<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 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><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_USE_SSL.pdf b/docs/libcurl/opts/CURLOPT_USE_SSL.pdf
new file mode 100644 (file)
index 0000000..8dac213
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_USE_SSL.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_VERBOSE.html b/docs/libcurl/opts/CURLOPT_VERBOSE.html
new file mode 100644 (file)
index 0000000..58d5e94
--- /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_VERBOSE 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_VERBOSE - set verbose mode on/off <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_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 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><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_VERBOSE.pdf b/docs/libcurl/opts/CURLOPT_VERBOSE.pdf
new file mode 100644 (file)
index 0000000..7ba595f
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_VERBOSE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.html b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.html
new file mode 100644 (file)
index 0000000..56c8866
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_WILDCARDMATCH 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_WILDCARDMATCH - enable directory wildcard transfers <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_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. 
+<p class="level0">A brief introduction of its syntax follows: 
+<p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip">* - ASTERISK</span> 
+<p class="level1"><a href="ftp://example.com/some/path/">ftp://example.com/some/path/</a><span Class="bold">*.txt</span> (for all txt's from the root directory) 
+<p class="level0">
+<p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip">? - QUESTION MARK</span> 
+<p class="level1">Question mark matches any (exactly one) character. 
+<p class="level1"><a href="ftp://example.com/some/path/">ftp://example.com/some/path/</a><span Class="bold">photo?.jpeg</span> 
+<p class="level0">
+<p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip">[ - BRACKET EXPRESSION</span> 
+<p class="level1">The left bracket opens a bracket expression. The question mark and asterisk have no special meaning in a bracket expression. Each bracket expression ends by the right bracket and matches exactly one character. Some examples follow: 
+<p class="level1"><span Class="bold">[a-zA-Z0-9]</span> or <span Class="bold">[f-gF-G]</span> - character interval 
+<p class="level1"><span Class="bold">[abc]</span> - character enumeration 
+<p class="level1"><span Class="bold">[^abc]</span> or <span Class="bold">[!abc]</span> - negation 
+<p class="level1"><a class="bold" href="#">[[:</a><span Class="emphasis">name</span><a class="bold" href="#">:]]</a> class expression. Supported classes are <span Class="bold">alnum</span>,<span Class="bold">lower</span>, <span Class="bold">space</span>, <span Class="bold">alpha</span>, <span Class="bold">digit</span>, <span Class="bold">print</span>, <span Class="bold">upper</span>, <span Class="bold">blank</span>, <span Class="bold">graph</span>, <span Class="bold">xdigit</span>. 
+<p class="level1"><span Class="bold">[][-!^]</span> - special case - matches only '-', ']', '[', '!' or '^'. These characters have no special purpose. 
+<p class="level1"><a class="bold" href="#">[\[\]\\]</a> - escape syntax. Matches '[', ']' or '&acute;. 
+<p class="level1">Using the rules above, a file name pattern can be constructed: 
+<p class="level1"><a href="ftp://example.com/some/path/">ftp://example.com/some/path/</a><span Class="bold">[a-z[:upper:]\\].jpeg</span> 
+<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="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><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_WILDCARDMATCH.pdf b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf
new file mode 100644 (file)
index 0000000..e6fbe09
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_WRITEDATA.html b/docs/libcurl/opts/CURLOPT_WRITEDATA.html
new file mode 100644 (file)
index 0000000..c147ef0
--- /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_WRITEDATA 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_WRITEDATA - custom pointer passed to the write callback <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_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 <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><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_WRITEDATA.pdf b/docs/libcurl/opts/CURLOPT_WRITEDATA.pdf
new file mode 100644 (file)
index 0000000..5a7a276
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_WRITEDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.html b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.html
new file mode 100644 (file)
index 0000000..3acb7e6
--- /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>CURLOPT_WRITEFUNCTION 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_WRITEFUNCTION - set callback for writing received data <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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>. 
+<p class="level0">The callback function will be passed as much data as possible in all invokes, but you must not make any assumptions. It may be one byte, it may be thousands. The maximum amount of body data that will be passed to the write callback is defined in the curl.h header file: <span Class="emphasis">CURL_MAX_WRITE_SIZE</span> (the usual default is 16K). If <a Class="emphasis" href="./CURLOPT_HEADER.html">CURLOPT_HEADER</a> is enabled, which makes header data get passed to the write callback, you can get up to <span Class="emphasis">CURL_MAX_HTTP_HEADER</span> bytes of header data passed into it. This usually means 100K. 
+<p class="level0">This function may be called with zero bytes data if the transferred file is empty. 
+<p class="level0">The data passed to this function will not be zero terminated! 
+<p class="level0">Set the <span Class="emphasis">userdata</span> argument with the <a Class="emphasis" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a> option. 
+<p class="level0">Your callback should return the number of bytes actually taken care of. If that amount differs from the amount passed to your callback function, it'll signal an error condition to the library. This will cause the transfer to get aborted and the libcurl function used will return <span Class="emphasis">CURLE_WRITE_ERROR</span>. 
+<p class="level0">If your callback function returns CURL_WRITEFUNC_PAUSE it will cause this transfer to become paused.  See <span Class="emphasis">curl_easy_pause(3)</span> for further details. 
+<p class="level0">Set this option to NULL to get the internal default function used instead of your callback. The internal default function will write the data to the FILE * given with <a Class="emphasis" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">libcurl will use 'fwrite' as a callback by default. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<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="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>
diff --git a/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf
new file mode 100644 (file)
index 0000000..6c013ab
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_XFERINFODATA.html b/docs/libcurl/opts/CURLOPT_XFERINFODATA.html
new file mode 100644 (file)
index 0000000..8946e15
--- /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>CURLOPT_XFERINFODATA 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_XFERINFODATA - custom pointer passed to the progress callback <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_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="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><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_XFERINFODATA.pdf b/docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf
new file mode 100644 (file)
index 0000000..6a1f67d
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.html b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.html
new file mode 100644 (file)
index 0000000..a5a2e58
--- /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>CURLOPT_XFERINFOFUNCTION 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_XFERINFOFUNCTION - callback to progress meter function <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<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. 
+<p class="level0">This function gets called by libcurl instead of its internal equivalent with a frequent interval. While data is being transferred it will be called very frequently, and during slow periods like when nothing is being transferred it can slow down to about one call per second. 
+<p class="level0"><span Class="emphasis">clientp</span> is the pointer set with <a Class="emphasis" href="./CURLOPT_XFERINFODATA.html">CURLOPT_XFERINFODATA</a>, it is not used by libcurl but is only passed along from the application to the callback. 
+<p class="level0">The callback gets told how much data libcurl will transfer and has transferred, in number of bytes. <span Class="emphasis">dltotal</span> is the total number of bytes libcurl expects to download in this transfer. <span Class="emphasis">dlnow</span> is the number of bytes downloaded so far. <span Class="emphasis">ultotal</span> is the total number of bytes libcurl expects to upload in this transfer. <span Class="emphasis">ulnow</span> is the number of bytes uploaded so far. 
+<p class="level0">Unknown/unused argument values passed to the callback will be set to zero (like if you only download data, the upload size will remain 0). Many times the callback will be called one or more times first, before it knows the data sizes so a program must be made to handle that. 
+<p class="level0">Returning a non-zero value from this callback will cause libcurl to abort the transfer and return <span Class="emphasis">CURLE_ABORTED_BY_CALLBACK</span>. 
+<p class="level0">If you transfer data with the multi interface, this function will not be called during periods of idleness unless you call the appropriate libcurl function that performs transfers. 
+<p class="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="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><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_XFERINFOFUNCTION.pdf b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf
new file mode 100644 (file)
index 0000000..70ae49b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf differ
index f5c59ac..b6c1fee 100644 (file)
@@ -34,9 +34,6 @@ the OAuth 2.0 Authorization Framework.
 
 Note: The user name used to generate the Bearer Token should be supplied via
 the \fICURLOPT_USERNAME(3)\fP option.
-
-The application does not have to keep the string around after setting this
-option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
diff --git a/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.html b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.html
new file mode 100644 (file)
index 0000000..e502102
--- /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>CURLOPT_XOAUTH2_BEARER 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_XOAUTH2_BEARER - specify OAuth 2.0 access token <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_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>
+<p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">IMAP, POP3 and SMTP <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.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><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_XOAUTH2_BEARER.pdf b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf
new file mode 100644 (file)
index 0000000..a6585bd
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf differ
index 80f28ca..a3fc064 100644 (file)
@@ -49,9 +49,7 @@ man_MANS =                                      \
  CURLINFO_PRIMARY_IP.3                          \
  CURLINFO_PRIMARY_PORT.3                        \
  CURLINFO_PRIVATE.3                             \
- CURLINFO_PROTOCOL.3                            \
  CURLINFO_PROXYAUTH_AVAIL.3                     \
- CURLINFO_PROXY_SSL_VERIFYRESULT.3              \
  CURLINFO_REDIRECT_COUNT.3                      \
  CURLINFO_REDIRECT_TIME.3                       \
  CURLINFO_REDIRECT_URL.3                        \
@@ -61,7 +59,6 @@ man_MANS =                                      \
  CURLINFO_RTSP_CSEQ_RECV.3                      \
  CURLINFO_RTSP_SERVER_CSEQ.3                    \
  CURLINFO_RTSP_SESSION_ID.3                     \
- CURLINFO_SCHEME.3                              \
  CURLINFO_SIZE_DOWNLOAD.3                       \
  CURLINFO_SIZE_UPLOAD.3                         \
  CURLINFO_SPEED_DOWNLOAD.3                      \
@@ -87,7 +84,6 @@ man_MANS =                                      \
  CURLMOPT_SOCKETFUNCTION.3                      \
  CURLMOPT_TIMERDATA.3                           \
  CURLMOPT_TIMERFUNCTION.3                       \
- CURLOPT_ABSTRACT_UNIX_SOCKET.3                 \
  CURLOPT_ACCEPTTIMEOUT_MS.3                     \
  CURLOPT_ACCEPT_ENCODING.3                      \
  CURLOPT_ADDRESS_SCOPE.3                        \
@@ -174,7 +170,6 @@ man_MANS =                                      \
  CURLOPT_IOCTLFUNCTION.3                        \
  CURLOPT_IPRESOLVE.3                            \
  CURLOPT_ISSUERCERT.3                           \
- CURLOPT_KEEP_SENDING_ON_ERROR.3                \
  CURLOPT_KEYPASSWD.3                            \
  CURLOPT_KRBLEVEL.3                             \
  CURLOPT_LOCALPORT.3                            \
@@ -213,7 +208,6 @@ man_MANS =                                      \
  CURLOPT_POSTQUOTE.3                            \
  CURLOPT_POSTREDIR.3                            \
  CURLOPT_PREQUOTE.3                             \
- CURLOPT_PRE_PROXY.3                            \
  CURLOPT_PRIVATE.3                              \
  CURLOPT_PROGRESSDATA.3                         \
  CURLOPT_PROGRESSFUNCTION.3                     \
@@ -226,24 +220,7 @@ man_MANS =                                      \
  CURLOPT_PROXYTYPE.3                            \
  CURLOPT_PROXYUSERNAME.3                        \
  CURLOPT_PROXYUSERPWD.3                         \
- CURLOPT_PROXY_CAINFO.3                         \
- CURLOPT_PROXY_CAPATH.3                         \
- CURLOPT_PROXY_CRLFILE.3                        \
- CURLOPT_PROXY_KEYPASSWD.3                      \
- CURLOPT_PROXY_PINNEDPUBLICKEY.3                \
  CURLOPT_PROXY_SERVICE_NAME.3                   \
- CURLOPT_PROXY_SSLCERT.3                        \
- CURLOPT_PROXY_SSLCERTTYPE.3                    \
- CURLOPT_PROXY_SSLKEY.3                         \
- CURLOPT_PROXY_SSLKEYTYPE.3                     \
- CURLOPT_PROXY_SSLVERSION.3                     \
- CURLOPT_PROXY_SSL_CIPHER_LIST.3                \
- CURLOPT_PROXY_SSL_OPTIONS.3                    \
- CURLOPT_PROXY_SSL_VERIFYHOST.3                 \
- CURLOPT_PROXY_SSL_VERIFYPEER.3                 \
- CURLOPT_PROXY_TLSAUTH_PASSWORD.3               \
- CURLOPT_PROXY_TLSAUTH_TYPE.3                   \
- CURLOPT_PROXY_TLSAUTH_USERNAME.3               \
  CURLOPT_PROXY_TRANSFER_MODE.3                  \
  CURLOPT_PUT.3                                  \
  CURLOPT_QUOTE.3                                \
@@ -349,7 +326,6 @@ HTMLPAGES =                                     \
  CURLINFO_HEADER_SIZE.html                      \
  CURLINFO_HTTPAUTH_AVAIL.html                   \
  CURLINFO_HTTP_CONNECTCODE.html                 \
- CURLINFO_HTTP_VERSION.html                     \
  CURLINFO_LASTSOCKET.html                       \
  CURLINFO_LOCAL_IP.html                         \
  CURLINFO_LOCAL_PORT.html                       \
@@ -360,9 +336,7 @@ HTMLPAGES =                                     \
  CURLINFO_PRIMARY_IP.html                       \
  CURLINFO_PRIMARY_PORT.html                     \
  CURLINFO_PRIVATE.html                          \
- CURLINFO_PROTOCOL.html                         \
  CURLINFO_PROXYAUTH_AVAIL.html                  \
- CURLINFO_PROXY_SSL_VERIFYRESULT.html           \
  CURLINFO_REDIRECT_COUNT.html                   \
  CURLINFO_REDIRECT_TIME.html                    \
  CURLINFO_REDIRECT_URL.html                     \
@@ -372,7 +346,6 @@ HTMLPAGES =                                     \
  CURLINFO_RTSP_CSEQ_RECV.html                   \
  CURLINFO_RTSP_SERVER_CSEQ.html                 \
  CURLINFO_RTSP_SESSION_ID.html                  \
- CURLINFO_SCHEME.html                           \
  CURLINFO_SIZE_DOWNLOAD.html                    \
  CURLINFO_SIZE_UPLOAD.html                      \
  CURLINFO_SPEED_DOWNLOAD.html                   \
@@ -398,7 +371,6 @@ HTMLPAGES =                                     \
  CURLMOPT_SOCKETFUNCTION.html                   \
  CURLMOPT_TIMERDATA.html                        \
  CURLMOPT_TIMERFUNCTION.html                    \
- CURLOPT_ABSTRACT_UNIX_SOCKET.html              \
  CURLOPT_ACCEPTTIMEOUT_MS.html                  \
  CURLOPT_ACCEPT_ENCODING.html                   \
  CURLOPT_ADDRESS_SCOPE.html                     \
@@ -485,7 +457,6 @@ HTMLPAGES =                                     \
  CURLOPT_IOCTLFUNCTION.html                     \
  CURLOPT_IPRESOLVE.html                         \
  CURLOPT_ISSUERCERT.html                        \
- CURLOPT_KEEP_SENDING_ON_ERROR.html             \
  CURLOPT_KEYPASSWD.html                         \
  CURLOPT_KRBLEVEL.html                          \
  CURLOPT_LOCALPORT.html                         \
@@ -524,7 +495,6 @@ HTMLPAGES =                                     \
  CURLOPT_POSTQUOTE.html                         \
  CURLOPT_POSTREDIR.html                         \
  CURLOPT_PREQUOTE.html                          \
- CURLOPT_PRE_PROXY.html                         \
  CURLOPT_PRIVATE.html                           \
  CURLOPT_PROGRESSDATA.html                      \
  CURLOPT_PROGRESSFUNCTION.html                  \
@@ -537,24 +507,7 @@ HTMLPAGES =                                     \
  CURLOPT_PROXYTYPE.html                         \
  CURLOPT_PROXYUSERNAME.html                     \
  CURLOPT_PROXYUSERPWD.html                      \
- CURLOPT_PROXY_CAINFO.html                      \
- CURLOPT_PROXY_CAPATH.html                      \
- CURLOPT_PROXY_CRLFILE.html                     \
- CURLOPT_PROXY_KEYPASSWD.html                   \
- CURLOPT_PROXY_PINNEDPUBLICKEY.html             \
  CURLOPT_PROXY_SERVICE_NAME.html                \
- CURLOPT_PROXY_SSLCERT.html                     \
- CURLOPT_PROXY_SSLCERTTYPE.html                 \
- CURLOPT_PROXY_SSLKEY.html                      \
- CURLOPT_PROXY_SSLKEYTYPE.html                  \
- CURLOPT_PROXY_SSLVERSION.html                  \
- CURLOPT_PROXY_SSL_CIPHER_LIST.html             \
- CURLOPT_PROXY_SSL_OPTIONS.html                 \
- CURLOPT_PROXY_SSL_VERIFYHOST.html              \
- CURLOPT_PROXY_SSL_VERIFYPEER.html              \
- CURLOPT_PROXY_TLSAUTH_PASSWORD.html            \
- CURLOPT_PROXY_TLSAUTH_TYPE.html                \
- CURLOPT_PROXY_TLSAUTH_USERNAME.html            \
  CURLOPT_PROXY_TRANSFER_MODE.html               \
  CURLOPT_PUT.html                               \
  CURLOPT_QUOTE.html                             \
@@ -660,7 +613,6 @@ PDFPAGES =                                      \
  CURLINFO_HEADER_SIZE.pdf                       \
  CURLINFO_HTTPAUTH_AVAIL.pdf                    \
  CURLINFO_HTTP_CONNECTCODE.pdf                  \
- CURLINFO_HTTP_VERSION.pdf                      \
  CURLINFO_LASTSOCKET.pdf                        \
  CURLINFO_LOCAL_IP.pdf                          \
  CURLINFO_LOCAL_PORT.pdf                        \
@@ -671,9 +623,7 @@ PDFPAGES =                                      \
  CURLINFO_PRIMARY_IP.pdf                        \
  CURLINFO_PRIMARY_PORT.pdf                      \
  CURLINFO_PRIVATE.pdf                           \
- CURLINFO_PROTOCOL.pdf                          \
  CURLINFO_PROXYAUTH_AVAIL.pdf                   \
- CURLINFO_PROXY_SSL_VERIFYRESULT.pdf            \
  CURLINFO_REDIRECT_COUNT.pdf                    \
  CURLINFO_REDIRECT_TIME.pdf                     \
  CURLINFO_REDIRECT_URL.pdf                      \
@@ -683,7 +633,6 @@ PDFPAGES =                                      \
  CURLINFO_RTSP_CSEQ_RECV.pdf                    \
  CURLINFO_RTSP_SERVER_CSEQ.pdf                  \
  CURLINFO_RTSP_SESSION_ID.pdf                   \
- CURLINFO_SCHEME.pdf                            \
  CURLINFO_SIZE_DOWNLOAD.pdf                     \
  CURLINFO_SIZE_UPLOAD.pdf                       \
  CURLINFO_SPEED_DOWNLOAD.pdf                    \
@@ -709,7 +658,6 @@ PDFPAGES =                                      \
  CURLMOPT_SOCKETFUNCTION.pdf                    \
  CURLMOPT_TIMERDATA.pdf                         \
  CURLMOPT_TIMERFUNCTION.pdf                     \
- CURLOPT_ABSTRACT_UNIX_SOCKET.pdf               \
  CURLOPT_ACCEPTTIMEOUT_MS.pdf                   \
  CURLOPT_ACCEPT_ENCODING.pdf                    \
  CURLOPT_ADDRESS_SCOPE.pdf                      \
@@ -796,7 +744,6 @@ PDFPAGES =                                      \
  CURLOPT_IOCTLFUNCTION.pdf                      \
  CURLOPT_IPRESOLVE.pdf                          \
  CURLOPT_ISSUERCERT.pdf                         \
- CURLOPT_KEEP_SENDING_ON_ERROR.pdf              \
  CURLOPT_KEYPASSWD.pdf                          \
  CURLOPT_KRBLEVEL.pdf                           \
  CURLOPT_LOCALPORT.pdf                          \
@@ -835,7 +782,6 @@ PDFPAGES =                                      \
  CURLOPT_POSTQUOTE.pdf                          \
  CURLOPT_POSTREDIR.pdf                          \
  CURLOPT_PREQUOTE.pdf                           \
- CURLOPT_PRE_PROXY.pdf                          \
  CURLOPT_PRIVATE.pdf                            \
  CURLOPT_PROGRESSDATA.pdf                       \
  CURLOPT_PROGRESSFUNCTION.pdf                   \
@@ -848,24 +794,7 @@ PDFPAGES =                                      \
  CURLOPT_PROXYTYPE.pdf                          \
  CURLOPT_PROXYUSERNAME.pdf                      \
  CURLOPT_PROXYUSERPWD.pdf                       \
- CURLOPT_PROXY_CAINFO.pdf                       \
- CURLOPT_PROXY_CAPATH.pdf                       \
- CURLOPT_PROXY_CRLFILE.pdf                      \
- CURLOPT_PROXY_KEYPASSWD.pdf                    \
- CURLOPT_PROXY_PINNEDPUBLICKEY.pdf              \
  CURLOPT_PROXY_SERVICE_NAME.pdf                 \
- CURLOPT_PROXY_SSLCERT.pdf                      \
- CURLOPT_PROXY_SSLCERTTYPE.pdf                  \
- CURLOPT_PROXY_SSLKEY.pdf                       \
- CURLOPT_PROXY_SSLKEYTYPE.pdf                   \
- CURLOPT_PROXY_SSLVERSION.pdf                   \
- CURLOPT_PROXY_SSL_CIPHER_LIST.pdf              \
- CURLOPT_PROXY_SSL_OPTIONS.pdf                  \
- CURLOPT_PROXY_SSL_VERIFYHOST.pdf               \
- CURLOPT_PROXY_SSL_VERIFYPEER.pdf               \
- CURLOPT_PROXY_TLSAUTH_PASSWORD.pdf             \
- CURLOPT_PROXY_TLSAUTH_TYPE.pdf                 \
- CURLOPT_PROXY_TLSAUTH_USERNAME.pdf             \
  CURLOPT_PROXY_TRANSFER_MODE.pdf                \
  CURLOPT_PUT.pdf                                \
  CURLOPT_QUOTE.pdf                              \
@@ -957,7 +886,7 @@ PDFPAGES =                                      \
 
 CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
 
-EXTRA_DIST = $(man_MANS)
+EXTRA_DIST = $(man_MANS) $(HTMLPAGES) $(PDFPAGES)
 MAN2HTML= roffit --mandir=. $< >$@
 
 SUFFIXES = .3 .html
@@ -978,9 +907,3 @@ pdf: $(PDFPAGES)
 
 mancheck:
        @cd $(top_srcdir)/docs/libcurl/opts && ls `awk -F, '!/OBSOLETE/ && /^  CINIT/ { a=substr($$1, 9); print "CURLOPT_" a ".3"}' $(top_srcdir)/include/curl/curl.h`
-       rm -f in_temp
-       @(for a in $(man_MANS); do echo $$a >>in_temp; done)
-       sort in_temp > in_makefile
-       ls CURL*.3 > in_directory
-       -diff -u in_makefile in_directory
-       rm in_temp in_directory in_makefile
index 65db42e..ab461ed 100644 (file)
@@ -408,9 +408,7 @@ man_MANS = \
  CURLINFO_PRIMARY_IP.3                          \
  CURLINFO_PRIMARY_PORT.3                        \
  CURLINFO_PRIVATE.3                             \
- CURLINFO_PROTOCOL.3                            \
  CURLINFO_PROXYAUTH_AVAIL.3                     \
- CURLINFO_PROXY_SSL_VERIFYRESULT.3              \
  CURLINFO_REDIRECT_COUNT.3                      \
  CURLINFO_REDIRECT_TIME.3                       \
  CURLINFO_REDIRECT_URL.3                        \
@@ -420,7 +418,6 @@ man_MANS = \
  CURLINFO_RTSP_CSEQ_RECV.3                      \
  CURLINFO_RTSP_SERVER_CSEQ.3                    \
  CURLINFO_RTSP_SESSION_ID.3                     \
- CURLINFO_SCHEME.3                              \
  CURLINFO_SIZE_DOWNLOAD.3                       \
  CURLINFO_SIZE_UPLOAD.3                         \
  CURLINFO_SPEED_DOWNLOAD.3                      \
@@ -446,7 +443,6 @@ man_MANS = \
  CURLMOPT_SOCKETFUNCTION.3                      \
  CURLMOPT_TIMERDATA.3                           \
  CURLMOPT_TIMERFUNCTION.3                       \
- CURLOPT_ABSTRACT_UNIX_SOCKET.3                 \
  CURLOPT_ACCEPTTIMEOUT_MS.3                     \
  CURLOPT_ACCEPT_ENCODING.3                      \
  CURLOPT_ADDRESS_SCOPE.3                        \
@@ -533,7 +529,6 @@ man_MANS = \
  CURLOPT_IOCTLFUNCTION.3                        \
  CURLOPT_IPRESOLVE.3                            \
  CURLOPT_ISSUERCERT.3                           \
- CURLOPT_KEEP_SENDING_ON_ERROR.3                \
  CURLOPT_KEYPASSWD.3                            \
  CURLOPT_KRBLEVEL.3                             \
  CURLOPT_LOCALPORT.3                            \
@@ -572,7 +567,6 @@ man_MANS = \
  CURLOPT_POSTQUOTE.3                            \
  CURLOPT_POSTREDIR.3                            \
  CURLOPT_PREQUOTE.3                             \
- CURLOPT_PRE_PROXY.3                            \
  CURLOPT_PRIVATE.3                              \
  CURLOPT_PROGRESSDATA.3                         \
  CURLOPT_PROGRESSFUNCTION.3                     \
@@ -585,24 +579,7 @@ man_MANS = \
  CURLOPT_PROXYTYPE.3                            \
  CURLOPT_PROXYUSERNAME.3                        \
  CURLOPT_PROXYUSERPWD.3                         \
- CURLOPT_PROXY_CAINFO.3                         \
- CURLOPT_PROXY_CAPATH.3                         \
- CURLOPT_PROXY_CRLFILE.3                        \
- CURLOPT_PROXY_KEYPASSWD.3                      \
- CURLOPT_PROXY_PINNEDPUBLICKEY.3                \
  CURLOPT_PROXY_SERVICE_NAME.3                   \
- CURLOPT_PROXY_SSLCERT.3                        \
- CURLOPT_PROXY_SSLCERTTYPE.3                    \
- CURLOPT_PROXY_SSLKEY.3                         \
- CURLOPT_PROXY_SSLKEYTYPE.3                     \
- CURLOPT_PROXY_SSLVERSION.3                     \
- CURLOPT_PROXY_SSL_CIPHER_LIST.3                \
- CURLOPT_PROXY_SSL_OPTIONS.3                    \
- CURLOPT_PROXY_SSL_VERIFYHOST.3                 \
- CURLOPT_PROXY_SSL_VERIFYPEER.3                 \
- CURLOPT_PROXY_TLSAUTH_PASSWORD.3               \
- CURLOPT_PROXY_TLSAUTH_TYPE.3                   \
- CURLOPT_PROXY_TLSAUTH_USERNAME.3               \
  CURLOPT_PROXY_TRANSFER_MODE.3                  \
  CURLOPT_PUT.3                                  \
  CURLOPT_QUOTE.3                                \
@@ -708,7 +685,6 @@ HTMLPAGES = \
  CURLINFO_HEADER_SIZE.html                      \
  CURLINFO_HTTPAUTH_AVAIL.html                   \
  CURLINFO_HTTP_CONNECTCODE.html                 \
- CURLINFO_HTTP_VERSION.html                     \
  CURLINFO_LASTSOCKET.html                       \
  CURLINFO_LOCAL_IP.html                         \
  CURLINFO_LOCAL_PORT.html                       \
@@ -719,9 +695,7 @@ HTMLPAGES = \
  CURLINFO_PRIMARY_IP.html                       \
  CURLINFO_PRIMARY_PORT.html                     \
  CURLINFO_PRIVATE.html                          \
- CURLINFO_PROTOCOL.html                         \
  CURLINFO_PROXYAUTH_AVAIL.html                  \
- CURLINFO_PROXY_SSL_VERIFYRESULT.html           \
  CURLINFO_REDIRECT_COUNT.html                   \
  CURLINFO_REDIRECT_TIME.html                    \
  CURLINFO_REDIRECT_URL.html                     \
@@ -731,7 +705,6 @@ HTMLPAGES = \
  CURLINFO_RTSP_CSEQ_RECV.html                   \
  CURLINFO_RTSP_SERVER_CSEQ.html                 \
  CURLINFO_RTSP_SESSION_ID.html                  \
- CURLINFO_SCHEME.html                           \
  CURLINFO_SIZE_DOWNLOAD.html                    \
  CURLINFO_SIZE_UPLOAD.html                      \
  CURLINFO_SPEED_DOWNLOAD.html                   \
@@ -757,7 +730,6 @@ HTMLPAGES = \
  CURLMOPT_SOCKETFUNCTION.html                   \
  CURLMOPT_TIMERDATA.html                        \
  CURLMOPT_TIMERFUNCTION.html                    \
- CURLOPT_ABSTRACT_UNIX_SOCKET.html              \
  CURLOPT_ACCEPTTIMEOUT_MS.html                  \
  CURLOPT_ACCEPT_ENCODING.html                   \
  CURLOPT_ADDRESS_SCOPE.html                     \
@@ -844,7 +816,6 @@ HTMLPAGES = \
  CURLOPT_IOCTLFUNCTION.html                     \
  CURLOPT_IPRESOLVE.html                         \
  CURLOPT_ISSUERCERT.html                        \
- CURLOPT_KEEP_SENDING_ON_ERROR.html             \
  CURLOPT_KEYPASSWD.html                         \
  CURLOPT_KRBLEVEL.html                          \
  CURLOPT_LOCALPORT.html                         \
@@ -883,7 +854,6 @@ HTMLPAGES = \
  CURLOPT_POSTQUOTE.html                         \
  CURLOPT_POSTREDIR.html                         \
  CURLOPT_PREQUOTE.html                          \
- CURLOPT_PRE_PROXY.html                         \
  CURLOPT_PRIVATE.html                           \
  CURLOPT_PROGRESSDATA.html                      \
  CURLOPT_PROGRESSFUNCTION.html                  \
@@ -896,24 +866,7 @@ HTMLPAGES = \
  CURLOPT_PROXYTYPE.html                         \
  CURLOPT_PROXYUSERNAME.html                     \
  CURLOPT_PROXYUSERPWD.html                      \
- CURLOPT_PROXY_CAINFO.html                      \
- CURLOPT_PROXY_CAPATH.html                      \
- CURLOPT_PROXY_CRLFILE.html                     \
- CURLOPT_PROXY_KEYPASSWD.html                   \
- CURLOPT_PROXY_PINNEDPUBLICKEY.html             \
  CURLOPT_PROXY_SERVICE_NAME.html                \
- CURLOPT_PROXY_SSLCERT.html                     \
- CURLOPT_PROXY_SSLCERTTYPE.html                 \
- CURLOPT_PROXY_SSLKEY.html                      \
- CURLOPT_PROXY_SSLKEYTYPE.html                  \
- CURLOPT_PROXY_SSLVERSION.html                  \
- CURLOPT_PROXY_SSL_CIPHER_LIST.html             \
- CURLOPT_PROXY_SSL_OPTIONS.html                 \
- CURLOPT_PROXY_SSL_VERIFYHOST.html              \
- CURLOPT_PROXY_SSL_VERIFYPEER.html              \
- CURLOPT_PROXY_TLSAUTH_PASSWORD.html            \
- CURLOPT_PROXY_TLSAUTH_TYPE.html                \
- CURLOPT_PROXY_TLSAUTH_USERNAME.html            \
  CURLOPT_PROXY_TRANSFER_MODE.html               \
  CURLOPT_PUT.html                               \
  CURLOPT_QUOTE.html                             \
@@ -1019,7 +972,6 @@ PDFPAGES = \
  CURLINFO_HEADER_SIZE.pdf                       \
  CURLINFO_HTTPAUTH_AVAIL.pdf                    \
  CURLINFO_HTTP_CONNECTCODE.pdf                  \
- CURLINFO_HTTP_VERSION.pdf                      \
  CURLINFO_LASTSOCKET.pdf                        \
  CURLINFO_LOCAL_IP.pdf                          \
  CURLINFO_LOCAL_PORT.pdf                        \
@@ -1030,9 +982,7 @@ PDFPAGES = \
  CURLINFO_PRIMARY_IP.pdf                        \
  CURLINFO_PRIMARY_PORT.pdf                      \
  CURLINFO_PRIVATE.pdf                           \
- CURLINFO_PROTOCOL.pdf                          \
  CURLINFO_PROXYAUTH_AVAIL.pdf                   \
- CURLINFO_PROXY_SSL_VERIFYRESULT.pdf            \
  CURLINFO_REDIRECT_COUNT.pdf                    \
  CURLINFO_REDIRECT_TIME.pdf                     \
  CURLINFO_REDIRECT_URL.pdf                      \
@@ -1042,7 +992,6 @@ PDFPAGES = \
  CURLINFO_RTSP_CSEQ_RECV.pdf                    \
  CURLINFO_RTSP_SERVER_CSEQ.pdf                  \
  CURLINFO_RTSP_SESSION_ID.pdf                   \
- CURLINFO_SCHEME.pdf                            \
  CURLINFO_SIZE_DOWNLOAD.pdf                     \
  CURLINFO_SIZE_UPLOAD.pdf                       \
  CURLINFO_SPEED_DOWNLOAD.pdf                    \
@@ -1068,7 +1017,6 @@ PDFPAGES = \
  CURLMOPT_SOCKETFUNCTION.pdf                    \
  CURLMOPT_TIMERDATA.pdf                         \
  CURLMOPT_TIMERFUNCTION.pdf                     \
- CURLOPT_ABSTRACT_UNIX_SOCKET.pdf               \
  CURLOPT_ACCEPTTIMEOUT_MS.pdf                   \
  CURLOPT_ACCEPT_ENCODING.pdf                    \
  CURLOPT_ADDRESS_SCOPE.pdf                      \
@@ -1155,7 +1103,6 @@ PDFPAGES = \
  CURLOPT_IOCTLFUNCTION.pdf                      \
  CURLOPT_IPRESOLVE.pdf                          \
  CURLOPT_ISSUERCERT.pdf                         \
- CURLOPT_KEEP_SENDING_ON_ERROR.pdf              \
  CURLOPT_KEYPASSWD.pdf                          \
  CURLOPT_KRBLEVEL.pdf                           \
  CURLOPT_LOCALPORT.pdf                          \
@@ -1194,7 +1141,6 @@ PDFPAGES = \
  CURLOPT_POSTQUOTE.pdf                          \
  CURLOPT_POSTREDIR.pdf                          \
  CURLOPT_PREQUOTE.pdf                           \
- CURLOPT_PRE_PROXY.pdf                          \
  CURLOPT_PRIVATE.pdf                            \
  CURLOPT_PROGRESSDATA.pdf                       \
  CURLOPT_PROGRESSFUNCTION.pdf                   \
@@ -1207,24 +1153,7 @@ PDFPAGES = \
  CURLOPT_PROXYTYPE.pdf                          \
  CURLOPT_PROXYUSERNAME.pdf                      \
  CURLOPT_PROXYUSERPWD.pdf                       \
- CURLOPT_PROXY_CAINFO.pdf                       \
- CURLOPT_PROXY_CAPATH.pdf                       \
- CURLOPT_PROXY_CRLFILE.pdf                      \
- CURLOPT_PROXY_KEYPASSWD.pdf                    \
- CURLOPT_PROXY_PINNEDPUBLICKEY.pdf              \
  CURLOPT_PROXY_SERVICE_NAME.pdf                 \
- CURLOPT_PROXY_SSLCERT.pdf                      \
- CURLOPT_PROXY_SSLCERTTYPE.pdf                  \
- CURLOPT_PROXY_SSLKEY.pdf                       \
- CURLOPT_PROXY_SSLKEYTYPE.pdf                   \
- CURLOPT_PROXY_SSLVERSION.pdf                   \
- CURLOPT_PROXY_SSL_CIPHER_LIST.pdf              \
- CURLOPT_PROXY_SSL_OPTIONS.pdf                  \
- CURLOPT_PROXY_SSL_VERIFYHOST.pdf               \
- CURLOPT_PROXY_SSL_VERIFYPEER.pdf               \
- CURLOPT_PROXY_TLSAUTH_PASSWORD.pdf             \
- CURLOPT_PROXY_TLSAUTH_TYPE.pdf                 \
- CURLOPT_PROXY_TLSAUTH_USERNAME.pdf             \
  CURLOPT_PROXY_TRANSFER_MODE.pdf                \
  CURLOPT_PUT.pdf                                \
  CURLOPT_QUOTE.pdf                              \
@@ -1315,7 +1244,7 @@ PDFPAGES = \
  CURLOPT_XOAUTH2_BEARER.pdf
 
 CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
-EXTRA_DIST = $(man_MANS)
+EXTRA_DIST = $(man_MANS) $(HTMLPAGES) $(PDFPAGES)
 MAN2HTML = roffit --mandir=. $< >$@
 SUFFIXES = .3 .html
 all: all-am
@@ -1573,12 +1502,6 @@ pdf: $(PDFPAGES)
 
 mancheck:
        @cd $(top_srcdir)/docs/libcurl/opts && ls `awk -F, '!/OBSOLETE/ && /^  CINIT/ { a=substr($$1, 9); print "CURLOPT_" a ".3"}' $(top_srcdir)/include/curl/curl.h`
-       rm -f in_temp
-       @(for a in $(man_MANS); do echo $$a >>in_temp; done)
-       sort in_temp > in_makefile
-       ls CURL*.3 > in_directory
-       -diff -u in_makefile in_directory
-       rm in_temp in_directory in_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 8834ada..5aadef2 100644 (file)
@@ -140,7 +140,6 @@ CURLE_UPLOAD_FAILED             7.16.3
 CURLE_URL_MALFORMAT             7.1
 CURLE_URL_MALFORMAT_USER        7.1           7.17.0
 CURLE_USE_SSL_FAILED            7.17.0
-CURLE_WEIRD_SERVER_REPLY        7.51.0
 CURLE_WRITE_ERROR               7.1
 CURLFILETYPE_DEVICE_BLOCK       7.21.0
 CURLFILETYPE_DEVICE_CHAR        7.21.0
@@ -239,9 +238,7 @@ CURLINFO_PRETRANSFER_TIME       7.4.1
 CURLINFO_PRIMARY_IP             7.19.0
 CURLINFO_PRIMARY_PORT           7.21.0
 CURLINFO_PRIVATE                7.10.3
-CURLINFO_PROTOCOL               7.52.0
 CURLINFO_PROXYAUTH_AVAIL        7.10.8
-CURLINFO_PROXY_SSL_VERIFYRESULT 7.52.0
 CURLINFO_REDIRECT_COUNT         7.9.7
 CURLINFO_REDIRECT_TIME          7.9.7
 CURLINFO_REDIRECT_URL           7.18.2
@@ -251,7 +248,6 @@ CURLINFO_RTSP_CLIENT_CSEQ       7.20.0
 CURLINFO_RTSP_CSEQ_RECV         7.20.0
 CURLINFO_RTSP_SERVER_CSEQ       7.20.0
 CURLINFO_RTSP_SESSION_ID        7.20.0
-CURLINFO_SCHEME                 7.52.0
 CURLINFO_SIZE_DOWNLOAD          7.4.1
 CURLINFO_SIZE_UPLOAD            7.4.1
 CURLINFO_SLIST                  7.12.3
@@ -317,7 +313,6 @@ CURLOPTTYPE_LONG                7.1
 CURLOPTTYPE_OBJECTPOINT         7.1
 CURLOPTTYPE_OFF_T               7.11.0
 CURLOPTTYPE_STRINGPOINT         7.46.0
-CURLOPT_ABSTRACT_UNIX_SOCKET    7.53.0
 CURLOPT_ACCEPTTIMEOUT_MS        7.24.0
 CURLOPT_ACCEPT_ENCODING         7.21.6
 CURLOPT_ADDRESS_SCOPE           7.19.0
@@ -415,7 +410,6 @@ CURLOPT_IOCTLFUNCTION           7.12.3
 CURLOPT_IPRESOLVE               7.10.8
 CURLOPT_ISSUERCERT              7.19.0
 CURLOPT_KEYPASSWD               7.17.0
-CURLOPT_KEEP_SENDING_ON_ERROR   7.51.0
 CURLOPT_KRB4LEVEL               7.3           7.17.0
 CURLOPT_KRBLEVEL                7.16.4
 CURLOPT_LOCALPORT               7.15.2
@@ -460,7 +454,6 @@ CURLOPT_POSTFIELDSIZE_LARGE     7.11.1
 CURLOPT_POSTQUOTE               7.1
 CURLOPT_POSTREDIR               7.19.1
 CURLOPT_PREQUOTE                7.9.5
-CURLOPT_PRE_PROXY               7.52.0
 CURLOPT_PRIVATE                 7.10.3
 CURLOPT_PROGRESSDATA            7.1
 CURLOPT_PROGRESSFUNCTION        7.1           7.32.0
@@ -473,24 +466,7 @@ CURLOPT_PROXYPORT               7.1
 CURLOPT_PROXYTYPE               7.10
 CURLOPT_PROXYUSERNAME           7.19.1
 CURLOPT_PROXYUSERPWD            7.1
-CURLOPT_PROXY_CAINFO            7.52.0
-CURLOPT_PROXY_CAPATH            7.52.0
-CURLOPT_PROXY_CRLFILE           7.52.0
-CURLOPT_PROXY_KEYPASSWD         7.52.0
-CURLOPT_PROXY_PINNEDPUBLICKEY   7.52.0
 CURLOPT_PROXY_SERVICE_NAME      7.43.0
-CURLOPT_PROXY_SSLCERT           7.52.0
-CURLOPT_PROXY_SSLCERTTYPE       7.52.0
-CURLOPT_PROXY_SSLKEY            7.52.0
-CURLOPT_PROXY_SSLKEYTYPE        7.52.0
-CURLOPT_PROXY_SSLVERSION        7.52.0
-CURLOPT_PROXY_SSL_CIPHER_LIST   7.52.0
-CURLOPT_PROXY_SSL_OPTIONS       7.52.0
-CURLOPT_PROXY_SSL_VERIFYHOST    7.52.0
-CURLOPT_PROXY_SSL_VERIFYPEER    7.52.0
-CURLOPT_PROXY_TLSAUTH_PASSWORD  7.52.0
-CURLOPT_PROXY_TLSAUTH_TYPE      7.52.0
-CURLOPT_PROXY_TLSAUTH_USERNAME  7.52.0
 CURLOPT_PROXY_TRANSFER_MODE     7.18.0
 CURLOPT_PUT                     7.1
 CURLOPT_QUOTE                   7.1
@@ -633,7 +609,6 @@ CURLPROTO_TELNET                7.19.4
 CURLPROTO_TFTP                  7.19.4
 CURLPROXY_HTTP                  7.10
 CURLPROXY_HTTP_1_0              7.19.4
-CURLPROXY_HTTPS                 7.52.0
 CURLPROXY_SOCKS4                7.10
 CURLPROXY_SOCKS4A               7.18.0
 CURLPROXY_SOCKS5                7.10
@@ -748,7 +723,6 @@ CURL_LOCK_TYPE_DNS              7.10          -           7.10.2
 CURL_LOCK_TYPE_NONE             7.10          -           7.10.2
 CURL_LOCK_TYPE_SSL_SESSION      7.10          -           7.10.2
 CURL_MAX_HTTP_HEADER            7.19.7
-CURL_MAX_READ_SIZE              7.53.0
 CURL_MAX_WRITE_SIZE             7.9.7
 CURL_NETRC_IGNORED              7.9.8
 CURL_NETRC_OPTIONAL             7.9.8
@@ -797,7 +771,6 @@ CURL_SSLVERSION_TLSv1           7.9.2
 CURL_SSLVERSION_TLSv1_0         7.34.0
 CURL_SSLVERSION_TLSv1_1         7.34.0
 CURL_SSLVERSION_TLSv1_2         7.34.0
-CURL_SSLVERSION_TLSv1_3         7.52.0
 CURL_TIMECOND_IFMODSINCE        7.9.7
 CURL_TIMECOND_IFUNMODSINCE      7.9.7
 CURL_TIMECOND_LASTMOD           7.9.7
@@ -811,7 +784,6 @@ CURL_VERSION_DEBUG              7.10.6
 CURL_VERSION_GSSAPI             7.38.0
 CURL_VERSION_GSSNEGOTIATE       7.10.6        7.38.0
 CURL_VERSION_HTTP2              7.33.0
-CURL_VERSION_HTTPS_PROXY        7.52.0
 CURL_VERSION_IDN                7.12.0
 CURL_VERSION_IPV6               7.10
 CURL_VERSION_KERBEROS4          7.10          7.33.0
diff --git a/docs/mk-ca-bundle.html b/docs/mk-ca-bundle.html
new file mode 100644 (file)
index 0000000..f0ed07a
--- /dev/null
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>mk-ca-bundle 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">mk-ca-bundle - convert mozilla's certdata.txt to PEM format <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">mk-ca-bundle [bilnpqstuv] <span Class="emphasis">[outputfile]</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">The mk-ca-bundle tool downloads the certdata.txt file from Mozilla's source tree over HTTP, then parses certdata.txt and extracts certificates into PEM format.  By default, only CA root certificates trusted to issue SSL server authentication certificates are extracted. These are then processed with the OpenSSL commandline tool to produce the final ca-bundle file. 
+<p class="level0">The default <span Class="emphasis">outputfile</span> name is <span Class="bold">ca-bundle.crt</span>. By setting it to '-' (a single dash) you will get the output sent to STDOUT instead of a file. 
+<p class="level0">The PEM format this scripts uses for output makes the result readily available for use by just about all OpenSSL or GnuTLS powered applications, such as curl, wget and more. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">The following options are supported: 
+<p class="level0"><a name="-b"></a><span class="nroffip">-b</span> 
+<p class="level1">backup an existing version of <span Class="emphasis">outputfilename</span> 
+<p class="level0"><a name="-d"></a><span class="nroffip">-d [name]</span> 
+<p class="level1">specify which Mozilla tree to pull certdata.txt from (or a custom URL). Valid names are: aurora, beta, central, mozilla, nss, release (default). They are shortcuts for which source tree to get the cert data from. 
+<p class="level0"><a name="-f"></a><span class="nroffip">-f</span> 
+<p class="level1">force rebuild even if certdata.txt is current (Added in version 1.17) 
+<p class="level0"><a name="-i"></a><span class="nroffip">-i</span> 
+<p class="level1">print version info about used modules 
+<p class="level0"><a name="-l"></a><span class="nroffip">-l</span> 
+<p class="level1">print license info about certdata.txt 
+<p class="level0"><a name="-m"></a><span class="nroffip">-m</span> 
+<p class="level1">(Added in 1.26) Include meta data comments in the output. The meta data is specific information about each certificate that is stored in the original file as comments and using this option will make those comments get passed on to the output file. The meta data is not parsed in any way by mk-ca-bundle. 
+<p class="level0"><a name="-n"></a><span class="nroffip">-n</span> 
+<p class="level1">no download of certdata.txt (to use existing) 
+<p class="level0"><a name="-p"></a><span class="nroffip">-p [purposes]:[levels]</span> 
+<p class="level1">list of Mozilla trust purposes and levels for certificates to include in output. Takes the form of a comma separated list of purposes, a colon, and a comma separated list of levels. The default is to include all certificates trusted to issue SSL Server certificates (SERVER_AUTH:TRUSTED_DELEGATOR). 
+<p class="level1">(Added in version 1.21, Perl only) 
+<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">
+<p class="level0"><a name="-q"></a><span class="nroffip">-q</span> 
+<p class="level1">be really quiet (no progress output at all) 
+<p class="level0"><a name="-t"></a><span class="nroffip">-t</span> 
+<p class="level1">include plain text listing of certificates 
+<p class="level0"><a name="-s"></a><span class="nroffip">-s [algorithms]</span> 
+<p class="level1">comma separated list of signature algorithms with which to hash/fingerprint each certificate and output when run in plain text mode. 
+<p class="level1">(Added in version 1.21, Perl only) 
+<p class="level1">Valid algorithms are: 
+<p class="level2">ALL, NONE, MD5 (default), SHA1, SHA256, SHA384, SHA512 
+<p class="level1">
+<p class="level0"><a name="-u"></a><span class="nroffip">-u</span> 
+<p class="level1">unlink (remove) certdata.txt after processing 
+<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 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="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>
diff --git a/docs/mk-ca-bundle.pdf b/docs/mk-ca-bundle.pdf
new file mode 100644 (file)
index 0000000..df410df
Binary files /dev/null and b/docs/mk-ca-bundle.pdf differ
index 6eb73b2..3e52a1d 100644 (file)
@@ -37,7 +37,7 @@ The following notes apply to libcurl version 7.19.0 and later.
   also distribute along with it the generated curl/curlbuild.h which has been
   used to compile it. Otherwise the library will be of no use for the users of
   the library that you have built. It is _your_ responsibility to provide this
-  file. No one at the curl project can know how you have built the library.
+  file. No one at the cURL project can know how you have built the library.
 
 * File curl/curlbuild.h includes platform and configuration dependent info,
   and must not be modified by anyone. Configure script generates it for you.
index dc790db..696cae4 100644 (file)
@@ -431,9 +431,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/curl/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/curl/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu include/curl/Makefile
+         $(AUTOMAKE) --foreign include/curl/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 467bb02..bba1e6d 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -143,7 +143,7 @@ struct curl_httppost {
   char *buffer;                     /* pointer to allocated buffer contents */
   long bufferlength;                /* length of buffer field */
   char *contenttype;                /* Content-Type */
-  struct curl_slist *contentheader; /* list of extra headers for this form */
+  struct curl_slistcontentheader; /* list of extra headers for this form */
   struct curl_httppost *more;       /* if one field name has more than one
                                        file, this link should link to following
                                        files */
@@ -193,11 +193,6 @@ typedef int (*curl_xferinfo_callback)(void *clientp,
                                       curl_off_t ultotal,
                                       curl_off_t ulnow);
 
-#ifndef CURL_MAX_READ_SIZE
-  /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */
-#define CURL_MAX_READ_SIZE 524288
-#endif
-
 #ifndef CURL_MAX_WRITE_SIZE
   /* Tests have proven that 20K is a very bad buffer size for uploads on
      Windows, while 16K for some odd reason performed a lot better.
@@ -275,7 +270,7 @@ struct curl_fileinfo {
   unsigned int flags;
 
   /* used internally */
-  char *b_data;
+  char * b_data;
   size_t b_size;
   size_t b_used;
 };
@@ -440,7 +435,7 @@ typedef enum {
   CURLE_COULDNT_RESOLVE_PROXY,   /* 5 */
   CURLE_COULDNT_RESOLVE_HOST,    /* 6 */
   CURLE_COULDNT_CONNECT,         /* 7 */
-  CURLE_WEIRD_SERVER_REPLY,      /* 8 */
+  CURLE_FTP_WEIRD_SERVER_REPLY,  /* 8 */
   CURLE_REMOTE_ACCESS_DENIED,    /* 9 a service was denied by the server
                                     due to lack of access - when login fails
                                     this is not returned. */
@@ -484,7 +479,7 @@ typedef enum {
   CURLE_LDAP_CANNOT_BIND,        /* 38 */
   CURLE_LDAP_SEARCH_FAILED,      /* 39 */
   CURLE_OBSOLETE40,              /* 40 - NOT USED */
-  CURLE_FUNCTION_NOT_FOUND,      /* 41 - NOT USED starting with 7.53.0 */
+  CURLE_FUNCTION_NOT_FOUND,      /* 41 */
   CURLE_ABORTED_BY_CALLBACK,     /* 42 */
   CURLE_BAD_FUNCTION_ARGUMENT,   /* 43 */
   CURLE_OBSOLETE44,              /* 44 - NOT USED */
@@ -571,7 +566,6 @@ typedef enum {
 
 /*  compatibility with older names */
 #define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING
-#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY
 
 /* The following were added in 7.21.5, April 2011 */
 #define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION
@@ -645,7 +639,6 @@ typedef enum {
                            CONNECT HTTP/1.1 */
   CURLPROXY_HTTP_1_0 = 1,   /* added in 7.19.4, force to use CONNECT
                                HTTP/1.0  */
-  CURLPROXY_HTTPS = 2, /* added in 7.52.0 */
   CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already
                            in 7.10 */
   CURLPROXY_SOCKS5 = 5, /* added in 7.10 */
@@ -1212,8 +1205,7 @@ typedef enum {
   CINIT(SHARE, OBJECTPOINT, 100),
 
   /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
-     CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and
-     CURLPROXY_SOCKS5. */
+     CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */
   CINIT(PROXYTYPE, LONG, 101),
 
   /* Set the Accept-Encoding string. Use this to tell a server you would like
@@ -1707,77 +1699,6 @@ typedef enum {
   /* Set TCP Fast Open */
   CINIT(TCP_FASTOPEN, LONG, 244),
 
-  /* Continue to send data if the server responds early with an
-   * HTTP status code >= 300 */
-  CINIT(KEEP_SENDING_ON_ERROR, LONG, 245),
-
-  /* The CApath or CAfile used to validate the proxy certificate
-     this option is used only if PROXY_SSL_VERIFYPEER is true */
-  CINIT(PROXY_CAINFO, STRINGPOINT, 246),
-
-  /* The CApath directory used to validate the proxy certificate
-     this option is used only if PROXY_SSL_VERIFYPEER is true */
-  CINIT(PROXY_CAPATH, STRINGPOINT, 247),
-
-  /* Set if we should verify the proxy in ssl handshake,
-     set 1 to verify. */
-  CINIT(PROXY_SSL_VERIFYPEER, LONG, 248),
-
-  /* Set if we should verify the Common name from the proxy certificate in ssl
-   * handshake, set 1 to check existence, 2 to ensure that it matches
-   * the provided hostname. */
-  CINIT(PROXY_SSL_VERIFYHOST, LONG, 249),
-
-  /* What version to specifically try to use for proxy.
-     See CURL_SSLVERSION defines below. */
-  CINIT(PROXY_SSLVERSION, LONG, 250),
-
-  /* Set a username for authenticated TLS for proxy */
-  CINIT(PROXY_TLSAUTH_USERNAME, STRINGPOINT, 251),
-
-  /* Set a password for authenticated TLS for proxy */
-  CINIT(PROXY_TLSAUTH_PASSWORD, STRINGPOINT, 252),
-
-  /* Set authentication type for authenticated TLS for proxy */
-  CINIT(PROXY_TLSAUTH_TYPE, STRINGPOINT, 253),
-
-  /* name of the file keeping your private SSL-certificate for proxy */
-  CINIT(PROXY_SSLCERT, STRINGPOINT, 254),
-
-  /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for
-     proxy */
-  CINIT(PROXY_SSLCERTTYPE, STRINGPOINT, 255),
-
-  /* name of the file keeping your private SSL-key for proxy */
-  CINIT(PROXY_SSLKEY, STRINGPOINT, 256),
-
-  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for
-     proxy */
-  CINIT(PROXY_SSLKEYTYPE, STRINGPOINT, 257),
-
-  /* password for the SSL private key for proxy */
-  CINIT(PROXY_KEYPASSWD, STRINGPOINT, 258),
-
-  /* Specify which SSL ciphers to use for proxy */
-  CINIT(PROXY_SSL_CIPHER_LIST, STRINGPOINT, 259),
-
-  /* CRL file for proxy */
-  CINIT(PROXY_CRLFILE, STRINGPOINT, 260),
-
-  /* Enable/disable specific SSL features with a bitmask for proxy, see
-     CURLSSLOPT_* */
-  CINIT(PROXY_SSL_OPTIONS, LONG, 261),
-
-  /* Name of pre proxy to use. */
-  CINIT(PRE_PROXY, STRINGPOINT, 262),
-
-  /* The public key in DER form used to validate the proxy public key
-     this option is used only if PROXY_SSL_VERIFYPEER is true */
-  CINIT(PROXY_PINNEDPUBLICKEY, STRINGPOINT, 263),
-
-  /* Path to an abstract Unix domain socket */
-  CINIT(ABSTRACT_UNIX_SOCKET, STRINGPOINT, 264),
-
   CURLOPT_LASTENTRY /* the last unused */
 } CURLoption;
 
@@ -1879,7 +1800,6 @@ enum {
   CURL_SSLVERSION_TLSv1_0,
   CURL_SSLVERSION_TLSv1_1,
   CURL_SSLVERSION_TLSv1_2,
-  CURL_SSLVERSION_TLSv1_3,
 
   CURL_SSLVERSION_LAST /* never use, keep last */
 };
@@ -1914,10 +1834,7 @@ typedef enum {
 
 
 /* curl_strequal() and curl_strnequal() are subject for removal in a future
-   libcurl, see lib/README.curlx for details
-
-   !checksrc! disable SPACEBEFOREPAREN 2
-*/
+   libcurl, see lib/README.curlx for details */
 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);
 
@@ -2287,12 +2204,9 @@ typedef enum {
   CURLINFO_ACTIVESOCKET     = CURLINFO_SOCKET + 44,
   CURLINFO_TLS_SSL_PTR      = CURLINFO_SLIST  + 45,
   CURLINFO_HTTP_VERSION     = CURLINFO_LONG   + 46,
-  CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
-  CURLINFO_PROTOCOL         = CURLINFO_LONG   + 48,
-  CURLINFO_SCHEME           = CURLINFO_STRING + 49,
   /* Fill in new entries below here! */
 
-  CURLINFO_LASTONE          = 49
+  CURLINFO_LASTONE          = 46
 } CURLINFO;
 
 /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
@@ -2453,7 +2367,6 @@ typedef struct {
 #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 */
-#define CURL_VERSION_HTTPS_PROXY  (1<<21) /* HTTPS-proxy support built-in */
 
  /*
  * NAME curl_version_info()
index 2bc146f..995b501 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
    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 - 2017 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.53.1"
+#define LIBCURL_VERSION "7.50.2"
 
 /* The numeric version number is also available "in parts" by using these
    defines: */
 #define LIBCURL_VERSION_MAJOR 7
-#define LIBCURL_VERSION_MINOR 53
-#define LIBCURL_VERSION_PATCH 1
+#define LIBCURL_VERSION_MINOR 50
+#define LIBCURL_VERSION_PATCH 2
 
 /* This is the numeric version of the libcurl version number, meant for easier
    parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
@@ -57,7 +57,7 @@
    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 0x073501
+#define LIBCURL_VERSION_NUM 0x073202
 
 /*
  * This is the date and time when the full source package was created. The
@@ -68,7 +68,7 @@
  *
  * "Mon Feb 12 11:35:33 UTC 2007"
  */
-#define LIBCURL_TIMESTAMP "Fri Feb 24 07:49:42 UTC 2017"
+#define LIBCURL_TIMESTAMP "Wed Sep  7 05:48:28 UTC 2016"
 
 #define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|z)
 #define CURL_AT_LEAST_VERSION(x,y,z) \
index 752c504..afc766c 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -58,7 +58,7 @@ CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
  * curl_easy_duphandle() for each new thread to avoid a series of identical
  * curl_easy_setopt() invokes in every thread.
  */
-CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl);
+CURL_EXTERN CURLcurl_easy_duphandle(CURL *curl);
 
 /*
  * NAME curl_easy_reset()
index 027b6f4..6f0f7f3 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -24,8 +24,8 @@
 
 #include <sys/types.h>
 
-size_t fread(void *, size_t, size_t, FILE *);
-size_t fwrite(const void *, size_t, size_t, FILE *);
+size_t fread (void *, size_t, size_t, FILE *);
+size_t fwrite (const void *, size_t, size_t, FILE *);
 
 int strcasecmp(const char *, const char *);
 int strncasecmp(const char *, const char *, size_t);
index 3d68315..6ec8bcf 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -40,7 +40,7 @@
  */
 #define curl_easy_setopt(handle, option, value)                               \
 __extension__ ({                                                              \
-  __typeof__(option) _curl_opt = option;                                     \
+  __typeof__ (option) _curl_opt = option;                                     \
   if(__builtin_constant_p(_curl_opt)) {                                       \
     if(_curl_is_long_option(_curl_opt))                                       \
       if(!_curl_is_long(value))                                               \
@@ -110,7 +110,7 @@ __extension__ ({                                                              \
 /* FIXME: don't allow const pointers */
 #define curl_easy_getinfo(handle, info, arg)                                  \
 __extension__ ({                                                              \
-  __typeof__(info) _curl_info = info;                                        \
+  __typeof__ (info) _curl_info = info;                                        \
   if(__builtin_constant_p(_curl_info)) {                                      \
     if(_curl_is_string_info(_curl_info))                                      \
       if(!_curl_is_arr((arg), char *))                                        \
@@ -151,7 +151,7 @@ _CURL_WARNING(_curl_easy_setopt_err_curl_off_t,
   "curl_easy_setopt expects a curl_off_t argument for this option")
 _CURL_WARNING(_curl_easy_setopt_err_string,
               "curl_easy_setopt expects a "
-              "string ('char *' or char[]) argument for this option"
+              "string (char* or char[]) argument for this option"
   )
 _CURL_WARNING(_curl_easy_setopt_err_write_callback,
   "curl_easy_setopt expects a curl_write_callback argument for this option")
@@ -182,25 +182,24 @@ _CURL_WARNING(_curl_easy_setopt_err_error_buffer,
               "curl_easy_setopt expects a "
               "char buffer of CURL_ERROR_SIZE as argument for this option")
 _CURL_WARNING(_curl_easy_setopt_err_FILE,
-  "curl_easy_setopt expects a 'FILE *' argument for this option")
+  "curl_easy_setopt expects a FILE* argument for this option")
 _CURL_WARNING(_curl_easy_setopt_err_postfields,
-  "curl_easy_setopt expects a 'void *' or 'char *' argument for this option")
+  "curl_easy_setopt expects a void* or char* argument for this option")
 _CURL_WARNING(_curl_easy_setopt_err_curl_httpost,
-              "curl_easy_setopt expects a 'struct curl_httppost *' "
-              "argument for this option")
+  "curl_easy_setopt expects a struct curl_httppost* argument for this option")
 _CURL_WARNING(_curl_easy_setopt_err_curl_slist,
-  "curl_easy_setopt expects a 'struct curl_slist *' argument for this option")
+  "curl_easy_setopt expects a struct curl_slist* argument for this option")
 _CURL_WARNING(_curl_easy_setopt_err_CURLSH,
   "curl_easy_setopt expects a CURLSH* argument for this option")
 
 _CURL_WARNING(_curl_easy_getinfo_err_string,
-  "curl_easy_getinfo expects a pointer to 'char *' for this info")
+  "curl_easy_getinfo expects a pointer to char * for this info")
 _CURL_WARNING(_curl_easy_getinfo_err_long,
   "curl_easy_getinfo expects a pointer to long for this info")
 _CURL_WARNING(_curl_easy_getinfo_err_double,
   "curl_easy_getinfo expects a pointer to double for this info")
 _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
-  "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info")
+  "curl_easy_getinfo expects a pointer to struct curl_slist * for this info")
 
 /* groups of curl_easy_setops options that take the same type of argument */
 
@@ -219,8 +218,7 @@ _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_ABSTRACT_UNIX_SOCKET ||                                \
-   (option) == CURLOPT_ACCEPT_ENCODING ||                                     \
+  ((option) == CURLOPT_ACCEPT_ENCODING ||                                     \
    (option) == CURLOPT_CAINFO ||                                              \
    (option) == CURLOPT_CAPATH ||                                              \
    (option) == CURLOPT_COOKIE ||                                              \
@@ -365,7 +363,7 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
 
 /* XXX: should evaluate to true iff expr is a pointer */
 #define _curl_is_any_ptr(expr)                                                \
-  (sizeof(expr) == sizeof(void *))
+  (sizeof(expr) == sizeof(void*))
 
 /* evaluates to true if expr is NULL */
 /* XXX: must not evaluate expr, so this check is not accurate */
@@ -457,12 +455,12 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
    _curl_callback_compatible((expr), _curl_read_callback4) ||                 \
    _curl_callback_compatible((expr), _curl_read_callback5) ||                 \
    _curl_callback_compatible((expr), _curl_read_callback6))
-typedef size_t (_curl_read_callback1)(char *, size_t, size_t, void *);
-typedef size_t (_curl_read_callback2)(char *, size_t, size_t, const void *);
-typedef size_t (_curl_read_callback3)(char *, size_t, size_t, FILE *);
-typedef size_t (_curl_read_callback4)(void *, size_t, size_t, void *);
-typedef size_t (_curl_read_callback5)(void *, size_t, size_t, const void *);
-typedef size_t (_curl_read_callback6)(void *, size_t, size_t, FILE *);
+typedef size_t (_curl_read_callback1)(char *, size_t, size_t, void*);
+typedef size_t (_curl_read_callback2)(char *, size_t, size_t, const void*);
+typedef size_t (_curl_read_callback3)(char *, size_t, size_t, FILE*);
+typedef size_t (_curl_read_callback4)(void *, size_t, size_t, void*);
+typedef size_t (_curl_read_callback5)(void *, size_t, size_t, const void*);
+typedef size_t (_curl_read_callback6)(void *, size_t, size_t, FILE*);
 
 /* evaluates to true if expr is of type curl_write_callback or "similar" */
 #define _curl_is_write_cb(expr)                                               \
@@ -475,14 +473,14 @@ typedef size_t (_curl_read_callback6)(void *, size_t, size_t, FILE *);
    _curl_callback_compatible((expr), _curl_write_callback4) ||                \
    _curl_callback_compatible((expr), _curl_write_callback5) ||                \
    _curl_callback_compatible((expr), _curl_write_callback6))
-typedef size_t (_curl_write_callback1)(const char *, size_t, size_t, void *);
+typedef size_t (_curl_write_callback1)(const char *, size_t, size_t, void*);
 typedef size_t (_curl_write_callback2)(const char *, size_t, size_t,
-                                       const void *);
-typedef size_t (_curl_write_callback3)(const char *, size_t, size_t, FILE *);
-typedef size_t (_curl_write_callback4)(const void *, size_t, size_t, void *);
+                                       const void*);
+typedef size_t (_curl_write_callback3)(const char *, size_t, size_t, FILE*);
+typedef size_t (_curl_write_callback4)(const void *, size_t, size_t, void*);
 typedef size_t (_curl_write_callback5)(const void *, size_t, size_t,
-                                       const void *);
-typedef size_t (_curl_write_callback6)(const void *, size_t, size_t, FILE *);
+                                       const void*);
+typedef size_t (_curl_write_callback6)(const void *, size_t, size_t, FILE*);
 
 /* evaluates to true if expr is of type curl_ioctl_callback or "similar" */
 #define _curl_is_ioctl_cb(expr)                                         \
@@ -492,10 +490,10 @@ typedef size_t (_curl_write_callback6)(const void *, size_t, size_t, FILE *);
    _curl_callback_compatible((expr), _curl_ioctl_callback2) ||                \
    _curl_callback_compatible((expr), _curl_ioctl_callback3) ||                \
    _curl_callback_compatible((expr), _curl_ioctl_callback4))
-typedef curlioerr (_curl_ioctl_callback1)(CURL *, int, void *);
-typedef curlioerr (_curl_ioctl_callback2)(CURL *, int, const void *);
-typedef curlioerr (_curl_ioctl_callback3)(CURL *, curliocmd, void *);
-typedef curlioerr (_curl_ioctl_callback4)(CURL *, curliocmd, const void *);
+typedef curlioerr (_curl_ioctl_callback1)(CURL *, int, void*);
+typedef curlioerr (_curl_ioctl_callback2)(CURL *, int, const void*);
+typedef curlioerr (_curl_ioctl_callback3)(CURL *, curliocmd, void*);
+typedef curlioerr (_curl_ioctl_callback4)(CURL *, curliocmd, const void*);
 
 /* evaluates to true if expr is of type curl_sockopt_callback or "similar" */
 #define _curl_is_sockopt_cb(expr)                                       \
index eb2de6d..49a3409 100644 (file)
@@ -87,11 +87,6 @@ endif()
 
 set_target_properties(${LIB_NAME} PROPERTIES COMPILE_DEFINITIONS BUILDING_LIBCURL)
 
-if(HIDES_CURL_PRIVATE_SYMBOLS)
-  set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
-  set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_FLAGS ${CURL_CFLAG_SYMBOLS_HIDE})
-endif()
-
 # Remove the "lib" prefix since the library is already named "libcurl".
 set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
 set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "")
index cc7ee90..12aaf61 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -23,7 +23,7 @@ AUTOMAKE_OPTIONS = foreign nostdinc
 
 CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
 
-EXTRA_DIST = Makefile.b32 Makefile.m32 config-win32.h  \
+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       \
index 10d86a9..bbaebae 100644 (file)
@@ -185,7 +185,7 @@ am__objects_1 = libcurl_la-file.lo libcurl_la-timeval.lo \
        libcurl_la-ldap.lo libcurl_la-version.lo libcurl_la-getenv.lo \
        libcurl_la-escape.lo libcurl_la-mprintf.lo \
        libcurl_la-telnet.lo libcurl_la-netrc.lo libcurl_la-getinfo.lo \
-       libcurl_la-transfer.lo libcurl_la-strcase.lo \
+       libcurl_la-transfer.lo libcurl_la-strequal.lo \
        libcurl_la-easy.lo libcurl_la-security.lo \
        libcurl_la-curl_fnmatch.lo libcurl_la-fileinfo.lo \
        libcurl_la-ftplistparser.lo libcurl_la-wildcard.lo \
@@ -202,7 +202,7 @@ am__objects_1 = libcurl_la-file.lo libcurl_la-timeval.lo \
        libcurl_la-hostsyn.lo libcurl_la-inet_ntop.lo \
        libcurl_la-parsedate.lo libcurl_la-select.lo \
        libcurl_la-tftp.lo libcurl_la-splay.lo libcurl_la-strdup.lo \
-       libcurl_la-socks.lo libcurl_la-ssh.lo \
+       libcurl_la-socks.lo libcurl_la-ssh.lo libcurl_la-rawstr.lo \
        libcurl_la-curl_addrinfo.lo libcurl_la-socks_gssapi.lo \
        libcurl_la-socks_sspi.lo libcurl_la-curl_sspi.lo \
        libcurl_la-slist.lo libcurl_la-nonblock.lo \
@@ -217,10 +217,10 @@ am__objects_1 = libcurl_la-file.lo libcurl_la-timeval.lo \
        libcurl_la-asyn-thread.lo libcurl_la-curl_gssapi.lo \
        libcurl_la-http_ntlm.lo libcurl_la-curl_ntlm_wb.lo \
        libcurl_la-curl_ntlm_core.lo libcurl_la-curl_sasl.lo \
-       libcurl_la-rand.lo libcurl_la-curl_multibyte.lo \
-       libcurl_la-hostcheck.lo libcurl_la-conncache.lo \
-       libcurl_la-pipeline.lo libcurl_la-dotdot.lo \
-       libcurl_la-x509asn1.lo libcurl_la-http2.lo libcurl_la-smb.lo \
+       libcurl_la-curl_multibyte.lo libcurl_la-hostcheck.lo \
+       libcurl_la-conncache.lo libcurl_la-pipeline.lo \
+       libcurl_la-dotdot.lo libcurl_la-x509asn1.lo \
+       libcurl_la-http2.lo libcurl_la-smb.lo \
        libcurl_la-curl_endian.lo libcurl_la-curl_des.lo \
        libcurl_la-system_win32.lo
 am__dirstamp = $(am__leading_dot)dirstamp
@@ -261,7 +261,7 @@ am__objects_7 = libcurlu_la-file.lo libcurlu_la-timeval.lo \
        libcurlu_la-getenv.lo libcurlu_la-escape.lo \
        libcurlu_la-mprintf.lo libcurlu_la-telnet.lo \
        libcurlu_la-netrc.lo libcurlu_la-getinfo.lo \
-       libcurlu_la-transfer.lo libcurlu_la-strcase.lo \
+       libcurlu_la-transfer.lo libcurlu_la-strequal.lo \
        libcurlu_la-easy.lo libcurlu_la-security.lo \
        libcurlu_la-curl_fnmatch.lo libcurlu_la-fileinfo.lo \
        libcurlu_la-ftplistparser.lo libcurlu_la-wildcard.lo \
@@ -279,11 +279,11 @@ am__objects_7 = libcurlu_la-file.lo libcurlu_la-timeval.lo \
        libcurlu_la-inet_ntop.lo libcurlu_la-parsedate.lo \
        libcurlu_la-select.lo libcurlu_la-tftp.lo libcurlu_la-splay.lo \
        libcurlu_la-strdup.lo libcurlu_la-socks.lo libcurlu_la-ssh.lo \
-       libcurlu_la-curl_addrinfo.lo libcurlu_la-socks_gssapi.lo \
-       libcurlu_la-socks_sspi.lo libcurlu_la-curl_sspi.lo \
-       libcurlu_la-slist.lo libcurlu_la-nonblock.lo \
-       libcurlu_la-curl_memrchr.lo libcurlu_la-imap.lo \
-       libcurlu_la-pop3.lo libcurlu_la-smtp.lo \
+       libcurlu_la-rawstr.lo libcurlu_la-curl_addrinfo.lo \
+       libcurlu_la-socks_gssapi.lo libcurlu_la-socks_sspi.lo \
+       libcurlu_la-curl_sspi.lo libcurlu_la-slist.lo \
+       libcurlu_la-nonblock.lo libcurlu_la-curl_memrchr.lo \
+       libcurlu_la-imap.lo libcurlu_la-pop3.lo libcurlu_la-smtp.lo \
        libcurlu_la-pingpong.lo libcurlu_la-rtsp.lo \
        libcurlu_la-curl_threads.lo libcurlu_la-warnless.lo \
        libcurlu_la-hmac.lo libcurlu_la-curl_rtmp.lo \
@@ -293,13 +293,12 @@ am__objects_7 = libcurlu_la-file.lo libcurlu_la-timeval.lo \
        libcurlu_la-asyn-ares.lo libcurlu_la-asyn-thread.lo \
        libcurlu_la-curl_gssapi.lo libcurlu_la-http_ntlm.lo \
        libcurlu_la-curl_ntlm_wb.lo libcurlu_la-curl_ntlm_core.lo \
-       libcurlu_la-curl_sasl.lo libcurlu_la-rand.lo \
-       libcurlu_la-curl_multibyte.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-smb.lo \
-       libcurlu_la-curl_endian.lo libcurlu_la-curl_des.lo \
-       libcurlu_la-system_win32.lo
+       libcurlu_la-curl_sasl.lo libcurlu_la-curl_multibyte.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-smb.lo libcurlu_la-curl_endian.lo \
+       libcurlu_la-curl_des.lo libcurlu_la-system_win32.lo
 am__objects_8 = vauth/libcurlu_la-vauth.lo \
        vauth/libcurlu_la-cleartext.lo vauth/libcurlu_la-cram.lo \
        vauth/libcurlu_la-digest.lo vauth/libcurlu_la-digest_sspi.lo \
@@ -589,7 +588,7 @@ top_srcdir = @top_srcdir@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -605,7 +604,7 @@ top_srcdir = @top_srcdir@
 ###########################################################################
 AUTOMAKE_OPTIONS = foreign nostdinc
 CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
-EXTRA_DIST = Makefile.b32 Makefile.m32 config-win32.h  \
+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       \
@@ -689,31 +688,31 @@ LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.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       \
   ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
-  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
+  getinfo.c transfer.c strequal.c easy.c security.c curl_fnmatch.c      \
   fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
   strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c  \
   http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c    \
   strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c         \
   inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
-  ssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c            \
+  ssh.c rawstr.c curl_addrinfo.c socks_gssapi.c socks_sspi.c            \
   curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
   pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
   openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
   http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
-  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
+  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c               \
   curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c          \
   x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.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         \
   speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
-  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
+  strequal.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h         \
   wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
   hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
   http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
   inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
   easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
-  socks.h ssh.h curl_base64.h curl_addrinfo.h curl_sspi.h      \
+  socks.h ssh.h curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h      \
   slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
   rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
   curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
@@ -721,7 +720,7 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.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 curl_des.h           \
-  curl_printf.h system_win32.h rand.h
+  curl_printf.h system_win32.h
 
 LIB_RCFILES = libcurl.rc
 CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES)
@@ -1024,7 +1023,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pipeline.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pop3.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-progress.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rand.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rawstr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rtsp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-security.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-select.Plo@am__quote@
@@ -1039,8 +1038,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-speedcheck.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-splay.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-ssh.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strcase.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strdup.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strequal.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strerror.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strtok.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strtoofft.Plo@am__quote@
@@ -1125,7 +1124,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pipeline.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pop3.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-progress.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rand.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rawstr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rtsp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-security.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-select.Plo@am__quote@
@@ -1140,8 +1139,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-speedcheck.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-splay.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-ssh.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strcase.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strdup.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strequal.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strerror.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strtok.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strtoofft.Plo@am__quote@
@@ -1389,12 +1388,12 @@ libcurl_la-transfer.lo: transfer.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-transfer.lo `test -f 'transfer.c' || echo '$(srcdir)/'`transfer.c
 
-libcurl_la-strcase.lo: strcase.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-strcase.lo -MD -MP -MF $(DEPDIR)/libcurl_la-strcase.Tpo -c -o libcurl_la-strcase.lo `test -f 'strcase.c' || echo '$(srcdir)/'`strcase.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-strcase.Tpo $(DEPDIR)/libcurl_la-strcase.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='strcase.c' object='libcurl_la-strcase.lo' libtool=yes @AMDEPBACKSLASH@
+libcurl_la-strequal.lo: strequal.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-strequal.lo -MD -MP -MF $(DEPDIR)/libcurl_la-strequal.Tpo -c -o libcurl_la-strequal.lo `test -f 'strequal.c' || echo '$(srcdir)/'`strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-strequal.Tpo $(DEPDIR)/libcurl_la-strequal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='strequal.c' object='libcurl_la-strequal.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-strcase.lo `test -f 'strcase.c' || echo '$(srcdir)/'`strcase.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 libcurl_la-strequal.lo `test -f 'strequal.c' || echo '$(srcdir)/'`strequal.c
 
 libcurl_la-easy.lo: easy.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-easy.lo -MD -MP -MF $(DEPDIR)/libcurl_la-easy.Tpo -c -o libcurl_la-easy.lo `test -f 'easy.c' || echo '$(srcdir)/'`easy.c
@@ -1648,6 +1647,13 @@ libcurl_la-ssh.lo: ssh.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-ssh.lo `test -f 'ssh.c' || echo '$(srcdir)/'`ssh.c
 
+libcurl_la-rawstr.lo: rawstr.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-rawstr.lo -MD -MP -MF $(DEPDIR)/libcurl_la-rawstr.Tpo -c -o libcurl_la-rawstr.lo `test -f 'rawstr.c' || echo '$(srcdir)/'`rawstr.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-rawstr.Tpo $(DEPDIR)/libcurl_la-rawstr.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='rawstr.c' object='libcurl_la-rawstr.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-rawstr.lo `test -f 'rawstr.c' || echo '$(srcdir)/'`rawstr.c
+
 libcurl_la-curl_addrinfo.lo: curl_addrinfo.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_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_addrinfo.Tpo -c -o libcurl_la-curl_addrinfo.lo `test -f 'curl_addrinfo.c' || echo '$(srcdir)/'`curl_addrinfo.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_addrinfo.Tpo $(DEPDIR)/libcurl_la-curl_addrinfo.Plo
@@ -1851,13 +1857,6 @@ libcurl_la-curl_sasl.lo: curl_sasl.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_sasl.lo `test -f 'curl_sasl.c' || echo '$(srcdir)/'`curl_sasl.c
 
-libcurl_la-rand.lo: rand.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-rand.lo -MD -MP -MF $(DEPDIR)/libcurl_la-rand.Tpo -c -o libcurl_la-rand.lo `test -f 'rand.c' || echo '$(srcdir)/'`rand.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-rand.Tpo $(DEPDIR)/libcurl_la-rand.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='rand.c' object='libcurl_la-rand.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-rand.lo `test -f 'rand.c' || echo '$(srcdir)/'`rand.c
-
 libcurl_la-curl_multibyte.lo: curl_multibyte.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_multibyte.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_multibyte.Tpo -c -o libcurl_la-curl_multibyte.lo `test -f 'curl_multibyte.c' || echo '$(srcdir)/'`curl_multibyte.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_multibyte.Tpo $(DEPDIR)/libcurl_la-curl_multibyte.Plo
@@ -2264,12 +2263,12 @@ libcurlu_la-transfer.lo: transfer.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-transfer.lo `test -f 'transfer.c' || echo '$(srcdir)/'`transfer.c
 
-libcurlu_la-strcase.lo: strcase.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-strcase.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-strcase.Tpo -c -o libcurlu_la-strcase.lo `test -f 'strcase.c' || echo '$(srcdir)/'`strcase.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-strcase.Tpo $(DEPDIR)/libcurlu_la-strcase.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='strcase.c' object='libcurlu_la-strcase.lo' libtool=yes @AMDEPBACKSLASH@
+libcurlu_la-strequal.lo: strequal.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-strequal.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-strequal.Tpo -c -o libcurlu_la-strequal.lo `test -f 'strequal.c' || echo '$(srcdir)/'`strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-strequal.Tpo $(DEPDIR)/libcurlu_la-strequal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='strequal.c' object='libcurlu_la-strequal.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-strcase.lo `test -f 'strcase.c' || echo '$(srcdir)/'`strcase.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 libcurlu_la-strequal.lo `test -f 'strequal.c' || echo '$(srcdir)/'`strequal.c
 
 libcurlu_la-easy.lo: easy.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-easy.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-easy.Tpo -c -o libcurlu_la-easy.lo `test -f 'easy.c' || echo '$(srcdir)/'`easy.c
@@ -2523,6 +2522,13 @@ libcurlu_la-ssh.lo: ssh.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-ssh.lo `test -f 'ssh.c' || echo '$(srcdir)/'`ssh.c
 
+libcurlu_la-rawstr.lo: rawstr.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-rawstr.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-rawstr.Tpo -c -o libcurlu_la-rawstr.lo `test -f 'rawstr.c' || echo '$(srcdir)/'`rawstr.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-rawstr.Tpo $(DEPDIR)/libcurlu_la-rawstr.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='rawstr.c' object='libcurlu_la-rawstr.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-rawstr.lo `test -f 'rawstr.c' || echo '$(srcdir)/'`rawstr.c
+
 libcurlu_la-curl_addrinfo.lo: curl_addrinfo.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_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_addrinfo.Tpo -c -o libcurlu_la-curl_addrinfo.lo `test -f 'curl_addrinfo.c' || echo '$(srcdir)/'`curl_addrinfo.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_addrinfo.Tpo $(DEPDIR)/libcurlu_la-curl_addrinfo.Plo
@@ -2726,13 +2732,6 @@ libcurlu_la-curl_sasl.lo: curl_sasl.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_sasl.lo `test -f 'curl_sasl.c' || echo '$(srcdir)/'`curl_sasl.c
 
-libcurlu_la-rand.lo: rand.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-rand.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-rand.Tpo -c -o libcurlu_la-rand.lo `test -f 'rand.c' || echo '$(srcdir)/'`rand.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-rand.Tpo $(DEPDIR)/libcurlu_la-rand.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='rand.c' object='libcurlu_la-rand.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-rand.lo `test -f 'rand.c' || echo '$(srcdir)/'`rand.c
-
 libcurlu_la-curl_multibyte.lo: curl_multibyte.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_multibyte.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_multibyte.Tpo -c -o libcurlu_la-curl_multibyte.lo `test -f 'curl_multibyte.c' || echo '$(srcdir)/'`curl_multibyte.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_multibyte.Tpo $(DEPDIR)/libcurlu_la-curl_multibyte.Plo
index 19f5800..0ed998c 100644 (file)
@@ -40,31 +40,31 @@ LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.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       \
   ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
-  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
+  getinfo.c transfer.c strequal.c easy.c security.c curl_fnmatch.c      \
   fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
   strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c  \
   http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c    \
   strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c         \
   inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
-  ssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c            \
+  ssh.c rawstr.c curl_addrinfo.c socks_gssapi.c socks_sspi.c            \
   curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
   pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
   openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
   http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
-  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
+  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c               \
   curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c          \
   x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.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         \
   speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
-  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
+  strequal.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h         \
   wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
   hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
   http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
   inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
   easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
-  socks.h ssh.h curl_base64.h curl_addrinfo.h curl_sspi.h      \
+  socks.h ssh.h curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h      \
   slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
   rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
   curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
@@ -72,7 +72,7 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.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 curl_des.h           \
-  curl_printf.h system_win32.h rand.h
+  curl_printf.h system_win32.h
 
 LIB_RCFILES = libcurl.rc
 
index f689a36..ee7e87c 100644 (file)
@@ -87,7 +87,7 @@ endif
 TARGET  = libcurl
 VERSION        = $(LIBCURL_VERSION)
 COPYR  = Copyright (C) $(LIBCURL_COPYRIGHT_STR)
-DESCR  = curl libcurl $(LIBCURL_VERSION_STR) ($(LIBARCH)) - https://curl.haxx.se
+DESCR  = cURL libcurl $(LIBCURL_VERSION_STR) ($(LIBARCH)) - https://curl.haxx.se
 MTSAFE = YES
 STACK  = 64000
 SCREEN = none
index d542462..61de198 100644 (file)
@@ -601,8 +601,7 @@ X_OBJS= \
        $(DIROBJ)\polarssl_threadlock.obj \\r
        $(DIROBJ)\pop3.obj \\r
        $(DIROBJ)\progress.obj \\r
-       $(DIROBJ)\strcase.obj \\r
-       $(DIROBJ)\rand.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
        $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
@@ -634,6 +633,7 @@ X_OBJS= \
        $(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
index 574d39b..b610f5e 100644 (file)
@@ -601,8 +601,7 @@ X_OBJS= \
        $(DIROBJ)\polarssl_threadlock.obj \\r
        $(DIROBJ)\pop3.obj \\r
        $(DIROBJ)\progress.obj \\r
-       $(DIROBJ)\strcase.obj \\r
-       $(DIROBJ)\rand.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
        $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
@@ -634,6 +633,7 @@ X_OBJS= \
        $(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
index d6937c8..e2f6fc8 100644 (file)
@@ -601,8 +601,7 @@ X_OBJS= \
        $(DIROBJ)\polarssl_threadlock.obj \\r
        $(DIROBJ)\pop3.obj \\r
        $(DIROBJ)\progress.obj \\r
-       $(DIROBJ)\strcase.obj \\r
-       $(DIROBJ)\rand.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
        $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
@@ -634,6 +633,7 @@ X_OBJS= \
        $(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
index 8d51139..e8bec2f 100644 (file)
@@ -601,8 +601,7 @@ X_OBJS= \
        $(DIROBJ)\polarssl_threadlock.obj \\r
        $(DIROBJ)\pop3.obj \\r
        $(DIROBJ)\progress.obj \\r
-       $(DIROBJ)\strcase.obj \\r
-       $(DIROBJ)\rand.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
        $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
@@ -634,6 +633,7 @@ X_OBJS= \
        $(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
diff --git a/lib/Makefile.vc6 b/lib/Makefile.vc6
new file mode 100644 (file)
index 0000000..e783e3a
--- /dev/null
@@ -0,0 +1,691 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2016, 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 MSVC6\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 MSVC6 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
+WINSSLLIBS   = crypt32.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) $(WINSSLLIBS) /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) $(WINSSLLIBS) /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_core.obj \\r
+       $(DIROBJ)\curl_ntlm_wb.obj \\r
+       $(DIROBJ)\curl_rtmp.obj \\r
+       $(DIROBJ)\curl_sasl.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_ntlm.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)\system_win32.obj \\r
+       $(DIROBJ)\vauth.obj \\r
+       $(DIROBJ)\cleartext.obj \\r
+       $(DIROBJ)\cram.obj \\r
+       $(DIROBJ)\digest.obj \\r
+       $(DIROBJ)\digest_sspi.obj \\r
+       $(DIROBJ)\krb5_gssapi.obj \\r
+       $(DIROBJ)\krb5_sspi.obj \\r
+       $(DIROBJ)\ntlm.obj \\r
+       $(DIROBJ)\ntlm_sspi.obj \\r
+       $(DIROBJ)\oauth2.obj \\r
+       $(DIROBJ)\spnego_gssapi.obj \\r
+       $(DIROBJ)\spnego_sspi.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
+        $(DIROBJ)\x509asn1.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
+{.\vauth\}.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 1b2d5ba..7244b46 100644 (file)
@@ -601,8 +601,7 @@ X_OBJS= \
        $(DIROBJ)\polarssl_threadlock.obj \\r
        $(DIROBJ)\pop3.obj \\r
        $(DIROBJ)\progress.obj \\r
-       $(DIROBJ)\strcase.obj \\r
-       $(DIROBJ)\rand.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
        $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
@@ -634,6 +633,7 @@ X_OBJS= \
        $(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
index 067b049..5345944 100644 (file)
@@ -601,8 +601,7 @@ X_OBJS= \
        $(DIROBJ)\polarssl_threadlock.obj \\r
        $(DIROBJ)\pop3.obj \\r
        $(DIROBJ)\progress.obj \\r
-       $(DIROBJ)\strcase.obj \\r
-       $(DIROBJ)\rand.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
        $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
@@ -634,6 +633,7 @@ X_OBJS= \
        $(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
index c210649..9cb29be 100644 (file)
@@ -601,8 +601,7 @@ X_OBJS= \
        $(DIROBJ)\polarssl_threadlock.obj \\r
        $(DIROBJ)\pop3.obj \\r
        $(DIROBJ)\progress.obj \\r
-       $(DIROBJ)\strcase.obj \\r
-       $(DIROBJ)\rand.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
        $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
@@ -634,6 +633,7 @@ X_OBJS= \
        $(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
index 4f55b30..5591d22 100644 (file)
@@ -57,7 +57,7 @@ bool Curl_amiga_init()
   }
 
   if(SocketBaseTags(SBTM_SETVAL(SBTC_ERRNOPTR(sizeof(errno))), (ULONG) &errno,
-                    SBTM_SETVAL(SBTC_LOGTAGPTR), (ULONG) "curl",
+                    SBTM_SETVAL(SBTC_LOGTAGPTR), (ULONG) "cURL",
                     TAG_DONE)) {
     __request("SocketBaseTags ERROR");
     return FALSE;
index c038c2a..2aed94f 100644 (file)
@@ -169,7 +169,7 @@ int Curl_resolver_duphandle(void **to, void *from)
   return CURLE_OK;
 }
 
-static void destroy_async_data(struct Curl_async *async);
+static void destroy_async_data (struct Curl_async *async);
 
 /*
  * Cancel all possibly still on-going resolves for this connection.
@@ -184,7 +184,7 @@ void Curl_resolver_cancel(struct connectdata *conn)
 /*
  * destroy_async_data() cleans up async resolver data.
  */
-static void destroy_async_data(struct Curl_async *async)
+static void destroy_async_data (struct Curl_async *async)
 {
   free(async->hostname);
 
index 26a15b1..7cce01a 100644 (file)
@@ -155,8 +155,8 @@ struct thread_sync_data {
   curl_mutex_t * mtx;
   int done;
 
-  char *hostname;        /* hostname to resolve, Curl_async.hostname
-                            duplicate */
+  char * hostname;        /* hostname to resolve, Curl_async.hostname
+                             duplicate */
   int port;
   int sock_error;
   Curl_addrinfo *res;
@@ -169,7 +169,7 @@ struct thread_sync_data {
 struct thread_data {
   curl_thread_t thread_hnd;
   unsigned int poll_interval;
-  time_t interval_end;
+  long interval_end;
   struct thread_sync_data tsd;
 };
 
@@ -200,7 +200,7 @@ void destroy_thread_sync_data(struct thread_sync_data * tsd)
 /* Initialize resolver thread synchronization data */
 static
 int init_thread_sync_data(struct thread_data * td,
-                           const char *hostname,
+                           const char * hostname,
                            int port,
                            const struct addrinfo *hints)
 {
@@ -263,7 +263,7 @@ static int getaddrinfo_complete(struct connectdata *conn)
  * For builds without ARES, but with ENABLE_IPV6, create a resolver thread
  * and wait on it.
  */
-static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg)
+static unsigned int CURL_STDCALL getaddrinfo_thread (void *arg)
 {
   struct thread_sync_data *tsd = (struct thread_sync_data*)arg;
   struct thread_data *td = tsd->td;
@@ -303,7 +303,7 @@ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg)
 /*
  * gethostbyname_thread() resolves a name and then exits.
  */
-static unsigned int CURL_STDCALL gethostbyname_thread(void *arg)
+static unsigned int CURL_STDCALL gethostbyname_thread (void *arg)
 {
   struct thread_sync_data *tsd = (struct thread_sync_data *)arg;
   struct thread_data *td = tsd->td;
@@ -336,7 +336,7 @@ static unsigned int CURL_STDCALL gethostbyname_thread(void *arg)
 /*
  * destroy_async_data() cleans up async resolver data and thread handle.
  */
-static void destroy_async_data(struct Curl_async *async)
+static void destroy_async_data (struct Curl_async *async)
 {
   if(async->os_specific) {
     struct thread_data *td = (struct thread_data*) async->os_specific;
@@ -375,14 +375,14 @@ static void destroy_async_data(struct Curl_async *async)
  *
  * Returns FALSE in case of failure, otherwise TRUE.
  */
-static bool init_resolve_thread(struct connectdata *conn,
-                                const char *hostname, int port,
-                                const struct addrinfo *hints)
+static bool init_resolve_thread (struct connectdata *conn,
+                                 const char *hostname, int port,
+                                 const struct addrinfo *hints)
 {
   struct thread_data *td = calloc(1, sizeof(struct thread_data));
   int err = RESOLVER_ENOMEM;
 
-  conn->async.os_specific = (void *)td;
+  conn->async.os_specific = (void*) td;
   if(!td)
     goto err_exit;
 
@@ -525,7 +525,7 @@ CURLcode Curl_resolver_is_resolved(struct connectdata *conn,
   }
   else {
     /* poll for name lookup done with exponential backoff up to 250ms */
-    time_t elapsed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle);
+    long elapsed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle);
     if(elapsed < 0)
       elapsed = 0;
 
index 204a227..ad25459 100644 (file)
@@ -190,11 +190,6 @@ static CURLcode base64_encode(const char *table64,
   if(!insize)
     insize = strlen(indata);
 
-#if SIZEOF_SIZE_T == 4
-  if(insize > UINT_MAX/4)
-    return CURLE_OUT_OF_MEMORY;
-#endif
-
   base64data = output = malloc(insize * 4 / 3 + 4);
   if(!output)
     return CURLE_OUT_OF_MEMORY;
index 7857bbf..f31083a 100755 (executable)
@@ -55,10 +55,7 @@ my %warnings = (
     'COPYRIGHT'        => 'file missing a copyright statement',
     'BADCOMMAND'       => 'bad !checksrc! instruction',
     'UNUSEDIGNORE'     => 'a warning ignore was not used',
-    'OPENCOMMENT'      => 'file ended with a /* comment still "open"',
-    'ASTERISKSPACE'    => 'pointer declared with space after asterisk',
-    'ASTERISKNOSPACE'  => 'pointer declared without space before asterisk',
-    'ASSIGNWITHINCONDITION'  => 'assignment within conditional expression'
+    'OPENCOMMENT'      => 'file ended with a /* comment still "open"'
     );
 
 sub readwhitelist {
@@ -244,12 +241,6 @@ sub checksrc {
     }
 }
 
-sub nostrings {
-    my ($str) = @_;
-    $str =~ s/\".*\"//g;
-    return $str;
-}
-
 sub scanfile {
     my ($file) = @_;
 
@@ -336,35 +327,17 @@ sub scanfile {
                       $line, length($1), $file, $l, "\/\/ comment");
         }
 
-        my $nostr = nostrings($l);
-        # check spaces after for/if/while/function call
-        if($nostr =~ /^(.*)(for|if|while| ([a-zA-Z0-9_]+)) \((.)/) {
+        # check spaces after for/if/while
+        if($l =~ /^(.*)(for|if|while) \(/) {
             if($1 =~ / *\#/) {
                 # this is a #if, treat it differently
             }
-            elsif($3 eq "return") {
-                # return must have a space
-            }
-            elsif($4 eq "*") {
-                # (* beginning makes the space OK!
-            }
-            elsif($1 =~ / *typedef/) {
-                # typedefs can use space-paren
-            }
             else {
                 checkwarn("SPACEBEFOREPAREN", $line, length($1)+length($2), $file, $l,
                           "$2 with space");
             }
         }
 
-        if($nostr =~ /^((.*)(if) *\()(.*)\)/) {
-            my $pos = length($1);
-            if($4 =~ / = /) {
-                checkwarn("ASSIGNWITHINCONDITION",
-                          $line, $pos+1, $file, $l,
-                          "assignment within conditional expression");
-            }
-        }
         # check spaces after open parentheses
         if($l =~ /^(.*[a-z])\( /i) {
             checkwarn("SPACEAFTERPAREN",
@@ -450,7 +423,6 @@ sub scanfile {
         # scan for use of banned functions
         if($l =~ /^(.*\W)
                    (gets|
-                   strtok|
                     v?sprintf|
                     (str|_mbs|_tcs|_wcs)n?cat|
                     LoadLibrary(Ex)?(A|W)?)
@@ -498,31 +470,6 @@ sub scanfile {
             }
         }
 
-        # check for 'char * name'
-        if(($l =~ /(^.*(char|int|long|void|curl_slist|CURL|CURLM|CURLMsg|curl_httppost) *(\*+)) (\w+)/) && ($4 ne "const")) {
-            checkwarn("ASTERISKNOSPACE",
-                      $line, length($1), $file, $ol,
-                      "no space after declarative asterisk");
-        }
-        # check for 'char*'
-        if(($l =~ /(^.*(char|int|long|void|curl_slist|CURL|CURLM|CURLMsg|curl_httppost|sockaddr_in|FILE)\*)/)) {
-            checkwarn("ASTERISKNOSPACE",
-                      $line, length($1)-1, $file, $ol,
-                      "no space before asterisk");
-        }
-
-        # check for 'void func() {', but avoid false positives by requiring
-        # both an open and closed parentheses before the open brace
-        if($l =~ /^((\w).*){\z/) {
-            my $k = $1;
-            $k =~ s/const *//;
-            $k =~ s/static *//;
-            if($k =~ /\(.*\)/) {
-                checkwarn("BRACEPOS",
-                          $line, length($l)-1, $file, $ol,
-                          "wrongly placed open brace");
-            }
-        }
         $line++;
         $prevl = $ol;
     }
index 31cfc3a..74f5f52 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -98,7 +98,7 @@
 #define OS "AmigaOS"
 
 #define PACKAGE "curl"
-#define PACKAGE_BUGREPORT "a suitable mailing list: https://curl.haxx.se/mail/"
+#define PACKAGE_BUGREPORT "curl-bug@haxx.se"
 #define PACKAGE_NAME "curl"
 #define PACKAGE_STRING "curl -"
 #define PACKAGE_TARNAME "curl"
index 92983d2..2603a46 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
 /*#define RANDOM_FILE "/dev/urandom"*/
 
 #define RECV_TYPE_ARG1 int
-#define RECV_TYPE_ARG2 void *
+#define RECV_TYPE_ARG2 void*
 #define RECV_TYPE_ARG3 size_t
 #define RECV_TYPE_ARG4 int
 #define RECV_TYPE_RETV ssize_t
 
 #define SEND_TYPE_ARG1 int
 #define SEND_QUAL_ARG2 const
-#define SEND_TYPE_ARG2 void *
+#define SEND_TYPE_ARG2 void*
 #define SEND_TYPE_ARG3 size_t
 #define SEND_TYPE_ARG4 int
 #define SEND_TYPE_RETV ssize_t
index a51c8fd..32a7030 100644 (file)
@@ -30,6 +30,7 @@
 #include "progress.h"
 #include "multiif.h"
 #include "sendf.h"
+#include "rawstr.h"
 #include "conncache.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
@@ -132,16 +133,14 @@ static char *hashkey(struct connectdata *conn)
 {
   const char *hostname;
 
-  if(conn->bits.socksproxy)
-    hostname = conn->socks_proxy.host.name;
-  else if(conn->bits.httpproxy)
-    hostname = conn->http_proxy.host.name;
+  if(conn->bits.proxy)
+    hostname = conn->proxy.name;
   else if(conn->bits.conn_to_host)
     hostname = conn->conn_to_host.name;
   else
     hostname = conn->host.name;
 
-  return aprintf("%s:%ld", hostname, conn->port);
+  return aprintf("%s:%d", hostname, conn->port);
 }
 
 /* Look up the bundle with all the connections to the same host this
index 524d885..3225d70 100644 (file)
@@ -130,6 +130,9 @@ tcpkeepalive(struct Curl_easy *data,
       infof(data, "Failed to set SIO_KEEPALIVE_VALS on fd %d: %d\n",
             (int)sockfd, WSAGetLastError());
     }
+#elif defined(CURL_WINDOWS_APP)
+    (void)majorVersion;
+    detectOsState = DETECT_OS_VISTA_OR_LATER;
 #else
 #ifdef TCP_KEEPIDLE
     optval = curlx_sltosi(data->set.tcp_keepidle);
@@ -179,12 +182,12 @@ singleipconnect(struct connectdata *conn,
  *
  * @unittest: 1303
  */
-time_t Curl_timeleft(struct Curl_easy *data,
-                     struct timeval *nowp,
-                     bool duringconnect)
+long Curl_timeleft(struct Curl_easy *data,
+                   struct timeval *nowp,
+                   bool duringconnect)
 {
   int timeout_set = 0;
-  time_t timeout_ms = duringconnect?DEFAULT_CONNECT_TIMEOUT:0;
+  long timeout_ms = duringconnect?DEFAULT_CONNECT_TIMEOUT:0;
   struct timeval now;
 
   /* if a timeout is set, use the most restrictive one */
@@ -194,7 +197,7 @@ time_t Curl_timeleft(struct Curl_easy *data,
   if(duringconnect && (data->set.connecttimeout > 0))
     timeout_set |= 2;
 
-  switch(timeout_set) {
+  switch (timeout_set) {
   case 1:
     timeout_ms = data->set.timeout;
     break;
@@ -601,28 +604,26 @@ void Curl_persistconninfo(struct connectdata *conn)
 {
   memcpy(conn->data->info.conn_primary_ip, conn->primary_ip, MAX_IPADR_LEN);
   memcpy(conn->data->info.conn_local_ip, conn->local_ip, MAX_IPADR_LEN);
-  conn->data->info.conn_scheme = conn->handler->scheme;
-  conn->data->info.conn_protocol = conn->handler->protocol;
   conn->data->info.conn_primary_port = conn->primary_port;
   conn->data->info.conn_local_port = conn->local_port;
 }
 
 /* retrieves ip address and port from a sockaddr structure */
-static bool getaddressinfo(struct sockaddr *sa, char *addr,
-                           long *port)
+static bool getaddressinfo(struct sockaddr* sa, char* addr,
+                           longport)
 {
   unsigned short us_port;
-  struct sockaddr_in *si = NULL;
+  struct sockaddr_insi = NULL;
 #ifdef ENABLE_IPV6
-  struct sockaddr_in6 *si6 = NULL;
+  struct sockaddr_in6si6 = NULL;
 #endif
 #if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
-  struct sockaddr_un *su = NULL;
+  struct sockaddr_unsu = NULL;
 #endif
 
-  switch(sa->sa_family) {
+  switch (sa->sa_family) {
     case AF_INET:
-      si = (struct sockaddr_in *)(void *) 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);
@@ -632,7 +633,7 @@ static bool getaddressinfo(struct sockaddr *sa, char *addr,
       break;
 #ifdef ENABLE_IPV6
     case AF_INET6:
-      si6 = (struct sockaddr_in6 *)(void *) 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);
@@ -724,7 +725,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
 {
   struct Curl_easy *data = conn->data;
   CURLcode result = CURLE_OK;
-  time_t allow;
+  long allow;
   int error = 0;
   struct timeval now;
   int rc;
@@ -764,7 +765,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
 #endif
 
     /* check socket for connect */
-    rc = SOCKET_WRITABLE(conn->tempsock[i], 0);
+    rc = Curl_socket_ready(CURL_SOCKET_BAD, conn->tempsock[i], 0);
 
     if(rc == 0) { /* no connection yet */
       error = 0;
@@ -845,7 +846,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
   if(result) {
     /* no more addresses to try */
 
-    const char *hostname;
+    const charhostname;
 
     /* if the first address family runs out of addresses to try before
        the happy eyeball timeout, go ahead and try the next family now */
@@ -855,10 +856,8 @@ CURLcode Curl_is_connected(struct connectdata *conn,
         return result;
     }
 
-    if(conn->bits.socksproxy)
-      hostname = conn->socks_proxy.host.name;
-    else if(conn->bits.httpproxy)
-      hostname = conn->http_proxy.host.name;
+    if(conn->bits.proxy)
+      hostname = conn->proxy.name;
     else if(conn->bits.conn_to_host)
       hostname = conn->conn_to_host.name;
     else
@@ -1157,7 +1156,7 @@ CURLcode Curl_connecthost(struct connectdata *conn,  /* context */
   struct timeval before = Curl_tvnow();
   CURLcode result = CURLE_COULDNT_CONNECT;
 
-  time_t timeout_ms = Curl_timeleft(data, &before, TRUE);
+  long timeout_ms = Curl_timeleft(data, &before, TRUE);
 
   if(timeout_ms < 0) {
     /* a precaution, no need to continue if time already is up */
@@ -1247,6 +1246,24 @@ curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
       /* only store this if the caller cares for it */
       *connp = c;
     sockfd = c->sock[FIRSTSOCKET];
+    /* we have a socket connected, let's determine if the server shut down */
+    /* determine if ssl */
+    if(c->ssl[FIRSTSOCKET].use) {
+      /* use the SSL context */
+      if(!Curl_ssl_check_cxn(c))
+        return CURL_SOCKET_BAD;   /* FIN received */
+    }
+/* Minix 3.1 doesn't support any flags on recv; just assume socket is OK */
+#ifdef MSG_PEEK
+    else if(sockfd != CURL_SOCKET_BAD) {
+      /* use the socket */
+      char 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 */
+      }
+    }
+#endif
   }
   else
     return CURL_SOCKET_BAD;
@@ -1255,33 +1272,6 @@ curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
 }
 
 /*
- * Check if a connection seems to be alive.
- */
-bool Curl_connalive(struct connectdata *conn)
-{
-  /* First determine if ssl */
-  if(conn->ssl[FIRSTSOCKET].use) {
-    /* use the SSL context */
-    if(!Curl_ssl_check_cxn(conn))
-      return false;   /* FIN received */
-  }
-/* Minix 3.1 doesn't support any flags on recv; just assume socket is OK */
-#ifdef MSG_PEEK
-  else if(conn->sock[FIRSTSOCKET] == CURL_SOCKET_BAD)
-    return false;
-  else {
-    /* use the socket */
-    char buf;
-    if(recv((RECV_TYPE_ARG1)conn->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf,
-            (RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK) == 0) {
-      return false;   /* FIN received */
-    }
-  }
-#endif
-  return true;
-}
-
-/*
  * Close a socket.
  *
  * 'conn' can be NULL, beware!
@@ -1404,16 +1394,3 @@ void Curl_conncontrol(struct connectdata *conn,
                                    should assign this bit */
   }
 }
-
-/* Data received can be cached at various levels, so check them all here. */
-bool Curl_conn_data_pending(struct connectdata *conn, int sockindex)
-{
-  int readable;
-
-  if(Curl_ssl_data_pending(conn, sockindex) ||
-     Curl_recv_has_postponed_data(conn, sockindex))
-    return true;
-
-  readable = SOCKET_READABLE(conn->sock[sockindex], 0);
-  return (readable > 0 && (readable & CURL_CSELECT_IN));
-}
index 5653cb4..a7cbc9b 100644 (file)
@@ -35,9 +35,9 @@ CURLcode Curl_connecthost(struct connectdata *conn,
 
 /* generic function that returns how much time there's left to run, according
    to the timeouts set */
-time_t Curl_timeleft(struct Curl_easy *data,
-                     struct timeval *nowp,
-                     bool duringconnect);
+long Curl_timeleft(struct Curl_easy *data,
+                   struct timeval *nowp,
+                   bool duringconnect);
 
 #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
 #define HAPPY_EYEBALLS_TIMEOUT     200 /* milliseconds to wait between
@@ -52,11 +52,6 @@ time_t Curl_timeleft(struct Curl_easy *data,
 curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
                                   struct connectdata **connp);
 
-/*
- * Check if a connection seems to be alive.
- */
-bool Curl_connalive(struct connectdata *conn);
-
 #ifdef USE_WINSOCK
 /* When you run a program that uses the Windows Sockets API, you may
    experience slow performance when you copy data to a TCP server.
@@ -142,6 +137,4 @@ void Curl_conncontrol(struct connectdata *conn,
 #define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP)
 #endif
 
-bool Curl_conn_data_pending(struct connectdata *conn, int sockindex);
-
 #endif /* HEADER_CURL_CONNECT_H */
index c3996a1..fa36aca 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -28,8 +28,8 @@
 #include <curl/curl.h>
 #include "sendf.h"
 #include "content_encoding.h"
-#include "strdup.h"
 #include "curl_memory.h"
+
 #include "memdebug.h"
 
 /* Comment this out if zlib is always going to be at least ver. 1.2.0.4
@@ -69,11 +69,11 @@ process_zlib_error(struct connectdata *conn, z_stream *z)
 {
   struct Curl_easy *data = conn->data;
   if(z->msg)
-    failf(data, "Error while processing content unencoding: %s",
-          z->msg);
+    failf (data, "Error while processing content unencoding: %s",
+           z->msg);
   else
-    failf(data, "Error while processing content unencoding: "
-          "Unknown failure within decompression software.");
+    failf (data, "Error while processing content unencoding: "
+           "Unknown failure within decompression software.");
 
   return CURLE_BAD_CONTENT_ENCODING;
 }
@@ -314,7 +314,7 @@ Curl_unencode_gzip_write(struct connectdata *conn,
 #ifndef OLD_ZLIB_SUPPORT
   /* Support for old zlib versions is compiled away and we are running with
      an old version, so return an error. */
-  return exit_zlib(z, &k->zlib_init, CURLE_WRITE_ERROR);
+  return exit_zlib(z, &k->zlib_init, CURLE_FUNCTION_NOT_FOUND);
 
 #else
   /* This next mess is to get around the potential case where there isn't
@@ -327,14 +327,14 @@ Curl_unencode_gzip_write(struct connectdata *conn,
    * can handle the gzip header themselves.
    */
 
-  switch(k->zlib_init) {
+  switch (k->zlib_init) {
   /* Skip over gzip header? */
   case ZLIB_INIT:
   {
     /* Initial call state */
     ssize_t hlen;
 
-    switch(check_gzip_header((unsigned char *)k->str, nread, &hlen)) {
+    switch (check_gzip_header((unsigned char *)k->str, nread, &hlen)) {
     case GZIP_OK:
       z->next_in = (Bytef *)k->str + hlen;
       z->avail_in = (uInt)(nread - hlen);
@@ -371,15 +371,18 @@ Curl_unencode_gzip_write(struct connectdata *conn,
   {
     /* Need more gzip header data state */
     ssize_t hlen;
+    unsigned char *oldblock = z->next_in;
+
     z->avail_in += (uInt)nread;
-    z->next_in = Curl_saferealloc(z->next_in, z->avail_in);
+    z->next_in = realloc(z->next_in, z->avail_in);
     if(z->next_in == NULL) {
+      free(oldblock);
       return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY);
     }
     /* Append the new block of data to the previous one */
     memcpy(z->next_in + z->avail_in - nread, k->str, nread);
 
-    switch(check_gzip_header(z->next_in, z->avail_in, &hlen)) {
+    switch (check_gzip_header(z->next_in, z->avail_in, &hlen)) {
     case GZIP_OK:
       /* This is the zlib stream data */
       free(z->next_in);
index 9462843..d5a83fd 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -90,12 +90,13 @@ Example set of cookies:
 
 #include "urldata.h"
 #include "cookie.h"
+#include "strequal.h"
 #include "strtok.h"
 #include "sendf.h"
 #include "slist.h"
 #include "share.h"
 #include "strtoofft.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "curl_memrchr.h"
 #include "inet_pton.h"
 
@@ -125,7 +126,7 @@ static bool tailmatch(const char *cooke_domain, const char *hostname)
   if(hostname_len < cookie_domain_len)
     return FALSE;
 
-  if(!strcasecompare(cooke_domain, hostname+hostname_len-cookie_domain_len))
+  if(!Curl_raw_equal(cooke_domain, hostname+hostname_len-cookie_domain_len))
     return FALSE;
 
   /* A lead char of cookie_domain is not '.'.
@@ -146,12 +147,12 @@ static bool tailmatch(const char *cooke_domain, const char *hostname)
  * matching cookie path and url path
  * RFC6265 5.1.4 Paths and Path-Match
  */
-static bool pathmatch(const char *cookie_path, const char *request_uri)
+static bool pathmatch(const char* cookie_path, const char* request_uri)
 {
   size_t cookie_path_len;
   size_t uri_path_len;
-  char *uri_path = NULL;
-  char *pos;
+  charuri_path = NULL;
+  charpos;
   bool ret = FALSE;
 
   /* cookie_path must not have last '/' separator. ex: /sample */
@@ -468,9 +469,9 @@ Curl_cookie_add(struct Curl_easy *data,
           /* this was a "<name>=" with no content, and we must allow
              'secure' and 'httponly' specified this weirdly */
           done = TRUE;
-          if(strcasecompare("secure", name))
+          if(Curl_raw_equal("secure", name))
             co->secure = TRUE;
-          else if(strcasecompare("httponly", name))
+          else if(Curl_raw_equal("httponly", name))
             co->httponly = TRUE;
           else if(sep)
             /* there was a '=' so we're not done parsing this field */
@@ -478,7 +479,7 @@ Curl_cookie_add(struct Curl_easy *data,
         }
         if(done)
           ;
-        else if(strcasecompare("path", name)) {
+        else if(Curl_raw_equal("path", name)) {
           strstore(&co->path, whatptr);
           if(!co->path) {
             badcookie = TRUE; /* out of memory bad */
@@ -490,8 +491,9 @@ Curl_cookie_add(struct Curl_easy *data,
             break;
           }
         }
-        else if(strcasecompare("domain", name)) {
+        else if(Curl_raw_equal("domain", name)) {
           bool is_ip;
+          const char *dotp;
 
           /* Now, we make sure that our host is within the given domain,
              or the given domain is not valid and thus cannot be set. */
@@ -499,23 +501,13 @@ Curl_cookie_add(struct Curl_easy *data,
           if('.' == whatptr[0])
             whatptr++; /* ignore preceding dot */
 
-#ifndef USE_LIBPSL
-          /*
-           * Without PSL we don't know when the incoming cookie is set on a
-           * TLD or otherwise "protected" suffix. To reduce risk, we require a
-           * dot OR the exact host name being "localhost".
-           */
-          {
-            const char *dotp;
-            /* check for more dots */
-            dotp = strchr(whatptr, '.');
-            if(!dotp && !strcasecompare("localhost", whatptr))
-              domain=":";
-          }
-#endif
-
           is_ip = isip(domain ? domain : whatptr);
 
+          /* check for more dots */
+          dotp = strchr(whatptr, '.');
+          if(!dotp)
+            domain=":";
+
           if(!domain
              || (is_ip && !strcmp(whatptr, domain))
              || (!is_ip && tailmatch(whatptr, domain))) {
@@ -537,14 +529,14 @@ Curl_cookie_add(struct Curl_easy *data,
                   whatptr);
           }
         }
-        else if(strcasecompare("version", name)) {
+        else if(Curl_raw_equal("version", name)) {
           strstore(&co->version, whatptr);
           if(!co->version) {
             badcookie = TRUE;
             break;
           }
         }
-        else if(strcasecompare("max-age", name)) {
+        else if(Curl_raw_equal("max-age", name)) {
           /* Defined in RFC2109:
 
              Optional.  The Max-Age attribute defines the lifetime of the
@@ -560,7 +552,7 @@ Curl_cookie_add(struct Curl_easy *data,
             break;
           }
         }
-        else if(strcasecompare("expires", name)) {
+        else if(Curl_raw_equal("expires", name)) {
           strstore(&co->expirestr, whatptr);
           if(!co->expirestr) {
             badcookie = TRUE;
@@ -721,7 +713,7 @@ Curl_cookie_add(struct Curl_easy *data,
            As far as I can see, it is set to true when the cookie says
            .domain.com and to false when the domain is complete www.domain.com
         */
-        co->tailmatch = strcasecompare(ptr, "TRUE")?TRUE:FALSE;
+        co->tailmatch = Curl_raw_equal(ptr, "TRUE")?TRUE:FALSE;
         break;
       case 2:
         /* It turns out, that sometimes the file format allows the path
@@ -750,7 +742,7 @@ Curl_cookie_add(struct Curl_easy *data,
         fields++; /* add a field and fall down to secure */
         /* FALLTHROUGH */
       case 3:
-        co->secure = strcasecompare(ptr, "TRUE")?TRUE:FALSE;
+        co->secure = Curl_raw_equal(ptr, "TRUE")?TRUE:FALSE;
         break;
       case 4:
         co->expires = curlx_strtoofft(ptr, NULL, 10);
@@ -807,8 +799,8 @@ Curl_cookie_add(struct Curl_easy *data,
   /* 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)) {
-    psl = psl_builtin();
-    if(psl && !psl_is_cookie_domain_acceptable(psl, domain, 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);
@@ -821,12 +813,11 @@ Curl_cookie_add(struct Curl_easy *data,
   clist = c->cookies;
   replace_old = FALSE;
   while(clist) {
-    if(strcasecompare(clist->name, co->name)) {
+    if(Curl_raw_equal(clist->name, co->name)) {
       /* the names are identical */
 
       if(clist->domain && co->domain) {
-        if(strcasecompare(clist->domain, co->domain) &&
-          (clist->tailmatch == co->tailmatch))
+        if(Curl_raw_equal(clist->domain, co->domain))
           /* The domains are identical */
           replace_old=TRUE;
       }
@@ -837,7 +828,7 @@ Curl_cookie_add(struct Curl_easy *data,
         /* the domains were identical */
 
         if(clist->spath && co->spath) {
-          if(strcasecompare(clist->spath, co->spath)) {
+          if(Curl_raw_equal(clist->spath, co->spath)) {
             replace_old = TRUE;
           }
           else
@@ -911,35 +902,6 @@ Curl_cookie_add(struct Curl_easy *data,
   return co;
 }
 
-/*
- * get_line() makes sure to only return complete whole lines that fit in 'len'
- * bytes and end with a newline.
- */
-static char *get_line(char *buf, int len, FILE *input)
-{
-  bool partial = FALSE;
-  while(1) {
-    char *b = fgets(buf, len, input);
-    if(b) {
-      size_t rlen = strlen(b);
-      if(rlen && (b[rlen-1] == '\n')) {
-        if(partial) {
-          partial = FALSE;
-          continue;
-        }
-        return b;
-      }
-      else
-        /* read a partial, discard the next piece that ends with newline */
-        partial = TRUE;
-    }
-    else
-      break;
-  }
-  return NULL;
-}
-
-
 /*****************************************************************************
  *
  * Curl_cookie_init()
@@ -976,7 +938,7 @@ struct CookieInfo *Curl_cookie_init(struct Curl_easy *data,
   }
   c->running = FALSE; /* this is not running, this is init */
 
-  if(file && !strcmp(file, "-")) {
+  if(file && strequal(file, "-")) {
     fp = stdin;
     fromfile=FALSE;
   }
@@ -996,7 +958,7 @@ struct CookieInfo *Curl_cookie_init(struct Curl_easy *data,
     line = malloc(MAX_COOKIE_LINE);
     if(!line)
       goto fail;
-    while(get_line(line, MAX_COOKIE_LINE, fp)) {
+    while(fgets(line, MAX_COOKIE_LINE, fp)) {
       if(checkprefix("Set-Cookie:", line)) {
         /* This is a cookie line, get it! */
         lineptr=&line[11];
@@ -1061,40 +1023,6 @@ static int cookie_sort(const void *p1, const void *p2)
   return 0;
 }
 
-#define CLONE(field)                     \
-  do {                                   \
-    if(src->field) {                     \
-      d->field = strdup(src->field);     \
-      if(!d->field)                      \
-        goto fail;                       \
-    }                                    \
-  } while(0)
-
-static struct Cookie *dup_cookie(struct Cookie *src)
-{
-  struct Cookie *d = calloc(sizeof(struct Cookie), 1);
-  if(d) {
-    CLONE(expirestr);
-    CLONE(domain);
-    CLONE(path);
-    CLONE(spath);
-    CLONE(name);
-    CLONE(value);
-    CLONE(maxage);
-    CLONE(version);
-    d->expires = src->expires;
-    d->tailmatch = src->tailmatch;
-    d->secure = src->secure;
-    d->livecookie = src->livecookie;
-    d->httponly = src->httponly;
-  }
-  return d;
-
-  fail:
-  freecookie(d);
-  return NULL;
-}
-
 /*****************************************************************************
  *
  * Curl_cookie_getlist()
@@ -1139,7 +1067,7 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
       /* now check if the domain is correct */
       if(!co->domain ||
          (co->tailmatch && !is_ip && tailmatch(co->domain, host)) ||
-         ((!co->tailmatch || is_ip) && strcasecompare(host, co->domain)) ) {
+         ((!co->tailmatch || is_ip) && Curl_raw_equal(host, co->domain)) ) {
         /* the right part of the host matches the domain stuff in the
            cookie data */
 
@@ -1150,8 +1078,11 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
           /* and now, we know this is a match and we should create an
              entry for the return-linked-list */
 
-          newco = dup_cookie(co);
+          newco = malloc(sizeof(struct Cookie));
           if(newco) {
+            /* first, copy the whole source cookie: */
+            memcpy(newco, co, sizeof(struct Cookie));
+
             /* then modify our next */
             newco->next = mainco;
 
@@ -1163,7 +1094,12 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
           else {
             fail:
             /* failure, clear up the allocated chain and return NULL */
-            Curl_cookie_freelist(mainco);
+            while(mainco) {
+              co = mainco->next;
+              free(mainco);
+              mainco = co;
+            }
+
             return NULL;
           }
         }
@@ -1215,7 +1151,7 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
 void Curl_cookie_clearall(struct CookieInfo *cookies)
 {
   if(cookies) {
-    Curl_cookie_freelist(cookies->cookies);
+    Curl_cookie_freelist(cookies->cookies, TRUE);
     cookies->cookies = NULL;
     cookies->numcookies = 0;
   }
@@ -1227,14 +1163,21 @@ void Curl_cookie_clearall(struct CookieInfo *cookies)
  *
  * Free a list of cookies previously returned by Curl_cookie_getlist();
  *
+ * The 'cookiestoo' argument tells this function whether to just free the
+ * list or actually also free all cookies within the list as well.
+ *
  ****************************************************************************/
 
-void Curl_cookie_freelist(struct Cookie *co)
+void Curl_cookie_freelist(struct Cookie *co, bool cookiestoo)
 {
   struct Cookie *next;
   while(co) {
     next = co->next;
-    freecookie(co);
+    if(cookiestoo)
+      freecookie(co);
+    else
+      free(co); /* we only free the struct since the "members" are all just
+                   pointed out in the main cookie list! */
     co = next;
   }
 }
@@ -1289,7 +1232,7 @@ void Curl_cookie_cleanup(struct CookieInfo *c)
 {
   if(c) {
     free(c->filename);
-    Curl_cookie_freelist(c->cookies);
+    Curl_cookie_freelist(c->cookies, TRUE);
     free(c); /* free the base struct as well */
   }
 }
@@ -1347,7 +1290,7 @@ static int cookie_output(struct CookieInfo *c, const char *dumphere)
   /* at first, remove expired cookies */
   remove_expired(c);
 
-  if(!strcmp("-", dumphere)) {
+  if(strequal("-", dumphere)) {
     /* use stdout */
     out = stdout;
     use_stdout=TRUE;
index a9a4578..cd7c54a 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -82,7 +82,7 @@ struct Cookie *Curl_cookie_add(struct Curl_easy *data,
 
 struct Cookie *Curl_cookie_getlist(struct CookieInfo *, const char *,
                                    const char *, bool);
-void Curl_cookie_freelist(struct Cookie *cookies);
+void Curl_cookie_freelist(struct Cookie *cookies, bool cookiestoo);
 void Curl_cookie_clearall(struct CookieInfo *cookies);
 void Curl_cookie_clearsess(struct CookieInfo *cookies);
 
index 3dbfb3e..35eb2dd 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -47,8 +47,6 @@
 #  define in_addr_t unsigned long
 #endif
 
-#include <stddef.h>
-
 #include "curl_addrinfo.h"
 #include "inet_pton.h"
 #include "warnless.h"
@@ -148,8 +146,7 @@ Curl_getaddrinfo_ex(const char *nodename,
     if((size_t)ai->ai_addrlen < ss_size)
       continue;
 
-    ca = malloc(sizeof(Curl_addrinfo));
-    if(!ca) {
+    if((ca = malloc(sizeof(Curl_addrinfo))) == NULL) {
       error = EAI_MEMORY;
       break;
     }
@@ -166,8 +163,7 @@ Curl_getaddrinfo_ex(const char *nodename,
     ca->ai_canonname = NULL;
     ca->ai_next      = NULL;
 
-    ca->ai_addr = malloc(ss_size);
-    if(!ca->ai_addr) {
+    if((ca->ai_addr = malloc(ss_size)) == NULL) {
       error = EAI_MEMORY;
       free(ca);
       break;
@@ -175,8 +171,7 @@ Curl_getaddrinfo_ex(const char *nodename,
     memcpy(ca->ai_addr, ai->ai_addr, ss_size);
 
     if(ai->ai_canonname != NULL) {
-      ca->ai_canonname = strdup(ai->ai_canonname);
-      if(!ca->ai_canonname) {
+      if((ca->ai_canonname = strdup(ai->ai_canonname)) == NULL) {
         error = EAI_MEMORY;
         free(ca->ai_addr);
         free(ca);
@@ -291,24 +286,21 @@ Curl_he2ai(const struct hostent *he, int port)
     size_t ss_size;
 #ifdef ENABLE_IPV6
     if(he->h_addrtype == AF_INET6)
-      ss_size = sizeof(struct sockaddr_in6);
+      ss_size = sizeof (struct sockaddr_in6);
     else
 #endif
-      ss_size = sizeof(struct sockaddr_in);
+      ss_size = sizeof (struct sockaddr_in);
 
-    ai = calloc(1, sizeof(Curl_addrinfo));
-    if(!ai) {
+    if((ai = calloc(1, sizeof(Curl_addrinfo))) == NULL) {
       result = CURLE_OUT_OF_MEMORY;
       break;
     }
-    ai->ai_canonname = strdup(he->h_name);
-    if(!ai->ai_canonname) {
+    if((ai->ai_canonname = strdup(he->h_name)) == NULL) {
       result = CURLE_OUT_OF_MEMORY;
       free(ai);
       break;
     }
-    ai->ai_addr = calloc(1, ss_size);
-    if(!ai->ai_addr) {
+    if((ai->ai_addr = calloc(1, ss_size)) == NULL) {
       result = CURLE_OUT_OF_MEMORY;
       free(ai->ai_canonname);
       free(ai);
@@ -333,7 +325,7 @@ Curl_he2ai(const struct hostent *he, int port)
 
     /* leave the rest of the struct filled with zero */
 
-    switch(ai->ai_family) {
+    switch (ai->ai_family) {
     case AF_INET:
       addr = (void *)ai->ai_addr; /* storage area for this info */
 
@@ -483,48 +475,34 @@ Curl_addrinfo *Curl_str2addr(char *address, int port)
 /**
  * Given a path to a Unix domain socket, return a newly allocated Curl_addrinfo
  * struct initialized with this path.
- * Set '*longpath' to TRUE if the error is a too long path.
  */
-Curl_addrinfo *Curl_unix2addr(const char *path, bool *longpath, bool abstract)
+Curl_addrinfo *Curl_unix2addr(const char *path)
 {
   Curl_addrinfo *ai;
   struct sockaddr_un *sa_un;
   size_t path_len;
 
-  *longpath = FALSE;
-
   ai = calloc(1, sizeof(Curl_addrinfo));
   if(!ai)
     return NULL;
-  ai->ai_addr = calloc(1, sizeof(struct sockaddr_un));
-  if(!ai->ai_addr) {
+  if((ai->ai_addr = calloc(1, sizeof(struct sockaddr_un))) == NULL) {
     free(ai);
     return NULL;
   }
-
-  sa_un = (void *) ai->ai_addr;
-  sa_un->sun_family = AF_UNIX;
-
   /* sun_path must be able to store the NUL-terminated path */
-  path_len = strlen(path) + 1;
-  if(path_len > sizeof(sa_un->sun_path)) {
+  path_len = strlen(path);
+  if(path_len >= sizeof(sa_un->sun_path)) {
     free(ai->ai_addr);
     free(ai);
-    *longpath = TRUE;
     return NULL;
   }
 
   ai->ai_family = AF_UNIX;
   ai->ai_socktype = SOCK_STREAM; /* assume reliable transport for HTTP */
-  ai->ai_addrlen = (curl_socklen_t)
-    ((offsetof(struct sockaddr_un, sun_path) + path_len) & 0x7FFFFFFF);
-
-  /* Abstract Unix domain socket have NULL prefix instead of suffix */
-  if(abstract)
-    memcpy(sa_un->sun_path + 1, path, path_len - 1);
-  else
-    memcpy(sa_un->sun_path, path, path_len); /* copy NUL byte */
-
+  ai->ai_addrlen = (curl_socklen_t) sizeof(struct sockaddr_un);
+  sa_un = (void *) ai->ai_addr;
+  sa_un->sun_family = AF_UNIX;
+  memcpy(sa_un->sun_path, path, path_len + 1); /* copy NUL byte */
   return ai;
 }
 #endif
@@ -598,7 +576,7 @@ void Curl_addrinfo_set_port(Curl_addrinfo *addrinfo, int port)
   struct sockaddr_in6 *addr6;
 #endif
   for(ca = addrinfo; ca != NULL; ca = ca->ai_next) {
-    switch(ca->ai_family) {
+    switch (ca->ai_family) {
     case AF_INET:
       addr = (void *)ca->ai_addr; /* storage area for this info */
       addr->sin_port = htons((unsigned short)port);
index 8f6f3d1..1a681e6 100644 (file)
@@ -80,7 +80,7 @@ Curl_ip2addr(int af, const void *inaddr, const char *hostname, int port);
 Curl_addrinfo *Curl_str2addr(char *dotted, int port);
 
 #ifdef USE_UNIX_SOCKETS
-Curl_addrinfo *Curl_unix2addr(const char *path, bool *longpath, bool abstract);
+Curl_addrinfo *Curl_unix2addr(const char *path);
 #endif
 
 #if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) && \
index 49c1b8a..f7dbd23 100644 (file)
@@ -67,7 +67,7 @@
 #cmakedefine CURL_DISABLE_VERBOSE_STRINGS 1
 
 /* to make a symbol visible */
-#cmakedefine CURL_EXTERN_SYMBOL ${CURL_EXTERN_SYMBOL}
+#cmakedefine CURL_EXTERN_SYMBOL 1
 /* Ensure using CURL_EXTERN_SYMBOL is possible */
 #ifndef CURL_EXTERN_SYMBOL
 #define CURL_EXTERN_SYMBOL
 /* Define to 1 if you have the send function. */
 #cmakedefine HAVE_SEND 1
 
-/* Define to 1 if you have the 'fsetxattr' function. */
-#cmakedefine HAVE_FSETXATTR 1
-
-/* fsetxattr() takes 5 args */
-#cmakedefine HAVE_FSETXATTR_5 1
-
-/* fsetxattr() takes 6 args */
-#cmakedefine HAVE_FSETXATTR_6 1
-
 /* Define to 1 if you have the <setjmp.h> header file. */
 #cmakedefine HAVE_SETJMP_H 1
 
 /* if OpenSSL is in use */
 #cmakedefine USE_OPENSSL 1
 
-/* to enable NGHTTP2  */
-#cmakedefine USE_NGHTTP2 1
-
 /* if Unix domain sockets are enabled  */
 #cmakedefine USE_UNIX_SOCKETS
 
index 60e9d23..ebdf680 100644 (file)
 /* Define to 1 if you have the connect function. */
 #undef HAVE_CONNECT
 
+/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
+#undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
+
 /* Define to 1 if you have the <crypto.h> header file. */
 #undef HAVE_CRYPTO_H
 
 /* Define to 1 if you have a working gmtime_r function. */
 #undef HAVE_GMTIME_R
 
-/* Define to 1 if you have the `gnutls_alpn_set_protocols' function. */
-#undef HAVE_GNUTLS_ALPN_SET_PROTOCOLS
-
 /* Define to 1 if you have the `gnutls_certificate_set_x509_key_file2'
    function. */
 #undef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
 
-/* Define to 1 if you have the `gnutls_ocsp_req_init' function. */
-#undef HAVE_GNUTLS_OCSP_REQ_INIT
-
 /* if you have the function gnutls_srp_verifier */
 #undef HAVE_GNUTLS_SRP
 
 /* if you have MIT Kerberos */
 #undef HAVE_GSSMIT
 
-/* Define to 1 if you have the <idn2.h> header file. */
-#undef HAVE_IDN2_H
+/* Define to 1 if you have the `idna_strerror' function. */
+#undef HAVE_IDNA_STRERROR
+
+/* Define to 1 if you have the `idn_free' function. */
+#undef HAVE_IDN_FREE
+
+/* Define to 1 if you have the <idn-free.h> header file. */
+#undef HAVE_IDN_FREE_H
 
 /* Define to 1 if you have the <ifaddrs.h> header file. */
 #undef HAVE_IFADDRS_H
 /* Define to 1 if you have the <libgen.h> header file. */
 #undef HAVE_LIBGEN_H
 
-/* Define to 1 if you have the `idn2' library (-lidn2). */
-#undef HAVE_LIBIDN2
+/* Define to 1 if you have the `idn' library (-lidn). */
+#undef HAVE_LIBIDN
 
 /* Define to 1 if using libressl. */
 #undef HAVE_LIBRESSL
 /* Define to 1 if you have the `RAND_egd' function. */
 #undef HAVE_RAND_EGD
 
+/* Define to 1 if you have the `RAND_screen' function. */
+#undef HAVE_RAND_SCREEN
+
+/* Define to 1 if you have the `RAND_status' function. */
+#undef HAVE_RAND_STATUS
+
 /* Define to 1 if you have the recv function. */
 #undef HAVE_RECV
 
 /* Define to 1 if you have the <time.h> header file. */
 #undef HAVE_TIME_H
 
+/* Define to 1 if you have the <tld.h> header file. */
+#undef HAVE_TLD_H
+
+/* Define to 1 if you have the `tld_strerror' function. */
+#undef HAVE_TLD_STRERROR
+
 /* Define to 1 if you have the `uname' function. */
 #undef HAVE_UNAME
 
 /* if CyaSSL/WolfSSL is enabled */
 #undef USE_CYASSL
 
-/* to enable Apple OS native SSL/TLS support */
+/* to enable iOS/Mac OS X native SSL/TLS support */
 #undef USE_DARWINSSL
 
 /* if GnuTLS is enabled */
 /* if you want POSIX threaded DNS lookup */
 #undef USE_THREADS_POSIX
 
-/* if you want Win32 threaded DNS lookup */
-#undef USE_THREADS_WIN32
-
 /* Use TLS-SRP authentication */
 #undef USE_TLS_SRP
 
index b123a00..421c9f7 100644 (file)
@@ -34,7 +34,7 @@
  *
  * The function is a port of the Java based oddParity() function over at:
  *
- * https://davenport.sourceforge.io/ntlm.html
+ * http://davenport.sourceforge.net/ntlm.html
  *
  * Parameters:
  *
index c2d21de..76deca6 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -37,7 +37,7 @@
  *
  * Returns the integer.
  */
-unsigned short Curl_read16_le(const unsigned char *buf)
+unsigned short Curl_read16_le(unsigned char *buf)
 {
   return (unsigned short)(((unsigned short)buf[0]) |
                           ((unsigned short)buf[1] << 8));
@@ -56,7 +56,7 @@ unsigned short Curl_read16_le(const unsigned char *buf)
  *
  * Returns the integer.
  */
-unsigned int Curl_read32_le(const unsigned char *buf)
+unsigned int Curl_read32_le(unsigned char *buf)
 {
   return ((unsigned int)buf[0]) | ((unsigned int)buf[1] << 8) |
          ((unsigned int)buf[2] << 16) | ((unsigned int)buf[3] << 24);
@@ -77,7 +77,7 @@ unsigned int Curl_read32_le(const unsigned char *buf)
  * Returns the integer.
  */
 #if defined(HAVE_LONGLONG)
-unsigned long long Curl_read64_le(const unsigned char *buf)
+unsigned long long Curl_read64_le(unsigned char *buf)
 {
   return ((unsigned long long)buf[0]) |
          ((unsigned long long)buf[1] << 8) |
@@ -89,7 +89,7 @@ unsigned long long Curl_read64_le(const unsigned char *buf)
          ((unsigned long long)buf[7] << 56);
 }
 #else
-unsigned __int64 Curl_read64_le(const unsigned char *buf)
+unsigned __int64 Curl_read64_le(unsigned char *buf)
 {
   return ((unsigned __int64)buf[0]) | ((unsigned __int64)buf[1] << 8) |
          ((unsigned __int64)buf[2] << 16) | ((unsigned __int64)buf[3] << 24) |
@@ -113,7 +113,7 @@ unsigned __int64 Curl_read64_le(const unsigned char *buf)
  *
  * Returns the integer.
  */
-unsigned short Curl_read16_be(const unsigned char *buf)
+unsigned short Curl_read16_be(unsigned char *buf)
 {
   return (unsigned short)(((unsigned short)buf[0] << 8) |
                           ((unsigned short)buf[1]));
@@ -132,7 +132,7 @@ unsigned short Curl_read16_be(const unsigned char *buf)
  *
  * Returns the integer.
  */
-unsigned int Curl_read32_be(const unsigned char *buf)
+unsigned int Curl_read32_be(unsigned char *buf)
 {
   return ((unsigned int)buf[0] << 24) | ((unsigned int)buf[1] << 16) |
          ((unsigned int)buf[2] << 8) | ((unsigned int)buf[3]);
@@ -153,7 +153,7 @@ unsigned int Curl_read32_be(const unsigned char *buf)
  * Returns the integer.
  */
 #if defined(HAVE_LONGLONG)
-unsigned long long Curl_read64_be(const unsigned char *buf)
+unsigned long long Curl_read64_be(unsigned char *buf)
 {
   return ((unsigned long long)buf[0] << 56) |
          ((unsigned long long)buf[1] << 48) |
@@ -165,7 +165,7 @@ unsigned long long Curl_read64_be(const unsigned char *buf)
          ((unsigned long long)buf[7]);
 }
 #else
-unsigned __int64 Curl_read64_be(const unsigned char *buf)
+unsigned __int64 Curl_read64_be(unsigned char *buf)
 {
   return ((unsigned __int64)buf[0] << 56) | ((unsigned __int64)buf[1] << 48) |
          ((unsigned __int64)buf[2] << 40) | ((unsigned __int64)buf[3] << 32) |
index 8a2b07a..df8398c 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
  ***************************************************************************/
 
 /* Converts a 16-bit integer from little endian */
-unsigned short Curl_read16_le(const unsigned char *buf);
+unsigned short Curl_read16_le(unsigned char *buf);
 
 /* Converts a 32-bit integer from little endian */
-unsigned int Curl_read32_le(const unsigned char *buf);
+unsigned int Curl_read32_le(unsigned char *buf);
 
 #if (CURL_SIZEOF_CURL_OFF_T > 4)
 /* Converts a 64-bit integer from little endian */
 #if defined(HAVE_LONGLONG)
-unsigned long long Curl_read64_le(const unsigned char *buf);
+unsigned long long Curl_read64_le(unsigned char *buf);
 #else
-unsigned __int64 Curl_read64_le(const unsigned char *buf);
+unsigned __int64 Curl_read64_le(unsigned char *buf);
 #endif
 #endif
 
 /* Converts a 16-bit integer from big endian */
-unsigned short Curl_read16_be(const unsigned char *buf);
+unsigned short Curl_read16_be(unsigned char *buf);
 
 /* Converts a 32-bit integer from big endian */
-unsigned int Curl_read32_be(const unsigned char *buf);
+unsigned int Curl_read32_be(unsigned char *buf);
 
 #if (CURL_SIZEOF_CURL_OFF_T > 4)
 /* Converts a 64-bit integer from big endian */
 #if defined(HAVE_LONGLONG)
-unsigned long long Curl_read64_be(const unsigned char *buf);
+unsigned long long Curl_read64_be(unsigned char *buf);
 #else
-unsigned __int64 Curl_read64_be(const unsigned char *buf);
+unsigned __int64 Curl_read64_be(unsigned char *buf);
 #endif
 #endif
 
index 8337c72..2591fd8 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 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
@@ -48,8 +48,8 @@
  * For libcurl static library release builds no overriding takes place.
  */
 
-int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen)
-{
+int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen) {
+
 #ifndef HAVE_GETHOSTNAME
 
   /* Allow compilation and return failure when unavailable */
@@ -59,7 +59,7 @@ int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen)
 
 #else
   int err;
-  char *dot;
+  chardot;
 
 #ifdef DEBUGBUILD
 
index 83f3fa0..bf7c766 100644 (file)
@@ -94,7 +94,7 @@ static size_t display_gss_error(OM_uint32 status, int type,
     if(GSS_LOG_BUFFER_LEN > len + status_string.length + 3) {
       len += snprintf(buf + len, GSS_LOG_BUFFER_LEN - len,
                       "%.*s. ", (int)status_string.length,
-                      (char *)status_string.value);
+                      (char*)status_string.value);
     }
     gss_release_buffer(&min_stat, &status_string);
   } while(!GSS_ERROR(maj_stat) && msg_ctx != 0);
index 756dc9e..41703b4 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
 
 #ifndef CURL_DISABLE_CRYPTO_AUTH
 
-typedef void    (* HMAC_hinit_func)(void *context);
-typedef void    (* HMAC_hupdate_func)(void *context,
-                                      const unsigned char *data,
+typedef void    (* HMAC_hinit_func)(void * context);
+typedef void    (* HMAC_hupdate_func)(void * context,
+                                      const unsigned char * data,
                                       unsigned int len);
-typedef void    (* HMAC_hfinal_func)(unsigned char *result, void *context);
+typedef void    (* HMAC_hfinal_func)(unsigned char * result, void * context);
 
 
 /* Per-hash function HMAC parameters. */
@@ -46,21 +46,21 @@ typedef struct {
 /* HMAC computation context. */
 
 typedef struct {
-  const HMAC_params *hmac_hash; /* Hash function definition. */
-  void *hmac_hashctxt1;         /* Hash function context 1. */
-  void *hmac_hashctxt2;         /* Hash function context 2. */
+  const HMAC_params *   hmac_hash;      /* Hash function definition. */
+  void *                hmac_hashctxt1; /* Hash function context 1. */
+  void *                hmac_hashctxt2; /* Hash function context 2. */
 } HMAC_context;
 
 
 /* Prototypes. */
 
-HMAC_context * Curl_HMAC_init(const HMAC_params *hashparams,
-                              const unsigned char *key,
+HMAC_context * Curl_HMAC_init(const HMAC_params * hashparams,
+                              const unsigned char * key,
                               unsigned int keylen);
-int Curl_HMAC_update(HMAC_context *context,
-                     const unsigned char *data,
+int Curl_HMAC_update(HMAC_context * context,
+                     const unsigned char * data,
                      unsigned int len);
-int Curl_HMAC_final(HMAC_context *context, unsigned char *result);
+int Curl_HMAC_final(HMAC_context * context, unsigned char * result);
 
 #endif
 
index e02983c..4b9da2c 100644 (file)
@@ -27,7 +27,7 @@
 /*
  * NTLM details:
  *
- * https://davenport.sourceforge.io/ntlm.html
+ * http://davenport.sourceforge.net/ntlm.html
  * https://www.innovation.ch/java/ntlm.html
  */
 
 
 #include "urldata.h"
 #include "non-ascii.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "curl_ntlm_core.h"
 #include "curl_md5.h"
 #include "curl_hmac.h"
@@ -566,7 +566,7 @@ CURLcode Curl_ntlm_core_mk_nt_hash(struct Curl_easy *data,
     gcry_md_hd_t MD4pw;
     gcry_md_open(&MD4pw, GCRY_MD_MD4, 0);
     gcry_md_write(MD4pw, pw, 2 * len);
-    memcpy(ntbuffer, gcry_md_read(MD4pw, 0), MD4_DIGEST_LENGTH);
+    memcpy (ntbuffer, gcry_md_read (MD4pw, 0), MD4_DIGEST_LENGTH);
     gcry_md_close(MD4pw);
 #elif defined(USE_MBEDTLS)
     mbedtls_md4(pw, 2 * len, ntbuffer);
@@ -715,10 +715,8 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
 
   /* Create the BLOB structure */
   snprintf((char *)ptr + NTLM_HMAC_MD5_LEN, NTLMv2_BLOB_LEN,
-           "%c%c%c%c"   /* NTLMv2_BLOB_SIGNATURE */
+           NTLMv2_BLOB_SIGNATURE
            "%c%c%c%c",  /* Reserved = 0 */
-           NTLMv2_BLOB_SIGNATURE[0], NTLMv2_BLOB_SIGNATURE[1],
-           NTLMv2_BLOB_SIGNATURE[2], NTLMv2_BLOB_SIGNATURE[3],
            0, 0, 0, 0);
 
   Curl_write64_le(tw, ptr + 24);
index 9f5b87b..afdea16 100644 (file)
@@ -28,7 +28,7 @@
 /*
  * NTLM details:
  *
- * https://davenport.sourceforge.io/ntlm.html
+ * http://davenport.sourceforge.net/ntlm.html
  * https://www.innovation.ch/java/ntlm.html
  */
 
@@ -51,7 +51,6 @@
 #include "curl_ntlm_wb.h"
 #include "url.h"
 #include "strerror.h"
-#include "strdup.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
@@ -157,8 +156,7 @@ static CURLcode ntlm_wb_init(struct connectdata *conn, const char *userp)
   }
   slash = strpbrk(username, "\\/");
   if(slash) {
-    domain = strdup(username);
-    if(!domain)
+    if((domain = strdup(username)) == NULL)
       return CURLE_OUT_OF_MEMORY;
     slash = domain + (slash - username);
     *slash = '\0';
@@ -295,10 +293,11 @@ static CURLcode ntlm_wb_response(struct connectdata *conn,
       buf[len_out - 1] = '\0';
       break;
     }
-    newbuf = Curl_saferealloc(buf, len_out + NTLM_BUFSIZE);
-    if(!newbuf)
+    newbuf = realloc(buf, len_out + NTLM_BUFSIZE);
+    if(!newbuf) {
+      free(buf);
       return CURLE_OUT_OF_MEMORY;
-
+    }
     buf = newbuf;
   }
 
@@ -350,7 +349,7 @@ CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
 
   if(proxy) {
     allocuserpwd = &conn->allocptr.proxyuserpwd;
-    userp = conn->http_proxy.user;
+    userp = conn->proxyuser;
     ntlm = &conn->proxyntlm;
     authp = &conn->data->state.authproxy;
   }
index 807f5de..65fa529 100644 (file)
@@ -42,6 +42,8 @@
 #include "curl_sasl.h"
 #include "warnless.h"
 #include "strtok.h"
+#include "strequal.h"
+#include "rawstr.h"
 #include "sendf.h"
 #include "non-ascii.h" /* included for Curl_convert_... prototypes */
 /* The last 3 #include files should be in this order */
@@ -157,7 +159,7 @@ CURLcode Curl_sasl_parse_url_auth_option(struct SASL *sasl,
     sasl->prefmech = SASL_AUTH_NONE;
   }
 
-  if(!strncmp(value, "*", len))
+  if(strnequal(value, "*", len))
     sasl->prefmech = SASL_AUTH_DEFAULT;
   else {
     mechbit = Curl_sasl_decode_mech(value, len, &mechlen);
@@ -262,13 +264,10 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct connectdata *conn,
   size_t len = 0;
   saslstate state1 = SASL_STOP;
   saslstate state2 = SASL_FINAL;
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
 #if defined(USE_KERBEROS5)
-  const char *service = data->set.str[STRING_SERVICE_NAME] ?
-    data->set.str[STRING_SERVICE_NAME] :
-    sasl->params->service;
+  const charservice = data->set.str[STRING_SERVICE_NAME] ?
+                        data->set.str[STRING_SERVICE_NAME] :
+                        sasl->params->service;
 #endif
 
   sasl->force_ir = force_ir;    /* Latch for future use */
@@ -344,8 +343,8 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct connectdata *conn,
 
       if(force_ir || data->set.sasl_ir)
         result = Curl_auth_create_oauth_bearer_message(data, conn->user,
-                                                       hostname,
-                                                       port,
+                                                       conn->host.name,
+                                                       conn->port,
                                                        conn->oauth_bearer,
                                                        &resp, &len);
     }
@@ -411,9 +410,6 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct connectdata *conn,
   struct Curl_easy *data = conn->data;
   saslstate newstate = SASL_FINAL;
   char *resp = NULL;
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
 #if !defined(CURL_DISABLE_CRYPTO_AUTH)
   char *serverdata;
   char *chlg = NULL;
@@ -548,8 +544,8 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct connectdata *conn,
     /* Create the authorisation message */
     if(sasl->authused == SASL_MECH_OAUTHBEARER) {
       result = Curl_auth_create_oauth_bearer_message(data, conn->user,
-                                                     hostname,
-                                                     port,
+                                                     conn->host.name,
+                                                     conn->port,
                                                      conn->oauth_bearer,
                                                      &resp, &len);
 
index 7bdde26..3f94e14 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -30,8 +30,8 @@ struct Curl_sec_client_mech {
   void (*end)(void *);
   int (*check_prot)(void *, int);
   int (*overhead)(void *, int, int);
-  int (*encode)(void *, const void *, int, int, void **);
-  int (*decode)(void *, void *, int, int, struct connectdata *);
+  int (*encode)(void *, const void*, int, int, void**);
+  int (*decode)(void *, void*, int, int, struct connectdata *);
 };
 
 #define AUTH_OK         0
@@ -39,11 +39,11 @@ struct Curl_sec_client_mech {
 #define AUTH_ERROR      2
 
 #ifdef HAVE_GSSAPI
-int Curl_sec_read_msg(struct connectdata *conn, char *,
-                      enum protection_level);
-void Curl_sec_end(struct connectdata *);
-CURLcode Curl_sec_login(struct connectdata *);
-int Curl_sec_request_prot(struct connectdata *conn, const char *level);
+int Curl_sec_read_msg (struct connectdata *conn, char *,
+                       enum protection_level);
+void Curl_sec_end (struct connectdata *);
+CURLcode Curl_sec_login (struct connectdata *);
+int Curl_sec_request_prot (struct connectdata *conn, const char *level);
 
 extern struct Curl_sec_client_mech Curl_krb5_client_mech;
 #endif
index 0fe3633..9f29b2e 100644 (file)
 
 #  ifdef __minix
      /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
-     extern char *strtok_r(char *s, const char *delim, char **last);
-     extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp);
+     extern char * strtok_r(char *s, const char *delim, char **last);
+     extern struct tm * gmtime_r(const time_t * const timep, struct tm *tmp);
 #  endif
 
 #  define DIR_CHAR      "/"
@@ -599,9 +599,10 @@ int netware_init(void);
 #endif
 #endif
 
-#if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H)
-/* The lib and header are present */
-#define USE_LIBIDN2
+#if defined(HAVE_LIBIDN) && defined(HAVE_TLD_H)
+/* The lib was present and the tld.h header (which is missing in libidn 0.3.X
+   but we only work with libidn 0.4.1 or later) */
+#define USE_LIBIDN
 #endif
 
 #ifndef SIZEOF_TIME_T
@@ -633,17 +634,11 @@ 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_OPENSSL) || defined(USE_WINDOWS_SSPI) || \
-    defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_DARWINSSL) || \
-    defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO)
+    defined(USE_GNUTLS) || defined(USE_MBEDTLS) || defined(USE_NSS) || \
+    defined(USE_DARWINSSL) || defined(USE_OS400CRYPTO) || \
+    defined(USE_WIN32_CRYPTO)
 
 #define USE_NTLM
-
-#elif defined(USE_MBEDTLS)
-#  include <mbedtls/md4.h>
-#  if defined(MBEDTLS_MD4_C)
-#define USE_NTLM
-#  endif
-
 #endif
 #endif
 
index a78eff5..c98d8bb 100644 (file)
@@ -59,7 +59,7 @@ static void *curl_thread_create_thunk(void *arg)
   return 0;
 }
 
-curl_thread_t Curl_thread_create(unsigned int (*func) (void *), void *arg)
+curl_thread_t Curl_thread_create(unsigned int (*func) (void*), void *arg)
 {
   curl_thread_t t = malloc(sizeof(pthread_t));
   struct curl_actual_call *ac = malloc(sizeof(struct curl_actual_call));
@@ -100,8 +100,7 @@ int Curl_thread_join(curl_thread_t *hnd)
 
 #elif defined(USE_THREADS_WIN32)
 
-/* !checksrc! disable SPACEBEFOREPAREN 1 */
-curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *),
+curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void*),
                                  void *arg)
 {
 #ifdef _WIN32_WCE
index 9e0d14a..8cbac63 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -50,8 +50,7 @@
 
 #if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
 
-/* !checksrc! disable SPACEBEFOREPAREN 1 */
-curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *),
+curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void*),
                                  void *arg);
 
 void Curl_thread_destroy(curl_thread_t hnd);
index 6168dc1..448a34f 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -34,8 +34,8 @@
    functions while they still are offered publicly. They will be made library-
    private one day */
 
-#include "strcase.h"
-/* "strcase.h" provides the strcasecompare protos */
+#include "strequal.h"
+/* "strequal.h" provides the strequal protos */
 
 #include "strtoofft.h"
 /* "strtoofft.h" provides this function: curlx_strtoofft(), returns a
    be removed from a future libcurl official API:
    curlx_getenv
    curlx_mprintf (and its variations)
-   curlx_strcasecompare
-   curlx_strncasecompare
+   curlx_strequal
+   curlx_strnequal
 
 */
 
 #define curlx_getenv curl_getenv
+#define curlx_strequal curl_strequal
+#define curlx_strnequal curl_strnequal
+#define curlx_raw_equal Curl_raw_equal
 #define curlx_mvsnprintf curl_mvsnprintf
 #define curlx_msnprintf curl_msnprintf
 #define curlx_maprintf curl_maprintf
index 69defc4..a7b5965 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
 #include <curl/curl.h>
 #include "transfer.h"
 #include "sendf.h"
-#include "escape.h"
+
 #include "progress.h"
+#include "strequal.h"
 #include "dict.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -95,12 +96,12 @@ static char *unescape_word(struct Curl_easy *data, const char *inputbuff)
   char *newp;
   char *dictp;
   char *ptr;
-  size_t len;
+  int len;
   char ch;
   int olen=0;
 
-  CURLcode result = Curl_urldecode(data, inputbuff, 0, &newp, &len, FALSE);
-  if(!newp || result)
+  newp = curl_easy_unescape(data, inputbuff, 0, &len);
+  if(!newp)
     return NULL;
 
   dictp = malloc(((size_t)len)*2 + 1); /* add one for terminating zero */
@@ -144,9 +145,9 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
     /* AUTH is missing */
   }
 
-  if(strncasecompare(path, DICT_MATCH, sizeof(DICT_MATCH)-1) ||
-     strncasecompare(path, DICT_MATCH2, sizeof(DICT_MATCH2)-1) ||
-     strncasecompare(path, DICT_MATCH3, sizeof(DICT_MATCH3)-1)) {
+  if(Curl_raw_nequal(path, DICT_MATCH, sizeof(DICT_MATCH)-1) ||
+      Curl_raw_nequal(path, DICT_MATCH2, sizeof(DICT_MATCH2)-1) ||
+      Curl_raw_nequal(path, DICT_MATCH3, sizeof(DICT_MATCH3)-1)) {
 
     word = strchr(path, ':');
     if(word) {
@@ -202,9 +203,9 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
     Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
                         -1, NULL); /* no upload */
   }
-  else if(strncasecompare(path, DICT_DEFINE, sizeof(DICT_DEFINE)-1) ||
-          strncasecompare(path, DICT_DEFINE2, sizeof(DICT_DEFINE2)-1) ||
-          strncasecompare(path, DICT_DEFINE3, sizeof(DICT_DEFINE3)-1)) {
+  else if(Curl_raw_nequal(path, DICT_DEFINE, sizeof(DICT_DEFINE)-1) ||
+           Curl_raw_nequal(path, DICT_DEFINE2, sizeof(DICT_DEFINE2)-1) ||
+           Curl_raw_nequal(path, DICT_DEFINE3, sizeof(DICT_DEFINE3)-1)) {
 
     word = strchr(path, ':');
     if(word) {
index bed94a4..583de15 100644 (file)
@@ -50,6 +50,7 @@
 #include <sys/param.h>
 #endif
 
+#include "strequal.h"
 #include "urldata.h"
 #include <curl/curl.h>
 #include "transfer.h"
@@ -143,6 +144,28 @@ static CURLcode win32_init(void)
   return CURLE_OK;
 }
 
+#ifdef USE_LIBIDN
+/*
+ * Initialise use of IDNA library.
+ * It falls back to ASCII if $CHARSET isn't defined. This doesn't work for
+ * idna_to_ascii_lz().
+ */
+static void idna_init (void)
+{
+#ifdef WIN32
+  char buf[60];
+  UINT cp = GetACP();
+
+  if(!getenv("CHARSET") && cp > 0) {
+    snprintf(buf, sizeof(buf), "CHARSET=cp%u", cp);
+    putenv(buf);
+  }
+#else
+  /* to do? */
+#endif
+}
+#endif  /* USE_LIBIDN */
+
 /* true globals -- for curl_global_init() and curl_global_cleanup() */
 static unsigned int  initialized;
 static long          init_flags;
@@ -194,7 +217,7 @@ curl_calloc_callback Curl_ccalloc;
 #endif
 
 /**
- * curl_global_init() globally initializes curl given a bitwise set of the
+ * curl_global_init() globally initializes cURL given a bitwise set of the
  * different features of what to initialize.
  */
 static CURLcode global_init(long flags, bool memoryfuncs)
@@ -239,6 +262,10 @@ static CURLcode global_init(long flags, bool memoryfuncs)
   }
 #endif
 
+#ifdef USE_LIBIDN
+  idna_init();
+#endif
+
   if(Curl_resolver_global_init()) {
     DEBUGF(fprintf(stderr, "Error: resolver_global_init failed\n"));
     return CURLE_FAILED_INIT;
@@ -265,7 +292,7 @@ static CURLcode global_init(long flags, bool memoryfuncs)
 
 
 /**
- * curl_global_init() globally initializes curl given a bitwise set of the
+ * curl_global_init() globally initializes cURL given a bitwise set of the
  * different features of what to initialize.
  */
 CURLcode curl_global_init(long flags)
@@ -274,7 +301,7 @@ CURLcode curl_global_init(long flags)
 }
 
 /*
- * curl_global_init_mem() globally initializes curl and also registers the
+ * curl_global_init_mem() globally initializes cURL and also registers the
  * user provided callback routines.
  */
 CURLcode curl_global_init_mem(long flags, curl_malloc_callback m,
@@ -306,7 +333,7 @@ CURLcode curl_global_init_mem(long flags, curl_malloc_callback m,
 }
 
 /**
- * curl_global_cleanup() globally cleanups curl, uses the value of
+ * curl_global_cleanup() globally cleanups cURL, uses the value of
  * "init_flags" to determine what needs to be cleaned up and what doesn't.
  */
 void curl_global_cleanup(void)
@@ -870,11 +897,6 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
    * get setup on-demand in the code, as that would probably decrease
    * the likeliness of us forgetting to init a buffer here in the future.
    */
-  outcurl->set.buffer_size = data->set.buffer_size;
-  outcurl->state.buffer = malloc(CURL_BUFSIZE(outcurl->set.buffer_size) + 1);
-  if(!outcurl->state.buffer)
-    goto fail;
-
   outcurl->state.headerbuff = malloc(HEADERSIZE);
   if(!outcurl->state.headerbuff)
     goto fail;
@@ -932,8 +954,6 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
 
   Curl_convert_setup(outcurl);
 
-  Curl_initinfo(outcurl);
-
   outcurl->magic = CURLEASY_MAGIC_NUMBER;
 
   /* we reach this point and thus we are OK */
@@ -945,7 +965,6 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
   if(outcurl) {
     curl_slist_free_all(outcurl->change.cookielist);
     outcurl->change.cookielist = NULL;
-    Curl_safefree(outcurl->state.buffer);
     Curl_safefree(outcurl->state.headerbuff);
     Curl_safefree(outcurl->change.url);
     Curl_safefree(outcurl->change.referer);
@@ -976,9 +995,6 @@ void curl_easy_reset(struct Curl_easy *data)
   /* zero out Progress data: */
   memset(&data->progress, 0, sizeof(struct Progress));
 
-  /* zero out PureInfo data: */
-  Curl_initinfo(data);
-
   data->progress.flags |= PGRS_HIDE;
   data->state.current_speed = -1; /* init to negative == impossible */
 }
index 9c811b8..04230b4 100644 (file)
@@ -31,7 +31,6 @@
 #include "warnless.h"
 #include "non-ascii.h"
 #include "escape.h"
-#include "strdup.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
@@ -43,7 +42,7 @@
 */
 static bool Curl_isunreserved(unsigned char in)
 {
-  switch(in) {
+  switch (in) {
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
     case 'a': case 'b': case 'c': case 'd': case 'e':
@@ -79,21 +78,15 @@ char *curl_unescape(const char *string, int length)
 char *curl_easy_escape(struct Curl_easy *data, const char *string,
                        int inlength)
 {
-  size_t alloc;
+  size_t alloc = (inlength?(size_t)inlength:strlen(string))+1;
   char *ns;
   char *testing_ptr = NULL;
   unsigned char in; /* we need to treat the characters unsigned */
-  size_t newlen;
+  size_t newlen = alloc;
   size_t strindex=0;
   size_t length;
   CURLcode result;
 
-  if(inlength < 0)
-    return NULL;
-
-  alloc = (inlength?(size_t)inlength:strlen(string))+1;
-  newlen = alloc;
-
   ns = malloc(alloc);
   if(!ns)
     return NULL;
@@ -110,9 +103,11 @@ char *curl_easy_escape(struct Curl_easy *data, const char *string,
       newlen += 2; /* the size grows with two, since this'll become a %XX */
       if(newlen > alloc) {
         alloc *= 2;
-        testing_ptr = Curl_saferealloc(ns, alloc);
-        if(!testing_ptr)
+        testing_ptr = realloc(ns, alloc);
+        if(!testing_ptr) {
+          free(ns);
           return NULL;
+        }
         else {
           ns = testing_ptr;
         }
@@ -216,22 +211,14 @@ char *curl_easy_unescape(struct Curl_easy *data, const char *string,
                          int length, int *olen)
 {
   char *str = NULL;
-  if(length >= 0) {
-    size_t inputlen = length;
-    size_t outputlen;
-    CURLcode res = Curl_urldecode(data, string, inputlen, &str, &outputlen,
-                                  FALSE);
-    if(res)
-      return NULL;
-
-    if(olen) {
-      if(outputlen <= (size_t) INT_MAX)
-        *olen = curlx_uztosi(outputlen);
-      else
-        /* too large to return in an int, fail! */
-        Curl_safefree(str);
-    }
-  }
+  size_t inputlen = length;
+  size_t outputlen;
+  CURLcode res = Curl_urldecode(data, string, inputlen, &str, &outputlen,
+                                FALSE);
+  if(res)
+    return NULL;
+  if(olen)
+    *olen = curlx_uztosi(outputlen);
   return str;
 }
 
index e90902c..b534ec1 100644 (file)
@@ -190,15 +190,14 @@ static CURLcode file_connect(struct connectdata *conn, bool *done)
   struct FILEPROTO *file = data->req.protop;
   int fd;
 #ifdef DOS_FILESYSTEM
-  size_t i;
+  int i;
   char *actual_path;
 #endif
-  size_t real_path_len;
+  int real_path_len;
 
-  CURLcode result = Curl_urldecode(data, data->state.path, 0, &real_path,
-                                   &real_path_len, FALSE);
-  if(result)
-    return result;
+  real_path = curl_easy_unescape(data, data->state.path, 0, &real_path_len);
+  if(!real_path)
+    return CURLE_OUT_OF_MEMORY;
 
 #ifdef DOS_FILESYSTEM
   /* If the first character is a slash, and there's
@@ -313,7 +312,7 @@ static CURLcode file_upload(struct connectdata *conn)
   curl_off_t bytecount = 0;
   struct timeval now = Curl_tvnow();
   struct_stat file_stat;
-  const char *buf2;
+  const charbuf2;
 
   /*
    * Since FILE: doesn't do the full init, we need to provide some extra
@@ -476,7 +475,7 @@ static CURLcode file_do(struct connectdata *conn, bool *done)
     time_t filetime;
     struct tm buffer;
     const struct tm *tm = &buffer;
-    snprintf(buf, CURL_BUFSIZE(data->set.buffer_size),
+    snprintf(buf, sizeof(data->state.buffer),
              "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", expected_size);
     result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
     if(result)
index c214ba2..673759d 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "urldata.h" /* for struct Curl_easy */
 #include "formdata.h"
 #include "vtls/vtls.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "sendf.h"
 #include "strdup.h"
-#include "rand.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
@@ -81,7 +80,7 @@ AddHttpPost(char *name, size_t namelength,
             char *buffer, size_t bufferlength,
             char *contenttype,
             long flags,
-            struct curl_slist *contentHeader,
+            struct curl_slistcontentHeader,
             char *showfilename, char *userp,
             struct curl_httppost *parent_post,
             struct curl_httppost **httppost,
@@ -202,9 +201,9 @@ static const char *ContentTypeForFilename(const char *filename,
   if(filename) { /* in case a NULL was passed in */
     for(i=0; i<sizeof(ctts)/sizeof(ctts[0]); i++) {
       if(strlen(filename) >= strlen(ctts[i].extension)) {
-        if(strcasecompare(filename +
-                          strlen(filename) - strlen(ctts[i].extension),
-                          ctts[i].extension)) {
+        if(strequal(filename +
+                    strlen(filename) - strlen(ctts[i].extension),
+                    ctts[i].extension)) {
           contenttype = ctts[i].type;
           break;
         }
@@ -316,7 +315,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
         break;
     }
 
-    switch(option) {
+    switch (option) {
     case CURLFORM_ARRAY:
       if(array_state)
         /* we don't support an array from within an array */
@@ -548,9 +547,9 @@ 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 *)(void *)array_value:
-          va_arg(params, struct curl_slist *);
+        struct curl_slistlist = array_state?
+          (struct curl_slist*)(void*)array_value:
+          va_arg(params, struct curl_slist*);
 
         if(current_form->contentheader)
           return_value = CURL_FORMADD_OPTION_TWICE;
@@ -762,8 +761,8 @@ CURLFORMcode curl_formadd(struct curl_httppost **httppost,
  * and CD/DVD images should be either a STREAM_LF format or a fixed format.
  *
  */
-curl_off_t VmsRealFileSize(const char *name,
-                           const struct_stat *stat_buf)
+curl_off_t VmsRealFileSize(const char * name,
+                           const struct_stat * stat_buf)
 {
   char buffer[8192];
   curl_off_t count;
@@ -792,8 +791,8 @@ curl_off_t VmsRealFileSize(const char *name,
  *  if not to call a routine to get the correct size.
  *
  */
-static curl_off_t VmsSpecialSize(const char *name,
-                                 const struct_stat *stat_buf)
+static curl_off_t VmsSpecialSize(const char * name,
+                                 const struct_stat * stat_buf)
 {
   switch(stat_buf->st_fab_rfm) {
   case FAB$C_VAR:
@@ -846,23 +845,16 @@ static CURLcode AddFormData(struct FormData **formp,
       goto error;
     }
 #endif
-    if(type != FORM_DATAMEM) {
-      newform->line = malloc((size_t)length+1);
-      if(!newform->line) {
-        result = CURLE_OUT_OF_MEMORY;
-        goto error;
-      }
-      alloc2 = newform->line;
-      memcpy(newform->line, line, (size_t)length);
 
-      /* zero terminate for easier debugging */
-      newform->line[(size_t)length]=0;
-    }
-    else {
-      newform->line = (char *)line;
-      type = FORM_DATA; /* in all other aspects this is just FORM_DATA */
+    newform->line = malloc((size_t)length+1);
+    if(!newform->line) {
+      result = CURLE_OUT_OF_MEMORY;
+      goto error;
     }
+    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
@@ -871,6 +863,13 @@ static CURLcode AddFormData(struct FormData **formp,
 
   newform->type = type;
 
+  if(*formp) {
+    (*formp)->next = newform;
+    *formp = newform;
+  }
+  else
+    *formp = newform;
+
   if(size) {
     if(type != FORM_FILE)
       /* for static content as well as callback data we add the size given
@@ -879,7 +878,7 @@ static CURLcode AddFormData(struct FormData **formp,
     else {
       /* Since this is a file to be uploaded here, add the size of the actual
          file */
-      if(strcmp("-", newform->line)) {
+      if(!strequal("-", newform->line)) {
         struct_stat file;
         if(!stat(newform->line, &file) && !S_ISDIR(file.st_mode))
           *size += filesize(newform->line, file);
@@ -890,14 +889,6 @@ static CURLcode AddFormData(struct FormData **formp,
       }
     }
   }
-
-  if(*formp) {
-    (*formp)->next = newform;
-    *formp = newform;
-  }
-  else
-    *formp = newform;
-
   return CURLE_OK;
   error:
   if(newform)
@@ -915,21 +906,13 @@ static CURLcode AddFormDataf(struct FormData **formp,
                              curl_off_t *size,
                              const char *fmt, ...)
 {
-  char *s;
-  CURLcode result;
+  char s[4096];
   va_list ap;
   va_start(ap, fmt);
-  s = curl_mvaprintf(fmt, ap);
+  vsnprintf(s, sizeof(s), fmt, ap);
   va_end(ap);
 
-  if(!s)
-    return CURLE_OUT_OF_MEMORY;
-
-  result = AddFormData(formp, FORM_DATAMEM, s, 0, size);
-  if(result)
-    free(s);
-
-  return result;
+  return AddFormData(formp, FORM_DATA, s, 0, size);
 }
 
 /*
@@ -949,8 +932,8 @@ void Curl_formclean(struct FormData **form_ptr)
     if(form->type <= FORM_CONTENT)
       free(form->line); /* free the line */
     free(form);       /* free the struct */
-    form = next;
-  } while(form); /* continue */
+
+  } while((form = next) != NULL); /* continue */
 
   *form_ptr = NULL;
 }
@@ -1031,8 +1014,8 @@ void curl_formfree(struct curl_httppost *form)
     free(form->contenttype); /* free the content type */
     free(form->showfilename); /* free the faked file name */
     free(form);       /* free the struct */
-    form = next;
-  } while(form); /* continue */
+
+  } while((form = next) != NULL); /* continue */
 }
 
 #ifndef HAVE_BASENAME
@@ -1167,7 +1150,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
   curl_off_t size = 0; /* support potentially ENORMOUS formposts */
   char *boundary;
   char *fileboundary = NULL;
-  struct curl_slist *curList;
+  struct curl_slistcurList;
 
   *finalform = NULL; /* default form is empty */
 
@@ -1306,7 +1289,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
         /* we should include the contents from the specified file */
         FILE *fileread;
 
-        fileread = !strcmp("-", file->contents)?
+        fileread = strequal("-", file->contents)?
           stdin:fopen(file->contents, "rb"); /* binary read for win32  */
 
         /*
@@ -1332,7 +1315,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
             char buffer[512];
             while((nread = fread(buffer, 1, sizeof(buffer), fileread)) != 0) {
               result = AddFormData(&form, FORM_CONTENT, buffer, nread, &size);
-              if(result || feof(fileread) || ferror(fileread))
+              if(result)
                 break;
             }
           }
@@ -1374,8 +1357,8 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
       if(result)
         break;
     }
-    post = post->next;
-  } while(post); /* for each field */
+
+  } while((post = post->next) != NULL); /* for each field */
 
   /* end-boundary for everything */
   if(!result)
@@ -1427,14 +1410,13 @@ int Curl_FormInit(struct Form *form, struct FormData *formdata)
    *
    */
 # define fopen_read vmsfopenread
-static FILE * vmsfopenread(const char *file, const char *mode)
-{
+static FILE * vmsfopenread(const char *file, const char *mode) {
   struct_stat statbuf;
   int result;
 
   result = stat(file, &statbuf);
 
-  switch(statbuf.st_fab_rfm) {
+  switch (statbuf.st_fab_rfm) {
   case FAB$C_VAR:
   case FAB$C_VFC:
   case FAB$C_STMCR:
@@ -1553,7 +1535,7 @@ char *Curl_formpostheader(void *formp, size_t *len)
   struct Form *form=(struct Form *)formp;
 
   if(!form->data)
-    return NULL; /* nothing, ERROR! */
+    return 0; /* nothing, ERROR! */
 
   header = form->data->line;
   *len = form->data->length;
@@ -1571,12 +1553,8 @@ static char *formboundary(struct Curl_easy *data)
 {
   /* 24 dashes and 16 hexadecimal digits makes 64 bit (18446744073709551615)
      combinations */
-  unsigned int rnd[2];
-  CURLcode result = Curl_rand(data, &rnd[0], 2);
-  if(result)
-    return NULL;
-
-  return aprintf("------------------------%08x%08x", rnd[0], rnd[1]);
+  return aprintf("------------------------%08x%08x",
+                 Curl_rand(data), Curl_rand(data));
 }
 
 #else  /* CURL_DISABLE_HTTP */
index 69629f6..6eb7c6c 100644 (file)
@@ -23,7 +23,6 @@
  ***************************************************************************/
 
 enum formtype {
-  FORM_DATAMEM, /* already allocated FORM_DATA memory */
   FORM_DATA,    /* form metadata (convert to network encoding if necessary) */
   FORM_CONTENT, /* form content  (never convert) */
   FORM_CALLBACK, /* 'line' points to the custom pointer we pass to the callback
@@ -65,7 +64,7 @@ typedef struct FormInfo {
                          file name will be used */
   bool showfilename_alloc;
   char *userp;        /* pointer for the read callback */
-  struct curl_slist *contentheader;
+  struct curl_slistcontentheader;
   struct FormInfo *more;
 } FormInfo;
 
index aa4d5ac..4c36997 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -61,7 +61,7 @@
 #include "ftplistparser.h"
 #include "curl_sec.h"
 #include "strtoofft.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "vtls/vtls.h"
 #include "connect.h"
 #include "strerror.h"
@@ -72,7 +72,7 @@
 #include "sockaddr.h" /* required for Curl_sockaddr_storage */
 #include "multiif.h"
 #include "url.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "speedcheck.h"
 #include "warnless.h"
 #include "http_proxy.h"
@@ -384,10 +384,10 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)
  * Curl_pgrsTime(..., TIMER_STARTACCEPT);
  *
  */
-static time_t ftp_timeleft_accept(struct Curl_easy *data)
+static long ftp_timeleft_accept(struct Curl_easy *data)
 {
-  time_t timeout_ms = DEFAULT_ACCEPT_TIMEOUT;
-  time_t other;
+  long timeout_ms = DEFAULT_ACCEPT_TIMEOUT;
+  long other;
   struct timeval now;
 
   if(data->set.accepttimeout > 0)
@@ -430,7 +430,7 @@ static CURLcode ReceivedServerConnect(struct connectdata *conn, bool *received)
   struct ftp_conn *ftpc = &conn->proto.ftpc;
   struct pingpong *pp = &ftpc->pp;
   int result;
-  time_t timeout_ms;
+  long timeout_ms;
   ssize_t nread;
   int ftpcode;
 
@@ -455,7 +455,7 @@ static CURLcode ReceivedServerConnect(struct connectdata *conn, bool *received)
   result = Curl_socket_check(ctrl_sock, data_sock, CURL_SOCKET_BAD, 0);
 
   /* see if the connection request is already here */
-  switch(result) {
+  switch (result) {
   case -1: /* error */
     /* let's die here */
     failf(data, "Error while waiting for server connect");
@@ -475,7 +475,7 @@ static CURLcode ReceivedServerConnect(struct connectdata *conn, bool *received)
       if(ftpcode/100 > 3)
         return CURLE_FTP_ACCEPT_FAILED;
 
-      return CURLE_WEIRD_SERVER_REPLY;
+      return CURLE_FTP_WEIRD_SERVER_REPLY;
     }
 
     break;
@@ -499,7 +499,7 @@ static CURLcode InitiateTransfer(struct connectdata *conn)
   struct FTP *ftp = data->req.protop;
   CURLcode result = CURLE_OK;
 
-  if(conn->bits.ftp_use_data_ssl) {
+  if(conn->ssl[SECONDARYSOCKET].use) {
     /* since we only have a plaintext TCP connection here, we must now
      * do the TLS stuff */
     infof(data, "Doing the SSL/TLS handshake on the data stream\n");
@@ -547,7 +547,7 @@ static CURLcode InitiateTransfer(struct connectdata *conn)
 static CURLcode AllowServerConnect(struct connectdata *conn, bool *connected)
 {
   struct Curl_easy *data = conn->data;
-  time_t timeout_ms;
+  long timeout_ms;
   CURLcode result = CURLE_OK;
 
   *connected = FALSE;
@@ -687,8 +687,8 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
    * line in a response or continue reading.  */
 
   curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
-  time_t timeout;              /* timeout in milliseconds */
-  time_t interval_ms;
+  long timeout;              /* timeout in milliseconds */
+  long interval_ms;
   struct Curl_easy *data = conn->data;
   CURLcode result = CURLE_OK;
   struct ftp_conn *ftpc = &conn->proto.ftpc;
@@ -740,8 +740,8 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
        * wait for more data anyway.
        */
     }
-    else if(!Curl_conn_data_pending(conn, FIRSTSOCKET)) {
-      switch(SOCKET_READABLE(sockfd, interval_ms)) {
+    else {
+      switch (Curl_socket_ready(sockfd, CURL_SOCKET_BAD, interval_ms)) {
       case -1: /* select() error, stop reading */
         failf(data, "FTP response aborted due to select/poll error: %d",
               SOCKERRNO);
@@ -1035,8 +1035,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
     if(*string_ftpport == '[') {
       /* [ipv6]:port(-range) */
       ip_start = string_ftpport + 1;
-      ip_end = strchr(string_ftpport, ']');
-      if(ip_end)
+      if((ip_end = strchr(string_ftpport, ']')) != NULL)
         strncpy(addr, ip_start, ip_end - ip_start);
     }
     else
@@ -1044,35 +1043,30 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
       if(*string_ftpport == ':') {
         /* :port */
         ip_end = string_ftpport;
-      }
-      else {
-        ip_end = strchr(string_ftpport, ':');
-        if(ip_end) {
-          /* either ipv6 or (ipv4|domain|interface):port(-range) */
+    }
+    else if((ip_end = strchr(string_ftpport, ':')) != NULL) {
+        /* either ipv6 or (ipv4|domain|interface):port(-range) */
 #ifdef ENABLE_IPV6
-          if(Curl_inet_pton(AF_INET6, string_ftpport, sa6) == 1) {
-            /* ipv6 */
-            port_min = port_max = 0;
-            strcpy(addr, string_ftpport);
-            ip_end = NULL; /* this got no port ! */
-          }
-          else
-#endif
-            /* (ipv4|domain|interface):port(-range) */
-            strncpy(addr, string_ftpport, ip_end - ip_start);
-        }
-        else
-          /* ipv4|interface */
-          strcpy(addr, string_ftpport);
+      if(Curl_inet_pton(AF_INET6, string_ftpport, sa6) == 1) {
+        /* ipv6 */
+        port_min = port_max = 0;
+        strcpy(addr, string_ftpport);
+        ip_end = NULL; /* this got no port ! */
       }
+      else
+#endif
+        /* (ipv4|domain|interface):port(-range) */
+        strncpy(addr, string_ftpport, ip_end - ip_start);
+    }
+    else
+      /* ipv4|interface */
+      strcpy(addr, string_ftpport);
 
     /* parse the port */
     if(ip_end != NULL) {
-      port_start = strchr(ip_end, ':');
-      if(port_start) {
+      if((port_start = strchr(ip_end, ':')) != NULL) {
         port_min = curlx_ultous(strtoul(port_start+1, NULL, 10));
-        port_sep = strchr(port_start, '-');
-        if(port_sep) {
+        if((port_sep = strchr(port_start, '-')) != NULL) {
           port_max = curlx_ultous(strtoul(port_sep + 1, NULL, 10));
         }
         else
@@ -1841,7 +1835,7 @@ static CURLcode ftp_epsv_disable(struct connectdata *conn)
   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_WEIRD_SERVER_REPLY;
+    return CURLE_FTP_WEIRD_SERVER_REPLY;
   }
 
   infof(conn->data, "Failed EPSV attempt. Disabling EPSV\n");
@@ -1856,6 +1850,84 @@ static CURLcode ftp_epsv_disable(struct connectdata *conn)
   return result;
 }
 
+/*
+ * Perform the necessary magic that needs to be done once the TCP connection
+ * to the proxy has completed.
+ */
+static CURLcode proxy_magic(struct connectdata *conn,
+                            char *newhost, unsigned short newport,
+                            bool *magicdone)
+{
+  CURLcode result = CURLE_OK;
+  struct Curl_easy *data = conn->data;
+
+#if defined(CURL_DISABLE_PROXY)
+  (void) newhost;
+  (void) newport;
+#endif
+
+  *magicdone = FALSE;
+
+  switch(conn->proxytype) {
+  case CURLPROXY_SOCKS5:
+  case CURLPROXY_SOCKS5_HOSTNAME:
+    result = Curl_SOCKS5(conn->proxyuser, conn->proxypasswd, newhost,
+                         newport, SECONDARYSOCKET, conn);
+    *magicdone = TRUE;
+    break;
+  case CURLPROXY_SOCKS4:
+    result = Curl_SOCKS4(conn->proxyuser, newhost, newport,
+                         SECONDARYSOCKET, conn, FALSE);
+    *magicdone = TRUE;
+    break;
+  case CURLPROXY_SOCKS4A:
+    result = Curl_SOCKS4(conn->proxyuser, newhost, newport,
+                         SECONDARYSOCKET, conn, TRUE);
+    *magicdone = TRUE;
+    break;
+  case CURLPROXY_HTTP:
+  case CURLPROXY_HTTP_1_0:
+    /* do nothing here. handled later. */
+    break;
+  default:
+    failf(data, "unknown proxytype option given");
+    result = CURLE_COULDNT_CONNECT;
+    break;
+  }
+
+  if(conn->bits.tunnel_proxy && conn->bits.httpproxy) {
+    /* BLOCKING */
+    /* We want "seamless" FTP operations through HTTP proxy tunnel */
+
+    /* Curl_proxyCONNECT is based on a pointer to a struct HTTP at the
+     * member conn->proto.http; we want FTP through HTTP and we have to
+     * change the member temporarily for connecting to the HTTP proxy. After
+     * Curl_proxyCONNECT we have to set back the member to the original
+     * struct FTP pointer
+     */
+    struct HTTP http_proxy;
+    struct FTP *ftp_save = data->req.protop;
+    memset(&http_proxy, 0, sizeof(http_proxy));
+    data->req.protop = &http_proxy;
+
+    result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, newhost, newport, TRUE);
+
+    data->req.protop = ftp_save;
+
+    if(result)
+      return result;
+
+    if(conn->tunnel_state[SECONDARYSOCKET] != TUNNEL_COMPLETE) {
+      /* the CONNECT procedure is not complete, the tunnel is not yet up */
+      state(conn, FTP_STOP); /* this phase is completed */
+      return result;
+    }
+    else
+      *magicdone = TRUE;
+  }
+
+  return result;
+}
 
 static char *control_address(struct connectdata *conn)
 {
@@ -1863,7 +1935,11 @@ static char *control_address(struct connectdata *conn)
      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->bits.socksproxy)
+  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;
@@ -1987,9 +2063,7 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
      * here. We don't want to rely on a former host lookup that might've
      * expired now, instead we remake the lookup here and now!
      */
-    const char * const host_name = conn->bits.socksproxy ?
-      conn->socks_proxy.host.name : conn->http_proxy.host.name;
-    rc = Curl_resolv(conn, host_name, (int)conn->port, &addr);
+    rc = Curl_resolv(conn, conn->proxy.name, (int)conn->port, &addr);
     if(rc == CURLRESOLV_PENDING)
       /* BLOCKING, ignores the return code but 'addr' will be NULL in
          case of failure */
@@ -1999,8 +2073,9 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
       (unsigned short)conn->port; /* we connect to the proxy's port */
 
     if(!addr) {
-      failf(data, "Can't resolve proxy host %s:%hu", host_name, connectport);
-      return CURLE_COULDNT_RESOLVE_PROXY;
+      failf(data, "Can't resolve proxy host %s:%hu",
+            conn->proxy.name, connectport);
+      return CURLE_FTP_CANT_GET_HOST;
     }
   }
   else {
@@ -2040,10 +2115,6 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
     /* this just dumps information about this second connection */
     ftp_pasv_verbose(conn, addr->addr, ftpc->newhost, connectport);
 
-  Curl_safefree(conn->secondaryhostname);
-  conn->secondaryhostname = strdup(ftpc->newhost);
-  conn->secondary_port = ftpc->newport;
-
   Curl_resolv_unlock(data, addr); /* we're done using this address */
   conn->bits.do_more = TRUE;
   state(conn, FTP_STOP); /* this phase is completed */
@@ -2107,7 +2178,7 @@ static CURLcode ftp_state_mdtm_resp(struct connectdata *conn,
         /* we have a time, reformat it */
         time_t secs=time(NULL);
         /* using the good old yacc/bison yuck */
-        snprintf(buf, CURL_BUFSIZE(conn->data->set.buffer_size),
+        snprintf(buf, sizeof(conn->data->state.buffer),
                  "%04d%02d%02d %02d:%02d:%02d GMT",
                  year, month, day, hour, minute, second);
         /* now, convert this into a time() value: */
@@ -2318,7 +2389,7 @@ static CURLcode ftp_state_size_resp(struct connectdata *conn,
   if(instate == FTP_SIZE) {
 #ifdef CURL_FTP_HTTPSTYLE_HEAD
     if(-1 != filesize) {
-      snprintf(buf, CURL_BUFSIZE(data->set.buffer_size),
+      snprintf(buf, sizeof(data->state.buffer),
                "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", filesize);
       result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
       if(result)
@@ -2671,7 +2742,7 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
       else if(ftpcode != 220) {
         failf(data, "Got a %03d ftp-server response when 220 was expected",
               ftpcode);
-        return CURLE_WEIRD_SERVER_REPLY;
+        return CURLE_FTP_WEIRD_SERVER_REPLY;
       }
 
       /* We have received a 220 response fine, now we proceed. */
@@ -2692,10 +2763,7 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
       }
 #endif
 
-      if(data->set.use_ssl &&
-         (!conn->ssl[FIRSTSOCKET].use ||
-          (conn->bits.proxy_ssl_connected[FIRSTSOCKET] &&
-           !conn->proxy_ssl[FIRSTSOCKET].use))) {
+      if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
         /* We don't have a SSL/TLS connection yet, but FTPS is
            requested. Try a FTPS connection now */
 
@@ -2740,7 +2808,7 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
         /* Curl_ssl_connect is BLOCKING */
         result = Curl_ssl_connect(conn, FIRSTSOCKET);
         if(!result) {
-          conn->bits.ftp_use_data_ssl = FALSE; /* clear-text data */
+          conn->ssl[SECONDARYSOCKET].use = FALSE; /* clear-text data */
           result = ftp_state_user(conn);
         }
       }
@@ -2782,7 +2850,7 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
     case FTP_PROT:
       if(ftpcode/100 == 2)
         /* We have enabled SSL for the data connection! */
-        conn->bits.ftp_use_data_ssl =
+        conn->ssl[SECONDARYSOCKET].use =
           (data->set.use_ssl != CURLUSESSL_CONTROL) ? TRUE : FALSE;
       /* FTP servers typically responds with 500 if they decide to reject
          our 'P' request */
@@ -2823,7 +2891,6 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
     case FTP_PWD:
       if(ftpcode == 257) {
         char *ptr=&data->state.buffer[4];  /* start on the first letter */
-        const size_t buf_size = CURL_BUFSIZE(data->set.buffer_size);
         char *dir;
         char *store;
 
@@ -2841,7 +2908,7 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
         */
 
         /* scan for the first double-quote for non-standard responses */
-        while(ptr < &data->state.buffer[buf_size]
+        while(ptr < &data->state.buffer[sizeof(data->state.buffer)]
               && *ptr != '\n' && *ptr != '\0' && *ptr != '"')
           ptr++;
 
@@ -2932,7 +2999,7 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
 
         /* Check for special servers here. */
 
-        if(strcasecompare(os, "OS/400")) {
+        if(strequal(os, "OS/400")) {
           /* Force OS400 name format 1. */
           result = Curl_pp_sendf(&ftpc->pp, "%s", "SITE NAMEFMT 1");
           if(result) {
@@ -3098,7 +3165,7 @@ static CURLcode ftp_multi_statemach(struct connectdata *conn,
   struct ftp_conn *ftpc = &conn->proto.ftpc;
   CURLcode result = Curl_pp_statemach(&ftpc->pp, FALSE);
 
-  /* Check for the state outside of the Curl_socket_check() return code checks
+  /* Check for the state outside of the Curl_socket_ready() return code checks
      since at times we are in fact already in this state when this function
      gets called. */
   *done = (ftpc->state == FTP_STOP) ? TRUE : FALSE;
@@ -3183,7 +3250,7 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
   ssize_t nread;
   int ftpcode;
   CURLcode result = CURLE_OK;
-  char *path = NULL;
+  char *path;
   const char *path_to_use = data->state.path;
 
   if(!ftp)
@@ -3231,12 +3298,13 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
     ftpc->known_filesize = -1;
   }
 
-  if(!result)
-    /* get the "raw" path */
-    result = Curl_urldecode(data, path_to_use, 0, &path, NULL, FALSE);
-  if(result) {
-    /* We can limp along anyway (and should try to since we may already be in
-     * the error path) */
+  /* get the "raw" path */
+  path = curl_easy_unescape(data, path_to_use, 0, NULL);
+  if(!path) {
+    /* out of memory, but we can limp along anyway (and should try to
+     * since we may already be in the out of memory cleanup path) */
+    if(!result)
+      result = CURLE_OUT_OF_MEMORY;
     ftpc->ctl_valid = FALSE; /* mark control connection as bad */
     connclose(conn, "FTP: out of memory!"); /* mark for connection closure */
     ftpc->prevpath = NULL; /* no path remembering */
@@ -3599,6 +3667,10 @@ static CURLcode ftp_do_more(struct connectdata *conn, int *completep)
     /* Ready to do more? */
     if(connected) {
       DEBUGF(infof(data, "DO-MORE connected phase starts\n"));
+      if(conn->bits.proxy) {
+        infof(data, "Connection to proxy confirmed\n");
+        result = proxy_magic(conn, ftpc->newhost, ftpc->newport, &connected);
+      }
     }
     else {
       if(result && (ftpc->count1 == 0)) {
@@ -3610,18 +3682,6 @@ static CURLcode ftp_do_more(struct connectdata *conn, int *completep)
     }
   }
 
-  result = Curl_proxy_connect(conn, SECONDARYSOCKET);
-  if(result)
-    return result;
-
-  if(CONNECT_SECONDARYSOCKET_PROXY_SSL())
-    return result;
-
-  if(conn->bits.tunnel_proxy && conn->bits.httpproxy &&
-     conn->tunnel_state[SECONDARYSOCKET] != TUNNEL_COMPLETE)
-    return result;
-
-
   if(ftpc->state) {
     /* already in a state so skip the intial commands.
        They are only done to kickstart the do_more state */
@@ -3880,7 +3940,7 @@ static CURLcode wc_statemach(struct connectdata *conn)
   struct WildcardData * const wildcard = &(conn->data->wildcard);
   CURLcode result = CURLE_OK;
 
-  switch(wildcard->state) {
+  switch (wildcard->state) {
   case CURLWC_INIT:
     result = init_wc_data(conn);
     if(wildcard->state == CURLWC_CLEAN)
@@ -4031,7 +4091,8 @@ static CURLcode ftp_do(struct connectdata *conn, bool *done)
 }
 
 
-CURLcode Curl_ftpsend(struct connectdata *conn, const char *cmd)
+CURLcode Curl_ftpsendf(struct connectdata *conn,
+                       const char *fmt, ...)
 {
   ssize_t bytes_written;
 #define SBUF_SIZE 1024
@@ -4043,9 +4104,10 @@ CURLcode Curl_ftpsend(struct connectdata *conn, const char *cmd)
   enum protection_level data_sec = conn->data_prot;
 #endif
 
-  write_len = strlen(cmd);
-  if(write_len > (sizeof(s) -3))
-    return CURLE_BAD_FUNCTION_ARGUMENT;
+  va_list ap;
+  va_start(ap, fmt);
+  write_len = vsnprintf(s, SBUF_SIZE-3, fmt, ap);
+  va_end(ap);
 
   strcpy(&s[write_len], "\r\n"); /* append a trailing CRLF */
   write_len +=2;
@@ -4187,8 +4249,8 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
   const char *cur_pos;
   const char *filename = NULL;
 
-  cur_pos = path_to_use; /* current position in path. point at the begin of
-                            next path component */
+  cur_pos = path_to_use; /* current position in path. point at the begin
+                            of next path component */
 
   ftpc->ctl_valid = FALSE;
   ftpc->cwdfail = FALSE;
@@ -4227,7 +4289,6 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
     slash_pos=strrchr(cur_pos, '/');
     if(slash_pos || !*cur_pos) {
       size_t dirlen = slash_pos-cur_pos;
-      CURLcode result;
 
       ftpc->dirs = calloc(1, sizeof(ftpc->dirs[0]));
       if(!ftpc->dirs)
@@ -4236,13 +4297,12 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
       if(!dirlen)
         dirlen++;
 
-      result = Curl_urldecode(conn->data, slash_pos ? cur_pos : "/",
-                              slash_pos ? dirlen : 1,
-                              &ftpc->dirs[0], NULL,
-                              FALSE);
-      if(result) {
+      ftpc->dirs[0] = curl_easy_unescape(conn->data, slash_pos ? cur_pos : "/",
+                                         slash_pos ? curlx_uztosi(dirlen) : 1,
+                                         NULL);
+      if(!ftpc->dirs[0]) {
         freedirs(ftpc);
-        return result;
+        return CURLE_OUT_OF_MEMORY;
       }
       ftpc->dirdepth = 1; /* we consider it to be a single dir */
       filename = slash_pos ? slash_pos+1 : cur_pos; /* rest is file name */
@@ -4260,7 +4320,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
       return CURLE_OUT_OF_MEMORY;
 
     /* we have a special case for listing the root dir only */
-    if(!strcmp(path_to_use, "/")) {
+    if(strequal(path_to_use, "/")) {
       cur_pos++; /* make it point to the zero byte */
       ftpc->dirs[0] = strdup("/");
       ftpc->dirdepth++;
@@ -4277,15 +4337,18 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
           /* we skip empty path components, like "x//y" since the FTP command
              CWD requires a parameter and a non-existent parameter a) doesn't
              work on many servers and b) has no effect on the others. */
-          size_t len = slash_pos - cur_pos + absolute_dir;
-          CURLcode result =
-            Curl_urldecode(conn->data, cur_pos - absolute_dir, len,
-                           &ftpc->dirs[ftpc->dirdepth], NULL,
-                           TRUE);
-          if(result) {
+          int len = curlx_sztosi(slash_pos - cur_pos + absolute_dir);
+          ftpc->dirs[ftpc->dirdepth] =
+            curl_easy_unescape(conn->data, cur_pos - absolute_dir, len, NULL);
+          if(!ftpc->dirs[ftpc->dirdepth]) { /* run out of memory ... */
+            failf(data, "no memory");
+            freedirs(ftpc);
+            return CURLE_OUT_OF_MEMORY;
+          }
+          if(isBadFtpString(ftpc->dirs[ftpc->dirdepth])) {
             free(ftpc->dirs[ftpc->dirdepth]);
             freedirs(ftpc);
-            return result;
+            return CURLE_URL_MALFORMAT;
           }
         }
         else {
@@ -4321,12 +4384,15 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
   } /* switch */
 
   if(filename && *filename) {
-    CURLcode result =
-      Curl_urldecode(conn->data, filename, 0,  &ftpc->file, NULL, TRUE);
-
-    if(result) {
+    ftpc->file = curl_easy_unescape(conn->data, filename, 0, NULL);
+    if(NULL == ftpc->file) {
       freedirs(ftpc);
-      return result;
+      failf(data, "no memory");
+      return CURLE_OUT_OF_MEMORY;
+    }
+    if(isBadFtpString(ftpc->file)) {
+      freedirs(ftpc);
+      return CURLE_URL_MALFORMAT;
     }
   }
   else
@@ -4344,18 +4410,16 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
   if(ftpc->prevpath) {
     /* prevpath is "raw" so we convert the input path before we compare the
        strings */
-    size_t dlen;
-    char *path;
-    CURLcode result =
-      Curl_urldecode(conn->data, data->state.path, 0, &path, &dlen, FALSE);
-    if(result) {
+    int dlen;
+    char *path = curl_easy_unescape(conn->data, data->state.path, 0, &dlen);
+    if(!path) {
       freedirs(ftpc);
-      return result;
+      return CURLE_OUT_OF_MEMORY;
     }
 
-    dlen -= ftpc->file?strlen(ftpc->file):0;
-    if((dlen == strlen(ftpc->prevpath)) &&
-       !strncmp(path, ftpc->prevpath, dlen)) {
+    dlen -= ftpc->file?curlx_uztosi(strlen(ftpc->file)):0;
+    if((dlen == curlx_uztosi(strlen(ftpc->prevpath))) &&
+       strnequal(path, ftpc->prevpath, dlen)) {
       infof(data, "Request has same path as previous transfer\n");
       ftpc->cwddone = TRUE;
     }
@@ -4508,7 +4572,7 @@ static CURLcode ftp_setup_connection(struct connectdata *conn)
     command = Curl_raw_toupper(type[6]);
     conn->bits.type_set = TRUE;
 
-    switch(command) {
+    switch (command) {
     case 'A': /* ASCII mode */
       data->set.prefer_ascii = TRUE;
       break;
index 3bbf262..2ed5b43 100644 (file)
--- a/lib/ftp.h
+++ b/lib/ftp.h
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -31,7 +31,7 @@ extern const struct Curl_handler Curl_handler_ftp;
 extern const struct Curl_handler Curl_handler_ftps;
 #endif
 
-CURLcode Curl_ftpsend(struct connectdata *, const char *cmd);
+CURLcode Curl_ftpsendf(struct connectdata *, const char *fmt, ...);
 CURLcode Curl_GetFTPResponse(ssize_t *nread, struct connectdata *conn,
                              int *ftpcode);
 #endif /* CURL_DISABLE_FTP */
@@ -143,7 +143,7 @@ struct ftp_conn {
   ftpstate state_saved; /* transfer type saved to be reloaded after
                            data connection is established */
   curl_off_t retr_size_saved; /* Size of retrieved file saved */
-  char *server_os;     /* The target server operating system. */
+  char * server_os;     /* The target server operating system. */
   curl_off_t known_filesize; /* file size is different from -1, if wildcard
                                 LIST parsing was done and wc_statemach set
                                 it */
index f94b31b..abbf76e 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -45,6 +45,7 @@
 #include "fileinfo.h"
 #include "llist.h"
 #include "strtoofft.h"
+#include "rawstr.h"
 #include "ftp.h"
 #include "ftplistparser.h"
 #include "curl_fnmatch.h"
@@ -396,9 +397,9 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
       }
     }
 
-    switch(parser->os_type) {
+    switch (parser->os_type) {
     case OS_TYPE_UNIX:
-      switch(parser->state.UNIX.main) {
+      switch (parser->state.UNIX.main) {
       case PL_UNIX_TOTALSIZE:
         switch(parser->state.UNIX.sub.total_dirsize) {
         case PL_UNIX_TOTALSIZE_INIT:
@@ -447,7 +448,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
         }
         break;
       case PL_UNIX_FILETYPE:
-        switch(c) {
+        switch (c) {
         case '-':
           finfo->filetype = CURLFILETYPE_FILE;
           break;
@@ -967,7 +968,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
         }
         break;
       case PL_WINNT_FILENAME:
-        switch(parser->state.NT.sub.filename) {
+        switch (parser->state.NT.sub.filename) {
         case PL_WINNT_FILENAME_PRESPACE:
           if(c != ' ') {
             parser->item_offset = finfo->b_used -1;
index a1ce505..262cd93 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
 #include "memdebug.h"
 
 /*
- * Initialize statistical and informational data.
- *
- * This function is called in curl_easy_reset, curl_easy_duphandle and at the
- * beginning of a perform session. It must reset the session-info variables,
- * in particular all variables in struct PureInfo.
+ * This is supposed to be called in the beginning of a perform() session
+ * and should reset all session-info variables
  */
 CURLcode Curl_initinfo(struct Curl_easy *data)
 {
@@ -61,35 +58,23 @@ CURLcode Curl_initinfo(struct Curl_easy *data)
   info->filetime = -1; /* -1 is an illegal time and thus means unknown */
   info->timecond = FALSE;
 
-  info->header_size = 0;
-  info->request_size = 0;
-  info->proxyauthavail = 0;
-  info->httpauthavail = 0;
-  info->numconnects = 0;
-
   free(info->contenttype);
   info->contenttype = NULL;
 
-  free(info->wouldredirect);
-  info->wouldredirect = NULL;
+  info->header_size = 0;
+  info->request_size = 0;
+  info->numconnects = 0;
 
   info->conn_primary_ip[0] = '\0';
   info->conn_local_ip[0] = '\0';
   info->conn_primary_port = 0;
   info->conn_local_port = 0;
 
-  info->conn_scheme = 0;
-  info->conn_protocol = 0;
-
-#ifdef USE_SSL
-  Curl_ssl_free_certinfo(data);
-#endif
-
   return CURLE_OK;
 }
 
 static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
-                             const char **param_charp)
+                             char **param_charp)
 {
   switch(info) {
   case CURLINFO_EFFECTIVE_URL:
@@ -126,9 +111,6 @@ static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
   case CURLINFO_RTSP_SESSION_ID:
     *param_charp = data->set.str[STRING_RTSP_SESSION_ID];
     break;
-  case CURLINFO_SCHEME:
-    *param_charp = data->info.conn_scheme;
-    break;
 
   default:
     return CURLE_UNKNOWN_OPTION;
@@ -166,9 +148,6 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
   case CURLINFO_SSL_VERIFYRESULT:
     *param_longp = data->set.ssl.certverifyresult;
     break;
-  case CURLINFO_PROXY_SSL_VERIFYRESULT:
-    *param_longp = data->set.proxy_ssl.certverifyresult;
-    break;
   case CURLINFO_REDIRECT_COUNT:
     *param_longp = data->set.followlocation;
     break;
@@ -220,7 +199,7 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
     *param_longp = data->state.rtsp_CSeq_recv;
     break;
   case CURLINFO_HTTP_VERSION:
-    switch(data->info.httpversion) {
+    switch (data->info.httpversion) {
     case 10:
       *param_longp = CURL_HTTP_VERSION_1_0;
       break;
@@ -235,9 +214,6 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
       break;
     }
     break;
-  case CURLINFO_PROTOCOL:
-    *param_longp = data->info.conn_protocol;
-    break;
 
   default:
     return CURLE_UNKNOWN_OPTION;
@@ -394,7 +370,7 @@ CURLcode Curl_getinfo(struct Curl_easy *data, CURLINFO info, ...)
   va_list arg;
   long *param_longp = NULL;
   double *param_doublep = NULL;
-  const char **param_charp = NULL;
+  char **param_charp = NULL;
   struct curl_slist **param_slistp = NULL;
   curl_socket_t *param_socketp = NULL;
   int type;
@@ -408,7 +384,7 @@ CURLcode Curl_getinfo(struct Curl_easy *data, CURLINFO info, ...)
   type = CURLINFO_TYPEMASK & (int)info;
   switch(type) {
   case CURLINFO_STRING:
-    param_charp = va_arg(arg, const char **);
+    param_charp = va_arg(arg, char **);
     if(param_charp)
       result = getinfo_char(data, info, param_charp);
     break;
index a073d0b..f1efb60 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
 #include <curl/curl.h>
 #include "transfer.h"
 #include "sendf.h"
+
 #include "progress.h"
+#include "strequal.h"
 #include "gopher.h"
+#include "rawstr.h"
 #include "select.h"
 #include "url.h"
-#include "escape.h"
 #include "warnless.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -81,7 +83,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
   char *sel;
   char *sel_org = NULL;
   ssize_t amount, k;
-  size_t len;
+  int len;
 
   *done = TRUE; /* unconditionally */
 
@@ -105,7 +107,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
         newp[i] = '\x09';
 
     /* ... and finally unescape */
-    result = Curl_urldecode(data, newp, 0, &sel, &len, FALSE);
+    sel = curl_easy_unescape(data, newp, 0, &len);
     if(!sel)
       return CURLE_OUT_OF_MEMORY;
     sel_org = sel;
@@ -119,17 +121,20 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
     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)
-        break;
-
+      if(result) {
+        free(sel_org);
+        return result;
+      }
       k -= amount;
       sel += amount;
       if(k < 1)
         break; /* but it did write it all */
     }
-    else
-      break;
-
+    else {
+      failf(data, "Failed sending Gopher request");
+      free(sel_org);
+      return result;
+    }
     /* Don't busyloop. The entire loop thing is a work-around as it causes a
        BLOCKING behavior which is a NO-NO. This function should rather be
        split up in a do and a doing piece where the pieces that aren't
@@ -139,18 +144,14 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
        Wait a while for the socket to be writable. Note that this doesn't
        acknowledge the timeout.
     */
-    if(SOCKET_WRITABLE(sockfd, 100) < 0) {
-      result = CURLE_SEND_ERROR;
-      break;
-    }
+    Curl_socket_ready(CURL_SOCKET_BAD, sockfd, 100);
   }
 
   free(sel_org);
 
-  if(!result)
-    /* We can use Curl_sendf to send the terminal \r\n relatively safely and
-       save allocing another string/doing another _write loop. */
-    result = Curl_sendf(sockfd, conn, "\r\n");
+  /* We can use Curl_sendf to send the terminal \r\n relatively safely and
+     save allocing another string/doing another _write loop. */
+  result = Curl_sendf(sockfd, conn, "\r\n");
   if(result) {
     failf(data, "Failed sending Gopher request");
     return result;
index 0655042..937381b 100644 (file)
@@ -135,7 +135,7 @@ Curl_hash_add(struct curl_hash *h, void *key, size_t key_len, void *p)
 {
   struct curl_hash_element  *he;
   struct curl_llist_element *le;
-  struct curl_llist *l = FETCH_LIST(h, key, key_len);
+  struct curl_llist *l = FETCH_LIST (h, key, key_len);
 
   for(le = l->head; le; le = le->next) {
     he = (struct curl_hash_element *) le->ptr;
@@ -291,9 +291,9 @@ Curl_hash_clean_with_criterium(struct curl_hash *h, void *user,
   }
 }
 
-size_t Curl_hash_str(void *key, size_t key_length, size_t slots_num)
+size_t Curl_hash_str(voidkey, size_t key_length, size_t slots_num)
 {
-  const char *key_str = (const char *) key;
+  const charkey_str = (const char *) key;
   const char *end = key_str + key_length;
   unsigned long h = 5381;
 
index a5a6cac..57a17f0 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
 #include "llist.h"
 
 /* Hash function prototype */
-typedef size_t (*hash_function) (void *key,
+typedef size_t (*hash_function) (voidkey,
                                  size_t key_length,
                                  size_t slots_num);
 
 /*
    Comparator function prototype. Compares two keys.
 */
-typedef size_t (*comp_function) (void *key1,
+typedef size_t (*comp_function) (voidkey1,
                                  size_t key1_len,
-                                 void *key2,
+                                 void*key2,
                                  size_t key2_len);
 
 typedef void (*curl_hash_dtor)(void *);
@@ -76,7 +76,7 @@ int Curl_hash_init(struct curl_hash *h,
 
 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_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);
@@ -84,9 +84,10 @@ 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 *));
-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 Curl_hash_str(voidkey, 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);
+
 void Curl_hash_start_iterate(struct curl_hash *hash,
                              struct curl_hash_iterator *iter);
 struct curl_hash_element *
index dae9505..3df4715 100644 (file)
@@ -49,12 +49,12 @@ static const unsigned char hmac_opad = 0x5C;
 
 HMAC_context *
 Curl_HMAC_init(const HMAC_params * hashparams,
-               const unsigned char *key,
+               const unsigned char * key,
                unsigned int keylen)
 {
   size_t i;
-  HMAC_context *ctxt;
-  unsigned char *hkey;
+  HMAC_context * ctxt;
+  unsigned char * hkey;
   unsigned char b;
 
   /* Create HMAC context. */
@@ -101,7 +101,7 @@ Curl_HMAC_init(const HMAC_params * hashparams,
 }
 
 int Curl_HMAC_update(HMAC_context * ctxt,
-                     const unsigned char *data,
+                     const unsigned char * data,
                      unsigned int len)
 {
   /* Update first hash calculation. */
@@ -110,7 +110,7 @@ int Curl_HMAC_update(HMAC_context * ctxt,
 }
 
 
-int Curl_HMAC_final(HMAC_context *ctxt, unsigned char *result)
+int Curl_HMAC_final(HMAC_context * ctxt, unsigned char * result)
 {
   const HMAC_params * hashparams = ctxt->hmac_hash;
 
index cbd0893..4db9e6b 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
 
 #include "curl_setup.h"
 
-#if defined(USE_OPENSSL)                                \
-  || defined(USE_AXTLS)                                 \
-  || defined(USE_GSKIT)                                 \
-  || (defined(USE_SCHANNEL) && defined(_WIN32_WCE))
+#if defined(USE_OPENSSL) || defined(USE_AXTLS) || defined(USE_GSKIT)
 /* these backends use functions from this file */
 
 #ifdef HAVE_NETINET_IN_H
@@ -33,7 +30,7 @@
 #endif
 
 #include "hostcheck.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "inet_pton.h"
 
 #include "curl_memory.h"
@@ -80,7 +77,7 @@ static int hostmatch(char *hostname, char *pattern)
 
   pattern_wildcard = strchr(pattern, '*');
   if(pattern_wildcard == NULL)
-    return strcasecompare(pattern, hostname) ?
+    return Curl_raw_equal(pattern, hostname) ?
       CURL_HOST_MATCH : CURL_HOST_NOMATCH;
 
   /* detect IP address as hostname and fail the match if so */
@@ -97,16 +94,16 @@ static int hostmatch(char *hostname, char *pattern)
   pattern_label_end = strchr(pattern, '.');
   if(pattern_label_end == NULL || strchr(pattern_label_end+1, '.') == NULL ||
      pattern_wildcard > pattern_label_end ||
-     strncasecompare(pattern, "xn--", 4)) {
+     Curl_raw_nequal(pattern, "xn--", 4)) {
     wildcard_enabled = 0;
   }
   if(!wildcard_enabled)
-    return strcasecompare(pattern, hostname) ?
+    return Curl_raw_equal(pattern, hostname) ?
       CURL_HOST_MATCH : CURL_HOST_NOMATCH;
 
   hostname_label_end = strchr(hostname, '.');
   if(hostname_label_end == NULL ||
-     !strcasecompare(pattern_label_end, hostname_label_end))
+     !Curl_raw_equal(pattern_label_end, hostname_label_end))
     return CURL_HOST_NOMATCH;
 
   /* The wildcard must match at least one character, so the left-most
@@ -117,8 +114,8 @@ static int hostmatch(char *hostname, char *pattern)
 
   prefixlen = pattern_wildcard - pattern;
   suffixlen = pattern_label_end - (pattern_wildcard+1);
-  return strncasecompare(pattern, hostname, prefixlen) &&
-    strncasecompare(pattern_wildcard+1, hostname_label_end - suffixlen,
+  return Curl_raw_nequal(pattern, hostname, prefixlen) &&
+    Curl_raw_nequal(pattern_wildcard+1, hostname_label_end - suffixlen,
                     suffixlen) ?
     CURL_HOST_MATCH : CURL_HOST_NOMATCH;
 }
@@ -147,4 +144,4 @@ int Curl_cert_hostcheck(const char *match_pattern, const char *hostname)
   return res;
 }
 
-#endif /* OPENSSL, AXTLS, GSKIT or schannel+wince */
+#endif /* OPENSSL or AXTLS or GSKIT */
index fa4bad9..f2d9841 100644 (file)
@@ -172,7 +172,7 @@ Curl_printable_address(const Curl_addrinfo *ai, char *buf, size_t bufsize)
   const struct in6_addr *ipaddr6;
 #endif
 
-  switch(ai->ai_family) {
+  switch (ai->ai_family) {
     case AF_INET:
       sa4 = (const void *)ai->ai_addr;
       ipaddr4 = &sa4->sin_addr;
@@ -568,7 +568,7 @@ int Curl_resolv_timeout(struct connectdata *conn,
                         const char *hostname,
                         int port,
                         struct Curl_dns_entry **entry,
-                        time_t timeoutms)
+                        long timeoutms)
 {
 #ifdef USE_ALARM_TIMEOUT
 #ifdef HAVE_SIGACTION
@@ -603,14 +603,11 @@ int Curl_resolv_timeout(struct connectdata *conn,
     /* USE_ALARM_TIMEOUT defined, but no timeout actually requested */
     return Curl_resolv(conn, hostname, port, entry);
 
-  if(timeout < 1000) {
+  if(timeout < 1000)
     /* The alarm() function only provides integer second resolution, so if
        we want to wait less than one second we must bail out already now. */
-    failf(data,
-        "remaining timeout of %ld too small to resolve via SIGALRM method",
-        timeout);
     return CURLRESOLV_TIMEDOUT;
-  }
+
   /* 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).
index 1dc4079..9098ee3 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -87,7 +87,7 @@ int Curl_resolv(struct connectdata *conn, const char *hostname,
                 int port, struct Curl_dns_entry **dnsentry);
 int Curl_resolv_timeout(struct connectdata *conn, const char *hostname,
                         int port, struct Curl_dns_entry **dnsentry,
-                        time_t timeoutms);
+                        long timeoutms);
 
 #ifdef CURLRES_IPV6
 /*
@@ -131,7 +131,7 @@ int Curl_mk_dnscache(struct curl_hash *hash);
 void Curl_hostcache_prune(struct Curl_easy *data);
 
 /* Return # of adresses in a Curl_addrinfo struct */
-int Curl_num_addresses(const Curl_addrinfo *addr);
+int Curl_num_addresses (const Curl_addrinfo *addr);
 
 #if defined(CURLDEBUG) && defined(HAVE_GETNAMEINFO)
 int curl_dogetnameinfo(GETNAMEINFO_QUAL_ARG1 GETNAMEINFO_TYPE_ARG1 sa,
@@ -143,7 +143,7 @@ int curl_dogetnameinfo(GETNAMEINFO_QUAL_ARG1 GETNAMEINFO_TYPE_ARG1 sa,
 #endif
 
 /* IPv4 threadsafe resolve function used for synch and asynch builds */
-Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, int port);
+Curl_addrinfo *Curl_ipv4_resolve_r(const char * hostname, int port);
 
 CURLcode Curl_async_resolved(struct connectdata *conn,
                              bool *protocol_connect);
index e459328..15895d7 100644 (file)
@@ -291,7 +291,7 @@ Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
      * gethostbyname() is the preferred one.
      */
   else {
-    h = gethostbyname((void *)hostname);
+    h = gethostbyname((void*)hostname);
 #endif /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
   }
 
index 8db86cd..e4b9d8b 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -53,6 +53,7 @@
 #include "progress.h"
 #include "curl_base64.h"
 #include "cookie.h"
+#include "strequal.h"
 #include "vauth/vauth.h"
 #include "vtls/vtls.h"
 #include "http_digest.h"
@@ -67,7 +68,7 @@
 #include "parsedate.h" /* for the week day and month names */
 #include "strtoofft.h"
 #include "multiif.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "content_encoding.h"
 #include "http_proxy.h"
 #include "warnless.h"
@@ -76,7 +77,6 @@
 #include "pipeline.h"
 #include "http2.h"
 #include "connect.h"
-#include "strdup.h"
 
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
@@ -182,7 +182,7 @@ char *Curl_checkheaders(const struct connectdata *conn,
   struct Curl_easy *data = conn->data;
 
   for(head = data->set.headers;head; head=head->next) {
-    if(strncasecompare(head->data, thisheader, thislen))
+    if(Curl_raw_nequal(head->data, thisheader, thislen))
       return head->data;
   }
 
@@ -208,7 +208,7 @@ char *Curl_checkProxyheaders(const struct connectdata *conn,
   for(head = (conn->bits.proxy && data->set.sep_headers) ?
         data->set.proxyheaders : data->set.headers;
       head; head=head->next) {
-    if(strncasecompare(head->data, thisheader, thislen))
+    if(Curl_raw_nequal(head->data, thisheader, thislen))
       return head->data;
   }
 
@@ -288,8 +288,8 @@ static CURLcode http_output_basic(struct connectdata *conn, bool proxy)
 
   if(proxy) {
     userp = &conn->allocptr.proxyuserpwd;
-    user = conn->http_proxy.user;
-    pwd = conn->http_proxy.passwd;
+    user = conn->proxyuser;
+    pwd = conn->proxypasswd;
   }
   else {
     userp = &conn->allocptr.userpwd;
@@ -297,8 +297,7 @@ static CURLcode http_output_basic(struct connectdata *conn, bool proxy)
     pwd = conn->passwd;
   }
 
-  snprintf(data->state.buffer, CURL_BUFSIZE(data->set.buffer_size),
-           "%s:%s", user, pwd);
+  snprintf(data->state.buffer, sizeof(data->state.buffer), "%s:%s", user, pwd);
 
   result = Curl_base64_encode(data,
                               data->state.buffer, strlen(data->state.buffer),
@@ -546,8 +545,8 @@ CURLcode Curl_http_auth_act(struct connectdata *conn)
     }
   }
   if(http_should_fail(conn)) {
-    failf(data, "The requested URL returned error: %d",
-          data->req.httpcode);
+    failf (data, "The requested URL returned error: %d",
+           data->req.httpcode);
     result = CURLE_HTTP_RETURNED_ERROR;
   }
 
@@ -643,7 +642,7 @@ output_auth_headers(struct connectdata *conn,
   if(auth) {
     infof(data, "%s auth using %s with user '%s'\n",
           proxy ? "Proxy" : "Server", auth,
-          proxy ? (conn->http_proxy.user ? conn->http_proxy.user : "") :
+          proxy ? (conn->proxyuser ? conn->proxyuser : "") :
                   (conn->user ? conn->user : ""));
     authstatus->multi = (!authstatus->done) ? TRUE : FALSE;
   }
@@ -727,7 +726,7 @@ Curl_http_output_auth(struct connectdata *conn,
      conn->bits.netrc ||
      !data->state.first_host ||
      data->set.http_disable_hostname_check_before_authentication ||
-     strcasecompare(data->state.first_host, conn->host.name)) {
+     Curl_raw_equal(data->state.first_host, conn->host.name)) {
     result = output_auth_headers(conn, authhost, request, path, FALSE);
   }
   else
@@ -841,11 +840,9 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
                   auth += strlen("NTLM");
                   while(*auth && ISSPACE(*auth))
                     auth++;
-                  if(*auth) {
-                    conn->challenge_header = strdup(auth);
-                    if(!conn->challenge_header)
+                  if(*auth)
+                    if((conn->challenge_header = strdup(auth)) == NULL)
                       return CURLE_OUT_OF_MEMORY;
-                  }
                 }
               }
 #endif
@@ -1102,9 +1099,7 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
     return result;
   }
 
-  if((conn->handler->flags & PROTOPT_SSL ||
-     conn->http_proxy.proxytype == CURLPROXY_HTTPS)
-     && conn->httpversion != 20) {
+  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
@@ -1261,13 +1256,14 @@ CURLcode Curl_add_buffer(Curl_send_buffer *in, const void *inptr, size_t size)
 
     if(in->buffer)
       /* we have a buffer, enlarge the existing one */
-      new_rb = Curl_saferealloc(in->buffer, new_size);
+      new_rb = realloc(in->buffer, new_size);
     else
       /* create a new buffer */
       new_rb = malloc(new_size);
 
     if(!new_rb) {
       /* If we failed, we cleanup the whole buffer and return error */
+      Curl_safefree(in->buffer);
       free(in);
       return CURLE_OUT_OF_MEMORY;
     }
@@ -1309,7 +1305,7 @@ Curl_compareheader(const char *headerline, /* line to check */
   const char *start;
   const char *end;
 
-  if(!strncasecompare(headerline, header, hlen))
+  if(!Curl_raw_nequal(headerline, header, hlen))
     return FALSE; /* doesn't start with header */
 
   /* pass the header */
@@ -1335,7 +1331,7 @@ Curl_compareheader(const char *headerline, /* line to check */
 
   /* find the content string in the rest of the line */
   for(;len>=clen;len--, start++) {
-    if(strncasecompare(start, content, clen))
+    if(Curl_raw_nequal(start, content, clen))
       return TRUE; /* match! */
   }
 
@@ -1355,13 +1351,10 @@ CURLcode Curl_http_connect(struct connectdata *conn, bool *done)
   connkeep(conn, "HTTP default");
 
   /* the CONNECT procedure might not have been completed */
-  result = Curl_proxy_connect(conn, FIRSTSOCKET);
+  result = Curl_proxy_connect(conn);
   if(result)
     return result;
 
-  if(CONNECT_FIRSTSOCKET_PROXY_SSL())
-    return CURLE_OK; /* wait for HTTPS proxy SSL initialization to complete */
-
   if(conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
     /* nothing else to do except wait right now - we're not done here. */
     return CURLE_OK;
@@ -1404,16 +1397,50 @@ static CURLcode https_connecting(struct connectdata *conn, bool *done)
 
   return result;
 }
+#endif
 
+#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,
                          curl_socket_t *socks,
                          int numsocks)
 {
-  if(conn->handler->flags & PROTOPT_SSL)
-    return Curl_ssl_getsock(conn, socks, numsocks);
+  if(conn->handler->flags & PROTOPT_SSL) {
+    struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];
+
+    if(!numsocks)
+      return GETSOCK_BLANK;
+
+    if(connssl->connecting_state == ssl_connect_2_writing) {
+      /* write mode */
+      socks[0] = conn->sock[FIRSTSOCKET];
+      return GETSOCK_WRITESOCK(0);
+    }
+    else if(connssl->connecting_state == ssl_connect_2_reading) {
+      /* read mode */
+      socks[0] = conn->sock[FIRSTSOCKET];
+      return GETSOCK_READSOCK(0);
+    }
+  }
+
+  return CURLE_OK;
+}
+#else
+#ifdef USE_SSL
+static int https_getsock(struct connectdata *conn,
+                         curl_socket_t *socks,
+                         int numsocks)
+{
+  (void)conn;
+  (void)socks;
+  (void)numsocks;
   return GETSOCK_BLANK;
 }
 #endif /* USE_SSL */
+#endif /* USE_OPENSSL || USE_GNUTLS || USE_SCHANNEL */
 
 /*
  * Curl_http_done() gets called after a single HTTP request has been
@@ -1426,6 +1453,8 @@ CURLcode Curl_http_done(struct connectdata *conn,
   struct Curl_easy *data = conn->data;
   struct HTTP *http = data->req.protop;
 
+  infof(data, "Curl_http_done: called premature == %d\n", premature);
+
   Curl_unencode_cleanup(conn);
 
 #ifdef USE_SPNEGO
@@ -1510,20 +1539,6 @@ static bool use_http_1_1plus(const struct Curl_easy *data,
           (data->set.httpversion >= CURL_HTTP_VERSION_1_1));
 }
 
-static const char *get_http_string(const struct Curl_easy *data,
-                                   const struct connectdata *conn)
-{
-#ifdef USE_NGHTTP2
-  if(conn->proto.httpc.h2)
-    return "2";
-#endif
-
-  if(use_http_1_1plus(data, conn))
-    return "1.1";
-
-  return "1.0";
-}
-
 /* check and possibly add an Expect: header */
 static CURLcode expect100(struct Curl_easy *data,
                           struct connectdata *conn,
@@ -1633,10 +1648,6 @@ CURLcode Curl_add_custom_headers(struct connectdata *conn,
                      Connection: */
                   checkprefix("Connection", headers->data))
             ;
-          else if((conn->httpversion == 20) &&
-                  checkprefix("Transfer-Encoding:", headers->data))
-            /* HTTP/2 doesn't support chunked requests */
-            ;
           else {
             CURLcode result = Curl_add_bufferf(req_buffer, "%s\r\n",
                                                headers->data);
@@ -1923,42 +1934,47 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
   }
 #endif
 
-  ptr = Curl_checkheaders(conn, "Transfer-Encoding:");
-  if(ptr) {
-    /* Some kind of TE is requested, check if 'chunked' is chosen */
-    data->req.upload_chunky =
-      Curl_compareheader(ptr, "Transfer-Encoding:", "chunked");
-  }
+  if(conn->httpversion == 20)
+    /* In HTTP2 forbids Transfer-Encoding: chunked */
+    ptr = NULL;
   else {
-    if((conn->handler->protocol&PROTO_FAMILY_HTTP) &&
-       data->set.upload &&
-       (data->state.infilesize == -1)) {
-      if(conn->bits.authneg)
-        /* don't enable chunked during auth neg */
-        ;
-      else if(use_http_1_1plus(data, conn)) {
-        /* HTTP, upload, unknown file size and not HTTP 1.0 */
-        data->req.upload_chunky = TRUE;
+    ptr = Curl_checkheaders(conn, "Transfer-Encoding:");
+    if(ptr) {
+      /* Some kind of TE is requested, check if 'chunked' is chosen */
+      data->req.upload_chunky =
+        Curl_compareheader(ptr, "Transfer-Encoding:", "chunked");
+    }
+    else {
+      if((conn->handler->protocol&PROTO_FAMILY_HTTP) &&
+         data->set.upload &&
+         (data->state.infilesize == -1)) {
+        if(conn->bits.authneg)
+          /* don't enable chunked during auth neg */
+          ;
+        else if(use_http_1_1plus(data, conn)) {
+          /* HTTP, upload, unknown file size and not HTTP 1.0 */
+          data->req.upload_chunky = TRUE;
+        }
+        else {
+          failf(data, "Chunky upload is not supported by HTTP 1.0");
+          return CURLE_UPLOAD_FAILED;
+        }
       }
       else {
-        failf(data, "Chunky upload is not supported by HTTP 1.0");
-        return CURLE_UPLOAD_FAILED;
+        /* else, no chunky upload */
+        data->req.upload_chunky = FALSE;
       }
-    }
-    else {
-      /* else, no chunky upload */
-      data->req.upload_chunky = FALSE;
-    }
 
-    if(data->req.upload_chunky)
-      te = "Transfer-Encoding: chunked\r\n";
+      if(data->req.upload_chunky)
+        te = "Transfer-Encoding: chunked\r\n";
+    }
   }
 
   Curl_safefree(conn->allocptr.host);
 
   ptr = Curl_checkheaders(conn, "Host:");
   if(ptr && (!data->state.this_is_a_follow ||
-             strcasecompare(data->state.first_host, conn->host.name))) {
+             Curl_raw_equal(data->state.first_host, conn->host.name))) {
 #if !defined(CURL_DISABLE_COOKIES)
     /* If we have a given custom Host: header, we extract the host name in
        order to possibly use it for cookie reasons later on. We only allow the
@@ -2078,7 +2094,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
         /* when doing ftp, append ;type=<a|i> if not present */
         char *type = strstr(ppath, ";type=");
         if(type && type[6] && type[7] == 0) {
-          switch(Curl_raw_toupper(type[6])) {
+          switch (Curl_raw_toupper(type[6])) {
           case 'A':
           case 'D':
           case 'I':
@@ -2238,7 +2254,9 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
     }
   }
 
-  httpstring = get_http_string(data, conn);
+  /* Use 1.1 unless the user specifically asked for 1.0 or the server only
+     supports 1.0 */
+  httpstring= use_http_1_1plus(data, conn)?"1.1":"1.0";
 
   /* initialize a dynamic send-buffer */
   req_buffer = Curl_add_buffer_init();
@@ -2312,7 +2330,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
    * 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) {
+  switch (data->state.authproxy.picked) {
   case CURLAUTH_NEGOTIATE:
   case CURLAUTH_NTLM:
   case CURLAUTH_NTLM_WB:
@@ -2367,7 +2385,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
         }
         co = co->next; /* next cookie please */
       }
-      Curl_cookie_freelist(store);
+      Curl_cookie_freelist(store, FALSE); /* free the cookie list */
     }
     if(addcookies && !result) {
       if(!count)
@@ -2512,7 +2530,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
       postsize = data->state.infilesize;
 
     if((postsize != -1) && !data->req.upload_chunky &&
-       (conn->bits.authneg || !Curl_checkheaders(conn, "Content-Length:"))) {
+       !Curl_checkheaders(conn, "Content-Length:")) {
       /* only add Content-Length if not uploading chunked */
       result = Curl_add_bufferf(req_buffer,
                                 "Content-Length: %" CURL_FORMAT_CURL_OFF_T
@@ -2564,7 +2582,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
        we don't upload data chunked, as RFC2616 forbids us to set both
        kinds of headers (Transfer-Encoding: chunked and Content-Length) */
     if((postsize != -1) && !data->req.upload_chunky &&
-       (conn->bits.authneg || !Curl_checkheaders(conn, "Content-Length:"))) {
+       !Curl_checkheaders(conn, "Content-Length:")) {
       /* we allow replacing this header if not during auth negotiation,
          although it isn't very wise to actually set your own */
       result = Curl_add_bufferf(req_buffer,
@@ -2743,11 +2761,6 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
     }
   }
 
-  if((conn->httpversion == 20) && data->req.upload_chunky)
-    /* upload_chunky was set above to set up the request in a chunky fashion,
-       but is disabled here again to avoid that the chunked encoded version is
-       actually used when sending the request body over h2 */
-    data->req.upload_chunky = FALSE;
   return result;
 }
 
@@ -2766,7 +2779,7 @@ checkhttpprefix(struct Curl_easy *data,
   /* convert from the network encoding using a scratch area */
   char *scratch = strdup(s);
   if(NULL == scratch) {
-    failf(data, "Failed to allocate memory for conversion!");
+    failf (data, "Failed to allocate memory for conversion!");
     return FALSE; /* can't return CURLE_OUT_OF_MEMORY so return FALSE */
   }
   if(CURLE_OK != Curl_convert_from_network(data, scratch, strlen(s)+1)) {
@@ -2804,7 +2817,7 @@ checkrtspprefix(struct Curl_easy *data,
   /* convert from the network encoding using a scratch area */
   char *scratch = strdup(s);
   if(NULL == scratch) {
-    failf(data, "Failed to allocate memory for conversion!");
+    failf (data, "Failed to allocate memory for conversion!");
     return FALSE; /* can't return CURLE_OUT_OF_MEMORY so return FALSE */
   }
   if(CURLE_OK != Curl_convert_from_network(data, scratch, strlen(s)+1)) {
@@ -2856,8 +2869,8 @@ static CURLcode header_append(struct Curl_easy *data,
       /* The reason to have a max limit for this is to avoid the risk of a bad
          server feeding libcurl with a never-ending header that will cause
          reallocs infinitely */
-      failf(data, "Avoided giant realloc for header (max is %d)!",
-            CURL_MAX_HTTP_HEADER);
+      failf (data, "Avoided giant realloc for header (max is %d)!",
+             CURL_MAX_HTTP_HEADER);
       return CURLE_OUT_OF_MEMORY;
     }
 
@@ -2865,7 +2878,7 @@ static CURLcode header_append(struct Curl_easy *data,
     hbufp_index = k->hbufp - data->state.headerbuff;
     newbuff = realloc(data->state.headerbuff, newsize);
     if(!newbuff) {
-      failf(data, "Failed to alloc memory for big header!");
+      failf (data, "Failed to alloc memory for big header!");
       return CURLE_OUT_OF_MEMORY;
     }
     data->state.headersize=newsize;
@@ -3106,8 +3119,8 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
        * up and return an error.
        */
       if(http_should_fail(conn)) {
-        failf(data, "The requested URL returned error: %d",
-              k->httpcode);
+        failf (data, "The requested URL returned error: %d",
+               k->httpcode);
         return CURLE_HTTP_RETURNED_ERROR;
       }
 
@@ -3164,21 +3177,12 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
              * connection for closure after we've read the entire response.
              */
             if(!k->upload_done) {
-              if(data->set.http_keep_sending_on_error) {
-                infof(data, "HTTP error before end of send, keep sending\n");
-                if(k->exp100 > EXP100_SEND_DATA) {
-                  k->exp100 = EXP100_SEND_DATA;
-                  k->keepon |= KEEP_SEND;
-                }
-              }
-              else {
-                infof(data, "HTTP error before end of send, stop sending\n");
-                streamclose(conn, "Stop sending data before everything sent");
-                k->upload_done = TRUE;
-                k->keepon &= ~KEEP_SEND; /* don't send */
-                if(data->state.expect100header)
-                  k->exp100 = EXP100_FAILED;
-              }
+              infof(data, "HTTP error before end of send, stop sending\n");
+              streamclose(conn, "Stop sending data before everything sent");
+              k->upload_done = TRUE;
+              k->keepon &= ~KEEP_SEND; /* don't send */
+              if(data->state.expect100header)
+                k->exp100 = EXP100_FAILED;
             }
             break;
 
index 7ce4bd9..9fb669c 100644 (file)
@@ -219,10 +219,6 @@ struct http_conn {
 
   /* this is a hash of all individual streams (Curl_easy structs) */
   struct h2settings settings;
-
-  /* list of settings that will be sent */
-  nghttp2_settings_entry local_settings[3];
-  size_t local_settings_num;
 #else
   int unused; /* prevent a compiler warning */
 #endif
index af69c72..a66b8f7 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "http.h"
 #include "sendf.h"
 #include "curl_base64.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "multiif.h"
 #include "conncache.h"
 #include "url.h"
 #include "connect.h"
 #include "strtoofft.h"
-#include "strdup.h"
+
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
 #define nghttp2_session_callbacks_set_error_callback(x,y)
 #endif
 
-#if (NGHTTP2_VERSION_NUM >= 0x010c00)
-#define NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE 1
-#endif
-
-#define HTTP2_HUGE_WINDOW_SIZE (1 << 30)
-
 /*
  * Curl_http2_init_state() is called when the easy handle is created and
  * allows for HTTP/2 specific init of state.
@@ -116,11 +110,18 @@ static int http2_getsock(struct connectdata *conn,
   return http2_perform_getsock(conn, sock, numsocks);
 }
 
-/*
- * http2_stream_free() free HTTP2 stream related data
- */
-static void http2_stream_free(struct HTTP *http)
+static CURLcode http2_disconnect(struct connectdata *conn,
+                                 bool dead_connection)
 {
+  struct HTTP *http = conn->data->req.protop;
+  struct http_conn *c = &conn->proto.httpc;
+  (void)dead_connection;
+
+  DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT starts now\n"));
+
+  nghttp2_session_del(c->h2);
+  Curl_safefree(c->inbuf);
+
   if(http) {
     Curl_add_buffer_free(http->header_recvbuf);
     http->header_recvbuf = NULL; /* clear the pointer */
@@ -132,19 +133,6 @@ static void http2_stream_free(struct HTTP *http)
     free(http->push_headers);
     http->push_headers = NULL;
   }
-}
-
-static CURLcode http2_disconnect(struct connectdata *conn,
-                                 bool dead_connection)
-{
-  struct http_conn *c = &conn->proto.httpc;
-  (void)dead_connection;
-
-  DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT starts now\n"));
-
-  nghttp2_session_del(c->h2);
-  Curl_safefree(c->inbuf);
-  http2_stream_free(conn->data->req.protop);
 
   DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT done\n"));
 
@@ -235,8 +223,7 @@ int Curl_http2_ver(char *p, size_t len)
 https://tools.ietf.org/html/rfc7540#page-77
 nghttp2_error_code enums are identical.
 */
-const char *Curl_http2_strerror(uint32_t err)
-{
+const char *Curl_http2_strerror(uint32_t err) {
 #ifndef NGHTTP2_HAS_HTTP2_STRERROR
   const char *str[] = {
     "NO_ERROR",             /* 0x0 */
@@ -332,7 +319,7 @@ char *curl_pushheader_byname(struct curl_pushheaders *h, const char *header)
      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] ||
-     !strcmp(header, ":") || strchr(header + 1, ':'))
+     Curl_raw_equal(header, ":") || strchr(header + 1, ':'))
     return NULL;
   else {
     struct HTTP *stream = h->data->req.protop;
@@ -421,11 +408,9 @@ static int push_promise(struct Curl_easy *data,
       free(stream->push_headers[i]);
     free(stream->push_headers);
     stream->push_headers = NULL;
-    stream->push_headers_used = 0;
 
     if(rv) {
       /* denied, kill off the new handle again */
-      http2_stream_free(newhandle->req.protop);
       (void)Curl_close(newhandle);
       goto fail;
     }
@@ -440,7 +425,6 @@ static int push_promise(struct Curl_easy *data,
     rc = Curl_multi_add_perform(data->multi, newhandle, conn);
     if(rc) {
       infof(data, "failed to add handle to multi\n");
-      http2_stream_free(newhandle->req.protop);
       Curl_close(newhandle);
       rv = 1;
       goto fail;
@@ -857,9 +841,10 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
             stream->push_headers_alloc) {
       char **headp;
       stream->push_headers_alloc *= 2;
-      headp = Curl_saferealloc(stream->push_headers,
-                               stream->push_headers_alloc * sizeof(char *));
+      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;
       }
@@ -960,8 +945,7 @@ static ssize_t data_source_read_callback(nghttp2_session *session,
     memcpy(buf, stream->upload_mem, nread);
     stream->upload_mem += nread;
     stream->upload_len -= nread;
-    if(data_s->state.infilesize != -1)
-      stream->upload_left -= nread;
+    stream->upload_left -= nread;
   }
 
   if(stream->upload_left == 0)
@@ -976,6 +960,14 @@ static ssize_t data_source_read_callback(nghttp2_session *session,
   return nread;
 }
 
+/*
+ * The HTTP2 settings we send in the Upgrade request
+ */
+static nghttp2_settings_entry settings[] = {
+  { NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100 },
+  { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, NGHTTP2_INITIAL_WINDOW_SIZE },
+};
+
 #define H2_BUFSIZE 32768
 
 #ifdef NGHTTP2_HAS_ERROR_CALLBACK
@@ -991,23 +983,6 @@ static int error_callback(nghttp2_session *session,
 }
 #endif
 
-static void populate_settings(struct connectdata *conn,
-                              struct http_conn *httpc)
-{
-  nghttp2_settings_entry *iv = httpc->local_settings;
-
-  iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
-  iv[0].value = 100;
-
-  iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
-  iv[1].value = HTTP2_HUGE_WINDOW_SIZE;
-
-  iv[2].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
-  iv[2].value = conn->data->multi->push_cb != NULL;
-
-  httpc->local_settings_num = 3;
-}
-
 void Curl_http2_done(struct connectdata *conn, bool premature)
 {
   struct Curl_easy *data = conn->data;
@@ -1121,14 +1096,16 @@ CURLcode Curl_http2_request_upgrade(Curl_send_buffer *req,
   size_t blen;
   struct SingleRequest *k = &conn->data->req;
   uint8_t *binsettings = conn->proto.httpc.binsettings;
-  struct http_conn *httpc = &conn->proto.httpc;
 
-  populate_settings(conn, httpc);
+  /* 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.
+   */
 
   /* this returns number of bytes it wrote */
   binlen = nghttp2_pack_settings_payload(binsettings, H2_BINSETTINGS_LEN,
-                                         httpc->local_settings,
-                                         httpc->local_settings_num);
+                                         settings,
+                                         sizeof(settings)/sizeof(settings[0]));
   if(!binlen) {
     failf(conn->data, "nghttp2 unexpectedly failed on pack_settings_payload");
     return CURLE_FAILED_INIT;
@@ -1594,72 +1571,6 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,
 #define HEADER_OVERFLOW(x) \
   (x.namelen > (uint16_t)-1 || x.valuelen > (uint16_t)-1 - x.namelen)
 
-/*
- * Check header memory for the token "trailers".
- * Parse the tokens as separated by comma and surrounded by whitespace.
- * Returns TRUE if found or FALSE if not.
- */
-static bool contains_trailers(const char *p, size_t len)
-{
-  const char *end = p + len;
-  for(;;) {
-    for(; p != end && (*p == ' ' || *p == '\t'); ++p)
-      ;
-    if(p == end || (size_t)(end - p) < sizeof("trailers") - 1)
-      return FALSE;
-    if(strncasecompare("trailers", p, sizeof("trailers") - 1)) {
-      p += sizeof("trailers") - 1;
-      for(; p != end && (*p == ' ' || *p == '\t'); ++p)
-        ;
-      if(p == end || *p == ',')
-        return TRUE;
-    }
-    /* skip to next token */
-    for(; p != end && *p != ','; ++p)
-      ;
-    if(p == end)
-      return FALSE;
-    ++p;
-  }
-}
-
-typedef enum {
-  /* Send header to server */
-  HEADERINST_FORWARD,
-  /* Don't send header to server */
-  HEADERINST_IGNORE,
-  /* Discard header, and replace it with "te: trailers" */
-  HEADERINST_TE_TRAILERS
-} header_instruction;
-
-/* Decides how to treat given header field. */
-static header_instruction inspect_header(const char *name, size_t namelen,
-                                         const char *value, size_t valuelen) {
-  switch(namelen) {
-  case 2:
-    if(!strncasecompare("te", name, namelen))
-      return HEADERINST_FORWARD;
-
-    return contains_trailers(value, valuelen) ?
-           HEADERINST_TE_TRAILERS : HEADERINST_IGNORE;
-  case 7:
-    return strncasecompare("upgrade", name, namelen) ?
-           HEADERINST_IGNORE : HEADERINST_FORWARD;
-  case 10:
-    return (strncasecompare("connection", name, namelen) ||
-            strncasecompare("keep-alive", name, namelen)) ?
-           HEADERINST_IGNORE : HEADERINST_FORWARD;
-  case 16:
-    return strncasecompare("proxy-connection", name, namelen) ?
-           HEADERINST_IGNORE : HEADERINST_FORWARD;
-  case 17:
-    return strncasecompare("transfer-encoding", name, namelen) ?
-           HEADERINST_IGNORE : HEADERINST_FORWARD;
-  default:
-    return HEADERINST_FORWARD;
-  }
-}
-
 static ssize_t http2_send(struct connectdata *conn, int sockindex,
                           const void *mem, size_t len, CURLcode *err)
 {
@@ -1675,7 +1586,7 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
   size_t nheader;
   size_t i;
   size_t authority_idx;
-  char *hdbuf = (char *)mem;
+  char *hdbuf = (char*)mem;
   char *end, *line_end;
   nghttp2_data_provider data_prd;
   int32_t stream_id;
@@ -1813,6 +1724,7 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
   i = 3;
   while(i < nheader) {
     size_t hlen;
+    int skip = 0;
 
     hdbuf = line_end + 2;
 
@@ -1830,7 +1742,12 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
       goto fail;
     hlen = end - hdbuf;
 
-    if(hlen == 4 && strncasecompare("host", hdbuf, 4)) {
+    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 = strlen((char *)nva[i].name);
@@ -1843,28 +1760,16 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
     while(*hdbuf == ' ' || *hdbuf == '\t')
       ++hdbuf;
     end = line_end;
-
-    switch(inspect_header((const char *)nva[i].name, nva[i].namelen, hdbuf,
-                          end - hdbuf)) {
-    case HEADERINST_IGNORE:
-      /* skip header fields prohibited by HTTP/2 specification. */
-      --nheader;
-      continue;
-    case HEADERINST_TE_TRAILERS:
-      nva[i].value = (uint8_t*)"trailers";
-      nva[i].valuelen = sizeof("trailers") - 1;
-      break;
-    default:
+    if(!skip) {
       nva[i].value = (unsigned char *)hdbuf;
       nva[i].valuelen = (size_t)(end - hdbuf);
+      nva[i].flags = NGHTTP2_NV_FLAG_NONE;
+      if(HEADER_OVERFLOW(nva[i])) {
+        failf(conn->data, "Failed sending HTTP request: Header overflow");
+        goto fail;
+      }
+      ++i;
     }
-
-    nva[i].flags = NGHTTP2_NV_FLAG_NONE;
-    if(HEADER_OVERFLOW(nva[i])) {
-      failf(conn->data, "Failed sending HTTP request: Header overflow");
-      goto fail;
-    }
-    ++i;
   }
 
   /* :authority must come before non-pseudo header fields */
@@ -1878,22 +1783,24 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
 
   /* Warn stream may be rejected if cumulative length of headers is too large.
      It appears nghttp2 will not send a header frame larger than 64KB. */
-#define MAX_ACC 60000  /* <64KB to account for some overhead */
   {
     size_t acc = 0;
+    const size_t max_acc = 60000;  /* <64KB to account for some overhead */
 
     for(i = 0; i < nheader; ++i) {
-      acc += nva[i].namelen + nva[i].valuelen;
+      if(nva[i].namelen > max_acc - acc)
+        break;
+      acc += nva[i].namelen;
 
-      DEBUGF(infof(conn->data, "h2 header: %.*s:%.*s\n",
-                   nva[i].namelen, nva[i].name,
-                   nva[i].valuelen, nva[i].value));
+      if(nva[i].valuelen > max_acc - acc)
+        break;
+      acc += nva[i].valuelen;
     }
 
-    if(acc > MAX_ACC) {
+    if(i != nheader) {
       infof(conn->data, "http2_send: Warning: The cumulative length of all "
-            "headers exceeds %zu bytes and that could cause the "
-            "stream to be rejected.\n", MAX_ACC);
+                        "headers exceeds %zu bytes and that could cause the "
+                        "stream to be rejected.\n", max_acc);
     }
   }
 
@@ -2047,13 +1954,9 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
                                          conn->data);
   }
   else {
-    populate_settings(conn, httpc);
-
     /* stream ID is unknown at this point */
     stream->stream_id = -1;
-    rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE,
-                                 httpc->local_settings,
-                                 httpc->local_settings_num);
+    rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE, NULL, 0);
     if(rv != 0) {
       failf(data, "nghttp2_submit_settings() failed: %s(%d)",
             nghttp2_strerror(rv), rv);
@@ -2061,16 +1964,6 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
     }
   }
 
-#ifdef NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE
-  rv = nghttp2_session_set_local_window_size(httpc->h2, NGHTTP2_FLAG_NONE, 0,
-                                             HTTP2_HUGE_WINDOW_SIZE);
-  if(rv != 0) {
-    failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
-          nghttp2_strerror(rv), rv);
-    return CURLE_HTTP2;
-  }
-#endif
-
   /* 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
@@ -2086,8 +1979,7 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
                     " after upgrade: len=%zu\n",
         nread);
 
-  if(nread)
-    memcpy(httpc->inbuf, mem, nread);
+  memcpy(httpc->inbuf, mem, nread);
   httpc->inbuflen = nread;
 
   nproc = nghttp2_session_mem_recv(httpc->h2, (const uint8_t *)httpc->inbuf,
@@ -2127,82 +2019,6 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
   return CURLE_OK;
 }
 
-void Curl_http2_add_child(struct Curl_easy *parent, struct Curl_easy *child,
-                          bool exclusive)
-{
-  struct Curl_http2_dep **tail;
-  struct Curl_http2_dep *dep = calloc(1, sizeof(struct Curl_http2_dep));
-  dep->data = child;
-
-  if(parent->set.stream_dependents && exclusive) {
-    struct Curl_http2_dep *node = parent->set.stream_dependents;
-    while(node) {
-      node->data->set.stream_depends_on = child;
-      node = node->next;
-    }
-
-    tail = &child->set.stream_dependents;
-    while(*tail)
-      tail = &(*tail)->next;
-
-    DEBUGASSERT(!*tail);
-    *tail = parent->set.stream_dependents;
-    parent->set.stream_dependents = 0;
-  }
-
-  tail = &parent->set.stream_dependents;
-  while(*tail) {
-    (*tail)->data->set.stream_depends_e = FALSE;
-    tail = &(*tail)->next;
-  }
-
-  DEBUGASSERT(!*tail);
-  *tail = dep;
-
-  child->set.stream_depends_on = parent;
-  child->set.stream_depends_e = exclusive;
-}
-
-void Curl_http2_remove_child(struct Curl_easy *parent, struct Curl_easy *child)
-{
-  struct Curl_http2_dep *last = 0;
-  struct Curl_http2_dep *data = parent->set.stream_dependents;
-  DEBUGASSERT(child->set.stream_depends_on == parent);
-
-  while(data && data->data != child) {
-    last = data;
-    data = data->next;
-  }
-
-  DEBUGASSERT(data);
-
-  if(data) {
-    if(last) {
-      last->next = data->next;
-    }
-    else {
-      parent->set.stream_dependents = data->next;
-    }
-    free(data);
-  }
-
-  child->set.stream_depends_on = 0;
-  child->set.stream_depends_e = FALSE;
-}
-
-void Curl_http2_cleanup_dependencies(struct Curl_easy *data)
-{
-  while(data->set.stream_dependents) {
-    struct Curl_easy *tmp = data->set.stream_dependents->data;
-    Curl_http2_remove_child(data, tmp);
-    if(data->set.stream_depends_on)
-      Curl_http2_add_child(data->set.stream_depends_on, tmp, FALSE);
-  }
-
-  if(data->set.stream_depends_on)
-    Curl_http2_remove_child(data->set.stream_depends_on, data);
-}
-
 #else /* !USE_NGHTTP2 */
 
 /* Satisfy external references even if http2 is not compiled in. */
index f405b3a..8917535 100644 (file)
@@ -53,11 +53,6 @@ void Curl_http2_setup_conn(struct connectdata *conn);
 void Curl_http2_setup_req(struct Curl_easy *data);
 void Curl_http2_done(struct connectdata *conn, bool premature);
 CURLcode Curl_http2_done_sending(struct connectdata *conn);
-void Curl_http2_add_child(struct Curl_easy *parent, struct Curl_easy *child,
-                          bool exclusive);
-void Curl_http2_remove_child(struct Curl_easy *parent,
-                             struct Curl_easy *child);
-void Curl_http2_cleanup_dependencies(struct Curl_easy *data);
 #else /* USE_NGHTTP2 */
 #define Curl_http2_init(x) CURLE_UNSUPPORTED_PROTOCOL
 #define Curl_http2_send_request(x) CURLE_UNSUPPORTED_PROTOCOL
@@ -70,9 +65,6 @@ void Curl_http2_cleanup_dependencies(struct Curl_easy *data);
 #define Curl_http2_init_userset(x)
 #define Curl_http2_done(x,y)
 #define Curl_http2_done_sending(x)
-#define Curl_http2_add_child(x, y, z)
-#define Curl_http2_remove_child(x, y)
-#define Curl_http2_cleanup_dependencies(x)
 #endif
 
 #endif /* HEADER_CURL_HTTP2_H */
index 1bdf697..ea17109 100644 (file)
@@ -190,8 +190,8 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
 
       /* Write the data portion available */
 #ifdef HAVE_LIBZ
-      switch(conn->data->set.http_ce_skip?
-             IDENTITY : data->req.auto_decoding) {
+      switch (conn->data->set.http_ce_skip?
+              IDENTITY : data->req.auto_decoding) {
       case IDENTITY:
 #endif
         if(!k->ignorebody) {
@@ -219,10 +219,10 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
         break;
 
       default:
-        failf(conn->data,
-              "Unrecognized content encoding type. "
-              "libcurl understands `identity', `deflate' and `gzip' "
-              "content encodings.");
+        failf (conn->data,
+               "Unrecognized content encoding type. "
+               "libcurl understands `identity', `deflate' and `gzip' "
+               "content encodings.");
         return CHUNKE_BAD_ENCODING;
       }
 #endif
@@ -360,7 +360,7 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
 
 const char *Curl_chunked_strerror(CHUNKcode code)
 {
-  switch(code) {
+  switch (code) {
   default:
     return "OK";
   case CHUNKE_TOO_LONG_HEX:
index e2d865b..97230e7 100644 (file)
@@ -25,7 +25,7 @@
 #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
 
 #include "urldata.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "vauth/vauth.h"
 #include "http_digest.h"
 /* The last 3 #include files should be in this order */
@@ -74,8 +74,8 @@ CURLcode Curl_output_digest(struct connectdata *conn,
 {
   CURLcode result;
   struct Curl_easy *data = conn->data;
-  unsigned char *path = NULL;
-  char *tmp = NULL;
+  unsigned char *path;
+  char *tmp;
   char *response;
   size_t len;
   bool have_chlg;
@@ -95,8 +95,8 @@ CURLcode Curl_output_digest(struct connectdata *conn,
   if(proxy) {
     digest = &data->state.proxydigest;
     allocuserpwd = &conn->allocptr.proxyuserpwd;
-    userp = conn->http_proxy.user;
-    passwdp = conn->http_proxy.passwd;
+    userp = conn->proxyuser;
+    passwdp = conn->proxypasswd;
     authp = &data->state.authproxy;
   }
   else {
@@ -140,14 +140,12 @@ CURLcode Curl_output_digest(struct connectdata *conn,
      http://www.fngtps.com/2006/09/http-authentication
   */
 
-  if(authp->iestyle) {
-    tmp = strchr((char *)uripath, '?');
-    if(tmp) {
-      size_t urilen = tmp - (char *)uripath;
-      path = (unsigned char *) aprintf("%.*s", urilen, uripath);
-    }
+  if(authp->iestyle && ((tmp = strchr((char *)uripath, '?')) != NULL)) {
+    size_t urilen = tmp - (char *)uripath;
+
+    path = (unsigned char *) aprintf("%.*s", urilen, uripath);
   }
-  if(!tmp)
+  else
     path = (unsigned char *) strdup((char *) uripath);
 
   if(!path)
index 51375e8..c39d6f3 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "urldata.h"
 #include "sendf.h"
+#include "rawstr.h"
 #include "http_negotiate.h"
 #include "vauth/vauth.h"
 
@@ -37,7 +38,6 @@
 CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
                               const char *header)
 {
-  CURLcode result;
   struct Curl_easy *data = conn->data;
   size_t len;
 
@@ -51,11 +51,11 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
   struct negotiatedata *neg_ctx;
 
   if(proxy) {
-    userp = conn->http_proxy.user;
-    passwdp = conn->http_proxy.passwd;
+    userp = conn->proxyuser;
+    passwdp = conn->proxypasswd;
     service = data->set.str[STRING_PROXY_SERVICE_NAME] ?
               data->set.str[STRING_PROXY_SERVICE_NAME] : "HTTP";
-    host = conn->http_proxy.host.name;
+    host = conn->proxy.name;
     neg_ctx = &data->state.proxyneg;
   }
   else {
@@ -90,13 +90,8 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
   }
 
   /* Initilise the security context and decode our challenge */
-  result = Curl_auth_decode_spnego_message(data, userp, passwdp, service,
-                                           host, header, neg_ctx);
-
-  if(result)
-    Curl_auth_spnego_cleanup(neg_ctx);
-
-  return result;
+  return Curl_auth_decode_spnego_message(data, userp, passwdp, service, host,
+                                         header, neg_ctx);
 }
 
 CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
index 8a78bd2..935df25 100644 (file)
@@ -27,7 +27,7 @@
 /*
  * NTLM details:
  *
- * https://davenport.sourceforge.io/ntlm.html
+ * http://davenport.sourceforge.net/ntlm.html
  * https://www.innovation.ch/java/ntlm.html
  */
 
@@ -35,7 +35,7 @@
 
 #include "urldata.h"
 #include "sendf.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "http_ntlm.h"
 #include "curl_ntlm_wb.h"
 #include "vauth/vauth.h"
@@ -136,8 +136,8 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy)
 
   if(proxy) {
     allocuserpwd = &conn->allocptr.proxyuserpwd;
-    userp = conn->http_proxy.user;
-    passwdp = conn->http_proxy.passwd;
+    userp = conn->proxyuser;
+    passwdp = conn->proxypasswd;
     ntlm = &conn->proxyntlm;
     authp = &conn->data->state.authproxy;
   }
index 7fde11d..082b73a 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "http.h"
 #include "url.h"
 #include "select.h"
+#include "rawstr.h"
 #include "progress.h"
 #include "non-ascii.h"
 #include "connect.h"
 #include "curlx.h"
-#include "vtls/vtls.h"
 
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
 #include "memdebug.h"
 
-/*
- * Perform SSL initialization for HTTPS proxy.  Sets
- * proxy_ssl_connected connection bit when complete.  Can be
- * called multiple times.
- */
-static CURLcode https_proxy_connect(struct connectdata *conn, int sockindex)
-{
-#ifdef USE_SSL
-  CURLcode result = CURLE_OK;
-  DEBUGASSERT(conn->http_proxy.proxytype == CURLPROXY_HTTPS);
-  if(!conn->bits.proxy_ssl_connected[sockindex]) {
-    /* perform SSL initialization for this socket */
-    result =
-      Curl_ssl_connect_nonblocking(conn, sockindex,
-                                   &conn->bits.proxy_ssl_connected[sockindex]);
-    if(result)
-      conn->bits.close = TRUE; /* a failed connection is marked for closure to
-                                  prevent (bad) re-use or similar */
-  }
-  return result;
-#else
-  (void) conn;
-  (void) sockindex;
-  return CURLE_NOT_BUILT_IN;
-#endif
-}
-
-CURLcode Curl_proxy_connect(struct connectdata *conn, int sockindex)
+CURLcode Curl_proxy_connect(struct connectdata *conn)
 {
-  if(conn->http_proxy.proxytype == CURLPROXY_HTTPS) {
-    const CURLcode result = https_proxy_connect(conn, sockindex);
-    if(result)
-      return result;
-    if(!conn->bits.proxy_ssl_connected[sockindex])
-      return result; /* wait for HTTPS proxy SSL initialization to complete */
-  }
-
   if(conn->bits.tunnel_proxy && conn->bits.httpproxy) {
 #ifndef CURL_DISABLE_PROXY
     /* for [protocol] tunneled through HTTP proxy */
@@ -98,31 +63,21 @@ CURLcode Curl_proxy_connect(struct connectdata *conn, int sockindex)
      * original pointer
      *
      * This function might be called several times in the multi interface case
-     * if the proxy's CONNECT response is not instant.
+     * if the proxy's CONNTECT response is not instant.
      */
     prot_save = conn->data->req.protop;
     memset(&http_proxy, 0, sizeof(http_proxy));
     conn->data->req.protop = &http_proxy;
     connkeep(conn, "HTTP proxy CONNECT");
-
-    /* for the secondary socket (FTP), use the "connect to host"
-     * but ignore the "connect to port" (use the secondary port)
-     */
-
     if(conn->bits.conn_to_host)
       hostname = conn->conn_to_host.name;
-    else if(sockindex == SECONDARYSOCKET)
-      hostname = conn->secondaryhostname;
     else
       hostname = conn->host.name;
-
-    if(sockindex == SECONDARYSOCKET)
-      remote_port = conn->secondary_port;
-    else if(conn->bits.conn_to_port)
+    if(conn->bits.conn_to_port)
       remote_port = conn->conn_to_port;
     else
       remote_port = conn->remote_port;
-    result = Curl_proxyCONNECT(conn, sockindex, hostname,
+    result = Curl_proxyCONNECT(conn, FIRSTSOCKET, hostname,
                                remote_port, FALSE);
     conn->data->req.protop = prot_save;
     if(CURLE_OK != result)
@@ -159,7 +114,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
   curl_off_t cl=0;
   bool closeConnection = FALSE;
   bool chunked_encoding = FALSE;
-  time_t check;
+  long check;
 
 #define SELECT_OK      0
 #define SELECT_ERROR   1
@@ -204,10 +159,10 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
       free(host_port);
 
       if(!result) {
-        char *host = NULL;
+        char *host=(char *)"";
         const char *proxyconn="";
         const char *useragent="";
-        const char *http = (conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0) ?
+        const char *http = (conn->proxytype == CURLPROXY_HTTP_1_0) ?
           "1.0" : "1.1";
         bool ipv6_ip = conn->bits.ipv6_ip;
         char *hostheader;
@@ -247,13 +202,13 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
                            "%s", /* Proxy-Connection */
                            hostheader,
                            http,
-                           host?host:"",
+                           host,
                            conn->allocptr.proxyuserpwd?
                            conn->allocptr.proxyuserpwd:"",
                            useragent,
                            proxyconn);
 
-        if(host)
+        if(host && *host)
           free(host);
         free(hostheader);
 
@@ -290,7 +245,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
     }
 
     if(!blocking) {
-      if(!Curl_conn_data_pending(conn, sockindex))
+      if(0 == Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, 0))
         /* return so we'll be called again polling-style */
         return CURLE_OK;
       else {
@@ -309,22 +264,13 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
       char *ptr;
       char *line_start;
 
-      ptr = data->state.buffer;
+      ptr=data->state.buffer;
       line_start = ptr;
 
-      nread = 0;
-      perline = 0;
+      nread=0;
+      perline=0;
 
-      while(nread < BUFSIZE && keepon && !error) {
-        int writetype;
-
-        if(Curl_pgrsUpdate(conn))
-          return CURLE_ABORTED_BY_CALLBACK;
-
-        if(ptr >= &data->state.buffer[BUFSIZE]) {
-          failf(data, "CONNECT response too large!");
-          return CURLE_RECV_ERROR;
-        }
+      while((nread<BUFSIZE) && (keepon && !error)) {
 
         check = Curl_timeleft(data, NULL, TRUE);
         if(check <= 0) {
@@ -333,233 +279,254 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
           break;
         }
 
-        /* Read one byte at a time to avoid a race condition. Wait at most one
-           second before looping to ensure continuous pgrsUpdates. */
-        result = Curl_read(conn, tunnelsocket, ptr, 1, &gotbytes);
-        if(result == CURLE_AGAIN) {
-          if(SOCKET_READABLE(tunnelsocket, check<1000L?check:1000) == -1) {
-            error = SELECT_ERROR;
-            failf(data, "Proxy CONNECT aborted due to select/poll error");
-            break;
-          }
-          continue;
-        }
-        else if(result) {
-          keepon = FALSE;
+        /* loop every second at least, less if the timeout is near */
+        switch (Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD,
+                                  check<1000L?check:1000)) {
+        case -1: /* select() error, stop reading */
+          error = SELECT_ERROR;
+          failf(data, "Proxy CONNECT aborted due to select/poll error");
           break;
-        }
-        else if(gotbytes <= 0) {
-          if(data->set.proxyauth && data->state.authproxy.avail) {
-            /* 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\n");
-          }
-          else {
-            error = SELECT_ERROR;
-            failf(data, "Proxy CONNECT aborted");
-          }
-          keepon = FALSE;
+        case 0: /* timeout */
           break;
-        }
-
-        /* We got a byte of data */
-        nread++;
-
-        if(keepon > TRUE) {
-          /* This means we are currently ignoring a response-body */
-
-          nread = 0; /* make next read start over in the read buffer */
-          ptr = data->state.buffer;
-          if(cl) {
-            /* A Content-Length based body: simply count down the counter
-               and make sure to break out of the loop when we're done! */
-            cl--;
-            if(cl <= 0) {
-              keepon = FALSE;
-              break;
+        default:
+          DEBUGASSERT(ptr+BUFSIZE-nread <= data->state.buffer+BUFSIZE+1);
+          result = Curl_read(conn, tunnelsocket, ptr, BUFSIZE-nread,
+                             &gotbytes);
+          if(result==CURLE_AGAIN)
+            continue; /* go loop yourself */
+          else if(result)
+            keepon = FALSE;
+          else if(gotbytes <= 0) {
+            keepon = FALSE;
+            if(data->set.proxyauth && data->state.authproxy.avail) {
+              /* 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\n");
             }
-          }
-          else {
-            /* chunked-encoded body, so we need to do the chunked dance
-               properly to know when the end of the body is reached */
-            CHUNKcode r;
-            ssize_t tookcareof = 0;
-
-            /* now parse the chunked piece of data so that we can
-               properly tell when the stream ends */
-            r = Curl_httpchunk_read(conn, ptr, 1, &tookcareof);
-            if(r == CHUNKE_STOP) {
-              /* we're done reading chunks! */
-              infof(data, "chunk reading DONE\n");
-              keepon = FALSE;
-              /* we did the full CONNECT treatment, go COMPLETE */
-              conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
+            else {
+              error = SELECT_ERROR;
+              failf(data, "Proxy CONNECT aborted");
             }
           }
-          continue;
-        }
-
-        perline++; /* amount of bytes in this line so far */
-
-        /* if this is not the end of a header line then continue */
-        if(*ptr != 0x0a) {
-          ptr++;
-          continue;
-        }
-
-        /* convert from the network encoding */
-        result = Curl_convert_from_network(data, line_start, perline);
-        /* Curl_convert_from_network calls failf if unsuccessful */
-        if(result)
-          return result;
-
-        /* output debug if that is requested */
-        if(data->set.verbose)
-          Curl_debug(data, CURLINFO_HEADER_IN,
-                     line_start, (size_t)perline, conn);
-
-        /* send the header to the callback */
-        writetype = CLIENTWRITE_HEADER;
-        if(data->set.include_header)
-          writetype |= CLIENTWRITE_BODY;
-
-        result = Curl_client_write(conn, writetype, line_start, perline);
-
-        data->info.header_size += (long)perline;
-        data->req.headerbytecount += (long)perline;
-
-        if(result)
-          return result;
-
-        /* Newlines are CRLF, so the CR is ignored as the line isn't
-           really terminated until the LF comes. Treat a following CR
-           as end-of-headers as well.*/
-
-        if(('\r' == line_start[0]) ||
-           ('\n' == line_start[0])) {
-          /* end of response-headers from the proxy */
-          nread = 0; /* make next read start over in the read
-                        buffer */
-          ptr = data->state.buffer;
-          if((407 == k->httpcode) && !data->state.authproblem) {
-            /* If we get a 407 response code with content length
-               when we have no auth problem, we must ignore the
-               whole response-body */
-            keepon = 2;
-
-            if(cl) {
-              infof(data, "Ignore %" CURL_FORMAT_CURL_OFF_T
-                    " bytes of response-body\n", cl);
-            }
-            else if(chunked_encoding) {
-              CHUNKcode r;
-
-              infof(data, "Ignore chunked response-body\n");
-
-              /* We set ignorebody true here since the chunked
-                 decoder function will acknowledge that. Pay
-                 attention so that this is cleared again when this
-                 function returns! */
-              k->ignorebody = TRUE;
-
-              if(line_start[1] == '\n') {
-                /* this can only be a LF if the letter at index 0
-                   was a CR */
-                line_start++;
+          else {
+            /*
+             * We got a whole chunk of data, which can be anything from one
+             * byte to a set of lines and possibly just a piece of the last
+             * line.
+             */
+            int i;
+
+            nread += gotbytes;
+
+            if(keepon > TRUE) {
+              /* This means we are currently ignoring a response-body */
+
+              nread = 0; /* make next read start over in the read buffer */
+              ptr=data->state.buffer;
+              if(cl) {
+                /* A Content-Length based body: simply count down the counter
+                   and make sure to break out of the loop when we're done! */
+                cl -= gotbytes;
+                if(cl<=0) {
+                  keepon = FALSE;
+                  break;
+                }
               }
-
-              /* now parse the chunked piece of data so that we can
-                 properly tell when the stream ends */
-              r = Curl_httpchunk_read(conn, line_start + 1, 1, &gotbytes);
-              if(r == CHUNKE_STOP) {
-                /* we're done reading chunks! */
-                infof(data, "chunk reading DONE\n");
-                keepon = FALSE;
-                /* we did the full CONNECT treatment, go to
-                   COMPLETE */
-                conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
+              else {
+                /* chunked-encoded body, so we need to do the chunked dance
+                   properly to know when the end of the body is reached */
+                CHUNKcode r;
+                ssize_t tookcareof=0;
+
+                /* now parse the chunked piece of data so that we can
+                   properly tell when the stream ends */
+                r = Curl_httpchunk_read(conn, ptr, gotbytes, &tookcareof);
+                if(r == CHUNKE_STOP) {
+                  /* we're done reading chunks! */
+                  infof(data, "chunk reading DONE\n");
+                  keepon = FALSE;
+                  /* we did the full CONNECT treatment, go COMPLETE */
+                  conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
+                }
+                else
+                  infof(data, "Read %zd bytes of chunk, continue\n",
+                        tookcareof);
               }
             }
-            else {
-              /* without content-length or chunked encoding, we
-                 can't keep the connection alive since the close is
-                 the end signal so we bail out at once instead */
-              keepon = FALSE;
-            }
-          }
-          else
-            keepon = FALSE;
-          /* we did the full CONNECT treatment, go to COMPLETE */
-          conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
-          continue;
-        }
-
-        line_start[perline] = 0; /* zero terminate the buffer */
-        if((checkprefix("WWW-Authenticate:", line_start) &&
-            (401 == k->httpcode)) ||
-           (checkprefix("Proxy-authenticate:", line_start) &&
-            (407 == k->httpcode))) {
-
-          bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
-          char *auth = Curl_copy_header_value(line_start);
-          if(!auth)
-            return CURLE_OUT_OF_MEMORY;
-
-          result = Curl_http_input_auth(conn, proxy, auth);
-
-          free(auth);
-
-          if(result)
-            return result;
-        }
-        else if(checkprefix("Content-Length:", line_start)) {
-          if(k->httpcode/100 == 2) {
-            /* A server MUST NOT send any Transfer-Encoding or
-               Content-Length header fields in a 2xx (Successful)
-               response to CONNECT. (RFC 7231 section 4.3.6) */
-            failf(data, "Content-Length: in %03d response",
-                  k->httpcode);
-            return CURLE_RECV_ERROR;
-          }
-
-          cl = curlx_strtoofft(line_start +
-                               strlen("Content-Length:"), NULL, 10);
-        }
-        else if(Curl_compareheader(line_start, "Connection:", "close"))
-          closeConnection = TRUE;
-        else if(Curl_compareheader(line_start,
-                                   "Transfer-Encoding:",
-                                   "chunked")) {
-          if(k->httpcode/100 == 2) {
-            /* A server MUST NOT send any Transfer-Encoding or
-               Content-Length header fields in a 2xx (Successful)
-               response to CONNECT. (RFC 7231 section 4.3.6) */
-            failf(data, "Transfer-Encoding: in %03d response", k->httpcode);
-            return CURLE_RECV_ERROR;
+            else
+              for(i = 0; i < gotbytes; ptr++, i++) {
+                perline++; /* amount of bytes in this line so far */
+                if(*ptr == 0x0a) {
+                  char letter;
+                  int writetype;
+
+                  /* convert from the network encoding */
+                  result = Curl_convert_from_network(data, line_start,
+                                                     perline);
+                  /* Curl_convert_from_network calls failf if unsuccessful */
+                  if(result)
+                    return result;
+
+                  /* output debug if that is requested */
+                  if(data->set.verbose)
+                    Curl_debug(data, CURLINFO_HEADER_IN,
+                               line_start, (size_t)perline, conn);
+
+                  /* send the header to the callback */
+                  writetype = CLIENTWRITE_HEADER;
+                  if(data->set.include_header)
+                    writetype |= CLIENTWRITE_BODY;
+
+                  result = Curl_client_write(conn, writetype, line_start,
+                                             perline);
+
+                  data->info.header_size += (long)perline;
+                  data->req.headerbytecount += (long)perline;
+
+                  if(result)
+                    return result;
+
+                  /* Newlines are CRLF, so the CR is ignored as the line isn't
+                     really terminated until the LF comes. Treat a following CR
+                     as end-of-headers as well.*/
+
+                  if(('\r' == line_start[0]) ||
+                     ('\n' == line_start[0])) {
+                    /* end of response-headers from the proxy */
+                    nread = 0; /* make next read start over in the read
+                                  buffer */
+                    ptr=data->state.buffer;
+                    if((407 == k->httpcode) && !data->state.authproblem) {
+                      /* If we get a 407 response code with content length
+                         when we have no auth problem, we must ignore the
+                         whole response-body */
+                      keepon = 2;
+
+                      if(cl) {
+                        infof(data, "Ignore %" CURL_FORMAT_CURL_OFF_T
+                              " bytes of response-body\n", cl);
+
+                        /* remove the remaining chunk of what we already
+                           read */
+                        cl -= (gotbytes - i);
+
+                        if(cl<=0)
+                          /* if the whole thing was already read, we are done!
+                           */
+                          keepon=FALSE;
+                      }
+                      else if(chunked_encoding) {
+                        CHUNKcode r;
+                        /* We set ignorebody true here since the chunked
+                           decoder function will acknowledge that. Pay
+                           attention so that this is cleared again when this
+                           function returns! */
+                        k->ignorebody = TRUE;
+                        infof(data, "%zd bytes of chunk left\n", gotbytes-i);
+
+                        if(line_start[1] == '\n') {
+                          /* this can only be a LF if the letter at index 0
+                             was a CR */
+                          line_start++;
+                          i++;
+                        }
+
+                        /* now parse the chunked piece of data so that we can
+                           properly tell when the stream ends */
+                        r = Curl_httpchunk_read(conn, line_start+1,
+                                                  gotbytes -i, &gotbytes);
+                        if(r == CHUNKE_STOP) {
+                          /* we're done reading chunks! */
+                          infof(data, "chunk reading DONE\n");
+                          keepon = FALSE;
+                          /* we did the full CONNECT treatment, go to
+                             COMPLETE */
+                          conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
+                        }
+                        else
+                          infof(data, "Read %zd bytes of chunk, continue\n",
+                                gotbytes);
+                      }
+                      else {
+                        /* without content-length or chunked encoding, we
+                           can't keep the connection alive since the close is
+                           the end signal so we bail out at once instead */
+                        keepon=FALSE;
+                      }
+                    }
+                    else {
+                      keepon = FALSE;
+                      if(200 == data->info.httpproxycode) {
+                        if(gotbytes - (i+1))
+                          failf(data, "Proxy CONNECT followed by %zd bytes "
+                                "of opaque data. Data ignored (known bug #39)",
+                                gotbytes - (i+1));
+                      }
+                    }
+                    /* we did the full CONNECT treatment, go to COMPLETE */
+                    conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
+                    break; /* breaks out of for-loop, not switch() */
+                  }
+
+                  /* keep a backup of the position we are about to blank */
+                  letter = line_start[perline];
+                  line_start[perline]=0; /* zero terminate the buffer */
+                  if((checkprefix("WWW-Authenticate:", line_start) &&
+                      (401 == k->httpcode)) ||
+                     (checkprefix("Proxy-authenticate:", line_start) &&
+                      (407 == k->httpcode))) {
+
+                    bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
+                    char *auth = Curl_copy_header_value(line_start);
+                    if(!auth)
+                      return CURLE_OUT_OF_MEMORY;
+
+                    result = Curl_http_input_auth(conn, proxy, auth);
+
+                    free(auth);
+
+                    if(result)
+                      return result;
+                  }
+                  else if(checkprefix("Content-Length:", line_start)) {
+                    cl = curlx_strtoofft(line_start +
+                                         strlen("Content-Length:"), NULL, 10);
+                  }
+                  else if(Curl_compareheader(line_start,
+                                             "Connection:", "close"))
+                    closeConnection = TRUE;
+                  else if(Curl_compareheader(line_start,
+                                             "Transfer-Encoding:",
+                                             "chunked")) {
+                    infof(data, "CONNECT responded chunked\n");
+                    chunked_encoding = TRUE;
+                    /* init our chunky engine */
+                    Curl_httpchunk_init(conn);
+                  }
+                  else if(Curl_compareheader(line_start,
+                                             "Proxy-Connection:", "close"))
+                    closeConnection = TRUE;
+                  else if(2 == sscanf(line_start, "HTTP/1.%d %d",
+                                      &subversion,
+                                      &k->httpcode)) {
+                    /* store the HTTP code from the proxy */
+                    data->info.httpproxycode = k->httpcode;
+                  }
+                  /* put back the letter we blanked out before */
+                  line_start[perline]= letter;
+
+                  perline=0; /* line starts over here */
+                  line_start = ptr+1; /* this skips the zero byte we wrote */
+                }
+              }
           }
-          infof(data, "CONNECT responded chunked\n");
-          chunked_encoding = TRUE;
-          /* init our chunky engine */
-          Curl_httpchunk_init(conn);
-        }
-        else if(Curl_compareheader(line_start, "Proxy-Connection:", "close"))
-          closeConnection = TRUE;
-        else if(2 == sscanf(line_start, "HTTP/1.%d %d",
-                            &subversion,
-                            &k->httpcode)) {
-          /* store the HTTP code from the proxy */
-          data->info.httpproxycode = k->httpcode;
-        }
-
-        perline = 0; /* line starts over here */
-        ptr = data->state.buffer;
-        line_start = ptr;
+          break;
+        } /* switch */
+        if(Curl_pgrsUpdate(conn))
+          return CURLE_ABORTED_BY_CALLBACK;
       } /* while there's buffer left and loop is requested */
 
-      if(Curl_pgrsUpdate(conn))
-        return CURLE_ABORTED_BY_CALLBACK;
-
       if(error)
         return CURLE_RECV_ERROR;
 
@@ -573,7 +540,8 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
         if(conn->bits.close)
           /* the connection has been marked for closure, most likely in the
              Curl_http_auth_act() function and thus we can kill it at once
-             below */
+             below
+          */
           closeConnection = TRUE;
       }
 
@@ -634,7 +602,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
 
   data->state.authproxy.done = TRUE;
 
-  infof(data, "Proxy replied OK to CONNECT request\n");
+  infof (data, "Proxy replied OK to CONNECT request\n");
   data->req.ignorebody = FALSE; /* put it (back) to non-ignore state */
   conn->bits.rewindaftersend = FALSE; /* make sure this isn't set for the
                                          document request  */
index d1f5a7c..fd04330 100644 (file)
@@ -32,11 +32,11 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
 /* Default proxy timeout in milliseconds */
 #define PROXY_TIMEOUT (3600*1000)
 
-CURLcode Curl_proxy_connect(struct connectdata *conn, int sockindex);
+CURLcode Curl_proxy_connect(struct connectdata *conn);
 
 #else
 #define Curl_proxyCONNECT(x,y,z,w,v) CURLE_NOT_BUILT_IN
-#define Curl_proxy_connect(x,y) CURLE_OK
+#define Curl_proxy_connect(x) CURLE_OK
 #endif
 
 #endif /* HEADER_CURL_HTTP_PROXY_H */
index d876615..2f92b2d 100644 (file)
@@ -51,7 +51,7 @@
 #endif
 
 #include "inet_ntop.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "if2ip.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
@@ -68,7 +68,7 @@ unsigned int Curl_ipv6_scope(const struct sockaddr *sa)
 #else
   if(sa->sa_family == AF_INET6) {
     const struct sockaddr_in6 * sa6 = (const struct sockaddr_in6 *)(void *) sa;
-    const unsigned char *b = sa6->sin6_addr.s6_addr;
+    const unsigned char * b = sa6->sin6_addr.s6_addr;
     unsigned short w = (unsigned short) ((b[0] << 8) | b[1]);
 
     switch(w & 0xFFC0) {
@@ -102,7 +102,7 @@ bool Curl_if_is_interface_name(const char *interf)
 
   if(getifaddrs(&head) >= 0) {
     for(iface=head; iface != NULL; iface=iface->ifa_next) {
-      if(strcasecompare(iface->ifa_name, interf)) {
+      if(curl_strequal(iface->ifa_name, interf)) {
         result = TRUE;
         break;
       }
@@ -132,7 +132,7 @@ if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
     for(iface = head; iface != NULL; iface=iface->ifa_next) {
       if(iface->ifa_addr != NULL) {
         if(iface->ifa_addr->sa_family == af) {
-          if(strcasecompare(iface->ifa_name, interf)) {
+          if(curl_strequal(iface->ifa_name, interf)) {
             void *addr;
             char *ip;
             char scope[12] = "";
@@ -180,7 +180,7 @@ if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
           }
         }
         else if((res == IF2IP_NOT_FOUND) &&
-                strcasecompare(iface->ifa_name, interf)) {
+                curl_strequal(iface->ifa_name, interf)) {
           res = IF2IP_AF_NOT_SUPPORTED;
         }
       }
index 44d350b..123ea3b 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "http.h" /* for HTTP proxy tunnel stuff */
 #include "socks.h"
 #include "imap.h"
+
 #include "strtoofft.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "vtls/vtls.h"
 #include "connect.h"
 #include "strerror.h"
 #include "select.h"
 #include "multiif.h"
 #include "url.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "curl_sasl.h"
 #include "warnless.h"
 
@@ -107,7 +108,7 @@ static CURLcode imap_perform_authenticate(struct connectdata *conn,
                                           const char *initresp);
 static CURLcode imap_continue_authenticate(struct connectdata *conn,
                                            const char *resp);
-static void imap_get_message(char *buffer, char **outptr);
+static void imap_get_message(char *buffer, char** outptr);
 
 /*
  * IMAP protocol handler.
@@ -130,8 +131,7 @@ const struct Curl_handler Curl_handler_imap = {
   ZERO_NULL,                        /* readwrite */
   PORT_IMAP,                        /* defport */
   CURLPROTO_IMAP,                   /* protocol */
-  PROTOPT_CLOSEACTION|              /* flags */
-  PROTOPT_URLOPTIONS
+  PROTOPT_CLOSEACTION               /* flags */
 };
 
 #ifdef USE_SSL
@@ -271,7 +271,7 @@ static bool imap_matchresp(const char *line, size_t len, const char *cmd)
 
   /* Does the command name match and is it followed by a space character or at
      the end of line? */
-  if(line + cmd_len <= end && strncasecompare(line, cmd, cmd_len) &&
+  if(line + cmd_len <= end && Curl_raw_nequal(line, cmd, cmd_len) &&
      (line[cmd_len] == ' ' || line + cmd_len + 2 == end))
     return TRUE;
 
@@ -391,10 +391,10 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len,
  *
  * Gets the authentication message from the response buffer.
  */
-static void imap_get_message(char *buffer, char **outptr)
+static void imap_get_message(char *buffer, char** outptr)
 {
   size_t len = 0;
-  char *message = NULL;
+  charmessage = NULL;
 
   /* Find the start of the message */
   for(message = buffer + 2; *message == ' ' || *message == '\t'; message++)
@@ -846,7 +846,7 @@ static CURLcode imap_state_servergreet_resp(struct connectdata *conn,
 
   if(imapcode != 'O') {
     failf(data, "Got unexpected imap-server response");
-    result = CURLE_WEIRD_SERVER_REPLY;
+    result = CURLE_FTP_WEIRD_SERVER_REPLY; /* TODO: fix this code */
   }
   else
     result = imap_perform_capability(conn);
@@ -953,7 +953,7 @@ static CURLcode imap_state_starttls_resp(struct connectdata *conn,
 
   if(imapcode != 'O') {
     if(data->set.use_ssl != CURLUSESSL_TRY) {
-      failf(data, "STARTTLS denied");
+      failf(data, "STARTTLS denied. %c", imapcode);
       result = CURLE_USE_SSL_FAILED;
     }
     else
@@ -1179,7 +1179,7 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode,
   else {
     /* We don't know how to parse this line */
     failf(pp->conn->data, "Failed to parse FETCH response.");
-    result = CURLE_WEIRD_SERVER_REPLY;
+    result = CURLE_FTP_WEIRD_SERVER_REPLY; /* TODO: fix this code */
   }
 
   /* End of DO phase */
@@ -1198,7 +1198,7 @@ static CURLcode imap_state_fetch_final_resp(struct connectdata *conn,
   (void)instate; /* No use for this yet */
 
   if(imapcode != 'O')
-    result = CURLE_WEIRD_SERVER_REPLY;
+    result = CURLE_FTP_WEIRD_SERVER_REPLY; /* TODO: Fix error code */
   else
     /* End of DONE phase */
     state(conn, IMAP_STOP);
@@ -1275,7 +1275,7 @@ static CURLcode imap_statemach_act(struct connectdata *conn)
 
     /* Was there an error parsing the response line? */
     if(imapcode == -1)
-      return CURLE_WEIRD_SERVER_REPLY;
+      return CURLE_FTP_WEIRD_SERVER_REPLY;
 
     if(!imapcode)
       break;
@@ -1935,7 +1935,7 @@ static CURLcode imap_parse_url_options(struct connectdata *conn)
     while(*ptr && *ptr != ';')
       ptr++;
 
-    if(strncasecompare(key, "AUTH=", 5))
+    if(strnequal(key, "AUTH=", 5))
       result = Curl_sasl_parse_url_auth_option(&imapc->sasl,
                                                value, ptr - value);
     else
@@ -2031,28 +2031,28 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
        PARTIAL) stripping of the trailing slash character if it is present.
 
        Note: Unknown parameters trigger a URL_MALFORMAT error. */
-    if(strcasecompare(name, "UIDVALIDITY") && !imap->uidvalidity) {
+    if(Curl_raw_equal(name, "UIDVALIDITY") && !imap->uidvalidity) {
       if(valuelen > 0 && value[valuelen - 1] == '/')
         value[valuelen - 1] = '\0';
 
       imap->uidvalidity = value;
       value = NULL;
     }
-    else if(strcasecompare(name, "UID") && !imap->uid) {
+    else if(Curl_raw_equal(name, "UID") && !imap->uid) {
       if(valuelen > 0 && value[valuelen - 1] == '/')
         value[valuelen - 1] = '\0';
 
       imap->uid = value;
       value = NULL;
     }
-    else if(strcasecompare(name, "SECTION") && !imap->section) {
+    else if(Curl_raw_equal(name, "SECTION") && !imap->section) {
       if(valuelen > 0 && value[valuelen - 1] == '/')
         value[valuelen - 1] = '\0';
 
       imap->section = value;
       value = NULL;
     }
-    else if(strcasecompare(name, "PARTIAL") && !imap->partial) {
+    else if(Curl_raw_equal(name, "PARTIAL") && !imap->partial) {
       if(valuelen > 0 && value[valuelen - 1] == '/')
         value[valuelen - 1] = '\0';
 
index 9afbdbb..416005c 100644 (file)
@@ -182,12 +182,12 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size)
  */
 char *Curl_inet_ntop(int af, const void *src, char *buf, size_t size)
 {
-  switch(af) {
+  switch (af) {
   case AF_INET:
-    return inet_ntop4((const unsigned char *)src, buf, size);
+    return inet_ntop4((const unsigned char*)src, buf, size);
 #ifdef ENABLE_IPV6
   case AF_INET6:
-    return inet_ntop6((const unsigned char *)src, buf, size);
+    return inet_ntop6((const unsigned char*)src, buf, size);
 #endif
   default:
     SET_ERRNO(EAFNOSUPPORT);
index 475f44a..cf8b88a 100644 (file)
@@ -65,7 +65,7 @@ static int      inet_pton6(const char *src, unsigned char *dst);
 int
 Curl_inet_pton(int af, const char *src, void *dst)
 {
-  switch(af) {
+  switch (af) {
   case AF_INET:
     return (inet_pton4(src, (unsigned char *)dst));
 #ifdef ENABLE_IPV6
@@ -103,8 +103,7 @@ inet_pton4(const char *src, unsigned char *dst)
   while((ch = *src++) != '\0') {
     const char *pch;
 
-    pch = strchr(digits, ch);
-    if(pch) {
+    if((pch = strchr(digits, ch)) != NULL) {
       unsigned int val = *tp * 10 + (unsigned int)(pch - digits);
 
       if(saw_digit && *tp == 0)
@@ -170,8 +169,7 @@ inet_pton6(const char *src, unsigned char *dst)
   while((ch = *src++) != '\0') {
     const char *pch;
 
-    pch = strchr((xdigits = xdigits_l), ch);
-    if(!pch)
+    if((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
       pch = strchr((xdigits = xdigits_u), ch);
     if(pch != NULL) {
       val <<= 4;
index 067b0a5..87ce8ee 100644 (file)
@@ -121,7 +121,7 @@ krb5_encode(void *app_data, const void *from, int length, int level, void **to)
   /* NOTE that the cast is safe, neither of the krb5, gnu gss and heimdal
    * libraries modify the input buffer in gss_seal()
    */
-  dec.value = (void *)from;
+  dec.value = (void*)from;
   dec.length = length;
   maj = gss_seal(&min, *context,
                  level == PROT_PRIVATE,
@@ -182,7 +182,7 @@ krb5_auth(void *app_data, struct connectdata *conn)
   for(;;) {
     /* this really shouldn't be repeated here, but can't help it */
     if(service == srv_host) {
-      result = Curl_ftpsend(conn, "AUTH GSSAPI");
+      result = Curl_ftpsendf(conn, "AUTH GSSAPI");
       if(result)
         return -2;
 
@@ -243,22 +243,16 @@ krb5_auth(void *app_data, struct connectdata *conn)
       }
 
       if(output_buffer.length != 0) {
-        char *cmd;
-
         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));
-          ret = AUTH_ERROR;
+          ret = AUTH_CONTINUE;
           break;
         }
 
-        cmd = aprintf("ADAT %s", p);
-        if(cmd)
-          result = Curl_ftpsend(conn, cmd);
-        else
-          result = CURLE_OUT_OF_MEMORY;
+        result = Curl_ftpsendf(conn, "ADAT %s", p);
 
         free(p);
 
index 979ce7d..a164627 100644 (file)
 #include "escape.h"
 #include "progress.h"
 #include "transfer.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "strtok.h"
 #include "curl_ldap.h"
 #include "curl_multibyte.h"
 #include "curl_base64.h"
+#include "rawstr.h"
 #include "connect.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
@@ -109,9 +110,9 @@ typedef struct {
 #undef LDAPURLDesc
 #define LDAPURLDesc             CURL_LDAPURLDesc
 
-static int  _ldap_url_parse(const struct connectdata *conn,
-                            LDAPURLDesc **ludp);
-static void _ldap_free_urldesc(LDAPURLDesc *ludp);
+static int  _ldap_url_parse (const struct connectdata *conn,
+                             LDAPURLDesc **ludp);
+static void _ldap_free_urldesc (LDAPURLDesc *ludp);
 
 #undef ldap_free_urldesc
 #define ldap_free_urldesc       _ldap_free_urldesc
@@ -119,11 +120,11 @@ static void _ldap_free_urldesc(LDAPURLDesc *ludp);
 
 #ifdef DEBUG_LDAP
   #define LDAP_TRACE(x)   do { \
-                            _ldap_trace("%u: ", __LINE__); \
+                            _ldap_trace ("%u: ", __LINE__); \
                             _ldap_trace x; \
                           } WHILE_FALSE
 
-  static void _ldap_trace(const char *fmt, ...);
+  static void _ldap_trace (const char *fmt, ...);
 #else
   #define LDAP_TRACE(x)   Curl_nop_stmt
 #endif
@@ -271,7 +272,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
     ldap_set_option(server, LDAP_OPT_SSL, LDAP_OPT_ON);
 #else
     int ldap_option;
-    char *ldap_ca = conn->ssl_config.CAfile;
+    char* ldap_ca = data->set.str[STRING_SSL_CAFILE];
 #if defined(CURL_HAS_NOVELL_LDAPSDK)
     rc = ldapssl_client_init(NULL, NULL);
     if(rc != LDAP_SUCCESS) {
@@ -279,11 +280,11 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
       result = CURLE_SSL_CERTPROBLEM;
       goto quit;
     }
-    if(conn->ssl_config.verifypeer) {
+    if(data->set.ssl.verifypeer) {
       /* Novell SDK supports DER or BASE64 files. */
       int cert_type = LDAPSSL_CERT_FILETYPE_B64;
-      if((data->set.ssl.cert_type) &&
-         (strcasecompare(data->set.ssl.cert_type, "DER")))
+      if((data->set.str[STRING_CERT_TYPE]) &&
+         (Curl_raw_equal(data->set.str[STRING_CERT_TYPE], "DER")))
         cert_type = LDAPSSL_CERT_FILETYPE_DER;
       if(!ldap_ca) {
         failf(data, "LDAP local: ERROR %s CA cert not set!",
@@ -321,10 +322,10 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
       goto quit;
     }
 #elif defined(LDAP_OPT_X_TLS)
-    if(conn->ssl_config.verifypeer) {
+    if(data->set.ssl.verifypeer) {
       /* OpenLDAP SDK supports BASE64 files. */
-      if((data->set.ssl.cert_type) &&
-         (!strcasecompare(data->set.ssl.cert_type, "PEM"))) {
+      if((data->set.str[STRING_CERT_TYPE]) &&
+         (!Curl_raw_equal(data->set.str[STRING_CERT_TYPE], "PEM"))) {
         failf(data, "LDAP local: ERROR OpenLDAP only supports PEM cert-type!");
         result = CURLE_SSL_CERTPROBLEM;
         goto quit;
@@ -655,7 +656,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
 quit:
   if(ldapmsg) {
     ldap_msgfree(ldapmsg);
-    LDAP_TRACE(("Received %d entries\n", num));
+    LDAP_TRACE (("Received %d entries\n", num));
   }
   if(rc == LDAP_SIZELIMIT_EXCEEDED)
     infof(data, "There are more than %d entries\n", num);
@@ -682,7 +683,7 @@ quit:
 }
 
 #ifdef DEBUG_LDAP
-static void _ldap_trace(const char *fmt, ...)
+static void _ldap_trace (const char *fmt, ...)
 {
   static int do_trace = -1;
   va_list args;
@@ -694,9 +695,9 @@ static void _ldap_trace(const char *fmt, ...)
   if(!do_trace)
     return;
 
-  va_start(args, fmt);
-  vfprintf(stderr, fmt, args);
-  va_end(args);
+  va_start (args, fmt);
+  vfprintf (stderr, fmt, args);
+  va_end (args);
 }
 #endif
 
@@ -705,18 +706,18 @@ static void _ldap_trace(const char *fmt, ...)
 /*
  * Return scope-value for a scope-string.
  */
-static int str2scope(const char *p)
+static int str2scope (const char *p)
 {
-  if(strcasecompare(p, "one"))
-    return LDAP_SCOPE_ONELEVEL;
-  if(strcasecompare(p, "onetree"))
-    return LDAP_SCOPE_ONELEVEL;
-  if(strcasecompare(p, "base"))
-    return LDAP_SCOPE_BASE;
-  if(strcasecompare(p, "sub"))
-    return LDAP_SCOPE_SUBTREE;
-  if(strcasecompare(p, "subtree"))
-    return LDAP_SCOPE_SUBTREE;
+  if(strequal(p, "one"))
+     return LDAP_SCOPE_ONELEVEL;
+  if(strequal(p, "onetree"))
+     return LDAP_SCOPE_ONELEVEL;
+  if(strequal(p, "base"))
+     return LDAP_SCOPE_BASE;
+  if(strequal(p, "sub"))
+     return LDAP_SCOPE_SUBTREE;
+  if(strequal(p, "subtree"))
+     return LDAP_SCOPE_SUBTREE;
   return (-1);
 }
 
@@ -766,7 +767,7 @@ static bool split_str(char *str, char ***out, size_t *count)
  *
  * Defined in RFC4516 section 2.
  */
-static int _ldap_url_parse2(const struct connectdata *conn, LDAPURLDesc *ludp)
+static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
 {
   int rc = LDAP_SUCCESS;
   char *path;
@@ -775,9 +776,9 @@ static int _ldap_url_parse2(const struct connectdata *conn, LDAPURLDesc *ludp)
   size_t i;
 
   if(!conn->data ||
-     !conn->data->state.path ||
-     conn->data->state.path[0] != '/' ||
-     !checkprefix("LDAP", conn->data->change.url))
+      !conn->data->state.path ||
+      conn->data->state.path[0] != '/' ||
+      !checkprefix("LDAP", conn->data->change.url))
     return LDAP_INVALID_SYNTAX;
 
   ludp->lud_scope = LDAP_SCOPE_BASE;
@@ -797,13 +798,12 @@ static int _ldap_url_parse2(const struct connectdata *conn, LDAPURLDesc *ludp)
   if(*p) {
     char *dn = p;
     char *unescaped;
-    CURLcode result;
 
-    LDAP_TRACE(("DN '%s'\n", dn));
+    LDAP_TRACE (("DN '%s'\n", dn));
 
     /* Unescape the DN */
-    result = Curl_urldecode(conn->data, dn, 0, &unescaped, NULL, FALSE);
-    if(result) {
+    unescaped = curl_easy_unescape(conn->data, dn, 0, NULL);
+    if(!unescaped) {
       rc = LDAP_NO_MEMORY;
 
       goto quit;
@@ -862,14 +862,12 @@ static int _ldap_url_parse2(const struct connectdata *conn, LDAPURLDesc *ludp)
 
     for(i = 0; i < count; i++) {
       char *unescaped;
-      CURLcode result;
 
-      LDAP_TRACE(("attr[%d] '%s'\n", i, attributes[i]));
+      LDAP_TRACE (("attr[%d] '%s'\n", i, attributes[i]));
 
       /* Unescape the attribute */
-      result = Curl_urldecode(conn->data, attributes[i], 0, &unescaped, NULL,
-                              FALSE);
-      if(result) {
+      unescaped = curl_easy_unescape(conn->data, attributes[i], 0, NULL);
+      if(!unescaped) {
         free(attributes);
 
         rc = LDAP_NO_MEMORY;
@@ -917,7 +915,7 @@ static int _ldap_url_parse2(const struct connectdata *conn, LDAPURLDesc *ludp)
 
       goto quit;
     }
-    LDAP_TRACE(("scope %d\n", ludp->lud_scope));
+    LDAP_TRACE (("scope %d\n", ludp->lud_scope));
   }
 
   p = q;
@@ -932,13 +930,12 @@ static int _ldap_url_parse2(const struct connectdata *conn, LDAPURLDesc *ludp)
   if(*p) {
     char *filter = p;
     char *unescaped;
-    CURLcode result;
 
-    LDAP_TRACE(("filter '%s'\n", filter));
+    LDAP_TRACE (("filter '%s'\n", filter));
 
     /* Unescape the filter */
-    result = Curl_urldecode(conn->data, filter, 0, &unescaped, NULL, FALSE);
-    if(result) {
+    unescaped = curl_easy_unescape(conn->data, filter, 0, NULL);
+    if(!unescaped) {
       rc = LDAP_NO_MEMORY;
 
       goto quit;
@@ -974,8 +971,8 @@ quit:
   return rc;
 }
 
-static int _ldap_url_parse(const struct connectdata *conn,
-                           LDAPURLDesc **ludpp)
+static int _ldap_url_parse (const struct connectdata *conn,
+                            LDAPURLDesc **ludpp)
 {
   LDAPURLDesc *ludp = calloc(1, sizeof(*ludp));
   int rc;
@@ -984,7 +981,7 @@ static int _ldap_url_parse(const struct connectdata *conn,
   if(!ludp)
      return LDAP_NO_MEMORY;
 
-  rc = _ldap_url_parse2(conn, ludp);
+  rc = _ldap_url_parse2 (conn, ludp);
   if(rc != LDAP_SUCCESS) {
     _ldap_free_urldesc(ludp);
     ludp = NULL;
@@ -993,7 +990,7 @@ static int _ldap_url_parse(const struct connectdata *conn,
   return (rc);
 }
 
-static void _ldap_free_urldesc(LDAPURLDesc *ludp)
+static void _ldap_free_urldesc (LDAPURLDesc *ludp)
 {
   size_t i;
 
@@ -1009,7 +1006,7 @@ static void _ldap_free_urldesc(LDAPURLDesc *ludp)
     free(ludp->lud_attrs);
   }
 
-  free(ludp);
+  free (ludp);
 }
 #endif  /* !HAVE_LDAP_URL_PARSE */
 #endif  /* !CURL_DISABLE_LDAP && !USE_OPENLDAP */
index 21119fe..1caac8f 100644 (file)
@@ -15,7 +15,7 @@
        <string>se.haxx.curl.libcurl</string>
 
        <key>CFBundleVersion</key>
-       <string>7.53.1</string>
+       <string>7.50.2</string>
 
        <key>CFBundleName</key>
        <string>libcurl</string>
@@ -27,9 +27,9 @@
        <string>????</string>
 
        <key>CFBundleShortVersionString</key>
-       <string>libcurl 7.53.1</string>
+       <string>libcurl 7.50.2</string>
 
        <key>CFBundleGetInfoString</key>
-       <string>libcurl.plist 7.53.1</string>
+       <string>libcurl.plist 7.50.2</string>
 </dict>
 </plist>
index 3316fba..50b365d 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -44,14 +44,14 @@ BEGIN
   BEGIN
     BLOCK "040904b0"
     BEGIN
-      VALUE "CompanyName",      "The curl library, https://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"
       VALUE "OriginalFilename", "libcurl.dll\0"
-      VALUE "ProductName",      "The curl library\0"
+      VALUE "ProductName",      "The cURL library\0"
       VALUE "ProductVersion",   LIBCURL_VERSION "\0"
-      VALUE "LegalCopyright",   "\xa9 " LIBCURL_COPYRIGHT "\0"  /* a9: Copyright symbol */
+      VALUE "LegalCopyright",   "© " LIBCURL_COPYRIGHT "\0"
       VALUE "License",          "https://curl.haxx.se/docs/copyright.html\0"
     END
   END
index 1bdc9f3..60f73a2 100644 (file)
--- a/lib/md4.c
+++ b/lib/md4.c
@@ -213,8 +213,7 @@ static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
   unsigned long used, available;
 
   saved_lo = ctx->lo;
-  ctx->lo = (saved_lo + size) & 0x1fffffff;
-  if(ctx->lo < saved_lo)
+  if((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
     ctx->hi++;
   ctx->hi += (MD4_u32plus)size >> 29;
 
index f2dc16c..f818d32 100644 (file)
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -45,7 +45,7 @@ static void MD5_Init(MD5_CTX * ctx)
 }
 
 static void MD5_Update(MD5_CTX * ctx,
-                       const unsigned char *input,
+                       const unsigned char * input,
                        unsigned int inputLen)
 {
   md5_update(ctx, inputLen, input);
@@ -71,7 +71,7 @@ static void MD5_Init(MD5_CTX * ctx)
 }
 
 static void MD5_Update(MD5_CTX * ctx,
-                       const unsigned char *input,
+                       const unsigned char * input,
                        unsigned int inputLen)
 {
   gcry_md_write(*ctx, input, inputLen);
@@ -402,8 +402,7 @@ static void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
   unsigned long used, available;
 
   saved_lo = ctx->lo;
-  ctx->lo = (saved_lo + size) & 0x1fffffff;
-  if(ctx->lo < saved_lo)
+  if((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
     ctx->hi++;
   ctx->hi += (MD5_u32plus)size >> 29;
 
index 15e8661..ccbf461 100644 (file)
@@ -90,7 +90,7 @@ struct memdebug {
   union {
     curl_off_t o;
     double d;
-    void *p;
+    void * p;
   } mem[1];
   /* I'm hoping this is the thing with the strictest alignment
    * requirements.  That also means we waste some space :-( */
index 9574f1d..01a552e 100755 (executable)
 # dependency is the OpenSSL commandline tool for optional text listing.
 # Hacked by Guenter Knauf.
 #
-use Encode;
 use Getopt::Std;
 use MIME::Base64;
+use LWP::UserAgent;
 use strict;
-use vars qw($opt_b $opt_d $opt_f $opt_h $opt_i $opt_k $opt_l $opt_m $opt_n $opt_p $opt_q $opt_s $opt_t $opt_u $opt_v $opt_w);
+use vars qw($opt_b $opt_d $opt_f $opt_h $opt_i $opt_l $opt_m $opt_n $opt_p $opt_q $opt_s $opt_t $opt_u $opt_v $opt_w);
 use List::Util;
 use Text::Wrap;
 my $MOD_SHA = "Digest::SHA";
@@ -43,19 +43,18 @@ if ($@) {
   $MOD_SHA = "Digest::SHA::PurePerl";
   eval "require $MOD_SHA";
 }
-eval "require LWP::UserAgent";
 
 my %urls = (
   'nss' =>
-    'https://hg.mozilla.org/projects/nss/raw-file/tip/lib/ckfw/builtins/certdata.txt',
+    'http://hg.mozilla.org/projects/nss/raw-file/tip/lib/ckfw/builtins/certdata.txt',
   'central' =>
-    'https://hg.mozilla.org/mozilla-central/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
+    'http://hg.mozilla.org/mozilla-central/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
   'aurora' =>
-    'https://hg.mozilla.org/releases/mozilla-aurora/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
+    'http://hg.mozilla.org/releases/mozilla-aurora/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
   'beta' =>
-    'https://hg.mozilla.org/releases/mozilla-beta/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
+    'http://hg.mozilla.org/releases/mozilla-beta/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
   'release' =>
-    'https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
+    'http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt',
 );
 
 $opt_d = 'release';
@@ -63,7 +62,7 @@ $opt_d = 'release';
 # If the OpenSSL commandline is not in search path you can configure it here!
 my $openssl = 'openssl';
 
-my $version = '1.27';
+my $version = '1.26';
 
 $opt_w = 76; # default base64 encoded lines length
 
@@ -110,7 +109,7 @@ my @valid_signature_algorithms = (
 
 $0 =~ s@.*(/|\\)@@;
 $Getopt::Std::STANDARD_HELP_VERSION = 1;
-getopts('bd:fhiklmnp:qs:tuvw:');
+getopts('bd:fhilmnp:qs:tuvw:');
 
 if(!defined($opt_d)) {
     # to make plain "-d" use not cause warnings, and actually still work
@@ -118,16 +117,7 @@ if(!defined($opt_d)) {
 }
 
 # Use predefined URL or else custom URL specified on command line.
-my $url;
-if(defined($urls{$opt_d})) {
-  $url = $urls{$opt_d};
-  if(!$opt_k && $url !~ /^https:\/\//i) {
-    die "The URL for '$opt_d' is not HTTPS. Use -k to override (insecure).\n";
-  }
-}
-else {
-  $url = $opt_d;
-}
+my $url = ( defined( $urls{$opt_d} ) ) ? $urls{$opt_d} : $opt_d;
 
 my $curl = `curl -V`;
 
@@ -138,8 +128,8 @@ if ($opt_i) {
   print "Operating System Name            : $^O\n";
   print "Getopt::Std.pm Version           : ${Getopt::Std::VERSION}\n";
   print "MIME::Base64.pm Version          : ${MIME::Base64::VERSION}\n";
-  print "LWP::UserAgent.pm Version        : ${LWP::UserAgent::VERSION}\n" if($LWP::UserAgent::VERSION);
-  print "LWP.pm Version                   : ${LWP::VERSION}\n" if($LWP::VERSION);
+  print "LWP::UserAgent.pm Version        : ${LWP::UserAgent::VERSION}\n";
+  print "LWP.pm Version                   : ${LWP::VERSION}\n";
   print "Digest::SHA.pm Version           : ${Digest::SHA::VERSION}\n" if ($Digest::SHA::VERSION);
   print "Digest::SHA::PurePerl.pm Version : ${Digest::SHA::PurePerl::VERSION}\n" if ($Digest::SHA::PurePerl::VERSION);
   print ("=" x 78 . "\n");
@@ -149,7 +139,7 @@ sub warning_message() {
   if ( $opt_d =~ m/^risk$/i ) { # Long Form Warning and Exit
     print "Warning: Use of this script may pose some risk:\n";
     print "\n";
-    print "  1) If you use HTTP URLs they are subject to a man in the middle attack\n";
+    print "  1) Using http is subject to man in the middle attack of certdata content\n";
     print "  2) Default to 'release', but more recent updates may be found in other trees\n";
     print "  3) certdata.txt file format may change, lag time to update this script\n";
     print "  4) Generally unwise to blindly trust CAs without manual review & verification\n";
@@ -163,14 +153,13 @@ sub warning_message() {
 }
 
 sub HELP_MESSAGE() {
-  print "Usage:\t${0} [-b] [-d<certdata>] [-f] [-i] [-k] [-l] [-n] [-p<purposes:levels>] [-q] [-s<algorithms>] [-t] [-u] [-v] [-w<l>] [<outputfile>]\n";
+  print "Usage:\t${0} [-b] [-d<certdata>] [-f] [-i] [-l] [-n] [-p<purposes:levels>] [-q] [-s<algorithms>] [-t] [-u] [-v] [-w<l>] [<outputfile>]\n";
   print "\t-b\tbackup an existing version of ca-bundle.crt\n";
   print "\t-d\tspecify Mozilla tree to pull certdata.txt or custom URL\n";
   print "\t\t  Valid names are:\n";
   print "\t\t    ", join( ", ", map { ( $_ =~ m/$opt_d/ ) ? "$_ (default)" : "$_" } sort keys %urls ), "\n";
   print "\t-f\tforce rebuild even if certdata.txt is current\n";
   print "\t-i\tprint version info about used modules\n";
-  print "\t-k\tallow URLs other than HTTPS, enable HTTP fallback (insecure)\n";
   print "\t-l\tprint license info about certdata.txt\n";
   print "\t-m\tinclude meta data in output\n";
   print "\t-n\tno download of certdata.txt (to use existing)\n";
@@ -236,34 +225,33 @@ sub parse_csv_param($$@) {
   return @values;
 }
 
-sub sha256 {
+sub sha1 {
   my $result;
   if ($Digest::SHA::VERSION || $Digest::SHA::PurePerl::VERSION) {
     open(FILE, $_[0]) or die "Can't open '$_[0]': $!";
     binmode(FILE);
-    $result = $MOD_SHA->new(256)->addfile(*FILE)->hexdigest;
+    $result = $MOD_SHA->new(1)->addfile(*FILE)->hexdigest;
     close(FILE);
   } else {
     # Use OpenSSL command if Perl Digest::SHA modules not available
-    $result = `"$openssl" dgst -r -sha256 "$_[0]"`;
-    $result =~ s/^([0-9a-f]{64}) .+/$1/is;
+    $result = (split(/ |\r|\n/,`$openssl dgst -sha1 $_[0]`))[1];
   }
   return $result;
 }
 
 
-sub oldhash {
-  my $hash = "";
+sub oldsha1 {
+  my $sha1 = "";
   open(C, "<$_[0]") || return 0;
   while(<C>) {
     chomp;
-    if($_ =~ /^\#\# SHA256: (.*)/) {
-      $hash = $1;
+    if($_ =~ /^\#\# SHA1: (.*)/) {
+      $sha1 = $1;
       last;
     }
   }
   close(C);
-  return $hash;
+  return $sha1;
 }
 
 if ( $opt_p !~ m/:/ ) {
@@ -295,72 +283,39 @@ my $stdout = $crt eq '-';
 my $resp;
 my $fetched;
 
-my $oldhash = oldhash($crt);
+my $oldsha1 = oldsha1($crt);
 
-report "SHA256 of old file: $oldhash";
+report "SHA1 of old file: $oldsha1";
 
-if(!$opt_n) {
-  report "Downloading $txt ...";
+report "Downloading '$txt' ...";
 
-  # If we have an HTTPS URL then use curl
-  if($url =~ /^https:\/\//i) {
-    if($curl) {
-      if($curl =~ /^Protocols:.* https( |$)/m) {
-        report "Get certdata with curl!";
-        my $proto = !$opt_k ? "--proto =https" : "";
-        my $quiet = $opt_q ? "-s" : "";
-        my @out = `curl -w %{response_code} $proto $quiet -o "$txt" "$url"`;
-        if(@out && $out[0] == 200) {
-          $fetched = 1;
-          report "Downloaded $txt";
-        }
-        else {
-          report "Failed downloading via HTTPS with curl";
-          if(-e $txt && !unlink($txt)) {
-            report "Failed to remove '$txt': $!";
-          }
-        }
-      }
-      else {
-        report "curl lacks https support";
-      }
-    }
-    else {
-      report "curl not found";
-    }
+if($curl && !$opt_n) {
+  my $https = $url;
+  $https =~ s/^http:/https:/;
+  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 {
+    report "Failed downloading HTTPS with curl, trying HTTP with LWP";
   }
+}
 
-  # If nothing was fetched then use LWP
-  if(!$fetched) {
-    if($url =~ /^https:\/\//i) {
-      report "Falling back to HTTP";
-      $url =~ s/^https:\/\//http:\/\//i;
-    }
-    if(!$opt_k) {
-      report "URLs other than HTTPS are disabled by default, to enable use -k";
-      exit 1;
-    }
-    report "Get certdata with LWP!";
-    if(!defined(${LWP::UserAgent::VERSION})) {
-      report "LWP is not available (LWP::UserAgent not found)";
-      exit 1;
-    }
-    my $ua  = new LWP::UserAgent(agent => "$0/$version");
-    $ua->env_proxy();
-    $resp = $ua->mirror($url, $txt);
-    if($resp && $resp->code eq '304') {
-      report "Not modified";
-      exit 0 if -e $crt && !$opt_f;
-    }
-    else {
+unless ($fetched || ($opt_n and -e $txt)) {
+  my $ua  = new LWP::UserAgent(agent => "$0/$version");
+  $ua->env_proxy();
+  $resp = $ua->mirror($url, $txt);
+  if ($resp && $resp->code eq '304') {
+    report "Not modified";
+    exit 0 if -e $crt && !$opt_f;
+  } else {
       $fetched = 1;
-      report "Downloaded $txt";
-    }
-    if(!$resp || $resp->code !~ /^(?:200|304)$/) {
+  }
+  if( !$resp || $resp->code !~ /^(?:200|304)$/ ) {
       report "Unable to download latest data: "
         . ($resp? $resp->code . ' - ' . $resp->message : "LWP failed");
       exit 1 if -e $crt || ! -r $txt;
-    }
   }
 }
 
@@ -373,14 +328,14 @@ if(!$filedate) {
 }
 
 # get the hash from the download file
-my $newhash= sha256($txt);
+my $newsha1= sha1($txt);
 
-if(!$opt_f && $oldhash eq $newhash) {
+if(!$opt_f && $oldsha1 eq $newsha1) {
     report "Downloaded file identical to previous run\'s source file. Exiting";
     exit;
 }
 
-report "SHA256 of new file: $newhash";
+report "SHA1 of new file: $newsha1";
 
 my $currentdate = scalar gmtime($filedate);
 
@@ -394,7 +349,7 @@ print CRT <<EOT;
 ##
 ## Bundle of CA Root Certificates
 ##
-## Certificate data from Mozilla ${datesrc}: ${currentdate} GMT
+## Certificate data from Mozilla ${datesrc}: ${currentdate}
 ##
 ## This is a bundle of X.509 certificates of public Certificate Authorities
 ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -407,7 +362,7 @@ print CRT <<EOT;
 ## Just configure this file as the SSLCACertificateFile.
 ##
 ## Conversion done with mk-ca-bundle.pl version $version.
-## SHA256: $newhash
+## SHA1: $newsha1
 ##
 
 EOT
@@ -488,7 +443,7 @@ while (<TXT>) {
               . "-----END CERTIFICATE-----\n";
       print CRT "\n$caname\n";
       print CRT @precert if($opt_m);
-      my $maxStringLength = length(decode('UTF-8', $caname, Encode::FB_CROAK));
+      my $maxStringLength = length($caname);
       if ($opt_t) {
         foreach my $key (keys %trust_purposes_by_level) {
            my $string = $key . ": " . join(", ", @{$trust_purposes_by_level{$key}});
@@ -548,7 +503,5 @@ unless( $stdout ) {
     }
     rename "$crt.~", $crt or die "Failed to rename $crt.~ to $crt: $!\n";
 }
-if($opt_u && -e $txt && !unlink($txt)) {
-  report "Failed to remove $txt: $!\n";
-}
+unlink $txt if ($opt_u);
 report "Done ($certnum CA certs processed, $skipnum skipped).";
index a9b983e..b0d9427 100755 (executable)
 '* Hacked by Guenter Knauf\r
 '***************************************************************************\r
 Option Explicit\r
-Const myVersion = "0.4.0"\r
+Const myVersion = "0.3.9"\r
 \r
-Const myUrl = "https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt"\r
+Const myUrl = "http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt"\r
+Const myOpenssl = "openssl.exe"\r
 \r
-Const myOpenSSL = "openssl.exe"\r
-Dim myUseOpenSSL\r
-myUseOpenSSL = TRUE          ' Flag: TRUE to use OpenSSL. If TRUE and is not\r
-                             ' found then a warning is shown before continuing.\r
-\r
-Const myCdSavF = TRUE        ' Flag: save downloaded data to file certdata.txt\r
+Const myCdSavF = FALSE       ' Flag: save downloaded data to file certdata.txt\r
 Const myCaBakF = TRUE        ' Flag: backup existing ca-bundle certificate\r
 Const myAskLiF = TRUE        ' Flag: display certdata.txt license agreement\r
+Const myAskTiF = TRUE        ' Flag: ask to include certificate text info\r
 Const myWrapLe = 76          ' Default length of base64 output lines\r
 \r
-' cert info code doesn't work properly with any recent openssl, leave disabled.\r
-' Also: we want our certificate output by default to be as similar as possible\r
-' to mk-ca-bundle.pl and setting this TRUE changes the base64 width to\r
-' OpenSSL's built-in default width, which is not the same as mk-ca-bundle.pl.\r
-Const myAskTiF = FALSE       ' Flag: ask to include certificate text info\r
-\r
-'\r
 '******************* Nothing to configure below! *******************\r
-'\r
-Const adTypeBinary = 1\r
-Const adTypeText = 2\r
-Const adSaveCreateNotExist = 1\r
-Const adSaveCreateOverWrite = 2\r
 Dim objShell, objNetwork, objFSO, objHttp\r
-Dim myBase, mySelf, myStream, myTmpFh, myCdData, myCdFile\r
-Dim myCaFile, myTmpName, myBakNum, myOptTxt, i\r
+Dim myBase, mySelf, myFh, myTmpFh, myCdData, myCdFile, myCaFile, myTmpName, myBakNum, myOptTxt, i\r
 Set objNetwork = WScript.CreateObject("WScript.Network")\r
 Set objShell = WScript.CreateObject("WScript.Shell")\r
 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")\r
@@ -63,60 +47,14 @@ Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest.5.1")
 If objHttp Is Nothing Then Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest")\r
 myBase = Left(WScript.ScriptFullName, InstrRev(WScript.ScriptFullName, "\"))\r
 mySelf = Left(WScript.ScriptName, InstrRev(WScript.ScriptName, ".") - 1) & " " & myVersion\r
-\r
 myCdFile = Mid(myUrl, InstrRev(myUrl, "/") + 1)\r
 myCaFile = "ca-bundle.crt"\r
-myTmpName = InputBox("It will take a minute to download and parse the " & _\r
-                     "certificate data." & _\r
-                     vbLf & vbLf & _\r
-                     "Please enter the output filename:", mySelf, myCaFile)\r
-If (myTmpName = "") Then\r
-  WScript.Quit 1\r
-End If\r
-myCaFile = myTmpName\r
-If (myCdFile = "") Then\r
-  MsgBox("URL does not contain filename!"), vbCritical, mySelf\r
-  WScript.Quit 1\r
-End If\r
-\r
-' Don't use OpenSSL if it's not present.\r
-If (myUseOpenSSL = TRUE) Then\r
-  Dim errnum\r
-\r
-  On Error Resume Next\r
-  Call objShell.Run("""" & myOpenSSL & """ version", 0, TRUE)\r
-  errnum = Err.Number\r
-  On Error GoTo 0\r
-\r
-  If Not (errnum = 0) Then\r
-    myUseOpenSSL = FALSE\r
-    MsgBox("OpenSSL was not found so the certificate bundle will not " & _\r
-           "include the SHA256 hash of the raw certificate data file " & _\r
-           "that was used to generate the certificates in the bundle. " & _\r
-           vbLf & vbLf & _\r
-           "This does not have any effect on the certificate output, " & _\r
-           "so this script will continue." & _\r
-           vbLf & vbLf & _\r
-           "If you want to set a custom location for OpenSSL or disable " & _\r
-           "this message then edit the variables at the start of the " & _\r
-           "script."), vbInformation, mySelf\r
-  End If\r
-End If\r
-\r
-If (myAskTiF = TRUE) And (myUseOpenSSL = TRUE) Then\r
-  If (6 = objShell.PopUp("Do you want to include text information about " & _\r
-                         "each certificate?" & vbLf & _\r
-                         "(Requires OpenSSL.exe in the current directory " & _\r
-                         "or search path)",, _\r
-          mySelf, vbQuestion + vbYesNo + vbDefaultButton2)) Then\r
-    myOptTxt = TRUE\r
-  Else\r
-    myOptTxt = FALSE\r
-  End If\r
+myTmpName = InputBox("Enter output filename:", mySelf, myCaFile)\r
+If Not (myTmpName = "") Then\r
+  myCaFile = myTmpName\r
 End If\r
-\r
-' Uncomment the line below to ignore SSL invalid cert errors\r
-' objHttp.Option(4) = 256 + 512 + 4096 + 8192\r
+' Lets ignore SSL invalid cert errors\r
+objHttp.Option(4) = 256 + 512 + 4096 + 8192\r
 objHttp.SetTimeouts 0, 5000, 10000, 10000\r
 objHttp.Open "GET", myUrl, FALSE\r
 objHttp.setRequestHeader "User-Agent", WScript.ScriptName & "/" & myVersion\r
@@ -125,13 +63,15 @@ If Not (objHttp.Status = 200) Then
   MsgBox("Failed to download '" & myCdFile & "': " & objHttp.Status & " - " & objHttp.StatusText), vbCritical, mySelf\r
   WScript.Quit 1\r
 End If\r
+' Convert data from ResponseBody instead of using ResponseText because of UTF-8\r
+myCdData = ConvertBinaryData(objHttp.ResponseBody)\r
+Set objHttp = Nothing\r
 ' Write received data to file if enabled\r
 If (myCdSavF = TRUE) Then\r
-  Call SaveBinaryData(myCdFile, objHttp.ResponseBody)\r
+  Set myFh = objFSO.OpenTextFile(myCdFile, 2, TRUE)\r
+  myFh.Write myCdData\r
+  myFh.Close\r
 End If\r
-' Convert data from ResponseBody instead of using ResponseText because of UTF-8\r
-myCdData = ConvertBinaryToUTF8(objHttp.ResponseBody)\r
-Set objHttp = Nothing\r
 ' Backup exitsing ca-bundle certificate file\r
 If (myCaBakF = TRUE) Then\r
   If objFSO.FileExists(myCaFile) Then\r
@@ -146,7 +86,15 @@ If (myCaBakF = TRUE) Then
     myTmpFh.Move myBakFile\r
   End If\r
 End If\r
-\r
+If (myAskTiF = TRUE) Then\r
+  If (6 = objShell.PopUp("Do you want to include text information about each certificate?" & vbLf & _\r
+          "(requires OpenSSL commandline in current directory or in search path)",, _\r
+          mySelf, vbQuestion + vbYesNo + vbDefaultButton2)) Then\r
+    myOptTxt = TRUE\r
+  Else\r
+    myOptTxt = FALSE\r
+  End If\r
+End If\r
 ' Process the received data\r
 Dim myLines, myPattern, myInsideCert, myInsideLicense, myLicenseText, myNumCerts, myNumSkipped\r
 Dim myLabel, myOctets, myData, myPem, myRev, myUntrusted, j\r
@@ -154,33 +102,23 @@ myNumSkipped = 0
 myNumCerts = 0\r
 myData = ""\r
 myLines = Split(myCdData, vbLf, -1)\r
-Set myStream = CreateObject("ADODB.Stream")\r
-myStream.Open\r
-myStream.Type = adTypeText\r
-myStream.Charset = "utf-8"\r
-myStream.WriteText "##" & vbLf & _\r
-  "## Bundle of CA Root Certificates" & vbLf & _\r
-  "##" & vbLf & _\r
-  "## Certificate data from Mozilla as of: " & _\r
-    ConvertDateToString(LocalDateToUTC(Now)) & " GMT" & vbLf & _\r
-  "##" & vbLf & _\r
-  "## This is a bundle of X.509 certificates of public Certificate Authorities" & vbLf & _\r
-  "## (CA). These were automatically extracted from Mozilla's root certificates" & vbLf & _\r
-  "## file (certdata.txt).  This file can be found in the mozilla source tree:" & vbLf & _\r
-  "## " & myUrl & vbLf & _\r
-  "##" & vbLf & _\r
-  "## It contains the certificates in PEM format and therefore" & vbLf & _\r
-  "## can be directly used with curl / libcurl / php_curl, or with" & vbLf & _\r
-  "## an Apache+mod_ssl webserver for SSL client authentication." & vbLf & _\r
-  "## Just configure this file as the SSLCACertificateFile." & vbLf & _\r
-  "##" & vbLf & _\r
-  "## Conversion done with mk-ca-bundle.vbs version " & myVersion & "." & vbLf\r
-If (myCdSavF = TRUE) And (myUseOpenSSL = TRUE) Then\r
-  myStream.WriteText "## SHA256: " & FileSHA256(myCdFile) & vbLf\r
-End If\r
-myStream.WriteText "##" & vbLf & vbLf\r
-\r
-myStream.WriteText vbLf\r
+Set myFh = objFSO.OpenTextFile(myCaFile, 2, TRUE)\r
+myFh.Write "##" & vbLf\r
+myFh.Write "## " & myCaFile & " -- Bundle of CA Root Certificates" & vbLf\r
+myFh.Write "##" & vbLf\r
+myFh.Write "## Converted at: " & Now & vbLf\r
+myFh.Write "##" & vbLf\r
+myFh.Write "## This is a bundle of X.509 certificates of public Certificate Authorities" & vbLf\r
+myFh.Write "## (CA). These were automatically extracted from Mozilla's root certificates" & vbLf\r
+myFh.Write "## file (certdata.txt).  This file can be found in the mozilla source tree:" & vbLf\r
+myFh.Write "## '/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt'" & vbLf\r
+myFh.Write "##" & vbLf\r
+myFh.Write "## It contains the certificates in PEM format and therefore" & vbLf\r
+myFh.Write "## can be directly used with curl / libcurl / php_curl, or with" & vbLf\r
+myFh.Write "## an Apache+mod_ssl webserver for SSL client authentication." & vbLf\r
+myFh.Write "## Just configure this file as the SSLCACertificateFile." & vbLf\r
+myFh.Write "##" & vbLf\r
+myFh.Write vbLf\r
 For i = 0 To UBound(myLines)\r
   If InstrRev(myLines(i), "CKA_LABEL ") Then\r
     myPattern = "^CKA_LABEL\s+[A-Z0-9]+\s+""(.+?)"""\r
@@ -198,13 +136,13 @@ For i = 0 To UBound(myLines)
       If (myUntrusted = TRUE) Then\r
         myNumSkipped = myNumSkipped + 1\r
       Else\r
-        myStream.WriteText myLabel & vbLf\r
-        myStream.WriteText String(Len(myLabel), "=") & vbLf\r
+        myFh.Write myLabel & vbLf\r
+        myFh.Write String(Len(myLabel), "=") & vbLf\r
         myPem = "-----BEGIN CERTIFICATE-----" & vbLf & _\r
                 Base64Encode(myData) & vbLf & _\r
                 "-----END CERTIFICATE-----" & vbLf\r
         If (myOptTxt = FALSE) Then\r
-          myStream.WriteText myPem & vbLf\r
+          myFh.Write myPem & vbLf\r
         Else\r
           Dim myCmd, myRval, myTmpIn, myTmpOut\r
           myTmpIn = objFSO.GetSpecialFolder(2).Path & "\" & objFSO.GetTempName\r
@@ -212,8 +150,8 @@ For i = 0 To UBound(myLines)
           Set myTmpFh = objFSO.OpenTextFile(myTmpIn, 2, TRUE)\r
           myTmpFh.Write myPem\r
           myTmpFh.Close\r
-          myCmd = """" & myOpenSSL & """ x509 -md5 -fingerprint -text " & _\r
-                  "-inform PEM -in " & myTmpIn & " -out " & myTmpOut\r
+          myCmd = myOpenssl & " x509 -md5 -fingerprint -text -inform PEM" & _\r
+                  " -in " & myTmpIn & " -out " & myTmpOut\r
           myRval = objShell.Run (myCmd, 0, TRUE)\r
           objFSO.DeleteFile myTmpIn, TRUE\r
           If Not (myRval = 0) Then\r
@@ -222,7 +160,7 @@ For i = 0 To UBound(myLines)
             WScript.Quit 3\r
           End If\r
           Set myTmpFh = objFSO.OpenTextFile(myTmpOut, 1)\r
-          myStream.WriteText myTmpFh.ReadAll & vbLf\r
+          myFh.Write myTmpFh.ReadAll & vbLf\r
           myTmpFh.Close\r
           objFSO.DeleteFile myTmpOut, TRUE\r
         End If\r
@@ -238,7 +176,7 @@ For i = 0 To UBound(myLines)
   If InstrRev(myLines(i), "CVS_ID ") Then\r
     myPattern = "^CVS_ID\s+""(.+?)"""\r
     myRev = RegExprFirst(myPattern, myLines(i))\r
-    myStream.WriteText "# " & myRev & vbLf & vbLf\r
+    myFh.Write "# " & myRev & vbLf & vbLf\r
   End If\r
   If InstrRev(myLines(i), "CKA_VALUE MULTILINE_OCTAL") Then\r
     myInsideCert = TRUE\r
@@ -249,7 +187,7 @@ For i = 0 To UBound(myLines)
     myInsideLicense = TRUE\r
   End If\r
   If (myInsideLicense = TRUE) Then\r
-    myStream.WriteText myLines(i) & vbLf\r
+    myFh.Write myLines(i) & vbLf\r
     myLicenseText = myLicenseText & Mid(myLines(i), 2) & vbLf\r
   End If\r
   If InstrRev(myLines(i), "***** END LICENSE BLOCK *****") Then\r
@@ -258,54 +196,28 @@ For i = 0 To UBound(myLines)
       If Not (6 = objShell.PopUp(myLicenseText & vbLf & _\r
               "Do you agree to the license shown above (required to proceed) ?",, _\r
               mySelf, vbQuestion + vbYesNo + vbDefaultButton1)) Then\r
-        myStream.Close\r
+        myFh.Close\r
         objFSO.DeleteFile myCaFile, TRUE\r
         WScript.Quit 2\r
       End If\r
     End If\r
   End If\r
 Next\r
-\r
-' To stop the UTF-8 BOM from being written the stream has to be copied and\r
-' then saved as binary.\r
-Dim myCopy\r
-Set myCopy = CreateObject("ADODB.Stream")\r
-myCopy.Type = adTypeBinary\r
-myCopy.Open\r
-myStream.Position = 3 ' Skip UTF-8 BOM\r
-myStream.CopyTo myCopy\r
-myCopy.SaveToFile myCaFile, adSaveCreateOverWrite\r
-myCopy.Close\r
-myStream.Close\r
-Set myCopy = Nothing\r
-Set myStream = Nothing\r
-\r
-' Done\r
+myFh.Close\r
 objShell.PopUp "Done (" & myNumCerts & " CA certs processed, " & myNumSkipped & _\r
                " untrusted skipped).", 20, mySelf, vbInformation\r
 WScript.Quit 0\r
 \r
-Function ConvertBinaryToUTF8(arrBytes)\r
+Function ConvertBinaryData(arrBytes)\r
   Dim objStream\r
   Set objStream = CreateObject("ADODB.Stream")\r
   objStream.Open\r
-  objStream.Type = adTypeBinary\r
+  objStream.Type = 1\r
   objStream.Write arrBytes\r
   objStream.Position = 0\r
-  objStream.Type = adTypeText\r
-  objStream.Charset = "utf-8"\r
-  ConvertBinaryToUTF8 = objStream.ReadText\r
-  Set objStream = Nothing\r
-End Function\r
-\r
-Function SaveBinaryData(filename, data)\r
-  Dim objStream\r
-  Set objStream = CreateObject("ADODB.Stream")\r
-  objStream.Type = adTypeBinary\r
-  objStream.Open\r
-  objStream.Write data\r
-  objStream.SaveToFile filename, adSaveCreateOverWrite\r
-  objStream.Close\r
+  objStream.Type = 2\r
+  objStream.Charset = "ascii"\r
+  ConvertBinaryData = objStream.ReadText\r
   Set objStream = Nothing\r
 End Function\r
 \r
@@ -371,61 +283,4 @@ Function MyASC(OneChar)
   If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)\r
 End Function\r
 \r
-' Return the date in the same format as perl to match mk-ca-bundle.pl output:\r
-' Wed Sep  7 03:12:05 2016\r
-Function ConvertDateToString(input)\r
-  Dim output\r
-  output = WeekDayName(WeekDay(input), TRUE) & " " & _\r
-           MonthName(Month(input), TRUE) & " "\r
-  If (Len(Day(input)) = 1) Then\r
-    output = output & " "\r
-  End If\r
-  output = output & _\r
-           Day(input) & " " & _\r
-           FormatDateTime(input, vbShortTime) & ":"\r
-  If (Len(Second(input)) = 1) Then\r
-    output = output & "0"\r
-  End If\r
-  output = output & _\r
-           Second(input) & " " & _\r
-           Year(input)\r
-  ConvertDateToString = output\r
-End Function\r
 \r
-' Convert local Date to UTC. Microsoft says:\r
-' Use Win32_ComputerSystem CurrentTimeZone property, because it automatically\r
-' adjusts the Time Zone bias for daylight saving time; Win32_Time Zone Bias\r
-' property does not.\r
-' https://msdn.microsoft.com/en-us/library/windows/desktop/ms696015.aspx\r
-Function LocalDateToUTC(localdate)\r
-  Dim item, offset\r
-  For Each item In GetObject("winmgmts:").InstancesOf("Win32_ComputerSystem")\r
-    offset = item.CurrentTimeZone ' the offset in minutes\r
-  Next\r
-  If (offset < 0) Then\r
-    LocalDateToUTC = DateAdd("n",  ABS(offset), localdate)\r
-  Else\r
-    LocalDateToUTC = DateAdd("n", -ABS(offset), localdate)\r
-  End If\r
-  'objShell.PopUp LocalDateToUTC\r
-End Function\r
-\r
-Function FileSHA256(filename)\r
-  Dim cmd, rval, tmpOut, tmpFh\r
-  if (myUseOpenSSL = TRUE) Then\r
-    tmpOut = objFSO.GetSpecialFolder(2).Path & "\" & objFSO.GetTempName\r
-    cmd = """" & myOpenSSL & """ dgst -r -sha256 -out """ & tmpOut & """ """ & filename & """"\r
-    rval = objShell.Run(cmd, 0, TRUE)\r
-    If Not (rval = 0) Then\r
-      MsgBox("Failed to get sha256 of """ & filename & """ with OpenSSL commandline!"), vbCritical, mySelf\r
-      objFSO.DeleteFile tmpOut, TRUE\r
-      WScript.Quit 3\r
-    End If\r
-    Set tmpFh = objFSO.OpenTextFile(tmpOut, 1)\r
-    FileSHA256 = RegExprFirst("^([0-9a-f]{64}) .+", tmpFh.ReadAll)\r
-    tmpFh.Close\r
-    objFSO.DeleteFile tmpOut, TRUE\r
-  Else\r
-    FileSHA256 = ""\r
-  End If\r
-End Function\r
index e4270ab..73f854b 100644 (file)
@@ -92,8 +92,7 @@
 #  define mp_uintmax_t unsigned long
 #endif
 
-#define BUFFSIZE 326 /* buffer for long-to-str and float-to-str calcs, should
-                        fit negative DBL_MAX (317 letters) */
+#define BUFFSIZE 256 /* buffer for long-to-str and float-to-str calcs */
 #define MAX_PARAMETERS 128 /* lame static limit */
 
 #ifdef __AMIGA__
@@ -228,12 +227,10 @@ static bool dprintf_IsQualifierNoDollar(const char *fmt)
  * Create an index with the type of each parameter entry and its
  * value (may vary in size)
  *
- * Returns zero on success.
- *
  ******************************************************************/
 
-static int dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
-                         va_list arglist)
+static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
+                          va_list arglist)
 {
   char *fmt = (char *)format;
   int param_num = 0;
@@ -304,6 +301,7 @@ static int dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
           flags |= FLAGS_ALT;
           break;
         case '.':
+          flags |= FLAGS_PREC;
           if('*' == *fmt) {
             /* The precision is picked from a specified parameter */
 
@@ -395,10 +393,6 @@ static int dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
 
       i = this_param - 1;
 
-      if((i < 0) || (i >= MAX_PARAMETERS))
-        /* out of allowed range */
-        return 1;
-
       switch (*fmt) {
       case 'S':
         flags |= FLAGS_ALT;
@@ -502,7 +496,7 @@ static int dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
         (mp_intmax_t)va_arg(arglist, int);
     }
 
-    switch(vto[i].type) {
+    switch (vto[i].type) {
     case FORMAT_STRING:
       vto[i].data.str = va_arg(arglist, char *);
       break;
@@ -555,7 +549,7 @@ static int dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
     }
   }
 
-  return 0;
+  return max_param;
 
 }
 
@@ -593,8 +587,7 @@ static int dprintf_formatf(
   char *workend = &work[sizeof(work) - 2];
 
   /* Do the actual %-code parsing */
-  if(dprintf_Pass1(format, vto, endpos, ap_save))
-    return -1;
+  dprintf_Pass1(format, vto, endpos, ap_save);
 
   end = &endpos[0]; /* the initial end-position from the list dprintf_Pass1()
                        created for us */
@@ -692,7 +685,7 @@ static int dprintf_formatf(
 
     is_alt = (p->flags & FLAGS_ALT) ? 1 : 0;
 
-    switch(p->type) {
+    switch (p->type) {
     case FORMAT_INT:
       num = p->data.num.as_unsigned;
       if(p->flags & FLAGS_CHAR) {
@@ -917,25 +910,12 @@ static int dprintf_formatf(
         *fptr = 0;
 
         if(width >= 0) {
-          if(width >= (long)sizeof(work))
-            width = sizeof(work)-1;
           /* RECURSIVE USAGE */
           len = curl_msnprintf(fptr, left, "%ld", width);
           fptr += len;
           left -= len;
         }
         if(prec >= 0) {
-          /* for each digit in the integer part, we can have one less
-             precision */
-          size_t maxprec = sizeof(work) - 2;
-          double val = p->data.dnum;
-          while(val >= 10.0) {
-            val /= 10;
-            maxprec--;
-          }
-
-          if(prec > (long)maxprec)
-            prec = (long)maxprec-1;
           /* RECURSIVE USAGE */
           len = curl_msnprintf(fptr, left, ".%ld", prec);
           fptr += len;
@@ -955,9 +935,7 @@ static int dprintf_formatf(
         /* NOTE NOTE NOTE!! Not all sprintf implementations return number of
            output characters */
         (sprintf)(work, formatbuf, p->data.dnum);
-#ifdef CURLDEBUG
-        assert(strlen(work) <= sizeof(work));
-#endif
+
         for(fptr=work; *fptr; fptr++)
           OUTCHAR(*fptr);
       }
@@ -1014,7 +992,7 @@ int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format,
   info.max = maxlength;
 
   retcode = dprintf_formatf(&info, addbyter, format, ap_save);
-  if((retcode != -1) && info.max) {
+  if(info.max) {
     /* we terminate this with a zero byte */
     if(info.max == info.length)
       /* we're at maximum, scrap the last letter */
@@ -1051,19 +1029,16 @@ static int alloc_addbyter(int output, FILE *data)
     infop->len =0;
   }
   else if(infop->len+1 >= infop->alloc) {
-    char *newptr = NULL;
-    size_t newsize = infop->alloc*2;
+    char *newptr;
 
-    /* detect wrap-around or other overflow problems */
-    if(newsize > infop->alloc)
-      newptr = realloc(infop->buffer, newsize);
+    newptr = realloc(infop->buffer, infop->alloc*2);
 
     if(!newptr) {
       infop->fail = 1;
       return -1; /* fail */
     }
     infop->buffer = newptr;
-    infop->alloc = newsize;
+    infop->alloc *= 2;
   }
 
   infop->buffer[ infop->len ] = outc;
index bb31dc1..8e40916 100644 (file)
@@ -42,8 +42,6 @@
 #include "multihandle.h"
 #include "pipeline.h"
 #include "sigpipe.h"
-#include "vtls/vtls.h"
-#include "connect.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
@@ -464,14 +462,6 @@ CURLMcode curl_multi_add_handle(struct Curl_multi *multi,
      handle is added */
   memset(&multi->timer_lastcall, 0, sizeof(multi->timer_lastcall));
 
-  /* The closure handle only ever has default timeouts set. To improve the
-     state somewhat we clone the timeouts from each added handle so that the
-     closure handle always has the same timeouts as the most recently added
-     easy handle. */
-  multi->closure_handle->set.timeout = data->set.timeout;
-  multi->closure_handle->set.server_response_timeout =
-    data->set.server_response_timeout;
-
   update_timer(multi);
   return CURLM_OK;
 }
@@ -584,7 +574,6 @@ static CURLcode multi_done(struct connectdata **connp,
      !conn->bits.close) {
     /* Stop if pipeline is not empty and we do not have to close
        connection. */
-    data->easy_conn = NULL;
     DEBUGF(infof(data, "Connection still in use, no more multi_done now!\n"));
     return CURLE_OK;
   }
@@ -638,10 +627,7 @@ static CURLcode multi_done(struct connectdata **connp,
 
       infof(data, "Connection #%ld to host %s left intact\n",
             conn->connection_id,
-            conn->bits.socksproxy ? conn->socks_proxy.host.dispname :
-            conn->bits.httpproxy ? conn->http_proxy.host.dispname :
-            conn->bits.conn_to_host ? conn->conn_to_host.dispname :
-            conn->host.dispname);
+            conn->bits.httpproxy?conn->proxy.dispname:conn->host.dispname);
     }
     else
       data->state.lastconnect = NULL;
@@ -816,11 +802,6 @@ static int waitconnect_getsock(struct connectdata *conn,
   if(!numsocks)
     return GETSOCK_BLANK;
 
-#ifdef USE_SSL
-  if(CONNECT_FIRSTSOCKET_PROXY_SSL())
-    return Curl_ssl_getsock(conn, sock, numsocks);
-#endif
-
   for(i=0; i<2; i++) {
     if(conn->tempsock[i] != CURL_SOCKET_BAD) {
       sock[s] = conn->tempsock[i];
@@ -1309,9 +1290,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
   CURLMcode rc;
   CURLcode result = CURLE_OK;
   struct SingleRequest *k;
-  time_t timeout_ms;
-  time_t recv_timeout_ms;
-  time_t send_timeout_ms;
+  long timeout_ms;
   int control;
 
   if(!GOOD_EASY_HANDLE(data))
@@ -1482,8 +1461,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       struct connectdata *conn = data->easy_conn;
       const char *hostname;
 
-      if(conn->bits.httpproxy)
-        hostname = conn->http_proxy.host.name;
+      if(conn->bits.proxy)
+        hostname = conn->proxy.name;
       else if(conn->bits.conn_to_host)
         hostname = conn->conn_to_host.name;
       else
@@ -1559,9 +1538,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
         multistate(data, CURLM_STATE_CONNECT);
       }
       else if(!result) {
-        if((data->easy_conn->http_proxy.proxytype != CURLPROXY_HTTPS ||
-           data->easy_conn->bits.proxy_ssl_connected[FIRSTSOCKET]) &&
-           (data->easy_conn->tunnel_state[FIRSTSOCKET] != TUNNEL_CONNECT)) {
+        if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_COMPLETE) {
           rc = CURLM_CALL_MULTI_PERFORM;
           /* initiate protocol connect phase */
           multistate(data, CURLM_STATE_SENDPROTOCONNECT);
@@ -1574,14 +1551,6 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       /* awaiting a completion of an asynch TCP connect */
       result = Curl_is_connected(data->easy_conn, FIRSTSOCKET, &connected);
       if(connected && !result) {
-#ifndef CURL_DISABLE_HTTP
-        if((data->easy_conn->http_proxy.proxytype == CURLPROXY_HTTPS &&
-            !data->easy_conn->bits.proxy_ssl_connected[FIRSTSOCKET]) ||
-            (data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)) {
-          multistate(data, CURLM_STATE_WAITPROXYCONNECT);
-          break;
-        }
-#endif
         rc = CURLM_CALL_MULTI_PERFORM;
         multistate(data, data->easy_conn->bits.tunnel_proxy?
                    CURLM_STATE_WAITPROXYCONNECT:
@@ -1831,30 +1800,19 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       else
         result = Curl_speedcheck(data, now);
 
-      if(!result) {
-        send_timeout_ms = 0;
-        if(data->set.max_send_speed > 0)
-          send_timeout_ms = Curl_pgrsLimitWaitTime(data->progress.uploaded,
-                                data->progress.ul_limit_size,
-                                data->set.max_send_speed,
-                                data->progress.ul_limit_start,
-                                now);
-
-        recv_timeout_ms = 0;
-        if(data->set.max_recv_speed > 0)
-          recv_timeout_ms = Curl_pgrsLimitWaitTime(data->progress.downloaded,
-                                data->progress.dl_limit_size,
-                                data->set.max_recv_speed,
-                                data->progress.dl_limit_start,
-                                now);
-
-        if(send_timeout_ms <= 0 && recv_timeout_ms <= 0)
-          multistate(data, CURLM_STATE_PERFORM);
-        else if(send_timeout_ms >= recv_timeout_ms)
-          Curl_expire_latest(data, send_timeout_ms);
-        else
-          Curl_expire_latest(data, recv_timeout_ms);
-      }
+      if(( (data->set.max_send_speed == 0) ||
+           (Curl_pgrsLimitWaitTime(data->progress.uploaded,
+                                   data->progress.ul_limit_size,
+                                   data->set.max_send_speed,
+                                   data->progress.ul_limit_start,
+                                   now) <= 0))  &&
+         ( (data->set.max_recv_speed == 0) ||
+           (Curl_pgrsLimitWaitTime(data->progress.downloaded,
+                                   data->progress.dl_limit_size,
+                                   data->set.max_recv_speed,
+                                   data->progress.dl_limit_start,
+                                   now) <= 0)))
+        multistate(data, CURLM_STATE_PERFORM);
       break;
 
     case CURLM_STATE_PERFORM:
@@ -1864,30 +1822,31 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       bool comeback = FALSE;
 
       /* check if over send speed */
-      send_timeout_ms = 0;
-      if(data->set.max_send_speed > 0)
-        send_timeout_ms = Curl_pgrsLimitWaitTime(data->progress.uploaded,
-                                                 data->progress.ul_limit_size,
-                                                 data->set.max_send_speed,
-                                                 data->progress.ul_limit_start,
-                                                 now);
+      if(data->set.max_send_speed > 0) {
+        timeout_ms = Curl_pgrsLimitWaitTime(data->progress.uploaded,
+                                            data->progress.ul_limit_size,
+                                            data->set.max_send_speed,
+                                            data->progress.ul_limit_start,
+                                            now);
+        if(timeout_ms > 0) {
+          multistate(data, CURLM_STATE_TOOFAST);
+          Curl_expire_latest(data, timeout_ms);
+          break;
+        }
+      }
 
       /* check if over recv speed */
-      recv_timeout_ms = 0;
-      if(data->set.max_recv_speed > 0)
-        recv_timeout_ms = Curl_pgrsLimitWaitTime(data->progress.downloaded,
-                                                 data->progress.dl_limit_size,
-                                                 data->set.max_recv_speed,
-                                                 data->progress.dl_limit_start,
-                                                 now);
-
-      if(send_timeout_ms > 0 || recv_timeout_ms > 0) {
-        multistate(data, CURLM_STATE_TOOFAST);
-        if(send_timeout_ms >= recv_timeout_ms)
-          Curl_expire_latest(data, send_timeout_ms);
-        else
-          Curl_expire_latest(data, recv_timeout_ms);
-        break;
+      if(data->set.max_recv_speed > 0) {
+        timeout_ms = Curl_pgrsLimitWaitTime(data->progress.downloaded,
+                                            data->progress.dl_limit_size,
+                                            data->set.max_recv_speed,
+                                            data->progress.dl_limit_start,
+                                            now);
+        if(timeout_ms > 0) {
+          multistate(data, CURLM_STATE_TOOFAST);
+          Curl_expire_latest(data, timeout_ms);
+          break;
+        }
       }
 
       /* read/write data if it is ready to do so */
@@ -2209,7 +2168,6 @@ static void close_all_connections(struct Curl_multi *multi)
     conn->data->easy_conn = NULL; /* clear the easy handle's connection
                                      pointer */
     /* This will remove the connection from the cache */
-    connclose(conn, "kill all");
     (void)Curl_disconnect(conn, FALSE);
     sigpipe_restore(&pipe_st);
 
@@ -2517,7 +2475,7 @@ static CURLMcode add_next_timeout(struct timeval now,
      timeout in *tv */
   for(e = list->head; e;) {
     struct curl_llist_element *n = e->next;
-    time_t diff = curlx_tvdiff(*(struct timeval *)e->ptr, now);
+    long diff = curlx_tvdiff(*(struct timeval *)e->ptr, now);
     if(diff <= 0)
       /* remove outdated entry */
       Curl_llist_remove(list, e, NULL);
@@ -2795,7 +2753,7 @@ static CURLMcode multi_timeout(struct Curl_multi *multi,
 
     if(Curl_splaycomparekeys(multi->timetree->key, now) > 0) {
       /* some time left before expiration */
-      *timeout_ms = (long)curlx_tvdiff(multi->timetree->key, now);
+      *timeout_ms = curlx_tvdiff(multi->timetree->key, now);
       if(!*timeout_ms)
         /*
          * Since we only provide millisecond resolution on the returned value
@@ -2902,7 +2860,7 @@ multi_addtimeout(struct curl_llist *timeoutlist,
     /* find the correct spot in the list */
     for(e = timeoutlist->head; e; e = e->next) {
       struct timeval *checktime = e->ptr;
-      time_t diff = curlx_tvdiff(*checktime, *timedup);
+      long diff = curlx_tvdiff(*checktime, *timedup);
       if(diff > 0)
         break;
       prev = e;
@@ -2929,7 +2887,7 @@ multi_addtimeout(struct curl_llist *timeoutlist,
  * The timeout will be added to a queue of timeouts if it defines a moment in
  * time that is later than the current head of queue.
  */
-void Curl_expire(struct Curl_easy *data, time_t milli)
+void Curl_expire(struct Curl_easy *data, long milli)
 {
   struct Curl_multi *multi = data->multi;
   struct timeval *nowp = &data->state.expiretime;
@@ -2942,7 +2900,7 @@ void Curl_expire(struct Curl_easy *data, time_t milli)
     return;
 
   set = Curl_tvnow();
-  set.tv_sec += (long)(milli/1000);
+  set.tv_sec += milli/1000;
   set.tv_usec += (milli%1000)*1000;
 
   if(set.tv_usec >= 1000000) {
@@ -2954,7 +2912,7 @@ void Curl_expire(struct Curl_easy *data, time_t milli)
     /* This means that the struct is added as a node in the splay tree.
        Compare if the new time is earlier, and only remove-old/add-new if it
        is. */
-    time_t diff = curlx_tvdiff(set, *nowp);
+    long diff = curlx_tvdiff(set, *nowp);
     if(diff > 0) {
       /* the new expire time was later so just add it to the queue
          and get out */
@@ -2992,14 +2950,14 @@ void Curl_expire(struct Curl_easy *data, time_t milli)
  * time-out period to expire.
  *
  */
-void Curl_expire_latest(struct Curl_easy *data, time_t milli)
+void Curl_expire_latest(struct Curl_easy *data, long milli)
 {
   struct timeval *expire = &data->state.expiretime;
 
   struct timeval set;
 
   set = Curl_tvnow();
-  set.tv_sec += (long)(milli / 1000);
+  set.tv_sec += milli / 1000;
   set.tv_usec += (milli % 1000) * 1000;
 
   if(set.tv_usec >= 1000000) {
@@ -3011,7 +2969,7 @@ void Curl_expire_latest(struct Curl_easy *data, time_t milli)
     /* This means that the struct is added as a node in the splay tree.
        Compare if the new time is earlier, and only remove-old/add-new if it
          is. */
-    time_t diff = curlx_tvdiff(set, *expire);
+    long diff = curlx_tvdiff(set, *expire);
     if(diff > 0)
       /* the new expire time was later than the top time, so just skip this */
       return;
index 0b78de9..c56b6ae 100644 (file)
@@ -38,9 +38,7 @@ typedef enum {
   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 TCP connect to finalize */
-  CURLM_STATE_WAITPROXYCONNECT, /* 5 - awaiting HTTPS proxy SSL initialization
-                                   to complete and/or proxy CONNECT to
-                                   finalize */
+  CURLM_STATE_WAITPROXYCONNECT, /* 5 - awaiting proxy CONNECT to finalize */
   CURLM_STATE_SENDPROTOCONNECT, /* 6 - initiate protocol connect procedure */
   CURLM_STATE_PROTOCONNECT, /* 7 - completing the protocol-specific connect
                                    phase */
index e5de1fc..eaff496 100644 (file)
@@ -25,9 +25,9 @@
 /*
  * Prototypes for library-wide functions provided by multi.c
  */
-void Curl_expire(struct Curl_easy *data, time_t milli);
+void Curl_expire(struct Curl_easy *data, long milli);
 void Curl_expire_clear(struct Curl_easy *data);
-void Curl_expire_latest(struct Curl_easy *data, time_t milli);
+void Curl_expire_latest(struct Curl_easy *data, long milli);
 bool Curl_pipeline_wanted(const struct Curl_multi* multi, int bits);
 void Curl_multi_handlePipeBreak(struct Curl_easy *data);
 
index 996711d..46f427a 100644 (file)
 
 #include <curl/curl.h>
 #include "netrc.h"
+
+#include "strequal.h"
 #include "strtok.h"
-#include "strcase.h"
+#include "rawstr.h"
 
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
@@ -128,20 +130,20 @@ int Curl_parsenetrc(const char *host,
 
         switch(state) {
         case NOTHING:
-          if(strcasecompare("machine", tok)) {
+          if(Curl_raw_equal("machine", tok)) {
             /* the next tok is the machine name, this is in itself the
                delimiter that starts the stuff entered for this machine,
                after this we need to search for 'login' and
                'password'. */
             state=HOSTFOUND;
           }
-          else if(strcasecompare("default", tok)) {
+          else if(Curl_raw_equal("default", tok)) {
             state=HOSTVALID;
             retcode=0; /* we did find our host */
           }
           break;
         case HOSTFOUND:
-          if(strcasecompare(host, tok)) {
+          if(Curl_raw_equal(host, tok)) {
             /* and yes, this is our host! */
             state=HOSTVALID;
             retcode=0; /* we did find our host */
@@ -154,7 +156,7 @@ int Curl_parsenetrc(const char *host,
           /* we are now parsing sub-keywords concerning "our" host */
           if(state_login) {
             if(specific_login) {
-              state_our_login = strcasecompare(*loginp, tok);
+              state_our_login = Curl_raw_equal(*loginp, tok);
             }
             else {
               free(*loginp);
@@ -177,11 +179,11 @@ int Curl_parsenetrc(const char *host,
             }
             state_password=0;
           }
-          else if(strcasecompare("login", tok))
+          else if(Curl_raw_equal("login", tok))
             state_login=1;
-          else if(strcasecompare("password", tok))
+          else if(Curl_raw_equal("password", tok))
             state_password=1;
-          else if(strcasecompare("machine", tok)) {
+          else if(Curl_raw_equal("machine", tok)) {
             /* ok, there's machine here go => */
             state = HOSTFOUND;
             state_our_login = FALSE;
index 2f5de4c..ed14618 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -117,7 +117,7 @@ CURLcode Curl_convert_to_network(struct Curl_easy *data,
     /* call iconv */
     input_ptr = output_ptr = buffer;
     in_bytes = out_bytes = length;
-    rc = iconv(data->outbound_cd, (const char **)&input_ptr, &in_bytes,
+    rc = iconv(data->outbound_cd, (const char**)&input_ptr, &in_bytes,
                &output_ptr, &out_bytes);
     if((rc == ICONV_ERROR) || (in_bytes != 0)) {
       error = ERRNO;
index 290cbe3..42b6aa0 100644 (file)
@@ -184,8 +184,7 @@ int GetOrSetUpData(int id, libdata_t **appData,
      */
     NXLock(gLibLock);
 
-    app_data = (libdata_t *) get_app_data(id);
-    if(!app_data) {
+    if(!(app_data = (libdata_t *) get_app_data(id))) {
       app_data = malloc(sizeof(libdata_t));
 
       if(app_data) {
@@ -260,8 +259,7 @@ int GetOrSetUpData(int id, libdata_t **appData,
           err         = ENOMEM;
         }
 
-        err = NXKeySetValue(key, thread_data);
-        if(err) {
+        if((err = NXKeySetValue(key, thread_data))) {
           free(thread_data->twentybytes);
           free(thread_data);
           thread_data = (libthreaddata_t *) NULL;
@@ -305,14 +303,14 @@ void DisposeThreadData(void *data)
 /* For native CLib-based NLM seems we can do a bit more simple. */
 #include <nwthread.h>
 
-int main(void)
+int main (void)
 {
   /* initialize any globals here... */
 
   /* do this if any global initializing was done
   SynchronizeStart();
   */
-  ExitThread(TSR_THREAD, 0);
+  ExitThread (TSR_THREAD, 0);
   return 0;
 }
 
index c6c22cc..385f9c8 100644 (file)
@@ -26,7 +26,7 @@
 
 #ifdef __NOVELL_LIBC__
 /* For native LibC-based NLM we need to do nothing. */
-int netware_init(void)
+int netware_init (void)
 {
   return 0;
 }
@@ -45,7 +45,7 @@ NETDB_DEFINE_CONTEXT
 #include <arpa/inet.h>
 NETINET_DEFINE_CONTEXT
 
-int netware_init(void)
+int netware_init (void)
 {
   int rc = 0;
   unsigned int myHandle = GetNLMHandle();
@@ -72,13 +72,13 @@ int netware_init(void)
 }
 
 /* dummy function to satisfy newer prelude */
-int __init_environment(void)
+int __init_environment (void)
 {
   return 0;
 }
 
 /* dummy function to satisfy newer prelude */
-int __deinit_environment(void)
+int __deinit_environment (void)
 {
   return 0;
 }
index 3c783be..dfcf855 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -80,7 +80,7 @@
 #endif
 
 #include <curl/curl.h>
-#include "strcase.h"
+#include "rawstr.h"
 #include "warnless.h"
 #include "parsedate.h"
 
@@ -211,7 +211,7 @@ static int checkday(const char *check, size_t len)
   else
     what = &Curl_wkday[0];
   for(i=0; i<7; i++) {
-    if(strcasecompare(check, what[0])) {
+    if(Curl_raw_equal(check, what[0])) {
       found=TRUE;
       break;
     }
@@ -228,7 +228,7 @@ static int checkmonth(const char *check)
 
   what = &Curl_month[0];
   for(i=0; i<12; i++) {
-    if(strcasecompare(check, what[0])) {
+    if(Curl_raw_equal(check, what[0])) {
       found=TRUE;
       break;
     }
@@ -248,7 +248,7 @@ static int checktz(const char *check)
 
   what = tz;
   for(i=0; i< sizeof(tz)/sizeof(tz[0]); i++) {
-    if(strcasecompare(check, what->name)) {
+    if(Curl_raw_equal(check, what->name)) {
       found=TRUE;
       break;
     }
@@ -386,17 +386,15 @@ static int parsedate(const char *date, time_t *output)
       /* a digit */
       int val;
       char *end;
-      int len=0;
       if((secnum == -1) &&
-         (3 == sscanf(date, "%02d:%02d:%02d%n",
-                      &hournum, &minnum, &secnum, &len))) {
+         (3 == sscanf(date, "%02d:%02d:%02d", &hournum, &minnum, &secnum))) {
         /* time stamp! */
-        date += len;
+        date += 8;
       }
       else if((secnum == -1) &&
-              (2 == sscanf(date, "%02d:%02d%n", &hournum, &minnum, &len))) {
+              (2 == sscanf(date, "%02d:%02d", &hournum, &minnum))) {
         /* time stamp without seconds */
-        date += len;
+        date += 5;
         secnum = 0;
       }
       else {
index 7a99357..92ff84b 100644 (file)
 
 /* Returns timeout in ms. 0 or negative number means the timeout has already
    triggered */
-time_t Curl_pp_state_timeout(struct pingpong *pp)
+long Curl_pp_state_timeout(struct pingpong *pp)
 {
   struct connectdata *conn = pp->conn;
   struct Curl_easy *data=conn->data;
-  time_t timeout_ms; /* in milliseconds */
-  time_t timeout2_ms; /* in milliseconds */
+  long timeout_ms; /* in milliseconds */
+  long timeout2_ms; /* in milliseconds */
   long response_time= (data->set.server_response_timeout)?
     data->set.server_response_timeout: pp->response_time;
 
@@ -83,8 +83,8 @@ CURLcode Curl_pp_statemach(struct pingpong *pp, bool block)
   struct connectdata *conn = pp->conn;
   curl_socket_t sock = conn->sock[FIRSTSOCKET];
   int rc;
-  time_t interval_ms;
-  time_t timeout_ms = Curl_pp_state_timeout(pp);
+  long interval_ms;
+  long timeout_ms = Curl_pp_state_timeout(pp);
   struct Curl_easy *data=conn->data;
   CURLcode result = CURLE_OK;
 
@@ -101,17 +101,14 @@ CURLcode Curl_pp_statemach(struct pingpong *pp, bool block)
   else
     interval_ms = 0; /* immediate */
 
-  if(Curl_ssl_data_pending(conn, FIRSTSOCKET))
-    rc = 1;
-  else if(Curl_pp_moredata(pp))
+  if(Curl_pp_moredata(pp))
     /* We are receiving and there is data in the cache so just read it */
     rc = 1;
   else if(!pp->sendleft && Curl_ssl_data_pending(conn, FIRSTSOCKET))
     /* We are receiving and there is data ready in the SSL library */
     rc = 1;
   else
-    rc = Curl_socket_check(pp->sendleft?CURL_SOCKET_BAD:sock, /* reading */
-                           CURL_SOCKET_BAD,
+    rc = Curl_socket_ready(pp->sendleft?CURL_SOCKET_BAD:sock, /* reading */
                            pp->sendleft?sock:CURL_SOCKET_BAD, /* writing */
                            interval_ms);
 
index 500100a..2f649d5 100644 (file)
@@ -88,7 +88,7 @@ void Curl_pp_init(struct pingpong *pp);
 
 /* Returns timeout in ms. 0 or negative number means the timeout has already
    triggered */
-time_t Curl_pp_state_timeout(struct pingpong *pp);
+long Curl_pp_state_timeout(struct pingpong *pp);
 
 
 /***********************************************************************
index 40a5e82..bd902d9 100644 (file)
@@ -31,7 +31,7 @@
 #include "multiif.h"
 #include "pipeline.h"
 #include "sendf.h"
-#include "strcase.h"
+#include "rawstr.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -177,7 +177,7 @@ bool Curl_pipeline_site_blacklisted(struct Curl_easy *handle,
         struct site_blacklist_entry *site;
 
         site = curr->ptr;
-        if(strcasecompare(site->hostname, conn->host.name) &&
+        if(Curl_raw_equal(site->hostname, conn->host.name) &&
            site->port == conn->remote_port) {
           infof(handle, "Site %s:%d is pipeline blacklisted\n",
                 conn->host.name, conn->remote_port);
@@ -269,7 +269,7 @@ bool Curl_pipeline_server_blacklisted(struct Curl_easy *handle,
         char *bl_server_name;
 
         bl_server_name = curr->ptr;
-        if(strncasecompare(bl_server_name, server_name,
+        if(Curl_raw_nequal(bl_server_name, server_name,
                            strlen(bl_server_name))) {
           infof(handle, "Server %s is blacklisted\n", server_name);
           return TRUE;
index 3feb3be..591e877 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "http.h" /* for HTTP proxy tunnel stuff */
 #include "socks.h"
 #include "pop3.h"
+
 #include "strtoofft.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "vtls/vtls.h"
 #include "connect.h"
 #include "strerror.h"
 #include "select.h"
 #include "multiif.h"
 #include "url.h"
+#include "rawstr.h"
 #include "curl_sasl.h"
 #include "curl_md5.h"
 #include "warnless.h"
@@ -104,7 +106,7 @@ static CURLcode pop3_parse_custom_request(struct connectdata *conn);
 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);
+static void pop3_get_message(char *buffer, char** outptr);
 
 /*
  * POP3 protocol handler.
@@ -127,8 +129,7 @@ const struct Curl_handler Curl_handler_pop3 = {
   ZERO_NULL,                        /* readwrite */
   PORT_POP3,                        /* defport */
   CURLPROTO_POP3,                   /* protocol */
-  PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY | /* flags */
-  PROTOPT_URLOPTIONS
+  PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */
 };
 
 #ifdef USE_SSL
@@ -154,7 +155,7 @@ const struct Curl_handler Curl_handler_pop3s = {
   PORT_POP3S,                       /* defport */
   CURLPROTO_POP3S,                  /* protocol */
   PROTOPT_CLOSEACTION | PROTOPT_SSL
-  | PROTOPT_NOURLQUERY | PROTOPT_URLOPTIONS /* flags */
+  | PROTOPT_NOURLQUERY              /* flags */
 };
 #endif
 
@@ -291,10 +292,10 @@ static bool pop3_endofresp(struct connectdata *conn, char *line, size_t len,
  *
  * Gets the authentication message from the response buffer.
  */
-static void pop3_get_message(char *buffer, char **outptr)
+static void pop3_get_message(char *buffer, char** outptr)
 {
   size_t len = 0;
-  char *message = NULL;
+  charmessage = NULL;
 
   /* Find the start of the message */
   for(message = buffer + 2; *message == ' ' || *message == '\t'; message++)
@@ -662,7 +663,7 @@ static CURLcode pop3_state_servergreet_resp(struct connectdata *conn,
 
   if(pop3code != '+') {
     failf(data, "Got unexpected pop3-server response");
-    result = CURLE_WEIRD_SERVER_REPLY;
+    result = CURLE_FTP_WEIRD_SERVER_REPLY;
   }
   else {
     /* Does the server support APOP authentication? */
@@ -800,7 +801,7 @@ static CURLcode pop3_state_starttls_resp(struct connectdata *conn,
 
   if(pop3code != '+') {
     if(data->set.use_ssl != CURLUSESSL_TRY) {
-      failf(data, "STARTTLS denied");
+      failf(data, "STARTTLS denied. %c", pop3code);
       result = CURLE_USE_SSL_FAILED;
     }
     else
@@ -1411,11 +1412,11 @@ static CURLcode pop3_parse_url_options(struct connectdata *conn)
     while(*ptr && *ptr != ';')
       ptr++;
 
-    if(strncasecompare(key, "AUTH=", 5)) {
+    if(strnequal(key, "AUTH=", 5)) {
       result = Curl_sasl_parse_url_auth_option(&pop3c->sasl,
                                                value, ptr - value);
 
-      if(result && strncasecompare(value, "+APOP", ptr - value)) {
+      if(result && strnequal(value, "+APOP", ptr - value)) {
         pop3c->preftype = POP3_TYPE_APOP;
         pop3c->sasl.prefmech = SASL_AUTH_NONE;
         result = CURLE_OK;
@@ -1573,7 +1574,7 @@ CURLcode Curl_pop3_write(struct connectdata *conn, char *str, size_t nread)
       if(prev) {
         /* If the partial match was the CRLF and dot then only write the CRLF
            as the server would have inserted the dot */
-        result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)POP3_EOB,
+        result = Curl_client_write(conn, CLIENTWRITE_BODY, (char*)POP3_EOB,
                                    strip_dot ? prev - 1 : prev);
 
         if(result)
index 60627b2..0f67ef2 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -249,26 +249,24 @@ long Curl_pgrsLimitWaitTime(curl_off_t cursize,
                             struct timeval start,
                             struct timeval now)
 {
-  curl_off_t size = cursize - startsize;
-  time_t minimum;
-  time_t actual;
+    curl_off_t size = cursize - startsize;
+    long minimum, actual;
 
-  /* we don't have a starting point yet -- return 0 so it gets (re)set */
-  if(start.tv_sec == 0 && start.tv_usec == 0)
-    return 0;
+    /* we don't have a starting point yet -- return 0 so it gets (re)set */
+    if(start.tv_sec == 0 && start.tv_usec == 0)
+        return 0;
 
-  /* not enough data yet */
-  if(size < limit)
-    return -1;
+    /* not enough data yet */
+    if(size < limit)
+      return -1;
 
-  minimum = (time_t) (CURL_OFF_T_C(1000) * size / limit);
-  actual = Curl_tvdiff(now, start);
+    minimum = (long) (CURL_OFF_T_C(1000) * size / limit);
+    actual = Curl_tvdiff(now, start);
 
-  if(actual < minimum)
-    /* this is a conversion on some systems (64bit time_t => 32bit long) */
-    return (long)(minimum - actual);
-  else
-    return 0;
+    if(actual < minimum)
+      return minimum - actual;
+    else
+      return 0;
 }
 
 void Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size)
@@ -361,7 +359,9 @@ int Curl_pgrsUpdate(struct connectdata *conn)
   now = Curl_tvnow(); /* what time is it */
 
   /* The time spent so far (from the start) */
-  data->progress.timespent = curlx_tvdiff_secs(now, data->progress.start);
+  data->progress.timespent =
+    (double)(now.tv_sec - data->progress.start.tv_sec) +
+    (double)(now.tv_usec - data->progress.start.tv_usec)/1000000.0;
   timespent = (curl_off_t)data->progress.timespent;
 
   /* The average download speed this far */
@@ -375,7 +375,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
      (data->progress.timespent>0?data->progress.timespent:1));
 
   /* Calculations done at most once a second, unless end is reached */
-  if(data->progress.lastshow != now.tv_sec) {
+  if(data->progress.lastshow != (long)now.tv_sec) {
     shownow = TRUE;
 
     data->progress.lastshow = now.tv_sec;
@@ -402,7 +402,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
 
     /* first of all, we don't do this if there's no counted seconds yet */
     if(countindex) {
-      time_t span_ms;
+      long span_ms;
 
       /* Get the index position to compare with the 'nowindex' position.
          Get the oldest entry possible. While we have less than CURR_TIME
diff --git a/lib/rand.c b/lib/rand.c
deleted file mode 100644 (file)
index 4da37b9..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#include <curl/curl.h>
-#include "vtls/vtls.h"
-#include "sendf.h"
-#include "rand.h"
-
-/* The last 3 #include files should be in this order */
-#include "curl_printf.h"
-#include "curl_memory.h"
-#include "memdebug.h"
-
-static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
-{
-  unsigned int r;
-  CURLcode result = CURLE_OK;
-  static unsigned int randseed;
-  static bool seeded = FALSE;
-
-#ifdef CURLDEBUG
-  char *force_entropy = getenv("CURL_ENTROPY");
-  if(force_entropy) {
-    if(!seeded) {
-      size_t elen = strlen(force_entropy);
-      size_t clen = sizeof(randseed);
-      size_t min = elen < clen ? elen : clen;
-      memcpy((char *)&randseed, force_entropy, min);
-      seeded = TRUE;
-    }
-    else
-      randseed++;
-    *rnd = randseed;
-    return CURLE_OK;
-  }
-#endif
-
-  /* data may be NULL! */
-  result = Curl_ssl_random(data, (unsigned char *)rnd, sizeof(*rnd));
-  if(result != CURLE_NOT_BUILT_IN)
-    /* only if there is no random funtion in the TLS backend do the non crypto
-       version, otherwise return result */
-    return result;
-
-  /* ---- non-cryptographic version following ---- */
-
-#ifdef RANDOM_FILE
-  if(!seeded) {
-    /* if there's a random file to read a seed from, use it */
-    int fd = open(RANDOM_FILE, O_RDONLY);
-    if(fd > -1) {
-      /* read random data into the randseed variable */
-      ssize_t nread = read(fd, &randseed, sizeof(randseed));
-      if(nread == sizeof(randseed))
-        seeded = TRUE;
-      close(fd);
-    }
-  }
-#endif
-
-  if(!seeded) {
-    struct timeval now = curlx_tvnow();
-    infof(data, "WARNING: Using weak random seed\n");
-    randseed += (unsigned int)now.tv_usec + (unsigned int)now.tv_sec;
-    randseed = randseed * 1103515245 + 12345;
-    randseed = randseed * 1103515245 + 12345;
-    randseed = randseed * 1103515245 + 12345;
-    seeded = TRUE;
-  }
-
-  /* Return an unsigned 32-bit pseudo-random number. */
-  r = randseed = randseed * 1103515245 + 12345;
-  *rnd = (r << 16) | ((r >> 16) & 0xFFFF);
-  return CURLE_OK;
-}
-
-/*
- * Curl_rand() stores 'num' number of random unsigned integers in the buffer
- * 'rndptr' points to.
- *
- * If libcurl is built without TLS support or with a TLS backend that lacks a
- * proper random API (Gskit, PolarSSL or mbedTLS), this function will use
- * "weak" random.
- *
- * When built *with* TLS support and a backend that offers strong random, it
- * will return error if it cannot provide strong random values.
- *
- * NOTE: 'data' may be passed in as NULL when coming from external API without
- * easy handle!
- *
- */
-
-CURLcode Curl_rand(struct Curl_easy *data, unsigned int *rndptr,
-                   unsigned int num)
-{
-  CURLcode result = CURLE_BAD_FUNCTION_ARGUMENT;
-  unsigned int i;
-
-  assert(num > 0);
-
-  for(i = 0; i < num; i++) {
-    result = randit(data, rndptr++);
-    if(result)
-      return result;
-  }
-  return result;
-}
diff --git a/lib/rand.h b/lib/rand.h
deleted file mode 100644 (file)
index 0f89861..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef HEADER_CURL_RAND_H
-#define HEADER_CURL_RAND_H
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-
-/*
- * Curl_rand() stores 'num' number of random unsigned integers in the buffer
- * 'rnd' points to.
- *
- * If libcurl is built without TLS support or with a TLS backend that lacks a
- * proper random API (Gskit, PolarSSL or mbedTLS), this function will use
- * "weak" random.
- *
- * When built *with* TLS support and a backend that offers strong random, it
- * will return error if it cannot provide strong random values.
- *
- * NOTE: 'data' may be passed in as NULL when coming from external API without
- * easy handle!
- *
- */
-CURLcode Curl_rand(struct Curl_easy *data, unsigned int *rnd,
-                   unsigned int num);
-
-#endif /* HEADER_CURL_RAND_H */
diff --git a/lib/rawstr.c b/lib/rawstr.c
new file mode 100644 (file)
index 0000000..5665ebd
--- /dev/null
@@ -0,0 +1,148 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  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 "curl_setup.h"
+
+#include "rawstr.h"
+
+/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
+   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';
+  case 'b':
+    return 'B';
+  case 'c':
+    return 'C';
+  case 'd':
+    return 'D';
+  case 'e':
+    return 'E';
+  case 'f':
+    return 'F';
+  case 'g':
+    return 'G';
+  case 'h':
+    return 'H';
+  case 'i':
+    return 'I';
+  case 'j':
+    return 'J';
+  case 'k':
+    return 'K';
+  case 'l':
+    return 'L';
+  case 'm':
+    return 'M';
+  case 'n':
+    return 'N';
+  case 'o':
+    return 'O';
+  case 'p':
+    return 'P';
+  case 'q':
+    return 'Q';
+  case 'r':
+    return 'R';
+  case 's':
+    return 'S';
+  case 't':
+    return 'T';
+  case 'u':
+    return 'U';
+  case 'v':
+    return 'V';
+  case 'w':
+    return 'W';
+  case 'x':
+    return 'X';
+  case 'y':
+    return 'Y';
+  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 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
+ * non-ascii.
+ */
+
+int Curl_raw_equal(const char *first, const char *second)
+{
+  while(*first && *second) {
+    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
+      /* get out of the loop as soon as they don't match */
+      break;
+    first++;
+    second++;
+  }
+  /* we do the comparison here (possibly again), just to make sure that if the
+     loop above is skipped because one of the strings reached zero, we must not
+     return this as a successful match */
+  return (Curl_raw_toupper(*first) == Curl_raw_toupper(*second));
+}
+
+int Curl_raw_nequal(const char *first, const char *second, size_t max)
+{
+  while(*first && *second && max) {
+    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second)) {
+      break;
+    }
+    max--;
+    first++;
+    second++;
+  }
+  if(0 == max)
+    return 1; /* they are equal this far */
+
+  return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
+}
+
+/* Copy an upper case version of the string from src to dest.  The
+ * strings may overlap.  No more than n characters of the string are copied
+ * (including any NUL) and the destination string will NOT be
+ * NUL-terminated if that limit is reached.
+ */
+void Curl_strntoupper(char *dest, const char *src, size_t n)
+{
+  if(n < 1)
+    return;
+
+  do {
+    *dest++ = Curl_raw_toupper(*src);
+  } while(*src++ && --n);
+}
diff --git a/lib/rawstr.h b/lib/rawstr.h
new file mode 100644 (file)
index 0000000..4af00f1
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef HEADER_CURL_RAWSTR_H
+#define HEADER_CURL_RAWSTR_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  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 <curl/curl.h>
+
+/*
+ * 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.
+ *
+ * The function is capable of comparing a-z case insensitively even for
+ * non-ascii.
+ */
+int Curl_raw_equal(const char *first, const char *second);
+int Curl_raw_nequal(const char *first, const char *second, size_t max);
+
+char Curl_raw_toupper(char in);
+
+/* checkprefix() is a shorter version of the above, used when the first
+   argument is zero-byte terminated */
+#define checkprefix(a,b)    Curl_raw_nequal(a,b,strlen(a))
+
+void Curl_strntoupper(char *dest, const char *src, size_t n);
+
+#endif /* HEADER_CURL_RAWSTR_H */
+
index 65c6c3b..ed3fd64 100644 (file)
 #include "url.h"
 #include "progress.h"
 #include "rtsp.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "select.h"
 #include "connect.h"
-#include "strdup.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
@@ -140,7 +139,7 @@ static CURLcode rtsp_setup_connection(struct connectdata *conn)
  * want to block the application forever while receiving a stream. Therefore,
  * we cannot assume that an RTSP socket is dead just because it is readable.
  *
- * Instead, if it is readable, run Curl_connalive() to peek at the socket
+ * Instead, if it is readable, run Curl_getconnectinfo() to peek at the socket
  * and distinguish between closed and data.
  */
 bool Curl_rtsp_connisdead(struct connectdata *check)
@@ -148,7 +147,7 @@ bool Curl_rtsp_connisdead(struct connectdata *check)
   int sval;
   bool ret_val = TRUE;
 
-  sval = SOCKET_READABLE(check->sock[FIRSTSOCKET], 0);
+  sval = Curl_socket_ready(check->sock[FIRSTSOCKET], CURL_SOCKET_BAD, 0);
   if(sval == 0) {
     /* timeout */
     ret_val = FALSE;
@@ -157,9 +156,12 @@ bool Curl_rtsp_connisdead(struct connectdata *check)
     /* socket is in an error state */
     ret_val = TRUE;
   }
-  else if(sval & CURL_CSELECT_IN) {
-    /* readable with no error. could still be closed */
-    ret_val = !Curl_connalive(check);
+  else if((sval & CURL_CSELECT_IN) && check->data) {
+    /* readable with no error. could be closed or could be alive but we can
+       only check if we have a proper Curl_easy for the connection */
+    curl_socket_t connectinfo = Curl_getconnectinfo(check->data, &check);
+    if(connectinfo != CURL_SOCKET_BAD)
+      ret_val = FALSE;
   }
 
   return ret_val;
@@ -486,7 +488,7 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
    * 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);
+  Curl_safefree (conn->allocptr.userpwd);
   conn->allocptr.userpwd = NULL;
 
   if(result)
@@ -612,9 +614,9 @@ static CURLcode rtsp_rtp_readwrite(struct Curl_easy *data,
 
   if(rtspc->rtp_buf) {
     /* There was some leftover data the last time. Merge buffers */
-    char *newptr = Curl_saferealloc(rtspc->rtp_buf,
-                                    rtspc->rtp_bufsize + *nread);
+    char *newptr = realloc(rtspc->rtp_buf, rtspc->rtp_bufsize + *nread);
     if(!newptr) {
+      Curl_safefree(rtspc->rtp_buf);
       rtspc->rtp_buf = NULL;
       rtspc->rtp_bufsize = 0;
       return CURLE_OUT_OF_MEMORY;
@@ -734,7 +736,7 @@ CURLcode rtp_client_write(struct connectdata *conn, char *ptr, size_t len)
   curl_write_callback writeit;
 
   if(len == 0) {
-    failf(data, "Cannot write a 0 size RTP packet.");
+    failf (data, "Cannot write a 0 size RTP packet.");
     return CURLE_WRITE_ERROR;
   }
 
@@ -742,12 +744,12 @@ CURLcode rtp_client_write(struct connectdata *conn, char *ptr, size_t len)
   wrote = writeit(ptr, 1, len, data->set.rtp_out);
 
   if(CURL_WRITEFUNC_PAUSE == wrote) {
-    failf(data, "Cannot pause RTP");
+    failf (data, "Cannot pause RTP");
     return CURLE_WRITE_ERROR;
   }
 
   if(wrote != len) {
-    failf(data, "Failed writing RTP data");
+    failf (data, "Failed writing RTP data");
     return CURLE_WRITE_ERROR;
   }
 
index f4a8763..a0bcaea 100644 (file)
@@ -60,9 +60,9 @@
 #include "curl_sec.h"
 #include "ftp.h"
 #include "sendf.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "warnless.h"
-#include "strdup.h"
+
 /* The last #include file should be: */
 #include "memdebug.h"
 
@@ -88,8 +88,7 @@ name_to_level(const char *name)
 
 /* Convert a protocol |level| to its char representation.
    We take an int to catch programming mistakes. */
-static char level_to_char(int level)
-{
+static char level_to_char(int level) {
   switch(level) {
   case PROT_CLEAR:
     return 'C';
@@ -123,7 +122,7 @@ static int ftp_send_command(struct connectdata *conn, const char *message, ...)
   vsnprintf(print_buffer, sizeof(print_buffer), message, args);
   va_end(args);
 
-  if(Curl_ftpsend(conn, print_buffer)) {
+  if(Curl_ftpsendf(conn, print_buffer)) {
     ftp_code = -1;
   }
   else {
@@ -193,18 +192,15 @@ static CURLcode read_data(struct connectdata *conn,
                           struct krb5buffer *buf)
 {
   int len;
-  void *tmp = NULL;
+  void* tmp;
   CURLcode result;
 
   result = socket_read(fd, &len, sizeof(len));
   if(result)
     return result;
 
-  if(len) {
-    /* only realloc if there was a length */
-    len = ntohl(len);
-    tmp = Curl_saferealloc(buf->data, len);
-  }
+  len = ntohl(len);
+  tmp = realloc(buf->data, len);
   if(tmp == NULL)
     return CURLE_OUT_OF_MEMORY;
 
@@ -223,7 +219,7 @@ buffer_read(struct krb5buffer *buf, void *data, size_t len)
 {
   if(buf->size - buf->index < len)
     len = buf->size - buf->index;
-  memcpy(data, (char *)buf->data + buf->index, len);
+  memcpy(data, (char*)buf->data + buf->index, len);
   buf->index += len;
   return len;
 }
@@ -292,7 +288,7 @@ static void do_sec_send(struct connectdata *conn, curl_socket_t fd,
       prot_level = conn->command_prot;
   }
   bytes = conn->mech->encode(conn->app_data, from, length, prot_level,
-                             (void **)&buffer);
+                             (void**)&buffer);
   if(!buffer || bytes <= 0)
     return; /* error */
 
@@ -367,10 +363,6 @@ int Curl_sec_read_msg(struct connectdata *conn, char *buffer,
   size_t decoded_sz = 0;
   CURLcode error;
 
-  if(!conn->mech)
-    /* not inititalized, return error */
-    return -1;
-
   DEBUGASSERT(level > PROT_NONE && level < PROT_LAST);
 
   error = Curl_base64_decode(buffer + 4, (unsigned char **)&buf, &decoded_sz);
@@ -416,7 +408,7 @@ int Curl_sec_read_msg(struct connectdata *conn, char *buffer,
 static int sec_set_protection_level(struct connectdata *conn)
 {
   int code;
-  char *pbsz;
+  charpbsz;
   static unsigned int buffer_size = 1 << 20; /* 1048576 */
   enum protection_level level = conn->request_data_prot;
 
index 03af645..abf55d8 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
 #include "warnless.h"
 
 /* Convenience local macros */
-#define ELAPSED_MS()  (int)curlx_tvdiff(curlx_tvnow(), initial_tv)
+
+#define elapsed_ms  (int)curlx_tvdiff(curlx_tvnow(), initial_tv)
 
 int Curl_ack_eintr = 0;
-#define ERROR_NOT_EINTR(error) (Curl_ack_eintr || error != EINTR)
+#define error_not_EINTR (Curl_ack_eintr || error != EINTR)
 
 /*
  * Internal function used for waiting a specific amount of ms
- * in Curl_socket_check() and Curl_poll() when no file descriptor
+ * in Curl_socket_ready() and Curl_poll() when no file descriptor
  * is provided to wait on, just being used to delay execution.
  * WinSock select() and poll() timeout mechanisms need a valid
  * socket descriptor in a not null file descriptor set to work.
@@ -108,9 +109,9 @@ int Curl_wait_ms(int timeout_ms)
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if(error && ERROR_NOT_EINTR(error))
+    if(error && error_not_EINTR)
       break;
-    pending_ms = timeout_ms - ELAPSED_MS();
+    pending_ms = timeout_ms - elapsed_ms;
     if(pending_ms <= 0) {
       r = 0;  /* Simulate a "call timed out" case */
       break;
@@ -145,7 +146,7 @@ int Curl_wait_ms(int timeout_ms)
 int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
                       curl_socket_t readfd1,
                       curl_socket_t writefd, /* socket to write to */
-                      time_t timeout_ms)     /* milliseconds to wait */
+                      long timeout_ms)       /* milliseconds to wait */
 {
 #ifdef HAVE_POLL_FINE
   struct pollfd pfd[3];
@@ -164,12 +165,6 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
   int r;
   int ret;
 
-#if SIZEOF_LONG != SIZEOF_INT
-  /* wrap-around precaution */
-  if(timeout_ms >= INT_MAX)
-    timeout_ms = INT_MAX;
-#endif
-
   if((readfd0 == CURL_SOCKET_BAD) && (readfd1 == CURL_SOCKET_BAD) &&
      (writefd == CURL_SOCKET_BAD)) {
     /* no sockets, just wait */
@@ -218,10 +213,10 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if(error && ERROR_NOT_EINTR(error))
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
-      pending_ms = (int)(timeout_ms - ELAPSED_MS());
+      pending_ms = (int)(timeout_ms - elapsed_ms);
       if(pending_ms <= 0) {
         r = 0;  /* Simulate a "call timed out" case */
         break;
@@ -333,10 +328,10 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if(error && ERROR_NOT_EINTR(error))
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
-      pending_ms = (int)(timeout_ms - ELAPSED_MS());
+      pending_ms = timeout_ms - elapsed_ms;
       if(pending_ms <= 0) {
         r = 0;  /* Simulate a "call timed out" case */
         break;
@@ -439,10 +434,10 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if(error && ERROR_NOT_EINTR(error))
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
-      pending_ms = (int)(timeout_ms - ELAPSED_MS());
+      pending_ms = timeout_ms - elapsed_ms;
       if(pending_ms <= 0) {
         r = 0;  /* Simulate a "call timed out" case */
         break;
@@ -526,10 +521,10 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if(error && ERROR_NOT_EINTR(error))
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
-      pending_ms = timeout_ms - ELAPSED_MS();
+      pending_ms = timeout_ms - elapsed_ms;
       if(pending_ms <= 0) {
         r = 0;  /* Simulate a "call timed out" case */
         break;
index e247bd9..695bb69 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 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
@@ -73,12 +73,11 @@ struct pollfd
 
 int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2,
                       curl_socket_t writefd,
-                      time_t timeout_ms);
+                      long timeout_ms);
 
-#define SOCKET_READABLE(x,z) \
-  Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, z)
-#define SOCKET_WRITABLE(x,z) \
-  Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, z)
+/* provide the former API internally */
+#define Curl_socket_ready(x,y,z) \
+  Curl_socket_check(x, CURL_SOCKET_BAD, y, z)
 
 int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);
 
index 7601697..2101797 100644 (file)
@@ -122,13 +122,6 @@ static size_t convert_lineends(struct Curl_easy *data,
 #endif /* CURL_DO_LINEEND_CONV */
 
 #ifdef USE_RECV_BEFORE_SEND_WORKAROUND
-bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex)
-{
-  struct postponed_data * const psnd = &(conn->postponed[sockindex]);
-  return psnd->buffer && psnd->allocated_size &&
-         psnd->recv_size > psnd->recv_processed;
-}
-
 static void pre_receive_plain(struct connectdata *conn, int num)
 {
   const curl_socket_t sockfd = conn->sock[num];
@@ -208,12 +201,6 @@ static ssize_t get_pre_recved(struct connectdata *conn, int num, char *buf,
 }
 #else  /* ! USE_RECV_BEFORE_SEND_WORKAROUND */
 /* Use "do-nothing" macros instead of functions when workaround not used */
-bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex)
-{
-  (void)conn;
-  (void)sockindex;
-  return false;
-}
 #define pre_receive_plain(c,n) do {} WHILE_FALSE
 #define get_pre_recved(c,n,b,l) 0
 #endif /* ! USE_RECV_BEFORE_SEND_WORKAROUND */
@@ -501,7 +488,7 @@ static CURLcode pausewrite(struct Curl_easy *data,
  */
 CURLcode Curl_client_chop_write(struct connectdata *conn,
                                 int type,
-                                char *ptr,
+                                char * ptr,
                                 size_t len)
 {
   struct Curl_easy *data = conn->data;
@@ -584,7 +571,7 @@ CURLcode Curl_client_chop_write(struct connectdata *conn,
         return pausewrite(data, CLIENTWRITE_HEADER, ptr, len);
 
       if(wrote != chunklen) {
-        failf(data, "Failed writing header");
+        failf (data, "Failed writing header");
         return CURLE_WRITE_ERROR;
       }
     }
@@ -705,7 +692,7 @@ CURLcode Curl_read(struct connectdata *conn, /* connection data */
     }
     /* If we come here, it means that there is no data to read from the buffer,
      * so we read from the socket */
-    bytesfromsocket = CURLMIN(sizerequested, BUFSIZE * sizeof(char));
+    bytesfromsocket = CURLMIN(sizerequested, BUFSIZE * sizeof (char));
     buffertofill = conn->master_buffer;
   }
   else {
@@ -809,7 +796,7 @@ int Curl_debug(struct Curl_easy *data, curl_infotype type,
     char buffer[160];
     const char *t=NULL;
     const char *w="Data";
-    switch(type) {
+    switch (type) {
     case CURLINFO_HEADER_IN:
       w = "Header";
       /* FALLTHROUGH */
index fbe4f99..a951a0b 100644 (file)
@@ -56,8 +56,6 @@ CURLcode Curl_client_chop_write(struct connectdata *conn, int type, char *ptr,
 CURLcode Curl_client_write(struct connectdata *conn, int type, char *ptr,
                            size_t len) WARN_UNUSED_RESULT;
 
-bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex);
-
 /* internal read-function, does plain socket only */
 CURLcode Curl_read_plain(curl_socket_t sockfd,
                          char *buf,
index a3c2a7b..e32b72f 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -41,18 +41,18 @@ typedef unsigned long   u_int32_t;
 #include <qsoasync.h>
 #include <gssapi.h>
 
-extern int Curl_getaddrinfo_a(const char *nodename,
-                              const char *servname,
-                              const struct addrinfo *hints,
-                              struct addrinfo **res);
+extern int      Curl_getaddrinfo_a(const char * nodename,
+                                   const char * servname,
+                                   const struct addrinfo * hints,
+                                   struct addrinfo * * res);
 #define getaddrinfo             Curl_getaddrinfo_a
 
 
-extern int Curl_getnameinfo_a(const struct sockaddr *sa,
-                              curl_socklen_t salen,
-                              char *nodename, curl_socklen_t nodenamelen,
-                              char *servname, curl_socklen_t servnamelen,
-                              int flags);
+extern int      Curl_getnameinfo_a(const struct sockaddr * sa,
+                                   curl_socklen_t salen,
+                                   char * nodename, curl_socklen_t nodenamelen,
+                                   char * servname, curl_socklen_t servnamelen,
+                                   int flags);
 #define getnameinfo             Curl_getnameinfo_a
 
 
@@ -79,7 +79,7 @@ extern int      Curl_gsk_secure_soc_init(gsk_handle my_session_handle);
 
 extern int      Curl_gsk_attribute_set_buffer_a(gsk_handle my_gsk_handle,
                                                 GSK_BUF_ID bufID,
-                                                const char *buffer,
+                                                const char * buffer,
                                                 int bufSize);
 #define gsk_attribute_set_buffer        Curl_gsk_attribute_set_buffer_a
 
@@ -95,29 +95,29 @@ extern int      Curl_gsk_attribute_set_numeric_value(gsk_handle my_gsk_handle,
 
 extern int      Curl_gsk_attribute_set_callback(gsk_handle my_gsk_handle,
                                                 GSK_CALLBACK_ID callBackID,
-                                                void *callBackAreaPtr);
+                                                void * callBackAreaPtr);
 #define gsk_attribute_set_callback      Curl_gsk_attribute_set_callback
 
 extern int      Curl_gsk_attribute_get_buffer_a(gsk_handle my_gsk_handle,
                                                 GSK_BUF_ID bufID,
-                                                const char **buffer,
-                                                int *bufSize);
+                                                const char * * buffer,
+                                                int * bufSize);
 #define gsk_attribute_get_buffer        Curl_gsk_attribute_get_buffer_a
 
 extern int      Curl_gsk_attribute_get_enum(gsk_handle my_gsk_handle,
                                             GSK_ENUM_ID enumID,
-                                            GSK_ENUM_VALUE *enumValue);
+                                            GSK_ENUM_VALUE * enumValue);
 #define gsk_attribute_get_enum  Curl_gsk_attribute_get_enum
 
 extern int      Curl_gsk_attribute_get_numeric_value(gsk_handle my_gsk_handle,
                                                      GSK_NUM_ID numID,
-                                                     int *numValue);
+                                                     int * numValue);
 #define gsk_attribute_get_numeric_value Curl_gsk_attribute_get_numeric_value
 
 extern int      Curl_gsk_attribute_get_cert_info(gsk_handle my_gsk_handle,
                                  GSK_CERT_ID certID,
-                                 const gsk_cert_data_elem **certDataElem,
-                                 int *certDataElementCount);
+                                 const gsk_cert_data_elem * * certDataElem,
+                                 int * certDataElementCount);
 #define gsk_attribute_get_cert_info     Curl_gsk_attribute_get_cert_info
 
 extern int      Curl_gsk_secure_soc_misc(gsk_handle my_session_handle,
@@ -125,13 +125,13 @@ extern int      Curl_gsk_secure_soc_misc(gsk_handle my_session_handle,
 #define gsk_secure_soc_misc     Curl_gsk_secure_soc_misc
 
 extern int      Curl_gsk_secure_soc_read(gsk_handle my_session_handle,
-                                         char *readBuffer,
-                                         int readBufSize, int *amtRead);
+                                         char * readBuffer,
+                                         int readBufSize, int * amtRead);
 #define gsk_secure_soc_read     Curl_gsk_secure_soc_read
 
 extern int      Curl_gsk_secure_soc_write(gsk_handle my_session_handle,
-                                          char *writeBuffer,
-                                          int writeBufSize, int *amtWritten);
+                                          char * writeBuffer,
+                                          int writeBufSize, int * amtWritten);
 #define gsk_secure_soc_write    Curl_gsk_secure_soc_write
 
 extern const char *     Curl_gsk_strerror_a(int gsk_return_value);
@@ -202,10 +202,10 @@ extern OM_uint32 Curl_gss_delete_sec_context_a(OM_uint32 * minor_status,
 
 extern int Curl_os400_connect(int sd, struct sockaddr * destaddr, int addrlen);
 extern int Curl_os400_bind(int sd, struct sockaddr * localaddr, int addrlen);
-extern int Curl_os400_sendto(int sd, char *buffer, int buflen, int flags,
-                             struct sockaddr * dstaddr, int addrlen);
-extern int Curl_os400_recvfrom(int sd, char *buffer, int buflen, int flags,
-                               struct sockaddr *fromaddr, int *addrlen);
+extern int Curl_os400_sendto(int sd, char * buffer, int buflen, int flags,
+            struct sockaddr * dstaddr, int addrlen);
+extern int Curl_os400_recvfrom(int sd, char * buffer, int buflen, int flags,
+                                struct sockaddr * fromaddr, int * addrlen);
 
 #define connect                 Curl_os400_connect
 #define bind                    Curl_os400_bind
index 6c454ae..4b78e0b 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -41,7 +41,7 @@
 #   endif
 #endif
 #include <stdlib.h>
-char *decc$getenv(const char *__name);
+    char * decc$getenv(const char * __name);
 #include <pwd.h>
 
 #include <string.h>
@@ -79,24 +79,23 @@ char *decc$getenv(const char *__name);
 #   if __INITIAL_POINTER_SIZE == 32
 /* Translate the path, but only if the path is a VMS file specification */
 /* The translation is usually only needed for older versions of VMS */
-static char *vms_translate_path(const char *path)
-{
-  char *unix_path;
-  char *test_str;
-
-  /* See if the result is in VMS format, if not, we are done */
-  /* Assume that this is a PATH, not just some data */
-  test_str = strpbrk(path, ":[<^");
-  if(test_str == NULL) {
-    return (char *)path;
-  }
-
-  unix_path = decc$translate_vms(path);
-
-  if((int)unix_path <= 0) {
-    /* We can not translate it, so return the original string */
-    return (char *)path;
-  }
+static char * vms_translate_path(const char * path) {
+char * unix_path;
+char * test_str;
+
+    /* See if the result is in VMS format, if not, we are done */
+    /* Assume that this is a PATH, not just some data */
+    test_str = strpbrk(path, ":[<^");
+    if(test_str == NULL) {
+      return (char *)path;
+    }
+
+    unix_path = decc$translate_vms(path);
+
+    if((int)unix_path <= 0) {
+      /* We can not translate it, so return the original string */
+      return (char *)path;
+    }
 }
 #   else
     /* VMS translate path is actually not needed on the current 64 bit */
@@ -112,74 +111,74 @@ static char *vms_translate_path(const char *path)
 #   endif
 #endif
 
-static char *vms_getenv(const char *envvar)
-{
-  char *result;
-  char *vms_path;
+static char * vms_getenv(const char * envvar) {
 
-  /* first use the DECC getenv() function */
-  result = decc$getenv(envvar);
-  if(result == NULL) {
-    return result;
-  }
+char * result;
+char * vms_path;
+
+    /* first use the DECC getenv() function */
+    result = decc$getenv(envvar);
+    if(result == NULL) {
+      return result;
+    }
 
-  vms_path = result;
-  result = vms_translate_path(vms_path);
+    vms_path = result;
+    result = vms_translate_path(vms_path);
 
-  /* note that if you backport this to use VAX C RTL, that the VAX C RTL */
-  /* may do a malloc(2048) for each call to getenv(), so you will need   */
-  /* to add a free(vms_path) */
-  /* Do not do a free() for DEC C RTL builds, which should be used for */
-  /* VMS 5.5-2 and later, even if using GCC */
+    /* note that if you backport this to use VAX C RTL, that the VAX C RTL */
+    /* may do a malloc(2048) for each call to getenv(), so you will need   */
+    /* to add a free(vms_path) */
+    /* Do not do a free() for DEC C RTL builds, which should be used for */
+    /* VMS 5.5-2 and later, even if using GCC */
 
-  return result;
+    return result;
 }
 
 
 static struct passwd vms_passwd_cache;
 
-static struct passwd * vms_getpwuid(uid_t uid)
-{
-  struct passwd * my_passwd;
+static struct passwd * vms_getpwuid(uid_t uid) {
+
+struct passwd * my_passwd;
 
 /* Hack needed to support 64 bit builds, decc_getpwnam is 32 bit only */
 #ifdef __DECC
 #   if __INITIAL_POINTER_SIZE
-  __char_ptr32 unix_path;
+__char_ptr32 unix_path;
 #   else
-  char *unix_path;
+char * unix_path;
 #   endif
 #else
-  char *unix_path;
+char * unix_path;
 #endif
 
-  my_passwd = decc_getpwuid(uid);
-  if(my_passwd == NULL) {
-    return my_passwd;
-  }
-
-  unix_path = vms_translate_path(my_passwd->pw_dir);
-
-  if((long)unix_path <= 0) {
-    /* We can not translate it, so return the original string */
-    return my_passwd;
-  }
-
-  /* If no changes needed just return it */
-  if(unix_path == my_passwd->pw_dir) {
-    return my_passwd;
-  }
-
-  /* Need to copy the structure returned */
-  /* Since curl is only using pw_dir, no need to fix up */
-  /* the pw_shell when running under Bash */
-  vms_passwd_cache.pw_name = my_passwd->pw_name;
-  vms_passwd_cache.pw_uid = my_passwd->pw_uid;
-  vms_passwd_cache.pw_gid = my_passwd->pw_uid;
-  vms_passwd_cache.pw_dir = unix_path;
-  vms_passwd_cache.pw_shell = my_passwd->pw_shell;
-
-  return &vms_passwd_cache;
+    my_passwd = decc_getpwuid(uid);
+    if(my_passwd == NULL) {
+      return my_passwd;
+    }
+
+    unix_path = vms_translate_path(my_passwd->pw_dir);
+
+    if((long)unix_path <= 0) {
+      /* We can not translate it, so return the original string */
+      return my_passwd;
+    }
+
+    /* If no changes needed just return it */
+    if(unix_path == my_passwd->pw_dir) {
+      return my_passwd;
+    }
+
+    /* Need to copy the structure returned */
+    /* Since curl is only using pw_dir, no need to fix up *
+    /* the pw_shell when running under Bash */
+    vms_passwd_cache.pw_name = my_passwd->pw_name;
+    vms_passwd_cache.pw_uid = my_passwd->pw_uid;
+    vms_passwd_cache.pw_gid = my_passwd->pw_uid;
+    vms_passwd_cache.pw_dir = unix_path;
+    vms_passwd_cache.pw_shell = my_passwd->pw_shell;
+
+    return &vms_passwd_cache;
 }
 
 #ifdef __DECC
index c039a16..e689ff2 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -54,8 +54,8 @@ struct Curl_share {
   long sessionage;
 };
 
-CURLSHcode Curl_share_lock(struct Curl_easy *, curl_lock_data,
-                           curl_lock_access);
-CURLSHcode Curl_share_unlock(struct Curl_easy *, curl_lock_data);
+CURLSHcode Curl_share_lock (struct Curl_easy *, curl_lock_data,
+                            curl_lock_access);
+CURLSHcode Curl_share_unlock (struct Curl_easy *, curl_lock_data);
 
 #endif /* HEADER_CURL_SHARE_H */
index acf31bc..56a38c2 100644 (file)
--- a/lib/smb.c
+++ b/lib/smb.c
@@ -6,7 +6,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2014, Bill Nagel <wnagel@tycoint.com>, Exacq Technologies
- * Copyright (C) 2016-2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -23,8 +23,8 @@
 
 #include "curl_setup.h"
 
-#if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) &&  \
-  (CURL_SIZEOF_CURL_OFF_T > 4)
+#if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \
+    (CURL_SIZEOF_CURL_OFF_T > 4)
 
 #if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)
 
 
 #ifdef HAVE_PROCESS_H
 #include <process.h>
-#ifdef CURL_WINDOWS_APP
-#define getpid GetCurrentProcessId
-#else
 #define getpid _getpid
 #endif
-#endif
 
 #include "smb.h"
 #include "urldata.h"
@@ -121,18 +117,18 @@ const struct Curl_handler Curl_handler_smbs = {
 #define SERVICENAME       "?????"
 
 /* Append a string to an SMB message */
-#define MSGCAT(str)                             \
-  strcpy(p, (str));                             \
+#define MSGCAT(str) \
+  strcpy(p, (str)); \
   p += strlen(str);
 
 /* Append a null-terminated string to an SMB message */
-#define MSGCATNULL(str)                         \
-  strcpy(p, (str));                             \
+#define MSGCATNULL(str) \
+  strcpy(p, (str)); \
   p += strlen(str) + 1;
 
 /* SMB is mostly little endian */
 #if (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
-  defined(__OS400__)
+   defined(__OS400__)
 static unsigned short smb_swap16(unsigned short x)
 {
   return (unsigned short) ((x << 8) | ((x >> 8) & 0xff));
@@ -141,20 +137,20 @@ static unsigned short smb_swap16(unsigned short x)
 static unsigned int smb_swap32(unsigned int x)
 {
   return (x << 24) | ((x << 8) & 0xff0000) | ((x >> 8) & 0xff00) |
-    ((x >> 24) & 0xff);
+         ((x >> 24) & 0xff);
 }
 
 #ifdef HAVE_LONGLONG
 static unsigned long long smb_swap64(unsigned long long x)
 {
   return ((unsigned long long) smb_swap32((unsigned int) x) << 32) |
-    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((unsigned int) x) << 32) |
-    smb_swap32((unsigned int) (x >> 32));
+          smb_swap32((unsigned int) (x >> 32));
 }
 #endif
 #else
@@ -201,7 +197,7 @@ static void conn_state(struct connectdata *conn, enum smb_conn_state newstate)
 
   if(smb->state != newstate)
     infof(conn->data, "SMB conn %p state change from %s to %s\n",
-          (void *)smb, names[smb->state], names[newstate]);
+    (void *)smb, names[smb->state], names[newstate]);
 #endif
 
   smb->state = newstate;
@@ -227,7 +223,7 @@ static void request_state(struct connectdata *conn,
 
   if(req->state != newstate)
     infof(conn->data, "SMB request %p state change from %s to %s\n",
-          (void *)req, names[req->state], names[newstate]);
+    (void *)req, names[req->state], names[newstate]);
 #endif
 
   req->state = newstate;
@@ -312,9 +308,8 @@ static CURLcode smb_recv_message(struct connectdata *conn, void **msg)
   if(smbc->got < sizeof(unsigned int))
     return CURLE_OK;
 
-  nbt_size = Curl_read16_be((const unsigned char *)
-                            (buf + sizeof(unsigned short))) +
-    sizeof(unsigned int);
+  nbt_size = Curl_read16_be((unsigned char *)(buf + sizeof(unsigned short))) +
+             sizeof(unsigned int);
   if(smbc->got < nbt_size)
     return CURLE_OK;
 
@@ -325,7 +320,7 @@ static CURLcode smb_recv_message(struct connectdata *conn, void **msg)
     if(nbt_size >= msg_size + sizeof(unsigned short)) {
       /* Add the byte count */
       msg_size += sizeof(unsigned short) +
-        Curl_read16_le((const unsigned char *)&buf[msg_size]);
+                  Curl_read16_le((unsigned char *)&buf[msg_size]);
       if(nbt_size < msg_size)
         return CURLE_READ_ERROR;
     }
@@ -608,7 +603,7 @@ static CURLcode smb_send_and_recv(struct connectdata *conn, void **msg)
   /* Check if there is data in the transfer buffer */
   if(!smbc->send_size && smbc->upload_size) {
     int nread = smbc->upload_size > BUFSIZE ? BUFSIZE :
-      (int) smbc->upload_size;
+                                              (int) smbc->upload_size;
     conn->data->req.upload_fromhere = conn->data->state.uploadbuffer;
     result = Curl_fillreadbuffer(conn, nread, &nread);
     if(result && result != CURLE_AGAIN)
@@ -678,7 +673,7 @@ static CURLcode smb_connection_state(struct connectdata *conn, bool *done)
 
   switch(smbc->state) {
   case SMB_NEGOTIATE:
-    if(h->status || smbc->got < sizeof(*nrsp) + sizeof(smbc->challenge) - 1) {
+    if(h->status) {
       connclose(conn, "SMB: negotiation failed");
       return CURLE_COULDNT_CONNECT;
     }
@@ -717,7 +712,6 @@ static CURLcode smb_request_state(struct connectdata *conn, bool *done)
 {
   struct smb_request *req = conn->data->req.protop;
   struct smb_header *h;
-  struct smb_conn *smbc = &conn->proto.smbc;
   enum smb_req_state next_state = SMB_DONE;
   unsigned short len;
   unsigned short off;
@@ -760,7 +754,7 @@ static CURLcode smb_request_state(struct connectdata *conn, bool *done)
     break;
 
   case SMB_OPEN:
-    if(h->status || smbc->got < sizeof(struct smb_nt_create_response)) {
+    if(h->status) {
       req->result = CURLE_REMOTE_FILE_NOT_FOUND;
       next_state = SMB_TREE_DISCONNECT;
       break;
@@ -781,16 +775,17 @@ static CURLcode smb_request_state(struct connectdata *conn, bool *done)
     break;
 
   case SMB_DOWNLOAD:
-    if(h->status || smbc->got < sizeof(struct smb_header) + 14) {
+    if(h->status) {
       req->result = CURLE_RECV_ERROR;
       next_state = SMB_CLOSE;
       break;
     }
-    len = Curl_read16_le(((const unsigned char *) msg) +
+    len = Curl_read16_le(((unsigned char *) msg) +
                          sizeof(struct smb_header) + 11);
-    off = Curl_read16_le(((const unsigned char *) msg) +
+    off = Curl_read16_le(((unsigned char *) msg) +
                          sizeof(struct smb_header) + 13);
     if(len > 0) {
+      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;
@@ -812,12 +807,12 @@ static CURLcode smb_request_state(struct connectdata *conn, bool *done)
     break;
 
   case SMB_UPLOAD:
-    if(h->status || smbc->got < sizeof(struct smb_header) + 6) {
+    if(h->status) {
       req->result = CURLE_UPLOAD_FAILED;
       next_state = SMB_CLOSE;
       break;
     }
-    len = Curl_read16_le(((const unsigned char *) msg) +
+    len = Curl_read16_le(((unsigned char *) msg) +
                          sizeof(struct smb_header) + 5);
     conn->data->req.bytecount += len;
     conn->data->req.offset += len;
index adc346a..d203b53 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "http.h" /* for HTTP proxy tunnel stuff */
 #include "socks.h"
 #include "smtp.h"
+
 #include "strtoofft.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "vtls/vtls.h"
 #include "connect.h"
 #include "strerror.h"
 #include "select.h"
 #include "multiif.h"
 #include "url.h"
+#include "rawstr.h"
 #include "curl_gethostname.h"
 #include "curl_sasl.h"
 #include "warnless.h"
@@ -103,7 +105,7 @@ static CURLcode smtp_parse_custom_request(struct connectdata *conn);
 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);
+static void smtp_get_message(char *buffer, char** outptr);
 
 /*
  * SMTP protocol handler.
@@ -126,8 +128,7 @@ const struct Curl_handler Curl_handler_smtp = {
   ZERO_NULL,                        /* readwrite */
   PORT_SMTP,                        /* defport */
   CURLPROTO_SMTP,                   /* protocol */
-  PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY | /* flags */
-  PROTOPT_URLOPTIONS
+  PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */
 };
 
 #ifdef USE_SSL
@@ -153,7 +154,7 @@ const struct Curl_handler Curl_handler_smtps = {
   PORT_SMTPS,                       /* defport */
   CURLPROTO_SMTPS,                  /* protocol */
   PROTOPT_CLOSEACTION | PROTOPT_SSL
-  | PROTOPT_NOURLQUERY | PROTOPT_URLOPTIONS /* flags */
+  | PROTOPT_NOURLQUERY              /* flags */
 };
 #endif
 
@@ -279,10 +280,10 @@ static bool smtp_endofresp(struct connectdata *conn, char *line, size_t len,
  *
  * Gets the authentication message from the response buffer.
  */
-static void smtp_get_message(char *buffer, char **outptr)
+static void smtp_get_message(char *buffer, char** outptr)
 {
   size_t len = 0;
-  char *message = NULL;
+  charmessage = NULL;
 
   /* Find the start of the message */
   for(message = buffer + 4; *message == ' ' || *message == '\t'; message++)
@@ -673,7 +674,7 @@ static CURLcode smtp_state_servergreet_resp(struct connectdata *conn,
 
   if(smtpcode/100 != 2) {
     failf(data, "Got unexpected smtp-server response: %d", smtpcode);
-    result = CURLE_WEIRD_SERVER_REPLY;
+    result = CURLE_FTP_WEIRD_SERVER_REPLY;
   }
   else
     result = smtp_perform_ehlo(conn);
@@ -693,7 +694,7 @@ static CURLcode smtp_state_starttls_resp(struct connectdata *conn,
 
   if(smtpcode != 220) {
     if(data->set.use_ssl != CURLUSESSL_TRY) {
-      failf(data, "STARTTLS denied, code %d", smtpcode);
+      failf(data, "STARTTLS denied. %c", smtpcode);
       result = CURLE_USE_SSL_FAILED;
     }
     else
@@ -1511,7 +1512,7 @@ static CURLcode smtp_parse_url_options(struct connectdata *conn)
     while(*ptr && *ptr != ';')
       ptr++;
 
-    if(strncasecompare(key, "AUTH=", 5))
+    if(strnequal(key, "AUTH=", 5))
       result = Curl_sasl_parse_url_auth_option(&smtpc->sasl,
                                                value, ptr - value);
     else
index 774fb20..1c01a0b 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "urldata.h"
 #include "sendf.h"
+#include "strequal.h"
 #include "select.h"
 #include "connect.h"
 #include "timeval.h"
@@ -57,7 +58,7 @@ int Curl_blockread_all(struct connectdata *conn, /* connection data */
   ssize_t nread;
   ssize_t allread = 0;
   int result;
-  time_t timeleft;
+  long timeleft;
   *n = 0;
   for(;;) {
     timeleft = Curl_timeleft(conn->data, NULL, TRUE);
@@ -66,7 +67,7 @@ int Curl_blockread_all(struct connectdata *conn, /* connection data */
       result = CURLE_OPERATION_TIMEDOUT;
       break;
     }
-    if(SOCKET_READABLE(sockfd, timeleft) <= 0) {
+    if(Curl_socket_ready(sockfd, CURL_SOCKET_BAD, timeleft) <= 0) {
       result = ~CURLE_OK;
       break;
     }
@@ -109,10 +110,9 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
                      const char *hostname,
                      int remote_port,
                      int sockindex,
-                     struct connectdata *conn)
+                     struct connectdata *conn,
+                     bool protocol4a)
 {
-  const bool protocol4a =
-    (conn->socks_proxy.proxytype == CURLPROXY_SOCKS4A) ? TRUE : FALSE;
 #define SOCKS4REQLEN 262
   unsigned char socksreq[SOCKS4REQLEN]; /* room for SOCKS4 request incl. user
                                            id */
@@ -127,10 +127,6 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
     return CURLE_OPERATION_TIMEDOUT;
   }
 
-  if(conn->bits.httpproxy)
-    infof(conn->data, "SOCKS4%s: connecting to HTTP proxy %s port %d\n",
-          protocol4a ? "a" : "", hostname, remote_port);
-
   (void)curlx_nonblock(sock, FALSE);
 
   infof(data, "SOCKS4 communication to %s:%d\n", hostname, remote_port);
@@ -179,11 +175,11 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
       if(hp->ai_family == AF_INET) {
         struct sockaddr_in *saddr_in;
 
-        saddr_in = (struct sockaddr_in *)(void *)hp->ai_addr;
-        socksreq[4] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[0];
-        socksreq[5] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[1];
-        socksreq[6] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[2];
-        socksreq[7] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[3];
+        saddr_in = (struct sockaddr_in*)(void*)hp->ai_addr;
+        socksreq[4] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[0];
+        socksreq[5] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[1];
+        socksreq[6] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[2];
+        socksreq[7] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[3];
 
         infof(data, "SOCKS4 connect to IPv4 %s (locally resolved)\n", buf);
       }
@@ -224,7 +220,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
     ssize_t written;
     ssize_t hostnamelen = 0;
     int packetsize = 9 +
-      (int)strlen((char *)socksreq + 8); /* size including NUL */
+      (int)strlen((char*)socksreq + 8); /* size including NUL */
 
     /* If SOCKS4a, set special invalid IP address 0.0.0.x */
     if(protocol4a) {
@@ -235,7 +231,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
       /* If still enough room in buffer, also append hostname */
       hostnamelen = (ssize_t)strlen(hostname) + 1; /* length including NUL */
       if(packetsize + hostnamelen <= SOCKS4REQLEN)
-        strcpy((char *)socksreq + packetsize, hostname);
+        strcpy((char*)socksreq + packetsize, hostname);
       else
         hostnamelen = 0; /* Flag: hostname did not fit in buffer */
     }
@@ -381,16 +377,11 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
   CURLcode code;
   curl_socket_t sock = conn->sock[sockindex];
   struct Curl_easy *data = conn->data;
-  time_t timeout;
-  bool socks5_resolve_local =
-    (conn->socks_proxy.proxytype == CURLPROXY_SOCKS5) ? TRUE : FALSE;
+  long timeout;
+  bool socks5_resolve_local = (conn->proxytype == CURLPROXY_SOCKS5)?TRUE:FALSE;
   const size_t hostname_len = strlen(hostname);
   ssize_t len = 0;
 
-  if(conn->bits.httpproxy)
-    infof(conn->data, "SOCKS5: connecting to HTTP proxy %s port %d\n",
-          hostname, remote_port);
-
   /* 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 "
@@ -410,7 +401,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
   (void)curlx_nonblock(sock, TRUE);
 
   /* wait until socket gets connected */
-  result = SOCKET_WRITABLE(sock, timeout);
+  result = Curl_socket_ready(CURL_SOCKET_BAD, sock, timeout);
 
   if(-1 == result) {
     failf(conn->data, "SOCKS5: no connection here");
@@ -451,7 +442,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
 
   (void)curlx_nonblock(sock, TRUE);
 
-  result = SOCKET_READABLE(sock, timeout);
+  result = Curl_socket_ready(sock, CURL_SOCKET_BAD, timeout);
 
   if(-1 == result) {
     failf(conn->data, "SOCKS5 nothing to read");
@@ -615,9 +606,9 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
         struct sockaddr_in *saddr_in;
         socksreq[len++] = 1; /* ATYP: IPv4 = 1 */
 
-        saddr_in = (struct sockaddr_in *)(void *)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];
+          socksreq[len++] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[i];
         }
 
         infof(data, "SOCKS5 connect to IPv4 %s (locally resolved)\n", buf);
@@ -627,10 +618,9 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
         struct sockaddr_in6 *saddr_in6;
         socksreq[len++] = 4; /* ATYP: IPv6 = 4 */
 
-        saddr_in6 = (struct sockaddr_in6 *)(void *)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];
+          socksreq[len++] = ((unsigned char*)&saddr_in6->sin6_addr.s6_addr)[i];
         }
 
         infof(data, "SOCKS5 connect to IPv6 %s (locally resolved)\n", buf);
index 348707e..a44ada6 100644 (file)
@@ -25,7 +25,7 @@
 #include "curl_setup.h"
 
 #ifdef CURL_DISABLE_PROXY
-#define Curl_SOCKS4(a,b,c,d,e) CURLE_NOT_BUILT_IN
+#define Curl_SOCKS4(a,b,c,d,e,f) CURLE_NOT_BUILT_IN
 #define Curl_SOCKS5(a,b,c,d,e,f) CURLE_NOT_BUILT_IN
 #else
 /*
@@ -49,7 +49,8 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
                      const char *hostname,
                      int remote_port,
                      int sockindex,
-                     struct connectdata *conn);
+                     struct connectdata *conn,
+                     bool protocol4a);
 
 /*
  * This function logs in to a SOCKS5 proxy and sends the specifics to the
index 54d0635..369245a 100644 (file)
@@ -46,7 +46,7 @@ static gss_ctx_id_t gss_context = GSS_C_NO_CONTEXT;
 static int check_gss_err(struct Curl_easy *data,
                          OM_uint32 major_status,
                          OM_uint32 minor_status,
-                         const char *function)
+                         const charfunction)
 {
   if(GSS_ERROR(major_status)) {
     OM_uint32 maj_stat, min_stat;
@@ -65,7 +65,7 @@ static int check_gss_err(struct Curl_easy *data,
                                     &msg_ctx, &status_string);
       if(maj_stat == GSS_S_COMPLETE) {
         if(sizeof(buf) > len + status_string.length + 1) {
-          strcpy(buf+len, (char *) status_string.value);
+          strcpy(buf+len, (char*) status_string.value);
           len += status_string.length;
         }
         gss_release_buffer(&min_stat, &status_string);
@@ -86,7 +86,7 @@ static int check_gss_err(struct Curl_easy *data,
                                     &msg_ctx, &status_string);
       if(maj_stat == GSS_S_COMPLETE) {
         if(sizeof(buf) > len + status_string.length)
-          strcpy(buf+len, (char *) status_string.value);
+          strcpy(buf+len, (char*) status_string.value);
         gss_release_buffer(&min_stat, &status_string);
         break;
       }
@@ -123,7 +123,6 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
   unsigned char socksreq[4]; /* room for GSS-API exchange header only */
   const char *serviceptr = data->set.str[STRING_PROXY_SERVICE_NAME] ?
                            data->set.str[STRING_PROXY_SERVICE_NAME] : "rcmd";
-  const size_t serviceptr_length = strlen(serviceptr);
 
   /*   GSS-API request looks like
    * +----+------+-----+----------------+
@@ -135,23 +134,22 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
 
   /* prepare service name */
   if(strchr(serviceptr, '/')) {
-    service.length = serviceptr_length;
-    service.value = malloc(service.length);
+    service.value = malloc(strlen(serviceptr));
     if(!service.value)
       return CURLE_OUT_OF_MEMORY;
+    service.length = strlen(serviceptr);
     memcpy(service.value, serviceptr, service.length);
 
     gss_major_status = gss_import_name(&gss_minor_status, &service,
                                        (gss_OID) GSS_C_NULL_OID, &server);
   }
   else {
-    service.value = malloc(serviceptr_length +
-                           strlen(conn->socks_proxy.host.name)+2);
+    service.value = malloc(strlen(serviceptr) +strlen(conn->proxy.name)+2);
     if(!service.value)
       return CURLE_OUT_OF_MEMORY;
-    service.length = serviceptr_length + strlen(conn->socks_proxy.host.name)+1;
+    service.length = strlen(serviceptr) +strlen(conn->proxy.name)+1;
     snprintf(service.value, service.length+1, "%s@%s",
-             serviceptr, conn->socks_proxy.host.name);
+             serviceptr, conn->proxy.name);
 
     gss_major_status = gss_import_name(&gss_minor_status, &service,
                                        GSS_C_NT_HOSTBASED_SERVICE, &server);
@@ -292,9 +290,9 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
   gss_release_name(&gss_status, &server);
 
   /* Everything is good so far, user was authenticated! */
-  gss_major_status = gss_inquire_context(&gss_minor_status, gss_context,
-                                         &gss_client_name, NULL, NULL, NULL,
-                                         NULL, NULL, NULL);
+  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")) {
     gss_delete_sec_context(&gss_status, &gss_context, NULL);
index edc73ad..6053490 100644 (file)
@@ -45,7 +45,7 @@
  */
 static int check_sspi_err(struct connectdata *conn,
                           SECURITY_STATUS status,
-                          const char *function)
+                          const charfunction)
 {
   if(status != SEC_E_OK &&
      status != SEC_I_COMPLETE_AND_CONTINUE &&
@@ -86,7 +86,6 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
   unsigned char socksreq[4]; /* room for GSS-API exchange header only */
   const char *service = data->set.str[STRING_PROXY_SERVICE_NAME] ?
                         data->set.str[STRING_PROXY_SERVICE_NAME]  : "rcmd";
-  const size_t service_length = strlen(service);
 
   /*   GSS-API request looks like
    * +----+------+-----+----------------+
@@ -103,13 +102,11 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       return CURLE_OUT_OF_MEMORY;
   }
   else {
-    service_name = malloc(service_length +
-                          strlen(conn->socks_proxy.host.name) + 2);
+    service_name = malloc(strlen(service) + strlen(conn->proxy.name) + 2);
     if(!service_name)
       return CURLE_OUT_OF_MEMORY;
-    snprintf(service_name, service_length +
-             strlen(conn->socks_proxy.host.name)+2, "%s/%s",
-             service, conn->socks_proxy.host.name);
+    snprintf(service_name, strlen(service) +strlen(conn->proxy.name)+2,
+             "%s/%s", service, conn->proxy.name);
   }
 
   input_desc.cBuffers = 1;
index bc15d97..13c34af 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -40,8 +40,8 @@ CURLcode Curl_speedcheck(struct Curl_easy *data,
      data->set.low_speed_time &&
      (Curl_tvlong(data->state.keeps_speed) != 0) &&
      (data->progress.current_speed < data->set.low_speed_limit)) {
-    time_t howlong = Curl_tvdiff(now, data->state.keeps_speed);
-    time_t nextcheck = (data->set.low_speed_time * 1000) - howlong;
+    long howlong = Curl_tvdiff(now, data->state.keeps_speed);
+    long nextcheck = (data->set.low_speed_time * 1000) - howlong;
 
     /* We are now below the "low speed limit". If we are below it
        for "low speed time" seconds we consider that enough reason
index 086d40e..e361df3 100644 (file)
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -71,8 +71,8 @@
 #include "url.h"
 #include "speedcheck.h"
 #include "getinfo.h"
-#include "strdup.h"
-#include "strcase.h"
+
+#include "strequal.h"
 #include "vtls/vtls.h"
 #include "connect.h"
 #include "strerror.h"
@@ -239,7 +239,7 @@ kbd_callback(const char *name, int name_len, const char *instruction,
 
 static CURLcode sftp_libssh2_error_to_CURLE(int err)
 {
-  switch(err) {
+  switch (err) {
     case LIBSSH2_FX_OK:
       return CURLE_OK;
 
@@ -271,7 +271,7 @@ static CURLcode sftp_libssh2_error_to_CURLE(int err)
 
 static CURLcode libssh2_session_error_to_CURLE(int err)
 {
-  switch(err) {
+  switch (err) {
     /* Ordered by order of appearance in libssh2.h */
     case LIBSSH2_ERROR_NONE:
       return CURLE_OK;
@@ -416,12 +416,12 @@ static CURLcode ssh_getworkingpath(struct connectdata *conn,
   struct Curl_easy *data = conn->data;
   char *real_path = NULL;
   char *working_path;
-  size_t working_path_len;
-  CURLcode result =
-    Curl_urldecode(data, data->state.path, 0, &working_path,
-                   &working_path_len, FALSE);
-  if(result)
-    return result;
+  int working_path_len;
+
+  working_path = curl_easy_unescape(data, data->state.path, 0,
+                                    &working_path_len);
+  if(!working_path)
+    return CURLE_OUT_OF_MEMORY;
 
   /* Check for /~/, indicating relative to the user's home directory */
   if(conn->handler->protocol & CURLPROTO_SCP) {
@@ -676,7 +676,7 @@ static CURLcode ssh_check_fingerprint(struct connectdata *conn)
    * against a known fingerprint, if available.
    */
   if(pubkey_md5 && strlen(pubkey_md5) == 32) {
-    if(!fingerprint || !strcasecompare(md5buffer, pubkey_md5)) {
+    if(!fingerprint || !strequal(md5buffer, pubkey_md5)) {
       if(fingerprint)
         failf(data,
             "Denied establishing ssh session: mismatch md5 fingerprint. "
@@ -782,14 +782,14 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           state(conn, SSH_AUTH_DONE);
           break;
         }
+        else if((err = libssh2_session_last_errno(sshc->ssh_session)) ==
+           LIBSSH2_ERROR_EAGAIN) {
+          rc = LIBSSH2_ERROR_EAGAIN;
+          break;
+        }
         else {
-          err = libssh2_session_last_errno(sshc->ssh_session);
-          if(err == LIBSSH2_ERROR_EAGAIN)
-            rc = LIBSSH2_ERROR_EAGAIN;
-          else {
-            state(conn, SSH_SESSION_FREE);
-            sshc->actualcode = libssh2_session_error_to_CURLE(err);
-          }
+          state(conn, SSH_SESSION_FREE);
+          sshc->actualcode = libssh2_session_error_to_CURLE(err);
           break;
         }
       }
@@ -874,7 +874,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           break;
         }
 
-        sshc->passphrase = data->set.ssl.key_passwd;
+        sshc->passphrase = data->set.str[STRING_KEY_PASSWD];
         if(!sshc->passphrase)
           sshc->passphrase = "";
 
@@ -918,7 +918,6 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
                                          &err_msg, NULL, 0);
         infof(data, "SSH public key authentication failed: %s\n", err_msg);
         state(conn, SSH_AUTH_PASS_INIT);
-        rc = 0; /* clear rc and continue */
       }
       break;
 
@@ -929,7 +928,6 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
       }
       else {
         state(conn, SSH_AUTH_HOST_INIT);
-        rc = 0; /* clear rc and continue */
       }
       break;
 
@@ -991,7 +989,6 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
         if(rc < 0) {
           infof(data, "Failure connecting to agent\n");
           state(conn, SSH_AUTH_KEY_INIT);
-          rc = 0; /* clear rc and continue */
         }
         else {
           state(conn, SSH_AUTH_AGENT_LIST);
@@ -1011,7 +1008,6 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
       if(rc < 0) {
         infof(data, "Failure requesting identities to agent\n");
         state(conn, SSH_AUTH_KEY_INIT);
-        rc = 0; /* clear rc and continue */
       }
       else {
         state(conn, SSH_AUTH_AGENT);
@@ -1237,7 +1233,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
         sshc->acceptfail = TRUE;
       }
 
-      if(strcasecompare("pwd", cmd)) {
+      if(curl_strequal("pwd", cmd)) {
         /* output debug output if that is requested */
         char *tmp = aprintf("257 \"%s\" is current directory.\n",
                             sftp_scp->path);
@@ -1301,9 +1297,9 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
          * OpenSSH's sftp program and call the appropriate libssh2
          * functions.
          */
-        if(strncasecompare(cmd, "chgrp ", 6) ||
-           strncasecompare(cmd, "chmod ", 6) ||
-           strncasecompare(cmd, "chown ", 6) ) {
+        if(curl_strnequal(cmd, "chgrp ", 6) ||
+           curl_strnequal(cmd, "chmod ", 6) ||
+           curl_strnequal(cmd, "chown ", 6) ) {
           /* attribute change */
 
           /* sshc->quote_path1 contains the mode to set */
@@ -1325,8 +1321,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           state(conn, SSH_SFTP_QUOTE_STAT);
           break;
         }
-        else if(strncasecompare(cmd, "ln ", 3) ||
-                strncasecompare(cmd, "symlink ", 8)) {
+        else if(curl_strnequal(cmd, "ln ", 3) ||
+                curl_strnequal(cmd, "symlink ", 8)) {
           /* symbolic linking */
           /* sshc->quote_path1 is the source */
           /* get the destination */
@@ -1346,12 +1342,12 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           state(conn, SSH_SFTP_QUOTE_SYMLINK);
           break;
         }
-        else if(strncasecompare(cmd, "mkdir ", 6)) {
+        else if(curl_strnequal(cmd, "mkdir ", 6)) {
           /* create dir */
           state(conn, SSH_SFTP_QUOTE_MKDIR);
           break;
         }
-        else if(strncasecompare(cmd, "rename ", 7)) {
+        else if(curl_strnequal(cmd, "rename ", 7)) {
           /* rename file */
           /* first param is the source path */
           /* second param is the dest. path */
@@ -1370,17 +1366,17 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           state(conn, SSH_SFTP_QUOTE_RENAME);
           break;
         }
-        else if(strncasecompare(cmd, "rmdir ", 6)) {
+        else if(curl_strnequal(cmd, "rmdir ", 6)) {
           /* delete dir */
           state(conn, SSH_SFTP_QUOTE_RMDIR);
           break;
         }
-        else if(strncasecompare(cmd, "rm ", 3)) {
+        else if(curl_strnequal(cmd, "rm ", 3)) {
           state(conn, SSH_SFTP_QUOTE_UNLINK);
           break;
         }
 #ifdef HAS_STATVFS_SUPPORT
-        else if(strncasecompare(cmd, "statvfs ", 8)) {
+        else if(curl_strnequal(cmd, "statvfs ", 8)) {
           state(conn, SSH_SFTP_QUOTE_STATVFS);
           break;
         }
@@ -1435,7 +1431,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
         sshc->acceptfail = TRUE;
       }
 
-      if(!strncasecompare(cmd, "chmod", 5)) {
+      if(!curl_strnequal(cmd, "chmod", 5)) {
         /* Since chown and chgrp only set owner OR group but libssh2 wants to
          * set them both at once, we need to obtain the current ownership
          * first.  This takes an extra protocol round trip.
@@ -1461,7 +1457,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
       }
 
       /* Now set the new attributes... */
-      if(strncasecompare(cmd, "chgrp", 5)) {
+      if(curl_strnequal(cmd, "chgrp", 5)) {
         sshc->quote_attrs.gid = strtoul(sshc->quote_path1, NULL, 10);
         sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_UIDGID;
         if(sshc->quote_attrs.gid == 0 && !ISDIGIT(sshc->quote_path1[0]) &&
@@ -1475,7 +1471,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           break;
         }
       }
-      else if(strncasecompare(cmd, "chmod", 5)) {
+      else if(curl_strnequal(cmd, "chmod", 5)) {
         sshc->quote_attrs.permissions = strtoul(sshc->quote_path1, NULL, 8);
         sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_PERMISSIONS;
         /* permissions are octal */
@@ -1490,7 +1486,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           break;
         }
       }
-      else if(strncasecompare(cmd, "chown", 5)) {
+      else if(curl_strnequal(cmd, "chown", 5)) {
         sshc->quote_attrs.uid = strtoul(sshc->quote_path1, NULL, 10);
         sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_UIDGID;
         if(sshc->quote_attrs.uid == 0 && !ISDIGIT(sshc->quote_path1[0]) &&
@@ -1804,7 +1800,6 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
                   (data->set.ftp_create_missing_dirs &&
                    (strlen(sftp_scp->path) > 1))) {
             /* try to create the path remotely */
-            rc = 0; /* clear rc and continue */
             sshc->secondCreateDirs = 1;
             state(conn, SSH_SFTP_CREATE_DIRS_INIT);
             break;
@@ -1941,7 +1936,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
       }
       *sshc->slash_pos = '/';
       ++sshc->slash_pos;
-      if(rc < 0) {
+      if(rc == -1) {
         /*
          * Abort if failure wasn't that the dir already exists or the
          * permission was denied (creation might succeed further down the
@@ -1956,9 +1951,6 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           sshc->actualcode = result?result:CURLE_SSH;
           break;
         }
-        else {
-          rc = 0; /* clear rc and continue */
-        }
       }
       state(conn, SSH_SFTP_CREATE_DIRS);
       break;
@@ -1995,14 +1987,12 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           break;
         }
       }
-      sshc->readdir_filename = malloc(PATH_MAX+1);
-      if(!sshc->readdir_filename) {
+      if((sshc->readdir_filename = malloc(PATH_MAX+1)) == NULL) {
         state(conn, SSH_SFTP_CLOSE);
         sshc->actualcode = CURLE_OUT_OF_MEMORY;
         break;
       }
-      sshc->readdir_longentry = malloc(PATH_MAX+1);
-      if(!sshc->readdir_longentry) {
+      if((sshc->readdir_longentry = malloc(PATH_MAX+1)) == NULL) {
         Curl_safefree(sshc->readdir_filename);
         state(conn, SSH_SFTP_CLOSE);
         sshc->actualcode = CURLE_OUT_OF_MEMORY;
@@ -2122,10 +2112,9 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
 
       /* get room for the filename and extra output */
       sshc->readdir_totalLen += 4 + sshc->readdir_len;
-      new_readdir_line = Curl_saferealloc(sshc->readdir_line,
-                                          sshc->readdir_totalLen);
+      new_readdir_line = realloc(sshc->readdir_line, sshc->readdir_totalLen);
       if(!new_readdir_line) {
-        sshc->readdir_line = NULL;
+        Curl_safefree(sshc->readdir_line);
         Curl_safefree(sshc->readdir_filename);
         Curl_safefree(sshc->readdir_longentry);
         state(conn, SSH_SFTP_CLOSE);
@@ -2662,7 +2651,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
         else if(rc < 0) {
           infof(data, "Failed to disconnect from libssh2 agent\n");
         }
-        libssh2_agent_free(sshc->ssh_agent);
+        libssh2_agent_free (sshc->ssh_agent);
         sshc->ssh_agent = NULL;
 
         /* NB: there is no need to free identities, they are part of internal
@@ -2799,16 +2788,13 @@ static int ssh_getsock(struct connectdata *conn,
 static void ssh_block2waitfor(struct connectdata *conn, bool block)
 {
   struct ssh_conn *sshc = &conn->proto.sshc;
-  int dir = 0;
-  if(block) {
-    dir = libssh2_session_block_directions(sshc->ssh_session);
-    if(dir) {
-      /* translate the libssh2 define bits into our own bit defines */
-      conn->waitfor = ((dir&LIBSSH2_SESSION_BLOCK_INBOUND)?KEEP_RECV:0) |
-        ((dir&LIBSSH2_SESSION_BLOCK_OUTBOUND)?KEEP_SEND:0);
-    }
+  int dir;
+  if(block && (dir = libssh2_session_block_directions(sshc->ssh_session))) {
+    /* translate the libssh2 define bits into our own bit defines */
+    conn->waitfor = ((dir&LIBSSH2_SESSION_BLOCK_INBOUND)?KEEP_RECV:0) |
+      ((dir&LIBSSH2_SESSION_BLOCK_OUTBOUND)?KEEP_SEND:0);
   }
-  if(!dir)
+  else
     /* It didn't block or libssh2 didn't reveal in which direction, put back
        the original set */
     conn->waitfor = sshc->orig_waitfor;
@@ -2874,8 +2860,8 @@ static CURLcode ssh_block_statemach(struct connectdata *conn,
       if(LIBSSH2_SESSION_BLOCK_OUTBOUND & dir)
         fd_write = sock;
       /* wait for the socket to become ready */
-      (void)Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write,
-                              left>1000?1000:left); /* ignore result */
+      Curl_socket_ready(fd_read, fd_write,
+                        left>1000?1000:left); /* ignore result */
     }
 #endif
 
@@ -3397,7 +3383,7 @@ get_pathname(const char **cpp, char **path)
 
 static const char *sftp_libssh2_strerror(int err)
 {
-  switch(err) {
+  switch (err) {
     case LIBSSH2_FX_NO_SUCH_FILE:
       return "No such file or directory";
 
diff --git a/lib/strcase.c b/lib/strcase.c
deleted file mode 100644 (file)
index a750f7b..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "strcase.h"
-
-/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
-   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';
-  case 'b':
-    return 'B';
-  case 'c':
-    return 'C';
-  case 'd':
-    return 'D';
-  case 'e':
-    return 'E';
-  case 'f':
-    return 'F';
-  case 'g':
-    return 'G';
-  case 'h':
-    return 'H';
-  case 'i':
-    return 'I';
-  case 'j':
-    return 'J';
-  case 'k':
-    return 'K';
-  case 'l':
-    return 'L';
-  case 'm':
-    return 'M';
-  case 'n':
-    return 'N';
-  case 'o':
-    return 'O';
-  case 'p':
-    return 'P';
-  case 'q':
-    return 'Q';
-  case 'r':
-    return 'R';
-  case 's':
-    return 'S';
-  case 't':
-    return 'T';
-  case 'u':
-    return 'U';
-  case 'v':
-    return 'V';
-  case 'w':
-    return 'W';
-  case 'x':
-    return 'X';
-  case 'y':
-    return 'Y';
-  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 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
- * non-ascii.
- *
- * @unittest: 1301
- */
-
-int Curl_strcasecompare(const char *first, const char *second)
-{
-  while(*first && *second) {
-    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
-      /* get out of the loop as soon as they don't match */
-      break;
-    first++;
-    second++;
-  }
-  /* we do the comparison here (possibly again), just to make sure that if the
-     loop above is skipped because one of the strings reached zero, we must not
-     return this as a successful match */
-  return (Curl_raw_toupper(*first) == Curl_raw_toupper(*second));
-}
-
-int Curl_safe_strcasecompare(const char *first, const char *second)
-{
-  if(first && second)
-    /* both pointers point to something then compare them */
-    return Curl_strcasecompare(first, second);
-  else
-    /* if both pointers are NULL then treat them as equal */
-    return (NULL == first && NULL == second);
-}
-
-/*
- * @unittest: 1301
- */
-int Curl_strncasecompare(const char *first, const char *second, size_t max)
-{
-  while(*first && *second && max) {
-    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second)) {
-      break;
-    }
-    max--;
-    first++;
-    second++;
-  }
-  if(0 == max)
-    return 1; /* they are equal this far */
-
-  return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
-}
-
-/* Copy an upper case version of the string from src to dest.  The
- * strings may overlap.  No more than n characters of the string are copied
- * (including any NUL) and the destination string will NOT be
- * NUL-terminated if that limit is reached.
- */
-void Curl_strntoupper(char *dest, const char *src, size_t n)
-{
-  if(n < 1)
-    return;
-
-  do {
-    *dest++ = Curl_raw_toupper(*src);
-  } while(*src++ && --n);
-}
-
-/* --- public functions --- */
-
-int curl_strequal(const char *first, const char *second)
-{
-  return Curl_strcasecompare(first, second);
-}
-int curl_strnequal(const char *first, const char *second, size_t max)
-{
-  return Curl_strncasecompare(first, second, max);
-}
diff --git a/lib/strcase.h b/lib/strcase.h
deleted file mode 100644 (file)
index ea2abc8..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef HEADER_CURL_STRCASE_H
-#define HEADER_CURL_STRCASE_H
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-
-#include <curl/curl.h>
-
-/*
- * Only "raw" case insensitive strings. This is meant to be locale independent
- * and only compare strings we know are safe for this.
- *
- * The function is capable of comparing a-z case insensitively even for
- * non-ascii.
- */
-
-#define strcasecompare(a,b) Curl_strcasecompare(a,b)
-#define strncasecompare(a,b,c) Curl_strncasecompare(a,b,c)
-
-int Curl_strcasecompare(const char *first, const char *second);
-int Curl_safe_strcasecompare(const char *first, const char *second);
-int Curl_strncasecompare(const char *first, const char *second, size_t max);
-
-char Curl_raw_toupper(char in);
-
-/* checkprefix() is a shorter version of the above, used when the first
-   argument is zero-byte terminated */
-#define checkprefix(a,b)    curl_strnequal(a,b,strlen(a))
-
-void Curl_strntoupper(char *dest, const char *src, size_t n);
-char Curl_raw_toupper(char in);
-
-#endif /* HEADER_CURL_STRCASE_H */
index 136b693..23f554e 100644 (file)
@@ -65,9 +65,9 @@ char *curlx_strdup(const char *str)
  * Returns the new pointer or NULL on failure.
  *
  ***************************************************************************/
-void *Curl_memdup(const void *src, size_t length)
+char *Curl_memdup(const char *src, size_t length)
 {
-  void *buffer = malloc(length);
+  char *buffer = malloc(length);
   if(!buffer)
     return NULL; /* fail */
 
@@ -75,26 +75,3 @@ void *Curl_memdup(const void *src, size_t length)
 
   return buffer;
 }
-
-/***************************************************************************
- *
- * Curl_saferealloc(ptr, size)
- *
- * Does a normal realloc(), but will free the data pointer if the realloc
- * fails. If 'size' is zero, it will free the data and return a failure.
- *
- * This convenience function is provided and used to help us avoid a common
- * mistake pattern when we could pass in a zero, catch the NULL return and end
- * up free'ing the memory twice.
- *
- * Returns the new pointer or NULL on failure.
- *
- ***************************************************************************/
-void *Curl_saferealloc(void *ptr, size_t size)
-{
-  void *datap = realloc(ptr, size);
-  if(size && !datap)
-    /* only free 'ptr' if size was non-zero */
-    free(ptr);
-  return datap;
-}
index ae3d5d0..4c48ca4 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -26,7 +26,6 @@
 #ifndef HAVE_STRDUP
 extern char *curlx_strdup(const char *str);
 #endif
-void *Curl_memdup(const void *src, size_t buffer_length);
-void *Curl_saferealloc(void *ptr, size_t size);
+char *Curl_memdup(const char *src, size_t buffer_length);
 
 #endif /* HEADER_CURL_STRDUP_H */
diff --git a/lib/strequal.c b/lib/strequal.c
new file mode 100644 (file)
index 0000000..01c3784
--- /dev/null
@@ -0,0 +1,79 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 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 https://curl.haxx.se/docs/copyright.html.
+ *
+ * You 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 HAVE_STRINGS_H
+#include <strings.h>
+#endif
+
+#include "strequal.h"
+
+/*
+ * @unittest: 1301
+ */
+int curl_strequal(const char *first, const char *second)
+{
+#if defined(HAVE_STRCASECMP)
+  return !(strcasecmp)(first, second);
+#elif defined(HAVE_STRCMPI)
+  return !(strcmpi)(first, second);
+#elif defined(HAVE_STRICMP)
+  return !(stricmp)(first, second);
+#else
+  while(*first && *second) {
+    if(toupper(*first) != toupper(*second)) {
+      break;
+    }
+    first++;
+    second++;
+  }
+  return toupper(*first) == toupper(*second);
+#endif
+}
+
+/*
+ * @unittest: 1301
+ */
+int curl_strnequal(const char *first, const char *second, size_t max)
+{
+#if defined(HAVE_STRNCASECMP)
+  return !strncasecmp(first, second, max);
+#elif defined(HAVE_STRNCMPI)
+  return !strncmpi(first, second, max);
+#elif defined(HAVE_STRNICMP)
+  return !strnicmp(first, second, max);
+#else
+  while(*first && *second && max) {
+    if(toupper(*first) != toupper(*second)) {
+      break;
+    }
+    max--;
+    first++;
+    second++;
+  }
+  if(0 == max)
+    return 1; /* they are equal this far */
+
+  return toupper(*first) == toupper(*second);
+#endif
+}
diff --git a/lib/strequal.h b/lib/strequal.h
new file mode 100644 (file)
index 0000000..ff56df5
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef HEADER_CURL_STREQUAL_H
+#define HEADER_CURL_STREQUAL_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 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 https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include <curl/curl.h>
+
+#define strequal(a,b) curl_strequal(a,b)
+#define strnequal(a,b,c) curl_strnequal(a,b,c)
+
+#endif /* HEADER_CURL_STREQUAL_H */
+
index 7e5cde4..0e268d5 100644 (file)
@@ -35,8 +35,8 @@
 
 #include <curl/curl.h>
 
-#ifdef USE_LIBIDN2
-#include <idn2.h>
+#ifdef USE_LIBIDN
+#include <idna.h>
 #endif
 
 #ifdef USE_WINDOWS_SSPI
@@ -53,7 +53,7 @@ const char *
 curl_easy_strerror(CURLcode error)
 {
 #ifndef CURL_DISABLE_VERBOSE_STRINGS
-  switch(error) {
+  switch (error) {
   case CURLE_OK:
     return "No error";
 
@@ -79,8 +79,8 @@ curl_easy_strerror(CURLcode error)
   case CURLE_COULDNT_CONNECT:
     return "Couldn't connect to server";
 
-  case CURLE_WEIRD_SERVER_REPLY:
-    return "Weird server reply";
+  case CURLE_FTP_WEIRD_SERVER_REPLY:
+    return "FTP: weird server reply";
 
   case CURLE_REMOTE_ACCESS_DENIED:
     return "Access denied to remote resource";
@@ -348,7 +348,7 @@ const char *
 curl_multi_strerror(CURLMcode error)
 {
 #ifndef CURL_DISABLE_VERBOSE_STRINGS
-  switch(error) {
+  switch (error) {
   case CURLM_CALL_MULTI_PERFORM:
     return "Please call curl_multi_perform() soon";
 
@@ -393,7 +393,7 @@ const char *
 curl_share_strerror(CURLSHcode error)
 {
 #ifndef CURL_DISABLE_VERBOSE_STRINGS
-  switch(error) {
+  switch (error) {
   case CURLSHE_OK:
     return "No error";
 
@@ -427,7 +427,7 @@ curl_share_strerror(CURLSHcode error)
 
 #ifdef USE_WINSOCK
 
-/* This function handles most / all (?) Winsock errors curl is able to produce.
+/* This function handles most / all (?) Winsock errors cURL is able to produce.
  */
 static const char *
 get_winsock_error (int err, char *buf, size_t len)
@@ -435,7 +435,7 @@ get_winsock_error (int err, char *buf, size_t len)
   const char *p;
 
 #ifndef CURL_DISABLE_VERBOSE_STRINGS
-  switch(err) {
+  switch (err) {
   case WSAEINTR:
     p = "Call interrupted";
     break;
@@ -609,7 +609,7 @@ get_winsock_error (int err, char *buf, size_t len)
   else
     p = "error";
 #endif
-  strncpy(buf, p, len);
+  strncpy (buf, p, len);
   buf [len-1] = '\0';
   return buf;
 }
@@ -715,12 +715,10 @@ 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'. */
-  p = strrchr(buf, '\n');
-  if(p && (p - buf) >= 2)
-    *p = '\0';
-  p = strrchr(buf, '\r');
-  if(p && (p - buf) >= 1)
-    *p = '\0';
+  if((p = strrchr(buf, '\n')) != NULL && (p - buf) >= 2)
+     *p = '\0';
+  if((p = strrchr(buf, '\r')) != NULL && (p - buf) >= 1)
+     *p = '\0';
 
   if(old_errno != ERRNO)
     SET_ERRNO(old_errno);
@@ -728,6 +726,83 @@ const char *Curl_strerror(struct connectdata *conn, int err)
   return buf;
 }
 
+#ifdef USE_LIBIDN
+/*
+ * Return error-string for libidn status as returned from idna_to_ascii_lz().
+ */
+const char *Curl_idn_strerror (struct connectdata *conn, int err)
+{
+#ifdef HAVE_IDNA_STRERROR
+  (void)conn;
+  return idna_strerror((Idna_rc) err);
+#else
+  const char *str;
+  char *buf;
+  size_t max;
+
+  DEBUGASSERT(conn);
+
+  buf = conn->syserr_buf;
+  max = sizeof(conn->syserr_buf)-1;
+  *buf = '\0';
+
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+  switch ((Idna_rc)err) {
+    case IDNA_SUCCESS:
+      str = "No error";
+      break;
+    case IDNA_STRINGPREP_ERROR:
+      str = "Error in string preparation";
+      break;
+    case IDNA_PUNYCODE_ERROR:
+      str = "Error in Punycode operation";
+      break;
+    case IDNA_CONTAINS_NON_LDH:
+      str = "Illegal ASCII characters";
+      break;
+    case IDNA_CONTAINS_MINUS:
+      str = "Contains minus";
+      break;
+    case IDNA_INVALID_LENGTH:
+      str = "Invalid output length";
+      break;
+    case IDNA_NO_ACE_PREFIX:
+      str = "No ACE prefix (\"xn--\")";
+      break;
+    case IDNA_ROUNDTRIP_VERIFY_ERROR:
+      str = "Round trip verify error";
+      break;
+    case IDNA_CONTAINS_ACE_PREFIX:
+      str = "Already have ACE prefix (\"xn--\")";
+      break;
+    case IDNA_ICONV_ERROR:
+      str = "Locale conversion failed";
+      break;
+    case IDNA_MALLOC_ERROR:
+      str = "Allocation failed";
+      break;
+    case IDNA_DLOPEN_ERROR:
+      str = "dlopen() error";
+      break;
+    default:
+      snprintf(buf, max, "error %d", err);
+      str = NULL;
+      break;
+  }
+#else
+  if((Idna_rc)err == IDNA_SUCCESS)
+    str = "No error";
+  else
+    str = "Error";
+#endif
+  if(str)
+    strncpy(buf, str, max);
+  buf[max] = '\0';
+  return (buf);
+#endif
+}
+#endif  /* USE_LIBIDN */
+
 #ifdef USE_WINDOWS_SSPI
 const char *Curl_sspi_strerror (struct connectdata *conn, int err)
 {
@@ -752,7 +827,7 @@ const char *Curl_sspi_strerror (struct connectdata *conn, int err)
 
   old_errno = ERRNO;
 
-  switch(err) {
+  switch (err) {
     case SEC_E_OK:
       txt = "No error";
       break;
@@ -1037,12 +1112,10 @@ const char *Curl_sspi_strerror (struct connectdata *conn, int err)
     if(msg_formatted) {
       msgbuf[sizeof(msgbuf)-1] = '\0';
       /* strip trailing '\r\n' or '\n' */
-      p = strrchr(msgbuf, '\n');
-      if(p && (p - msgbuf) >= 2)
-        *p = '\0';
-      p = strrchr(msgbuf, '\r');
-      if(p && (p - msgbuf) >= 1)
-        *p = '\0';
+      if((p = strrchr(msgbuf, '\n')) != NULL && (p - msgbuf) >= 2)
+         *p = '\0';
+      if((p = strrchr(msgbuf, '\r')) != NULL && (p - msgbuf) >= 1)
+         *p = '\0';
       msg = msgbuf;
     }
     if(msg)
index 627273e..ae8c96b 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 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
@@ -26,7 +26,7 @@
 
 const char *Curl_strerror (struct connectdata *conn, int err);
 
-#ifdef USE_LIBIDN2
+#ifdef USE_LIBIDN
 const char *Curl_idn_strerror (struct connectdata *conn, int err);
 #endif
 
index b854bf4..6d5d2d5 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -165,7 +165,7 @@ static int get_char(char c, int base)
     value = c - 'a' + 10;
   }
 #else
-  const char *cp;
+  const char * cp;
   int value;
 
   cp = memchr(valchars, c, 10 + 26 + 26);
index 7873759..effc3f2 100644 (file)
@@ -83,39 +83,7 @@ bool Curl_verify_windows_version(const unsigned int majorVersion,
 {
   bool matched = FALSE;
 
-#if defined(CURL_WINDOWS_APP)
-  /* We have no way to determine the Windows version from Windows apps,
-     so let's assume we're running on the target Windows version. */
-  const WORD fullVersion = MAKEWORD(minorVersion, majorVersion);
-  const WORD targetVersion = (WORD)_WIN32_WINNT;
-
-  switch(condition) {
-  case VERSION_LESS_THAN:
-    matched = targetVersion < fullVersion;
-    break;
-
-  case VERSION_LESS_THAN_EQUAL:
-    matched = targetVersion <= fullVersion;
-    break;
-
-  case VERSION_EQUAL:
-    matched = targetVersion == fullVersion;
-    break;
-
-  case VERSION_GREATER_THAN_EQUAL:
-    matched = targetVersion >= fullVersion;
-    break;
-
-  case VERSION_GREATER_THAN:
-    matched = targetVersion > fullVersion;
-    break;
-  }
-
-  if(matched && (platform == PLATFORM_WINDOWS)) {
-    /* we're always running on PLATFORM_WINNT */
-    matched = FALSE;
-  }
-#elif !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
+#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
     (_WIN32_WINNT < _WIN32_WINNT_WIN2K)
   OSVERSIONINFO osver;
 
index 162cab7..cc705cf 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -58,7 +58,8 @@
 
 #include "arpa_telnet.h"
 #include "select.h"
-#include "strcase.h"
+#include "strequal.h"
+#include "rawstr.h"
 #include "warnless.h"
 
 /* The last 3 #include files should be in this order */
@@ -91,7 +92,7 @@
 
 #ifdef USE_WINSOCK
 typedef FARPROC WSOCK2_FUNC;
-static CURLcode check_wsock2(struct Curl_easy *data);
+static CURLcode check_wsock2 (struct Curl_easy *data);
 #endif
 
 static
@@ -845,7 +846,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
               option_keyword, option_arg) == 2) {
 
       /* Terminal type */
-      if(strcasecompare(option_keyword, "TTYPE")) {
+      if(Curl_raw_equal(option_keyword, "TTYPE")) {
         strncpy(tn->subopt_ttype, option_arg, 31);
         tn->subopt_ttype[31] = 0; /* String termination */
         tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
@@ -853,7 +854,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
       }
 
       /* Display variable */
-      if(strcasecompare(option_keyword, "XDISPLOC")) {
+      if(Curl_raw_equal(option_keyword, "XDISPLOC")) {
         strncpy(tn->subopt_xdisploc, option_arg, 127);
         tn->subopt_xdisploc[127] = 0; /* String termination */
         tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
@@ -861,7 +862,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
       }
 
       /* Environment variable */
-      if(strcasecompare(option_keyword, "NEW_ENV")) {
+      if(Curl_raw_equal(option_keyword, "NEW_ENV")) {
         beg = curl_slist_append(tn->telnet_vars, option_arg);
         if(!beg) {
           result = CURLE_OUT_OF_MEMORY;
@@ -873,7 +874,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
       }
 
           /* Window Size */
-      if(strcasecompare(option_keyword, "WS")) {
+      if(Curl_raw_equal(option_keyword, "WS")) {
         if(sscanf(option_arg, "%hu%*[xX]%hu",
                   &tn->subopt_wsx, &tn->subopt_wsy) == 2)
           tn->us_preferred[CURL_TELOPT_NAWS] = CURL_YES;
@@ -886,7 +887,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
       }
 
       /* To take care or not of the 8th bit in data exchange */
-      if(strcasecompare(option_keyword, "BINARY")) {
+      if(Curl_raw_equal(option_keyword, "BINARY")) {
         binary_option=atoi(option_arg);
         if(binary_option!=1) {
           tn->us_preferred[CURL_TELOPT_BINARY] = CURL_NO;
@@ -935,7 +936,7 @@ static void suboption(struct connectdata *conn)
   struct TELNET *tn = (struct TELNET *)data->req.protop;
 
   printsub(data, '<', (unsigned char *)tn->subbuffer, CURL_SB_LEN(tn)+2);
-  switch(CURL_SB_GET(tn)) {
+  switch (CURL_SB_GET(tn)) {
     case CURL_TELOPT_TTYPE:
       len = strlen(tn->subopt_ttype) + 4 + 2;
       snprintf((char *)temp, sizeof(temp),
@@ -1004,12 +1005,12 @@ static void sendsuboption(struct connectdata *conn, int option)
   ssize_t bytes_written;
   int err;
   unsigned short x, y;
-  unsigned char *uc1, *uc2;
+  unsigned char*uc1, *uc2;
 
   struct Curl_easy *data = conn->data;
   struct TELNET *tn = (struct TELNET *)data->req.protop;
 
-  switch(option) {
+  switch (option) {
   case CURL_TELOPT_NAWS:
     /* We prepare data to be sent */
     CURL_SB_CLEAR(tn);
@@ -1020,8 +1021,8 @@ static void sendsuboption(struct connectdata *conn, int option)
     /* Window size must be sent according to the 'network order' */
     x=htons(tn->subopt_wsx);
     y=htons(tn->subopt_wsy);
-    uc1 = (unsigned char *)&x;
-    uc2 = (unsigned char *)&y;
+    uc1 = (unsigned char*)&x;
+    uc2 = (unsigned char*)&y;
     CURL_SB_ACCUM(tn, uc1[0]);
     CURL_SB_ACCUM(tn, uc1[1]);
     CURL_SB_ACCUM(tn, uc2[0]);
@@ -1087,7 +1088,7 @@ CURLcode telrcv(struct connectdata *conn,
   while(count--) {
     c = inbuf[in];
 
-    switch(tn->telrcv_state) {
+    switch (tn->telrcv_state) {
     case CURL_TS_CR:
       tn->telrcv_state = CURL_TS_DATA;
       if(c == '\0') {
@@ -1111,7 +1112,7 @@ CURLcode telrcv(struct connectdata *conn,
     case CURL_TS_IAC:
     process_iac:
       DEBUGASSERT(startwrite < 0);
-      switch(c) {
+      switch (c) {
       case CURL_WILL:
         tn->telrcv_state = CURL_TS_WILL;
         break;
@@ -1186,7 +1187,7 @@ CURLcode telrcv(struct connectdata *conn,
              * IAC SE was left off, or another option got inserted into the
              * suboption are all possibilities.  If we assume that the IAC was
              * not doubled, and really the IAC SE was left off, we could get
-             * into an infinite loop here.  So, instead, we terminate the
+             * into an infinate loop here.  So, instead, we terminate the
              * suboption, and process the partial suboption if we can.
              */
             CURL_SB_ACCUM(tn, CURL_IAC);
@@ -1241,7 +1242,7 @@ static CURLcode send_telnet_data(struct connectdata *conn,
       struct pollfd pfd[1];
       pfd[0].fd = conn->sock[FIRSTSOCKET];
       pfd[0].events = POLLOUT;
-      switch(Curl_poll(pfd, 1, -1)) {
+      switch (Curl_poll(pfd, 1, -1)) {
         case -1:                    /* error, abort writing */
         case 0:                     /* timeout (will never happen) */
           result = CURLE_SEND_ERROR;
@@ -1326,7 +1327,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 #ifdef USE_WINSOCK
   /*
   ** This functionality only works with WinSock >= 2.0.  So,
-  ** make sure we have it.
+  ** make sure have it.
   */
   result = check_wsock2(data);
   if(result)
@@ -1416,7 +1417,6 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 
   /* Keep on listening and act on events */
   while(keepon) {
-    const DWORD buf_size = (DWORD)CURL_BUFSIZE(data->set.buffer_size);
     waitret = WaitForMultipleObjects(obj_count, objs, FALSE, wait_timeout);
     switch(waitret) {
     case WAIT_TIMEOUT:
@@ -1452,7 +1452,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
           if(!readfile_read)
             break;
 
-          if(!ReadFile(stdin_handle, buf, buf_size,
+          if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),
                        &readfile_read, NULL)) {
             keepon = FALSE;
             result = CURLE_READ_ERROR;
@@ -1471,7 +1471,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 
     case WAIT_OBJECT_0 + 1:
     {
-      if(!ReadFile(stdin_handle, buf, buf_size,
+      if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),
                    &readfile_read, NULL)) {
         keepon = FALSE;
         result = CURLE_READ_ERROR;
@@ -1490,8 +1490,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 
       events.lNetworkEvents = 0;
       if(SOCKET_ERROR == enum_netevents_func(sockfd, event_handle, &events)) {
-        err = SOCKERRNO;
-        if(err != EINPROGRESS) {
+        if((err = SOCKERRNO) != EINPROGRESS) {
           infof(data, "WSAEnumNetworkEvents failed (%d)", err);
           keepon = FALSE;
           result = CURLE_READ_ERROR;
@@ -1578,7 +1577,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
   }
 
   while(keepon) {
-    switch(Curl_poll(pfd, poll_cnt, interval_ms)) {
+    switch (Curl_poll(pfd, poll_cnt, interval_ms)) {
     case -1:                    /* error, stop reading */
       keepon = FALSE;
       continue;
index f2f8347..c970396 100644 (file)
 #include "sockaddr.h" /* required for Curl_sockaddr_storage */
 #include "multiif.h"
 #include "url.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "speedcheck.h"
 #include "select.h"
-#include "escape.h"
 
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
@@ -199,7 +198,7 @@ const struct Curl_handler Curl_handler_tftp = {
 static CURLcode tftp_set_timeouts(tftp_state_data_t *state)
 {
   time_t maxtime, timeout;
-  time_t timeout_ms;
+  long timeout_ms;
   bool start = (state->state == TFTP_STATE_START) ? TRUE : FALSE;
 
   time(&state->start_time);
@@ -304,7 +303,7 @@ static unsigned short getrpacketblock(const tftp_packet_t *packet)
 
 static size_t Curl_strnlen(const char *string, size_t maxlen)
 {
-  const char *end = memchr(string, '\0', maxlen);
+  const char *end = memchr (string, '\0', maxlen);
   return end ? (size_t) (end - string) : maxlen;
 }
 
@@ -485,10 +484,10 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
     /* As RFC3617 describes the separator slash is not actually part of the
        file name so we skip the always-present first letter of the path
        string. */
-    result = Curl_urldecode(data, &state->conn->data->state.path[1], 0,
-                            &filename, NULL, FALSE);
-    if(result)
-      return result;
+    filename = curl_easy_unescape(data, &state->conn->data->state.path[1], 0,
+                                  NULL);
+    if(!filename)
+      return CURLE_OUT_OF_MEMORY;
 
     snprintf((char *)state->spacket.data+2,
              state->blksize,
@@ -1234,7 +1233,7 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
   }
   else {
     /* no timeouts to handle, check our socket */
-    rc = SOCKET_READABLE(state->sockfd, 0);
+    rc = Curl_socket_ready(state->sockfd, CURL_SOCKET_BAD, 0);
 
     if(rc == -1) {
       /* bail out */
@@ -1356,7 +1355,7 @@ static CURLcode tftp_do(struct connectdata *conn, bool *done)
 static CURLcode tftp_setup_connection(struct connectdata * conn)
 {
   struct Curl_easy *data = conn->data;
-  char *type;
+  char * type;
   char command;
 
   conn->socktype = SOCK_DGRAM;   /* UDP datagram based */
@@ -1372,7 +1371,7 @@ static CURLcode tftp_setup_connection(struct connectdata * conn)
     *type = 0;                   /* it was in the middle of the hostname */
     command = Curl_raw_toupper(type[6]);
 
-    switch(command) {
+    switch (command) {
     case 'A': /* ASCII mode */
     case 'N': /* NETASCII mode */
       data->set.prefer_ascii = TRUE;
index f3b207a..629f1c8 100644 (file)
@@ -116,7 +116,7 @@ struct timeval curlx_tvnow(void)
  * Returns: the time difference in number of milliseconds. For large diffs it
  * returns 0x7fffffff on 32bit time_t systems.
  */
-time_t curlx_tvdiff(struct timeval newer, struct timeval older)
+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
@@ -126,7 +126,7 @@ time_t curlx_tvdiff(struct timeval newer, struct timeval older)
     return 0x7fffffff;
 #endif
   return (newer.tv_sec-older.tv_sec)*1000+
-    (time_t)(newer.tv_usec-older.tv_usec)/1000;
+    (long)(newer.tv_usec-older.tv_usec)/1000;
 }
 
 /*
@@ -144,7 +144,7 @@ double curlx_tvdiff_secs(struct timeval newer, struct timeval older)
 }
 
 /* return the number of seconds in the given input timeval struct */
-time_t Curl_tvlong(struct timeval t1)
+long Curl_tvlong(struct timeval t1)
 {
   return t1.tv_sec;
 }
index 09f8b3a..50c31a2 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -37,7 +37,7 @@ struct timeval curlx_tvnow(void);
  *
  * Returns: the time difference in number of milliseconds.
  */
-time_t curlx_tvdiff(struct timeval t1, struct timeval t2);
+long curlx_tvdiff(struct timeval t1, struct timeval t2);
 
 /*
  * Same as curlx_tvdiff but with full usec resolution.
@@ -46,7 +46,7 @@ time_t curlx_tvdiff(struct timeval t1, struct timeval t2);
  */
 double curlx_tvdiff_secs(struct timeval t1, struct timeval t2);
 
-time_t Curl_tvlong(struct timeval t1);
+long Curl_tvlong(struct timeval t1);
 
 /* These two defines below exist to provide the older API for library
    internals only. */
index a577bf7..2fad6f3 100644 (file)
  ***************************************************************************/
 
 #include "curl_setup.h"
+
 #include "strtoofft.h"
+#include "strequal.h"
+#include "rawstr.h"
 
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
@@ -532,13 +535,6 @@ static CURLcode readwrite_data(struct Curl_easy *data,
        is non-headers. */
     if(k->str && !k->header && (nread > 0 || is_empty_data)) {
 
-      if(data->set.opt_no_body) {
-        /* data arrives although we want none, bail out */
-        streamclose(conn, "ignoring body");
-        *done = TRUE;
-        return CURLE_WEIRD_SERVER_REPLY;
-      }
-
 #ifndef CURL_DISABLE_HTTP
       if(0 == k->bodywrites && !is_empty_data) {
         /* These checks are only made the first time we are about to
@@ -741,8 +737,8 @@ static CURLcode readwrite_data(struct Curl_easy *data,
              Make sure that ALL_CONTENT_ENCODINGS contains all the
              encodings handled here. */
 #ifdef HAVE_LIBZ
-          switch(conn->data->set.http_ce_skip ?
-                 IDENTITY : k->auto_decoding) {
+          switch (conn->data->set.http_ce_skip ?
+                  IDENTITY : k->auto_decoding) {
           case IDENTITY:
 #endif
             /* This is the default when the server sends no
@@ -775,9 +771,9 @@ static CURLcode readwrite_data(struct Curl_easy *data,
             break;
 
           default:
-            failf(data, "Unrecognized content encoding type. "
-                  "libcurl understands `identity', `deflate' and `gzip' "
-                  "content encodings.");
+            failf (data, "Unrecognized content encoding type. "
+                   "libcurl understands `identity', `deflate' and `gzip' "
+                   "content encodings.");
             result = CURLE_BAD_CONTENT_ENCODING;
             break;
           }
@@ -1086,7 +1082,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
 
   if(!select_res) /* Call for select()/poll() only, if read/write/error
                      status is not known. */
-    select_res = Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write, 0);
+    select_res = Curl_socket_ready(fd_read, fd_write, 0);
 
   if(select_res == CURL_CSELECT_ERR) {
     failf(data, "select/poll returned error");
@@ -1137,7 +1133,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
 
       */
 
-      time_t ms = Curl_tvdiff(k->now, k->start100);
+      long ms = Curl_tvdiff(k->now, k->start100);
       if(ms >= data->set.expect_100_timeout) {
         /* we've waited long enough, continue anyway */
         k->exp100 = EXP100_SEND_DATA;
@@ -1296,7 +1292,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
   /* Init the SSL session ID cache here. We do it here since we want to do it
      after the *_setopt() calls (that could specify the size of the cache) but
      before any transfer takes place. */
-  result = Curl_ssl_initsessions(data, data->set.general_ssl.max_ssl_sessions);
+  result = Curl_ssl_initsessions(data, data->set.ssl.max_ssl_sessions);
   if(result)
     return result;
 
@@ -1843,17 +1839,12 @@ CURLcode Curl_retry_request(struct connectdata *conn,
     return CURLE_OK;
 
   if((data->req.bytecount + data->req.headerbytecount == 0) &&
-      conn->bits.reuse &&
-      (!data->set.opt_no_body
-        || (conn->handler->protocol & PROTO_FAMILY_HTTP)) &&
-      (data->set.rtspreq != RTSPREQ_RECEIVE)) {
-    /* We got no data, we attempted to re-use a connection. For HTTP this
-       can be a retry so we try again regardless if we expected a body.
-       For other protocols we only try again only if we expected a body.
-
-       This might happen if the connection was left alive when we were
-       done using it before, but that was closed when we wanted to read from
-       it again. Bad luck. Retry the same request on a fresh connect! */
+     conn->bits.reuse &&
+     (data->set.rtspreq != RTSPREQ_RECEIVE)) {
+    /* We didn't get a single byte when we attempted to re-use a
+       connection. This might happen if the connection was left alive when we
+       were done using it before, but that was closed when we wanted to use it
+       again. Bad luck. Retry the same request on a fresh connect! */
     infof(conn->data, "Connection died, retrying a fresh connect\n");
     *url = strdup(conn->data->change.url);
     if(!*url)
index 38b9552..f355c7a 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include <limits.h>
 #endif
 
-#ifdef USE_LIBIDN2
-#include <idn2.h>
-
+#ifdef USE_LIBIDN
+#include <idna.h>
+#include <tld.h>
+#include <stringprep.h>
+#ifdef HAVE_IDN_FREE_H
+#include <idn-free.h>
+#else
+/* prototype from idn-free.h, not provided by libidn 0.4.5's make install! */
+void idn_free (void *ptr);
+#endif
+#ifndef HAVE_IDN_FREE
+/* if idn_free() was not found in this version of libidn use free() instead */
+#define idn_free(x) (free)(x)
+#endif
 #elif defined(USE_WIN32_IDN)
 /* prototype for curl_win32_idn_to_ascii() */
 bool curl_win32_idn_to_ascii(const char *in, char **out);
-#endif  /* USE_LIBIDN2 */
+#endif  /* USE_LIBIDN */
 
 #include "urldata.h"
 #include "netrc.h"
@@ -77,7 +88,7 @@ bool curl_win32_idn_to_ascii(const char *in, char **out);
 #include "sendf.h"
 #include "progress.h"
 #include "cookie.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "strerror.h"
 #include "escape.h"
 #include "strtok.h"
@@ -89,10 +100,10 @@ bool curl_win32_idn_to_ascii(const char *in, char **out);
 #include "multiif.h"
 #include "easyif.h"
 #include "speedcheck.h"
+#include "rawstr.h"
 #include "warnless.h"
 #include "non-ascii.h"
 #include "inet_pton.h"
-#include "getinfo.h"
 
 /* And now for the protocols */
 #include "ftp.h"
@@ -452,7 +463,6 @@ CURLcode Curl_close(struct Curl_easy *data)
   }
   data->change.url = NULL;
 
-  Curl_safefree(data->state.buffer);
   Curl_safefree(data->state.headerbuff);
 
   Curl_flush_cookies(data, 1);
@@ -465,7 +475,6 @@ CURLcode Curl_close(struct Curl_easy *data)
   /* this destroys the channel and we cannot use it anymore after this */
   Curl_resolver_cleanup(data->state.resolver);
 
-  Curl_http2_cleanup_dependencies(data);
   Curl_convert_close(data);
 
   /* No longer a dirty share, if it exists */
@@ -528,9 +537,9 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
   set->dns_cache_timeout = 60; /* Timeout every 60 seconds by default */
 
   /* Set the default size of the SSL session ID cache */
-  set->general_ssl.max_ssl_sessions = 5;
+  set->ssl.max_ssl_sessions = 5;
 
-  set->proxyport = 0;
+  set->proxyport = CURL_DEFAULT_PROXY_PORT; /* from url.h */
   set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
   set->httpauth = CURLAUTH_BASIC;  /* defaults to basic */
   set->proxyauth = CURLAUTH_BASIC; /* defaults to basic */
@@ -542,16 +551,14 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
    * libcurl 7.10 introduced SSL verification *by default*! This needs to be
    * switched off unless wanted.
    */
-  set->ssl.primary.verifypeer = TRUE;
-  set->ssl.primary.verifyhost = TRUE;
+  set->ssl.verifypeer = TRUE;
+  set->ssl.verifyhost = TRUE;
 #ifdef USE_TLS_SRP
   set->ssl.authtype = CURL_TLSAUTH_NONE;
 #endif
   set->ssh_auth_types = CURLSSH_AUTH_DEFAULT; /* defaults to any auth
                                                       type */
-  set->general_ssl.sessionid = TRUE; /* session ID caching enabled by
-                                        default */
-  set->proxy_ssl = set->ssl;
+  set->ssl.sessionid = TRUE; /* session ID caching enabled by default */
 
   set->new_file_perms = 0644;    /* Default permissions */
   set->new_directory_perms = 0755; /* Default permissions */
@@ -574,20 +581,12 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
 
   /* This is our preferred CA cert bundle/path since install time */
 #if defined(CURL_CA_BUNDLE)
-  result = setstropt(&set->str[STRING_SSL_CAFILE_ORIG], CURL_CA_BUNDLE);
-  if(result)
-    return result;
-
-  result = setstropt(&set->str[STRING_SSL_CAFILE_PROXY], CURL_CA_BUNDLE);
+  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_ORIG], CURL_CA_PATH);
-  if(result)
-    return result;
-
-  result = setstropt(&set->str[STRING_SSL_CAPATH_PROXY], CURL_CA_PATH);
+  result = setstropt(&set->str[STRING_SSL_CAPATH], CURL_CA_PATH);
   if(result)
     return result;
 #endif
@@ -647,12 +646,6 @@ CURLcode Curl_open(struct Curl_easy **curl)
 
   /* We do some initial setup here, all those fields that can't be just 0 */
 
-  data->state.buffer = malloc(BUFSIZE + 1);
-  if(!data->state.buffer) {
-    DEBUGF(fprintf(stderr, "Error: malloc of buffer failed\n"));
-    result = CURLE_OUT_OF_MEMORY;
-  }
-
   data->state.headerbuff = malloc(HEADERSIZE);
   if(!data->state.headerbuff) {
     DEBUGF(fprintf(stderr, "Error: malloc of headerbuff failed\n"));
@@ -665,8 +658,6 @@ CURLcode Curl_open(struct Curl_easy **curl)
 
     Curl_convert_init(data);
 
-    Curl_initinfo(data);
-
     /* most recent connection is not yet defined */
     data->state.lastconnect = NULL;
 
@@ -683,7 +674,6 @@ CURLcode Curl_open(struct Curl_easy **curl)
 
   if(result) {
     Curl_resolver_cleanup(data->state.resolver);
-    free(data->state.buffer);
     free(data->state.headerbuff);
     Curl_freeset(data);
     free(data);
@@ -716,12 +706,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     break;
   case CURLOPT_SSL_CIPHER_LIST:
     /* set a list of cipher we want to use in the SSL connection */
-    result = setstropt(&data->set.str[STRING_SSL_CIPHER_LIST_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_SSL_CIPHER_LIST:
-    /* set a list of cipher we want to use in the SSL connection for proxy */
-    result = setstropt(&data->set.str[STRING_SSL_CIPHER_LIST_PROXY],
+    result = setstropt(&data->set.str[STRING_SSL_CIPHER_LIST],
                        va_arg(param, char *));
     break;
 
@@ -797,10 +782,6 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
      */
     data->set.http_fail_on_error = (0 != va_arg(param, long)) ? TRUE : FALSE;
     break;
-  case CURLOPT_KEEP_SENDING_ON_ERROR:
-    data->set.http_keep_sending_on_error = (0 != va_arg(param, long)) ?
-                                           TRUE : FALSE;
-    break;
   case CURLOPT_UPLOAD:
   case CURLOPT_PUT:
     /*
@@ -927,18 +908,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
      * implementations are lame.
      */
 #ifdef USE_SSL
-    data->set.ssl.primary.version = va_arg(param, long);
-#else
-    result = CURLE_UNKNOWN_OPTION;
-#endif
-    break;
-  case CURLOPT_PROXY_SSLVERSION:
-    /*
-     * Set explicit SSL version to try to connect with for proxy, as some SSL
-     * implementations are lame.
-     */
-#ifdef USE_SSL
-    data->set.proxy_ssl.primary.version = va_arg(param, long);
+    data->set.ssl.version = va_arg(param, long);
 #else
     result = CURLE_UNKNOWN_OPTION;
 #endif
@@ -1045,7 +1015,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
           (data->set.postfieldsize > (curl_off_t)((size_t)-1))))
         result = CURLE_OUT_OF_MEMORY;
       else {
-        char *p;
+        char * p;
 
         (void) setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);
 
@@ -1256,23 +1226,23 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     if(argptr == NULL)
       break;
 
-    if(strcasecompare(argptr, "ALL")) {
+    if(Curl_raw_equal(argptr, "ALL")) {
       /* clear all cookies */
       Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
       Curl_cookie_clearall(data->cookies);
       Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
     }
-    else if(strcasecompare(argptr, "SESS")) {
+    else if(Curl_raw_equal(argptr, "SESS")) {
       /* clear session cookies */
       Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
       Curl_cookie_clearsess(data->cookies);
       Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
     }
-    else if(strcasecompare(argptr, "FLUSH")) {
+    else if(Curl_raw_equal(argptr, "FLUSH")) {
       /* flush cookies to file, takes care of the locking */
       Curl_flush_cookies(data, 0);
     }
-    else if(strcasecompare(argptr, "RELOAD")) {
+    else if(Curl_raw_equal(argptr, "RELOAD")) {
       /* reload cookies from file */
       Curl_cookie_loadfiles(data);
       break;
@@ -1472,30 +1442,18 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
 
   case CURLOPT_PROXY:
     /*
-     * Set proxy server:port to use as proxy.
+     * Set proxy server:port to use as HTTP proxy.
      *
-     * If the proxy is set to "" (and CURLOPT_SOCKS_PROXY is set to "" or NULL)
-     * we explicitly say that we don't want to use a proxy
-     * (even though there might be environment variables saying so).
+     * If the proxy is set to "" we explicitly say that we don't want to use a
+     * proxy (even though there might be environment variables saying so).
      *
      * Setting it to NULL, means no proxy but allows the environment variables
-     * to decide for us (if CURLOPT_SOCKS_PROXY setting it to NULL).
+     * to decide for us.
      */
     result = setstropt(&data->set.str[STRING_PROXY],
                        va_arg(param, char *));
     break;
 
-  case CURLOPT_PRE_PROXY:
-    /*
-     * Set proxy server:port to use as SOCKS proxy.
-     *
-     * If the proxy is set to "" or NULL we explicitly say that we don't want
-     * to use the socks proxy.
-     */
-    result = setstropt(&data->set.str[STRING_PRE_PROXY],
-                       va_arg(param, char *));
-    break;
-
   case CURLOPT_PROXYTYPE:
     /*
      * Set proxy type. HTTP/HTTP_1_0/SOCKS4/SOCKS4a/SOCKS5/SOCKS5_HOSTNAME
@@ -1507,7 +1465,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     /*
      * set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy
      */
-    switch(va_arg(param, long)) {
+    switch (va_arg(param, long)) {
     case 0:
       data->set.proxy_transfer_mode = FALSE;
       break;
@@ -1960,70 +1918,35 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     /*
      * String that holds file name of the SSL certificate to use
      */
-    result = setstropt(&data->set.str[STRING_CERT_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_SSLCERT:
-    /*
-     * String that holds file name of the SSL certificate to use for proxy
-     */
-    result = setstropt(&data->set.str[STRING_CERT_PROXY],
+    result = setstropt(&data->set.str[STRING_CERT],
                        va_arg(param, char *));
     break;
   case CURLOPT_SSLCERTTYPE:
     /*
      * String that holds file type of the SSL certificate to use
      */
-    result = setstropt(&data->set.str[STRING_CERT_TYPE_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_SSLCERTTYPE:
-    /*
-     * String that holds file type of the SSL certificate to use for proxy
-     */
-    result = setstropt(&data->set.str[STRING_CERT_TYPE_PROXY],
+    result = setstropt(&data->set.str[STRING_CERT_TYPE],
                        va_arg(param, char *));
     break;
   case CURLOPT_SSLKEY:
     /*
      * String that holds file name of the SSL key to use
      */
-    result = setstropt(&data->set.str[STRING_KEY_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_SSLKEY:
-    /*
-     * String that holds file name of the SSL key to use for proxy
-     */
-    result = setstropt(&data->set.str[STRING_KEY_PROXY],
+    result = setstropt(&data->set.str[STRING_KEY],
                        va_arg(param, char *));
     break;
   case CURLOPT_SSLKEYTYPE:
     /*
      * String that holds file type of the SSL key to use
      */
-    result = setstropt(&data->set.str[STRING_KEY_TYPE_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_SSLKEYTYPE:
-    /*
-     * String that holds file type of the SSL key to use for proxy
-     */
-    result = setstropt(&data->set.str[STRING_KEY_TYPE_PROXY],
+    result = setstropt(&data->set.str[STRING_KEY_TYPE],
                        va_arg(param, char *));
     break;
   case CURLOPT_KEYPASSWD:
     /*
      * String that holds the SSL or SSH private key password.
      */
-    result = setstropt(&data->set.str[STRING_KEY_PASSWD_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_KEYPASSWD:
-    /*
-     * String that holds the SSL private key password for proxy.
-     */
-    result = setstropt(&data->set.str[STRING_KEY_PASSWD_PROXY],
+    result = setstropt(&data->set.str[STRING_KEY_PASSWD],
                        va_arg(param, char *));
     break;
   case CURLOPT_SSLENGINE:
@@ -2086,15 +2009,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     /*
      * Enable peer SSL verifying.
      */
-    data->set.ssl.primary.verifypeer = (0 != va_arg(param, long)) ?
-                                       TRUE : FALSE;
-    break;
-  case CURLOPT_PROXY_SSL_VERIFYPEER:
-    /*
-     * Enable peer SSL verifying for proxy.
-     */
-    data->set.proxy_ssl.primary.verifypeer =
-      (0 != va_arg(param, long))?TRUE:FALSE;
+    data->set.ssl.verifypeer = (0 != va_arg(param, long)) ? TRUE : FALSE;
     break;
   case CURLOPT_SSL_VERIFYHOST:
     /*
@@ -2112,25 +2027,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
       return CURLE_BAD_FUNCTION_ARGUMENT;
     }
 
-    data->set.ssl.primary.verifyhost = (0 != arg) ? TRUE : FALSE;
-    break;
-  case CURLOPT_PROXY_SSL_VERIFYHOST:
-    /*
-     * Enable verification of the host name in the peer certificate for proxy
-     */
-    arg = va_arg(param, long);
-
-    /* Obviously people are not reading documentation and too many thought
-       this argument took a boolean when it wasn't and misused it. We thus ban
-       1 as a sensible input and we warn about its use. Then we only have the
-       2 action internally stored as TRUE. */
-
-    if(1 == arg) {
-      failf(data, "CURLOPT_SSL_VERIFYHOST no longer supports 1 as value!");
-      return CURLE_BAD_FUNCTION_ARGUMENT;
-    }
-
-    data->set.proxy_ssl.primary.verifyhost = (0 != arg)?TRUE:FALSE;
+    data->set.ssl.verifyhost = (0 != arg) ? TRUE : FALSE;
     break;
   case CURLOPT_SSL_VERIFYSTATUS:
     /*
@@ -2141,8 +2038,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
       break;
     }
 
-    data->set.ssl.primary.verifystatus = (0 != va_arg(param, long)) ?
-                                         TRUE : FALSE;
+    data->set.ssl.verifystatus = (0 != va_arg(param, long)) ? TRUE : FALSE;
     break;
   case CURLOPT_SSL_CTX_FUNCTION:
 #ifdef have_curlssl_ssl_ctx
@@ -2188,19 +2084,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
      * Set pinned public key for SSL connection.
      * Specify file name of the public key in DER format.
      */
-    result = setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG],
-                       va_arg(param, char *));
-#else
-    result = CURLE_NOT_BUILT_IN;
-#endif
-    break;
-  case CURLOPT_PROXY_PINNEDPUBLICKEY:
-#ifdef have_curlssl_pinnedpubkey /* only by supported backends */
-    /*
-     * Set pinned public key for SSL connection.
-     * Specify file name of the public key in DER format.
-     */
-    result = setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY],
+    result = setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY],
                        va_arg(param, char *));
 #else
     result = CURLE_NOT_BUILT_IN;
@@ -2210,15 +2094,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     /*
      * Set CA info for SSL connection. Specify file name of the CA certificate
      */
-    result = setstropt(&data->set.str[STRING_SSL_CAFILE_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_CAINFO:
-    /*
-     * Set CA info SSL connection for proxy. Specify file name of the
-     * CA certificate
-     */
-    result = setstropt(&data->set.str[STRING_SSL_CAFILE_PROXY],
+    result = setstropt(&data->set.str[STRING_SSL_CAFILE],
                        va_arg(param, char *));
     break;
   case CURLOPT_CAPATH:
@@ -2228,20 +2104,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
      * certificates which have been prepared using openssl c_rehash utility.
      */
     /* This does not work on windows. */
-    result = setstropt(&data->set.str[STRING_SSL_CAPATH_ORIG],
-                       va_arg(param, char *));
-#else
-    result = CURLE_NOT_BUILT_IN;
-#endif
-    break;
-  case CURLOPT_PROXY_CAPATH:
-#ifdef have_curlssl_ca_path /* not supported by all backends */
-    /*
-     * Set CA path info for SSL connection proxy. Specify directory name of the
-     * CA certificates which have been prepared using openssl c_rehash utility.
-     */
-    /* This does not work on windows. */
-    result = setstropt(&data->set.str[STRING_SSL_CAPATH_PROXY],
+    result = setstropt(&data->set.str[STRING_SSL_CAPATH],
                        va_arg(param, char *));
 #else
     result = CURLE_NOT_BUILT_IN;
@@ -2252,15 +2115,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
      * Set CRL file info for SSL connection. Specify file name of the CRL
      * to check certificates revocation
      */
-    result = setstropt(&data->set.str[STRING_SSL_CRLFILE_ORIG],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_PROXY_CRLFILE:
-    /*
-     * Set CRL file info for SSL connection for proxy. Specify file name of the
-     * CRL to check certificates revocation
-     */
-    result = setstropt(&data->set.str[STRING_SSL_CRLFILE_PROXY],
+    result = setstropt(&data->set.str[STRING_SSL_CRLFILE],
                        va_arg(param, char *));
     break;
   case CURLOPT_ISSUERCERT:
@@ -2268,7 +2123,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
      * Set Issuer certificate file
      * to check certificates issuer
      */
-    result = setstropt(&data->set.str[STRING_SSL_ISSUERCERT_ORIG],
+    result = setstropt(&data->set.str[STRING_SSL_ISSUERCERT],
                        va_arg(param, char *));
     break;
   case CURLOPT_TELNETOPTIONS:
@@ -2285,20 +2140,9 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
      */
     data->set.buffer_size = va_arg(param, long);
 
-    if(data->set.buffer_size > MAX_BUFSIZE)
-      data->set.buffer_size = MAX_BUFSIZE; /* huge internal default */
-    else if(data->set.buffer_size < 1)
-      data->set.buffer_size = BUFSIZE;
-
-    /* Resize only if larger than default buffer size. */
-    if(data->set.buffer_size > BUFSIZE) {
-      data->state.buffer = realloc(data->state.buffer,
-                                   data->set.buffer_size + 1);
-      if(!data->state.buffer) {
-        DEBUGF(fprintf(stderr, "Error: realloc of buffer failed\n"));
-        result = CURLE_OUT_OF_MEMORY;
-      }
-    }
+    if((data->set.buffer_size> (BUFSIZE -1)) ||
+       (data->set.buffer_size < 1))
+      data->set.buffer_size = 0; /* huge internal default */
 
     break;
 
@@ -2360,7 +2204,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
       }
 #endif   /* CURL_DISABLE_HTTP */
       if(data->share->sslsession) {
-        data->set.general_ssl.max_ssl_sessions = data->share->max_ssl_sessions;
+        data->set.ssl.max_ssl_sessions = data->share->max_ssl_sessions;
         data->state.session = data->share->sslsession;
       }
       Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);
@@ -2395,14 +2239,8 @@ CURLcode Curl_setopt(struct Curl_easy *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.no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
-    break;
-
-  case CURLOPT_PROXY_SSL_OPTIONS:
-    arg = va_arg(param, long);
-    data->set.proxy_ssl.enable_beast = arg&CURLSSLOPT_ALLOW_BEAST?TRUE:FALSE;
-    data->set.proxy_ssl.no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
+    data->set.ssl_enable_beast = !!(arg & CURLSSLOPT_ALLOW_BEAST);
+    data->set.ssl_no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
     break;
 
 #endif
@@ -2498,8 +2336,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     break;
 
   case CURLOPT_SSL_SESSIONID_CACHE:
-    data->set.general_ssl.sessionid = (0 != va_arg(param, long)) ?
-                                      TRUE : FALSE;
+    data->set.ssl.sessionid = (0 != va_arg(param, long)) ? TRUE : FALSE;
     break;
 
 #ifdef USE_LIBSSH2
@@ -2766,43 +2603,23 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     break;
 #ifdef USE_TLS_SRP
   case CURLOPT_TLSAUTH_USERNAME:
-    result = setstropt(&data->set.str[STRING_TLSAUTH_USERNAME_ORIG],
+    result = setstropt(&data->set.str[STRING_TLSAUTH_USERNAME],
                        va_arg(param, char *));
-    if(data->set.str[STRING_TLSAUTH_USERNAME_ORIG] && !data->set.ssl.authtype)
+    if(data->set.str[STRING_TLSAUTH_USERNAME] && !data->set.ssl.authtype)
       data->set.ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
     break;
-  case CURLOPT_PROXY_TLSAUTH_USERNAME:
-    result = setstropt(&data->set.str[STRING_TLSAUTH_USERNAME_PROXY],
-                       va_arg(param, char *));
-    if(data->set.str[STRING_TLSAUTH_USERNAME_PROXY] &&
-       !data->set.proxy_ssl.authtype)
-      data->set.proxy_ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
-    break;
   case CURLOPT_TLSAUTH_PASSWORD:
-    result = setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD_ORIG],
+    result = setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD],
                        va_arg(param, char *));
-    if(data->set.str[STRING_TLSAUTH_USERNAME_ORIG] && !data->set.ssl.authtype)
+    if(data->set.str[STRING_TLSAUTH_USERNAME] && !data->set.ssl.authtype)
       data->set.ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
     break;
-  case CURLOPT_PROXY_TLSAUTH_PASSWORD:
-    result = setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD_PROXY],
-                       va_arg(param, char *));
-    if(data->set.str[STRING_TLSAUTH_USERNAME_PROXY] &&
-       !data->set.proxy_ssl.authtype)
-      data->set.proxy_ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
-    break;
   case CURLOPT_TLSAUTH_TYPE:
-    if(strncasecompare((char *)va_arg(param, char *), "SRP", strlen("SRP")))
+    if(strnequal((char *)va_arg(param, char *), "SRP", strlen("SRP")))
       data->set.ssl.authtype = CURL_TLSAUTH_SRP;
     else
       data->set.ssl.authtype = CURL_TLSAUTH_NONE;
     break;
-  case CURLOPT_PROXY_TLSAUTH_TYPE:
-    if(strncasecompare((char *)va_arg(param, char *), "SRP", strlen("SRP")))
-      data->set.proxy_ssl.authtype = CURL_TLSAUTH_SRP;
-    else
-      data->set.proxy_ssl.authtype = CURL_TLSAUTH_NONE;
-    break;
 #endif
   case CURLOPT_DNS_SERVERS:
     result = Curl_set_dns_servers(data, va_arg(param, char *));
@@ -2842,12 +2659,6 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
 
 #ifdef USE_UNIX_SOCKETS
   case CURLOPT_UNIX_SOCKET_PATH:
-    data->set.abstract_unix_socket = FALSE;
-    result = setstropt(&data->set.str[STRING_UNIX_SOCKET_PATH],
-                       va_arg(param, char *));
-    break;
-  case CURLOPT_ABSTRACT_UNIX_SOCKET:
-    data->set.abstract_unix_socket = TRUE;
     result = setstropt(&data->set.str[STRING_UNIX_SOCKET_PATH],
                        va_arg(param, char *));
     break;
@@ -2875,11 +2686,9 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
     return CURLE_NOT_BUILT_IN;
 #else
     struct Curl_easy *dep = va_arg(param, struct Curl_easy *);
-    if(!dep || GOOD_EASY_HANDLE(dep)) {
-      if(data->set.stream_depends_on) {
-        Curl_http2_remove_child(data->set.stream_depends_on, data);
-      }
-      Curl_http2_add_child(dep, data, (option == CURLOPT_STREAM_DEPENDS_E));
+    if(dep && GOOD_EASY_HANDLE(dep)) {
+      data->set.stream_depends_on = dep;
+      data->set.stream_depends_e = (option == CURLOPT_STREAM_DEPENDS_E);
     }
     break;
 #endif
@@ -2917,10 +2726,10 @@ static void conn_reset_postponed_data(struct connectdata *conn, int num)
 #endif /* DEBUGBUILD */
   }
   else {
-    DEBUGASSERT(psnd->allocated_size == 0);
-    DEBUGASSERT(psnd->recv_size == 0);
-    DEBUGASSERT(psnd->recv_processed == 0);
-    DEBUGASSERT(psnd->bindsock == CURL_SOCKET_BAD);
+    DEBUGASSERT (psnd->allocated_size == 0);
+    DEBUGASSERT (psnd->recv_size == 0);
+    DEBUGASSERT (psnd->recv_processed == 0);
+    DEBUGASSERT (psnd->bindsock == CURL_SOCKET_BAD);
   }
 }
 
@@ -2967,10 +2776,8 @@ static void conn_free(struct connectdata *conn)
   Curl_safefree(conn->passwd);
   Curl_safefree(conn->oauth_bearer);
   Curl_safefree(conn->options);
-  Curl_safefree(conn->http_proxy.user);
-  Curl_safefree(conn->socks_proxy.user);
-  Curl_safefree(conn->http_proxy.passwd);
-  Curl_safefree(conn->socks_proxy.passwd);
+  Curl_safefree(conn->proxyuser);
+  Curl_safefree(conn->proxypasswd);
   Curl_safefree(conn->allocptr.proxyuserpwd);
   Curl_safefree(conn->allocptr.uagent);
   Curl_safefree(conn->allocptr.userpwd);
@@ -2984,9 +2791,7 @@ static void conn_free(struct connectdata *conn)
   Curl_safefree(conn->trailer);
   Curl_safefree(conn->host.rawalloc); /* host name buffer */
   Curl_safefree(conn->conn_to_host.rawalloc); /* host name buffer */
-  Curl_safefree(conn->secondaryhostname);
-  Curl_safefree(conn->http_proxy.host.rawalloc); /* http proxy name buffer */
-  Curl_safefree(conn->socks_proxy.host.rawalloc); /* socks proxy name buffer */
+  Curl_safefree(conn->proxy.rawalloc); /* proxy name buffer */
   Curl_safefree(conn->master_buffer);
 
   conn_reset_all_postponed_data(conn);
@@ -2998,12 +2803,7 @@ static void conn_free(struct connectdata *conn)
   conn->recv_pipe = NULL;
 
   Curl_safefree(conn->localdev);
-  Curl_free_primary_ssl_config(&conn->ssl_config);
-  Curl_free_primary_ssl_config(&conn->proxy_ssl_config);
-
-#ifdef USE_UNIX_SOCKETS
-  Curl_safefree(conn->unix_domain_socket);
-#endif
+  Curl_free_ssl_config(&conn->ssl_config);
 
   free(conn); /* free all the connection oriented data */
 }
@@ -3063,8 +2863,7 @@ CURLcode Curl_disconnect(struct connectdata *conn, bool dead_connection)
 
   free_fixed_hostname(&conn->host);
   free_fixed_hostname(&conn->conn_to_host);
-  free_fixed_hostname(&conn->http_proxy.host);
-  free_fixed_hostname(&conn->socks_proxy.host);
+  free_fixed_hostname(&conn->proxy);
 
   Curl_ssl_close(conn, FIRSTSOCKET);
 
@@ -3089,7 +2888,7 @@ static bool SocketIsDead(curl_socket_t sock)
   int sval;
   bool ret_val = TRUE;
 
-  sval = SOCKET_READABLE(sock, 0);
+  sval = Curl_socket_ready(sock, CURL_SOCKET_BAD, 0);
   if(sval == 0)
     /* timeout */
     ret_val = FALSE;
@@ -3105,8 +2904,7 @@ static bool IsPipeliningPossible(const struct Curl_easy *handle,
                                  const struct connectdata *conn)
 {
   /* If a HTTP protocol and pipelining is enabled */
-  if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
-     (!conn->bits.protoconnstart || !conn->bits.close)) {
+  if(conn->handler->protocol & PROTO_FAMILY_HTTP) {
 
     if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) &&
        (handle->set.httpversion != CURL_HTTP_VERSION_1_0) &&
@@ -3223,8 +3021,8 @@ Curl_oldest_idle_connection(struct Curl_easy *data)
   struct curl_hash_iterator iter;
   struct curl_llist_element *curr;
   struct curl_hash_element *he;
-  time_t highscore=-1;
-  time_t score;
+  long highscore=-1;
+  long score;
   struct timeval now;
   struct connectdata *conn_candidate = NULL;
   struct connectbundle *bundle;
@@ -3261,21 +3059,6 @@ Curl_oldest_idle_connection(struct Curl_easy *data)
   return conn_candidate;
 }
 
-static bool
-proxy_info_matches(const struct proxy_info* data,
-                   const struct proxy_info* needle)
-{
-  if((data->proxytype == needle->proxytype) &&
-     (data->port == needle->port) &&
-     Curl_safe_strcasecompare(data->host.name, needle->host.name) &&
-     Curl_safe_strcasecompare(data->user, needle->user) &&
-     Curl_safe_strcasecompare(data->passwd, needle->passwd))
-    return TRUE;
-
-  return FALSE;
-}
-
-
 /*
  * This function finds the connection in the connection
  * bundle that has been unused for the longest time.
@@ -3288,8 +3071,8 @@ find_oldest_idle_connection_in_bundle(struct Curl_easy *data,
                                       struct connectbundle *bundle)
 {
   struct curl_llist_element *curr;
-  time_t highscore=-1;
-  time_t score;
+  long highscore=-1;
+  long score;
   struct timeval now;
   struct connectdata *conn_candidate = NULL;
   struct connectdata *conn;
@@ -3371,7 +3154,7 @@ static int call_disconnect_if_dead(struct connectdata *conn,
 static void prune_dead_connections(struct Curl_easy *data)
 {
   struct timeval now = Curl_tvnow();
-  time_t elapsed = Curl_tvdiff(now, data->state.conn_cache->last_cleanup);
+  long elapsed = Curl_tvdiff(now, data->state.conn_cache->last_cleanup);
 
   if(elapsed >= 1000L) {
     Curl_conncache_foreach(data->state.conn_cache, data,
@@ -3439,14 +3222,19 @@ ConnectionExists(struct Curl_easy *data,
       max_pipeline_length(data->multi):0;
     size_t best_pipe_len = max_pipe_len;
     struct curl_llist_element *curr;
+    const char *hostname;
+
+    if(needle->bits.conn_to_host)
+      hostname = needle->conn_to_host.name;
+    else
+      hostname = needle->host.name;
 
     infof(data, "Found bundle for host %s: %p [%s]\n",
-          (needle->bits.conn_to_host ? needle->conn_to_host.name :
-           needle->host.name), (void *)bundle,
-          (bundle->multiuse == BUNDLE_PIPELINING ?
-           "can pipeline" :
-           (bundle->multiuse == BUNDLE_MULTIPLEX ?
-            "can multiplex" : "serially")));
+          hostname, (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) {
@@ -3491,8 +3279,6 @@ ConnectionExists(struct Curl_easy *data,
       pipeLen = check->send_pipe->size + check->recv_pipe->size;
 
       if(canPipeline) {
-        if(check->bits.protoconnstart && check->bits.close)
-          continue;
 
         if(!check->bits.multiplex) {
           /* If not multiplexing, make sure the pipe has only GET requests */
@@ -3545,19 +3331,6 @@ ConnectionExists(struct Curl_easy *data,
         }
       }
 
-#ifdef USE_UNIX_SOCKETS
-      if(needle->unix_domain_socket) {
-        if(!check->unix_domain_socket)
-          continue;
-        if(strcmp(needle->unix_domain_socket, check->unix_domain_socket))
-          continue;
-        if(needle->abstract_unix_socket != check->abstract_unix_socket)
-          continue;
-      }
-      else if(check->unix_domain_socket)
-        continue;
-#endif
-
       if((needle->handler->flags&PROTOPT_SSL) !=
          (check->handler->flags&PROTOPT_SSL))
         /* don't do mixed SSL and non-SSL connections */
@@ -3566,12 +3339,23 @@ ConnectionExists(struct Curl_easy *data,
           /* except protocols that have been upgraded via TLS */
           continue;
 
-      if(needle->bits.httpproxy != check->bits.httpproxy ||
-         needle->bits.socksproxy != check->bits.socksproxy)
+      if(needle->handler->flags&PROTOPT_SSL) {
+        if((data->set.ssl.verifypeer != check->verifypeer) ||
+           (data->set.ssl.verifyhost != check->verifyhost))
+          continue;
+      }
+
+      if(needle->bits.proxy != check->bits.proxy)
+        /* don't do mixed proxy and non-proxy connections */
         continue;
 
-      if(needle->bits.socksproxy && !proxy_info_matches(&needle->socks_proxy,
-                                                        &check->socks_proxy))
+      if(needle->bits.proxy &&
+         (needle->proxytype != check->proxytype ||
+          needle->bits.httpproxy != check->bits.httpproxy ||
+          needle->bits.tunnel_proxy != check->bits.tunnel_proxy ||
+          !Curl_raw_equal(needle->proxy.name, check->proxy.name) ||
+          needle->port != check->port))
+        /* don't mix connections that use different proxies */
         continue;
 
       if(needle->bits.conn_to_host != check->bits.conn_to_host)
@@ -3584,33 +3368,6 @@ ConnectionExists(struct Curl_easy *data,
          * connections that don't use this feature */
         continue;
 
-      if(needle->bits.httpproxy) {
-        if(!proxy_info_matches(&needle->http_proxy, &check->http_proxy))
-          continue;
-
-        if(needle->bits.tunnel_proxy != check->bits.tunnel_proxy)
-          continue;
-
-        if(needle->http_proxy.proxytype == CURLPROXY_HTTPS) {
-          /* use https proxy */
-          if(needle->handler->flags&PROTOPT_SSL) {
-            /* use double layer ssl */
-            if(!Curl_ssl_config_matches(&needle->proxy_ssl_config,
-                                        &check->proxy_ssl_config))
-              continue;
-            if(check->proxy_ssl[FIRSTSOCKET].state != ssl_connection_complete)
-              continue;
-          }
-          else {
-            if(!Curl_ssl_config_matches(&needle->ssl_config,
-                                        &check->ssl_config))
-              continue;
-            if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete)
-              continue;
-          }
-        }
-      }
-
       if(!canPipeline && check->inuse)
         /* this request can't be pipelined but the checked connection is
            already in use so we skip it */
@@ -3630,35 +3387,35 @@ ConnectionExists(struct Curl_easy *data,
         */
         if((check->localport != needle->localport) ||
            (check->localportrange != needle->localportrange) ||
-           (needle->localdev &&
-            (!check->localdev || strcmp(check->localdev, needle->localdev))))
+           !check->localdev ||
+           !needle->localdev ||
+           strcmp(check->localdev, needle->localdev))
           continue;
       }
 
       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(strcmp(needle->user, check->user) ||
-           strcmp(needle->passwd, check->passwd)) {
+        if(!strequal(needle->user, check->user) ||
+           !strequal(needle->passwd, check->passwd)) {
           /* one of them was different */
           continue;
         }
       }
 
       if(!needle->bits.httpproxy || (needle->handler->flags&PROTOPT_SSL) ||
-         needle->bits.tunnel_proxy) {
+         (needle->bits.httpproxy && needle->bits.tunnel_proxy)) {
         /* The requested connection does not use a HTTP proxy or it uses SSL or
-           it is a non-SSL protocol tunneled or it is a non-SSL protocol which
-           is allowed to be upgraded via TLS */
-
-        if((strcasecompare(needle->handler->scheme, check->handler->scheme) ||
+           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) ||
             (get_protocol_family(check->handler->protocol) ==
              needle->handler->protocol && check->tls_upgraded)) &&
-           (!needle->bits.conn_to_host || strcasecompare(
+           (!needle->bits.conn_to_host || Curl_raw_equal(
             needle->conn_to_host.name, check->conn_to_host.name)) &&
            (!needle->bits.conn_to_port ||
              needle->conn_to_port == check->conn_to_port) &&
-           strcasecompare(needle->host.name, check->host.name) &&
+           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
@@ -3700,8 +3457,8 @@ ConnectionExists(struct Curl_easy *data,
            possible. (Especially we must not reuse the same connection if
            partway through a handshake!) */
         if(wantNTLMhttp) {
-          if(strcmp(needle->user, check->user) ||
-             strcmp(needle->passwd, check->passwd))
+          if(!strequal(needle->user, check->user) ||
+             !strequal(needle->passwd, check->passwd))
             continue;
         }
         else if(check->ntlm.state != NTLMSTATE_NONE) {
@@ -3711,13 +3468,12 @@ ConnectionExists(struct Curl_easy *data,
 
         /* Same for Proxy NTLM authentication */
         if(wantProxyNTLMhttp) {
-          /* Both check->http_proxy.user and check->http_proxy.passwd can be
-           * NULL */
-          if(!check->http_proxy.user || !check->http_proxy.passwd)
+          /* Both check->proxyuser and check->proxypasswd can be NULL */
+          if(!check->proxyuser || !check->proxypasswd)
             continue;
 
-          if(strcmp(needle->http_proxy.user, check->http_proxy.user) ||
-             strcmp(needle->http_proxy.passwd, check->http_proxy.passwd))
+          if(!strequal(needle->proxyuser, check->proxyuser) ||
+             !strequal(needle->proxypasswd, check->proxypasswd))
             continue;
         }
         else if(check->proxyntlm.state != NTLMSTATE_NONE) {
@@ -3821,50 +3577,51 @@ ConnectionExists(struct Curl_easy *data,
    Note: this function's sub-functions call failf()
 
 */
-CURLcode Curl_connected_proxy(struct connectdata *conn, int sockindex)
+CURLcode Curl_connected_proxy(struct connectdata *conn,
+                              int sockindex)
 {
-  CURLcode result = CURLE_OK;
+  if(!conn->bits.proxy || sockindex)
+    /* this magic only works for the primary socket as the secondary is used
+       for FTP only and it has FTP specific magic in ftp.c */
+    return CURLE_OK;
 
-  if(conn->bits.socksproxy) {
+  switch(conn->proxytype) {
 #ifndef CURL_DISABLE_PROXY
-    /* for the secondary socket (FTP), use the "connect to host"
-     * but ignore the "connect to port" (use the secondary port)
-     */
-    const char * const host = conn->bits.httpproxy ?
-                              conn->http_proxy.host.name :
-                              conn->bits.conn_to_host ?
-                              conn->conn_to_host.name :
-                              sockindex == SECONDARYSOCKET ?
-                              conn->secondaryhostname : conn->host.name;
-    const int port = conn->bits.httpproxy ? (int)conn->http_proxy.port :
-                     sockindex == SECONDARYSOCKET ? conn->secondary_port :
-                     conn->bits.conn_to_port ? conn->conn_to_port :
-                     conn->remote_port;
-    conn->bits.socksproxy_connecting = TRUE;
-    switch(conn->socks_proxy.proxytype) {
-    case CURLPROXY_SOCKS5:
-    case CURLPROXY_SOCKS5_HOSTNAME:
-      result = Curl_SOCKS5(conn->socks_proxy.user, conn->socks_proxy.passwd,
-                         host, port, sockindex, conn);
-      break;
+  case CURLPROXY_SOCKS5:
+  case CURLPROXY_SOCKS5_HOSTNAME:
+    return Curl_SOCKS5(conn->proxyuser, conn->proxypasswd,
+                       conn->bits.conn_to_host ? conn->conn_to_host.name :
+                       conn->host.name,
+                       conn->bits.conn_to_port ? conn->conn_to_port :
+                       conn->remote_port,
+                       FIRSTSOCKET, conn);
+
+  case CURLPROXY_SOCKS4:
+    return Curl_SOCKS4(conn->proxyuser,
+                       conn->bits.conn_to_host ? conn->conn_to_host.name :
+                       conn->host.name,
+                       conn->bits.conn_to_port ? conn->conn_to_port :
+                       conn->remote_port,
+                       FIRSTSOCKET, conn, FALSE);
+
+  case CURLPROXY_SOCKS4A:
+    return Curl_SOCKS4(conn->proxyuser,
+                       conn->bits.conn_to_host ? conn->conn_to_host.name :
+                       conn->host.name,
+                       conn->bits.conn_to_port ? conn->conn_to_port :
+                       conn->remote_port,
+                       FIRSTSOCKET, conn, TRUE);
 
-    case CURLPROXY_SOCKS4:
-    case CURLPROXY_SOCKS4A:
-      result = Curl_SOCKS4(conn->socks_proxy.user, host, port, sockindex,
-                           conn);
-      break;
-
-    default:
-      failf(conn->data, "unknown proxytype option given");
-      result = CURLE_COULDNT_CONNECT;
-    } /* switch proxytype */
-    conn->bits.socksproxy_connecting = FALSE;
-#else
-  (void)sockindex;
 #endif /* CURL_DISABLE_PROXY */
-  }
+  case CURLPROXY_HTTP:
+  case CURLPROXY_HTTP_1_0:
+    /* do nothing here. handled later. */
+    break;
+  default:
+    break;
+  } /* switch proxytype */
 
-  return result;
+  return CURLE_OK;
 }
 
 /*
@@ -3875,10 +3632,7 @@ void Curl_verboseconnect(struct connectdata *conn)
 {
   if(conn->data->set.verbose)
     infof(conn->data, "Connected to %s (%s) port %ld (#%ld)\n",
-          conn->bits.socksproxy ? conn->socks_proxy.host.dispname :
-          conn->bits.httpproxy ? conn->http_proxy.host.dispname :
-          conn->bits.conn_to_host ? conn->conn_to_host.dispname :
-          conn->host.dispname,
+          conn->bits.proxy ? conn->proxy.dispname : conn->host.dispname,
           conn->ip_addr_str, conn->port, conn->connection_id);
 }
 #endif
@@ -3968,14 +3722,10 @@ CURLcode Curl_protocol_connect(struct connectdata *conn,
 
   if(!conn->bits.protoconnstart) {
 
-    result = Curl_proxy_connect(conn, FIRSTSOCKET);
+    result = Curl_proxy_connect(conn);
     if(result)
       return result;
 
-    if(CONNECT_FIRSTSOCKET_PROXY_SSL())
-      /* wait for HTTPS proxy SSL initialization to complete */
-      return CURLE_OK;
-
     if(conn->bits.tunnel_proxy && conn->bits.httpproxy &&
        (conn->tunnel_state[FIRSTSOCKET] != TUNNEL_COMPLETE))
       /* when using an HTTP tunnel proxy, await complete tunnel establishment
@@ -4005,7 +3755,7 @@ CURLcode Curl_protocol_connect(struct connectdata *conn,
  */
 static bool is_ASCII_name(const char *hostname)
 {
-  const unsigned char *ch = (const unsigned char *)hostname;
+  const unsigned char *ch = (const unsigned char*)hostname;
 
   while(*ch) {
     if(*ch++ & 0x80)
@@ -4014,15 +3764,58 @@ static bool is_ASCII_name(const char *hostname)
   return TRUE;
 }
 
+#ifdef USE_LIBIDN
+/*
+ * Check if characters in hostname is allowed in Top Level Domain.
+ */
+static bool tld_check_name(struct Curl_easy *data,
+                           const char *ace_hostname)
+{
+  size_t err_pos;
+  char *uc_name = NULL;
+  int rc;
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+  const char *tld_errmsg = "<no msg>";
+#else
+  (void)data;
+#endif
+
+  /* Convert (and downcase) ACE-name back into locale's character set */
+  rc = idna_to_unicode_lzlz(ace_hostname, &uc_name, 0);
+  if(rc != IDNA_SUCCESS)
+    return FALSE;
+
+  /* Warning: err_pos receives "the decoded character offset rather than the
+     byte position in the string." And as of libidn 1.32 that character offset
+     is for UTF-8, even if the passed in string is another locale. */
+  rc = tld_check_lz(uc_name, &err_pos, NULL);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+#ifdef HAVE_TLD_STRERROR
+  if(rc != TLD_SUCCESS)
+    tld_errmsg = tld_strerror((Tld_rc)rc);
+#endif
+  if(rc != TLD_SUCCESS)
+    infof(data, "WARNING: TLD check for %s failed; %s\n",
+          uc_name, tld_errmsg);
+#endif /* CURL_DISABLE_VERBOSE_STRINGS */
+  if(uc_name)
+     idn_free(uc_name);
+  if(rc != TLD_SUCCESS)
+    return FALSE;
+
+  return TRUE;
+}
+#endif
+
 /*
  * Perform any necessary IDN conversion of hostname
  */
-static void fix_hostname(struct connectdata *conn, struct hostname *host)
+static void fix_hostname(struct Curl_easy *data,
+                         struct connectdata *conn, struct hostname *host)
 {
   size_t len;
-  struct Curl_easy *data = conn->data;
 
-#ifndef USE_LIBIDN2
+#ifndef USE_LIBIDN
   (void)data;
   (void)conn;
 #elif defined(CURL_DISABLE_VERBOSE_STRINGS)
@@ -4040,26 +3833,25 @@ static void fix_hostname(struct connectdata *conn, struct hostname *host)
 
   /* Check name for non-ASCII and convert hostname to ACE form if we can */
   if(!is_ASCII_name(host->name)) {
-#ifdef USE_LIBIDN2
-    if(idn2_check_version(IDN2_VERSION)) {
+#ifdef USE_LIBIDN
+    if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) {
       char *ace_hostname = NULL;
-#if IDN2_VERSION_NUMBER >= 0x00140000
-      /* IDN2_NFC_INPUT: Normalize input string using normalization form C.
-         IDN2_NONTRANSITIONAL: Perform Unicode TR46 non-transitional
-         processing. */
-      int flags = IDN2_NFC_INPUT | IDN2_NONTRANSITIONAL;
-#else
-      int flags = IDN2_NFC_INPUT;
-#endif
-      int rc = idn2_lookup_ul((const char *)host->name, &ace_hostname, flags);
-      if(rc == IDN2_OK) {
-        host->encalloc = (char *)ace_hostname;
+
+      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,
-              idn2_strerror(rc));
+              Curl_idn_strerror(conn, rc));
     }
 #elif defined(USE_WIN32_IDN)
     char *ace_hostname = NULL;
@@ -4082,9 +3874,9 @@ static void fix_hostname(struct connectdata *conn, struct hostname *host)
  */
 static void free_fixed_hostname(struct hostname *host)
 {
-#if defined(USE_LIBIDN2)
+#if defined(USE_LIBIDN)
   if(host->encalloc) {
-    idn2_free(host->encalloc); /* must be freed with idn2_free() since this was
+    idn_free(host->encalloc); /* must be freed with idn_free() since this was
                                  allocated by libidn */
     host->encalloc = NULL;
   }
@@ -4125,7 +3917,7 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
   conn->tempsock[1] = CURL_SOCKET_BAD; /* no file descriptor */
   conn->connection_id = -1;    /* no ID */
   conn->port = -1; /* unknown at this point */
-  conn->remote_port = -1; /* unknown at this point */
+  conn->remote_port = -1; /* unknown */
 #if defined(USE_RECV_BEFORE_SEND_WORKAROUND) && defined(DEBUGBUILD)
   conn->postponed[0].bindsock = CURL_SOCKET_BAD; /* no file descriptor */
   conn->postponed[1].bindsock = CURL_SOCKET_BAD; /* no file descriptor */
@@ -4142,14 +3934,12 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
   conn->data = data; /* Setup the association between this connection
                         and the Curl_easy */
 
-  conn->http_proxy.proxytype = data->set.proxytype;
-  conn->socks_proxy.proxytype = CURLPROXY_SOCKS4;
+  conn->proxytype = data->set.proxytype; /* type */
 
 #ifdef CURL_DISABLE_PROXY
 
   conn->bits.proxy = FALSE;
   conn->bits.httpproxy = FALSE;
-  conn->bits.socksproxy = FALSE;
   conn->bits.proxy_user_passwd = FALSE;
   conn->bits.tunnel_proxy = FALSE;
 
@@ -4160,20 +3950,11 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
   conn->bits.proxy = (data->set.str[STRING_PROXY] &&
                       *data->set.str[STRING_PROXY]) ? TRUE : FALSE;
   conn->bits.httpproxy = (conn->bits.proxy &&
-                          (conn->http_proxy.proxytype == CURLPROXY_HTTP ||
-                           conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0 ||
-                           conn->http_proxy.proxytype == CURLPROXY_HTTPS)) ?
-                           TRUE : FALSE;
-  conn->bits.socksproxy = (conn->bits.proxy &&
-                           !conn->bits.httpproxy) ? TRUE : FALSE;
-
-  if(data->set.str[STRING_PRE_PROXY] && *data->set.str[STRING_PRE_PROXY]) {
-    conn->bits.proxy = TRUE;
-    conn->bits.socksproxy = TRUE;
-  }
-
-  conn->bits.proxy_user_passwd =
-    (data->set.str[STRING_PROXYUSERNAME]) ? TRUE : FALSE;
+                          (conn->proxytype == CURLPROXY_HTTP ||
+                           conn->proxytype == CURLPROXY_HTTP_1_0)) ?
+                          TRUE : FALSE;
+  conn->bits.proxy_user_passwd = (data->set.str[STRING_PROXYUSERNAME]) ?
+                                 TRUE : FALSE;
   conn->bits.tunnel_proxy = data->set.tunnel_thru_httpproxy;
 
 #endif /* CURL_DISABLE_PROXY */
@@ -4182,13 +3963,8 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
   conn->bits.ftp_use_epsv = data->set.ftp_use_epsv;
   conn->bits.ftp_use_eprt = data->set.ftp_use_eprt;
 
-  conn->ssl_config.verifystatus = data->set.ssl.primary.verifystatus;
-  conn->ssl_config.verifypeer = data->set.ssl.primary.verifypeer;
-  conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost;
-  conn->proxy_ssl_config.verifystatus =
-    data->set.proxy_ssl.primary.verifystatus;
-  conn->proxy_ssl_config.verifypeer = data->set.proxy_ssl.primary.verifypeer;
-  conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost;
+  conn->verifypeer = data->set.ssl.verifypeer;
+  conn->verifyhost = data->set.ssl.verifyhost;
 
   conn->ip_version = data->set.ipver;
 
@@ -4203,7 +3979,7 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
   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));
+    conn->master_buffer = calloc(BUFSIZE, sizeof (char));
     if(!conn->master_buffer)
       goto error;
   }
@@ -4258,7 +4034,7 @@ static CURLcode findprotocol(struct Curl_easy *data,
      variables based on the URL. Now that the handler may be changed later
      when the protocol specific setup function is called. */
   for(pp = protocols; (p = *pp) != NULL; pp++) {
-    if(strcasecompare(p->scheme, protostr)) {
+    if(Curl_raw_equal(p->scheme, protostr)) {
       /* Protocol found in table. Check if allowed */
       if(!(data->set.allowed_protocols & p->protocol))
         /* nope, get out */
@@ -4302,13 +4078,11 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
   char *fragment;
   char *path = data->state.path;
   char *query;
-  int i;
   int rc;
+  char protobuf[16] = "";
   const char *protop = "";
   CURLcode result;
   bool rebuild_url = FALSE;
-  bool url_has_scheme = FALSE;
-  char protobuf[16];
 
   *prot_missing = FALSE;
 
@@ -4327,47 +4101,10 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
    * proxy -- and we don't know if we will need to use SSL until we parse the
    * url ...
    ************************************************************/
-  if(data->change.url[0] == ':') {
-    failf(data, "Bad URL, colon is first character");
-    return CURLE_URL_MALFORMAT;
-  }
-
-  /* Make sure we don't mistake a drive letter for a scheme, for example:
-     curld --proto-default file c:/foo/bar.txt */
-  if((('a' <= data->change.url[0] && data->change.url[0] <= 'z') ||
-      ('A' <= data->change.url[0] && data->change.url[0] <= 'Z')) &&
-     data->change.url[1] == ':' && data->set.str[STRING_DEFAULT_PROTOCOL] &&
-     strcasecompare(data->set.str[STRING_DEFAULT_PROTOCOL], "file")) {
-    ; /* do nothing */
-  }
-  else { /* check for a scheme */
-    for(i = 0; i < 16 && data->change.url[i]; ++i) {
-      if(data->change.url[i] == '/')
-        break;
-      if(data->change.url[i] == ':') {
-        url_has_scheme = TRUE;
-        break;
-      }
-    }
-  }
-
-  /* handle the file: scheme */
-  if((url_has_scheme && strncasecompare(data->change.url, "file:", 5)) ||
-     (!url_has_scheme && data->set.str[STRING_DEFAULT_PROTOCOL] &&
-      strcasecompare(data->set.str[STRING_DEFAULT_PROTOCOL], "file"))) {
-    bool path_has_drive = FALSE;
-
-    if(url_has_scheme)
-      rc = sscanf(data->change.url, "%*15[^\n/:]:%[^\n]", path);
-    else
-      rc = sscanf(data->change.url, "%[^\n]", path);
-
-    if(rc != 1) {
-      failf(data, "Bad URL");
-      return CURLE_URL_MALFORMAT;
-    }
-
-    if(url_has_scheme && path[0] == '/' && path[1] == '/') {
+  if((2 == sscanf(data->change.url, "%15[^:]:%[^\n]",
+                  protobuf, path)) &&
+     Curl_raw_equal(protobuf, "file")) {
+    if(path[0] == '/' && path[1] == '/') {
       /* Allow omitted hostname (e.g. file:/<path>).  This is not strictly
        * speaking a valid file: URL by RFC 1738, but treating file:/<path> as
        * file://localhost/<path> is similar to how other schemes treat missing
@@ -4377,62 +4114,40 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
          memory areas overlap! */
       memmove(path, path + 2, strlen(path + 2)+1);
     }
-
-    /* the path may start with a drive letter. for backwards compatibility
-       we skip some processing on those paths. */
-    path_has_drive = (('a' <= path[0] && path[0] <= 'z') ||
-                      ('A' <= path[0] && path[0] <= 'Z')) && path[1] == ':';
-
     /*
      * we deal with file://<host>/<path> differently since it supports no
      * hostname other than "localhost" and "127.0.0.1", which is unique among
      * the URL protocols specified in RFC 1738
      */
-    if(path[0] != '/' && !path_has_drive) {
-      /* the URL includes a host name, it must match "localhost" or
-         "127.0.0.1" to be valid */
-      char *ptr;
-      if(!checkprefix("localhost/", path) &&
-         !checkprefix("127.0.0.1/", path)) {
-        failf(data, "Invalid file://hostname/, "
-                    "expected localhost or 127.0.0.1 or none");
-        return CURLE_URL_MALFORMAT;
-      }
-      ptr = &path[9]; /* now points to the slash after the host */
+    if(path[0] != '/') {
+      /* the URL included a host name, we ignore host names in file:// URLs
+         as the standards don't define what to do with them */
+      char *ptr=strchr(path, '/');
+      if(ptr) {
+        /* there was a slash present
 
-      /* there was a host name and slash present
+           RFC1738 (section 3.1, page 5) says:
 
-         RFC1738 (section 3.1, page 5) says:
+           The rest of the locator consists of data specific to the scheme,
+           and is known as the "url-path". It supplies the details of how the
+           specified resource can be accessed. Note that the "/" between the
+           host (or port) and the url-path is NOT part of the url-path.
 
-         The rest of the locator consists of data specific to the scheme,
-         and is known as the "url-path". It supplies the details of how the
-         specified resource can be accessed. Note that the "/" between the
-         host (or port) and the url-path is NOT part of the url-path.
-
-         As most agents use file://localhost/foo to get '/foo' although the
-         slash preceding foo is a separator and not a slash for the path,
-         a URL as file://localhost//foo must be valid as well, to refer to
-         the same file with an absolute path.
-      */
-
-      if('/' == ptr[1])
-        /* if there was two slashes, we skip the first one as that is then
-           used truly as a separator */
-        ptr++;
+           As most agents use file://localhost/foo to get '/foo' although the
+           slash preceding foo is a separator and not a slash for the path,
+           a URL as file://localhost//foo must be valid as well, to refer to
+           the same file with an absolute path.
+        */
 
-      /* This cannot be made with strcpy, as the memory chunks overlap! */
-      memmove(path, ptr, strlen(ptr)+1);
+        if(ptr[1] && ('/' == ptr[1]))
+          /* if there was two slashes, we skip the first one as that is then
+             used truly as a separator */
+          ptr++;
 
-      path_has_drive = (('a' <= path[0] && path[0] <= 'z') ||
-                        ('A' <= path[0] && path[0] <= 'Z')) && path[1] == ':';
-    }
-
-#if !defined(MSDOS) && !defined(WIN32) && !defined(__CYGWIN__)
-    if(path_has_drive) {
-      failf(data, "File drive letters are only accepted in MSDOS/Windows.");
-      return CURLE_URL_MALFORMAT;
+        /* This cannot be made with strcpy, as the memory chunks overlap! */
+        memmove(path, ptr, strlen(ptr)+1);
+      }
     }
-#endif
 
     protop = "file"; /* protocol string */
   }
@@ -4442,7 +4157,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
     path[0]=0;
 
     rc = sscanf(data->change.url,
-                "%15[^\n/:]:%3[/]%[^\n/?#]%[^\n]",
+                "%15[^\n:]:%3[/]%[^\n/?]%[^\n]",
                 protobuf, slashbuf, conn->host.name, path);
     if(2 == rc) {
       failf(data, "Bad URL");
@@ -4454,7 +4169,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
        * The URL was badly formatted, let's try the browser-style _without_
        * protocol specified like 'http://'.
        */
-      rc = sscanf(data->change.url, "%[^\n/?#]%[^\n]", conn->host.name, path);
+      rc = sscanf(data->change.url, "%[^\n/?]%[^\n]", conn->host.name, path);
       if(1 > rc) {
         /*
          * We couldn't even get this format.
@@ -4559,10 +4274,10 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
   }
 
   /* If the URL is malformatted (missing a '/' after hostname before path) we
-   * insert a slash here. The only letters except '/' that can start a path is
-   * '?' and '#' - as controlled by the two sscanf() patterns above.
+   * insert a slash here. The only letter except '/' we accept to start a path
+   * is '?'.
    */
-  if(path[0] != '/') {
+  if(path[0] == '?') {
     /* We need this function to deal with overlapping memory areas. We know
        that the memory area 'path' points to is 'urllen' bytes big and that
        is bigger than the path. Use +1 to move the zero byte too. */
@@ -4627,10 +4342,6 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
     data->change.url_alloc = TRUE; /* free this later */
   }
 
-  result = findprotocol(data, conn, protop);
-  if(result)
-    return result;
-
   /*
    * Parse the login details from the URL and strip them out of
    * the host name
@@ -4717,7 +4428,8 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
    *   conn->host.name is B
    *   data->state.path is /C
    */
-  return CURLE_OK;
+
+  return findprotocol(data, conn, protop);
 }
 
 /*
@@ -4816,7 +4528,7 @@ void Curl_free_request_state(struct Curl_easy *data)
 * Checks if the host is in the noproxy list. returns true if it matches
 * and therefore the proxy should NOT be used.
 ****************************************************************/
-static bool check_noproxy(const char *name, const char *no_proxy)
+static bool check_noproxy(const char* name, const char* no_proxy)
 {
   /* no_proxy=domain1.dom,host.domain2.dom
    *   (a comma-separated list of hosts which should
@@ -4825,13 +4537,13 @@ static bool check_noproxy(const char *name, const char *no_proxy)
    */
   size_t tok_start;
   size_t tok_end;
-  const char *separator = ", ";
+  const charseparator = ", ";
   size_t no_proxy_len;
   size_t namelen;
   char *endptr;
 
   if(no_proxy && no_proxy[0]) {
-    if(strcasecompare("*", no_proxy)) {
+    if(Curl_raw_equal("*", no_proxy)) {
       return TRUE;
     }
 
@@ -4869,7 +4581,7 @@ static bool check_noproxy(const char *name, const char *no_proxy)
       if((tok_end - tok_start) <= namelen) {
         /* Match the last part of the name to the domain we are checking. */
         const char *checkn = name + namelen - (tok_end - tok_start);
-        if(strncasecompare(no_proxy + tok_start, checkn,
+        if(Curl_raw_nequal(no_proxy + tok_start, checkn,
                            tok_end - tok_start)) {
           if((tok_end - tok_start) == namelen || *(checkn - 1) == '.') {
             /* We either have an exact match, or the previous character is a .
@@ -4895,6 +4607,7 @@ static char *detect_proxy(struct connectdata *conn)
 {
   char *proxy = NULL;
 
+#ifndef CURL_DISABLE_HTTP
   /* If proxy was not specified, we check for default proxy environment
    * variables, to enable i.e Lynx compliance:
    *
@@ -4912,46 +4625,62 @@ static char *detect_proxy(struct connectdata *conn)
    * For compatibility, the all-uppercase versions of these variables are
    * checked if the lowercase versions don't exist.
    */
+  char *no_proxy=NULL;
   char proxy_env[128];
-  const char *protop = conn->handler->scheme;
-  char *envp = proxy_env;
-  char *prox;
 
-  /* Now, build <protocol>_proxy and check for such a one to use */
-  while(*protop)
-    *envp++ = (char)tolower((int)*protop++);
+  no_proxy=curl_getenv("no_proxy");
+  if(!no_proxy)
+    no_proxy=curl_getenv("NO_PROXY");
+
+  if(!check_noproxy(conn->host.name, no_proxy)) {
+    /* It was not listed as without proxy */
+    const char *protop = conn->handler->scheme;
+    char *envp = proxy_env;
+    char *prox;
 
-  /* append _proxy */
-  strcpy(envp, "_proxy");
+    /* Now, build <protocol>_proxy and check for such a one to use */
+    while(*protop)
+      *envp++ = (char)tolower((int)*protop++);
 
-  /* read the protocol proxy: */
-  prox=curl_getenv(proxy_env);
+    /* append _proxy */
+    strcpy(envp, "_proxy");
 
-  /*
-   * We don't try the uppercase version of HTTP_PROXY because of
-   * security reasons:
-   *
-   * When curl is used in a webserver application
-   * environment (cgi or php), this environment variable can
-   * be controlled by the web server user by setting the
-   * http header 'Proxy:' to some value.
-   *
-   * This can cause 'internal' http/ftp requests to be
-   * arbitrarily redirected by any external attacker.
-   */
-  if(!prox && !strcasecompare("http_proxy", proxy_env)) {
-    /* There was no lowercase variable, try the uppercase version: */
-    Curl_strntoupper(proxy_env, proxy_env, sizeof(proxy_env));
+    /* read the protocol proxy: */
     prox=curl_getenv(proxy_env);
-  }
 
-  if(prox)
-    proxy = prox; /* use this */
-  else {
-    proxy = curl_getenv("all_proxy"); /* default proxy to use */
-    if(!proxy)
-      proxy=curl_getenv("ALL_PROXY");
-  }
+    /*
+     * We don't try the uppercase version of HTTP_PROXY because of
+     * security reasons:
+     *
+     * When curl is used in a webserver application
+     * environment (cgi or php), this environment variable can
+     * be controlled by the web server user by setting the
+     * http header 'Proxy:' to some value.
+     *
+     * This can cause 'internal' http/ftp requests to be
+     * arbitrarily redirected by any external attacker.
+     */
+    if(!prox && !Curl_raw_equal("http_proxy", proxy_env)) {
+      /* There was no lowercase variable, try the uppercase version: */
+      Curl_strntoupper(proxy_env, proxy_env, sizeof(proxy_env));
+      prox=curl_getenv(proxy_env);
+    }
+
+    if(prox)
+      proxy = prox; /* use this */
+    else {
+      proxy = curl_getenv("all_proxy"); /* default proxy to use */
+      if(!proxy)
+        proxy=curl_getenv("ALL_PROXY");
+    }
+  } /* if(!check_noproxy(conn->host.name, no_proxy)) - it wasn't specified
+       non-proxy */
+  free(no_proxy);
+
+#else /* !CURL_DISABLE_HTTP */
+
+  (void)conn;
+#endif /* CURL_DISABLE_HTTP */
 
   return proxy;
 }
@@ -4962,8 +4691,7 @@ static char *detect_proxy(struct connectdata *conn)
  * that may exist registered to the same proxy host.
  */
 static CURLcode parse_proxy(struct Curl_easy *data,
-                            struct connectdata *conn, char *proxy,
-                            curl_proxytype proxytype)
+                            struct connectdata *conn, char *proxy)
 {
   char *prox_portno;
   char *endofprot;
@@ -4972,10 +4700,6 @@ static CURLcode parse_proxy(struct Curl_easy *data,
   char *proxyptr;
   char *portptr;
   char *atsign;
-  long port = -1;
-  char *proxyuser = NULL;
-  char *proxypasswd = NULL;
-  bool sockstype;
 
   /* We do the proxy host string parsing here. We want the host name and the
    * port name. Accept a protocol:// prefix
@@ -4985,16 +4709,14 @@ static CURLcode parse_proxy(struct Curl_easy *data,
   endofprot = strstr(proxy, "://");
   if(endofprot) {
     proxyptr = endofprot+3;
-    if(checkprefix("https", proxy))
-      proxytype = CURLPROXY_HTTPS;
-    else if(checkprefix("socks5h", proxy))
-      proxytype = CURLPROXY_SOCKS5_HOSTNAME;
+    if(checkprefix("socks5h", proxy))
+      conn->proxytype = CURLPROXY_SOCKS5_HOSTNAME;
     else if(checkprefix("socks5", proxy))
-      proxytype = CURLPROXY_SOCKS5;
+      conn->proxytype = CURLPROXY_SOCKS5;
     else if(checkprefix("socks4a", proxy))
-      proxytype = CURLPROXY_SOCKS4A;
+      conn->proxytype = CURLPROXY_SOCKS4A;
     else if(checkprefix("socks4", proxy) || checkprefix("socks", proxy))
-      proxytype = CURLPROXY_SOCKS4;
+      conn->proxytype = CURLPROXY_SOCKS4;
     else if(checkprefix("http:", proxy))
       ; /* leave it as HTTP or HTTP/1.0 */
     else {
@@ -5006,28 +4728,51 @@ static CURLcode parse_proxy(struct Curl_easy *data,
   else
     proxyptr = proxy; /* No xxx:// head: It's a HTTP proxy */
 
-#ifndef HTTPS_PROXY_SUPPORT
-  if(proxytype == CURLPROXY_HTTPS) {
-    failf(data, "Unsupported proxy \'%s\'"
-                ", libcurl is built without the HTTPS-proxy support.", proxy);
-    return CURLE_NOT_BUILT_IN;
-  }
-#endif
-
-  sockstype = proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
-              proxytype == CURLPROXY_SOCKS5 ||
-              proxytype == CURLPROXY_SOCKS4A ||
-              proxytype == CURLPROXY_SOCKS4;
-
   /* Is there a username and password given in this proxy url? */
   atsign = strchr(proxyptr, '@');
   if(atsign) {
+    char *proxyuser = NULL;
+    char *proxypasswd = NULL;
     CURLcode result =
       parse_login_details(proxyptr, atsign - proxyptr,
-                              &proxyuser, &proxypasswd, NULL);
+                          &proxyuser, &proxypasswd, NULL);
+    if(!result) {
+      /* found user and password, rip them out.  note that we are
+         unescaping them, as there is otherwise no way to have a
+         username or password with reserved characters like ':' in
+         them. */
+      Curl_safefree(conn->proxyuser);
+      if(proxyuser && strlen(proxyuser) < MAX_CURL_USER_LENGTH)
+        conn->proxyuser = curl_easy_unescape(data, proxyuser, 0, NULL);
+      else
+        conn->proxyuser = strdup("");
+
+      if(!conn->proxyuser)
+        result = CURLE_OUT_OF_MEMORY;
+      else {
+        Curl_safefree(conn->proxypasswd);
+        if(proxypasswd && strlen(proxypasswd) < MAX_CURL_PASSWORD_LENGTH)
+          conn->proxypasswd = curl_easy_unescape(data, proxypasswd, 0, NULL);
+        else
+          conn->proxypasswd = strdup("");
+
+        if(!conn->proxypasswd)
+          result = CURLE_OUT_OF_MEMORY;
+      }
+
+      if(!result) {
+        conn->bits.proxy_user_passwd = TRUE; /* enable it */
+        atsign++; /* the right side of the @-letter */
+
+        proxyptr = atsign; /* now use this instead */
+      }
+    }
+
+    free(proxyuser);
+    free(proxypasswd);
+
     if(result)
       return result;
-    proxyptr = atsign + 1;
   }
 
   /* start scanning for port number at this point */
@@ -5064,7 +4809,7 @@ static CURLcode parse_proxy(struct Curl_easy *data,
   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 */
@@ -5098,59 +4843,15 @@ static CURLcode parse_proxy(struct Curl_easy *data,
     if(data->set.proxyport)
       /* None given in the proxy string, then get the default one if it is
          given */
-      port = data->set.proxyport;
-    else {
-      if(proxytype == CURLPROXY_HTTPS)
-        port = CURL_DEFAULT_HTTPS_PROXY_PORT;
-      else
-        port = CURL_DEFAULT_PROXY_PORT;
-    }
+      conn->port = data->set.proxyport;
   }
 
-  if(*proxyptr) {
-    struct proxy_info *proxyinfo =
-      sockstype ? &conn->socks_proxy : &conn->http_proxy;
-    proxyinfo->proxytype = proxytype;
-
-    if(proxyuser) {
-      /* found user and password, rip them out.  note that we are unescaping
-         them, as there is otherwise no way to have a username or password
-         with reserved characters like ':' in them. */
-      Curl_safefree(proxyinfo->user);
-      proxyinfo->user = curl_easy_unescape(data, proxyuser, 0, NULL);
-
-      if(!proxyinfo->user)
-        return CURLE_OUT_OF_MEMORY;
-
-      Curl_safefree(proxyinfo->passwd);
-      if(proxypasswd && strlen(proxypasswd) < MAX_CURL_PASSWORD_LENGTH)
-        proxyinfo->passwd = curl_easy_unescape(data, proxypasswd, 0, NULL);
-      else
-        proxyinfo->passwd = strdup("");
-
-      if(!proxyinfo->passwd)
-        return CURLE_OUT_OF_MEMORY;
+  /* now, clone the cleaned proxy host name */
+  conn->proxy.rawalloc = strdup(proxyptr);
+  conn->proxy.name = conn->proxy.rawalloc;
 
-      conn->bits.proxy_user_passwd = TRUE; /* enable it */
-    }
-
-    if(port >= 0) {
-      proxyinfo->port = port;
-      if(conn->port < 0 || sockstype || !conn->socks_proxy.host.rawalloc)
-        conn->port = port;
-    }
-
-    /* now, clone the cleaned proxy host name */
-    Curl_safefree(proxyinfo->host.rawalloc);
-    proxyinfo->host.rawalloc = strdup(proxyptr);
-    proxyinfo->host.name = proxyinfo->host.rawalloc;
-
-    if(!proxyinfo->host.rawalloc)
-      return CURLE_OUT_OF_MEMORY;
-  }
-
-  Curl_safefree(proxyuser);
-  Curl_safefree(proxypasswd);
+  if(!conn->proxy.rawalloc)
+    return CURLE_OUT_OF_MEMORY;
 
   return CURLE_OK;
 }
@@ -5163,7 +4864,6 @@ static CURLcode parse_proxy_auth(struct Curl_easy *data,
 {
   char proxyuser[MAX_CURL_USER_LENGTH]="";
   char proxypasswd[MAX_CURL_PASSWORD_LENGTH]="";
-  CURLcode result;
 
   if(data->set.str[STRING_PROXYUSERNAME] != NULL) {
     strncpy(proxyuser, data->set.str[STRING_PROXYUSERNAME],
@@ -5176,12 +4876,15 @@ static CURLcode parse_proxy_auth(struct Curl_easy *data,
     proxypasswd[MAX_CURL_PASSWORD_LENGTH-1] = '\0'; /*To be on safe side*/
   }
 
-  result = Curl_urldecode(data, proxyuser, 0, &conn->http_proxy.user, NULL,
-                          FALSE);
-  if(!result)
-    result = Curl_urldecode(data, proxypasswd, 0, &conn->http_proxy.passwd,
-                            NULL, FALSE);
-  return result;
+  conn->proxyuser = curl_easy_unescape(data, proxyuser, 0, NULL);
+  if(!conn->proxyuser)
+    return CURLE_OUT_OF_MEMORY;
+
+  conn->proxypasswd = curl_easy_unescape(data, proxypasswd, 0, NULL);
+  if(!conn->proxypasswd)
+    return CURLE_OUT_OF_MEMORY;
+
+  return CURLE_OK;
 }
 #endif /* CURL_DISABLE_PROXY */
 
@@ -5223,7 +4926,6 @@ static CURLcode parse_url_login(struct Curl_easy *data,
   DEBUGASSERT(!**user);
   DEBUGASSERT(!**passwd);
   DEBUGASSERT(!**options);
-  DEBUGASSERT(conn->handler);
 
   if(!ptr)
     goto out;
@@ -5242,12 +4944,9 @@ static CURLcode parse_url_login(struct Curl_easy *data,
   if(data->set.use_netrc == CURL_NETRC_REQUIRED)
     goto out;
 
-  /* We could use the login information in the URL so extract it. Only parse
-     options if the handler says we should. */
+  /* We could use the login information in the URL so extract it */
   result = parse_login_details(login, ptr - login - 1,
-                               &userp, &passwdp,
-                               (conn->handler->flags & PROTOPT_URLOPTIONS)?
-                               &optionsp:NULL);
+                               &userp, &passwdp, &optionsp);
   if(result)
     goto out;
 
@@ -5259,8 +4958,9 @@ static CURLcode parse_url_login(struct Curl_easy *data,
     conn->bits.user_passwd = TRUE; /* enable user+password */
 
     /* Decode the user */
-    result = Curl_urldecode(data, userp, 0, &newname, NULL, FALSE);
-    if(result) {
+    newname = curl_easy_unescape(data, userp, 0, NULL);
+    if(!newname) {
+      result = CURLE_OUT_OF_MEMORY;
       goto out;
     }
 
@@ -5270,9 +4970,9 @@ static CURLcode parse_url_login(struct Curl_easy *data,
 
   if(passwdp) {
     /* We have a password in the URL so decode it */
-    char *newpasswd;
-    result = Curl_urldecode(data, passwdp, 0, &newpasswd, NULL, FALSE);
-    if(result) {
+    char *newpasswd = curl_easy_unescape(data, passwdp, 0, NULL);
+    if(!newpasswd) {
+      result = CURLE_OUT_OF_MEMORY;
       goto out;
     }
 
@@ -5282,9 +4982,9 @@ static CURLcode parse_url_login(struct Curl_easy *data,
 
   if(optionsp) {
     /* We have an options list in the URL so decode it */
-    char *newoptions;
-    result = Curl_urldecode(data, optionsp, 0, &newoptions, NULL, FALSE);
-    if(result) {
+    char *newoptions = curl_easy_unescape(data, optionsp, 0, NULL);
+    if(!newoptions) {
+      result = CURLE_OUT_OF_MEMORY;
       goto out;
     }
 
@@ -5536,16 +5236,11 @@ static CURLcode parse_remote_port(struct Curl_easy *data,
       *portptr = '\0'; /* cut off the name there */
       conn->remote_port = curlx_ultous(port);
     }
-    else {
-      if(rest[0]) {
-        failf(data, "Illegal port number");
-        return CURLE_URL_MALFORMAT;
-      }
+    else
       /* Browser behavior adaptation. If there's a colon with no digits after,
          just cut off the name there which makes us ignore the colon and just
          use the default port. Firefox and Chrome both do that. */
       *portptr = '\0';
-    }
   }
 
   /* only if remote_port was not already parsed off the URL we use the
@@ -5674,10 +5369,6 @@ static CURLcode parse_connect_to_host_port(struct Curl_easy *data,
   char *portptr;
   int port = -1;
 
-#if defined(CURL_DISABLE_VERBOSE_STRINGS)
-  (void) data;
-#endif
-
   *hostname_result = NULL;
   *port_result = -1;
 
@@ -5769,9 +5460,6 @@ static CURLcode parse_connect_to_string(struct Curl_easy *data,
   int host_match = FALSE;
   int port_match = FALSE;
 
-  *host_result = NULL;
-  *port_result = -1;
-
   if(*ptr == ':') {
     /* an empty hostname always matches */
     host_match = TRUE;
@@ -5787,8 +5475,7 @@ static CURLcode parse_connect_to_string(struct Curl_easy *data,
     if(!hostname_to_match)
       return CURLE_OUT_OF_MEMORY;
     hostname_to_match_len = strlen(hostname_to_match);
-    host_match = strncasecompare(ptr, hostname_to_match,
-                                 hostname_to_match_len);
+    host_match = curl_strnequal(ptr, hostname_to_match, hostname_to_match_len);
     free(hostname_to_match);
     ptr += hostname_to_match_len;
 
@@ -5834,25 +5521,28 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
 {
   CURLcode result = CURLE_OK;
   char *host = NULL;
-  int port = -1;
+  int port = 0;
 
-  while(conn_to_host && !host && port == -1) {
+  while(conn_to_host && !host) {
     result = parse_connect_to_string(data, conn, conn_to_host->data,
                                      &host, &port);
     if(result)
       return result;
 
     if(host && *host) {
+      bool ipv6host;
       conn->conn_to_host.rawalloc = host;
       conn->conn_to_host.name = host;
       conn->bits.conn_to_host = TRUE;
 
-      infof(data, "Connecting to hostname: %s\n", host);
+      ipv6host = strchr(host, ':') != NULL;
+      infof(data, "Connecting to hostname: %s%s%s\n",
+            ipv6host ? "[" : "", host, ipv6host ? "]" : "");
     }
     else {
       /* no "connect to host" */
       conn->bits.conn_to_host = FALSE;
-      Curl_safefree(host);
+      free(host);
     }
 
     if(port >= 0) {
@@ -5863,7 +5553,6 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
     else {
       /* no "connect to port" */
       conn->bits.conn_to_port = FALSE;
-      port = -1;
     }
 
     conn_to_host = conn_to_host->next;
@@ -5880,7 +5569,7 @@ static CURLcode resolve_server(struct Curl_easy *data,
                                bool *async)
 {
   CURLcode result=CURLE_OK;
-  time_t timeout_ms = Curl_timeleft(data, NULL, TRUE);
+  long timeout_ms = Curl_timeleft(data, NULL, TRUE);
 
   /*************************************************************
    * Resolve the name of the server or proxy
@@ -5897,37 +5586,32 @@ static CURLcode resolve_server(struct Curl_easy *data,
     struct Curl_dns_entry *hostaddr;
 
 #ifdef USE_UNIX_SOCKETS
-    if(conn->unix_domain_socket) {
+    if(data->set.str[STRING_UNIX_SOCKET_PATH]) {
       /* Unix domain sockets are local. The host gets ignored, just use the
        * specified domain socket address. Do not cache "DNS entries". There is
        * no DNS involved and we already have the filesystem path available */
-      const char *path = conn->unix_domain_socket;
+      const char *path = data->set.str[STRING_UNIX_SOCKET_PATH];
 
       hostaddr = calloc(1, sizeof(struct Curl_dns_entry));
       if(!hostaddr)
         result = CURLE_OUT_OF_MEMORY;
+      else if((hostaddr->addr = Curl_unix2addr(path)) != NULL)
+        hostaddr->inuse++;
       else {
-        bool longpath = FALSE;
-        hostaddr->addr = Curl_unix2addr(path, &longpath,
-                                        conn->abstract_unix_socket);
-        if(hostaddr->addr)
-          hostaddr->inuse++;
-        else {
-          /* Long paths are not supported for now */
-          if(longpath) {
-            failf(data, "Unix socket path too long: '%s'", path);
-            result = CURLE_COULDNT_RESOLVE_HOST;
-          }
-          else
-            result = CURLE_OUT_OF_MEMORY;
-          free(hostaddr);
-          hostaddr = NULL;
+        /* Long paths are not supported for now */
+        if(strlen(path) >= sizeof(((struct sockaddr_un *)0)->sun_path)) {
+          failf(data, "Unix socket path too long: '%s'", path);
+          result = CURLE_COULDNT_RESOLVE_HOST;
         }
+        else
+          result = CURLE_OUT_OF_MEMORY;
+        free(hostaddr);
+        hostaddr = NULL;
       }
     }
     else
 #endif
-    if(!conn->bits.proxy) {
+    if(!conn->proxy.name || !*conn->proxy.name) {
       struct hostname *connhost;
       if(conn->bits.conn_to_host)
         connhost = &conn->conn_to_host;
@@ -5939,7 +5623,7 @@ static CURLcode resolve_server(struct Curl_easy *data,
       if(conn->bits.conn_to_port)
         conn->port = conn->conn_to_port;
       else
-        conn->port = conn->remote_port;
+        conn->port = conn->remote_port; /* it is the same port */
 
       /* Resolve target host right on */
       rc = Curl_resolv_timeout(conn, connhost->name, (int)conn->port,
@@ -5959,11 +5643,8 @@ static CURLcode resolve_server(struct Curl_easy *data,
     else {
       /* This is a proxy that hasn't been resolved yet. */
 
-      struct hostname * const host = conn->bits.socksproxy ?
-        &conn->socks_proxy.host : &conn->http_proxy.host;
-
       /* resolve proxy */
-      rc = Curl_resolv_timeout(conn, host->name, (int)conn->port,
+      rc = Curl_resolv_timeout(conn, conn->proxy.name, (int)conn->port,
                                &hostaddr, timeout_ms);
 
       if(rc == CURLRESOLV_PENDING)
@@ -5973,7 +5654,7 @@ static CURLcode resolve_server(struct Curl_easy *data,
         result = CURLE_OPERATION_TIMEDOUT;
 
       else if(!hostaddr) {
-        failf(data, "Couldn't resolve proxy '%s'", host->dispname);
+        failf(data, "Couldn't resolve proxy '%s'", conn->proxy.dispname);
         result = CURLE_COULDNT_RESOLVE_PROXY;
         /* don't return yet, we need to clean up the timeout first */
       }
@@ -5993,16 +5674,12 @@ static CURLcode resolve_server(struct Curl_easy *data,
 static void reuse_conn(struct connectdata *old_conn,
                        struct connectdata *conn)
 {
-  free_fixed_hostname(&old_conn->http_proxy.host);
-  free_fixed_hostname(&old_conn->socks_proxy.host);
-
-  free(old_conn->http_proxy.host.rawalloc);
-  free(old_conn->socks_proxy.host.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 */
-  Curl_free_primary_ssl_config(&old_conn->ssl_config);
-  Curl_free_primary_ssl_config(&old_conn->proxy_ssl_config);
+  Curl_free_ssl_config(&old_conn->ssl_config);
 
   conn->data = old_conn->data;
 
@@ -6022,18 +5699,12 @@ static void reuse_conn(struct connectdata *old_conn,
   conn->bits.proxy_user_passwd = old_conn->bits.proxy_user_passwd;
   if(conn->bits.proxy_user_passwd) {
     /* use the new proxy user name and proxy password though */
-    Curl_safefree(conn->http_proxy.user);
-    Curl_safefree(conn->socks_proxy.user);
-    Curl_safefree(conn->http_proxy.passwd);
-    Curl_safefree(conn->socks_proxy.passwd);
-    conn->http_proxy.user = old_conn->http_proxy.user;
-    conn->socks_proxy.user = old_conn->socks_proxy.user;
-    conn->http_proxy.passwd = old_conn->http_proxy.passwd;
-    conn->socks_proxy.passwd = old_conn->socks_proxy.passwd;
-    old_conn->http_proxy.user = NULL;
-    old_conn->socks_proxy.user = NULL;
-    old_conn->http_proxy.passwd = NULL;
-    old_conn->socks_proxy.passwd = NULL;
+    Curl_safefree(conn->proxyuser);
+    Curl_safefree(conn->proxypasswd);
+    conn->proxyuser = old_conn->proxyuser;
+    conn->proxypasswd = old_conn->proxypasswd;
+    old_conn->proxyuser = NULL;
+    old_conn->proxypasswd = NULL;
   }
 
   /* host can change, when doing keepalive with a proxy or if the case is
@@ -6059,10 +5730,8 @@ static void reuse_conn(struct connectdata *old_conn,
 
   Curl_safefree(old_conn->user);
   Curl_safefree(old_conn->passwd);
-  Curl_safefree(old_conn->http_proxy.user);
-  Curl_safefree(old_conn->socks_proxy.user);
-  Curl_safefree(old_conn->http_proxy.passwd);
-  Curl_safefree(old_conn->socks_proxy.passwd);
+  Curl_safefree(old_conn->proxyuser);
+  Curl_safefree(old_conn->proxypasswd);
   Curl_safefree(old_conn->localdev);
 
   Curl_llist_destroy(old_conn->send_pipe, NULL);
@@ -6072,10 +5741,6 @@ static void reuse_conn(struct connectdata *old_conn,
   old_conn->recv_pipe = NULL;
 
   Curl_safefree(old_conn->master_buffer);
-
-#ifdef USE_UNIX_SOCKETS
-  Curl_safefree(old_conn->unix_domain_socket);
-#endif
 }
 
 /**
@@ -6107,8 +5772,6 @@ static CURLcode create_conn(struct Curl_easy *data,
   char *options = NULL;
   bool reuse;
   char *proxy = NULL;
-  char *socksproxy = NULL;
-  char *no_proxy = NULL;
   bool prot_missing = FALSE;
   bool connections_available = TRUE;
   bool force_reuse = FALSE;
@@ -6275,48 +5938,18 @@ static CURLcode create_conn(struct Curl_easy *data,
     }
   }
 
-  if(data->set.str[STRING_PRE_PROXY]) {
-    socksproxy = strdup(data->set.str[STRING_PRE_PROXY]);
-    /* if global socks proxy is set, this is it */
-    if(NULL == socksproxy) {
-      failf(data, "memory shortage");
-      result = CURLE_OUT_OF_MEMORY;
-      goto out;
-    }
-  }
-
-  no_proxy = curl_getenv("no_proxy");
-  if(!no_proxy)
-    no_proxy = curl_getenv("NO_PROXY");
-
-  if(check_noproxy(conn->host.name, data->set.str[STRING_NOPROXY]) ||
-     (!data->set.str[STRING_NOPROXY] &&
-      check_noproxy(conn->host.name, no_proxy))) {
-    Curl_safefree(proxy);
-    Curl_safefree(socksproxy);
+  if(data->set.str[STRING_NOPROXY] &&
+     check_noproxy(conn->host.name, data->set.str[STRING_NOPROXY])) {
+    free(proxy);  /* proxy is in exception list */
+    proxy = NULL;
   }
-  else if(!proxy && !socksproxy)
-#ifndef CURL_DISABLE_HTTP
-    /* if the host is not in the noproxy list, detect proxy. */
+  else if(!proxy)
     proxy = detect_proxy(conn);
-#else  /* !CURL_DISABLE_HTTP */
-    proxy = NULL;
-#endif /* CURL_DISABLE_HTTP */
-
-  Curl_safefree(no_proxy);
 
 #ifdef USE_UNIX_SOCKETS
-  if(data->set.str[STRING_UNIX_SOCKET_PATH]) {
-    if(proxy) {
-      free(proxy); /* Unix domain sockets cannot be proxied, so disable it */
-      proxy = NULL;
-    }
-    conn->unix_domain_socket = strdup(data->set.str[STRING_UNIX_SOCKET_PATH]);
-    if(conn->unix_domain_socket == NULL) {
-      result = CURLE_OUT_OF_MEMORY;
-      goto out;
-    }
-    conn->abstract_unix_socket = data->set.abstract_unix_socket;
+  if(proxy && data->set.str[STRING_UNIX_SOCKET_PATH]) {
+    free(proxy);  /* Unix domain sockets cannot be proxied, so disable it */
+    proxy = NULL;
   }
 #endif
 
@@ -6325,36 +5958,23 @@ static CURLcode create_conn(struct Curl_easy *data,
                      protocol doesn't work with network */
     proxy = NULL;
   }
-  if(socksproxy && (!*socksproxy ||
-                    (conn->handler->flags & PROTOPT_NONETWORK))) {
-    free(socksproxy);  /* Don't bother with an empty socks proxy string or if
-                          the protocol doesn't work with network */
-    socksproxy = NULL;
-  }
 
   /***********************************************************************
    * If this is supposed to use a proxy, we need to figure out the proxy host
    * name, proxy type and port number, so that we can re-use an existing
    * connection that may exist registered to the same proxy host.
    ***********************************************************************/
-  if(proxy || socksproxy) {
-    if(proxy) {
-      result = parse_proxy(data, conn, proxy, conn->http_proxy.proxytype);
-      Curl_safefree(proxy); /* parse_proxy copies the proxy string */
-      if(result)
-        goto out;
-    }
+  if(proxy) {
+    result = parse_proxy(data, conn, proxy);
 
-    if(socksproxy) {
-      result = parse_proxy(data, conn, socksproxy,
-                           conn->socks_proxy.proxytype);
-      /* parse_proxy copies the socks proxy string */
-      Curl_safefree(socksproxy);
-      if(result)
-        goto out;
-    }
+    free(proxy); /* parse_proxy copies the proxy string */
+    proxy = NULL;
 
-    if(conn->http_proxy.host.rawalloc) {
+    if(result)
+      goto out;
+
+    if((conn->proxytype == CURLPROXY_HTTP) ||
+       (conn->proxytype == CURLPROXY_HTTP_1_0)) {
 #ifdef CURL_DISABLE_HTTP
       /* asking for a HTTP proxy is a bit funny when HTTP is disabled... */
       result = CURLE_UNSUPPORTED_PROTOCOL;
@@ -6373,34 +5993,12 @@ static CURLcode create_conn(struct Curl_easy *data,
       conn->bits.httpproxy = FALSE; /* not a HTTP proxy */
       conn->bits.tunnel_proxy = FALSE; /* no tunneling if not HTTP */
     }
-
-    if(conn->socks_proxy.host.rawalloc) {
-      if(!conn->http_proxy.host.rawalloc) {
-        /* once a socks proxy */
-        if(!conn->socks_proxy.user) {
-          conn->socks_proxy.user = conn->http_proxy.user;
-          conn->http_proxy.user = NULL;
-          Curl_safefree(conn->socks_proxy.passwd);
-          conn->socks_proxy.passwd = conn->http_proxy.passwd;
-          conn->http_proxy.passwd = NULL;
-        }
-      }
-      conn->bits.socksproxy = TRUE;
-    }
-    else
-      conn->bits.socksproxy = FALSE; /* not a socks proxy */
+    conn->bits.proxy = TRUE;
   }
   else {
-    conn->bits.socksproxy = FALSE;
-    conn->bits.httpproxy = FALSE;
-  }
-  conn->bits.proxy = conn->bits.httpproxy || conn->bits.socksproxy;
-
-  if(!conn->bits.proxy) {
     /* we aren't using the proxy after all... */
     conn->bits.proxy = FALSE;
     conn->bits.httpproxy = FALSE;
-    conn->bits.socksproxy = FALSE;
     conn->bits.proxy_user_passwd = FALSE;
     conn->bits.tunnel_proxy = FALSE;
   }
@@ -6441,20 +6039,18 @@ static CURLcode create_conn(struct Curl_easy *data,
   /*************************************************************
    * IDN-fix the hostnames
    *************************************************************/
-  fix_hostname(conn, &conn->host);
+  fix_hostname(data, conn, &conn->host);
   if(conn->bits.conn_to_host)
-    fix_hostname(conn, &conn->conn_to_host);
-  if(conn->bits.httpproxy)
-    fix_hostname(conn, &conn->http_proxy.host);
-  if(conn->bits.socksproxy)
-    fix_hostname(conn, &conn->socks_proxy.host);
+    fix_hostname(data, conn, &conn->conn_to_host);
+  if(conn->proxy.name && *conn->proxy.name)
+    fix_hostname(data, conn, &conn->proxy);
 
   /*************************************************************
    * Check whether the host and the "connect to host" are equal.
-   * Do this after the hostnames have been IDN-fixed.
+   * Do this after the hostnames have been IDN-fixed .
    *************************************************************/
   if(conn->bits.conn_to_host &&
-     strcasecompare(conn->conn_to_host.name, conn->host.name)) {
+      Curl_raw_equal(conn->conn_to_host.name, conn->host.name)) {
     conn->bits.conn_to_host = FALSE;
   }
 
@@ -6538,51 +6134,20 @@ static CURLcode create_conn(struct Curl_easy *data,
      that will be freed as part of the Curl_easy struct, but all cloned
      copies will be separately allocated.
   */
-  data->set.ssl.primary.CApath = data->set.str[STRING_SSL_CAPATH_ORIG];
-  data->set.proxy_ssl.primary.CApath = data->set.str[STRING_SSL_CAPATH_PROXY];
-  data->set.ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE_ORIG];
-  data->set.proxy_ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE_PROXY];
-  data->set.ssl.primary.random_file = data->set.str[STRING_SSL_RANDOM_FILE];
-  data->set.proxy_ssl.primary.random_file =
-    data->set.str[STRING_SSL_RANDOM_FILE];
-  data->set.ssl.primary.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
-  data->set.proxy_ssl.primary.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
-  data->set.ssl.primary.cipher_list =
-    data->set.str[STRING_SSL_CIPHER_LIST_ORIG];
-  data->set.proxy_ssl.primary.cipher_list =
-    data->set.str[STRING_SSL_CIPHER_LIST_PROXY];
-
-  data->set.ssl.CRLfile = data->set.str[STRING_SSL_CRLFILE_ORIG];
-  data->set.proxy_ssl.CRLfile = data->set.str[STRING_SSL_CRLFILE_PROXY];
-  data->set.ssl.issuercert = data->set.str[STRING_SSL_ISSUERCERT_ORIG];
-  data->set.proxy_ssl.issuercert = data->set.str[STRING_SSL_ISSUERCERT_PROXY];
-  data->set.ssl.cert = data->set.str[STRING_CERT_ORIG];
-  data->set.proxy_ssl.cert = data->set.str[STRING_CERT_PROXY];
-  data->set.ssl.cert_type = data->set.str[STRING_CERT_TYPE_ORIG];
-  data->set.proxy_ssl.cert_type = data->set.str[STRING_CERT_TYPE_PROXY];
-  data->set.ssl.key = data->set.str[STRING_KEY_ORIG];
-  data->set.proxy_ssl.key = data->set.str[STRING_KEY_PROXY];
-  data->set.ssl.key_type = data->set.str[STRING_KEY_TYPE_ORIG];
-  data->set.proxy_ssl.key_type = data->set.str[STRING_KEY_TYPE_PROXY];
-  data->set.ssl.key_passwd = data->set.str[STRING_KEY_PASSWD_ORIG];
-  data->set.proxy_ssl.key_passwd = data->set.str[STRING_KEY_PASSWD_PROXY];
-  data->set.ssl.primary.clientcert = data->set.str[STRING_CERT_ORIG];
-  data->set.proxy_ssl.primary.clientcert = data->set.str[STRING_CERT_PROXY];
+  data->set.ssl.CApath = data->set.str[STRING_SSL_CAPATH];
+  data->set.ssl.CAfile = data->set.str[STRING_SSL_CAFILE];
+  data->set.ssl.CRLfile = data->set.str[STRING_SSL_CRLFILE];
+  data->set.ssl.issuercert = data->set.str[STRING_SSL_ISSUERCERT];
+  data->set.ssl.random_file = data->set.str[STRING_SSL_RANDOM_FILE];
+  data->set.ssl.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
+  data->set.ssl.cipher_list = data->set.str[STRING_SSL_CIPHER_LIST];
+  data->set.ssl.clientcert = data->set.str[STRING_CERT];
 #ifdef USE_TLS_SRP
-  data->set.ssl.username = data->set.str[STRING_TLSAUTH_USERNAME_ORIG];
-  data->set.proxy_ssl.username = data->set.str[STRING_TLSAUTH_USERNAME_PROXY];
-  data->set.ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD_ORIG];
-  data->set.proxy_ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD_PROXY];
+  data->set.ssl.username = data->set.str[STRING_TLSAUTH_USERNAME];
+  data->set.ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD];
 #endif
 
-  if(!Curl_clone_primary_ssl_config(&data->set.ssl.primary,
-     &conn->ssl_config)) {
-    result = CURLE_OUT_OF_MEMORY;
-    goto out;
-  }
-
-  if(!Curl_clone_primary_ssl_config(&data->set.proxy_ssl.primary,
-                                    &conn->proxy_ssl_config)) {
+  if(!Curl_clone_ssl_config(&data->set.ssl, &conn->ssl_config)) {
     result = CURLE_OUT_OF_MEMORY;
     goto out;
   }
@@ -6639,9 +6204,7 @@ static CURLcode create_conn(struct Curl_easy *data,
     infof(data, "Re-using existing connection! (#%ld) with %s %s\n",
           conn->connection_id,
           conn->bits.proxy?"proxy":"host",
-          conn->socks_proxy.host.name ? conn->socks_proxy.host.dispname :
-          conn->http_proxy.host.name ? conn->http_proxy.host.dispname :
-                                       conn->host.dispname);
+          conn->proxy.name?conn->proxy.dispname:conn->host.dispname);
   }
   else {
     /* We have decided that we want a new connection. However, we may not
@@ -6772,7 +6335,6 @@ static CURLcode create_conn(struct Curl_easy *data,
   free(options);
   free(passwd);
   free(user);
-  free(socksproxy);
   free(proxy);
   return result;
 }
index f13c8e6..90d9db3 100644 (file)
--- a/lib/url.h
+++ b/lib/url.h
@@ -67,8 +67,6 @@ void Curl_getoff_all_pipelines(struct Curl_easy *data,
 void Curl_close_connections(struct Curl_easy *data);
 
 #define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */
-#define CURL_DEFAULT_HTTPS_PROXY_PORT 443 /* default https proxy port unless
-                                             specified */
 
 CURLcode Curl_connected_proxy(struct connectdata *conn, int sockindex);
 
@@ -78,16 +76,5 @@ CURLcode Curl_connected_proxy(struct connectdata *conn, int sockindex);
 void Curl_verboseconnect(struct connectdata *conn);
 #endif
 
-#define CONNECT_PROXY_SSL()\
-  (conn->http_proxy.proxytype == CURLPROXY_HTTPS &&\
-  !conn->bits.proxy_ssl_connected[sockindex])
-
-#define CONNECT_FIRSTSOCKET_PROXY_SSL()\
-  (conn->http_proxy.proxytype == CURLPROXY_HTTPS &&\
-  !conn->bits.proxy_ssl_connected[FIRSTSOCKET])
-
-#define CONNECT_SECONDARYSOCKET_PROXY_SSL()\
-  (conn->http_proxy.proxytype == CURLPROXY_HTTPS &&\
-  !conn->bits.proxy_ssl_connected[SECONDARYSOCKET])
 
 #endif /* HEADER_CURL_URL_H */
index 7f87913..3ac050b 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #undef realloc
 #endif /* USE_AXTLS */
 
-#if defined(USE_SCHANNEL) || defined(USE_WINDOWS_SSPI)
-#include "curl_sspi.h"
-#endif
 #ifdef USE_SCHANNEL
+#include "curl_sspi.h"
 #include <schnlsp.h>
 #include <schannel.h>
 #endif
 /* Download buffer size, keep it fairly big for speed reasons */
 #undef BUFSIZE
 #define BUFSIZE CURL_MAX_WRITE_SIZE
-#undef MAX_BUFSIZE
-#define MAX_BUFSIZE CURL_MAX_READ_SIZE
-#define CURL_BUFSIZE(x) ((x)?(x):(BUFSIZE))
 
 /* Initial size of the buffer to store headers in, it'll be enlarged in case
    of need. */
@@ -321,8 +316,6 @@ struct ssl_connect_data {
 #elif defined(USE_GSKIT)
   gsk_handle handle;
   int iocport;
-  int localfd;
-  int remotefd;
 #elif defined(USE_AXTLS)
   SSL_CTX* ssl_ctx;
   SSL*     ssl;
@@ -348,38 +341,28 @@ struct ssl_connect_data {
 #endif
 };
 
-struct ssl_primary_config {
+struct ssl_config_data {
   long version;          /* what version the client wants to use */
+  long certverifyresult; /* result from the certificate verification */
+
   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 */
+  const char *issuercert;/* optional issuer certificate filename */
   char *clientcert;
   char *random_file;     /* path to file containing "random" data */
   char *egdsocket;       /* path to file containing the EGD daemon socket */
   char *cipher_list;     /* list of ciphers to use */
-};
-
-struct ssl_config_data {
-  struct ssl_primary_config primary;
-  bool enable_beast; /* especially allow this flaw for interoperability's
-                        sake*/
-  bool no_revoke;    /* disable SSL certificate revocation checks */
-  long certverifyresult; /* result from the certificate verification */
-  char *CRLfile;   /* CRL to check certificate revocation */
-  char *issuercert;/* optional issuer certificate filename */
+  size_t max_ssl_sessions; /* SSL session id cache size */
   curl_ssl_ctx_callback fsslctx; /* function to initialize ssl ctx */
   void *fsslctxp;        /* parameter for call back */
+  bool sessionid;        /* cache session IDs or not */
   bool certinfo;         /* gather lots of certificate info */
   bool falsestart;
 
-  char *cert; /* client certificate file name */
-  char *cert_type; /* format for certificate (default: PEM)*/
-  char *key; /* private key file name */
-  char *key_type; /* format for private key (default: PEM) */
-  char *key_passwd; /* plain text private key password */
-
 #ifdef USE_TLS_SRP
   char *username; /* TLS username (for, e.g., SRP) */
   char *password; /* TLS password (for, e.g., SRP) */
@@ -387,22 +370,16 @@ struct ssl_config_data {
 #endif
 };
 
-struct ssl_general_config {
-  bool sessionid; /* cache session IDs or not */
-  size_t max_ssl_sessions; /* SSL session id cache size */
-};
-
 /* information stored about one single SSL session */
 struct curl_ssl_session {
   char *name;       /* host name for which this ID was used */
   char *conn_to_host; /* host name for the connection (may be NULL) */
-  const char *scheme; /* protocol scheme used */
   void *sessionid;  /* as returned from the SSL layer */
   size_t idsize;    /* if known, otherwise 0 */
   long age;         /* just a number, the higher the more recent */
   int remote_port;  /* remote port */
   int conn_to_port; /* remote port for the connection (may be -1) */
-  struct ssl_primary_config ssl_config; /* setup for this session */
+  struct ssl_config_data ssl_config; /* setup for this session */
 };
 
 /* Struct used for Digest challenge-response authentication */
@@ -410,7 +387,6 @@ struct digestdata {
 #if defined(USE_WINDOWS_SSPI)
   BYTE *input_token;
   size_t input_token_len;
-  CtxtHandle *http_context;
 #else
   char *nonce;
   char *cnonce;
@@ -474,7 +450,7 @@ struct ntlmdata {
 #else
   unsigned int flags;
   unsigned char nonce[8];
-  void *target_info; /* TargetInfo received in the ntlm type-2 message */
+  voidtarget_info; /* TargetInfo received in the ntlm type-2 message */
   unsigned int target_info_len;
 #endif
 };
@@ -520,7 +496,6 @@ struct ConnectBits {
                         that overrides the port in the URL (remote port) */
   bool proxy; /* if set, this transfer is done through a proxy - any type */
   bool httpproxy;    /* if set, this transfer is done through a http proxy */
-  bool socksproxy;   /* if set, this transfer is done through a socks proxy */
   bool user_passwd;    /* do we use user+password for this connection? */
   bool proxy_user_passwd; /* user+password for the proxy? */
   bool ipv6_ip; /* we communicate with a remote site specified with pure IPv6
@@ -555,7 +530,6 @@ struct ConnectBits {
   bool ftp_use_eprt;  /* As set with CURLOPT_FTP_USE_EPRT, but if we find out
                          EPRT doesn't work we disable it for the forthcoming
                          requests */
-  bool ftp_use_data_ssl; /* Enabled SSL for the data connection */
   bool netrc;         /* name+password provided by netrc */
   bool userpwd_in_url; /* name+password found in url */
   bool stream_was_rewound; /* Indicates that the stream was rewound after a
@@ -572,9 +546,6 @@ struct ConnectBits {
   bool tcp_fastopen; /* use TCP Fast Open */
   bool tls_enable_npn;  /* TLS NPN extension? */
   bool tls_enable_alpn; /* TLS ALPN extension? */
-  bool proxy_ssl_connected[2]; /* TRUE when SSL initialization for HTTPS proxy
-                                  is complete */
-  bool socksproxy_connecting; /* connecting through a socks proxy */
 };
 
 struct hostname {
@@ -760,7 +731,7 @@ struct SingleRequest {
  */
 
 struct Curl_handler {
-  const char *scheme;        /* URL scheme name. */
+  const char * scheme;        /* URL scheme name. */
 
   /* Complement to setup_connection_internals(). */
   CURLcode (*setup_connection)(struct connectdata *);
@@ -848,8 +819,6 @@ struct Curl_handler {
                                           request instead of per connection */
 #define PROTOPT_ALPN_NPN (1<<8) /* set ALPN and/or NPN for this */
 #define PROTOPT_STREAM (1<<9) /* a protocol with individual logical streams */
-#define PROTOPT_URLOPTIONS (1<<10) /* allow options part in the userinfo field
-                                      of the URL */
 
 /* return the count of bytes sent, or -1 on error */
 typedef ssize_t (Curl_send)(struct connectdata *conn, /* connection data */
@@ -879,14 +848,6 @@ struct postponed_data {
 };
 #endif /* USE_RECV_BEFORE_SEND_WORKAROUND */
 
-struct proxy_info {
-  struct hostname host;
-  long port;
-  curl_proxytype proxytype; /* what kind of proxy that is in use */
-  char *user;    /* proxy user name string, allocated */
-  char *passwd;  /* proxy password string, allocated */
-};
-
 /*
  * The connectdata struct contains all fields and variables that should be
  * unique for an entire connection.
@@ -936,19 +897,14 @@ struct connectdata {
   int socktype;  /* SOCK_STREAM or SOCK_DGRAM */
 
   struct hostname host;
-  char *secondaryhostname; /* secondary socket host name (ftp) */
   struct hostname conn_to_host; /* the host to connect to. valid only if
                                    bits.conn_to_host is set */
-
-  struct proxy_info socks_proxy;
-  struct proxy_info http_proxy;
+  struct hostname proxy;
 
   long port;       /* which port to use locally */
   int remote_port; /* the remote port, not the proxy port! */
   int conn_to_port; /* the remote port to connect to. valid only if
                        bits.conn_to_port is set */
-  unsigned short secondary_port; /* secondary socket remote port to connect to
-                                    (ftp) */
 
   /* 'primary_ip' and 'primary_port' get filled with peer's numerical
      ip address and port number whenever an outgoing connection is
@@ -973,6 +929,10 @@ struct connectdata {
 
   char *oauth_bearer; /* bearer token for OAuth 2.0, allocated */
 
+  char *proxyuser;    /* proxy user name string, allocated */
+  char *proxypasswd;  /* proxy password string, allocated */
+  curl_proxytype proxytype; /* what kind of proxy that is in use */
+
   int httpversion;        /* the HTTP version*10 reported by the server */
   int rtspversion;        /* the RTSP version*10 reported by the server */
 
@@ -990,9 +950,7 @@ struct connectdata {
   struct postponed_data postponed[2]; /* two buffers for two sockets */
 #endif /* USE_RECV_BEFORE_SEND_WORKAROUND */
   struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */
-  struct ssl_connect_data proxy_ssl[2]; /* this is for proxy ssl-stuff */
-  struct ssl_primary_config ssl_config;
-  struct ssl_primary_config proxy_ssl_config;
+  struct ssl_config_data ssl_config;
   bool tls_upgraded;
 
   struct ConnectBits bits;    /* various state-flags for this connection */
@@ -1003,8 +961,8 @@ struct connectdata {
   struct timeval connecttime;
   /* The two fields below get set in Curl_connecthost */
   int num_addr; /* number of addresses to try to connect to */
-  time_t timeoutms_per_addr; /* how long time in milliseconds to spend on
-                                trying to connect to each IP address */
+  long timeoutms_per_addr; /* how long time in milliseconds to spend on
+                              trying to connect to each IP address */
 
   const struct Curl_handler *handler; /* Connection's protocol handler */
   const struct Curl_handler *given;   /* The protocol first given */
@@ -1061,7 +1019,7 @@ struct connectdata {
                                    send on this pipeline */
   struct curl_llist *recv_pipe; /* List of handles waiting to read
                                    their responses on this pipeline */
-  char *master_buffer; /* The master buffer allocated on-demand;
+  charmaster_buffer; /* The master buffer allocated on-demand;
                           used for pipelining. */
   size_t read_pos; /* Current read position in the master buffer */
   size_t buf_len; /* Length of the buffer?? */
@@ -1082,8 +1040,8 @@ struct connectdata {
   /* used for communication with Samba's winbind daemon helper ntlm_auth */
   curl_socket_t ntlm_auth_hlpr_socket;
   pid_t ntlm_auth_hlpr_pid;
-  char *challenge_header;
-  char *response_header;
+  charchallenge_header;
+  charresponse_header;
 #endif
 #endif
 
@@ -1119,6 +1077,9 @@ struct connectdata {
   int socks5_gssapi_enctype;
 #endif
 
+  bool verifypeer;
+  bool verifyhost;
+
   /* When this connection is created, store the conditions for the local end
      bind. This is stored before the actual bind and before any connection is
      made and will serve the purpose of being used for comparison reasons so
@@ -1137,18 +1098,12 @@ struct connectdata {
   struct connectbundle *bundle; /* The bundle we are member of */
 
   int negnpn; /* APLN or NPN TLS negotiated protocol, CURL_HTTP_VERSION* */
-
-#ifdef USE_UNIX_SOCKETS
-  char *unix_domain_socket;
-  bool abstract_unix_socket;
-#endif
 };
 
 /* The end of connectdata. */
 
 /*
  * Struct to keep statistical and informational data.
- * All variables in this struct must be initialized/reset in Curl_initinfo().
  */
 struct PureInfo {
   int httpcode;  /* Recent HTTP, FTP, RTSP or SMTP response code */
@@ -1182,9 +1137,6 @@ struct PureInfo {
   char conn_local_ip[MAX_IPADR_LEN];
   long conn_local_port;
 
-  const char *conn_scheme;
-  unsigned int conn_protocol;
-
   struct curl_certinfo certs; /* info about the certs, only populated in
                                  OpenSSL builds. Asked for with
                                  CURLOPT_CERTINFO / CURLINFO_CERTINFO */
@@ -1192,8 +1144,8 @@ struct PureInfo {
 
 
 struct Progress {
-  time_t lastshow; /* time() of the last displayed progress meter or NULL to
-                      force redraw at next call */
+  long lastshow; /* time() of the last displayed progress meter or NULL to
+                    force redraw at next call */
   curl_off_t size_dl; /* total expected size */
   curl_off_t size_ul; /* total expected size */
   curl_off_t downloaded; /* transferred so far */
@@ -1288,11 +1240,6 @@ struct auth {
                    be RFC compliant */
 };
 
-struct Curl_http2_dep {
-  struct Curl_http2_dep *next;
-  struct Curl_easy *data;
-};
-
 struct UrlState {
 
   /* Points to the connection cache */
@@ -1311,7 +1258,7 @@ struct UrlState {
   char *headerbuff; /* allocated buffer to store headers in */
   size_t headersize;   /* size of the allocation */
 
-  char *buffer; /* download buffer */
+  char buffer[BUFSIZE+1]; /* download buffer */
   char uploadbuffer[BUFSIZE+1]; /* upload buffer */
   curl_off_t current_speed;  /* the ProgressShow() funcion sets this,
                                 bytes / second */
@@ -1453,10 +1400,8 @@ struct DynamicStatic {
 struct Curl_multi;    /* declared and used only in multi.c */
 
 enum dupstring {
-  STRING_CERT_ORIG,       /* client certificate file name */
-  STRING_CERT_PROXY,      /* client certificate file name */
-  STRING_CERT_TYPE_ORIG,  /* format for certificate (default: PEM)*/
-  STRING_CERT_TYPE_PROXY, /* format for certificate (default: PEM)*/
+  STRING_CERT,            /* client certificate file name */
+  STRING_CERT_TYPE,       /* format for certificate (default: PEM)*/
   STRING_COOKIE,          /* HTTP cookie string to send */
   STRING_COOKIEJAR,       /* dump all cookies to this file */
   STRING_CUSTOMREQUEST,   /* HTTP/FTP/RTSP request/method to use */
@@ -1466,35 +1411,25 @@ enum dupstring {
   STRING_FTP_ACCOUNT,     /* ftp account data */
   STRING_FTP_ALTERNATIVE_TO_USER, /* command to send if USER/PASS fails */
   STRING_FTPPORT,         /* port to send with the FTP PORT command */
-  STRING_KEY_ORIG,        /* private key file name */
-  STRING_KEY_PROXY,       /* private key file name */
-  STRING_KEY_PASSWD_ORIG, /* plain text private key password */
-  STRING_KEY_PASSWD_PROXY, /* plain text private key password */
-  STRING_KEY_TYPE_ORIG,   /* format for private key (default: PEM) */
-  STRING_KEY_TYPE_PROXY,  /* format for private key (default: PEM) */
+  STRING_KEY,             /* private key file name */
+  STRING_KEY_PASSWD,      /* plain text private key password */
+  STRING_KEY_TYPE,        /* format for private key (default: PEM) */
   STRING_KRB_LEVEL,       /* krb security level */
   STRING_NETRC_FILE,      /* if not NULL, use this instead of trying to find
                              $HOME/.netrc */
   STRING_PROXY,           /* proxy to use */
-  STRING_PRE_PROXY,       /* pre socks proxy to use */
   STRING_SET_RANGE,       /* range, if used */
   STRING_SET_REFERER,     /* custom string for the HTTP referer field */
   STRING_SET_URL,         /* what original URL to work on */
-  STRING_SSL_CAPATH_ORIG, /* CA directory name (doesn't work on windows) */
-  STRING_SSL_CAPATH_PROXY, /* CA directory name (doesn't work on windows) */
-  STRING_SSL_CAFILE_ORIG, /* certificate file to verify peer against */
-  STRING_SSL_CAFILE_PROXY, /* certificate file to verify peer against */
-  STRING_SSL_PINNEDPUBLICKEY_ORIG, /* public key file to verify peer against */
-  STRING_SSL_PINNEDPUBLICKEY_PROXY, /* public key file to verify proxy */
-  STRING_SSL_CIPHER_LIST_ORIG, /* list of ciphers to use */
-  STRING_SSL_CIPHER_LIST_PROXY, /* list of ciphers to use */
+  STRING_SSL_CAPATH,      /* CA directory name (doesn't work on windows) */
+  STRING_SSL_CAFILE,      /* certificate file to verify peer against */
+  STRING_SSL_PINNEDPUBLICKEY, /* public key file to verify peer against */
+  STRING_SSL_CIPHER_LIST, /* list of ciphers to use */
   STRING_SSL_EGDSOCKET,   /* path to file containing the EGD daemon socket */
   STRING_SSL_RANDOM_FILE, /* path to file containing "random" data */
   STRING_USERAGENT,       /* User-Agent string */
-  STRING_SSL_CRLFILE_ORIG, /* crl file to check certificate */
-  STRING_SSL_CRLFILE_PROXY, /* crl file to check certificate */
-  STRING_SSL_ISSUERCERT_ORIG, /* issuer cert file to check certificate */
-  STRING_SSL_ISSUERCERT_PROXY, /* issuer cert file to check certificate */
+  STRING_SSL_CRLFILE,     /* crl file to check certificate */
+  STRING_SSL_ISSUERCERT,  /* issuer cert file to check certificate */
   STRING_USERNAME,        /* <username>, if used */
   STRING_PASSWORD,        /* <password>, if used */
   STRING_OPTIONS,         /* <options>, if used */
@@ -1522,10 +1457,8 @@ enum dupstring {
   STRING_MAIL_AUTH,
 
 #ifdef USE_TLS_SRP
-  STRING_TLSAUTH_USERNAME_ORIG,  /* TLS auth <username> */
-  STRING_TLSAUTH_USERNAME_PROXY, /* TLS auth <username> */
-  STRING_TLSAUTH_PASSWORD_ORIG,  /* TLS auth <password> */
-  STRING_TLSAUTH_PASSWORD_PROXY, /* TLS auth <password> */
+  STRING_TLSAUTH_USERNAME,      /* TLS auth <username> */
+  STRING_TLSAUTH_PASSWORD,      /* TLS auth <password> */
 #endif
   STRING_BEARER,                /* <bearer>, if used */
 #ifdef USE_UNIX_SOCKETS
@@ -1589,10 +1522,10 @@ struct UserDefined {
   curl_opensocket_callback fopensocket; /* function for checking/translating
                                            the address and opening the
                                            socket */
-  void *opensocket_client;
+  voidopensocket_client;
   curl_closesocket_callback fclosesocket; /* function for closing the
                                              socket */
-  void *closesocket_client;
+  voidclosesocket_client;
 
   void *seek_client;    /* pointer to pass to the seek callback */
   /* the 3 curl_conv_callback functions below are used on non-ASCII hosts */
@@ -1643,8 +1576,6 @@ struct UserDefined {
   long httpversion; /* when non-zero, a specific HTTP version requested to
                        be used in the library's request(s) */
   struct ssl_config_data ssl;  /* user defined SSL stuff */
-  struct ssl_config_data proxy_ssl;  /* user defined SSL stuff for proxy */
-  struct ssl_general_config general_ssl; /* general user defined SSL stuff */
   curl_proxytype proxytype; /* what kind of proxy that is in use */
   long dns_cache_timeout; /* DNS cache timeout */
   long buffer_size;      /* size of receive buffer to use */
@@ -1679,7 +1610,6 @@ struct UserDefined {
   bool ftp_use_port;     /* use the FTP PORT command */
   bool hide_progress;    /* don't use the progress meter */
   bool http_fail_on_error;  /* fail on HTTP error codes >= 400 */
-  bool http_keep_sending_on_error; /* for HTTP status codes >= 300 */
   bool http_follow_location; /* follow HTTP redirects */
   bool http_transfer_encoding; /* request compressed HTTP transfer-encoding */
   bool http_disable_hostname_check_before_authentication;
@@ -1709,6 +1639,9 @@ struct UserDefined {
   bool ftp_skip_ip;      /* skip the IP address the FTP server passes on to
                             us */
   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) */
@@ -1759,10 +1692,6 @@ struct UserDefined {
   struct Curl_easy *stream_depends_on;
   bool stream_depends_e; /* set or don't set the Exclusive bit */
   int stream_weight;
-
-  struct Curl_http2_dep *stream_dependents;
-
-  bool abstract_unix_socket;
 };
 
 struct Names {
index a761ae7..4e906bc 100644 (file)
@@ -33,6 +33,8 @@
 #include "curl_md5.h"
 #include "warnless.h"
 #include "strtok.h"
+#include "strequal.h"
+#include "rawstr.h"
 #include "sendf.h"
 #include "curl_printf.h"
 
@@ -66,27 +68,16 @@ CURLcode Curl_auth_create_plain_message(struct Curl_easy *data,
   char *plainauth;
   size_t ulen;
   size_t plen;
-  size_t plainlen;
 
-  *outlen = 0;
-  *outptr = NULL;
   ulen = strlen(userp);
   plen = strlen(passwdp);
 
-  /* Compute binary message length, checking for overflows. */
-  plainlen = 2 * ulen;
-  if(plainlen < ulen)
-    return CURLE_OUT_OF_MEMORY;
-  plainlen += plen;
-  if(plainlen < plen)
-    return CURLE_OUT_OF_MEMORY;
-  plainlen += 2;
-  if(plainlen < 2)
-    return CURLE_OUT_OF_MEMORY;
-
-  plainauth = malloc(plainlen);
-  if(!plainauth)
+  plainauth = malloc(2 * ulen + plen + 2);
+  if(!plainauth) {
+    *outlen = 0;
+    *outptr = NULL;
     return CURLE_OUT_OF_MEMORY;
+  }
 
   /* Calculate the reply */
   memcpy(plainauth, userp, ulen);
@@ -96,7 +87,8 @@ CURLcode Curl_auth_create_plain_message(struct Curl_easy *data,
   memcpy(plainauth + 2 * ulen + 2, passwdp, plen);
 
   /* Base64 encode the reply */
-  result = Curl_base64_encode(data, plainauth, plainlen, outptr, outlen);
+  result = Curl_base64_encode(data, plainauth, 2 * ulen + plen + 2, outptr,
+                              outlen);
   free(plainauth);
 
   return result;
index 7d9200a..f489840 100644 (file)
 #include "vtls/vtls.h"
 #include "warnless.h"
 #include "strtok.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "non-ascii.h" /* included for Curl_convert_... prototypes */
 #include "curl_printf.h"
-#include "rand.h"
 
 /* The last #include files should be: */
 #include "curl_memory.h"
@@ -60,7 +59,7 @@
    what ultimately goes over the network.
 */
 #define CURL_OUTPUT_DIGEST_CONV(a, b) \
-  result = Curl_convert_to_network(a, (char *)b, strlen((const char *)b)); \
+  result = Curl_convert_to_network(a, (char *)b, strlen((const char*)b)); \
   if(result) { \
     free(b); \
     return result; \
@@ -218,11 +217,11 @@ static CURLcode auth_digest_get_qop_values(const char *options, int *value)
 
   token = strtok_r(tmp, ",", &tok_buf);
   while(token != NULL) {
-    if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH))
+    if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH))
       *value |= DIGEST_QOP_VALUE_AUTH;
-    else if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH_INT))
+    else if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH_INT))
       *value |= DIGEST_QOP_VALUE_AUTH_INT;
-    else if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH_CONF))
+    else if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH_CONF))
       *value |= DIGEST_QOP_VALUE_AUTH_CONF;
 
     token = strtok_r(NULL, ",", &tok_buf);
@@ -388,9 +387,10 @@ CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
     return CURLE_BAD_CONTENT_ENCODING;
 
   /* Generate 16 bytes of random data */
-  result = Curl_rand(data, &entropy[0], 4);
-  if(result)
-    return result;
+  entropy[0] = Curl_rand(data);
+  entropy[1] = Curl_rand(data);
+  entropy[2] = Curl_rand(data);
+  entropy[3] = Curl_rand(data);
 
   /* Convert the random data into a 32 byte hex string */
   snprintf(cnonce, sizeof(cnonce), "%08x%08x%08x%08x",
@@ -538,31 +538,31 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
 
     /* Extract a value=content pair */
     if(Curl_auth_digest_get_pair(chlg, value, content, &chlg)) {
-      if(strcasecompare(value, "nonce")) {
+      if(Curl_raw_equal(value, "nonce")) {
         free(digest->nonce);
         digest->nonce = strdup(content);
         if(!digest->nonce)
           return CURLE_OUT_OF_MEMORY;
       }
-      else if(strcasecompare(value, "stale")) {
-        if(strcasecompare(content, "true")) {
+      else if(Curl_raw_equal(value, "stale")) {
+        if(Curl_raw_equal(content, "true")) {
           digest->stale = TRUE;
           digest->nc = 1; /* we make a new nonce now */
         }
       }
-      else if(strcasecompare(value, "realm")) {
+      else if(Curl_raw_equal(value, "realm")) {
         free(digest->realm);
         digest->realm = strdup(content);
         if(!digest->realm)
           return CURLE_OUT_OF_MEMORY;
       }
-      else if(strcasecompare(value, "opaque")) {
+      else if(Curl_raw_equal(value, "opaque")) {
         free(digest->opaque);
         digest->opaque = strdup(content);
         if(!digest->opaque)
           return CURLE_OUT_OF_MEMORY;
       }
-      else if(strcasecompare(value, "qop")) {
+      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 */
@@ -572,10 +572,10 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
 
         token = strtok_r(tmp, ",", &tok_buf);
         while(token != NULL) {
-          if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH)) {
+          if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH)) {
             foundAuth = TRUE;
           }
-          else if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH_INT)) {
+          else if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH_INT)) {
             foundAuthInt = TRUE;
           }
           token = strtok_r(NULL, ",", &tok_buf);
@@ -597,15 +597,15 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
             return CURLE_OUT_OF_MEMORY;
         }
       }
-      else if(strcasecompare(value, "algorithm")) {
+      else if(Curl_raw_equal(value, "algorithm")) {
         free(digest->algorithm);
         digest->algorithm = strdup(content);
         if(!digest->algorithm)
           return CURLE_OUT_OF_MEMORY;
 
-        if(strcasecompare(content, "MD5-sess"))
+        if(Curl_raw_equal(content, "MD5-sess"))
           digest->algo = CURLDIGESTALGO_MD5SESS;
-        else if(strcasecompare(content, "MD5"))
+        else if(Curl_raw_equal(content, "MD5"))
           digest->algo = CURLDIGESTALGO_MD5;
         else
           return CURLE_BAD_CONTENT_ENCODING;
@@ -684,12 +684,9 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
     digest->nc = 1;
 
   if(!digest->cnonce) {
-    unsigned int rnd[4];
-    result = Curl_rand(data, &rnd[0], 4);
-    if(result)
-      return result;
     snprintf(cnoncebuf, sizeof(cnoncebuf), "%08x%08x%08x%08x",
-             rnd[0], rnd[1], rnd[2], rnd[3]);
+             Curl_rand(data), Curl_rand(data),
+             Curl_rand(data), Curl_rand(data));
 
     result = Curl_base64_encode(data, cnoncebuf, strlen(cnoncebuf),
                                 &cnonce, &cnonce_sz);
@@ -747,7 +744,7 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
 
   md5this = (unsigned char *) aprintf("%s:%s", request, uripath);
 
-  if(digest->qop && strcasecompare(digest->qop, "auth-int")) {
+  if(digest->qop && Curl_raw_equal(digest->qop, "auth-int")) {
     /* We don't support auth-int for PUT or POST at the moment.
        TODO: replace md5 of empty string with entity-body for PUT/POST */
     unsigned char *md5this2 = (unsigned char *)
@@ -823,7 +820,7 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
                        digest->qop,
                        request_digest);
 
-    if(strcasecompare(digest->qop, "auth"))
+    if(Curl_raw_equal(digest->qop, "auth"))
       digest->nc++; /* The nc (from RFC) has to be a 8 hex digit number 0
                        padded which tells to the server how many times you are
                        using the same nonce in the qop=auth mode */
index 15f3d8c..1cc704d 100644 (file)
@@ -37,7 +37,7 @@
 #include "curl_multibyte.h"
 #include "sendf.h"
 #include "strdup.h"
-#include "strcase.h"
+#include "rawstr.h"
 
 /* The last #include files should be: */
 #include "curl_memory.h"
@@ -277,7 +277,7 @@ CURLcode Curl_override_sspi_http_realm(const char *chlg,
 
       /* Extract a value=content pair */
       if(Curl_auth_digest_get_pair(chlg, value, content, &chlg)) {
-        if(strcasecompare(value, "realm")) {
+        if(Curl_raw_equal(value, "realm")) {
 
           /* Setup identity's domain and length */
           domain.tchar_ptr = Curl_convert_UTF8_to_tchar((char *) content);
@@ -335,44 +335,13 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
 {
   size_t chlglen = strlen(chlg);
 
-  /* We had an input token before so if there's another one now that means we
-     provided bad credentials in the previous request or it's stale. */
-  if(digest->input_token) {
-    bool stale = false;
-    const char *p = chlg;
-
-    /* Check for the 'stale' directive */
-    for(;;) {
-      char value[DIGEST_MAX_VALUE_LENGTH];
-      char content[DIGEST_MAX_CONTENT_LENGTH];
-
-      while(*p && ISSPACE(*p))
-        p++;
-
-      if(!Curl_auth_digest_get_pair(p, value, content, &p))
-        break;
-
-      if(Curl_strcasecompare(value, "stale")
-         && Curl_strcasecompare(content, "true")) {
-        stale = true;
-        break;
-      }
-
-      while(*p && ISSPACE(*p))
-        p++;
-
-      if(',' == *p)
-        p++;
-    }
-
-    if(stale)
-      Curl_auth_digest_cleanup(digest);
-    else
-      return CURLE_LOGIN_DENIED;
-  }
+  /* We had an input token before and we got another one now. This means we
+     provided bad credentials in the previous request. */
+  if(digest->input_token)
+    return CURLE_BAD_CONTENT_ENCODING;
 
-  /* Store the challenge for use later */
-  digest->input_token = (BYTE *) Curl_memdup(chlg, chlglen + 1);
+  /* Simply store the challenge for use later */
+  digest->input_token = (BYTE *) Curl_memdup(chlg, chlglen);
   if(!digest->input_token)
     return CURLE_OUT_OF_MEMORY;
 
@@ -410,13 +379,21 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
                                               char **outptr, size_t *outlen)
 {
   size_t token_max;
+  CredHandle credentials;
+  CtxtHandle context;
   char *resp;
   BYTE *output_token;
-  size_t output_token_len;
   PSecPkgInfo SecurityPackage;
-  SecBuffer chlg_buf[5];
+  SEC_WINNT_AUTH_IDENTITY identity;
+  SEC_WINNT_AUTH_IDENTITY *p_identity;
+  SecBuffer chlg_buf[3];
+  SecBuffer resp_buf;
   SecBufferDesc chlg_desc;
+  SecBufferDesc resp_desc;
   SECURITY_STATUS status;
+  unsigned long attrs;
+  TimeStamp expiry; /* For Windows 9x compatibility of SSPI calls */
+  TCHAR *spn;
 
   (void) data;
 
@@ -431,168 +408,123 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
   /* Release the package buffer as it is not required anymore */
   s_pSecFn->FreeContextBuffer(SecurityPackage);
 
-  /* Allocate the output buffer according to the max token size as indicated
-     by the security package */
-  output_token = malloc(token_max);
-  if(!output_token) {
-    return CURLE_OUT_OF_MEMORY;
-  }
+  if(userp && *userp) {
+    /* Populate our identity structure */
+    if(Curl_create_sspi_identity(userp, passwdp, &identity))
+      return CURLE_OUT_OF_MEMORY;
 
-  if(digest->http_context) {
-    chlg_desc.ulVersion    = SECBUFFER_VERSION;
-    chlg_desc.cBuffers     = 5;
-    chlg_desc.pBuffers     = chlg_buf;
-    chlg_buf[0].BufferType = SECBUFFER_TOKEN;
-    chlg_buf[0].pvBuffer   = NULL;
-    chlg_buf[0].cbBuffer   = 0;
-    chlg_buf[1].BufferType = SECBUFFER_PKG_PARAMS;
-    chlg_buf[1].pvBuffer   = (void *) request;
-    chlg_buf[1].cbBuffer   = curlx_uztoul(strlen((const char *) request));
-    chlg_buf[2].BufferType = SECBUFFER_PKG_PARAMS;
-    chlg_buf[2].pvBuffer   = (void *) uripath;
-    chlg_buf[2].cbBuffer   = curlx_uztoul(strlen((const char *) uripath));
-    chlg_buf[3].BufferType = SECBUFFER_PKG_PARAMS;
-    chlg_buf[3].pvBuffer   = NULL;
-    chlg_buf[3].cbBuffer   = 0;
-    chlg_buf[4].BufferType = SECBUFFER_PADDING;
-    chlg_buf[4].pvBuffer   = output_token;
-    chlg_buf[4].cbBuffer   = curlx_uztoul(token_max);
-
-    status = s_pSecFn->MakeSignature(digest->http_context, 0, &chlg_desc, 0);
-    if(status == SEC_E_OK)
-      output_token_len = chlg_buf[4].cbBuffer;
-    else { /* delete the context so a new one can be made */
-      infof(data, "digest_sspi: MakeSignature failed, error 0x%08lx\n",
-            (long)status);
-      s_pSecFn->DeleteSecurityContext(digest->http_context);
-      Curl_safefree(digest->http_context);
-    }
+    /* 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;
   }
+  else
+    /* Use the current Windows user */
+    p_identity = NULL;
 
-  if(!digest->http_context) {
-    CredHandle credentials;
-    SEC_WINNT_AUTH_IDENTITY identity;
-    SEC_WINNT_AUTH_IDENTITY *p_identity;
-    SecBuffer resp_buf;
-    SecBufferDesc resp_desc;
-    unsigned long attrs;
-    TimeStamp expiry; /* For Windows 9x compatibility of SSPI calls */
-    TCHAR *spn;
-
-    if(userp && *userp) {
-      /* Populate our identity structure */
-      if(Curl_create_sspi_identity(userp, passwdp, &identity)) {
-        free(output_token);
-        return CURLE_OUT_OF_MEMORY;
-      }
+  /* Acquire our credentials handle */
+  status = s_pSecFn->AcquireCredentialsHandle(NULL,
+                                              (TCHAR *) TEXT(SP_NAME_DIGEST),
+                                              SECPKG_CRED_OUTBOUND, NULL,
+                                              p_identity, NULL, NULL,
+                                              &credentials, &expiry);
+  if(status != SEC_E_OK) {
+    Curl_sspi_free_identity(p_identity);
 
-      /* Populate our identity domain */
-      if(Curl_override_sspi_http_realm((const char *) digest->input_token,
-                                       &identity)) {
-        free(output_token);
-        return CURLE_OUT_OF_MEMORY;
-      }
+    return CURLE_LOGIN_DENIED;
+  }
 
-      /* Allow proper cleanup of the identity structure */
-      p_identity = &identity;
-    }
-    else
-      /* Use the current Windows user */
-      p_identity = NULL;
-
-    /* Acquire our credentials handle */
-    status = s_pSecFn->AcquireCredentialsHandle(NULL,
-                                                (TCHAR *) TEXT(SP_NAME_DIGEST),
-                                                SECPKG_CRED_OUTBOUND, NULL,
-                                                p_identity, NULL, NULL,
-                                                &credentials, &expiry);
-    if(status != SEC_E_OK) {
-      Curl_sspi_free_identity(p_identity);
-      free(output_token);
+  /* Allocate the output buffer according to the max token size as indicated
+     by the security package */
+  output_token = malloc(token_max);
+  if(!output_token) {
+    s_pSecFn->FreeCredentialsHandle(&credentials);
 
-      return CURLE_LOGIN_DENIED;
-    }
+    Curl_sspi_free_identity(p_identity);
 
-    /* Setup the challenge "input" security buffer if present */
-    chlg_desc.ulVersion    = SECBUFFER_VERSION;
-    chlg_desc.cBuffers     = 3;
-    chlg_desc.pBuffers     = chlg_buf;
-    chlg_buf[0].BufferType = SECBUFFER_TOKEN;
-    chlg_buf[0].pvBuffer   = digest->input_token;
-    chlg_buf[0].cbBuffer   = curlx_uztoul(digest->input_token_len);
-    chlg_buf[1].BufferType = SECBUFFER_PKG_PARAMS;
-    chlg_buf[1].pvBuffer   = (void *) request;
-    chlg_buf[1].cbBuffer   = curlx_uztoul(strlen((const char *) request));
-    chlg_buf[2].BufferType = SECBUFFER_PKG_PARAMS;
-    chlg_buf[2].pvBuffer   = NULL;
-    chlg_buf[2].cbBuffer   = 0;
-
-    /* Setup the response "output" security buffer */
-    resp_desc.ulVersion = SECBUFFER_VERSION;
-    resp_desc.cBuffers  = 1;
-    resp_desc.pBuffers  = &resp_buf;
-    resp_buf.BufferType = SECBUFFER_TOKEN;
-    resp_buf.pvBuffer   = output_token;
-    resp_buf.cbBuffer   = curlx_uztoul(token_max);
-
-    spn = Curl_convert_UTF8_to_tchar((char *) uripath);
-    if(!spn) {
-      s_pSecFn->FreeCredentialsHandle(&credentials);
-
-      Curl_sspi_free_identity(p_identity);
-      free(output_token);
+    return CURLE_OUT_OF_MEMORY;
+  }
 
-      return CURLE_OUT_OF_MEMORY;
-    }
+  /* Setup the challenge "input" security buffer if present */
+  chlg_desc.ulVersion    = SECBUFFER_VERSION;
+  chlg_desc.cBuffers     = 3;
+  chlg_desc.pBuffers     = chlg_buf;
+  chlg_buf[0].BufferType = SECBUFFER_TOKEN;
+  chlg_buf[0].pvBuffer   = digest->input_token;
+  chlg_buf[0].cbBuffer   = curlx_uztoul(digest->input_token_len);
+  chlg_buf[1].BufferType = SECBUFFER_PKG_PARAMS;
+  chlg_buf[1].pvBuffer   = (void *) request;
+  chlg_buf[1].cbBuffer   = curlx_uztoul(strlen((const char *) request));
+  chlg_buf[2].BufferType = SECBUFFER_PKG_PARAMS;
+  chlg_buf[2].pvBuffer   = NULL;
+  chlg_buf[2].cbBuffer   = 0;
 
-    /* Allocate our new context handle */
-    digest->http_context = calloc(1, sizeof(CtxtHandle));
-    if(!digest->http_context)
-      return CURLE_OUT_OF_MEMORY;
+  /* Setup the response "output" security buffer */
+  resp_desc.ulVersion = SECBUFFER_VERSION;
+  resp_desc.cBuffers  = 1;
+  resp_desc.pBuffers  = &resp_buf;
+  resp_buf.BufferType = SECBUFFER_TOKEN;
+  resp_buf.pvBuffer   = output_token;
+  resp_buf.cbBuffer   = curlx_uztoul(token_max);
 
-    /* Generate our reponse message */
-    status = s_pSecFn->InitializeSecurityContext(&credentials, NULL,
-                                                 spn,
-                                                 ISC_REQ_USE_HTTP_STYLE, 0, 0,
-                                                 &chlg_desc, 0,
-                                                 digest->http_context,
-                                                 &resp_desc, &attrs, &expiry);
-    Curl_unicodefree(spn);
-
-    if(status == SEC_I_COMPLETE_NEEDED ||
-       status == SEC_I_COMPLETE_AND_CONTINUE)
-      s_pSecFn->CompleteAuthToken(&credentials, &resp_desc);
-    else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) {
-      s_pSecFn->FreeCredentialsHandle(&credentials);
-
-      Curl_sspi_free_identity(p_identity);
-      free(output_token);
+  spn = Curl_convert_UTF8_to_tchar((char *) uripath);
+  if(!spn) {
+    s_pSecFn->FreeCredentialsHandle(&credentials);
 
-      Curl_safefree(digest->http_context);
+    Curl_sspi_free_identity(p_identity);
+    free(output_token);
 
-      return CURLE_OUT_OF_MEMORY;
-    }
+    return CURLE_OUT_OF_MEMORY;
+  }
 
-    output_token_len = resp_buf.cbBuffer;
+  /* Generate our reponse message */
+  status = s_pSecFn->InitializeSecurityContext(&credentials, NULL,
+                                               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)
+    s_pSecFn->CompleteAuthToken(&credentials, &resp_desc);
+  else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) {
     s_pSecFn->FreeCredentialsHandle(&credentials);
+
     Curl_sspi_free_identity(p_identity);
+    free(output_token);
+
+    return CURLE_OUT_OF_MEMORY;
   }
 
-  resp = malloc(output_token_len + 1);
+  resp = malloc(resp_buf.cbBuffer + 1);
   if(!resp) {
+    s_pSecFn->DeleteSecurityContext(&context);
+    s_pSecFn->FreeCredentialsHandle(&credentials);
+
+    Curl_sspi_free_identity(p_identity);
     free(output_token);
 
     return CURLE_OUT_OF_MEMORY;
   }
 
   /* Copy the generated reponse */
-  memcpy(resp, output_token, output_token_len);
-  resp[output_token_len] = 0;
+  memcpy(resp, resp_buf.pvBuffer, resp_buf.cbBuffer);
+  resp[resp_buf.cbBuffer] = 0x00;
 
   /* Return the response */
   *outptr = resp;
-  *outlen = output_token_len;
+  *outlen = resp_buf.cbBuffer;
+
+  /* Free our handles */
+  s_pSecFn->DeleteSecurityContext(&context);
+  s_pSecFn->FreeCredentialsHandle(&credentials);
+
+  /* Free the identity structure */
+  Curl_sspi_free_identity(p_identity);
 
   /* Free the response buffer */
   free(output_token);
@@ -617,12 +549,6 @@ void Curl_auth_digest_cleanup(struct digestdata *digest)
 
   /* Reset any variables */
   digest->input_token_len = 0;
-
-  /* Delete security context */
-  if(digest->http_context) {
-    s_pSecFn->DeleteSecurityContext(digest->http_context);
-    Curl_safefree(digest->http_context);
-  }
 }
 
 #endif /* USE_WINDOWS_SSPI && !CURL_DISABLE_CRYPTO_AUTH */
index 96861c9..b484a01 100644 (file)
@@ -27,7 +27,7 @@
 /*
  * NTLM details:
  *
- * https://davenport.sourceforge.io/ntlm.html
+ * http://davenport.sourceforge.net/ntlm.html
  * https://www.innovation.ch/java/ntlm.html
  */
 
@@ -41,7 +41,7 @@
 #include "curl_gethostname.h"
 #include "curl_multibyte.h"
 #include "warnless.h"
-#include "rand.h"
+
 #include "vtls/vtls.h"
 
 #ifdef USE_NSS
@@ -558,9 +558,8 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
     unsigned int entropy[2];
     unsigned char ntlmv2hash[0x18];
 
-    result = Curl_rand(data, &entropy[0], 2);
-    if(result)
-      return result;
+    entropy[0] = Curl_rand(data);
+    entropy[1] = Curl_rand(data);
 
     result = Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer);
     if(result)
@@ -599,9 +598,8 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
     unsigned int entropy[2];
 
     /* Need to create 8 bytes random data */
-    result = Curl_rand(data, &entropy[0], 2);
-    if(result)
-      return result;
+    entropy[0] = Curl_rand(data);
+    entropy[1] = Curl_rand(data);
 
     /* 8 bytes random data as challenge in lmresp */
     memcpy(lmresp, entropy, 8);
@@ -651,7 +649,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
 
     /* A safer but less compatible alternative is:
      *   Curl_ntlm_core_lm_resp(ntbuffer, &ntlm->nonce[0], lmresp);
-     * See https://davenport.sourceforge.io/ntlm.html#ntlmVersion2 */
+     * See http://davenport.sourceforge.net/ntlm.html#ntlmVersion2 */
   }
 
   if(unicode) {
index f906a3c..b14e7a5 100644 (file)
@@ -32,7 +32,7 @@
 /* Stuff only required for curl_ntlm_msgs.c */
 #ifdef BUILDING_CURL_NTLM_MSGS_C
 
-/* Flag bits definitions based on https://davenport.sourceforge.io/ntlm.html */
+/* Flag bits definitions based on http://davenport.sourceforge.net/ntlm.html */
 
 #define NTLMFLAG_NEGOTIATE_UNICODE               (1<<0)
 /* Indicates that Unicode strings are supported for use in security buffer
index 5fa95e2..672b43f 100644 (file)
@@ -264,7 +264,7 @@ CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data,
 
   /* Base64 encode the already generated response */
   result = Curl_base64_encode(data,
-                              (const char *) nego->output_token,
+                              (const char*) nego->output_token,
                               nego->output_token_length,
                               outptr, outlen);
 
index 3d17768..1292445 100644 (file)
@@ -36,8 +36,8 @@
 #  include <ares.h>
 #endif
 
-#ifdef USE_LIBIDN2
-#include <idn2.h>
+#ifdef USE_LIBIDN
+#include <stringprep.h>
 #endif
 
 #ifdef USE_LIBPSL
@@ -111,9 +111,9 @@ char *curl_version(void)
   left -= len;
   ptr += len;
 #endif
-#ifdef USE_LIBIDN2
-  if(idn2_check_version(IDN2_VERSION)) {
-    len = snprintf(ptr, left, " libidn2/%s", idn2_check_version(NULL));
+#ifdef USE_LIBIDN
+  if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) {
+    len = snprintf(ptr, left, " libidn/%s", stringprep_check_version(NULL));
     left -= len;
     ptr += len;
   }
@@ -324,9 +324,6 @@ static curl_version_info_data version_info = {
 #if defined(USE_LIBPSL)
   | CURL_VERSION_PSL
 #endif
-#if defined(HTTPS_PROXY_SUPPORT)
-  | CURL_VERSION_HTTPS_PROXY
-#endif
   ,
   NULL, /* ssl_version */
   0,    /* ssl_version_num, this is kept at zero */
@@ -368,10 +365,10 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
     version_info.ares_num = aresnum;
   }
 #endif
-#ifdef USE_LIBIDN2
+#ifdef USE_LIBIDN
   /* This returns a version string if we use the given version or later,
      otherwise it returns NULL */
-  version_info.libidn = idn2_check_version(IDN2_VERSION);
+  version_info.libidn = stringprep_check_version(LIBIDN_REQUIRED_VERSION);
   if(version_info.libidn)
     version_info.features |= CURL_VERSION_IDN;
 #elif defined(USE_WIN32_IDN)
index 1de758b..b6c69ad 100644 (file)
@@ -6,7 +6,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2010, DirecTV, Contact: Eric Hu, <ehu@directv.com>.
- * Copyright (C) 2010 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2010 - 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
@@ -65,7 +65,7 @@ int Curl_axtls_cleanup(void)
 
 static CURLcode map_error_to_curl(int axtls_err)
 {
-  switch(axtls_err) {
+  switch (axtls_err) {
   case SSL_ERROR_NOT_SUPPORTED:
   case SSL_ERROR_INVALID_VERSION:
   case -70:                       /* protocol version alert from server */
@@ -121,7 +121,7 @@ static Curl_send axtls_send;
 static void free_ssl_structs(struct ssl_connect_data *connssl)
 {
   if(connssl->ssl) {
-    ssl_free(connssl->ssl);
+    ssl_free (connssl->ssl);
     connssl->ssl = NULL;
   }
   if(connssl->ssl_ctx) {
@@ -158,7 +158,7 @@ static CURLcode connect_prep(struct connectdata *conn, int sockindex)
 
   /* axTLS only supports TLSv1 */
   /* check to see if we've been told to use an explicit SSL/TLS version */
-  switch(SSL_CONN_CONFIG(version)) {
+  switch(data->set.ssl.version) {
   case CURL_SSLVERSION_DEFAULT:
   case CURL_SSLVERSION_TLSv1:
     break;
@@ -183,17 +183,17 @@ static CURLcode connect_prep(struct connectdata *conn, int sockindex)
   conn->ssl[sockindex].ssl = NULL;
 
   /* Load the trusted CA cert bundle file */
-  if(SSL_CONN_CONFIG(CAfile)) {
-    if(ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CACERT,
-                    SSL_CONN_CONFIG(CAfile), NULL) != SSL_OK) {
+  if(data->set.ssl.CAfile) {
+    if(ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CACERT, data->set.ssl.CAfile, NULL)
+       != SSL_OK) {
       infof(data, "error reading ca cert file %s \n",
-            SSL_CONN_CONFIG(CAfile));
-      if(SSL_CONN_CONFIG(verifypeer)) {
+            data->set.ssl.CAfile);
+      if(data->set.ssl.verifypeer) {
         return CURLE_SSL_CACERT_BADFILE;
       }
     }
     else
-      infof(data, "found certificates in %s\n", SSL_CONN_CONFIG(CAfile));
+      infof(data, "found certificates in %s\n", data->set.ssl.CAfile);
   }
 
   /* gtls.c tasks we're skipping for now:
@@ -205,15 +205,15 @@ static CURLcode connect_prep(struct connectdata *conn, int sockindex)
    */
 
   /* Load client certificate */
-  if(SSL_SET_OPTION(cert)) {
+  if(data->set.str[STRING_CERT]) {
     i=0;
     /* Instead of trying to analyze cert type here, let axTLS try them all. */
     while(cert_types[i] != 0) {
       ssl_fcn_return = ssl_obj_load(ssl_ctx, cert_types[i],
-                                    SSL_SET_OPTION(cert), NULL);
+                                    data->set.str[STRING_CERT], NULL);
       if(ssl_fcn_return == SSL_OK) {
         infof(data, "successfully read cert file %s \n",
-              SSL_SET_OPTION(cert));
+              data->set.str[STRING_CERT]);
         break;
       }
       i++;
@@ -221,7 +221,7 @@ static CURLcode connect_prep(struct connectdata *conn, int sockindex)
     /* Tried all cert types, none worked. */
     if(cert_types[i] == 0) {
       failf(data, "%s is not x509 or pkcs12 format",
-            SSL_SET_OPTION(cert));
+            data->set.str[STRING_CERT]);
       return CURLE_SSL_CERTPROBLEM;
     }
   }
@@ -229,15 +229,15 @@ static CURLcode connect_prep(struct connectdata *conn, int sockindex)
   /* Load client key.
      If a pkcs12 file successfully loaded a cert, then there's nothing to do
      because the key has already been loaded. */
-  if(SSL_SET_OPTION(key) && cert_types[i] != SSL_OBJ_PKCS12) {
+  if(data->set.str[STRING_KEY] && cert_types[i] != SSL_OBJ_PKCS12) {
     i=0;
     /* Instead of trying to analyze key type here, let axTLS try them all. */
     while(key_types[i] != 0) {
       ssl_fcn_return = ssl_obj_load(ssl_ctx, key_types[i],
-                                    SSL_SET_OPTION(key), NULL);
+                                    data->set.str[STRING_KEY], NULL);
       if(ssl_fcn_return == SSL_OK) {
         infof(data, "successfully read key file %s \n",
-              SSL_SET_OPTION(key));
+              data->set.str[STRING_KEY]);
         break;
       }
       i++;
@@ -245,7 +245,7 @@ static CURLcode connect_prep(struct connectdata *conn, int sockindex)
     /* Tried all key types, none worked. */
     if(key_types[i] == 0) {
       failf(data, "Failure: %s is not a supported key file",
-            SSL_SET_OPTION(key));
+            data->set.str[STRING_KEY]);
       return CURLE_SSL_CONNECT_ERROR;
     }
   }
@@ -256,24 +256,23 @@ static CURLcode connect_prep(struct connectdata *conn, int sockindex)
    * 2) setting up callbacks.  these seem gnutls specific
    */
 
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     const uint8_t *ssl_sessionid;
     size_t ssl_idsize;
 
     /* In axTLS, handshaking happens inside ssl_client_new. */
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, (void **) &ssl_sessionid, &ssl_idsize,
-                              sockindex)) {
+    if(!Curl_ssl_getsessionid(conn, (void **) &ssl_sessionid, &ssl_idsize)) {
       /* we got a session id, use it! */
-      infof(data, "SSL re-using session ID\n");
+      infof (data, "SSL re-using session ID\n");
       ssl = ssl_client_new(ssl_ctx, conn->sock[sockindex],
-                           ssl_sessionid, (uint8_t)ssl_idsize, NULL);
+                           ssl_sessionid, (uint8_t)ssl_idsize);
     }
     Curl_ssl_sessionid_unlock(conn);
   }
 
   if(!ssl)
-    ssl = ssl_client_new(ssl_ctx, conn->sock[sockindex], NULL, 0, NULL);
+    ssl = ssl_client_new(ssl_ctx, conn->sock[sockindex], NULL, 0);
 
   conn->ssl[sockindex].ssl = ssl;
   return CURLE_OK;
@@ -292,17 +291,13 @@ static CURLcode connect_finish(struct connectdata *conn, int sockindex)
   const char *dns_altname;
   int8_t found_subject_alt_names = 0;
   int8_t found_subject_alt_name_matching_conn = 0;
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const char * const dispname = SSL_IS_PROXY() ?
-    conn->http_proxy.host.dispname : conn->host.dispname;
 
   /* Here, gtls.c gets the peer certificates and fails out depending on
    * settings in "data."  axTLS api doesn't have get cert chain fcn, so omit?
    */
 
   /* Verify server's certificate */
-  if(SSL_CONN_CONFIG(verifypeer)) {
+  if(data->set.ssl.verifypeer) {
     if(ssl_verify_cert(ssl) != SSL_OK) {
       Curl_axtls_close(conn, sockindex);
       failf(data, "server cert verify failed");
@@ -333,8 +328,8 @@ static CURLcode connect_finish(struct connectdata *conn, int sockindex)
     found_subject_alt_names = 1;
 
     infof(data, "\tComparing subject alt name DNS with hostname: %s <-> %s\n",
-          dns_altname, hostname);
-    if(Curl_cert_hostcheck(dns_altname, hostname)) {
+          dns_altname, conn->host.name);
+    if(Curl_cert_hostcheck(dns_altname, conn->host.name)) {
       found_subject_alt_name_matching_conn = 1;
       break;
     }
@@ -342,21 +337,23 @@ static CURLcode connect_finish(struct connectdata *conn, int sockindex)
 
   /* RFC2818 checks */
   if(found_subject_alt_names && !found_subject_alt_name_matching_conn) {
-    if(SSL_CONN_CONFIG(verifyhost)) {
+    if(data->set.ssl.verifyhost) {
       /* Break connection ! */
       Curl_axtls_close(conn, sockindex);
-      failf(data, "\tsubjectAltName(s) do not match %s\n", dispname);
+      failf(data, "\tsubjectAltName(s) do not match %s\n",
+            conn->host.dispname);
       return CURLE_PEER_FAILED_VERIFICATION;
     }
     else
-      infof(data, "\tsubjectAltName(s) do not match %s\n", dispname);
+      infof(data, "\tsubjectAltName(s) do not match %s\n",
+            conn->host.dispname);
   }
   else if(found_subject_alt_names == 0) {
     /* Per RFC2818, when no Subject Alt Names were available, examine the peer
        CN as a legacy fallback */
     peer_CN = ssl_get_cert_dn(ssl, SSL_X509_CERT_COMMON_NAME);
     if(peer_CN == NULL) {
-      if(SSL_CONN_CONFIG(verifyhost)) {
+      if(data->set.ssl.verifyhost) {
         Curl_axtls_close(conn, sockindex);
         failf(data, "unable to obtain common name from peer certificate");
         return CURLE_PEER_FAILED_VERIFICATION;
@@ -365,17 +362,17 @@ static CURLcode connect_finish(struct connectdata *conn, int sockindex)
         infof(data, "unable to obtain common name from peer certificate");
     }
     else {
-      if(!Curl_cert_hostcheck((const char *)peer_CN, hostname)) {
-        if(SSL_CONN_CONFIG(verifyhost)) {
+      if(!Curl_cert_hostcheck((const char *)peer_CN, conn->host.name)) {
+        if(data->set.ssl.verifyhost) {
           /* Break connection ! */
           Curl_axtls_close(conn, sockindex);
           failf(data, "\tcommon name \"%s\" does not match \"%s\"\n",
-                peer_CN, dispname);
+                peer_CN, conn->host.dispname);
           return CURLE_PEER_FAILED_VERIFICATION;
         }
         else
           infof(data, "\tcommon name \"%s\" does not match \"%s\"\n",
-                peer_CN, dispname);
+                peer_CN, conn->host.dispname);
       }
     }
   }
@@ -386,13 +383,13 @@ static CURLcode connect_finish(struct connectdata *conn, int sockindex)
   conn->send[sockindex] = axtls_send;
 
   /* Put our freshly minted SSL session in cache */
-  if(data->set.general_ssl.sessionid) {
-    const uint8_t *ssl_sessionid = ssl_get_session_id(ssl);
-    size_t ssl_idsize = ssl_get_session_id_size(ssl);
+  if(conn->ssl_config.sessionid) {
+    const uint8_t *ssl_sessionid = ssl_get_session_id_size(ssl);
+    size_t ssl_idsize = ssl_get_session_id(ssl);
     Curl_ssl_sessionid_lock(conn);
-    if(Curl_ssl_addsessionid(conn, (void *) ssl_sessionid, ssl_idsize,
-                             sockindex) != CURLE_OK)
-      infof(data, "failed to add session to cache\n");
+    if(Curl_ssl_addsessionid(conn, (void *) ssl_sessionid, ssl_idsize)
+       != CURLE_OK)
+      infof (data, "failed to add session to cache\n");
     Curl_ssl_sessionid_unlock(conn);
   }
 
@@ -440,7 +437,7 @@ CURLcode Curl_axtls_connect_nonblocking(
         return CURLE_OK;
       }
     }
-    infof(conn->data, "handshake completed successfully\n");
+    infof (conn->data, "handshake completed successfully\n");
     conn->ssl[sockindex].connecting_state = ssl_connect_3;
   }
 
@@ -506,7 +503,7 @@ Curl_axtls_connect(struct connectdata *conn,
     /* TODO: avoid polling */
     Curl_wait_ms(10);
   }
-  infof(conn->data, "handshake completed successfully\n");
+  infof (conn->data, "handshake completed successfully\n");
 
   conn_step = connect_finish(conn, sockindex);
   if(conn_step != CURLE_OK) {
@@ -582,7 +579,8 @@ int Curl_axtls_shutdown(struct connectdata *conn, int sockindex)
   */
 
   if(connssl->ssl) {
-    int what = SOCKET_READABLE(conn->sock[sockindex], SSL_SHUTDOWN_TIMEOUT);
+    int what = Curl_socket_ready(conn->sock[sockindex],
+                                 CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
     if(what > 0) {
       /* Something to read, let's do it and hope that it is the close
          notify alert from the server.  buf is managed internally by
@@ -680,9 +678,9 @@ size_t Curl_axtls_version(char *buffer, size_t size)
   return snprintf(buffer, size, "axTLS/%s", ssl_version());
 }
 
-CURLcode Curl_axtls_random(struct Curl_easy *data,
-                           unsigned char *entropy,
-                           size_t length)
+int Curl_axtls_random(struct Curl_easy *data,
+                      unsigned char *entropy,
+                      size_t length)
 {
   static bool ssl_seeded = FALSE;
   (void)data;
@@ -694,7 +692,7 @@ CURLcode Curl_axtls_random(struct Curl_easy *data,
     RNG_initialize();
   }
   get_random((int)length, entropy);
-  return CURLE_OK;
+  return 0;
 }
 
 #endif /* USE_AXTLS */
index 53797ea..b16d051 100644 (file)
@@ -8,7 +8,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2010, DirecTV, Contact: Eric Hu <ehu@directv.com>
- * Copyright (C) 2010 - 2017, 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
@@ -42,9 +42,9 @@ void Curl_axtls_session_free(void *ptr);
 size_t Curl_axtls_version(char *buffer, size_t size);
 int Curl_axtls_shutdown(struct connectdata *conn, int sockindex);
 int Curl_axtls_check_cxn(struct connectdata *conn);
-CURLcode Curl_axtls_random(struct Curl_easy *data,
-                           unsigned char *entropy,
-                           size_t length);
+int Curl_axtls_random(struct Curl_easy *data,
+                      unsigned char *entropy,
+                      size_t length);
 
 /* Set the API backend definition to axTLS */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_AXTLS
index 5e5947c..7994b3e 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -55,7 +55,7 @@ and that's a problem since options.h hasn't been included yet. */
 #include "parsedate.h"
 #include "connect.h" /* for the connect timeout */
 #include "select.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "x509asn1.h"
 #include "curl_printf.h"
 
@@ -118,9 +118,9 @@ static int do_file_type(const char *type)
 {
   if(!type || !type[0])
     return SSL_FILETYPE_PEM;
-  if(strcasecompare(type, "PEM"))
+  if(Curl_raw_equal(type, "PEM"))
     return SSL_FILETYPE_PEM;
-  if(strcasecompare(type, "DER"))
+  if(Curl_raw_equal(type, "DER"))
     return SSL_FILETYPE_ASN1;
   return -1;
 }
@@ -134,7 +134,6 @@ cyassl_connect_step1(struct connectdata *conn,
                      int sockindex)
 {
   char error_buffer[CYASSL_MAX_ERROR_SZ];
-  char *ciphers;
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data* conssl = &conn->ssl[sockindex];
   SSL_METHOD* req_method = NULL;
@@ -150,7 +149,7 @@ cyassl_connect_step1(struct connectdata *conn,
     return CURLE_OK;
 
   /* check to see if we've been told to use an explicit SSL/TLS version */
-  switch(SSL_CONN_CONFIG(version)) {
+  switch(data->set.ssl.version) {
   case CURL_SSLVERSION_DEFAULT:
   case CURL_SSLVERSION_TLSv1:
 #if LIBCYASSL_VERSION_HEX >= 0x03003000 /* >= 3.3.0 */
@@ -175,15 +174,12 @@ cyassl_connect_step1(struct connectdata *conn,
     req_method = TLSv1_2_client_method();
     use_sni(TRUE);
     break;
-  case CURL_SSLVERSION_TLSv1_3:
-    failf(data, "CyaSSL: TLS 1.3 is not yet supported");
-    return CURLE_SSL_CONNECT_ERROR;
   case CURL_SSLVERSION_SSLv3:
 #ifdef WOLFSSL_ALLOW_SSLV3
     req_method = SSLv3_client_method();
     use_sni(FALSE);
 #else
-    failf(data, "CyaSSL does not support SSLv3");
+    failf(data, "No support for SSLv3");
     return CURLE_NOT_BUILT_IN;
 #endif
     break;
@@ -209,7 +205,7 @@ cyassl_connect_step1(struct connectdata *conn,
     return CURLE_OUT_OF_MEMORY;
   }
 
-  switch(SSL_CONN_CONFIG(version)) {
+  switch(data->set.ssl.version) {
   case CURL_SSLVERSION_DEFAULT:
   case CURL_SSLVERSION_TLSv1:
 #if LIBCYASSL_VERSION_HEX > 0x03004006 /* > 3.4.6 */
@@ -230,29 +226,20 @@ cyassl_connect_step1(struct connectdata *conn,
     break;
   }
 
-  ciphers = SSL_CONN_CONFIG(cipher_list);
-  if(ciphers) {
-    if(!SSL_CTX_set_cipher_list(conssl->ctx, ciphers)) {
-      failf(data, "failed setting cipher list: %s", ciphers);
-      return CURLE_SSL_CIPHER;
-    }
-    infof(data, "Cipher selection: %s\n", ciphers);
-  }
-
 #ifndef NO_FILESYSTEM
   /* load trusted cacert */
-  if(SSL_CONN_CONFIG(CAfile)) {
+  if(data->set.str[STRING_SSL_CAFILE]) {
     if(1 != SSL_CTX_load_verify_locations(conssl->ctx,
-                                      SSL_CONN_CONFIG(CAfile),
-                                      SSL_CONN_CONFIG(CApath))) {
-      if(SSL_CONN_CONFIG(verifypeer)) {
+                                          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"
               "  CAfile: %s\n  CApath: %s",
-              SSL_CONN_CONFIG(CAfile)?
-              SSL_CONN_CONFIG(CAfile): "none",
-              SSL_CONN_CONFIG(CApath)?
-              SSL_CONN_CONFIG(CApath) : "none");
+              data->set.str[STRING_SSL_CAFILE]?
+              data->set.str[STRING_SSL_CAFILE]: "none",
+              data->set.str[STRING_SSL_CAPATH]?
+              data->set.str[STRING_SSL_CAPATH] : "none");
         return CURLE_SSL_CACERT_BADFILE;
       }
       else {
@@ -269,25 +256,25 @@ cyassl_connect_step1(struct connectdata *conn,
     infof(data,
           "  CAfile: %s\n"
           "  CApath: %s\n",
-          SSL_CONN_CONFIG(CAfile) ? SSL_CONN_CONFIG(CAfile):
+          data->set.str[STRING_SSL_CAFILE] ? data->set.str[STRING_SSL_CAFILE]:
           "none",
-          SSL_CONN_CONFIG(CApath) ? SSL_CONN_CONFIG(CApath):
+          data->set.str[STRING_SSL_CAPATH] ? data->set.str[STRING_SSL_CAPATH]:
           "none");
   }
 
   /* Load the client certificate, and private key */
-  if(SSL_SET_OPTION(cert) && SSL_SET_OPTION(key)) {
-    int file_type = do_file_type(SSL_SET_OPTION(cert_type));
+  if(data->set.str[STRING_CERT] && data->set.str[STRING_KEY]) {
+    int file_type = do_file_type(data->set.str[STRING_CERT_TYPE]);
 
-    if(SSL_CTX_use_certificate_file(conssl->ctx, SSL_SET_OPTION(cert),
+    if(SSL_CTX_use_certificate_file(conssl->ctx, data->set.str[STRING_CERT],
                                      file_type) != 1) {
       failf(data, "unable to use client certificate (no key or wrong pass"
             " phrase?)");
       return CURLE_SSL_CONNECT_ERROR;
     }
 
-    file_type = do_file_type(SSL_SET_OPTION(key_type));
-    if(SSL_CTX_use_PrivateKey_file(conssl->ctx, SSL_SET_OPTION(key),
+    file_type = do_file_type(data->set.str[STRING_KEY_TYPE]);
+    if(SSL_CTX_use_PrivateKey_file(conssl->ctx, data->set.str[STRING_KEY],
                                     file_type) != 1) {
       failf(data, "unable to set private key");
       return CURLE_SSL_CONNECT_ERROR;
@@ -300,8 +287,7 @@ cyassl_connect_step1(struct connectdata *conn,
    * anyway. In the latter case the result of the verification is checked with
    * SSL_get_verify_result() below. */
   SSL_CTX_set_verify(conssl->ctx,
-                     SSL_CONN_CONFIG(verifypeer)?SSL_VERIFY_PEER:
-                                                 SSL_VERIFY_NONE,
+                     data->set.ssl.verifypeer?SSL_VERIFY_PEER:SSL_VERIFY_NONE,
                      NULL);
 
 #ifdef HAVE_SNI
@@ -310,15 +296,13 @@ cyassl_connect_step1(struct connectdata *conn,
 #ifdef ENABLE_IPV6
     struct in6_addr addr6;
 #endif
-    const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-      conn->host.name;
-    size_t hostname_len = strlen(hostname);
+    size_t hostname_len = strlen(conn->host.name);
     if((hostname_len < USHRT_MAX) &&
-       (0 == Curl_inet_pton(AF_INET, hostname, &addr4)) &&
+       (0 == Curl_inet_pton(AF_INET, conn->host.name, &addr4)) &&
 #ifdef ENABLE_IPV6
-       (0 == Curl_inet_pton(AF_INET6, hostname, &addr6)) &&
+       (0 == Curl_inet_pton(AF_INET6, conn->host.name, &addr6)) &&
 #endif
-       (CyaSSL_CTX_UseSNI(conssl->ctx, CYASSL_SNI_HOST_NAME, hostname,
+       (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");
@@ -347,7 +331,7 @@ cyassl_connect_step1(struct connectdata *conn,
     }
   }
 #ifdef NO_FILESYSTEM
-  else if(SSL_CONN_CONFIG(verifypeer)) {
+  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"
@@ -393,11 +377,11 @@ cyassl_connect_step1(struct connectdata *conn,
 #endif /* HAVE_ALPN */
 
   /* Check if there's a cached ID we can/should use here! */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     void *ssl_sessionid = NULL;
 
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL, sockindex)) {
+    if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL)) {
       /* we got a session id, use it! */
       if(!SSL_set_session(conssl->handle, ssl_sessionid)) {
         Curl_ssl_sessionid_unlock(conn);
@@ -407,7 +391,7 @@ cyassl_connect_step1(struct connectdata *conn,
         return CURLE_SSL_CONNECT_ERROR;
       }
       /* Informational message */
-      infof(data, "SSL re-using session ID\n");
+      infof (data, "SSL re-using session ID\n");
     }
     Curl_ssl_sessionid_unlock(conn);
   }
@@ -430,20 +414,13 @@ cyassl_connect_step2(struct connectdata *conn,
   int ret = -1;
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data* conssl = &conn->ssl[sockindex];
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const char * const dispname = SSL_IS_PROXY() ?
-    conn->http_proxy.host.dispname : conn->host.dispname;
-  const char * const pinnedpubkey = SSL_IS_PROXY() ?
-                        data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
-                        data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
 
   conn->recv[sockindex] = cyassl_recv;
   conn->send[sockindex] = cyassl_send;
 
   /* Enable RFC2818 checks */
-  if(SSL_CONN_CONFIG(verifyhost)) {
-    ret = CyaSSL_check_domain_name(conssl->handle, hostname);
+  if(data->set.ssl.verifyhost) {
+    ret = CyaSSL_check_domain_name(conssl->handle, conn->host.name);
     if(ret == SSL_FAILURE)
       return CURLE_OUT_OF_MEMORY;
   }
@@ -467,31 +444,31 @@ cyassl_connect_step2(struct connectdata *conn,
     else if(DOMAIN_NAME_MISMATCH == detail) {
 #if 1
       failf(data, "\tsubject alt name(s) or common name do not match \"%s\"\n",
-            dispname);
+            conn->host.dispname);
       return CURLE_PEER_FAILED_VERIFICATION;
 #else
       /* When the CyaSSL_check_domain_name() is used and you desire to continue
-       * on a DOMAIN_NAME_MISMATCH, i.e. 'conn->ssl_config.verifyhost == 0',
+       * on a DOMAIN_NAME_MISMATCH, i.e. 'data->set.ssl.verifyhost == 0',
        * CyaSSL version 2.4.0 will fail with an INCOMPLETE_DATA error. The only
        * way to do this is currently to switch the CyaSSL_check_domain_name()
-       * in and out based on the 'conn->ssl_config.verifyhost' value. */
-      if(SSL_CONN_CONFIG(verifyhost)) {
+       * in and out based on the 'data->set.ssl.verifyhost' value. */
+      if(data->set.ssl.verifyhost) {
         failf(data,
               "\tsubject alt name(s) or common name do not match \"%s\"\n",
-              dispname);
+              conn->host.dispname);
         return CURLE_PEER_FAILED_VERIFICATION;
       }
       else {
         infof(data,
               "\tsubject alt name(s) and/or common name do not match \"%s\"\n",
-              dispname);
+              conn->host.dispname);
         return CURLE_OK;
       }
 #endif
     }
 #if LIBCYASSL_VERSION_HEX >= 0x02007000 /* 2.7.0 */
     else if(ASN_NO_SIGNER_E == detail) {
-      if(SSL_CONN_CONFIG(verifypeer)) {
+      if(data->set.ssl.verifypeer) {
         failf(data, "\tCA signer not available for verification\n");
         return CURLE_SSL_CACERT_BADFILE;
       }
@@ -510,7 +487,7 @@ cyassl_connect_step2(struct connectdata *conn,
     }
   }
 
-  if(pinnedpubkey) {
+  if(data->set.str[STRING_SSL_PINNEDPUBLICKEY]) {
 #ifdef KEEP_PEER_CERT
     X509 *x509;
     const char *x509_der;
@@ -532,8 +509,7 @@ cyassl_connect_step2(struct connectdata *conn,
     }
 
     memset(&x509_parsed, 0, sizeof x509_parsed);
-    if(Curl_parseX509(&x509_parsed, x509_der, x509_der + x509_der_len))
-      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    Curl_parseX509(&x509_parsed, x509_der, x509_der + x509_der_len);
 
     pubkey = &x509_parsed.subjectPublicKeyInfo;
     if(!pubkey->header || pubkey->end <= pubkey->header) {
@@ -542,7 +518,7 @@ cyassl_connect_step2(struct connectdata *conn,
     }
 
     result = Curl_pin_peer_pubkey(data,
-                                  pinnedpubkey,
+                                  data->set.str[STRING_SSL_PINNEDPUBLICKEY],
                                   (const unsigned char *)pubkey->header,
                                   (size_t)(pubkey->end - pubkey->header));
     if(result) {
@@ -591,13 +567,7 @@ cyassl_connect_step2(struct connectdata *conn,
 #endif /* HAVE_ALPN */
 
   conssl->connecting_state = ssl_connect_3;
-#if (LIBCYASSL_VERSION_HEX >= 0x03009010)
-  infof(data, "SSL connection using %s / %s\n",
-        wolfSSL_get_version(conssl->handle),
-        wolfSSL_get_cipher_name(conssl->handle));
-#else
   infof(data, "SSL connected\n");
-#endif
 
   return CURLE_OK;
 }
@@ -613,7 +583,7 @@ cyassl_connect_step3(struct connectdata *conn,
 
   DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
 
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     bool incache;
     SSL_SESSION *our_ssl_sessionid;
     void *old_ssl_sessionid = NULL;
@@ -621,8 +591,7 @@ cyassl_connect_step3(struct connectdata *conn,
     our_ssl_sessionid = SSL_get_session(connssl->handle);
 
     Curl_ssl_sessionid_lock(conn);
-    incache = !(Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL,
-                                      sockindex));
+    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");
@@ -633,7 +602,7 @@ cyassl_connect_step3(struct connectdata *conn,
 
     if(!incache) {
       result = Curl_ssl_addsessionid(conn, our_ssl_sessionid,
-                                     0 /* unknown size */, sockindex);
+                                     0 /* unknown size */);
       if(result) {
         Curl_ssl_sessionid_unlock(conn);
         failf(data, "failed to store ssl session");
@@ -685,11 +654,11 @@ void Curl_cyassl_close(struct connectdata *conn, int sockindex)
 
   if(conssl->handle) {
     (void)SSL_shutdown(conssl->handle);
-    SSL_free(conssl->handle);
+    SSL_free (conssl->handle);
     conssl->handle = NULL;
   }
   if(conssl->ctx) {
-    SSL_CTX_free(conssl->ctx);
+    SSL_CTX_free (conssl->ctx);
     conssl->ctx = NULL;
   }
 }
@@ -771,7 +740,7 @@ int Curl_cyassl_shutdown(struct connectdata *conn, int sockindex)
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
 
   if(connssl->handle) {
-    SSL_free(connssl->handle);
+    SSL_free (connssl->handle);
     connssl->handle = NULL;
   }
   return retval;
@@ -788,7 +757,7 @@ cyassl_connect_common(struct connectdata *conn,
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   curl_socket_t sockfd = conn->sock[sockindex];
-  time_t timeout_ms;
+  long timeout_ms;
   int what;
 
   /* check if the connection has already been established */
@@ -834,8 +803,7 @@ cyassl_connect_common(struct connectdata *conn,
       curl_socket_t readfd = ssl_connect_2_reading==
         connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
 
-      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
-                               nonblocking?0:timeout_ms);
+      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);
@@ -917,19 +885,19 @@ Curl_cyassl_connect(struct connectdata *conn,
   return CURLE_OK;
 }
 
-CURLcode Curl_cyassl_random(struct Curl_easy *data,
-                            unsigned char *entropy,
-                            size_t length)
+int Curl_cyassl_random(struct Curl_easy *data,
+                       unsigned char *entropy,
+                       size_t length)
 {
   RNG rng;
   (void)data;
   if(InitRng(&rng))
-    return CURLE_FAILED_INIT;
+    return 1;
   if(length > UINT_MAX)
-    return CURLE_FAILED_INIT;
+    return 1;
   if(RNG_GenerateBlock(&rng, entropy, (unsigned)length))
-    return CURLE_FAILED_INIT;
-  return CURLE_OK;
+    return 1;
+  return 0;
 }
 
 void Curl_cyassl_sha256sum(const unsigned char *tmp, /* input */
index f47719e..508dfaa 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -51,15 +51,15 @@ int Curl_cyassl_init(void);
 CURLcode Curl_cyassl_connect_nonblocking(struct connectdata *conn,
                                          int sockindex,
                                          bool *done);
-CURLcode Curl_cyassl_random(struct Curl_easy *data,
-                            unsigned char *entropy,
-                            size_t length);
+int Curl_cyassl_random(struct Curl_easy *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 CyaSSL */
+/* Set the API backend definition to Schannel */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_CYASSL
 
 /* this backend supports CURLOPT_SSL_CTX_* */
index 050bf96..90119dd 100644 (file)
@@ -6,7 +6,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
- * Copyright (C) 2012 - 2017, 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
@@ -197,7 +197,7 @@ static OSStatus SocketWrite(SSLConnectionRef connection,
 
   do {
     length = write(sock,
-                   (char *)dataPtr + bytesSent,
+                   (char*)dataPtr + bytesSent,
                    dataLen - bytesSent);
   } while((length > 0) &&
            ( (bytesSent += length) < dataLen) );
@@ -219,10 +219,8 @@ static OSStatus SocketWrite(SSLConnectionRef connection,
   return ortn;
 }
 
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-CF_INLINE const char *SSLCipherNameForNumber(SSLCipherSuite cipher)
-{
-  switch(cipher) {
+CF_INLINE const char *SSLCipherNameForNumber(SSLCipherSuite cipher) {
+  switch (cipher) {
     /* SSL version 3.0 */
     case SSL_RSA_WITH_NULL_MD5:
       return "SSL_RSA_WITH_NULL_MD5";
@@ -366,8 +364,7 @@ CF_INLINE const char *SSLCipherNameForNumber(SSLCipherSuite cipher)
   return "SSL_NULL_WITH_NULL_NULL";
 }
 
-CF_INLINE const char *TLSCipherNameForNumber(SSLCipherSuite cipher)
-{
+CF_INLINE const char *TLSCipherNameForNumber(SSLCipherSuite cipher) {
   switch(cipher) {
     /* TLS 1.0 with AES (RFC 3268) */
     case TLS_RSA_WITH_AES_128_CBC_SHA:
@@ -777,7 +774,6 @@ CF_INLINE const char *TLSCipherNameForNumber(SSLCipherSuite cipher)
   }
   return "TLS_NULL_WITH_NULL_NULL";
 }
-#endif /* !CURL_DISABLE_VERBOSE_STRINGS */
 
 #if CURL_BUILD_MAC
 CF_INLINE void GetDarwinVersionNumber(int *major, int *minor)
@@ -889,17 +885,12 @@ static OSStatus CopyIdentityWithLabel(char *label,
   OSStatus status = errSecItemNotFound;
 
 #if CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS
-  CFArrayRef keys_list;
-  CFIndex keys_list_count;
-  CFIndex i;
-  CFStringRef common_name;
-
   /* SecItemCopyMatching() was introduced in iOS and Snow Leopard.
      kSecClassIdentity was introduced in Lion. If both exist, let's use them
      to find the certificate. */
   if(SecItemCopyMatching != NULL && kSecClassIdentity != NULL) {
-    CFTypeRef keys[5];
-    CFTypeRef values[5];
+    CFTypeRef keys[4];
+    CFTypeRef values[4];
     CFDictionaryRef query_dict;
     CFStringRef label_cf = CFStringCreateWithCString(NULL, label,
       kCFStringEncodingUTF8);
@@ -909,66 +900,27 @@ static OSStatus CopyIdentityWithLabel(char *label,
     keys[0] = kSecClass;
     values[1] = kCFBooleanTrue;    /* we want a reference */
     keys[1] = kSecReturnRef;
-    values[2] = kSecMatchLimitAll; /* kSecMatchLimitOne would be better if the
-                                    * label matching below worked correctly */
+    values[2] = kSecMatchLimitOne; /* one is enough, thanks */
     keys[2] = kSecMatchLimit;
     /* identity searches need a SecPolicyRef in order to work */
-    values[3] = SecPolicyCreateSSL(false, NULL);
+    values[3] = SecPolicyCreateSSL(false, label_cf);
     keys[3] = kSecMatchPolicy;
-    /* match the name of the certificate (doesn't work in macOS 10.12.1) */
-    values[4] = label_cf;
-    keys[4] = kSecAttrLabel;
     query_dict = CFDictionaryCreate(NULL, (const void **)keys,
-                                    (const void **)values, 5L,
-                                    &kCFCopyStringDictionaryKeyCallBacks,
-                                    &kCFTypeDictionaryValueCallBacks);
+                                   (const void **)values, 4L,
+                                   &kCFCopyStringDictionaryKeyCallBacks,
+                                   &kCFTypeDictionaryValueCallBacks);
     CFRelease(values[3]);
+    CFRelease(label_cf);
 
     /* Do we have a match? */
-    status = SecItemCopyMatching(query_dict, (CFTypeRef *) &keys_list);
-
-    /* Because kSecAttrLabel matching doesn't work with kSecClassIdentity,
-     * we need to find the correct identity ourselves */
-    if(status == noErr) {
-      keys_list_count = CFArrayGetCount(keys_list);
-      *out_cert_and_key = NULL;
-      status = 1;
-      for(i=0; i<keys_list_count; i++) {
-        OSStatus err = noErr;
-        SecCertificateRef cert = NULL;
-        SecIdentityRef identity =
-          (SecIdentityRef) CFArrayGetValueAtIndex(keys_list, i);
-        err = SecIdentityCopyCertificate(identity, &cert);
-        if(err == noErr) {
-#if CURL_BUILD_IOS
-          common_name = SecCertificateCopySubjectSummary(cert);
-#elif CURL_BUILD_MAC_10_7
-          SecCertificateCopyCommonName(cert, &common_name);
-#endif
-          if(CFStringCompare(common_name, label_cf, 0) == kCFCompareEqualTo) {
-            CFRelease(cert);
-            CFRelease(common_name);
-            CFRetain(identity);
-            *out_cert_and_key = identity;
-            status = noErr;
-            break;
-          }
-          CFRelease(common_name);
-        }
-        CFRelease(cert);
-      }
-    }
-
-    if(keys_list)
-      CFRelease(keys_list);
+    status = SecItemCopyMatching(query_dict, (CFTypeRef *)out_cert_and_key);
     CFRelease(query_dict);
-    CFRelease(label_cf);
   }
   else {
 #if CURL_SUPPORT_MAC_10_6
     /* On Leopard and Snow Leopard, fall back to SecKeychainSearch. */
     status = CopyIdentityWithLabelOldSchool(label, out_cert_and_key);
-#endif /* CURL_SUPPORT_MAC_10_6 */
+#endif /* CURL_SUPPORT_MAC_10_7 */
   }
 #elif CURL_SUPPORT_MAC_10_6
   /* For developers building on older cats, we have no choice but to fall back
@@ -1050,12 +1002,6 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
   struct Curl_easy *data = conn->data;
   curl_socket_t sockfd = conn->sock[sockindex];
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-  const char * const ssl_cafile = SSL_CONN_CONFIG(CAfile);
-  const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
-  char * const ssl_cert = SSL_SET_OPTION(cert);
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
 #ifdef ENABLE_IPV6
   struct in6_addr addr;
 #else
@@ -1106,46 +1052,40 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
   /* check to see if we've been told to use an explicit SSL/TLS version */
 #if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
   if(SSLSetProtocolVersionMax != NULL) {
-    switch(conn->ssl_config.version) {
-    case CURL_SSLVERSION_DEFAULT:
-    case CURL_SSLVERSION_TLSv1:
-      (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol1);
-      (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol12);
-      break;
-    case CURL_SSLVERSION_TLSv1_0:
-      (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol1);
-      (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol1);
-      break;
-    case CURL_SSLVERSION_TLSv1_1:
-      (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol11);
-      (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol11);
-      break;
-    case CURL_SSLVERSION_TLSv1_2:
-      (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol12);
-      (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol12);
-      break;
-    case CURL_SSLVERSION_TLSv1_3:
-      failf(data, "DarwinSSL: TLS 1.3 is not yet supported");
-      return CURLE_SSL_CONNECT_ERROR;
-    case CURL_SSLVERSION_SSLv3:
-      err = SSLSetProtocolVersionMin(connssl->ssl_ctx, kSSLProtocol3);
-      if(err != noErr) {
-        failf(data, "Your version of the OS does not support SSLv3");
-        return CURLE_SSL_CONNECT_ERROR;
-      }
-      (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kSSLProtocol3);
-      break;
-    case CURL_SSLVERSION_SSLv2:
-      err = SSLSetProtocolVersionMin(connssl->ssl_ctx, kSSLProtocol2);
-      if(err != noErr) {
-        failf(data, "Your version of the OS does not support SSLv2");
-        return CURLE_SSL_CONNECT_ERROR;
-      }
-      (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kSSLProtocol2);
-      break;
-    default:
-      failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-      return CURLE_SSL_CONNECT_ERROR;
+    switch(data->set.ssl.version) {
+      default:
+      case CURL_SSLVERSION_DEFAULT:
+      case CURL_SSLVERSION_TLSv1:
+        (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol1);
+        (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol12);
+        break;
+      case CURL_SSLVERSION_TLSv1_0:
+        (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol1);
+        (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol1);
+        break;
+      case CURL_SSLVERSION_TLSv1_1:
+        (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol11);
+        (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol11);
+        break;
+      case CURL_SSLVERSION_TLSv1_2:
+        (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol12);
+        (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol12);
+        break;
+      case CURL_SSLVERSION_SSLv3:
+        err = SSLSetProtocolVersionMin(connssl->ssl_ctx, kSSLProtocol3);
+        if(err != noErr) {
+          failf(data, "Your version of the OS does not support SSLv3");
+          return CURLE_SSL_CONNECT_ERROR;
+        }
+        (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kSSLProtocol3);
+        break;
+      case CURL_SSLVERSION_SSLv2:
+        err = SSLSetProtocolVersionMin(connssl->ssl_ctx, kSSLProtocol2);
+        if(err != noErr) {
+          failf(data, "Your version of the OS does not support SSLv2");
+          return CURLE_SSL_CONNECT_ERROR;
+        }
+        (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kSSLProtocol2);
     }
   }
   else {
@@ -1153,131 +1093,121 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
     (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
                                        kSSLProtocolAll,
                                        false);
-    switch(conn->ssl_config.version) {
+    switch (data->set.ssl.version) {
+      default:
+      case CURL_SSLVERSION_DEFAULT:
+      case CURL_SSLVERSION_TLSv1:
+        (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kTLSProtocol1,
+                                           true);
+        (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kTLSProtocol11,
+                                           true);
+        (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kTLSProtocol12,
+                                           true);
+        break;
+      case CURL_SSLVERSION_TLSv1_0:
+        (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kTLSProtocol1,
+                                           true);
+        break;
+      case CURL_SSLVERSION_TLSv1_1:
+        (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kTLSProtocol11,
+                                           true);
+        break;
+      case CURL_SSLVERSION_TLSv1_2:
+        (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kTLSProtocol12,
+                                           true);
+        break;
+      case CURL_SSLVERSION_SSLv3:
+        err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kSSLProtocol3,
+                                           true);
+        if(err != noErr) {
+          failf(data, "Your version of the OS does not support SSLv3");
+          return CURLE_SSL_CONNECT_ERROR;
+        }
+        break;
+      case CURL_SSLVERSION_SSLv2:
+        err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
+                                           kSSLProtocol2,
+                                           true);
+        if(err != noErr) {
+          failf(data, "Your version of the OS does not support SSLv2");
+          return CURLE_SSL_CONNECT_ERROR;
+        }
+        break;
+    }
+#endif  /* CURL_SUPPORT_MAC_10_8 */
+  }
+#else
+  (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx, kSSLProtocolAll, false);
+  switch(data->set.ssl.version) {
+    default:
     case CURL_SSLVERSION_DEFAULT:
     case CURL_SSLVERSION_TLSv1:
-      (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                         kTLSProtocol1,
-                                         true);
-      (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                         kTLSProtocol11,
-                                         true);
-      (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                         kTLSProtocol12,
-                                         true);
-      break;
     case CURL_SSLVERSION_TLSv1_0:
       (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
                                          kTLSProtocol1,
                                          true);
       break;
     case CURL_SSLVERSION_TLSv1_1:
-      (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                         kTLSProtocol11,
-                                         true);
-      break;
+      failf(data, "Your version of the OS does not support TLSv1.1");
+      return CURLE_SSL_CONNECT_ERROR;
     case CURL_SSLVERSION_TLSv1_2:
-      (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                         kTLSProtocol12,
-                                         true);
-      break;
-    case CURL_SSLVERSION_TLSv1_3:
-      failf(data, "DarwinSSL: TLS 1.3 is not yet supported");
+      failf(data, "Your version of the OS does not support TLSv1.2");
       return CURLE_SSL_CONNECT_ERROR;
-    case CURL_SSLVERSION_SSLv3:
+    case CURL_SSLVERSION_SSLv2:
       err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                         kSSLProtocol3,
+                                         kSSLProtocol2,
                                          true);
       if(err != noErr) {
-        failf(data, "Your version of the OS does not support SSLv3");
+        failf(data, "Your version of the OS does not support SSLv2");
         return CURLE_SSL_CONNECT_ERROR;
       }
       break;
-    case CURL_SSLVERSION_SSLv2:
+    case CURL_SSLVERSION_SSLv3:
       err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                         kSSLProtocol2,
+                                         kSSLProtocol3,
                                          true);
       if(err != noErr) {
-        failf(data, "Your version of the OS does not support SSLv2");
+        failf(data, "Your version of the OS does not support SSLv3");
         return CURLE_SSL_CONNECT_ERROR;
       }
       break;
-    default:
-      failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-      return CURLE_SSL_CONNECT_ERROR;
-    }
-#endif  /* CURL_SUPPORT_MAC_10_8 */
-  }
-#else
-  (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx, kSSLProtocolAll, false);
-  switch(conn->ssl_config.version) {
-  case CURL_SSLVERSION_DEFAULT:
-  case CURL_SSLVERSION_TLSv1:
-  case CURL_SSLVERSION_TLSv1_0:
-    (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                       kTLSProtocol1,
-                                       true);
-    break;
-  case CURL_SSLVERSION_TLSv1_1:
-    failf(data, "Your version of the OS does not support TLSv1.1");
-    return CURLE_SSL_CONNECT_ERROR;
-  case CURL_SSLVERSION_TLSv1_2:
-    failf(data, "Your version of the OS does not support TLSv1.2");
-    return CURLE_SSL_CONNECT_ERROR;
-  case CURL_SSLVERSION_TLSv1_3:
-    failf(data, "Your version of the OS does not support TLSv1.3");
-    return CURLE_SSL_CONNECT_ERROR;
-  case CURL_SSLVERSION_SSLv2:
-    err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                       kSSLProtocol2,
-                                       true);
-    if(err != noErr) {
-      failf(data, "Your version of the OS does not support SSLv2");
-      return CURLE_SSL_CONNECT_ERROR;
-    }
-    break;
-  case CURL_SSLVERSION_SSLv3:
-    err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
-                                       kSSLProtocol3,
-                                       true);
-    if(err != noErr) {
-      failf(data, "Your version of the OS does not support SSLv3");
-      return CURLE_SSL_CONNECT_ERROR;
-    }
-    break;
-  default:
-    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-    return CURLE_SSL_CONNECT_ERROR;
   }
 #endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */
 
-  if(SSL_SET_OPTION(key)) {
+  if(data->set.str[STRING_KEY]) {
     infof(data, "WARNING: SSL: CURLOPT_SSLKEY is ignored by Secure "
-          "Transport. The private key must be in the Keychain.\n");
+                "Transport. The private key must be in the Keychain.\n");
   }
 
-  if(ssl_cert) {
+  if(data->set.str[STRING_CERT]) {
     SecIdentityRef cert_and_key = NULL;
-    bool is_cert_file = is_file(ssl_cert);
+    bool is_cert_file = is_file(data->set.str[STRING_CERT]);
 
     /* User wants to authenticate with a client cert. Look for it:
        If we detect that this is a file on disk, then let's load it.
        Otherwise, assume that the user wants to use an identity loaded
        from the Keychain. */
     if(is_cert_file) {
-      if(!SSL_SET_OPTION(cert_type))
+      if(!data->set.str[STRING_CERT_TYPE])
         infof(data, "WARNING: SSL: Certificate type not set, assuming "
                     "PKCS#12 format.\n");
-      else if(strncmp(SSL_SET_OPTION(cert_type), "P12",
-        strlen(SSL_SET_OPTION(cert_type))) != 0)
+      else if(strncmp(data->set.str[STRING_CERT_TYPE], "P12",
+        strlen(data->set.str[STRING_CERT_TYPE])) != 0)
         infof(data, "WARNING: SSL: The Security framework only supports "
                     "loading identities that are in PKCS#12 format.\n");
 
-      err = CopyIdentityFromPKCS12File(ssl_cert,
-        SSL_SET_OPTION(key_passwd), &cert_and_key);
+      err = CopyIdentityFromPKCS12File(data->set.str[STRING_CERT],
+        data->set.str[STRING_KEY_PASSWD], &cert_and_key);
     }
     else
-      err = CopyIdentityWithLabel(ssl_cert, &cert_and_key);
+      err = CopyIdentityWithLabel(data->set.str[STRING_CERT], &cert_and_key);
 
     if(err == noErr) {
       SecCertificateRef cert = NULL;
@@ -1316,27 +1246,27 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
     }
     else {
       switch(err) {
-      case errSecAuthFailed: case -25264: /* errSecPkcs12VerifyFailure */
-        failf(data, "SSL: Incorrect password for the certificate \"%s\" "
-                    "and its private key.", ssl_cert);
-        break;
-      case -26275: /* errSecDecode */ case -25257: /* errSecUnknownFormat */
-        failf(data, "SSL: Couldn't make sense of the data in the "
-                    "certificate \"%s\" and its private key.",
-                    ssl_cert);
-        break;
-      case -25260: /* errSecPassphraseRequired */
-        failf(data, "SSL The certificate \"%s\" requires a password.",
-                    ssl_cert);
-        break;
-      case errSecItemNotFound:
-        failf(data, "SSL: Can't find the certificate \"%s\" and its private "
-                    "key in the Keychain.", ssl_cert);
-        break;
-      default:
-        failf(data, "SSL: Can't load the certificate \"%s\" and its private "
-                    "key: OSStatus %d", ssl_cert, err);
-        break;
+        case errSecAuthFailed: case -25264: /* errSecPkcs12VerifyFailure */
+          failf(data, "SSL: Incorrect password for the certificate \"%s\" "
+                      "and its private key.", data->set.str[STRING_CERT]);
+          break;
+        case -26275: /* errSecDecode */ case -25257: /* errSecUnknownFormat */
+          failf(data, "SSL: Couldn't make sense of the data in the "
+                      "certificate \"%s\" and its private key.",
+                      data->set.str[STRING_CERT]);
+          break;
+        case -25260: /* errSecPassphraseRequired */
+          failf(data, "SSL The certificate \"%s\" requires a password.",
+                      data->set.str[STRING_CERT]);
+          break;
+        case errSecItemNotFound:
+          failf(data, "SSL: Can't find the certificate \"%s\" and its private "
+                      "key in the Keychain.", data->set.str[STRING_CERT]);
+          break;
+        default:
+          failf(data, "SSL: Can't load the certificate \"%s\" and its private "
+                      "key: OSStatus %d", data->set.str[STRING_CERT], err);
+          break;
       }
       return CURLE_SSL_CERTPROBLEM;
     }
@@ -1367,7 +1297,8 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
 #else
   if(SSLSetSessionOption != NULL) {
 #endif /* CURL_BUILD_MAC */
-    bool break_on_auth = !conn->ssl_config.verifypeer || ssl_cafile;
+    bool break_on_auth = !data->set.ssl.verifypeer ||
+      data->set.str[STRING_SSL_CAFILE];
     err = SSLSetSessionOption(connssl->ssl_ctx,
                               kSSLSessionOptionBreakOnServerAuth,
                               break_on_auth);
@@ -1379,7 +1310,7 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
   else {
 #if CURL_SUPPORT_MAC_10_8
     err = SSLSetEnableCertVerify(connssl->ssl_ctx,
-                                 conn->ssl_config.verifypeer?true:false);
+                                 data->set.ssl.verifypeer?true:false);
     if(err != noErr) {
       failf(data, "SSL: SSLSetEnableCertVerify() failed: OSStatus %d", err);
       return CURLE_SSL_CONNECT_ERROR;
@@ -1388,41 +1319,47 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
   }
 #else
   err = SSLSetEnableCertVerify(connssl->ssl_ctx,
-                               conn->ssl_config.verifypeer?true:false);
+                               data->set.ssl.verifypeer?true:false);
   if(err != noErr) {
     failf(data, "SSL: SSLSetEnableCertVerify() failed: OSStatus %d", err);
     return CURLE_SSL_CONNECT_ERROR;
   }
 #endif /* CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS */
 
-  if(ssl_cafile && verifypeer) {
-    bool is_cert_file = is_file(ssl_cafile);
+  if(data->set.str[STRING_SSL_CAFILE]) {
+    bool is_cert_file = is_file(data->set.str[STRING_SSL_CAFILE]);
 
     if(!is_cert_file) {
-      failf(data, "SSL: can't load CA certificate file %s", ssl_cafile);
+      failf(data, "SSL: can't load CA certificate file %s",
+            data->set.str[STRING_SSL_CAFILE]);
       return CURLE_SSL_CACERT_BADFILE;
     }
+    if(!data->set.ssl.verifypeer) {
+      failf(data, "SSL: CA certificate set, but certificate verification "
+            "is disabled");
+      return CURLE_SSL_CONNECT_ERROR;
+    }
   }
 
   /* Configure hostname check. SNI is used if available.
    * Both hostname check and SNI require SSLSetPeerDomainName().
    * Also: the verifyhost setting influences SNI usage */
-  if(conn->ssl_config.verifyhost) {
-    err = SSLSetPeerDomainName(connssl->ssl_ctx, hostname,
-    strlen(hostname));
+  if(data->set.ssl.verifyhost) {
+    err = SSLSetPeerDomainName(connssl->ssl_ctx, conn->host.name,
+    strlen(conn->host.name));
 
     if(err != noErr) {
       infof(data, "WARNING: SSL: SSLSetPeerDomainName() failed: OSStatus %d\n",
             err);
     }
 
-    if((Curl_inet_pton(AF_INET, hostname, &addr))
+    if((Curl_inet_pton(AF_INET, conn->host.name, &addr))
   #ifdef ENABLE_IPV6
-    || (Curl_inet_pton(AF_INET6, hostname, &addr))
+    || (Curl_inet_pton(AF_INET6, conn->host.name, &addr))
   #endif
        ) {
-      infof(data, "WARNING: using IP address, SNI is being disabled by "
-            "the OS.\n");
+         infof(data, "WARNING: using IP address, SNI is being disabled by "
+         "the OS.\n");
     }
   }
 
@@ -1445,7 +1382,7 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
         running in an affected version of OS X. */
       if(darwinver_maj == 12 && darwinver_min <= 3 &&
          all_ciphers[i] >= 0xC001 && all_ciphers[i] <= 0xC032) {
-        continue;
+           continue;
       }
 #endif /* CURL_BUILD_MAC */
       switch(all_ciphers[i]) {
@@ -1501,16 +1438,6 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
         /* Disable IDEA: */
         case SSL_RSA_WITH_IDEA_CBC_SHA:
         case SSL_RSA_WITH_IDEA_CBC_MD5:
-        /* Disable RC4: */
-        case SSL_RSA_WITH_RC4_128_MD5:
-        case SSL_RSA_WITH_RC4_128_SHA:
-        case 0xC002: /* TLS_ECDH_ECDSA_WITH_RC4_128_SHA */
-        case 0xC007: /* TLS_ECDHE_ECDSA_WITH_RC4_128_SHA*/
-        case 0xC00C: /* TLS_ECDH_RSA_WITH_RC4_128_SHA */
-        case 0xC011: /* TLS_ECDHE_RSA_WITH_RC4_128_SHA */
-        case 0x008A: /* TLS_PSK_WITH_RC4_128_SHA */
-        case 0x008E: /* TLS_DHE_PSK_WITH_RC4_128_SHA */
-        case 0x0092: /* TLS_RSA_PSK_WITH_RC4_128_SHA */
           break;
         default: /* enable everything else */
           allowed_ciphers[allowed_ciphers_count++] = all_ciphers[i];
@@ -1537,22 +1464,21 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
   /* 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) {
-    /* TODO s/data->set.ssl.enable_beast/SSL_SET_OPTION(enable_beast)/g */
     SSLSetSessionOption(connssl->ssl_ctx, kSSLSessionOptionSendOneByteRecord,
-                      !data->set.ssl.enable_beast);
+                      !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! */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     char *ssl_sessionid;
     size_t ssl_sessionid_len;
 
     Curl_ssl_sessionid_lock(conn);
     if(!Curl_ssl_getsessionid(conn, (void **)&ssl_sessionid,
-                              &ssl_sessionid_len, sockindex)) {
+                              &ssl_sessionid_len)) {
       /* we got a session id, use it! */
       err = SSLSetPeerID(connssl->ssl_ctx, ssl_sessionid, ssl_sessionid_len);
       Curl_ssl_sessionid_unlock(conn);
@@ -1568,8 +1494,9 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
     else {
       CURLcode result;
       ssl_sessionid =
-        aprintf("%s:%d:%d:%s:%hu", ssl_cafile,
-                verifypeer, SSL_CONN_CONFIG(verifyhost), hostname, port);
+        aprintf("%s:%d:%d:%s:%hu", data->set.str[STRING_SSL_CAFILE],
+                data->set.ssl.verifypeer, data->set.ssl.verifyhost,
+                conn->host.name, conn->remote_port);
       ssl_sessionid_len = strlen(ssl_sessionid);
 
       err = SSLSetPeerID(connssl->ssl_ctx, ssl_sessionid, ssl_sessionid_len);
@@ -1579,8 +1506,7 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
         return CURLE_SSL_CONNECT_ERROR;
       }
 
-      result = Curl_ssl_addsessionid(conn, ssl_sessionid, ssl_sessionid_len,
-                                     sockindex);
+      result = Curl_ssl_addsessionid(conn, ssl_sessionid, ssl_sessionid_len);
       Curl_ssl_sessionid_unlock(conn);
       if(result) {
         failf(data, "failed to store ssl session");
@@ -1884,7 +1810,7 @@ static int verify_cert(const char *cafile, struct Curl_easy *data,
     return sslerr_to_curlerr(data, ret);
   }
 
-  switch(trust_eval) {
+  switch (trust_eval) {
     case kSecTrustResultUnspecified:
     case kSecTrustResultProceed:
       return CURLE_OK;
@@ -1906,8 +1832,6 @@ darwinssl_connect_step2(struct connectdata *conn, int sockindex)
   OSStatus err;
   SSLCipherSuite cipher;
   SSLProtocol protocol = 0;
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
 
   DEBUGASSERT(ssl_connect_2 == connssl->connecting_state
               || ssl_connect_2_reading == connssl->connecting_state
@@ -1917,7 +1841,7 @@ darwinssl_connect_step2(struct connectdata *conn, int sockindex)
   err = SSLHandshake(connssl->ssl_ctx);
 
   if(err != noErr) {
-    switch(err) {
+    switch (err) {
       case errSSLWouldBlock:  /* they're not done with us yet */
         connssl->connecting_state = connssl->ssl_direction ?
             ssl_connect_2_writing : ssl_connect_2_reading;
@@ -1926,8 +1850,8 @@ darwinssl_connect_step2(struct connectdata *conn, int sockindex)
       /* The below is errSSLServerAuthCompleted; it's not defined in
         Leopard's headers */
       case -9841:
-        if(SSL_CONN_CONFIG(CAfile) && SSL_CONN_CONFIG(verifypeer)) {
-          int res = verify_cert(SSL_CONN_CONFIG(CAfile), data,
+        if(data->set.str[STRING_SSL_CAFILE]) {
+          int res = verify_cert(data->set.str[STRING_SSL_CAFILE], data,
                                 connssl->ssl_ctx);
           if(res != CURLE_OK)
             return res;
@@ -1996,7 +1920,7 @@ darwinssl_connect_step2(struct connectdata *conn, int sockindex)
         return CURLE_SSL_CONNECT_ERROR;
       default:
         failf(data, "Unknown SSL protocol error in connection to %s:%d",
-              hostname, err);
+              conn->host.name, err);
         return CURLE_SSL_CONNECT_ERROR;
     }
   }
@@ -2007,7 +1931,7 @@ darwinssl_connect_step2(struct connectdata *conn, int sockindex)
     /* Informational message */
     (void)SSLGetNegotiatedCipher(connssl->ssl_ctx, &cipher);
     (void)SSLGetNegotiatedProtocolVersion(connssl->ssl_ctx, &protocol);
-    switch(protocol) {
+    switch (protocol) {
       case kSSLProtocol2:
         infof(data, "SSL 2.0 connection using %s\n",
               SSLCipherNameForNumber(cipher));
@@ -2039,11 +1963,9 @@ darwinssl_connect_step2(struct connectdata *conn, int sockindex)
   }
 }
 
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-/* This should be called during step3 of the connection at the earliest */
-static void
-show_verbose_server_cert(struct connectdata *conn,
-                         int sockindex)
+static CURLcode
+darwinssl_connect_step3(struct connectdata *conn,
+                        int sockindex)
 {
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
@@ -2055,9 +1977,9 @@ show_verbose_server_cert(struct connectdata *conn,
   CFIndex i, count;
   SecTrustRef trust = NULL;
 
-  if(!connssl->ssl_ctx)
-    return;
-
+  /* There is no step 3!
+   * Well, okay, if verbose mode is on, let's print the details of the
+   * server certificates. */
 #if CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS
 #if CURL_BUILD_IOS
 #pragma unused(server_certs)
@@ -2154,23 +2076,6 @@ show_verbose_server_cert(struct connectdata *conn,
     CFRelease(server_certs);
   }
 #endif /* CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS */
-}
-#endif /* !CURL_DISABLE_VERBOSE_STRINGS */
-
-static CURLcode
-darwinssl_connect_step3(struct connectdata *conn,
-                        int sockindex)
-{
-  struct Curl_easy *data = conn->data;
-  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
-  /* There is no step 3!
-   * Well, okay, if verbose mode is on, let's print the details of the
-   * server certificates. */
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-  if(data->set.verbose)
-    show_verbose_server_cert(conn, sockindex);
-#endif
 
   connssl->connecting_state = ssl_connect_done;
   return CURLE_OK;
@@ -2235,8 +2140,7 @@ darwinssl_connect_common(struct connectdata *conn,
       curl_socket_t readfd = ssl_connect_2_reading ==
       connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
 
-      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
-                               nonblocking?0:timeout_ms);
+      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);
@@ -2358,7 +2262,8 @@ int Curl_darwinssl_shutdown(struct connectdata *conn, int sockindex)
 
   rc = 0;
 
-  what = SOCKET_READABLE(conn->sock[sockindex], SSL_SHUTDOWN_TIMEOUT);
+  what = Curl_socket_ready(conn->sock[sockindex],
+                           CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
 
   for(;;) {
     if(what < 0) {
@@ -2386,7 +2291,7 @@ int Curl_darwinssl_shutdown(struct connectdata *conn, int sockindex)
     if(nread <= 0)
       break;
 
-    what = SOCKET_READABLE(conn->sock[sockindex], 0);
+    what = Curl_socket_ready(conn->sock[sockindex], CURL_SOCKET_BAD, 0);
   }
 
   return rc;
@@ -2448,8 +2353,8 @@ bool Curl_darwinssl_data_pending(const struct connectdata *conn,
     return false;
 }
 
-CURLcode Curl_darwinssl_random(unsigned char *entropy,
-                               size_t length)
+int Curl_darwinssl_random(unsigned char *entropy,
+                          size_t length)
 {
   /* arc4random_buf() isn't available on cats older than Lion, so let's
      do this manually for the benefit of the older cats. */
@@ -2463,7 +2368,7 @@ CURLcode Curl_darwinssl_random(unsigned char *entropy,
     random_number >>= 8;
   }
   i = random_number = 0;
-  return CURLE_OK;
+  return 0;
 }
 
 void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
@@ -2475,8 +2380,7 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
   (void)CC_MD5(tmp, (CC_LONG)tmplen, md5sum);
 }
 
-bool Curl_darwinssl_false_start(void)
-{
+bool Curl_darwinssl_false_start(void) {
 #if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
   if(SSLSetSessionOption != NULL)
     return TRUE;
@@ -2513,7 +2417,7 @@ static ssize_t darwinssl_send(struct connectdata *conn,
   if(connssl->ssl_write_buffered_length) {
     /* Write the buffered data: */
     err = SSLWrite(connssl->ssl_ctx, NULL, 0UL, &processed);
-    switch(err) {
+    switch (err) {
       case noErr:
         /* processed is always going to be 0 because we didn't write to
            the buffer, so return how much was written to the socket */
@@ -2533,7 +2437,7 @@ static ssize_t darwinssl_send(struct connectdata *conn,
     /* We've got new data to write: */
     err = SSLWrite(connssl->ssl_ctx, mem, len, &processed);
     if(err != noErr) {
-      switch(err) {
+      switch (err) {
         case errSSLWouldBlock:
           /* Data was buffered but not sent, we have to tell the caller
              to try sending again, and remember how much was buffered */
@@ -2562,7 +2466,7 @@ static ssize_t darwinssl_recv(struct connectdata *conn,
   OSStatus err = SSLRead(connssl->ssl_ctx, buf, buffersize, &processed);
 
   if(err != noErr) {
-    switch(err) {
+    switch (err) {
       case errSSLWouldBlock:  /* return how much we read (if anything) */
         if(processed)
           return (ssize_t)processed;
index 4bd41ca..8b185b6 100644 (file)
@@ -8,7 +8,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
- * Copyright (C) 2012 - 2017, 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
@@ -42,8 +42,8 @@ int Curl_darwinssl_check_cxn(struct connectdata *conn);
 bool Curl_darwinssl_data_pending(const struct connectdata *conn,
                                  int connindex);
 
-CURLcode Curl_darwinssl_random(unsigned char *entropy,
-                               size_t length);
+int Curl_darwinssl_random(unsigned char *entropy,
+                          size_t length);
 void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
                            size_t tmplen,
                            unsigned char *md5sum, /* output */
index a0d462b..55a55ef 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -72,7 +72,7 @@
 #include "vtls.h"
 #include "connect.h" /* for the connect timeout */
 #include "select.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "x509asn1.h"
 #include "curl_printf.h"
 
 #include "memdebug.h"
 
 
-/* Directions. */
-#define SOS_READ        0x01
-#define SOS_WRITE       0x02
-
 /* SSL version flags. */
 #define CURL_GSKPROTO_SSLV2     0
 #define CURL_GSKPROTO_SSLV2_MASK        (1 << CURL_GSKPROTO_SSLV2)
@@ -155,7 +151,7 @@ static const gskit_cipher  ciphertable[] = {
 static bool is_separator(char c)
 {
   /* Return whether character is a cipher list separator. */
-  switch(c) {
+  switch (c) {
   case ' ':
   case '\t':
   case ':':
@@ -171,7 +167,7 @@ static CURLcode gskit_status(struct Curl_easy *data, int rc,
                              const char *procname, CURLcode defcode)
 {
   /* Process GSKit status and map it to a CURLcode. */
-  switch(rc) {
+  switch (rc) {
   case GSK_OK:
   case GSK_OS400_ASYNCHRONOUS_SOC_INIT:
     return CURLE_OK;
@@ -194,7 +190,7 @@ static CURLcode gskit_status(struct Curl_easy *data, int rc,
   case GSK_OS400_ERROR_NOT_REGISTERED:
     break;
   case GSK_ERROR_IO:
-    switch(errno) {
+    switch (errno) {
     case ENOMEM:
       return CURLE_OUT_OF_MEMORY;
     default:
@@ -215,7 +211,7 @@ static CURLcode set_enum(struct Curl_easy *data, gsk_handle h,
 {
   int rc = gsk_attribute_set_enum(h, id, value);
 
-  switch(rc) {
+  switch (rc) {
   case GSK_OK:
     return CURLE_OK;
   case GSK_ERROR_IO:
@@ -237,7 +233,7 @@ static CURLcode set_buffer(struct Curl_easy *data, gsk_handle h,
 {
   int rc = gsk_attribute_set_buffer(h, id, buffer, 0);
 
-  switch(rc) {
+  switch (rc) {
   case GSK_OK:
     return CURLE_OK;
   case GSK_ERROR_IO:
@@ -259,7 +255,7 @@ static CURLcode set_numeric(struct Curl_easy *data,
 {
   int rc = gsk_attribute_set_numeric_value(h, id, value);
 
-  switch(rc) {
+  switch (rc) {
   case GSK_OK:
     return CURLE_OK;
   case GSK_ERROR_IO:
@@ -279,7 +275,7 @@ static CURLcode set_callback(struct Curl_easy *data,
 {
   int rc = gsk_attribute_set_callback(h, id, info);
 
-  switch(rc) {
+  switch (rc) {
   case GSK_OK:
     return CURLE_OK;
   case GSK_ERROR_IO:
@@ -293,11 +289,10 @@ static CURLcode set_callback(struct Curl_easy *data,
 }
 
 
-static CURLcode set_ciphers(struct connectdata *conn,
+static CURLcode set_ciphers(struct Curl_easy *data,
                                         gsk_handle h, unsigned int *protoflags)
 {
-  struct Curl_easy *data = conn->data;
-  const char *cipherlist = SSL_CONN_CONFIG(cipher_list);
+  const char *cipherlist = data->set.str[STRING_SSL_CIPHER_LIST];
   const char *clp;
   const gskit_cipher *ctp;
   int i;
@@ -345,7 +340,7 @@ static CURLcode set_ciphers(struct connectdata *conn,
       break;
     /* Search the cipher in our table. */
     for(ctp = ciphertable; ctp->name; ctp++)
-      if(strncasecompare(ctp->name, clp, l) && !ctp->name[l])
+      if(strnequal(ctp->name, clp, l) && !ctp->name[l])
         break;
     if(!ctp->name) {
       failf(data, "Unknown cipher %.*s", l, clp);
@@ -453,7 +448,7 @@ static CURLcode init_environment(struct Curl_easy *data,
   /* Creates the GSKit environment. */
 
   rc = gsk_environment_open(&h);
-  switch(rc) {
+  switch (rc) {
   case GSK_OK:
     break;
   case GSK_INSUFFICIENT_STORAGE:
@@ -505,195 +500,17 @@ static void close_async_handshake(struct ssl_connect_data *connssl)
   connssl->iocport = -1;
 }
 
-/* SSL over SSL
- * Problems:
- * 1) GSKit can only perform SSL on an AF_INET or AF_INET6 stream socket. To
- *    pipe an SSL stream into another, it is therefore needed to have a pair
- *    of such communicating sockets and handle the pipelining explicitly.
- * 2) OS/400 socketpair() is only implemented for domain AF_UNIX, thus cannot
- *    be used to produce the pipeline.
- * The solution is to simulate socketpair() for AF_INET with low-level API
- *    listen(), bind() and connect().
- */
-
-static int
-inetsocketpair(int sv[2])
-{
-  int lfd;      /* Listening socket. */
-  int sfd;      /* Server socket. */
-  int cfd;      /* Client socket. */
-  int len;
-  struct sockaddr_in addr1;
-  struct sockaddr_in addr2;
-
-  /* Create listening socket on a local dynamic port. */
-  lfd = socket(AF_INET, SOCK_STREAM, 0);
-  if(lfd < 0)
-    return -1;
-  memset((char *) &addr1, 0, sizeof addr1);
-  addr1.sin_family = AF_INET;
-  addr1.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-  addr1.sin_port = 0;
-  if(bind(lfd, (struct sockaddr *) &addr1, sizeof addr1) ||
-     listen(lfd, 2) < 0) {
-    close(lfd);
-    return -1;
-  }
-
-  /* Get the allocated port. */
-  len = sizeof addr1;
-  if(getsockname(lfd, (struct sockaddr *) &addr1, &len) < 0) {
-    close(lfd);
-    return -1;
-  }
-
-  /* Create the client socket. */
-  cfd = socket(AF_INET, SOCK_STREAM, 0);
-  if(cfd < 0) {
-    close(lfd);
-    return -1;
-  }
-
-  /* Request unblocking connection to the listening socket. */
-  curlx_nonblock(cfd, TRUE);
-  if(connect(cfd, (struct sockaddr *) &addr1, sizeof addr1) < 0 &&
-     errno != EINPROGRESS) {
-    close(lfd);
-    close(cfd);
-    return -1;
-  }
-
-  /* Get the client dynamic port for intrusion check below. */
-  len = sizeof addr2;
-  if(getsockname(cfd, (struct sockaddr *) &addr2, &len) < 0) {
-    close(lfd);
-    close(cfd);
-    return -1;
-  }
-
-  /* Accept the incoming connection and get the server socket. */
-  curlx_nonblock(lfd, TRUE);
-  for(;;) {
-    len = sizeof addr1;
-    sfd = accept(lfd, (struct sockaddr *) &addr1, &len);
-    if(sfd < 0) {
-      close(lfd);
-      close(cfd);
-      return -1;
-    }
 
-    /* Check for possible intrusion from an external process. */
-    if(addr1.sin_addr.s_addr == addr2.sin_addr.s_addr &&
-       addr1.sin_port == addr2.sin_port)
-      break;
-
-    /* Intrusion: reject incoming connection. */
-    close(sfd);
-  }
-
-  /* Done, return sockets and succeed. */
-  close(lfd);
-  curlx_nonblock(cfd, FALSE);
-  sv[0] = cfd;
-  sv[1] = sfd;
-  return 0;
-}
-
-static int pipe_ssloverssl(struct connectdata *conn, int sockindex,
-                           int directions)
+static void close_one(struct ssl_connect_data *conn,
+                      struct Curl_easy *data)
 {
-  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-  struct ssl_connect_data *connproxyssl = &conn->proxy_ssl[sockindex];
-  fd_set fds_read;
-  fd_set fds_write;
-  int n;
-  int m;
-  int i;
-  int ret = 0;
-  struct timeval tv = {0, 0};
-  char buf[CURL_MAX_WRITE_SIZE];
-
-  if(!connssl->use || !connproxyssl->use)
-    return 0;   /* No SSL over SSL: OK. */
-
-  FD_ZERO(&fds_read);
-  FD_ZERO(&fds_write);
-  n = -1;
-  if(directions & SOS_READ) {
-    FD_SET(connssl->remotefd, &fds_write);
-    n = connssl->remotefd;
-  }
-  if(directions & SOS_WRITE) {
-    FD_SET(connssl->remotefd, &fds_read);
-    n = connssl->remotefd;
-    FD_SET(conn->sock[sockindex], &fds_write);
-    if(n < conn->sock[sockindex])
-      n = conn->sock[sockindex];
-  }
-  i = select(n + 1, &fds_read, &fds_write, NULL, &tv);
-  if(i < 0)
-    return -1;  /* Select error. */
-
-  if(FD_ISSET(connssl->remotefd, &fds_write)) {
-    /* Try getting data from HTTPS proxy and pipe it upstream. */
-    n = 0;
-    i = gsk_secure_soc_read(connproxyssl->handle, buf, sizeof buf, &n);
-    switch(i) {
-    case GSK_OK:
-      if(n) {
-        i = write(connssl->remotefd, buf, n);
-        if(i < 0)
-          return -1;
-        ret = 1;
-      }
-      break;
-    case GSK_OS400_ERROR_TIMED_OUT:
-    case GSK_WOULD_BLOCK:
-      break;
-    default:
-      return -1;
-    }
-  }
-
-  if(FD_ISSET(connssl->remotefd, &fds_read) &&
-     FD_ISSET(conn->sock[sockindex], &fds_write)) {
-    /* Pipe data to HTTPS proxy. */
-    n = read(connssl->remotefd, buf, sizeof buf);
-    if(n < 0)
-      return -1;
-    if(n) {
-      i = gsk_secure_soc_write(connproxyssl->handle, buf, n, &m);
-      if(i != GSK_OK || n != m)
-        return -1;
-      ret = 1;
-    }
-  }
-
-  return ret;  /* OK */
-}
-
-
-static void close_one(struct ssl_connect_data *connssl,
-                      struct connectdata *conn, int sockindex)
-{
-  if(connssl->handle) {
-    gskit_status(conn->data, gsk_secure_soc_close(&connssl->handle),
+  if(conn->handle) {
+    gskit_status(data, gsk_secure_soc_close(&conn->handle),
               "gsk_secure_soc_close()", 0);
-    /* Last chance to drain output. */
-    while(pipe_ssloverssl(conn, sockindex, SOS_WRITE) > 0)
-      ;
-    connssl->handle = (gsk_handle) NULL;
-    if(connssl->localfd >= 0) {
-      close(connssl->localfd);
-      connssl->localfd = -1;
-    }
-    if(connssl->remotefd >= 0) {
-      close(connssl->remotefd);
-      connssl->remotefd = -1;
-    }
+    conn->handle = (gsk_handle) NULL;
   }
-  if(connssl->iocport >= 0)
-    close_async_handshake(connssl);
+  if(conn->iocport >= 0)
+    close_async_handshake(conn);
 }
 
 
@@ -701,18 +518,13 @@ static ssize_t gskit_send(struct connectdata *conn, int sockindex,
                            const void *mem, size_t len, CURLcode *curlcode)
 {
   struct Curl_easy *data = conn->data;
-  CURLcode cc = CURLE_SEND_ERROR;
+  CURLcode cc;
   int written;
 
-  if(pipe_ssloverssl(conn, sockindex, SOS_WRITE) >= 0) {
-    cc = gskit_status(data,
-                      gsk_secure_soc_write(conn->ssl[sockindex].handle,
-                                           (char *) mem, (int) len, &written),
-                      "gsk_secure_soc_write()", CURLE_SEND_ERROR);
-    if(cc == CURLE_OK)
-      if(pipe_ssloverssl(conn, sockindex, SOS_WRITE) < 0)
-        cc = CURLE_SEND_ERROR;
-  }
+  cc = gskit_status(data,
+                    gsk_secure_soc_write(conn->ssl[sockindex].handle,
+                                         (char *) mem, (int) len, &written),
+                    "gsk_secure_soc_write()", CURLE_SEND_ERROR);
   if(cc != CURLE_OK) {
     *curlcode = cc;
     written = -1;
@@ -727,23 +539,15 @@ static ssize_t gskit_recv(struct connectdata *conn, int num, char *buf,
   struct Curl_easy *data = conn->data;
   int buffsize;
   int nread;
-  CURLcode cc = CURLE_RECV_ERROR;
+  CURLcode cc;
 
-  if(pipe_ssloverssl(conn, num, SOS_READ) >= 0) {
-    buffsize = buffersize > (size_t) INT_MAX? INT_MAX: (int) buffersize;
-    cc = gskit_status(data, gsk_secure_soc_read(conn->ssl[num].handle,
-                                                buf, buffsize, &nread),
-                      "gsk_secure_soc_read()", CURLE_RECV_ERROR);
-  }
-  switch(cc) {
-  case CURLE_OK:
-    break;
-  case CURLE_OPERATION_TIMEDOUT:
-    cc = CURLE_AGAIN;
-  default:
+  buffsize = buffersize > (size_t) INT_MAX? INT_MAX: (int) buffersize;
+  cc = gskit_status(data, gsk_secure_soc_read(conn->ssl[num].handle,
+                                              buf, buffsize, &nread),
+                    "gsk_secure_soc_read()", CURLE_RECV_ERROR);
+  if(cc != CURLE_OK) {
     *curlcode = cc;
     nread = -1;
-    break;
   }
   return (ssize_t) nread;
 }
@@ -756,26 +560,18 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
   gsk_handle envir;
   CURLcode result;
   int rc;
-  const char * const keyringfile = SSL_CONN_CONFIG(CAfile);
-  const char * const keyringpwd = SSL_SET_OPTION(key_passwd);
-  const char * const keyringlabel = SSL_SET_OPTION(cert);
-  const long int ssl_version = SSL_CONN_CONFIG(version);
-  const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
-  const char * const hostname = SSL_IS_PROXY()? conn->http_proxy.host.name:
-    conn->host.name;
-  const char *sni;
+  char *keyringfile;
+  char *keyringpwd;
+  char *keyringlabel;
+  char *sni;
   unsigned int protoflags;
   long timeout;
   Qso_OverlappedIO_t commarea;
-  int sockpair[2];
-  static const int sobufsize = CURL_MAX_WRITE_SIZE;
 
   /* Create SSL environment, start (preferably asynchronous) handshake. */
 
   connssl->handle = (gsk_handle) NULL;
   connssl->iocport = -1;
-  connssl->localfd = -1;
-  connssl->remotefd = -1;
 
   /* GSKit supports two ways of specifying an SSL context: either by
    *  application identifier (that should have been defined at the system
@@ -790,6 +586,9 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
    *  application identifier mode is tried first, as recommended in IBM doc.
    */
 
+  keyringfile = data->set.str[STRING_SSL_CAFILE];
+  keyringpwd = data->set.str[STRING_KEY_PASSWD];
+  keyringlabel = data->set.str[STRING_CERT];
   envir = (gsk_handle) NULL;
 
   if(keyringlabel && *keyringlabel && !keyringpwd &&
@@ -814,36 +613,19 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
   if(result)
     return result;
 
-  /* Establish a pipelining socket pair for SSL over SSL. */
-  if(conn->proxy_ssl[sockindex].use) {
-    if(inetsocketpair(sockpair))
-      return CURLE_SSL_CONNECT_ERROR;
-    connssl->localfd = sockpair[0];
-    connssl->remotefd = sockpair[1];
-    setsockopt(connssl->localfd, SOL_SOCKET, SO_RCVBUF,
-               (void *) sobufsize, sizeof sobufsize);
-    setsockopt(connssl->remotefd, SOL_SOCKET, SO_RCVBUF,
-               (void *) sobufsize, sizeof sobufsize);
-    setsockopt(connssl->localfd, SOL_SOCKET, SO_SNDBUF,
-               (void *) sobufsize, sizeof sobufsize);
-    setsockopt(connssl->remotefd, SOL_SOCKET, SO_SNDBUF,
-               (void *) sobufsize, sizeof sobufsize);
-    curlx_nonblock(connssl->localfd, TRUE);
-    curlx_nonblock(connssl->remotefd, TRUE);
-  }
-
   /* Determine which SSL/TLS version should be enabled. */
-  sni = hostname;
-  switch(ssl_version) {
+  protoflags = CURL_GSKPROTO_TLSV10_MASK | CURL_GSKPROTO_TLSV11_MASK |
+               CURL_GSKPROTO_TLSV12_MASK;
+  sni = conn->host.name;
+  switch (data->set.ssl.version) {
   case CURL_SSLVERSION_SSLv2:
     protoflags = CURL_GSKPROTO_SSLV2_MASK;
-    sni = NULL;
+    sni = (char *) NULL;
     break;
   case CURL_SSLVERSION_SSLv3:
     protoflags = CURL_GSKPROTO_SSLV3_MASK;
-    sni = NULL;
+    sni = (char *) NULL;
     break;
-  case CURL_SSLVERSION_DEFAULT:
   case CURL_SSLVERSION_TLSv1:
     protoflags = CURL_GSKPROTO_TLSV10_MASK |
                  CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK;
@@ -857,12 +639,6 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
   case CURL_SSLVERSION_TLSv1_2:
     protoflags = CURL_GSKPROTO_TLSV12_MASK;
     break;
-  case CURL_SSLVERSION_TLSv1_3:
-    failf(data, "GSKit: TLS 1.3 is not yet supported");
-    return CURLE_SSL_CONNECT_ERROR;
-  default:
-    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-    return CURLE_SSL_CONNECT_ERROR;
   }
 
   /* Process SNI. Ignore if not supported (on OS400 < V7R1). */
@@ -885,12 +661,9 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
                            (timeout + 999) / 1000);
   }
   if(!result)
-    result = set_numeric(data, connssl->handle, GSK_OS400_READ_TIMEOUT, 1);
+    result = set_numeric(data, connssl->handle, GSK_FD, conn->sock[sockindex]);
   if(!result)
-    result = set_numeric(data, connssl->handle, GSK_FD, connssl->localfd >= 0?
-                         connssl->localfd: conn->sock[sockindex]);
-  if(!result)
-    result = set_ciphers(conn, connssl->handle, &protoflags);
+    result = set_ciphers(data, connssl->handle, &protoflags);
   if(!protoflags) {
     failf(data, "No SSL protocol/cipher combination enabled");
     result = CURLE_SSL_CIPHER;
@@ -933,7 +706,7 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
   }
   if(!result)
     result = set_enum(data, connssl->handle, GSK_SERVER_AUTH_TYPE,
-                      verifypeer? GSK_SERVER_AUTH_FULL:
+                      data->set.ssl.verifypeer? GSK_SERVER_AUTH_FULL:
                       GSK_SERVER_AUTH_PASSTHRU, FALSE);
 
   if(!result) {
@@ -957,10 +730,6 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
     else if(errno != ENOBUFS)
       result = gskit_status(data, GSK_ERROR_IO,
                             "QsoCreateIOCompletionPort()", 0);
-    else if(conn->proxy_ssl[sockindex].use) {
-      /* Cannot pipeline while handshaking synchronously. */
-      result = CURLE_SSL_CONNECT_ERROR;
-    }
     else {
       /* No more completion port available. Use synchronous IO. */
       result = gskit_status(data, gsk_secure_soc_init(connssl->handle),
@@ -973,7 +742,7 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
   }
 
   /* Error: rollback. */
-  close_one(connssl, conn, sockindex);
+  close_one(connssl, data);
   return result;
 }
 
@@ -996,7 +765,7 @@ static CURLcode gskit_connect_step2(struct connectdata *conn, int sockindex,
       timeout_ms = 0;
     stmv.tv_sec = timeout_ms / 1000;
     stmv.tv_usec = (timeout_ms - stmv.tv_sec * 1000) * 1000;
-    switch(QsoWaitForIOCompletion(connssl->iocport, &cstat, &stmv)) {
+    switch (QsoWaitForIOCompletion(connssl->iocport, &cstat, &stmv)) {
     case 1:             /* Operation complete. */
       break;
     case -1:            /* An error occurred: handshake still in progress. */
@@ -1053,7 +822,7 @@ static CURLcode gskit_connect_step3(struct connectdata *conn, int sockindex)
     infof(data, "Server certificate:\n");
     p = cdev;
     for(i = 0; i++ < cdec; p++)
-      switch(p->cert_data_id) {
+      switch (p->cert_data_id) {
       case CERT_BODY_DER:
         cert = p->cert_data_p;
         certend = cert + cdev->cert_data_l;
@@ -1096,14 +865,14 @@ static CURLcode gskit_connect_step3(struct connectdata *conn, int sockindex)
   }
 
   /* Check pinned public key. */
-  ptr = SSL_IS_PROXY() ? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
-                         data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
+  ptr = data->set.str[STRING_SSL_PINNEDPUBLICKEY];
   if(!result && ptr) {
     curl_X509certificate x509;
     curl_asn1Element *p;
 
-    if(Curl_parseX509(&x509, cert, certend))
+    if(!cert)
       return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    Curl_parseX509(&x509, cert, certend);
     p = &x509.subjectPublicKeyInfo;
     result = Curl_pin_peer_pubkey(data, ptr, p->header, p->end - p->header);
     if(result) {
@@ -1144,11 +913,6 @@ static CURLcode gskit_connect_common(struct connectdata *conn, int sockindex,
       result = gskit_connect_step1(conn, sockindex);
   }
 
-  /* Handle handshake pipelining. */
-  if(!result)
-    if(pipe_ssloverssl(conn, sockindex, SOS_READ | SOS_WRITE) < 0)
-      result = CURLE_SSL_CONNECT_ERROR;
-
   /* Step 2: check if handshake is over. */
   if(!result && connssl->connecting_state == ssl_connect_2) {
     /* check allowed time left */
@@ -1163,17 +927,12 @@ static CURLcode gskit_connect_common(struct connectdata *conn, int sockindex,
       result = gskit_connect_step2(conn, sockindex, nonblocking);
   }
 
-  /* Handle handshake pipelining. */
-  if(!result)
-    if(pipe_ssloverssl(conn, sockindex, SOS_READ | SOS_WRITE) < 0)
-      result = CURLE_SSL_CONNECT_ERROR;
-
   /* Step 3: gather certificate info, verify host. */
   if(!result && connssl->connecting_state == ssl_connect_3)
     result = gskit_connect_step3(conn, sockindex);
 
   if(result)
-    close_one(connssl, conn, sockindex);
+    close_one(connssl, data);
   else if(connssl->connecting_state == ssl_connect_done) {
     connssl->state = ssl_connection_complete;
     connssl->connecting_state = ssl_connect_1;
@@ -1217,8 +976,11 @@ CURLcode Curl_gskit_connect(struct connectdata *conn, int sockindex)
 
 void Curl_gskit_close(struct connectdata *conn, int sockindex)
 {
-  close_one(&conn->ssl[sockindex], conn, sockindex);
-  close_one(&conn->proxy_ssl[sockindex], conn, sockindex);
+  struct Curl_easy *data = conn->data;
+  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+
+  if(connssl->use)
+    close_one(connssl, data);
 }
 
 
@@ -1237,10 +999,10 @@ int Curl_gskit_shutdown(struct connectdata *conn, int sockindex)
   if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
     return 0;
 
-  close_one(connssl, conn, sockindex);
+  close_one(connssl, data);
   rc = 0;
-  what = SOCKET_READABLE(conn->sock[sockindex],
-                         SSL_SHUTDOWN_TIMEOUT);
+  what = Curl_socket_ready(conn->sock[sockindex],
+                           CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
 
   for(;;) {
     if(what < 0) {
@@ -1269,7 +1031,7 @@ int Curl_gskit_shutdown(struct connectdata *conn, int sockindex)
     if(nread <= 0)
       break;
 
-    what = SOCKET_READABLE(conn->sock[sockindex], 0);
+    what = Curl_socket_ready(conn->sock[sockindex], CURL_SOCKET_BAD, 0);
   }
 
   return rc;
index 2297592..41483cb 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -41,9 +41,6 @@ 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);
 
-/* Support HTTPS-proxy */
-/* TODO: add '#define HTTPS_PROXY_SUPPORT 1' and fix test #1014 (if need) */
-
 /* Set the API backend definition to GSKit */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_GSKIT
 
@@ -67,7 +64,7 @@ int Curl_gskit_check_cxn(struct connectdata *cxn);
 #define curlssl_version Curl_gskit_version
 #define curlssl_check_cxn(x) Curl_gskit_check_cxn(x)
 #define curlssl_data_pending(x,y) 0
-#define curlssl_random(x,y,z) (x=x, y=y, z=z, CURLE_NOT_BUILT_IN)
+#define curlssl_random(x,y,z) -1
 
 #endif /* USE_GSKIT */
 
index faa70ac..1c3e6b1 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -52,7 +52,7 @@
 #include "parsedate.h"
 #include "connect.h" /* for the connect timeout */
 #include "select.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "warnless.h"
 #include "x509asn1.h"
 #include "curl_printf.h"
@@ -68,7 +68,7 @@
 #define GNUTLS_POINTER_TO_INT_CAST(p) ((int) (long) (p))
 #endif
 #ifndef GNUTLS_INT_TO_POINTER_CAST
-#define GNUTLS_INT_TO_POINTER_CAST(i) ((void *) (long) (i))
+#define GNUTLS_INT_TO_POINTER_CAST(i) ((void*) (long) (i))
 #endif
 
 /* Enable GnuTLS debugging by defining GTLSDEBUG */
@@ -92,11 +92,11 @@ static bool gtls_inited = FALSE;
 #    define GNUTLS_MAPS_WINSOCK_ERRORS 1
 #  endif
 
-#  if HAVE_GNUTLS_ALPN_SET_PROTOCOLS
+#  if (GNUTLS_VERSION_NUMBER >= 0x030200)
 #    define HAS_ALPN
 #  endif
 
-#  if HAVE_GNUTLS_OCSP_REQ_INIT
+#  if (GNUTLS_VERSION_NUMBER >= 0x03020d)
 #    define HAS_OCSP
 #  endif
 
@@ -171,16 +171,6 @@ static ssize_t Curl_gtls_pull(void *s, void *buf, size_t len)
   return ret;
 }
 
-static ssize_t Curl_gtls_push_ssl(void *s, const void *buf, size_t len)
-{
-  return gnutls_record_send((gnutls_session_t) s, buf, len);
-}
-
-static ssize_t Curl_gtls_pull_ssl(void *s, void *buf, size_t len)
-{
-  return gnutls_record_recv((gnutls_session_t) s, buf, len);
-}
-
 /* Curl_gtls_init()
  *
  * Global GnuTLS init, called from Curl_ssl_init(). This calls functions that
@@ -235,15 +225,14 @@ static void showtime(struct Curl_easy *data,
   infof(data, "%s\n", data->state.buffer);
 }
 
-static gnutls_datum_t load_file(const char *file)
+static gnutls_datum_t load_file (const char *file)
 {
   FILE *f;
   gnutls_datum_t loaded_file = { NULL, 0 };
   long filelen;
   void *ptr;
 
-  f = fopen(file, "rb");
-  if(!f)
+  if(!(f = fopen(file, "rb")))
     return loaded_file;
   if(fseek(f, 0, SEEK_END) != 0
      || (filelen = ftell(f)) < 0
@@ -262,8 +251,7 @@ out:
   return loaded_file;
 }
 
-static void unload_file(gnutls_datum_t data)
-{
+static void unload_file(gnutls_datum_t data) {
   free(data.data);
 }
 
@@ -301,7 +289,7 @@ static CURLcode handshake(struct connectdata *conn,
       curl_socket_t readfd = ssl_connect_2_reading==
         connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
 
-      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
+      what = Curl_socket_ready(readfd, writefd,
                                nonblocking?0:
                                timeout_ms?timeout_ms:1000);
       if(what < 0) {
@@ -368,9 +356,9 @@ static gnutls_x509_crt_fmt_t do_file_type(const char *type)
 {
   if(!type || !type[0])
     return GNUTLS_X509_FMT_PEM;
-  if(strcasecompare(type, "PEM"))
+  if(Curl_raw_equal(type, "PEM"))
     return GNUTLS_X509_FMT_PEM;
-  if(strcasecompare(type, "DER"))
+  if(Curl_raw_equal(type, "DER"))
     return GNUTLS_X509_FMT_DER;
   return -1;
 }
@@ -380,13 +368,9 @@ gtls_connect_step1(struct connectdata *conn,
                    int sockindex)
 {
   struct Curl_easy *data = conn->data;
-  unsigned int init_flags;
   gnutls_session_t session;
   int rc;
   bool sni = TRUE; /* default is SNI enabled */
-  void *transport_ptr = NULL;
-  gnutls_push_func gnutls_transport_push = NULL;
-  gnutls_pull_func gnutls_transport_pull = NULL;
 #ifdef ENABLE_IPV6
   struct in6_addr addr;
 #else
@@ -413,13 +397,10 @@ gtls_connect_step1(struct connectdata *conn,
    requested in the priority string, so treat it specially
  */
 #define GNUTLS_SRP "+SRP"
-  const char *prioritylist;
+  const charprioritylist;
   const char *err = NULL;
 #endif
 
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-
   if(conn->ssl[sockindex].state == ssl_connection_complete)
     /* to make us tolerant against being called more than once for the
        same connection */
@@ -428,11 +409,12 @@ gtls_connect_step1(struct connectdata *conn,
   if(!gtls_inited)
     Curl_gtls_init();
 
-  if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2) {
+  /* GnuTLS only supports SSLv3 and TLSv1 */
+  if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
     failf(data, "GnuTLS does not support SSLv2");
     return CURLE_SSL_CONNECT_ERROR;
   }
-  else if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv3)
+  else if(data->set.ssl.version == CURL_SSLVERSION_SSLv3)
     sni = FALSE; /* SSLv3 has no SNI */
 
   /* allocate a cred struct */
@@ -443,8 +425,8 @@ gtls_connect_step1(struct connectdata *conn,
   }
 
 #ifdef USE_TLS_SRP
-  if(SSL_SET_OPTION(authtype) == CURL_TLSAUTH_SRP) {
-    infof(data, "Using TLS-SRP username: %s\n", SSL_SET_OPTION(username));
+  if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
+    infof(data, "Using TLS-SRP username: %s\n", data->set.ssl.username);
 
     rc = gnutls_srp_allocate_client_credentials(
            &conn->ssl[sockindex].srp_client_cred);
@@ -456,8 +438,8 @@ gtls_connect_step1(struct connectdata *conn,
 
     rc = gnutls_srp_set_client_credentials(conn->ssl[sockindex].
                                            srp_client_cred,
-                                           SSL_SET_OPTION(username),
-                                           SSL_SET_OPTION(password));
+                                           data->set.ssl.username,
+                                           data->set.ssl.password);
     if(rc != GNUTLS_E_SUCCESS) {
       failf(data, "gnutls_srp_set_client_cred() failed: %s",
             gnutls_strerror(rc));
@@ -466,75 +448,68 @@ gtls_connect_step1(struct connectdata *conn,
   }
 #endif
 
-  if(SSL_CONN_CONFIG(CAfile)) {
+  if(data->set.ssl.CAfile) {
     /* set the trusted CA cert bundle file */
     gnutls_certificate_set_verify_flags(conn->ssl[sockindex].cred,
                                         GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
 
     rc = gnutls_certificate_set_x509_trust_file(conn->ssl[sockindex].cred,
-                                                SSL_CONN_CONFIG(CAfile),
+                                                data->set.ssl.CAfile,
                                                 GNUTLS_X509_FMT_PEM);
     if(rc < 0) {
       infof(data, "error reading ca cert file %s (%s)\n",
-            SSL_CONN_CONFIG(CAfile), gnutls_strerror(rc));
-      if(SSL_CONN_CONFIG(verifypeer))
+            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,
-            SSL_CONN_CONFIG(CAfile));
+      infof(data, "found %d certificates in %s\n",
+            rc, data->set.ssl.CAfile);
   }
 
 #ifdef HAS_CAPATH
-  if(SSL_CONN_CONFIG(CApath)) {
+  if(data->set.ssl.CApath) {
     /* set the trusted CA cert directory */
     rc = gnutls_certificate_set_x509_trust_dir(conn->ssl[sockindex].cred,
-                                               SSL_CONN_CONFIG(CApath),
-                                               GNUTLS_X509_FMT_PEM);
+                                                data->set.ssl.CApath,
+                                                GNUTLS_X509_FMT_PEM);
     if(rc < 0) {
       infof(data, "error reading ca cert file %s (%s)\n",
-            SSL_CONN_CONFIG(CApath), gnutls_strerror(rc));
-      if(SSL_CONN_CONFIG(verifypeer))
+            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, SSL_CONN_CONFIG(CApath));
+            rc, data->set.ssl.CApath);
   }
 #endif
 
 #ifdef CURL_CA_FALLBACK
   /* use system ca certificate store as fallback */
-  if(SSL_CONN_CONFIG(verifypeer) &&
-     !(SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(CApath))) {
+  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(SSL_SET_OPTION(CRLfile)) {
+  if(data->set.ssl.CRLfile) {
     /* set the CRL list file */
     rc = gnutls_certificate_set_x509_crl_file(conn->ssl[sockindex].cred,
-                                              SSL_SET_OPTION(CRLfile),
+                                              data->set.ssl.CRLfile,
                                               GNUTLS_X509_FMT_PEM);
     if(rc < 0) {
       failf(data, "error reading crl file %s (%s)",
-            SSL_SET_OPTION(CRLfile), gnutls_strerror(rc));
+            data->set.ssl.CRLfile, gnutls_strerror(rc));
       return CURLE_SSL_CRL_BADFILE;
     }
     else
       infof(data, "found %d CRL in %s\n",
-            rc, SSL_SET_OPTION(CRLfile));
+            rc, data->set.ssl.CRLfile);
   }
 
   /* Initialize TLS session as a client */
-  init_flags = GNUTLS_CLIENT;
-
-#if defined(GNUTLS_NO_TICKETS)
-  /* Disable TLS session tickets */
-  init_flags |= GNUTLS_NO_TICKETS;
-#endif
-
-  rc = gnutls_init(&conn->ssl[sockindex].session, init_flags);
+  rc = gnutls_init(&conn->ssl[sockindex].session, GNUTLS_CLIENT);
   if(rc != GNUTLS_E_SUCCESS) {
     failf(data, "gnutls_init() failed: %d", rc);
     return CURLE_SSL_CONNECT_ERROR;
@@ -543,13 +518,13 @@ gtls_connect_step1(struct connectdata *conn,
   /* convenient assign */
   session = conn->ssl[sockindex].session;
 
-  if((0 == Curl_inet_pton(AF_INET, hostname, &addr)) &&
+  if((0 == Curl_inet_pton(AF_INET, conn->host.name, &addr)) &&
 #ifdef ENABLE_IPV6
-     (0 == Curl_inet_pton(AF_INET6, hostname, &addr)) &&
+     (0 == Curl_inet_pton(AF_INET6, conn->host.name, &addr)) &&
 #endif
      sni &&
-     (gnutls_server_name_set(session, GNUTLS_NAME_DNS, hostname,
-                             strlen(hostname)) < 0))
+     (gnutls_server_name_set(session, GNUTLS_NAME_DNS, conn->host.name,
+                             strlen(conn->host.name)) < 0))
     infof(data, "WARNING: failed to configure server name indication (SNI) "
           "TLS extension\n");
 
@@ -570,13 +545,13 @@ gtls_connect_step1(struct connectdata *conn,
   if(rc != GNUTLS_E_SUCCESS)
     return CURLE_SSL_CONNECT_ERROR;
 
-  if(SSL_CONN_CONFIG(cipher_list) != NULL) {
+  if(data->set.ssl.cipher_list != NULL) {
     failf(data, "can't pass a custom cipher list to older GnuTLS"
           " versions");
     return CURLE_SSL_CONNECT_ERROR;
   }
 
-  switch(SSL_CONN_CONFIG(version) {
+  switch (data->set.ssl.version) {
     case CURL_SSLVERSION_SSLv3:
       protocol_priority[0] = GNUTLS_SSL3;
       break;
@@ -594,16 +569,12 @@ gtls_connect_step1(struct connectdata *conn,
       break;
     case CURL_SSLVERSION_TLSv1_2:
       protocol_priority[0] = GNUTLS_TLS1_2;
-      break;
-    case CURL_SSLVERSION_TLSv1_3:
-      failf(data, "GnuTLS: TLS 1.3 is not yet supported");
-      return CURLE_SSL_CONNECT_ERROR;
-    case CURL_SSLVERSION_SSLv2:
-      failf(data, "GnuTLS does not support SSLv2");
-      return CURLE_SSL_CONNECT_ERROR;
+    break;
+      case CURL_SSLVERSION_SSLv2:
     default:
-      failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
+      failf(data, "GnuTLS does not support SSLv2");
       return CURLE_SSL_CONNECT_ERROR;
+      break;
   }
   rc = gnutls_protocol_set_priority(session, protocol_priority);
   if(rc != GNUTLS_E_SUCCESS) {
@@ -615,7 +586,7 @@ gtls_connect_step1(struct connectdata *conn,
   /* Ensure +SRP comes at the *end* of all relevant strings so that it can be
    * removed if a run-time error indicates that SRP is not supported by this
    * GnuTLS version */
-  switch(SSL_CONN_CONFIG(version)) {
+  switch (data->set.ssl.version) {
     case CURL_SSLVERSION_SSLv3:
       prioritylist = GNUTLS_CIPHERS ":-VERS-TLS-ALL:+VERS-SSL3.0";
       sni = false;
@@ -636,15 +607,11 @@ gtls_connect_step1(struct connectdata *conn,
       prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
                      "+VERS-TLS1.2:" GNUTLS_SRP;
       break;
-    case CURL_SSLVERSION_TLSv1_3:
-      failf(data, "GnuTLS: TLS 1.3 is not yet supported");
-      return CURLE_SSL_CONNECT_ERROR;
     case CURL_SSLVERSION_SSLv2:
-      failf(data, "GnuTLS does not support SSLv2");
-      return CURLE_SSL_CONNECT_ERROR;
     default:
-      failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
+      failf(data, "GnuTLS does not support SSLv2");
       return CURLE_SSL_CONNECT_ERROR;
+      break;
   }
   rc = gnutls_priority_set_direct(session, prioritylist, &err);
   if((rc == GNUTLS_E_INVALID_REQUEST) && err) {
@@ -694,8 +661,8 @@ gtls_connect_step1(struct connectdata *conn,
   }
 #endif
 
-  if(SSL_SET_OPTION(cert)) {
-    if(SSL_SET_OPTION(key_passwd)) {
+  if(data->set.str[STRING_CERT]) {
+    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 |
@@ -704,11 +671,11 @@ gtls_connect_step1(struct connectdata *conn,
         GNUTLS_PKCS_USE_PBES2_AES_256;
       rc = gnutls_certificate_set_x509_key_file2(
            conn->ssl[sockindex].cred,
-           SSL_SET_OPTION(cert),
-           SSL_SET_OPTION(key) ?
-           SSL_SET_OPTION(key) : SSL_SET_OPTION(cert),
-           do_file_type(SSL_SET_OPTION(cert_type)),
-           SSL_SET_OPTION(key_passwd),
+           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,
@@ -722,14 +689,15 @@ gtls_connect_step1(struct connectdata *conn,
 #endif
     }
     else {
-      if(gnutls_certificate_set_x509_key_file(
+      rc = gnutls_certificate_set_x509_key_file(
            conn->ssl[sockindex].cred,
-           SSL_SET_OPTION(cert),
-           SSL_SET_OPTION(key) ?
-           SSL_SET_OPTION(key) : SSL_SET_OPTION(cert),
-           do_file_type(SSL_SET_OPTION(cert_type)) ) !=
-         GNUTLS_E_SUCCESS) {
-        failf(data, "error reading X.509 key or certificate file");
+           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;
       }
     }
@@ -737,7 +705,7 @@ gtls_connect_step1(struct connectdata *conn,
 
 #ifdef USE_TLS_SRP
   /* put the credentials to the current session */
-  if(SSL_SET_OPTION(authtype) == CURL_TLSAUTH_SRP) {
+  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) {
@@ -756,30 +724,19 @@ gtls_connect_step1(struct connectdata *conn,
     }
   }
 
-  if(conn->proxy_ssl[sockindex].use) {
-    transport_ptr = conn->proxy_ssl[sockindex].session;
-    gnutls_transport_push = Curl_gtls_push_ssl;
-    gnutls_transport_pull = Curl_gtls_pull_ssl;
-  }
-  else {
-    /* file descriptor for the socket */
-    transport_ptr = GNUTLS_INT_TO_POINTER_CAST(conn->sock[sockindex]);
-    gnutls_transport_push = Curl_gtls_push;
-    gnutls_transport_pull = Curl_gtls_pull;
-  }
-
-  /* set the connection handle */
-  gnutls_transport_set_ptr(session, transport_ptr);
+  /* set the connection handle (file descriptor for the socket) */
+  gnutls_transport_set_ptr(session,
+                           GNUTLS_INT_TO_POINTER_CAST(conn->sock[sockindex]));
 
   /* register callback functions to send and receive data. */
-  gnutls_transport_set_push_function(session, gnutls_transport_push);
-  gnutls_transport_set_pull_function(session, gnutls_transport_pull);
+  gnutls_transport_set_push_function(session, Curl_gtls_push);
+  gnutls_transport_set_pull_function(session, Curl_gtls_pull);
 
   /* lowat must be set to zero when using custom push and pull functions. */
   gnutls_transport_set_lowat(session, 0);
 
 #ifdef HAS_OCSP
-  if(SSL_CONN_CONFIG(verifystatus)) {
+  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);
@@ -790,17 +747,17 @@ gtls_connect_step1(struct connectdata *conn,
 
   /* This might be a reconnect, so we check for a session ID in the cache
      to speed up things */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     void *ssl_sessionid;
     size_t ssl_idsize;
 
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, &ssl_idsize, sockindex)) {
+    if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, &ssl_idsize)) {
       /* we got a session id, use it! */
       gnutls_session_set_data(session, ssl_sessionid, ssl_idsize);
 
       /* Informational message */
-      infof(data, "SSL re-using session ID\n");
+      infof (data, "SSL re-using session ID\n");
     }
     Curl_ssl_sessionid_unlock(conn);
   }
@@ -890,9 +847,8 @@ gtls_connect_step3(struct connectdata *conn,
   gnutls_datum_t proto;
 #endif
   CURLcode result = CURLE_OK;
+
   gnutls_protocol_t version = gnutls_protocol_get_version(session);
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
 
   /* 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),
@@ -910,13 +866,13 @@ gtls_connect_step3(struct connectdata *conn,
 
   chainp = gnutls_certificate_get_peers(session, &cert_list_size);
   if(!chainp) {
-    if(SSL_CONN_CONFIG(verifypeer) ||
-       SSL_CONN_CONFIG(verifyhost) ||
-       SSL_SET_OPTION(issuercert)) {
+    if(data->set.ssl.verifypeer ||
+       data->set.ssl.verifyhost ||
+       data->set.ssl.issuercert) {
 #ifdef USE_TLS_SRP
-      if(SSL_SET_OPTION(authtype) == CURL_TLSAUTH_SRP
-         && SSL_SET_OPTION(username) != NULL
-         && !SSL_CONN_CONFIG(verifypeer)
+      if(data->set.ssl.authtype == CURL_TLSAUTH_SRP
+         && data->set.ssl.username != NULL
+         && !data->set.ssl.verifypeer
          && gnutls_cipher_get(session)) {
         /* no peer cert, but auth is ok if we have SRP user and cipher and no
            peer verify */
@@ -949,7 +905,7 @@ gtls_connect_step3(struct connectdata *conn,
     }
   }
 
-  if(SSL_CONN_CONFIG(verifypeer)) {
+  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
        more of the gnutls_certificate_status_t enumerated elements bitwise
@@ -965,11 +921,10 @@ gtls_connect_step3(struct connectdata *conn,
 
     /* verify_status is a bitmask of gnutls_certificate_status bits */
     if(verify_status & GNUTLS_CERT_INVALID) {
-      if(SSL_CONN_CONFIG(verifypeer)) {
+      if(data->set.ssl.verifypeer) {
         failf(data, "server certificate verification failed. CAfile: %s "
-              "CRLfile: %s", SSL_CONN_CONFIG(CAfile) ? SSL_CONN_CONFIG(CAfile):
-              "none",
-              SSL_SET_OPTION(CRLfile)?SSL_SET_OPTION(CRLfile):"none");
+              "CRLfile: %s", data->set.ssl.CAfile?data->set.ssl.CAfile:"none",
+              data->set.ssl.CRLfile?data->set.ssl.CRLfile:"none");
         return CURLE_SSL_CACERT;
       }
       else
@@ -982,7 +937,7 @@ gtls_connect_step3(struct connectdata *conn,
     infof(data, "\t server certificate verification SKIPPED\n");
 
 #ifdef HAS_OCSP
-  if(SSL_CONN_CONFIG(verifystatus)) {
+  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;
@@ -1094,21 +1049,21 @@ gtls_connect_step3(struct connectdata *conn,
        gnutls_x509_crt_t format */
     gnutls_x509_crt_import(x509_cert, chainp, GNUTLS_X509_FMT_DER);
 
-  if(SSL_SET_OPTION(issuercert)) {
+  if(data->set.ssl.issuercert) {
     gnutls_x509_crt_init(&x509_issuer);
-    issuerp = load_file(SSL_SET_OPTION(issuercert));
+    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);
     gnutls_x509_crt_deinit(x509_issuer);
     unload_file(issuerp);
     if(rc <= 0) {
       failf(data, "server certificate issuer check failed (IssuerCert: %s)",
-            SSL_SET_OPTION(issuercert)?SSL_SET_OPTION(issuercert):"none");
+            data->set.ssl.issuercert?data->set.ssl.issuercert:"none");
       gnutls_x509_crt_deinit(x509_cert);
       return CURLE_SSL_ISSUER_ERROR;
     }
     infof(data, "\t server certificate issuer check OK (Issuer Cert: %s)\n",
-          SSL_SET_OPTION(issuercert)?SSL_SET_OPTION(issuercert):"none");
+          data->set.ssl.issuercert?data->set.ssl.issuercert:"none");
   }
 
   size=sizeof(certbuf);
@@ -1127,7 +1082,7 @@ gtls_connect_step3(struct connectdata *conn,
      in RFC2818 (HTTPS), which takes into account wildcards, and the subject
      alternative name PKIX extension. Returns non zero on success, and zero on
      failure. */
-  rc = gnutls_x509_crt_check_hostname(x509_cert, hostname);
+  rc = gnutls_x509_crt_check_hostname(x509_cert, conn->host.name);
 #if GNUTLS_VERSION_NUMBER < 0x030306
   /* Before 3.3.6, gnutls_x509_crt_check_hostname() didn't check IP
      addresses. */
@@ -1143,10 +1098,10 @@ gtls_connect_step3(struct connectdata *conn,
     int i;
     int ret = 0;
 
-    if(Curl_inet_pton(AF_INET, hostname, addrbuf) > 0)
+    if(Curl_inet_pton(AF_INET, conn->host.name, addrbuf) > 0)
       addrlen = 4;
 #ifdef ENABLE_IPV6
-    else if(Curl_inet_pton(AF_INET6, hostname, addrbuf) > 0)
+    else if(Curl_inet_pton(AF_INET6, conn->host.name, addrbuf) > 0)
       addrlen = 16;
 #endif
 
@@ -1171,18 +1126,15 @@ gtls_connect_step3(struct connectdata *conn,
   }
 #endif
   if(!rc) {
-    const char * const dispname = SSL_IS_PROXY() ?
-      conn->http_proxy.host.dispname : conn->host.dispname;
-
-    if(SSL_CONN_CONFIG(verifyhost)) {
+    if(data->set.ssl.verifyhost) {
       failf(data, "SSL: certificate subject name (%s) does not match "
-            "target host name '%s'", certbuf, dispname);
+            "target host name '%s'", certbuf, conn->host.dispname);
       gnutls_x509_crt_deinit(x509_cert);
       return CURLE_PEER_FAILED_VERIFICATION;
     }
     else
       infof(data, "\t common name: %s (does not match '%s')\n",
-            certbuf, dispname);
+            certbuf, conn->host.dispname);
   }
   else
     infof(data, "\t common name: %s (matched)\n", certbuf);
@@ -1191,7 +1143,7 @@ gtls_connect_step3(struct connectdata *conn,
   certclock = gnutls_x509_crt_get_expiration_time(x509_cert);
 
   if(certclock == (time_t)-1) {
-    if(SSL_CONN_CONFIG(verifypeer)) {
+    if(data->set.ssl.verifypeer) {
       failf(data, "server cert expiration date verify failed");
       gnutls_x509_crt_deinit(x509_cert);
       return CURLE_SSL_CONNECT_ERROR;
@@ -1201,7 +1153,7 @@ gtls_connect_step3(struct connectdata *conn,
   }
   else {
     if(certclock < time(NULL)) {
-      if(SSL_CONN_CONFIG(verifypeer)) {
+      if(data->set.ssl.verifypeer) {
         failf(data, "server certificate expiration date has passed.");
         gnutls_x509_crt_deinit(x509_cert);
         return CURLE_PEER_FAILED_VERIFICATION;
@@ -1216,7 +1168,7 @@ gtls_connect_step3(struct connectdata *conn,
   certclock = gnutls_x509_crt_get_activation_time(x509_cert);
 
   if(certclock == (time_t)-1) {
-    if(SSL_CONN_CONFIG(verifypeer)) {
+    if(data->set.ssl.verifypeer) {
       failf(data, "server cert activation date verify failed");
       gnutls_x509_crt_deinit(x509_cert);
       return CURLE_SSL_CONNECT_ERROR;
@@ -1226,7 +1178,7 @@ gtls_connect_step3(struct connectdata *conn,
   }
   else {
     if(certclock > time(NULL)) {
-      if(SSL_CONN_CONFIG(verifypeer)) {
+      if(data->set.ssl.verifypeer) {
         failf(data, "server certificate not activated yet.");
         gnutls_x509_crt_deinit(x509_cert);
         return CURLE_PEER_FAILED_VERIFICATION;
@@ -1238,8 +1190,7 @@ gtls_connect_step3(struct connectdata *conn,
       infof(data, "\t server certificate activation date OK\n");
   }
 
-  ptr = SSL_IS_PROXY() ? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
-        data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
+  ptr = data->set.str[STRING_SSL_PINNEDPUBLICKEY];
   if(ptr) {
     result = pkp_pin_peer_pubkey(data, x509_cert, ptr);
     if(result != CURLE_OK) {
@@ -1319,7 +1270,7 @@ gtls_connect_step3(struct connectdata *conn,
   conn->recv[sockindex] = gtls_recv;
   conn->send[sockindex] = gtls_send;
 
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     /* we always unconditionally get the session id here, as even if we
        already got it from the cache and asked to use it in the connection, it
        might've been rejected and then a new one is in use now and we need to
@@ -1338,8 +1289,7 @@ gtls_connect_step3(struct connectdata *conn,
       gnutls_session_get_data(session, connect_sessionid, &connect_idsize);
 
       Curl_ssl_sessionid_lock(conn);
-      incache = !(Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL,
-                                        sockindex));
+      incache = !(Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL));
       if(incache) {
         /* there was one before in the cache, so instead of risking that the
            previous one was rejected, we just kill that and store the new */
@@ -1347,8 +1297,7 @@ gtls_connect_step3(struct connectdata *conn,
       }
 
       /* store this session id */
-      result = Curl_ssl_addsessionid(conn, connect_sessionid, connect_idsize,
-                                     sockindex);
+      result = Curl_ssl_addsessionid(conn, connect_sessionid, connect_idsize);
       Curl_ssl_sessionid_unlock(conn);
       if(result) {
         free(connect_sessionid);
@@ -1383,7 +1332,7 @@ gtls_connect_common(struct connectdata *conn,
 
   /* Initiate the connection, if not already done */
   if(ssl_connect_1==connssl->connecting_state) {
-    rc = gtls_connect_step1(conn, sockindex);
+    rc = gtls_connect_step1 (conn, sockindex);
     if(rc)
       return rc;
   }
@@ -1430,20 +1379,6 @@ Curl_gtls_connect(struct connectdata *conn,
   return CURLE_OK;
 }
 
-bool Curl_gtls_data_pending(const struct connectdata *conn, int connindex)
-{
-  bool res = FALSE;
-  if(conn->ssl[connindex].session &&
-     0 != gnutls_record_check_pending(conn->ssl[connindex].session))
-    res = TRUE;
-
-  if(conn->proxy_ssl[connindex].session &&
-     0 != gnutls_record_check_pending(conn->proxy_ssl[connindex].session))
-    res = TRUE;
-
-  return res;
-}
-
 static ssize_t gtls_send(struct connectdata *conn,
                          int sockindex,
                          const void *mem,
@@ -1463,29 +1398,29 @@ static ssize_t gtls_send(struct connectdata *conn,
   return rc;
 }
 
-static void close_one(struct ssl_connect_data *ssl)
+static void close_one(struct connectdata *conn,
+                      int idx)
 {
-  if(ssl->session) {
-    gnutls_bye(ssl->session, GNUTLS_SHUT_RDWR);
-    gnutls_deinit(ssl->session);
-    ssl->session = NULL;
+  if(conn->ssl[idx].session) {
+    gnutls_bye(conn->ssl[idx].session, GNUTLS_SHUT_RDWR);
+    gnutls_deinit(conn->ssl[idx].session);
+    conn->ssl[idx].session = NULL;
   }
-  if(ssl->cred) {
-    gnutls_certificate_free_credentials(ssl->cred);
-    ssl->cred = NULL;
+  if(conn->ssl[idx].cred) {
+    gnutls_certificate_free_credentials(conn->ssl[idx].cred);
+    conn->ssl[idx].cred = NULL;
   }
 #ifdef USE_TLS_SRP
-  if(ssl->srp_client_cred) {
-    gnutls_srp_free_client_credentials(ssl->srp_client_cred);
-    ssl->srp_client_cred = NULL;
+  if(conn->ssl[idx].srp_client_cred) {
+    gnutls_srp_free_client_credentials(conn->ssl[idx].srp_client_cred);
+    conn->ssl[idx].srp_client_cred = NULL;
   }
 #endif
 }
 
 void Curl_gtls_close(struct connectdata *conn, int sockindex)
 {
-  close_one(&conn->ssl[sockindex]);
-  close_one(&conn->proxy_ssl[sockindex]);
+  close_one(conn, sockindex);
 }
 
 /*
@@ -1510,8 +1445,8 @@ int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
 
   if(conn->ssl[sockindex].session) {
     while(!done) {
-      int what = SOCKET_READABLE(conn->sock[sockindex],
-                                 SSL_SHUTDOWN_TIMEOUT);
+      int what = Curl_socket_ready(conn->sock[sockindex],
+                                   CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
       if(what > 0) {
         /* Something to read, let's do it and hope that it is the close
            notify alert from the server */
@@ -1551,8 +1486,8 @@ int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
   gnutls_certificate_free_credentials(conn->ssl[sockindex].cred);
 
 #ifdef USE_TLS_SRP
-  if(SSL_SET_OPTION(authtype) == CURL_TLSAUTH_SRP
-     && SSL_SET_OPTION(username) != NULL)
+  if(data->set.ssl.authtype == CURL_TLSAUTH_SRP
+     && data->set.ssl.username != NULL)
     gnutls_srp_free_client_credentials(conn->ssl[sockindex].srp_client_cred);
 #endif
 
@@ -1633,21 +1568,19 @@ static int Curl_gtls_seed(struct Curl_easy *data)
 #endif
 
 /* data might be NULL! */
-CURLcode Curl_gtls_random(struct Curl_easy *data,
-                          unsigned char *entropy,
-                          size_t length)
+int Curl_gtls_random(struct Curl_easy *data,
+                     unsigned char *entropy,
+                     size_t length)
 {
 #if defined(USE_GNUTLS_NETTLE)
-  int rc;
   (void)data;
-  rc = gnutls_rnd(GNUTLS_RND_RANDOM, entropy, length);
-  return rc?CURLE_FAILED_INIT:CURLE_OK;
+  gnutls_rnd(GNUTLS_RND_RANDOM, entropy, length);
 #elif defined(USE_GNUTLS)
   if(data)
     Curl_gtls_seed(data); /* Initiate the seed if not already done */
   gcry_randomize(entropy, length, GCRY_STRONG_RANDOM);
 #endif
-  return CURLE_OK;
+  return 0;
 }
 
 void Curl_gtls_md5sum(unsigned char *tmp, /* input */
@@ -1664,7 +1597,7 @@ void Curl_gtls_md5sum(unsigned char *tmp, /* input */
   gcry_md_hd_t MD5pw;
   gcry_md_open(&MD5pw, GCRY_MD_MD5, 0);
   gcry_md_write(MD5pw, tmp, tmplen);
-  memcpy(md5sum, gcry_md_read(MD5pw, 0), md5len);
+  memcpy(md5sum, gcry_md_read (MD5pw, 0), md5len);
   gcry_md_close(MD5pw);
 #endif
 }
@@ -1683,7 +1616,7 @@ void Curl_gtls_sha256sum(const unsigned char *tmp, /* input */
   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);
+  memcpy(sha256sum, gcry_md_read (SHA256pw, 0), sha256len);
   gcry_md_close(SHA256pw);
 #endif
 }
index 462c048..e0a95a7 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -34,8 +34,6 @@ CURLcode Curl_gtls_connect(struct connectdata *conn, int sockindex);
 CURLcode Curl_gtls_connect_nonblocking(struct connectdata *conn,
                                        int sockindex,
                                        bool *done);
-bool Curl_gtls_data_pending(const struct connectdata *conn,
-                            int connindex);
 
  /* close a SSL connection */
 void Curl_gtls_close(struct connectdata *conn, int sockindex);
@@ -43,9 +41,9 @@ void Curl_gtls_close(struct connectdata *conn, int sockindex);
 void Curl_gtls_session_free(void *ptr);
 size_t Curl_gtls_version(char *buffer, size_t size);
 int Curl_gtls_shutdown(struct connectdata *conn, int sockindex);
-CURLcode Curl_gtls_random(struct Curl_easy *data,
-                          unsigned char *entropy,
-                          size_t length);
+int Curl_gtls_random(struct Curl_easy *data,
+                     unsigned char *entropy,
+                     size_t length);
 void Curl_gtls_md5sum(unsigned char *tmp, /* input */
                       size_t tmplen,
                       unsigned char *md5sum, /* output */
@@ -57,9 +55,6 @@ void Curl_gtls_sha256sum(const unsigned char *tmp, /* input */
 
 bool Curl_gtls_cert_status_request(void);
 
-/* Support HTTPS-proxy */
-#define HTTPS_PROXY_SUPPORT 1
-
 /* Set the API backend definition to GnuTLS */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_GNUTLS
 
@@ -86,7 +81,7 @@ bool Curl_gtls_cert_status_request(void);
 #define curlssl_engines_list(x) ((void)x, (struct curl_slist *)NULL)
 #define curlssl_version Curl_gtls_version
 #define curlssl_check_cxn(x) ((void)x, -1)
-#define curlssl_data_pending(x,y) Curl_gtls_data_pending(x,y)
+#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 curlssl_sha256sum(a,b,c,d) Curl_gtls_sha256sum(a,b,c,d)
index 07239bf..c04fc03 100644 (file)
@@ -6,7 +6,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2012 - 2017, 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
 
 #ifdef USE_MBEDTLS
 
-#include <mbedtls/version.h>
-#if MBEDTLS_VERSION_NUMBER >= 0x02040000
-#include <mbedtls/net_sockets.h>
-#else
 #include <mbedtls/net.h>
-#endif
 #include <mbedtls/ssl.h>
 #include <mbedtls/certs.h>
 #include <mbedtls/x509.h>
+#include <mbedtls/version.h>
 
 #include <mbedtls/error.h>
 #include <mbedtls/entropy.h>
@@ -54,6 +50,7 @@
 #include "parsedate.h"
 #include "connect.h" /* for the connect timeout */
 #include "select.h"
+#include "rawstr.h"
 #include "polarssl_threadlock.h"
 
 /* The last 3 #include files should be in this order */
@@ -163,20 +160,13 @@ mbed_connect_step1(struct connectdata *conn,
 {
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data* connssl = &conn->ssl[sockindex];
-  const char * const ssl_cafile = SSL_CONN_CONFIG(CAfile);
-  const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
-  const char * const ssl_capath = SSL_CONN_CONFIG(CApath);
-  char * const ssl_cert = SSL_SET_OPTION(cert);
-  const char * const ssl_crlfile = SSL_SET_OPTION(CRLfile);
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
+
   int ret = -1;
   char errorbuf[128];
   errorbuf[0]=0;
 
   /* mbedTLS only supports SSLv3 and TLSv1 */
-  if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2) {
+  if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
     failf(data, "mbedTLS does not support SSLv2");
     return CURLE_SSL_CONNECT_ERROR;
   }
@@ -212,32 +202,34 @@ mbed_connect_step1(struct connectdata *conn,
   /* Load the trusted CA */
   mbedtls_x509_crt_init(&connssl->cacert);
 
-  if(ssl_cafile) {
-    ret = mbedtls_x509_crt_parse_file(&connssl->cacert, ssl_cafile);
+  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",
-            ssl_cafile, -ret, errorbuf);
+            data->set.str[STRING_SSL_CAFILE], -ret, errorbuf);
 
-      if(verifypeer)
+      if(data->set.ssl.verifypeer)
         return CURLE_SSL_CACERT_BADFILE;
     }
   }
 
-  if(ssl_capath) {
-    ret = mbedtls_x509_crt_parse_path(&connssl->cacert, ssl_capath);
+  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",
-            ssl_capath, -ret, errorbuf);
+            data->set.str[STRING_SSL_CAPATH], -ret, errorbuf);
 
-      if(verifypeer)
+      if(data->set.ssl.verifypeer)
         return CURLE_SSL_CACERT_BADFILE;
     }
   }
@@ -245,15 +237,16 @@ mbed_connect_step1(struct connectdata *conn,
   /* Load the client certificate */
   mbedtls_x509_crt_init(&connssl->clicert);
 
-  if(ssl_cert) {
-    ret = mbedtls_x509_crt_parse_file(&connssl->clicert, ssl_cert);
+  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",
-            ssl_cert, -ret, errorbuf);
+            data->set.str[STRING_CERT], -ret, errorbuf);
 
       return CURLE_SSL_CERTPROBLEM;
     }
@@ -262,9 +255,9 @@ mbed_connect_step1(struct connectdata *conn,
   /* Load the client private key */
   mbedtls_pk_init(&connssl->pk);
 
-  if(SSL_SET_OPTION(key)) {
-    ret = mbedtls_pk_parse_keyfile(&connssl->pk, SSL_SET_OPTION(key),
-                                   SSL_SET_OPTION(key_passwd));
+  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;
 
@@ -273,7 +266,7 @@ mbed_connect_step1(struct connectdata *conn,
       mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
 #endif /* MBEDTLS_ERROR_C */
       failf(data, "Error reading private key %s - mbedTLS: (-0x%04X) %s",
-            SSL_SET_OPTION(key), -ret, errorbuf);
+            data->set.str[STRING_KEY], -ret, errorbuf);
 
       return CURLE_SSL_CERTPROBLEM;
     }
@@ -282,21 +275,23 @@ mbed_connect_step1(struct connectdata *conn,
   /* Load the CRL */
   mbedtls_x509_crl_init(&connssl->crl);
 
-  if(ssl_crlfile) {
-    ret = mbedtls_x509_crl_parse_file(&connssl->crl, ssl_crlfile);
+  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",
-            ssl_crlfile, -ret, errorbuf);
+            data->set.str[STRING_SSL_CRLFILE], -ret, errorbuf);
 
       return CURLE_SSL_CRL_BADFILE;
     }
   }
 
-  infof(data, "mbedTLS: Connecting to %s:%d\n", hostname, port);
+  infof(data, "mbedTLS: Connecting to %s:%d\n",
+        conn->host.name, conn->remote_port);
 
   mbedtls_ssl_config_init(&connssl->config);
 
@@ -318,7 +313,7 @@ mbed_connect_step1(struct connectdata *conn,
   mbedtls_ssl_conf_cert_profile(&connssl->config,
                                 &mbedtls_x509_crt_profile_fr);
 
-  switch(SSL_CONN_CONFIG(version)) {
+  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,
@@ -353,11 +348,8 @@ mbed_connect_step1(struct connectdata *conn,
                                  MBEDTLS_SSL_MINOR_VERSION_3);
     infof(data, "mbedTLS: Set SSL version to TLS 1.2\n");
     break;
-  case CURL_SSLVERSION_TLSv1_3:
-    failf(data, "mbedTLS: TLS 1.3 is not yet supported");
-    return CURLE_SSL_CONNECT_ERROR;
   default:
-    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
+    failf(data, "mbedTLS: Unsupported SSL protocol version");
     return CURLE_SSL_CONNECT_ERROR;
   }
 
@@ -373,17 +365,12 @@ mbed_connect_step1(struct connectdata *conn,
   mbedtls_ssl_conf_ciphersuites(&connssl->config,
                                 mbedtls_ssl_list_ciphersuites());
 
-#if defined(MBEDTLS_SSL_SESSION_TICKETS)
-  mbedtls_ssl_conf_session_tickets(&connssl->config,
-                                   MBEDTLS_SSL_SESSION_TICKETS_DISABLED);
-#endif
-
   /* Check if there's a cached ID we can/should use here! */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     void *old_session = NULL;
 
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, &old_session, NULL, sockindex)) {
+    if(!Curl_ssl_getsessionid(conn, &old_session, NULL)) {
       ret = mbedtls_ssl_set_session(&connssl->ssl, old_session);
       if(ret) {
         Curl_ssl_sessionid_unlock(conn);
@@ -399,11 +386,11 @@ mbed_connect_step1(struct connectdata *conn,
                             &connssl->cacert,
                             &connssl->crl);
 
-  if(SSL_SET_OPTION(key)) {
+  if(data->set.str[STRING_KEY]) {
     mbedtls_ssl_conf_own_cert(&connssl->config,
                               &connssl->clicert, &connssl->pk);
   }
-  if(mbedtls_ssl_set_hostname(&connssl->ssl, hostname)) {
+  if(mbedtls_ssl_set_hostname(&connssl->ssl, conn->host.name)) {
     /* mbedtls_ssl_set_hostname() sets the name to use in CN/SAN checks *and*
        the name to set in the SNI extension. So even if curl connects to a
        host specified as an IP address, this function must be used. */
@@ -457,12 +444,9 @@ mbed_connect_step2(struct connectdata *conn,
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data* connssl = &conn->ssl[sockindex];
   const mbedtls_x509_crt *peercert;
-  const char * const pinnedpubkey = SSL_IS_PROXY() ?
-        data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
-        data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
 
 #ifdef HAS_ALPN
-  const char *next_protocol;
+  const charnext_protocol;
 #endif
 
   char errorbuf[128];
@@ -496,7 +480,7 @@ mbed_connect_step2(struct connectdata *conn,
 
   ret = mbedtls_ssl_get_verify_result(&conn->ssl[sockindex].ssl);
 
-  if(ret && SSL_CONN_CONFIG(verifypeer)) {
+  if(ret && data->set.ssl.verifypeer) {
     if(ret & MBEDTLS_X509_BADCERT_EXPIRED)
       failf(data, "Cert verify failed: BADCERT_EXPIRED");
 
@@ -531,7 +515,7 @@ mbed_connect_step2(struct connectdata *conn,
     free(buffer);
   }
 
-  if(pinnedpubkey) {
+  if(data->set.str[STRING_SSL_PINNEDPUBLICKEY]) {
     int size;
     CURLcode result;
     mbedtls_x509_crt *p;
@@ -570,7 +554,7 @@ mbed_connect_step2(struct connectdata *conn,
 
     /* mbedtls_pk_write_pubkey_der writes data at the end of the buffer. */
     result = Curl_pin_peer_pubkey(data,
-                                  pinnedpubkey,
+                                  data->set.str[STRING_SSL_PINNEDPUBLICKEY],
                                   &pubkey[PUB_DER_MAX_BYTES - size], size);
     if(result) {
       mbedtls_x509_crt_free(p);
@@ -623,7 +607,7 @@ mbed_connect_step3(struct connectdata *conn,
 
   DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
 
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     int ret;
     mbedtls_ssl_session *our_ssl_sessionid;
     void *old_ssl_sessionid = NULL;
@@ -642,10 +626,10 @@ mbed_connect_step3(struct connectdata *conn,
 
     /* If there's already a matching session in the cache, delete it */
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL, sockindex))
+    if(!Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL))
       Curl_ssl_delsessionid(conn, old_ssl_sessionid);
 
-    retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid, 0, sockindex);
+    retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid, 0);
     Curl_ssl_sessionid_unlock(conn);
     if(retcode) {
       free(our_ssl_sessionid);
@@ -734,55 +718,6 @@ size_t Curl_mbedtls_version(char *buffer, size_t size)
                   (version>>16)&0xff, (version>>8)&0xff);
 }
 
-CURLcode Curl_mbedtls_random(struct Curl_easy *data, unsigned char *entropy,
-                             size_t length)
-{
-#if defined(MBEDTLS_CTR_DRBG_C)
-  int ret = -1;
-  char errorbuf[128];
-  mbedtls_entropy_context ctr_entropy;
-  mbedtls_ctr_drbg_context ctr_drbg;
-  mbedtls_entropy_init(&ctr_entropy);
-  mbedtls_ctr_drbg_init(&ctr_drbg);
-  errorbuf[0]=0;
-
-  ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func,
-                              &ctr_entropy, NULL, 0);
-
-  if(ret) {
-#ifdef MBEDTLS_ERROR_C
-    mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* MBEDTLS_ERROR_C */
-    failf(data, "Failed - mbedTLS: ctr_drbg_seed returned (-0x%04X) %s\n",
-          -ret, errorbuf);
-  }
-  else {
-    ret = mbedtls_ctr_drbg_random(&ctr_drbg, entropy, length);
-
-    if(ret) {
-#ifdef MBEDTLS_ERROR_C
-      mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* MBEDTLS_ERROR_C */
-      failf(data, "mbedTLS: ctr_drbg_init returned (-0x%04X) %s\n",
-            -ret, errorbuf);
-    }
-  }
-
-  mbedtls_ctr_drbg_free(&ctr_drbg);
-  mbedtls_entropy_free(&ctr_entropy);
-
-  return ret == 0 ? CURLE_OK : CURLE_FAILED_INIT;
-#elif defined(MBEDTLS_HAVEGE_C)
-  mbedtls_havege_state hs;
-  mbedtls_havege_init(&hs);
-  mbedtls_havege_random(&hs, entropy, length);
-  mbedtls_havege_free(&hs);
-  return CURLE_OK;
-#else
-  return CURLE_NOT_BUILT_IN;
-#endif
-}
-
 static CURLcode
 mbed_connect_common(struct connectdata *conn,
                     int sockindex,
@@ -838,8 +773,7 @@ mbed_connect_common(struct connectdata *conn,
       curl_socket_t readfd = ssl_connect_2_reading==
         connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
 
-      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
-                               nonblocking ? 0 : timeout_ms);
+      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);
@@ -937,7 +871,9 @@ void Curl_mbedtls_cleanup(void)
 
 int Curl_mbedtls_data_pending(const struct connectdata *conn, int sockindex)
 {
-  return mbedtls_ssl_get_bytes_avail(&conn->ssl[sockindex].ssl) != 0;
+  mbedtls_ssl_context *ssl =
+    (mbedtls_ssl_context *)&conn->ssl[sockindex].ssl;
+  return ssl->in_msglen != 0;
 }
 
 #endif /* USE_MBEDTLS */
index 5b0bcf6..1021d54 100644 (file)
@@ -50,9 +50,6 @@ 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);
 
-CURLcode Curl_mbedtls_random(struct Curl_easy *data, unsigned char *entropy,
-                     size_t length);
-
 /* this backends supports CURLOPT_PINNEDPUBLICKEY */
 #define have_curlssl_pinnedpubkey 1
 
@@ -73,7 +70,11 @@ CURLcode Curl_mbedtls_random(struct Curl_easy *data, unsigned char *entropy,
 #define curlssl_data_pending(x,y) Curl_mbedtls_data_pending(x, y)
 #define CURL_SSL_BACKEND CURLSSLBACKEND_MBEDTLS
 #define curlssl_sha256sum(a,b,c,d) mbedtls_sha256(a,b,c,0)
-#define curlssl_random(x,y,z) Curl_mbedtls_random(x, y, z)
+
+/* 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 d5158ac..8a4249c 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -34,7 +34,7 @@
 #include "formdata.h" /* for the boundary function */
 #include "url.h" /* for the ssl config check function */
 #include "connect.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "select.h"
 #include "vtls.h"
 #include "llist.h"
@@ -64,7 +64,7 @@
 #include <ocsp.h>
 #endif
 
-#include "strcase.h"
+#include "rawstr.h"
 #include "warnless.h"
 #include "x509asn1.h"
 
@@ -149,7 +149,7 @@ static const cipher_s cipherlist[] = {
   {"ecdh_rsa_3des_sha",          TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA},
   {"ecdh_rsa_aes_128_sha",       TLS_ECDH_RSA_WITH_AES_128_CBC_SHA},
   {"ecdh_rsa_aes_256_sha",       TLS_ECDH_RSA_WITH_AES_256_CBC_SHA},
-  {"ecdhe_rsa_null",             TLS_ECDHE_RSA_WITH_NULL_SHA},
+  {"echde_rsa_null",             TLS_ECDHE_RSA_WITH_NULL_SHA},
   {"ecdhe_rsa_rc4_128_sha",      TLS_ECDHE_RSA_WITH_RC4_128_SHA},
   {"ecdhe_rsa_3des_sha",         TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA},
   {"ecdhe_rsa_aes_128_sha",      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},
@@ -179,35 +179,16 @@ static const cipher_s cipherlist[] = {
   {"ecdhe_rsa_aes_128_gcm_sha_256",   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
   {"ecdh_rsa_aes_128_gcm_sha_256",    TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256},
 #endif
-#ifdef TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
-  /* cipher suites using SHA384 */
-  {"rsa_aes_256_gcm_sha_384",         TLS_RSA_WITH_AES_256_GCM_SHA384},
-  {"dhe_rsa_aes_256_gcm_sha_384",     TLS_DHE_RSA_WITH_AES_256_GCM_SHA384},
-  {"dhe_dss_aes_256_gcm_sha_384",     TLS_DHE_DSS_WITH_AES_256_GCM_SHA384},
-  {"ecdhe_ecdsa_aes_256_sha_384",     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384},
-  {"ecdhe_rsa_aes_256_sha_384",       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384},
-  {"ecdhe_ecdsa_aes_256_gcm_sha_384", TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384},
-  {"ecdhe_rsa_aes_256_gcm_sha_384",   TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384},
-#endif
-#ifdef TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
-  /* chacha20-poly1305 cipher suites */
- {"ecdhe_rsa_chacha20_poly1305_sha_256",
-     TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256},
- {"ecdhe_ecdsa_chacha20_poly1305_sha_256",
-     TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256},
- {"dhe_rsa_chacha20_poly1305_sha_256",
-     TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256},
-#endif
 };
 
-static const char *pem_library = "libnsspem.so";
-static SECMODModule *mod = NULL;
+static const charpem_library = "libnsspem.so";
+static SECMODModulemod = NULL;
 
 /* NSPR I/O layer we use to detect blocking direction during SSL handshake */
 static PRDescIdentity nspr_io_identity = PR_INVALID_IO_LAYER;
 static PRIOMethods nspr_io_methods;
 
-static const char *nss_error_to_name(PRErrorCode code)
+static const charnss_error_to_name(PRErrorCode code)
 {
   const char *name = PR_ErrorToName(code);
   if(name)
@@ -254,15 +235,14 @@ static SECStatus set_ciphers(struct Curl_easy *data, PRFileDesc * model,
     while((*cipher) && (ISSPACE(*cipher)))
       ++cipher;
 
-    cipher_list = strchr(cipher, ',');
-    if(cipher_list) {
+    if((cipher_list = strchr(cipher, ','))) {
       *cipher_list++ = '\0';
     }
 
     found = PR_FALSE;
 
     for(i=0; i<NUM_OF_CIPHERS; i++) {
-      if(strcasecompare(cipher, cipherlist[i].name)) {
+      if(Curl_raw_equal(cipher, cipherlist[i].name)) {
         cipher_state[i] = PR_TRUE;
         found = PR_TRUE;
         break;
@@ -338,8 +318,9 @@ static int is_file(const char *filename)
  * should be later deallocated using free().  If the OOM failure occurs, we
  * return NULL, too.
  */
-static char *dup_nickname(struct Curl_easy *data, const char *str)
+static char* dup_nickname(struct Curl_easy *data, enum dupstring cert_kind)
 {
+  const char *str = data->set.str[cert_kind];
   const char *n;
 
   if(!is_file(str))
@@ -365,9 +346,9 @@ static char *dup_nickname(struct Curl_easy *data, const char *str)
 static PK11SlotInfo* nss_find_slot_by_name(const char *slot_name)
 {
   PK11SlotInfo *slot;
-  PR_Lock(nss_findslot_lock);
+  PR_Lock(nss_initlock);
   slot = PK11_FindSlotByName(slot_name);
-  PR_Unlock(nss_findslot_lock);
+  PR_Unlock(nss_initlock);
   return slot;
 }
 
@@ -514,7 +495,7 @@ static CURLcode nss_cache_crl(SECItem *crl_der)
   return CURLE_OK;
 }
 
-static CURLcode nss_load_crl(const char *crlfilename)
+static CURLcode nss_load_crl(const charcrlfilename)
 {
   PRFileDesc *infile;
   PRFileInfo  info;
@@ -540,7 +521,7 @@ static CURLcode nss_load_crl(const char *crlfilename)
     goto fail;
 
   /* place a trailing zero right after the visible data */
-  body = (char *)filedata.data;
+  body = (char*)filedata.data;
   body[--filedata.len] = '\0';
 
   body = strstr(body, "-----BEGIN");
@@ -585,7 +566,6 @@ static CURLcode nss_load_key(struct connectdata *conn, int sockindex,
   SECStatus status;
   CURLcode result;
   struct ssl_connect_data *ssl = conn->ssl;
-  struct Curl_easy *data = conn->data;
 
   (void)sockindex; /* unused */
 
@@ -603,7 +583,8 @@ static CURLcode nss_load_key(struct connectdata *conn, int sockindex,
   SECMOD_WaitForAnyTokenEvent(mod, 0, 0);
   PK11_IsPresent(slot);
 
-  status = PK11_Authenticate(slot, PR_TRUE, SSL_SET_OPTION(key_passwd));
+  status = PK11_Authenticate(slot, PR_TRUE,
+                             conn->data->set.str[STRING_KEY_PASSWD]);
   PK11_FreeSlot(slot);
 
   return (SECSuccess == status) ? CURLE_OK : CURLE_SSL_CERTPROBLEM;
@@ -664,7 +645,7 @@ static CURLcode cert_stuff(struct connectdata *conn, int sockindex,
   return CURLE_OK;
 }
 
-static char *nss_get_password(PK11SlotInfo *slot, PRBool retry, void *arg)
+static char * nss_get_password(PK11SlotInfo * slot, PRBool retry, void *arg)
 {
   (void)slot; /* unused */
 
@@ -682,7 +663,7 @@ static SECStatus nss_auth_cert_hook(void *arg, PRFileDesc *fd, PRBool checksig,
   struct connectdata *conn = (struct connectdata *)arg;
 
 #ifdef SSL_ENABLE_OCSP_STAPLING
-  if(SSL_CONN_CONFIG(verifystatus)) {
+  if(conn->data->set.ssl.verifystatus) {
     SECStatus cacheResult;
 
     const SECItemArray *csa = SSL_PeerStapledOCSPResponses(fd);
@@ -708,7 +689,7 @@ static SECStatus nss_auth_cert_hook(void *arg, PRFileDesc *fd, PRBool checksig,
   }
 #endif
 
-  if(!SSL_CONN_CONFIG(verifypeer)) {
+  if(!conn->data->set.ssl.verifypeer) {
     infof(conn->data, "skipping SSL peer certificate verification\n");
     return SECSuccess;
   }
@@ -734,11 +715,6 @@ static void HandshakeCallback(PRFileDesc *sock, void *arg)
   if(SSL_GetNextProto(sock, &state, buf, &buflen, buflenmax) == SECSuccess) {
 
     switch(state) {
-#if NSSVERNUM >= 0x031a00 /* 3.26.0 */
-    /* used by NSS internally to implement 0-RTT */
-    case SSL_NEXT_PROTO_EARLY_VALUE:
-      /* fall through! */
-#endif
     case SSL_NEXT_PROTO_NO_SUPPORT:
     case SSL_NEXT_PROTO_NO_OVERLAP:
       infof(conn->data, "ALPN/NPN, server did not agree to a protocol\n");
@@ -933,12 +909,9 @@ static SECStatus BadCertHandler(void *arg, PRFileDesc *sock)
   CERTCertificate *cert;
 
   /* remember the cert verification result */
-  if(SSL_IS_PROXY())
-    data->set.proxy_ssl.certverifyresult = err;
-  else
-    data->set.ssl.certverifyresult = err;
+  data->set.ssl.certverifyresult = err;
 
-  if(err == SSL_ERROR_BAD_CERT_DOMAIN && !SSL_CONN_CONFIG(verifyhost))
+  if(err == SSL_ERROR_BAD_CERT_DOMAIN && !data->set.ssl.verifyhost)
     /* we are asked not to verify the host name */
     return SECSuccess;
 
@@ -1375,55 +1348,36 @@ Curl_nss_check_cxn(struct connectdata *conn)
   return -1;  /* connection status unknown */
 }
 
-static void nss_close(struct ssl_connect_data *connssl)
-{
-  /* before the cleanup, check whether we are using a client certificate */
-  const bool client_cert = (connssl->client_nickname != NULL)
-    || (connssl->obj_clicert != 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;
-  connssl->obj_clicert = NULL;
-
-  if(connssl->handle) {
-    if(client_cert)
-      /* A server might require different authentication based on the
-       * particular path being requested by the client.  To support this
-       * scenario, we must ensure that a connection will never reuse the
-       * authentication data from a previous connection. */
-      SSL_InvalidateSession(connssl->handle);
-
-    PR_Close(connssl->handle);
-    connssl->handle = NULL;
-  }
-}
-
 /*
  * This function is called when an SSL connection is closed.
  */
 void Curl_nss_close(struct connectdata *conn, int sockindex)
 {
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-  struct ssl_connect_data *connssl_proxy = &conn->proxy_ssl[sockindex];
 
-  if(connssl->handle || connssl_proxy->handle) {
+  if(connssl->handle) {
     /* NSS closes the socket we previously handed to it, so we must mark it
        as closed to avoid double close */
     fake_sclose(conn->sock[sockindex]);
     conn->sock[sockindex] = CURL_SOCKET_BAD;
-  }
 
-  if(connssl->handle)
-    /* nss_close(connssl) will transitively close also connssl_proxy->handle
-       if both are used. Clear it to avoid a double close leading to crash. */
-    connssl_proxy->handle = NULL;
+    if((connssl->client_nickname != NULL) || (connssl->obj_clicert != NULL))
+      /* A server might require different authentication based on the
+       * particular path being requested by the client.  To support this
+       * scenario, we must ensure that a connection will never reuse the
+       * authentication data from a previous connection. */
+      SSL_InvalidateSession(connssl->handle);
 
-  nss_close(connssl);
-  nss_close(connssl_proxy);
+    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;
+    connssl->obj_clicert = NULL;
+
+    PR_Close(connssl->handle);
+    connssl->handle = NULL;
+  }
 }
 
 /* return true if NSS can provide error code (and possibly msg) for the
@@ -1464,8 +1418,8 @@ static CURLcode nss_load_ca_certificates(struct connectdata *conn,
                                          int sockindex)
 {
   struct Curl_easy *data = conn->data;
-  const char *cafile = SSL_CONN_CONFIG(CAfile);
-  const char *capath = SSL_CONN_CONFIG(CApath);
+  const char *cafile = data->set.ssl.CAfile;
+  const char *capath = data->set.ssl.CApath;
 
   if(cafile) {
     CURLcode result = nss_load_cert(&conn->ssl[sockindex], cafile, PR_TRUE);
@@ -1513,22 +1467,13 @@ static CURLcode nss_load_ca_certificates(struct connectdata *conn,
 }
 
 static CURLcode nss_init_sslver(SSLVersionRange *sslver,
-                                struct Curl_easy *data,
-                                struct connectdata *conn)
+                                struct Curl_easy *data)
 {
-  switch(SSL_CONN_CONFIG(version)) {
+  switch(data->set.ssl.version) {
+  default:
   case CURL_SSLVERSION_DEFAULT:
-    /* map CURL_SSLVERSION_DEFAULT to NSS default */
-    if(SSL_VersionRangeGetDefault(ssl_variant_stream, sslver) != SECSuccess)
-      return CURLE_SSL_CONNECT_ERROR;
-    /* ... but make sure we use at least TLSv1.0 according to libcurl API */
-    if(sslver->min < SSL_LIBRARY_VERSION_TLS_1_0)
-      sslver->min = SSL_LIBRARY_VERSION_TLS_1_0;
-    return CURLE_OK;
-
   case CURL_SSLVERSION_TLSv1:
     sslver->min = SSL_LIBRARY_VERSION_TLS_1_0;
-    /* TODO: set sslver->max to SSL_LIBRARY_VERSION_TLS_1_3 once stable */
 #ifdef SSL_LIBRARY_VERSION_TLS_1_2
     sslver->max = SSL_LIBRARY_VERSION_TLS_1_2;
 #elif defined SSL_LIBRARY_VERSION_TLS_1_1
@@ -1568,18 +1513,6 @@ static CURLcode nss_init_sslver(SSLVersionRange *sslver,
     return CURLE_OK;
 #endif
     break;
-
-  case CURL_SSLVERSION_TLSv1_3:
-#ifdef SSL_LIBRARY_VERSION_TLS_1_3
-    sslver->min = SSL_LIBRARY_VERSION_TLS_1_3;
-    sslver->max = SSL_LIBRARY_VERSION_TLS_1_3;
-    return CURLE_OK;
-#endif
-    break;
-
-  default:
-    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-    return CURLE_SSL_CONNECT_ERROR;
   }
 
   failf(data, "TLS minor version cannot be set");
@@ -1612,14 +1545,13 @@ static CURLcode nss_fail_connect(struct ssl_connect_data *connssl,
   return curlerr;
 }
 
-/* Switch the SSL socket into blocking or non-blocking mode. */
-static CURLcode nss_set_blocking(struct ssl_connect_data *connssl,
-                                 struct Curl_easy *data,
-                                 bool blocking)
+/* Switch the SSL socket into non-blocking mode. */
+static CURLcode nss_set_nonblock(struct ssl_connect_data *connssl,
+                                 struct Curl_easy *data)
 {
   static PRSocketOptionData sock_opt;
   sock_opt.option = PR_SockOpt_Nonblocking;
-  sock_opt.value.non_blocking = !blocking;
+  sock_opt.value.non_blocking = PR_TRUE;
 
   if(PR_SetSocketOption(connssl->handle, &sock_opt) != PR_SUCCESS)
     return nss_fail_connect(connssl, data, CURLE_SSL_CONNECT_ERROR);
@@ -1638,7 +1570,6 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
   curl_socket_t sockfd = conn->sock[sockindex];
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   CURLcode result;
-  bool second_layer = FALSE;
 
   SSLVersionRange sslver = {
     SSL_LIBRARY_VERSION_TLS_1_0,  /* min */
@@ -1697,18 +1628,18 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
     goto error;
 
   /* do not use SSL cache if disabled or we are not going to verify peer */
-  ssl_no_cache = (data->set.general_ssl.sessionid
-                  && SSL_CONN_CONFIG(verifypeer)) ? PR_FALSE : PR_TRUE;
+  ssl_no_cache = (conn->ssl_config.sessionid && data->set.ssl.verifypeer) ?
+    PR_FALSE : PR_TRUE;
   if(SSL_OptionSet(model, SSL_NO_CACHE, ssl_no_cache) != SECSuccess)
     goto error;
 
   /* enable/disable the requested SSL version(s) */
-  if(nss_init_sslver(&sslver, data, conn) != CURLE_OK)
+  if(nss_init_sslver(&sslver, data) != CURLE_OK)
     goto error;
   if(SSL_VersionRangeSet(model, &sslver) != SECSuccess)
     goto error;
 
-  ssl_cbc_random_iv = !SSL_SET_OPTION(enable_beast);
+  ssl_cbc_random_iv = !data->set.ssl_enable_beast;
 #ifdef SSL_CBC_RANDOM_IV
   /* unless the user explicitly asks to allow the protocol vulnerability, we
      use the work-around */
@@ -1720,14 +1651,14 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
     infof(data, "warning: support for SSL_CBC_RANDOM_IV not compiled in\n");
 #endif
 
-  if(SSL_CONN_CONFIG(cipher_list)) {
-    if(set_ciphers(data, model, SSL_CONN_CONFIG(cipher_list)) != SECSuccess) {
+  if(data->set.ssl.cipher_list) {
+    if(set_ciphers(data, model, data->set.ssl.cipher_list) != SECSuccess) {
       result = CURLE_SSL_CIPHER;
       goto error;
     }
   }
 
-  if(!SSL_CONN_CONFIG(verifypeer) && SSL_CONN_CONFIG(verifyhost))
+  if(!data->set.ssl.verifypeer && data->set.ssl.verifyhost)
     infof(data, "warning: ignoring value of ssl.verifyhost\n");
 
   /* bypass the default SSL_AuthCertificate() hook in case we do not want to
@@ -1735,19 +1666,14 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
   if(SSL_AuthCertificateHook(model, nss_auth_cert_hook, conn) != SECSuccess)
     goto error;
 
-  /* not checked yet */
-  if(SSL_IS_PROXY())
-    data->set.proxy_ssl.certverifyresult = 0;
-  else
-    data->set.ssl.certverifyresult = 0;
-
+  data->set.ssl.certverifyresult=0; /* not checked yet */
   if(SSL_BadCertHook(model, BadCertHandler, conn) != SECSuccess)
     goto error;
 
   if(SSL_HandshakeCallback(model, HandshakeCallback, conn) != SECSuccess)
     goto error;
 
-  if(SSL_CONN_CONFIG(verifypeer)) {
+  if(data->set.ssl.verifypeer) {
     const CURLcode rv = nss_load_ca_certificates(conn, sockindex);
     if(rv) {
       result = rv;
@@ -1755,24 +1681,24 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
     }
   }
 
-  if(SSL_SET_OPTION(CRLfile)) {
-    const CURLcode rv = nss_load_crl(SSL_SET_OPTION(CRLfile));
+  if(data->set.ssl.CRLfile) {
+    const CURLcode rv = nss_load_crl(data->set.ssl.CRLfile);
     if(rv) {
       result = rv;
       goto error;
     }
-    infof(data, "  CRLfile: %s\n", SSL_SET_OPTION(CRLfile));
+    infof(data, "  CRLfile: %s\n", data->set.ssl.CRLfile);
   }
 
-  if(SSL_SET_OPTION(cert)) {
-    char *nickname = dup_nickname(data, SSL_SET_OPTION(cert));
+  if(data->set.str[STRING_CERT]) {
+    char *nickname = dup_nickname(data, STRING_CERT);
     if(nickname) {
       /* we are not going to use libnsspem.so to read the client cert */
       connssl->obj_clicert = NULL;
     }
     else {
-      CURLcode rv = cert_stuff(conn, sockindex, SSL_SET_OPTION(cert),
-                               SSL_SET_OPTION(key));
+      CURLcode rv = cert_stuff(conn, sockindex, data->set.str[STRING_CERT],
+                               data->set.str[STRING_KEY]);
       if(rv) {
         /* failf() is already done in cert_stuff() */
         result = rv;
@@ -1792,24 +1718,15 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
     goto error;
   }
 
-  if(conn->proxy_ssl[sockindex].use) {
-    DEBUGASSERT(ssl_connection_complete == conn->proxy_ssl[sockindex].state);
-    DEBUGASSERT(conn->proxy_ssl[sockindex].handle != NULL);
-    nspr_io = conn->proxy_ssl[sockindex].handle;
-    second_layer = TRUE;
-  }
-  else {
-    /* wrap OS file descriptor by NSPR's file descriptor abstraction */
-    nspr_io = PR_ImportTCPSocket(sockfd);
-    if(!nspr_io)
-      goto error;
-  }
+  /* wrap OS file descriptor by NSPR's file descriptor abstraction */
+  nspr_io = PR_ImportTCPSocket(sockfd);
+  if(!nspr_io)
+    goto error;
 
   /* create our own NSPR I/O layer */
   nspr_io_stub = PR_CreateIOLayerStub(nspr_io_identity, &nspr_io_methods);
   if(!nspr_io_stub) {
-    if(!second_layer)
-      PR_Close(nspr_io);
+    PR_Close(nspr_io);
     goto error;
   }
 
@@ -1818,8 +1735,7 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
 
   /* push our new layer to the NSPR I/O stack */
   if(PR_PushIOLayer(nspr_io, PR_TOP_IO_LAYER, nspr_io_stub) != PR_SUCCESS) {
-    if(!second_layer)
-      PR_Close(nspr_io);
+    PR_Close(nspr_io);
     PR_Close(nspr_io_stub);
     goto error;
   }
@@ -1827,8 +1743,7 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
   /* import our model socket onto the current I/O stack */
   connssl->handle = SSL_ImportFD(model, nspr_io);
   if(!connssl->handle) {
-    if(!second_layer)
-      PR_Close(nspr_io);
+    PR_Close(nspr_io);
     goto error;
   }
 
@@ -1836,12 +1751,12 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
   model = NULL;
 
   /* This is the password associated with the cert that we're using */
-  if(SSL_SET_OPTION(key_passwd)) {
-    SSL_SetPKCS11PinArg(connssl->handle, SSL_SET_OPTION(key_passwd));
+  if(data->set.str[STRING_KEY_PASSWD]) {
+    SSL_SetPKCS11PinArg(connssl->handle, data->set.str[STRING_KEY_PASSWD]);
   }
 
 #ifdef SSL_ENABLE_OCSP_STAPLING
-  if(SSL_CONN_CONFIG(verifystatus)) {
+  if(data->set.ssl.verifystatus) {
     if(SSL_OptionSet(connssl->handle, SSL_ENABLE_OCSP_STAPLING, PR_TRUE)
         != SECSuccess)
       goto error;
@@ -1901,14 +1816,11 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
     goto error;
 
   /* propagate hostname to the TLS layer */
-  if(SSL_SetURL(connssl->handle, SSL_IS_PROXY() ? conn->http_proxy.host.name :
-                conn->host.name) != SECSuccess)
+  if(SSL_SetURL(connssl->handle, conn->host.name) != SECSuccess)
     goto error;
 
   /* prevent NSS from re-using the session for a different hostname */
-  if(SSL_SetSockPeerID(connssl->handle, SSL_IS_PROXY() ?
-                       conn->http_proxy.host.name : conn->host.name)
-     != SECSuccess)
+  if(SSL_SetSockPeerID(connssl->handle, conn->host.name) != SECSuccess)
     goto error;
 
   return CURLE_OK;
@@ -1926,12 +1838,6 @@ static CURLcode nss_do_connect(struct connectdata *conn, int sockindex)
   struct Curl_easy *data = conn->data;
   CURLcode result = CURLE_SSL_CONNECT_ERROR;
   PRUint32 timeout;
-  long * const certverifyresult = SSL_IS_PROXY() ?
-    &data->set.proxy_ssl.certverifyresult : &data->set.ssl.certverifyresult;
-  const char * const pinnedpubkey = SSL_IS_PROXY() ?
-              data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
-              data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
-
 
   /* check timeout situation */
   const long time_left = Curl_timeleft(data, NULL, TRUE);
@@ -1947,9 +1853,9 @@ static CURLcode nss_do_connect(struct connectdata *conn, int sockindex)
     if(PR_GetError() == PR_WOULD_BLOCK_ERROR)
       /* blocking direction is updated by nss_update_connecting_state() */
       return CURLE_AGAIN;
-    else if(*certverifyresult == SSL_ERROR_BAD_CERT_DOMAIN)
+    else if(conn->data->set.ssl.certverifyresult == SSL_ERROR_BAD_CERT_DOMAIN)
       result = CURLE_PEER_FAILED_VERIFICATION;
-    else if(*certverifyresult != 0)
+    else if(conn->data->set.ssl.certverifyresult!=0)
       result = CURLE_SSL_CACERT;
     goto error;
   }
@@ -1958,11 +1864,11 @@ static CURLcode nss_do_connect(struct connectdata *conn, int sockindex)
   if(result)
     goto error;
 
-  if(SSL_SET_OPTION(issuercert)) {
+  if(data->set.str[STRING_SSL_ISSUERCERT]) {
     SECStatus ret = SECFailure;
-    char *nickname = dup_nickname(data, SSL_SET_OPTION(issuercert));
+    char *nickname = dup_nickname(data, STRING_SSL_ISSUERCERT);
     if(nickname) {
-      /* we support only nicknames in case of issuercert for now */
+      /* we support only nicknames in case of STRING_SSL_ISSUERCERT for now */
       ret = check_issuer_cert(connssl->handle, nickname);
       free(nickname);
     }
@@ -1977,7 +1883,7 @@ static CURLcode nss_do_connect(struct connectdata *conn, int sockindex)
     }
   }
 
-  result = cmp_peer_pubkey(connssl, pinnedpubkey);
+  result = cmp_peer_pubkey(connssl, data->set.str[STRING_SSL_PINNEDPUBLICKEY]);
   if(result)
     /* status already printed */
     goto error;
@@ -1996,11 +1902,8 @@ static CURLcode nss_connect_common(struct connectdata *conn, int sockindex,
   const bool blocking = (done == NULL);
   CURLcode result;
 
-  if(connssl->state == ssl_connection_complete) {
-    if(!blocking)
-      *done = TRUE;
+  if(connssl->state == ssl_connection_complete)
     return CURLE_OK;
-  }
 
   if(connssl->connecting_state == ssl_connect_1) {
     result = nss_setup_connect(conn, sockindex);
@@ -2008,14 +1911,16 @@ static CURLcode nss_connect_common(struct connectdata *conn, int sockindex,
       /* we do not expect CURLE_AGAIN from nss_setup_connect() */
       return result;
 
+    if(!blocking) {
+      /* in non-blocking mode, set NSS non-blocking mode before handshake */
+      result = nss_set_nonblock(connssl, data);
+      if(result)
+        return result;
+    }
+
     connssl->connecting_state = ssl_connect_2;
   }
 
-  /* enable/disable blocking mode before handshake */
-  result = nss_set_blocking(connssl, data, blocking);
-  if(result)
-    return result;
-
   result = nss_do_connect(conn, sockindex);
   switch(result) {
   case CURLE_OK:
@@ -2031,7 +1936,7 @@ static CURLcode nss_connect_common(struct connectdata *conn, int sockindex,
 
   if(blocking) {
     /* in blocking mode, set NSS non-blocking mode _after_ SSL handshake */
-    result = nss_set_blocking(connssl, data, /* blocking */ FALSE);
+    result = nss_set_nonblock(connssl, data);
     if(result)
       return result;
   }
@@ -2137,17 +2042,17 @@ int Curl_nss_seed(struct Curl_easy *data)
 }
 
 /* data might be NULL */
-CURLcode Curl_nss_random(struct Curl_easy *data,
-                         unsigned char *entropy,
-                         size_t length)
+int Curl_nss_random(struct Curl_easy *data,
+                    unsigned char *entropy,
+                    size_t length)
 {
   Curl_nss_seed(data);  /* Initiate the seed if not already done */
 
   if(SECSuccess != PK11_GenerateRandom(entropy, curlx_uztosi(length)))
     /* signal a failure */
-    return CURLE_FAILED_INIT;
+    return -1;
 
-  return CURLE_OK;
+  return 0;
 }
 
 void Curl_nss_md5sum(unsigned char *tmp, /* input */
@@ -2185,8 +2090,7 @@ bool Curl_nss_cert_status_request(void)
 #endif
 }
 
-bool Curl_nss_false_start(void)
-{
+bool Curl_nss_false_start(void) {
 #if NSSVERNUM >= 0x030f04 /* 3.15.4 */
   return TRUE;
 #else
index 8c46929..ac67e6a 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -47,9 +47,9 @@ int Curl_nss_seed(struct Curl_easy *data);
 /* initialize NSS library if not already */
 CURLcode Curl_nss_force_init(struct Curl_easy *data);
 
-CURLcode Curl_nss_random(struct Curl_easy *data,
-                         unsigned char *entropy,
-                         size_t length);
+int Curl_nss_random(struct Curl_easy *data,
+                    unsigned char *entropy,
+                    size_t length);
 
 void Curl_nss_md5sum(unsigned char *tmp, /* input */
                      size_t tmplen,
@@ -65,9 +65,6 @@ bool Curl_nss_cert_status_request(void);
 
 bool Curl_nss_false_start(void);
 
-/* Support HTTPS-proxy */
-#define HTTPS_PROXY_SUPPORT 1
-
 /* Set the API backend definition to NSS */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_NSS
 
index eb625fe..0a3e6a3 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "openssl.h"
 #include "connect.h"
 #include "slist.h"
+#include "strequal.h"
 #include "select.h"
 #include "vtls.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "hostcheck.h"
 #include "curl_printf.h"
 
 #define HAVE_OPAQUE_RSA_DSA_DH 1 /* since 1.1.0 -pre5 */
 #define CONST_EXTS const
 #define CONST_ASN1_BIT_STRING const
-#define HAVE_ERR_REMOVE_THREAD_STATE_DEPRECATED 1
 #else
 /* For OpenSSL before 1.1.0 */
 #define ASN1_STRING_get0_data(x) ASN1_STRING_data(x)
 #define X509_get0_notAfter(x) X509_get_notAfter(x)
 #define CONST_EXTS /* nope */
 #define CONST_ASN1_BIT_STRING /* nope */
-#ifdef LIBRESSL_VERSION_NUMBER
-static unsigned long OpenSSL_version_num(void)
-{
-  return LIBRESSL_VERSION_NUMBER;
-}
-#else
 #define OpenSSL_version_num() SSLeay()
 #endif
-#endif
 
 #if (OPENSSL_VERSION_NUMBER >= 0x1000200fL) && /* 1.0.2 or later */ \
   !defined(LIBRESSL_VERSION_NUMBER)
@@ -176,34 +169,39 @@ static int passwd_callback(char *buf, int num, int encrypting,
 }
 
 /*
- * rand_enough() returns TRUE if we have seeded the random engine properly.
+ * rand_enough() is a function that returns TRUE if we have seeded the random
+ * engine properly. We use some preprocessor magic to provide a seed_enough()
+ * macro to use, just to prevent a compiler warning on this function if we
+ * pass in an argument that is never used.
  */
+
+#ifdef HAVE_RAND_STATUS
+#define seed_enough(x) rand_enough()
 static bool rand_enough(void)
 {
   return (0 != RAND_status()) ? TRUE : FALSE;
 }
+#else
+#define seed_enough(x) rand_enough(x)
+static bool rand_enough(int nread)
+{
+  /* this is a very silly decision to make */
+  return (nread > 500) ? TRUE : FALSE;
+}
+#endif
 
-static CURLcode Curl_ossl_seed(struct Curl_easy *data)
+static int ossl_seed(struct Curl_easy *data)
 {
-  /* we have the "SSL is seeded" boolean static to prevent multiple
-     time-consuming seedings in vain */
-  static bool ssl_seeded = FALSE;
   char *buf = data->state.buffer; /* point to the big buffer */
   int nread=0;
 
-  if(ssl_seeded)
-    return CURLE_OK;
-
-  if(rand_enough()) {
-    /* OpenSSL 1.1.0+ will return here */
-    ssl_seeded = TRUE;
-    return CURLE_OK;
-  }
+  /* Q: should we add support for a random file name as a libcurl option?
+     A: Yes, it is here */
 
 #ifndef RANDOM_FILE
   /* if RANDOM_FILE isn't defined, we only perform this if an option tells
      us to! */
-  if(data->set.str[STRING_SSL_RANDOM_FILE])
+  if(data->set.ssl.random_file)
 #define RANDOM_FILE "" /* doesn't matter won't be used */
 #endif
   {
@@ -212,7 +210,7 @@ static CURLcode Curl_ossl_seed(struct Curl_easy *data)
                              data->set.str[STRING_SSL_RANDOM_FILE]:
                              RANDOM_FILE),
                             RAND_LOAD_LENGTH);
-    if(rand_enough())
+    if(seed_enough(nread))
       return nread;
   }
 
@@ -232,7 +230,7 @@ static CURLcode Curl_ossl_seed(struct Curl_easy *data)
                        data->set.str[STRING_SSL_EGDSOCKET]:EGD_SOCKET);
     if(-1 != ret) {
       nread += ret;
-      if(rand_enough())
+      if(seed_enough(nread))
         return nread;
     }
   }
@@ -243,10 +241,9 @@ static CURLcode Curl_ossl_seed(struct Curl_easy *data)
   do {
     unsigned char randb[64];
     int len = sizeof(randb);
-    if(!RAND_bytes(randb, len))
-      break;
+    RAND_bytes(randb, len);
     RAND_add(randb, len, (len >> 1));
-  } while(!rand_enough());
+  } while(!RAND_status());
 
   /* generates a default path for the random seed file */
   buf[0]=0; /* blank it first */
@@ -254,12 +251,25 @@ static CURLcode Curl_ossl_seed(struct Curl_easy *data)
   if(buf[0]) {
     /* we got a file name to try */
     nread += RAND_load_file(buf, RAND_LOAD_LENGTH);
-    if(rand_enough())
+    if(seed_enough(nread))
       return nread;
   }
 
   infof(data, "libcurl is now using a weak random seed!\n");
-  return CURLE_SSL_CONNECT_ERROR; /* confusing error code */
+  return nread;
+}
+
+static void Curl_ossl_seed(struct Curl_easy *data)
+{
+  /* we have the "SSL is seeded" boolean static to prevent multiple
+     time-consuming seedings in vain */
+  static bool ssl_seeded = FALSE;
+
+  if(!ssl_seeded || data->set.str[STRING_SSL_RANDOM_FILE] ||
+     data->set.str[STRING_SSL_EGDSOCKET]) {
+    ossl_seed(data);
+    ssl_seeded = TRUE;
+  }
 }
 
 #ifndef SSL_FILETYPE_ENGINE
@@ -272,13 +282,13 @@ static int do_file_type(const char *type)
 {
   if(!type || !type[0])
     return SSL_FILETYPE_PEM;
-  if(strcasecompare(type, "PEM"))
+  if(Curl_raw_equal(type, "PEM"))
     return SSL_FILETYPE_PEM;
-  if(strcasecompare(type, "DER"))
+  if(Curl_raw_equal(type, "DER"))
     return SSL_FILETYPE_ASN1;
-  if(strcasecompare(type, "ENG"))
+  if(Curl_raw_equal(type, "ENG"))
     return SSL_FILETYPE_ENGINE;
-  if(strcasecompare(type, "P12"))
+  if(Curl_raw_equal(type, "P12"))
     return SSL_FILETYPE_PKCS12;
   return -1;
 }
@@ -295,7 +305,7 @@ static int ssl_ui_reader(UI *ui, UI_STRING *uis)
   switch(UI_get_string_type(uis)) {
   case UIT_PROMPT:
   case UIT_VERIFY:
-    password = (const char *)UI_get0_user_data(ui);
+    password = (const char*)UI_get0_user_data(ui);
     if(password && (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD)) {
       UI_set_result(ui, uis, password);
       return 1;
@@ -331,8 +341,7 @@ int cert_stuff(struct connectdata *conn,
                char *cert_file,
                const char *cert_type,
                char *key_file,
-               const char *key_type,
-               char *key_passwd)
+               const char *key_type)
 {
   struct Curl_easy *data = conn->data;
 
@@ -343,9 +352,10 @@ int cert_stuff(struct connectdata *conn,
     X509 *x509;
     int cert_done = 0;
 
-    if(key_passwd) {
+    if(data->set.str[STRING_KEY_PASSWD]) {
       /* set the password in the callback userdata */
-      SSL_CTX_set_default_passwd_cb_userdata(ctx, key_passwd);
+      SSL_CTX_set_default_passwd_cb_userdata(ctx,
+                                             data->set.str[STRING_KEY_PASSWD]);
       /* Set passwd callback: */
       SSL_CTX_set_default_passwd_cb(ctx, passwd_callback);
     }
@@ -456,7 +466,7 @@ int cert_stuff(struct connectdata *conn,
 
       PKCS12_PBE_add();
 
-      if(!PKCS12_parse(p12, key_passwd, &pri, &x509,
+      if(!PKCS12_parse(p12, data->set.str[STRING_KEY_PASSWD], &pri, &x509,
                        &ca)) {
         failf(data,
               "could not parse PKCS12 file, check password, " OSSL_PACKAGE
@@ -493,21 +503,23 @@ int cert_stuff(struct connectdata *conn,
           /*
            * Note that sk_X509_pop() is used below to make sure the cert is
            * removed from the stack properly before getting passed to
-           * SSL_CTX_add_extra_chain_cert(), which takes ownership. Previously
-           * we used sk_X509_value() instead, but then we'd clean it in the
-           * subsequent sk_X509_pop_free() call.
+           * SSL_CTX_add_extra_chain_cert(). Previously we used
+           * sk_X509_value() instead, but then we'd clean it in the subsequent
+           * sk_X509_pop_free() call.
            */
           X509 *x = sk_X509_pop(ca);
-          if(!SSL_CTX_add_client_CA(ctx, x)) {
-            X509_free(x);
-            failf(data, "cannot add certificate to client CA list");
-            goto fail;
-          }
           if(!SSL_CTX_add_extra_chain_cert(ctx, x)) {
             X509_free(x);
             failf(data, "cannot add certificate to certificate chain");
             goto fail;
           }
+          /* SSL_CTX_add_client_CA() seems to work with either sk_* function,
+           * presumably because it duplicates what we pass to it.
+           */
+          if(!SSL_CTX_add_client_CA(ctx, x)) {
+            failf(data, "cannot add certificate to client CA list");
+            goto fail;
+          }
         }
       }
 
@@ -552,7 +564,7 @@ int cert_stuff(struct connectdata *conn,
         EVP_PKEY *priv_key = NULL;
         if(data->state.engine) {
           UI_METHOD *ui_method =
-            UI_create_method((char *)"curl user interface");
+            UI_create_method((char *)"cURL user interface");
           if(!ui_method) {
             failf(data, "unable do create " OSSL_PACKAGE
                   " user-interface method");
@@ -566,7 +578,7 @@ int cert_stuff(struct connectdata *conn,
           priv_key = (EVP_PKEY *)
             ENGINE_load_private_key(data->state.engine, key_file,
                                     ui_method,
-                                    key_passwd);
+                                    data->set.str[STRING_KEY_PASSWD]);
           UI_destroy_method(ui_method);
           if(!priv_key) {
             failf(data, "failed to load private key from crypto engine");
@@ -736,6 +748,11 @@ void Curl_ossl_cleanup(void)
   ENGINE_cleanup();
 #endif
 
+#ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
+  /* Free OpenSSL ex_data table */
+  CRYPTO_cleanup_all_ex_data();
+#endif
+
   /* Free OpenSSL error strings */
   ERR_free_strings();
 
@@ -897,31 +914,27 @@ struct curl_slist *Curl_ossl_engines_list(struct Curl_easy *data)
 }
 
 
-static void ossl_close(struct ssl_connect_data *connssl)
+/*
+ * This function is called when an SSL connection is closed.
+ */
+void Curl_ossl_close(struct connectdata *conn, int sockindex)
 {
+  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+
   if(connssl->handle) {
     (void)SSL_shutdown(connssl->handle);
     SSL_set_connect_state(connssl->handle);
 
-    SSL_free(connssl->handle);
+    SSL_free (connssl->handle);
     connssl->handle = NULL;
   }
   if(connssl->ctx) {
-    SSL_CTX_free(connssl->ctx);
+    SSL_CTX_free (connssl->ctx);
     connssl->ctx = NULL;
   }
 }
 
 /*
- * This function is called when an SSL connection is closed.
- */
-void Curl_ossl_close(struct connectdata *conn, int sockindex)
-{
-  ossl_close(&conn->ssl[sockindex]);
-  ossl_close(&conn->proxy_ssl[sockindex]);
-}
-
-/*
  * This function is called to shut down the SSL layer but keep the
  * socket open (CCC - Clear Command Channel)
  */
@@ -949,8 +962,8 @@ int Curl_ossl_shutdown(struct connectdata *conn, int sockindex)
   if(connssl->handle) {
     buffsize = (int)sizeof(buf);
     while(!done) {
-      int what = SOCKET_READABLE(conn->sock[sockindex],
-                                 SSL_SHUTDOWN_TIMEOUT);
+      int what = Curl_socket_ready(conn->sock[sockindex],
+                                   CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
       if(what > 0) {
         ERR_clear_error();
 
@@ -1016,7 +1029,7 @@ int Curl_ossl_shutdown(struct connectdata *conn, int sockindex)
 #endif
     }
 
-    SSL_free(connssl->handle);
+    SSL_free (connssl->handle);
     connssl->handle = NULL;
   }
   return retval;
@@ -1043,14 +1056,6 @@ void Curl_ossl_close_all(struct Curl_easy *data)
 #else
   (void)data;
 #endif
-#if !defined(HAVE_ERR_REMOVE_THREAD_STATE_DEPRECATED) && \
-  defined(HAVE_ERR_REMOVE_THREAD_STATE)
-  /* OpenSSL 1.0.1 and 1.0.2 build an error queue that is stored per-thread
-     so we need to clean it here in case the thread will be killed. All OpenSSL
-     code should extract the error in association with the error so clearing
-     this queue here should be harmless at worst. */
-  ERR_remove_thread_state(NULL);
-#endif
 }
 
 /* ====================================================== */
@@ -1092,20 +1097,16 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
   CURLcode result = CURLE_OK;
   bool dNSName = FALSE; /* if a dNSName field exists in the cert */
   bool iPAddress = FALSE; /* if a iPAddress field exists in the cert */
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const char * const dispname = SSL_IS_PROXY() ?
-    conn->http_proxy.host.dispname : conn->host.dispname;
 
 #ifdef ENABLE_IPV6
   if(conn->bits.ipv6_ip &&
-     Curl_inet_pton(AF_INET6, hostname, &addr)) {
+     Curl_inet_pton(AF_INET6, conn->host.name, &addr)) {
     target = GEN_IPADD;
     addrlen = sizeof(struct in6_addr);
   }
   else
 #endif
-    if(Curl_inet_pton(AF_INET, hostname, &addr)) {
+    if(Curl_inet_pton(AF_INET, conn->host.name, &addr)) {
       target = GEN_IPADD;
       addrlen = sizeof(struct in_addr);
     }
@@ -1154,11 +1155,11 @@ 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, hostname)) {
+             Curl_cert_hostcheck(altptr, conn->host.name)) {
             dnsmatched = TRUE;
             infof(data,
                   " subjectAltName: host \"%s\" matched cert's \"%s\"\n",
-                  dispname, altptr);
+                  conn->host.dispname, altptr);
           }
           break;
 
@@ -1169,7 +1170,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
             ipmatched = TRUE;
             infof(data,
                   " subjectAltName: host \"%s\" matched cert's IP address!\n",
-                  dispname);
+                  conn->host.dispname);
           }
           break;
         }
@@ -1185,9 +1186,9 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
     /* an alternative name matched */
     ;
   else if(dNSName || iPAddress) {
-    infof(data, " subjectAltName does not match %s\n", dispname);
+    infof(data, " subjectAltName does not match %s\n", conn->host.dispname);
     failf(data, "SSL: no alternative certificate subject name matches "
-          "target host name '%s'", dispname);
+          "target host name '%s'", conn->host.dispname);
     result = CURLE_PEER_FAILED_VERIFICATION;
   }
   else {
@@ -1222,7 +1223,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
         if(ASN1_STRING_type(tmp) == V_ASN1_UTF8STRING) {
           j = ASN1_STRING_length(tmp);
           if(j >= 0) {
-            peer_CN = OPENSSL_malloc(j+1);
+            peer_CN = malloc(j+1);
             if(peer_CN) {
               memcpy(peer_CN, ASN1_STRING_get0_data(tmp), j);
               peer_CN[j] = '\0';
@@ -1248,7 +1249,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
       CURLcode rc = Curl_convert_from_utf8(data, peer_CN, strlen(peer_CN));
       /* Curl_convert_from_utf8 calls failf if unsuccessful */
       if(rc) {
-        OPENSSL_free(peer_CN);
+        free(peer_CN);
         return rc;
       }
     }
@@ -1261,16 +1262,16 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
             "SSL: unable to obtain common name from peer certificate");
       result = CURLE_PEER_FAILED_VERIFICATION;
     }
-    else if(!Curl_cert_hostcheck((const char *)peer_CN, hostname)) {
+    else if(!Curl_cert_hostcheck((const char *)peer_CN, conn->host.name)) {
       failf(data, "SSL: certificate subject name '%s' does not match "
-            "target host name '%s'", peer_CN, dispname);
+            "target host name '%s'", peer_CN, conn->host.dispname);
       result = CURLE_PEER_FAILED_VERIFICATION;
     }
     else {
       infof(data, " common name: %s (matched)\n", peer_CN);
     }
     if(peer_CN)
-      OPENSSL_free(peer_CN);
+      free(peer_CN);
   }
 
   return result;
@@ -1414,7 +1415,7 @@ static const char *ssl_msg_type(int ssl_ver, int msg)
 {
 #ifdef SSL2_VERSION_MAJOR
   if(ssl_ver == SSL2_VERSION_MAJOR) {
-    switch(msg) {
+    switch (msg) {
       case SSL2_MT_ERROR:
         return "Error";
       case SSL2_MT_CLIENT_HELLO:
@@ -1438,7 +1439,7 @@ static const char *ssl_msg_type(int ssl_ver, int msg)
   else
 #endif
   if(ssl_ver == SSL3_VERSION_MAJOR) {
-    switch(msg) {
+    switch (msg) {
       case SSL3_MT_HELLO_REQUEST:
         return "Hello request";
       case SSL3_MT_CLIENT_HELLO:
@@ -1538,11 +1539,6 @@ static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
     verstr = "TLSv1.2";
     break;
 #endif
-#ifdef TLS1_3_VERSION
-  case TLS1_3_VERSION:
-    verstr = "TLSv1.3";
-    break;
-#endif
   case 0:
     break;
   default:
@@ -1565,7 +1561,7 @@ static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
     else
       tls_rt_name = "";
 
-    msg_type = *(char *)buf;
+    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",
@@ -1671,10 +1667,6 @@ get_ssl_version_txt(SSL *ssl)
     return "";
 
   switch(SSL_version(ssl)) {
-#ifdef TLS1_3_VERSION
-  case TLS1_3_VERSION:
-    return "TLSv1.3";
-#endif
 #if OPENSSL_VERSION_NUMBER >= 0x1000100FL
   case TLS1_2_VERSION:
     return "TLSv1.2";
@@ -1709,39 +1701,23 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
   struct in_addr addr;
 #endif
 #endif
-  long * const certverifyresult = SSL_IS_PROXY() ?
-    &data->set.proxy_ssl.certverifyresult : &data->set.ssl.certverifyresult;
-  const long int ssl_version = SSL_CONN_CONFIG(version);
-#ifdef USE_TLS_SRP
-  const enum CURL_TLSAUTH ssl_authtype = SSL_SET_OPTION(authtype);
-#endif
-  char * const ssl_cert = SSL_SET_OPTION(cert);
-  const char * const ssl_cert_type = SSL_SET_OPTION(cert_type);
-  const char * const ssl_cafile = SSL_CONN_CONFIG(CAfile);
-  const char * const ssl_capath = SSL_CONN_CONFIG(CApath);
-  const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
-  const char * const ssl_crlfile = SSL_SET_OPTION(CRLfile);
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
 
   DEBUGASSERT(ssl_connect_1 == connssl->connecting_state);
 
   /* Make funny stuff to get random input */
-  result = Curl_ossl_seed(data);
-  if(result)
-    return result;
+  Curl_ossl_seed(data);
 
-  *certverifyresult = !X509_V_OK;
+  data->set.ssl.certverifyresult = !X509_V_OK;
 
   /* check to see if we've been told to use an explicit SSL/TLS version */
 
-  switch(ssl_version) {
+  switch(data->set.ssl.version) {
+  default:
   case CURL_SSLVERSION_DEFAULT:
   case CURL_SSLVERSION_TLSv1:
   case CURL_SSLVERSION_TLSv1_0:
   case CURL_SSLVERSION_TLSv1_1:
   case CURL_SSLVERSION_TLSv1_2:
-  case CURL_SSLVERSION_TLSv1_3:
     /* it will be handled later with the context options */
 #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
     !defined(LIBRESSL_VERSION_NUMBER)
@@ -1757,7 +1733,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     return CURLE_NOT_BUILT_IN;
 #else
 #ifdef USE_TLS_SRP
-    if(ssl_authtype == CURL_TLSAUTH_SRP)
+    if(data->set.ssl.authtype == CURL_TLSAUTH_SRP)
       return CURLE_SSL_CONNECT_ERROR;
 #endif
     req_method = SSLv2_client_method();
@@ -1770,16 +1746,13 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     return CURLE_NOT_BUILT_IN;
 #else
 #ifdef USE_TLS_SRP
-    if(ssl_authtype == CURL_TLSAUTH_SRP)
+    if(data->set.ssl.authtype == CURL_TLSAUTH_SRP)
       return CURLE_SSL_CONNECT_ERROR;
 #endif
     req_method = SSLv3_client_method();
     use_sni(FALSE);
     break;
 #endif
-  default:
-    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-    return CURLE_SSL_CONNECT_ERROR;
   }
 
   if(connssl->ctx)
@@ -1858,14 +1831,14 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
 #ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
   /* unless the user explicitly ask to allow the protocol vulnerability we
      use the work-around */
-  if(!SSL_SET_OPTION(enable_beast))
+  if(!conn->data->set.ssl_enable_beast)
     ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
 #endif
 
-  switch(ssl_version) {
+  switch(data->set.ssl.version) {
   case CURL_SSLVERSION_SSLv3:
 #ifdef USE_TLS_SRP
-    if(ssl_authtype == CURL_TLSAUTH_SRP) {
+    if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
       infof(data, "Set version TLSv1.x for SRP authorisation\n");
     }
 #endif
@@ -1874,9 +1847,6 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
 #if OPENSSL_VERSION_NUMBER >= 0x1000100FL
     ctx_options |= SSL_OP_NO_TLSv1_1;
     ctx_options |= SSL_OP_NO_TLSv1_2;
-#ifdef TLS1_3_VERSION
-    ctx_options |= SSL_OP_NO_TLSv1_3;
-#endif
 #endif
     break;
 
@@ -1892,75 +1862,38 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
 #if OPENSSL_VERSION_NUMBER >= 0x1000100FL
     ctx_options |= SSL_OP_NO_TLSv1_1;
     ctx_options |= SSL_OP_NO_TLSv1_2;
-#ifdef TLS1_3_VERSION
-    ctx_options |= SSL_OP_NO_TLSv1_3;
-#endif
 #endif
     break;
 
-  case CURL_SSLVERSION_TLSv1_1:
 #if OPENSSL_VERSION_NUMBER >= 0x1000100FL
+  case CURL_SSLVERSION_TLSv1_1:
     ctx_options |= SSL_OP_NO_SSLv2;
     ctx_options |= SSL_OP_NO_SSLv3;
     ctx_options |= SSL_OP_NO_TLSv1;
     ctx_options |= SSL_OP_NO_TLSv1_2;
-#ifdef TLS1_3_VERSION
-    ctx_options |= SSL_OP_NO_TLSv1_3;
-#endif
     break;
-#else
-    failf(data, OSSL_PACKAGE " was built without TLS 1.1 support");
-    return CURLE_NOT_BUILT_IN;
-#endif
 
   case CURL_SSLVERSION_TLSv1_2:
-#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
     ctx_options |= SSL_OP_NO_SSLv2;
     ctx_options |= SSL_OP_NO_SSLv3;
     ctx_options |= SSL_OP_NO_TLSv1;
     ctx_options |= SSL_OP_NO_TLSv1_1;
-#ifdef TLS1_3_VERSION
-    ctx_options |= SSL_OP_NO_TLSv1_3;
-#endif
     break;
-#else
-    failf(data, OSSL_PACKAGE " was built without TLS 1.2 support");
-    return CURLE_NOT_BUILT_IN;
 #endif
 
-  case CURL_SSLVERSION_TLSv1_3:
-#ifdef TLS1_3_VERSION
-    SSL_CTX_set_max_proto_version(connssl->ctx, TLS1_3_VERSION);
-    ctx_options |= SSL_OP_NO_SSLv2;
-    ctx_options |= SSL_OP_NO_SSLv3;
-    ctx_options |= SSL_OP_NO_TLSv1;
-    ctx_options |= SSL_OP_NO_TLSv1_1;
-    ctx_options |= SSL_OP_NO_TLSv1_2;
-    break;
-#else
-    failf(data, OSSL_PACKAGE " was built without TLS 1.3 support");
-    return CURLE_NOT_BUILT_IN;
-#endif
-
-  case CURL_SSLVERSION_SSLv2:
 #ifndef OPENSSL_NO_SSL2
+  case CURL_SSLVERSION_SSLv2:
     ctx_options |= SSL_OP_NO_SSLv3;
     ctx_options |= SSL_OP_NO_TLSv1;
 #if OPENSSL_VERSION_NUMBER >= 0x1000100FL
     ctx_options |= SSL_OP_NO_TLSv1_1;
     ctx_options |= SSL_OP_NO_TLSv1_2;
-#ifdef TLS1_3_VERSION
-    ctx_options |= SSL_OP_NO_TLSv1_3;
-#endif
 #endif
     break;
-#else
-    failf(data, OSSL_PACKAGE " was built without SSLv2 support");
-    return CURLE_NOT_BUILT_IN;
 #endif
 
   default:
-    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
+    failf(data, "Unsupported SSL protocol version");
     return CURLE_SSL_CONNECT_ERROR;
   }
 
@@ -1999,16 +1932,19 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
   }
 #endif
 
-  if(ssl_cert || ssl_cert_type) {
-    if(!cert_stuff(conn, connssl->ctx, ssl_cert, ssl_cert_type,
-                   SSL_SET_OPTION(key), SSL_SET_OPTION(key_type),
-                   SSL_SET_OPTION(key_passwd))) {
+  if(data->set.str[STRING_CERT] || data->set.str[STRING_CERT_TYPE]) {
+    if(!cert_stuff(conn,
+                   connssl->ctx,
+                   data->set.str[STRING_CERT],
+                   data->set.str[STRING_CERT_TYPE],
+                   data->set.str[STRING_KEY],
+                   data->set.str[STRING_KEY_TYPE])) {
       /* failf() is already done in cert_stuff() */
       return CURLE_SSL_CERTPROBLEM;
     }
   }
 
-  ciphers = SSL_CONN_CONFIG(cipher_list);
+  ciphers = data->set.str[STRING_SSL_CIPHER_LIST];
   if(!ciphers)
     ciphers = (char *)DEFAULT_CIPHER_SELECTION;
   if(!SSL_CTX_set_cipher_list(connssl->ctx, ciphers)) {
@@ -2018,20 +1954,18 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
   infof(data, "Cipher selection: %s\n", ciphers);
 
 #ifdef USE_TLS_SRP
-  if(ssl_authtype == CURL_TLSAUTH_SRP) {
-    char * const ssl_username = SSL_SET_OPTION(username);
-
-    infof(data, "Using TLS-SRP username: %s\n", ssl_username);
+  if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
+    infof(data, "Using TLS-SRP username: %s\n", data->set.ssl.username);
 
-    if(!SSL_CTX_set_srp_username(connssl->ctx, ssl_username)) {
+    if(!SSL_CTX_set_srp_username(connssl->ctx, data->set.ssl.username)) {
       failf(data, "Unable to set SRP user name");
       return CURLE_BAD_FUNCTION_ARGUMENT;
     }
-    if(!SSL_CTX_set_srp_password(connssl->ctx, SSL_SET_OPTION(password))) {
+    if(!SSL_CTX_set_srp_password(connssl->ctx, data->set.ssl.password)) {
       failf(data, "failed setting SRP password");
       return CURLE_BAD_FUNCTION_ARGUMENT;
     }
-    if(!SSL_CONN_CONFIG(cipher_list)) {
+    if(!data->set.str[STRING_SSL_CIPHER_LIST]) {
       infof(data, "Setting cipher list SRP\n");
 
       if(!SSL_CTX_set_cipher_list(connssl->ctx, "SRP")) {
@@ -2041,17 +1975,20 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     }
   }
 #endif
-
-  if(ssl_cafile || ssl_capath) {
+  if(data->set.str[STRING_SSL_CAFILE] || data->set.str[STRING_SSL_CAPATH]) {
     /* tell SSL where to find CA certificates that are used to verify
        the servers certificate. */
-    if(!SSL_CTX_load_verify_locations(connssl->ctx, ssl_cafile, ssl_capath)) {
-      if(verifypeer) {
+    if(!SSL_CTX_load_verify_locations(connssl->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"
               "  CAfile: %s\n  CApath: %s",
-              ssl_cafile ? ssl_cafile : "none",
-              ssl_capath ? ssl_capath : "none");
+              data->set.str[STRING_SSL_CAFILE]?
+              data->set.str[STRING_SSL_CAFILE]: "none",
+              data->set.str[STRING_SSL_CAPATH]?
+              data->set.str[STRING_SSL_CAPATH] : "none");
         return CURLE_SSL_CACERT_BADFILE;
       }
       else {
@@ -2068,25 +2005,29 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     infof(data,
           "  CAfile: %s\n"
           "  CApath: %s\n",
-          ssl_cafile ? ssl_cafile : "none",
-          ssl_capath ? ssl_capath : "none");
+          data->set.str[STRING_SSL_CAFILE] ? data->set.str[STRING_SSL_CAFILE]:
+          "none",
+          data->set.str[STRING_SSL_CAPATH] ? data->set.str[STRING_SSL_CAPATH]:
+          "none");
   }
 #ifdef CURL_CA_FALLBACK
-  else if(verifypeer) {
+  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(ssl_crlfile) {
+  if(data->set.str[STRING_SSL_CRLFILE]) {
     /* tell SSL where to find CRL file that is used to check certificate
      * revocation */
     lookup=X509_STORE_add_lookup(SSL_CTX_get_cert_store(connssl->ctx),
                                  X509_LOOKUP_file());
     if(!lookup ||
-       (!X509_load_crl_file(lookup, ssl_crlfile, X509_FILETYPE_PEM)) ) {
-      failf(data, "error loading CRL file: %s", ssl_crlfile);
+       (!X509_load_crl_file(lookup, data->set.str[STRING_SSL_CRLFILE],
+                            X509_FILETYPE_PEM)) ) {
+      failf(data, "error loading CRL file: %s",
+            data->set.str[STRING_SSL_CRLFILE]);
       return CURLE_SSL_CRL_BADFILE;
     }
     else {
@@ -2095,7 +2036,9 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
       X509_STORE_set_flags(SSL_CTX_get_cert_store(connssl->ctx),
                            X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL);
     }
-    infof(data, "  CRLfile: %s\n", ssl_crlfile);
+    infof(data,
+          "  CRLfile: %s\n", data->set.str[STRING_SSL_CRLFILE] ?
+          data->set.str[STRING_SSL_CRLFILE]: "none");
   }
 
   /* Try building a chain using issuers in the trusted store first to avoid
@@ -2106,7 +2049,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
   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(verifypeer) {
+  if(data->set.ssl.verifypeer) {
     X509_STORE_set_flags(SSL_CTX_get_cert_store(connssl->ctx),
                          X509_V_FLAG_TRUSTED_FIRST);
   }
@@ -2117,7 +2060,8 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
    * anyway. In the latter case the result of the verification is checked with
    * SSL_get_verify_result() below. */
   SSL_CTX_set_verify(connssl->ctx,
-                     verifypeer ? SSL_VERIFY_PEER : SSL_VERIFY_NONE, NULL);
+                     data->set.ssl.verifypeer?SSL_VERIFY_PEER:SSL_VERIFY_NONE,
+                     NULL);
 
   /* give application a chance to interfere with SSL set up. */
   if(data->set.ssl.fsslctx) {
@@ -2140,30 +2084,31 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
 
 #if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
     !defined(OPENSSL_NO_OCSP)
-  if(SSL_CONN_CONFIG(verifystatus))
+  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;
+
 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
-  if((0 == Curl_inet_pton(AF_INET, hostname, &addr)) &&
+  if((0 == Curl_inet_pton(AF_INET, conn->host.name, &addr)) &&
 #ifdef ENABLE_IPV6
-     (0 == Curl_inet_pton(AF_INET6, hostname, &addr)) &&
+     (0 == Curl_inet_pton(AF_INET6, conn->host.name, &addr)) &&
 #endif
      sni &&
-     !SSL_set_tlsext_host_name(connssl->handle, hostname))
+     !SSL_set_tlsext_host_name(connssl->handle, conn->host.name))
     infof(data, "WARNING: failed to configure server name indication (SNI) "
           "TLS extension\n");
 #endif
 
   /* Check if there's a cached ID we can/should use here! */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     void *ssl_sessionid = NULL;
 
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL, sockindex)) {
+    if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL)) {
       /* we got a session id, use it! */
       if(!SSL_set_session(connssl->handle, ssl_sessionid)) {
         Curl_ssl_sessionid_unlock(conn);
@@ -2172,21 +2117,13 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
         return CURLE_SSL_CONNECT_ERROR;
       }
       /* Informational message */
-      infof(data, "SSL re-using session ID\n");
+      infof (data, "SSL re-using session ID\n");
     }
     Curl_ssl_sessionid_unlock(conn);
   }
 
-  if(conn->proxy_ssl[sockindex].use) {
-    BIO *const bio = BIO_new(BIO_f_ssl());
-    DEBUGASSERT(ssl_connection_complete == conn->proxy_ssl[sockindex].state);
-    DEBUGASSERT(conn->proxy_ssl[sockindex].handle != NULL);
-    DEBUGASSERT(bio != NULL);
-    BIO_set_ssl(bio, conn->proxy_ssl[sockindex].handle, FALSE);
-    SSL_set_bio(connssl->handle, bio, bio);
-  }
-  else if(!SSL_set_fd(connssl->handle, (int)sockfd)) {
-    /* pass the raw socket into the SSL layers */
+  /* 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));
     return CURLE_SSL_CONNECT_ERROR;
@@ -2202,11 +2139,9 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
   struct Curl_easy *data = conn->data;
   int err;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-  long * const certverifyresult = SSL_IS_PROXY() ?
-    &data->set.proxy_ssl.certverifyresult : &data->set.ssl.certverifyresult;
   DEBUGASSERT(ssl_connect_2 == connssl->connecting_state
-              || ssl_connect_2_reading == connssl->connecting_state
-              || ssl_connect_2_writing == connssl->connecting_state);
+             || ssl_connect_2_reading == connssl->connecting_state
+             || ssl_connect_2_writing == connssl->connecting_state);
 
   ERR_clear_error();
 
@@ -2253,7 +2188,7 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
 
         lerr = SSL_get_verify_result(connssl->handle);
         if(lerr != X509_V_OK) {
-          *certverifyresult = lerr;
+          data->set.ssl.certverifyresult = lerr;
           snprintf(error_buffer, sizeof(error_buffer),
                    "SSL certificate problem: %s",
                    X509_verify_cert_error_string(lerr));
@@ -2275,11 +2210,8 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
        * the SO_ERROR is also lost.
        */
       if(CURLE_SSL_CONNECT_ERROR == result && errdetail == 0) {
-        const char * const hostname = SSL_IS_PROXY() ?
-          conn->http_proxy.host.name : conn->host.name;
-        const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
         failf(data, "Unknown SSL protocol error in connection to %s:%ld ",
-              hostname, port);
+              conn->host.name, conn->remote_port);
         return result;
       }
 
@@ -2303,7 +2235,7 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
      * negotiated
      */
     if(conn->bits.tls_enable_alpn) {
-      const unsigned char *neg_protocol;
+      const unsigned charneg_protocol;
       unsigned int len;
       SSL_get0_alpn_selected(connssl->handle, &neg_protocol, &len);
       if(len != 0) {
@@ -2334,8 +2266,7 @@ static int asn1_object_dump(ASN1_OBJECT *a, char *buf, size_t len)
 {
   int i, ilen;
 
-  ilen = (int)len;
-  if(ilen < 0)
+  if((ilen = (int)len) < 0)
     return 1; /* buffer too big */
 
   i = i2t_ASN1_OBJECT(buf, ilen, a);
@@ -2757,8 +2688,6 @@ static CURLcode servercert(struct connectdata *conn,
   FILE *fp;
   char *buffer = data->state.buffer;
   const char *ptr;
-  long * const certverifyresult = SSL_IS_PROXY() ?
-    &data->set.proxy_ssl.certverifyresult : &data->set.ssl.certverifyresult;
   BIO *mem = BIO_new(BIO_s_mem());
 
   if(data->set.ssl.certinfo)
@@ -2774,7 +2703,7 @@ static CURLcode servercert(struct connectdata *conn,
     return CURLE_PEER_FAILED_VERIFICATION;
   }
 
-  infof(data, "%s certificate:\n", SSL_IS_PROXY() ? "Proxy" : "Server");
+  infof(data, "Server certificate:\n");
 
   rc = x509_name_oneline(X509_get_subject_name(connssl->server_cert),
                          buffer, BUFSIZE);
@@ -2792,7 +2721,7 @@ static CURLcode servercert(struct connectdata *conn,
 
   BIO_free(mem);
 
-  if(SSL_CONN_CONFIG(verifyhost)) {
+  if(data->set.ssl.verifyhost) {
     result = verifyhost(conn, connssl->server_cert);
     if(result) {
       X509_free(connssl->server_cert);
@@ -2815,12 +2744,12 @@ static CURLcode servercert(struct connectdata *conn,
        deallocating the certificate. */
 
     /* e.g. match issuer name with provided issuer certificate */
-    if(SSL_SET_OPTION(issuercert)) {
-      fp = fopen(SSL_SET_OPTION(issuercert), FOPEN_READTEXT);
+    if(data->set.str[STRING_SSL_ISSUERCERT]) {
+      fp = fopen(data->set.str[STRING_SSL_ISSUERCERT], FOPEN_READTEXT);
       if(!fp) {
         if(strict)
           failf(data, "SSL: Unable to open issuer cert (%s)",
-                SSL_SET_OPTION(issuercert));
+                data->set.str[STRING_SSL_ISSUERCERT]);
         X509_free(connssl->server_cert);
         connssl->server_cert = NULL;
         return CURLE_SSL_ISSUER_ERROR;
@@ -2830,7 +2759,7 @@ static CURLcode servercert(struct connectdata *conn,
       if(!issuer) {
         if(strict)
           failf(data, "SSL: Unable to read issuer cert (%s)",
-                SSL_SET_OPTION(issuercert));
+                data->set.str[STRING_SSL_ISSUERCERT]);
         X509_free(connssl->server_cert);
         X509_free(issuer);
         fclose(fp);
@@ -2842,7 +2771,7 @@ static CURLcode servercert(struct connectdata *conn,
       if(X509_check_issued(issuer, connssl->server_cert) != X509_V_OK) {
         if(strict)
           failf(data, "SSL: Certificate issuer check failed (%s)",
-                SSL_SET_OPTION(issuercert));
+                data->set.str[STRING_SSL_ISSUERCERT]);
         X509_free(connssl->server_cert);
         X509_free(issuer);
         connssl->server_cert = NULL;
@@ -2850,14 +2779,15 @@ static CURLcode servercert(struct connectdata *conn,
       }
 
       infof(data, " SSL certificate issuer check ok (%s)\n",
-            SSL_SET_OPTION(issuercert));
+            data->set.str[STRING_SSL_ISSUERCERT]);
       X509_free(issuer);
     }
 
-    lerr = *certverifyresult = SSL_get_verify_result(connssl->handle);
+    lerr = data->set.ssl.certverifyresult =
+      SSL_get_verify_result(connssl->handle);
 
-    if(*certverifyresult != X509_V_OK) {
-      if(SSL_CONN_CONFIG(verifypeer)) {
+    if(data->set.ssl.certverifyresult != X509_V_OK) {
+      if(data->set.ssl.verifypeer) {
         /* We probably never reach this, because SSL_connect() will fail
            and we return earlier if verifypeer is set? */
         if(strict)
@@ -2876,7 +2806,7 @@ static CURLcode servercert(struct connectdata *conn,
 
 #if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
     !defined(OPENSSL_NO_OCSP)
-  if(SSL_CONN_CONFIG(verifystatus)) {
+  if(data->set.ssl.verifystatus) {
     result = verifystatus(conn, connssl);
     if(result) {
       X509_free(connssl->server_cert);
@@ -2890,8 +2820,7 @@ static CURLcode servercert(struct connectdata *conn,
     /* when not strict, we don't bother about the verify cert problems */
     result = CURLE_OK;
 
-  ptr = SSL_IS_PROXY() ? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
-                         data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
+  ptr = data->set.str[STRING_SSL_PINNEDPUBLICKEY];
   if(!result && ptr) {
     result = pkp_pin_peer_pubkey(data, connssl->server_cert, ptr);
     if(result)
@@ -2913,7 +2842,7 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
 
   DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
 
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     bool incache;
     SSL_SESSION *our_ssl_sessionid;
     void *old_ssl_sessionid = NULL;
@@ -2925,8 +2854,7 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
         regardless of its state. */
 
     Curl_ssl_sessionid_lock(conn);
-    incache = !(Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL,
-                                      sockindex));
+    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");
@@ -2937,7 +2865,7 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
 
     if(!incache) {
       result = Curl_ssl_addsessionid(conn, our_ssl_sessionid,
-                                      0 /* unknown size */, sockindex);
+                                      0 /* unknown size */);
       if(result) {
         Curl_ssl_sessionid_unlock(conn);
         failf(data, "failed to store ssl session");
@@ -2961,8 +2889,8 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
    * operations.
    */
 
-  result = servercert(conn, connssl, (SSL_CONN_CONFIG(verifypeer) ||
-                                      SSL_CONN_CONFIG(verifyhost)));
+  result = servercert(conn, connssl,
+                      (data->set.ssl.verifypeer || data->set.ssl.verifyhost));
 
   if(!result)
     connssl->connecting_state = ssl_connect_done;
@@ -2982,7 +2910,7 @@ static CURLcode ossl_connect_common(struct connectdata *conn,
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   curl_socket_t sockfd = conn->sock[sockindex];
-  time_t timeout_ms;
+  long timeout_ms;
   int what;
 
   /* check if the connection has already been established */
@@ -3028,8 +2956,7 @@ static CURLcode ossl_connect_common(struct connectdata *conn,
       curl_socket_t readfd = ssl_connect_2_reading==
         connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
 
-      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
-                               nonblocking?0:timeout_ms);
+      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);
@@ -3110,10 +3037,7 @@ bool Curl_ossl_data_pending(const struct connectdata *conn, int connindex)
 {
   if(conn->ssl[connindex].handle)
     /* SSL is in use */
-    return (0 != SSL_pending(conn->ssl[connindex].handle) ||
-           (conn->proxy_ssl[connindex].handle &&
-            0 != SSL_pending(conn->proxy_ssl[connindex].handle))) ?
-           TRUE : FALSE;
+    return (0 != SSL_pending(conn->ssl[connindex].handle)) ? TRUE : FALSE;
   else
     return FALSE;
 }
@@ -3158,18 +3082,8 @@ static ssize_t ossl_send(struct connectdata *conn,
       /*  A failure in the SSL library occurred, usually a protocol error.
           The OpenSSL error queue contains more information on the error. */
       sslerror = ERR_get_error();
-      if(ERR_GET_LIB(sslerror) == ERR_LIB_SSL &&
-         ERR_GET_REASON(sslerror) == SSL_R_BIO_NOT_SET &&
-         conn->ssl[sockindex].state == ssl_connection_complete &&
-         conn->proxy_ssl[sockindex].state == ssl_connection_complete) {
-        char ver[120];
-        Curl_ossl_version(ver, 120);
-        failf(conn->data, "Error: %s does not support double SSL tunneling.",
-              ver);
-      }
-      else
-        failf(conn->data, "SSL_write() error: %s",
-              ossl_strerror(sslerror, error_buffer, sizeof(error_buffer)));
+      failf(conn->data, "SSL_write() error: %s",
+            ossl_strerror(sslerror, error_buffer, sizeof(error_buffer)));
       *curlcode = CURLE_SEND_ERROR;
       return -1;
     }
@@ -3253,7 +3167,7 @@ size_t Curl_ossl_version(char *buffer, size_t size)
         sub[0] = 'z';
       }
       else {
-        sub[0] = (char) (minor_ver + 'a' - 1);
+        sub[0]=(char)(((ssleay_value>>4)&0xff) + 'a' -1);
       }
     }
     else
@@ -3270,21 +3184,14 @@ size_t Curl_ossl_version(char *buffer, size_t size)
 }
 
 /* can be called with data == NULL */
-CURLcode Curl_ossl_random(struct Curl_easy *data, unsigned char *entropy,
-                          size_t length)
+int Curl_ossl_random(struct Curl_easy *data, unsigned char *entropy,
+                     size_t length)
 {
-  int rc;
   if(data) {
-    if(Curl_ossl_seed(data)) /* Initiate the seed if not already done */
-      return CURLE_FAILED_INIT; /* couldn't seed for some reason */
-  }
-  else {
-    if(!rand_enough())
-      return CURLE_FAILED_INIT;
+    Curl_ossl_seed(data); /* Initiate the seed if not already done */
   }
-  /* RAND_bytes() returns 1 on success, 0 otherwise.  */
-  rc = RAND_bytes(entropy, curlx_uztosi(length));
-  return (rc == 1 ? CURLE_OK : CURLE_FAILED_INIT);
+  RAND_bytes(entropy, curlx_uztosi(length));
+  return 0; /* 0 as in no problem */
 }
 
 void Curl_ossl_md5sum(unsigned char *tmp, /* input */
index b9648d5..ee18e71 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -66,8 +66,8 @@ bool Curl_ossl_data_pending(const struct connectdata *conn,
                             int connindex);
 
 /* return 0 if a find random is filled in */
-CURLcode Curl_ossl_random(struct Curl_easy *data, unsigned char *entropy,
-                          size_t length);
+int Curl_ossl_random(struct Curl_easy *data, unsigned char *entropy,
+                     size_t length);
 void Curl_ossl_md5sum(unsigned char *tmp, /* input */
                       size_t tmplen,
                       unsigned char *md5sum /* output */,
@@ -79,9 +79,6 @@ void Curl_ossl_sha256sum(const unsigned char *tmp, /* input */
 
 bool Curl_ossl_cert_status_request(void);
 
-/* Support HTTPS-proxy */
-#define HTTPS_PROXY_SUPPORT 1
-
 /* Set the API backend definition to OpenSSL */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_OPENSSL
 
index e5346ce..d33f548 100644 (file)
@@ -54,7 +54,7 @@
 #include "parsedate.h"
 #include "connect.h" /* for the connect timeout */
 #include "select.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "polarssl_threadlock.h"
 #include "curl_printf.h"
 #include "curl_memory.h"
 #define THREADING_SUPPORT
 #endif
 
-#ifndef POLARSSL_ERROR_C
-#define error_strerror(x,y,z)
-#endif /* POLARSSL_ERROR_C */
-
-
 #if defined(THREADING_SUPPORT)
 static entropy_context entropy;
 
@@ -101,13 +96,13 @@ static void entropy_init_mutex(entropy_context *ctx)
 /* 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 = entropy_func(data, output, len);
-  Curl_polarsslthreadlock_unlock_function(1);
+    int ret;
+    /* lock 1 = entropy_func_mutex() */
+    Curl_polarsslthreadlock_lock_function(1);
+    ret = entropy_func(data, output, len);
+    Curl_polarsslthreadlock_unlock_function(1);
 
-  return ret;
+    return ret;
 }
 /* end of entropy_func_mutex() */
 
@@ -143,70 +138,84 @@ static Curl_send polarssl_send;
 
 static CURLcode
 polarssl_connect_step1(struct connectdata *conn,
-                       int sockindex)
+                     int sockindex)
 {
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data* connssl = &conn->ssl[sockindex];
-  const char *capath = SSL_CONN_CONFIG(CApath);
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
-  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
+
+  bool sni = TRUE; /* default is SNI enabled */
   int ret = -1;
+#ifdef ENABLE_IPV6
+  struct in6_addr addr;
+#else
+  struct in_addr addr;
+#endif
   char errorbuf[128];
   errorbuf[0]=0;
 
   /* PolarSSL only supports SSLv3 and TLSv1 */
-  if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2) {
+  if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
     failf(data, "PolarSSL does not support SSLv2");
     return CURLE_SSL_CONNECT_ERROR;
   }
+  else if(data->set.ssl.version == CURL_SSLVERSION_SSLv3)
+    sni = FALSE; /* SSLv3 has no SNI */
 
 #ifdef THREADING_SUPPORT
   entropy_init_mutex(&entropy);
 
   if((ret = ctr_drbg_init(&connssl->ctr_drbg, entropy_func_mutex, &entropy,
                           NULL, 0)) != 0) {
-    error_strerror(ret, errorbuf, sizeof(errorbuf));
-    failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
-          -ret, errorbuf);
+#ifdef POLARSSL_ERROR_C
+     error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
+     failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
+                                                            -ret, errorbuf);
   }
 #else
   entropy_init(&connssl->entropy);
 
   if((ret = ctr_drbg_init(&connssl->ctr_drbg, entropy_func, &connssl->entropy,
                           NULL, 0)) != 0) {
-    error_strerror(ret, errorbuf, sizeof(errorbuf));
-    failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
-          -ret, errorbuf);
+#ifdef POLARSSL_ERROR_C
+     error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
+     failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
+                                                            -ret, errorbuf);
   }
 #endif /* THREADING_SUPPORT */
 
   /* Load the trusted CA */
   memset(&connssl->cacert, 0, sizeof(x509_crt));
 
-  if(SSL_CONN_CONFIG(CAfile)) {
+  if(data->set.str[STRING_SSL_CAFILE]) {
     ret = x509_crt_parse_file(&connssl->cacert,
-                              SSL_CONN_CONFIG(CAfile));
+                              data->set.str[STRING_SSL_CAFILE]);
 
     if(ret<0) {
+#ifdef POLARSSL_ERROR_C
       error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
       failf(data, "Error reading ca cert file %s - PolarSSL: (-0x%04X) %s",
-            SSL_CONN_CONFIG(CAfile), -ret, errorbuf);
+            data->set.str[STRING_SSL_CAFILE], -ret, errorbuf);
 
-      if(SSL_CONN_CONFIG(verifypeer))
+      if(data->set.ssl.verifypeer)
         return CURLE_SSL_CACERT_BADFILE;
     }
   }
 
-  if(capath) {
-    ret = x509_crt_parse_path(&connssl->cacert, capath);
+  if(data->set.str[STRING_SSL_CAPATH]) {
+    ret = x509_crt_parse_path(&connssl->cacert,
+                              data->set.str[STRING_SSL_CAPATH]);
 
     if(ret<0) {
+#ifdef POLARSSL_ERROR_C
       error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
       failf(data, "Error reading ca cert path %s - PolarSSL: (-0x%04X) %s",
-            capath, -ret, errorbuf);
+            data->set.str[STRING_SSL_CAPATH], -ret, errorbuf);
 
-      if(SSL_CONN_CONFIG(verifypeer))
+      if(data->set.ssl.verifypeer)
         return CURLE_SSL_CACERT_BADFILE;
     }
   }
@@ -214,25 +223,27 @@ polarssl_connect_step1(struct connectdata *conn,
   /* Load the client certificate */
   memset(&connssl->clicert, 0, sizeof(x509_crt));
 
-  if(SSL_SET_OPTION(cert)) {
+  if(data->set.str[STRING_CERT]) {
     ret = x509_crt_parse_file(&connssl->clicert,
-                              SSL_SET_OPTION(cert));
+                              data->set.str[STRING_CERT]);
 
     if(ret) {
+#ifdef POLARSSL_ERROR_C
       error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
       failf(data, "Error reading client cert file %s - PolarSSL: (-0x%04X) %s",
-            SSL_SET_OPTION(cert), -ret, errorbuf);
+            data->set.str[STRING_CERT], -ret, errorbuf);
 
       return CURLE_SSL_CERTPROBLEM;
     }
   }
 
   /* Load the client private key */
-  if(SSL_SET_OPTION(key)) {
+  if(data->set.str[STRING_KEY]) {
     pk_context pk;
     pk_init(&pk);
-    ret = pk_parse_keyfile(&pk, SSL_SET_OPTION(key),
-                           SSL_SET_OPTION(key_passwd));
+    ret = pk_parse_keyfile(&pk, data->set.str[STRING_KEY],
+                           data->set.str[STRING_KEY_PASSWD]);
     if(ret == 0 && !pk_can_do(&pk, POLARSSL_PK_RSA))
       ret = POLARSSL_ERR_PK_TYPE_MISMATCH;
     if(ret == 0)
@@ -242,9 +253,11 @@ polarssl_connect_step1(struct connectdata *conn,
     pk_free(&pk);
 
     if(ret) {
+#ifdef POLARSSL_ERROR_C
       error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
       failf(data, "Error reading private key %s - PolarSSL: (-0x%04X) %s",
-            SSL_SET_OPTION(key), -ret, errorbuf);
+            data->set.str[STRING_KEY], -ret, errorbuf);
 
       return CURLE_SSL_CERTPROBLEM;
     }
@@ -253,27 +266,31 @@ polarssl_connect_step1(struct connectdata *conn,
   /* Load the CRL */
   memset(&connssl->crl, 0, sizeof(x509_crl));
 
-  if(SSL_SET_OPTION(CRLfile)) {
+  if(data->set.str[STRING_SSL_CRLFILE]) {
     ret = x509_crl_parse_file(&connssl->crl,
-                              SSL_SET_OPTION(CRLfile));
+                              data->set.str[STRING_SSL_CRLFILE]);
 
     if(ret) {
+#ifdef POLARSSL_ERROR_C
       error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
       failf(data, "Error reading CRL file %s - PolarSSL: (-0x%04X) %s",
-            SSL_SET_OPTION(CRLfile), -ret, errorbuf);
+            data->set.str[STRING_SSL_CRLFILE], -ret, errorbuf);
 
       return CURLE_SSL_CRL_BADFILE;
     }
   }
 
-  infof(data, "PolarSSL: Connecting to %s:%d\n", hostname, port);
+  infof(data, "PolarSSL: Connecting to %s:%d\n",
+        conn->host.name, conn->remote_port);
 
   if(ssl_init(&connssl->ssl)) {
     failf(data, "PolarSSL: ssl_init failed");
     return CURLE_SSL_CONNECT_ERROR;
   }
 
-  switch(SSL_CONN_CONFIG(version)) {
+  switch(data->set.ssl.version) {
+  default:
   case CURL_SSLVERSION_DEFAULT:
   case CURL_SSLVERSION_TLSv1:
     ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
@@ -307,12 +324,6 @@ polarssl_connect_step1(struct connectdata *conn,
                         SSL_MINOR_VERSION_3);
     infof(data, "PolarSSL: Forced min. SSL Version to be TLS 1.2\n");
     break;
-  case CURL_SSLVERSION_TLSv1_3:
-    failf(data, "PolarSSL: TLS 1.3 is not yet supported");
-    return CURLE_SSL_CONNECT_ERROR;
-  default:
-    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-    return CURLE_SSL_CONNECT_ERROR;
   }
 
   ssl_set_endpoint(&connssl->ssl, SSL_IS_CLIENT);
@@ -327,31 +338,30 @@ polarssl_connect_step1(struct connectdata *conn,
   ssl_set_ciphersuites(&connssl->ssl, ssl_list_ciphersuites());
 
   /* Check if there's a cached ID we can/should use here! */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     void *old_session = NULL;
 
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, &old_session, NULL, sockindex)) {
+    if(!Curl_ssl_getsessionid(conn, &old_session, NULL)) {
       ret = ssl_set_session(&connssl->ssl, old_session);
+      Curl_ssl_sessionid_unlock(conn);
       if(ret) {
-        Curl_ssl_sessionid_unlock(conn);
         failf(data, "ssl_set_session returned -0x%x", -ret);
         return CURLE_SSL_CONNECT_ERROR;
       }
       infof(data, "PolarSSL re-using session\n");
     }
-    Curl_ssl_sessionid_unlock(conn);
   }
 
   ssl_set_ca_chain(&connssl->ssl,
                    &connssl->cacert,
                    &connssl->crl,
-                   hostname);
+                   conn->host.name);
 
   ssl_set_own_cert_rsa(&connssl->ssl,
                        &connssl->clicert, &connssl->rsa);
 
-  if(ssl_set_hostname(&connssl->ssl, hostname)) {
+  if(ssl_set_hostname(&connssl->ssl, conn->host.name)) {
     /* ssl_set_hostname() sets the name to use in CN/SAN checks *and* the name
        to set in the SNI extension. So even if curl connects to a host
        specified as an IP address, this function must be used. */
@@ -361,7 +371,7 @@ polarssl_connect_step1(struct connectdata *conn,
 
 #ifdef HAS_ALPN
   if(conn->bits.tls_enable_alpn) {
-    static const char *protocols[3];
+    static const charprotocols[3];
     int cur = 0;
 
 #ifdef USE_NGHTTP2
@@ -391,16 +401,12 @@ polarssl_connect_step1(struct connectdata *conn,
 
 static CURLcode
 polarssl_connect_step2(struct connectdata *conn,
-                       int sockindex)
+                     int sockindex)
 {
   int ret;
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data* connssl = &conn->ssl[sockindex];
   char buffer[1024];
-  const char * const pinnedpubkey = SSL_IS_PROXY() ?
-            data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
-            data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
-
 
   char errorbuf[128];
   errorbuf[0] = 0;
@@ -423,7 +429,9 @@ polarssl_connect_step2(struct connectdata *conn,
     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;
@@ -434,7 +442,7 @@ polarssl_connect_step2(struct connectdata *conn,
 
   ret = ssl_get_verify_result(&conn->ssl[sockindex].ssl);
 
-  if(ret && SSL_CONN_CONFIG(verifypeer)) {
+  if(ret && data->set.ssl.verifypeer) {
     if(ret & BADCERT_EXPIRED)
       failf(data, "Cert verify failed: BADCERT_EXPIRED");
 
@@ -462,7 +470,7 @@ polarssl_connect_step2(struct connectdata *conn,
   }
 
   /* adapted from mbedtls.c */
-  if(pinnedpubkey) {
+  if(data->set.str[STRING_SSL_PINNEDPUBLICKEY]) {
     int size;
     CURLcode result;
     x509_crt *p;
@@ -504,7 +512,7 @@ polarssl_connect_step2(struct connectdata *conn,
 
     /* pk_write_pubkey_der writes data at the end of the buffer. */
     result = Curl_pin_peer_pubkey(data,
-                                  pinnedpubkey,
+                                  data->set.str[STRING_SSL_PINNEDPUBLICKEY],
                                   &pubkey[PUB_DER_MAX_BYTES - size], size);
     if(result) {
       x509_crt_free(p);
@@ -530,9 +538,9 @@ polarssl_connect_step2(struct connectdata *conn,
       }
       else
 #endif
-        if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
-          conn->negnpn = CURL_HTTP_VERSION_1_1;
-        }
+      if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
+        conn->negnpn = CURL_HTTP_VERSION_1_1;
+      }
     }
     else
       infof(data, "ALPN, server did not agree to a protocol\n");
@@ -547,7 +555,7 @@ polarssl_connect_step2(struct connectdata *conn,
 
 static CURLcode
 polarssl_connect_step3(struct connectdata *conn,
-                       int sockindex)
+                     int sockindex)
 {
   CURLcode retcode = CURLE_OK;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
@@ -555,7 +563,7 @@ polarssl_connect_step3(struct connectdata *conn,
 
   DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
 
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     int ret;
     ssl_session *our_ssl_sessionid;
     void *old_ssl_sessionid = NULL;
@@ -574,10 +582,10 @@ polarssl_connect_step3(struct connectdata *conn,
 
     /* If there's already a matching session in the cache, delete it */
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL, sockindex))
+    if(!Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL))
       Curl_ssl_delsessionid(conn, old_ssl_sessionid);
 
-    retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid, 0, sockindex);
+    retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid, 0);
     Curl_ssl_sessionid_unlock(conn);
     if(retcode) {
       free(our_ssl_sessionid);
@@ -719,8 +727,7 @@ polarssl_connect_common(struct connectdata *conn,
       curl_socket_t readfd = ssl_connect_2_reading==
         connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
 
-      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
-                               nonblocking?0:timeout_ms);
+      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);
@@ -779,8 +786,8 @@ polarssl_connect_common(struct connectdata *conn,
 
 CURLcode
 Curl_polarssl_connect_nonblocking(struct connectdata *conn,
-                                  int sockindex,
-                                  bool *done)
+                                int sockindex,
+                                bool *done)
 {
   return polarssl_connect_common(conn, sockindex, TRUE, done);
 }
@@ -788,7 +795,7 @@ Curl_polarssl_connect_nonblocking(struct connectdata *conn,
 
 CURLcode
 Curl_polarssl_connect(struct connectdata *conn,
-                      int sockindex)
+                    int sockindex)
 {
   CURLcode result;
   bool done = FALSE;
@@ -816,10 +823,4 @@ void Curl_polarssl_cleanup(void)
   (void)Curl_polarsslthreadlock_thread_cleanup();
 }
 
-
-int Curl_polarssl_data_pending(const struct connectdata *conn, int sockindex)
-{
-  return ssl_get_bytes_avail(&conn->ssl[sockindex].ssl) != 0;
-}
-
 #endif /* USE_POLARSSL */
index 47af7b4..7098b24 100644 (file)
@@ -31,7 +31,6 @@
 /* Called on first use PolarSSL, setup threading if supported */
 int  Curl_polarssl_init(void);
 void Curl_polarssl_cleanup(void);
-int Curl_polarssl_data_pending(const struct connectdata *conn, int sockindex);
 
 
 CURLcode Curl_polarssl_connect(struct connectdata *conn, int sockindex);
@@ -70,7 +69,7 @@ int Curl_polarssl_shutdown(struct connectdata *conn, int sockindex);
 #define curlssl_engines_list(x) ((void)x, (struct curl_slist *)NULL)
 #define curlssl_version Curl_polarssl_version
 #define curlssl_check_cxn(x) ((void)x, -1)
-#define curlssl_data_pending(x,y) Curl_polarssl_data_pending(x, y)
+#define curlssl_data_pending(x,y) ((void)x, (void)y, 0)
 #define curlssl_sha256sum(a,b,c,d) sha256(a,b,c,0)
 
 /* This might cause libcurl to use a weeker random!
index b1eb7b7..3b0ebf8 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2013-2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2013-2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2010, 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
  *
  * This software is licensed as described in the file COPYING, which
@@ -52,7 +52,7 @@ int Curl_polarsslthreadlock_thread_setup(void)
   int i;
   int ret;
 
-  mutex_buf = calloc(NUMT * sizeof(POLARSSL_MUTEX_T), 1);
+  mutex_buf = malloc(NUMT * sizeof(POLARSSL_MUTEX_T));
   if(!mutex_buf)
     return 0;     /* error, no number of threads defined */
 
index bd92399..511bd11 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (C) 2012 - 2016, Marc Hoersken, <info@marc-hoersken.de>
  * Copyright (C) 2012, Mark Salisbury, <mark.salisbury@hp.com>
- * Copyright (C) 2012 - 2017, 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
@@ -59,7 +59,6 @@
 #include "x509asn1.h"
 #include "curl_printf.h"
 #include "system_win32.h"
-#include "hostcheck.h"
 
  /* The last #include file should be: */
 #include "curl_memory.h"
@@ -124,19 +123,9 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
 #endif
   TCHAR *host_name;
   CURLcode result;
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
 
   infof(data, "schannel: SSL/TLS connection with %s port %hu (step 1/3)\n",
-        hostname, conn->remote_port);
-
-  if(Curl_verify_windows_version(5, 1, PLATFORM_WINNT,
-                                 VERSION_LESS_THAN_EQUAL)) {
-     /* SChannel in Windows XP (OS version 5.1) uses legacy handshakes and
-        algorithms that may not be supported by all servers. */
-     infof(data, "schannel: WinSSL version is old and may not be able to "
-           "connect to some servers due to lack of SNI, algorithms, etc.\n");
-  }
+        conn->host.name, conn->remote_port);
 
 #ifdef HAS_ALPN
   /* ALPN is only supported on Windows 8.1 / Server 2012 R2 and above.
@@ -153,9 +142,9 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
   connssl->cred = NULL;
 
   /* check for an existing re-usable credential handle */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     Curl_ssl_sessionid_lock(conn);
-    if(!Curl_ssl_getsessionid(conn, (void **)&old_cred, NULL, sockindex)) {
+    if(!Curl_ssl_getsessionid(conn, (void **)&old_cred, NULL)) {
       connssl->cred = old_cred;
       infof(data, "schannel: re-using existing credential handle\n");
 
@@ -172,7 +161,7 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
     memset(&schannel_cred, 0, sizeof(schannel_cred));
     schannel_cred.dwVersion = SCHANNEL_CRED_VERSION;
 
-    if(conn->ssl_config.verifypeer) {
+    if(data->set.ssl.verifypeer) {
 #ifdef _WIN32_WCE
       /* certificate validation on CE doesn't seem to work right; we'll
          do it following a more manual process. */
@@ -181,14 +170,13 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
         SCH_CRED_IGNORE_REVOCATION_OFFLINE;
 #else
       schannel_cred.dwFlags = SCH_CRED_AUTO_CRED_VALIDATION;
-      /* TODO s/data->set.ssl.no_revoke/SSL_SET_OPTION(no_revoke)/g */
-      if(data->set.ssl.no_revoke)
+      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
-      if(data->set.ssl.no_revoke)
+      if(data->set.ssl_no_revoke)
         infof(data, "schannel: disabled server certificate revocation "
                     "checks\n");
       else
@@ -201,14 +189,15 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
       infof(data, "schannel: disabled server certificate revocation checks\n");
     }
 
-    if(!conn->ssl_config.verifyhost) {
+    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.\n");
+            "names in server certificates. Also disables SNI.\n");
     }
 
-    switch(conn->ssl_config.version) {
+    switch(data->set.ssl.version) {
+    default:
     case CURL_SSLVERSION_DEFAULT:
     case CURL_SSLVERSION_TLSv1:
       schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT |
@@ -224,18 +213,12 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
     case CURL_SSLVERSION_TLSv1_2:
       schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT;
       break;
-    case CURL_SSLVERSION_TLSv1_3:
-      failf(data, "Schannel: TLS 1.3 is not yet supported");
-      return CURLE_SSL_CONNECT_ERROR;
     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:
-      failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
-      return CURLE_SSL_CONNECT_ERROR;
     }
 
     /* allocate memory for the re-usable credential handle */
@@ -270,9 +253,9 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
   }
 
   /* Warn if SNI is disabled due to use of an IP address */
-  if(Curl_inet_pton(AF_INET, hostname, &addr)
+  if(Curl_inet_pton(AF_INET, conn->host.name, &addr)
 #ifdef ENABLE_IPV6
-     || Curl_inet_pton(AF_INET6, hostname, &addr6)
+     || Curl_inet_pton(AF_INET6, conn->host.name, &addr6)
 #endif
     ) {
     infof(data, "schannel: using IP address, SNI is not supported by OS.\n");
@@ -282,17 +265,17 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
   if(connssl->use_alpn) {
     int cur = 0;
     int list_start_index = 0;
-    unsigned int *extension_len = NULL;
+    unsigned intextension_len = NULL;
     unsigned short* list_len = NULL;
 
     /* The first four bytes will be an unsigned int indicating number
        of bytes of data in the rest of the the buffer. */
-    extension_len = (unsigned int *)(&alpn_buffer[cur]);
+    extension_len = (unsigned int*)(&alpn_buffer[cur]);
     cur += sizeof(unsigned int);
 
     /* The next four bytes are an indicator that this buffer will contain
        ALPN data, as opposed to NPN, for example. */
-    *(unsigned int *)&alpn_buffer[cur] =
+    *(unsigned int*)&alpn_buffer[cur] =
       SecApplicationProtocolNegotiationExt_ALPN;
     cur += sizeof(unsigned int);
 
@@ -350,7 +333,7 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
   }
   memset(connssl->ctxt, 0, sizeof(struct curl_schannel_ctxt));
 
-  host_name = Curl_convert_UTF8_to_tchar(hostname);
+  host_name = Curl_convert_UTF8_to_tchar(conn->host.name);
   if(!host_name)
     return CURLE_OUT_OF_MEMORY;
 
@@ -423,13 +406,11 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
   TCHAR *host_name;
   CURLcode result;
   bool doread;
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
 
   doread = (connssl->connecting_state != ssl_connect_2_writing) ? TRUE : FALSE;
 
   infof(data, "schannel: SSL/TLS connection with %s port %hu (step 2/3)\n",
-        hostname, conn->remote_port);
+        conn->host.name, conn->remote_port);
 
   if(!connssl->cred || !connssl->ctxt)
     return CURLE_SSL_CONNECT_ERROR;
@@ -525,7 +506,7 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
     memcpy(inbuf[0].pvBuffer, connssl->encdata_buffer,
            connssl->encdata_offset);
 
-    host_name = Curl_convert_UTF8_to_tchar(hostname);
+    host_name = Curl_convert_UTF8_to_tchar(conn->host.name);
     if(!host_name)
       return CURLE_OUT_OF_MEMORY;
 
@@ -642,7 +623,7 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
 #ifdef _WIN32_WCE
   /* Windows CE doesn't do any server certificate validation.
      We have to do it manually. */
-  if(conn->ssl_config.verifypeer)
+  if(data->set.ssl.verifypeer)
     return verify_certificate(conn, sockindex);
 #endif
 
@@ -657,8 +638,6 @@ schannel_connect_step3(struct connectdata *conn, int sockindex)
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   SECURITY_STATUS sspi_status = SEC_E_OK;
   CERT_CONTEXT *ccert_context = NULL;
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
 #ifdef HAS_ALPN
   SecPkgContext_ApplicationProtocol alpn_result;
 #endif
@@ -666,7 +645,7 @@ schannel_connect_step3(struct connectdata *conn, int sockindex)
   DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
 
   infof(data, "schannel: SSL/TLS connection with %s port %hu (step 3/3)\n",
-        hostname, conn->remote_port);
+        conn->host.name, conn->remote_port);
 
   if(!connssl->cred)
     return CURLE_SSL_CONNECT_ERROR;
@@ -722,13 +701,12 @@ schannel_connect_step3(struct connectdata *conn, int sockindex)
 #endif
 
   /* save the current session data for possible re-use */
-  if(data->set.general_ssl.sessionid) {
+  if(conn->ssl_config.sessionid) {
     bool incache;
     struct curl_schannel_cred *old_cred = NULL;
 
     Curl_ssl_sessionid_lock(conn);
-    incache = !(Curl_ssl_getsessionid(conn, (void **)&old_cred, NULL,
-                                      sockindex));
+    incache = !(Curl_ssl_getsessionid(conn, (void **)&old_cred, NULL));
     if(incache) {
       if(old_cred != connssl->cred) {
         infof(data, "schannel: old credential handle is stale, removing\n");
@@ -739,8 +717,7 @@ schannel_connect_step3(struct connectdata *conn, int sockindex)
     }
     if(!incache) {
       result = Curl_ssl_addsessionid(conn, (void *)connssl->cred,
-                                     sizeof(struct curl_schannel_cred),
-                                     sockindex);
+                                     sizeof(struct curl_schannel_cred));
       if(result) {
         Curl_ssl_sessionid_unlock(conn);
         failf(data, "schannel: failed to store credential handle");
@@ -792,7 +769,7 @@ schannel_connect_common(struct connectdata *conn, int sockindex,
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   curl_socket_t sockfd = conn->sock[sockindex];
-  time_t timeout_ms;
+  long timeout_ms;
   int what;
 
   /* check if the connection has already been established */
@@ -838,8 +815,7 @@ schannel_connect_common(struct connectdata *conn, int sockindex,
       curl_socket_t readfd = ssl_connect_2_reading ==
         connssl->connecting_state ? sockfd : CURL_SOCKET_BAD;
 
-      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
-                               nonblocking ? 0 : timeout_ms);
+      what = Curl_socket_ready(readfd, writefd, nonblocking ? 0 : timeout_ms);
       if(what < 0) {
         /* fatal error */
         failf(data, "select/poll on SSL/TLS socket, errno: %d", SOCKERRNO);
@@ -980,7 +956,7 @@ schannel_send(struct connectdata *conn, int sockindex,
     /* send entire message or fail */
     while(len > (size_t)written) {
       ssize_t this_write;
-      time_t timeleft;
+      long timeleft;
       int what;
 
       this_write = 0;
@@ -995,7 +971,8 @@ schannel_send(struct connectdata *conn, int sockindex,
         break;
       }
 
-      what = SOCKET_WRITABLE(conn->sock[sockindex], timeleft);
+      what = Curl_socket_ready(CURL_SOCKET_BAD, conn->sock[sockindex],
+                               timeleft);
       if(what < 0) {
         /* fatal error */
         failf(conn->data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
@@ -1399,11 +1376,9 @@ int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)
    */
   struct Curl_easy *data = conn->data;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
-    conn->host.name;
 
   infof(data, "schannel: shutting down SSL/TLS connection with %s port %hu\n",
-        hostname, conn->remote_port);
+        conn->host.name, conn->remote_port);
 
   if(connssl->cred && connssl->ctxt) {
     SecBufferDesc BuffDesc;
@@ -1425,7 +1400,7 @@ int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)
       failf(data, "schannel: ApplyControlToken failure: %s",
             Curl_sspi_strerror(conn, sspi_status));
 
-    host_name = Curl_convert_UTF8_to_tchar(hostname);
+    host_name = Curl_convert_UTF8_to_tchar(conn->host.name);
     if(!host_name)
       return CURLE_OUT_OF_MEMORY;
 
@@ -1524,21 +1499,21 @@ size_t Curl_schannel_version(char *buffer, size_t size)
   return size;
 }
 
-CURLcode Curl_schannel_random(unsigned char *entropy, size_t length)
+int Curl_schannel_random(unsigned char *entropy, size_t length)
 {
   HCRYPTPROV hCryptProv = 0;
 
   if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL,
                           CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
-    return CURLE_FAILED_INIT;
+    return 1;
 
   if(!CryptGenRandom(hCryptProv, (DWORD)length, entropy)) {
     CryptReleaseContext(hCryptProv, 0UL);
-    return CURLE_FAILED_INIT;
+    return 1;
   }
 
   CryptReleaseContext(hCryptProv, 0UL);
-  return CURLE_OK;
+  return 0;
 }
 
 #ifdef _WIN32_WCE
@@ -1550,9 +1525,6 @@ static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
   CURLcode result = CURLE_OK;
   CERT_CONTEXT *pCertContextServer = NULL;
   const CERT_CHAIN_CONTEXT *pChainContext = NULL;
-  const char * const conn_hostname = SSL_IS_PROXY() ?
-    conn->http_proxy.host.name :
-    conn->host.name;
 
   status = s_pSecFn->QueryContextAttributes(&connssl->ctxt->ctxt_handle,
                                             SECPKG_ATTR_REMOTE_CERT_CONTEXT,
@@ -1574,7 +1546,7 @@ static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
                                 NULL,
                                 pCertContextServer->hCertStore,
                                 &ChainPara,
-                                (data->set.ssl.no_revoke ? 0 :
+                                (data->set.ssl_no_revoke ? 0 :
                                  CERT_CHAIN_REVOCATION_CHECK_CHAIN),
                                 NULL,
                                 &pChainContext)) {
@@ -1610,10 +1582,15 @@ static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
   }
 
   if(result == CURLE_OK) {
-    if(conn->ssl_config.verifyhost) {
-      TCHAR cert_hostname_buff[256];
+    if(data->set.ssl.verifyhost) {
+      TCHAR cert_hostname_buff[128];
+      xcharp_u hostname;
+      xcharp_u cert_hostname;
       DWORD len;
 
+      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
@@ -1624,50 +1601,31 @@ static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
       */
       len = CertGetNameString(pCertContextServer,
                               CERT_NAME_DNS_TYPE,
-                              CERT_NAME_DISABLE_IE4_UTF8_FLAG,
+                              0,
                               NULL,
-                              cert_hostname_buff,
-                              256);
-      if(len > 0) {
-        const char *cert_hostname;
-
-        /* Comparing the cert name and the connection hostname encoded as UTF-8
-         * is acceptable since both values are assumed to use ASCII
-         * (or some equivalent) encoding
-         */
-        cert_hostname = Curl_convert_tchar_to_UTF8(cert_hostname_buff);
-        if(!cert_hostname) {
-          result = CURLE_OUT_OF_MEMORY;
-        }
-        else{
-          int match_result;
-
-          match_result = Curl_cert_hostcheck(cert_hostname, conn->host.name);
-          if(match_result == CURL_HOST_MATCH) {
-            infof(data,
-                  "schannel: connection hostname (%s) validated "
-                  "against certificate name (%s)\n",
-                  conn->host.name,
-                  cert_hostname);
-            result = CURLE_OK;
-          }
-          else{
-            failf(data,
-                  "schannel: connection hostname (%s) "
-                  "does not match certificate name (%s)",
-                  conn->host.name,
-                  cert_hostname);
-            result = CURLE_PEER_FAILED_VERIFICATION;
-          }
-          Curl_unicodefree(cert_hostname);
-        }
+                              cert_hostname.tchar_ptr,
+                              128);
+      if(len > 0 && *cert_hostname.tchar_ptr == '*') {
+        /* this is a wildcard cert.  try matching the last len - 1 chars */
+        int hostname_len = strlen(conn->host.name);
+        cert_hostname.tchar_ptr++;
+        if(_tcsicmp(cert_hostname.const_tchar_ptr,
+                    hostname.const_tchar_ptr + hostname_len - len + 2) != 0)
+          result = CURLE_PEER_FAILED_VERIFICATION;
       }
-      else {
-        failf(data,
-              "schannel: CertGetNameString did not provide any "
-              "certificate name information");
+      else if(len == 0 || _tcsicmp(hostname.const_tchar_ptr,
+                                   cert_hostname.const_tchar_ptr) != 0) {
         result = CURLE_PEER_FAILED_VERIFICATION;
       }
+      if(result == CURLE_PEER_FAILED_VERIFICATION) {
+        char *_cert_hostname;
+        _cert_hostname = Curl_convert_tchar_to_UTF8(cert_hostname.tchar_ptr);
+        failf(data, "schannel: CertGetNameString() certificate hostname "
+              "(%s) did not match connection (%s)",
+              _cert_hostname, conn->host.name);
+        Curl_unicodefree(_cert_hostname);
+      }
+      Curl_unicodefree(hostname.tchar_ptr);
     }
   }
 
index 8627c63..8a4991e 100644 (file)
@@ -8,7 +8,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2012, Marc Hoersken, <info@marc-hoersken.de>, et al.
- * Copyright (C) 2012 - 2017, 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
@@ -92,7 +92,7 @@ int Curl_schannel_init(void);
 void Curl_schannel_cleanup(void);
 size_t Curl_schannel_version(char *buffer, size_t size);
 
-CURLcode Curl_schannel_random(unsigned char *entropy, size_t length);
+int Curl_schannel_random(unsigned char *entropy, size_t length);
 
 /* Set the API backend definition to Schannel */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_SCHANNEL
index f40a977..fe69306 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #include "vtls.h" /* generic SSL protos etc */
 #include "slist.h"
 #include "sendf.h"
-#include "strcase.h"
+#include "rawstr.h"
 #include "url.h"
 #include "progress.h"
 #include "share.h"
-#include "multiif.h"
 #include "timeval.h"
 #include "curl_md5.h"
 #include "warnless.h"
                                  (data->share->specifier &             \
                                   (1<<CURL_LOCK_DATA_SSL_SESSION)))
 
-#define CLONE_STRING(var)                    \
-  if(source->var) {                          \
-    dest->var = strdup(source->var);         \
-    if(!dest->var)                           \
-      return FALSE;                          \
-  }                                          \
-  else                                       \
-    dest->var = NULL;
+static bool safe_strequal(char* str1, char* str2)
+{
+  if(str1 && str2)
+    /* both pointers point to something then compare them */
+    return (0 != Curl_raw_equal(str1, str2)) ? TRUE : FALSE;
+  else
+    /* if both pointers are NULL then treat them as equal */
+    return (!str1 && !str2) ? TRUE : FALSE;
+}
 
 bool
-Curl_ssl_config_matches(struct ssl_primary_config* data,
-                        struct ssl_primary_config* needle)
+Curl_ssl_config_matches(struct ssl_config_data* data,
+                        struct ssl_config_data* needle)
 {
   if((data->version == needle->version) &&
      (data->verifypeer == needle->verifypeer) &&
      (data->verifyhost == needle->verifyhost) &&
-     Curl_safe_strcasecompare(data->CApath, needle->CApath) &&
-     Curl_safe_strcasecompare(data->CAfile, needle->CAfile) &&
-     Curl_safe_strcasecompare(data->clientcert, needle->clientcert) &&
-     Curl_safe_strcasecompare(data->cipher_list, needle->cipher_list))
+     safe_strequal(data->CApath, needle->CApath) &&
+     safe_strequal(data->CAfile, needle->CAfile) &&
+     safe_strequal(data->clientcert, needle->clientcert) &&
+     safe_strequal(data->cipher_list, needle->cipher_list))
     return TRUE;
 
   return FALSE;
 }
 
 bool
-Curl_clone_primary_ssl_config(struct ssl_primary_config *source,
-                              struct ssl_primary_config *dest)
+Curl_clone_ssl_config(struct ssl_config_data *source,
+                      struct ssl_config_data *dest)
 {
+  dest->sessionid = source->sessionid;
   dest->verifyhost = source->verifyhost;
   dest->verifypeer = source->verifypeer;
   dest->version = source->version;
 
-  CLONE_STRING(CAfile);
-  CLONE_STRING(CApath);
-  CLONE_STRING(cipher_list);
-  CLONE_STRING(egdsocket);
-  CLONE_STRING(random_file);
-  CLONE_STRING(clientcert);
+  if(source->CAfile) {
+    dest->CAfile = strdup(source->CAfile);
+    if(!dest->CAfile)
+      return FALSE;
+  }
+  else
+    dest->CAfile = NULL;
+
+  if(source->CApath) {
+    dest->CApath = strdup(source->CApath);
+    if(!dest->CApath)
+      return FALSE;
+  }
+  else
+    dest->CApath = NULL;
+
+  if(source->cipher_list) {
+    dest->cipher_list = strdup(source->cipher_list);
+    if(!dest->cipher_list)
+      return FALSE;
+  }
+  else
+    dest->cipher_list = NULL;
+
+  if(source->egdsocket) {
+    dest->egdsocket = strdup(source->egdsocket);
+    if(!dest->egdsocket)
+      return FALSE;
+  }
+  else
+    dest->egdsocket = NULL;
+
+  if(source->random_file) {
+    dest->random_file = strdup(source->random_file);
+    if(!dest->random_file)
+      return FALSE;
+  }
+  else
+    dest->random_file = NULL;
+
+  if(source->clientcert) {
+    dest->clientcert = strdup(source->clientcert);
+    if(!dest->clientcert)
+      return FALSE;
+    dest->sessionid = FALSE;
+  }
+  else
+    dest->clientcert = NULL;
+
   return TRUE;
 }
 
-void Curl_free_primary_ssl_config(struct ssl_primary_config* sslc)
+void Curl_free_ssl_config(struct ssl_config_data* sslc)
 {
   Curl_safefree(sslc->CAfile);
   Curl_safefree(sslc->CApath);
@@ -133,6 +177,77 @@ void Curl_free_primary_ssl_config(struct ssl_primary_config* sslc)
   Curl_safefree(sslc->clientcert);
 }
 
+
+/*
+ * Curl_rand() returns a random unsigned integer, 32bit.
+ *
+ * This non-SSL function is put here only because this file is the only one
+ * with knowledge of what the underlying SSL libraries provide in terms of
+ * randomizers.
+ *
+ * NOTE: 'data' may be passed in as NULL when coming from external API without
+ * easy handle!
+ *
+ */
+
+unsigned int Curl_rand(struct Curl_easy *data)
+{
+  unsigned int r = 0;
+  static unsigned int randseed;
+  static bool seeded = FALSE;
+
+#ifdef CURLDEBUG
+  char *force_entropy = getenv("CURL_ENTROPY");
+  if(force_entropy) {
+    if(!seeded) {
+      size_t elen = strlen(force_entropy);
+      size_t clen = sizeof(randseed);
+      size_t min = elen < clen ? elen : clen;
+      memcpy((char *)&randseed, force_entropy, min);
+      seeded = TRUE;
+    }
+    else
+      randseed++;
+    return randseed;
+  }
+#endif
+
+  /* data may be NULL! */
+  if(!Curl_ssl_random(data, (unsigned char *)&r, sizeof(r)))
+    return r;
+
+  /* If Curl_ssl_random() returns non-zero it couldn't offer randomness and we
+     instead perform a "best effort" */
+
+#ifdef RANDOM_FILE
+  if(!seeded) {
+    /* if there's a random file to read a seed from, use it */
+    int fd = open(RANDOM_FILE, O_RDONLY);
+    if(fd > -1) {
+      /* read random data into the randseed variable */
+      ssize_t nread = read(fd, &randseed, sizeof(randseed));
+      if(nread == sizeof(randseed))
+        seeded = TRUE;
+      close(fd);
+    }
+  }
+#endif
+
+  if(!seeded) {
+    struct timeval now = curlx_tvnow();
+    infof(data, "WARNING: Using weak random seed\n");
+    randseed += (unsigned int)now.tv_usec + (unsigned int)now.tv_sec;
+    randseed = randseed * 1103515245 + 12345;
+    randseed = randseed * 1103515245 + 12345;
+    randseed = randseed * 1103515245 + 12345;
+    seeded = TRUE;
+  }
+
+  /* Return an unsigned 32-bit pseudo-random number. */
+  r = randseed = randseed * 1103515245 + 12345;
+  return (r << 16) | ((r >> 16) & 0xFFFF);
+}
+
 int Curl_ssl_backend(void)
 {
   return (int)CURL_SSL_BACKEND;
@@ -173,41 +288,19 @@ void Curl_ssl_cleanup(void)
 static bool ssl_prefs_check(struct Curl_easy *data)
 {
   /* check for CURLOPT_SSLVERSION invalid parameter value */
-  if((data->set.ssl.primary.version < 0)
-     || (data->set.ssl.primary.version >= CURL_SSLVERSION_LAST)) {
+  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;
 }
 
-static CURLcode
-ssl_connect_init_proxy(struct connectdata *conn, int sockindex)
-{
-  DEBUGASSERT(conn->bits.proxy_ssl_connected[sockindex]);
-  if(ssl_connection_complete == conn->ssl[sockindex].state &&
-     !conn->proxy_ssl[sockindex].use) {
-#if defined(HTTPS_PROXY_SUPPORT)
-    conn->proxy_ssl[sockindex] = conn->ssl[sockindex];
-    memset(&conn->ssl[sockindex], 0, sizeof(conn->ssl[sockindex]));
-#else
-    return CURLE_NOT_BUILT_IN;
-#endif
-  }
-  return CURLE_OK;
-}
-
 CURLcode
 Curl_ssl_connect(struct connectdata *conn, int sockindex)
 {
   CURLcode result;
 
-  if(conn->bits.proxy_ssl_connected[sockindex]) {
-    result = ssl_connect_init_proxy(conn, sockindex);
-    if(result)
-      return result;
-  }
-
   if(!ssl_prefs_check(conn->data))
     return CURLE_SSL_CONNECT_ERROR;
 
@@ -228,11 +321,6 @@ Curl_ssl_connect_nonblocking(struct connectdata *conn, int sockindex,
                              bool *done)
 {
   CURLcode result;
-  if(conn->bits.proxy_ssl_connected[sockindex]) {
-    result = ssl_connect_init_proxy(conn, sockindex);
-    if(result)
-      return result;
-  }
 
   if(!ssl_prefs_check(conn->data))
     return CURLE_SSL_CONNECT_ERROR;
@@ -275,8 +363,7 @@ void Curl_ssl_sessionid_unlock(struct connectdata *conn)
  */
 bool Curl_ssl_getsessionid(struct connectdata *conn,
                            void **ssl_sessionid,
-                           size_t *idsize, /* set 0 if unknown */
-                           int sockindex)
+                           size_t *idsize) /* set 0 if unknown */
 {
   struct curl_ssl_session *check;
   struct Curl_easy *data = conn->data;
@@ -284,18 +371,11 @@ bool Curl_ssl_getsessionid(struct connectdata *conn,
   long *general_age;
   bool no_match = TRUE;
 
-  const bool isProxy = CONNECT_PROXY_SSL();
-  struct ssl_primary_config * const ssl_config = isProxy ?
-    &conn->proxy_ssl_config :
-    &conn->ssl_config;
-  const char * const name = isProxy ? conn->http_proxy.host.name :
-    conn->host.name;
-  int port = isProxy ? (int)conn->port : conn->remote_port;
   *ssl_sessionid = NULL;
 
-  DEBUGASSERT(data->set.general_ssl.sessionid);
+  DEBUGASSERT(conn->ssl_config.sessionid);
 
-  if(!data->set.general_ssl.sessionid)
+  if(!conn->ssl_config.sessionid)
     /* session ID re-use is disabled */
     return TRUE;
 
@@ -305,21 +385,20 @@ bool Curl_ssl_getsessionid(struct connectdata *conn,
   else
     general_age = &data->state.sessionage;
 
-  for(i = 0; i < data->set.general_ssl.max_ssl_sessions; i++) {
+  for(i = 0; i < data->set.ssl.max_ssl_sessions; i++) {
     check = &data->state.session[i];
     if(!check->sessionid)
       /* not session ID means blank entry */
       continue;
-    if(strcasecompare(name, check->name) &&
+    if(Curl_raw_equal(conn->host.name, check->name) &&
        ((!conn->bits.conn_to_host && !check->conn_to_host) ||
-        (conn->bits.conn_to_host && check->conn_to_host &&
-         strcasecompare(conn->conn_to_host.name, check->conn_to_host))) &&
+         (conn->bits.conn_to_host && check->conn_to_host &&
+           Curl_raw_equal(conn->conn_to_host.name, check->conn_to_host))) &&
        ((!conn->bits.conn_to_port && check->conn_to_port == -1) ||
-        (conn->bits.conn_to_port && check->conn_to_port != -1 &&
-         conn->conn_to_port == check->conn_to_port)) &&
-       (port == check->remote_port) &&
-       strcasecompare(conn->handler->scheme, check->scheme) &&
-       Curl_ssl_config_matches(ssl_config, &check->ssl_config)) {
+         (conn->bits.conn_to_port && check->conn_to_port != -1 &&
+           conn->conn_to_port == check->conn_to_port)) &&
+       (conn->remote_port == check->remote_port) &&
+       Curl_ssl_config_matches(&conn->ssl_config, &check->ssl_config)) {
       /* yes, we have a session ID! */
       (*general_age)++;          /* increase general age */
       check->age = *general_age; /* set this as used in this age */
@@ -348,7 +427,7 @@ void Curl_ssl_kill_session(struct curl_ssl_session *session)
     session->sessionid = NULL;
     session->age = 0; /* fresh */
 
-    Curl_free_primary_ssl_config(&session->ssl_config);
+    Curl_free_ssl_config(&session->ssl_config);
 
     Curl_safefree(session->name);
     Curl_safefree(session->conn_to_host);
@@ -363,7 +442,7 @@ void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid)
   size_t i;
   struct Curl_easy *data=conn->data;
 
-  for(i = 0; i < data->set.general_ssl.max_ssl_sessions; i++) {
+  for(i = 0; i < data->set.ssl.max_ssl_sessions; i++) {
     struct curl_ssl_session *check = &data->state.session[i];
 
     if(check->sessionid == ssl_sessionid) {
@@ -381,8 +460,7 @@ void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid)
  */
 CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
                                void *ssl_sessionid,
-                               size_t idsize,
-                               int sockindex)
+                               size_t idsize)
 {
   size_t i;
   struct Curl_easy *data=conn->data; /* the mother of all structs */
@@ -392,14 +470,10 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
   char *clone_conn_to_host;
   int conn_to_port;
   long *general_age;
-  const bool isProxy = CONNECT_PROXY_SSL();
-  struct ssl_primary_config * const ssl_config = isProxy ?
-    &conn->proxy_ssl_config :
-    &conn->ssl_config;
 
-  DEBUGASSERT(data->set.general_ssl.sessionid);
+  DEBUGASSERT(conn->ssl_config.sessionid);
 
-  clone_host = strdup(isProxy ? conn->http_proxy.host.name : conn->host.name);
+  clone_host = strdup(conn->host.name);
   if(!clone_host)
     return CURLE_OUT_OF_MEMORY; /* bail out */
 
@@ -430,14 +504,14 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
   }
 
   /* find an empty slot for us, or find the oldest */
-  for(i = 1; (i < data->set.general_ssl.max_ssl_sessions) &&
+  for(i = 1; (i < data->set.ssl.max_ssl_sessions) &&
         data->state.session[i].sessionid; i++) {
     if(data->state.session[i].age < oldest_age) {
       oldest_age = data->state.session[i].age;
       store = &data->state.session[i];
     }
   }
-  if(i == data->set.general_ssl.max_ssl_sessions)
+  if(i == data->set.ssl.max_ssl_sessions)
     /* cache is full, we must "kill" the oldest entry! */
     Curl_ssl_kill_session(store);
   else
@@ -447,17 +521,15 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
   store->sessionid = ssl_sessionid;
   store->idsize = idsize;
   store->age = *general_age;    /* set current age */
-  /* free it if there's one already present */
+    /* free it if there's one already present */
   free(store->name);
   free(store->conn_to_host);
   store->name = clone_host;               /* clone host name */
   store->conn_to_host = clone_conn_to_host; /* clone connect to host name */
   store->conn_to_port = conn_to_port; /* connect to port number */
-  /* port number */
-  store->remote_port = isProxy ? (int)conn->port : conn->remote_port;
-  store->scheme = conn->handler->scheme;
+  store->remote_port = conn->remote_port; /* port number */
 
-  if(!Curl_clone_primary_ssl_config(ssl_config, &store->ssl_config)) {
+  if(!Curl_clone_ssl_config(&conn->ssl_config, &store->ssl_config)) {
     store->sessionid = NULL; /* let caller free sessionid */
     free(clone_host);
     free(clone_conn_to_host);
@@ -473,7 +545,7 @@ void Curl_ssl_close_all(struct Curl_easy *data)
   size_t i;
   /* kill the session ID cache if not shared */
   if(data->state.session && !SSLSESSION_SHARED(data)) {
-    for(i = 0; i < data->set.general_ssl.max_ssl_sessions; i++)
+    for(i = 0; i < data->set.ssl.max_ssl_sessions; i++)
       /* the single-killer function handles empty table slots */
       Curl_ssl_kill_session(&data->state.session[i]);
 
@@ -484,43 +556,6 @@ void Curl_ssl_close_all(struct Curl_easy *data)
   curlssl_close_all(data);
 }
 
-#if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
-  defined(USE_DARWINSSL) || defined(USE_POLARSSL) || defined(USE_NSS) || \
-  defined(USE_MBEDTLS)
-int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks,
-                     int numsocks)
-{
-  struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];
-
-  if(!numsocks)
-    return GETSOCK_BLANK;
-
-  if(connssl->connecting_state == ssl_connect_2_writing) {
-    /* write mode */
-    socks[0] = conn->sock[FIRSTSOCKET];
-    return GETSOCK_WRITESOCK(0);
-  }
-  else if(connssl->connecting_state == ssl_connect_2_reading) {
-    /* read mode */
-    socks[0] = conn->sock[FIRSTSOCKET];
-    return GETSOCK_READSOCK(0);
-  }
-
-  return GETSOCK_BLANK;
-}
-#else
-int Curl_ssl_getsock(struct connectdata *conn,
-                     curl_socket_t *socks,
-                     int numsocks)
-{
-  (void)conn;
-  (void)socks;
-  (void)numsocks;
-  return GETSOCK_BLANK;
-}
-/* USE_OPENSSL || USE_GNUTLS || USE_SCHANNEL || USE_DARWINSSL || USE_NSS */
-#endif
-
 void Curl_ssl_close(struct connectdata *conn, int sockindex)
 {
   DEBUGASSERT((sockindex <= 1) && (sockindex >= -1));
@@ -578,7 +613,7 @@ CURLcode Curl_ssl_initsessions(struct Curl_easy *data, size_t amount)
     return CURLE_OUT_OF_MEMORY;
 
   /* store the info in the SSL section */
-  data->set.general_ssl.max_ssl_sessions = amount;
+  data->set.ssl.max_ssl_sessions = amount;
   data->state.session = session;
   data->state.sessionage = 1; /* this is brand new */
   return CURLE_OK;
@@ -654,9 +689,9 @@ CURLcode Curl_ssl_push_certinfo_len(struct Curl_easy *data,
                                     const char *value,
                                     size_t valuelen)
 {
-  struct curl_certinfo *ci = &data->info.certs;
-  char *output;
-  struct curl_slist *nl;
+  struct curl_certinfo * ci = &data->info.certs;
+  char * output;
+  struct curl_slist * nl;
   CURLcode result = CURLE_OK;
   size_t labellen = strlen(label);
   size_t outlen = labellen + 1 + valuelen + 1; /* label:value\0 */
@@ -699,9 +734,9 @@ CURLcode Curl_ssl_push_certinfo(struct Curl_easy *data,
   return Curl_ssl_push_certinfo_len(data, certnum, label, value, valuelen);
 }
 
-CURLcode Curl_ssl_random(struct Curl_easy *data,
-                         unsigned char *entropy,
-                         size_t length)
+int Curl_ssl_random(struct Curl_easy *data,
+                     unsigned char *entropy,
+                     size_t length)
 {
   return curlssl_random(data, entropy, length);
 }
index 2aabeda..a41ecc3 100644 (file)
 #define ALPN_HTTP_1_1_LENGTH 8
 #define ALPN_HTTP_1_1 "http/1.1"
 
-/* set of helper macros for the backends to access the correct fields. For the
-   proxy or for the remote host - to properly support HTTPS proxy */
-
-#define SSL_IS_PROXY() (CURLPROXY_HTTPS == conn->http_proxy.proxytype && \
-  ssl_connection_complete != conn->proxy_ssl[conn->sock[SECONDARYSOCKET] == \
-  CURL_SOCKET_BAD ? FIRSTSOCKET : SECONDARYSOCKET].state)
-#define SSL_SET_OPTION(var) (SSL_IS_PROXY() ? data->set.proxy_ssl.var : \
-                             data->set.ssl.var)
-#define SSL_CONN_CONFIG(var) (SSL_IS_PROXY() ?          \
-  conn->proxy_ssl_config.var : conn->ssl_config.var)
-
-bool Curl_ssl_config_matches(struct ssl_primary_config* data,
-                             struct ssl_primary_config* needle);
-bool Curl_clone_primary_ssl_config(struct ssl_primary_config *source,
-                                   struct ssl_primary_config *dest);
-void Curl_free_primary_ssl_config(struct ssl_primary_config* sslc);
-int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks,
-                     int numsocks);
+bool Curl_ssl_config_matches(struct ssl_config_data* data,
+                             struct ssl_config_data* needle);
+bool Curl_clone_ssl_config(struct ssl_config_data* source,
+                           struct ssl_config_data* dest);
+void Curl_free_ssl_config(struct ssl_config_data* sslc);
+
+unsigned int Curl_rand(struct Curl_easy *);
 
 int Curl_ssl_backend(void);
 
@@ -98,12 +87,12 @@ int Curl_ssl_check_cxn(struct connectdata *conn);
 /* Certificate information list handling. */
 
 void Curl_ssl_free_certinfo(struct Curl_easy *data);
-CURLcode Curl_ssl_init_certinfo(struct Curl_easy *data, int num);
-CURLcode Curl_ssl_push_certinfo_len(struct Curl_easy *data, int certnum,
-                                    const char *label, const char *value,
+CURLcode Curl_ssl_init_certinfo(struct Curl_easy * data, int num);
+CURLcode Curl_ssl_push_certinfo_len(struct Curl_easy * data, int certnum,
+                                    const char * label, const char * value,
                                     size_t valuelen);
-CURLcode Curl_ssl_push_certinfo(struct Curl_easy *data, int certnum,
-                                const char *label, const char *value);
+CURLcode Curl_ssl_push_certinfo(struct Curl_easy * data, int certnum,
+                                const char * label, const char * value);
 
 /* Functions to be used by SSL library adaptation functions */
 
@@ -127,8 +116,7 @@ void Curl_ssl_sessionid_unlock(struct connectdata *conn);
  */
 bool Curl_ssl_getsessionid(struct connectdata *conn,
                            void **ssl_sessionid,
-                           size_t *idsize, /* set 0 if unknown */
-                           int sockindex);
+                           size_t *idsize); /* set 0 if unknown */
 /* add a new session ID
  * Sessionid mutex must be locked (see Curl_ssl_sessionid_lock).
  * Caller must ensure that it has properly shared ownership of this sessionid
@@ -136,8 +124,7 @@ bool Curl_ssl_getsessionid(struct connectdata *conn,
  */
 CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
                                void *ssl_sessionid,
-                               size_t idsize,
-                               int sockindex);
+                               size_t idsize);
 /* Kill a single session ID entry in the cache
  * Sessionid mutex must be locked (see Curl_ssl_sessionid_lock).
  * This will call engine-specific curlssl_session_free function, which must
@@ -153,9 +140,10 @@ void Curl_ssl_kill_session(struct curl_ssl_session *session);
  */
 void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid);
 
-/* get N random bytes into the buffer */
-CURLcode Curl_ssl_random(struct Curl_easy *data, unsigned char *buffer,
-                         size_t length);
+/* get N random bytes into the buffer, return 0 if a find random is filled
+   in */
+int Curl_ssl_random(struct Curl_easy *data, unsigned char *buffer,
+                    size_t length);
 CURLcode Curl_ssl_md5sum(unsigned char *tmp, /* input */
                          size_t tmplen,
                          unsigned char *md5sum, /* output */
index c4bc7c1..e17bcd9 100644 (file)
@@ -27,7 +27,7 @@
 
 #include <curl/curl.h>
 #include "urldata.h"
-#include "strcase.h"
+#include "strequal.h"
 #include "hostcheck.h"
 #include "vtls/vtls.h"
 #include "sendf.h"
@@ -40,9 +40,6 @@
 #include "curl_memory.h"
 #include "memdebug.h"
 
-/* For overflow checks. */
-#define CURL_SIZE_T_MAX         ((size_t)-1)
-
 
 /* ASN.1 OIDs. */
 static const char       cnOID[] = "2.5.4.3";    /* Common name. */
@@ -108,8 +105,8 @@ static const curl_OID   OIDtable[] = {
  */
 
 
-const char *Curl_getASN1Element(curl_asn1Element *elem,
-                                const char *beg, const char *end)
+const char * Curl_getASN1Element(curl_asn1Element * elem,
+                                 const char * beg, const char * end)
 {
   unsigned char b;
   unsigned long len;
@@ -119,8 +116,8 @@ const char *Curl_getASN1Element(curl_asn1Element *elem,
      ending at `end'.
      Returns a pointer in source string after the parsed element, or NULL
      if an error occurs. */
-  if(!beg || !end || beg >= end || !*beg ||
-     (size_t)(end - beg) > CURL_ASN1_MAX)
+
+  if(beg >= end || !*beg)
     return (const char *) NULL;
 
   /* Process header byte. */
@@ -155,7 +152,7 @@ const char *Curl_getASN1Element(curl_asn1Element *elem,
     elem->end = beg;
     return beg + 1;
   }
-  else if((unsigned)b > (size_t)(end - beg))
+  else if(beg + b > end)
     return (const char *) NULL; /* Does not fit in source. */
   else {
     /* Get long length. */
@@ -166,28 +163,28 @@ const char *Curl_getASN1Element(curl_asn1Element *elem,
       len = (len << 8) | (unsigned char) *beg++;
     } while(--b);
   }
-  if(len > (size_t)(end - beg))
+  if((unsigned long) (end - beg) < len)
     return (const char *) NULL;  /* Element data does not fit in source. */
   elem->beg = beg;
   elem->end = beg + len;
   return elem->end;
 }
 
-static const curl_OID * searchOID(const char *oid)
+static const curl_OID * searchOID(const char * oid)
 {
-  const curl_OID *op;
+  const curl_OID * op;
 
   /* Search the null terminated OID or OID identifier in local table.
      Return the table entry pointer or NULL if not found. */
 
   for(op = OIDtable; op->numoid; op++)
-    if(!strcmp(op->numoid, oid) || strcasecompare(op->textoid, oid))
+    if(!strcmp(op->numoid, oid) || curl_strequal(op->textoid, oid))
       return op;
 
   return (const curl_OID *) NULL;
 }
 
-static const char *bool2str(const char *beg, const char *end)
+static const char * bool2str(const char * beg, const char * end)
 {
   /* Convert an ASN.1 Boolean value into its string representation.
      Return the dynamically allocated string, or NULL if source is not an
@@ -198,24 +195,22 @@ static const char *bool2str(const char *beg, const char *end)
   return strdup(*beg? "TRUE": "FALSE");
 }
 
-static const char *octet2str(const char *beg, const char *end)
+static const char * octet2str(const char * beg, const char * end)
 {
   size_t n = end - beg;
-  char *buf = NULL;
+  char * buf;
 
   /* Convert an ASN.1 octet string to a printable string.
      Return the dynamically allocated string, or NULL if an error occurs. */
 
-  if(n <= (CURL_SIZE_T_MAX - 1) / 3) {
-    buf = malloc(3 * n + 1);
-    if(buf)
-      for(n = 0; beg < end; n += 3)
-        snprintf(buf + n, 4, "%02x:", *(const unsigned char *) beg++);
-  }
+  buf = malloc(3 * n + 1);
+  if(buf)
+    for(n = 0; beg < end; n += 3)
+      snprintf(buf + n, 4, "%02x:", *(const unsigned char *) beg++);
   return buf;
 }
 
-static const char *bit2str(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. */
@@ -225,7 +220,7 @@ static const char *bit2str(const char *beg, const char *end)
   return octet2str(beg, end);
 }
 
-static const char *int2str(const char *beg, const char *end)
+static const char * int2str(const char * beg, const char * end)
 {
   long val = 0;
   size_t n = end - beg;
@@ -251,14 +246,14 @@ static const char *int2str(const char *beg, const char *end)
 }
 
 static ssize_t
-utf8asn1str(char **to, int type, const char *from, const char *end)
+utf8asn1str(char * * to, int type, const char * from, const char * end)
 {
   size_t inlength = end - from;
   int size = 1;
   size_t outlength;
   int charsize;
   unsigned int wc;
-  char *buf;
+  char * buf;
 
   /* Perform a lazy conversion from an ASN.1 typed string to UTF8. Allocate the
      destination buffer dynamically. The allocation size will normally be too
@@ -267,7 +262,7 @@ utf8asn1str(char **to, int type, const char *from, const char *end)
      string length. */
 
   *to = (char *) NULL;
-  switch(type) {
+  switch (type) {
   case CURL_ASN1_BMP_STRING:
     size = 2;
     break;
@@ -287,8 +282,6 @@ utf8asn1str(char **to, int type, const char *from, const char *end)
 
   if(inlength % size)
     return -1;  /* Length inconsistent with character size. */
-  if(inlength / size > (CURL_SIZE_T_MAX - 1) / 4)
-    return -1;  /* Too big. */
   buf = malloc(4 * (inlength / size) + 1);
   if(!buf)
     return -1;  /* Not enough memory. */
@@ -302,7 +295,7 @@ utf8asn1str(char **to, int type, const char *from, const char *end)
   else {
     for(outlength = 0; from < end;) {
       wc = 0;
-      switch(size) {
+      switch (size) {
       case 4:
         wc = (wc << 8) | *(const unsigned char *) from++;
         wc = (wc << 8) | *(const unsigned char *) from++;
@@ -342,9 +335,9 @@ utf8asn1str(char **to, int type, const char *from, const char *end)
   return outlength;
 }
 
-static const char *string2str(int type, const char *beg, const char *end)
+static const char * string2str(int type, const char * beg, const char * end)
 {
-  char *buf;
+  char * buf;
 
   /* Convert an ASN.1 String into its UTF-8 string representation.
      Return the dynamically allocated string, or NULL if an error occurs. */
@@ -354,7 +347,7 @@ static const char *string2str(int type, const char *beg, const char *end)
   return buf;
 }
 
-static int encodeUint(char *buf, int n, unsigned int x)
+static int encodeUint(char * buf, int n, unsigned int x)
 {
   int i = 0;
   unsigned int y = x / 10;
@@ -374,7 +367,7 @@ static int encodeUint(char *buf, int n, unsigned int x)
   return i;
 }
 
-static int encodeOID(char *buf, int n, const char *beg, const char *end)
+static int encodeOID(char * buf, int n, const char * beg, const char * end)
 {
   int i = 0;
   unsigned int x;
@@ -413,9 +406,9 @@ static int encodeOID(char *buf, int n, const char *beg, const char *end)
   return i;
 }
 
-static const char *OID2str(const char *beg, const char *end, bool symbolic)
+static const char * OID2str(const char * beg, const char * end, bool symbolic)
 {
-  char *buf = (char *) NULL;
+  char * buf = (char *) NULL;
   const curl_OID * op;
   int n;
 
@@ -443,14 +436,14 @@ static const char *OID2str(const char *beg, const char *end, bool symbolic)
   return buf;
 }
 
-static const char *GTime2str(const char *beg, const char *end)
+static const char * GTime2str(const char * beg, const char * end)
 {
-  const char *tzp;
-  const char *fracp;
+  const char * tzp;
+  const char * fracp;
   char sec1, sec2;
   size_t fracl;
   size_t tzl;
-  const char *sep = "";
+  const char * sep = "";
 
   /* Convert an ASN.1 Generalized time to a printable string.
      Return the dynamically allocated string, or NULL if an error occurs. */
@@ -460,7 +453,7 @@ static const char *GTime2str(const char *beg, const char *end)
 
   /* Get seconds digits. */
   sec1 = '0';
-  switch(fracp - beg - 12) {
+  switch (fracp - beg - 12) {
   case 0:
     sec2 = '0';
     break;
@@ -506,11 +499,11 @@ static const char *GTime2str(const char *beg, const char *end)
                        sep, tzl, tzp);
 }
 
-static const char *UTime2str(const char *beg, const char *end)
+static const char * UTime2str(const char * beg, const char * end)
 {
-  const char *tzp;
+  const char * tzp;
   size_t tzl;
-  const char *sec;
+  const char * sec;
 
   /* Convert an ASN.1 UTC time to a printable string.
      Return the dynamically allocated string, or NULL if an error occurs. */
@@ -519,7 +512,7 @@ static const char *UTime2str(const char *beg, const char *end)
     ;
   /* Get the seconds. */
   sec = beg + 10;
-  switch(tzp - sec) {
+  switch (tzp - sec) {
   case 0:
     sec = "00";
   case 2:
@@ -545,7 +538,7 @@ static const char *UTime2str(const char *beg, const char *end)
                        tzl, tzp);
 }
 
-const char *Curl_ASN1tostr(curl_asn1Element *elem, int type)
+const char * Curl_ASN1tostr(curl_asn1Element * elem, int type)
 {
   /* Convert an ASN.1 element to a printable string.
      Return the dynamically allocated string, or NULL if an error occurs. */
@@ -556,7 +549,7 @@ const char *Curl_ASN1tostr(curl_asn1Element *elem, int type)
   if(!type)
     type = elem->tag;   /* Type not forced: use element tag as type. */
 
-  switch(type) {
+  switch (type) {
   case CURL_ASN1_BOOLEAN:
     return bool2str(elem->beg, elem->end);
   case CURL_ASN1_INTEGER:
@@ -588,17 +581,17 @@ const char *Curl_ASN1tostr(curl_asn1Element *elem, int type)
   return (const char *) NULL;   /* Unsupported. */
 }
 
-static ssize_t encodeDN(char *buf, size_t n, curl_asn1Element *dn)
+static ssize_t encodeDN(char * buf, size_t n, curl_asn1Element * dn)
 {
   curl_asn1Element rdn;
   curl_asn1Element atv;
   curl_asn1Element oid;
   curl_asn1Element value;
   size_t l = 0;
-  const char *p1;
-  const char *p2;
-  const char *p3;
-  const char *str;
+  const char * p1;
+  const char * p2;
+  const char * p3;
+  const char * str;
 
   /* ASCII encode distinguished name at `dn' into the `n'-byte buffer at `buf'.
      Return the total string length, even if larger than `n'. */
@@ -654,9 +647,9 @@ static ssize_t encodeDN(char *buf, size_t n, curl_asn1Element *dn)
   return l;
 }
 
-const char *Curl_DNtostr(curl_asn1Element *dn)
+const char * Curl_DNtostr(curl_asn1Element * dn)
 {
-  char *buf = (char *) NULL;
+  char * buf = (char *) NULL;
   ssize_t n = encodeDN(buf, 0, dn);
 
   /* Convert an ASN.1 distinguished name into a printable string.
@@ -676,12 +669,12 @@ const char *Curl_DNtostr(curl_asn1Element *dn)
  * X509 parser.
  */
 
-int Curl_parseX509(curl_X509certificate *cert,
-                   const char *beg, const char *end)
+void Curl_parseX509(curl_X509certificate * cert,
+                    const char * beg, const char * end)
 {
   curl_asn1Element elem;
   curl_asn1Element tbsCertificate;
-  const char *ccp;
+  const char * ccp;
   static const char defaultVersion = 0;  /* v1. */
 
   /* ASN.1 parse an X509 certificate into structure subfields.
@@ -693,8 +686,7 @@ int Curl_parseX509(curl_X509certificate *cert,
   cert->certificate.end = end;
 
   /* Get the sequence content. */
-  if(!Curl_getASN1Element(&elem, beg, end))
-    return -1;  /* Invalid bounds/size. */
+  Curl_getASN1Element(&elem, beg, end);
   beg = elem.beg;
   end = elem.end;
 
@@ -757,10 +749,9 @@ int Curl_parseX509(curl_X509certificate *cert,
   }
   if(elem.tag == 3)
     Curl_getASN1Element(&cert->extensions, elem.beg, elem.end);
-  return 0;
 }
 
-static size_t copySubstring(char *to, const char *from)
+static size_t copySubstring(char * to, const char * from)
 {
   size_t i;
 
@@ -777,8 +768,8 @@ static size_t copySubstring(char *to, const char *from)
   return i;
 }
 
-static const char *dumpAlgo(curl_asn1Element *param,
-                            const char *beg, const char *end)
+static const char * dumpAlgo(curl_asn1Element * param,
+                             const char * beg, const char * end)
 {
   curl_asn1Element oid;
 
@@ -793,10 +784,10 @@ static const char *dumpAlgo(curl_asn1Element *param,
   return OID2str(oid.beg, oid.end, TRUE);
 }
 
-static void do_pubkey_field(struct Curl_easy *data, int certnum,
-                            const char *label, curl_asn1Element *elem)
+static void do_pubkey_field(struct Curl_easy * data, int certnum,
+                            const char * label, curl_asn1Element * elem)
 {
-  const char *output;
+  const char * output;
 
   /* Generate a certificate information record for the public key. */
 
@@ -810,14 +801,14 @@ static void do_pubkey_field(struct Curl_easy *data, int certnum,
   }
 }
 
-static void do_pubkey(struct Curl_easy *data, int certnum,
-                      const char *algo, curl_asn1Element *param,
-                      curl_asn1Element *pubkey)
+static void do_pubkey(struct Curl_easy * data, int certnum,
+                      const char * algo, curl_asn1Element * param,
+                      curl_asn1Element * pubkey)
 {
   curl_asn1Element elem;
   curl_asn1Element pk;
-  const char *p;
-  const char *q;
+  const char * p;
+  const char * q;
   unsigned long len;
   unsigned int i;
 
@@ -826,7 +817,7 @@ static void do_pubkey(struct Curl_easy *data, int certnum,
   /* Get the public key (single element). */
   Curl_getASN1Element(&pk, pubkey->beg + 1, pubkey->end);
 
-  if(strcasecompare(algo, "rsaEncryption")) {
+  if(curl_strequal(algo, "rsaEncryption")) {
     p = Curl_getASN1Element(&elem, pk.beg, pk.end);
     /* Compute key length. */
     for(q = elem.beg; !*q && q < elem.end; q++)
@@ -851,7 +842,7 @@ static void do_pubkey(struct Curl_easy *data, int certnum,
     Curl_getASN1Element(&elem, p, pk.end);
     do_pubkey_field(data, certnum, "rsa(e)", &elem);
   }
-  else if(strcasecompare(algo, "dsa")) {
+  else if(curl_strequal(algo, "dsa")) {
     p = Curl_getASN1Element(&elem, param->beg, param->end);
     do_pubkey_field(data, certnum, "dsa(p)", &elem);
     p = Curl_getASN1Element(&elem, p, param->end);
@@ -860,7 +851,7 @@ static void do_pubkey(struct Curl_easy *data, int certnum,
     do_pubkey_field(data, certnum, "dsa(g)", &elem);
     do_pubkey_field(data, certnum, "dsa(pub_key)", &pk);
   }
-  else if(strcasecompare(algo, "dhpublicnumber")) {
+  else if(curl_strequal(algo, "dhpublicnumber")) {
     p = Curl_getASN1Element(&elem, param->beg, param->end);
     do_pubkey_field(data, certnum, "dh(p)", &elem);
     Curl_getASN1Element(&elem, param->beg, param->end);
@@ -868,24 +859,24 @@ static void do_pubkey(struct Curl_easy *data, int certnum,
     do_pubkey_field(data, certnum, "dh(pub_key)", &pk);
   }
 #if 0 /* Patent-encumbered. */
-  else if(strcasecompare(algo, "ecPublicKey")) {
+  else if(curl_strequal(algo, "ecPublicKey")) {
     /* Left TODO. */
   }
 #endif
 }
 
-CURLcode Curl_extract_certinfo(struct connectdata *conn,
+CURLcode Curl_extract_certinfo(struct connectdata * conn,
                                int certnum,
-                               const char *beg,
-                               const char *end)
+                               const char * beg,
+                               const char * end)
 {
   curl_X509certificate cert;
-  struct Curl_easy *data = conn->data;
+  struct Curl_easy * data = conn->data;
   curl_asn1Element param;
-  const char *ccp;
-  char *cp1;
+  const char * ccp;
+  char * cp1;
   size_t cl1;
-  char *cp2;
+  char * cp2;
   CURLcode result;
   unsigned long version;
   size_t i;
@@ -898,8 +889,7 @@ CURLcode Curl_extract_certinfo(struct connectdata *conn,
   /* Prepare the certificate information for curl_easy_getinfo(). */
 
   /* Extract the certificate ASN.1 elements. */
-  if(Curl_parseX509(&cert, beg, end))
-    return CURLE_OUT_OF_MEMORY;
+  Curl_parseX509(&cert, beg, end);
 
   /* Subject. */
   ccp = Curl_DNtostr(&cert.subject);
@@ -1039,12 +1029,12 @@ CURLcode Curl_extract_certinfo(struct connectdata *conn,
 
 #if defined(USE_GSKIT)
 
-static const char *checkOID(const char *beg, const char *end,
-                            const char *oid)
+static const char * checkOID(const char * beg, const char * end,
+                             const char * oid)
 {
   curl_asn1Element e;
-  const char *ccp;
-  const char *p;
+  const char * ccp;
+  const char * p;
   bool matched;
 
   /* Check if first ASN.1 element at `beg' is the given OID.
@@ -1063,26 +1053,21 @@ static const char *checkOID(const char *beg, const char *end,
   return matched? ccp: (const char *) NULL;
 }
 
-CURLcode Curl_verifyhost(struct connectdata *conn,
-                         const char *beg, const char *end)
+CURLcode Curl_verifyhost(struct connectdata * conn,
+                         const char * beg, const char * end)
 {
-  struct Curl_easy *data = conn->data;
+  struct Curl_easy * data = conn->data;
   curl_X509certificate cert;
   curl_asn1Element dn;
   curl_asn1Element elem;
   curl_asn1Element ext;
   curl_asn1Element name;
-  const char *p;
-  const char *q;
-  char *dnsname;
+  const char * p;
+  const char * q;
+  char * dnsname;
   int matched = -1;
   size_t addrlen = (size_t) -1;
   ssize_t len;
-  const char * const hostname = SSL_IS_PROXY()? conn->http_proxy.host.name:
-                                                conn->host.name;
-  const char * const dispname = SSL_IS_PROXY()?
-                                  conn->http_proxy.host.dispname:
-                                  conn->host.dispname;
 #ifdef ENABLE_IPV6
   struct in6_addr addr;
 #else
@@ -1092,19 +1077,20 @@ CURLcode Curl_verifyhost(struct connectdata *conn,
   /* Verify that connection server matches info in X509 certificate at
      `beg'..`end'. */
 
-  if(!SSL_CONN_CONFIG(verifyhost))
+  if(!data->set.ssl.verifyhost)
     return CURLE_OK;
 
-  if(Curl_parseX509(&cert, beg, end))
+  if(!beg)
     return CURLE_PEER_FAILED_VERIFICATION;
+  Curl_parseX509(&cert, beg, end);
 
   /* Get the server IP address. */
 #ifdef ENABLE_IPV6
-  if(conn->bits.ipv6_ip && Curl_inet_pton(AF_INET6, hostname, &addr))
+  if(conn->bits.ipv6_ip && Curl_inet_pton(AF_INET6, conn->host.name, &addr))
     addrlen = sizeof(struct in6_addr);
   else
 #endif
-  if(Curl_inet_pton(AF_INET, hostname, &addr))
+  if(Curl_inet_pton(AF_INET, conn->host.name, &addr))
     addrlen = sizeof(struct in_addr);
 
   /* Process extensions. */
@@ -1122,12 +1108,12 @@ CURLcode Curl_verifyhost(struct connectdata *conn,
       /* Check all GeneralNames. */
       for(q = elem.beg; matched != 1 && q < elem.end;) {
         q = Curl_getASN1Element(&name, q, elem.end);
-        switch(name.tag) {
+        switch (name.tag) {
         case 2: /* DNS name. */
           len = utf8asn1str(&dnsname, CURL_ASN1_IA5_STRING,
                             name.beg, name.end);
           if(len > 0 && (size_t)len == strlen(dnsname))
-            matched = Curl_cert_hostcheck(dnsname, hostname);
+            matched = Curl_cert_hostcheck(dnsname, conn->host.name);
           else
             matched = 0;
           free(dnsname);
@@ -1142,15 +1128,15 @@ CURLcode Curl_verifyhost(struct connectdata *conn,
     }
   }
 
-  switch(matched) {
+  switch (matched) {
   case 1:
     /* an alternative name matched the server hostname */
-    infof(data, "\t subjectAltName: %s matched\n", dispname);
+    infof(data, "\t subjectAltName: %s matched\n", conn->host.dispname);
     return CURLE_OK;
   case 0:
     /* an alternative name field existed, but didn't match and then
        we MUST fail */
-    infof(data, "\t subjectAltName does not match %s\n", dispname);
+    infof(data, "\t subjectAltName does not match %s\n", conn->host.dispname);
     return CURLE_PEER_FAILED_VERIFICATION;
   }
 
@@ -1182,14 +1168,14 @@ CURLcode Curl_verifyhost(struct connectdata *conn,
     }
     if(strlen(dnsname) != (size_t) len)         /* Nul byte in string ? */
       failf(data, "SSL: illegal cert name field");
-    else if(Curl_cert_hostcheck((const char *) dnsname, hostname)) {
+    else if(Curl_cert_hostcheck((const char *) dnsname, conn->host.name)) {
       infof(data, "\t common name: %s (matched)\n", dnsname);
       free(dnsname);
       return CURLE_OK;
     }
     else
       failf(data, "SSL: certificate subject name '%s' does not match "
-            "target host name '%s'", dnsname, dispname);
+            "target host name '%s'", dnsname, conn->host.dispname);
     free(dnsname);
   }
 
index ce40297..0f2b930 100644 (file)
@@ -8,7 +8,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -34,9 +34,6 @@
  * Constants.
  */
 
-/* Largest supported ASN.1 structure. */
-#define CURL_ASN1_MAX                   ((size_t) 0x40000)      /* 256K */
-
 /* ASN.1 classes. */
 #define CURL_ASN1_UNIVERSAL             0
 #define CURL_ASN1_APPLICATION           1
@@ -120,15 +117,16 @@ typedef struct {
  * Prototypes.
  */
 
-const char *Curl_getASN1Element(curl_asn1Element *elem,
-                                 const char *beg, const char *end);
-const char *Curl_ASN1tostr(curl_asn1Element *elem, int type);
-const char *Curl_DNtostr(curl_asn1Element *dn);
-int Curl_parseX509(curl_X509certificate *cert,
-                   const char *beg, const char *end);
-CURLcode Curl_extract_certinfo(struct connectdata *conn, int certnum,
-                               const char *beg, const char *end);
-CURLcode Curl_verifyhost(struct connectdata *conn,
-                         const char *beg, const char *end);
+const char * Curl_getASN1Element(curl_asn1Element * elem,
+                                 const char * beg, const char * end);
+const char * Curl_ASN1tostr(curl_asn1Element * elem, int type);
+const char * Curl_DNtostr(curl_asn1Element * dn);
+void Curl_parseX509(curl_X509certificate * cert,
+                    const char * beg, const char * end);
+CURLcode Curl_extract_certinfo(struct connectdata * conn, int certnum,
+                               const char * beg, const char * end);
+CURLcode Curl_verifyhost(struct connectdata * conn,
+                         const char * beg, const char * end);
+
 #endif /* USE_GSKIT or USE_NSS or USE_GNUTLS or USE_CYASSL or USE_SCHANNEL */
 #endif /* HEADER_CURL_X509ASN1_H */
index a736cf9..2ad8be8 100644 (file)
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-2"
+VERSION="2.4.6 Debian-2.4.6-1"
 package_revision=2.4.6
 
 
@@ -1977,7 +1977,7 @@ func_version ()
 # End:
 
 # Set a version string.
-scriptversion='(GNU libtool) 2.4.6'
+scriptversion='(GNU libtool) 2.4.6 Debian-2.4.6-1'
 
 
 # func_echo ARG...
@@ -2068,7 +2068,7 @@ include the following information:
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname $scriptversion Debian-2.4.6-2
+       version:        $progname $scriptversion
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
index 3219baf..6ecd323 100644 (file)
@@ -64,7 +64,7 @@ AC_DEFUN([CURL_CHECK_COMPILER], [
 ***
 *** Whatever settings are present in CFLAGS will be used for this run.
 ***
-*** If you wish to help the curl project to better support your compiler
+*** 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: https://cool.haxx.se/mailman/listinfo/curl-library/
 ***
index dde7fe2..ee7a252 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 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
@@ -4739,15 +4739,12 @@ AC_DEFUN([CURL_CHECK_FUNC_POLL], [
   tst_allow_poll="unknown"
   #
   case $host_os in
-    darwin*|interix*)
+    darwin[[123456789]].*|darwin10.*|darwin11.*|darwin12.*|interix*)
       dnl poll() does not work on these platforms
       dnl Interix: "does provide poll(), but the implementing developer must
       dnl have been in a bad mood, because poll() only works on the /proc
       dnl filesystem here"
-      dnl macOS: poll() first didn't exist, then was broken until fixed in 10.9
-      dnl only to break again in 10.12.
       curl_disallow_poll="yes"
-      tst_compi_poll="no"
       ;;
   esac
   #
@@ -4806,27 +4803,11 @@ AC_DEFUN([CURL_CHECK_FUNC_POLL], [
       AC_LANG_PROGRAM([[
         $curl_includes_stdlib
         $curl_includes_poll
-        $curl_includes_time
       ]],[[
-        /* detect the original poll() breakage */
         if(0 != poll(0, 0, 10))
           exit(1); /* fail */
-        else {
-          /* detect the 10.12 poll() breakage */
-          struct timeval before, after;
-          int rc;
-          size_t us;
-
-          gettimeofday(&before, NULL);
-          rc = poll(NULL, 0, 500);
-          gettimeofday(&after, NULL);
-
-          us = (after.tv_sec - before.tv_sec) * 1000000 +
-            (after.tv_usec - before.tv_usec);
-
-          if(us < 400000)
-            exit(1);
-        }
+        else
+          exit(0);
       ]])
     ],[
       AC_MSG_RESULT([yes])
diff --git a/maketgz b/maketgz
index a68a9e9..aede6d0 100755 (executable)
--- a/maketgz
+++ b/maketgz
@@ -9,7 +9,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -31,11 +31,6 @@ if [ -z "$version" ]; then
   exit
 fi
 
-if [ "xonly" = "x$2" ]; then
-    echo "Setup version number only!"
-    only=1
-fi
-
 libversion="$version"
 
 # we make curl the same version as libcurl
@@ -45,50 +40,37 @@ major=`echo $libversion |cut -d. -f1 | sed -e "s/[^0-9]//g"`
 minor=`echo $libversion |cut -d. -f2 | sed -e "s/[^0-9]//g"`
 patch=`echo $libversion |cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g"`
 
-if test -z "$patch"; then
-    echo "invalid version number? needs to be z.y.z"
-    exit
-fi
-
 numeric=`perl -e 'printf("%02x%02x%02x\n", '"$major, $minor, $patch);"`
 
 HEADER=include/curl/curlver.h
 CHEADER=src/tool_version.h
-PLIST=lib/libcurl.plist
-
-if test -z "$only"; then
-    ext=".dist"
-    # when not setting up version numbers locally
-    for a in $HEADER $CHEADER $PLIST; do
-        cp $a "$a$ext"
-    done
-    HEADER="$HEADER$ext"
-    CHEADER="$CHEADER$ext"
-    PLIST="$PLIST$ext"
-fi
 
 # requires a date command that knows -u for UTC time zone
 datestamp=`LC_TIME=C date -u`
 
 # Replace version number in header file:
-sed -i -e 's/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION "'$libversion'"/g' \
+sed -e 's/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION "'$libversion'"/g' \
     -e 's/^#define LIBCURL_VERSION_NUM .*/#define LIBCURL_VERSION_NUM 0x'$numeric'/g' \
     -e 's/^#define LIBCURL_VERSION_MAJOR .*/#define LIBCURL_VERSION_MAJOR '$major'/g' \
     -e 's/^#define LIBCURL_VERSION_MINOR .*/#define LIBCURL_VERSION_MINOR '$minor'/g' \
     -e 's/^#define LIBCURL_VERSION_PATCH .*/#define LIBCURL_VERSION_PATCH '$patch'/g' \
     -e "s/^#define LIBCURL_TIMESTAMP .*/#define LIBCURL_TIMESTAMP \"$datestamp\"/g" \
- $HEADER
+ $HEADER >$HEADER.dist
 
 # Replace version number in header file:
-sed -i 's/#define CURL_VERSION .*/#define CURL_VERSION "'$curlversion'"/g' $CHEADER
+sed 's/#define CURL_VERSION .*/#define CURL_VERSION "'$curlversion'"/g' $CHEADER >$CHEADER.dist
 
-# Replace version number in plist file:
-sed -i "s/7\.12\.3/$libversion/g" $PLIST
+# 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
+done
 
-if test -n "$only"; then
-    # done!
-    exit;
-fi
+# Replace version number in plist file:
+PLIST=lib/libcurl.plist
+sed "s/7\.12\.3/$libversion/g" $PLIST > $PLIST.dist
 
 echo "curl version $curlversion"
 echo "libcurl version $libversion"
@@ -133,7 +115,16 @@ fi
 
 ############################################################################
 #
-# Update the IDE files
+# Make sure we have updated HTML versions of all man pages:
+#
+echo "make html"
+make -s html
+
+# And the PDF versions
+echo "make pdf"
+make -s pdf
+
+# And the IDE files
 echo "make vc-ide"
 make -s vc-ide
 
index 0c98cbe..2d8c366 100644 (file)
@@ -400,9 +400,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/AIX/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/AIX/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/AIX/Makefile
+         $(AUTOMAKE) --foreign packages/AIX/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 9fd169a..4aa2757 100644 (file)
@@ -339,9 +339,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/AIX/RPM/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/AIX/RPM/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/AIX/RPM/Makefile
+         $(AUTOMAKE) --foreign packages/AIX/RPM/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 51615ad..790beb8 100644 (file)
@@ -29,5 +29,5 @@ Default is to build with ssl support.
 Lastly, the spec file expects the Curl source distribution file to be
 in .tar.bz2 format.
 
-The nifty curl header of this README is a ripoff of the vms/readme file.
+The nifty cURL header of this README is a ripoff of the vms/readme file.
 
index e069ce6..85b611c 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Common defines for curl (djgpp/Watt-32)
 #
-# Assumes you've unpacked curl with long-file names
+# Assumes you've unpacked cURL with long-file names
 # I.e use "set LFN=y" before untaring on Win9x/XP.
 # Requires sed, yacc, rm and the usual stuff.
 #
index 363d430..348ee2a 100644 (file)
@@ -399,9 +399,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/Linux/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Linux/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/Linux/Makefile
+         $(AUTOMAKE) --foreign packages/Linux/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index b6f76f8..12e950d 100644 (file)
@@ -340,9 +340,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/Linux/RPM/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Linux/RPM/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/Linux/RPM/Makefile
+         $(AUTOMAKE) --foreign packages/Linux/RPM/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 77a0084..7e62397 100644 (file)
@@ -431,9 +431,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/Makefile
+         $(AUTOMAKE) --foreign packages/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 92eff4e..24cf39e 100644 (file)
@@ -63,7 +63,6 @@ designer. CCSID 0 can be used to select the current job's CCSID.
 _ curl_easy_setopt_ccsid()
   Variable arguments are a string pointer and a CCSID (unsigned int) for
 options:
-        CURLOPT_ABSTRACT_UNIX_SOCKET
         CURLOPT_CAINFO
         CURLOPT_CAPATH
         CURLOPT_COOKIE
@@ -77,39 +76,25 @@ options:
         CURLOPT_DNS_SERVERS
         CURLOPT_EGDSOCKET
         CURLOPT_ENCODING
-        CURLOPT_FTPPORT
         CURLOPT_FTP_ACCOUNT
         CURLOPT_FTP_ALTERNATIVE_TO_USER
+        CURLOPT_FTPPORT
         CURLOPT_INTERFACE
         CURLOPT_ISSUERCERT
         CURLOPT_KEYPASSWD
         CURLOPT_KRBLEVEL
         CURLOPT_LOGIN_OPTIONS
-        CURLOPT_MAIL_AUTH
         CURLOPT_MAIL_FROM
+        CURLOPT_MAIL_AUTH
         CURLOPT_NETRC_FILE
         CURLOPT_NOPROXY
         CURLOPT_PASSWORD
         CURLOPT_PINNEDPUBLICKEY
-        CURLOPT_PRE_PROXY
         CURLOPT_PROXY
         CURLOPT_PROXYPASSWORD
         CURLOPT_PROXYUSERNAME
         CURLOPT_PROXYUSERPWD
-        CURLOPT_PROXY_CAINFO
-        CURLOPT_PROXY_CAPATH
-        CURLOPT_PROXY_CRLFILE
-        CURLOPT_PROXY_KEYPASSWD
-        CURLOPT_PROXY_PINNEDPUBLICKEY
         CURLOPT_PROXY_SERVICE_NAME
-        CURLOPT_PROXY_SSLCERT
-        CURLOPT_PROXY_SSLCERTTYPE
-        CURLOPT_PROXY_SSLKEY
-        CURLOPT_PROXY_SSLKEYTYPE
-        CURLOPT_PROXY_SSL_CIPHER_LIST
-        CURLOPT_PROXY_TLSAUTH_PASSWORD
-        CURLOPT_PROXY_TLSAUTH_TYPE
-        CURLOPT_PROXY_TLSAUTH_USERNAME
         CURLOPT_RANDOM_FILE
         CURLOPT_RANGE
         CURLOPT_REFERER
@@ -124,10 +109,10 @@ options:
         CURLOPT_SSH_PUBLIC_KEYFILE
         CURLOPT_SSLCERT
         CURLOPT_SSLCERTTYPE
+        CURLOPT_SSL_CIPHER_LIST
         CURLOPT_SSLENGINE
         CURLOPT_SSLKEY
         CURLOPT_SSLKEYTYPE
-        CURLOPT_SSL_CIPHER_LIST
         CURLOPT_TLSAUTH_PASSWORD
         CURLOPT_TLSAUTH_TYPE
         CURLOPT_TLSAUTH_USERNAME
@@ -175,7 +160,6 @@ use:
         CURLINFO_PRIMARY_IP
         CURLINFO_RTSP_SESSION_ID
         CURLINFO_LOCAL_IP
-        CURLINFO_SCHEME
   Likewise, the following options are followed by a struct curl_slist * * and a
 CCSID.
         CURLINFO_SSL_ENGINES
index c5ac3d3..3b08bef 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -615,7 +615,7 @@ curl_easy_getinfo_ccsid(CURL * curl, CURLINFO info, ...)
   struct curl_certinfo * cipf;
   struct curl_certinfo * cipt;
 
-  /* WARNING: unlike curl_easy_getinfo(), the strings returned by this
+  /* WARNING: unlike curl_easy_get_info(), the strings returned by this
      procedure have to be free'ed. */
 
   data = (struct Curl_easy *) curl;
@@ -1135,7 +1135,6 @@ curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
 
   switch (tag) {
 
-  case CURLOPT_ABSTRACT_UNIX_SOCKET:
   case CURLOPT_CAINFO:
   case CURLOPT_CAPATH:
   case CURLOPT_COOKIE:
@@ -1148,39 +1147,25 @@ curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
   case CURLOPT_DNS_SERVERS:
   case CURLOPT_EGDSOCKET:
   case CURLOPT_ENCODING:
-  case CURLOPT_FTPPORT:
   case CURLOPT_FTP_ACCOUNT:
   case CURLOPT_FTP_ALTERNATIVE_TO_USER:
+  case CURLOPT_FTPPORT:
   case CURLOPT_INTERFACE:
   case CURLOPT_ISSUERCERT:
   case CURLOPT_KEYPASSWD:
   case CURLOPT_KRBLEVEL:
   case CURLOPT_LOGIN_OPTIONS:
-  case CURLOPT_MAIL_AUTH:
   case CURLOPT_MAIL_FROM:
+  case CURLOPT_MAIL_AUTH:
   case CURLOPT_NETRC_FILE:
   case CURLOPT_NOPROXY:
   case CURLOPT_PASSWORD:
   case CURLOPT_PINNEDPUBLICKEY:
-  case CURLOPT_PRE_PROXY:
   case CURLOPT_PROXY:
   case CURLOPT_PROXYPASSWORD:
   case CURLOPT_PROXYUSERNAME:
   case CURLOPT_PROXYUSERPWD:
-  case CURLOPT_PROXY_CAINFO:
-  case CURLOPT_PROXY_CAPATH:
-  case CURLOPT_PROXY_CRLFILE:
-  case CURLOPT_PROXY_KEYPASSWD:
-  case CURLOPT_PROXY_PINNEDPUBLICKEY:
   case CURLOPT_PROXY_SERVICE_NAME:
-  case CURLOPT_PROXY_SSLCERT:
-  case CURLOPT_PROXY_SSLCERTTYPE:
-  case CURLOPT_PROXY_SSLKEY:
-  case CURLOPT_PROXY_SSLKEYTYPE:
-  case CURLOPT_PROXY_SSL_CIPHER_LIST:
-  case CURLOPT_PROXY_TLSAUTH_PASSWORD:
-  case CURLOPT_PROXY_TLSAUTH_TYPE:
-  case CURLOPT_PROXY_TLSAUTH_USERNAME:
   case CURLOPT_RANDOM_FILE:
   case CURLOPT_RANGE:
   case CURLOPT_REFERER:
@@ -1195,10 +1180,10 @@ curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
   case CURLOPT_SSH_PUBLIC_KEYFILE:
   case CURLOPT_SSLCERT:
   case CURLOPT_SSLCERTTYPE:
+  case CURLOPT_SSL_CIPHER_LIST:
   case CURLOPT_SSLENGINE:
   case CURLOPT_SSLKEY:
   case CURLOPT_SSLKEYTYPE:
-  case CURLOPT_SSL_CIPHER_LIST:
   case CURLOPT_TLSAUTH_PASSWORD:
   case CURLOPT_TLSAUTH_TYPE:
   case CURLOPT_TLSAUTH_USERNAME:
index c6224a7..1e8a93d 100644 (file)
      d                 c                   X'00080000'
      d CURL_VERSION_PSL...
      d                 c                   X'00100000'
-     d CURL_VERSION_HTTPS_PROXY...
-     d                 c                   X'00200000'
       *
      d CURL_HTTPPOST_FILENAME...
      d                 c                   X'00000001'
      d                 c                   5
      d CURL_SSLVERSION_TLSv1_2...
      d                 c                   6
-     d CURL_SSLVERSION_TLSv1_3...
-     d                 c                   7
       *
      d CURL_TLSAUTH_NONE...
      d                 c                   0
      d                 c                   6
      d  CURLE_COULDNT_CONNECT...
      d                 c                   7
-     d  CURLE_WEIRD_SERVER_REPLY...
-     d                 c                   8
      d  CURLE_FTP_WEIRD_SERVER_REPLY...
      d                 c                   8
      d  CURLE_REMOTE_ACCESS_DENIED...
      d                 c                   0
      d  CURLPROXY_HTTP_1_0...
      d                 c                   1
-     d  CURLPROXY_HTTPS...
-     d                 c                   2
      d  CURLPROXY_SOCKS4...
      d                 c                   4
      d  CURLPROXY_SOCKS5...
      d                 c                   10243
      d  CURLOPT_TCP_FASTOPEN...
      d                 c                   00244
-     d  CURLOPT_KEEP_SENDING_ON_ERROR...
-     d                 c                   00245
-     d  CURLOPT_PROXY_CAINFO...
-     d                 c                   10246
-     d  CURLOPT_PROXY_CAPATH...
-     d                 c                   10247
-     d  CURLOPT_PROXY_SSL_VERIFYPEER...
-     d                 c                   00248
-     d  CURLOPT_PROXY_SSL_VERIFYHOST...
-     d                 c                   00249
-     d  CURLOPT_PROXY_SSLVERSION...
-     d                 c                   00250
-     d  CURLOPT_PROXY_TLSAUTH_USERNAME...
-     d                 c                   10251
-     d  CURLOPT_PROXY_TLSAUTH_PASSWORD...
-     d                 c                   10252
-     d  CURLOPT_PROXY_TLSAUTH_TYPE...
-     d                 c                   10253
-     d  CURLOPT_PROXY_SSLCERT...
-     d                 c                   10254
-     d  CURLOPT_PROXY_SSLCERTTYPE...
-     d                 c                   10255
-     d  CURLOPT_PROXY_SSLKEY...
-     d                 c                   10256
-     d  CURLOPT_PROXY_SSLKEYTYPE...
-     d                 c                   10257
-     d  CURLOPT_PROXY_KEYPASSWD...
-     d                 c                   10258
-     d  CURLOPT_PROXY_SSL_CIPHER_LIST...
-     d                 c                   10259
-     d  CURLOPT_PROXY_CRLFILE...
-     d                 c                   10260
-     d  CURLOPT_PROXY_SSL_OPTIONS...
-     d                 c                   00261
-     d  CURLOPT_PRE_PROXY...
-     d                 c                   10262
-     d  CURLOPT_PROXY_PINNEDPUBLICKEY...
-     d                 c                   10263
-     d  CURLOPT_ABSTRACT_UNIX_SOCKET...
-     d                 c                   10264
       *
       /if not defined(CURL_NO_OLDIES)
      d  CURLOPT_FILE   c                   10001
      d                 c                   X'0040002D'
      d  CURLINFO_HTTP_VERSION...                                                CURLINFO_LONG + 46
      d                 c                   X'0020002E'
-     d  CURLINFO_PROXY_SSL_VERIFYRESULT...                                      CURLINFO_LONG + 47
-     d                 c                   X'0020002F'
-     d  CURLINFO_PROTOCOL...                                                    CURLINFO_LONG + 48
-     d                 c                   X'00200030'
-     d  CURLINFO_SCHEME...                                                      CURLINFO_STRING + 49
-     d                 c                   X'00100031'
       *
      d  CURLINFO_HTTP_CODE...                                                   Old ...RESPONSE_CODE
      d                 c                   X'00200002'
index 29ff622..2882ad7 100644 (file)
@@ -346,9 +346,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/Solaris/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Solaris/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/Solaris/Makefile
+         $(AUTOMAKE) --foreign packages/Solaris/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 4b304a3..28498ce 100644 (file)
@@ -1,5 +1,5 @@
 //
-// curl network retrieval client
+// cURL network retrieval client
 //
 
 TARGET        curl.exe
@@ -49,7 +49,7 @@ SOURCE \
 
 SOURCEPATH  ../../../lib
 SOURCE \
-    strcase.c nonblock.c
+    rawstr.c nonblock.c
 
 USERINCLUDE ../../../src ../../../lib ../../../include/curl
 
index 6388bbd..f74b19b 100644 (file)
@@ -1,5 +1,5 @@
 //
-// libcurl.dll curl network retrieval client library
+// libcurl.dll cURL network retrieval client library
 //
 
 // Build-time options (uncomment these to enable)
@@ -31,7 +31,7 @@ SOURCE \
   http_negotiate.c inet_pton.c strtoofft.c strerror.c amigaos.c        \
   hostasyn.c hostip4.c hostip6.c hostsyn.c inet_ntop.c parsedate.c     \
   select.c vtls/gtls.c vtls/vtls.c tftp.c splay.c strdup.c socks.c     \
-  ssh.c vtls/nss.c strcase.c curl_addrinfo.c socks_gssapi.c             \
+  ssh.c vtls/nss.c rawstr.c curl_addrinfo.c socks_gssapi.c             \
   socks_sspi.c curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c    \
   pop3.c smtp.c pingpong.c rtsp.c curl_threads.c warnless.c hmac.c     \
   vtls/polarssl.c curl_rtmp.c openldap.c curl_gethostname.c gopher.c   \
index 2a701ca..ff23c2f 100644 (file)
@@ -400,9 +400,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/Win32/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Win32/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/Win32/Makefile
+         $(AUTOMAKE) --foreign packages/Win32/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 3ec4369..81f4dc5 100644 (file)
@@ -356,9 +356,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/Win32/cygwin/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Win32/cygwin/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/Win32/cygwin/Makefile
+         $(AUTOMAKE) --foreign packages/Win32/cygwin/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 60bb5e1..a0811de 100644 (file)
@@ -12,7 +12,7 @@ Dependencies:
   - Cygwin
   - OpenSSL 0.9.6b-2+ (*)
 
-  (*) curl can be built without SSL support, see below for details
+  (*) cURL can be built without SSL support, see below for details
 
 
 Canonical Homepage and Downloads:
@@ -41,7 +41,7 @@ Build Instructions (to recompile from the cygwin source tarball):
   (**) LibTool 1.4.2 had a bug related to cygwin's use of ".exe" extensions,
       such that "make install" blew up at curl.exe. See this URL for details:
          http://mail.gnu.org/pipermail/libtool/2001-September/005549.html
-      The copy of ltmain.sh that is distributed with curl includes this patch.
+      The copy of ltmain.sh that is distributed with cURL includes this patch.
 
   As of curl 7.9.1, the official source compiles (under Cygwin) and tests
     100% cleanly OOTB (Out Of The Box)
@@ -100,9 +100,9 @@ Packaging Instructions:
   requires: cygwin openssl
 
   @ curl-devel
-  sdesc: "(lib)curl headers, static libraries, developer docs and samples"
+  sdesc: "(lib)cURL headers, static libraries, developer docs and samples"
   ldesc: "curl-devel is the developer-oriented (non-run-time) parts
-  of the curl package. It includes header files, static libraries,
+  of the cURL package. It includes header files, static libraries,
   example source code snippets, and the libcurl man pages."
   category: Web Libs Devel
   requires: cygwin openssl curl
@@ -110,5 +110,5 @@ Packaging Instructions:
 
 Cygwin port maintained by:
   Kevin Roth <kproth @ users . sourceforge . net>
-  Questions about curl should be directed to curl-users@cool.haxx.se.
+  Questions about cURL should be directed to curl-users@cool.haxx.se.
   Questions about this cygwin package go to cygwin@cygwin.com.
index fad423c..d51fe55 100644 (file)
@@ -375,9 +375,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/vms/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/vms/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu packages/vms/Makefile
+         $(AUTOMAKE) --foreign packages/vms/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 424a382..2cb32ec 100644 (file)
@@ -57,8 +57,7 @@
 #define CURL_COULDNT_RESOLVE_PROXY 251756594
 #define CURL_COULDNT_RESOLVE_HOST 251756602
 #define CURL_COULDNT_CONNECT 251756610
-#define CURL_WEIRD_SERVER_REPLY 251756618
-#define CURL_FTP_WEIRD_SERVER_REPLY CURL_WEIRD_SERVER_REPLY
+#define CURL_FTP_WEIRD_SERVER_REPLY 251756618
 #define CURL_FTP_ACCESS_DENIED 251756626
 #define CURL_OBSOLETE10 251756634
 #define CURL_FTP_WEIRD_PASS_REPLY 251756642
index 492657c..7fd4483 100644 (file)
@@ -30,7 +30,7 @@ OBSOLETE4             <obsolete error code>
 COULDNT_RESOLVE_PROXY  <could not resolve proxy>
 COULDNT_RESOLVE_HOST   <could not resolve host>
 COULDNT_CONNECT                <could not connect>
-WEIRD_SERVER_REPLY     <weird server reply>
+FTP_WEIRD_SERVER_REPLY <FTP weird server reply>
 FTP_ACCESS_DENIED      <FTP access denied>
 OBSOLETE10             <obsolete error code>
 FTP_WEIRD_PASS_REPLY   <FTP weird PASS reply>
index db5baad..e192c07 100644 (file)
@@ -34,7 +34,6 @@
        ,"COULDNT_RESOLVE_PROXY" EQUALS %X0F018032 PREFIX "CURL" TAG ""
        ,"COULDNT_RESOLVE_HOST" EQUALS %X0F01803A PREFIX "CURL" TAG ""
        ,"COULDNT_CONNECT" EQUALS %X0F018042  PREFIX "CURL" TAG ""
-       ,"WEIRD_SERVER_REPLY" EQUALS %X0F01804A PREFIX "CURL" TAG ""
        ,"FTP_WEIRD_SERVER_REPLY" EQUALS %X0F01804A PREFIX "CURL" TAG ""
        ,"FTP_ACCESS_DENIED" EQUALS %X0F018052 PREFIX "CURL" TAG ""
        ,"OBSOLETE10"   EQUALS %X0F01805A     PREFIX "CURL" TAG ""
index b7ff7a0..3aef9cf 100644 (file)
@@ -59,7 +59,7 @@ static const long vms_cond[] =
        CURL_COULDNT_RESOLVE_PROXY,
        CURL_COULDNT_RESOLVE_HOST,
        CURL_COULDNT_CONNECT,
-       CURL_WEIRD_SERVER_REPLY,
+       CURL_FTP_WEIRD_SERVER_REPLY,
        CURL_FTP_ACCESS_DENIED,
        CURL_OBSOLETE10,
        CURL_FTP_WEIRD_PASS_REPLY,
index add4be9..b7e6083 100644 (file)
@@ -416,7 +416,7 @@ $       link'ldebug'/exe=[.src]curl.exe/dsf=[.src]curl.dsf -
            [.src]curl-tool_urlglob.o, [.src]curl-tool_util.o, -
            [.src]curl-tool_vms.o, [.src]curl-tool_writeenv.o, -
            [.src]curl-tool_writeout.o, [.src]curl-tool_xattr.o, -
-           [.src]curl-strtoofft.o, [.src]curl-strdup.o, [.src]curl-strcase.o, -
+           [.src]curl-strtoofft.o, [.src]curl-strdup.o, [.src]curl-rawstr.o, -
            [.src]curl-nonblock.o, gnv_packages_vms:curlmsg.obj,-
            sys$input:/opt
 gnv$libcurl/share
@@ -428,7 +428,7 @@ $   curl_dsf = "[.src]curl.dsf"
 $   curl_main = "[.packages.vms.''arch_name']tool_main.obj"
 $   curl_src = "[.packages.vms.''arch_name']curlsrc.olb"
 $   curl_lib = "[.packages.vms.''arch_name']curllib.olb"
-$   strcase = "strcase"
+$   rawstr = "rawstr"
 $   nonblock = "nonblock"
 $   warnless = "warnless"
 $!
@@ -436,7 +436,7 @@ $!  Extended parse style requires special quoting
 $!
 $   if (arch_name .nes. "VAX") .and. (parse_style .eqs. "EXTENDED")
 $   then
-$       strcase = """strcase"""
+$       rawstr = """rawstr"""
 $       nonblock = """nonblock"""
 $       warnless = """warnless"""
 $   endif
@@ -446,7 +446,7 @@ $       define/user gnv$libcurl 'gnv_libcurl_share'
 $       link'ldebug'/exe='curl_exe'/dsf='curl_dsf' -
            'curl_main','curl_src'/lib, -
            'curl_lib'/library/include=-
-           ('strcase','nonblock','warnless'),-
+           ('rawstr','nonblock','warnless'),-
            gnv_packages_vms:curlmsg.obj,-
            sys$input:/opt
 gnv$libcurl/share
index 5f116a5..1b24580 100644 (file)
@@ -83,13 +83,13 @@ curl_startup.com        A procedure run at VMS startup to install the
                         libcurl shared image and to set up the needed
                         logical names.
 
-curlmsg.h               C header defining curl status code macros.
+curlmsg.h               C header defining cURL status code macros.
 
 curlmsg.msg             Error message source for curlmsg.h and curlmsg.sdl.
 
-curlmsg.sdl             SDL source defining curl status code constants.
+curlmsg.sdl             SDL source defining cURL status code constants.
 
-curlmsg_vms.h           Mapping of curl status codes to VMS-form codes.
+curlmsg_vms.h           Mapping of cURL status codes to VMS-form codes.
 
 generate_config_vms_h_curl.com
                         DCL procedure to generate the curl specific
@@ -115,9 +115,9 @@ gnv_link_curl.com       Links the libcurl shared image and then links a curl
 macro32_exactcase.patch The patch file needed to modify VAX Macro32 to be
                         case sensitive and case preserving.
 
-Makefile.am             curl kit file list for this directory.
+Makefile.am             cURL kit file list for this directory.
 
-Makefile.in             curl kit makefile source for this directory.
+Makefile.in             cURL kit makefile source for this directory.
 
 make_gnv_curl_install.sh
                         Script to do a make install using GNV after running
index 354875b..4353407 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 /* This file should be incremented for each ECO that is kit */
-/* for a specific curl x.y-z release. */
+/* for a specific cURL x.y-z release. */
 /* When any part of x.y-z is incremented, the ECO should be set back to 0 */
 
 #ifndef _VMS_ECO_LEVEL_H
index 974f70a..d821056 100644 (file)
     <ClCompile Include="..\..\..\..\lib\pipeline.c" />\r
     <ClCompile Include="..\..\..\..\lib\pop3.c" />\r
     <ClCompile Include="..\..\..\..\lib\progress.c" />\r
-    <ClCompile Include="..\..\..\..\lib\rand.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\speedcheck.c" />\r
     <ClCompile Include="..\..\..\..\lib\splay.c" />\r
     <ClCompile Include="..\..\..\..\lib\ssh.c" />\r
-    <ClCompile Include="..\..\..\..\lib\strcase.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
     <ClInclude Include="..\..\..\..\lib\pipeline.h" />\r
     <ClInclude Include="..\..\..\..\lib\pop3.h" />\r
     <ClInclude Include="..\..\..\..\lib\progress.h" />\r
-    <ClInclude Include="..\..\..\..\lib\rand.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\speedcheck.h" />\r
     <ClInclude Include="..\..\..\..\lib\splay.h" />\r
     <ClInclude Include="..\..\..\..\lib\ssh.h" />\r
-    <ClInclude Include="..\..\..\..\lib\strcase.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
index 7f7da00..6272116 100644 (file)
   </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
     <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
index 9fc6ada..681151d 100644 (file)
     <ClCompile Include="..\..\..\..\lib\pipeline.c" />\r
     <ClCompile Include="..\..\..\..\lib\pop3.c" />\r
     <ClCompile Include="..\..\..\..\lib\progress.c" />\r
-    <ClCompile Include="..\..\..\..\lib\rand.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\speedcheck.c" />\r
     <ClCompile Include="..\..\..\..\lib\splay.c" />\r
     <ClCompile Include="..\..\..\..\lib\ssh.c" />\r
-    <ClCompile Include="..\..\..\..\lib\strcase.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
     <ClInclude Include="..\..\..\..\lib\pipeline.h" />\r
     <ClInclude Include="..\..\..\..\lib\pop3.h" />\r
     <ClInclude Include="..\..\..\..\lib\progress.h" />\r
-    <ClInclude Include="..\..\..\..\lib\rand.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\speedcheck.h" />\r
     <ClInclude Include="..\..\..\..\lib\splay.h" />\r
     <ClInclude Include="..\..\..\..\lib\ssh.h" />\r
-    <ClInclude Include="..\..\..\..\lib\strcase.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
index bd57533..7d27f4e 100644 (file)
   </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
     <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
index 2b30619..8f770c1 100644 (file)
     <ClCompile Include="..\..\..\..\lib\pipeline.c" />\r
     <ClCompile Include="..\..\..\..\lib\pop3.c" />\r
     <ClCompile Include="..\..\..\..\lib\progress.c" />\r
-    <ClCompile Include="..\..\..\..\lib\rand.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\speedcheck.c" />\r
     <ClCompile Include="..\..\..\..\lib\splay.c" />\r
     <ClCompile Include="..\..\..\..\lib\ssh.c" />\r
-    <ClCompile Include="..\..\..\..\lib\strcase.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
     <ClInclude Include="..\..\..\..\lib\pipeline.h" />\r
     <ClInclude Include="..\..\..\..\lib\pop3.h" />\r
     <ClInclude Include="..\..\..\..\lib\progress.h" />\r
-    <ClInclude Include="..\..\..\..\lib\rand.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\speedcheck.h" />\r
     <ClInclude Include="..\..\..\..\lib\splay.h" />\r
     <ClInclude Include="..\..\..\..\lib\ssh.h" />\r
-    <ClInclude Include="..\..\..\..\lib\strcase.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
index 7ab9663..28a8319 100644 (file)
   </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
     <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
index edeef6b..5182711 100644 (file)
     <ClCompile Include="..\..\..\..\lib\pipeline.c" />\r
     <ClCompile Include="..\..\..\..\lib\pop3.c" />\r
     <ClCompile Include="..\..\..\..\lib\progress.c" />\r
-    <ClCompile Include="..\..\..\..\lib\rand.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\speedcheck.c" />\r
     <ClCompile Include="..\..\..\..\lib\splay.c" />\r
     <ClCompile Include="..\..\..\..\lib\ssh.c" />\r
-    <ClCompile Include="..\..\..\..\lib\strcase.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
     <ClInclude Include="..\..\..\..\lib\pipeline.h" />\r
     <ClInclude Include="..\..\..\..\lib\pop3.h" />\r
     <ClInclude Include="..\..\..\..\lib\progress.h" />\r
-    <ClInclude Include="..\..\..\..\lib\rand.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\speedcheck.h" />\r
     <ClInclude Include="..\..\..\..\lib\splay.h" />\r
     <ClInclude Include="..\..\..\..\lib\ssh.h" />\r
-    <ClInclude Include="..\..\..\..\lib\strcase.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
index 6960a7b..1b9eb0b 100644 (file)
   </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
     <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
index 88ac2b3..4071c1f 100644 (file)
@@ -1014,7 +1014,7 @@ SOURCE=..\..\..\..\lib\progress.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\rand.c\r
+SOURCE=..\..\..\..\lib\rawstr.c\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -1074,11 +1074,11 @@ SOURCE=..\..\..\..\lib\ssh.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\strcase.c\r
+SOURCE=..\..\..\..\lib\strdup.c\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\strdup.c\r
+SOURCE=..\..\..\..\lib\strequal.c\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -1514,7 +1514,7 @@ SOURCE=..\..\..\..\lib\progress.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\rand.h\r
+SOURCE=..\..\..\..\lib\rawstr.h\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -1574,11 +1574,11 @@ SOURCE=..\..\..\..\lib\ssh.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\strcase.h\r
+SOURCE=..\..\..\..\lib\strdup.h\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\strdup.h\r
+SOURCE=..\..\..\..\lib\strequal.h\r
 # End Source File\r
 # Begin Source File\r
 \r
index bdd7b94..81101b4 100644 (file)
@@ -683,6 +683,10 @@ SOURCE=..\..\..\..\lib\nonblock.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\lib\rawstr.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\lib\strtoofft.c\r
 # End Source File\r
 # Begin Source File\r
@@ -867,6 +871,10 @@ SOURCE=..\..\..\..\lib\nonblock.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\lib\rawstr.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\lib\strtoofft.h\r
 # End Source File\r
 # Begin Source File\r
index 3c52fed..b2b3554 100644 (file)
                                RelativePath="..\..\..\..\lib\progress.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.c">\r
+                               RelativePath="..\..\..\..\lib\rawstr.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\rtsp.c">\r
                                RelativePath="..\..\..\..\lib\ssh.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.c">\r
+                               RelativePath="..\..\..\..\lib\strdup.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.c">\r
+                               RelativePath="..\..\..\..\lib\strequal.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\strerror.c">\r
                                RelativePath="..\..\..\..\lib\progress.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.h">\r
+                               RelativePath="..\..\..\..\lib\rawstr.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\rtsp.h">\r
                                RelativePath="..\..\..\..\lib\ssh.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.h">\r
+                               RelativePath="..\..\..\..\lib\strdup.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.h">\r
+                               RelativePath="..\..\..\..\lib\strequal.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\strerror.h">\r
index b9aeca7..48a0289 100644 (file)
                                RelativePath="..\..\..\..\lib\nonblock.c">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.c">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\nonblock.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.h">\r
                        </File>\r
                        <File\r
index ac1d1ef..7fae273 100644 (file)
                                RelativePath="..\..\..\..\lib\progress.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.c">\r
+                               RelativePath="..\..\..\..\lib\rawstr.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\rtsp.c">\r
                                RelativePath="..\..\..\..\lib\ssh.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.c">\r
+                               RelativePath="..\..\..\..\lib\strdup.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.c">\r
+                               RelativePath="..\..\..\..\lib\strequal.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\strerror.c">\r
                                RelativePath="..\..\..\..\lib\progress.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.h">\r
+                               RelativePath="..\..\..\..\lib\rawstr.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\rtsp.h">\r
                                RelativePath="..\..\..\..\lib\ssh.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.h">\r
+                               RelativePath="..\..\..\..\lib\strdup.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.h">\r
+                               RelativePath="..\..\..\..\lib\strequal.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\strerror.h">\r
index 4975ac5..ee74018 100644 (file)
                                RelativePath="..\..\..\..\lib\nonblock.c">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.c">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\nonblock.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.h">\r
                        </File>\r
                        <File\r
index 92ade2d..7418694 100644 (file)
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.c"\r
+                               RelativePath="..\..\..\..\lib\rawstr.c"\r
                        >\r
                        </File>\r
                        <File\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.c"\r
+                               RelativePath="..\..\..\..\lib\strdup.c"\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.c"\r
+                               RelativePath="..\..\..\..\lib\strequal.c"\r
                        >\r
                        </File>\r
                        <File\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.h"\r
+                               RelativePath="..\..\..\..\lib\rawstr.h"\r
                        >\r
                        </File>\r
                        <File\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.h"\r
+                               RelativePath="..\..\..\..\lib\strdup.h"\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.h"\r
+                               RelativePath="..\..\..\..\lib\strequal.h"\r
                        >\r
                        </File>\r
                        <File\r
index 800ad64..5933711 100644 (file)
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.c"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.h"\r
                        >\r
                        </File>\r
index 1c4f9df..b16ef68 100644 (file)
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.c"\r
+                               RelativePath="..\..\..\..\lib\rawstr.c"\r
                        >\r
                        </File>\r
                        <File\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.c"\r
+                               RelativePath="..\..\..\..\lib\strdup.c"\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.c"\r
+                               RelativePath="..\..\..\..\lib\strequal.c"\r
                        >\r
                        </File>\r
                        <File\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\rand.h"\r
+                               RelativePath="..\..\..\..\lib\rawstr.h"\r
                        >\r
                        </File>\r
                        <File\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strcase.h"\r
+                               RelativePath="..\..\..\..\lib\strdup.h"\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\strdup.h"\r
+                               RelativePath="..\..\..\..\lib\strequal.h"\r
                        >\r
                        </File>\r
                        <File\r
index acd8166..ef60a59 100644 (file)
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.c"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\rawstr.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\strtoofft.h"\r
                        >\r
                        </File>\r
index 2571641..d3c8b25 100644 (file)
@@ -361,9 +361,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu scripts/Makefile
+         $(AUTOMAKE) --foreign scripts/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 9bbeb60..cfcefb3 100644 (file)
@@ -49,9 +49,9 @@ add_executable(
   ${CURL_FILES}
   )
 
-source_group("curlX source files" FILES ${CURLX_CFILES})
-source_group("curl source files" FILES ${CURL_CFILES})
-source_group("curl header files" FILES ${CURL_HFILES})
+source_group("cURLX source files" FILES ${CURLX_CFILES})
+source_group("cURL source files" FILES ${CURL_CFILES})
+source_group("cURL header files" FILES ${CURL_HFILES})
 
 include_directories(
   ${CURL_SOURCE_DIR}/lib        # To be able to reach "curl_setup_once.h"
@@ -61,7 +61,7 @@ include_directories(
   ${CURL_SOURCE_DIR}/src        # To be able to reach "tool_hugehelp.h"
   )
 
-#Build curl executable
+#Build cURL executable
 target_link_libraries( ${EXE_NAME} libcurl ${CURL_LIBS})
 
 ################################################################################
index 25cd3bf..f1ddc29 100644 (file)
@@ -22,7 +22,7 @@
 #***************************************************************************
 
 #
-#  Watcom / OpenWatcom / Win32 makefile for curl.
+#  Watcom / OpenWatcom / Win32 makefile for cURL.
 #
 
 .ERASE
@@ -156,7 +156,7 @@ RESOURCE = $(OBJ_DIR)/curl.res
 DIRS = $(OBJ_DIR)
 
 all: tool_hugehelp.c $(DIRS) $(TARGETS) .SYMBOLIC
-       @echo Welcome to curl
+       @echo Welcome to cURL
 
 clean: .SYMBOLIC
        -rm -f $(OBJS)
index 19bab68..878bbfe 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -88,12 +88,12 @@ 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.b32                \
+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
 
-MANPAGE=$(top_builddir)/docs/curl.1
+MANPAGE=$(top_srcdir)/docs/curl.1
 README=$(top_srcdir)/docs/MANUAL
 MKHELP=$(top_srcdir)/src/mkhelp.pl
 HUGE=tool_hugehelp.c
@@ -101,9 +101,6 @@ HUGE=tool_hugehelp.c
 if USE_MANUAL
 # Here are the stuff to create a built-in manual
 
-$(MANPAGE):
-       cd $(top_builddir)/docs && make curl.1
-
 if HAVE_LIBZ
 # This generates the tool_hugehelp.c file in both uncompressed and
 # compressed formats
index bd25887..ac71cdf 100644 (file)
@@ -140,18 +140,18 @@ am__libcurltool_la_SOURCES_DIST = slist_wc.c tool_binmode.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/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
+       ../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 \
@@ -176,6 +176,7 @@ am__objects_1 = libcurltool_la-slist_wc.lo \
        libcurltool_la-tool_writeout.lo libcurltool_la-tool_xattr.lo
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_2 = ../lib/libcurltool_la-strtoofft.lo \
+       ../lib/libcurltool_la-rawstr.lo \
        ../lib/libcurltool_la-nonblock.lo \
        ../lib/libcurltool_la-warnless.lo
 am__objects_3 =
@@ -215,7 +216,8 @@ am__objects_6 = curl-slist_wc.$(OBJEXT) curl-tool_binmode.$(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-nonblock.$(OBJEXT) ../lib/curl-warnless.$(OBJEXT)
+       ../lib/curl-rawstr.$(OBJEXT) ../lib/curl-nonblock.$(OBJEXT) \
+       ../lib/curl-warnless.$(OBJEXT)
 am__objects_8 = $(am__objects_6) $(am__objects_7) $(am__objects_3)
 am_curl_OBJECTS = $(am__objects_8)
 curl_OBJECTS = $(am_curl_OBJECTS)
@@ -489,7 +491,7 @@ top_srcdir = @top_srcdir@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -526,12 +528,14 @@ AM_CPPFLAGS = -I$(top_builddir)/include/curl -I$(top_builddir)/include \
 # the official API, but we re-use the code here to avoid duplication.
 CURLX_CFILES = \
        ../lib/strtoofft.c \
+       ../lib/rawstr.c \
        ../lib/nonblock.c \
        ../lib/warnless.c
 
 CURLX_HFILES = \
        ../lib/curl_setup.h \
        ../lib/strtoofft.h \
+       ../lib/rawstr.h \
        ../lib/nonblock.h \
        ../lib/warnless.h
 
@@ -645,12 +649,12 @@ curl_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
 @BUILD_UNITTESTS_TRUE@libcurltool_la_SOURCES = $(curl_SOURCES)
 BUILT_SOURCES = tool_hugehelp.c
 CLEANFILES = tool_hugehelp.c
-EXTRA_DIST = mkhelp.pl makefile.dj Makefile.b32                \
+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
 
-MANPAGE = $(top_builddir)/docs/curl.1
+MANPAGE = $(top_srcdir)/docs/curl.1
 README = $(top_srcdir)/docs/MANUAL
 MKHELP = $(top_srcdir)/src/mkhelp.pl
 HUGE = tool_hugehelp.c
@@ -708,6 +712,8 @@ clean-noinstLTLIBRARIES:
        @: > ../lib/$(DEPDIR)/$(am__dirstamp)
 ../lib/libcurltool_la-strtoofft.lo: ../lib/$(am__dirstamp) \
        ../lib/$(DEPDIR)/$(am__dirstamp)
+../lib/libcurltool_la-rawstr.lo: ../lib/$(am__dirstamp) \
+       ../lib/$(DEPDIR)/$(am__dirstamp)
 ../lib/libcurltool_la-nonblock.lo: ../lib/$(am__dirstamp) \
        ../lib/$(DEPDIR)/$(am__dirstamp)
 ../lib/libcurltool_la-warnless.lo: ../lib/$(am__dirstamp) \
@@ -766,6 +772,8 @@ clean-binPROGRAMS:
        rm -f $$list
 ../lib/curl-strtoofft.$(OBJEXT): ../lib/$(am__dirstamp) \
        ../lib/$(DEPDIR)/$(am__dirstamp)
+../lib/curl-rawstr.$(OBJEXT): ../lib/$(am__dirstamp) \
+       ../lib/$(DEPDIR)/$(am__dirstamp)
 ../lib/curl-nonblock.$(OBJEXT): ../lib/$(am__dirstamp) \
        ../lib/$(DEPDIR)/$(am__dirstamp)
 ../lib/curl-warnless.$(OBJEXT): ../lib/$(am__dirstamp) \
@@ -784,9 +792,11 @@ distclean-compile:
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/curl-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/curl-rawstr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/curl-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/curl-warnless.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-nonblock.Plo@am__quote@
+@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@
@@ -1181,6 +1191,13 @@ 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-strtoofft.lo `test -f '../lib/strtoofft.c' || echo '$(srcdir)/'`../lib/strtoofft.c
 
+../lib/libcurltool_la-rawstr.lo: ../lib/rawstr.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 ../lib/libcurltool_la-rawstr.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-rawstr.Tpo -c -o ../lib/libcurltool_la-rawstr.lo `test -f '../lib/rawstr.c' || echo '$(srcdir)/'`../lib/rawstr.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-rawstr.Tpo ../lib/$(DEPDIR)/libcurltool_la-rawstr.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../lib/rawstr.c' object='../lib/libcurltool_la-rawstr.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 ../lib/libcurltool_la-rawstr.lo `test -f '../lib/rawstr.c' || echo '$(srcdir)/'`../lib/rawstr.c
+
 ../lib/libcurltool_la-nonblock.lo: ../lib/nonblock.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 ../lib/libcurltool_la-nonblock.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-nonblock.Tpo -c -o ../lib/libcurltool_la-nonblock.lo `test -f '../lib/nonblock.c' || echo '$(srcdir)/'`../lib/nonblock.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-nonblock.Tpo ../lib/$(DEPDIR)/libcurltool_la-nonblock.Plo
@@ -1769,6 +1786,20 @@ curl-tool_xattr.obj: tool_xattr.c
 @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 ../lib/curl-strtoofft.obj `if test -f '../lib/strtoofft.c'; then $(CYGPATH_W) '../lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/../lib/strtoofft.c'; fi`
 
+../lib/curl-rawstr.o: ../lib/rawstr.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../lib/curl-rawstr.o -MD -MP -MF ../lib/$(DEPDIR)/curl-rawstr.Tpo -c -o ../lib/curl-rawstr.o `test -f '../lib/rawstr.c' || echo '$(srcdir)/'`../lib/rawstr.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/curl-rawstr.Tpo ../lib/$(DEPDIR)/curl-rawstr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../lib/rawstr.c' object='../lib/curl-rawstr.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 ../lib/curl-rawstr.o `test -f '../lib/rawstr.c' || echo '$(srcdir)/'`../lib/rawstr.c
+
+../lib/curl-rawstr.obj: ../lib/rawstr.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../lib/curl-rawstr.obj -MD -MP -MF ../lib/$(DEPDIR)/curl-rawstr.Tpo -c -o ../lib/curl-rawstr.obj `if test -f '../lib/rawstr.c'; then $(CYGPATH_W) '../lib/rawstr.c'; else $(CYGPATH_W) '$(srcdir)/../lib/rawstr.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/curl-rawstr.Tpo ../lib/$(DEPDIR)/curl-rawstr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../lib/rawstr.c' object='../lib/curl-rawstr.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 ../lib/curl-rawstr.obj `if test -f '../lib/rawstr.c'; then $(CYGPATH_W) '../lib/rawstr.c'; else $(CYGPATH_W) '$(srcdir)/../lib/rawstr.c'; fi`
+
 ../lib/curl-nonblock.o: ../lib/nonblock.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../lib/curl-nonblock.o -MD -MP -MF ../lib/$(DEPDIR)/curl-nonblock.Tpo -c -o ../lib/curl-nonblock.o `test -f '../lib/nonblock.c' || echo '$(srcdir)/'`../lib/nonblock.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/curl-nonblock.Tpo ../lib/$(DEPDIR)/curl-nonblock.Po
@@ -2026,9 +2057,6 @@ uninstall-am: uninstall-binPROGRAMS
 
 # Here are the stuff to create a built-in manual
 
-@USE_MANUAL_TRUE@$(MANPAGE):
-@USE_MANUAL_TRUE@      cd $(top_builddir)/docs && make curl.1
-
 # This generates the tool_hugehelp.c file in both uncompressed and
 # compressed formats
 @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@$(HUGE): $(README) $(MANPAGE)  mkhelp.pl
index 2196ffa..1aa153c 100644 (file)
 # the official API, but we re-use the code here to avoid duplication.
 CURLX_CFILES = \
        ../lib/strtoofft.c \
+       ../lib/rawstr.c \
        ../lib/nonblock.c \
        ../lib/warnless.c
 
 CURLX_HFILES = \
        ../lib/curl_setup.h \
        ../lib/strtoofft.h \
+       ../lib/rawstr.h \
        ../lib/nonblock.h \
        ../lib/warnless.h
 
index a927da5..3e4f654 100644 (file)
@@ -102,7 +102,7 @@ endif
 TARGET  = curl
 VERSION        = $(LIBCURL_VERSION)
 COPYR  = Copyright (C) $(LIBCURL_COPYRIGHT_STR)
-DESCR  = curl $(LIBCURL_VERSION_STR) ($(LIBARCH)) - https://curl.haxx.se
+DESCR  = cURL $(LIBCURL_VERSION_STR) ($(LIBARCH)) - https://curl.haxx.se
 MTSAFE = YES
 STACK  = 64000
 SCREEN = $(TARGET) commandline utility
index 24abbdb..67da1d9 100644 (file)
@@ -142,7 +142,7 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
 \r
 RELEASE_OBJS= \\r
        nonblockr.obj \\r
-       strcaser.obj \\r
+       rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
        slist_wc.obj \\r
@@ -188,7 +188,7 @@ RELEASE_OBJS= \
 \r
 DEBUG_OBJS= \\r
        nonblockd.obj \\r
-       strcased.obj \\r
+       rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
        slist_wcd.obj \\r
@@ -363,8 +363,8 @@ debug: $(DEBUG_OBJS)
 ## Release\r
 nonblockr.obj: ../lib/nonblock.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcaser.obj: ../lib/strcase.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strcase.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
@@ -453,8 +453,8 @@ curlr.res : curl.rc
 ## Debug\r
 nonblockd.obj: ../lib/nonblock.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcased.obj: ../lib/strcase.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strcase.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
index 6798b11..6459c34 100644 (file)
@@ -142,7 +142,7 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
 \r
 RELEASE_OBJS= \\r
        nonblockr.obj \\r
-       strcaser.obj \\r
+       rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
        slist_wc.obj \\r
@@ -188,7 +188,7 @@ RELEASE_OBJS= \
 \r
 DEBUG_OBJS= \\r
        nonblockd.obj \\r
-       strcased.obj \\r
+       rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
        slist_wcd.obj \\r
@@ -363,8 +363,8 @@ debug: $(DEBUG_OBJS)
 ## Release\r
 nonblockr.obj: ../lib/nonblock.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcaser.obj: ../lib/strcase.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strcase.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
@@ -453,8 +453,8 @@ curlr.res : curl.rc
 ## Debug\r
 nonblockd.obj: ../lib/nonblock.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcased.obj: ../lib/strcase.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strcase.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
index d13234a..46abfcb 100644 (file)
@@ -142,7 +142,7 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
 \r
 RELEASE_OBJS= \\r
        nonblockr.obj \\r
-       strcaser.obj \\r
+       rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
        slist_wc.obj \\r
@@ -188,7 +188,7 @@ RELEASE_OBJS= \
 \r
 DEBUG_OBJS= \\r
        nonblockd.obj \\r
-       strcased.obj \\r
+       rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
        slist_wcd.obj \\r
@@ -363,8 +363,8 @@ debug: $(DEBUG_OBJS)
 ## Release\r
 nonblockr.obj: ../lib/nonblock.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcaser.obj: ../lib/strcase.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strcase.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
@@ -453,8 +453,8 @@ curlr.res : curl.rc
 ## Debug\r
 nonblockd.obj: ../lib/nonblock.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcased.obj: ../lib/strcase.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strcase.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
index 1742732..5c6894d 100644 (file)
@@ -142,7 +142,7 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
 \r
 RELEASE_OBJS= \\r
        nonblockr.obj \\r
-       strcaser.obj \\r
+       rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
        slist_wc.obj \\r
@@ -188,7 +188,7 @@ RELEASE_OBJS= \
 \r
 DEBUG_OBJS= \\r
        nonblockd.obj \\r
-       strcased.obj \\r
+       rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
        slist_wcd.obj \\r
@@ -363,8 +363,8 @@ debug: $(DEBUG_OBJS)
 ## Release\r
 nonblockr.obj: ../lib/nonblock.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcaser.obj: ../lib/strcase.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strcase.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
@@ -453,8 +453,8 @@ curlr.res : curl.rc
 ## Debug\r
 nonblockd.obj: ../lib/nonblock.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcased.obj: ../lib/strcase.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strcase.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
diff --git a/src/Makefile.vc6 b/src/Makefile.vc6
new file mode 100644 (file)
index 0000000..ff82a4d
--- /dev/null
@@ -0,0 +1,550 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2016, 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 MSVC6\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 MSVC6 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 VC6\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_wcd.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_wcd.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 e872aa9..6c802c8 100644 (file)
@@ -142,7 +142,7 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
 \r
 RELEASE_OBJS= \\r
        nonblockr.obj \\r
-       strcaser.obj \\r
+       rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
        slist_wc.obj \\r
@@ -188,7 +188,7 @@ RELEASE_OBJS= \
 \r
 DEBUG_OBJS= \\r
        nonblockd.obj \\r
-       strcased.obj \\r
+       rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
        slist_wcd.obj \\r
@@ -363,8 +363,8 @@ debug: $(DEBUG_OBJS)
 ## Release\r
 nonblockr.obj: ../lib/nonblock.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcaser.obj: ../lib/strcase.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strcase.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
@@ -453,8 +453,8 @@ curlr.res : curl.rc
 ## Debug\r
 nonblockd.obj: ../lib/nonblock.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcased.obj: ../lib/strcase.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strcase.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
index e20950c..efbf306 100644 (file)
@@ -142,7 +142,7 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
 \r
 RELEASE_OBJS= \\r
        nonblockr.obj \\r
-       strcaser.obj \\r
+       rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
        slist_wc.obj \\r
@@ -188,7 +188,7 @@ RELEASE_OBJS= \
 \r
 DEBUG_OBJS= \\r
        nonblockd.obj \\r
-       strcased.obj \\r
+       rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
        slist_wcd.obj \\r
@@ -363,8 +363,8 @@ debug: $(DEBUG_OBJS)
 ## Release\r
 nonblockr.obj: ../lib/nonblock.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcaser.obj: ../lib/strcase.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strcase.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
@@ -453,8 +453,8 @@ curlr.res : curl.rc
 ## Debug\r
 nonblockd.obj: ../lib/nonblock.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcased.obj: ../lib/strcase.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strcase.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
index aa0aa23..3ee46e3 100644 (file)
@@ -142,7 +142,7 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
 \r
 RELEASE_OBJS= \\r
        nonblockr.obj \\r
-       strcaser.obj \\r
+       rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
        slist_wc.obj \\r
@@ -188,7 +188,7 @@ RELEASE_OBJS= \
 \r
 DEBUG_OBJS= \\r
        nonblockd.obj \\r
-       strcased.obj \\r
+       rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
        slist_wcd.obj \\r
@@ -363,8 +363,8 @@ debug: $(DEBUG_OBJS)
 ## Release\r
 nonblockr.obj: ../lib/nonblock.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcaser.obj: ../lib/strcase.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strcase.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
@@ -453,8 +453,8 @@ curlr.res : curl.rc
 ## Debug\r
 nonblockd.obj: ../lib/nonblock.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
-strcased.obj: ../lib/strcase.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strcase.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
index 5f49d22..30ae444 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -44,14 +44,14 @@ BEGIN
   BEGIN
     BLOCK "040904b0"
     BEGIN
-      VALUE "CompanyName",      "curl, https://curl.haxx.se/\0"
-      VALUE "FileDescription",  "The curl executable\0"
+      VALUE "CompanyName",      "cURL, https://curl.haxx.se/\0"
+      VALUE "FileDescription",  "The cURL executable\0"
       VALUE "FileVersion",      CURL_VERSION "\0"
       VALUE "InternalName",     "curl\0"
       VALUE "OriginalFilename", "curl.exe\0"
-      VALUE "ProductName",      "The curl executable\0"
+      VALUE "ProductName",      "The cURL executable\0"
       VALUE "ProductVersion",   CURL_VERSION "\0"
-      VALUE "LegalCopyright",   "\xa9 " CURL_COPYRIGHT "\0"  /* a9: Copyright symbol */
+      VALUE "LegalCopyright",   "© " CURL_COPYRIGHT "\0"
       VALUE "License",          "https://curl.haxx.se/docs/copyright.html\0"
     END
   END
index ce4d1dc..1839ef2 100644 (file)
@@ -1 +1 @@
-MACOS (not MACOS X)\r===================\rThis is the first attempt at porting curl to MacOS.\rhttp, ftp, dict and telnet seems to work fine, other protocols and advanced \rfeatures have not been all tested.\r\rThis port is heavily based on the GUSI library from Matthias Neeracher.\rGUSI (Grand Unified Socket Interface) is a POSIX/Pthreads/Sockets library \rbringing some of the comforts of UNIX 98 to traditional MacOS.\rThe latest GUSI release can be downloaded from sourceforge \rat <http://sourceforge.net/projects/gusi/>\r\rI have also written a few functions to help port Unix applications to MacOS.\rThese functions are part of the GUSI Extra library that can be downloaded at\r<http://perso.wanadoo.fr/ela/resources.html#gusiextra>\r\rOpenSSL support is still experimental but I hope to deliver a version \rincluding SSL soon.\r\rcurl for MacOS requires using the CodeWarrior compiler from Metrowerks.\r\rFirst download GUSI, GUSI Extra and curl. Access paths have been setup so that\rGUSI, GUSI Extra and curl directories should have the same parent directory.\r\rFollow the instructions in GUSI Extra "readme.txt" mainly the ones related to\rSIOUX and GUSI patches. If you do not apply these patches curl will not behave \rcorrectly.\r\rIn the 'curl/src/macos' directory, decode "curl.mcp.xml.sit.hqx" (This is a \rstuffit binhexed file)\rFrom the CodeWarrior IDE, import 'curl/src/macos/curl.xml', adjust the access \rpaths if required. Then you should be able to build:\r- the libcurl libraries for PPC and 68K.\r- the curl application (also available for PPC and 68K) which is the command\r  line version of curl.\r\rIf the file "tool_hugehelp.c" is missing rename "curl/src/tool_hugehelp.c.cvs"\rto "tool_hugehelp.c" and make sure its file type is 'TEXT'\r
+MACOS (not MACOS X)\r===================\rThis is the first attempt at porting cURL to MacOS.\rhttp, ftp, dict and telnet seems to work fine, other protocols and advanced \rfeatures have not been all tested.\r\rThis port is heavily based on the GUSI library from Matthias Neeracher.\rGUSI (Grand Unified Socket Interface) is a POSIX/Pthreads/Sockets library \rbringing some of the comforts of UNIX 98 to traditional MacOS.\rThe latest GUSI release can be downloaded from sourceforge \rat <http://sourceforge.net/projects/gusi/>\r\rI have also written a few functions to help port Unix applications to MacOS.\rThese functions are part of the GUSI Extra library that can be downloaded at\r<http://perso.wanadoo.fr/ela/resources.html#gusiextra>\r\rOpenSSL support is still experimental but I hope to deliver a version \rincluding SSL soon.\r\rcURL for MacOS requires using the CodeWarrior compiler from Metrowerks.\r\rFirst download GUSI, GUSI Extra and cURL. Access paths have been setup so that\rGUSI, GUSI Extra and cURL directories should have the same parent directory.\r\rFollow the instructions in GUSI Extra "readme.txt" mainly the ones related to\rSIOUX and GUSI patches. If you do not apply these patches curl will not behave \rcorrectly.\r\rIn the 'curl/src/macos' directory, decode "curl.mcp.xml.sit.hqx" (This is a \rstuffit binhexed file)\rFrom the CodeWarrior IDE, import 'curl/src/macos/curl.xml', adjust the access \rpaths if required. Then you should be able to build:\r- the libcurl libraries for PPC and 68K.\r- the curl application (also available for PPC and 68K) which is the command\r  line version of cURL.\r\rIf the file "tool_hugehelp.c" is missing rename "curl/src/tool_hugehelp.c.cvs"\rto "tool_hugehelp.c" and make sure its file type is 'TEXT'\r
index 9f3748b..25449a6 100644 (file)
@@ -1,5 +1,5 @@
 #
-# $VER: curl Makefile for AmigaOS ...
+# $VER: cURL Makefile for AmigaOS ...
 #
 
 # change the follow to where you have the AmiTCP SDK v4.3 includes:
@@ -19,12 +19,12 @@ include Makefile.inc
 OBJS = $(CURL_CFILES:.c=.o) $(CURLX_CFILES:.c=.o)
 
 all:   tool_hugehelp.c $(OBJS)
-       $(CC) $(CFLAGS) -o curl $(OBJS) $(LIBS) -Wl,-Map,curl.map,--cref
+       $(CC) $(CFLAGS) -o cURL $(OBJS) $(LIBS) -Wl,-Map,cURL.map,--cref
 
 tool_hugehelp.c: $(README) $(MANPAGE)  mkhelp.pl
        rm -f tool_hugehelp.c
        /bin/nroff -man $(MANPAGE) | /bin/perl $(MKHELP) -c $(README) > tool_hugehelp.c
 
 install:
-       $(INSTALL) -c curl /c/curl
+       $(INSTALL) -c cURL /c/cURL
 
index c3bbc23..6a6c8f9 100644 (file)
@@ -59,7 +59,7 @@ PROGRAM  = curl.exe
 OBJECTS += $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
 
 all: $(OBJ_DIR) $(PROGRAM)
-       @echo Welcome to curl
+       @echo Welcome to cURL
 
 $(PROGRAM): $(OBJECTS) ../lib/libcurl.a
        $(CC) -o $@ $^ $(LDFLAGS) $(EX_LIBS)
index 8e81f1b..97a5c92 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -73,9 +73,9 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
 
   if(!config->trace_stream) {
     /* open for append */
-    if(!strcmp("-", config->trace_dump))
+    if(curlx_strequal("-", config->trace_dump))
       config->trace_stream = stdout;
-    else if(!strcmp("%", config->trace_dump))
+    else if(curlx_strequal("%", config->trace_dump))
       /* Ok, this is somewhat hackish but we do it undocumented for now */
       config->trace_stream = config->errors;  /* aka stderr */
     else {
@@ -182,7 +182,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
   }
 #endif /* CURL_DOES_CONVERSIONS */
 
-  switch(type) {
+  switch (type) {
   case CURLINFO_TEXT:
     fprintf(output, "%s== Info: %s", timebuf, data);
   default: /* in case a new one is introduced to shock us */
index 3891b07..f7d8355 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
@@ -47,7 +47,7 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
   struct OutStruct *heads = hdrcbdata->heads;
   const char *str = ptr;
   const size_t cb = size * nmemb;
-  const char *end = (char *)ptr + cb;
+  const char *end = (char*)ptr + cb;
   char *url = NULL;
 
   /*
index f00a0d1..567123b 100644 (file)
@@ -68,9 +68,6 @@ static void free_config_fields(struct OperationConfig *config)
   Curl_safefree(config->tls_username);
   Curl_safefree(config->tls_password);
   Curl_safefree(config->tls_authtype);
-  Curl_safefree(config->proxy_tls_username);
-  Curl_safefree(config->proxy_tls_password);
-  Curl_safefree(config->proxy_tls_authtype);
   Curl_safefree(config->proxyuserpwd);
   Curl_safefree(config->proxy);
 
@@ -102,24 +99,15 @@ static void free_config_fields(struct OperationConfig *config)
   config->url_out = NULL;
 
   Curl_safefree(config->cipher_list);
-  Curl_safefree(config->proxy_cipher_list);
   Curl_safefree(config->cert);
-  Curl_safefree(config->proxy_cert);
   Curl_safefree(config->cert_type);
-  Curl_safefree(config->proxy_cert_type);
   Curl_safefree(config->cacert);
-  Curl_safefree(config->proxy_cacert);
   Curl_safefree(config->capath);
-  Curl_safefree(config->proxy_capath);
   Curl_safefree(config->crlfile);
   Curl_safefree(config->pinnedpubkey);
-  Curl_safefree(config->proxy_crlfile);
   Curl_safefree(config->key);
-  Curl_safefree(config->proxy_key);
   Curl_safefree(config->key_type);
-  Curl_safefree(config->proxy_key_type);
   Curl_safefree(config->key_passwd);
-  Curl_safefree(config->proxy_key_passwd);
   Curl_safefree(config->pubkey);
   Curl_safefree(config->hostpubmd5);
   Curl_safefree(config->engine);
@@ -150,7 +138,7 @@ static void free_config_fields(struct OperationConfig *config)
   curl_slist_free_all(config->resolve);
   curl_slist_free_all(config->connect_to);
 
-  Curl_safefree(config->preproxy);
+  Curl_safefree(config->socksproxy);
   Curl_safefree(config->proxy_service_name);
   Curl_safefree(config->service_name);
 
index 0d2f765..aa98fce 100644 (file)
@@ -78,9 +78,6 @@ struct OperationConfig {
   char *tls_username;
   char *tls_password;
   char *tls_authtype;
-  char *proxy_tls_username;
-  char *proxy_tls_password;
-  char *proxy_tls_authtype;
   char *proxyuserpwd;
   char *proxy;
   int proxyver;             /* set to CURLPROXY_HTTP* define */
@@ -109,24 +106,15 @@ struct OperationConfig {
   struct getout *url_get;   /* point to the node to fill in URL */
   struct getout *url_out;   /* point to the node to fill in outfile */
   char *cipher_list;
-  char *proxy_cipher_list;
   char *cert;
-  char *proxy_cert;
   char *cert_type;
-  char *proxy_cert_type;
   char *cacert;
-  char *proxy_cacert;
   char *capath;
-  char *proxy_capath;
   char *crlfile;
-  char *proxy_crlfile;
   char *pinnedpubkey;
   char *key;
-  char *proxy_key;
   char *key_type;
-  char *proxy_key_type;
   char *key_passwd;
-  char *proxy_key_passwd;
   char *pubkey;
   char *hostpubmd5;
   char *engine;
@@ -139,8 +127,6 @@ struct OperationConfig {
   bool globoff;
   bool use_httpget;
   bool insecure_ok;         /* set TRUE to allow insecure SSL connects */
-  bool proxy_insecure_ok;   /* set TRUE to allow insecure SSL connects
-                               for proxy */
   bool verifystatus;
   bool create_dirs;
   bool ftp_create_dirs;
@@ -156,7 +142,6 @@ struct OperationConfig {
   struct curl_slist *postquote;
   struct curl_slist *prequote;
   long ssl_version;
-  long proxy_ssl_version;
   long ip_version;
   curl_TimeCond timecond;
   time_t condtime;
@@ -178,7 +163,9 @@ struct OperationConfig {
   bool ftp_ssl_control;
   bool ftp_ssl_ccc;
   int ftp_ssl_ccc_mode;
-  char *preproxy;
+
+  char *socksproxy;         /* set to server string */
+  int socksver;             /* set to CURLPROXY_SOCKS* define */
   int socks5_gssapi_nec;    /* The NEC reference server does not protect the
                                encryption type exchange */
   char *proxy_service_name; /* set authentication service name for HTTP and
@@ -189,7 +176,6 @@ struct OperationConfig {
   bool tcp_nodelay;
   bool tcp_fastopen;
   long req_retry;           /* number of retries */
-  bool retry_connrefused;   /* set connection refused as a transient error */
   long retry_delay;         /* delay between retries (in seconds) */
   long retry_maxtime;       /* maximum time to keep retrying */
 
@@ -215,10 +201,7 @@ struct OperationConfig {
   bool xattr;               /* store metadata in extended attributes */
   long gssapi_delegation;
   bool ssl_allow_beast;     /* allow this SSL vulnerability */
-  bool proxy_ssl_allow_beast; /* allow this SSL vulnerability for proxy*/
-
   bool ssl_no_revoke;       /* disable SSL certificate revocation checks */
-  /*bool proxy_ssl_no_revoke; */
 
   bool use_metalink;        /* process given URLs as metalink XML file */
   metalinkfile *metalinkfile_list; /* point to the first node */
@@ -230,7 +213,6 @@ struct OperationConfig {
   bool nonpn;                     /* enable/disable TLS NPN extension */
   bool noalpn;                    /* enable/disable TLS ALPN extension */
   char *unix_socket_path;         /* path to Unix domain socket */
-  bool abstract_unix_socket;      /* path to an abstract Unix domain socket */
   bool falsestart;
   bool path_as_is;
   double expect100timeout;
@@ -256,7 +238,7 @@ struct GlobalConfig {
   bool tracetime;                 /* include timestamp? */
   int progressmode;               /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */
   char *libcurl;                  /* Output libcurl code to this file name */
-  bool fail_early;                /* exit on first transfer error */
+
   struct OperationConfig *first;
   struct OperationConfig *current;
   struct OperationConfig *last;   /* Always last in the struct */
index 23bb2cb..b65db41 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -91,14 +91,6 @@ static void show_dir_errno(FILE *errors, const char *name)
  *  should create all the dir* automagically
  */
 
-#ifdef WIN32
-/* systems that may use either or when specifying a path */
-#define PATH_DELIMITERS "\\/"
-#else
-#define PATH_DELIMITERS DIR_CHAR
-#endif
-
-
 CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
 {
   char *tempdir;
@@ -120,12 +112,10 @@ CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
   }
   dirbuildup[0] = '\0';
 
-  /* Allow strtok() here since this isn't used threaded */
-  /* !checksrc! disable BANNEDFUNC 2 */
-  tempdir = strtok(outdup, PATH_DELIMITERS);
+  tempdir = strtok(outdup, DIR_CHAR);
 
   while(tempdir != NULL) {
-    tempdir2 = strtok(NULL, PATH_DELIMITERS);
+    tempdir2 = strtok(NULL, DIR_CHAR);
     /* since strtok returns a token for the last word even
        if not ending with DIR_CHAR, we need to prune it */
     if(tempdir2 != NULL) {
@@ -133,8 +123,7 @@ CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
       if(dlen)
         snprintf(&dirbuildup[dlen], outlen - dlen, "%s%s", DIR_CHAR, tempdir);
       else {
-        if(outdup == tempdir)
-          /* the output string doesn't start with a separator */
+        if(0 != strncmp(outdup, DIR_CHAR, 1))
           strcpy(dirbuildup, tempdir);
         else
           snprintf(dirbuildup, outlen, "%s%s", DIR_CHAR, tempdir);
index 48af3bf..aed657a 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -431,7 +431,7 @@ SANITIZEcode msdosify(char **const sanitized, const char *file_name,
             *d   = 'x';
           }
           else {
-            memcpy(d, "plus", 4);
+            memcpy (d, "plus", 4);
             d += 3;
           }
         }
@@ -615,7 +615,7 @@ SANITIZEcode rename_if_reserved_dos_device_name(char **const sanitized,
 char **__crt0_glob_function(char *arg)
 {
   (void)arg;
-  return (char **)0;
+  return (char**)0;
 }
 
 #endif /* MSDOS && (__DJGPP__ || __GO32__) */
index 88352fb..de30c52 100644 (file)
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
index 686b01d..e49acf8 100644 (file)
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
@@ -125,7 +125,6 @@ static const struct LongShort aliases[]= {
   {"$e", "proxy-digest",             FALSE},
   {"$f", "proxy-basic",              FALSE},
   {"$g", "retry",                    TRUE},
-  {"$V", "retry-connrefused",        FALSE},
   {"$h", "retry-delay",              TRUE},
   {"$i", "retry-max-time",           TRUE},
   {"$k", "proxy-negotiate",          FALSE},
@@ -183,7 +182,6 @@ static const struct LongShort aliases[]= {
   {"$R", "expect100-timeout",        TRUE},
   {"$S", "tftp-no-options",          FALSE},
   {"$U", "connect-to",               TRUE},
-  {"$W", "abstract-unix-socket",     TRUE},
   {"0",   "http1.0",                 FALSE},
   {"01",  "http1.1",                 FALSE},
   {"02",  "http2",                   FALSE},
@@ -192,7 +190,6 @@ static const struct LongShort aliases[]= {
   {"10",  "tlsv1.0",                 FALSE},
   {"11",  "tlsv1.1",                 FALSE},
   {"12",  "tlsv1.2",                 FALSE},
-  {"13",  "tlsv1.3",                 FALSE},
   {"2",  "sslv2",                    FALSE},
   {"3",  "sslv3",                    FALSE},
   {"4",  "ipv4",                     FALSE},
@@ -231,24 +228,7 @@ static const struct LongShort aliases[]= {
   {"Er", "false-start",              FALSE},
   {"Es", "ssl-no-revoke",            FALSE},
   {"Et", "tcp-fastopen",             FALSE},
-  {"Eu", "proxy-tlsuser",            TRUE},
-  {"Ev", "proxy-tlspassword",        TRUE},
-  {"Ew", "proxy-tlsauthtype",        TRUE},
-  {"Ex", "proxy-cert",               TRUE},
-  {"Ey", "proxy-cert-type",          TRUE},
-  {"Ez", "proxy-key",                TRUE},
-  {"E0", "proxy-key-type",           TRUE},
-  {"E1", "proxy-pass",               TRUE},
-  {"E2", "proxy-ciphers",            TRUE},
-  {"E3", "proxy-crlfile",            TRUE},
-  {"E4", "proxy-ssl-allow-beast",    FALSE},
-  {"E5", "login-options",            TRUE},
-  {"E6", "proxy-cacert",             TRUE},
-  {"E7", "proxy-capath",             TRUE},
-  {"E8", "proxy-insecure",           FALSE},
-  {"E9", "proxy-tlsv1",              FALSE},
   {"f",  "fail",                     FALSE},
-  {"fa", "fail-early",               FALSE},
   {"F",  "form",                     TRUE},
   {"Fs", "form-string",              TRUE},
   {"g",  "globoff",                  FALSE},
@@ -291,7 +271,6 @@ static const struct LongShort aliases[]= {
   {"V",  "version",                  FALSE},
   {"w",  "write-out",                TRUE},
   {"x",  "proxy",                    TRUE},
-  {"xa", "preproxy",                 TRUE},
   {"X",  "request",                  TRUE},
   {"Y",  "speed-limit",              TRUE},
   {"y",  "speed-time",               TRUE},
@@ -402,20 +381,6 @@ done:
   *certname_place = '\0';
 }
 
-static void
-GetFileAndPassword(char *nextarg, char **file, char **password)
-{
-  char *certname, *passphrase;
-  parse_cert_parameter(nextarg, &certname, &passphrase);
-  Curl_safefree(*file);
-  *file = certname;
-  if(passphrase) {
-    Curl_safefree(*password);
-    *password = passphrase;
-  }
-  cleanarg(nextarg);
-}
-
 ParameterError getparameter(char *flag,    /* f or -long-flag */
                             char *nextarg, /* NULL if unset */
                             bool *usedarg, /* set to TRUE if the arg
@@ -451,10 +416,10 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
     }
 
     for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) {
-      if(curl_strnequal(aliases[j].lname, word, fnam)) {
+      if(curlx_strnequal(aliases[j].lname, word, fnam)) {
         longopt = TRUE;
         numhits++;
-        if(curl_strequal(aliases[j].lname, word)) {
+        if(curlx_raw_equal(aliases[j].lname, word)) {
           parse = aliases[j].letter;
           hit = j;
           numhits = 1; /* a single unique hit */
@@ -759,11 +724,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       case '@': /* the URL! */
       {
         struct getout *url;
-
-        if(!config->url_get)
-          config->url_get = config->url_list;
-
-        if(config->url_get) {
+        if(config->url_get || ((config->url_get = config->url_list) != NULL)) {
           /* there's a node here, if it already is filled-in continue to find
              an "empty" node */
           while(config->url_get && (config->url_get->flags & GETOUT_URL))
@@ -791,7 +752,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       break;
     case '$': /* more options without a short option */
       switch(subletter) {
-      case 'a': /* --ssl */
+      case 'a': /* --ftp-ssl */
         if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
           return PARAM_LIBCURL_DOESNT_SUPPORT;
         config->ftp_ssl = toggle;
@@ -801,21 +762,21 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         break;
       case 'c': /* --socks5 specifies a socks5 proxy to use, and resolves
                    the name locally and passes on the resolved address */
-        GetStr(&config->proxy, nextarg);
-        config->proxyver = CURLPROXY_SOCKS5;
+        GetStr(&config->socksproxy, nextarg);
+        config->socksver = CURLPROXY_SOCKS5;
         break;
       case 't': /* --socks4 specifies a socks4 proxy to use */
-        GetStr(&config->proxy, nextarg);
-        config->proxyver = CURLPROXY_SOCKS4;
+        GetStr(&config->socksproxy, nextarg);
+        config->socksver = CURLPROXY_SOCKS4;
         break;
       case 'T': /* --socks4a specifies a socks4a proxy to use */
-        GetStr(&config->proxy, nextarg);
-        config->proxyver = CURLPROXY_SOCKS4A;
+        GetStr(&config->socksproxy, nextarg);
+        config->socksver = CURLPROXY_SOCKS4A;
         break;
       case '2': /* --socks5-hostname specifies a socks5 proxy and enables name
                    resolving with the proxy */
-        GetStr(&config->proxy, nextarg);
-        config->proxyver = CURLPROXY_SOCKS5_HOSTNAME;
+        GetStr(&config->socksproxy, nextarg);
+        config->socksver = CURLPROXY_SOCKS5_HOSTNAME;
         break;
       case 'd': /* --tcp-nodelay option */
         config->tcp_nodelay = toggle;
@@ -831,9 +792,6 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         if(err)
           return err;
         break;
-      case 'V': /* --retry-connrefused */
-        config->retry_connrefused = toggle;
-        break;
       case 'h': /* --retry-delay */
         err = str2unum(&config->retry_delay, nextarg);
         if(err)
@@ -889,7 +847,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       case 'u': /* --ftp-alternative-to-user */
         GetStr(&config->ftp_alternative_to_user, nextarg);
         break;
-      case 'v': /* --ssl-reqd */
+      case 'v': /* --ftp-ssl-reqd */
         if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
           return PARAM_LIBCURL_DOESNT_SUPPORT;
         config->ftp_ssl_reqd = toggle;
@@ -1025,7 +983,6 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
 #endif
         break;
       case 'M': /* --unix-socket */
-        config->abstract_unix_socket = FALSE;
         GetStr(&config->unix_socket_path, nextarg);
         break;
       case 'N': /* --path-as-is */
@@ -1056,10 +1013,6 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         if(err)
           return err;
         break;
-      case 'W': /* --abstract-unix-socket */
-        config->abstract_unix_socket = TRUE;
-        GetStr(&config->unix_socket_path, nextarg);
-        break;
       }
       break;
     case '#': /* --progress-bar */
@@ -1108,10 +1061,6 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         /* TLS version 1.2 */
         config->ssl_version = CURL_SSLVERSION_TLSv1_2;
         break;
-      case '3':
-        /* TLS version 1.3 */
-        config->ssl_version = CURL_SSLVERSION_TLSv1_3;
-        break;
       }
       break;
     case '2':
@@ -1160,7 +1109,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       break;
     case 'C':
       /* This makes us continue an ftp transfer at given position */
-      if(strcmp(nextarg, "-")) {
+      if(!curlx_strequal(nextarg, "-")) {
         err = str2offset(&config->resume_from, nextarg);
         if(err)
           return err;
@@ -1204,7 +1153,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         }
         if('@' == is_file) {
           /* a '@' letter, it means that a file name or - (stdin) follows */
-          if(!strcmp("-", p)) {
+          if(curlx_strequal("-", p)) {
             file = stdin;
             set_binmode(stdin);
           }
@@ -1269,7 +1218,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
            or - (stdin) follows */
         nextarg++; /* pass the @ */
 
-        if(!strcmp("-", nextarg)) {
+        if(curlx_strequal("-", nextarg)) {
           file = stdin;
           if(subletter == 'b') /* forced data-binary */
             set_binmode(stdin);
@@ -1375,9 +1324,6 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
     break;
     case 'E':
       switch(subletter) {
-      case '\0': /* certificate file */
-        GetFileAndPassword(nextarg, &config->cert, &config->key_passwd);
-        break;
       case 'a': /* CA info PEM file */
         /* CA info PEM file */
         GetStr(&config->cacert, nextarg);
@@ -1397,7 +1343,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         break;
       case 'f': /* crypto engine */
         GetStr(&config->engine, nextarg);
-        if(config->engine && curl_strequal(config->engine, "list"))
+        if(config->engine && curlx_raw_equal(config->engine, "list"))
           return PARAM_ENGINES_REQUESTED;
         break;
       case 'g': /* CA info PEM file */
@@ -1431,7 +1377,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       case 'm': /* TLS authentication type */
         if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
           GetStr(&config->tls_authtype, nextarg);
-          if(!curl_strequal(config->tls_authtype, "SRP"))
+          if(!strequal(config->tls_authtype, "SRP"))
             return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
         }
         else
@@ -1468,102 +1414,23 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         config->tcp_fastopen = TRUE;
         break;
 
-      case 'u': /* TLS username for proxy */
-        if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)
-          GetStr(&config->proxy_tls_username, nextarg);
-        else
-          return PARAM_LIBCURL_DOESNT_SUPPORT;
-        break;
-
-      case 'v': /* TLS password for proxy */
-        if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)
-          GetStr(&config->proxy_tls_password, nextarg);
-        else
-          return PARAM_LIBCURL_DOESNT_SUPPORT;
-        break;
-
-      case 'w': /* TLS authentication type for proxy */
-        if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
-          GetStr(&config->proxy_tls_authtype, nextarg);
-          if(!curl_strequal(config->proxy_tls_authtype, "SRP"))
-            return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
+      default: /* certificate file */
+      {
+        char *certname, *passphrase;
+        parse_cert_parameter(nextarg, &certname, &passphrase);
+        Curl_safefree(config->cert);
+        config->cert = certname;
+        if(passphrase) {
+          Curl_safefree(config->key_passwd);
+          config->key_passwd = passphrase;
         }
-        else
-          return PARAM_LIBCURL_DOESNT_SUPPORT;
-        break;
-
-      case 'x': /* certificate file for proxy */
-        GetFileAndPassword(nextarg, &config->proxy_cert,
-                           &config->proxy_key_passwd);
-        break;
-
-      case 'y': /* cert file type for proxy */
-        GetStr(&config->proxy_cert_type, nextarg);
-        break;
-
-      case 'z': /* private key file for proxy */
-        GetStr(&config->proxy_key, nextarg);
-        break;
-
-      case '0': /* private key file type for proxy */
-        GetStr(&config->proxy_key_type, nextarg);
-        break;
-
-      case '1': /* private key passphrase for proxy */
-        GetStr(&config->proxy_key_passwd, nextarg);
         cleanarg(nextarg);
-        break;
-
-      case '2': /* ciphers for proxy */
-        GetStr(&config->proxy_cipher_list, nextarg);
-        break;
-
-      case '3': /* CRL info PEM file for proxy */
-        /* CRL file */
-        GetStr(&config->proxy_crlfile, nextarg);
-        break;
-
-      case '4': /* no empty SSL fragments for proxy */
-        if(curlinfo->features & CURL_VERSION_SSL)
-          config->proxy_ssl_allow_beast = toggle;
-        break;
-
-      case '5': /* --login-options */
-        GetStr(&config->login_options, nextarg);
-        break;
-
-      case '6': /* CA info PEM file for proxy */
-        /* CA info PEM file */
-        GetStr(&config->proxy_cacert, nextarg);
-        break;
-
-      case '7': /* CA info PEM file for proxy */
-        /* CA cert directory */
-        GetStr(&config->proxy_capath, nextarg);
-        break;
-
-      case '8': /* allow insecure SSL connects for proxy */
-        config->proxy_insecure_ok = toggle;
-        break;
-
-      case '9':
-        /* TLS version 1 for proxy */
-        config->proxy_ssl_version = CURL_SSLVERSION_TLSv1;
-        break;
-
-      default: /* unknown flag */
-        return PARAM_OPTION_UNKNOWN;
+      }
       }
       break;
     case 'f':
-      switch(subletter) {
-      case 'a': /* --fail-early */
-        global->fail_early = toggle;
-        break;
-      default:
-        /* fail hard on errors  */
-        config->failonerror = toggle;
-      }
+      /* fail hard on errors  */
+      config->failonerror = toggle;
       break;
     case 'F':
       /* "form data" simulation, this is a little advanced so lets do our best
@@ -1639,7 +1506,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       break;
     case 'L':
       config->followlocation = toggle; /* Follow Location: HTTP headers */
-      switch(subletter) {
+      switch (subletter) {
       case 't':
         /* Continue to send authentication (user+password) when following
          * locations, even when hostname changed */
@@ -1698,9 +1565,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       /* output file */
     {
       struct getout *url;
-      if(!config->url_out)
-        config->url_out = config->url_list;
-      if(config->url_out) {
+      if(config->url_out || ((config->url_out = config->url_list) != NULL)) {
         /* there's a node here, if it already is filled-in continue to find
            an "empty" node */
         while(config->url_out && (config->url_out->flags & GETOUT_OUTFILE))
@@ -1837,9 +1702,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       /* we are uploading */
     {
       struct getout *url;
-      if(!config->url_out)
-        config->url_out = config->url_list;
-      if(config->url_out) {
+      if(config->url_out || ((config->url_out = config->url_list) != NULL)) {
         /* there's a node here, if it already is filled-in continue to find
            an "empty" node */
         while(config->url_out && (config->url_out->flags & GETOUT_UPLOAD))
@@ -1907,7 +1770,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         FILE *file;
         const char *fname;
         nextarg++; /* pass the @ */
-        if(!strcmp("-", nextarg)) {
+        if(curlx_strequal("-", nextarg)) {
           fname = "<stdin>";
           file = stdin;
         }
@@ -1927,16 +1790,9 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         GetStr(&config->writeout, nextarg);
       break;
     case 'x':
-      switch(subletter) {
-      case 'a': /* --preproxy */
-        GetStr(&config->preproxy, nextarg);
-        break;
-      default:
-        /* --proxy */
-        GetStr(&config->proxy, nextarg);
-        config->proxyver = CURLPROXY_HTTP;
-        break;
-      }
+      /* proxy */
+      GetStr(&config->proxy, nextarg);
+      config->proxyver = CURLPROXY_HTTP;
       break;
     case 'X':
       /* set custom request */
@@ -1987,7 +1843,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
           /* failed, remove time condition */
           config->timecond = CURL_TIMECOND_NONE;
           warnf(global,
-                "Illegal date format for -z, --time-cond (and not "
+                "Illegal date format for -z, --timecond (and not "
                 "a file name). Disabling time condition. "
                 "See curl_getdate(3) for valid date syntax.\n");
         }
@@ -2024,7 +1880,7 @@ ParameterError parse_args(struct GlobalConfig *config, int argc,
       bool passarg;
       char *flag = argv[i];
 
-      if(!strcmp("--", argv[i]))
+      if(curlx_strequal("--", argv[i]))
         /* This indicates the end of the flags and thus enables the
            following (URL) argument to start with -. */
         stillflags = FALSE;
@@ -2080,7 +1936,7 @@ ParameterError parse_args(struct GlobalConfig *config, int argc,
      result != PARAM_ENGINES_REQUESTED) {
     const char *reason = param2text(result);
 
-    if(orig_opt && strcmp(":", orig_opt))
+    if(orig_opt && !curlx_strequal(":", orig_opt))
       helpf(config->errors, "option %s: %s\n", orig_opt, reason);
     else
       helpf(config->errors, "%s\n", reason);
index f639596..95dd779 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 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
@@ -30,7 +30,7 @@
 /*
  * Returning NULL will abort the continued operation!
  */
-char *getpass_r(const char *prompt, char *buffer, size_t buflen);
+char* getpass_r(const char *prompt, char* buffer, size_t buflen);
 #endif
 
 #endif /* HEADER_CURL_TOOL_GETPASS_H */
index 5085e54..fb428c9 100644 (file)
@@ -78,7 +78,7 @@ static const char *const helptext[] = {
   "     --dns-interface  Interface to use for DNS requests",
   "     --dns-ipv4-addr  IPv4 address to use for DNS requests, dot notation",
   "     --dns-ipv6-addr  IPv6 address to use for DNS requests, dot notation",
-  " -D, --dump-header FILE  Write the received headers to FILE",
+  " -D, --dump-header FILE  Write the headers to FILE",
   "     --egd-file FILE  EGD socket path for random data (SSL)",
   "     --engine ENGINE  Crypto engine (use \"--engine list\" for list) (SSL)",
 #ifdef USE_ENVIRONMENT
@@ -86,7 +86,6 @@ static const char *const helptext[] = {
 #endif
   "     --expect100-timeout SECONDS How long to wait for 100-continue (H)",
   " -f, --fail          Fail silently (no output at all) on HTTP errors (H)",
-  "     --fail-early    Fail on first transfer error, do not continue",
   "     --false-start   Enable TLS False Start.",
   " -F, --form CONTENT  Specify HTTP multipart POST data (H)",
   "     --form-string STRING  Specify HTTP multipart POST data (H)",
@@ -168,7 +167,6 @@ static const char *const helptext[] = {
   "Do not switch to GET after following a 302 redirect (H)",
   "     --post303       "
   "Do not switch to GET after following a 303 redirect (H)",
-  "     --preproxy [PROTOCOL://]HOST[:PORT] Proxy before HTTP(S) proxy",
   " -#, --progress-bar  Display transfer progress as a progress bar",
   "     --proto PROTOCOLS  Enable/disable PROTOCOLS",
   "     --proto-default PROTOCOL  Use PROTOCOL for any URL missing a scheme",
@@ -177,34 +175,10 @@ static const char *const helptext[] = {
   "     --proxy-anyauth  Pick \"any\" proxy authentication method (H)",
   "     --proxy-basic   Use Basic authentication on the proxy (H)",
   "     --proxy-digest  Use Digest authentication on the proxy (H)",
-  "     --proxy-cacert FILE "
-  "CA certificate to verify peer against for proxy (SSL)",
-  "     --proxy-capath DIR "
-  "CA directory to verify peer against for proxy (SSL)",
-  "     --proxy-cert CERT[:PASSWD] "
-  "Client certificate file and password for proxy (SSL)",
-  "     --proxy-cert-type TYPE "
-  "Certificate file type (DER/PEM/ENG) for proxy (SSL)",
-  "     --proxy-ciphers LIST SSL ciphers to use for proxy (SSL)",
-  "     --proxy-crlfile FILE "
-  "Get a CRL list in PEM format from the given file for proxy",
-  "     --proxy-insecure "
-  "Allow connections to SSL sites without certs for proxy (H)",
-  "     --proxy-key KEY Private key file name for proxy (SSL)",
-  "     --proxy-key-type TYPE "
-  "Private key file type for proxy (DER/PEM/ENG) (SSL)",
   "     --proxy-negotiate  "
   "Use HTTP Negotiate (SPNEGO) authentication on the proxy (H)",
   "     --proxy-ntlm    Use NTLM authentication on the proxy (H)",
   "     --proxy-header LINE Pass custom header LINE to proxy (H)",
-  "     --proxy-pass PASS Pass phrase for the private key for proxy (SSL)",
-  "     --proxy-ssl-allow-beast "
-  "Allow security flaw to improve interop for proxy (SSL)",
-  "     --proxy-tlsv1   Use TLSv1 for proxy (SSL)",
-  "     --proxy-tlsuser USER TLS username for proxy",
-  "     --proxy-tlspassword STRING TLS password for proxy",
-  "     --proxy-tlsauthtype STRING "
-  "TLS authentication type for proxy (default SRP)",
   "     --proxy-service-name NAME  SPNEGO proxy service name",
   "     --service-name NAME  SPNEGO service name",
   " -U, --proxy-user USER[:PASSWORD]  Proxy user and password",
@@ -224,7 +198,6 @@ static const char *const helptext[] = {
   "     --resolve HOST:PORT:ADDRESS  Force resolve of HOST:PORT to ADDRESS",
   "     --retry NUM   "
   "Retry request NUM times if transient problems occur",
-  "     --retry-connrefused  Retry on connection refused (use with --retry)",
   "     --retry-delay SECONDS  Wait SECONDS between retries",
   "     --retry-max-time SECONDS  Retry only within this period",
   "     --sasl-ir       Enable initial response in SASL authentication",
@@ -259,7 +232,6 @@ static const char *const helptext[] = {
   "     --tlsv1.0       Use TLSv1.0 (SSL)",
   "     --tlsv1.1       Use TLSv1.1 (SSL)",
   "     --tlsv1.2       Use TLSv1.2 (SSL)",
-  "     --tlsv1.3       Use TLSv1.3 (SSL)",
   "     --trace FILE    Write a debug trace to FILE",
   "     --trace-ascii FILE  Like --trace, but without hex output",
   "     --trace-time    Add time stamps to trace/verbose output",
@@ -271,8 +243,7 @@ static const char *const helptext[] = {
   "     --tlsuser USER  TLS username",
   "     --tlspassword STRING  TLS password",
   "     --tlsauthtype STRING  TLS authentication type (default: SRP)",
-  "     --unix-socket PATH    Connect through this Unix domain socket",
-  "     --abstract-unix-socket PATH Connect to an abstract Unix domain socket",
+  "     --unix-socket FILE    Connect through this Unix domain socket",
   " -A, --user-agent STRING  Send User-Agent STRING to server (H)",
   " -v, --verbose       Make the operation more talkative",
   " -V, --version       Show version number and quit",
@@ -317,7 +288,6 @@ static const struct feat feats[] = {
   {"TLS-SRP",        CURL_VERSION_TLSAUTH_SRP},
   {"HTTP2",          CURL_VERSION_HTTP2},
   {"UnixSockets",    CURL_VERSION_UNIX_SOCKETS},
-  {"HTTPS-proxy",    CURL_VERSION_HTTPS_PROXY}
 };
 
 void tool_help(void)
index b5a619b..14bc766 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
index 26b6c53..ccf04b5 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -46,7 +46,7 @@ static char *GetEnv(const char *variable, char do_expand)
   }
   if(do_expand && strchr(variable, '%')) {
     /* buf2 == variable if not expanded */
-    rc = ExpandEnvironmentStrings(variable, buf2, sizeof(buf2));
+    rc = ExpandEnvironmentStrings (variable, buf2, sizeof(buf2));
     if(rc > 0 && rc < sizeof(buf2) &&
        !strchr(buf2, '%'))    /* no vars still unexpanded */
       env = buf2;
index acf3692..75350e1 100644 (file)
@@ -2,7 +2,7 @@
 #ifndef HAVE_LIBZ
 /*
  * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Tue Feb 21 08:10:35 2017
+ * Generation time: Wed Sep  7 07:46:52 2016
  */
 #ifdef USE_MANUAL
 #include "tool_hugehelp.h"
@@ -123,312 +123,292 @@ void hugehelp(void)
 "       mixing progress meter and response data.\n"
 "\n"
 "       If you want a progress meter for HTTP POST or PUT requests, you need to\n"
-"       redirect the response output to a file, using shell redirect  (>),  -o,\n"
-"       --output or similar.\n"
+"       redirect the response output to a file, using shell  redirect  (>),  -o\n"
+"       [file] or similar.\n"
 "\n"
 , stdout);
  fputs(
 "       It  is not the same case for FTP upload as that operation does not spit\n"
 "       out any response data to the terminal.\n"
 "\n"
-"       If you prefer a progress  \"bar\"  instead  of  the  regular  meter,  -#,\n"
-"       --progress-bar  is your friend. You can also disable the progress meter\n"
-"       completely with the -s, --silent option.\n"
-"\n"
+"       If you prefer a progress \"bar\" instead of the regular meter, -# is your\n"
+"       friend.\n"
 "OPTIONS\n"
-"       Options start with one or two dashes. Many of the  options  require  an\n"
+"       Options  start  with  one or two dashes. Many of the options require an\n"
 "       additional value next to them.\n"
 "\n"
+"       The short \"single-dash\" form of the options, -d  for  example,  may  be\n"
 , stdout);
  fputs(
-"       The  short  \"single-dash\"  form  of the options, -d for example, may be\n"
 "       used with or without a space between it and its value, although a space\n"
-"       is a recommended separator. The long \"double-dash\" form, -d, --data for\n"
+"       is a recommended separator. The long  \"double-dash\"  form,  --data  for\n"
 "       example, requires a space between it and its value.\n"
 "\n"
 "       Short version options that don't need any additional values can be used\n"
-"       immediately  next  to  each other, like for example you can specify all\n"
-, stdout);
- fputs(
+"       immediately next to each other, like for example you  can  specify  all\n"
 "       the options -O, -L and -v at once as -OLv.\n"
 "\n"
+, stdout);
+ fputs(
 "       In general, all boolean options are enabled with --option and yet again\n"
-"       disabled  with --no-option. That is, you use the exact same option name\n"
+"       disabled with --no-option. That is, you use the exact same option  name\n"
 "       but prefix it with \"no-\". However, in this list we mostly only list and\n"
-"       show  the --option version of them. (This concept with --no options was\n"
-"       added in  7.19.0.  Previously  most  options  were  toggled  on/off  on\n"
+"       show the --option version of them. (This concept with --no options  was\n"
+"       added  in  7.19.0.  Previously  most  options  were  toggled  on/off on\n"
 "       repeated use of the same command line option.)\n"
-, stdout);
- fputs(
-"\n"
-"       --abstract-unix-socket <path>\n"
-"              (HTTP)  Connect  through an abstract Unix domain socket, instead\n"
-"              of using the network.   Note:  netstat  shows  the  path  of  an\n"
-"              abstract  socket  prefixed with '@', however the <path> argument\n"
-"              should not have this leading character.\n"
 "\n"
-"              Added in 7.53.0.\n"
-"\n"
-"       --anyauth\n"
-"              (HTTP) Tells curl to figure out authentication method by itself,\n"
+"       -#, --progress-bar\n"
 , stdout);
  fputs(
-"              and  use  the most secure one the remote site claims to support.\n"
-"              This is done by first doing a request and checking the response-\n"
-"              headers,  thus  possibly  inducing  an extra network round-trip.\n"
-"              This is  used  instead  of  setting  a  specific  authentication\n"
-"              method,  which  you  can  do with --basic, --digest, --ntlm, and\n"
-"              --negotiate.\n"
+"              Make curl display progress as a simple progress bar  instead  of\n"
+"              the standard, more informational, meter.\n"
+"\n"
+"       -:, --next\n"
+"              Tells curl to use a separate operation for the following URL and\n"
+"              associated  options.  This  allows  you  to  send  several   URL\n"
+"              requests,  each  with  their  own specific options, for example,\n"
+"              such as different user names or custom requests for each. (Added\n"
+"              in 7.36.0)\n"
 "\n"
 , stdout);
  fputs(
-"              Using --anyauth is not recommended if you do uploads from stdin,\n"
-"              since  it  may require data to be sent twice and then the client\n"
-"              must be able to rewind. If the need should arise when  uploading\n"
-"              from stdin, the upload operation will fail.\n"
+"       -0, --http1.0\n"
+"              (HTTP)  Tells  curl to use HTTP version 1.0 instead of using its\n"
+"              internally preferred: HTTP 1.1.\n"
 "\n"
-"              Used together with -u, --user.\n"
+"       --http1.1\n"
+"              (HTTP) Tells curl to use HTTP version 1.1. This is the  internal\n"
+"              default version. (Added in 7.33.0)\n"
 "\n"
-"              See also --proxy-anyauth and --basic and --digest.\n"
+"       --http2\n"
+"              (HTTP)  Tells  curl  to  issue  its  requests using HTTP 2. This\n"
+"              requires that the underlying libcurl was built  to  support  it.\n"
+"              (Added in 7.33.0)\n"
 "\n"
-"       -a, --append\n"
 , stdout);
  fputs(
-"              (FTP SFTP) When used in an upload, this makes curl append to the\n"
-"              target file instead  of  overwriting  it.  If  the  remote  file\n"
-"              doesn't  exist,  it  will  be  created.   Note that this flag is\n"
-"              ignored by some SFTP servers (including OpenSSH).\n"
+"       --http2-prior-knowledge\n"
+"              (HTTP)  Tells  curl  to  issue  its  non-TLS HTTP requests using\n"
+"              HTTP/2 without HTTP/1.1 Upgrade.  It  requires  prior  knowledge\n"
+"              that  the  server  supports HTTP/2 straight away. HTTPS requests\n"
+"              will still do HTTP/2 the standard way with  negotiated  protocol\n"
+"              version in the TLS handshake.\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/2  support  in  general  also  requires that the underlying\n"
 , stdout);
  fputs(
-"              pointless, unless you use it to override a previously set option\n"
-"              that  sets  a  different  authentication method (such as --ntlm,\n"
-"              --digest, or --negotiate).\n"
-"\n"
-"              Used together with -u, --user.\n"
-"\n"
-"              See also --proxy-basic.\n"
+"              libcurl was built to support it. (Added in 7.49.0)\n"
 "\n"
-"       --cacert <CA certificate>\n"
-"              (TLS) Tells curl to use the specified certificate file to verify\n"
-"              the  peer.  The  file  may contain multiple CA certificates. The\n"
-, stdout);
- fputs(
-"              certificate(s) must be in PEM format. Normally curl is built  to\n"
-"              use a default file for this, so this option is typically used to\n"
-"              alter that default file.\n"
+"       --no-npn\n"
+"              Disable the NPN TLS extension. NPN  is  enabled  by  default  if\n"
+"              libcurl  was built with an SSL library that supports NPN. NPN is\n"
+"              used by a libcurl that supports HTTP 2 to negotiate HTTP 2  sup-\n"
+"              port with the server during https sessions.\n"
 "\n"
-"              curl recognizes the environment variable named  'CURL_CA_BUNDLE'\n"
-"              if  it  is  set,  and uses the given path as a path to a CA cert\n"
-"              bundle. This option overrides that variable.\n"
+"              (Added in 7.36.0)\n"
 "\n"
-"              The windows version of curl will automatically  look  for  a  CA\n"
+"       --no-alpn\n"
 , stdout);
  fputs(
-"              certs file named 'curl-ca-bundle.crt', either in the same direc-\n"
-"              tory as curl.exe, or in the Current Working Directory, or in any\n"
-"              folder along your PATH.\n"
+"              Disable  the  ALPN  TLS extension. ALPN is enabled by default if\n"
+"              libcurl was built with an SSL library that supports  ALPN.  ALPN\n"
+"              is  used  by  a libcurl that supports HTTP 2 to negotiate HTTP 2\n"
+"              support with the server during https sessions.\n"
 "\n"
-"              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"
+"              (Added in 7.36.0)\n"
 "\n"
-"              (iOS  and macOS only) If curl is built against Secure Transport,\n"
+"       -1, --tlsv1\n"
+"              (SSL) Forces curl to use TLS version 1.x when negotiating with a\n"
 , stdout);
  fputs(
-"              then this option is supported for  backward  compatibility  with\n"
-"              other  SSL  engines,  but it should not be set. If the option is\n"
-"              not set, then curl will use the certificates in the  system  and\n"
-"              user  Keychain to verify the peer, which is the preferred method\n"
-"              of verifying the peer's certificate chain.\n"
+"              remote  TLS  server.   You can use options --tlsv1.0, --tlsv1.1,\n"
+"              and --tlsv1.2 to control the TLS version more precisely (if  the\n"
+"              SSL backend in use supports such a level of control).\n"
 "\n"
-"              If this option is used several times, the last one will be used.\n"
+"       -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 (see RFC 6176).\n"
 "\n"
-"       --capath <dir>\n"
-, stdout);
- fputs(
-"              (TLS) 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"
+"       -3, --sslv3\n"
 , stdout);
  fputs(
-"              curl to make SSL-connections much more  efficiently  than  using\n"
-"              --cacert if the --cacert file contains many CA certificates.\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. SSLv3 is widely considered insecure (see RFC 7568).\n"
 "\n"
-"              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"
+"       -4, --ipv4\n"
+"              This  option tells curl to resolve names to IPv4 addresses only,\n"
+"              and not for example try IPv6.\n"
 "\n"
-"       --cert-status\n"
-"              (TLS) Tells curl to verify the status of the server  certificate\n"
-"              by using the Certificate Status Request (aka. OCSP stapling) TLS\n"
+"       -6, --ipv6\n"
+"              This option tells curl to resolve names to IPv6 addresses  only,\n"
 , stdout);
  fputs(
-"              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"
-"              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.\n"
+"              and not for example try IPv4.\n"
 "\n"
-"              Added in 7.41.0.\n"
+"       -a, --append\n"
+"              (FTP/SFTP) When used in an upload, this makes curl append to the\n"
+"              target file instead  of  overwriting  it.  If  the  remote  file\n"
+"              doesn't  exist,  it  will  be  created.   Note that this flag is\n"
+"              ignored by some SFTP servers (including OpenSSH).\n"
 "\n"
-"       --cert-type <type>\n"
+"       -A, --user-agent <agent string>\n"
+"              (HTTP) Specify the User-Agent string to send to the HTTP server.\n"
 , stdout);
  fputs(
-"              (TLS) Tells curl what certificate type the provided  certificate\n"
-"              is in. PEM, DER and ENG are recognized types.  If not specified,\n"
-"              PEM is assumed.\n"
+"              Some   badly   done  CGIs  fail  if  this  field  isn't  set  to\n"
+"              \"Mozilla/4.0\". To encode blanks  in  the  string,  surround  the\n"
+"              string  with  single  quote marks. This can also be set with the\n"
+"              -H, --header option of course.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"              See also -E, --cert and --key and --key-type.\n"
-"\n"
-"       -E, --cert <certificate[:password]>\n"
-"              (TLS) Tells curl to use the specified  client  certificate  file\n"
+"       --anyauth\n"
+"              (HTTP) Tells curl to figure out authentication method by itself,\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 client certificate concatenated!\n"
+"              and  use  the most secure one the remote site claims to support.\n"
+"              This is done by first doing a request and checking the response-\n"
+"              headers,  thus  possibly  inducing  an extra network round-trip.\n"
+"              This is  used  instead  of  setting  a  specific  authentication\n"
+"              method,  which  you  can  do with --basic, --digest, --ntlm, and\n"
+"              --negotiate.\n"
+"\n"
 , stdout);
  fputs(
-"              See -E, --cert and --key to specify them independently.\n"
+"              Note that using --anyauth is not recommended if you  do  uploads\n"
+"              from  stdin, since it may require data to be sent twice and then\n"
+"              the client must be able to rewind. If the need should arise when\n"
+"              uploading from stdin, the upload operation will fail.\n"
 "\n"
-"              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"
+"       -b, --cookie <name=data>\n"
+"              (HTTP)  Pass the data to the HTTP server as a cookie. It is sup-\n"
+"              posedly the data previously received from the server in a  \"Set-\n"
 , 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"
+"              Cookie:\"  line.  The data should be in the format \"NAME1=VALUE1;\n"
+"              NAME2=VALUE2\".\n"
 "\n"
+"              If no '=' symbol is used in the line, it is treated as  a  file-\n"
+"              name  to  use to read previously stored cookie lines from, which\n"
+"              should be used in this session if they match. Using this  method\n"
+"              also  activates  the  cookie  engine which will make curl record\n"
 , stdout);
  fputs(
-"              (iOS  and macOS only) If curl is built against Secure Transport,\n"
-"              then the certificate string can either be the name of a certifi-\n"
-"              cate/private  key in the system or user keychain, or the path to\n"
-"              a PKCS#12-encoded certificate and private key. If  you  want  to\n"
-"              use  a  file  from the current directory, please precede it with\n"
-"              \"./\" prefix, in order to avoid confusion with a nickname.\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 (Set-\n"
+"              Cookie style) or the Netscape/Mozilla cookie file format.\n"
 "\n"
+"              The  file  specified with -b, --cookie is only used as input. No\n"
+"              cookies will be written to the file. To store cookies,  use  the\n"
 , stdout);
  fputs(
-"              If this option is used several times, the last one will be used.\n"
-"\n"
-"              See also --cert-type and --key and --key-type.\n"
-"\n"
-"       --ciphers <list of ciphers>\n"
-"              (TLS) 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"
-"\n"
-"               https://curl.haxx.se/docs/ssl-ciphers.html\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"
+"              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"
 , stdout);
  fputs(
-"              If this option is used several times, the last one will be used.\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"
+"              use the Netscape format.\n"
 "\n"
-"       --compressed\n"
-"              (HTTP) Request a compressed response using one of the algorithms\n"
-"              curl  supports,  and  save  the  uncompressed document.  If this\n"
-"              option is used and the server  sends  an  unsupported  encoding,\n"
-"              curl will report an error.\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"       -K, --config <file>\n"
-"              Specify  which config file to read curl arguments from. The con-\n"
+"       -B, --use-ascii\n"
 , stdout);
  fputs(
-"              fig file is a text file in which command line arguments  can  be\n"
-"              written  which  then will be used as if they were written on the\n"
-"              actual command line.\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"
+"              causes data sent to stdout to be in text mode for win32 systems.\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"
+"       --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"
+"              pointless, unless you use it to override a previously set option\n"
 , stdout);
  fputs(
-"              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"
+"              that  sets  a  different  authentication method (such as --ntlm,\n"
+"              --digest, or --negotiate).\n"
 "\n"
-"              If the parameter is to contain whitespace, the parameter must be\n"
-"              enclosed  within  quotes.  Within  double  quotes, the following\n"
+"              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"
 , stdout);
  fputs(
-"              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"
+"              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"
-"              Specify the filename to -K, --config as '-' to  make  curl  read\n"
-"              the file from stdin.\n"
+"              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"
 , stdout);
  fputs(
-"              Note  that  to  be able to specify a URL in the config file, you\n"
-"              need to specify it using the --url option,  and  not  by  simply\n"
-"              writing  the  URL  on its own line. So, it could look similar to\n"
-"              this:\n"
+"              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"
+"              back you get about this possibly lethal situation.\n"
 "\n"
-"              url = \"https://curl.haxx.se/docs/\"\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"
-"              When curl is invoked, it always (unless -q, --disable  is  used)\n"
-"              checks  for  a  default  config  file  and uses it if found. The\n"
 , stdout);
  fputs(
-"              default config file is checked for in the  following  places  in\n"
-"              this order:\n"
+"              If this option is used several times, the  last  specified  file\n"
+"              name will be used.\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"
-"              dir given the current user in your system). On Windows, it  then\n"
+"       -C, --continue-at <offset>\n"
+"              Continue/Resume  a  previous  file transfer at the given offset.\n"
+"              The given offset is the exact  number  of  bytes  that  will  be\n"
+"              skipped,  counting  from the beginning of the source file before\n"
+"              it is transferred to the destination.  If used with uploads, the\n"
 , stdout);
  fputs(
-"              checks for the APPDATA variable, or as a last resort the '%USER-\n"
-"              PROFILE%\\Application Data'.\n"
+"              FTP server command SIZE will not be used by curl.\n"
 "\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"
-"              determined home dir.\n"
+"              Use  \"-C  -\" to tell curl to automatically find out where/how to\n"
+"              resume the transfer. It then uses the given  output/input  files\n"
+"              to figure that out.\n"
 "\n"
-"              # --- Example file ---\n"
-"              # this is a comment\n"
-"              url = \"example.com\"\n"
+"              If this option is used several times, the last one will be used.\n"
+"\n"
+"       --ciphers <list of ciphers>\n"
+"              (SSL) Specifies which ciphers to use in the connection. The list\n"
 , stdout);
  fputs(
-"              output = \"curlhere.html\"\n"
-"              user-agent = \"superagent/1.0\"\n"
+"              of ciphers must specify valid ciphers. Read  up  on  SSL  cipher\n"
+"              list           details           on           this          URL:\n"
+"              https://www.openssl.org/docs/apps/ciphers.html\n"
 "\n"
-"              # and fetch another URL too\n"
-"              url = \"example.com/docs/manpage.html\"\n"
-"              -O\n"
-"              referer = \"http://nowhereatall.example.com/\"\n"
-"              # --- End of example file ---\n"
+"              NSS ciphers are done differently than OpenSSL  and  GnuTLS.  The\n"
+"              full  list of NSS ciphers is in the NSSCipherSuite entry at this\n"
+"              URL:                                         https://git.fedora-\n"
+, stdout);
+ fputs(
+"              hosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\n"
 "\n"
-"              This  option  can be used multiple times to load multiple config\n"
-"              files.\n"
+"              If this option is used several times, the last one will be used.\n"
+"\n"
+"       --compressed\n"
+"              (HTTP) Request a compressed response using one of the algorithms\n"
+"              curl supports, and save  the  uncompressed  document.   If  this\n"
+"              option  is  used  and  the server sends an unsupported encoding,\n"
+"              curl will report an error.\n"
 "\n"
 "       --connect-timeout <seconds>\n"
 , stdout);
@@ -437,181 +417,118 @@ void hugehelp(void)
 "              take.   This  only  limits the connection phase, so if curl con-\n"
 "              nects within the given period it will continue - if not it  will\n"
 "              exit.  Since version 7.32.0, this option accepts decimal values.\n"
-"              If this option is used several times, the last one will be used.\n"
 "\n"
-"              See also -m, --max-time.\n"
+"              See also the -m, --max-time option.\n"
 "\n"
-"       --connect-to <HOST1:PORT1:HOST2:PORT2>\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
+"       --create-dirs\n"
 , stdout);
  fputs(
-"              For  a  request to the given HOST:PORT pair, connect to CONNECT-\n"
-"              TO-HOST:CONNECT-TO-PORT instead.  This  option  is  suitable  to\n"
-"              direct requests at a specific server, e.g. at a specific cluster\n"
-"              node in a cluster of servers.   This  option  is  only  used  to\n"
-"              establish  the  network connection. It does NOT affect the host-\n"
-"              name/port that is used for TLS/SSL (e.g. SNI, certificate  veri-\n"
-, stdout);
- fputs(
-"              fication)  or  for the application protocols.  \"host\" and \"port\"\n"
-"              may be the empty string, meaning \"any host/port\".   \"connect-to-\n"
-"              host\"  and \"connect-to-port\" may also be the empty string, mean-\n"
-"              ing \"use the request's original host/port\".\n"
-"\n"
-"              This option can be used many times to add many connect rules.\n"
+"              When  used  in  conjunction with the -o option, curl will create\n"
+"              the necessary local directory hierarchy as needed.  This  option\n"
+"              creates  the dirs mentioned with the -o option, nothing else. If\n"
+"              the -o file name uses no dir or if the dirs it mentions  already\n"
+"              exist, no dir will be created.\n"
 "\n"
-"              See also --resolve and -H, --header. Added in 7.49.0.\n"
+"              To  create remote directories when using FTP or SFTP, try --ftp-\n"
+"              create-dirs.\n"
 "\n"
-"       -C, --continue-at <offset>\n"
 , stdout);
  fputs(
-"              Continue/Resume a previous file transfer at  the  given  offset.\n"
-"              The  given  offset  is  the  exact  number of bytes that will be\n"
-"              skipped, counting from the beginning of the source  file  before\n"
-"              it is transferred to the destination.  If used with uploads, the\n"
-"              FTP server command SIZE will not be used by curl.\n"
+"       --crlf Convert LF to CRLF in upload. Useful for MVS (OS/390).\n"
 "\n"
-"              Use \"-C -\" to tell curl to automatically find out  where/how  to\n"
-, stdout);
- fputs(
-"              resume  the  transfer. It then uses the given output/input files\n"
-"              to figure that out.\n"
+"              (SMTP added in 7.40.0)\n"
 "\n"
-"              If this option is used several times, the last one will be used.\n"
+"       --crlfile <file>\n"
+"              (HTTPS/FTPS) Provide a file using PEM format with a  Certificate\n"
+"              Revocation  List  that may specify peer certificates that are to\n"
+"              be considered revoked.\n"
 "\n"
-"              See also -r, --range.\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"       -c, --cookie-jar <filename>\n"
-"              (HTTP) Specify to which file you want curl to write all  cookies\n"
-"              after  a  completed  operation. Curl writes all cookies from its\n"
+"              (Added in 7.19.7)\n"
+"       -d, --data <data>\n"
 , stdout);
  fputs(
-"              in-memory cookie storage to the given file at the end of  opera-\n"
-"              tions.  If  no  cookies  are known, no data will be written. The\n"
-"              file will be written using the Netscape cookie file  format.  If\n"
-"              you set the file name to a single dash, \"-\", the cookies will be\n"
-"              written to stdout.\n"
+"              (HTTP) Sends the specified data in a POST request  to  the  HTTP\n"
+"              server,  in  the  same  way  that a browser does when a user has\n"
+"              filled in an HTML form and presses the submit button. This  will\n"
+"              cause curl to pass the data to the server using the content-type\n"
+"              application/x-www-form-urlencoded.  Compare to -F, --form.\n"
 "\n"
-"              This command line option will activate the  cookie  engine  that\n"
+"              -d, --data is the same as --data-ascii. --data-raw is almost the\n"
 , stdout);
  fputs(
-"              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"
-"              --verbose will get a warning displayed, but  that  is  the  only\n"
-"              visible feedback you get about this possibly lethal situation.\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  this  option  is used several times, the last specified file\n"
-"              name will be used.\n"
-"\n"
-"       -b, --cookie <data>\n"
-"              (HTTP) Pass the data to the HTTP server in the Cookie header. It\n"
-"              is  supposedly the data previously received from the server in a\n"
-"              \"Set-Cookie:\"  line.   The  data  should  be   in   the   format\n"
-"              \"NAME1=VALUE1; NAME2=VALUE2\".\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(
-"              If  no '=' symbol is used in the argument, it is instead treated\n"
-"              as a filename to read previously stored cookie from. This option\n"
-"              also  activates  the  cookie  engine which will make curl record\n"
-"              incoming cookies, which may be handy if  you're  using  this  in\n"
-"              combination  with  the  -L, --location option or do multiple URL\n"
-"              transfers on the same invoke.\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. If you\n"
+"              don't want the @ character to have a special interpretation  use\n"
+"              --data-raw instead.\n"
+"\n"
+"       -D, --dump-header <file>\n"
+"              Write the protocol headers to the specified file.\n"
 "\n"
 , stdout);
  fputs(
-"              The file format of the file to read cookies from should be plain\n"
-"              HTTP  headers  (Set-Cookie style) or the Netscape/Mozilla cookie\n"
-"              file format.\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"
+"              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"
-"              The file specified with -b, --cookie is only used as  input.  No\n"
-"              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"
-, stdout);
- fputs(
-"              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"
-"              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"
-, stdout);
- fputs(
-"              likely  not  what  you  intended.  To address these issues set a\n"
-"              domain in Set-Cookie (doing that will include  sub  domains)  or\n"
-"              use the Netscape format.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
-"              Users very often want to both read cookies from a file and write\n"
-"              updated cookies back to a file, so using both -b,  --cookie  and\n"
-, stdout);
- fputs(
-"              -c, --cookie-jar in the same command line is common.\n"
-"\n"
-"       --create-dirs\n"
-"              When used in conjunction with the -o, --output option, curl will\n"
-"              create the necessary local directory hierarchy as  needed.  This\n"
-"              option  creates the dirs mentioned with the -o, --output option,\n"
-"              nothing else. If the --output file name uses no dir  or  if  the\n"
-"              dirs it mentions already exist, no dir will be created.\n"
-"\n"
-, stdout);
- fputs(
-"              To  create remote directories when using FTP or SFTP, try --ftp-\n"
-"              create-dirs.\n"
-"\n"
-"       --crlf (FTP SMTP)  Convert  LF  to  CRLF  in  upload.  Useful  for  MVS\n"
-"              (OS/390).\n"
-"\n"
-"              (SMTP added in 7.40.0)\n"
-"\n"
-"       --crlfile <file>\n"
-"              (TLS) Provide a file using PEM format with a Certificate Revoca-\n"
-"              tion List that may specify peer certificates that are to be con-\n"
-"              sidered revoked.\n"
+"              When  used  in FTP, the FTP server response lines are considered\n"
+"              being \"headers\" and thus are saved there.\n"
 "\n"
 , stdout);
  fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"              Added in 7.19.7.\n"
-"\n"
 "       --data-ascii <data>\n"
-"              (HTTP) This is just an alias for -d, --data.\n"
+"              See -d, --data.\n"
 "\n"
 "       --data-binary <data>\n"
-"              (HTTP)  This  posts data exactly as specified with no extra pro-\n"
+"              (HTTP) This posts data exactly as specified with no  extra  pro-\n"
 "              cessing whatsoever.\n"
 "\n"
-"              If you start the data with the letter @, the rest  should  be  a\n"
-"              filename.   Data  is  posted  in  a similar manner as -d, --data\n"
+"              If  you  start  the data with the letter @, the rest should be a\n"
+"              filename.  Data is posted in a similar  manner  as  --data-ascii\n"
 , stdout);
  fputs(
-"              does, except that newlines and carriage  returns  are  preserved\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"
+"              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 -d, --data but  without  the\n"
-"              special interpretation of the @ character.\n"
-"\n"
-"              See also -d, --data. Added in 7.43.0.\n"
+"              (HTTP)  This posts data similarly to --data but without the spe-\n"
+"              cial interpretation of the @ character. See -d, --data.   (Added\n"
+"              in 7.43.0)\n"
 "\n"
 , stdout);
  fputs(
 "       --data-urlencode <data>\n"
-"              (HTTP)  This posts data, similar to the other -d, --data options\n"
-"              with the exception that this performs URL-encoding.\n"
-"\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"
@@ -648,50 +565,12 @@ void hugehelp(void)
 "                     it on in the POST. The  name  part  gets  an  equal  sign\n"
 "                     appended, resulting in name=urlencoded-file-content. Note\n"
 "                     that the name is expected to be URL-encoded already.\n"
-"       See also -d, --data and --data-raw. Added in 7.18.0.\n"
-"\n"
-"       -d, --data <data>\n"
-, stdout);
- fputs(
-"              (HTTP) Sends the specified data in a POST request  to  the  HTTP\n"
-"              server,  in  the  same  way  that a browser does when a user has\n"
-"              filled in an HTML form and presses the submit button. This  will\n"
-"              cause curl to pass the data to the server using the content-type\n"
-"              application/x-www-form-urlencoded.  Compare to -F, --form.\n"
-"\n"
-"              --data-raw is almost the same but does not have a special inter-\n"
-, stdout);
- fputs(
-"              pretation  of  the  @ character. To post data purely binary, you\n"
-"              should instead use the --data-binary option.  To URL-encode  the\n"
-"              value of a form field you may use --data-urlencode.\n"
-"\n"
-"              If  any of these options is used more than once on the same com-\n"
-"              mand line, the data pieces specified  will  be  merged  together\n"
-"              with  a  separating  &-symbol.  Thus,  using  '-d name=daniel -d\n"
-, stdout);
- fputs(
-"              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"
-"              ing data from a file named  from  a  file  like  that,  carriage\n"
-, stdout);
- fputs(
-"              returns and newlines will be stripped out. If you don't want the\n"
-"              @ character to have  a  special  interpretation  use  --data-raw\n"
-"              instead.\n"
-"\n"
-"              See also --data-binary and --data-urlencode and --data-raw. This\n"
-"              option overrides -F, --form and -I, --head and --upload.\n"
 "\n"
-"       --delegation <LEVEL>\n"
-"              (GSS/kerberos) Set LEVEL to tell the server what it  is  allowed\n"
+"       --delegation LEVEL\n"
+"              Set LEVEL to tell the server what it is allowed to delegate when\n"
 , stdout);
  fputs(
-"              to delegate when it comes to user credentials.\n"
+"              it comes to user credentials. Used with GSS/kerberos.\n"
 "\n"
 "              none   Don't allow any delegation.\n"
 "\n"
@@ -707,14 +586,12 @@ void hugehelp(void)
  fputs(
 "              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.\n"
+"              -u, --user option to  set  user  name  and  password.  See  also\n"
+"              --ntlm, --negotiate and --anyauth for related options.\n"
 "\n"
-"              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"
-"              See  also  -u,  --user  and  --proxy-digest  and --anyauth. This\n"
-"              option overrides --basic and --ntlm and --negotiate.\n"
-"\n"
 "       --disable-eprt\n"
 , stdout);
  fputs(
@@ -731,8 +608,8 @@ void hugehelp(void)
 "              --eprt can be used to explicitly enable EPRT again and --no-eprt\n"
 "              is an alias for --disable-eprt.\n"
 "\n"
-"              If  the  server is accessed using IPv6, this option will have no\n"
-"              effect as EPRT is necessary then.\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"
@@ -741,249 +618,340 @@ void hugehelp(void)
 , stdout);
  fputs(
 "       --disable-epsv\n"
-"              (FTP) (FTP) Tell curl to disable the use  of  the  EPSV  command\n"
-"              when  doing  passive  FTP  transfers.  Curl will normally always\n"
-"              first attempt to use EPSV before PASV, but with this option,  it\n"
-"              will not try using 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(
-"              If the server is an IPv6 host, this option will have  no  effect\n"
 "              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"
-"       -q, --disable\n"
-"              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"
-, stdout);
- fputs(
-"              details on the default config file search path.\n"
-"\n"
 "       --dns-interface <interface>\n"
-"              (DNS) Tell curl to send outgoing DNS  requests  through  <inter-\n"
-"              face>.  This  option is a counterpart to --interface (which does\n"
-"              not affect DNS). The supplied string must be an  interface  name\n"
-"              (not an address).\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"
-"              See  also  --dns-ipv4-addr  and --dns-ipv6-addr. --dns-interface\n"
 , stdout);
  fputs(
-"              requires that the underlying libcurl was  built  to  support  c-\n"
-"              ares. Added in 7.33.0.\n"
+"              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 <address>\n"
-"              (DNS)  Tell  curl  to  bind to <ip-address> when making IPv4 DNS\n"
-"              requests, so that the DNS requests originate from this  address.\n"
-"              The argument should be a single IPv4 address.\n"
+"       --dns-ipv4-addr <ip-address>\n"
+"              Tell curl to bind to <ip-address> when making IPv4 DNS requests,\n"
+"              so that the DNS requests originate from this address. The  argu-\n"
+"              ment should be a single IPv4 address.\n"
 "\n"
-"              See  also  --dns-interface  and --dns-ipv6-addr. --dns-ipv4-addr\n"
 , stdout);
  fputs(
-"              requires that the underlying libcurl was  built  to  support  c-\n"
-"              ares. Added in 7.33.0.\n"
+"              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 <address>\n"
-"              (DNS)  Tell  curl  to  bind to <ip-address> when making IPv6 DNS\n"
-"              requests, so that the DNS requests originate from this  address.\n"
-"              The argument should be a single IPv6 address.\n"
+"       --dns-ipv6-addr <ip-address>\n"
+"              Tell curl to bind to <ip-address> when making IPv6 DNS requests,\n"
+"              so that the DNS requests originate from this address. The  argu-\n"
+"              ment should be a single IPv6 address.\n"
 "\n"
-"              See  also  --dns-interface  and --dns-ipv4-addr. --dns-ipv6-addr\n"
 , stdout);
  fputs(
-"              requires that the underlying libcurl was  built  to  support  c-\n"
-"              ares. Added in 7.33.0.\n"
+"              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 <addresses>\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"
-"              after each IP address.\n"
-"\n"
 , stdout);
  fputs(
-"              --dns-servers requires that the underlying libcurl was built  to\n"
-"              support c-ares. Added in 7.33.0.\n"
+"              after each IP address.\n"
 "\n"
-"       -D, --dump-header <filename>\n"
-"              (HTTP  FTP) Write the received protocol headers to the specified\n"
-"              file.\n"
+"              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"
-"              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"
-"              then be read in a  second  curl  invocation  by  using  the  -b,\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"
 , stdout);
  fputs(
-"              --cookie  option! The -c, --cookie-jar option is a better way to\n"
-"              store cookies.\n"
-"\n"
-"              When used in FTP, the FTP server response lines  are  considered\n"
-"              being \"headers\" and thus are saved there.\n"
+"              used with -L, --location you can append \";auto\" to the --referer\n"
+"              URL to make curl automatically set the previous URL when it fol-\n"
+"              lows a Location: header. The \";auto\" string can be  used  alone,\n"
+"              even if you don't set an initial --referer.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"              See also -o, --output.\n"
+"       -E, --cert <certificate[:password]>\n"
+"              (SSL)  Tells  curl  to use the specified client certificate file\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 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"
+, 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"
-"       --egd-file <file>\n"
-"              (TLS)  Specify  the  path  name  to the Entropy Gathering Daemon\n"
 , stdout);
  fputs(
-"              socket. The socket is used to seed the  random  engine  for  SSL\n"
-"              connections.\n"
+"              (iOS and macOS only) If curl is built against Secure  Transport,\n"
+"              then the certificate string can either be the name of a certifi-\n"
+"              cate/private key in the system or user keychain, or the path  to\n"
+"              a  PKCS#12-encoded  certificate  and private key. If you want to\n"
+"              use a file from the current directory, please  precede  it  with\n"
+"              \"./\" prefix, in order to avoid confusion with a nickname.\n"
 "\n"
-"              See also --random-file.\n"
+, stdout);
+ fputs(
+"              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --engine <name>\n"
-"              (TLS)  Select the OpenSSL crypto engine to use for cipher opera-\n"
-"              tions. Use --engine list to print a list of build-time supported\n"
+"              Select  the  OpenSSL crypto engine to use for cipher operations.\n"
+"              Use --engine list  to  print  a  list  of  build-time  supported\n"
 "              engines.  Note  that  not  all  (or  none) of the engines may be\n"
 "              available at run-time.\n"
 "\n"
 "       --environment\n"
+"              (RISC OS ONLY) Sets a range of environment variables, using  the\n"
 , stdout);
  fputs(
-"              Sets a range of environment variables, using the names  the  -w,\n"
-"              --write-out  option supports, to allow easier extraction of use-\n"
+"              names the -w option supports, to allow easier extraction of use-\n"
 "              ful information after having run curl.\n"
 "\n"
-"              --environment requires that the underlying libcurl was built  to\n"
-"              support RISC OS.\n"
+"       --egd-file <file>\n"
+"              (SSL) Specify the path name  to  the  Entropy  Gathering  Daemon\n"
+"              socket.  The  socket  is  used to seed the random engine for SSL\n"
+"              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"
+"              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"
-"              See also --connect-timeout. Added in 7.47.0.\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"
-"       --fail-early\n"
-"              Fail and exit on first detected error.\n"
+"              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(
-"              When  curl is used to do multiple transfers on the command line,\n"
-"              it will attempt to operate on each given URL,  one  by  one.  By\n"
-"              default,  it will ignore errors if there are more URLs given and\n"
-"              the last URL's  success  will  determine  the  error  code  curl\n"
-"              returns.  So  early failures will be \"hidden\" by subsequent suc-\n"
-"              cessful transfers.\n"
+"              use a default file for this, so this option is typically used to\n"
+"              alter that default file.\n"
+"\n"
+"              curl recognizes the environment variable named  'CURL_CA_BUNDLE'\n"
+"              if  it  is  set,  and uses the given path as a path to a CA cert\n"
+"              bundle. This option overrides that variable.\n"
 "\n"
+"              The windows version of curl will automatically  look  for  a  CA\n"
+"              certs file named 'curl-ca-bundle.crt', either in the same direc-\n"
 , stdout);
  fputs(
-"              Using this option, curl will instead  return  an  error  on  the\n"
-"              first  transfers  that  fails, independent on the amount of more\n"
-"              URLs that are given on the command line. This way,  no  transfer\n"
-"              failures go undetected by scripts and similar.\n"
+"              tory as curl.exe, or in the Current Working Directory, or in any\n"
+"              folder along your PATH.\n"
+"\n"
+"              If  curl  is  built  against  the  NSS  SSL library, the NSS PEM\n"
+"              PKCS#11 module (libnsspem.so) needs to  be  available  for  this\n"
+"              option to work properly.\n"
 "\n"
-"              This  option  will  apply for all given URLs even if you use -:,\n"
-"              --next.\n"
+"              (iOS  and macOS only) If curl is built against Secure Transport,\n"
+"              then this option is supported for  backward  compatibility  with\n"
+, stdout);
+ fputs(
+"              other  SSL  engines,  but it should not be set. If the option is\n"
+"              not set, then curl will use the certificates in the  system  and\n"
+"              user  Keychain to verify the peer, which is the preferred method\n"
+"              of verifying the peer's certificate chain.\n"
 "\n"
-"              Added in 7.52.0.\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"       -f, --fail\n"
+"       --capath <CA certificate directory>\n"
+"              (SSL) Tells curl to use the specified certificate  directory  to\n"
 , stdout);
  fputs(
-"              (HTTP) Fail silently (no output at all) on server  errors.  This\n"
-"              is  mostly done to better enable scripts etc to better deal with\n"
-"              failed attempts. In normal cases when 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"
-"              vent curl from outputting that and return error 22.\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"
+"              curl to make SSL-connections much more  efficiently  than  using\n"
+, stdout);
+ fputs(
+"              --cacert if the --cacert file contains many CA certificates.\n"
+"\n"
+"              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 (hashes)>\n"
+"              (SSL) Tells curl to  use  the  specified  public  key  file  (or\n"
+"              hashes)  to  verify the peer. This can be a path to a file which\n"
 , stdout);
  fputs(
-"              This  method is not fail-safe and there are occasions where non-\n"
-"              successful response codes will  slip  through,  especially  when\n"
-"              authentication is involved (response codes 401 and 407).\n"
+"              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"
+"              from this certificate and if it does not exactly match the  pub-\n"
+, stdout);
+ fputs(
+"              lic  key provided to this option, curl will abort the connection\n"
+"              before sending or receiving any data.\n"
+"\n"
+"              PEM/DER support:\n"
+"                7.39.0: OpenSSL, GnuTLS and GSKit\n"
+"                7.43.0: NSS and wolfSSL/CyaSSL\n"
+"                7.47.0: mbedtls\n"
+"                7.49.0: PolarSSL sha256 support:\n"
+"                7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL.\n"
+"                7.47.0: mbedtls\n"
+, stdout);
+ fputs(
+"                7.49.0: PolarSSL Other SSL backends not supported.\n"
+"\n"
+"              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"
+, stdout);
+ fputs(
+"              expired) response, if the response suggests that the server cer-\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"
-"              (TLS)  Tells  curl  to use false start during the TLS handshake.\n"
-"              False start is a mode where a  TLS  client  will  start  sending\n"
-"              application data before verifying the server's Finished message,\n"
+"\n"
+"              (SSL) Tells curl to use false start during  the  TLS  handshake.\n"
 , stdout);
  fputs(
+"              False  start  is  a  mode  where a TLS client will start sending\n"
+"              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"
+"              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"
-"              Added in 7.42.0.\n"
-"\n"
-"       --form-string <name=string>\n"
-"              (HTTP)  Similar  to  -F, --form except that the value string for\n"
-"              the named parameter is used literally. Leading '@' and '<' char-\n"
+"       -f, --fail\n"
 , stdout);
  fputs(
-"              acters,  and  the  ';type='  string in the value have no special\n"
-"              meaning. Use this in preference to -F,  --form  if  there's  any\n"
-"              possibility  that  the string value may accidentally trigger the\n"
-"              '@' or '<' features of -F, --form.\n"
+"              (HTTP)  Fail  silently (no output at all) on server errors. This\n"
+"              is mostly done to better enable scripts etc to better deal  with\n"
+"              failed  attempts.  In  normal cases when 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"
+"              vent curl from outputting that and return error 22.\n"
 "\n"
-"              See also -F, --form.\n"
+, stdout);
+ fputs(
+"              This method is not fail-safe and there are occasions where  non-\n"
+"              successful  response  codes  will  slip through, especially when\n"
+"              authentication is involved (response codes 401 and 407).\n"
 "\n"
 "       -F, --form <name=content>\n"
 "              (HTTP) This lets curl emulate a filled-in form in which  a  user\n"
-, stdout);
- fputs(
 "              has  pressed  the  submit  button. This causes curl to POST data\n"
 "              using the  Content-Type  multipart/form-data  according  to  RFC\n"
+, stdout);
+ fputs(
 "              2388.  This  enables uploading of binary files etc. To force the\n"
 "              '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"
-, stdout);
- fputs(
 "              that  @  makes a file get attached in the post as a file upload,\n"
 "              while the < makes a text field and just  get  the  contents  for\n"
+, stdout);
+ fputs(
 "              that text field from a file.\n"
 "\n"
 "              Example:  to  send  an image to a server, where 'profile' is the\n"
 "              name of the form-field to which portrait.jpg will be the input:\n"
 "\n"
-"               curl -F profile=@portrait.jpg https://example.com/upload.cgi\n"
+"              curl -F profile=@portrait.jpg https://example.com/upload.cgi\n"
 "\n"
-, stdout);
- fputs(
 "              To read content from stdin instead of a file, use - as the file-\n"
 "              name.  This  goes  for both @ and < constructs. Unfortunately it\n"
+, stdout);
+ fputs(
 "              does not support reading the file from a named pipe or  similar,\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"
 "\n"
-, stdout);
- fputs(
-"               curl -F \"web=@index.html;type=text/html\" example.com\n"
+"              curl -F \"web=@index.html;type=text/html\" example.com\n"
 "\n"
 "              or\n"
 "\n"
-"               curl -F \"name=daniel;type=text/foo\" example.com\n"
+"              curl -F \"name=daniel;type=text/foo\" example.com\n"
 "\n"
+, stdout);
+ fputs(
 "              You can also explicitly change the name field of a  file  upload\n"
 "              part by setting filename=, like this:\n"
 "\n"
-"               curl -F \"file=@localfile;filename=nameinpost\" example.com\n"
+"              curl -F \"file=@localfile;filename=nameinpost\" example.com\n"
 "\n"
 "              If  filename/path contains ',' or ';', it must be quoted by dou-\n"
 "              ble-quotes like:\n"
 "\n"
-, stdout);
- fputs(
-"               curl  -F  \"file=@\\\"localfile\\\";filename=\\\"nameinpost\\\"\"   exam-\n"
+"              curl  -F   \"file=@\\\"localfile\\\";filename=\\\"nameinpost\\\"\"   exam-\n"
 "              ple.com\n"
 "\n"
 "              or\n"
 "\n"
-"               curl -F 'file=@\"localfile\";filename=\"nameinpost\"' example.com\n"
+, stdout);
+ fputs(
+"              curl -F 'file=@\"localfile\";filename=\"nameinpost\"' example.com\n"
 "\n"
 "              Note  that  if  a  filename/path is quoted by double-quotes, any\n"
 "              double-quote or backslash within the filename must be escaped by\n"
@@ -991,45 +959,36 @@ void hugehelp(void)
 "\n"
 "              See further examples and details in the MANUAL.\n"
 "\n"
-, stdout);
- fputs(
 "              This option can be used multiple times.\n"
 "\n"
-"              This option overrides -d, --data and -I, --head and --upload.\n"
-"\n"
-"       --ftp-account <data>\n"
+"       --ftp-account [data]\n"
 "              (FTP) When an FTP server asks for \"account data\" after user name\n"
+, stdout);
+ fputs(
 "              and password has been provided, this data is sent off using  the\n"
-"              ACCT command.\n"
+"              ACCT command. (Added in 7.13.0)\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"              Added in 7.13.0.\n"
-"\n"
-, stdout);
- fputs(
 "       --ftp-alternative-to-user <command>\n"
 "              (FTP)  If  authenticating with the USER and PASS commands fails,\n"
 "              send this  command.   When  connecting  to  Tumbleweed's  Secure\n"
 "              Transport  server  over  FTPS  using a client certificate, using\n"
+, stdout);
+ fputs(
 "              \"SITE AUTH\" will tell the server to retrieve the  username  from\n"
-"              the certificate.\n"
-"              Added in 7.15.5.\n"
+"              the certificate. (Added in 7.15.5)\n"
 "\n"
 "       --ftp-create-dirs\n"
-, stdout);
- fputs(
-"              (FTP  SFTP)  When  an FTP or SFTP URL/operation uses a path that\n"
+"              (FTP/SFTP)  When  an  FTP or SFTP URL/operation uses a path that\n"
 "              doesn't currently exist on the server, the standard behavior  of\n"
 "              curl is to fail. Using this option, curl will instead attempt to\n"
 "              create missing directories.\n"
 "\n"
-"              See also --create-dirs.\n"
-"\n"
-"       --ftp-method <method>\n"
-"              (FTP) Control what method curl should use to reach a file on  an\n"
+"       --ftp-method [method]\n"
 , stdout);
  fputs(
+"              (FTP) Control what method curl should use to reach a file on  an\n"
 "              FTP(S)  server. The method argument should be one of the follow-\n"
 "              ing alternatives:\n"
 "\n"
@@ -1037,10 +996,10 @@ void hugehelp(void)
 "                     curl does a single CWD operation for each  path  part  in\n"
 "                     the  given URL. For deep hierarchies this means very many\n"
 "                     commands. This is how RFC 1738 says it  should  be  done.\n"
-"                     This is the default but the slowest behavior.\n"
-"\n"
 , stdout);
  fputs(
+"                     This is the default but the slowest behavior.\n"
+"\n"
 "              nocwd  curl  does  no  CWD at all. curl will do SIZE, RETR, STOR\n"
 "                     etc and give a full path to the server for all these com-\n"
 "                     mands. This is the fastest behavior.\n"
@@ -1048,171 +1007,133 @@ void hugehelp(void)
 "              singlecwd\n"
 "                     curl does one CWD with the full target directory and then\n"
 "                     operates on the file \"normally\"  (like  in  the  multicwd\n"
-"                     case).  This  is  somewhat  more standards compliant than\n"
 , stdout);
  fputs(
+"                     case).  This  is  somewhat  more standards compliant than\n"
 "                     'nocwd' but without the full penalty of 'multicwd'.\n"
 "\n"
-"       Added in 7.15.1.\n"
+"              (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"
-"              override a previous -P, --ftp-port option.\n"
+"              override a previous -P/-ftp-port option. (Added in 7.11.0)\n"
 "\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"
 , stdout);
  fputs(
+"              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"
 "              Passive mode means that curl will try the EPSV command first and\n"
 "              then PASV, unless --disable-epsv is used.\n"
-"              See also --disable-epsv. Added in 7.11.0.\n"
 "\n"
-"       -P, --ftp-port <address>\n"
-"              (FTP)  Reverses  the  default initiator/listener roles when con-\n"
-"              necting with FTP. This option makes curl use active  mode.  curl\n"
+"       --ftp-skip-pasv-ip\n"
+"              (FTP) Tell curl to not use the IP address the server suggests in\n"
 , stdout);
  fputs(
-"              then  tells the server to connect back to the client's specified\n"
-"              address and port, while passive mode asks the server to setup an\n"
-"              IP  address  and  port for it to connect to. <address> should be\n"
-"              one of:\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"
-"              interface\n"
-"                     i.e \"eth0\" to specify which interface's  IP  address  you\n"
-"                     want to use (Unix only)\n"
+"              This option has no effect if PORT, EPRT or EPSV is used  instead\n"
+"              of PASV.\n"
 "\n"
-"              IP address\n"
+"       --ftp-pret\n"
+"              (FTP)  Tell  curl to send a PRET command before PASV (and EPSV).\n"
 , stdout);
  fputs(
-"                     i.e \"192.168.10.1\" to specify the exact IP address\n"
-"\n"
-"              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"
-"                     for the control connection\n"
+"              Certain FTP servers, mainly drftpd,  require  this  non-standard\n"
+"              command  for  directory  listings as well as up and downloads in\n"
+"              PASV mode.  (Added in 7.20.x)\n"
 "\n"
-"       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"
+"       --ftp-ssl-ccc\n"
+"              (FTP) Use CCC (Clear Command Channel)  Shuts  down  the  SSL/TLS\n"
+"              layer after authenticating. The rest of the control channel com-\n"
+"              munication will be unencrypted. This allows NAT routers to  fol-\n"
 , stdout);
  fputs(
-"       EPRT command instead of PORT by using --disable-eprt.  EPRT  is  really\n"
-"       PORT++.\n"
-"\n"
-"       Since  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"
-"       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"
-"\n"
-"       See also --ftp-pasv and --disable-eprt.\n"
+"              low the FTP transaction. The default mode is passive. See --ftp-\n"
+"              ssl-ccc-mode for other modes.  (Added in 7.16.1)\n"
 "\n"
+"       --ftp-ssl-ccc-mode [active/passive]\n"
+"              (FTP) Use CCC (Clear Command Channel) Sets  the  CCC  mode.  The\n"
+"              passive  mode  will  not initiate the shutdown, but instead wait\n"
+"              for the server to do it, and will not reply to the shutdown from\n"
 , stdout);
  fputs(
-"       --ftp-pret\n"
-"              (FTP)  Tell  curl to send a PRET command before PASV (and EPSV).\n"
-"              Certain FTP servers, mainly drftpd,  require  this  non-standard\n"
-"              command  for  directory  listings as well as up and downloads in\n"
-"              PASV mode.\n"
-"\n"
-"              Added in 7.20.0.\n"
+"              the server. The active mode initiates the shutdown and waits for\n"
+"              a reply from the server.  (Added in 7.16.2)\n"
 "\n"
-"       --ftp-skip-pasv-ip\n"
-"              (FTP) Tell curl to not use the IP address the server suggests in\n"
-"              its  response to curl's PASV command when curl connects the data\n"
+"       --ftp-ssl-control\n"
+"              (FTP) Require SSL/TLS for the FTP  login,  clear  for  transfer.\n"
+"              Allows  secure  authentication, but non-encrypted data transfers\n"
+"              for efficiency.  Fails the transfer if the server  doesn't  sup-\n"
+"              port SSL/TLS.  (Added in 7.16.0) that can still be used but will\n"
 , stdout);
  fputs(
-"              connection. Instead curl will re-use  the  same  IP  address  it\n"
-"              already uses for the control connection.\n"
+"              be removed in a future version.\n"
 "\n"
-"              This  option has no effect if PORT, EPRT or EPSV is used instead\n"
-"              of PASV.\n"
+"       --ftp-ssl\n"
+"              (FTP) This deprecated option is now known as --ssl.\n"
 "\n"
-"              See also --ftp-pasv. Added in 7.14.2.\n"
+"       --ftp-ssl-reqd\n"
+"              (FTP) This deprecated option is now known as --ssl-reqd.\n"
 "\n"
-"       --ftp-ssl-ccc-mode <active/passive>\n"
-"              (FTP) Sets the CCC mode. The passive mode will not initiate  the\n"
-"              shutdown, but instead wait for the server to do it, and will not\n"
+"       --form-string <name=string>\n"
+"              (HTTP) Similar to --form except that the value  string  for  the\n"
+"              named  parameter  is used literally. Leading '@' and '<' charac-\n"
+"              ters, and the ';type=' string in the value have no special mean-\n"
 , stdout);
  fputs(
-"              reply to the shutdown from the server. The active mode initiates\n"
-"              the shutdown and waits for a reply from the server.\n"
+"              ing. Use this in preference to --form if there's any possibility\n"
+"              that the string value may accidentally trigger the  '@'  or  '<'\n"
+"              features of --form.\n"
 "\n"
-"              See also --ftp-ssl-ccc. Added in 7.16.2.\n"
-"\n"
-"       --ftp-ssl-ccc\n"
-"              (FTP)  Use  CCC  (Clear  Command Channel) Shuts down the SSL/TLS\n"
-"              layer after authenticating. The rest of the control channel com-\n"
-"              munication  will be unencrypted. This allows NAT routers to fol-\n"
+"       -g, --globoff\n"
+"              This option switches off the \"URL globbing parser\". When you set\n"
+"              this option, you can specify URLs that contain the letters  {}[]\n"
+"              without  having them being interpreted by curl itself. Note that\n"
 , stdout);
  fputs(
-"              low the FTP transaction. The default mode is passive.\n"
-"\n"
-"              See also --ssl and --ftp-ssl-ccc-mode. Added in 7.16.1.\n"
-"\n"
-"       --ftp-ssl-control\n"
-"              (FTP) Require SSL/TLS for the FTP  login,  clear  for  transfer.\n"
-"              Allows  secure  authentication, but non-encrypted data transfers\n"
-"              for efficiency.  Fails the transfer if the server  doesn't  sup-\n"
-"              port SSL/TLS.\n"
-"\n"
-"              Added in 7.16.0.\n"
+"              these letters are not normal legal URL contents but they  should\n"
+"              be encoded according to the URI standard.\n"
 "\n"
 "       -G, --get\n"
-, stdout);
- fputs(
 "              When  used,  this  option  will make all data specified with -d,\n"
 "              --data, --data-binary or --data-urlencode to be used in an  HTTP\n"
 "              GET  request instead of the POST request that otherwise would be\n"
 "              used. The data will be appended to the URL with a '?' separator.\n"
-"              If used in combination with  -I,  --head,  the  POST  data  will\n"
-"              instead be appended to the URL with a HEAD request.\n"
-"\n"
 , stdout);
  fputs(
+"              If used in combination with -I, the POST data  will  instead  be\n"
+"              appended to the URL with a HEAD request.\n"
+"\n"
 "              If  this  option  is  used  several times, only the first one is\n"
 "              used. This is because undoing a GET doesn't make sense, but  you\n"
 "              should then instead enforce the alternative method you prefer.\n"
 "\n"
-"       -g, --globoff\n"
-"              This option switches off the \"URL globbing parser\". When you set\n"
-"              this option, you can specify URLs that contain the letters  {}[]\n"
-"              without  having them being interpreted by curl itself. Note that\n"
-, stdout);
- fputs(
-"              these letters are not normal legal URL contents but they  should\n"
-"              be encoded according to the URI standard.\n"
-"\n"
-"       -I, --head\n"
-"              (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the\n"
-"              command HEAD which this uses to get nothing but the header of  a\n"
-"              document.  When  used  on an FTP or FILE file, curl displays the\n"
-"              file size and last modification time only.\n"
-"\n"
 "       -H, --header <header>\n"
+"              (HTTP)  Extra header to include in the request when sending HTTP\n"
 , stdout);
  fputs(
-"              (HTTP) Extra header to include in the request when sending  HTTP\n"
-"              to  a  server. You may specify any number of extra headers. Note\n"
+"              to a server. You may specify any number of extra  headers.  Note\n"
 "              that if you should add a custom header that has the same name as\n"
-"              one  of  the  internal  ones curl would use, your externally set\n"
+"              one of the internal ones curl would  use,  your  externally  set\n"
 "              header will be used instead of the internal one. This allows you\n"
-"              to  make  even  trickier  stuff than curl would normally do. You\n"
+"              to make even trickier stuff than curl  would  normally  do.  You\n"
+"              should  not  replace internally set headers without knowing per-\n"
 , stdout);
  fputs(
-"              should not replace internally set headers without  knowing  per-\n"
 "              fectly well what you're doing. Remove an internal header by giv-\n"
-"              ing a replacement without content  on  the  right  side  of  the\n"
+"              ing  a  replacement  without  content  on  the right side of the\n"
 "              colon, as in: -H \"Host:\". If you send the custom header with no-\n"
-"              value then its header must be terminated with a semicolon,  such\n"
+"              value  then its header must be terminated with a semicolon, such\n"
 "              as -H \"X-Custom-Header;\" to send \"X-Custom-Header:\".\n"
 "\n"
+"              curl will make sure that each header  you  add/replace  is  sent\n"
 , stdout);
  fputs(
-"              curl  will  make  sure  that each header you add/replace is sent\n"
 "              with the proper end-of-line marker, you should thus not add that\n"
 "              as a part of the header content: do not add newlines or carriage\n"
 "              returns, they will only mess things up for you.\n"
@@ -1222,187 +1143,289 @@ void hugehelp(void)
 "              Starting in 7.37.0, you need --proxy-header to send custom head-\n"
 "              ers intended for a proxy.\n"
 "\n"
-, stdout);
- fputs(
 "              Example:\n"
 "\n"
-"               curl -H \"X-First-Name: Joe\" http://example.com/\n"
+, stdout);
+ fputs(
+"              # curl -H \"X-First-Name: Joe\" http://example.com/\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"
+"              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"
+"              This option can be used  multiple  times  to  add/replace/remove\n"
 "              multiple headers.\n"
 "\n"
-"       -h, --help\n"
-"              Usage help. This lists all current command line options  with  a\n"
-"              short description.\n"
 "       --hostpubmd5 <md5>\n"
-"              (SFTP  SCP)  Pass a string containing 32 hexadecimal digits. The\n"
+"              (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"
-, stdout);
- fputs(
 "              public key, curl will refuse the connection with the host unless\n"
-"              the md5sums match.\n"
-"\n"
-"              Added in 7.17.1.\n"
+"              the md5sums match. (Added in 7.17.1)\n"
 "\n"
-"       -0, --http1.0\n"
-"              (HTTP) Tells curl to use HTTP version 1.0 instead of  using  its\n"
-"              internally preferred HTTP version.\n"
-"\n"
-"              This option overrides --http1.1 and --http2.\n"
+"       --ignore-content-length\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"
-"       --http1.1\n"
-"              (HTTP) Tells curl to use HTTP version 1.1.\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"
 , stdout);
  fputs(
-"              This  option  overrides  -0,  --http1.0  and  --http2.  Added in\n"
-"              7.33.0.\n"
+"              includes things like server-name, date of  the  document,  HTTP-\n"
+"              version and more...\n"
 "\n"
-"       --http2-prior-knowledge\n"
-"              (HTTP) Tells curl to  issue  its  non-TLS  HTTP  requests  using\n"
-"              HTTP/2  without  HTTP/1.1  Upgrade.  It requires prior knowledge\n"
-"              that the server supports HTTP/2 straight  away.  HTTPS  requests\n"
-"              will  still  do HTTP/2 the standard way with negotiated protocol\n"
-"              version in the TLS handshake.\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 file size and last modification time only.\n"
 "\n"
+"       --interface <name>\n"
 , stdout);
  fputs(
-"              --http2-prior-knowledge requires that the underlying libcurl was\n"
-"              built to support HTTP/2. This option overrides --http1.1 and -0,\n"
-"              --http1.0 and --http2. Added in 7.49.0.\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"
-"       --http2\n"
-"              (HTTP) Tells curl to use HTTP version 2.\n"
+"               curl --interface eth0:1 https://www.example.com/\n"
+"\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"              See also --no-alpn. --http2 requires that the underlying libcurl\n"
-"              was built to support HTTP/2. This option overrides --http1.1 and\n"
+"       -j, --junk-session-cookies\n"
+"              (HTTP) When curl is told to read cookies from a given file, this\n"
 , stdout);
  fputs(
-"              -0, --http1.0 and --http2-prior-knowledge. Added in 7.33.0.\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"
-"       --ignore-content-length\n"
-"              (FTP HTTP) For HTTP, Ignore the Content-Length header.  This  is\n"
-"              particularly  useful  for servers running Apache 1.x, which will\n"
-"              report incorrect Content-Length for files larger  than  2  giga-\n"
-"              bytes.\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"
-"              For  FTP (since 7.46.0), skip the RETR command to figure out the\n"
-"              size before downloading a file.\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(
-"       -i, --include\n"
-"              Include the HTTP-header in the output. The HTTP-header  includes\n"
-"              things  like server-name, date of the document, HTTP-version and\n"
-"              more...\n"
+"              file name, so this option may provide you with rather unexpected\n"
+"              file names.\n"
 "\n"
-"              See also -v, --verbose.\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"
-"              (TLS) 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(
+"              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"
-"               https://curl.haxx.se/docs/sslcerts.html\n"
+"              See    this    online    resource    for    further     details:\n"
+"              https://curl.haxx.se/docs/sslcerts.html\n"
 "\n"
-"       --interface <name>\n"
+"       -K, --config <config file>\n"
+, stdout);
+ fputs(
+"              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"
-"              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"
+"              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(
+"              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"
 , stdout);
  fputs(
-"               curl --interface eth0:1 https://www.example.com/\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"
-"              If this option is used several times, the last one will be used.\n"
+, stdout);
+ fputs(
+"              Specify the filename to -K, --config as '-' to  make  curl  read\n"
+"              the file from stdin.\n"
 "\n"
-"              See also --dns-interface.\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"
-"       -4, --ipv4\n"
-"              This option tells curl to resolve names to IPv4 addresses  only,\n"
-"              and not for example try IPv6.\n"
+"              url = \"https://curl.haxx.se/docs/\"\n"
 "\n"
-"              See  also  --http1.1  and  --http2.  This  option  overrides -6,\n"
-"              --ipv6.\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"
+"              file is checked for in the following places in this order:\n"
 "\n"
-"       -6, --ipv6\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(
-"              This option tells curl to resolve names to IPv6 addresses  only,\n"
-"              and not for example try IPv4.\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"
-"              See  also  --http1.1  and  --http2.  This  option  overrides -6,\n"
-"              --ipv6.\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"
+"              determined home dir.\n"
 "\n"
-"       -j, --junk-session-cookies\n"
-"              (HTTP) When curl is told to read cookies from a given file, this\n"
-"              option  will  make  it  discard all \"session cookies\". This will\n"
-"              basically have the same effect as if a new session  is  started.\n"
 , stdout);
  fputs(
-"              Typical  browsers  always  discard  session cookies when they're\n"
-"              closed down.\n"
+"              # --- Example file ---\n"
+"              # this is a comment\n"
+"              url = \"example.com\"\n"
+"              output = \"curlhere.html\"\n"
+"              user-agent = \"superagent/1.0\"\n"
+"\n"
+"              # and fetch another URL too\n"
+"              url = \"example.com/docs/manpage.html\"\n"
+"              -O\n"
+"              referer = \"http://nowhereatall.example.com/\"\n"
+"              # --- End of example file ---\n"
 "\n"
-"              See also -b, --cookie and -c, --cookie-jar.\n"
+"              This option can be used multiple times to load  multiple  config\n"
+, stdout);
+ fputs(
+"              files.\n"
 "\n"
 "       --keepalive-time <seconds>\n"
-"              This option sets the time a  connection  needs  to  remain  idle\n"
-"              before  sending keepalive probes and the time between individual\n"
+"              This  option  sets  the  time  a connection needs to remain idle\n"
+"              before sending keepalive probes and the time between  individual\n"
 "              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"
 , stdout);
  fputs(
-"              offering  the  TCP_KEEPIDLE  and  TCP_KEEPINTVL  socket  options\n"
-"              (meaning Linux, recent AIX, HP-UX and more). This option has  no\n"
-"              effect if --no-keepalive is used.\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"
 "              If unspecified, the option defaults to 60 seconds.\n"
 "\n"
-"              Added in 7.18.0.\n"
-"\n"
-"       --key-type <type>\n"
-"              (TLS) Private key file type. Specify which type your --key  pro-\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"
 , stdout);
  fputs(
-"              vided  private  key  is. DER, PEM, and ENG are supported. If not\n"
-"              specified, PEM is assumed.\n"
+"              '~/.ssh/id_dsa', './id_rsa', './id_dsa'.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"       --key <key>\n"
-"              (TLS 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:\n"
+"       --key-type <type>\n"
+"              (SSL) Private key file type. Specify which type your --key  pro-\n"
+"              vided  private  key  is. DER, PEM, and ENG are supported. If not\n"
+"              specified, PEM is assumed.\n"
 "\n"
-, stdout);
- fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --krb <level>\n"
+, stdout);
+ fputs(
 "              (FTP) Enable Kerberos authentication and use. The level must  be\n"
 "              entered and should be one of 'clear', 'safe', 'confidential', or\n"
 "              'private'. Should you use a level that  is  not  one  of  these,\n"
 "              '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"
+"              supports it.\n"
+"\n"
+, stdout);
+ fputs(
 "              If this option is used several times, the last one will be used.\n"
+"\n"
+"       --krb4 <level>\n"
+"              (FTP) This is the former name for --krb. Do not use.\n"
+"\n"
+"       -l, --list-only\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"
+, stdout);
+ fputs(
+"              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"
+"              NLST; they do not include sub-directories and symbolic links.\n"
+"\n"
+"              (POP3)  When  retrieving a specific email from POP3, this switch\n"
+, stdout);
+ fputs(
+"              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"
+"              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"
+, stdout);
+ fputs(
+"              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"
+"              moved to a different location (indicated with a Location: header\n"
+"              and  a  3XX  response code), this option will make curl redo the\n"
+"              request on the new place. If used together with -i, --include or\n"
+"              -I, --head, headers from all requested pages will be shown. When\n"
+, stdout);
+ fputs(
+"              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"
+"              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"
+, stdout);
+ fputs(
+"              (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"
+"              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"
 , stdout);
  fputs(
-"              --krb  requires that the underlying libcurl was built to support\n"
-"              Kerberos.\n"
+"              that: --post301, --post302 and --post303.\n"
 "\n"
 "       --libcurl <file>\n"
 "              Append this option to any ordinary curl command  line,  and  you\n"
@@ -1410,22 +1433,20 @@ void hugehelp(void)
 "              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.\n"
+"              will be used. (Added in 7.16.1)\n"
 "\n"
+"       --limit-rate <speed>\n"
 , stdout);
  fputs(
-"              Added in 7.16.1.\n"
-"\n"
-"       --limit-rate <speed>\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"
 "              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"
 , stdout);
  fputs(
-"              appended.   Appending  'k' or 'K' will count the number as kilo-\n"
 "              bytes, 'm' or M' makes it megabytes, while 'g' or 'G'  makes  it\n"
 "              gigabytes. Examples: 200K, 3m and 1G.\n"
 "\n"
@@ -1433,942 +1454,653 @@ void hugehelp(void)
 "              take precedence and might cripple the rate-limiting slightly, to\n"
 "              help keeping the speed-limit logic working.\n"
 "\n"
-, stdout);
- fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"       -l, --list-only\n"
-"              (FTP  POP3)  (FTP)  When  listing  an FTP directory, this switch\n"
-"              forces a name-only view. This is especially useful if  the  user\n"
-"              wants  to  machine-parse  the contents of an FTP directory since\n"
-"              the normal directory view doesn't use a standard look or format.\n"
-"              When used like this, the option causes a NLST command to be sent\n"
+"       --local-port <num>[-num]\n"
 , stdout);
  fputs(
-"              to the server instead of LIST.\n"
-"\n"
-"              Note: Some FTP servers list only  files  in  their  response  to\n"
-"              NLST; they do not include sub-directories and symbolic links.\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"
-"              (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"
+"       --location-trusted\n"
+"              (HTTP/HTTPS)  Like  -L,  --location,  but will allow sending the\n"
 , stdout);
  fputs(
-"              sage id exists on the server and what size it is.\n"
+"              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"
+"              (which is plaintext in the case of HTTP Basic authentication).\n"
 "\n"
-"              Note: When combined with -X, --request, this option can be  used\n"
-"              to send an UIDL command instead, so the user may use the email's\n"
-"              unique identifier rather  than  it's  message  id  to  make  the\n"
-"              request.\n"
+"       -m, --max-time <seconds>\n"
+"              Maximum  time  in  seconds that you allow the whole operation to\n"
+, stdout);
+ fputs(
+"              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"
-"              Added in 7.21.5.\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"       --local-port <num/range>\n"
-"              Set  a  preferred single number or range (FROM-TO) of local port\n"
 , stdout);
  fputs(
-"              numbers to use for the connection(s).  Note that port numbers by\n"
-"              nature  are a scarce resource that will be busy at times so set-\n"
-"              ting this range to something too narrow might cause  unnecessary\n"
-"              connection setup failures.\n"
+"       --login-options <options>\n"
+"              Specify the login options to use during server authentication.\n"
 "\n"
-"              Added in 7.15.2.\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"
-"       --location-trusted\n"
-"              (HTTP)  Like  -L,  --location, but will allow sending the name +\n"
-"              password to all hosts that the site may redirect to. This may or\n"
 , stdout);
  fputs(
-"              may not introduce a security breach if the site redirects you to\n"
-"              a site to which you'll send your authentication info  (which  is\n"
-"              plaintext in the case of HTTP Basic authentication).\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"              See also -u, --user.\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"
+"              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"
+"              sent from.\n"
 "\n"
-"       -L, --location\n"
-"              (HTTP)  If  the server reports that the requested page has moved\n"
-"              to a different location (indicated with a Location: header and a\n"
 , stdout);
  fputs(
-"              3XX  response code), this option will make curl redo the request\n"
-"              on the new place. If used together with  -i,  --include  or  -I,\n"
-"              --head,  headers  from  all  requested pages will be shown. When\n"
-"              authentication is used, curl only sends its credentials  to  the\n"
-"              initial  host.  If a redirect takes curl to a different host, it\n"
-"              won't be able to intercept the user+password. See  also  --loca-\n"
-, stdout);
- fputs(
-"              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"
-"              (for example POST or PUT), it will do the following request with\n"
-"              a GET if the HTTP response was 301, 302, or 303. If the response\n"
-"              code  was  any  other  3xx code, curl will re-send the following\n"
-, stdout);
- fputs(
-"              request using the same unmodified method.\n"
+"              (Added in 7.20.0)\n"
 "\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"
-"       --login-options <options>\n"
-"              (IMAP POP3 SMTP) Specify the login options to use during  server\n"
-"              authentication.\n"
-"\n"
-"              You  can  use  the  login  options  to specify protocol specific\n"
-, stdout);
- fputs(
-"              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\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
-"\n"
-"              Added in 7.34.0.\n"
+"       --max-filesize <bytes>\n"
+"              Specify  the  maximum  size (in bytes) of a file to download. If\n"
+"              the file requested is larger than this value, the transfer  will\n"
+"              not start and curl will return with exit code 63.\n"
 "\n"
-"       --mail-auth <address>\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(
-"              (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"
-"              See also --mail-rcpt and --mail-from. Added in 7.25.0.\n"
-"\n"
-"       --mail-from <address>\n"
-"              (SMTP)  Specify  a single address that the given mail should get\n"
-"              sent from.\n"
-"\n"
-"              See also --mail-rcpt and --mail-auth. Added in 7.20.0.\n"
+"              fer  ends  up  being larger than this given limit. This concerns\n"
+"              both FTP and HTTP transfers.\n"
 "\n"
-, stdout);
- fputs(
 "       --mail-rcpt <address>\n"
 "              (SMTP) Specify a single address, user name or mailing list name.\n"
 "              Repeat this option several times to send to multiple recipients.\n"
 "              When  performing a mail transfer, the recipient should specify a\n"
-"              valid email address to send the mail to.\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"
-"              recipient  should be specified as the user name or user name and\n"
 , stdout);
  fputs(
+"              When performing an  address  verification  (VRFY  command),  the\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"
 "              \"Friends\" or \"London-Office\".  (Added in 7.34.0)\n"
 "\n"
-"              Added in 7.20.0.\n"
-"\n"
-"       -M, --manual\n"
-"              Manual. Display the huge help text.\n"
-"\n"
-"       --max-filesize <bytes>\n"
-, stdout);
- fputs(
-"              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"
-"              for such files this option has no effect even if the file trans-\n"
-"              fer ends up being larger than this given  limit.  This  concerns\n"
-, stdout);
- fputs(
-"              both FTP and HTTP transfers.\n"
-"\n"
-"              See also --limit-rate.\n"
-"\n"
 "       --max-redirs <num>\n"
-"              (HTTP)  Set  maximum  number  of redirection-followings allowed.\n"
-"              When -L, --location is used, is used to prevent curl  from  fol-\n"
-"              lowing  redirections \"in absurdum\". By default, the limit is set\n"
-"              to 50 redirections. Set this option to -1 to make it unlimited.\n"
-"\n"
-, stdout);
- fputs(
-"              If this option is used several times, the last one will be used.\n"
-"\n"
-"       -m, --max-time <time>\n"
-"              Maximum time in seconds that you allow the  whole  operation  to\n"
-"              take.   This is useful for preventing your batch jobs from hang-\n"
-"              ing for hours due to slow networks or links going  down.   Since\n"
-"              7.32.0, this option accepts decimal values, but the actual time-\n"
 , stdout);
  fputs(
-"              out will decrease in accuracy as the specified timeout increases\n"
-"              in decimal precision.\n"
+"              Set maximum number of  redirection-followings  allowed.  If  -L,\n"
+"              --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"
+"              less.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"              See also --connect-timeout.\n"
-"\n"
 "       --metalink\n"
-"              This  option  can  tell curl to parse and process a given URI as\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"
 , stdout);
  fputs(
-"              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"
+"              This option can tell curl to parse and process a  given  URI  as\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"
+, stdout);
+ fputs(
 "              memory and not stored in the local file system.\n"
 "\n"
 "              Example to use a remote Metalink file:\n"
 "\n"
-"               curl --metalink http://www.example.com/example.metalink\n"
+"              curl --metalink http://www.example.com/example.metalink\n"
 "\n"
-, stdout);
- fputs(
 "              To use a Metalink file in the local file system, use FILE proto-\n"
 "              col (file://):\n"
 "\n"
-"               curl --metalink file://example.metalink\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"
-"              note that if --metalink and -i,  --include  are  used  together,\n"
-"              --include  will be ignored. This is because including headers in\n"
+"              Please  note  that if FILE protocol is disabled, there is no way\n"
 , stdout);
  fputs(
-"              the response will break Metalink parser and if the  headers  are\n"
+"              to use a local Metalink file at the time of this  writing.  Also\n"
+"              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"
 "              included in the file described in Metalink file, hash check will\n"
 "              fail.\n"
 "\n"
-"              --metalink requires that the underlying  libcurl  was  built  to\n"
-"              support metalink. Added in 7.27.0.\n"
-"\n"
-"       --negotiate\n"
-"              (HTTP) Enables Negotiate (SPNEGO) authentication.\n"
-"\n"
-"              This  option  requires a library built with GSS-API or SSPI sup-\n"
-, stdout);
- fputs(
-"              port. Use -V, --version  to  see  if  your  curl  supports  GSS-\n"
-"              API/SSPI or 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"
-"              --user option aren't actually used.\n"
-"\n"
-"              If this option is used several times,  only  the  first  one  is\n"
-, stdout);
- fputs(
-"              used.\n"
-"\n"
-"              See also --basic and --ntlm and --anyauth and --proxy-negotiate.\n"
-"\n"
-"       --netrc-file <filemame>\n"
-"              This  option  is similar to -n, --netrc, except that you provide\n"
-"              the path (absolute or relative) to  the  netrc  file  that  Curl\n"
-"              should use.  You can only specify one netrc file per invocation.\n"
-"              If several --netrc-file options are provided, the last one  will\n"
-"              be used.\n"
+"              (Added in 7.27.0, if built against the libmetalink library.)\n"
 "\n"
 , stdout);
  fputs(
-"              It will abide by --netrc-optional if specified.\n"
-"\n"
-"              This option overrides -n, --netrc. Added in 7.21.5.\n"
-"\n"
-"       --netrc-optional\n"
-"              Very  similar  to  -n, --netrc, but this option makes the .netrc\n"
-"              usage optional and not mandatory as the -n, --netrc option does.\n"
-"\n"
-"              See also --netrc-file. This option overrides -n, --netrc.\n"
-"\n"
 "       -n, --netrc\n"
-"              Makes curl scan the .netrc  (_netrc  on  Windows)  file  in  the\n"
-, stdout);
- fputs(
+"              Makes  curl  scan  the  .netrc  (_netrc  on Windows) file in the\n"
 "              user's home directory for login name and password. This is typi-\n"
-"              cally used for FTP on Unix. If used with HTTP, curl will  enable\n"
+"              cally  used for FTP on Unix. If used with HTTP, curl will enable\n"
 "              user authentication. See netrc(5) ftp(1) for details on the file\n"
-"              format. Curl will not complain if that  file  doesn't  have  the\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"
-"              able). The environment variable \"HOME\" is used to find the  home\n"
-"              directory.\n"
-"\n"
 , stdout);
  fputs(
-"              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"
+"              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"
 "              'myself' and password 'secret' should look similar to:\n"
 "\n"
 "              machine host.domain.com login myself password secret\n"
 "\n"
-"       -:, --next\n"
-"              Tells curl to use a separate operation for the following URL and\n"
-"              associated  options.  This  allows  you  to  send  several   URL\n"
-, stdout);
- fputs(
-"              requests,  each  with  their  own specific options, for example,\n"
-"              such as different user names or custom requests for each.\n"
-"\n"
-"              -:, --next will reset all local options  and  only  global  ones\n"
-"              will  have  their values survive over to the operation following\n"
-"              the -:, --next instruction. Global options  include  -v,  --ver-\n"
-"              bose, --trace, --trace-ascii and --fail-early.\n"
-"\n"
-, stdout);
- fputs(
-"              For  example,  you can do both a GET and a POST in a single com-\n"
-"              mand line:\n"
-"\n"
-"               curl www1.example.com --next -d postthis www2.example.com\n"
-"\n"
-"              Added in 7.36.0.\n"
-"\n"
-"       --no-alpn\n"
-"              (HTTPS) Disable the ALPN  TLS  extension.  ALPN  is  enabled  by\n"
-"              default  if  libcurl was built with an SSL library that supports\n"
-"              ALPN. ALPN is used by a libcurl that supports HTTP/2 to  negoti-\n"
+"       -N, --no-buffer\n"
 , stdout);
  fputs(
-"              ate HTTP/2 support with the server during https sessions.\n"
-"\n"
-"              See  also  --no-npn  and  --http2.  --no-alpn  requires that the\n"
-"              underlying libcurl was built to support TLS. Added in 7.36.0.\n"
-"\n"
-"       -N, --no-buffer\n"
 "              Disables the buffering of the output stream. In normal work sit-\n"
 "              uations,  curl  will  use a standard buffered output stream that\n"
 "              will have the effect that it will output the data in chunks, not\n"
-, stdout);
- fputs(
 "              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"
 "              thus use --buffer to enforce the buffering.\n"
 "\n"
-"       --no-keepalive\n"
-"              Disables  the  use  of keepalive messages on the TCP connection.\n"
-"              curl otherwis enables them by default.\n"
-"\n"
-"              Note that this is the negated option name  documented.  You  can\n"
-, stdout);
- fputs(
-"              thus use --keepalive to enforce keepalive.\n"
-"\n"
-"       --no-npn\n"
-"              (HTTPS) Disable the NPN TLS extension. NPN is enabled by default\n"
-"              if libcurl was built with an SSL library that supports NPN.  NPN\n"
-"              is  used  by  a libcurl that supports HTTP/2 to negotiate HTTP/2\n"
-"              support with the server during https sessions.\n"
-"\n"
-"              See also --no-alpn  and  --http2.  --no-npn  requires  that  the\n"
-, stdout);
- fputs(
-"              underlying libcurl was built to support TLS. Added in 7.36.0.\n"
-"\n"
-"       --no-sessionid\n"
-"              (TLS)  Disable curl's use of SSL session-ID caching.  By default\n"
-"              all transfers are done using the cache. Note that while  nothing\n"
-"              should  ever  get  hurt  by attempting to reuse SSL session-IDs,\n"
-"              there seem to be broken SSL implementations in the wild that may\n"
-"              require you to disable this in order for you to succeed.\n"
-"\n"
-, stdout);
- fputs(
-"              Note  that  this  is the negated option name documented. You can\n"
-"              thus use --sessionid to enforce session-ID caching.\n"
-"\n"
-"              Added in 7.16.0.\n"
-"\n"
-"       --noproxy <no-proxy-list>\n"
-"              Comma-separated list of hosts which do not use a proxy,  if  one\n"
-"              is  specified.  The only wildcard is a single * character, which\n"
-"              matches all hosts, and effectively disables the proxy. Each name\n"
 , stdout);
  fputs(
-"              in  this  list  is matched as either a domain which contains the\n"
-"              hostname, or the hostname itself. For example,  local.com  would\n"
-"              match   local.com,  local.com:80,  and  www.local.com,  but  not\n"
-"              www.notlocal.com.\n"
-"\n"
-"              Since 7.53.0, This option overrides  the  environment  variables\n"
-"              that  disable the proxy. If there's an environment variable dis-\n"
-, stdout);
- fputs(
-"              abling a proxy, you can set noproxy list to \"\" to override it.\n"
-"\n"
-"              Added in 7.19.4.\n"
-"\n"
-"       --ntlm-wb\n"
-"              (HTTP) Enables NTLM much in the style --ntlm does, but hand over\n"
-"              the  authentication  to the separate binary ntlmauth application\n"
-"              that is executed when needed.\n"
-"\n"
-"              See also --ntlm and --proxy-ntlm.\n"
-"\n"
-"       --ntlm (HTTP) Enables  NTLM  authentication.  The  NTLM  authentication\n"
-, stdout);
- fputs(
-"              method was designed by Microsoft and is used by IIS web servers.\n"
-"              It is a proprietary protocol, reverse-engineered by clever  peo-\n"
-"              ple and implemented in curl based on their efforts. This kind of\n"
-"              behavior should not be endorsed, you should  encourage  everyone\n"
-"              who  uses  NTLM to switch to a public and documented authentica-\n"
-"              tion method instead, such as Digest.\n"
-"\n"
-, stdout);
- fputs(
-"              If you want to enable NTLM for your proxy  authentication,  then\n"
-"              use --proxy-ntlm.\n"
-"\n"
-"              If  this  option  is  used  several times, only the first one is\n"
-"              used.\n"
-"\n"
-"              See also  --proxy-ntlm.  --ntlm  requires  that  the  underlying\n"
-"              libcurl  was built to support TLS. This option overrides --basic\n"
-"              and --negotiated and --digest and --anyauth.\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"
-"              --user options.\n"
-"\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"
-"       -o, --output <file>\n"
-, stdout);
- fputs(
-"              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"
-"              with the current string for the URL being fetched. Like in:\n"
-"\n"
-"               curl http://{one,two}.example.com -o \"file_#1.txt\"\n"
-"\n"
-"              or use several variables like:\n"
-"\n"
-"               curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n"
-"\n"
-, stdout);
- fputs(
-"              You  may use this option as many times as the number of URLs you\n"
-"              have. For example, if you specify two URLs on the  same  command\n"
-"              line, you can use it like this:\n"
-"\n"
-"                curl -o aa example.com -o bb example.net\n"
-"\n"
-"              and  the  order  of  the -o options and the URLs doesn't matter,\n"
-"              just that the first -o is for the first URL and so  on,  so  the\n"
-"              above command line can also be written as\n"
-"\n"
-, stdout);
- fputs(
-"                curl example.com example.net -o aa -o bb\n"
-"\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"
-"              See   also  -O,  --remote-name  and  --remote-name-all  and  -J,\n"
-"              --remote-header-name.\n"
-"\n"
-"       --pass <phrase>\n"
-"              (SSH TLS) Passphrase for the private key\n"
-"\n"
-, stdout);
- fputs(
-"              If this option is used several times, the last one will be used.\n"
-"\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"
-"              standards but with this option set you tell it not to do that.\n"
-"\n"
-"              Added in 7.42.0.\n"
-"\n"
-"       --pinnedpubkey <hashes>\n"
-"              (TLS) 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(
-"              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"
-"              PEM/DER support:\n"
-"                7.39.0: OpenSSL, GnuTLS and GSKit\n"
-"                7.43.0: NSS and wolfSSL/CyaSSL\n"
-"                7.47.0: mbedtls\n"
-"                7.49.0: PolarSSL sha256 support:\n"
-"                7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL.\n"
-, stdout);
- fputs(
-"                7.47.0: mbedtls\n"
-"                7.49.0: PolarSSL Other SSL backends not supported.\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 7231/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"
-, stdout);
- fputs(
-"              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.\n"
-"\n"
-"              See also --post302 and --post303 and -L,  --location.  Added  in\n"
-"              7.17.1.\n"
-"\n"
-"       --post302\n"
-"              (HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST\n"
-, stdout);
- fputs(
-"              requests into GET requests when following a 302 redirection. The\n"
-"              non-RFC  behaviour  is  ubiquitous in web browsers, so curl does\n"
-"              the conversion by default to maintain  consistency.  However,  a\n"
-"              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.\n"
-"\n"
-"              See  also  --post301  and --post303 and -L, --location. Added in\n"
-, stdout);
- fputs(
-"              7.19.1.\n"
-"\n"
-"       --post303\n"
-"              (HTTP) Tells curl to respect RFC 7231/6.4.4 and not convert POST\n"
-"              requests into GET requests when following a 303 redirection. The\n"
-"              non-RFC behaviour is ubiquitous in web browsers,  so  curl  does\n"
-"              the  conversion  by  default to maintain consistency. However, a\n"
-"              server may require a POST to remain a POST after  such  a  redi-\n"
-, stdout);
- fputs(
-"              rection.  This  option is meaningful only when using -L, --loca-\n"
-"              tion.\n"
-"\n"
-"              See also --post302 and --post301 and -L,  --location.  Added  in\n"
-"              7.26.0.\n"
-"\n"
-"       --preproxy [protocol://]host[:port]\n"
-"              Use  the  specified  SOCKS proxy before connecting to an HTTP or\n"
-"              HTTPS -x, --proxy. In such a case curl  first  connects  to  the\n"
-"              SOCKS  proxy  and  then  connects (through SOCKS) to the HTTP or\n"
-, stdout);
- fputs(
-"              HTTPS proxy. Hence pre proxy.\n"
-"\n"
-"              The pre proxy string should be specified with a protocol:// pre-\n"
-"              fix  to  specify  alternative  proxy  protocols.  Use socks4://,\n"
-"              socks4a://, socks5:// or  socks5h://  to  request  the  specific\n"
-"              SOCKS  version  to be used. No protocol specified will make curl\n"
-"              default to SOCKS4.\n"
-"\n"
-"              If the port number is not specified in the proxy string,  it  is\n"
-, stdout);
- fputs(
-"              assumed to be 1080.\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"
-"              ters such as @ by using %40 or pass in a colon with %3a.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
-"\n"
-"              Added in 7.52.0.\n"
-"\n"
-"       -#, --progress-bar\n"
-"              Make  curl  display  transfer  progress as a simple progress bar\n"
-, stdout);
- fputs(
-"              instead of the standard, more informational, meter.\n"
-"\n"
-"              This progress bar draws a single line of '#'  characters  across\n"
-"              the screen and shows a percentage if the transfer size is known.\n"
-"              For transfers without a known size, it will instead  output  one\n"
-"              '#' character for every 1024 bytes transferred.\n"
-"\n"
-"       --proto-default <protocol>\n"
-"              Tells curl to use protocol for any URL missing a scheme name.\n"
-"\n"
-, stdout);
- fputs(
-"              Example:\n"
-"\n"
-"               curl --proto-default https ftp.mozilla.org\n"
-"\n"
-"              An  unknown  or  unsupported  protocol causes error CURLE_UNSUP-\n"
-"              PORTED_PROTOCOL (1).\n"
-"\n"
-"              This option does not change the default proxy protocol (http).\n"
-"\n"
-"              Without this option curl would make a guess based on  the  host,\n"
-"              see --url for details.\n"
-"\n"
-"              Added in 7.45.0.\n"
+"       --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"
+"              will be used.  (Added in 7.21.5)\n"
 "\n"
-"       --proto-redir <protocols>\n"
+"              This  option  overrides  any use of --netrc as they are mutually\n"
 , stdout);
  fputs(
-"              Tells  curl to limit what protocols it may use on redirect. Pro-\n"
-"              tocols denied by --proto are not overridden by this option.  See\n"
-"              --proto for how protocols are represented.\n"
+"              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"
+"              optional and not mandatory as the --netrc option does.\n"
 "\n"
-"              Example, allow only HTTP and HTTPS on redirect:\n"
+"       --negotiate\n"
+"              (HTTP) Enables Negotiate (SPNEGO) authentication.\n"
 "\n"
-"               curl --proto-redir -all,http,https http://example.com\n"
+"              If  you  want to enable Negotiate (SPNEGO) for proxy authentica-\n"
+"              tion, then use --proxy-negotiate.\n"
 "\n"
-"              By default curl will allow all protocols on redirect except sev-\n"
 , stdout);
  fputs(
-"              eral disabled for security reasons: Since 7.19.4  FILE  and  SCP\n"
-"              are  disabled,  and since 7.40.0 SMB and SMBS are also disabled.\n"
-"              Specifying all  or  +all  enables  all  protocols  on  redirect,\n"
-"              including those disabled for security.\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"
-"              Added in 7.20.2.\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"
-"       --proto <protocols>\n"
-"              Tells  curl  to limit what protocols it may use in the transfer.\n"
 , stdout);
  fputs(
-"              Protocols are evaluated left to right, are comma separated,  and\n"
-"              are each a protocol name or\n"
+"              If  this  option  is  used  several times, only the first one is\n"
+"              used.\n"
 "\n"
-"              +  Permit this protocol in addition to protocols already permit-\n"
-"                 ted (this is the default if no modifier is used).\n"
+"       --no-keepalive\n"
+"              Disables the use of keepalive messages on the TCP connection, as\n"
+"              by default curl enables them.\n"
 "\n"
-"              -  Deny this protocol, removing it from the  list  of  protocols\n"
-"                 already permitted.\n"
+"              Note  that  this  is the negated option name documented. You can\n"
+"              thus use --keepalive to enforce keepalive.\n"
 "\n"
-"              =  Permit  only this protocol (ignoring the list already permit-\n"
+"       --no-sessionid\n"
+"              (SSL) Disable curl's use of SSL session-ID caching.  By  default\n"
 , stdout);
  fputs(
-"                 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"
+"              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"
+"              in 7.16.0)\n"
 "\n"
-"              --proto -all,https,+http\n"
-"                             only enables http and https\n"
+"              Note  that  this  is the negated option name documented. You can\n"
+"              thus use --sessionid to enforce session-ID caching.\n"
 "\n"
-"              --proto =http,https\n"
-"                             also only enables http and https\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"
+"              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"
+, stdout);
+ fputs(
+"              match   local.com,  local.com:80,  and  www.local.com,  but  not\n"
+"              www.notlocal.com.  (Added in 7.19.4).\n"
 "\n"
+"       --connect-to <host:port:connect-to-host:connect-to-port>\n"
+"              For a request to the given \"host:port\" pair,  connect  to  \"con-\n"
+"              nect-to-host:connect-to-port\"  instead.   This  is  suitable  to\n"
+"              direct the request at a specific  server,  e.g.  at  a  specific\n"
+, stdout);
+ fputs(
+"              cluster  node in a cluster of servers.  This option is only used\n"
+"              to establish the network connection.  It  does  NOT  affect  the\n"
+"              hostname/port  that  is  used for TLS/SSL (e.g. SNI, certificate\n"
+"              verification) or for  the  application  protocols.   \"host\"  and\n"
+"              \"port\"  may be the empty string, meaning \"any host/port\".  \"con-\n"
+"              nect-to-host\"  and  \"connect-to-port\"  may  also  be  the  empty\n"
 , stdout);
  fputs(
-"       Unknown protocols produce a warning. This allows scripts to safely rely\n"
-"       on being able to disable potentially dangerous protocols, without rely-\n"
-"       ing  upon  support  for that protocol being built into curl to avoid an\n"
-"       error.\n"
+"              string,  meaning  \"use  the request's original host/port\".  This\n"
+"              option can be used many times to add many connect rules.  (Added\n"
+"              in 7.49.0).\n"
 "\n"
-"       This option can be used multiple times, in which case the effect is the\n"
-"       same as concatenating the protocols into one instance of the option.\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"
+, stdout);
+ fputs(
+"              ple and implemented in curl based on their efforts. This kind of\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"
-"       See also --proto-redir and --proto-default. Added in 7.20.2.\n"
+"              If  you  want to enable NTLM for your proxy authentication, then\n"
+"              use --proxy-ntlm.\n"
 "\n"
-"       --proxy-anyauth\n"
+"              This option requires a library built with SSL support.  Use  -V,\n"
 , stdout);
  fputs(
-"              Tells  curl to pick a suitable authentication method when commu-\n"
-"              nicating with the given HTTP proxy. This might  cause  an  extra\n"
-"              request/response round-trip.\n"
+"              --version to see if your curl supports NTLM.\n"
 "\n"
-"              See also -x, --proxy and --proxy-basic and --proxy-digest. Added\n"
-"              in 7.13.2.\n"
+"              If  this  option  is  used  several times, only the first one is\n"
+"              used.\n"
 "\n"
-"       --proxy-basic\n"
-"              Tells curl to use HTTP Basic authentication  when  communicating\n"
-"              with the given proxy. Use --basic for enabling HTTP Basic with a\n"
+"       --ntlm-wb\n"
+"              (HTTP) Enables NTLM much in the style --ntlm does, but hand over\n"
+"              the  authentication  to the separate binary ntlmauth application\n"
+"              that is executed when needed.\n"
+"\n"
+"       -o, --output <file>\n"
+"              Write output to <file> instead of stdout. If you are using {} or\n"
 , stdout);
  fputs(
-"              remote host. Basic is the  default  authentication  method  curl\n"
-"              uses with proxies.\n"
-"\n"
-"              See also -x, --proxy and --proxy-anyauth and --proxy-digest.\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"
-"       --proxy-cacert <file>\n"
-"              Same as --cacert but used in HTTPS proxy context.\n"
+"                curl http://{one,two}.example.com -o \"file_#1.txt\"\n"
 "\n"
-"              See  also  --proxy-capath  and  --cacert  and  --capath  and -x,\n"
-"              --proxy. Added in 7.52.0.\n"
+"              or use several variables like:\n"
 "\n"
-"       --proxy-capath <dir>\n"
-"              Same as --capath but used in HTTPS proxy context.\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"
 , stdout);
  fputs(
-"              See also --proxy-cacert and -x, --proxy and --capath.  Added  in\n"
-"              7.52.0.\n"
-"\n"
-"       --proxy-cert-type <type>\n"
-"              Same as --cert-type but used in HTTPS proxy context.\n"
+"              have.\n"
 "\n"
-"              Added in 7.52.0.\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"
-"       --proxy-cert <cert[:passwd]>\n"
-"              Same as -E, --cert but used in HTTPS proxy context.\n"
+"       -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"
+"              off.)\n"
 "\n"
-"              Added in 7.52.0.\n"
+, stdout);
+ fputs(
+"              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"
-"       --proxy-ciphers <list>\n"
-"              Same as --ciphers but used in HTTPS proxy context.\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"
+, stdout);
+ fputs(
+"              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"
-"              Added in 7.52.0.\n"
+"              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"
+"              file name.\n"
 "\n"
 , stdout);
  fputs(
-"       --proxy-crlfile <file>\n"
-"              Same as --crlfile but used in HTTPS proxy context.\n"
-"\n"
-"              Added in 7.52.0.\n"
+"              You may use this option as many times as the number of URLs  you\n"
+"              have.\n"
 "\n"
-"       --proxy-digest\n"
-"              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"
+"       --oauth2-bearer\n"
+"              (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"
+"              --user options.\n"
 "\n"
-"              See also -x, --proxy and --proxy-anyauth and --proxy-basic.\n"
+"              The Bearer Token and user name are formatted  according  to  RFC\n"
+"              6750.\n"
 "\n"
-"       --proxy-header <header>\n"
 , stdout);
  fputs(
+"              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"
 "              the  equivalent option to -H, --header but is for proxy communi-\n"
 "              cation only like in CONNECT requests when you  want  a  separate\n"
+, stdout);
+ fputs(
 "              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(
 "              with the proper end-of-line marker, you should thus not add that\n"
 "              as a part of the header content: do not add newlines or carriage\n"
 "              returns, they will only mess things up for you.\n"
 "\n"
 "              Headers  specified  with  this  option  will  not be included in\n"
+, stdout);
+ fputs(
 "              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"
 "              multiple headers.\n"
+"              (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"
+, stdout);
+ fputs(
+"              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"
+, stdout);
+ fputs(
+"              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"
+"                     want to use (Unix only)\n"
 "\n"
+"              IP address\n"
+"                     i.e \"192.168.10.1\" to specify the exact IP address\n"
+"\n"
+"              host name\n"
 , stdout);
  fputs(
-"              Added in 7.37.0.\n"
-"       --proxy-insecure\n"
-"              Same as -k, --insecure but used in HTTPS proxy context.\n"
+"                     i.e \"my.host.domain\" to specify the machine\n"
 "\n"
-"              Added in 7.52.0.\n"
+"              -      make curl pick the same IP address that is  already  used\n"
+"                     for the control connection\n"
 "\n"
-"       --proxy-key-type <type>\n"
-"              Same as --key-type but used in HTTPS proxy context.\n"
+"              If this option is used several times, the last one will be used.\n"
+"              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"
-"              Added in 7.52.0.\n"
+, stdout);
+ fputs(
+"              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"
+"              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"
-"       --proxy-key <key>\n"
-"              Same as --key but used in HTTPS proxy context.\n"
+"       --pass <phrase>\n"
+"              (SSL/SSH) Passphrase for the private key\n"
 "\n"
-"       --proxy-negotiate\n"
-"              Tells  curl  to  use HTTP Negotiate (SPNEGO) authentication when\n"
 , stdout);
  fputs(
-"              communicating with the given proxy. Use --negotiate for enabling\n"
-"              HTTP Negotiate (SPNEGO) with a remote host.\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"              See also --proxy-anyauth and --proxy-basic. Added in 7.17.1.\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"
+"              standards but with this option set you tell it not to do that.\n"
 "\n"
-"       --proxy-ntlm\n"
-"              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"
+"              (Added in 7.42.0)\n"
 "\n"
-"              See also --proxy-negotiate and --proxy-anyauth.\n"
+"       --post301\n"
+"              (HTTP) Tells curl to respect RFC 7230/6.4.2 and not convert POST\n"
+, stdout);
+ fputs(
+"              requests into GET requests when following a 301 redirection. The\n"
+"              non-RFC behaviour is ubiquitous in web browsers,  so  curl  does\n"
+"              the  conversion  by  default to maintain consistency. However, a\n"
+"              server may require a POST to remain a POST after  such  a  redi-\n"
+"              rection.  This  option is meaningful only when using -L, --loca-\n"
+"              tion (Added in 7.17.1)\n"
 "\n"
+"       --post302\n"
+, stdout);
+ fputs(
+"              (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"
+"              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"
 , stdout);
  fputs(
-"       --proxy-pass <phrase>\n"
-"              Same as --pass but used in HTTPS proxy context.\n"
+"              tion (Added in 7.19.1)\n"
 "\n"
-"              Added in 7.52.0.\n"
+"       --post303\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"
+"              non-RFC behaviour is ubiquitous in web browsers,  so  curl  does\n"
+"              the  conversion  by  default to maintain consistency. However, a\n"
+"              server may require a POST to remain a POST after  such  a  redi-\n"
+, stdout);
+ fputs(
+"              rection.  This  option is meaningful only when using -L, --loca-\n"
+"              tion (Added in 7.26.0)\n"
 "\n"
-"       --proxy-service-name <name>\n"
-"              This  option  allows  you  to  change the service name for proxy\n"
-"              negotiation.\n"
+"       --proto <protocols>\n"
+"              Tells  curl  to  use  the  listed  protocols  for  its   initial\n"
+"              retrieval. Protocols are evaluated left to right, are comma sep-\n"
+"              arated, and are each a protocol name or 'all',  optionally  pre-\n"
+"              fixed by zero or more modifiers. Available modifiers are:\n"
 "\n"
-"              Added in 7.43.0.\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"
-"       --proxy-ssl-allow-beast\n"
-"              Same as --ssl-allow-beast but used in HTTPS proxy context.\n"
+"              -  Deny this protocol, removing it from the  list  of  protocols\n"
+"                 already permitted.\n"
 "\n"
-"              Added in 7.52.0.\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"
-"       --proxy-tlsauthtype <type>\n"
 , stdout);
  fputs(
-"              Same as --tlsauthtype but used in HTTPS proxy context.\n"
+"              For example:\n"
 "\n"
-"              Added in 7.52.0.\n"
+"              --proto -ftps  uses the default protocols, but disables ftps\n"
+"\n"
+"              --proto -all,https,+http\n"
+"                             only enables http and https\n"
 "\n"
-"       --proxy-tlspassword <string>\n"
-"              Same as --tlspassword but used in HTTPS proxy context.\n"
+"              --proto =http,https\n"
+"                             also only enables http and https\n"
 "\n"
-"              Added in 7.52.0.\n"
+"              Unknown  protocols  produce  a  warning.  This allows scripts to\n"
+"              safely rely on being able to disable potentially dangerous  pro-\n"
+, stdout);
+ fputs(
+"              tocols,  without  relying  upon  support for that protocol being\n"
+"              built into curl to avoid an error.\n"
 "\n"
-"       --proxy-tlsuser <name>\n"
-"              Same as --tlsuser but used in HTTPS proxy context.\n"
+"              This option can be used multiple times, in which case the effect\n"
+"              is  the same as concatenating the protocols into one instance of\n"
+"              the option.\n"
 "\n"
-"              Added in 7.52.0.\n"
+"              (Added in 7.20.2)\n"
 "\n"
-"       --proxy-tlsv1\n"
-"              Same as -1, --tlsv1 but used in HTTPS proxy context.\n"
+"       --proto-default <protocol>\n"
+"              Tells curl to use protocol for any URL missing a scheme name.\n"
 "\n"
-"              Added in 7.52.0.\n"
+"              Example:\n"
 "\n"
 , stdout);
  fputs(
-"       -U, --proxy-user <user:password>\n"
-"              Specify the user name and password to use for proxy  authentica-\n"
-"              tion.\n"
+"              --proto-default https ftp.mozilla.org\n"
+"                     https://ftp.mozilla.org\n"
 "\n"
-"              If  you  use  a  Windows  SSPI-enabled curl binary and do either\n"
-"              Negotiate or NTLM authentication  then  you  can  tell  curl  to\n"
-"              select the user name and password from your environment by spec-\n"
-"              ifying a single colon with this option: \"-U :\".\n"
+"       An unknown or unsupported protocol causes error  CURLE_UNSUPPORTED_PRO-\n"
+"       TOCOL.\n"
+"\n"
+"       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"
 , stdout);
  fputs(
-"              If this option is used several times, the last one will be used.\n"
+"              Tells curl to use the listed protocols on redirect. See  --proto\n"
+"              for how protocols are represented.\n"
 "\n"
-"       -x, --proxy [protocol://]host[:port]\n"
-"              Use the specified proxy.\n"
+"              Example:\n"
+"\n"
+"              --proto-redir -all,http,https\n"
+"                     Allow only HTTP and HTTPS on redirect.\n"
 "\n"
-"              The proxy string can be specified with a protocol:// prefix.  No\n"
-"              protocol specified or http:// will be treated as HTTP proxy. Use\n"
-"              socks4://, socks4a://, socks5:// or socks5h:// to request a spe-\n"
-"              cific SOCKS version to be used.  (The protocol support was added\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"
 , stdout);
  fputs(
-"              in curl 7.21.7)\n"
+"       enables all protocols on redirect, including those disabled  for  secu-\n"
+"       rity.\n"
 "\n"
-"              HTTPS proxy support via https:// protocol prefix  was  added  in\n"
-"              7.52.0 for OpenSSL, GnuTLS and NSS.\n"
+"       (Added in 7.20.2)\n"
 "\n"
-"              Unrecognized  and  unsupported  proxy  protocols  cause an error\n"
-"              since 7.52.0.  Prior versions may ignore the  protocol  and  use\n"
-"              http:// instead.\n"
-"\n"
-"              If  the  port number is not specified in the proxy string, it is\n"
-"              assumed to be 1080.\n"
+"       --proxy-anyauth\n"
+"              Tells  curl to pick a suitable authentication method when commu-\n"
+"              nicating with  the  given  proxy.  This  might  cause  an  extra\n"
+"              request/response round-trip. (Added in 7.13.2)\n"
 "\n"
+"       --proxy-basic\n"
+"              Tells  curl  to use HTTP Basic authentication when communicating\n"
 , stdout);
  fputs(
-"              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"
+"              with the given proxy. Use --basic for enabling HTTP Basic with a\n"
+"              remote  host.  Basic  is  the default authentication method curl\n"
+"              uses with proxies.\n"
 "\n"
-"              All operations that are performed over an HTTP proxy will trans-\n"
-"              parently  be  converted  to HTTP. It means that certain protocol\n"
-"              specific operations might not be available. This is not the case\n"
+"       --proxy-digest\n"
+"              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(
-"              if you can tunnel through the proxy, as one with the -p, --prox-\n"
-"              ytunnel option.\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"
-"              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"
-"              ters such as @ by using %40 or pass in a colon with %3a.\n"
+"       --proxy-ntlm\n"
+"              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"
-"              The proxy host can be specified the exact same way as the  proxy\n"
-"              environment  variables,  including the protocol prefix (http://)\n"
+"       --proxy-service-name <servicename>\n"
 , stdout);
  fputs(
-"              and the embedded user + password.\n"
+"              This option allows you to change  the  service  name  for  proxy\n"
+"              negotiation.\n"
 "\n"
-"              If this option is used several times, the last one will be used.\n"
+"              Examples:   --proxy-negotiate   proxy-name  --proxy-service-name\n"
+"              sockd would use sockd/proxy-name.  (Added in 7.43.0).\n"
 "\n"
-"       --proxy1.0 <host[:port]>\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"
-"              --proxy, is that attempts to use CONNECT through the proxy  will\n"
 , stdout);
  fputs(
+"              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"
-"       -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(
-"              number curl wants to tunnel through to.\n"
-"\n"
-"              See also -x, --proxy.\n"
-"\n"
 "       --pubkey <key>\n"
-"              (SFTP SCP) Public key file name. Allows you to provide your pub-\n"
-"              lic key in this separate file.\n"
+"              (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"
 , stdout);
  fputs(
+"              (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"
 "              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"
+"              libcurl  to  be linked against a copy of libssh2 1.2.8 or higher\n"
 "              that is itself linked against OpenSSL.)\n"
 "\n"
-"       -Q, --quote\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"
+"       -q, --disable\n"
+"              If used as the first parameter on the command line,  the  curlrc\n"
 , stdout);
  fputs(
+"              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"
 "              exact). To make commands take place after a successful transfer,\n"
-"              prefix  them  with  a  dash '-'.  To make commands be sent after\n"
+, stdout);
+ fputs(
+"              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.\n"
-"\n"
-"              If the server returns failure  for  one  of  the  commands,  the\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"
+"              server returns failure for one of the commands, the entire oper-\n"
+"              ation  will  be aborted. You must send syntactically correct FTP\n"
 , stdout);
  fputs(
-"              entire  operation  will  be aborted. You must send syntactically\n"
-"              correct FTP commands as RFC 959 defines to FTP servers,  or  one\n"
-"              of the commands listed below to SFTP servers.\n"
-"\n"
-"              This  option can be used multiple times. When speaking to an FTP\n"
-"              server, prefix the command with an asterisk  (*)  to  make  curl\n"
-"              continue  even if the command fails as by default curl will stop\n"
-"              at first failure.\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"
+"              SFTP is a binary protocol. Unlike for FTP, curl interprets  SFTP\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"
 "              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"
@@ -2376,9 +2108,9 @@ void hugehelp(void)
 "\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"
 , stdout);
  fputs(
-"                     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"
@@ -2388,9 +2120,9 @@ void hugehelp(void)
 "\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"
 , stdout);
  fputs(
-"                     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"
@@ -2400,10 +2132,10 @@ void hugehelp(void)
 "\n"
 "              mkdir directory_name\n"
 "                     The mkdir command creates  the  directory  named  by  the\n"
-, stdout);
- fputs(
 "                     directory_name operand.\n"
 "\n"
+, stdout);
+ fputs(
 "              pwd    The pwd command returns the absolute pathname of the cur-\n"
 "                     rent working directory.\n"
 "\n"
@@ -2413,11 +2145,11 @@ void hugehelp(void)
 "                     target operand.\n"
 "\n"
 "              rm file\n"
-, stdout);
- fputs(
 "                     The rm command removes the file specified by the file op-\n"
 "                     erand.\n"
 "\n"
+, stdout);
+ fputs(
 "              rmdir directory\n"
 "                     The  rmdir  command removes the directory entry specified\n"
 "                     by the directory operand, provided it is empty.\n"
@@ -2425,22 +2157,15 @@ void hugehelp(void)
 "              symlink source_file target_file\n"
 "                     See ln.\n"
 "\n"
-"       --random-file <file>\n"
-"              Specify the path name to file containing what will be considered\n"
-, stdout);
- fputs(
-"              as  random  data. The data may be used to seed the random engine\n"
-"              for SSL connections.  See also the --egd-file option.\n"
-"\n"
 "       -r, --range <range>\n"
-"              (HTTP FTP SFTP FILE) Retrieve a byte range (i.e a partial  docu-\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"
-"\n"
 , stdout);
  fputs(
+"              0-499     specifies the first 500 bytes\n"
+"\n"
 "              500-999   specifies the second 500 bytes\n"
 "\n"
 "              -500      specifies the last 500 bytes\n"
@@ -2453,10 +2178,10 @@ void hugehelp(void)
 "                        specifies two separate 100-byte ranges(*) (HTTP)\n"
 "\n"
 "              (*) = NOTE that this will cause the server to reply with a  mul-\n"
-"              tipart response!\n"
-"\n"
 , stdout);
  fputs(
+"              tipart response!\n"
+"\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"
 "              ter is given in the range, the server's response will be unspec-\n"
@@ -2474,184 +2199,87 @@ void hugehelp(void)
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"       --raw  (HTTP) When used, it disables all internal HTTP decoding of con-\n"
-, stdout);
- fputs(
-"              tent  or  transfer  encodings  and  instead makes them passed on\n"
-"              unaltered, raw.\n"
-"\n"
-"              Added in 7.16.2.\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  -e,\n"
-"              --referer  URL  to  make curl automatically set the previous URL\n"
-, stdout);
- fputs(
-"              when it follows a Location: header. The \";auto\"  string  can  be\n"
-"              used alone, even if you don't set an initial -e, --referer.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
-"\n"
-"              See also -A, --user-agent and -H, --header.\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"
+"       -R, --remote-time\n"
+"              When used, this will make curl attempt to figure out  the  time-\n"
 , stdout);
  fputs(
-"              extracting a filename from the URL.\n"
+"              stamp  of  the  remote  file,  and if that is available make the\n"
+"              local file get that same timestamp.\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"
+"       --random-file <file>\n"
+"              (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"
+"              engine for SSL connections.  See also the --egd-file option.\n"
 "\n"
-"              There's no attempt to decode %-sequences (yet) in  the  provided\n"
+"       --raw  (HTTP) When used, it disables all internal HTTP decoding of con-\n"
 , stdout);
  fputs(
-"              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"
+"              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"
-, stdout);
- fputs(
+"              This option changes the default action for all given URLs to  be\n"
 "              dealt with as if -O, --remote-name were used for each one. So if\n"
 "              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"
-"\n"
-"              Added in 7.19.0.\n"
-"\n"
-"       -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"
-"              off.)\n"
-"\n"
-, stdout);
- fputs(
-"              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"
-"              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"
+"              all  has  been  used,  you  must use \"-o -\" or --no-remote-name.\n"
 , stdout);
  fputs(
-"              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"
-"              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"
-"              file 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"
+"              on the command line. The port number should be the  number  used\n"
 , stdout);
  fputs(
-"              You may use this option as many times as the number of URLs  you\n"
-"              have.\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"
-"       -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"
-"              local file get that same timestamp.\n"
+"              The provided address set by this option will be used even if -4,\n"
+"              --ipv4 or -6, --ipv6 is set to make curl use another IP version.\n"
+"              This option can be used many times to add  many  host  names  to\n"
+"              resolve.\n"
 "\n"
-"       -X, --request <command>\n"
-"              (HTTP) Specifies a custom request method to use when communicat-\n"
-, stdout);
- fputs(
-"              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"
-"              tions.  Common  additional HTTP requests include PUT and DELETE,\n"
-"              but related technologies like WebDAV offers PROPFIND, COPY, MOVE\n"
-"              and more.\n"
+"              (Added in 7.21.3)\n"
 "\n"
-"              Normally  you  don't  need  this option. All sorts of GET, HEAD,\n"
 , stdout);
  fputs(
-"              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"
-"              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"
+"       --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"
+"              default). Transient error means either: a timeout,  an  FTP  4xx\n"
+"              response code or an HTTP 5xx response code.\n"
 "\n"
-"              The method string you set with -X, --request will  be  used  for\n"
+"              When  curl  is about to retry a transfer, it will first wait one\n"
 , stdout);
  fputs(
-"              all  requests,  which  if you for example use -L, --location may\n"
-"              cause unintended side-effects when curl doesn't  change  request\n"
-"              method according 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"
+"              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"
+"              (Added in 7.12.3)\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"
-"              VRFY. (Added in 7.34.0)\n"
-"\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"       --resolve <host:port:address>\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(
-"              same host but different ports.\n"
-"\n"
-"              The provided address set by this option will be used even if -4,\n"
-"              --ipv4 or -6, --ipv6 is set to make curl use another IP version.\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-connrefused\n"
-"              In addition to the other conditions, consider ECONNREFUSED as  a\n"
-, stdout);
- fputs(
-"              transient  error  too  for --retry. This option is used together\n"
-"              with --retry.\n"
-"\n"
-"              Added in 7.52.0.\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"
+"              default  backoff time algorithm between retries). This option is\n"
+"              only interesting if --retry is also used. Setting this delay  to\n"
 , stdout);
  fputs(
-"              zero will make curl use the default backoff time.\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"
-"              Added in 7.12.3.\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"
@@ -2661,319 +2289,229 @@ void hugehelp(void)
 "              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.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
-"\n"
-"              Added in 7.12.3.\n"
-"\n"
-"       --retry <num>\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"
-"              response code or an HTTP 5xx response code.\n"
-"\n"
-"              When curl is about to retry a transfer, it will first  wait  one\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"
+"              option to zero to not timeout retries. (Added in 7.12.3)\n"
 "\n"
 "              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(
-"              Added in 7.12.3.\n"
-"\n"
-"       --sasl-ir\n"
-"              Enable initial response in SASL authentication.\n"
-"\n"
-"              Added in 7.31.0.\n"
-"\n"
-"       --service-name <name>\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.\n"
-"\n"
-"              Added in 7.43.0.\n"
-"       -S, --show-error\n"
-"              When used with -s, --silent, it makes curl show an error message\n"
-, stdout);
- fputs(
-"              if it fails.\n"
-"       -s, --silent\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"
+"              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"
-"              Use -S, --show-error in  addition  to  this  option  to  disable\n"
-"              progress meter but still show error messages.\n"
-"\n"
-"              See also -v, --verbose and --stderr.\n"
-"\n"
-, stdout);
- fputs(
-"       --socks4 <host[:port]>\n"
-"              Use the specified SOCKS4 proxy. If the port number is not speci-\n"
-"              fied, it is assumed at port 1080.\n"
-"\n"
-"              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"
-"              socks4 proxy with -x, --proxy using a socks4:// protocol prefix.\n"
-, stdout);
- fputs(
-"              Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
-"              the  same  time -x, --proxy is used with an HTTP/HTTPS proxy. In\n"
-"              such a case curl first connects to the SOCKS proxy and then con-\n"
-"              nects (through SOCKS) to the HTTP or HTTPS proxy.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
+"       --sasl-ir\n"
+"              Enable  initial  response  in  SASL  authentication.   (Added in\n"
+"              7.31.0)\n"
 "\n"
-"              Added in 7.15.2.\n"
+"       --service-name <servicename>\n"
+"              This option allows you to change the service name for SPNEGO.\n"
 "\n"
-"       --socks4a <host[:port]>\n"
+"              Examples:   --negotiate   --service-name   sockd    would    use\n"
 , stdout);
  fputs(
-"              Use the specified SOCKS4a proxy. If the port number is not spec-\n"
-"              ified, it is assumed at port 1080.\n"
+"              sockd/server-name.  (Added in 7.43.0).\n"
 "\n"
-"              This option overrides any previous use of -x, --proxy,  as  they\n"
-"              are mutually exclusive.\n"
+"       -S, --show-error\n"
+"              When  used  with  -s  it  makes curl show an error message if it\n"
+"              fails.\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"
+"       --ssl  (FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for  the  connection.\n"
+"              Reverts to a non-secure connection if the server doesn't support\n"
+"              SSL/TLS.  See also --ftp-ssl-control and --ssl-reqd for  differ-\n"
+"              ent levels of encryption required. (Added in 7.20.0)\n"
 "\n"
 , stdout);
  fputs(
-"              Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
-"              the same time -x, --proxy is used with an HTTP/HTTPS  proxy.  In\n"
-"              such a case curl first connects to the SOCKS proxy and then con-\n"
-"              nects (through SOCKS) to the HTTP or HTTPS proxy.\n"
+"              This  option  was formerly known as --ftp-ssl (Added in 7.11.0).\n"
+"              That option name can still be used but  will  be  removed  in  a\n"
+"              future version.\n"
 "\n"
-"              If this option is used several times, the last one will be used.\n"
+"       --ssl-reqd\n"
+"              (FTP,  POP3,  IMAP,  SMTP)  Require  SSL/TLS for the connection.\n"
+"              Terminates the connection if the server doesn't support SSL/TLS.\n"
+"              (Added in 7.20.0)\n"
 "\n"
-"              Added in 7.18.0.\n"
+"              This option was formerly known as --ftp-ssl-reqd.\n"
 "\n"
-"       --socks5-gssapi-nec\n"
+"       --ssl-allow-beast\n"
 , stdout);
  fputs(
-"              As part of the GSS-API negotiation a protection mode is  negoti-\n"
-"              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.\n"
-"\n"
-"              Added in 7.19.4.\n"
+"              (SSL)  This option tells curl to not work around a security flaw\n"
+"              in the SSL3 and TLS1.0 protocols known as BEAST.  If this option\n"
+"              isn't  used,  the  SSL  layer may use workarounds known to cause\n"
+"              interoperability problems with some older  SSL  implementations.\n"
+"              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"
-"       --socks5-gssapi-service <name>\n"
+"       --ssl-no-revoke\n"
 , stdout);
  fputs(
-"              The default service name for a socks server is rcmd/server-fqdn.\n"
-"              This option allows you to change it.\n"
-"\n"
-"              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.\n"
+"              (WinSSL) This option tells curl to disable  certificate  revoca-\n"
+"              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"
-"              Added in 7.19.4.\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"
 , stdout);
  fputs(
-"       --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"
-"              at port 1080.\n"
-"\n"
-"              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"
-, stdout);
- fputs(
-"              socks5 hostname proxy with -x, --proxy using a socks5h:// proto-\n"
-"              col prefix.\n"
-"\n"
-"              Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
-"              the same time -x, --proxy is used with an HTTP/HTTPS  proxy.  In\n"
-"              such a case curl first connects to the SOCKS proxy and then con-\n"
-"              nects (through SOCKS) to the HTTP or HTTPS proxy.\n"
-"\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"
+"              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"
 , stdout);
  fputs(
-"              Added in 7.18.0.\n"
-"\n"
-"       --socks5 <host[:port]>\n"
-"              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"
-"\n"
 "              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"
-, stdout);
- fputs(
-"              socks5 proxy with -x, --proxy using a socks5:// protocol prefix.\n"
-"              Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
-"              the  same  time -x, --proxy is used with an HTTP/HTTPS proxy. In\n"
-"              such a case curl first connects to the SOCKS proxy and then con-\n"
-"              nects (through SOCKS) to the HTTP or HTTPS proxy.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
-, stdout);
- fputs(
-"              This  option (as well as --socks4) does not work with IPV6, FTPS\n"
-"              or LDAP.\n"
-"\n"
-"              Added in 7.18.0.\n"
-"\n"
-"       -Y, --speed-limit <speed>\n"
-"              If a download is slower than this given speed (in bytes per sec-\n"
-"              ond)  for  speed-time seconds it gets aborted. speed-time is set\n"
-"              with -y, --speed-time and is 30 if not set.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
-"\n"
-"       -y, --speed-time <seconds>\n"
-, stdout);
- fputs(
-"              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"
-"              used, the default speed-limit will be  1  unless  set  with  -Y,\n"
-"              --speed-limit.\n"
-"\n"
-"              This  option  controls  transfers  and thus will not affect slow\n"
-"              connects etc. If this is a concern for you, try  the  --connect-\n"
-"              timeout option.\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"
-"       --ssl-allow-beast\n"
-"              This option tells curl to not work around a security flaw in the\n"
-"              SSL3 and TLS1.0 protocols known as BEAST.  If this option  isn't\n"
-"              used,  the SSL layer may use workarounds known to cause interop-\n"
-"              erability problems with some older SSL implementations. WARNING:\n"
-"              this option loosens the SSL security, and by using this flag you\n"
+"       --socks5-hostname <host[:port]>\n"
+"              Use  the  specified  SOCKS5 proxy (and let the proxy resolve the\n"
 , stdout);
  fputs(
-"              ask for exactly that.\n"
-"\n"
-"              Added in 7.25.0.\n"
+"              host name). If the port number is not specified, it  is  assumed\n"
+"              at port 1080. (Added in 7.18.0)\n"
 "\n"
-"       --ssl-no-revoke\n"
-"              (WinSSL) This option tells curl to disable  certificate  revoca-\n"
-"              tion checks.  WARNING: this option loosens the SSL security, and\n"
-"              by using this flag you ask for exactly that.\n"
+"              This  option  overrides any previous use of -x, --proxy, as they\n"
+"              are mutually exclusive.\n"
 "\n"
-"              Added in 7.44.0.\n"
+"              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"
-"       --ssl-reqd\n"
-"              (FTP IMAP POP3 SMTP) Require SSL/TLS for the connection.  Termi-\n"
 , stdout);
  fputs(
-"              nates the connection if the server doesn't support SSL/TLS.\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"
 "\n"
-"              This option was formerly known as --ftp-ssl-reqd.\n"
+"       --socks5 <host[:port]>\n"
+"              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"
 "\n"
-"              Added in 7.20.0.\n"
+, stdout);
+ fputs(
+"              This option overrides any previous use of -x, --proxy,  as  they\n"
+"              are mutually exclusive.\n"
 "\n"
-"       --ssl  (FTP  IMAP  POP3  SMTP)  Try  to use SSL/TLS for the connection.\n"
-"              Reverts to a non-secure connection if the server doesn't support\n"
-"              SSL/TLS.   See also --ftp-ssl-control and --ssl-reqd for differ-\n"
-"              ent levels of encryption required.\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"
+"              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"
 "\n"
 , stdout);
  fputs(
-"              This option was formerly known as --ftp-ssl (Added  in  7.11.0).\n"
-"              That  option  name  can  still  be used but will be removed in a\n"
-"              future version.\n"
-"\n"
-"              Added in 7.20.0.\n"
+"              This option (as well as --socks4) does not work with IPV6,  FTPS\n"
+"              or LDAP.\n"
 "\n"
-"       -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 (see RFC 6176).\n"
+"       --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"
+"              Examples:  --socks5  proxy-name  --socks5-gssapi-service   sockd\n"
+"              would  use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-\n"
 , stdout);
  fputs(
-"              See also --http1.1 and --http2. -2, --sslv2  requires  that  the\n"
-"              underlying  libcurl  was built to support TLS. This option over-\n"
-"              rides -3, --sslv3 and -1, --tlsv1 and --tlsv1.1 and --tlsv1.2.\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. SSLv3 is widely considered insecure (see RFC 7568).\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"
+"              in 7.19.4).\n"
 "\n"
+"       --socks5-gssapi-nec\n"
+"              As part of the GSS-API negotiation a protection mode is  negoti-\n"
+"              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"
 , stdout);
  fputs(
-"              See also --http1.1 and --http2. -3, --sslv3  requires  that  the\n"
-"              underlying  libcurl  was built to support TLS. This option over-\n"
-"              rides -2, --sslv2 and -1, --tlsv1 and --tlsv1.1 and --tlsv1.2.\n"
+"              --socks5-gssapi-nec  allows the unprotected exchange of the pro-\n"
+"              tection mode negotiation. (Added in 7.19.4).\n"
 "\n"
-"       --stderr\n"
+"       --stderr <file>\n"
 "              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"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
+"       -t, --telnet-option <OPT=val>\n"
 , stdout);
  fputs(
-"              See also -v, --verbose and -s, --silent.\n"
+"              Pass options to the telnet protocol. Supported options are:\n"
 "\n"
-"       --tcp-fastopen\n"
-"              Enable use of TCP Fast Open (RFC7413).\n"
+"              TTYPE=<term> Sets the terminal type.\n"
 "\n"
-"              Added in 7.49.0.\n"
+"              XDISPLOC=<X display> Sets the X display location.\n"
 "\n"
-"       --tcp-nodelay\n"
-"              Turn  on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n"
-"              page for details about this option.\n"
+"              NEW_ENV=<var,val> Sets an environment variable.\n"
 "\n"
-"              Since 7.50.2, curl sets this option by default and you  need  to\n"
-"              explictitly switch it off if you don't want it on.\n"
+"       -T, --upload-file <file>\n"
+"              This  transfers  the  specified local file to the remote URL. If\n"
+"              there is no file part in the specified URL, Curl will append the\n"
+, stdout);
+ fputs(
+"              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"
+"              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"
-"              Added in 7.11.2.\n"
+"              Use the file name \"-\" (a single dash) to use stdin instead of  a\n"
+, stdout);
+ fputs(
+"              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"
+"              uploaded.\n"
 "\n"
+"              You can specify one -T for each URL on the command line. Each -T\n"
+"              + URL pair specifies what to upload and to where. curl also sup-\n"
 , stdout);
  fputs(
-"       -t, --telnet-option <opt=val>\n"
-"              Pass options to the telnet protocol. Supported options are:\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"
+"              style supported in the URL, like this:\n"
 "\n"
-"              TTYPE=<term> Sets the terminal type.\n"
+"              curl -T \"{file1,file2}\" http://www.example.com\n"
 "\n"
-"              XDISPLOC=<X display> Sets the X display location.\n"
+"              or even\n"
 "\n"
-"              NEW_ENV=<var,val> Sets an environment variable.\n"
+"              curl -T \"img[1-1000].png\" ftp://ftp.example.com/upload/\n"
+"\n"
+"       --tcp-nodelay\n"
+"              Turn on the TCP_NODELAY option. See the curl_easy_setopt(3)  man\n"
+, stdout);
+ fputs(
+"              page for details about this option. (Added in 7.11.2)\n"
+"\n"
+"       --tcp-fastopen\n"
+"              Enable use of TCP Fast Open (RFC7413). (Added in 7.49.0)\n"
 "\n"
 "       --tftp-blksize <value>\n"
 "              (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block\n"
 "              size that curl will try to use when transferring data to or from\n"
-, stdout);
- fputs(
 "              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"
-"              Added in 7.20.0.\n"
-"\n"
+, stdout);
+ fputs(
+"              (Added in 7.20.0)\n"
 "       --tftp-no-options\n"
 "              (TFTP) Tells curl not to send TFTP options requests.\n"
 "\n"
@@ -2981,220 +2519,89 @@ void hugehelp(void)
 "              not acknowledge or properly implement TFTP  options.  When  this\n"
 "              option is used --tftp-blksize is ignored.\n"
 "\n"
-, stdout);
- fputs(
-"              Added in 7.48.0.\n"
-"\n"
-"       -z, --time-cond <time>\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"
-"              and  tries  to  get  the  modification  date (mtime) from <file>\n"
-, stdout);
- fputs(
-"              instead. See the curl_getdate(3) man pages for  date  expression\n"
-"              details.\n"
-"\n"
-"              Start the date expression with a dash (-) to make it request for\n"
-"              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"
-"              If this option is used several times, the last one will be used.\n"
+"              (Added in 7.48.0)\n"
 "\n"
-"       --tlsauthtype <type>\n"
+"       --tlsauthtype <authtype>\n"
+"              Set  TLS  authentication  type.  Currently,  the  only supported\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"
-"              option defaults to \"SRP\".\n"
+"              option defaults to \"SRP\".  (Added in 7.21.4)\n"
 "\n"
-"              Added in 7.21.4.\n"
-"\n"
-"       --tlspassword\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"
+"              fied  with  --tlsauthtype.  Requires that --tlsuser also be set.\n"
+"              (Added in 7.21.4)\n"
 "\n"
+"       --tlsuser <user>\n"
 , stdout);
  fputs(
-"              Added in 7.21.4.\n"
-"       --tlsuser <name>\n"
-"              Set  username  for use with the TLS authentication method speci-\n"
-"              fied with --tlsauthtype. Requires  that  --tlspassword  also  is\n"
-"              set.\n"
-"\n"
-"              Added in 7.21.4.\n"
+"              Set username for use with the TLS authentication  method  speci-\n"
+"              fied  with  --tlsauthtype.  Requires  that --tlspassword also be\n"
+"              set.  (Added in 7.21.4)\n"
 "\n"
 "       --tlsv1.0\n"
-"              (TLS)  Forces  curl  to use TLS version 1.0 when connecting to a\n"
-"              remote TLS server.\n"
-"\n"
-"              Added in 7.34.0.\n"
+"              (SSL) Forces curl to use TLS version 1.0 when negotiating with a\n"
+"              remote TLS server.  (Added in 7.34.0)\n"
 "\n"
 "       --tlsv1.1\n"
-, stdout);
- fputs(
-"              (TLS) Forces curl to use TLS version 1.1 when  connecting  to  a\n"
-"              remote TLS server.\n"
-"\n"
-"              Added in 7.34.0.\n"
-"\n"
-"       --tlsv1.2\n"
-"              (TLS)  Forces  curl  to use TLS version 1.2 when connecting to a\n"
-"              remote TLS server.\n"
-"\n"
-"              Added in 7.34.0.\n"
+"              (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.3\n"
-"              (TLS) Forces curl to use TLS version 1.3 when  connecting  to  a\n"
-"              remote TLS server.\n"
-"\n"
-, stdout);
- fputs(
-"              Note that TLS 1.3 is only supported by a subset of TLS backends.\n"
-"              At the time of writing this, those are BoringSSL and NSS only.\n"
-"\n"
-"              Added in 7.52.0.\n"
-"\n"
-"       -1, --tlsv1\n"
-"              (SSL) Tells curl to use TLS version 1.x when negotiating with  a\n"
-"              remote TLS server. That means TLS version 1.0, 1.1 or 1.2.\n"
-"\n"
-"              See  also  --http1.1  and --http2. -1, --tlsv1 requires that the\n"
 , stdout);
  fputs(
-"              underlying libcurl was built to support TLS. This  option  over-\n"
-"              rides --tlsv1.1 and --tlsv1.2 and --tlsv1.3.\n"
+"       --tlsv1.2\n"
+"              (SSL) Forces curl to use TLS version 1.2 when negotiating with a\n"
+"              remote TLS server.  (Added in 7.34.0)\n"
 "\n"
 "       --tr-encoding\n"
 "              (HTTP) Request a compressed Transfer-Encoding response using one\n"
 "              of the algorithms curl supports, and uncompress the  data  while\n"
 "              receiving it.\n"
 "\n"
-"              Added in 7.21.6.\n"
+"              (Added in 7.21.6)\n"
 "\n"
-"       --trace-ascii <file>\n"
+"       --trace <file>\n"
 "              Enables  a  full  trace  dump of all incoming and outgoing data,\n"
 , stdout);
  fputs(
 "              including descriptive information, to the given output file. Use\n"
 "              \"-\" as filename to have the output sent to stdout.\n"
 "\n"
-"              This is very similar to --trace, but leaves out the hex part and\n"
-"              only shows the ASCII part of the dump. It makes  smaller  output\n"
-"              that might be easier to read for untrained humans.\n"
+"              This option overrides previous uses of -v, --verbose or --trace-\n"
+"              ascii.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
+"       --trace-ascii <file>\n"
+"              Enables a full trace dump of all  incoming  and  outgoing  data,\n"
 , stdout);
  fputs(
-"              This option overrides --trace and -v, --verbose.\n"
-"\n"
-"       --trace-time\n"
-"              Prepends  a  time  stamp to each trace or verbose line that curl\n"
-"              displays.\n"
+"              including descriptive information, to the given output file. Use\n"
+"              \"-\" as filename to have the output sent to stdout.\n"
 "\n"
-"              Added in 7.14.0.\n"
+"              This is very similar to --trace, but leaves out the hex part and\n"
+"              only  shows  the ASCII part of the dump. It makes smaller output\n"
+"              that might be easier to read for untrained humans.\n"
 "\n"
-"       --trace <file>\n"
-"              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.  Use  \"%\"  as\n"
+"              This option overrides previous uses of -v, --verbose or --trace.\n"
 , stdout);
  fputs(
-"              filename to have the output sent to stderr.\n"
-"\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"              This option overrides -v, --verbose and --trace-ascii.\n"
+"       --trace-time\n"
+"              Prepends a time stamp to each trace or verbose  line  that  curl\n"
+"              displays.  (Added in 7.14.0)\n"
 "\n"
 "       --unix-socket <path>\n"
 "              (HTTP) Connect through this Unix domain socket, instead of using\n"
-"              the network.\n"
-"\n"
-"              Added in 7.40.0.\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"
-"              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"
-"              uploaded.\n"
-"\n"
-"              You  can  specify one -T, --upload-file for each URL on the com-\n"
-, stdout);
- fputs(
-"              mand line. Each -T, --upload-file + URL pair specifies  what  to\n"
-"              upload  and  to  where. curl also supports \"globbing\" of the -T,\n"
-"              --upload-file argument, meaning that  you  can  upload  multiple\n"
-"              files  to a single URL by using the same URL globbing style sup-\n"
-"              ported in the URL, like this:\n"
-"\n"
-"               curl --upload-file \"{file1,file2}\" http://www.example.com\n"
-"\n"
-"              or even\n"
-"\n"
-, stdout);
- fputs(
-"               curl -T \"img[1-1000].png\" ftp://ftp.example.com/upload/\n"
-"\n"
-"              When uploading to an SMTP server: the uploaded data  is  assumed\n"
-"              to be RFC 5322 formatted. It has to feature the necessary set of\n"
-"              headers and mail body formatted correctly by the  user  as  curl\n"
-"              will not transcode nor encode it further in any way.\n"
-"\n"
-"       --url <url>\n"
-"              Specify  a  URL  to  fetch. This option is mostly handy when you\n"
-, stdout);
- fputs(
-"              want to specify URL(s) in a config file.\n"
-"\n"
-"              If the given URL is missing a scheme name (such as \"http://\"  or\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"
-, stdout);
- fputs(
-"              default protocol, see --proto-default for details.\n"
-"\n"
-"              This  option  may  be used any number of times. To control where\n"
-"              this URL is written, use the -o, --output or the  -O,  --remote-\n"
-"              name options.\n"
-"\n"
-"       -B, --use-ascii\n"
-"              (FTP  LDAP)  Enable  ASCII  transfer.  For FTP, this can also be\n"
-"              enforced by using a URL that ends with  \";type=A\".  This  option\n"
-, stdout);
- fputs(
-"              causes data sent to stdout to be in text mode for win32 systems.\n"
-"\n"
-"       -A, --user-agent <name>\n"
-"              (HTTP) Specify the User-Agent string to send to the HTTP server.\n"
-"              To encode blanks in the string, surround the string with  single\n"
-"              quote  marks.  This can also be set with the -H, --header option\n"
-"              of course.\n"
-"\n"
-"              If this option is used several times, the last one will be used.\n"
+"              the network. (Added in 7.40.0)\n"
 "\n"
 "       -u, --user <user:password>\n"
+"              Specify the user name and password to use for server authentica-\n"
 , stdout);
  fputs(
-"              Specify the user name and password to use for server authentica-\n"
 "              tion. Overrides -n, --netrc and --netrc-optional.\n"
 "\n"
 "              If  you  simply  specify  the  user name, curl will prompt for a\n"
@@ -3204,19 +2611,19 @@ void hugehelp(void)
 "              which  makes  it impossible to use a colon in the user name with\n"
 "              this option. The password can, still.\n"
 "\n"
+"              When using Kerberos V5 with a Windows based  server  you  should\n"
 , stdout);
  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 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"
-, stdout);
- fputs(
 "              forest in your setup for example.\n"
 "\n"
+, stdout);
+ fputs(
 "              To  specify  the domain name use either Down-Level Logon Name or\n"
 "              UPN (User Principal Name) formats. For example, EXAMPLE\\user and\n"
 "              user@example.com respectively.\n"
@@ -3230,303 +2637,446 @@ void hugehelp(void)
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"       -v, --verbose\n"
-"              Makes curl verbose during the operation.  Useful  for  debugging\n"
-"              and  seeing  what's  going  on \"under the hood\". A line starting\n"
-"              with '>' means \"header data\" sent by  curl,  '<'  means  \"header\n"
-"              data\"  received  by  curl  that is hidden in normal cases, and a\n"
-, stdout);
- fputs(
-"              line starting with '*' means additional info provided by curl.\n"
-"\n"
-"              If you only want HTTP headers in the output, -i, --include might\n"
-"              be the option you're looking for.\n"
-"\n"
-"              If  you think this option still doesn't give you enough details,\n"
-"              consider using --trace or --trace-ascii instead.\n"
-"\n"
-"              Use -s, --silent to make curl really quiet.\n"
+"       -U, --proxy-user <user:password>\n"
+"              Specify the user name and password to use for proxy  authentica-\n"
+"              tion.\n"
 "\n"
-"              See also  -i,  --include.  This  option  overrides  --trace  and\n"
+"              If  you  use  a  Windows  SSPI-enabled curl binary and do either\n"
+"              Negotiate or NTLM authentication  then  you  can  tell  curl  to\n"
 , stdout);
  fputs(
-"              --trace-ascii.\n"
+"              select the user name and password from your environment by spec-\n"
+"              ifying a single colon with this option: \"-U :\".\n"
 "\n"
-"       -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"
-"              other 3rd party libraries linked with the executable.\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
-"              The second line (starts with \"Protocols:\") shows  all  protocols\n"
-"              that libcurl reports to support.\n"
+"       --url <URL>\n"
+"              Specify a URL to fetch. This option is  mostly  handy  when  you\n"
+"              want to specify URL(s) in a config file.\n"
 "\n"
-"              The third line (starts with \"Features:\") shows specific features\n"
+"              If  the given URL is missing a scheme name (such as \"http://\" or\n"
 , stdout);
  fputs(
-"              libcurl reports to offer. Available features include:\n"
-"\n"
-"              IPv6   You can use IPv6 with this.\n"
-"\n"
-"              krb4   Krb4 for FTP is supported.\n"
-"\n"
-"              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"
-"                     supported.\n"
-"\n"
-"              NTLM   NTLM authentication is supported.\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(
-"              Debug  This curl uses a libcurl built with Debug.  This  enables\n"
-"                     more  error-tracking  and memory debugging etc. For curl-\n"
-"                     developers only!\n"
-"\n"
-"              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"
-"\n"
-"              SPNEGO SPNEGO authentication is supported.\n"
-"\n"
+"              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"
 , stdout);
  fputs(
-"              Largefile\n"
-"                     This curl supports transfers of large files, files larger\n"
-"                     than 2GB.\n"
-"\n"
-"              IDN    This curl supports IDN - international domain names.\n"
-"\n"
-"              GSS-API\n"
-"                     GSS-API is supported.\n"
+"              and a line starting with '*' means additional info  provided  by\n"
+"              curl.\n"
 "\n"
-"              SSPI   SSPI is supported.\n"
-"\n"
-"              TLS-SRP\n"
-"                     SRP  (Secure Remote Password) authentication is supported\n"
-"                     for TLS.\n"
-"\n"
-, stdout);
- fputs(
-"              HTTP2  HTTP/2 support has been built-in.\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"
-"              UnixSockets\n"
-"                     Unix sockets support is provided.\n"
+"              If you think this option still doesn't give you enough  details,\n"
+"              consider using --trace or --trace-ascii instead.\n"
 "\n"
-"              HTTPS-proxy\n"
-"                     This curl is built to support HTTPS proxy.\n"
+"              This option overrides previous uses of --trace-ascii or --trace.\n"
 "\n"
-"              Metalink\n"
-"                     This curl supports Metalink (both version 3  and  4  (RFC\n"
-"                     5854)),  which  describes  mirrors and hashes.  curl will\n"
-"                     use mirrors for failover if there are errors (such as the\n"
 , stdout);
  fputs(
-"                     file or server not being available).\n"
-"\n"
-"              PSL    PSL  is  short for Public Suffix List and means that this\n"
-"                     curl has been built with  knowledge  about  \"public  suf-\n"
-"                     fixes\".\n"
+"              Use -s, --silent to make curl quiet.\n"
 "\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"
-, stdout);
- fputs(
 "              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"
-, stdout);
- fputs(
 "              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"
 "              option.\n"
 "\n"
 "              The variables available are:\n"
 "\n"
-, stdout);
- fputs(
 "              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"
-"                             This is only meaningful if curl is told to  write\n"
-"                             to  a  file  with  the  -O,  --remote-name or -o,\n"
-"                             --output option. It's most useful in  combination\n"
 , stdout);
  fputs(
-"                             with  the -J, --remote-header-name option. (Added\n"
-"                             in 7.26.0)\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.26.0)\n"
 "\n"
 "              ftp_entry_path The initial path curl ended up in when logging on\n"
 "                             to the remote FTP server. (Added in 7.15.4)\n"
 "\n"
-"              http_code      The numerical response code that was found in the\n"
-"                             last retrieved HTTP(S)  or  FTP(s)  transfer.  In\n"
 , stdout);
  fputs(
-"                             7.18.2  the alias response_code was added to show\n"
+"              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"
 "                             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(
 "              http_version   The  http  version  that  was  effectively  used.\n"
 "                             (Added in 7.50.0)\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"
-"                             fer. (Added in 7.12.3)\n"
-"\n"
 , stdout);
  fputs(
-"              num_redirects  Number  of  redirects  that  were followed in the\n"
-"                             request. (Added in 7.12.3)\n"
+"              num_connects   Number  of new connects made in the recent trans-\n"
+"                             fer. (Added in 7.12.3)\n"
 "\n"
-"              proxy_ssl_verify_result\n"
-"                             The result of the HTTPS proxy's SSL peer certifi-\n"
-"                             cate verification that was requested. 0 means the\n"
-"                             verification was successful. (Added in 7.52.0)\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"
 , stdout);
  fputs(
-"                             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"
 "                             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"
-, stdout);
- fputs(
+"              remote_port    The remote port number of the most recently  done\n"
 "                             connection (Added in 7.29.0)\n"
 "\n"
-"              scheme         The URL scheme (sometimes called  protocol)  that\n"
-"                             was effectively used (Added in 7.52.0)\n"
-"\n"
+, stdout);
+ fputs(
 "              size_download  The total amount of bytes that were downloaded.\n"
 "\n"
 "              size_header    The total amount of bytes of the downloaded head-\n"
 "                             ers.\n"
 "\n"
 "              size_request   The total amount of bytes that were sent  in  the\n"
-, stdout);
- fputs(
 "                             HTTP request.\n"
 "\n"
 "              size_upload    The total amount of bytes that were uploaded.\n"
 "\n"
 "              speed_download The average download speed that curl measured for\n"
+, stdout);
+ fputs(
 "                             the complete download. Bytes per second.\n"
 "\n"
 "              speed_upload   The average upload speed that curl  measured  for\n"
 "                             the complete upload. Bytes per second.\n"
 "\n"
 "              ssl_verify_result\n"
-, stdout);
- fputs(
 "                             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"
+, stdout);
+ fputs(
 "              time_appconnect\n"
 "                             The  time,  in  seconds,  it  took from the start\n"
 "                             until the SSL/SSH/etc  connect/handshake  to  the\n"
 "                             remote host was completed. (Added in 7.19.0)\n"
 "\n"
-, stdout);
- fputs(
 "              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"
+, stdout);
+ fputs(
 "              time_namelookup\n"
 "                             The  time,  in  seconds,  it  took from the start\n"
 "                             until the name resolving was completed.\n"
 "\n"
 "              time_pretransfer\n"
 "                             The time, in seconds,  it  took  from  the  start\n"
-, stdout);
- fputs(
 "                             until  the file transfer was just about to begin.\n"
 "                             This includes all pre-transfer commands and nego-\n"
+, stdout);
+ fputs(
 "                             tiations that are specific to the particular pro-\n"
 "                             tocol(s) involved.\n"
 "\n"
 "              time_redirect  The time, in seconds, it took for all redirection\n"
 "                             steps  include  name lookup, connect, pretransfer\n"
-, stdout);
- fputs(
 "                             and transfer before  the  final  transaction  was\n"
 "                             started.  time_redirect shows the complete execu-\n"
+, stdout);
+ fputs(
 "                             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"
 "                             until the first byte was just about to be  trans-\n"
-, stdout);
- fputs(
 "                             ferred.  This  includes time_pretransfer and also\n"
 "                             the time  the  server  needed  to  calculate  the\n"
+, stdout);
+ fputs(
 "                             result.\n"
 "\n"
 "              time_total     The  total time, in seconds, that the full opera-\n"
-"                             tion lasted.\n"
+"                             tion lasted. The time will be displayed with mil-\n"
+"                             lisecond resolution.\n"
 "\n"
 "              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"
 , stdout);
  fputs(
-"                             headers.\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"
+"              specify alternative proxy protocols. Use socks4://,  socks4a://,\n"
+"              socks5:// or socks5h:// to request the specific SOCKS version to\n"
+, stdout);
+ fputs(
+"              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"
+"              assumed to be 1080.\n"
+"\n"
+"              This  option  overrides  existing environment variables that set\n"
+"              the proxy to use. If there's an environment variable  setting  a\n"
+, stdout);
+ fputs(
+"              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"
+"              specific operations might not be available. This is not the case\n"
+"              if you can tunnel through the proxy, as one with the -p, --prox-\n"
+"              ytunnel option.\n"
+"\n"
+"              User and password that might be provided in the proxy string are\n"
+, stdout);
+ fputs(
+"              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"
+"              and the embedded user + password.\n"
+"\n"
+"              If this option is used several times, the last one will be used.\n"
+"\n"
+"       -X, --request <command>\n"
+, stdout);
+ fputs(
+"              (HTTP) Specifies a custom request method to use when communicat-\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"
+"              tions.  Common  additional HTTP requests include PUT and DELETE,\n"
+"              but related technologies like WebDAV offers PROPFIND, COPY, MOVE\n"
+"              and more.\n"
+"\n"
+, stdout);
+ fputs(
+"              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"
+"              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"
+, stdout);
+ fputs(
+"              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"
+"              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"
+, stdout);
+ fputs(
+"              RETR. (Added in 7.26.0)\n"
+"\n"
+"              (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"
+"              VRFY. (Added in 7.34.0)\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --xattr\n"
-"              When saving output to a file, this option tells  curl  to  store\n"
-"              certain  file  metadata  in extended file attributes. Currently,\n"
-"              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"
+"              When  saving  output  to a file, this option tells curl to store\n"
 , stdout);
  fputs(
-"              file system does not support extended attributes, a  warning  is\n"
+"              certain file metadata in extended  file  attributes.  Currently,\n"
+"              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"
+"              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"
+, stdout);
+ fputs(
+"              a speed-time period, the download gets aborted. If speed-time is\n"
+"              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"
+"              connects  etc.  If this is a concern for you, try the --connect-\n"
+"              timeout option.\n"
+"\n"
+"              If this option is used several times, the last one will be used.\n"
+"\n"
+"       -Y, --speed-limit <speed>\n"
+, stdout);
+ fputs(
+"              If a download is slower than this given speed (in bytes per sec-\n"
+"              ond)  for  speed-time seconds it gets aborted. speed-time is set\n"
+"              with -y and is 30 if not set.\n"
+"\n"
+"              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"
+, stdout);
+ fputs(
+"              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"
+"              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"
+"\n"
+"              Start the date expression with a dash (-) to make it request for\n"
+"              a  document that is older than the given date/time, default is a\n"
+, stdout);
+ fputs(
+"              document that is newer than the specified date/time.\n"
+"\n"
+"              If this option is used several times, the last one will be used.\n"
+"\n"
+"       -h, --help\n"
+"              Usage help. This lists all current command line options  with  a\n"
+"              short description.\n"
+"\n"
+"       -M, --manual\n"
+"              Manual. Display the huge help text.\n"
+"\n"
+"       -V, --version\n"
+"              Displays information about curl and the libcurl version it uses.\n"
+, stdout);
+ fputs(
+"              The  first  line  includes the full version of curl, libcurl and\n"
+"              other 3rd party libraries linked with the executable.\n"
+"\n"
+"              The second line (starts with \"Protocols:\") shows  all  protocols\n"
+"              that libcurl reports to support.\n"
+"\n"
+"              The third line (starts with \"Features:\") shows specific features\n"
+"              libcurl reports to offer. Available features include:\n"
+"\n"
+"              IPv6   You can use IPv6 with this.\n"
+"\n"
+, stdout);
+ fputs(
+"              krb4   Krb4 for FTP is supported.\n"
+"\n"
+"              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"
+"                     supported.\n"
+"\n"
+"              NTLM   NTLM authentication is supported.\n"
+"\n"
+"              Debug  This curl uses a libcurl built with Debug.  This  enables\n"
+, stdout);
+ fputs(
+"                     more  error-tracking  and memory debugging etc. For curl-\n"
+"                     developers only!\n"
+"\n"
+"              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"
+"\n"
+"              SPNEGO SPNEGO authentication is supported.\n"
+"\n"
+"              Largefile\n"
+, stdout);
+ fputs(
+"                     This curl supports transfers of large files, files larger\n"
+"                     than 2GB.\n"
+"\n"
+"              IDN    This curl supports IDN - international domain names.\n"
+"\n"
+"              GSS-API\n"
+"                     GSS-API is supported.\n"
+"\n"
+"              SSPI   SSPI is supported.\n"
+"\n"
+"              TLS-SRP\n"
+"                     SRP  (Secure Remote Password) authentication is supported\n"
+"                     for TLS.\n"
+"\n"
+"              HTTP2  HTTP/2 support has been built-in.\n"
+"\n"
+, stdout);
+ fputs(
+"              Metalink\n"
+"                     This curl supports Metalink (both version 3  and  4  (RFC\n"
+"                     5854)),  which  describes  mirrors and hashes.  curl will\n"
+"                     use mirrors for failover if there are errors (such as the\n"
+"                     file or server not being available).\n"
+"\n"
 "FILES\n"
 "       ~/.curlrc\n"
 "              Default config file, see -K, --config for details.\n"
 "\n"
 "ENVIRONMENT\n"
 "       The environment variables can be specified in lower case or upper case.\n"
+, stdout);
+ fputs(
 "       The lower case version has precedence. http_proxy is an exception as it\n"
 "       is only available in lower case.\n"
 "\n"
 "       Using  an  environment variable to set the proxy has the same effect as\n"
-, stdout);
- fputs(
-"       using the -x, --proxy option.\n"
+"       using the --proxy option.\n"
 "\n"
 "       http_proxy [protocol://]<host>[:port]\n"
 "              Sets the proxy server to use for HTTP.\n"
@@ -3534,10 +3084,10 @@ void hugehelp(void)
 "              Sets the proxy server to use for HTTPS.\n"
 "\n"
 "       [url-protocol]_PROXY [protocol://]<host>[:port]\n"
-"              Sets the proxy server to use for [url-protocol], where the  pro-\n"
-"              tocol  is  a  protocol  that curl supports and as specified in a\n"
 , stdout);
  fputs(
+"              Sets the proxy server to use for [url-protocol], where the  pro-\n"
+"              tocol  is  a  protocol  that curl supports and as specified in a\n"
 "              URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP etc.\n"
 "\n"
 "       ALL_PROXY [protocol://]<host>[:port]\n"
@@ -3546,21 +3096,11 @@ void hugehelp(void)
 "\n"
 "       NO_PROXY <comma-separated list of hosts>\n"
 "              list  of  host names that shouldn't go through any proxy. If set\n"
-"              to a asterisk '*' only, it matches all hosts.\n"
-"\n"
-"              Since 7.53.0, this environment variable disable the  proxy  even\n"
 , stdout);
  fputs(
-"              if  specify  -x,  --proxy  option. That is NO_PROXY=direct.exam-\n"
-"              ple.com  curl  -x  http://proxy.example.com  http://direct.exam-\n"
-"              ple.com     accesses    the    target    URL    directly,    and\n"
-"              NO_PROXY=direct.example.com  curl  -x   http://proxy.example.com\n"
-"              http://somewhere.example.com  accesses  the  target  URL through\n"
-"              proxy.\n"
+"              to a asterisk '*' only, it matches all hosts.\n"
 "\n"
 "PROXY PROTOCOL PREFIXES\n"
-, stdout);
- fputs(
 "       Since curl version 7.21.7, the proxy string may  be  specified  with  a\n"
 "       protocol:// prefix to specify alternative proxy protocols.\n"
 "\n"
@@ -3571,11 +3111,11 @@ void hugehelp(void)
 "       The supported proxy protocol prefixes are as follows:\n"
 "\n"
 "       socks4://\n"
+, stdout);
+ fputs(
 "              Makes it the equivalent of --socks4\n"
 "\n"
 "       socks4a://\n"
-, stdout);
- fputs(
 "              Makes it the equivalent of --socks4a\n"
 "\n"
 "       socks5://\n"
@@ -3589,9 +3129,9 @@ void hugehelp(void)
 "       error messages that may appear during bad conditions. At  the  time  of\n"
 "       this writing, the exit codes are:\n"
 "\n"
-"       1      Unsupported protocol. This build of curl has no support for this\n"
 , stdout);
  fputs(
+"       1      Unsupported protocol. This build of curl has no support for this\n"
 "              protocol.\n"
 "\n"
 "       2      Failed to initialize.\n"
@@ -3603,50 +3143,38 @@ void hugehelp(void)
 "              time. To make curl able to do this, you  probably  need  another\n"
 "              build of libcurl!\n"
 "\n"
+, stdout);
+ fputs(
 "       5      Couldn't  resolve  proxy.  The  given  proxy  host  could not be\n"
 "              resolved.\n"
 "\n"
-, stdout);
- fputs(
 "       6      Couldn't resolve host. The given remote host was not resolved.\n"
 "\n"
 "       7      Failed to connect to host.\n"
 "\n"
-"       8      Weird server reply. The server sent data curl couldn't parse.\n"
-"\n"
-"       9      FTP access denied. The server denied login or denied  access  to\n"
-"              the  particular  resource or directory you wanted to reach. Most\n"
-"              often you tried to change to a directory that doesn't  exist  on\n"
-"              the server.\n"
+"       8      FTP weird server reply.  The  server  sent  data  curl  couldn't\n"
+"              parse.\n"
 "\n"
+"       9      FTP  access  denied. The server denied login or denied access to\n"
+"              the particular resource or directory you wanted to  reach.  Most\n"
 , stdout);
  fputs(
-"       10     FTP  accept failed. While waiting for the server to connect back\n"
-"              when an active FTP session is used, an error code was sent  over\n"
-"              the control connection or similar.\n"
+"              often  you  tried to change to a directory that doesn't exist on\n"
+"              the server.\n"
 "\n"
-"       11     FTP  weird PASS reply. Curl couldn't parse the reply sent to the\n"
+"       11     FTP weird PASS reply. Curl couldn't parse the reply sent to  the\n"
 "              PASS request.\n"
 "\n"
-"       12     During an active FTP session while waiting  for  the  server  to\n"
-"              connect back to curl, the timeout expired.\n"
-"\n"
-, stdout);
- fputs(
 "       13     FTP  weird PASV reply, Curl couldn't parse the reply sent to the\n"
 "              PASV request.\n"
 "\n"
 "       14     FTP weird 227 format.  Curl  couldn't  parse  the  227-line  the\n"
 "              server sent.\n"
 "\n"
-"       15     FTP  can't  get host. Couldn't resolve the host IP we got in the\n"
-"              227-line.\n"
-"\n"
-"       16     HTTP/2 error. A problem was detected in the HTTP2 framing layer.\n"
-"              This is somewhat generic and can be one out of several problems,\n"
 , stdout);
  fputs(
-"              see the error message for details.\n"
+"       15     FTP  can't  get host. Couldn't resolve the host IP we got in the\n"
+"              227-line.\n"
 "\n"
 "       17     FTP couldn't set binary.  Couldn't  change  transfer  method  to\n"
 "              binary.\n"
@@ -3657,9 +3185,9 @@ void hugehelp(void)
 "              lar) command failed.\n"
 "\n"
 "       21     FTP quote error. A quote command returned error from the server.\n"
-"       22     HTTP page not retrieved. The requested  url  was  not  found  or\n"
 , stdout);
  fputs(
+"       22     HTTP page not retrieved. The requested  url  was  not  found  or\n"
 "              returned  another  error  with  the HTTP error code being 400 or\n"
 "              above. This return code only appears if -f, --fail is used.\n"
 "\n"
@@ -3669,12 +3197,12 @@ void hugehelp(void)
 "       25     FTP  couldn't  STOR  file. The server denied the STOR operation,\n"
 "              used for FTP uploading.\n"
 "\n"
+, stdout);
+ fputs(
 "       26     Read error. Various reading problems.\n"
 "\n"
 "       27     Out of memory. A memory allocation request failed.\n"
 "\n"
-, stdout);
- fputs(
 "       28     Operation timeout. The specified  time-out  period  was  reached\n"
 "              according to the conditions.\n"
 "\n"
@@ -3682,20 +3210,22 @@ void hugehelp(void)
 "              support the PORT  command,  try  doing  a  transfer  using  PASV\n"
 "              instead!\n"
 "\n"
+, stdout);
+ fputs(
 "       31     FTP  couldn't use REST. The REST command failed. This command is\n"
 "              used for resumed FTP transfers.\n"
 "\n"
 "       33     HTTP range error. The range \"command\" didn't work.\n"
 "\n"
-, stdout);
- fputs(
 "       34     HTTP post error. Internal post-request generation error.\n"
 "\n"
 "       35     SSL connect error. The SSL handshaking failed.\n"
 "\n"
-"       36     Bad download resume. Couldn't continue an earlier aborted  down-\n"
-"              load.\n"
+"       36     FTP bad download resume. Couldn't continue  an  earlier  aborted\n"
+"              download.\n"
 "\n"
+, stdout);
+ fputs(
 "       37     FILE couldn't read file. Failed to open the file. Permissions?\n"
 "\n"
 "       38     LDAP cannot bind. LDAP bind operation failed.\n"
@@ -3704,13 +3234,13 @@ void hugehelp(void)
 "\n"
 "       41     Function not found. A required LDAP function was not found.\n"
 "\n"
-, stdout);
- fputs(
 "       42     Aborted by callback. An application told curl to abort the oper-\n"
 "              ation.\n"
 "\n"
 "       43     Internal error. A function was called with a bad parameter.\n"
 "\n"
+, stdout);
+ fputs(
 "       45     Interface error. A specified outgoing  interface  could  not  be\n"
 "              used.\n"
 "\n"
@@ -3718,13 +3248,13 @@ void hugehelp(void)
 "              mum amount.\n"
 "\n"
 "       48     Unknown option specified to libcurl.  This  indicates  that  you\n"
-, stdout);
- fputs(
 "              passed  a weird option to curl that was passed on to libcurl and\n"
 "              rejected. Read up in the manual!\n"
 "\n"
 "       49     Malformed telnet option.\n"
 "\n"
+, stdout);
+ fputs(
 "       51     The peer's SSL certificate or SSH MD5 fingerprint was not OK.\n"
 "\n"
 "       52     The server didn't reply anything, which here  is  considered  an\n"
@@ -3736,14 +3266,14 @@ void hugehelp(void)
 "\n"
 "       55     Failed sending network data.\n"
 "\n"
-, stdout);
- fputs(
 "       56     Failure in receiving network data.\n"
 "\n"
 "       58     Problem with the local certificate.\n"
 "\n"
 "       59     Couldn't use specified SSL cipher.\n"
 "\n"
+, stdout);
+ fputs(
 "       60     Peer  certificate cannot be authenticated with known CA certifi-\n"
 "              cates.\n"
 "\n"
@@ -3757,13 +3287,13 @@ void hugehelp(void)
 "\n"
 "       65     Sending the data requires a rewind that failed.\n"
 "\n"
-, stdout);
- fputs(
 "       66     Failed to initialise SSL Engine.\n"
 "\n"
 "       67     The user name, password, or similar was not  accepted  and  curl\n"
 "              failed to log in.\n"
 "\n"
+, stdout);
+ fputs(
 "       68     File not found on TFTP server.\n"
 "\n"
 "       69     Permission problem on TFTP server.\n"
@@ -3778,14 +3308,14 @@ void hugehelp(void)
 "\n"
 "       74     No such user (TFTP).\n"
 "\n"
-, stdout);
- fputs(
 "       75     Character conversion failed.\n"
 "\n"
 "       76     Character conversion functions required.\n"
 "\n"
 "       77     Problem with reading the SSL CA cert (path? access rights?).\n"
 "\n"
+, stdout);
+ fputs(
 "       78     The resource referenced in the URL does not exist.\n"
 "\n"
 "       79     An unspecified error occurred during the SSH session.\n"
@@ -3795,8 +3325,6 @@ void hugehelp(void)
 "       82     Could  not  load  CRL  file,  missing  or wrong format (added in\n"
 "              7.19.0).\n"
 "\n"
-, stdout);
- fputs(
 "       83     Issuer check failed (added in 7.19.0).\n"
 "\n"
 "       84     The FTP PRET command failed\n"
@@ -3805,6 +3333,8 @@ void hugehelp(void)
 "\n"
 "       86     RTSP: mismatch of Session Identifiers\n"
 "\n"
+, stdout);
+ fputs(
 "       87     unable to parse FTP file list\n"
 "\n"
 "       88     FTP chunk callback reported error\n"
@@ -3813,18 +3343,21 @@ void hugehelp(void)
 "\n"
 "       90     SSL public key does not matched pinned public key\n"
 "\n"
-, stdout);
- fputs(
 "       XX     More error codes will appear here in future releases. The exist-\n"
 "              ing ones are meant to never change.\n"
 "\n"
 "AUTHORS / CONTRIBUTORS\n"
 "       Daniel  Stenberg is the main author, but the whole list of contributors\n"
+, stdout);
+ fputs(
 "       is found in the separate THANKS file.\n"
 "\n"
 "WWW\n"
 "       https://curl.haxx.se\n"
 "\n"
+"FTP\n"
+"       ftp://ftp.sunet.se/pub/www/utilities/curl/\n"
+"\n"
 "SEE ALSO\n"
 "       ftp(1), wget(1)\n"
 "\n"
@@ -3833,8 +3366,6 @@ void hugehelp(void)
 "  You always find news about what's going on as well as the latest versions\n"
 "  from the curl web pages, located at:\n"
 "\n"
-, stdout);
- fputs(
 "        https://curl.haxx.se\n"
 "\n"
 "SIMPLE USAGE\n"
@@ -3843,6 +3374,8 @@ void hugehelp(void)
 "\n"
 "        curl http://www.netscape.com/\n"
 "\n"
+, stdout);
+ fputs(
 "  Get the README file the user's home directory at funet's ftp-server:\n"
 "\n"
 "        curl ftp://ftp.funet.fi/README\n"
@@ -3857,14 +3390,14 @@ void hugehelp(void)
 "\n"
 "  Get the definition of curl from a dictionary:\n"
 "\n"
-, stdout);
- fputs(
 "        curl dict://dict.org/m:curl\n"
 "\n"
 "  Fetch two documents at once:\n"
 "\n"
 "        curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/\n"
 "\n"
+, stdout);
+ fputs(
 "  Get a file off an FTPS server:\n"
 "\n"
 "        curl ftps://files.are.secure.com/secrets.txt\n"
@@ -3877,12 +3410,12 @@ void hugehelp(void)
 "\n"
 "        curl -u username sftp://example.com/etc/issue\n"
 "\n"
-, stdout);
- fputs(
 "  Get a file from an SSH server using SCP using a private key\n"
 "  (not password-protected) to authenticate:\n"
 "\n"
 "        curl -u username: --key ~/.ssh/id_rsa \\\n"
+, stdout);
+ fputs(
 "             scp://example.com/~/file.txt\n"
 "\n"
 "  Get a file from an SSH server using SCP using a private key\n"
@@ -3893,8 +3426,6 @@ void hugehelp(void)
 "\n"
 "  Get the main page from an IPv6 web server:\n"
 "\n"
-, stdout);
- fputs(
 "        curl \"http://[2001:1890:1112:1::20]/\"\n"
 "\n"
 "  Get a file from an SMB server:\n"
@@ -3903,6 +3434,8 @@ void hugehelp(void)
 "\n"
 "DOWNLOAD TO A FILE\n"
 "\n"
+, stdout);
+ fputs(
 "  Get a web page and store in a local file with a specific name:\n"
 "\n"
 "        curl -o thatpage.html http://www.netscape.com/\n"
@@ -3911,8 +3444,6 @@ void hugehelp(void)
 "  of the remote document (if no file name part is specified in the URL, this\n"
 "  will fail):\n"
 "\n"
-, stdout);
- fputs(
 "        curl -O http://www.netscape.com/index.html\n"
 "\n"
 "  Fetch two files and store them with their remote names:\n"
@@ -3923,6 +3454,8 @@ void hugehelp(void)
 "\n"
 " FTP\n"
 "\n"
+, stdout);
+ fputs(
 "   To ftp files using name+passwd, include them in the URL like:\n"
 "\n"
 "        curl ftp://name:passwd@machine.domain:port/full/path/to/file\n"
@@ -3933,12 +3466,12 @@ void hugehelp(void)
 "\n"
 " FTPS\n"
 "\n"
-, stdout);
- fputs(
 "   It is just like for FTP, but you may also want to specify and use\n"
 "   SSL-specific options for certificates etc.\n"
 "\n"
 "   Note that using FTPS:// as prefix is the \"implicit\" way as described in the\n"
+, stdout);
+ fputs(
 "   standards while the recommended \"explicit\" way is done by using FTP:// and\n"
 "   the --ftp-ssl option.\n"
 "\n"
@@ -3946,11 +3479,11 @@ void hugehelp(void)
 "\n"
 "   This is similar to FTP, but you can use the --key option to specify a\n"
 "   private key to use instead of a password. Note that the private key may\n"
-, stdout);
- fputs(
 "   itself be protected by a password that is unrelated to the login password\n"
 "   of the remote system; this password is specified using the --pass option.\n"
 "   Typically, curl will automatically extract the public key from the private\n"
+, stdout);
+ fputs(
 "   key file, but in cases where curl does not have the proper library support,\n"
 "   a matching public key file must be specified using the --pubkey option.\n"
 "\n"
@@ -3959,24 +3492,24 @@ void hugehelp(void)
 "   Curl also supports user and password in HTTP URLs, thus you can pick a file\n"
 "   like:\n"
 "\n"
-, stdout);
- fputs(
 "        curl http://name:passwd@machine.domain/full/path/to/file\n"
 "\n"
 "   or specify user and password separately like in\n"
 "\n"
 "        curl -u name:passwd http://machine.domain/full/path/to/file\n"
 "\n"
+, stdout);
+ fputs(
 "   HTTP offers many different methods of authentication and curl supports\n"
 "   several: Basic, Digest, NTLM and Negotiate (SPNEGO). Without telling which\n"
 "   method to use, curl defaults to Basic. You can also ask curl to pick the\n"
 "   most secure ones out of the ones that the server accepts for the given URL,\n"
-, stdout);
- fputs(
 "   by using --anyauth.\n"
 "\n"
 "   NOTE! According to the URL specification, HTTP URLs can not contain a user\n"
 "   and password, so that style will not work when using curl via a proxy, even\n"
+, stdout);
+ fputs(
 "   though curl allows it at other times. When using a proxy, you _must_ use\n"
 "   the -u style for user and password.\n"
 "\n"
@@ -3987,10 +3520,10 @@ void hugehelp(void)
 "PROXY\n"
 "\n"
 " curl supports both HTTP and SOCKS proxy servers, with optional authentication.\n"
-, stdout);
- fputs(
 " It does not have special support for FTP proxy servers since there are no\n"
 " standards for those, but it can still be made to work with many of them. You\n"
+, stdout);
+ fputs(
 " can also use both HTTP and SOCKS proxies to transfer files to and from FTP\n"
 " servers.\n"
 "\n"
@@ -4001,12 +3534,12 @@ void hugehelp(void)
 " Get a file from an HTTP server that requires user and password, using the\n"
 " same proxy as above:\n"
 "\n"
-, stdout);
- fputs(
 "        curl -u user:passwd -x my-proxy:888 http://www.get.this/\n"
 "\n"
 " Some proxies require special authentication. Specify by using -U as above:\n"
 "\n"
+, stdout);
+ fputs(
 "        curl -U user:passwd -x my-proxy:888 http://www.get.this/\n"
 "\n"
 " A comma-separated list of hosts and domains which do not use the proxy can\n"
@@ -4015,24 +3548,24 @@ void hugehelp(void)
 "        curl --noproxy localhost,get.this -x my-proxy:888 http://www.get.this/\n"
 "\n"
 " If the proxy is specified with --proxy1.0 instead of --proxy or -x, then\n"
-, stdout);
- fputs(
 " curl will use HTTP/1.0 instead of HTTP/1.1 for any CONNECT attempts.\n"
 "\n"
 " curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.\n"
 "\n"
+, stdout);
+ fputs(
 " See also the environment variables Curl supports that offer further proxy\n"
 " control.\n"
 "\n"
 " Most FTP proxy servers are set up to appear as a normal FTP server from the\n"
 " client's perspective, with special commands to select the remote FTP server.\n"
 " curl supports the -u, -Q and --ftp-account options that can be used to\n"
-, stdout);
- fputs(
 " set up transfers through many FTP proxies. For example, a file can be\n"
 " uploaded to a remote FTP server using a Blue Coat FTP proxy with the\n"
 " options:\n"
 "\n"
+, stdout);
+ fputs(
 "   curl -u \"Remote-FTP-Username@remote.ftp.server Proxy-Username:Remote-Pass\" \\\n"
 "    --ftp-account Proxy-Password --upload-file local-file \\\n"
 "    ftp://my-ftp.proxy.server:21/remote/upload/path/\n"
@@ -4040,12 +3573,12 @@ void hugehelp(void)
 " See the manual for your FTP proxy to determine the form it expects to set up\n"
 " transfers, and curl's -v option to see exactly what curl is sending.\n"
 "\n"
-, stdout);
- fputs(
 "RANGES\n"
 "\n"
 "  HTTP 1.1 introduced byte-ranges. Using this, a client can request\n"
 "  to get only one or more subparts of a specified document. Curl supports\n"
+, stdout);
+ fputs(
 "  this with the -r flag.\n"
 "\n"
 "  Get the first 100 bytes of a document:\n"
@@ -4059,8 +3592,6 @@ void hugehelp(void)
 "  Curl also supports simple ranges for FTP files as well. Then you can only\n"
 "  specify start and stop position.\n"
 "\n"
-, stdout);
- fputs(
 "  Get the first 100 bytes of a document using FTP:\n"
 "\n"
 "        curl -r 0-99 ftp://www.get.this/README\n"
@@ -4071,6 +3602,8 @@ void hugehelp(void)
 "\n"
 "  Upload all data on stdin to a specified server:\n"
 "\n"
+, stdout);
+ fputs(
 "        curl -T - ftp://ftp.upload.com/myfile\n"
 "\n"
 "  Upload data from a specified file, login with user and password:\n"
@@ -4080,14 +3613,14 @@ void hugehelp(void)
 "  Upload a local file to the remote site, and use the local file name at the remote\n"
 "  site too:\n"
 "\n"
-, stdout);
- fputs(
 "        curl -T uploadfile -u user:passwd ftp://ftp.upload.com/\n"
 "\n"
 "  Upload a local file to get appended to the remote file:\n"
 "\n"
 "        curl -T localfile -a ftp://ftp.upload.com/remotefile\n"
 "\n"
+, stdout);
+ fputs(
 "  Curl also supports ftp upload through a proxy, but only if the proxy is\n"
 "  configured to allow that kind of tunneling. If it does, you can run curl in\n"
 "  a fashion similar to:\n"
@@ -4097,8 +3630,6 @@ void hugehelp(void)
 "SMB / SMBS\n"
 "\n"
 "        curl -T file.txt -u \"domain\\username:passwd\" \n"
-, stdout);
- fputs(
 "         smb://server.example.com/share/\n"
 "\n"
 " HTTP\n"
@@ -4107,6 +3638,8 @@ void hugehelp(void)
 "\n"
 "        curl -T - http://www.upload.com/myfile\n"
 "\n"
+, stdout);
+ fputs(
 "  Note that the HTTP server must have been configured to accept PUT before\n"
 "  this can be done successfully.\n"
 "\n"
@@ -4116,10 +3649,10 @@ void hugehelp(void)
 "\n"
 "  If curl fails where it isn't supposed to, if the servers don't let you in,\n"
 "  if you can't understand the responses: use the -v flag to get verbose\n"
-, stdout);
- fputs(
 "  fetching. Curl will output lots of info and what it sends and receives in\n"
 "  order to let the user see all client-server interaction (but it won't show\n"
+, stdout);
+ fputs(
 "  you the actual data).\n"
 "\n"
 "        curl -v ftp://ftp.upload.com/\n"
@@ -4133,21 +3666,21 @@ void hugehelp(void)
 "\n"
 "DETAILED INFORMATION\n"
 "\n"
-, stdout);
- fputs(
 "  Different protocols provide different ways of getting detailed information\n"
 "  about specific files/documents. To get curl to show detailed information\n"
+, stdout);
+ fputs(
 "  about a single file, you should use -I/--head option. It displays all\n"
 "  available info on a single file for HTTP and FTP. The HTTP information is a\n"
 "  lot more extensive.\n"
 "\n"
 "  For HTTP, you can get the header information (the same as -I would show)\n"
 "  shown before the data by using -i/--include. Curl understands the\n"
-, stdout);
- fputs(
 "  -D/--dump-header option when getting files from both FTP and HTTP, and it\n"
 "  will then store the headers in the specified file.\n"
 "\n"
+, stdout);
+ fputs(
 "  Store the HTTP headers in a separate file (headers.txt in the example):\n"
 "\n"
 "        curl --dump-header headers.txt curl.haxx.se\n"
@@ -4158,13 +3691,13 @@ void hugehelp(void)
 "\n"
 "POST (HTTP)\n"
 "\n"
-, stdout);
- fputs(
 "  It's easy to post data using curl. This is done using the -d <data>\n"
 "  option.  The post data must be urlencoded.\n"
 "\n"
 "  Post a simple \"name\" and \"phone\" guestbook.\n"
 "\n"
+, stdout);
+ fputs(
 "        curl -d \"name=Rafael%20Sagula&phone=3320780\" \\\n"
 "                http://www.where.com/guest.cgi\n"
 "\n"
@@ -4173,19 +3706,17 @@ void hugehelp(void)
 "  Dig out all the <input> tags in the form that you want to fill in. (There's\n"
 "  a perl program called formfind.pl on the curl site that helps with this).\n"
 "\n"
-, stdout);
- fputs(
 "  If there's a \"normal\" post, you use -d to post. -d takes a full \"post\n"
 "  string\", which is in the format\n"
 "\n"
 "        <variable1>=<data1>&<variable2>=<data2>&...\n"
 "\n"
+, stdout);
+ fputs(
 "  The 'variable' names are the names set with \"name=\" in the <input> tags, and\n"
 "  the data is the contents you want to fill in for the inputs. The data *must*\n"
 "  be properly URL encoded. That means you replace space with + and that you\n"
 "  replace weird letters with %XX where XX is the hexadecimal representation of\n"
-, stdout);
- fputs(
 "  the letter's ASCII code.\n"
 "\n"
 "  Example:\n"
@@ -4194,6 +3725,8 @@ void hugehelp(void)
 "\n"
 "        <form action=\"post.cgi\" method=\"post\">\n"
 "        <input name=user size=10>\n"
+, stdout);
+ fputs(
 "        <input name=pass type=password size=10>\n"
 "        <input name=id type=hidden value=\"blablabla\">\n"
 "        <input name=ding value=\"submit\">\n"
@@ -4203,49 +3736,47 @@ void hugehelp(void)
 "\n"
 "  To post to this, you enter a curl command line like:\n"
 "\n"
-, stdout);
- fputs(
 "        curl -d \"user=foobar&pass=12345&id=blablabla&ding=submit\"  (continues)\n"
 "          http://www.formpost.com/getthis/post.cgi\n"
 "\n"
 "\n"
 "  While -d uses the application/x-www-form-urlencoded mime-type, generally\n"
+, stdout);
+ fputs(
 "  understood by CGI's and similar, curl also supports the more capable\n"
 "  multipart/form-data type. This latter type supports things like file upload.\n"
 "\n"
 "  -F accepts parameters like -F \"name=contents\". If you want the contents to\n"
-, stdout);
- fputs(
 "  be read from a file, use <@filename> as contents. When specifying a file,\n"
 "  you can also specify the file content type by appending ';type=<mime type>'\n"
 "  to the file name. You can also post the contents of several files in one\n"
+, stdout);
+ fputs(
 "  field.  For example, the field name 'coolfiles' is used to send three files,\n"
 "  with different content types using the following syntax:\n"
 "\n"
 "        curl -F \"coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html\" \\\n"
 "        http://www.post.com/postit.cgi\n"
 "\n"
-, stdout);
- fputs(
 "  If the content-type is not specified, curl will try to guess from the file\n"
 "  extension (it only knows a few), or use the previously specified type (from\n"
 "  an earlier file if several files are specified in a list) or else it will\n"
+, stdout);
+ fputs(
 "  use the default type 'application/octet-stream'.\n"
 "\n"
 "  Emulate a fill-in form with -F. Let's say you fill in three fields in a\n"
 "  form. One field is a file name which to post, one field is your name and one\n"
-, stdout);
- fputs(
 "  field is a file description. We want to post the file we have written named\n"
 "  \"cooltext.txt\". To let curl do the posting of this data instead of your\n"
 "  favourite browser, you have to read the HTML source of the form page and\n"
+, stdout);
+ fputs(
 "  find the names of the input fields. In our example, the input field names\n"
 "  are 'file', 'yourname' and 'filedescription'.\n"
 "\n"
 "        curl -F \"file=@cooltext.txt\" -F \"yourname=Daniel\" \\\n"
 "             -F \"filedescription=Cool text file with cool text inside\" \\\n"
-, stdout);
- fputs(
 "             http://www.post.com/postit.cgi\n"
 "\n"
 "  To send two files in one post you can do it in two ways:\n"
@@ -4254,14 +3785,14 @@ void hugehelp(void)
 "\n"
 "        curl -F \"pictures=@dog.gif,cat.gif\"\n"
 "\n"
+, stdout);
+ fputs(
 "  2. Send two fields with two field names:\n"
 "\n"
 "        curl -F \"docpicture=@dog.gif\" -F \"catpicture=@cat.gif\"\n"
 "\n"
 "  To send a field value literally without interpreting a leading '@'\n"
 "  or '<', or an embedded ';type=', use --form-string instead of\n"
-, stdout);
- fputs(
 "  -F. This is recommended when the value is obtained from a user or\n"
 "  some other unpredictable source. Under these circumstances, using\n"
 "  -F instead of --form-string would allow a user to trick curl into\n"
@@ -4269,11 +3800,11 @@ void hugehelp(void)
 "\n"
 "REFERRER\n"
 "\n"
+, stdout);
+ fputs(
 "  An HTTP request has the option to include information about which address\n"
 "  referred it to the actual page.  Curl allows you to specify the\n"
 "  referrer to be used on the command line. It is especially useful to\n"
-, stdout);
- fputs(
 "  fool or trick stupid servers or CGI scripts that rely on that information\n"
 "  being available or contain certain data.\n"
 "\n"
@@ -4283,11 +3814,11 @@ void hugehelp(void)
 "\n"
 "USER AGENT\n"
 "\n"
+, stdout);
+ fputs(
 "  An HTTP request has the option to include information about the browser\n"
 "  that generated the request. Curl allows it to be specified on the command\n"
 "  line. It is especially useful to fool or trick stupid servers or CGI\n"
-, stdout);
- fputs(
 "  scripts that only accept certain browsers.\n"
 "\n"
 "  Example:\n"
@@ -4296,17 +3827,19 @@ void hugehelp(void)
 "\n"
 "  Other common strings:\n"
 "    'Mozilla/3.0 (Win95; I)'     Netscape Version 3 for Windows 95\n"
+, stdout);
+ fputs(
 "    'Mozilla/3.04 (Win95; U)'    Netscape Version 3 for Windows 95\n"
 "    'Mozilla/2.02 (OS/2; U)'     Netscape Version 2 for OS/2\n"
 "    'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)'           NS for AIX\n"
 "    'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)'      NS for Linux\n"
 "\n"
-, stdout);
- fputs(
 "  Note that Internet Explorer tries hard to be compatible in every way:\n"
 "    'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)'    MSIE for W95\n"
 "\n"
 "  Mozilla is not the only possible User-Agent name:\n"
+, stdout);
+ fputs(
 "    'Konqueror/1.0'             KDE File Manager desktop client\n"
 "    'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser\n"
 "\n"
@@ -4314,21 +3847,21 @@ void hugehelp(void)
 "\n"
 "  Cookies are generally used by web servers to keep state information at the\n"
 "  client's side. The server sets cookies by sending a response line in the\n"
-, stdout);
- fputs(
 "  headers that looks like 'Set-Cookie: <data>' where the data part then\n"
 "  typically contains a set of NAME=VALUE pairs (separated by semicolons ';'\n"
+, stdout);
+ fputs(
 "  like \"NAME1=VALUE1; NAME2=VALUE2;\"). The server can also specify for what\n"
 "  path the \"cookie\" should be used for (by specifying \"path=value\"), when the\n"
 "  cookie should expire (\"expire=DATE\"), for what domain to use it\n"
 "  (\"domain=NAME\") and if it should be used on secure connections only\n"
 "  (\"secure\").\n"
 "\n"
-, stdout);
- fputs(
 "  If you've received a page from a server that contains a header like:\n"
 "        Set-Cookie: sessionid=boo123; path=\"/foo\";\n"
 "\n"
+, stdout);
+ fputs(
 "  it means the server wants that first pair passed on when we get anything in\n"
 "  a path beginning with \"/foo\".\n"
 "\n"
@@ -4338,12 +3871,12 @@ void hugehelp(void)
 "\n"
 "  Curl also has the ability to use previously received cookies in following\n"
 "  sessions. If you get cookies from a server and store them in a file in a\n"
-, stdout);
- fputs(
 "  manner similar to:\n"
 "\n"
 "        curl --dump-header headers www.example.com\n"
 "\n"
+, stdout);
+ fputs(
 "  ... you can then in a second connect to that (or another) site, use the\n"
 "  cookies from the 'headers' file like:\n"
 "\n"
@@ -4354,10 +3887,10 @@ void hugehelp(void)
 "  save the incoming cookies using the well-known netscape cookie format like\n"
 "  this:\n"
 "\n"
-, stdout);
- fputs(
 "        curl -c cookies.txt www.example.com\n"
 "\n"
+, stdout);
+ fputs(
 "  Note that by specifying -b you enable the \"cookie awareness\" and with -L\n"
 "  you can make curl follow a location: (which often is used in combination\n"
 "  with cookies). So that if a site sends cookies and a location, you can\n"
@@ -4366,9 +3899,9 @@ void hugehelp(void)
 "        curl -L -b empty.txt www.example.com\n"
 "\n"
 "  The file to read cookies from must be formatted using plain HTTP headers OR\n"
+"  as netscape's cookie file. Curl will determine what kind it is based on the\n"
 , stdout);
  fputs(
-"  as netscape's cookie file. Curl will determine what kind it is based on the\n"
 "  file contents.  In the above command, curl will parse the header and store\n"
 "  the cookies received from www.example.com.  curl will send to the server the\n"
 "  stored cookies which match the request as it follows the location.  The\n"
@@ -4377,12 +3910,12 @@ void hugehelp(void)
 "  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(
 "        curl -b cookies.txt -c cookies.txt www.example.com\n"
 "\n"
 "PROGRESS METER\n"
 "\n"
+, stdout);
+ fputs(
 "  The progress meter exists to show a user that something actually is\n"
 "  happening. The different fields in the output have the following meaning:\n"
 "\n"
@@ -4391,9 +3924,9 @@ void hugehelp(void)
 "  0  151M    0 38608    0     0   9406      0  4:41:43  0:00:04  4:41:39  9287\n"
 "\n"
 "  From left-to-right:\n"
+"   %             - percentage completed of the whole transfer\n"
 , stdout);
  fputs(
-"   %             - percentage completed of the whole transfer\n"
 "   Total         - total size of the whole expected transfer\n"
 "   %             - percentage completed of the download\n"
 "   Received      - currently downloaded amount of bytes\n"
@@ -4403,9 +3936,9 @@ void hugehelp(void)
 "   Dload         - the average transfer speed of the download\n"
 "   Average Speed\n"
 "   Upload        - the average transfer speed of the upload\n"
+"   Time Total    - expected time to complete the operation\n"
 , stdout);
  fputs(
-"   Time Total    - expected time to complete the operation\n"
 "   Time Current  - time passed since the invoke\n"
 "   Time Left     - expected time left to completion\n"
 "   Curr.Speed    - the average transfer speed the last 5 seconds (the first\n"
@@ -4416,9 +3949,9 @@ void hugehelp(void)
 "\n"
 "SPEED LIMIT\n"
 "\n"
+"  Curl allows the user to set the transfer speed conditions that must be met\n"
 , stdout);
  fputs(
-"  Curl allows the user to set the transfer speed conditions that must be met\n"
 "  to let the transfer keep going. By using the switch -y and -Y you\n"
 "  can make curl abort transfers if the transfer speed is below the specified\n"
 "  lowest limit for a specified time.\n"
@@ -4429,10 +3962,10 @@ void hugehelp(void)
 "        curl -Y 3000 -y 60 www.far-away-site.com\n"
 "\n"
 "  This can very well be used in combination with the overall time limit, so\n"
-, stdout);
- fputs(
 "  that the above operation must be completed in whole within 30 minutes:\n"
 "\n"
+, stdout);
+ fputs(
 "        curl -m 1800 -Y 3000 -y 60 www.far-away-site.com\n"
 "\n"
 "  Forcing curl not to transfer data faster than a given rate is also possible,\n"
@@ -4442,14 +3975,14 @@ void hugehelp(void)
 "\n"
 "  Make curl transfer data no faster than 10 kilobytes per second:\n"
 "\n"
-, stdout);
- fputs(
 "        curl --limit-rate 10K www.far-away-site.com\n"
 "\n"
 "    or\n"
 "\n"
 "        curl --limit-rate 10240 www.far-away-site.com\n"
 "\n"
+, stdout);
+ fputs(
 "  Or prevent curl from uploading data faster than 1 megabyte per second:\n"
 "\n"
 "        curl -T upload --limit-rate 1M ftp://uploadshereplease.com\n"
@@ -4457,24 +3990,24 @@ void hugehelp(void)
 "  When using the --limit-rate option, the transfer rate is regulated on a\n"
 "  per-second basis, which will cause the total transfer speed to become lower\n"
 "  than the given number. Sometimes of course substantially lower, if your\n"
-, stdout);
- fputs(
 "  transfer stalls during periods.\n"
 "\n"
 "CONFIG FILE\n"
 "\n"
 "  Curl automatically tries to read the .curlrc file (or _curlrc file on win32\n"
+, stdout);
+ fputs(
 "  systems) from the user's home dir on startup.\n"
 "\n"
 "  The config file could be made up with normal command line switches, but you\n"
 "  can also specify the long options without the dashes to make it more\n"
 "  readable. You can separate the options and the parameter with spaces, or\n"
 "  with = or :. Comments can be used within the file. If the first letter on a\n"
-, stdout);
- fputs(
 "  line is a '#'-symbol the rest of the line is treated as a comment.\n"
 "\n"
 "  If you want the parameter to contain spaces, you must enclose the entire\n"
+, stdout);
+ fputs(
 "  parameter within double quotes (\"). Within those quotes, you specify a\n"
 "  quote as \\\".\n"
 "\n"
@@ -4485,11 +4018,11 @@ void hugehelp(void)
 "        # We want a 30 minute timeout:\n"
 "        -m 1800\n"
 "        # ... and we use a proxy for all accesses:\n"
-, stdout);
- fputs(
 "        proxy = proxy.our.domain.com:8080\n"
 "\n"
 "  White spaces ARE significant at the end of lines, but all white spaces\n"
+, stdout);
+ fputs(
 "  leading up to the first characters of each line are ignored.\n"
 "\n"
 "  Prevent curl from reading the default file by using -q as the first command\n"
@@ -4501,11 +4034,11 @@ void hugehelp(void)
 "  without URL by making a config file similar to:\n"
 "\n"
 "        # default url to get\n"
-, stdout);
- fputs(
 "        url = \"http://help.with.curl.com/curlhelp.html\"\n"
 "\n"
 "  You can specify another config file to be read by using the -K/--config\n"
+, stdout);
+ fputs(
 "  flag. If you set config file name to \"-\" it'll read the config from stdin,\n"
 "  which can be handy if you want to hide options from being visible in process\n"
 "  tables etc:\n"
@@ -4515,11 +4048,11 @@ void hugehelp(void)
 "EXTRA HEADERS\n"
 "\n"
 "  When using curl in your own very special programs, you may end up needing\n"
-, stdout);
- fputs(
 "  to pass on your own custom headers when getting a web page. You can do\n"
 "  this by using the -H flag.\n"
 "\n"
+, stdout);
+ fputs(
 "  Example, send the header \"X-you-and-me: yes\" to the server when getting a\n"
 "  page:\n"
 "\n"
@@ -4528,11 +4061,11 @@ void hugehelp(void)
 "  This can also be useful in case you want curl to send a different text in a\n"
 "  header than it normally does. The -H header you specify then replaces the\n"
 "  header curl would normally send. If you replace an internal header with an\n"
-, stdout);
- fputs(
 "  empty one, you prevent that header from being sent. To prevent the Host:\n"
 "  header from being used:\n"
 "\n"
+, stdout);
+ fputs(
 "        curl -H \"Host:\" www.server.com\n"
 "\n"
 "FTP and PATH NAMES\n"
@@ -4544,12 +4077,12 @@ void hugehelp(void)
 "        curl ftp://user:passwd@my.site.com/README\n"
 "\n"
 "  But if you want the README file from the root directory of that very same\n"
-, stdout);
- fputs(
 "  site, you need to specify the absolute file name:\n"
 "\n"
 "        curl ftp://user:passwd@my.site.com//README\n"
 "\n"
+, stdout);
+ fputs(
 "  (I.e with an extra slash in front of the file name.)\n"
 "\n"
 "SFTP and SCP and PATH NAMES\n"
@@ -4562,9 +4095,9 @@ void hugehelp(void)
 "\n"
 "FTP and firewalls\n"
 "\n"
+"  The FTP protocol requires one of the involved parties to open a second\n"
 , stdout);
  fputs(
-"  The FTP protocol requires one of the involved parties to open a second\n"
 "  connection as soon as data is about to get transferred. There are two ways to\n"
 "  do this.\n"
 "\n"
@@ -4575,9 +4108,9 @@ void hugehelp(void)
 "\n"
 "        curl ftp.download.com\n"
 "\n"
+"  If the server, for example, is behind a firewall that doesn't allow connections\n"
 , stdout);
  fputs(
-"  If the server, for example, is behind a firewall that doesn't allow connections\n"
 "  on ports other than 21 (or if it just doesn't support the PASV command), the\n"
 "  other way to do it is to use the PORT command and instruct the server to\n"
 "  connect to the client on the given IP number and port (as parameters to the\n"
@@ -4585,10 +4118,10 @@ void hugehelp(void)
 "\n"
 "  The -P flag to curl supports a few different options. Your machine may have\n"
 "  several IP-addresses and/or network interfaces and curl allows you to select\n"
-, stdout);
- fputs(
 "  which of them to use. Default address can also be used:\n"
 "\n"
+, stdout);
+ fputs(
 "        curl -P - ftp.download.com\n"
 "\n"
 "  Download with PORT but use the IP address of our 'le0' interface (this does\n"
@@ -4604,12 +4137,12 @@ void hugehelp(void)
 "\n"
 "  Get a web page from a server using a specified port for the interface:\n"
 "\n"
-, stdout);
- fputs(
 "        curl --interface eth0:1 http://www.netscape.com/\n"
 "\n"
 "  or\n"
 "\n"
+, stdout);
+ fputs(
 "        curl --interface 192.168.1.10 http://www.netscape.com/\n"
 "\n"
 "HTTPS\n"
@@ -4623,17 +4156,17 @@ void hugehelp(void)
 "        curl https://www.secure-site.com\n"
 "\n"
 "  Curl is also capable of using your personal certificates to get/post files\n"
+"  from sites that require valid certificates. The only drawback is that the\n"
 , stdout);
  fputs(
-"  from sites that require valid certificates. The only drawback is that the\n"
 "  certificate needs to be in PEM-format. PEM is a standard and open format to\n"
 "  store certificates with, but it is not used by the most commonly used\n"
 "  browsers (Netscape and MSIE both use the so called PKCS#12 format). If you\n"
 "  want curl to use the certificates you use with your (favourite) browser, you\n"
 "  may need to download/compile a converter that can convert your browser's\n"
+"  formatted certificates to PEM formatted ones. This kind of converter is\n"
 , stdout);
  fputs(
-"  formatted certificates to PEM formatted ones. This kind of converter is\n"
 "  included in recent versions of OpenSSL, and for older versions Dr Stephen\n"
 "  N. Henson has written a patch for SSLeay that adds this functionality. You\n"
 "  can get his patch (that requires an SSLeay installation) from his site at:\n"
@@ -4642,10 +4175,10 @@ void hugehelp(void)
 "  Example on how to automatically retrieve a document using a certificate with\n"
 "  a personal password:\n"
 "\n"
-, stdout);
- fputs(
 "        curl -E /path/to/cert.pem:password https://secure.site.com/\n"
 "\n"
+, stdout);
+ fputs(
 "  If you neglect to specify the password on the command line, you will be\n"
 "  prompted for the correct password before any data can be received.\n"
 "\n"
@@ -4654,10 +4187,10 @@ void hugehelp(void)
 "  SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL\n"
 "  version to use (for SSLv3, SSLv2 or TLSv1 respectively):\n"
 "\n"
-, stdout);
- fputs(
 "        curl -2 https://secure.site.com/\n"
 "\n"
+, stdout);
+ fputs(
 "  Otherwise, curl will first attempt to use v3 and then v2.\n"
 "\n"
 "  To use OpenSSL to convert your favourite browser's certificate into a PEM\n"
@@ -5042,7 +4575,7 @@ void hugehelp(void) {}
 #else
 /*
  * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Tue Feb 21 08:10:35 2017
+ * Generation time: Wed Sep  7 07:46:52 2016
  */
 #ifdef USE_MANUAL
 #include "tool_hugehelp.h"
@@ -5050,4570 +4583,4341 @@ 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 186131
-     to 54723 bytes. You can disable the use of compressed help
+     Thanks to this operation, the size of this data shrunk from 173056
+     to 51974 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, 0xfd,
-  0x6b, 0x7b, 0xe3, 0x46, 0x92, 0x26, 0x80, 0x7e, 0xd7, 0xaf, 0xc0, 0xa8,
-  0x4f, 0x8f, 0xa4, 0x69, 0x92, 0xba, 0xd4, 0xc5, 0x2e, 0x75, 0x95, 0xc7,
-  0xb2, 0x4a, 0x65, 0x6b, 0xac, 0x2a, 0x69, 0x45, 0x95, 0xed, 0x5e, 0xdb,
-  0x4f, 0x3d, 0x20, 0x09, 0x49, 0x68, 0x91, 0x00, 0x1b, 0x00, 0x75, 0xe9,
-  0xd9, 0xd9, 0xdf, 0x7e, 0x32, 0xde, 0x88, 0xc8, 0x4c, 0x20, 0x93, 0x94,
-  0xec, 0xb6, 0x7b, 0xe7, 0x9c, 0xdd, 0xde, 0x1d, 0x57, 0x95, 0x04, 0x24,
-  0xf2, 0x1a, 0x19, 0x97, 0x37, 0xde, 0x48, 0x92, 0xc7, 0xfe, 0xf7, 0x09,
-  0xff, 0xf7, 0xc9, 0xfc, 0xcf, 0xfc, 0xb9, 0x96, 0x24, 0x67, 0x55, 0xf9,
-  0xd7, 0x6c, 0xdc, 0xc4, 0x9f, 0xfd, 0xf4, 0xe9, 0x7f, 0x25, 0xfc, 0xff,
-  0xcc, 0x3b, 0x3f, 0x99, 0x3f, 0xd7, 0x56, 0xb6, 0xbd, 0x9d, 0xb8, 0x17,
-  0xfe, 0xd7, 0xa7, 0xad, 0xe4, 0xb1, 0x17, 0xfe, 0x57, 0xb2, 0x89, 0x17,
-  0x3e, 0xc9, 0x17, 0x5e, 0xd3, 0xdf, 0x3f, 0x7d, 0x5a, 0xfd, 0x91, 0x9f,
-  0xa8, 0x57, 0xf4, 0x9f, 0x6d, 0x7a, 0xef, 0xa7, 0x4f, 0xf4, 0x57, 0xf3,
-  0x93, 0xb5, 0xb5, 0x0f, 0x07, 0xef, 0x8f, 0xf4, 0xd5, 0xf1, 0xa2, 0x9a,
-  0x26, 0xfd, 0xa4, 0xa9, 0xd2, 0xa2, 0xbe, 0xcc, 0xaa, 0x24, 0x4d, 0x3e,
-  0x9e, 0x9f, 0xac, 0xad, 0x0d, 0xff, 0xf2, 0xe1, 0xf4, 0x6c, 0x78, 0x3c,
-  0x6c, 0x3d, 0xf6, 0x63, 0x39, 0x6f, 0xf2, 0xb2, 0xa8, 0x7f, 0x4e, 0x7e,
-  0x34, 0x0f, 0x0d, 0x06, 0x83, 0x9f, 0xd7, 0xd6, 0xde, 0x1e, 0x0d, 0x0f,
-  0xcf, 0x8f, 0xcf, 0x2e, 0x8e, 0x4f, 0x3f, 0xb4, 0x9e, 0x4d, 0xf2, 0x3a,
-  0x31, 0x8d, 0x35, 0x65, 0x39, 0x35, 0xff, 0x71, 0xed, 0x4f, 0xd2, 0x26,
-  0x4d, 0x2e, 0xab, 0x72, 0x96, 0x94, 0x15, 0xfd, 0x22, 0x4d, 0xea, 0xac,
-  0xba, 0xcd, 0xaa, 0x5e, 0xb2, 0xa8, 0xf3, 0xe2, 0x2a, 0x29, 0x8b, 0x2c,
-  0x29, 0x2f, 0x93, 0xe6, 0x3a, 0xd3, 0xe6, 0xea, 0xc5, 0x7c, 0x5e, 0x56,
-  0x4d, 0x36, 0x49, 0xe6, 0x55, 0xd9, 0x94, 0xe3, 0x72, 0x5a, 0x27, 0x9b,
-  0x6f, 0x8f, 0x0f, 0x2f, 0x7a, 0xc9, 0xbb, 0xe3, 0x93, 0x23, 0xf3, 0xdf,
-  0x8b, 0x33, 0xfc, 0x67, 0xd8, 0x4b, 0xbe, 0x3e, 0x3d, 0xfb, 0xe6, 0xe8,
-  0xbc, 0x97, 0x7c, 0x73, 0x41, 0x3f, 0xa3, 0xff, 0x9a, 0x1f, 0x26, 0xc7,
-  0xef, 0x0f, 0xce, 0x7a, 0xda, 0x1c, 0xfd, 0x83, 0x7e, 0x78, 0xf2, 0xd6,
-  0xfc, 0x90, 0xff, 0xa0, 0x7f, 0x9e, 0x9d, 0x9e, 0x3d, 0x93, 0x3f, 0xe8,
-  0x9f, 0xe7, 0x17, 0xef, 0xcd, 0x6f, 0xcf, 0x2f, 0x86, 0xe6, 0xbf, 0xc3,
-  0x43, 0xfa, 0x0f, 0xbe, 0x32, 0x7c, 0xff, 0x15, 0xfe, 0x33, 0xb4, 0xcd,
-  0x0d, 0xdf, 0xf3, 0xcf, 0xf1, 0xa5, 0x8b, 0xa3, 0x93, 0x0f, 0x47, 0x17,
-  0x49, 0x5a, 0x4c, 0x92, 0x0b, 0xf3, 0xfc, 0xd6, 0x20, 0xb9, 0xb8, 0xce,
-  0x92, 0x71, 0x39, 0x9b, 0xd1, 0x8f, 0xcc, 0x8c, 0x4c, 0xb2, 0x3a, 0xbf,
-  0x2a, 0xcc, 0x50, 0xcc, 0xc8, 0xef, 0xca, 0xea, 0x26, 0x49, 0xee, 0xf2,
-  0xe6, 0xba, 0x5c, 0x34, 0xda, 0xdc, 0xc2, 0xcc, 0x46, 0x92, 0x17, 0x4d,
-  0x56, 0xa5, 0x63, 0x9a, 0xeb, 0xc1, 0x5a, 0x6b, 0x56, 0xcb, 0x4b, 0x33,
-  0x87, 0xb5, 0x99, 0xb4, 0xd1, 0xa2, 0x9e, 0x96, 0xe9, 0x84, 0xa6, 0xca,
-  0xbc, 0x72, 0xb9, 0x30, 0x93, 0x5c, 0xe5, 0xe3, 0x9b, 0x3a, 0x99, 0xe6,
-  0x37, 0x19, 0x4d, 0xd4, 0xfd, 0x83, 0x4e, 0x5c, 0x8f, 0x1b, 0x4d, 0x17,
-  0x66, 0x4e, 0x8b, 0xbe, 0x36, 0xd7, 0xe4, 0xe3, 0x94, 0x3e, 0x80, 0x99,
-  0x4b, 0x16, 0x73, 0x6a, 0x8d, 0x67, 0x2c, 0x99, 0x97, 0xb5, 0x79, 0x69,
-  0x38, 0x3c, 0x31, 0x3d, 0x2f, 0x8a, 0x0c, 0xfd, 0xa8, 0x7b, 0xe6, 0x1f,
-  0xe5, 0x4d, 0x9e, 0x99, 0xbf, 0x5c, 0xe6, 0xd3, 0x2c, 0xe1, 0x15, 0xb5,
-  0xcd, 0xd1, 0xd2, 0x26, 0x55, 0x56, 0x2f, 0x66, 0x99, 0x99, 0xbd, 0xf7,
-  0x59, 0x93, 0x4e, 0xf3, 0xe2, 0xc6, 0xfc, 0x95, 0x06, 0x3e, 0x2b, 0xab,
-  0x6c, 0x90, 0x1c, 0xd4, 0xc9, 0x43, 0xb9, 0x30, 0x03, 0x9e, 0x4e, 0xcd,
-  0x9a, 0x67, 0xc9, 0x28, 0x9b, 0x96, 0x77, 0x3d, 0x5a, 0xe9, 0xa4, 0x58,
-  0xcc, 0x46, 0xa6, 0x81, 0xf2, 0xd2, 0x35, 0x97, 0x36, 0x0b, 0xd3, 0x1c,
-  0x3f, 0x3d, 0x4b, 0xcd, 0x98, 0xcc, 0xbb, 0x55, 0x72, 0x9d, 0x99, 0x31,
-  0xd7, 0xf3, 0xbc, 0xf8, 0x97, 0xf6, 0xbc, 0x98, 0xa9, 0x9d, 0x97, 0x77,
-  0x59, 0x65, 0x66, 0x76, 0xf4, 0x90, 0x98, 0x49, 0x18, 0xf1, 0x26, 0xbc,
-  0x34, 0x9b, 0x2c, 0x49, 0x4d, 0x13, 0x76, 0x03, 0xf6, 0xab, 0x6c, 0x9a,
-  0xd2, 0x66, 0xb2, 0xdf, 0x18, 0x98, 0x45, 0xcc, 0xec, 0x6e, 0x93, 0x57,
-  0x37, 0x9f, 0x6d, 0xe1, 0xe5, 0x89, 0x19, 0x49, 0x3e, 0xad, 0xcd, 0x32,
-  0xd0, 0xb1, 0x90, 0x67, 0x68, 0x51, 0xe9, 0x98, 0x98, 0xbd, 0xf9, 0x50,
-  0x34, 0xe9, 0x3d, 0x3e, 0x2f, 0x7b, 0xb3, 0x3f, 0xc9, 0xe6, 0x59, 0x31,
-  0xc9, 0x8a, 0x66, 0x90, 0xfc, 0xa5, 0x5c, 0x6c, 0x98, 0x6f, 0x5f, 0xe6,
-  0x66, 0x0e, 0x52, 0x69, 0xca, 0x7c, 0xd9, 0x6c, 0x82, 0x71, 0x95, 0xcf,
-  0xbd, 0xa5, 0x28, 0x0b, 0xb3, 0xe6, 0xc9, 0xf9, 0xbb, 0xc3, 0xe4, 0xd9,
-  0xab, 0xcf, 0x5f, 0xba, 0x35, 0x37, 0x0d, 0x24, 0xe3, 0xb4, 0x30, 0x23,
-  0xce, 0xc6, 0xf9, 0xe5, 0x43, 0x32, 0x5b, 0x4c, 0x9b, 0x7c, 0x6e, 0x66,
-  0xdf, 0x7c, 0xbc, 0xa6, 0x03, 0x34, 0x4f, 0xab, 0xa6, 0xa6, 0x4d, 0x80,
-  0x1f, 0x60, 0xec, 0x77, 0x55, 0xde, 0xd0, 0x41, 0xc2, 0xef, 0x4c, 0x0f,
-  0xb3, 0xa6, 0xd6, 0xe6, 0x68, 0xaf, 0x99, 0xef, 0x8c, 0xcc, 0xde, 0x32,
-  0x53, 0x9b, 0xd6, 0xe6, 0xa3, 0xfb, 0x6b, 0x4e, 0x86, 0x5c, 0x37, 0xcd,
-  0x7c, 0x7f, 0x7b, 0xbb, 0xce, 0x9b, 0x6c, 0xf0, 0x9f, 0xe6, 0x1c, 0xf6,
-  0x9a, 0xbb, 0xb2, 0xd7, 0x5c, 0x57, 0x59, 0xf6, 0x5f, 0x03, 0xb3, 0x87,
-  0xed, 0x93, 0xe6, 0xbb, 0x0f, 0xd2, 0xb1, 0xab, 0xac, 0x31, 0x5f, 0xf8,
-  0xdb, 0x22, 0x2b, 0xa8, 0x45, 0xd3, 0x8f, 0x74, 0x3a, 0xbf, 0x4e, 0xcd,
-  0x72, 0x66, 0x66, 0x37, 0xd2, 0xc9, 0x36, 0x1b, 0x86, 0x7a, 0xc5, 0x67,
-  0xfb, 0xc7, 0x9f, 0xc3, 0x8f, 0x5e, 0xe2, 0x9b, 0xe6, 0xbf, 0x83, 0xec,
-  0x3e, 0x9d, 0x99, 0xb1, 0xd1, 0xa7, 0xb6, 0x69, 0x8b, 0xfd, 0xb8, 0xdb,
-  0xdf, 0xdd, 0xd9, 0xf9, 0x79, 0xd0, 0xdc, 0x37, 0x4f, 0x7b, 0x7e, 0x67,
-  0xc7, 0xbd, 0x41, 0x8f, 0x6e, 0xd2, 0x78, 0x93, 0xa9, 0xd9, 0x32, 0xf4,
-  0xf1, 0xbf, 0x67, 0x55, 0x59, 0x6f, 0x3d, 0xad, 0xa5, 0xb4, 0xff, 0xf7,
-  0xf6, 0x77, 0x3f, 0x64, 0x35, 0xf6, 0x8c, 0x1b, 0x6b, 0x92, 0x56, 0x66,
-  0xdf, 0x96, 0x8d, 0x13, 0x4f, 0x3d, 0x73, 0x28, 0x1b, 0x3b, 0x33, 0xe6,
-  0xcc, 0x99, 0xa7, 0x8d, 0x60, 0x4b, 0xa7, 0x24, 0xd3, 0xea, 0xa4, 0xc8,
-  0xee, 0xed, 0x29, 0x37, 0xa7, 0x3f, 0x4b, 0xc7, 0xd7, 0x49, 0x69, 0x36,
-  0x7f, 0x15, 0x59, 0x02, 0xbf, 0x43, 0x69, 0x35, 0xbe, 0xce, 0x6f, 0xcd,
-  0x6c, 0xbc, 0x7a, 0xf5, 0xb2, 0x6f, 0xfe, 0xf3, 0xea, 0xe7, 0xed, 0xdb,
-  0x72, 0x6a, 0x26, 0xe7, 0xf9, 0xcf, 0xdb, 0xb4, 0xc4, 0xff, 0x99, 0xf6,
-  0x46, 0xbd, 0xf1, 0x7f, 0x0d, 0xae, 0x9b, 0xd9, 0x74, 0xe9, 0xc6, 0x49,
-  0x0b, 0xf3, 0x7f, 0xb3, 0x72, 0x51, 0x34, 0x76, 0xb3, 0x98, 0x3d, 0xd7,
-  0x78, 0xc2, 0xc9, 0x1c, 0x57, 0x73, 0x46, 0x69, 0x6b, 0xd3, 0x1e, 0xa2,
-  0x53, 0x67, 0x0e, 0xa8, 0x3b, 0x8e, 0xcd, 0xf8, 0xda, 0x8c, 0xdf, 0x6c,
-  0x9e, 0x54, 0xe6, 0xa0, 0xc9, 0x53, 0x3a, 0x98, 0x46, 0x3e, 0x90, 0xbc,
-  0x42, 0x53, 0xfc, 0xb1, 0xdc, 0x3c, 0x57, 0x56, 0x93, 0xac, 0x6a, 0x6f,
-  0x63, 0x74, 0xc7, 0xf5, 0x27, 0x31, 0xf3, 0x39, 0x37, 0x1f, 0x5f, 0x90,
-  0xa8, 0xc3, 0x49, 0xa3, 0x16, 0xcc, 0x19, 0xbd, 0x32, 0x53, 0x65, 0xa6,
-  0x87, 0x36, 0x16, 0xcd, 0xde, 0x43, 0xf2, 0xc1, 0xac, 0x21, 0xcb, 0x07,
-  0x6f, 0xff, 0x4d, 0xb3, 0xa6, 0x79, 0x74, 0xe6, 0xdc, 0x26, 0xda, 0xdf,
-  0x0d, 0xf6, 0xd1, 0xb2, 0xe7, 0xcd, 0xd2, 0xef, 0xef, 0xb5, 0x1f, 0xfe,
-  0xde, 0xc8, 0x4d, 0xb7, 0x83, 0xcd, 0xd7, 0xff, 0xf3, 0xbf, 0xbc, 0x8d,
-  0x70, 0x47, 0xbf, 0xcd, 0x8b, 0xdb, 0xf2, 0xc6, 0x0c, 0x1c, 0x17, 0x5b,
-  0xda, 0x9a, 0xd4, 0x84, 0x44, 0xc3, 0x6c, 0xde, 0xd8, 0x1b, 0x83, 0x76,
-  0x88, 0xf9, 0xd1, 0x28, 0x1d, 0x4d, 0x1f, 0x92, 0xeb, 0xf4, 0x36, 0xa3,
-  0xf1, 0xce, 0xcd, 0xd6, 0xa1, 0x19, 0x30, 0x92, 0x7c, 0x0a, 0xd1, 0x22,
-  0x67, 0x75, 0x52, 0x2e, 0x46, 0xe6, 0xbc, 0xff, 0x6d, 0x51, 0x36, 0x3c,
-  0x31, 0xe9, 0x6d, 0x99, 0x4f, 0x5a, 0xd7, 0xe3, 0x75, 0x46, 0x32, 0x86,
-  0x3e, 0x8c, 0x7b, 0xc3, 0xc8, 0x38, 0xea, 0x29, 0xf6, 0x7e, 0xde, 0xd0,
-  0x0d, 0x64, 0xa4, 0x53, 0x3a, 0xad, 0xcb, 0x24, 0xb9, 0x2a, 0x69, 0xe3,
-  0x42, 0x26, 0x62, 0xe7, 0x99, 0x45, 0xb9, 0x4e, 0xe9, 0xa2, 0x31, 0x77,
-  0x8a, 0xdd, 0x9a, 0x55, 0x06, 0xf1, 0x88, 0x95, 0x4a, 0xa7, 0x3d, 0xbe,
-  0x50, 0xe8, 0x1d, 0x99, 0xaa, 0x64, 0xe3, 0x5f, 0x37, 0x7a, 0xc9, 0xc6,
-  0xbf, 0x6f, 0x40, 0xb4, 0x6f, 0xfc, 0xdb, 0x86, 0x5b, 0x67, 0xa3, 0x21,
-  0xdd, 0xe6, 0x13, 0xba, 0x1b, 0xcc, 0x48, 0x8e, 0xcf, 0x6e, 0x5f, 0x26,
-  0x7f, 0xa7, 0xeb, 0xdc, 0x88, 0xbf, 0xec, 0x5e, 0x37, 0x89, 0x8e, 0xcd,
-  0xbc, 0x9d, 0x18, 0x39, 0x98, 0xce, 0xe9, 0x5e, 0xcf, 0xaa, 0xb1, 0xd9,
-  0x51, 0xe9, 0x95, 0xd9, 0x43, 0xe6, 0x7a, 0xd4, 0xe6, 0xa8, 0x7d, 0x7a,
-  0x85, 0x87, 0x65, 0x64, 0x56, 0x52, 0xa4, 0x33, 0xb3, 0x49, 0x4f, 0xa8,
-  0x47, 0x79, 0x11, 0x2e, 0xe6, 0x8f, 0x97, 0xd9, 0xe7, 0x3b, 0xfb, 0xfb,
-  0xcf, 0xfe, 0xb8, 0xf7, 0x22, 0x6b, 0xae, 0x77, 0x7e, 0xde, 0xb6, 0x8f,
-  0x1c, 0x5f, 0x62, 0xda, 0x75, 0xfb, 0x69, 0x27, 0xcc, 0xc5, 0x6b, 0x05,
-  0xb7, 0x79, 0xdf, 0xfc, 0x3d, 0xbb, 0xcc, 0xef, 0x7b, 0xaa, 0xc2, 0xf0,
-  0x31, 0x48, 0xcd, 0x56, 0x33, 0xeb, 0x47, 0xa7, 0x56, 0x9b, 0xbb, 0x5a,
-  0x64, 0xb5, 0x99, 0xc9, 0xbb, 0xeb, 0xb4, 0x49, 0x6c, 0x03, 0xbc, 0xb2,
-  0xb3, 0xfc, 0xea, 0xba, 0x49, 0xee, 0x52, 0x92, 0xff, 0xc7, 0x0d, 0x37,
-  0x41, 0x17, 0xaf, 0x91, 0xfa, 0x97, 0xa9, 0x11, 0xdf, 0xb4, 0x86, 0xb8,
-  0x65, 0x47, 0xee, 0xd2, 0x6f, 0xcc, 0x36, 0xe7, 0x05, 0x71, 0x1a, 0xce,
-  0x28, 0xad, 0xe9, 0x20, 0x15, 0xe6, 0xbc, 0x36, 0xe6, 0xda, 0x5e, 0xd0,
-  0xbf, 0xae, 0xcd, 0xc5, 0x8c, 0x39, 0x90, 0x8e, 0xe2, 0xee, 0x7a, 0x47,
-  0xcb, 0x49, 0x6b, 0x63, 0xef, 0x13, 0xb3, 0x48, 0x3d, 0x59, 0x66, 0xfb,
-  0x46, 0x6d, 0x0e, 0x9c, 0x11, 0x16, 0x76, 0x67, 0xac, 0x93, 0xdc, 0x5b,
-  0xe7, 0x71, 0xa2, 0x8f, 0x69, 0x4d, 0x77, 0x37, 0xdf, 0xd0, 0xa6, 0xf3,
-  0xde, 0x60, 0xcd, 0xa4, 0xa5, 0x37, 0xa4, 0x25, 0x74, 0x74, 0x11, 0xbc,
-  0x36, 0x29, 0xcd, 0x26, 0x33, 0xbd, 0x35, 0xf2, 0x91, 0x46, 0x46, 0x52,
-  0x0f, 0xb3, 0x82, 0x4d, 0x6e, 0xda, 0xa4, 0x1f, 0xe6, 0x0d, 0x89, 0x7d,
-  0x28, 0x96, 0xa6, 0xbf, 0x66, 0x52, 0xa0, 0x1b, 0x1a, 0xd9, 0xe9, 0x8d,
-  0x1f, 0x37, 0x96, 0x79, 0x36, 0xb9, 0x35, 0x8a, 0x83, 0xd1, 0x11, 0x33,
-  0xfb, 0x16, 0xae, 0xd8, 0x31, 0xa9, 0x2b, 0x53, 0x73, 0x5e, 0xc6, 0x65,
-  0x55, 0x91, 0x12, 0x4e, 0x2b, 0x38, 0x62, 0xb9, 0x36, 0xcb, 0xcc, 0xcd,
-  0xee, 0x4f, 0x67, 0x4e, 0x77, 0x8c, 0x91, 0x2f, 0x46, 0x55, 0x80, 0x04,
-  0x31, 0x57, 0x3a, 0xc4, 0x30, 0x06, 0x8e, 0xde, 0x51, 0xdb, 0xe3, 0x71,
-  0x36, 0x6f, 0xea, 0xd8, 0x98, 0x74, 0xc1, 0x4d, 0x77, 0xaa, 0x8c, 0x66,
-  0xde, 0xd7, 0x83, 0x30, 0xaf, 0xf6, 0x1e, 0x86, 0x2a, 0xa4, 0xaa, 0x85,
-  0x51, 0x8d, 0x6a, 0x3b, 0x6b, 0x0d, 0xf6, 0x86, 0x11, 0x63, 0x98, 0xf3,
-  0x19, 0x75, 0x94, 0x1e, 0xae, 0xf9, 0xa4, 0x42, 0x5c, 0xd2, 0x42, 0xb2,
-  0xf2, 0xcb, 0xdf, 0xa5, 0xdb, 0xc4, 0xcc, 0xa7, 0x6d, 0xdc, 0x7c, 0xd5,
-  0xae, 0x29, 0x7d, 0xbe, 0x36, 0x66, 0x83, 0xb9, 0x5c, 0x27, 0xf5, 0xb5,
-  0xd1, 0x87, 0x6a, 0x39, 0xd9, 0xf9, 0xcc, 0xec, 0x99, 0x5b, 0x5a, 0xdf,
-  0x79, 0x96, 0x4d, 0x06, 0xc9, 0xe9, 0x25, 0x49, 0xd5, 0xca, 0x74, 0xba,
-  0xc1, 0xaf, 0x49, 0xd0, 0x9b, 0x79, 0x9b, 0x40, 0xaf, 0xb6, 0x47, 0x8b,
-  0xbb, 0xe2, 0x49, 0x6c, 0xda, 0x69, 0x66, 0xb2, 0x13, 0x92, 0x72, 0xd3,
-  0xf6, 0xad, 0x80, 0x73, 0x68, 0xa4, 0x37, 0x75, 0x6f, 0x94, 0x25, 0xd8,
-  0x89, 0xa3, 0xac, 0xb9, 0xcb, 0x32, 0xdb, 0x5c, 0x9d, 0x99, 0x9b, 0x88,
-  0x16, 0x8d, 0x95, 0x31, 0x08, 0x43, 0x9a, 0xda, 0xb3, 0xf3, 0xd3, 0xaf,
-  0xcf, 0x8f, 0x86, 0xc3, 0xe4, 0xfd, 0xd1, 0xc5, 0xd1, 0x79, 0x6b, 0xa6,
-  0x8b, 0xb2, 0x9a, 0x61, 0x45, 0x27, 0x79, 0x3d, 0x9f, 0xa6, 0x0f, 0xb4,
-  0xd4, 0x66, 0x24, 0x57, 0x15, 0x9d, 0xac, 0x59, 0x46, 0xb7, 0xc2, 0x64,
-  0x01, 0x49, 0x96, 0x94, 0x46, 0x3e, 0xa4, 0xa2, 0x84, 0x92, 0x30, 0x81,
-  0xe6, 0x5a, 0x5c, 0xb9, 0x99, 0x36, 0x12, 0x47, 0x2e, 0x37, 0xba, 0xdd,
-  0xec, 0x7a, 0x90, 0x36, 0x08, 0x7b, 0xa3, 0xe7, 0x7e, 0xc6, 0xd3, 0x54,
-  0x63, 0x4c, 0x66, 0xcf, 0xe6, 0x33, 0x08, 0x3b, 0xf3, 0xa7, 0x53, 0x00,
-  0xb3, 0x4b, 0xa3, 0xfd, 0x9a, 0x0b, 0x8f, 0x95, 0xf7, 0x6e, 0x9f, 0xb4,
-  0xb7, 0x56, 0x65, 0x35, 0xdb, 0x90, 0x44, 0x33, 0x35, 0xc8, 0x5d, 0xe1,
-  0x2f, 0x58, 0x21, 0x66, 0xd4, 0x04, 0x92, 0x7d, 0xf2, 0xd8, 0x9c, 0xba,
-  0x90, 0x99, 0x95, 0x9d, 0x70, 0xf3, 0xf5, 0xe2, 0x12, 0x07, 0x39, 0xd9,
-  0x34, 0xca, 0xf2, 0x7b, 0x63, 0xc0, 0x18, 0x23, 0xa2, 0x97, 0x9c, 0x6d,
-  0xe1, 0xbd, 0xdd, 0x9d, 0xbd, 0xe7, 0x2c, 0x08, 0x06, 0xda, 0xdc, 0x3b,
-  0x4f, 0x10, 0xef, 0xde, 0xd0, 0xf2, 0xf2, 0x43, 0xd4, 0xf8, 0x20, 0xd9,
-  0x7d, 0xcf, 0x3f, 0x79, 0xfe, 0xf9, 0x8b, 0xcf, 0x5e, 0xca, 0x0f, 0xdb,
-  0x1b, 0xdc, 0xf6, 0x1f, 0xbb, 0x03, 0xc6, 0x18, 0x59, 0x67, 0xa6, 0x27,
-  0x66, 0x74, 0xb3, 0xbc, 0x30, 0xc7, 0xc4, 0x1c, 0x2b, 0x91, 0x55, 0xb4,
-  0x9f, 0x4d, 0xe7, 0x2f, 0x59, 0xb2, 0xc9, 0xba, 0xb6, 0xad, 0x3c, 0xf3,
-  0xb2, 0xd9, 0xb2, 0x46, 0x96, 0xdb, 0x45, 0xc2, 0x4c, 0x98, 0x03, 0x46,
-  0xb7, 0xce, 0x88, 0x04, 0x2c, 0x99, 0x3a, 0x46, 0x27, 0xcd, 0xa2, 0x5f,
-  0xb3, 0xb7, 0xa2, 0x79, 0xc3, 0xf4, 0xcd, 0xdc, 0x89, 0x74, 0xcd, 0x85,
-  0xf3, 0x6e, 0x44, 0x01, 0x24, 0xe4, 0x5d, 0x5e, 0x43, 0x34, 0xdc, 0x95,
-  0x8b, 0xa9, 0x31, 0x2c, 0xe8, 0x81, 0xc5, 0x1c, 0x2f, 0x98, 0x4f, 0xcd,
-  0x9d, 0x0c, 0x98, 0xe5, 0xf7, 0xb4, 0x77, 0xba, 0xad, 0x98, 0xae, 0x99,
-  0x7f, 0xce, 0xcd, 0x56, 0xe2, 0xee, 0x0c, 0xba, 0x37, 0x04, 0x64, 0x5f,
-  0xb0, 0x13, 0xe9, 0xcc, 0x43, 0x68, 0x9f, 0x9d, 0x0e, 0x2f, 0x48, 0x03,
-  0x38, 0xfb, 0x78, 0x61, 0x1a, 0x32, 0x2a, 0x40, 0xdd, 0x98, 0x4d, 0x49,
-  0x2f, 0x16, 0x19, 0xac, 0x3a, 0x6d, 0xce, 0xec, 0xbd, 0x1c, 0x82, 0x0a,
-  0x6a, 0x8d, 0x7e, 0x92, 0xfb, 0xc8, 0x66, 0x2f, 0x1d, 0x41, 0x35, 0x7a,
-  0xf9, 0x0e, 0xb7, 0xef, 0x24, 0x9b, 0x5f, 0x6c, 0x99, 0x3d, 0xdb, 0x2f,
-  0xed, 0xec, 0xf4, 0xfb, 0xf2, 0xaa, 0xf9, 0x76, 0x9d, 0xcf, 0xf2, 0x69,
-  0xea, 0xa9, 0x57, 0x22, 0x51, 0xe9, 0x7c, 0x5a, 0xb9, 0x32, 0x36, 0xbb,
-  0x06, 0xdd, 0x76, 0xd6, 0x1d, 0xcd, 0x21, 0xa4, 0x92, 0x5b, 0xaa, 0x09,
-  0x29, 0x04, 0x50, 0x62, 0xe7, 0xb9, 0x9d, 0x3a, 0x5a, 0x33, 0x12, 0x57,
-  0xad, 0x89, 0xea, 0xae, 0x5b, 0x30, 0x71, 0x74, 0x23, 0xc1, 0x7d, 0x60,
-  0xa7, 0x2e, 0x59, 0x1f, 0xa5, 0xd5, 0x7a, 0x62, 0x65, 0x31, 0x9f, 0x4d,
-  0x3a, 0x21, 0x55, 0x76, 0xb5, 0x30, 0x23, 0x48, 0x78, 0x76, 0x69, 0xa4,
-  0x7f, 0xf0, 0x46, 0xaa, 0x0d, 0xf4, 0x47, 0xf4, 0x48, 0x5e, 0xb3, 0xe5,
-  0x77, 0x69, 0x4c, 0x09, 0x3a, 0x34, 0xaa, 0xd9, 0x42, 0xa3, 0x91, 0x1d,
-  0x13, 0xd9, 0x30, 0x76, 0x97, 0x96, 0x74, 0x54, 0x9a, 0xcc, 0x08, 0x1a,
-  0x88, 0x7f, 0x7a, 0xb2, 0x6f, 0x96, 0xac, 0xdf, 0xaf, 0xcd, 0xfc, 0x93,
-  0x3a, 0x3c, 0x17, 0x33, 0xfb, 0x14, 0x3e, 0x0c, 0xeb, 0xf0, 0x38, 0x65,
-  0x57, 0x07, 0x5f, 0x9b, 0xfc, 0x2e, 0x44, 0xa8, 0x51, 0x54, 0xef, 0xcc,
-  0x87, 0x53, 0xb3, 0x64, 0xe6, 0xc0, 0xbd, 0xa7, 0x89, 0x62, 0x77, 0x45,
-  0x22, 0x4d, 0xd5, 0x09, 0x76, 0x46, 0x4e, 0xe7, 0x3e, 0x75, 0xba, 0xcc,
-  0x64, 0x92, 0xd3, 0x6f, 0xcd, 0xf9, 0x32, 0x37, 0xdc, 0x22, 0x83, 0x39,
-  0x20, 0x93, 0x3a, 0x73, 0x93, 0x09, 0xcb, 0xb2, 0xbe, 0x2e, 0xc9, 0x72,
-  0x5b, 0x67, 0x59, 0xdc, 0xa7, 0x6f, 0xad, 0xe3, 0x3e, 0x9f, 0x25, 0xfa,
-  0x2d, 0xf9, 0x94, 0x19, 0xc7, 0xc4, 0xd7, 0xcd, 0x7a, 0xe6, 0xa2, 0x79,
-  0xf0, 0xf4, 0x76, 0xc8, 0x6a, 0xee, 0x7b, 0x65, 0x15, 0x1e, 0x73, 0xa5,
-  0xce, 0x49, 0x99, 0x12, 0x19, 0x8e, 0xcb, 0x10, 0x47, 0xb6, 0xe6, 0xae,
-  0xf5, 0xcc, 0xdc, 0xd2, 0x93, 0x57, 0xd7, 0xfa, 0xa8, 0x77, 0xb1, 0xa6,
-  0x66, 0x70, 0x74, 0x39, 0x90, 0x89, 0x3b, 0x51, 0xb9, 0x5f, 0x56, 0x2c,
-  0xcc, 0xa6, 0xa5, 0xd9, 0xcb, 0xeb, 0xac, 0xb2, 0x4a, 0xb7, 0xa9, 0xd7,
-  0xd4, 0x4b, 0x9a, 0x71, 0x76, 0xfd, 0x94, 0x76, 0x6d, 0x6c, 0xa7, 0x65,
-  0xbe, 0xea, 0x47, 0xbb, 0xe6, 0x26, 0x6a, 0x88, 0x39, 0x32, 0x57, 0x67,
-  0x4d, 0xfb, 0x58, 0x67, 0x1e, 0xdb, 0xdb, 0x5c, 0x75, 0x1b, 0x0d, 0x9f,
-  0x47, 0x98, 0x3d, 0x9d, 0x99, 0xaf, 0xb1, 0x7d, 0xe4, 0x22, 0xb3, 0x23,
-  0x33, 0x23, 0x9a, 0xe4, 0x29, 0xf6, 0x09, 0x2f, 0x0d, 0x94, 0x11, 0x67,
-  0xa4, 0x45, 0xf4, 0xe0, 0x87, 0xae, 0x8d, 0x35, 0x9d, 0xfa, 0x57, 0x92,
-  0xf6, 0xa9, 0x7f, 0x6a, 0xc6, 0x7e, 0x82, 0x71, 0xf4, 0x6f, 0x13, 0x3a,
-  0x7e, 0xc6, 0x6c, 0xa0, 0xb3, 0xd8, 0x3f, 0x3d, 0xb9, 0xf5, 0x8e, 0x11,
-  0x19, 0xd3, 0x05, 0xe9, 0x29, 0x3d, 0x38, 0x2c, 0x46, 0x65, 0x69, 0x2c,
-  0x57, 0x37, 0x34, 0xba, 0x0f, 0xb2, 0x82, 0x76, 0xbb, 0xac, 0xa8, 0x11,
-  0x09, 0x73, 0x2b, 0x6f, 0x1f, 0x8c, 0xb9, 0x94, 0x5e, 0xa5, 0xb9, 0xdd,
-  0x6f, 0x72, 0x32, 0x26, 0x89, 0x3e, 0x5c, 0x94, 0xf2, 0x3c, 0x2d, 0x15,
-  0xa9, 0x40, 0x22, 0xb7, 0x16, 0x35, 0x1f, 0x1f, 0x33, 0x2a, 0x23, 0x79,
-  0x20, 0x3b, 0xa4, 0x5d, 0x52, 0x1b, 0xb5, 0xb9, 0x11, 0x14, 0x65, 0xd2,
-  0x39, 0x21, 0x7c, 0xa1, 0x41, 0x9a, 0x16, 0xd7, 0x07, 0xc9, 0x37, 0xe5,
-  0x5d, 0x06, 0xf7, 0x1d, 0xf4, 0xfb, 0x9c, 0x1c, 0x50, 0x46, 0x15, 0xbc,
-  0xcb, 0x92, 0x99, 0x51, 0x3d, 0xcd, 0x6c, 0x42, 0xfb, 0xc0, 0xcf, 0x4c,
-  0x3f, 0x9d, 0xcd, 0x52, 0xde, 0xf1, 0x2c, 0xd9, 0x51, 0xd8, 0xa5, 0xbc,
-  0xe4, 0x23, 0x91, 0x6c, 0x42, 0xbd, 0x19, 0xd3, 0x6c, 0xcd, 0x1b, 0x37,
-  0x0a, 0x3b, 0x21, 0x77, 0x69, 0xed, 0x1d, 0x2e, 0x36, 0x4e, 0x93, 0xcf,
-  0x06, 0xbb, 0xaf, 0x06, 0x3b, 0x03, 0x32, 0x45, 0xb2, 0xdb, 0xbc, 0x5c,
-  0xd4, 0xb4, 0x9e, 0xd4, 0x13, 0xef, 0x74, 0x92, 0x9b, 0x88, 0x96, 0xf7,
-  0xea, 0x6a, 0xca, 0x8a, 0xcf, 0x76, 0x79, 0x79, 0x99, 0x78, 0xca, 0x51,
-  0x95, 0xcd, 0xd9, 0x06, 0xa2, 0xb9, 0x91, 0x03, 0xc7, 0x42, 0xd5, 0xd7,
-  0x8a, 0x64, 0x36, 0x9d, 0x47, 0xa1, 0xdf, 0x4f, 0x47, 0x75, 0x43, 0xe6,
-  0x54, 0x7f, 0x51, 0xe4, 0xf7, 0xfd, 0xba, 0x1c, 0xdf, 0x98, 0x65, 0x79,
-  0x3d, 0x4f, 0x9b, 0xeb, 0x2f, 0x3a, 0x9e, 0xda, 0x4d, 0xba, 0x4d, 0xb6,
-  0x92, 0xe4, 0x90, 0x15, 0x4b, 0x9a, 0x8b, 0x8a, 0x4f, 0x9c, 0x59, 0x4f,
-  0x69, 0x25, 0xf9, 0x68, 0x5a, 0x31, 0xbb, 0x79, 0x66, 0x96, 0x35, 0xe1,
-  0xc6, 0x7a, 0x2a, 0x4c, 0x3b, 0xcd, 0xc1, 0x0b, 0x48, 0x17, 0x09, 0x9c,
-  0x69, 0xe6, 0xf0, 0x94, 0xd5, 0xcd, 0x80, 0xdc, 0x16, 0xc6, 0x6a, 0xdc,
-  0xa7, 0x0d, 0xdd, 0x18, 0x31, 0xd6, 0xf0, 0xbc, 0xd7, 0x22, 0x84, 0xa9,
-  0x5b, 0x2c, 0x93, 0x9d, 0x94, 0xd2, 0xf9, 0xd4, 0x1e, 0xc8, 0x67, 0x13,
-  0xb5, 0x37, 0x64, 0xeb, 0x6d, 0x7c, 0x69, 0x2c, 0xc0, 0x6b, 0x5e, 0x78,
-  0x34, 0xc6, 0x63, 0x34, 0x7b, 0xf4, 0xca, 0xd8, 0x10, 0x45, 0xd3, 0x69,
-  0xce, 0x7c, 0x95, 0x2e, 0x6b, 0xba, 0x67, 0xd8, 0xdc, 0xc5, 0x36, 0x11,
-  0xb7, 0x8c, 0xb5, 0x40, 0x07, 0x6b, 0x9d, 0xd7, 0x0e, 0x74, 0x55, 0x3f,
-  0x1b, 0xbc, 0x78, 0x66, 0x16, 0xd5, 0x9f, 0xe8, 0xe2, 0x81, 0xdc, 0x99,
-  0xf1, 0x49, 0xbd, 0x30, 0x77, 0x69, 0xcd, 0xea, 0x89, 0x39, 0xc3, 0x97,
-  0xf9, 0xd5, 0xa2, 0xca, 0xf8, 0x52, 0x83, 0x07, 0x54, 0x1d, 0x9f, 0x74,
-  0x4f, 0x5c, 0x97, 0xf0, 0x17, 0x1a, 0xf9, 0x92, 0x4d, 0x2f, 0x7b, 0xdd,
-  0x59, 0x20, 0x8d, 0x8e, 0xb6, 0x00, 0x86, 0x88, 0x4d, 0x64, 0x34, 0x37,
-  0x34, 0x56, 0x64, 0x72, 0xaf, 0xcf, 0xcc, 0x04, 0x27, 0xe4, 0x30, 0x4b,
-  0xc6, 0xd3, 0x34, 0x9f, 0xc1, 0xdc, 0x11, 0x87, 0xd0, 0xa0, 0xd3, 0xdc,
-  0x85, 0xa8, 0xe3, 0xd0, 0xc4, 0x47, 0x64, 0x0d, 0x54, 0x35, 0x09, 0x2b,
-  0x9a, 0x84, 0x54, 0x95, 0x09, 0xd6, 0xb5, 0xaf, 0xb3, 0xf1, 0x8d, 0xae,
-  0xa6, 0xde, 0xc2, 0xfd, 0x4e, 0x73, 0xe4, 0x09, 0x85, 0xc9, 0x61, 0x9e,
-  0x5a, 0x98, 0x35, 0x9d, 0x97, 0x75, 0x9d, 0x93, 0x47, 0x81, 0x34, 0xe4,
-  0xc5, 0x18, 0x8a, 0x33, 0x99, 0xd8, 0xf7, 0x66, 0x25, 0x75, 0x4b, 0x24,
-  0x66, 0x8f, 0x15, 0x93, 0x7e, 0x53, 0xe5, 0xf3, 0x65, 0xbd, 0xe3, 0x2b,
-  0xa3, 0x7d, 0x67, 0xd7, 0x62, 0xc4, 0xc0, 0x3e, 0x60, 0x8b, 0x61, 0x9c,
-  0x74, 0x66, 0xb3, 0xd3, 0x1c, 0xcf, 0x6d, 0x8f, 0x4c, 0xe4, 0xdc, 0x88,
-  0x50, 0xd6, 0x1f, 0xe1, 0x01, 0x32, 0xda, 0xa2, 0x9c, 0x65, 0xa3, 0xd8,
-  0xe6, 0x63, 0xdc, 0x0b, 0xf9, 0x55, 0x46, 0x1e, 0x67, 0x73, 0xbc, 0x9b,
-  0xa9, 0xb9, 0x2d, 0x3c, 0x41, 0x61, 0x57, 0xbc, 0xc8, 0xae, 0xca, 0x86,
-  0x04, 0x74, 0xb0, 0x4d, 0x3e, 0x62, 0xe3, 0xdb, 0x3d, 0xa1, 0x9a, 0x90,
-  0x7f, 0x4d, 0xe5, 0xac, 0xa2, 0x98, 0x4f, 0xb3, 0x26, 0x24, 0x46, 0x58,
-  0xdd, 0x98, 0x1d, 0xd8, 0x5d, 0x75, 0xd3, 0xda, 0x38, 0x83, 0x3a, 0x8a,
-  0xbb, 0x54, 0xaf, 0x72, 0xd5, 0x81, 0x46, 0x64, 0xb2, 0x91, 0x79, 0x7c,
-  0x97, 0x8f, 0x33, 0xf5, 0x50, 0x88, 0x27, 0x6d, 0x9a, 0x87, 0x7b, 0x7f,
-  0xb6, 0xa8, 0x61, 0x35, 0xb1, 0x9a, 0x42, 0x06, 0xe5, 0x5d, 0x4e, 0x6a,
-  0xcc, 0xf1, 0xa5, 0x9c, 0x55, 0xba, 0x45, 0xf9, 0x7c, 0xa4, 0x55, 0x0e,
-  0xeb, 0xd9, 0x34, 0x27, 0xfd, 0xf4, 0x8c, 0x1c, 0xb5, 0xdb, 0x5c, 0xbf,
-  0xf1, 0xbe, 0x68, 0x76, 0x4e, 0xa3, 0x83, 0x21, 0x79, 0x99, 0xe6, 0xd3,
-  0xc8, 0x3c, 0x41, 0x41, 0x35, 0x16, 0xe9, 0x75, 0x56, 0xc9, 0x1a, 0x2c,
-  0x68, 0xd2, 0x29, 0x3a, 0x10, 0x3c, 0x3d, 0xcc, 0x32, 0x56, 0xb1, 0xa0,
-  0x8f, 0xdd, 0x3f, 0xd8, 0xe9, 0xc5, 0x3d, 0xc6, 0x6b, 0x27, 0x7f, 0xe7,
-  0xe5, 0xf3, 0x8e, 0x67, 0x4a, 0xad, 0xa6, 0x73, 0x72, 0x83, 0x77, 0x4f,
-  0x28, 0x69, 0xa3, 0x14, 0x49, 0xd9, 0x52, 0xa7, 0x9a, 0x38, 0x15, 0x0b,
-  0x1b, 0x81, 0x80, 0x70, 0x20, 0x87, 0xbf, 0x1c, 0x61, 0x6e, 0x47, 0x34,
-  0xa5, 0x4e, 0x73, 0x46, 0x35, 0x23, 0x3f, 0x21, 0x8c, 0xf0, 0xd6, 0x8e,
-  0x35, 0x06, 0x71, 0x65, 0xfd, 0xe0, 0xe4, 0x04, 0xa3, 0xf9, 0x56, 0xdd,
-  0x13, 0x67, 0x16, 0x2f, 0x75, 0x9a, 0x23, 0x6d, 0x98, 0x54, 0x07, 0x73,
-  0x68, 0x72, 0xda, 0x8f, 0xd8, 0x04, 0xea, 0x0a, 0x35, 0xdb, 0x97, 0x3d,
-  0x63, 0x2a, 0x57, 0x59, 0xd9, 0x40, 0x77, 0x2f, 0xa7, 0xe9, 0x95, 0xd9,
-  0x77, 0x9d, 0xe6, 0xf2, 0x2b, 0x63, 0xe3, 0x72, 0x40, 0xa2, 0x2e, 0xcd,
-  0xed, 0x41, 0xe3, 0x16, 0x7b, 0xdf, 0x98, 0x7b, 0x66, 0x9b, 0x4d, 0x17,
-  0x90, 0x80, 0xa7, 0x66, 0x80, 0xc3, 0xe1, 0x37, 0x5b, 0xbe, 0x80, 0xc3,
-  0xfc, 0x3e, 0x45, 0xbc, 0x41, 0x3e, 0xc1, 0x34, 0x49, 0xbe, 0xc2, 0x9a,
-  0x74, 0xa5, 0x1c, 0xaf, 0x74, 0x64, 0xf2, 0x74, 0x22, 0xc8, 0x45, 0x34,
-  0x10, 0x01, 0x00, 0x09, 0x80, 0x69, 0x52, 0x6f, 0x15, 0xef, 0x70, 0xf2,
-  0x22, 0xf0, 0x35, 0x6d, 0xfe, 0xb6, 0xa8, 0x17, 0x64, 0xb8, 0x77, 0x9a,
-  0x9b, 0x1b, 0x41, 0xd6, 0x18, 0xe3, 0xcd, 0x48, 0xa4, 0x45, 0x41, 0x7f,
-  0x5a, 0xed, 0x22, 0x87, 0x9e, 0x4b, 0x4b, 0x52, 0x91, 0x73, 0x90, 0x2c,
-  0x04, 0x7b, 0x37, 0x1b, 0xd1, 0x22, 0x2d, 0x77, 0x97, 0x16, 0xee, 0x13,
-  0x0a, 0x5e, 0x40, 0xec, 0x4c, 0x72, 0x0a, 0x7c, 0xd1, 0xc1, 0x5b, 0x22,
-  0xc5, 0x37, 0xeb, 0x85, 0x91, 0x33, 0xa4, 0x55, 0xb1, 0x10, 0x09, 0x04,
-  0x88, 0x0a, 0x19, 0xa3, 0xc0, 0x79, 0xd2, 0x64, 0xeb, 0xb7, 0x3e, 0x26,
-  0x58, 0x38, 0x7f, 0x25, 0xc7, 0x46, 0x9f, 0x35, 0x9a, 0xea, 0xeb, 0xc3,
-  0x83, 0x84, 0xfe, 0x42, 0xb2, 0xd3, 0x7c, 0x37, 0xd0, 0x07, 0x2e, 0x4e,
-  0x86, 0xb1, 0xa5, 0x6d, 0xbb, 0xd5, 0xbd, 0x06, 0xc4, 0xf3, 0x54, 0x92,
-  0xde, 0x64, 0x94, 0xcf, 0x60, 0xf6, 0xe8, 0x82, 0xcf, 0x4c, 0x87, 0xc5,
-  0xa4, 0xe0, 0x90, 0x1d, 0x09, 0x34, 0xa3, 0x50, 0x35, 0xa4, 0x50, 0x58,
-  0x2f, 0x53, 0xbb, 0x63, 0x70, 0x2b, 0x75, 0xb7, 0x8a, 0xf7, 0xfb, 0xcd,
-  0x7a, 0xcb, 0xca, 0x34, 0xd3, 0xca, 0xd9, 0xd1, 0x7b, 0xa8, 0xf8, 0xa9,
-  0xd9, 0x42, 0x1f, 0xd4, 0xa3, 0xa3, 0x11, 0xb9, 0xd1, 0x22, 0x9f, 0xb6,
-  0xdc, 0xa6, 0xce, 0x2a, 0x41, 0x38, 0x8c, 0x77, 0x18, 0xba, 0xc6, 0x01,
-  0x80, 0x1c, 0x1e, 0xb4, 0xee, 0x7e, 0x6b, 0x1e, 0xe6, 0xe2, 0xfc, 0x5b,
-  0xd4, 0x2d, 0x1b, 0x5b, 0xef, 0xe9, 0x69, 0x03, 0x35, 0x84, 0x54, 0x7f,
-  0xaf, 0xcd, 0x60, 0xad, 0xd0, 0x2d, 0xba, 0x16, 0xae, 0x8a, 0xfc, 0xef,
-  0xe2, 0x65, 0xc8, 0x8a, 0xdb, 0xbc, 0x2a, 0x0b, 0x52, 0x5a, 0x8c, 0x75,
-  0x50, 0xe5, 0x10, 0xd3, 0xa4, 0xf8, 0x1a, 0x41, 0xb2, 0x71, 0xf8, 0xf1,
-  0xfc, 0xe4, 0xd3, 0xe1, 0xc1, 0xa7, 0xaf, 0x3e, 0x7e, 0x78, 0x7b, 0x72,
-  0xb4, 0xd1, 0x3d, 0xde, 0x97, 0x2c, 0x20, 0xe8, 0xc8, 0xd4, 0xa4, 0x9a,
-  0xe1, 0xac, 0x98, 0x2e, 0x72, 0xcb, 0x57, 0xf9, 0xad, 0x11, 0x70, 0x50,
-  0xb2, 0xe0, 0xc6, 0xc4, 0xdf, 0x60, 0xf8, 0xcb, 0x84, 0x77, 0x9a, 0x1b,
-  0x99, 0x9b, 0xd9, 0x74, 0x9a, 0xcf, 0xa1, 0x0c, 0x5e, 0xcf, 0x8c, 0x18,
-  0x36, 0xda, 0xc1, 0x60, 0x64, 0xb4, 0xc4, 0x74, 0xad, 0x90, 0x72, 0xe7,
-  0xe9, 0xd1, 0x9e, 0x47, 0x73, 0xd1, 0x18, 0x35, 0x52, 0x7d, 0xa8, 0xc6,
-  0x4e, 0x2b, 0x6f, 0x34, 0x36, 0x6a, 0x74, 0xd0, 0x83, 0xc8, 0x72, 0xd7,
-  0xbc, 0x2e, 0x3c, 0x15, 0x1b, 0xd4, 0x92, 0xd9, 0xc9, 0x7d, 0xe9, 0xe4,
-  0xb8, 0x6a, 0x8c, 0x02, 0x98, 0xe5, 0x38, 0x22, 0x1a, 0xfc, 0x21, 0x05,
-  0x19, 0xfe, 0x8b, 0xae, 0xa6, 0x62, 0xcc, 0xc3, 0x07, 0x9a, 0x03, 0x6a,
-  0x64, 0x90, 0xdd, 0x67, 0x38, 0x83, 0xf2, 0xd6, 0xe1, 0xa2, 0xc2, 0xa9,
-  0xfe, 0xde, 0x68, 0x27, 0x24, 0x0b, 0xdf, 0xc2, 0x01, 0x62, 0x5e, 0xd0,
-  0x87, 0xcc, 0xb5, 0xd3, 0xbd, 0x02, 0xcb, 0xe9, 0x84, 0x1c, 0x0d, 0x30,
-  0x36, 0xe1, 0x1a, 0x38, 0x3b, 0xb8, 0xf8, 0x26, 0x98, 0x13, 0x12, 0xf8,
-  0x0e, 0x88, 0x20, 0x5b, 0x11, 0x26, 0x52, 0xdd, 0xc8, 0x01, 0xf9, 0x30,
-  0x1c, 0x26, 0x08, 0x73, 0x4f, 0xf3, 0x51, 0x95, 0xd2, 0x37, 0xe9, 0xc7,
-  0xf4, 0x53, 0xb3, 0xad, 0x3b, 0xcd, 0x9d, 0x7d, 0x7b, 0x38, 0xfc, 0xc3,
-  0xee, 0xae, 0x51, 0x03, 0x27, 0x0b, 0x33, 0x2f, 0x9b, 0xe6, 0x95, 0xa2,
-  0x36, 0x27, 0x73, 0x36, 0xa8, 0xcb, 0x2d, 0x5c, 0xe3, 0xd0, 0xfd, 0x70,
-  0x51, 0xa4, 0xb7, 0xe6, 0xfe, 0xc5, 0x4e, 0xe2, 0x39, 0xa6, 0xfd, 0xdc,
-  0x55, 0xd8, 0x79, 0x81, 0x15, 0x05, 0x60, 0x64, 0x87, 0xb9, 0xc1, 0xa7,
-  0x0f, 0xc1, 0x28, 0x36, 0xf3, 0xd3, 0xa1, 0xc4, 0xd0, 0xd3, 0xb1, 0xf9,
-  0x2b, 0x59, 0x53, 0x5b, 0x34, 0xb6, 0xf6, 0x19, 0xd3, 0x71, 0x0d, 0x59,
-  0x3f, 0xbd, 0x20, 0x67, 0x27, 0x42, 0xff, 0xa1, 0x5c, 0x28, 0xba, 0xc7,
-  0xcb, 0xc1, 0x2b, 0xd0, 0xd9, 0x51, 0x3a, 0xbe, 0xb9, 0x4b, 0xab, 0x09,
-  0xbb, 0x4e, 0xcc, 0x9e, 0x19, 0xe5, 0xd3, 0xbc, 0x79, 0xe0, 0x7b, 0xa4,
-  0x3b, 0x0a, 0x0e, 0x22, 0xd1, 0x14, 0x9a, 0x93, 0x74, 0x65, 0xac, 0x22,
-  0xd2, 0x47, 0xc9, 0x56, 0x34, 0x07, 0xc3, 0xd3, 0xfa, 0xa1, 0x34, 0x35,
-  0x56, 0xe9, 0xb1, 0xdf, 0xee, 0x34, 0x07, 0x47, 0x14, 0x9d, 0x24, 0x74,
-  0xd3, 0xed, 0x5e, 0x15, 0x84, 0xbe, 0x98, 0xd2, 0x0d, 0x94, 0xd4, 0x0f,
-  0xe6, 0xde, 0x9f, 0x25, 0x11, 0xa5, 0x11, 0xa8, 0x87, 0xe4, 0xdb, 0xec,
-  0xc1, 0x98, 0x18, 0x79, 0xe1, 0x64, 0x25, 0x7b, 0x8b, 0x32, 0xb2, 0x59,
-  0x59, 0x3b, 0xcd, 0xd5, 0xe3, 0x98, 0x89, 0xd3, 0x98, 0xef, 0x94, 0xd0,
-  0xc6, 0xe2, 0xf7, 0x55, 0x33, 0xa7, 0x26, 0x36, 0xea, 0x96, 0x50, 0xc6,
-  0x97, 0x62, 0x5b, 0x31, 0xb8, 0x42, 0xe1, 0x3c, 0xe1, 0xe8, 0x30, 0x39,
-  0x9f, 0x6b, 0xde, 0x7b, 0xd3, 0xb4, 0x6e, 0x60, 0x5d, 0x60, 0xdc, 0xe2,
-  0xa3, 0x68, 0xdf, 0x26, 0x90, 0x23, 0xaf, 0xcd, 0x41, 0xfb, 0xc7, 0xaf,
-  0x10, 0x3e, 0xae, 0x38, 0x9e, 0xa1, 0x54, 0x95, 0xb9, 0x6a, 0x5d, 0x25,
-  0xef, 0xf5, 0xce, 0xa0, 0x4e, 0x58, 0x3f, 0xca, 0x9c, 0xa3, 0x7e, 0xac,
-  0xe8, 0xb0, 0x43, 0x28, 0x54, 0x5c, 0xc9, 0xa6, 0x17, 0xbf, 0xc1, 0xfe,
-  0x7a, 0xb2, 0x99, 0x0d, 0xae, 0x4c, 0x7b, 0xeb, 0xd4, 0xce, 0xee, 0x3e,
-  0xfd, 0x77, 0x0f, 0xff, 0x7d, 0xb6, 0xae, 0x90, 0x19, 0x7f, 0xa9, 0xe9,
-  0xbe, 0xe9, 0x4a, 0x4b, 0x71, 0xaa, 0xd3, 0xfd, 0x23, 0x17, 0x90, 0x08,
-  0x60, 0x92, 0xcb, 0xf1, 0xc3, 0xc1, 0x7a, 0xd6, 0x49, 0x2f, 0xa2, 0x0b,
-  0xb9, 0x89, 0xc0, 0xdd, 0x06, 0x2b, 0x75, 0x44, 0x0e, 0x28, 0x33, 0xb6,
-  0xb1, 0xd1, 0x65, 0xe0, 0x0b, 0xe0, 0x10, 0x15, 0x4d, 0xc7, 0xf8, 0x53,
-  0x95, 0x5d, 0xa7, 0xb5, 0x51, 0xab, 0x16, 0x0d, 0x4e, 0x47, 0xd7, 0x86,
-  0x30, 0x47, 0x6a, 0x9a, 0x5b, 0xe7, 0x8b, 0x7c, 0x78, 0x60, 0x4d, 0x15,
-  0x59, 0x45, 0x76, 0x63, 0x4e, 0xcb, 0x3b, 0x7d, 0xa2, 0x2f, 0x18, 0x96,
-  0xd8, 0xc5, 0x65, 0x56, 0x13, 0x30, 0x18, 0x7a, 0xcc, 0x0f, 0x47, 0xcd,
-  0x48, 0xef, 0x21, 0x80, 0x8d, 0x39, 0x82, 0x97, 0x66, 0xc6, 0xc8, 0x06,
-  0x99, 0x62, 0xdd, 0xc8, 0xda, 0x42, 0xaf, 0x03, 0x5d, 0x48, 0x74, 0x92,
-  0xfc, 0x52, 0x5c, 0x30, 0xf2, 0x6f, 0x48, 0x7c, 0xd1, 0x0f, 0x6a, 0x0e,
-  0x59, 0x75, 0x95, 0x83, 0xc7, 0xb7, 0xb6, 0x1e, 0x60, 0x7b, 0x17, 0xcb,
-  0x60, 0xd9, 0xeb, 0xa9, 0xfb, 0x5a, 0x74, 0xe3, 0x98, 0xc9, 0x6d, 0x7a,
-  0xc5, 0xd1, 0x83, 0x5f, 0x7f, 0x48, 0x4c, 0x8f, 0xfb, 0xe4, 0xf0, 0x58,
-  0xd4, 0x4f, 0x38, 0x23, 0x9e, 0x50, 0xe0, 0x77, 0xac, 0xcb, 0x87, 0x43,
-  0x73, 0xfe, 0x04, 0x74, 0x77, 0xe1, 0x83, 0xe7, 0x76, 0x39, 0xf4, 0x4e,
-  0xd6, 0x90, 0x1b, 0x3a, 0x17, 0xa3, 0x7e, 0x33, 0xbd, 0x49, 0x07, 0xc9,
-  0xe9, 0xe1, 0xf0, 0x8c, 0x3e, 0x61, 0xb6, 0x46, 0x71, 0x65, 0x7a, 0x71,
-  0x32, 0xec, 0x34, 0x67, 0x6c, 0xf5, 0xac, 0xa8, 0x5b, 0xa0, 0xaf, 0xa5,
-  0xd3, 0xac, 0xae, 0x40, 0x8d, 0x91, 0x4b, 0x67, 0x8d, 0x6d, 0x8a, 0xe0,
-  0x16, 0xc5, 0x6a, 0x28, 0x90, 0x9a, 0xf0, 0x51, 0x0b, 0x3e, 0x34, 0x37,
-  0x1b, 0x7e, 0xb2, 0x65, 0x9d, 0x0b, 0x3d, 0xdd, 0x0b, 0xd6, 0xe7, 0x5f,
-  0x2f, 0xae, 0x48, 0x5f, 0xae, 0xd5, 0xca, 0xb1, 0x5f, 0x30, 0xb3, 0x11,
-  0x5c, 0xf0, 0x3a, 0x6c, 0x73, 0x26, 0xf8, 0xd8, 0x18, 0x05, 0x9f, 0xe0,
-  0x10, 0xb8, 0xc4, 0x8b, 0xd2, 0xb5, 0x4a, 0x3a, 0x3d, 0xd0, 0x58, 0x39,
-  0xbc, 0xe4, 0xe3, 0xcc, 0x28, 0x49, 0x93, 0xc8, 0x25, 0xc5, 0x8b, 0xa2,
-  0x2a, 0xfe, 0xa5, 0x20, 0xb0, 0x22, 0x1e, 0x0b, 0x34, 0x34, 0x66, 0x25,
-  0x82, 0x76, 0x3d, 0xbc, 0x8d, 0x39, 0xb9, 0x67, 0x49, 0xa5, 0x63, 0xe3,
-  0x92, 0xda, 0xb3, 0x67, 0xff, 0xeb, 0x62, 0x61, 0x26, 0x3e, 0x72, 0x5b,
-  0xd0, 0xb5, 0x4f, 0x77, 0x1f, 0x4d, 0xe0, 0x2a, 0x57, 0xd4, 0xf3, 0xdd,
-  0xb6, 0x2b, 0x0a, 0x9b, 0xcd, 0xa8, 0xa8, 0x59, 0xf2, 0x9a, 0xfe, 0xfb,
-  0xa8, 0x54, 0x46, 0xfc, 0xd9, 0x97, 0xc2, 0x78, 0x57, 0x02, 0x18, 0x2c,
-  0x47, 0x57, 0xec, 0x38, 0x84, 0xb6, 0x07, 0x24, 0xf6, 0x7a, 0xc9, 0xdb,
-  0xa3, 0x73, 0x2c, 0xff, 0xd1, 0x87, 0xaf, 0xe1, 0x1d, 0xb6, 0xaa, 0xed,
-  0x04, 0x6d, 0xd6, 0x6c, 0xf5, 0x72, 0x74, 0x47, 0xc4, 0x7f, 0x77, 0xaa,
-  0x49, 0x7c, 0x92, 0x53, 0x1f, 0xb1, 0xff, 0xc9, 0xef, 0x77, 0x71, 0x05,
-  0xd6, 0xd2, 0x51, 0x4f, 0xa6, 0x4e, 0x7c, 0x08, 0x37, 0xd9, 0x83, 0xfb,
-  0x1b, 0xa6, 0xd3, 0x9b, 0x63, 0xf7, 0xf0, 0x6b, 0x6f, 0x66, 0x7e, 0xdc,
-  0x27, 0x7c, 0x81, 0x51, 0x9f, 0x26, 0x3f, 0xff, 0xba, 0xab, 0x50, 0x1c,
-  0x36, 0x49, 0xfb, 0x4e, 0x8c, 0xf8, 0x05, 0xe0, 0x92, 0xd1, 0x48, 0x3e,
-  0x07, 0xee, 0x58, 0xb0, 0x0b, 0xbe, 0x94, 0xa0, 0xa7, 0xb4, 0xd3, 0xd3,
-  0x82, 0x15, 0x22, 0x12, 0xd1, 0x0c, 0xdf, 0x00, 0x9c, 0xa3, 0x7b, 0x5c,
-  0xc6, 0xe5, 0x34, 0xb8, 0xe4, 0x5a, 0x36, 0x15, 0x54, 0xcd, 0x3d, 0xb9,
-  0xd6, 0x60, 0x67, 0xc8, 0xe5, 0xc3, 0xea, 0x5d, 0xf7, 0x1c, 0x58, 0x65,
-  0x0f, 0xc8, 0x28, 0xff, 0x4a, 0x4c, 0xbc, 0x97, 0x11, 0xa8, 0x42, 0xf7,
-  0x58, 0x53, 0x1b, 0xc8, 0xf2, 0x66, 0x51, 0xcd, 0xd4, 0xac, 0xae, 0xce,
-  0xae, 0x59, 0x76, 0x72, 0x8a, 0xb8, 0x3d, 0xc4, 0x11, 0x00, 0x5e, 0x66,
-  0x23, 0xdf, 0xaa, 0x5c, 0x54, 0x47, 0x06, 0x94, 0x75, 0x0f, 0xb3, 0xc6,
-  0x0b, 0xc5, 0x69, 0x22, 0x86, 0x3d, 0xb6, 0x95, 0xee, 0x2b, 0xde, 0x7e,
-  0x64, 0x24, 0xad, 0x7b, 0x53, 0xb2, 0x1e, 0x5b, 0x8a, 0x86, 0x43, 0x17,
-  0x72, 0x5e, 0xf2, 0x5b, 0x9a, 0x3a, 0xdd, 0x3b, 0xce, 0x07, 0xd7, 0xd6,
-  0xc9, 0xca, 0x82, 0xfe, 0x2c, 0xc8, 0x77, 0xf3, 0x2f, 0x91, 0x0d, 0x19,
-  0xdd, 0x8b, 0xe4, 0xc6, 0x95, 0xb0, 0x0e, 0x34, 0x17, 0x82, 0x30, 0x09,
-  0xac, 0x33, 0xa2, 0xa5, 0xc7, 0x6c, 0x0d, 0xd5, 0x3a, 0xd4, 0xa4, 0xf0,
-  0xec, 0x8c, 0x40, 0x0d, 0xef, 0x6e, 0x10, 0x23, 0xbf, 0x1b, 0x0a, 0x08,
-  0xf3, 0xde, 0x25, 0x37, 0x61, 0x3e, 0xbe, 0x01, 0xee, 0x47, 0xae, 0xa6,
-  0x96, 0xfc, 0x10, 0xd4, 0x0d, 0xe3, 0xc5, 0x22, 0x4b, 0x00, 0x33, 0x87,
-  0xfc, 0x97, 0xb4, 0x27, 0xe9, 0x5a, 0xce, 0x0b, 0x56, 0xd6, 0x96, 0x1a,
-  0xc0, 0xa6, 0xaf, 0x9f, 0xde, 0x1e, 0x9f, 0x27, 0x9b, 0x66, 0x55, 0x47,
-  0x5d, 0xe5, 0x46, 0xef, 0xf5, 0xed, 0xac, 0x19, 0x6f, 0xcf, 0x6f, 0xf2,
-  0x6d, 0x63, 0x07, 0x4d, 0x46, 0x5b, 0x56, 0xbb, 0xc7, 0xe7, 0xb0, 0x09,
-  0xd5, 0x66, 0x52, 0xa3, 0x09, 0x56, 0x53, 0xf7, 0x34, 0x78, 0x56, 0x14,
-  0x43, 0xc6, 0x9d, 0xf1, 0x84, 0x69, 0x62, 0x17, 0x03, 0xe0, 0x2a, 0x1c,
-  0xdb, 0x4c, 0xc8, 0x4f, 0x98, 0xb1, 0x0b, 0xd5, 0x98, 0x7f, 0xdd, 0xb3,
-  0xca, 0xd8, 0x25, 0xf1, 0x31, 0xb0, 0x6f, 0x41, 0x01, 0x37, 0x72, 0x4f,
-  0x38, 0x6d, 0xaf, 0x47, 0x50, 0x29, 0x9a, 0x94, 0x39, 0xdd, 0x45, 0x13,
-  0x72, 0x55, 0x75, 0x9b, 0x83, 0xf3, 0x6c, 0x7d, 0xb0, 0xbd, 0x9e, 0x58,
-  0x70, 0x98, 0x99, 0x65, 0xe0, 0x1b, 0x1d, 0x1a, 0xcf, 0x6c, 0xb1, 0xcb,
-  0x45, 0xcd, 0xee, 0x57, 0xb2, 0xf7, 0xed, 0x7a, 0x0d, 0x62, 0x02, 0xd5,
-  0x5b, 0x4e, 0xab, 0x6c, 0x19, 0xa5, 0x18, 0xe7, 0xca, 0x1a, 0x92, 0x23,
-  0xdb, 0x29, 0x2c, 0xd5, 0xfa, 0x4f, 0xeb, 0x89, 0x07, 0x2e, 0x6a, 0x39,
-  0xc9, 0x72, 0x17, 0xfe, 0xf7, 0xae, 0x00, 0x73, 0x15, 0xdb, 0x13, 0x3c,
-  0xc9, 0xa6, 0xf9, 0x2c, 0x6f, 0xa0, 0xc3, 0x7b, 0x5d, 0x08, 0x96, 0xa2,
-  0xdd, 0xa5, 0x9f, 0xc2, 0x2e, 0x29, 0x60, 0x2f, 0xa5, 0x5f, 0x9b, 0x2e,
-  0xc1, 0x59, 0xc3, 0x78, 0xaa, 0xb8, 0x39, 0xd7, 0xee, 0x90, 0x85, 0xfc,
-  0xad, 0x88, 0xfa, 0xfc, 0x3e, 0x16, 0x6f, 0xfb, 0xc8, 0xd4, 0x0d, 0x80,
-  0x45, 0x74, 0xce, 0xc4, 0x89, 0x31, 0xe2, 0xcb, 0x41, 0xcf, 0x58, 0xaa,
-  0x8f, 0x07, 0xb2, 0xdb, 0xbc, 0xbe, 0xad, 0x82, 0x07, 0x92, 0x47, 0xdd,
-  0x1f, 0x6c, 0x86, 0x9a, 0x03, 0x03, 0xb3, 0xf3, 0x46, 0xac, 0x4e, 0x68,
-  0x40, 0x10, 0x56, 0xec, 0xfe, 0xe9, 0xea, 0xbb, 0x2a, 0xec, 0xfb, 0x59,
-  0x31, 0x2e, 0x27, 0x1d, 0xfb, 0x8c, 0x26, 0xc1, 0x13, 0x72, 0xd8, 0xf1,
-  0x1c, 0x49, 0xc1, 0x2e, 0x8f, 0x3b, 0xd6, 0xc8, 0xa3, 0xc3, 0xde, 0xbe,
-  0x5f, 0xb4, 0xef, 0x63, 0xe6, 0x3d, 0xb6, 0xfd, 0xaf, 0xda, 0xf5, 0xff,
-  0x34, 0x3d, 0xc2, 0x53, 0xbf, 0x9e, 0xa0, 0x48, 0xf4, 0xc7, 0xf9, 0xfc,
-  0x9a, 0xbc, 0xef, 0xaf, 0x11, 0x90, 0x26, 0x17, 0x19, 0xff, 0x20, 0xae,
-  0x40, 0x0c, 0xe5, 0xca, 0xab, 0xc5, 0x4f, 0xa0, 0x6f, 0x8b, 0x78, 0xc9,
-  0x15, 0x40, 0xad, 0xc6, 0x98, 0x80, 0x20, 0xf2, 0xc0, 0x5a, 0xa5, 0x90,
-  0x84, 0xbe, 0xcc, 0x37, 0xbd, 0xbd, 0x5d, 0x18, 0xef, 0xa8, 0xbf, 0x1d,
-  0x18, 0x93, 0x21, 0x9d, 0x10, 0xa2, 0xc9, 0x4c, 0x13, 0x12, 0x30, 0xf0,
-  0xf3, 0x4e, 0x73, 0xe8, 0xbc, 0x24, 0x26, 0xf0, 0xad, 0x6b, 0x66, 0xf4,
-  0xe3, 0xf9, 0xc9, 0x7e, 0x77, 0x9e, 0x80, 0x8b, 0xad, 0xf7, 0xb7, 0xb7,
-  0xe1, 0x7a, 0xbb, 0x4e, 0xef, 0xef, 0x07, 0x75, 0xb6, 0x3d, 0x29, 0xc7,
-  0xf5, 0x76, 0x5d, 0x4f, 0x75, 0x36, 0xda, 0xc8, 0xf1, 0xdf, 0xc1, 0x67,
-  0x51, 0xce, 0xe6, 0x15, 0x8c, 0xe8, 0x78, 0x40, 0x43, 0xad, 0x24, 0xc0,
-  0xa6, 0xe5, 0x49, 0x67, 0x32, 0x74, 0xb3, 0x82, 0xcc, 0xc2, 0x5f, 0x95,
-  0x95, 0xd9, 0x70, 0xb3, 0x3a, 0x66, 0x26, 0xab, 0x3b, 0xab, 0x56, 0x77,
-  0x40, 0x4d, 0xb6, 0x3c, 0x9b, 0xed, 0x8b, 0xc2, 0xfb, 0x80, 0x99, 0x05,
-  0xc4, 0xaa, 0x07, 0x76, 0xac, 0x71, 0x17, 0x9d, 0x8e, 0xbc, 0x63, 0x68,
-  0x89, 0xa5, 0x95, 0xc0, 0xc8, 0x2e, 0x9c, 0x0f, 0x2d, 0xc1, 0x41, 0x36,
-  0x5d, 0xee, 0xc5, 0x7a, 0x87, 0x29, 0xaa, 0x32, 0x7a, 0x16, 0xc2, 0xb0,
-  0xaa, 0x4a, 0x4f, 0x02, 0xf6, 0xbf, 0x85, 0x26, 0x62, 0x8e, 0x55, 0x7e,
-  0x95, 0xbc, 0xa6, 0x43, 0xdc, 0xdd, 0x97, 0x43, 0xdd, 0x35, 0xb2, 0x21,
-  0xf9, 0x51, 0x0d, 0x05, 0x54, 0xb4, 0x77, 0x38, 0x68, 0x26, 0x81, 0x78,
-  0x0e, 0x74, 0x6a, 0x16, 0x52, 0xd1, 0x95, 0x66, 0xf6, 0x65, 0x00, 0x7b,
-  0x1a, 0x82, 0xbd, 0x48, 0x2c, 0xcd, 0x7e, 0xc0, 0x87, 0x81, 0xda, 0x46,
-  0x39, 0x92, 0x3b, 0x0a, 0xf4, 0x64, 0xb3, 0x2c, 0x0d, 0x5d, 0xd9, 0x12,
-  0xf4, 0x85, 0xec, 0xf5, 0x77, 0x05, 0xb2, 0x3f, 0xb0, 0x8a, 0x0f, 0x8c,
-  0xc2, 0xd0, 0x37, 0xa2, 0xaa, 0xa3, 0xb9, 0x1f, 0x16, 0x66, 0xab, 0xb5,
-  0x12, 0x14, 0xba, 0xdb, 0x54, 0x51, 0x5a, 0xb2, 0x3a, 0x39, 0x32, 0x62,
-  0x52, 0x20, 0xc0, 0x6a, 0xab, 0x53, 0x7b, 0x79, 0x09, 0x9e, 0xaf, 0x7a,
-  0xd9, 0x84, 0x88, 0xf4, 0xa4, 0xcf, 0xf5, 0x1c, 0xb2, 0x75, 0x02, 0x6b,
-  0xdf, 0x0c, 0xac, 0xc9, 0x00, 0x51, 0xa2, 0x74, 0xa8, 0x69, 0xe9, 0xe4,
-  0xbb, 0xd9, 0xc3, 0x46, 0x22, 0x05, 0xb1, 0xe4, 0x2b, 0x23, 0x14, 0x4e,
-  0xc8, 0x51, 0xed, 0x61, 0x6a, 0xd8, 0x71, 0xa6, 0x7a, 0xf6, 0x14, 0x3a,
-  0x0d, 0x47, 0x0b, 0x12, 0x51, 0xe0, 0x12, 0x59, 0xd9, 0xa0, 0x77, 0xd4,
-  0x31, 0x85, 0x71, 0x09, 0x34, 0x3e, 0x47, 0x22, 0x86, 0xa4, 0x09, 0x30,
-  0x2c, 0x4d, 0xdd, 0x28, 0x75, 0xd9, 0x13, 0x09, 0x35, 0xa5, 0x80, 0x40,
-  0x57, 0x8c, 0x70, 0x97, 0xbd, 0x14, 0x00, 0x1f, 0x18, 0x45, 0x4b, 0x65,
-  0xd1, 0x5d, 0xf5, 0xc0, 0xc5, 0x4f, 0x65, 0x20, 0xe1, 0x75, 0xef, 0x19,
-  0x56, 0xac, 0x35, 0xd1, 0x99, 0x85, 0x45, 0x42, 0x80, 0x39, 0xe9, 0x1a,
-  0xe0, 0x0a, 0xb4, 0xf2, 0xf2, 0xa9, 0xa2, 0x7c, 0x6a, 0xef, 0x2c, 0x26,
-  0xcc, 0xf3, 0x20, 0x2b, 0x36, 0xcc, 0xae, 0x79, 0xfc, 0xe6, 0xc9, 0xdc,
-  0x03, 0xb0, 0x1d, 0x4a, 0x1b, 0x04, 0xf3, 0xd7, 0xb3, 0xfd, 0x9c, 0xec,
-  0x9d, 0x6e, 0xa7, 0x8a, 0xf1, 0xb4, 0xac, 0x75, 0x88, 0xb4, 0x5a, 0x9c,
-  0x98, 0x61, 0x84, 0xc8, 0xf7, 0xf2, 0x03, 0x59, 0x09, 0xf9, 0x05, 0x37,
-  0x7b, 0x59, 0x92, 0x97, 0x2f, 0xf4, 0xc4, 0x89, 0x32, 0xe4, 0x72, 0x49,
-  0xc8, 0x8c, 0xb7, 0x0a, 0xf0, 0x7e, 0xf2, 0xd3, 0x4f, 0xbd, 0x84, 0xb4,
-  0xb0, 0x9f, 0x8c, 0x6d, 0xf7, 0x93, 0xd9, 0x6b, 0xc9, 0x4f, 0x95, 0x48,
-  0xb5, 0x9f, 0x6e, 0xcd, 0x27, 0xbb, 0x71, 0x1b, 0x72, 0x5f, 0xd4, 0x53,
-  0xf8, 0x25, 0xf9, 0x62, 0x17, 0x10, 0xc8, 0x83, 0x7a, 0xea, 0x39, 0x6b,
-  0x06, 0x4e, 0x04, 0xf6, 0xbf, 0x59, 0xa5, 0x1d, 0x60, 0x94, 0xd0, 0x4e,
-  0x5d, 0xcc, 0x0a, 0x51, 0x87, 0x58, 0xd2, 0x40, 0x0e, 0x40, 0x58, 0x6c,
-  0xfc, 0x61, 0xc3, 0xad, 0x4d, 0x4f, 0x7d, 0x47, 0x8d, 0x0a, 0x69, 0x7a,
-  0x30, 0x50, 0xa5, 0x59, 0x10, 0x68, 0x82, 0x09, 0xa2, 0x62, 0x8c, 0xd1,
-  0x30, 0x42, 0xf8, 0x94, 0x1c, 0x37, 0x0c, 0x13, 0x2e, 0x2d, 0xb8, 0x0a,
-  0x68, 0xe9, 0xf9, 0xf5, 0x43, 0x4d, 0x81, 0xab, 0xe0, 0x12, 0x2c, 0xfc,
-  0x2b, 0x58, 0x45, 0x59, 0xa8, 0x2b, 0x38, 0x33, 0x0e, 0x0f, 0x40, 0xc5,
-  0x33, 0x5b, 0xa0, 0x25, 0x6c, 0x4d, 0x5f, 0x36, 0xfa, 0x1b, 0x08, 0xe0,
-  0xc0, 0xc9, 0x2a, 0x77, 0x49, 0x15, 0x22, 0xad, 0xb4, 0x19, 0x0f, 0x89,
-  0x11, 0x7c, 0xb2, 0x65, 0xe8, 0x72, 0x4c, 0x48, 0xe1, 0x1f, 0x2e, 0xff,
-  0x89, 0x12, 0x18, 0xc2, 0xee, 0xf7, 0x22, 0x26, 0x8d, 0x20, 0x8b, 0xed,
-  0xbb, 0x46, 0x59, 0x73, 0x5e, 0xc7, 0x7e, 0x1f, 0x69, 0xa1, 0x73, 0x4e,
-  0xe5, 0xe4, 0xcd, 0x41, 0x8a, 0x37, 0x52, 0x01, 0x6b, 0xf2, 0x84, 0x3d,
-  0x44, 0xa4, 0xb4, 0x73, 0x65, 0x23, 0x8b, 0x91, 0xae, 0x39, 0x4a, 0x23,
-  0xbc, 0x2b, 0x24, 0x0d, 0x6c, 0x58, 0x42, 0xf5, 0x1f, 0x23, 0x82, 0x83,
-  0x68, 0xa1, 0x80, 0x8e, 0x43, 0x9d, 0x93, 0x6e, 0xce, 0x40, 0xf1, 0xa0,
-  0x3e, 0xbd, 0x49, 0xd6, 0x97, 0xab, 0x1f, 0xeb, 0xdd, 0x37, 0xbe, 0xb7,
-  0x21, 0x1f, 0xb8, 0xb8, 0xc4, 0x7d, 0x48, 0xf8, 0xcf, 0xe9, 0x1d, 0xc1,
-  0xd5, 0x37, 0x05, 0x54, 0xd0, 0xff, 0x1b, 0x23, 0x86, 0x18, 0xf7, 0x6b,
-  0x11, 0x4b, 0x5b, 0xdd, 0xbd, 0x4b, 0x10, 0xaa, 0xda, 0xc5, 0x38, 0xd5,
-  0x68, 0xd5, 0xb9, 0x16, 0x59, 0x6a, 0x23, 0xb6, 0x39, 0xfc, 0x2c, 0x97,
-  0x04, 0x8f, 0x8a, 0x05, 0xc0, 0xad, 0x2f, 0xdb, 0xbb, 0x70, 0x09, 0x9c,
-  0x48, 0x5f, 0x11, 0xef, 0x87, 0xc6, 0xa3, 0xec, 0x59, 0xa7, 0x3c, 0x1c,
-  0xe4, 0x59, 0x26, 0x79, 0x11, 0x99, 0x33, 0xd6, 0xa6, 0x83, 0x99, 0xdb,
-  0xdd, 0xb2, 0xc8, 0x7a, 0xe4, 0x4e, 0x32, 0x84, 0x4d, 0x74, 0x8f, 0xf5,
-  0xeb, 0x92, 0x83, 0xac, 0xeb, 0xfb, 0x04, 0xfa, 0x66, 0x04, 0x99, 0x0c,
-  0x55, 0x52, 0xe8, 0x3a, 0xcd, 0x21, 0x84, 0xfd, 0xcd, 0xe9, 0xfb, 0xa3,
-  0x36, 0x54, 0x09, 0x3f, 0x89, 0x99, 0xfe, 0x46, 0x92, 0xbd, 0x33, 0xe2,
-  0x87, 0x77, 0x57, 0x1a, 0x58, 0x53, 0x64, 0xe7, 0x61, 0xbe, 0xae, 0xb2,
-  0x66, 0x7e, 0xb7, 0xc8, 0x27, 0x9b, 0x5b, 0xb4, 0x79, 0x08, 0xa8, 0xd8,
-  0x07, 0x3e, 0x96, 0xcd, 0x20, 0xb3, 0x5c, 0xac, 0x02, 0x54, 0x59, 0xb3,
-  0xa8, 0x0a, 0x76, 0xd7, 0x50, 0xdf, 0xc3, 0xb0, 0x8b, 0xdc, 0x7c, 0xbe,
-  0x99, 0x22, 0x29, 0xd0, 0x1c, 0xdb, 0xe5, 0x06, 0xb7, 0x48, 0x40, 0x18,
-  0x11, 0x8b, 0x10, 0x37, 0xb6, 0x05, 0xc6, 0x12, 0x5f, 0x74, 0x4d, 0x26,
-  0x3c, 0x38, 0x3b, 0x7b, 0x7b, 0x70, 0x71, 0x60, 0xc7, 0x86, 0xbb, 0x1a,
-  0x52, 0x07, 0x2a, 0xab, 0x11, 0x57, 0xa4, 0x86, 0xd1, 0x93, 0x1b, 0x7f,
-  0xfc, 0x38, 0x3c, 0x3a, 0xef, 0x2a, 0x03, 0x67, 0xe7, 0xa7, 0x94, 0x5f,
-  0xfe, 0xc7, 0x9f, 0x0e, 0x28, 0x9a, 0x23, 0xbe, 0xe8, 0xb7, 0x69, 0x93,
-  0x6e, 0x04, 0x27, 0x7e, 0x6f, 0x8b, 0xfa, 0x77, 0x67, 0xfb, 0x77, 0x29,
-  0xb7, 0x1c, 0xcc, 0xf2, 0xe4, 0x13, 0x2d, 0x68, 0x35, 0xb6, 0xba, 0x95,
-  0xce, 0x06, 0x26, 0x00, 0x30, 0xa3, 0xe5, 0x03, 0x29, 0x9d, 0x94, 0xd3,
-  0x08, 0xbb, 0x4e, 0xd6, 0x34, 0xc9, 0xee, 0x8d, 0xf5, 0xdb, 0xe0, 0x24,
-  0x50, 0x06, 0x32, 0x6d, 0x37, 0xca, 0x00, 0xea, 0xce, 0x4b, 0xb0, 0x3c,
-  0xce, 0x85, 0xc7, 0x12, 0x02, 0x09, 0x68, 0x66, 0xa3, 0x01, 0x4b, 0x36,
-  0x90, 0xde, 0xb2, 0x84, 0x8b, 0x05, 0xcb, 0x32, 0x76, 0xea, 0x21, 0x21,
-  0x8d, 0xbb, 0x14, 0x4c, 0xc8, 0x1f, 0xcc, 0x21, 0xed, 0x27, 0x47, 0x82,
-  0x94, 0xc6, 0xc0, 0xcd, 0x0f, 0x82, 0x87, 0x34, 0x45, 0xc9, 0x5e, 0x04,
-  0x71, 0x39, 0xe2, 0x25, 0x69, 0xae, 0x77, 0xb5, 0x74, 0x4e, 0x8b, 0x30,
-  0x0f, 0x51, 0xb7, 0x69, 0xd2, 0x61, 0xce, 0xac, 0x47, 0x62, 0xc1, 0xfd,
-  0xf4, 0x8a, 0xb6, 0x97, 0x79, 0xd4, 0xa8, 0xeb, 0xc6, 0x8a, 0xa1, 0x7f,
-  0x6d, 0xef, 0x0e, 0x76, 0xd6, 0xc3, 0xce, 0xd3, 0x61, 0x41, 0xce, 0xab,
-  0xf5, 0xe9, 0x92, 0x9c, 0x6c, 0xca, 0xf2, 0xd1, 0xfe, 0xb1, 0x78, 0x33,
-  0x0a, 0xeb, 0xdc, 0xb4, 0x1f, 0xed, 0x4a, 0xff, 0x34, 0x00, 0x62, 0x11,
-  0xb4, 0xa9, 0x52, 0x81, 0x69, 0xe4, 0x65, 0x51, 0xde, 0xd1, 0x48, 0xcc,
-  0x56, 0x9b, 0x4e, 0x5b, 0xc9, 0xc9, 0xeb, 0xf1, 0x69, 0x2e, 0xc0, 0x03,
-  0x90, 0x75, 0x67, 0x3b, 0x1a, 0x30, 0x51, 0xfd, 0xcd, 0xd7, 0xf5, 0x2c,
-  0x16, 0x08, 0x66, 0x9d, 0xdd, 0x09, 0x7e, 0x22, 0x5a, 0x5c, 0x1b, 0xad,
-  0xdb, 0x76, 0x1e, 0x0c, 0xe1, 0x3e, 0x35, 0x42, 0x0a, 0xea, 0x6b, 0xce,
-  0x73, 0x0a, 0x8c, 0xeb, 0xf7, 0xe9, 0x7d, 0x3e, 0x5b, 0xcc, 0xf0, 0x31,
-  0xda, 0xdb, 0xf2, 0x98, 0x5c, 0x98, 0xf0, 0x6f, 0x70, 0x54, 0x14, 0x9b,
-  0x7c, 0xa3, 0x4e, 0x3c, 0x13, 0x3b, 0xe2, 0xf4, 0x68, 0xcc, 0x85, 0x3d,
-  0x70, 0xc3, 0x2b, 0x00, 0x70, 0x21, 0x77, 0x57, 0xdd, 0x31, 0xcf, 0x8d,
-  0x26, 0x91, 0x52, 0xa8, 0xab, 0x2e, 0x6d, 0x8c, 0x38, 0x62, 0x02, 0x70,
-  0xa2, 0x9d, 0xa8, 0x77, 0x1e, 0x90, 0x27, 0xab, 0xf2, 0x72, 0x62, 0xcf,
-  0x0d, 0x29, 0x90, 0x79, 0xb1, 0x30, 0xf3, 0x4c, 0x6d, 0xd1, 0x85, 0xab,
-  0x58, 0xc1, 0x20, 0xd4, 0x06, 0xf8, 0xe1, 0x10, 0xa8, 0x52, 0xc5, 0xe6,
-  0x7c, 0x36, 0x78, 0xb6, 0x37, 0xd8, 0xe9, 0xb5, 0x2c, 0x6c, 0xc9, 0x47,
-  0x34, 0xa7, 0x6b, 0x9c, 0xcf, 0x6c, 0xae, 0xc2, 0xe0, 0x9f, 0xe6, 0x49,
-  0xa1, 0x2c, 0x8d, 0xfe, 0x2c, 0xbd, 0xc7, 0xf2, 0x45, 0x97, 0xb5, 0x4c,
-  0x5e, 0x7f, 0x73, 0x3a, 0xbc, 0xd8, 0xdd, 0x3f, 0x3b, 0x3d, 0x37, 0xff,
-  0xa5, 0xbf, 0xef, 0xe1, 0xef, 0x7b, 0x5f, 0x74, 0x9b, 0x7d, 0x27, 0xd7,
-  0xae, 0xa2, 0x9a, 0x25, 0x79, 0x88, 0xa7, 0x92, 0x5e, 0xc4, 0x7b, 0x46,
-  0xdd, 0x26, 0xf9, 0x27, 0x1f, 0xa0, 0x87, 0x0e, 0x4f, 0x3f, 0x7c, 0x38,
-  0x3a, 0xbc, 0xe8, 0xae, 0xc9, 0xc5, 0x69, 0x1f, 0x2f, 0xe9, 0xaf, 0xcd,
-  0xbf, 0xf1, 0xbe, 0x60, 0x3e, 0x07, 0xdd, 0xbd, 0x0d, 0x48, 0xd6, 0x22,
-  0x6f, 0xc4, 0x8d, 0x5c, 0x46, 0xa3, 0xfd, 0x36, 0x7f, 0x8b, 0xa2, 0x92,
-  0xa9, 0x03, 0x36, 0x2b, 0x1d, 0x09, 0x20, 0x0a, 0xed, 0x5f, 0x8d, 0xa7,
-  0xc6, 0x2a, 0x08, 0xdc, 0x31, 0x45, 0x39, 0xc9, 0x38, 0x33, 0x5e, 0x7e,
-  0x4f, 0x87, 0x51, 0x70, 0x9e, 0x83, 0x24, 0xd6, 0x37, 0xde, 0xa4, 0x8c,
-  0xb4, 0x0e, 0x7a, 0x67, 0xba, 0x64, 0xfa, 0x9d, 0xd7, 0xd7, 0xa2, 0xa1,
-  0x29, 0x76, 0xdb, 0xf7, 0x33, 0x1d, 0x37, 0x9c, 0xba, 0xf5, 0xe1, 0xf4,
-  0x22, 0x49, 0x2f, 0x2f, 0x35, 0xcf, 0x8c, 0xa0, 0x9c, 0x31, 0xa7, 0xee,
-  0xf6, 0x9c, 0x6f, 0xba, 0xd4, 0xc5, 0xd5, 0xe9, 0x6e, 0xb9, 0x38, 0x19,
-  0x6e, 0x93, 0x93, 0x89, 0xd1, 0x18, 0xc3, 0x0f, 0xc7, 0xbd, 0x76, 0x28,
-  0x8c, 0x82, 0xb0, 0xa1, 0x85, 0xcc, 0x17, 0xe1, 0x16, 0x9b, 0x76, 0x7a,
-  0xd7, 0xa6, 0xde, 0x15, 0x69, 0x73, 0x98, 0x09, 0xe1, 0x41, 0x5d, 0x5a,
-  0x87, 0x3c, 0x5d, 0xa7, 0x4e, 0x74, 0x05, 0x98, 0xb8, 0xf4, 0x61, 0x41,
-  0xcf, 0xe6, 0xcd, 0x83, 0xb8, 0x66, 0x7b, 0x48, 0xea, 0x25, 0x2d, 0x64,
-  0x9d, 0xcc, 0x17, 0x6a, 0x04, 0x63, 0x58, 0xa7, 0xf9, 0x5c, 0x77, 0x3b,
-  0x32, 0x00, 0xc5, 0xe3, 0x6b, 0xfc, 0x39, 0xef, 0x29, 0xbc, 0x8a, 0x6f,
-  0x61, 0xaf, 0x2f, 0xfd, 0x60, 0xb7, 0x39, 0x74, 0x40, 0x03, 0x87, 0xb2,
-  0x5d, 0x36, 0x48, 0x73, 0xcb, 0xaf, 0x90, 0x29, 0xe9, 0xf5, 0x2b, 0x2a,
-  0x6c, 0x65, 0xcd, 0x5b, 0xa2, 0x96, 0xc6, 0x63, 0xc5, 0x6c, 0x3a, 0x91,
-  0x9f, 0xe8, 0x19, 0xa8, 0x16, 0xd3, 0x08, 0xca, 0xc2, 0xf3, 0x77, 0x92,
-  0xd6, 0x32, 0xbd, 0x15, 0x6f, 0xe7, 0x37, 0x74, 0x66, 0x39, 0x11, 0x60,
-  0xd0, 0x8a, 0x51, 0xbf, 0x6a, 0xc5, 0xa8, 0x0f, 0xc5, 0xd2, 0x81, 0xc4,
-  0xea, 0x9b, 0x4d, 0xf0, 0xba, 0xbc, 0xbc, 0xac, 0xb3, 0xa6, 0x2b, 0x98,
-  0x0f, 0xe5, 0x91, 0xed, 0x73, 0xf0, 0xb8, 0x78, 0x48, 0xdd, 0x76, 0x9e,
-  0x73, 0x92, 0x2a, 0x82, 0x4e, 0xdc, 0x16, 0xdc, 0xdc, 0x20, 0x82, 0x4a,
-  0x6c, 0x3f, 0xe1, 0xe1, 0x8b, 0x39, 0xdd, 0x28, 0xc8, 0xa2, 0xc5, 0x1e,
-  0x15, 0x89, 0xd5, 0xf5, 0x2f, 0xdc, 0xe4, 0xf3, 0x39, 0x19, 0x05, 0x20,
-  0x8d, 0xa0, 0xa5, 0xb1, 0x0e, 0xee, 0x51, 0x66, 0xd6, 0x03, 0xdb, 0x45,
-  0xa1, 0x1b, 0x46, 0x75, 0x1c, 0x5b, 0xd8, 0xeb, 0x28, 0x33, 0xdb, 0x34,
-  0x0b, 0x55, 0x59, 0xf2, 0x05, 0x78, 0xa9, 0xc2, 0x22, 0xa4, 0x26, 0x94,
-  0x16, 0x5c, 0xa4, 0x7c, 0xd0, 0x48, 0xe0, 0xba, 0x24, 0x3a, 0xc9, 0x1e,
-  0x88, 0x21, 0x88, 0x1c, 0xb6, 0xdb, 0x3a, 0xac, 0x86, 0xc7, 0xff, 0xf3,
-  0xc8, 0x25, 0x76, 0xdb, 0xcc, 0x69, 0xc6, 0xc7, 0xc6, 0x70, 0xc7, 0xc9,
-  0x7a, 0xff, 0x30, 0xe9, 0xaf, 0xa3, 0x23, 0x2e, 0xfc, 0x57, 0x76, 0xd0,
-  0x9b, 0xb0, 0x06, 0xe0, 0x00, 0x82, 0x92, 0xb0, 0xcd, 0xa9, 0x54, 0x65,
-  0xa0, 0x54, 0x60, 0x09, 0x79, 0xb2, 0x75, 0x94, 0x10, 0x1c, 0x8d, 0x00,
-  0xef, 0x7d, 0x98, 0x2a, 0x6b, 0x51, 0xdb, 0x79, 0x41, 0xba, 0x14, 0x2e,
-  0xf6, 0x00, 0xc3, 0xa9, 0x89, 0x34, 0x9c, 0x41, 0xba, 0x68, 0xfe, 0x89,
-  0x4e, 0xfe, 0x8a, 0xf6, 0x2f, 0xa8, 0x41, 0xbc, 0x4d, 0x3d, 0xe6, 0x4d,
-  0x4d, 0x94, 0x44, 0xfd, 0xbf, 0x1a, 0xc3, 0xf4, 0xb5, 0x1a, 0xf7, 0x4b,
-  0x52, 0xad, 0xac, 0x1f, 0xa0, 0x14, 0xf7, 0x24, 0xf6, 0x86, 0x4d, 0xf9,
-  0xd5, 0xb9, 0x66, 0x17, 0x04, 0x30, 0x2a, 0xc2, 0x77, 0xd4, 0xf5, 0x4a,
-  0x5e, 0x92, 0x84, 0xa7, 0xcb, 0x4d, 0x53, 0x4b, 0x27, 0x5e, 0x86, 0xfa,
-  0x80, 0x10, 0xad, 0x53, 0x6e, 0xa5, 0x46, 0x33, 0xd2, 0x8a, 0x10, 0x74,
-  0x34, 0x41, 0x92, 0x40, 0xd1, 0x9f, 0x65, 0x33, 0x42, 0x9e, 0xf1, 0x83,
-  0x46, 0x1e, 0x95, 0xa4, 0x9a, 0xb6, 0xaf, 0x4c, 0xf4, 0x55, 0x70, 0x38,
-  0x19, 0x6b, 0x7b, 0xfc, 0xcd, 0x10, 0x8a, 0x53, 0x16, 0x02, 0xfc, 0x20,
-  0xcb, 0xc3, 0x7e, 0x1d, 0x9e, 0xa5, 0x1b, 0xa3, 0x57, 0x16, 0x3d, 0xfa,
-  0x39, 0xb2, 0x59, 0x74, 0xf6, 0xc5, 0x09, 0x1b, 0xb3, 0x7b, 0x05, 0xea,
-  0xd0, 0x7a, 0xce, 0x73, 0x3e, 0x7c, 0xc8, 0x1a, 0x09, 0xe7, 0x71, 0xdf,
-  0x25, 0xee, 0x24, 0x78, 0x70, 0xd3, 0x89, 0x4e, 0x73, 0xa0, 0xe0, 0xc8,
-  0x1a, 0xe7, 0x44, 0x51, 0x67, 0x4c, 0xaa, 0xbc, 0x03, 0xe4, 0x25, 0xec,
-  0x99, 0x73, 0xb0, 0xae, 0x9e, 0x4b, 0xee, 0x7e, 0x5c, 0x22, 0x68, 0x87,
-  0xc8, 0x37, 0xd2, 0x4c, 0x62, 0x7b, 0x52, 0x52, 0x08, 0x83, 0xac, 0x3d,
-  0x41, 0x45, 0x9b, 0xdb, 0x14, 0xc1, 0x35, 0x71, 0xb9, 0x62, 0x0c, 0x02,
-  0x8f, 0x60, 0xff, 0x4d, 0x70, 0x5b, 0xd9, 0xb4, 0x14, 0x0a, 0x6c, 0x56,
-  0x13, 0x75, 0x20, 0x68, 0x47, 0x8d, 0x14, 0x16, 0x7b, 0xe1, 0x2e, 0xc5,
-  0x56, 0xb3, 0x9f, 0x80, 0xb8, 0x09, 0x0f, 0x95, 0x5e, 0x2e, 0xfd, 0x91,
-  0xdb, 0xce, 0x2e, 0x25, 0x39, 0xea, 0xcb, 0x94, 0x87, 0x68, 0xcf, 0x9b,
-  0x8b, 0x65, 0x03, 0x92, 0x45, 0x52, 0x53, 0x90, 0xe5, 0x6b, 0x27, 0x85,
-  0xa7, 0xf0, 0xee, 0xba, 0x9c, 0xb2, 0xb9, 0x18, 0xc4, 0x37, 0x34, 0x67,
-  0x28, 0xb9, 0x43, 0xc6, 0x2c, 0xc1, 0xac, 0xa8, 0x85, 0xec, 0x16, 0x08,
-  0xae, 0x56, 0x90, 0xc2, 0xa8, 0x36, 0x59, 0x4a, 0x00, 0x65, 0xc5, 0x30,
-  0xde, 0x86, 0x19, 0x16, 0xe6, 0x9c, 0x8f, 0xca, 0x5a, 0xf6, 0x0b, 0xe5,
-  0xe5, 0x98, 0x2d, 0x96, 0x56, 0x10, 0xcb, 0xc2, 0x3a, 0xa0, 0x1c, 0x49,
-  0x1a, 0xb8, 0xd6, 0xcb, 0x80, 0xf4, 0xa1, 0x2e, 0xfc, 0x34, 0xa7, 0x6c,
-  0x36, 0xb3, 0x4d, 0xb2, 0x6c, 0x42, 0x7e, 0x4d, 0xec, 0x1d, 0x34, 0xca,
-  0x9c, 0x02, 0xd7, 0x60, 0xfc, 0x92, 0x94, 0x37, 0x73, 0x0a, 0xaf, 0x53,
-  0x32, 0x66, 0x9b, 0x45, 0xba, 0x6c, 0xea, 0xda, 0x90, 0x93, 0x47, 0xc5,
-  0x93, 0xf3, 0x66, 0x47, 0x50, 0x28, 0xd8, 0xb6, 0x4b, 0xc2, 0x5d, 0xfe,
-  0x42, 0xbe, 0xa6, 0x73, 0xb6, 0x44, 0x1e, 0x9d, 0x81, 0x1c, 0xe5, 0xba,
-  0x9d, 0x5d, 0x8f, 0x44, 0x1e, 0xb9, 0x46, 0x14, 0x21, 0xcf, 0x4d, 0xe9,
-  0x2d, 0x7f, 0xdc, 0x84, 0x88, 0x30, 0x8e, 0x79, 0x99, 0x6e, 0x4c, 0x1f,
-  0x5c, 0x8b, 0x5e, 0x92, 0x8d, 0x02, 0xed, 0x3c, 0xea, 0x11, 0xfb, 0x89,
-  0xb4, 0x1b, 0xf3, 0x1d, 0x66, 0x4d, 0x9f, 0xbf, 0xb9, 0xbf, 0x9e, 0x28,
-  0x2b, 0x14, 0xdf, 0xe5, 0x68, 0x57, 0x71, 0xdd, 0x80, 0xe0, 0x22, 0x60,
-  0xc1, 0x6b, 0x28, 0xc7, 0xbe, 0xdb, 0x1c, 0x51, 0x0d, 0xee, 0xbe, 0xf9,
-  0xee, 0xe0, 0xe4, 0xe3, 0xd1, 0xee, 0x9f, 0x13, 0xfa, 0xd7, 0x1e, 0xff,
-  0x6b, 0x6f, 0x3d, 0xba, 0x4a, 0x46, 0x38, 0x6d, 0xbc, 0xd9, 0x48, 0xea,
-  0x87, 0xd9, 0xa8, 0x9c, 0xda, 0x55, 0x92, 0xb9, 0xd0, 0x08, 0x54, 0x4f,
-  0x6e, 0x6f, 0xcd, 0xf9, 0x12, 0x97, 0x72, 0x57, 0x52, 0xd7, 0x82, 0x00,
-  0x51, 0x29, 0x83, 0xf8, 0x98, 0x9f, 0x7c, 0xd4, 0x20, 0x3f, 0x4b, 0x85,
-  0x97, 0x44, 0xca, 0x96, 0xa1, 0x72, 0x98, 0x42, 0x49, 0x0f, 0x74, 0x9d,
-  0x44, 0xa5, 0x06, 0x5f, 0x2d, 0x8e, 0xb4, 0xce, 0x93, 0x15, 0x81, 0xe0,
-  0x37, 0x72, 0x09, 0x28, 0x04, 0xa5, 0xd5, 0xe3, 0x77, 0x45, 0x23, 0x26,
-  0x9e, 0x97, 0x07, 0xa5, 0xde, 0xd8, 0x20, 0x74, 0xaf, 0x05, 0x20, 0xe7,
-  0x31, 0x97, 0xa2, 0x69, 0x6c, 0x24, 0x5a, 0x8b, 0x97, 0xf2, 0x65, 0xf6,
-  0xe3, 0x09, 0xed, 0xc7, 0x69, 0x29, 0xba, 0xb9, 0x26, 0x96, 0x54, 0x2d,
-  0xa2, 0x19, 0x8f, 0xda, 0xce, 0x32, 0xf2, 0x08, 0xa5, 0x4d, 0x2b, 0x64,
-  0xc6, 0x7e, 0xd9, 0x68, 0xfa, 0x89, 0x66, 0xf1, 0x10, 0xea, 0xac, 0xbc,
-  0x74, 0x12, 0xde, 0x86, 0x25, 0xfd, 0x6b, 0x50, 0xb6, 0x10, 0x61, 0x5c,
-  0xa6, 0x69, 0x30, 0x14, 0xce, 0x66, 0x93, 0xfc, 0x56, 0x73, 0x5e, 0xdc,
-  0x8e, 0x34, 0x2b, 0xf6, 0x30, 0xcd, 0xb6, 0x34, 0xe6, 0xa6, 0xd7, 0xcf,
-  0xf6, 0xfb, 0xf2, 0xef, 0x66, 0xc6, 0x53, 0xf9, 0x48, 0xec, 0x0e, 0x93,
-  0x3b, 0x69, 0x69, 0xcf, 0xdd, 0x71, 0xe7, 0x8c, 0x2f, 0xff, 0x14, 0x2b,
-  0x85, 0x8e, 0x86, 0xc5, 0x12, 0xa8, 0x49, 0x00, 0xb4, 0x05, 0x8b, 0x20,
-  0xb7, 0xad, 0x4d, 0x1a, 0xf4, 0xae, 0x28, 0x9d, 0x12, 0xb3, 0xc7, 0x4a,
-  0xde, 0x7a, 0x6e, 0xe9, 0xe5, 0x1a, 0xe8, 0x8a, 0xd4, 0xae, 0x8e, 0xb3,
-  0xe4, 0x62, 0x38, 0xba, 0xcf, 0xaa, 0x31, 0xe5, 0x8e, 0x8e, 0x8d, 0xa6,
-  0x08, 0xdd, 0xeb, 0x52, 0xdc, 0x28, 0xc1, 0xbe, 0x51, 0xf1, 0x87, 0x38,
-  0x81, 0xae, 0xff, 0xd2, 0xb5, 0xa7, 0xbd, 0x58, 0x8e, 0xcd, 0x1e, 0x1e,
-  0x58, 0x9a, 0x0f, 0xbd, 0xb0, 0xda, 0xe7, 0x5a, 0x11, 0xf8, 0xf0, 0x83,
-  0x07, 0x18, 0x17, 0xcc, 0xb0, 0xbe, 0xe8, 0xad, 0xa6, 0x6c, 0x17, 0xf4,
-  0x85, 0x49, 0x1b, 0x1c, 0x2c, 0x82, 0x7c, 0xf6, 0xc8, 0x7c, 0x5f, 0x0e,
-  0xe8, 0xb1, 0xab, 0x83, 0x84, 0xdc, 0x4b, 0x00, 0x30, 0x1f, 0x34, 0x5f,
-  0x7e, 0x13, 0xb7, 0x18, 0x2b, 0x6b, 0xca, 0xab, 0x82, 0xf8, 0x5a, 0x98,
-  0x4d, 0x34, 0x2d, 0xef, 0x08, 0x0b, 0xdd, 0x66, 0x39, 0x9a, 0x95, 0x13,
-  0xde, 0x0f, 0xa3, 0x07, 0x4b, 0x51, 0xda, 0x27, 0xdd, 0x85, 0x3f, 0x6b,
-  0x03, 0xa2, 0xd1, 0x1d, 0x60, 0xc5, 0x41, 0x07, 0xa8, 0x9d, 0x3a, 0x98,
-  0x76, 0xc3, 0x4e, 0x4f, 0xbe, 0xef, 0x1d, 0xc5, 0x40, 0xec, 0xa2, 0xc1,
-  0x88, 0x47, 0x65, 0x73, 0x6d, 0xaf, 0x1c, 0x0c, 0x98, 0x7c, 0x46, 0xc9,
-  0xe5, 0xa2, 0x81, 0x52, 0xae, 0x96, 0x59, 0x23, 0x80, 0x2c, 0x71, 0x62,
-  0x04, 0x31, 0xb3, 0x1b, 0x26, 0xb8, 0x28, 0x1b, 0x25, 0x2f, 0x13, 0x62,
-  0x9f, 0x06, 0x89, 0xd2, 0xe4, 0x48, 0x81, 0x51, 0x0a, 0x1e, 0x15, 0xf3,
-  0x5d, 0x42, 0xb9, 0xd4, 0x35, 0x71, 0x66, 0xd0, 0xd0, 0xd3, 0x20, 0x5f,
-  0x16, 0x53, 0x6d, 0xfe, 0xbf, 0xb7, 0xa8, 0x9b, 0x9c, 0xd1, 0xee, 0x0c,
-  0x39, 0x4e, 0x74, 0xa5, 0x4c, 0x9d, 0xc5, 0x48, 0xdf, 0xa9, 0xe1, 0x3e,
-  0x88, 0xa0, 0x97, 0x5a, 0x5a, 0xe5, 0x92, 0x43, 0xfb, 0x0f, 0x1b, 0x1a,
-  0x81, 0xe1, 0x55, 0xd5, 0x4c, 0x14, 0x06, 0xaa, 0x35, 0x0b, 0x21, 0xc4,
-  0x94, 0x87, 0xc2, 0x4b, 0xf6, 0x33, 0xad, 0x27, 0xd4, 0xfc, 0xee, 0x28,
-  0xe6, 0x13, 0xa8, 0x62, 0xfa, 0x0e, 0x94, 0x17, 0x8f, 0xf0, 0xa7, 0x2e,
-  0xe5, 0x44, 0xa2, 0x79, 0x12, 0x34, 0x4e, 0xd2, 0xc4, 0x32, 0xdf, 0xbb,
-  0x32, 0xc0, 0x0f, 0x06, 0xb4, 0x34, 0x5b, 0xd1, 0x74, 0x7d, 0xf9, 0x60,
-  0x5e, 0xc4, 0xcd, 0xd8, 0x37, 0xfb, 0xbf, 0x8e, 0x05, 0xdc, 0xf4, 0x72,
-  0x1d, 0x97, 0xc5, 0x5f, 0x17, 0xc5, 0xb8, 0xb1, 0x60, 0x2e, 0xe8, 0xa4,
-  0x65, 0xcf, 0xe3, 0x1d, 0x92, 0x08, 0xa3, 0x85, 0xb1, 0x74, 0x37, 0x3e,
-  0x3e, 0x24, 0x39, 0xed, 0x94, 0x32, 0x43, 0x38, 0x57, 0xba, 0x76, 0xa6,
-  0x5e, 0x72, 0xcd, 0x75, 0x6e, 0x56, 0xa8, 0x1a, 0x5f, 0x23, 0x1d, 0x10,
-  0x71, 0xcd, 0x4c, 0x9d, 0x77, 0x71, 0xf0, 0x8d, 0x34, 0x2b, 0x8a, 0x52,
-  0x4e, 0x22, 0x89, 0x52, 0x7f, 0xcb, 0x42, 0x05, 0xf5, 0xb2, 0x7e, 0x86,
-  0x50, 0xc4, 0x6b, 0x9a, 0xf3, 0x6c, 0x5a, 0x67, 0x36, 0xe6, 0x6d, 0xdf,
-  0x71, 0xa6, 0x08, 0xcc, 0x62, 0xb2, 0x8f, 0xf2, 0x8a, 0xfd, 0x5b, 0x79,
-  0xf4, 0x94, 0xa3, 0x27, 0x46, 0x05, 0x91, 0xce, 0x90, 0xa1, 0x47, 0xfb,
-  0xe4, 0x41, 0x13, 0xc7, 0xa5, 0x05, 0xdd, 0x75, 0x9a, 0x38, 0x1e, 0xdc,
-  0x3e, 0xa5, 0x9d, 0x37, 0x49, 0xc6, 0xd6, 0xa9, 0xca, 0x95, 0x57, 0x92,
-  0xb7, 0x0a, 0x39, 0x17, 0x4c, 0x6f, 0x98, 0x82, 0x98, 0x62, 0x35, 0xfd,
-  0xfe, 0x65, 0x33, 0xef, 0x47, 0x97, 0x00, 0x6b, 0xdd, 0xde, 0x02, 0xd3,
-  0x4b, 0x49, 0xbc, 0x7f, 0xaf, 0x9c, 0x23, 0xb7, 0x84, 0x76, 0x4e, 0x4e,
-  0xde, 0x71, 0x7c, 0xfa, 0xf0, 0x9c, 0xfe, 0x96, 0x5b, 0xda, 0x81, 0x01,
-  0x0e, 0x05, 0x71, 0x0a, 0x73, 0xfc, 0xf4, 0xfd, 0x77, 0xdd, 0x4c, 0x95,
-  0xcd, 0xd3, 0xe1, 0xf6, 0xb3, 0x57, 0x3b, 0x61, 0xf6, 0xf4, 0x26, 0x7d,
-  0xc3, 0xf1, 0xb1, 0x7c, 0x36, 0x78, 0xbe, 0x33, 0xd8, 0xd9, 0xea, 0xf4,
-  0x86, 0xa6, 0x3b, 0x0a, 0x6f, 0x62, 0xd8, 0x9d, 0xb2, 0x48, 0xda, 0x8b,
-  0x83, 0xa6, 0xc0, 0x25, 0x1a, 0x2b, 0xda, 0xd0, 0xcf, 0xb7, 0x39, 0xcf,
-  0x6e, 0xcd, 0x56, 0x8b, 0x19, 0xc3, 0xc9, 0x49, 0x5e, 0x8b, 0xeb, 0x93,
-  0x6e, 0x33, 0xbd, 0x5f, 0x28, 0xa1, 0xad, 0x9d, 0x64, 0x86, 0x47, 0xe8,
-  0xc2, 0x64, 0xa4, 0x6b, 0x24, 0x32, 0x50, 0x9b, 0x4e, 0x55, 0x80, 0xa6,
-  0x21, 0x3a, 0xfd, 0xbb, 0x3b, 0x40, 0x3c, 0x87, 0xde, 0xee, 0xab, 0xc1,
-  0x67, 0xfe, 0x9a, 0x92, 0x26, 0xde, 0x4f, 0xeb, 0x71, 0x9e, 0xaf, 0xb4,
-  0x31, 0x94, 0xd4, 0xe3, 0xaf, 0x0b, 0x30, 0x8b, 0x98, 0x6d, 0x9a, 0xa7,
-  0x1c, 0x56, 0x74, 0x84, 0x4c, 0x41, 0xb3, 0xa4, 0x46, 0x9a, 0x2d, 0xb6,
-  0xaa, 0x5d, 0x71, 0x69, 0x13, 0x4f, 0xb4, 0x70, 0xc8, 0xc1, 0x9d, 0x37,
-  0xc5, 0xb9, 0xee, 0xa8, 0x52, 0xe6, 0x2c, 0x30, 0x07, 0xc9, 0xbc, 0x0a,
-  0x33, 0x21, 0x8c, 0x9c, 0x00, 0x23, 0xa5, 0x99, 0xfb, 0xba, 0xa4, 0x79,
-  0x8a, 0x4d, 0x2a, 0xbc, 0x06, 0x60, 0xe1, 0xb2, 0xc6, 0x8d, 0x3d, 0xfb,
-  0x82, 0x68, 0xf9, 0xd2, 0x43, 0xa0, 0xb4, 0x0c, 0x94, 0x34, 0xa2, 0x0c,
-  0x32, 0x89, 0x68, 0x82, 0x50, 0x2e, 0xdb, 0x4f, 0x34, 0x10, 0x66, 0x3d,
-  0x49, 0xe0, 0x8a, 0x60, 0xa8, 0x83, 0x90, 0xdb, 0x12, 0xa7, 0x80, 0x9d,
-  0xad, 0x08, 0x63, 0x44, 0xcf, 0x8c, 0x0f, 0x14, 0x45, 0xd8, 0x41, 0x45,
-  0x76, 0x47, 0xd2, 0xb8, 0x16, 0x75, 0xa2, 0xaa, 0x72, 0x72, 0xe6, 0xd8,
-  0x40, 0x38, 0xab, 0x64, 0x84, 0x41, 0xa4, 0x0b, 0x7a, 0x12, 0x49, 0x7f,
-  0x1b, 0xe3, 0x74, 0xd6, 0x96, 0xf3, 0xa9, 0x00, 0xc9, 0x0e, 0x91, 0xc6,
-  0x3c, 0xcd, 0xaa, 0x5d, 0xba, 0xe9, 0x40, 0x42, 0xec, 0xd0, 0x09, 0x4d,
-  0xc4, 0xd9, 0x43, 0x70, 0x02, 0xf6, 0x8c, 0x30, 0xe9, 0x06, 0xe6, 0x3a,
-  0xad, 0x85, 0xb0, 0x7a, 0xc4, 0xbb, 0x71, 0xc5, 0xd6, 0xa9, 0xd2, 0xbb,
-  0xc7, 0xf7, 0xa3, 0xb7, 0x6b, 0x64, 0xa6, 0xa7, 0x70, 0x95, 0x78, 0x1c,
-  0x61, 0xf0, 0x11, 0xf8, 0x38, 0xb7, 0x18, 0xd4, 0x2c, 0x9d, 0x32, 0x31,
-  0xac, 0x99, 0xcc, 0x46, 0x8c, 0x1b, 0x96, 0xeb, 0x5f, 0xae, 0x40, 0x97,
-  0x3b, 0xa7, 0xa2, 0x1b, 0x45, 0xcb, 0x73, 0xde, 0x21, 0x1a, 0xc2, 0xb0,
-  0xcc, 0x95, 0xc7, 0xf0, 0xec, 0x27, 0x1c, 0x0a, 0x37, 0xba, 0x9e, 0x87,
-  0x99, 0xe1, 0x05, 0x80, 0x63, 0xc8, 0x1b, 0xa6, 0x30, 0x52, 0xc5, 0x52,
-  0x0e, 0x98, 0x91, 0x8b, 0xb6, 0x15, 0xd2, 0xc4, 0x2d, 0xd3, 0xc8, 0x3c,
-  0xab, 0x48, 0x0a, 0x02, 0xee, 0xdb, 0x57, 0xa8, 0x69, 0xec, 0x62, 0x31,
-  0x9b, 0xff, 0xf0, 0xeb, 0x63, 0x60, 0x6f, 0xcd, 0xa1, 0x2f, 0x24, 0x27,
-  0x93, 0xfb, 0xcf, 0xcc, 0xe0, 0xd6, 0x08, 0xbb, 0xca, 0xad, 0xc9, 0x98,
-  0x26, 0x2d, 0xd6, 0xaf, 0x8e, 0x8e, 0x9c, 0xa8, 0x32, 0x2c, 0xb0, 0x40,
-  0xd1, 0x69, 0x29, 0xb2, 0x40, 0x0a, 0xa9, 0x86, 0xc9, 0x52, 0x87, 0x85,
-  0x8e, 0xce, 0x17, 0xbe, 0xae, 0xb9, 0xc3, 0x69, 0xcd, 0x9c, 0x0e, 0xac,
-  0x58, 0x04, 0x60, 0x5f, 0xb7, 0x5f, 0x99, 0x69, 0x3d, 0x0b, 0xb1, 0x46,
-  0xf2, 0xf9, 0x78, 0x29, 0x04, 0xac, 0x49, 0xc7, 0x1c, 0xb7, 0x53, 0x97,
-  0x69, 0x80, 0x18, 0xdd, 0x07, 0xda, 0x9e, 0x9c, 0x32, 0x31, 0xcf, 0x9f,
-  0xaa, 0x25, 0x14, 0x12, 0xf8, 0x0f, 0x00, 0xb8, 0xe9, 0x8e, 0x30, 0xe7,
-  0x93, 0x6e, 0x49, 0xcd, 0x82, 0xf0, 0x5b, 0x53, 0x2e, 0x19, 0x41, 0x1a,
-  0xc6, 0x9b, 0x23, 0x7b, 0xe5, 0x0d, 0xdd, 0xec, 0x5f, 0x8a, 0xc3, 0xc3,
-  0x1c, 0xd5, 0xd4, 0x0f, 0x82, 0x48, 0x0a, 0x0c, 0x63, 0xd2, 0x24, 0xdd,
-  0x9d, 0xa6, 0x21, 0xde, 0x9c, 0xb9, 0x1c, 0xc7, 0xd7, 0xfe, 0xec, 0xf1,
-  0x8e, 0x23, 0x2a, 0xc8, 0x9a, 0xd9, 0xf6, 0xff, 0xa5, 0x3b, 0x79, 0x6f,
-  0x1e, 0x9f, 0xbd, 0x5f, 0x3a, 0x7d, 0xab, 0x67, 0x8f, 0x29, 0x55, 0x15,
-  0x9c, 0xf8, 0xc6, 0x73, 0xf4, 0x20, 0x88, 0xce, 0xb6, 0x82, 0x75, 0xf8,
-  0xb4, 0xa5, 0x8c, 0x67, 0x14, 0xbd, 0xf9, 0xad, 0x56, 0x1d, 0x9b, 0x11,
-  0x16, 0x28, 0x75, 0x3e, 0xde, 0x1c, 0x7b, 0x2b, 0xb1, 0xf6, 0x3e, 0xf1,
-  0x8f, 0xe8, 0x8c, 0x68, 0x81, 0x0c, 0xbd, 0x7b, 0xb3, 0xff, 0x1b, 0xde,
-  0xcc, 0x23, 0xf8, 0x54, 0xfa, 0xf1, 0xe6, 0x34, 0xd5, 0x43, 0x94, 0xc6,
-  0x60, 0x7c, 0x5f, 0xea, 0x25, 0xf5, 0xd8, 0xe0, 0x5a, 0x58, 0x45, 0x20,
-  0x36, 0xc4, 0x45, 0x67, 0x91, 0x3b, 0x36, 0xfe, 0x16, 0x71, 0x62, 0xda,
-  0x7c, 0x1b, 0x4b, 0x44, 0xc4, 0x50, 0x51, 0xbd, 0xc1, 0xb6, 0x7a, 0xed,
-  0x39, 0x23, 0x7a, 0x15, 0xdc, 0x07, 0xb2, 0xd0, 0xf1, 0xe6, 0x72, 0x18,
-  0xa6, 0xb2, 0x7c, 0xc4, 0x96, 0x1a, 0x5d, 0xbe, 0xff, 0x3f, 0x1b, 0x22,
-  0xbb, 0x47, 0xb1, 0x1b, 0xa4, 0xea, 0xc2, 0x15, 0x13, 0x17, 0x15, 0x82,
-  0x63, 0x4e, 0x5a, 0xbc, 0xe6, 0x1d, 0x21, 0x80, 0xbb, 0x96, 0x5c, 0xe3,
-  0x14, 0xb3, 0x9b, 0x22, 0xb2, 0x99, 0x33, 0x52, 0xfc, 0x8d, 0xbd, 0x79,
-  0x26, 0x7d, 0x1a, 0x5e, 0x5f, 0x76, 0xed, 0x00, 0xfb, 0x70, 0xc5, 0x66,
-  0xb5, 0x9b, 0x33, 0xbe, 0x2f, 0x83, 0x1d, 0xb8, 0xfc, 0x76, 0x54, 0x8e,
-  0x2f, 0xb9, 0xde, 0x5b, 0x97, 0xe5, 0xee, 0xe7, 0xad, 0xcb, 0xd2, 0xbd,
-  0xb3, 0xea, 0x9a, 0x1c, 0x66, 0x8c, 0xf5, 0xf1, 0x7d, 0x6e, 0x78, 0x09,
-  0x08, 0x0a, 0xf0, 0xeb, 0x2a, 0x6a, 0x04, 0xc6, 0x09, 0x96, 0x98, 0x5e,
-  0xed, 0xea, 0x00, 0x02, 0xd3, 0x70, 0x98, 0x79, 0x46, 0xf5, 0x53, 0xe0,
-  0x45, 0x94, 0xf9, 0x64, 0x54, 0x95, 0x77, 0x35, 0xb4, 0x27, 0xb5, 0xa7,
-  0x52, 0x46, 0x17, 0x5e, 0xa7, 0x75, 0xa8, 0x18, 0x4e, 0x2d, 0x17, 0xd9,
-  0x37, 0x17, 0xef, 0x4f, 0x98, 0x6f, 0x95, 0x53, 0xb0, 0x28, 0x63, 0x44,
-  0xfa, 0xbc, 0x18, 0xcd, 0xcc, 0xfa, 0x1b, 0x05, 0xa5, 0x61, 0x69, 0xa6,
-  0x02, 0x32, 0xc8, 0x13, 0x43, 0x54, 0x48, 0x82, 0x8a, 0xf3, 0x98, 0xaf,
-  0x5f, 0x5c, 0x41, 0x2e, 0x9a, 0x26, 0x8b, 0x8b, 0xa4, 0xa5, 0xb5, 0x60,
-  0x8f, 0x28, 0xbc, 0x62, 0xfb, 0xbe, 0x7f, 0x77, 0x77, 0xd7, 0xa7, 0xde,
-  0x39, 0xc5, 0x84, 0x4c, 0xb6, 0x43, 0xa2, 0x6b, 0x61, 0xfb, 0xa5, 0xff,
-  0x8e, 0x96, 0x82, 0x1e, 0x09, 0x4e, 0x9f, 0xa7, 0xa9, 0xa1, 0x2c, 0x00,
-  0x68, 0x0d, 0xad, 0x43, 0x81, 0x14, 0x2f, 0xcb, 0x09, 0x0c, 0x16, 0x8c,
-  0xb4, 0xad, 0x6c, 0x75, 0x45, 0x9a, 0x53, 0xbe, 0x1c, 0xbb, 0xaf, 0xaf,
-  0x7f, 0x91, 0x2a, 0x42, 0x2a, 0x91, 0xc4, 0x24, 0x16, 0x15, 0xf9, 0x9f,
-  0xd8, 0xc2, 0x88, 0x41, 0x9d, 0x45, 0x27, 0x51, 0xbf, 0xbe, 0x8d, 0x8e,
-  0xb5, 0x2c, 0x13, 0xa5, 0x31, 0xa5, 0xb6, 0xbd, 0xe3, 0x1b, 0xd1, 0x13,
-  0x99, 0x73, 0x02, 0x00, 0x76, 0xac, 0xa6, 0xd9, 0x6c, 0xa6, 0x75, 0xb0,
-  0xf4, 0xa7, 0xf0, 0xe7, 0x06, 0x1a, 0x5e, 0x54, 0xc7, 0x76, 0x1c, 0xbf,
-  0xb5, 0xa3, 0x75, 0x55, 0xf3, 0x0e, 0xd4, 0x1b, 0x20, 0xdb, 0x00, 0xaf,
-  0x6b, 0xd9, 0x76, 0xcf, 0xf4, 0x83, 0x08, 0xa2, 0xb8, 0x6b, 0x7a, 0x5e,
-  0xa4, 0x26, 0x27, 0x87, 0x49, 0x3b, 0x7f, 0x42, 0x39, 0xe7, 0x66, 0x59,
-  0x75, 0xc5, 0x28, 0x21, 0x26, 0x24, 0x8b, 0xa6, 0xa7, 0xa6, 0x89, 0xc7,
-  0xbb, 0x92, 0x24, 0xff, 0xda, 0xe7, 0x4b, 0x15, 0x9e, 0x95, 0x05, 0xa5,
-  0x5c, 0x88, 0x0b, 0x78, 0xa3, 0x3f, 0x61, 0xb1, 0x32, 0x49, 0x0b, 0x33,
-  0x13, 0xe6, 0xc4, 0x86, 0x10, 0x8b, 0xe9, 0xf4, 0xcd, 0xb4, 0x5c, 0xd4,
-  0x0f, 0x1b, 0x89, 0x50, 0x6c, 0x0b, 0x2b, 0x6d, 0xc3, 0x99, 0x85, 0x58,
-  0x4b, 0xb3, 0xbe, 0x8b, 0xe2, 0x46, 0xef, 0x45, 0x82, 0x87, 0xd7, 0xec,
-  0x5b, 0xec, 0x34, 0xb7, 0xe1, 0x7d, 0xec, 0x5f, 0xfd, 0xb6, 0xa3, 0xb3,
-  0x0c, 0x4f, 0x24, 0xdb, 0x79, 0x4f, 0x33, 0xf4, 0x5c, 0x14, 0x21, 0x66,
-  0xe5, 0x25, 0xad, 0xa8, 0x8f, 0x6d, 0x90, 0xee, 0x0d, 0x26, 0x81, 0x53,
-  0x2f, 0xb9, 0x0b, 0xff, 0x43, 0xde, 0x2c, 0xc1, 0xfc, 0xbb, 0xb2, 0x55,
-  0x8c, 0xf9, 0x77, 0x5c, 0x38, 0x9c, 0x9b, 0x6c, 0x29, 0xa9, 0xfd, 0x7c,
-  0xa3, 0x41, 0x72, 0x16, 0x41, 0x64, 0x21, 0x20, 0x6a, 0x9b, 0x4b, 0x7d,
-  0xa2, 0x2d, 0xb9, 0xd6, 0x52, 0x97, 0x84, 0x74, 0x23, 0x91, 0x68, 0xaa,
-  0x49, 0x21, 0xd6, 0x64, 0x80, 0xf4, 0x60, 0xd3, 0x92, 0x76, 0x96, 0xb5,
-  0x3e, 0xad, 0xa7, 0x98, 0xb8, 0x3e, 0x29, 0x63, 0x97, 0xa2, 0xe3, 0x6a,
-  0x4c, 0xb3, 0xaf, 0x9d, 0xdd, 0x9c, 0xc1, 0x99, 0xf1, 0x4e, 0x2f, 0xcd,
-  0x07, 0x84, 0x80, 0x25, 0xfe, 0xa4, 0x9b, 0xac, 0x63, 0x74, 0x71, 0xd2,
-  0xa9, 0x13, 0x2b, 0xc1, 0x60, 0x19, 0xa2, 0xb7, 0x02, 0xd2, 0xe4, 0x9f,
-  0x6d, 0xef, 0xb6, 0x71, 0x56, 0x57, 0xf7, 0x0a, 0x5a, 0xee, 0x2f, 0x74,
-  0x84, 0x69, 0x4e, 0x04, 0xf2, 0xeb, 0xc7, 0x0a, 0x95, 0x92, 0xd6, 0xc4,
-  0xd3, 0xe5, 0x9b, 0x7a, 0xd9, 0x34, 0xbb, 0xe2, 0x31, 0xbd, 0x3e, 0x39,
-  0xfa, 0xee, 0xe8, 0x24, 0xb8, 0xc0, 0xbe, 0x1e, 0x0e, 0xb7, 0x6f, 0xb2,
-  0x6a, 0x84, 0x42, 0x42, 0xe4, 0xf3, 0x4e, 0xf0, 0x9c, 0xc5, 0xeb, 0x78,
-  0x52, 0xfd, 0xce, 0x65, 0x45, 0x0b, 0x9a, 0x35, 0x30, 0xf6, 0x89, 0x39,
-  0x9f, 0x3f, 0x29, 0xa4, 0x9f, 0x48, 0xb8, 0x10, 0x60, 0x18, 0x6e, 0xa9,
-  0x71, 0x95, 0x4d, 0xb8, 0xd0, 0x4e, 0x08, 0x09, 0x2b, 0x90, 0x5d, 0x95,
-  0xbc, 0xc5, 0x52, 0x32, 0x5c, 0x16, 0xd1, 0x0f, 0x3b, 0x88, 0xe0, 0x8d,
-  0x79, 0x69, 0xae, 0x90, 0x87, 0xe4, 0xad, 0x7c, 0xb3, 0x66, 0xe7, 0x26,
-  0xcd, 0x06, 0x93, 0xa6, 0xb0, 0xc9, 0x70, 0xfa, 0x6d, 0xff, 0x60, 0xd8,
-  0x7f, 0x7b, 0x74, 0x72, 0xf4, 0xf5, 0xc1, 0xc5, 0x91, 0x32, 0x5b, 0x92,
-  0xfb, 0x7f, 0x89, 0x32, 0xc4, 0xf2, 0xee, 0x5b, 0x99, 0x16, 0x8c, 0x9f,
-  0x98, 0x51, 0x9b, 0x9c, 0xf9, 0x8a, 0x35, 0x17, 0x90, 0xab, 0xc1, 0x91,
-  0x89, 0x02, 0xf8, 0x4c, 0x79, 0x19, 0x6f, 0xce, 0x9c, 0xbe, 0xe9, 0x4c,
-  0xba, 0x1a, 0x8c, 0x40, 0x52, 0x41, 0x3e, 0x16, 0x84, 0x17, 0xce, 0x6d,
-  0xfa, 0x1c, 0x8f, 0xde, 0x9b, 0x7c, 0x6f, 0x66, 0x5b, 0x0b, 0x0c, 0x06,
-  0xc8, 0x25, 0xc6, 0xfb, 0x51, 0xc1, 0xa5, 0x07, 0x10, 0x7c, 0x7c, 0x8b,
-  0x27, 0x3b, 0x4c, 0x93, 0x03, 0xeb, 0x4e, 0xa3, 0xa3, 0x2e, 0xbf, 0x8a,
-  0xe4, 0x87, 0xd3, 0x06, 0xaa, 0xc7, 0xd7, 0xd9, 0x4c, 0x34, 0x4a, 0x0a,
-  0x38, 0x23, 0x6b, 0x92, 0x13, 0xcc, 0x24, 0x25, 0x9f, 0x0f, 0xfa, 0x28,
-  0x83, 0x60, 0x46, 0x3c, 0x07, 0x9b, 0x37, 0xc6, 0xe3, 0x78, 0x47, 0xfc,
-  0xb3, 0xe4, 0xa4, 0x27, 0x08, 0x06, 0xb2, 0x34, 0x07, 0x40, 0x8b, 0x31,
-  0x78, 0xbe, 0x68, 0x85, 0x7e, 0xad, 0xbc, 0xe4, 0xf2, 0x1a, 0xdd, 0xcb,
-  0xdf, 0x12, 0x59, 0x7a, 0x04, 0x74, 0x14, 0xd9, 0xc1, 0x8f, 0x20, 0x30,
-  0x55, 0xf5, 0xa5, 0x4e, 0xfe, 0x4a, 0x0f, 0xa7, 0xc0, 0x5b, 0x39, 0x1b,
-  0x06, 0x3e, 0x25, 0x4e, 0x05, 0x0c, 0x0e, 0xed, 0x52, 0xd8, 0x97, 0xc4,
-  0xda, 0xa9, 0xbb, 0xda, 0x5f, 0xb6, 0xd1, 0x94, 0x65, 0x93, 0x97, 0x32,
-  0x91, 0xb3, 0x2c, 0xd4, 0xb4, 0x4f, 0x14, 0x0c, 0x2d, 0xee, 0x5a, 0xe2,
-  0x0a, 0xd5, 0xbf, 0x86, 0x0c, 0xc3, 0x36, 0xd1, 0xa8, 0x9f, 0xcd, 0x03,
-  0xc2, 0xc6, 0xcd, 0x77, 0xca, 0xc6, 0x6a, 0xf5, 0x3c, 0xbf, 0x1c, 0x81,
-  0xc7, 0x1d, 0x7e, 0x74, 0x76, 0xce, 0x35, 0x01, 0x4f, 0xe8, 0x2f, 0x12,
-  0xb4, 0xa9, 0x63, 0x24, 0x33, 0xc2, 0x06, 0x4d, 0x18, 0x83, 0x0c, 0x5e,
-  0x7f, 0x1b, 0x8b, 0x55, 0x60, 0x19, 0xc3, 0x09, 0x85, 0x68, 0x53, 0x0e,
-  0x44, 0x2c, 0x79, 0xcf, 0xab, 0x61, 0x43, 0x3d, 0xa1, 0x2e, 0x08, 0xaf,
-  0x1e, 0x3a, 0xc1, 0x90, 0x48, 0xf5, 0xad, 0x9f, 0xd2, 0x2f, 0x49, 0xf7,
-  0x53, 0xe0, 0xc0, 0x92, 0x69, 0x6c, 0x51, 0xe2, 0x52, 0xb3, 0x40, 0x61,
-  0x57, 0xa8, 0x78, 0x94, 0x9a, 0xae, 0x0c, 0x3a, 0x43, 0x05, 0x67, 0x3d,
-  0x91, 0x5a, 0x85, 0xae, 0x74, 0xb0, 0xf5, 0x8b, 0x5f, 0x4c, 0xe1, 0xb4,
-  0x34, 0x60, 0x05, 0x0f, 0xf7, 0x24, 0x44, 0x9d, 0xda, 0x70, 0x25, 0xaa,
-  0x25, 0x22, 0x76, 0x1d, 0x68, 0xdb, 0x02, 0xb6, 0xe6, 0x31, 0x20, 0xbb,
-  0x98, 0xa3, 0xae, 0xac, 0x9c, 0x5d, 0x4a, 0x64, 0x2b, 0x05, 0x8f, 0x21,
-  0xcc, 0x8c, 0x11, 0x6b, 0x13, 0x00, 0x69, 0x5d, 0xa7, 0x45, 0xe4, 0xd4,
-  0x99, 0x89, 0xb7, 0x65, 0x03, 0x30, 0x4a, 0x59, 0xb6, 0x88, 0x42, 0x4d,
-  0x7b, 0xa3, 0x85, 0xf1, 0xa5, 0xea, 0x6e, 0xf7, 0xa4, 0xb0, 0xe7, 0xe4,
-  0x12, 0x97, 0xae, 0xf0, 0xcc, 0x10, 0x6b, 0x85, 0xee, 0xb7, 0x32, 0xb6,
-  0xab, 0x44, 0xbc, 0x38, 0x47, 0x7d, 0x6b, 0x0b, 0x2e, 0x71, 0x01, 0x67,
-  0x89, 0x45, 0xf4, 0xd4, 0x48, 0x24, 0xf0, 0x18, 0xeb, 0xa8, 0x0c, 0x57,
-  0x3b, 0xd3, 0x00, 0xcb, 0x87, 0x7b, 0xbd, 0x08, 0xb0, 0xe7, 0x8c, 0x25,
-  0x37, 0xdf, 0x46, 0x77, 0xc9, 0x2b, 0x63, 0x83, 0x79, 0xb4, 0x79, 0x82,
-  0xef, 0xbf, 0x45, 0xe7, 0xe8, 0x3b, 0x78, 0x01, 0x27, 0xdf, 0xe8, 0x0f,
-  0x5c, 0xc5, 0x8d, 0x10, 0x3b, 0xbc, 0x95, 0x47, 0x99, 0xf9, 0x5e, 0x4e,
-  0x65, 0x22, 0xfc, 0x32, 0x2b, 0x21, 0x6a, 0xb5, 0x36, 0x1b, 0x10, 0x99,
-  0xe3, 0x25, 0xfb, 0x63, 0xe8, 0x5d, 0x0a, 0xc5, 0x67, 0x89, 0x5f, 0x63,
-  0x05, 0x1b, 0x02, 0xda, 0xfb, 0x59, 0x4f, 0x42, 0x61, 0x00, 0xab, 0x05,
-  0x11, 0x65, 0x33, 0x81, 0x63, 0x4b, 0x6e, 0xa1, 0x4f, 0xa6, 0xf5, 0x6d,
-  0xfc, 0x84, 0xd7, 0xb7, 0xd1, 0x13, 0xfe, 0x84, 0x73, 0xee, 0x6c, 0x9f,
-  0xa3, 0xb3, 0xe1, 0x77, 0x89, 0xee, 0x95, 0xd8, 0x09, 0x97, 0x23, 0xee,
-  0x46, 0x47, 0x9b, 0xde, 0x3f, 0xe6, 0xcb, 0xcf, 0x79, 0xd4, 0x5d, 0x1f,
-  0x9c, 0x73, 0xf3, 0x7d, 0x39, 0xdc, 0x67, 0x07, 0xc3, 0xef, 0xbc, 0x63,
-  0xed, 0x6d, 0x81, 0x58, 0xce, 0x99, 0x05, 0x2a, 0x53, 0x7c, 0x91, 0xb7,
-  0x0e, 0x35, 0x16, 0xdd, 0xef, 0xf5, 0xed, 0x53, 0xf6, 0xbb, 0xe9, 0x49,
-  0xb0, 0xdf, 0x83, 0x39, 0x5e, 0xb5, 0xdf, 0xfd, 0x85, 0x6a, 0x63, 0x20,
-  0xbd, 0xdd, 0x5e, 0x70, 0xa1, 0xb9, 0x6b, 0xd4, 0x2c, 0x8d, 0x6f, 0x73,
-  0x20, 0x61, 0x79, 0x6b, 0x87, 0x10, 0x31, 0xf4, 0xf3, 0x97, 0x6d, 0x74,
-  0xf3, 0x42, 0xb0, 0xd1, 0x75, 0x3d, 0xe3, 0x3b, 0x7d, 0xd9, 0x46, 0x57,
-  0x84, 0x68, 0xc6, 0x9b, 0xdc, 0xdf, 0xe3, 0xe1, 0xfe, 0xf6, 0x76, 0xad,
-  0x9f, 0x04, 0x1b, 0xce, 0x90, 0x02, 0x95, 0x6c, 0x62, 0xb7, 0x97, 0xd7,
-  0x1e, 0xa9, 0xfa, 0xd8, 0x53, 0x28, 0x1b, 0xf2, 0xfe, 0x42, 0xef, 0xba,
-  0xcb, 0x97, 0xf5, 0xc1, 0xec, 0x95, 0xea, 0xd2, 0xb8, 0xc5, 0x71, 0x6d,
-  0xc3, 0x54, 0xf7, 0xd3, 0xaa, 0x2f, 0x83, 0x13, 0xd9, 0x62, 0x2d, 0xc9,
-  0xa2, 0x79, 0xb5, 0x75, 0x46, 0x10, 0x01, 0x10, 0xe6, 0xb4, 0xce, 0x69,
-  0x51, 0xf7, 0x5d, 0x21, 0xc0, 0xd7, 0xf6, 0xaf, 0x81, 0x96, 0xfe, 0xf6,
-  0xc3, 0xb0, 0x73, 0x5c, 0xeb, 0x8c, 0x11, 0xf3, 0x57, 0x38, 0x7a, 0xe6,
-  0xf7, 0x89, 0xcb, 0xfd, 0xb1, 0x85, 0x37, 0xa4, 0xc9, 0x20, 0xdf, 0x85,
-  0x3e, 0xd1, 0x4d, 0x30, 0x92, 0x8c, 0x45, 0xd4, 0xae, 0x84, 0xbf, 0x8f,
-  0x7c, 0x2e, 0x5e, 0xef, 0x24, 0xfb, 0x95, 0x3c, 0x29, 0x11, 0x4e, 0x24,
-  0x49, 0xd8, 0xa1, 0x7e, 0x6a, 0x0d, 0x30, 0xa1, 0x0b, 0x15, 0x5e, 0x22,
-  0x5b, 0x33, 0xa0, 0x48, 0xbc, 0xda, 0x87, 0xb1, 0xc8, 0xcc, 0x26, 0xda,
-  0x2b, 0x14, 0xb2, 0xb3, 0xb5, 0x52, 0x9b, 0xe2, 0x29, 0x9c, 0xdf, 0x3e,
-  0xef, 0xd3, 0xe3, 0xaa, 0x3c, 0xc9, 0x0f, 0x5f, 0xe2, 0x87, 0x83, 0xee,
-  0x44, 0x07, 0xb6, 0xa6, 0x14, 0xea, 0xb1, 0x5e, 0xc6, 0x45, 0x31, 0x21,
-  0xe2, 0x62, 0xea, 0xb6, 0x16, 0xdd, 0xbd, 0x4b, 0x1d, 0xe1, 0x32, 0x09,
-  0x72, 0x21, 0x47, 0x31, 0x7b, 0xa9, 0x3b, 0xb9, 0x29, 0xaa, 0xef, 0x7a,
-  0x1e, 0xc5, 0x67, 0xdd, 0xf0, 0x5b, 0xab, 0xc7, 0xaf, 0x65, 0x98, 0xf1,
-  0x25, 0xe7, 0x35, 0xf7, 0x2c, 0xf9, 0x51, 0xce, 0x75, 0x03, 0x5e, 0xe7,
-  0xf3, 0xbe, 0xbe, 0xc9, 0x42, 0x78, 0x96, 0xde, 0xc8, 0xd5, 0xf8, 0x9c,
-  0x96, 0x21, 0x32, 0x48, 0xae, 0xeb, 0xe5, 0x07, 0x76, 0x68, 0xdb, 0xd8,
-  0x5d, 0x23, 0x2a, 0x4b, 0x63, 0xc9, 0xc5, 0x60, 0xde, 0xf0, 0x37, 0x62,
-  0x69, 0x30, 0x0a, 0x5c, 0xf5, 0x7d, 0x16, 0x0a, 0x79, 0x47, 0x2f, 0xec,
-  0xbb, 0x8f, 0xae, 0x9f, 0xdb, 0x0f, 0xab, 0xd6, 0x4f, 0xe7, 0xec, 0xbf,
-  0xc7, 0xfa, 0xbd, 0xfc, 0xdd, 0xd6, 0xef, 0xe5, 0x7f, 0x8b, 0xf5, 0x7b,
-  0xf9, 0x8f, 0xaf, 0xdf, 0xf3, 0xee, 0xfa, 0xbd, 0xfc, 0xef, 0xb2, 0x7e,
-  0x5a, 0xb1, 0x42, 0x57, 0x2f, 0x0b, 0xd6, 0x8f, 0x3c, 0x21, 0x7c, 0x85,
-  0x80, 0x99, 0x0a, 0xda, 0x10, 0x4d, 0xb7, 0xbe, 0xc9, 0x81, 0x07, 0xc1,
-  0x9a, 0xb1, 0x67, 0x57, 0x21, 0x8f, 0xc8, 0x47, 0x8f, 0x93, 0x2d, 0x48,
-  0xe9, 0x02, 0x65, 0xea, 0x3a, 0x3e, 0x4b, 0x6c, 0x07, 0xbc, 0x65, 0x70,
-  0xfc, 0x3c, 0x50, 0x72, 0xa2, 0x2e, 0xd7, 0x9a, 0xfc, 0x70, 0x66, 0x02,
-  0x38, 0xd9, 0xac, 0x76, 0x89, 0x80, 0x31, 0x0e, 0x1e, 0x33, 0x79, 0xfb,
-  0xaf, 0x69, 0xbe, 0xfa, 0xfc, 0xf8, 0x17, 0xd1, 0xfc, 0x1f, 0x14, 0x06,
-  0x73, 0x5d, 0x8a, 0xb9, 0xd9, 0xbd, 0xa9, 0x7b, 0xf2, 0xb2, 0x2d, 0xab,
-  0x98, 0xa0, 0x4b, 0x38, 0xee, 0x3f, 0xb6, 0x64, 0x6f, 0xa1, 0x19, 0x2c,
-  0x66, 0x73, 0xc9, 0x0b, 0x7c, 0x24, 0x2f, 0x0a, 0xfa, 0xe7, 0x56, 0xf2,
-  0x3d, 0xb2, 0x9e, 0xd8, 0xb3, 0x2a, 0xb9, 0x02, 0xb6, 0xaa, 0xad, 0x02,
-  0xb1, 0x35, 0x6c, 0xa1, 0xce, 0xcd, 0x88, 0xcf, 0x75, 0x65, 0x16, 0xa4,
-  0xf9, 0x1b, 0x83, 0xda, 0x6d, 0x99, 0xd8, 0xac, 0xf0, 0x35, 0x24, 0xc1,
-  0x44, 0xf3, 0x46, 0x92, 0x8f, 0x46, 0xf9, 0x0e, 0xe9, 0x5a, 0xe4, 0x44,
-  0x09, 0xea, 0x34, 0xf3, 0x70, 0x99, 0xd7, 0x4d, 0x53, 0x03, 0xc9, 0x96,
-  0xf0, 0x8a, 0xac, 0x6a, 0xef, 0x41, 0x65, 0x12, 0x83, 0x12, 0xab, 0x2a,
-  0x03, 0xbb, 0x50, 0x72, 0xd1, 0x2d, 0x9b, 0x67, 0x71, 0xab, 0xc0, 0x79,
-  0xf0, 0xa9, 0xf8, 0x1c, 0xe0, 0xfd, 0x51, 0x98, 0x01, 0xa3, 0x30, 0x4e,
-  0x1e, 0xf1, 0xbf, 0x60, 0xff, 0x2e, 0x01, 0x71, 0xb3, 0x0e, 0xe1, 0xdb,
-  0xa1, 0xc1, 0x9a, 0xfb, 0x10, 0xf1, 0xc1, 0xda, 0x2a, 0xf8, 0x26, 0xe3,
-  0x02, 0xaf, 0x33, 0x3f, 0x0b, 0xd1, 0x12, 0xa8, 0xb1, 0x43, 0x98, 0x81,
-  0x47, 0x66, 0x70, 0x82, 0x62, 0x0b, 0xf8, 0xd4, 0x91, 0xeb, 0x2a, 0xb3,
-  0xb5, 0x2e, 0x6c, 0x21, 0x0b, 0x86, 0x20, 0x11, 0x85, 0xda, 0x84, 0x19,
-  0x2d, 0xfe, 0x89, 0x59, 0x7f, 0x1e, 0xaa, 0xd3, 0x17, 0x49, 0xd9, 0x15,
-  0xc7, 0x42, 0x57, 0x21, 0x08, 0x1d, 0x4f, 0x9a, 0x57, 0xe9, 0x8c, 0xc3,
-  0xb3, 0xb2, 0x8b, 0x8f, 0x8a, 0xa6, 0x2a, 0xe7, 0x0f, 0xc9, 0xd7, 0x29,
-  0x0d, 0x0b, 0x6a, 0x61, 0x9a, 0xcd, 0x82, 0x9c, 0x0f, 0x2e, 0x7f, 0x26,
-  0x5a, 0x1a, 0x97, 0x42, 0xd3, 0x11, 0x42, 0xaf, 0xe4, 0x69, 0x49, 0xa8,
-  0x6e, 0xf9, 0x84, 0xfc, 0x79, 0x9a, 0x3b, 0x06, 0xd8, 0xe4, 0x70, 0x78,
-  0x12, 0x2a, 0xd3, 0xca, 0xdb, 0xbe, 0x32, 0xc7, 0x17, 0xad, 0xf5, 0xdb,
-  0x27, 0xca, 0x8c, 0x9c, 0x1b, 0x7f, 0x1d, 0x3d, 0xcc, 0x32, 0xee, 0x6c,
-  0xaa, 0xb9, 0xe0, 0xc2, 0x78, 0x9d, 0x8c, 0xab, 0x87, 0x39, 0x19, 0x68,
-  0xfc, 0xb2, 0x9c, 0x3d, 0xea, 0x1f, 0xb3, 0xff, 0xad, 0x4c, 0x23, 0xfc,
-  0x88, 0x08, 0x99, 0xbc, 0x0a, 0x41, 0x4c, 0xc1, 0x4c, 0x33, 0x5d, 0x14,
-  0x5c, 0x55, 0xc1, 0x4c, 0x32, 0x6b, 0x02, 0xd6, 0x00, 0x57, 0x4a, 0x22,
-  0xa0, 0xcd, 0x42, 0x6d, 0x88, 0x0e, 0x07, 0x30, 0xdc, 0x3a, 0xc8, 0xb4,
-  0x24, 0x9e, 0x59, 0x78, 0xb4, 0xb7, 0xf4, 0x62, 0x90, 0x37, 0x3a, 0xe5,
-  0x2c, 0x55, 0x04, 0x5b, 0x8a, 0xd8, 0x94, 0x32, 0xa6, 0x8b, 0x80, 0xb2,
-  0xc0, 0x63, 0xb6, 0x09, 0xaf, 0x2a, 0xd4, 0xb0, 0x24, 0xc3, 0x0d, 0x9c,
-  0x19, 0x31, 0x0e, 0x9c, 0x9e, 0x5f, 0x4c, 0x0f, 0x84, 0x6d, 0x72, 0xe4,
-  0xef, 0xc2, 0x23, 0x0f, 0x08, 0x78, 0x1f, 0x38, 0x35, 0x39, 0x02, 0x8e,
-  0x80, 0x90, 0xac, 0x3b, 0xf8, 0xa6, 0xb3, 0xb4, 0xce, 0xe9, 0xd2, 0xb8,
-  0x47, 0x55, 0x3d, 0x81, 0xaa, 0x2d, 0xc2, 0x9a, 0x6e, 0x04, 0x26, 0xca,
-  0x0b, 0x86, 0xb9, 0x82, 0x13, 0x02, 0x77, 0x0d, 0x19, 0x94, 0xa6, 0x37,
-  0x66, 0xa0, 0xf1, 0xcc, 0xe1, 0xd6, 0x78, 0x7f, 0xbb, 0xbb, 0xe6, 0xfc,
-  0x78, 0x78, 0x98, 0x9c, 0x0e, 0x5b, 0xf3, 0x0a, 0x28, 0xc1, 0xee, 0xce,
-  0xce, 0xa3, 0x1c, 0x1f, 0xe2, 0x56, 0x5f, 0x49, 0xf5, 0x41, 0xb2, 0x9f,
-  0xe7, 0xc7, 0x26, 0xdf, 0xa6, 0xb9, 0x24, 0x72, 0x74, 0x59, 0x91, 0xcc,
-  0x27, 0x2d, 0xe5, 0x86, 0x95, 0x6c, 0x77, 0x96, 0x33, 0x2a, 0x03, 0xdd,
-  0x07, 0x5d, 0x0c, 0x47, 0xe8, 0x62, 0xbd, 0xdf, 0x7e, 0x27, 0x5a, 0x3b,
-  0x8f, 0xa1, 0x03, 0xf4, 0xa2, 0x2a, 0x86, 0x66, 0x83, 0x7e, 0xf5, 0xe0,
-  0x8c, 0x52, 0xeb, 0x88, 0x41, 0xbf, 0x48, 0x74, 0x49, 0xe5, 0xe6, 0x15,
-  0xb7, 0x5c, 0x9c, 0xc6, 0xe3, 0x5f, 0x3c, 0x7e, 0x2b, 0x23, 0xd7, 0xe7,
-  0x35, 0x9a, 0x04, 0xef, 0xc0, 0x12, 0x4f, 0x8c, 0x1d, 0xad, 0xa5, 0x4c,
-  0x74, 0xe3, 0xf6, 0x68, 0xf6, 0xf9, 0xb2, 0x5e, 0x49, 0x90, 0xda, 0x66,
-  0x65, 0x69, 0xa3, 0x1d, 0x3f, 0x6b, 0xab, 0x7b, 0x94, 0x01, 0xda, 0x47,
-  0x9e, 0x67, 0x37, 0xbb, 0x9d, 0x52, 0x43, 0x51, 0x32, 0xfb, 0x9e, 0xd1,
-  0x2f, 0x52, 0xbc, 0x30, 0x6b, 0x18, 0x5a, 0xd2, 0x21, 0xb2, 0xf4, 0xef,
-  0x28, 0x4b, 0xea, 0xa5, 0x52, 0xd3, 0x4f, 0x3c, 0x0b, 0xd2, 0xcc, 0x5a,
-  0x7e, 0x89, 0x30, 0x63, 0xbf, 0x5b, 0x9e, 0x9d, 0x73, 0x58, 0x11, 0x75,
-  0x87, 0x46, 0xc6, 0x2a, 0xdc, 0xc7, 0xf3, 0x93, 0x9e, 0xc4, 0x1c, 0x46,
-  0xa8, 0x09, 0x90, 0x61, 0x61, 0xe3, 0x6a, 0x66, 0xcf, 0x35, 0xcc, 0xa4,
-  0x78, 0x3c, 0x98, 0xda, 0x91, 0x38, 0xd1, 0x15, 0x08, 0x47, 0xb2, 0x69,
-  0xb7, 0x56, 0x2d, 0xb1, 0x88, 0x05, 0x89, 0x71, 0xc5, 0x99, 0xa7, 0x36,
-  0x90, 0x93, 0x09, 0x3f, 0xac, 0x7a, 0xcb, 0x2d, 0x69, 0x92, 0xf2, 0x1f,
-  0x20, 0xab, 0x36, 0x61, 0xe4, 0x42, 0x24, 0x3b, 0x57, 0xa2, 0xba, 0x44,
-  0x1d, 0x83, 0x3a, 0xb4, 0x04, 0x92, 0xa5, 0xe5, 0x59, 0x54, 0x5e, 0x74,
-  0x77, 0xfd, 0x3a, 0x37, 0x8b, 0x59, 0xac, 0xa3, 0xf2, 0xca, 0x62, 0xc4,
-  0x3c, 0x82, 0x0d, 0x7d, 0x3a, 0x86, 0xb4, 0x26, 0xe9, 0xe2, 0x1c, 0x8d,
-  0xf1, 0x32, 0x8a, 0x2d, 0x27, 0xa1, 0x3b, 0x00, 0xb6, 0xb8, 0x1e, 0x77,
-  0x4b, 0x90, 0x4d, 0x3c, 0x84, 0x32, 0x4a, 0x3a, 0x2e, 0x81, 0x1f, 0xb7,
-  0xc0, 0x22, 0xf4, 0x51, 0xcb, 0xa1, 0xe7, 0xf3, 0xa9, 0xeb, 0xd2, 0x4b,
-  0x05, 0x77, 0x23, 0x19, 0x67, 0x21, 0x5b, 0x03, 0xa6, 0xde, 0x42, 0xf4,
-  0x85, 0xb4, 0x20, 0xdc, 0x32, 0x12, 0xa3, 0x33, 0xfa, 0x54, 0x8f, 0xbd,
-  0x7e, 0xfa, 0xfd, 0xc0, 0xab, 0x23, 0x33, 0x79, 0x55, 0x42, 0x3c, 0xca,
-  0x36, 0xa6, 0x69, 0x1c, 0x57, 0xf9, 0xbc, 0xe1, 0x68, 0x7a, 0x50, 0x68,
-  0x3b, 0x4a, 0xa4, 0xc4, 0xeb, 0x4b, 0x08, 0x9d, 0x07, 0x96, 0x5d, 0x94,
-  0xfd, 0xac, 0xfb, 0xb0, 0xe6, 0x6c, 0xea, 0xdc, 0x25, 0xcf, 0xf5, 0xf7,
-  0x7b, 0x91, 0xe2, 0x96, 0xf7, 0xcd, 0xca, 0xf2, 0xa7, 0x7b, 0xad, 0x73,
-  0x7a, 0xd9, 0x93, 0xb3, 0x1a, 0x17, 0xba, 0x38, 0xac, 0x5c, 0xdd, 0xda,
-  0x74, 0x69, 0x93, 0x4a, 0xe6, 0x72, 0x9e, 0x4b, 0x8a, 0x48, 0x31, 0x18,
-  0xdb, 0x94, 0xc5, 0x96, 0xf7, 0x7a, 0x3c, 0x07, 0x87, 0x06, 0x29, 0x45,
-  0x7c, 0x51, 0xb3, 0x14, 0x66, 0x1c, 0xf4, 0x55, 0x71, 0xf1, 0xea, 0x5c,
-  0x65, 0xcd, 0xd8, 0xfb, 0xe5, 0x24, 0x4b, 0xa7, 0x31, 0x36, 0x69, 0xea,
-  0x30, 0xf9, 0x25, 0xf9, 0xf4, 0x12, 0xa5, 0x68, 0x21, 0x1e, 0x6e, 0x41,
-  0xa8, 0x32, 0x40, 0xab, 0x90, 0xfc, 0x4f, 0xed, 0x21, 0x36, 0x4c, 0x8c,
-  0xc4, 0x27, 0x9b, 0xe6, 0xb7, 0xc2, 0xc4, 0xa0, 0x5c, 0xbe, 0x12, 0x9f,
-  0x72, 0x60, 0x7b, 0x58, 0x0a, 0xef, 0x4f, 0xec, 0x03, 0xa8, 0xf0, 0x02,
-  0x34, 0x71, 0xb7, 0x39, 0x71, 0xd9, 0x71, 0x06, 0x18, 0xd7, 0x16, 0x17,
-  0xd0, 0x3b, 0x75, 0x8c, 0x81, 0x09, 0xb4, 0x2f, 0xb7, 0x64, 0x8b, 0x21,
-  0x30, 0x2e, 0x6b, 0x3f, 0xaf, 0x82, 0x9b, 0xfc, 0x36, 0x53, 0x50, 0x09,
-  0x2c, 0x11, 0x5e, 0x80, 0xc6, 0x26, 0xc6, 0x71, 0x1d, 0x7a, 0x1c, 0x25,
-  0x3e, 0x45, 0x7b, 0x7b, 0x4b, 0x76, 0x99, 0x94, 0x37, 0x14, 0x7c, 0x2c,
-  0x04, 0x74, 0x9d, 0x5e, 0xda, 0xca, 0xa3, 0x22, 0x9e, 0xca, 0xb1, 0x99,
-  0x42, 0xae, 0x8a, 0x8c, 0x9f, 0x15, 0x91, 0xec, 0x15, 0x96, 0x47, 0x24,
-  0x04, 0xec, 0x45, 0x42, 0xd2, 0x47, 0x81, 0x96, 0xf5, 0x34, 0x9f, 0x5b,
-  0x6f, 0x68, 0x8f, 0x68, 0x88, 0x18, 0xf0, 0x31, 0x7d, 0xe0, 0xc8, 0x45,
-  0x57, 0x07, 0x6b, 0x57, 0x61, 0x14, 0xd2, 0xc6, 0x29, 0x19, 0x0a, 0x9b,
-  0x9d, 0xf6, 0x9f, 0xef, 0xec, 0xa2, 0xbb, 0xcf, 0x77, 0x3e, 0xdb, 0x6a,
-  0xdf, 0x36, 0x53, 0xa3, 0x02, 0x01, 0xf1, 0x13, 0xd7, 0x66, 0xb9, 0x80,
-  0x87, 0xf3, 0x08, 0x41, 0x73, 0xa5, 0x97, 0x04, 0x26, 0x34, 0x59, 0x54,
-  0xaa, 0xa6, 0x51, 0x4d, 0x17, 0xb2, 0x2e, 0xeb, 0x6b, 0x62, 0x03, 0x0b,
-  0x6e, 0x2f, 0xf7, 0x0e, 0xcc, 0x2e, 0x38, 0xdb, 0x79, 0xa6, 0xcc, 0xee,
-  0xa1, 0x77, 0x6d, 0x2d, 0x10, 0x99, 0x0c, 0x86, 0x21, 0x91, 0x6d, 0x19,
-  0xb2, 0xb6, 0xfa, 0x5c, 0x47, 0x9c, 0xae, 0xc0, 0xf1, 0x96, 0x76, 0x75,
-  0x30, 0xde, 0xbf, 0xe6, 0x26, 0x78, 0x97, 0x17, 0x79, 0x7d, 0x8d, 0xaa,
-  0x62, 0x75, 0x9d, 0x5e, 0x65, 0x61, 0x42, 0xab, 0x31, 0xb3, 0x6a, 0xd6,
-  0xf1, 0x52, 0xae, 0xd0, 0x4b, 0xdc, 0x8f, 0x73, 0x3e, 0x0f, 0x02, 0xf8,
-  0x97, 0xca, 0x23, 0x0b, 0x84, 0x34, 0xec, 0x30, 0x97, 0xd4, 0xf0, 0x75,
-  0xf5, 0x70, 0x96, 0x95, 0xc3, 0xa1, 0x1a, 0x0d, 0xa0, 0xa8, 0x61, 0xf6,
-  0x7c, 0xa6, 0xcf, 0x0f, 0xb0, 0x7d, 0xa4, 0x05, 0x6e, 0xd2, 0xe2, 0x9e,
-  0x0e, 0x8d, 0x10, 0xda, 0x21, 0xd4, 0xd4, 0x34, 0x05, 0xdd, 0xab, 0xf9,
-  0x9b, 0xf9, 0xd9, 0x0f, 0x46, 0xc7, 0x1a, 0xbc, 0xb2, 0x3f, 0xde, 0x7a,
-  0x5a, 0xfd, 0x9c, 0xbd, 0x8e, 0xce, 0x41, 0x40, 0x46, 0x71, 0x7c, 0xc3,
-  0xb4, 0x79, 0xc3, 0xff, 0x58, 0x96, 0x65, 0x31, 0x94, 0xa4, 0x0a, 0xb8,
-  0xb6, 0x3c, 0x94, 0x8f, 0x9f, 0x84, 0x83, 0x0a, 0x42, 0xc0, 0xfe, 0x49,
-  0xc3, 0x61, 0x20, 0x42, 0x75, 0xfb, 0x49, 0x9b, 0x1b, 0x18, 0x4a, 0xca,
-  0x94, 0x4a, 0x25, 0xd0, 0xce, 0x1f, 0x24, 0x27, 0x52, 0xa5, 0x7a, 0xe3,
-  0xcb, 0x0d, 0x4c, 0xd8, 0xc6, 0x6b, 0xa6, 0xbd, 0xed, 0x87, 0x5c, 0xd5,
-  0x5c, 0x8c, 0x19, 0x51, 0x6b, 0xdc, 0xf0, 0x1b, 0x7f, 0x26, 0x20, 0xe7,
-  0x9b, 0x8d, 0x44, 0x3b, 0x21, 0x73, 0xcf, 0x1d, 0x93, 0xf8, 0xab, 0xc2,
-  0xaa, 0x82, 0xf2, 0xc9, 0x60, 0xbf, 0x6a, 0xe3, 0x3c, 0xb8, 0x3e, 0x1d,
-  0x11, 0x05, 0x2b, 0xc6, 0x53, 0xc7, 0xae, 0x69, 0x8a, 0x55, 0xb6, 0x01,
-  0xa9, 0x17, 0xd6, 0x66, 0x25, 0xa2, 0x0c, 0xa9, 0xe3, 0xa7, 0x05, 0x58,
-  0xec, 0xe4, 0x70, 0x87, 0xe0, 0x14, 0x1b, 0x8f, 0x73, 0xba, 0x92, 0x71,
-  0xea, 0xcd, 0x2f, 0xaf, 0xae, 0xb2, 0x18, 0xa9, 0x28, 0x4d, 0x86, 0x59,
-  0x74, 0x9a, 0x8b, 0xcb, 0x2c, 0x6d, 0x70, 0x91, 0x9a, 0x6b, 0x7b, 0x05,
-  0xea, 0xd4, 0xe9, 0xa3, 0x91, 0x67, 0xbc, 0x45, 0x7c, 0xed, 0x63, 0xfb,
-  0x57, 0x25, 0x11, 0x4d, 0xc9, 0x8e, 0x13, 0xd5, 0x7f, 0x31, 0x45, 0xb1,
-  0x04, 0x81, 0xf0, 0xf6, 0xcd, 0x4c, 0xa1, 0x2d, 0x4b, 0x62, 0x4e, 0x67,
-  0x9c, 0x30, 0x24, 0x5d, 0x23, 0x80, 0xdc, 0xa4, 0xca, 0x06, 0x2f, 0x41,
-  0x74, 0x46, 0xf7, 0xb6, 0xe1, 0xbd, 0x80, 0xf2, 0xba, 0x3a, 0x42, 0x40,
-  0x28, 0x47, 0x52, 0xc1, 0x9c, 0xc9, 0x08, 0x1e, 0x2d, 0x02, 0xf2, 0x5e,
-  0x50, 0x59, 0x02, 0x51, 0x76, 0x8d, 0x3c, 0xd9, 0xc6, 0x56, 0x67, 0xf8,
-  0xba, 0x99, 0xe9, 0xb2, 0x62, 0x44, 0x3a, 0xed, 0xe3, 0xf3, 0x77, 0x87,
-  0x5d, 0x46, 0xd1, 0x67, 0x9f, 0x7f, 0x6e, 0xc3, 0x4e, 0x99, 0x80, 0x93,
-  0x6c, 0x55, 0x68, 0xd8, 0xdd, 0x8c, 0x98, 0x63, 0xf8, 0xa1, 0xb9, 0x82,
-  0x81, 0xb5, 0xe5, 0x88, 0x77, 0x64, 0xc9, 0x64, 0x4e, 0x37, 0x12, 0x8d,
-  0x57, 0x8d, 0x32, 0x9b, 0x92, 0xcc, 0x25, 0x1e, 0x14, 0xb0, 0x33, 0xb5,
-  0x50, 0x76, 0x41, 0x97, 0x9a, 0x4b, 0xf4, 0xcb, 0x28, 0xb1, 0x39, 0x7d,
-  0x10, 0xa9, 0x85, 0x57, 0x59, 0x13, 0x26, 0x55, 0x78, 0xe8, 0xc6, 0xd6,
-  0x27, 0x96, 0xf3, 0xa9, 0x08, 0x74, 0x49, 0x52, 0x42, 0x5e, 0xb3, 0xdb,
-  0x45, 0x2b, 0xff, 0x8e, 0x33, 0xcb, 0x00, 0xfe, 0x25, 0x4e, 0xd9, 0x6b,
-  0x4b, 0x20, 0x13, 0xaf, 0x1d, 0xfc, 0xa5, 0xf2, 0xf5, 0x08, 0xc2, 0x12,
-  0xe4, 0x31, 0x4d, 0x63, 0xcc, 0x04, 0x27, 0x07, 0x01, 0x67, 0xb5, 0x3c,
-  0x21, 0x5a, 0x83, 0x3a, 0x88, 0xdb, 0xe7, 0x12, 0xeb, 0x7f, 0x6d, 0x5b,
-  0x14, 0xae, 0x7c, 0x82, 0x13, 0x53, 0x5f, 0x30, 0x0b, 0xf8, 0x82, 0xa5,
-  0x6f, 0x6f, 0x98, 0x29, 0x3f, 0x26, 0x79, 0x48, 0x42, 0xb9, 0xf7, 0xbd,
-  0x79, 0x8a, 0x30, 0x3b, 0x80, 0xd2, 0x73, 0x5f, 0x1c, 0xf9, 0x14, 0xc7,
-  0x44, 0x71, 0xb7, 0x99, 0x30, 0x44, 0xa5, 0x16, 0x06, 0xcf, 0xb7, 0xd9,
-  0xc6, 0xbc, 0x2a, 0xa9, 0xa1, 0x0d, 0xa9, 0x91, 0x14, 0x9b, 0x67, 0x9b,
-  0x59, 0x55, 0x91, 0x8b, 0x89, 0x7a, 0x60, 0x29, 0xb1, 0x48, 0xe2, 0x57,
-  0xc6, 0x30, 0x1d, 0xfc, 0x75, 0x7e, 0xe5, 0xf8, 0xba, 0x41, 0x33, 0x6f,
-  0xd4, 0x97, 0xb0, 0xbc, 0x04, 0xce, 0x44, 0xff, 0x5d, 0x22, 0x5f, 0x7d,
-  0xf3, 0x65, 0xab, 0x01, 0x65, 0x7f, 0xf6, 0x09, 0x4c, 0x05, 0x76, 0x39,
-  0xbe, 0xca, 0x23, 0x39, 0x6b, 0x92, 0x6b, 0xcf, 0x7b, 0xc8, 0x61, 0x6d,
-  0xfd, 0xa0, 0x81, 0xee, 0x27, 0x68, 0xd2, 0x2e, 0xc6, 0x3d, 0xcd, 0x62,
-  0xb4, 0x87, 0xf6, 0xfc, 0x5c, 0x11, 0xa4, 0x1d, 0xca, 0x39, 0x92, 0xee,
-  0x75, 0xff, 0x90, 0x37, 0xb4, 0xa9, 0x16, 0x63, 0x52, 0x46, 0x3f, 0x92,
-  0xdb, 0xa5, 0x59, 0x50, 0x4c, 0x88, 0xae, 0xcc, 0x26, 0x92, 0xe8, 0xc9,
-  0xa5, 0xd4, 0xc4, 0x3b, 0x52, 0xc9, 0xc5, 0xd0, 0xe6, 0x03, 0x4f, 0xf5,
-  0x4e, 0xc9, 0xe7, 0x19, 0xf2, 0xc7, 0xc5, 0x84, 0xe8, 0x85, 0xb8, 0x03,
-  0x57, 0x59, 0x87, 0x5a, 0x58, 0x80, 0x8b, 0xf7, 0xef, 0x99, 0xea, 0x12,
-  0x02, 0x41, 0x62, 0x52, 0x07, 0x68, 0x23, 0xe1, 0xa5, 0xfa, 0x17, 0x02,
-  0x4c, 0xa3, 0x12, 0x03, 0x07, 0x98, 0x1a, 0x2f, 0x7e, 0xc6, 0xe4, 0x0e,
-  0x6d, 0x41, 0x44, 0x5b, 0x88, 0xe6, 0x4d, 0xab, 0x16, 0x76, 0x45, 0x04,
-  0x5f, 0x57, 0x3d, 0xf6, 0x84, 0x4b, 0xf2, 0xab, 0x4b, 0x61, 0x5c, 0xbe,
-  0xfa, 0xeb, 0x77, 0xd9, 0xe8, 0xcd, 0x97, 0x64, 0xd1, 0xdd, 0x83, 0xf0,
-  0x96, 0xef, 0x3d, 0xda, 0xe1, 0xdb, 0xe0, 0xbf, 0x4d, 0xbc, 0x0d, 0xd0,
-  0x6d, 0xc4, 0x9c, 0x8e, 0xa5, 0xcd, 0x7a, 0xe8, 0x71, 0xaf, 0xc9, 0xcb,
-  0xb2, 0x5c, 0xd9, 0x22, 0xcd, 0x8a, 0x05, 0x63, 0x7b, 0xb0, 0x14, 0x06,
-  0x6b, 0xb8, 0xcc, 0x18, 0xde, 0xfa, 0xd8, 0x52, 0x22, 0xf4, 0x78, 0x6f,
-  0xc6, 0x92, 0x15, 0x51, 0xd8, 0x94, 0xd5, 0x77, 0x8d, 0xa6, 0xbc, 0xe9,
-  0x31, 0x38, 0x3b, 0x4a, 0x7f, 0xee, 0xc6, 0xc0, 0xc7, 0x02, 0x3c, 0x08,
-  0xf4, 0xd7, 0x3f, 0xdb, 0xd7, 0xe9, 0x3f, 0xe6, 0x54, 0x81, 0xaf, 0x72,
-  0xc5, 0x68, 0x08, 0xdf, 0xa5, 0xef, 0x6c, 0x73, 0xd1, 0x50, 0xad, 0xcf,
-  0xb4, 0xd1, 0xe3, 0x5b, 0xf8, 0xcf, 0x1b, 0xa0, 0x43, 0x52, 0xd0, 0x00,
-  0xea, 0x0e, 0xc0, 0x94, 0x9d, 0x94, 0x8b, 0xee, 0xa9, 0x20, 0x5c, 0x0d,
-  0x17, 0x26, 0x40, 0xef, 0x97, 0x74, 0x9c, 0x7a, 0xae, 0x5d, 0xff, 0x69,
-  0xdd, 0x76, 0xfe, 0xa7, 0x75, 0xd7, 0xfd, 0x9f, 0xd6, 0xdd, 0x00, 0x7e,
-  0x5a, 0x5f, 0x07, 0xd1, 0x6d, 0x1a, 0x84, 0xde, 0x7e, 0xf9, 0xa2, 0x6f,
-  0xf0, 0x57, 0xdd, 0x47, 0xbd, 0x6f, 0x7a, 0x9f, 0x5c, 0xdf, 0x58, 0x35,
-  0x69, 0xbe, 0x93, 0x19, 0x18, 0xe7, 0xee, 0x1c, 0x1a, 0x99, 0xd0, 0x9a,
-  0x26, 0x37, 0x2d, 0xbd, 0x88, 0xf6, 0xe4, 0x3f, 0x40, 0x33, 0xee, 0xca,
-  0x2c, 0x78, 0x2c, 0xc1, 0x96, 0x67, 0x4a, 0xd7, 0x41, 0x4b, 0x65, 0x05,
-  0xf5, 0xd3, 0xec, 0xeb, 0x51, 0x2d, 0xe9, 0x72, 0x51, 0x71, 0x91, 0x3e,
-  0x1e, 0x1e, 0x3b, 0x22, 0x14, 0x35, 0x23, 0xdf, 0x7a, 0x7f, 0xf0, 0xe1,
-  0xe3, 0xc1, 0xc9, 0xd3, 0x29, 0x47, 0x5b, 0xec, 0xce, 0x2b, 0x5f, 0xf3,
-  0x60, 0xb2, 0x9d, 0x0c, 0xb0, 0xc7, 0xf1, 0xf3, 0x04, 0x53, 0x22, 0xb5,
-  0x86, 0x9c, 0x38, 0xf1, 0x04, 0x30, 0x0e, 0x35, 0x8a, 0x95, 0xef, 0x85,
-  0xaa, 0xd2, 0x5a, 0xc8, 0xce, 0xd7, 0xf5, 0x7d, 0x7a, 0x7d, 0x5d, 0xdc,
-  0xdf, 0x16, 0x9b, 0x1c, 0x49, 0x96, 0xb7, 0x70, 0x6a, 0xeb, 0x12, 0xd5,
-  0x22, 0x9a, 0x82, 0x05, 0xe3, 0xcc, 0x32, 0xa1, 0x08, 0x2a, 0x2f, 0x2f,
-  0xbd, 0x10, 0x5e, 0xd7, 0x44, 0x39, 0x3c, 0x5c, 0x0e, 0xf2, 0xfc, 0x3d,
-  0xa9, 0x1d, 0x3a, 0x21, 0x77, 0x4c, 0x23, 0x55, 0xb4, 0x27, 0x44, 0xf7,
-  0x6d, 0x46, 0xf4, 0xb5, 0x98, 0x81, 0xd7, 0xd2, 0xb7, 0xf8, 0xac, 0x72,
-  0x9e, 0x92, 0x67, 0x93, 0x13, 0xab, 0x82, 0x2a, 0x54, 0x44, 0x6e, 0x8f,
-  0xe9, 0x3a, 0x3b, 0x30, 0x76, 0x9f, 0xe2, 0x8f, 0xc5, 0x15, 0x17, 0x40,
-  0x69, 0xe1, 0x58, 0x40, 0x59, 0x55, 0x99, 0x0c, 0xe7, 0xc9, 0x95, 0xf0,
-  0x95, 0x6a, 0xad, 0x17, 0x8b, 0x99, 0x39, 0x18, 0x46, 0x25, 0x9b, 0x90,
-  0xd9, 0xb1, 0xba, 0x38, 0xa5, 0x73, 0xe8, 0x94, 0xf8, 0x2f, 0x6a, 0x66,
-  0x6a, 0x69, 0xca, 0x48, 0xd9, 0xc6, 0x5e, 0xf4, 0x8e, 0x5a, 0x1f, 0x1e,
-  0x5f, 0x1c, 0x25, 0x07, 0x1f, 0x2f, 0xbe, 0x59, 0xe7, 0x09, 0xee, 0xe6,
-  0x5d, 0x20, 0xdf, 0x87, 0x2a, 0x27, 0xdc, 0x0a, 0xab, 0x23, 0xcd, 0x1d,
-  0x6b, 0xb3, 0x74, 0x41, 0x47, 0x8c, 0x40, 0xef, 0x9b, 0x83, 0x15, 0xab,
-  0xf4, 0x62, 0xf0, 0xa2, 0xbb, 0x4a, 0xcb, 0xb9, 0x75, 0xc0, 0xb6, 0x02,
-  0xba, 0x96, 0x2d, 0x9d, 0x3b, 0xd9, 0xf1, 0xc2, 0xe2, 0x42, 0xae, 0xc1,
-  0x6d, 0x47, 0xc0, 0x08, 0x03, 0x23, 0x95, 0x1a, 0x71, 0x61, 0xfa, 0xb4,
-  0xcd, 0x25, 0xb7, 0x76, 0x3d, 0x78, 0x66, 0x6c, 0xae, 0x99, 0xa8, 0x80,
-  0x52, 0xc1, 0xb8, 0x98, 0x50, 0xf5, 0x76, 0xc5, 0x21, 0x46, 0x52, 0x2d,
-  0xd4, 0x21, 0x4f, 0x9c, 0xae, 0x66, 0x0b, 0x0c, 0x9e, 0xe6, 0xfa, 0x75,
-  0x5e, 0xf7, 0x38, 0xf3, 0xcf, 0x2c, 0x67, 0x2e, 0x0f, 0x8f, 0xc2, 0x66,
-  0x65, 0x58, 0x22, 0x4e, 0x56, 0x43, 0xf3, 0x2a, 0x2e, 0xaf, 0xd7, 0xfc,
-  0x67, 0x7c, 0xbf, 0x93, 0x66, 0x53, 0x95, 0x52, 0x4d, 0x57, 0x5e, 0xe0,
-  0xe8, 0x0a, 0x23, 0x43, 0x90, 0x39, 0x08, 0x8d, 0x92, 0x38, 0xfc, 0xf9,
-  0x82, 0x67, 0xde, 0xb3, 0x90, 0xb7, 0x77, 0x93, 0x7c, 0x4d, 0x3c, 0x89,
-  0x6c, 0x72, 0x48, 0x7b, 0x11, 0xd0, 0x4f, 0xc0, 0x4c, 0x10, 0xcb, 0xed,
-  0xf2, 0x4e, 0x6f, 0xa8, 0x1a, 0x40, 0x18, 0x8f, 0xef, 0x26, 0xf1, 0xf4,
-  0x17, 0x0c, 0x01, 0xba, 0xa6, 0x85, 0x17, 0x1d, 0x7e, 0xff, 0xd6, 0xa3,
-  0xea, 0x24, 0x29, 0x89, 0x31, 0x49, 0x50, 0x9b, 0xb3, 0x8d, 0x97, 0xf1,
-  0x0b, 0x78, 0xe9, 0xd1, 0x66, 0xc3, 0x0d, 0x40, 0xcb, 0x3e, 0xc9, 0xb2,
-  0xb9, 0x25, 0x62, 0xca, 0x11, 0x27, 0xcc, 0x6b, 0x38, 0x1c, 0x84, 0x04,
-  0x6b, 0x16, 0xde, 0x80, 0x8e, 0x63, 0x10, 0x92, 0xc3, 0x65, 0xc2, 0x10,
-  0xf7, 0xb0, 0xb1, 0x5d, 0x93, 0xdd, 0xcf, 0x9e, 0x7d, 0x9e, 0xd4, 0x94,
-  0x8b, 0x90, 0x77, 0x08, 0x58, 0x98, 0xb8, 0x64, 0x79, 0x96, 0xb7, 0xd4,
-  0x72, 0xd5, 0x98, 0x9b, 0x00, 0xf8, 0x93, 0x9a, 0x32, 0xa6, 0x70, 0x91,
-  0x0a, 0x9c, 0x36, 0xcc, 0x7f, 0x32, 0x93, 0xa8, 0xfa, 0x0a, 0x66, 0x0c,
-  0xfe, 0x7e, 0x9a, 0x2d, 0x76, 0x73, 0x0f, 0xbc, 0x3d, 0x3c, 0x29, 0x41,
-  0xc6, 0xdc, 0x4b, 0xce, 0x8f, 0x2e, 0xce, 0x7b, 0xc9, 0xf0, 0xe2, 0xf4,
-  0x7c, 0x49, 0x6a, 0x7e, 0xc3, 0x89, 0x21, 0x34, 0x67, 0xea, 0x6f, 0x93,
-  0xca, 0x8d, 0xbe, 0x94, 0x51, 0x37, 0x3f, 0x67, 0x84, 0x46, 0x30, 0x47,
-  0x5e, 0xb6, 0xa7, 0x37, 0x5b, 0xd8, 0x36, 0xe6, 0x7e, 0x58, 0x39, 0x30,
-  0x5e, 0xf6, 0x27, 0xec, 0x10, 0xda, 0x8b, 0x34, 0x5c, 0x2b, 0xe6, 0xd1,
-  0x5b, 0x63, 0x2a, 0x90, 0x19, 0xea, 0x38, 0xb7, 0xb4, 0xee, 0xcb, 0x12,
-  0x4a, 0x06, 0x0e, 0xa0, 0xd9, 0xf8, 0x1b, 0x0e, 0xca, 0xba, 0x02, 0xcf,
-  0xd7, 0x51, 0xb2, 0x95, 0x52, 0x10, 0x6d, 0x92, 0xf5, 0x23, 0xfb, 0x37,
-  0xad, 0xc9, 0x43, 0xee, 0xd5, 0xe6, 0xae, 0xcb, 0x59, 0xc6, 0xc6, 0x08,
-  0x42, 0x68, 0x2a, 0x9f, 0xea, 0xc4, 0x32, 0x93, 0xc4, 0x32, 0x30, 0x6c,
-  0x02, 0x29, 0xad, 0xf2, 0x86, 0xc5, 0xb0, 0x97, 0xb2, 0x3b, 0x78, 0x5d,
-  0x8c, 0xbe, 0x35, 0x6d, 0x90, 0x99, 0xbb, 0xa1, 0xbd, 0xf2, 0x32, 0x4b,
-  0xdb, 0xc2, 0x7b, 0xb7, 0x2b, 0x64, 0x28, 0x0d, 0x20, 0x2a, 0x59, 0xc8,
-  0xe3, 0xa6, 0x60, 0x6e, 0xf8, 0x89, 0x95, 0xe2, 0x1e, 0xaa, 0x84, 0x4f,
-  0xc2, 0x7f, 0xa6, 0x10, 0x7e, 0x71, 0x43, 0x04, 0xa2, 0x00, 0x62, 0x60,
-  0xea, 0xaa, 0x07, 0xe9, 0x9a, 0x33, 0x28, 0x7f, 0xd1, 0x95, 0xba, 0x1d,
-  0x4c, 0x7d, 0x57, 0x69, 0x16, 0xd5, 0xcc, 0x67, 0x65, 0xef, 0xe6, 0x3f,
-  0xac, 0xe0, 0x0d, 0xfe, 0x8d, 0xb3, 0xb6, 0xa8, 0xa8, 0x8c, 0x64, 0x32,
-  0x20, 0x14, 0x58, 0xc0, 0xf1, 0x34, 0xb1, 0x33, 0x47, 0x79, 0x7c, 0x64,
-  0x47, 0xe3, 0xde, 0x9a, 0x94, 0x08, 0x17, 0xd1, 0xa0, 0xc3, 0x94, 0x6f,
-  0xe8, 0xcb, 0x40, 0x62, 0xe9, 0x4d, 0x23, 0x8d, 0x89, 0x47, 0xa9, 0x42,
-  0xad, 0x86, 0xce, 0x48, 0x91, 0x57, 0x10, 0x0c, 0xf4, 0xcc, 0x5f, 0x36,
-  0x96, 0x68, 0x30, 0x02, 0x9c, 0x20, 0x68, 0x18, 0xde, 0xcf, 0x18, 0x7e,
-  0x0d, 0x1c, 0x4a, 0x22, 0x45, 0x11, 0x85, 0x87, 0x71, 0x12, 0x85, 0x16,
-  0x9f, 0x6a, 0x25, 0x27, 0xe8, 0x4c, 0x0e, 0x56, 0xa4, 0xb6, 0xfa, 0xb9,
-  0x0c, 0xad, 0x2d, 0xd9, 0xae, 0x22, 0xdf, 0x1e, 0xdd, 0x52, 0x9c, 0x2c,
-  0x2b, 0x14, 0xe7, 0xb4, 0x70, 0xb5, 0x45, 0xa5, 0xe8, 0xee, 0xe2, 0x52,
-  0x80, 0xe6, 0xcc, 0x6f, 0x13, 0x32, 0x87, 0x92, 0xb6, 0x13, 0x73, 0x43,
-  0x6a, 0x5c, 0x6d, 0x49, 0xa5, 0x13, 0xab, 0x27, 0x9a, 0xa6, 0x5b, 0xe4,
-  0xb7, 0x3e, 0xd7, 0x35, 0x6a, 0x29, 0x73, 0x9a, 0x02, 0xe6, 0x76, 0x10,
-  0x8d, 0x58, 0x33, 0x55, 0x4d, 0x83, 0x98, 0x4d, 0x5b, 0x23, 0xd3, 0xe2,
-  0x06, 0x4a, 0x85, 0xe8, 0x0a, 0x75, 0x6f, 0xd4, 0x4b, 0xf1, 0x84, 0xca,
-  0x42, 0x09, 0x35, 0x1f, 0xd5, 0xcd, 0xd9, 0x0f, 0xd7, 0x3a, 0x9b, 0xb0,
-  0x1c, 0xda, 0x1f, 0x33, 0x86, 0xfa, 0x62, 0x1e, 0xde, 0xf3, 0xc7, 0x67,
-  0xae, 0x49, 0xe1, 0x7b, 0xa1, 0xa9, 0x46, 0xe5, 0xae, 0xc6, 0xef, 0x64,
-  0x53, 0x0e, 0xdc, 0x02, 0xb8, 0xab, 0xbf, 0x7b, 0x1a, 0xa1, 0x08, 0x04,
-  0xb7, 0xfb, 0x32, 0xdc, 0xbc, 0xfe, 0x7a, 0x60, 0x84, 0xab, 0x51, 0x2e,
-  0x76, 0xd6, 0xfd, 0x7a, 0x6e, 0xec, 0x7b, 0xb3, 0xaf, 0x92, 0x2e, 0xdd,
-  0xea, 0x6d, 0x78, 0x66, 0xd4, 0x31, 0xe9, 0xd5, 0xba, 0xde, 0xa4, 0x22,
-  0x4f, 0x5c, 0x2c, 0x79, 0x2d, 0x1c, 0xba, 0xb4, 0xb5, 0xa2, 0x57, 0xbb,
-  0xaf, 0xf6, 0x06, 0xbb, 0x2f, 0x3f, 0x1f, 0xec, 0xee, 0x0c, 0x76, 0xd7,
-  0x3b, 0xe5, 0xcf, 0xa5, 0x58, 0x83, 0xd7, 0x4e, 0xa4, 0xec, 0x46, 0xb2,
-  0x9c, 0xce, 0x05, 0x1f, 0x98, 0x3d, 0x0c, 0xe8, 0xb1, 0x01, 0x13, 0x80,
-  0x06, 0x9f, 0x98, 0x19, 0xa5, 0x86, 0x6a, 0x06, 0x76, 0x63, 0xe3, 0x7a,
-  0x91, 0x3a, 0x16, 0x98, 0x79, 0x4e, 0xbb, 0x48, 0x39, 0x16, 0x5c, 0xa7,
-  0x6c, 0x7d, 0x13, 0x25, 0x63, 0x5c, 0x84, 0x15, 0x67, 0x5d, 0x5e, 0x98,
-  0xf5, 0x57, 0x93, 0x16, 0xe9, 0xa4, 0xba, 0xfd, 0xfe, 0x3f, 0x60, 0xf1,
-  0xa9, 0x84, 0x7c, 0x9b, 0xbb, 0x90, 0x9a, 0x2d, 0x68, 0x9e, 0xd8, 0x84,
-  0x31, 0x64, 0x15, 0x76, 0x13, 0xd3, 0x24, 0xcf, 0x88, 0x85, 0x5f, 0x27,
-  0xb7, 0xcb, 0xbb, 0x62, 0x8e, 0xbc, 0x44, 0x52, 0xdf, 0x3d, 0x8a, 0x36,
-  0xd5, 0xbf, 0xd7, 0xcd, 0x1d, 0x94, 0xd7, 0x70, 0x5d, 0xb1, 0x7c, 0xd6,
-  0xe6, 0xe8, 0xb5, 0x3f, 0xfd, 0xc9, 0xc9, 0x23, 0xae, 0x56, 0xc4, 0xbc,
-  0x83, 0x2f, 0x7a, 0x42, 0xcd, 0xc0, 0x9e, 0x46, 0x26, 0x86, 0x4b, 0xd6,
-  0xf7, 0x7f, 0x84, 0x57, 0xf2, 0xe7, 0xfe, 0x8f, 0xe6, 0xdf, 0x3f, 0xaf,
-  0x5b, 0x60, 0x25, 0x27, 0x83, 0xb2, 0x8e, 0xbc, 0xd6, 0x3e, 0xca, 0xbd,
-  0x76, 0x61, 0x0b, 0x68, 0x05, 0x17, 0x87, 0x67, 0x7c, 0x10, 0x19, 0x91,
-  0xc7, 0x23, 0x25, 0x41, 0x04, 0xb5, 0x9e, 0x24, 0x38, 0xd3, 0x42, 0x98,
-  0x9d, 0x62, 0xe7, 0x52, 0xf9, 0x81, 0xd9, 0xac, 0xc4, 0x8b, 0x3d, 0xc7,
-  0x9c, 0x40, 0x8a, 0x23, 0x17, 0xa9, 0x36, 0x5a, 0xee, 0x15, 0xb9, 0x52,
-  0x18, 0xc7, 0x6d, 0xc4, 0xaf, 0xaa, 0xd4, 0xfc, 0x03, 0x6d, 0x8e, 0x12,
-  0x4b, 0x6b, 0xf2, 0xc8, 0xde, 0x99, 0xae, 0xf5, 0x84, 0x02, 0x85, 0x7c,
-  0xbd, 0x99, 0xad, 0x6d, 0x6e, 0xa6, 0xa3, 0xca, 0x52, 0xe5, 0x80, 0xa9,
-  0xf2, 0xfa, 0x86, 0x46, 0x28, 0x20, 0x12, 0xa8, 0x6c, 0xee, 0xc4, 0x73,
-  0x58, 0xa1, 0x62, 0xba, 0x49, 0xc9, 0x95, 0xb2, 0x80, 0x45, 0x6f, 0x8a,
-  0xdd, 0x25, 0xa1, 0x8b, 0xaf, 0x09, 0x01, 0xd1, 0x7c, 0x4f, 0x79, 0xac,
-  0xca, 0xe2, 0x69, 0xc8, 0x7e, 0xf2, 0x84, 0x66, 0x3c, 0xa5, 0xc9, 0x99,
-  0xd1, 0x77, 0xed, 0x36, 0xf1, 0xb2, 0x02, 0x93, 0x4d, 0xfa, 0x01, 0x5d,
-  0x82, 0x5b, 0xdd, 0xcb, 0x8b, 0x58, 0x35, 0xd3, 0xdc, 0x77, 0xcf, 0x98,
-  0x75, 0xa3, 0x13, 0x4b, 0x28, 0x90, 0xca, 0xf4, 0x61, 0xd2, 0xb3, 0x69,
-  0x08, 0xca, 0x3e, 0x48, 0x68, 0x03, 0x55, 0xec, 0xd6, 0xa2, 0x26, 0x83,
-  0x20, 0x62, 0x9d, 0x56, 0x0a, 0xf4, 0xa8, 0x59, 0x0d, 0x3b, 0xf1, 0xf4,
-  0x27, 0xe4, 0x36, 0x55, 0x66, 0xbe, 0x2b, 0x50, 0x67, 0x25, 0xb4, 0x6b,
-  0xd0, 0xf9, 0x59, 0x8c, 0xa7, 0xc5, 0xbb, 0x5b, 0xf7, 0x76, 0x42, 0x8f,
-  0x0a, 0x15, 0x8f, 0xc1, 0x24, 0xf7, 0xf3, 0xf9, 0xe3, 0x79, 0xdc, 0x9a,
-  0x5f, 0x4a, 0x6b, 0xd9, 0x12, 0x30, 0xf6, 0xa2, 0xa9, 0x17, 0x57, 0x57,
-  0xc8, 0x24, 0x09, 0xba, 0x28, 0x78, 0x42, 0x41, 0x40, 0x08, 0xb1, 0x9d,
-  0x91, 0xe9, 0xe8, 0xba, 0x4e, 0x87, 0x43, 0x2e, 0x8a, 0xe8, 0x71, 0xf4,
-  0x40, 0x4b, 0x21, 0xc3, 0x04, 0x98, 0xe1, 0x83, 0xee, 0x97, 0x92, 0xee,
-  0x43, 0x9c, 0x78, 0xfc, 0x47, 0xad, 0xab, 0x23, 0x88, 0x63, 0x78, 0xb2,
-  0xb1, 0x5e, 0x21, 0x06, 0x57, 0x43, 0x9e, 0xc8, 0xd9, 0x46, 0xb4, 0x9e,
-  0x9c, 0xc7, 0x96, 0x5f, 0x4a, 0x02, 0x39, 0x67, 0x00, 0x57, 0x36, 0xa3,
-  0xd2, 0x4f, 0xf8, 0x08, 0x0b, 0xa2, 0xd3, 0x7c, 0xac, 0x72, 0x10, 0x38,
-  0x91, 0xe8, 0xab, 0x4d, 0xcf, 0x07, 0x7b, 0xc1, 0xd2, 0x52, 0x25, 0xf3,
-  0xf1, 0xb8, 0x0f, 0x85, 0xe0, 0x35, 0xeb, 0x29, 0xdb, 0xa2, 0x25, 0xc4,
-  0x35, 0x28, 0x80, 0x80, 0x51, 0x5b, 0xe1, 0xf0, 0x50, 0x14, 0x9a, 0x8b,
-  0xeb, 0x8e, 0x66, 0x61, 0x53, 0x1d, 0x45, 0xad, 0x8a, 0xf2, 0x0b, 0xd5,
-  0xd7, 0x8b, 0x66, 0x82, 0x9a, 0x2a, 0x24, 0x35, 0x54, 0x0e, 0x5b, 0x14,
-  0x6b, 0x87, 0x92, 0xa2, 0x34, 0xcb, 0xc1, 0x69, 0xed, 0xda, 0x78, 0x80,
-  0xf9, 0x9b, 0x33, 0x15, 0x26, 0x5e, 0x94, 0xb6, 0xbb, 0x45, 0x1b, 0xb8,
-  0xaf, 0x7e, 0xd6, 0xa8, 0xf6, 0xb0, 0x8e, 0x78, 0xb7, 0x6c, 0x2b, 0xf8,
-  0x6c, 0x4a, 0x9b, 0x13, 0xc6, 0xab, 0x7c, 0xab, 0xdb, 0xf6, 0x23, 0xeb,
-  0x21, 0x53, 0xdd, 0x5e, 0x92, 0x97, 0x4b, 0x97, 0x24, 0x2e, 0xa9, 0xc8,
-  0xc0, 0xc2, 0xcc, 0x27, 0x9b, 0x87, 0x60, 0xb4, 0x20, 0xe6, 0x2a, 0x9c,
-  0x8a, 0xc3, 0x6b, 0x0a, 0x3a, 0x4d, 0xcd, 0x02, 0x99, 0x5e, 0xd7, 0x90,
-  0x03, 0x4c, 0x19, 0x3f, 0x3c, 0xd9, 0xbe, 0x38, 0xe9, 0xa6, 0x79, 0x51,
-  0x3d, 0x91, 0x4a, 0x7c, 0xc4, 0x6d, 0xcf, 0x27, 0x4f, 0x91, 0x5f, 0x8e,
-  0xd8, 0xee, 0x70, 0xfe, 0x42, 0x34, 0x4d, 0x68, 0x51, 0x28, 0xa8, 0xc7,
-  0xf9, 0x6e, 0x8b, 0xac, 0x00, 0x7e, 0x3e, 0x9b, 0x88, 0x72, 0x0c, 0xbc,
-  0x72, 0x9d, 0x7c, 0x38, 0xb8, 0x20, 0xa4, 0x4e, 0x23, 0x79, 0x31, 0x97,
-  0xe5, 0xb4, 0xdb, 0x9c, 0x52, 0x92, 0x58, 0x12, 0x87, 0x74, 0xec, 0x68,
-  0x31, 0x55, 0x65, 0xe7, 0xe5, 0xab, 0x75, 0xe7, 0xad, 0x9a, 0x7e, 0x33,
-  0xa5, 0x72, 0x3f, 0x74, 0xf7, 0x7c, 0x77, 0x35, 0x76, 0xa3, 0xab, 0xc1,
-  0x13, 0x10, 0x5d, 0x91, 0x73, 0x91, 0xe6, 0x32, 0xcd, 0x76, 0xeb, 0xc2,
-  0x89, 0x39, 0x2d, 0xaf, 0x72, 0xca, 0x17, 0x67, 0xf2, 0x11, 0x16, 0xe3,
-  0xb6, 0x9c, 0x54, 0x57, 0x06, 0xf3, 0xe4, 0x10, 0x4a, 0x1a, 0xf7, 0x62,
-  0x1b, 0x23, 0xc6, 0x87, 0x84, 0xee, 0x0a, 0x3b, 0xa9, 0xc2, 0x87, 0xa6,
-  0x18, 0xd1, 0x30, 0x7b, 0x9f, 0x64, 0x4c, 0x3e, 0x36, 0x96, 0xc2, 0xf8,
-  0x61, 0xc0, 0x28, 0xe4, 0xba, 0x1d, 0x1a, 0xcd, 0x5b, 0xf9, 0xe0, 0xd6,
-  0x53, 0x4a, 0x61, 0xda, 0x28, 0x9c, 0x49, 0xc6, 0xb8, 0xd2, 0x21, 0xff,
-  0xb2, 0x75, 0x7d, 0x7c, 0x4d, 0xa6, 0xd9, 0x55, 0x70, 0xed, 0xb2, 0x57,
-  0x97, 0x44, 0x5c, 0xaf, 0x4b, 0xc2, 0xeb, 0x88, 0x27, 0xc9, 0x47, 0xc4,
-  0x44, 0xb7, 0x9d, 0xf2, 0x12, 0x93, 0x5e, 0x94, 0x96, 0xad, 0xd7, 0x65,
-  0x3a, 0xab, 0x42, 0x32, 0xa4, 0x56, 0x32, 0x9d, 0xcd, 0x85, 0xea, 0x34,
-  0xf7, 0xb5, 0xb9, 0xf7, 0x2d, 0x8d, 0x5e, 0x27, 0xe7, 0xae, 0x45, 0xb1,
-  0xc7, 0xd5, 0xbc, 0x28, 0xe2, 0x74, 0x47, 0x05, 0x24, 0xee, 0xe2, 0xd6,
-  0x0e, 0x2b, 0xb4, 0x17, 0x8e, 0x94, 0x8b, 0x8f, 0x87, 0x32, 0x17, 0xaa,
-  0xc8, 0xa2, 0x1a, 0xa9, 0x42, 0xce, 0xbd, 0xf1, 0xef, 0x1b, 0x8e, 0x27,
-  0x76, 0xb0, 0x24, 0x45, 0x3d, 0xc6, 0x5d, 0x83, 0x48, 0x93, 0x84, 0x9a,
-  0x34, 0x31, 0x1d, 0x3d, 0x16, 0xde, 0xc7, 0x08, 0xd7, 0x9e, 0x8e, 0x6f,
-  0x75, 0x8f, 0xbe, 0x39, 0x3a, 0x78, 0x6b, 0x71, 0xfe, 0xbf, 0x80, 0x49,
-  0xb9, 0xab, 0xf2, 0xc3, 0x4d, 0xe2, 0x32, 0xeb, 0x51, 0x9f, 0xb7, 0x5e,
-  0x32, 0x5f, 0xec, 0xf6, 0x1b, 0x65, 0xcc, 0x06, 0xb8, 0x10, 0x8f, 0x49,
-  0x8a, 0xe5, 0xd1, 0xad, 0x8a, 0x8d, 0x62, 0xf4, 0x35, 0xaa, 0x4c, 0x0a,
-  0xde, 0xe3, 0xa5, 0xac, 0x78, 0x4b, 0x9d, 0x24, 0x9e, 0xc3, 0x59, 0x7d,
-  0xd7, 0xa4, 0x35, 0x33, 0x5e, 0xcc, 0xdb, 0xca, 0x57, 0xd8, 0xca, 0xd3,
-  0x72, 0x54, 0x5e, 0x5e, 0xae, 0x08, 0x02, 0x32, 0x37, 0x01, 0x30, 0x5d,
-  0xbc, 0x63, 0xd6, 0x69, 0x1a, 0xe9, 0xbd, 0x11, 0x75, 0xdf, 0x2c, 0xaa,
-  0x39, 0x6e, 0xeb, 0x03, 0x3e, 0x02, 0x52, 0xd2, 0x2b, 0x5a, 0xe0, 0x5a,
-  0x62, 0x09, 0x0f, 0x12, 0x91, 0x57, 0x73, 0xcf, 0x61, 0xb9, 0x25, 0x96,
-  0xed, 0x11, 0xbc, 0x99, 0x59, 0xff, 0xcf, 0xff, 0xfa, 0xf1, 0xe7, 0x08,
-  0xcd, 0x1d, 0x52, 0x6c, 0x24, 0x15, 0xc6, 0x3c, 0x3f, 0x93, 0x94, 0x35,
-  0xcb, 0x46, 0xe6, 0x4a, 0xeb, 0x91, 0x0a, 0x96, 0x4d, 0x2f, 0x07, 0x8e,
-  0xac, 0x35, 0xbc, 0x18, 0x6b, 0xf7, 0x41, 0x90, 0x6c, 0x97, 0x8d, 0x62,
-  0x91, 0x89, 0x37, 0x0a, 0x6c, 0xb1, 0x0e, 0xc4, 0x63, 0x59, 0x65, 0x64,
-  0x25, 0x82, 0xdc, 0x39, 0x47, 0xe9, 0x6a, 0x61, 0x5d, 0x76, 0x03, 0x1e,
-  0x5b, 0x9f, 0xa7, 0xb7, 0x12, 0x36, 0x9a, 0x1a, 0xcd, 0xc9, 0x24, 0xc1,
-  0x4b, 0x95, 0xa7, 0xb7, 0x92, 0x77, 0xa8, 0x41, 0xec, 0xe7, 0x31, 0xd2,
-  0xf6, 0xfb, 0x17, 0x1c, 0x79, 0x9b, 0x5d, 0x2a, 0x18, 0xbc, 0x68, 0x35,
-  0x12, 0xbe, 0x58, 0xb1, 0xf7, 0xd9, 0xcd, 0x80, 0x95, 0xe1, 0xea, 0x7f,
-  0x25, 0x00, 0x4b, 0x5a, 0x1a, 0x41, 0x3d, 0xef, 0x92, 0x1b, 0x43, 0x39,
-  0xbc, 0x21, 0xdb, 0x39, 0xa3, 0xa8, 0x07, 0xbe, 0xf8, 0x43, 0x02, 0x80,
-  0x8b, 0x6e, 0x51, 0xbf, 0x05, 0xa3, 0xc3, 0xae, 0x6a, 0xae, 0xfc, 0x55,
-  0x47, 0x53, 0x04, 0x08, 0x43, 0x4e, 0xa0, 0x17, 0xc0, 0xf7, 0xc9, 0x8c,
-  0xe6, 0xaa, 0x2b, 0x72, 0x0d, 0x23, 0x69, 0x88, 0xc6, 0xeb, 0x4d, 0x9c,
-  0x57, 0xf1, 0x32, 0x79, 0xcd, 0x7f, 0x2e, 0x81, 0x09, 0x1e, 0x81, 0x74,
-  0x5e, 0x1e, 0x35, 0x63, 0xd5, 0x32, 0x24, 0xb2, 0xdd, 0x54, 0x00, 0x42,
-  0x13, 0x17, 0x9c, 0x6f, 0x54, 0x94, 0x52, 0xa0, 0x33, 0x75, 0xf1, 0xa1,
-  0xbf, 0x08, 0x79, 0xa4, 0x6e, 0x66, 0x22, 0x5d, 0x73, 0x45, 0x2c, 0x33,
-  0xef, 0xa3, 0x75, 0x94, 0xa5, 0x95, 0x4d, 0x4a, 0x21, 0xb5, 0xe7, 0x73,
-  0x4d, 0x45, 0x40, 0x53, 0x33, 0x5b, 0x75, 0x63, 0x94, 0x31, 0xed, 0x30,
-  0x3d, 0x76, 0x2d, 0xf8, 0x26, 0x28, 0xf6, 0xcc, 0xce, 0x55, 0x47, 0xfc,
-  0x50, 0x8e, 0x7d, 0xc6, 0xb9, 0x9c, 0x41, 0xf6, 0xce, 0x76, 0x82, 0xc6,
-  0xc3, 0x7a, 0x5c, 0x50, 0x9d, 0xf8, 0x98, 0x2a, 0xce, 0x79, 0x0e, 0xcf,
-  0xad, 0x7c, 0xdd, 0x8f, 0x5d, 0x77, 0xaf, 0x0f, 0xfb, 0x8d, 0xd2, 0xa6,
-  0x5b, 0x88, 0x52, 0x14, 0x0a, 0x2e, 0x9a, 0x3b, 0x76, 0xdd, 0x20, 0x0b,
-  0x82, 0x20, 0xa5, 0xe3, 0x1b, 0xca, 0x84, 0x33, 0x67, 0x62, 0x01, 0xe1,
-  0x92, 0x16, 0x7e, 0x2f, 0x2d, 0xe1, 0xcd, 0xa4, 0xc4, 0x4c, 0xc7, 0xe5,
-  0x20, 0x1d, 0x56, 0x52, 0x5f, 0x29, 0x89, 0x5e, 0x7b, 0xc3, 0xa3, 0xb1,
-  0xa7, 0xc4, 0x0a, 0x0c, 0x2a, 0x79, 0xc8, 0x7c, 0x3b, 0x11, 0x6a, 0x8f,
-  0x0c, 0x25, 0x0b, 0x60, 0x7d, 0xde, 0x49, 0x42, 0x1a, 0x55, 0xda, 0x82,
-  0x94, 0x1e, 0x18, 0xb5, 0x68, 0x56, 0xa2, 0xd0, 0xaa, 0x1b, 0xb2, 0x4c,
-  0x8f, 0x91, 0x33, 0x57, 0xf9, 0x6d, 0x34, 0xf4, 0xa7, 0x1d, 0x43, 0xdc,
-  0x50, 0x7b, 0xa1, 0x90, 0x36, 0x4d, 0x95, 0x49, 0xc4, 0x4b, 0x82, 0x8a,
-  0x12, 0x76, 0xf9, 0x82, 0xb3, 0x3b, 0x25, 0xe1, 0x49, 0x48, 0xb1, 0x62,
-  0xdf, 0x6c, 0xfc, 0x64, 0xfd, 0x9b, 0xb2, 0x6e, 0xf6, 0xd7, 0x2d, 0xb1,
-  0x8c, 0x44, 0xea, 0xb3, 0xce, 0xce, 0x91, 0xa2, 0x0b, 0xfd, 0x28, 0x15,
-  0x2a, 0x5f, 0x21, 0x46, 0xa4, 0xc9, 0xc3, 0x0a, 0x56, 0xe1, 0xdc, 0x24,
-  0x97, 0x46, 0x4f, 0xb8, 0xc2, 0x59, 0x2e, 0x5d, 0xa0, 0xd4, 0x81, 0xeb,
-  0x10, 0xc0, 0x46, 0x5d, 0xfa, 0xa1, 0x7f, 0x88, 0x8f, 0xf7, 0xbf, 0x41,
-  0x7b, 0x7f, 0x5e, 0xb7, 0xce, 0x87, 0xee, 0xaf, 0xf6, 0xc3, 0x72, 0x6f,
-  0x82, 0x54, 0xf3, 0x68, 0x9e, 0xeb, 0x45, 0xa5, 0xc0, 0x1d, 0x04, 0x39,
-  0xa5, 0x97, 0x48, 0x14, 0x9c, 0x4c, 0xb6, 0xed, 0xa2, 0x33, 0x9e, 0x63,
-  0x19, 0x6f, 0xfe, 0xbc, 0xa2, 0xa8, 0x16, 0xd5, 0xc9, 0xec, 0x97, 0x97,
-  0x7d, 0xd4, 0xc6, 0x99, 0xa5, 0xd5, 0x0d, 0x85, 0xc8, 0xbd, 0x53, 0x07,
-  0xd8, 0x3d, 0xe8, 0x53, 0x26, 0x93, 0xd8, 0x25, 0x91, 0x72, 0x44, 0xbe,
-  0xb2, 0x36, 0x84, 0x74, 0x46, 0x16, 0x73, 0x5f, 0x9c, 0x44, 0x78, 0xdd,
-  0xd2, 0x6e, 0x52, 0x5a, 0xed, 0x4a, 0x96, 0xce, 0x1e, 0x5f, 0x24, 0x18,
-  0x34, 0x34, 0x89, 0x19, 0x3b, 0x16, 0xe0, 0x0a, 0x59, 0xcc, 0xa1, 0xf3,
-  0x52, 0x22, 0xfb, 0x52, 0x4b, 0x00, 0x1c, 0x3b, 0x07, 0x4a, 0xe3, 0x27,
-  0x25, 0xed, 0x61, 0x18, 0x64, 0xa8, 0x92, 0x2a, 0xb5, 0xe4, 0x85, 0xa5,
-  0x36, 0x6c, 0x87, 0x9c, 0x76, 0x02, 0x46, 0xff, 0x6c, 0xf0, 0xec, 0x33,
-  0xaa, 0x42, 0x6e, 0x59, 0x87, 0x94, 0x5d, 0xcf, 0x09, 0x4d, 0x2c, 0xa5,
-  0xb7, 0xbf, 0xba, 0xbb, 0x8a, 0xce, 0x9a, 0x16, 0x8f, 0x12, 0xc3, 0x12,
-  0x4d, 0x2c, 0x05, 0xb2, 0x2e, 0x01, 0x7e, 0x61, 0x2b, 0xbd, 0x23, 0x85,
-  0xaa, 0xff, 0xc1, 0xc8, 0xb9, 0xfd, 0xe4, 0x3f, 0xca, 0x6c, 0x1d, 0x00,
-  0xd2, 0x0e, 0x7e, 0x34, 0x48, 0x31, 0x3c, 0x38, 0xff, 0x70, 0xfc, 0xe1,
-  0xeb, 0x7d, 0xaf, 0x5e, 0x1c, 0xea, 0x0c, 0x3b, 0x22, 0xbb, 0x6e, 0xa2,
-  0xd6, 0x28, 0xe3, 0x47, 0x48, 0x79, 0x9e, 0x4e, 0x97, 0x50, 0x87, 0x24,
-  0xfd, 0x64, 0x59, 0xfd, 0x30, 0x57, 0x0e, 0xa1, 0xa7, 0xfc, 0xac, 0x4c,
-  0xec, 0xd5, 0x94, 0x81, 0x66, 0x20, 0x1a, 0xed, 0x09, 0x34, 0x5a, 0xad,
-  0xc1, 0x67, 0x61, 0xe5, 0x85, 0xd1, 0x35, 0x52, 0xab, 0xaa, 0xaa, 0x6c,
-  0x81, 0x56, 0x03, 0xb8, 0x52, 0x18, 0x02, 0x04, 0x32, 0xec, 0x1a, 0x15,
-  0x26, 0x20, 0x3a, 0x5b, 0xec, 0x79, 0xcc, 0x80, 0x55, 0x63, 0xd1, 0xea,
-  0x1c, 0xca, 0xa0, 0x9b, 0x93, 0x25, 0x7a, 0x8b, 0x2b, 0x6d, 0xac, 0xa5,
-  0xe3, 0x58, 0x21, 0xd7, 0x9f, 0xba, 0xf2, 0x0b, 0x76, 0x0e, 0x1e, 0xc9,
-  0x86, 0x83, 0x97, 0x58, 0x9d, 0xe0, 0x1d, 0xe8, 0x99, 0x54, 0xbc, 0xd6,
-  0x73, 0xbc, 0x5d, 0x41, 0xc2, 0xc6, 0x00, 0x12, 0xf4, 0x8a, 0xde, 0xa2,
-  0xee, 0xf2, 0xbf, 0xe6, 0xcb, 0x7f, 0x3a, 0x0f, 0x52, 0x17, 0x09, 0x0e,
-  0x4d, 0xbf, 0x90, 0xb9, 0x25, 0xe7, 0xa2, 0x54, 0xdf, 0x65, 0xc8, 0x4c,
-  0xac, 0x06, 0x6c, 0x6d, 0x01, 0xee, 0xe1, 0x35, 0x43, 0xc9, 0x45, 0x19,
-  0xa7, 0xb7, 0xc1, 0x1b, 0x66, 0xad, 0x34, 0x9a, 0xe4, 0xf9, 0x62, 0x34,
-  0x9b, 0xbc, 0x48, 0x5e, 0x9b, 0xff, 0x04, 0xba, 0xc7, 0x90, 0x91, 0x3f,
-  0x87, 0xe4, 0xe8, 0x40, 0x85, 0xcf, 0x54, 0xb3, 0x2c, 0x44, 0xd7, 0xa5,
-  0xbf, 0x3e, 0xdb, 0x33, 0x9d, 0xbd, 0x4f, 0x35, 0x45, 0x78, 0x62, 0x16,
-  0xb0, 0xa9, 0x63, 0xe5, 0x77, 0xe5, 0x55, 0x87, 0x3f, 0xa1, 0x05, 0xdf,
-  0xdd, 0xfb, 0x3c, 0x19, 0xe5, 0x4d, 0xf2, 0xfe, 0xed, 0x8b, 0xc4, 0xa8,
-  0xe9, 0xe3, 0x9b, 0x7a, 0x31, 0x53, 0x19, 0xa5, 0x75, 0xa4, 0xb0, 0x19,
-  0x36, 0xba, 0xca, 0x82, 0xe9, 0xf8, 0x34, 0x1f, 0x27, 0x37, 0xd9, 0x43,
-  0xaf, 0xe5, 0x43, 0xbc, 0x54, 0x5f, 0xa7, 0x73, 0x00, 0x3a, 0x69, 0x8a,
-  0xd8, 0x0e, 0xc7, 0x3f, 0x23, 0xfe, 0x25, 0x33, 0x07, 0xe6, 0xf3, 0x35,
-  0x97, 0x9e, 0x58, 0x69, 0x55, 0x7f, 0xd6, 0x72, 0x4c, 0xec, 0x60, 0x29,
-  0xcd, 0xf9, 0xde, 0x1d, 0xec, 0x2c, 0x49, 0xf3, 0x40, 0x20, 0x51, 0x3d,
-  0xb2, 0xd4, 0x43, 0xe8, 0xc6, 0x52, 0x1b, 0x27, 0x31, 0xef, 0xf9, 0x9a,
-  0x89, 0xe2, 0xfa, 0x62, 0x05, 0x96, 0xad, 0x86, 0xc0, 0x06, 0x11, 0x95,
-  0x70, 0xf2, 0x9b, 0x7a, 0x2a, 0x20, 0x52, 0xba, 0xbb, 0x2b, 0x6e, 0x18,
-  0xfa, 0x57, 0xcb, 0xf1, 0x25, 0xbf, 0xfe, 0x95, 0xa3, 0xd9, 0x7d, 0xe4,
-  0x5c, 0xb9, 0x8e, 0x60, 0xf2, 0xdc, 0xec, 0x59, 0x66, 0x54, 0xee, 0x90,
-  0x9b, 0xf4, 0x4e, 0x73, 0x21, 0xb9, 0x0f, 0x5e, 0x30, 0x22, 0x3f, 0x2f,
-  0xab, 0x3e, 0xe9, 0x49, 0xd3, 0x6c, 0x12, 0x5c, 0x5b, 0xd1, 0xee, 0x73,
-  0x4d, 0x40, 0x71, 0x75, 0x93, 0x43, 0x07, 0x19, 0x74, 0x9c, 0xb6, 0xe9,
-  0x88, 0xd5, 0x62, 0xf8, 0x3d, 0x7a, 0x66, 0x7b, 0xcf, 0x33, 0xe8, 0xf0,
-  0x03, 0x9a, 0xd4, 0xe4, 0xe3, 0xfc, 0xaa, 0x4a, 0x11, 0x5b, 0x3e, 0xf6,
-  0x48, 0x0c, 0xd0, 0xbb, 0x64, 0x59, 0xef, 0x6c, 0xb2, 0x97, 0xf5, 0xca,
-  0x33, 0xf5, 0x82, 0x7e, 0xa7, 0xa6, 0x64, 0x04, 0x68, 0x5a, 0xcc, 0x4e,
-  0x8a, 0x9f, 0x7b, 0xec, 0x6f, 0xb1, 0xc4, 0x7b, 0xf3, 0x12, 0x27, 0x6c,
-  0x97, 0xda, 0x4a, 0x0b, 0x57, 0x47, 0x54, 0x2d, 0xac, 0x62, 0x29, 0x5d,
-  0xac, 0xa3, 0xca, 0x09, 0x72, 0x40, 0x79, 0x71, 0xc5, 0xe2, 0xe8, 0xa4,
-  0x28, 0x06, 0x0e, 0xa0, 0xe8, 0x72, 0x3c, 0x99, 0xce, 0xa1, 0x2b, 0xdb,
-  0x41, 0xee, 0x40, 0x37, 0xb8, 0xe4, 0x2b, 0xf0, 0x58, 0x06, 0x4f, 0xdb,
-  0xdc, 0x3b, 0xbd, 0x68, 0xef, 0x68, 0xb7, 0xf9, 0x9b, 0xbf, 0x95, 0xd6,
-  0xf7, 0x2a, 0xb2, 0xb9, 0x7e, 0xd5, 0x59, 0xd8, 0x5b, 0xe5, 0x06, 0x35,
-  0x8a, 0x6d, 0x3a, 0x9d, 0x17, 0x03, 0xfd, 0xc2, 0x93, 0xe6, 0xa7, 0xbb,
-  0xcc, 0x96, 0xfc, 0xe2, 0xd7, 0xcd, 0x4f, 0x77, 0x6e, 0x7c, 0x59, 0xe6,
-  0xcf, 0x4f, 0x77, 0x2d, 0x57, 0x32, 0x6d, 0x31, 0xf7, 0x80, 0x16, 0xf8,
-  0xe8, 0x4f, 0xb3, 0xe2, 0x2a, 0xc8, 0xa0, 0x06, 0xac, 0x54, 0x72, 0xbc,
-  0xcd, 0xa9, 0xa0, 0xbf, 0xf5, 0x92, 0x63, 0x26, 0x2d, 0xe0, 0x52, 0xd1,
-  0xfc, 0xf2, 0x09, 0x5e, 0xb6, 0x25, 0xa3, 0x2d, 0x1a, 0x2b, 0x92, 0xda,
-  0x90, 0x8f, 0x17, 0x5c, 0x80, 0x8b, 0xd6, 0xc1, 0x56, 0xfc, 0xb3, 0xbc,
-  0x55, 0x8b, 0x02, 0x17, 0xd6, 0xc1, 0x9c, 0xb2, 0xa6, 0x8c, 0x94, 0xba,
-  0xef, 0x79, 0x15, 0x8e, 0xc3, 0xe8, 0x05, 0x4d, 0x24, 0xd5, 0x35, 0x66,
-  0xcc, 0x4e, 0xa7, 0x3b, 0xd4, 0x30, 0x27, 0xab, 0x4d, 0x09, 0xa3, 0x56,
-  0x25, 0xac, 0xc3, 0x24, 0x7b, 0x04, 0x51, 0xbc, 0x0a, 0x28, 0x68, 0x46,
-  0x0f, 0x4d, 0x04, 0x41, 0x4a, 0xe3, 0x86, 0xab, 0x61, 0x13, 0x41, 0x57,
-  0xda, 0x78, 0x2f, 0x07, 0x3b, 0x5b, 0x3d, 0x2a, 0x5d, 0x30, 0xc7, 0x24,
-  0x10, 0xc4, 0xcf, 0x5e, 0xf7, 0xe4, 0x9b, 0xcf, 0xaf, 0xc8, 0xaa, 0x10,
-  0xe8, 0x58, 0x00, 0xb6, 0x73, 0x29, 0x37, 0x1a, 0x76, 0x94, 0x54, 0xdb,
-  0x36, 0xf9, 0x4e, 0xde, 0x03, 0xc1, 0x23, 0x5c, 0x08, 0x5d, 0xdf, 0xa1,
-  0x38, 0x16, 0xb4, 0x7e, 0xb7, 0xaa, 0xcf, 0x72, 0xec, 0x85, 0xc1, 0x08,
-  0xde, 0x53, 0xff, 0xd7, 0xea, 0x90, 0x08, 0x6f, 0x55, 0xd8, 0x02, 0xac,
-  0x5a, 0x4a, 0xdd, 0x59, 0xb2, 0xfd, 0x7b, 0xe4, 0x00, 0xb5, 0xe8, 0x53,
-  0x97, 0xf1, 0x8e, 0x36, 0xf5, 0xec, 0x84, 0xbb, 0x93, 0x50, 0x77, 0x83,
-  0xc1, 0x8a, 0x23, 0x75, 0xdb, 0x73, 0xa5, 0xdb, 0xbd, 0x01, 0xdf, 0xf0,
-  0x80, 0xeb, 0x18, 0xa8, 0x9b, 0xd3, 0xb3, 0xfd, 0x93, 0xe2, 0xe5, 0xd9,
-  0x88, 0x33, 0xc0, 0xde, 0x15, 0x92, 0xc0, 0x9c, 0x24, 0xeb, 0xda, 0xda,
-  0x7a, 0xb7, 0x2f, 0xc3, 0x13, 0x9f, 0x19, 0x89, 0x11, 0x8b, 0x8e, 0x10,
-  0xf7, 0xc0, 0x48, 0xe3, 0xe0, 0x91, 0xca, 0xa2, 0x23, 0x62, 0xbc, 0xfa,
-  0x54, 0xbf, 0xd7, 0x4c, 0xb2, 0x06, 0x22, 0x2c, 0x20, 0x02, 0x87, 0xe4,
-  0xc0, 0x87, 0x7c, 0x93, 0xa4, 0x2c, 0x26, 0xd3, 0x8c, 0xbd, 0xc8, 0x29,
-  0x25, 0x90, 0x06, 0xfb, 0xb0, 0xcd, 0x48, 0x87, 0xa4, 0x7c, 0x60, 0xa3,
-  0x58, 0xc1, 0xf4, 0x7a, 0xe5, 0xd8, 0xb5, 0x96, 0x0f, 0x96, 0x40, 0x03,
-  0x16, 0x4e, 0xd6, 0x9a, 0x64, 0x07, 0x27, 0x8b, 0xac, 0x15, 0x3b, 0x54,
-  0x0b, 0xa8, 0xaf, 0x46, 0xda, 0x95, 0x0b, 0xf2, 0xfd, 0xe2, 0x44, 0x49,
-  0xbe, 0x88, 0xa4, 0x88, 0xec, 0x77, 0xed, 0x2b, 0x4d, 0xc2, 0x03, 0x73,
-  0xd0, 0x75, 0x7a, 0x7f, 0x3f, 0xa8, 0xb3, 0x6d, 0xb3, 0x7b, 0xea, 0xed,
-  0xba, 0x9e, 0xd2, 0x44, 0xd4, 0xc8, 0xd9, 0xf2, 0x25, 0x91, 0x23, 0x59,
-  0x65, 0xa6, 0xa9, 0x6e, 0x0c, 0x5e, 0x16, 0x94, 0x2a, 0x9e, 0x78, 0x08,
-  0x76, 0x3e, 0x36, 0x2e, 0xd0, 0x61, 0x9b, 0x19, 0xd8, 0x94, 0xac, 0x84,
-  0x72, 0xd0, 0xab, 0x65, 0x90, 0x29, 0xce, 0xd9, 0xeb, 0xf9, 0x78, 0x25,
-  0xb2, 0xa7, 0x2d, 0xb6, 0xc8, 0xec, 0x84, 0x42, 0xd3, 0x62, 0x98, 0xce,
-  0x0d, 0xa5, 0x47, 0x22, 0x25, 0x8e, 0x97, 0x59, 0x99, 0xde, 0xd0, 0x08,
-  0x84, 0xb5, 0xbf, 0x6b, 0x67, 0xe7, 0xee, 0xee, 0x6e, 0xb0, 0xca, 0xcc,
-  0xfc, 0xfd, 0x58, 0xce, 0xda, 0xa4, 0x90, 0xde, 0x01, 0x7c, 0x8e, 0xbd,
-  0x31, 0xbf, 0x7d, 0xbe, 0x42, 0x3b, 0x6d, 0x5a, 0x37, 0x29, 0xed, 0x8b,
-  0xe9, 0xad, 0x52, 0x56, 0x99, 0x1f, 0xf8, 0xcc, 0xa2, 0xb4, 0x5f, 0xc9,
-  0xe1, 0xd0, 0x8b, 0x64, 0xd1, 0x80, 0x59, 0xa2, 0xb4, 0x39, 0x47, 0x40,
-  0x49, 0x12, 0xab, 0xe5, 0x6a, 0x36, 0x4b, 0xbd, 0x11, 0xbb, 0xfa, 0xe7,
-  0x32, 0xbd, 0xb5, 0xff, 0x32, 0xd4, 0x2a, 0x88, 0xe7, 0xd2, 0x1b, 0xf3,
-  0x4b, 0x19, 0xf3, 0xcb, 0x7f, 0x68, 0xcc, 0x2f, 0xff, 0x81, 0x31, 0x3f,
-  0xff, 0xa7, 0x8f, 0xf9, 0xaf, 0x34, 0xe6, 0xbf, 0x2e, 0x8a, 0x9b, 0x7e,
-  0x4d, 0xd5, 0x50, 0x8d, 0x36, 0x2d, 0x94, 0x7f, 0x71, 0xe5, 0xc9, 0xf1,
-  0x48, 0x21, 0x83, 0x83, 0xb3, 0x77, 0x63, 0x45, 0xaa, 0x19, 0xf6, 0xcf,
-  0x9e, 0xf8, 0x66, 0x79, 0x81, 0x65, 0xdf, 0xfd, 0x46, 0xd8, 0xfd, 0x49,
-  0x5e, 0x8f, 0x49, 0xcf, 0x25, 0xd9, 0xb6, 0x2e, 0x3d, 0xd2, 0xa6, 0xd7,
-  0x07, 0xae, 0x32, 0x5b, 0x90, 0xd4, 0x56, 0x1b, 0x79, 0x4a, 0x46, 0x16,
-  0x88, 0x0d, 0xac, 0xd7, 0xda, 0x11, 0xca, 0xe7, 0x94, 0x69, 0x59, 0x64,
-  0x77, 0x89, 0x36, 0xca, 0xf0, 0x70, 0xf2, 0x47, 0x85, 0x10, 0xda, 0x8b,
-  0x87, 0x39, 0x35, 0x97, 0x68, 0x05, 0xaf, 0xda, 0x16, 0xff, 0xb0, 0x1d,
-  0x4c, 0x3a, 0x9d, 0x63, 0x2f, 0x0c, 0x79, 0xd7, 0x36, 0x82, 0x0b, 0x6b,
-  0x3c, 0x2d, 0xe9, 0xb8, 0xd2, 0x0d, 0xbf, 0xe2, 0x28, 0x8e, 0x1c, 0x51,
-  0x23, 0xab, 0x71, 0x1d, 0xe6, 0x46, 0x5f, 0x5d, 0xbb, 0xc9, 0xb2, 0x79,
-  0x3a, 0x45, 0x7e, 0x16, 0x45, 0x29, 0x96, 0xd1, 0xa0, 0xb5, 0xc2, 0x6a,
-  0x8a, 0x3a, 0xc1, 0x1b, 0xa9, 0x0f, 0xed, 0x49, 0x24, 0x15, 0x58, 0x0a,
-  0x10, 0xa1, 0xaa, 0x7a, 0x92, 0x4f, 0x82, 0x3c, 0x79, 0xd1, 0x54, 0x6c,
-  0xbc, 0xc2, 0xf6, 0x82, 0x4c, 0x90, 0x91, 0x24, 0x0b, 0xda, 0x4f, 0x68,
-  0xba, 0x7c, 0x6e, 0x1e, 0xbe, 0xcd, 0x27, 0x8b, 0x80, 0x65, 0xa2, 0xfb,
-  0xfa, 0x80, 0x4c, 0xaf, 0x16, 0x7f, 0x08, 0x2f, 0x1f, 0x3d, 0x51, 0x5a,
-  0x69, 0x8f, 0x5a, 0x9c, 0x44, 0xdb, 0x1a, 0x6c, 0x29, 0x4a, 0xd4, 0x77,
-  0x04, 0x99, 0x17, 0x87, 0x67, 0x9f, 0xbe, 0x3d, 0x3a, 0x3a, 0x3b, 0x7e,
-  0x7b, 0x72, 0x24, 0x07, 0xc6, 0xfe, 0xe8, 0xc3, 0xc5, 0x77, 0x27, 0xca,
-  0xae, 0x98, 0x2c, 0xa9, 0x83, 0xba, 0x29, 0x24, 0x18, 0xc9, 0x49, 0x5e,
-  0x2c, 0xee, 0x7b, 0x20, 0x3b, 0x2b, 0x9a, 0xe4, 0xe0, 0xf8, 0x07, 0xa3,
-  0xf4, 0x9c, 0xf5, 0x3f, 0xfe, 0x10, 0x70, 0xf2, 0x78, 0xf0, 0xa4, 0xa5,
-  0xa5, 0x0d, 0xcc, 0x36, 0x84, 0x15, 0xe1, 0xc6, 0xbe, 0xec, 0xda, 0xfd,
-  0x8d, 0xcb, 0xcc, 0x53, 0xd0, 0xbb, 0xb0, 0xd7, 0xa3, 0x94, 0xe4, 0xe5,
-  0xa6, 0x45, 0xbd, 0x80, 0xfc, 0x7a, 0xb9, 0xa3, 0x24, 0x79, 0x2b, 0xbd,
-  0x29, 0xed, 0xca, 0x7b, 0x66, 0x34, 0x0f, 0x28, 0x1b, 0x97, 0xbc, 0xa6,
-  0xff, 0x2e, 0x2b, 0xab, 0x9d, 0xdf, 0x92, 0xc6, 0x63, 0x9e, 0xe5, 0xd0,
-  0x1b, 0x3d, 0x3a, 0xb0, 0x54, 0x99, 0x12, 0x1e, 0xa4, 0x46, 0x10, 0x27,
-  0x42, 0xa3, 0x49, 0xac, 0x6a, 0x33, 0xf2, 0x2b, 0xe9, 0x37, 0xdc, 0x1e,
-  0x1a, 0x34, 0xd3, 0x33, 0x48, 0xde, 0x1e, 0x9d, 0xf7, 0xa8, 0x50, 0x37,
-  0x83, 0x9c, 0x8e, 0x3e, 0x7c, 0xcd, 0xec, 0xa1, 0x4a, 0x0a, 0x89, 0xc8,
-  0x45, 0x88, 0x7a, 0xf2, 0xe6, 0x84, 0x8a, 0x7c, 0x53, 0x3c, 0xa9, 0xae,
-  0x8d, 0x72, 0xfb, 0x3b, 0x66, 0x61, 0xf2, 0xd8, 0x5e, 0x9b, 0xff, 0xc4,
-  0xa6, 0xca, 0x68, 0x9b, 0xdf, 0x44, 0xa6, 0x4b, 0x74, 0x10, 0x1b, 0xeb,
-  0x62, 0x2e, 0x4c, 0x2e, 0x55, 0x8e, 0x19, 0x33, 0x13, 0x12, 0x46, 0x5d,
-  0x74, 0x82, 0x60, 0x0d, 0x20, 0x70, 0xc1, 0x7c, 0xc5, 0x6c, 0x60, 0xc0,
-  0x9e, 0x31, 0x9f, 0xeb, 0xd1, 0xbe, 0x04, 0xbd, 0x80, 0x9b, 0x8c, 0x18,
-  0xc4, 0xbe, 0xca, 0x05, 0x83, 0xea, 0x1c, 0xb3, 0x46, 0xb1, 0x9a, 0xe4,
-  0x13, 0xe4, 0xf0, 0x98, 0x6f, 0x94, 0x15, 0xc5, 0x5a, 0x7e, 0xcf, 0x89,
-  0xab, 0x46, 0xc9, 0xeb, 0xa9, 0x79, 0x71, 0x1a, 0xc7, 0xd6, 0x71, 0x1d,
-  0x25, 0x57, 0x0f, 0xaa, 0xc3, 0x13, 0x25, 0x05, 0x03, 0xd8, 0x1c, 0x42,
-  0x33, 0x1c, 0x83, 0x0a, 0x31, 0x27, 0xd0, 0x15, 0x33, 0x4e, 0x37, 0x0e,
-  0x12, 0xf0, 0x36, 0x00, 0x47, 0xda, 0xe8, 0x25, 0x1b, 0x44, 0x86, 0x45,
-  0x7f, 0xa2, 0x82, 0x80, 0x54, 0xcb, 0xda, 0xe8, 0x85, 0xa5, 0x40, 0x36,
-  0x64, 0xbb, 0x6e, 0x98, 0x1d, 0xcf, 0xad, 0x29, 0x21, 0x5b, 0x2a, 0xfd,
-  0x90, 0x7c, 0xf1, 0x5a, 0x88, 0x49, 0xfd, 0xc8, 0x6a, 0x1d, 0x90, 0x36,
-  0xd9, 0xe6, 0xda, 0x49, 0x92, 0xcb, 0xf4, 0xbd, 0xdf, 0x58, 0x96, 0xf0,
-  0x32, 0xfc, 0x52, 0xaa, 0x4f, 0xe7, 0xed, 0xe8, 0x34, 0xa7, 0x8b, 0xe5,
-  0xaf, 0xb3, 0xbe, 0x1e, 0x65, 0xd9, 0x3d, 0x60, 0x14, 0xb8, 0x3f, 0x24,
-  0x72, 0xed, 0x53, 0x99, 0x44, 0x42, 0x3f, 0x10, 0x74, 0x49, 0xc0, 0xad,
-  0x82, 0xfe, 0x95, 0x32, 0x13, 0xf8, 0x7b, 0x18, 0x26, 0x66, 0x1d, 0x04,
-  0xfc, 0x2c, 0xda, 0xed, 0x3e, 0x1b, 0x14, 0x87, 0x89, 0x98, 0x3a, 0x80,
-  0x3e, 0x11, 0xd7, 0x2a, 0xd1, 0xb3, 0x49, 0xc4, 0x84, 0x85, 0x58, 0x3c,
-  0x5d, 0x96, 0xd3, 0x16, 0xcc, 0xf4, 0xdc, 0xa6, 0x53, 0x4e, 0xfd, 0xb6,
-  0x21, 0xde, 0x4a, 0xbb, 0xd5, 0x97, 0x60, 0x80, 0xda, 0x30, 0xf4, 0xde,
-  0xbf, 0xfc, 0x83, 0x2b, 0xe7, 0xd5, 0xa2, 0x8d, 0x16, 0x6c, 0x78, 0x72,
-  0x56, 0x78, 0x07, 0xc7, 0x37, 0xcd, 0x67, 0x79, 0xd3, 0x87, 0xe0, 0x78,
-  0x6d, 0x64, 0x44, 0x16, 0xa4, 0xc5, 0xb6, 0x19, 0x8f, 0x67, 0xc2, 0xbb,
-  0xea, 0x80, 0x72, 0x09, 0xde, 0x6d, 0xd7, 0x3b, 0xd4, 0x2a, 0x23, 0x11,
-  0x92, 0x1a, 0xf0, 0xa4, 0x38, 0x20, 0x36, 0x8e, 0x2d, 0x32, 0xfe, 0x35,
-  0x9d, 0x51, 0x41, 0x27, 0x3c, 0x21, 0x20, 0xae, 0xe5, 0xb0, 0x34, 0x57,
-  0x0d, 0x0d, 0xac, 0x32, 0xd3, 0x7d, 0xe5, 0x45, 0xa1, 0xc6, 0x28, 0xd4,
-  0x3e, 0x61, 0x1f, 0x07, 0x96, 0xc4, 0xf6, 0x13, 0x15, 0x68, 0xb8, 0x5f,
-  0x0c, 0x57, 0x30, 0x27, 0x3a, 0xd0, 0xe7, 0x46, 0xa6, 0x89, 0xbb, 0x7c,
-  0x82, 0x92, 0x5f, 0x25, 0x2b, 0xaf, 0x46, 0x77, 0xad, 0x05, 0xfa, 0x4f,
-  0x5e, 0xa5, 0x3c, 0x86, 0x6a, 0x8b, 0xb8, 0xd8, 0x95, 0x4b, 0x12, 0x73,
-  0x9a, 0x70, 0x22, 0x2c, 0x45, 0xa1, 0xb1, 0x0c, 0x70, 0x41, 0x6d, 0xf3,
-  0x75, 0x6c, 0x73, 0xc0, 0x8c, 0x8d, 0xbb, 0xb8, 0x24, 0x2e, 0xa3, 0xd0,
-  0xa1, 0xa6, 0xe8, 0xb3, 0x81, 0x3d, 0x22, 0x5c, 0x76, 0xf3, 0x86, 0x89,
-  0x3a, 0xbe, 0xdd, 0x50, 0x6a, 0xd7, 0x45, 0x21, 0x25, 0x7a, 0x19, 0x38,
-  0x62, 0x4e, 0xe8, 0x4d, 0x3e, 0x2d, 0xa3, 0x1e, 0x30, 0x23, 0xda, 0x66,
-  0x78, 0xfd, 0xfd, 0x86, 0xb8, 0x1d, 0x88, 0xeb, 0x23, 0xbb, 0x4a, 0xe5,
-  0xb7, 0x9c, 0x14, 0xb5, 0x71, 0xc5, 0x9f, 0xf8, 0x7a, 0xc3, 0x3a, 0x27,
-  0x02, 0xe8, 0x37, 0x39, 0xd9, 0xd8, 0xa9, 0xa6, 0xd1, 0xd8, 0x7a, 0x3f,
-  0xd9, 0xdb, 0xd9, 0xf9, 0xb6, 0x97, 0x3c, 0xe3, 0x1a, 0x68, 0xbb, 0x5f,
-  0x2f, 0x2f, 0xcc, 0x09, 0x15, 0xd9, 0xd6, 0x63, 0xfd, 0x0b, 0x69, 0xc6,
-  0x98, 0x33, 0xde, 0x99, 0x16, 0xeb, 0xc5, 0x78, 0x42, 0x57, 0x80, 0xa7,
-  0x7b, 0x81, 0xd1, 0x52, 0x71, 0xf9, 0x6f, 0x30, 0x3a, 0x41, 0x83, 0x83,
-  0x87, 0x9e, 0x62, 0x6d, 0x73, 0xc9, 0x7b, 0xa1, 0xad, 0xca, 0xed, 0x42,
-  0xd9, 0x9c, 0xd2, 0x03, 0xc6, 0x8a, 0x0b, 0x03, 0xa2, 0x14, 0xf2, 0x83,
-  0x16, 0x6b, 0x49, 0xf7, 0xbc, 0x2e, 0x11, 0x72, 0x75, 0x8c, 0xec, 0x0e,
-  0x82, 0x73, 0xfc, 0x7e, 0x57, 0xe2, 0xb4, 0x87, 0xf3, 0x59, 0x37, 0x7d,
-  0xb2, 0x35, 0xa3, 0x4c, 0x00, 0x67, 0xa7, 0x67, 0xcf, 0xb6, 0x2c, 0x00,
-  0x9a, 0xb1, 0x53, 0x92, 0x00, 0x61, 0x99, 0x01, 0x6c, 0x6e, 0x84, 0x30,
-  0x57, 0x30, 0x0a, 0x2f, 0x56, 0xd0, 0xaa, 0x16, 0x9a, 0x21, 0x7c, 0xcf,
-  0x68, 0x63, 0xd9, 0x9d, 0xc3, 0x1a, 0x7a, 0xac, 0x8d, 0xee, 0x58, 0x3a,
-  0x26, 0x84, 0xb5, 0x30, 0x81, 0xac, 0x56, 0x98, 0x0e, 0xf2, 0xaf, 0xfa,
-  0x40, 0xf7, 0x25, 0x3e, 0x9b, 0x17, 0xb8, 0xdd, 0xba, 0x9d, 0x6c, 0xe7,
-  0xbc, 0xf8, 0x9c, 0x7a, 0x8c, 0xa2, 0x73, 0x0f, 0x52, 0xff, 0x2c, 0xd8,
-  0x91, 0xef, 0x5b, 0x1b, 0x4c, 0x21, 0xff, 0x0d, 0xed, 0x5b, 0x66, 0xbc,
-  0x1e, 0x2c, 0xa5, 0xb8, 0xb7, 0x4c, 0x3b, 0x2d, 0xb5, 0x59, 0x88, 0xd9,
-  0xd2, 0xe4, 0xc3, 0xc9, 0xf0, 0xc2, 0x77, 0xf9, 0xa2, 0x2c, 0x44, 0x80,
-  0x0f, 0x69, 0xa7, 0x70, 0x7b, 0xb1, 0xc3, 0x93, 0xe3, 0x48, 0x95, 0x72,
-  0x82, 0x6e, 0xed, 0x27, 0xc3, 0x72, 0xe6, 0x93, 0xea, 0xd7, 0x42, 0x7a,
-  0x8e, 0x4c, 0x59, 0xf6, 0x65, 0x6b, 0x66, 0x74, 0x5e, 0x79, 0x59, 0x1f,
-  0xe1, 0x4e, 0xa5, 0x2e, 0xfe, 0x99, 0xb1, 0x1f, 0x82, 0x1b, 0x51, 0x3c,
-  0x5a, 0xbd, 0x18, 0xf5, 0x3d, 0xce, 0x04, 0xd6, 0x77, 0xc0, 0x80, 0x66,
-  0x76, 0xaf, 0xb9, 0xa1, 0x6e, 0x42, 0x43, 0x60, 0x53, 0xf6, 0x13, 0x6f,
-  0x24, 0xe1, 0xbb, 0x68, 0xf9, 0xdf, 0xc6, 0x09, 0x19, 0x91, 0x42, 0x3e,
-  0x4a, 0x4f, 0x3f, 0x69, 0x53, 0xd1, 0x44, 0x74, 0xe6, 0x51, 0xbc, 0xb7,
-  0x6d, 0x18, 0x18, 0xb9, 0xd8, 0x7f, 0x61, 0x58, 0x41, 0x70, 0xda, 0x60,
-  0x32, 0xe1, 0x5d, 0xc7, 0xfc, 0xf9, 0xec, 0x16, 0xb0, 0xbd, 0x36, 0x87,
-  0x2e, 0xe0, 0x2d, 0xa5, 0xd8, 0x7e, 0x3e, 0x61, 0xca, 0x8b, 0xba, 0xcd,
-  0x79, 0xc1, 0x59, 0x0d, 0x24, 0x72, 0xe0, 0xc8, 0xa7, 0x4c, 0xad, 0x7a,
-  0xc9, 0x4a, 0xb2, 0xdf, 0xa4, 0x05, 0x6e, 0xe8, 0xff, 0xc0, 0x88, 0x19,
-  0xc4, 0x02, 0x7b, 0xb1, 0x4c, 0xec, 0x58, 0x0a, 0xa1, 0xcd, 0xae, 0x2a,
-  0x92, 0x8f, 0xc6, 0xb4, 0xed, 0x66, 0xe1, 0x49, 0xd1, 0x19, 0x19, 0xaa,
-  0x96, 0x99, 0x86, 0x36, 0x42, 0x2b, 0x12, 0xc4, 0xe4, 0x17, 0x45, 0x6e,
-  0xbe, 0x9f, 0xb0, 0xea, 0x7a, 0x49, 0xd8, 0xb8, 0x0a, 0x25, 0x09, 0x34,
-  0x3a, 0x92, 0x53, 0x8e, 0xac, 0x52, 0x87, 0x92, 0x53, 0xc0, 0x47, 0xd5,
-  0x85, 0x01, 0x8d, 0x65, 0x00, 0x67, 0x3f, 0x3d, 0x6a, 0xb7, 0x4d, 0x65,
-  0x02, 0xaa, 0x25, 0x49, 0x3c, 0x36, 0x17, 0xd2, 0x36, 0x12, 0xea, 0xa2,
-  0x25, 0x5e, 0xd2, 0xc4, 0x0b, 0xa1, 0xb7, 0x72, 0xe9, 0xe8, 0x10, 0x73,
-  0x06, 0xdf, 0xe6, 0xbb, 0xf3, 0xd3, 0xf7, 0xfd, 0x8b, 0x53, 0x30, 0xf9,
-  0xa3, 0xe9, 0x24, 0xa2, 0x71, 0x6a, 0x25, 0x16, 0xaf, 0x1c, 0x41, 0x1b,
-  0x7f, 0xb0, 0x59, 0x6f, 0x69, 0xb5, 0x00, 0x2e, 0xa2, 0xea, 0xd7, 0x6f,
-  0x09, 0x28, 0x95, 0x0a, 0xd6, 0x45, 0x38, 0x2c, 0x90, 0x90, 0x7f, 0x68,
-  0xec, 0xb9, 0xc9, 0xd1, 0x80, 0x0a, 0xef, 0xd1, 0xa2, 0x7e, 0x20, 0x86,
-  0x08, 0x06, 0xa4, 0x00, 0x2d, 0xd3, 0x84, 0xd5, 0x0f, 0x34, 0x31, 0xdf,
-  0x66, 0x25, 0x12, 0x8d, 0x01, 0xe3, 0x64, 0x9b, 0xd2, 0x9c, 0xdf, 0xb4,
-  0xaa, 0xca, 0x3b, 0xbd, 0xb9, 0x00, 0xee, 0x36, 0x0b, 0x69, 0x2b, 0xc8,
-  0x2d, 0x4d, 0xe1, 0x92, 0xe4, 0x64, 0x65, 0x9f, 0x5e, 0xa9, 0x00, 0xbe,
-  0x68, 0xa7, 0xd5, 0x28, 0x7a, 0xa8, 0xdf, 0x54, 0xc6, 0x5e, 0xca, 0x26,
-  0x4b, 0xd8, 0x51, 0x4f, 0x00, 0x48, 0xea, 0x20, 0x8e, 0xb4, 0x08, 0x20,
-  0x65, 0xd9, 0x81, 0x6f, 0x5f, 0xfd, 0x47, 0x96, 0x0c, 0xed, 0x4f, 0xc1,
-  0x19, 0x16, 0x5e, 0x25, 0x2e, 0x61, 0xe0, 0x30, 0x47, 0x12, 0x6e, 0xa7,
-  0xc2, 0x2b, 0xb4, 0xb7, 0x15, 0x15, 0x84, 0xac, 0x69, 0xc8, 0x03, 0xfa,
-  0x69, 0xa0, 0x4d, 0x6a, 0x2a, 0x64, 0x4e, 0x49, 0x28, 0x93, 0xc5, 0x18,
-  0xab, 0x44, 0x41, 0x0f, 0x22, 0x24, 0x1d, 0x31, 0x49, 0x8b, 0x66, 0x72,
-  0x50, 0xd3, 0x0e, 0x70, 0xc5, 0x76, 0x76, 0x57, 0xcf, 0xe2, 0xa7, 0x2c,
-  0x6d, 0x21, 0x29, 0x93, 0xc4, 0x9f, 0x97, 0xb1, 0x62, 0x59, 0x05, 0xe4,
-  0xc4, 0xc5, 0x65, 0x69, 0x19, 0x9e, 0x23, 0x02, 0x6b, 0x9a, 0x92, 0x03,
-  0xfe, 0xbe, 0xd1, 0x90, 0x1d, 0xb1, 0x58, 0xd0, 0xf6, 0x45, 0x58, 0xfa,
-  0x2b, 0xae, 0x16, 0xdb, 0x6a, 0x71, 0x6b, 0x85, 0x17, 0xd1, 0x96, 0xd8,
-  0xf5, 0x56, 0xef, 0xa4, 0xe7, 0xad, 0xc6, 0x92, 0x95, 0xd3, 0x4a, 0x9e,
-  0xb6, 0x7c, 0x0b, 0x23, 0x19, 0xec, 0x9c, 0xcb, 0xc9, 0x06, 0xc7, 0xc2,
-  0x15, 0xd7, 0x00, 0x20, 0xf4, 0x54, 0x44, 0x3c, 0xa5, 0x96, 0x33, 0xb3,
-  0x49, 0xf4, 0xa3, 0xc9, 0x26, 0x79, 0x01, 0xc7, 0x3e, 0xc2, 0xf3, 0x44,
-  0x7e, 0xb5, 0xaf, 0xd0, 0x33, 0x92, 0x62, 0x5d, 0xc5, 0xfd, 0xd9, 0x0f,
-  0x3f, 0x24, 0x6d, 0xbe, 0xe8, 0xad, 0x48, 0x95, 0x45, 0x48, 0x23, 0x98,
-  0x14, 0x66, 0xe5, 0x4a, 0xbf, 0xbb, 0x01, 0x5c, 0x99, 0xf7, 0x9c, 0x51,
-  0x09, 0x00, 0x01, 0x1b, 0xd8, 0x5c, 0x10, 0x2d, 0x70, 0xaf, 0x98, 0xb9,
-  0xbc, 0x97, 0xb8, 0x88, 0x6b, 0x02, 0x2e, 0xc5, 0xfe, 0x71, 0x04, 0x96,
-  0xc0, 0x69, 0x22, 0x16, 0xe8, 0x26, 0x59, 0xc0, 0x64, 0x4f, 0xb6, 0x27,
-  0xcc, 0x2b, 0x89, 0x7e, 0x4d, 0x6e, 0x60, 0x5c, 0x08, 0x8f, 0x72, 0x5a,
-  0x73, 0x7e, 0x0f, 0x46, 0x86, 0x4b, 0x9f, 0x8b, 0x0d, 0x11, 0xee, 0xc5,
-  0xab, 0xcd, 0xcd, 0x12, 0x39, 0x46, 0x00, 0x42, 0x79, 0x79, 0x53, 0x06,
-  0x63, 0x0d, 0xb0, 0xc2, 0xa9, 0x77, 0x62, 0x1c, 0xbf, 0x42, 0x67, 0xcd,
-  0x18, 0xc8, 0x17, 0x96, 0x85, 0x40, 0xa9, 0x6f, 0x4a, 0x72, 0x41, 0x7e,
-  0x78, 0xc9, 0x91, 0x33, 0x21, 0x3d, 0xe6, 0xfb, 0xe6, 0x4f, 0xb6, 0x72,
-  0x73, 0x3b, 0x6c, 0x41, 0xbb, 0x20, 0x56, 0xe2, 0x45, 0x85, 0x09, 0x16,
-  0x86, 0xb8, 0x7c, 0x28, 0x5d, 0x55, 0x79, 0x12, 0xc9, 0xa3, 0xa7, 0x91,
-  0x3b, 0xd6, 0xa8, 0x5b, 0x2c, 0xfd, 0xc1, 0xc5, 0xa3, 0x47, 0x96, 0xf3,
-  0xe1, 0x48, 0xcc, 0xb4, 0xe2, 0xae, 0xfd, 0xbe, 0x31, 0x4a, 0xfb, 0x78,
-  0xac, 0x5e, 0xc6, 0x54, 0xe2, 0x82, 0x1b, 0xdc, 0x42, 0xed, 0x4f, 0x98,
-  0xfa, 0xb6, 0x6d, 0x5a, 0x93, 0xc0, 0x77, 0xf9, 0xfc, 0x22, 0xe7, 0xa9,
-  0x7b, 0xb4, 0xfc, 0x00, 0x0f, 0x92, 0x88, 0xcc, 0xbf, 0xcf, 0x3e, 0x5e,
-  0x6c, 0xf5, 0x6c, 0xc9, 0x07, 0xd9, 0xad, 0x3e, 0xce, 0x51, 0xf2, 0x02,
-  0x42, 0x02, 0x7b, 0xce, 0xdb, 0x11, 0x39, 0x05, 0xd9, 0xe0, 0x2a, 0x91,
-  0x98, 0xd3, 0xf8, 0x6c, 0x67, 0xd7, 0x58, 0x52, 0x3b, 0x7b, 0x60, 0xc7,
-  0x7e, 0xb6, 0xf3, 0x6c, 0xa0, 0xc5, 0x4a, 0xf5, 0xa9, 0xe0, 0x5a, 0xa0,
-  0x8d, 0x8d, 0x62, 0x6d, 0xe4, 0x39, 0x11, 0x74, 0x67, 0xf2, 0xec, 0xfe,
-  0x1e, 0xbf, 0x6a, 0x43, 0xf4, 0xfa, 0x16, 0xed, 0x6d, 0xbb, 0x1a, 0xbf,
-  0xf9, 0xbd, 0x19, 0x47, 0x00, 0x66, 0x51, 0x70, 0x4e, 0x05, 0xf8, 0xc7,
-  0x29, 0x35, 0x68, 0xb0, 0x8c, 0x30, 0xb3, 0xe9, 0x66, 0x40, 0xfb, 0x8c,
-  0x99, 0x66, 0xaf, 0xb4, 0x72, 0xca, 0x34, 0xcf, 0x28, 0x14, 0xce, 0x78,
-  0x8c, 0x71, 0xb3, 0xa4, 0x30, 0x3c, 0xdb, 0xb9, 0xf7, 0x15, 0xe3, 0xd6,
-  0x96, 0x30, 0x97, 0x9d, 0x88, 0x24, 0x45, 0x64, 0xc6, 0xd9, 0x72, 0xf7,
-  0x09, 0x99, 0x6c, 0x0e, 0x05, 0x66, 0x58, 0xff, 0xba, 0x27, 0x50, 0x1b,
-  0xfe, 0xd7, 0xb3, 0xf6, 0x5d, 0x79, 0x95, 0x17, 0x7d, 0x6d, 0xf3, 0xb5,
-  0xfc, 0x25, 0xf0, 0x57, 0x1e, 0xbf, 0x3f, 0x38, 0x83, 0x72, 0x9c, 0x0c,
-  0xdf, 0x23, 0x2d, 0xd8, 0xa3, 0xa3, 0x40, 0x13, 0xb6, 0x5b, 0xa2, 0xa6,
-  0x08, 0xdf, 0xbc, 0x88, 0xe8, 0x95, 0xc2, 0x63, 0x05, 0x59, 0xab, 0x4b,
-  0xd8, 0xe6, 0x8f, 0x38, 0x38, 0xaa, 0x47, 0x89, 0x61, 0xab, 0xaf, 0xa9,
-  0x6a, 0x1c, 0x0d, 0xdf, 0xc9, 0xf5, 0xc0, 0x45, 0x92, 0x58, 0x8e, 0x4a,
-  0x1f, 0xbb, 0xa5, 0xeb, 0x0f, 0x50, 0x87, 0x5e, 0xea, 0xcc, 0x87, 0x66,
-  0x2a, 0x4d, 0x45, 0x8f, 0xed, 0x54, 0xe6, 0x85, 0x7f, 0x4f, 0x36, 0x8f,
-  0x40, 0xa3, 0x5a, 0x73, 0xc1, 0x2e, 0x6b, 0x70, 0x39, 0x79, 0x95, 0x8a,
-  0xba, 0x73, 0x31, 0x52, 0xa6, 0xa6, 0xf6, 0x3c, 0x9a, 0x73, 0x48, 0x57,
-  0x2b, 0xe9, 0xfd, 0xc4, 0x1a, 0xb6, 0xf7, 0xec, 0xf3, 0xe7, 0x3d, 0xfc,
-  0xed, 0xc5, 0xce, 0xab, 0x3d, 0x71, 0x0f, 0x1e, 0x1f, 0x5d, 0xbc, 0xeb,
-  0x3a, 0xf4, 0x2a, 0xb3, 0x9f, 0xf8, 0xbf, 0x54, 0x9d, 0xe6, 0xda, 0x18,
-  0x18, 0x94, 0x10, 0xd9, 0xaf, 0x67, 0xcd, 0xbc, 0xbf, 0xb3, 0x33, 0x68,
-  0xee, 0x9b, 0x7f, 0x22, 0x61, 0xe3, 0xb3, 0xe7, 0xed, 0xd8, 0x0b, 0xa9,
-  0xf5, 0x7d, 0x9a, 0xef, 0xe5, 0xbc, 0x3d, 0xbc, 0xbf, 0x9c, 0x8f, 0x2e,
-  0x55, 0x9a, 0x2f, 0x5b, 0x3f, 0xd0, 0x05, 0x56, 0xfd, 0xaa, 0xca, 0xb2,
-  0x1b, 0x22, 0x66, 0x76, 0xd7, 0xad, 0x2e, 0x78, 0x89, 0x4d, 0xb6, 0x23,
-  0x9a, 0x87, 0x2d, 0xf6, 0x5d, 0xa7, 0xca, 0x69, 0x0e, 0x21, 0x2f, 0x56,
-  0x44, 0x34, 0x23, 0xa9, 0x16, 0xe4, 0x79, 0x95, 0x51, 0x5e, 0x35, 0x2b,
-  0x7e, 0x05, 0x8b, 0xa4, 0xc7, 0x73, 0xc3, 0x31, 0x05, 0xd5, 0x78, 0x2e,
-  0x99, 0x08, 0xfc, 0x6f, 0xba, 0x8a, 0x5b, 0x90, 0xb7, 0xbd, 0x17, 0x91,
-  0x89, 0xc3, 0x85, 0xfd, 0x0b, 0x26, 0xae, 0x3d, 0x6f, 0x4e, 0x3d, 0x62,
-  0x37, 0x1e, 0x8c, 0x5e, 0x89, 0x16, 0x84, 0x39, 0xbb, 0xb5, 0xf2, 0x4a,
-  0xff, 0xe2, 0xb1, 0xd0, 0x74, 0x0f, 0x56, 0x71, 0x4c, 0xb8, 0xb7, 0x1e,
-  0x19, 0x8b, 0x0e, 0xa5, 0x3b, 0x92, 0x9e, 0xe3, 0x39, 0xa5, 0xfb, 0x83,
-  0xda, 0x63, 0x2f, 0xbe, 0xa2, 0x5f, 0x3a, 0xcd, 0x9d, 0x67, 0xf3, 0x0c,
-  0x43, 0xf7, 0x03, 0xcc, 0xde, 0xe6, 0xb6, 0x76, 0x6a, 0xe3, 0x95, 0x5b,
-  0x32, 0xf7, 0x68, 0x3e, 0x27, 0xde, 0xa5, 0x3a, 0xea, 0x6b, 0x69, 0x17,
-  0x9b, 0xc0, 0x5c, 0xaa, 0x5f, 0xb6, 0xa7, 0xc5, 0x21, 0xf9, 0x7d, 0x9d,
-  0x63, 0x9b, 0x05, 0x17, 0x66, 0x1b, 0x91, 0xc9, 0x8e, 0x26, 0xec, 0x52,
-  0x95, 0x2e, 0x65, 0x89, 0xdb, 0x2e, 0xe3, 0x0a, 0x80, 0xdf, 0x8b, 0xc2,
-  0x23, 0xb3, 0x40, 0x7d, 0x0d, 0x9b, 0xa3, 0xbf, 0xf9, 0xdd, 0xf9, 0xbb,
-  0xbf, 0xd8, 0x14, 0xc7, 0xad, 0x5e, 0xdc, 0x1a, 0xd6, 0xfe, 0xfa, 0x15,
-  0x43, 0x2d, 0x44, 0x49, 0xd2, 0xeb, 0x5a, 0x13, 0xef, 0xfe, 0x11, 0x62,
-  0xe9, 0x98, 0xba, 0x28, 0xd9, 0x34, 0xef, 0x51, 0x82, 0xd1, 0x50, 0x8c,
-  0xba, 0x67, 0x83, 0x17, 0xf0, 0x8a, 0xbc, 0x3b, 0x7c, 0xf1, 0x6c, 0x6f,
-  0xd7, 0xd8, 0xad, 0x9b, 0x1d, 0x69, 0xb1, 0xf5, 0xe8, 0x30, 0xdb, 0xeb,
-  0x9d, 0xdd, 0xcf, 0x69, 0xef, 0x6d, 0x1e, 0xfd, 0x70, 0xf6, 0xc1, 0x1b,
-  0xa0, 0x5d, 0x81, 0x20, 0xf3, 0xcc, 0x1f, 0x21, 0x27, 0xb8, 0xd8, 0x31,
-  0xba, 0xdb, 0x36, 0xd8, 0x52, 0x3d, 0x24, 0x76, 0x85, 0x39, 0x85, 0xeb,
-  0xef, 0xaa, 0x9c, 0xf4, 0xdc, 0x75, 0x9a, 0x8f, 0xf5, 0x93, 0xb2, 0x98,
-  0x98, 0xdb, 0xff, 0x94, 0x12, 0xf1, 0xb3, 0x75, 0xa3, 0xc6, 0x3e, 0x3a,
-  0xba, 0xe5, 0xc7, 0xe4, 0x7d, 0x0f, 0x47, 0xa5, 0x08, 0xa1, 0x08, 0xef,
-  0xf1, 0x43, 0xd0, 0x1f, 0x51, 0xba, 0x28, 0x67, 0x1e, 0x2c, 0x24, 0xab,
-  0x03, 0x6c, 0xf9, 0xed, 0xd3, 0x76, 0x8f, 0xea, 0x88, 0xf0, 0xfa, 0xbc,
-  0x86, 0x53, 0x7b, 0x59, 0x3c, 0x84, 0x47, 0xce, 0xd1, 0x10, 0x3c, 0xbe,
-  0xa9, 0x8e, 0xfd, 0x2d, 0xc7, 0x27, 0xcf, 0x1a, 0xbc, 0x86, 0x3b, 0xa0,
-  0xaa, 0x47, 0x64, 0x2e, 0x3f, 0xea, 0xcc, 0x8a, 0xdc, 0x22, 0x59, 0x25,
-  0x19, 0xc7, 0xfc, 0x00, 0x69, 0x76, 0xbd, 0x36, 0x47, 0x41, 0xc4, 0x0f,
-  0x8e, 0x50, 0x2f, 0x6a, 0xcc, 0xa4, 0x45, 0x9b, 0xcf, 0x05, 0x35, 0x81,
-  0x60, 0x03, 0xa1, 0xd4, 0x1a, 0x94, 0xc4, 0x97, 0xcf, 0x42, 0xa7, 0xd6,
-  0xe9, 0xc5, 0xd1, 0x3e, 0xe2, 0x17, 0x2e, 0x8b, 0x56, 0x15, 0x62, 0x06,
-  0xca, 0x10, 0xec, 0xb8, 0x10, 0xfc, 0xbc, 0x3f, 0x3a, 0x0e, 0xc3, 0x45,
-  0xa8, 0x16, 0xb0, 0x19, 0xd8, 0xa9, 0xd9, 0x74, 0xd0, 0x14, 0x8e, 0xec,
-  0x45, 0xab, 0x59, 0xb9, 0xf8, 0x5b, 0xac, 0x72, 0xcc, 0x25, 0xa7, 0xdf,
-  0x21, 0xa3, 0x8d, 0xaf, 0x95, 0x60, 0xa2, 0x24, 0x50, 0x06, 0xc3, 0xc2,
-  0xfa, 0x12, 0xc7, 0x65, 0x31, 0xce, 0xaa, 0x00, 0x09, 0x82, 0x60, 0x14,
-  0x79, 0x61, 0x91, 0xcb, 0x7c, 0xa1, 0x8c, 0x1a, 0xd1, 0x32, 0x66, 0x9e,
-  0x24, 0x77, 0x31, 0xb3, 0xee, 0xde, 0x11, 0x2b, 0x84, 0xdc, 0x5d, 0x4b,
-  0xcb, 0xcc, 0x90, 0xc3, 0xcb, 0x86, 0xd1, 0xc4, 0xcb, 0x45, 0x3b, 0x46,
-  0xed, 0x11, 0x32, 0x9f, 0xac, 0x2e, 0x2e, 0x39, 0xb0, 0x61, 0xa4, 0x16,
-  0x27, 0xbd, 0x6d, 0xff, 0x3b, 0xbb, 0xd2, 0x2b, 0x8a, 0x47, 0x94, 0x8e,
-  0xb6, 0x64, 0x94, 0x58, 0xb1, 0x71, 0x56, 0x11, 0x68, 0xa0, 0x5e, 0x27,
-  0x6a, 0xc2, 0x9a, 0x1a, 0x8d, 0xab, 0x5e, 0x54, 0x93, 0xc5, 0xcc, 0x1c,
-  0x50, 0x57, 0xc1, 0x50, 0x14, 0x1c, 0xd8, 0x6e, 0x80, 0x1e, 0x44, 0x5c,
-  0xe2, 0x2f, 0x76, 0x5a, 0x8d, 0x0d, 0x30, 0xf0, 0x4e, 0x60, 0xb7, 0xbf,
-  0x8b, 0x5b, 0x44, 0xc2, 0x6c, 0x8b, 0x42, 0xa2, 0x79, 0xbf, 0x63, 0x4c,
-  0x65, 0xd6, 0x93, 0x95, 0x62, 0x74, 0x15, 0xfd, 0xf7, 0x8b, 0x40, 0x62,
-  0x3c, 0xa9, 0xb4, 0x24, 0x0e, 0xee, 0xdd, 0x75, 0x39, 0xcd, 0x12, 0x2f,
-  0xd4, 0x1b, 0x9a, 0x2d, 0x64, 0x8e, 0x0f, 0x3c, 0x52, 0x5a, 0xf1, 0x5b,
-  0xd3, 0xc1, 0x90, 0xb5, 0xa1, 0x89, 0x87, 0x77, 0x69, 0x44, 0xb9, 0x4e,
-  0xc9, 0x5f, 0xcb, 0x91, 0x60, 0xed, 0xc8, 0x4c, 0x8a, 0x25, 0x03, 0x5f,
-  0x02, 0xbd, 0xba, 0x30, 0x1b, 0x6d, 0xb2, 0x60, 0x27, 0x22, 0x75, 0xa8,
-  0xc8, 0x1a, 0x66, 0x1c, 0xa3, 0xb2, 0x49, 0xe4, 0xde, 0x4f, 0xae, 0x98,
-  0x47, 0x13, 0xe8, 0x34, 0x25, 0x5f, 0x0b, 0x93, 0x77, 0xf6, 0x28, 0x55,
-  0xb3, 0x79, 0xb4, 0xd2, 0x64, 0xcf, 0x26, 0xf2, 0xa7, 0xe3, 0x66, 0x21,
-  0xb3, 0xde, 0xed, 0x5d, 0xa9, 0xee, 0x40, 0xf3, 0x2e, 0x88, 0xcd, 0x90,
-  0x0d, 0x39, 0x36, 0x9b, 0x2f, 0x1d, 0x3f, 0xe8, 0xb5, 0xe8, 0xee, 0x10,
-  0x2d, 0xf6, 0x69, 0x69, 0xd0, 0x82, 0xc1, 0xda, 0x4e, 0x50, 0x6c, 0x2f,
-  0xaf, 0x7f, 0x3d, 0x0b, 0xe9, 0xaf, 0x82, 0xd0, 0x76, 0x4b, 0x5c, 0xfa,
-  0xa7, 0x3d, 0x6b, 0x52, 0x9a, 0xe5, 0xc7, 0x73, 0x16, 0x5b, 0xe6, 0x2f,
-  0x47, 0xc1, 0x40, 0x3d, 0x59, 0x95, 0x63, 0x0e, 0xfb, 0x2a, 0x8f, 0xf2,
-  0x71, 0x78, 0x63, 0xbe, 0x97, 0xaf, 0xb0, 0x48, 0xdc, 0x84, 0xbc, 0x52,
-  0x48, 0x3e, 0x1b, 0x54, 0xcf, 0x93, 0x4d, 0xb2, 0x73, 0x92, 0x17, 0x9f,
-  0xbf, 0x78, 0xbe, 0x25, 0xc5, 0x98, 0x2d, 0x30, 0x6a, 0x2b, 0x82, 0x4f,
-  0xe5, 0xe3, 0xb6, 0xa8, 0x2d, 0xe2, 0x7f, 0x96, 0x73, 0x59, 0x4a, 0x90,
-  0x7b, 0x4e, 0xb4, 0xf4, 0x00, 0x20, 0xe0, 0xe6, 0x62, 0x07, 0xa9, 0xba,
-  0x56, 0xac, 0x0c, 0xab, 0xbc, 0x6b, 0x4d, 0xcb, 0x4d, 0xb9, 0xf1, 0x9d,
-  0xfc, 0xb6, 0xd9, 0x1e, 0xc2, 0x55, 0x07, 0x75, 0x44, 0xe9, 0xea, 0xb6,
-  0x90, 0x8d, 0x15, 0x45, 0x6b, 0xb0, 0x6b, 0x89, 0x4b, 0x9e, 0xf1, 0xf5,
-  0x78, 0x4d, 0x15, 0x11, 0x4a, 0xef, 0x6a, 0x60, 0x27, 0x00, 0x67, 0x2b,
-  0xf0, 0xdd, 0x13, 0xe3, 0x5d, 0x32, 0x7a, 0x29, 0x62, 0xd2, 0x74, 0x97,
-  0xb5, 0xe7, 0x91, 0x69, 0x3c, 0x68, 0xa7, 0xe8, 0xfb, 0x02, 0x07, 0x92,
-  0x35, 0x21, 0x93, 0x26, 0x48, 0x73, 0x9b, 0x65, 0x33, 0x65, 0x3d, 0xe6,
-  0x4b, 0xb6, 0xac, 0x5c, 0xb9, 0x1f, 0x8e, 0x47, 0xf0, 0x8d, 0x09, 0x08,
-  0xe3, 0xb2, 0x3c, 0x65, 0xb5, 0xf8, 0x53, 0x4d, 0xa8, 0x6c, 0xf5, 0x6c,
-  0x29, 0xbe, 0x5c, 0x77, 0x9b, 0x66, 0x2e, 0x77, 0x61, 0xe5, 0xfa, 0x77,
-  0xbb, 0x2b, 0xc3, 0x1a, 0x38, 0xfc, 0xd5, 0xce, 0x44, 0x2c, 0xe9, 0x3d,
-  0x97, 0xc1, 0x01, 0xe3, 0x06, 0xfc, 0x05, 0xfd, 0x90, 0x42, 0x20, 0xd9,
-  0x44, 0x87, 0xb7, 0xb7, 0xb7, 0x1e, 0xef, 0xb4, 0x3c, 0xf9, 0x58, 0x27,
-  0xcf, 0xd8, 0x88, 0xf7, 0x08, 0x12, 0x2f, 0xbd, 0x3e, 0xd0, 0x37, 0x69,
-  0xc5, 0x98, 0xc4, 0x90, 0x71, 0x8e, 0x0c, 0x13, 0x01, 0x3f, 0xb7, 0x51,
-  0x4d, 0x22, 0x1c, 0x11, 0x70, 0x89, 0xa4, 0x32, 0xc0, 0xf6, 0xd8, 0xc5,
-  0xbc, 0x63, 0x2e, 0x10, 0x11, 0x21, 0x84, 0x03, 0x02, 0x45, 0xc3, 0xc1,
-  0x34, 0xa8, 0xe3, 0xd8, 0xea, 0x96, 0x37, 0x38, 0x18, 0x73, 0x1d, 0xa7,
-  0x32, 0x4e, 0x21, 0x73, 0x98, 0xa8, 0xfb, 0x39, 0x02, 0xd7, 0xd6, 0xa7,
-  0x55, 0x1a, 0x71, 0xa6, 0x56, 0x84, 0xdf, 0x87, 0x9f, 0xa4, 0x03, 0xa4,
-  0xee, 0xe8, 0xbc, 0x88, 0xa8, 0x91, 0xce, 0x69, 0x88, 0x06, 0x8d, 0x44,
-  0xbd, 0x71, 0x63, 0x66, 0x72, 0x1d, 0xf4, 0x56, 0xb4, 0x2c, 0xe7, 0xdb,
-  0x4e, 0xab, 0xd0, 0xc3, 0x8c, 0xbe, 0xd9, 0xfd, 0x8d, 0x19, 0xd3, 0xba,
-  0x95, 0xf8, 0x69, 0x6b, 0x32, 0x7b, 0x7c, 0x46, 0x91, 0x34, 0x1c, 0xd3,
-  0x4a, 0x51, 0x0d, 0x20, 0x4c, 0x4c, 0xb4, 0x73, 0xb8, 0x12, 0x6f, 0x66,
-  0x01, 0x67, 0xec, 0xd2, 0x7c, 0xac, 0xba, 0xb4, 0x36, 0xda, 0xb6, 0xaa,
-  0x3b, 0xf5, 0x88, 0x6d, 0x8e, 0xe5, 0x12, 0x8a, 0x17, 0x29, 0x8b, 0xf6,
-  0x41, 0x1f, 0x33, 0x46, 0xf6, 0xd9, 0x87, 0xa3, 0xaf, 0x4f, 0xb7, 0x1e,
-  0xf3, 0xc6, 0xb5, 0xe5, 0xbf, 0x1d, 0x17, 0xe0, 0x67, 0x15, 0xc1, 0xd7,
-  0xb8, 0xfb, 0xd0, 0xc3, 0xbf, 0x1e, 0x0e, 0xfb, 0x07, 0x67, 0xc7, 0x28,
-  0xdd, 0x30, 0x34, 0x7f, 0x2e, 0xa1, 0x16, 0x93, 0x6a, 0xe9, 0xdf, 0x49,
-  0x3a, 0x55, 0x2d, 0x6a, 0x46, 0x02, 0x6f, 0x17, 0x50, 0x18, 0x50, 0x1e,
-  0x44, 0xc3, 0xb3, 0x99, 0xaa, 0x68, 0xbe, 0x6b, 0x40, 0x9d, 0x1d, 0x6f,
-  0xe3, 0x53, 0xf4, 0x49, 0x0c, 0x68, 0x49, 0x69, 0xe5, 0x45, 0x58, 0xb8,
-  0x81, 0x34, 0x1f, 0x20, 0x2a, 0x21, 0xa0, 0x15, 0x9f, 0x6a, 0xcc, 0x1c,
-  0xba, 0x4e, 0x5c, 0x70, 0x2a, 0x9e, 0x0d, 0x40, 0x4e, 0x1f, 0x82, 0x7b,
-  0xa7, 0x4d, 0x16, 0xf3, 0x32, 0xc1, 0x18, 0x61, 0x76, 0x0d, 0xaa, 0x8d,
-  0x68, 0xae, 0x60, 0x41, 0x38, 0x75, 0xcd, 0xff, 0x8d, 0xfe, 0x22, 0x49,
-  0xf6, 0x37, 0x18, 0x4d, 0x99, 0x15, 0x54, 0x51, 0x14, 0x84, 0x1a, 0x1d,
-  0x73, 0xbb, 0x55, 0xc1, 0xc5, 0x52, 0x11, 0x9a, 0x4e, 0x06, 0x5b, 0x10,
-  0xef, 0xa8, 0xde, 0x53, 0x65, 0x14, 0x08, 0x61, 0xf5, 0x86, 0x71, 0x2e,
-  0x93, 0x7f, 0x0a, 0xe7, 0xf9, 0x0a, 0x0d, 0x64, 0xc4, 0x41, 0x42, 0x38,
-  0x8c, 0x8a, 0x66, 0x3a, 0x93, 0xbf, 0xa6, 0xc5, 0x03, 0x1c, 0x83, 0xe2,
-  0xa9, 0x06, 0xb9, 0x86, 0xdd, 0xd3, 0xed, 0x8d, 0xde, 0x54, 0x63, 0x98,
-  0xb4, 0x0c, 0xb8, 0x9c, 0xa5, 0xa1, 0xc2, 0x7b, 0xd1, 0xe5, 0x27, 0x73,
-  0xb5, 0xb9, 0x92, 0x7e, 0xd1, 0xd3, 0x56, 0x7a, 0xad, 0x4a, 0x98, 0xcc,
-  0x03, 0x86, 0x4d, 0x10, 0x11, 0x45, 0x28, 0x6d, 0xb0, 0x69, 0x6c, 0x87,
-  0x72, 0xba, 0xe0, 0xda, 0x46, 0xe4, 0xfe, 0x23, 0xbc, 0xff, 0x96, 0xc6,
-  0xb4, 0x28, 0x35, 0xc1, 0xb4, 0xaa, 0x90, 0x46, 0x06, 0xc9, 0x1e, 0x86,
-  0xd0, 0x64, 0x57, 0x77, 0x63, 0xe0, 0x42, 0x0a, 0x1c, 0x33, 0x13, 0x4b,
-  0x9c, 0x66, 0x96, 0xdb, 0x42, 0x53, 0x73, 0x80, 0x70, 0x6e, 0x95, 0x14,
-  0x23, 0x5c, 0x3f, 0x5d, 0xab, 0xd6, 0xec, 0xa8, 0x27, 0x99, 0x44, 0xb7,
-  0x5f, 0xea, 0xc7, 0xd3, 0x1a, 0xa3, 0xe9, 0x29, 0xcb, 0x70, 0xb9, 0x1a,
-  0x16, 0x1f, 0xd1, 0x29, 0x19, 0x3d, 0xd8, 0x8f, 0xf1, 0x77, 0x52, 0x00,
-  0x57, 0xac, 0x22, 0xfc, 0x54, 0xa6, 0x00, 0xb7, 0x18, 0x83, 0x55, 0xc0,
-  0x8b, 0xf6, 0x97, 0x3a, 0x4d, 0x7f, 0x47, 0xa5, 0x38, 0xec, 0x12, 0x73,
-  0xb1, 0x53, 0x7f, 0x91, 0x59, 0xcb, 0xef, 0xd2, 0xb5, 0xd3, 0x44, 0x0c,
-  0xf0, 0x44, 0xb0, 0x81, 0x29, 0x68, 0x6c, 0x47, 0xa5, 0xea, 0x11, 0x79,
-  0x96, 0x52, 0x2e, 0x13, 0xc1, 0x2f, 0x7b, 0xdf, 0xb0, 0xd9, 0x09, 0xe5,
-  0xea, 0x4a, 0x2e, 0x6e, 0x75, 0x06, 0x4f, 0x98, 0x10, 0x37, 0x7e, 0xf7,
-  0xc3, 0xc0, 0xb2, 0xb3, 0x91, 0xd1, 0x7a, 0x2c, 0x2c, 0x27, 0x03, 0xd9,
-  0x85, 0x9b, 0x9f, 0xe4, 0x2f, 0x74, 0x06, 0xbe, 0xcf, 0x0b, 0xa3, 0x19,
-  0xd6, 0x5b, 0xba, 0x39, 0xf3, 0x68, 0x25, 0x72, 0x92, 0x1d, 0x1b, 0x54,
-  0xaa, 0x64, 0x96, 0x79, 0xb0, 0x34, 0x52, 0x9c, 0x39, 0x38, 0x11, 0x88,
-  0x22, 0xaf, 0x60, 0xc7, 0xc3, 0x3c, 0x80, 0xf4, 0x8f, 0xad, 0xd0, 0x41,
-  0x1b, 0xa0, 0x3d, 0x33, 0x66, 0x41, 0x91, 0xdf, 0xbb, 0x60, 0x36, 0xee,
-  0x0d, 0x4e, 0xcf, 0x76, 0xbe, 0x1d, 0xa9, 0xe2, 0x19, 0xe9, 0x5d, 0x10,
-  0xad, 0xa1, 0xd9, 0xc5, 0x38, 0x37, 0x5f, 0x6c, 0x25, 0x97, 0xcd, 0x7c,
-  0x73, 0x77, 0x0b, 0x1f, 0xd3, 0x3a, 0x60, 0x5e, 0xb1, 0x8e, 0xd0, 0x91,
-  0x43, 0x48, 0x3a, 0x9c, 0x50, 0xc7, 0x61, 0x8b, 0x5a, 0x1b, 0xe4, 0xba,
-  0x84, 0x4e, 0x81, 0x32, 0xec, 0x98, 0x30, 0x4b, 0x97, 0x09, 0xd0, 0x6e,
-  0xcc, 0x81, 0x0a, 0x84, 0xcb, 0x9c, 0xd8, 0xa1, 0x6a, 0xae, 0x2f, 0xbd,
-  0x99, 0x37, 0x3e, 0x0f, 0x17, 0x71, 0xdf, 0xe5, 0x1c, 0xb7, 0x2f, 0xab,
-  0xe9, 0xa4, 0x4f, 0x32, 0xe4, 0xaa, 0x2a, 0xcd, 0x15, 0x59, 0x45, 0xe8,
-  0x82, 0xc4, 0xa6, 0x20, 0x55, 0x3f, 0x2b, 0x6e, 0xf3, 0xaa, 0x2c, 0xc0,
-  0x93, 0x75, 0x9b, 0x56, 0x39, 0x82, 0xda, 0xeb, 0xdf, 0x9c, 0xbe, 0x3f,
-  0x5a, 0xf7, 0xfd, 0x22, 0x97, 0xb9, 0x78, 0x8c, 0xb1, 0x7e, 0x5d, 0x7f,
-  0xac, 0xae, 0x66, 0x18, 0xae, 0x49, 0x12, 0x73, 0xa5, 0x1b, 0x2d, 0x87,
-  0x6d, 0xa9, 0x5b, 0x3d, 0x4c, 0xa4, 0xda, 0xdb, 0x88, 0xb0, 0x51, 0x27,
-  0x25, 0xe6, 0x2d, 0x35, 0x03, 0x74, 0x97, 0x85, 0x80, 0x13, 0xb8, 0x12,
-  0xd4, 0x38, 0x04, 0xa5, 0x6b, 0xe9, 0xb3, 0xd6, 0x27, 0x1e, 0xb3, 0x3d,
-  0x29, 0xfa, 0xbc, 0x01, 0xb0, 0xb4, 0x31, 0x10, 0xf8, 0xc6, 0xec, 0x81,
-  0x2c, 0x9b, 0x8d, 0xf6, 0x05, 0xb8, 0x51, 0x93, 0x31, 0xde, 0x6c, 0xe8,
-  0xf4, 0x02, 0x1c, 0xb9, 0xa2, 0xfe, 0xe2, 0xb2, 0x6f, 0xf3, 0xae, 0xe6,
-  0x4f, 0xb8, 0xd6, 0xb9, 0x71, 0x77, 0xfa, 0xf6, 0x7b, 0x52, 0x77, 0xbe,
-  0x2b, 0xd2, 0x02, 0x72, 0x86, 0xd4, 0xe5, 0xac, 0xb4, 0xeb, 0x10, 0xb5,
-  0x03, 0xe7, 0xc4, 0x98, 0x18, 0x3a, 0x16, 0xcd, 0xe7, 0xcb, 0x31, 0xb3,
-  0x64, 0xb8, 0x08, 0xa2, 0x5c, 0x65, 0x92, 0x29, 0xce, 0xf8, 0x62, 0x57,
-  0xdf, 0x54, 0xe5, 0x7e, 0x42, 0x4d, 0x2e, 0xe1, 0x67, 0xa2, 0xfa, 0xe4,
-  0xa8, 0x82, 0xa4, 0x3c, 0x4f, 0xc0, 0x5f, 0x92, 0xc3, 0xd3, 0x42, 0x09,
-  0xe5, 0x6b, 0x3d, 0x3f, 0xcb, 0xb3, 0x17, 0xd6, 0x44, 0x87, 0x35, 0xec,
-  0xb0, 0x17, 0x56, 0x39, 0x61, 0x2e, 0x2f, 0x66, 0xbe, 0xb2, 0x9c, 0x26,
-  0x5a, 0x7d, 0x29, 0x54, 0x92, 0xed, 0x74, 0xaa, 0x1f, 0x97, 0x28, 0xa6,
-  0x08, 0x86, 0xc2, 0x36, 0x8d, 0x0d, 0xf1, 0x62, 0x3b, 0xb2, 0xd6, 0x41,
-  0x84, 0x9a, 0x4a, 0xd5, 0x17, 0x35, 0xb1, 0xed, 0xa1, 0x34, 0x63, 0x63,
-  0xe7, 0x0e, 0x11, 0xa4, 0xdd, 0x22, 0x1b, 0x4f, 0x38, 0xa5, 0x19, 0x0d,
-  0xeb, 0x16, 0x25, 0x0e, 0x0d, 0x80, 0x60, 0x77, 0x3d, 0xcc, 0xa5, 0xea,
-  0x29, 0x44, 0xcd, 0xd7, 0xdc, 0x0b, 0xdb, 0x41, 0x6b, 0xee, 0x10, 0x31,
-  0x00, 0xab, 0xb2, 0x01, 0x2e, 0xbd, 0xac, 0xc1, 0x35, 0xd6, 0x54, 0xe9,
-  0xd8, 0xfd, 0xa5, 0x9f, 0xd6, 0xe3, 0x3c, 0x57, 0x8e, 0x62, 0x0a, 0x87,
-  0x65, 0x84, 0x00, 0x8d, 0x33, 0x38, 0xe8, 0x7a, 0x24, 0x96, 0x1c, 0x74,
-  0x52, 0xb2, 0x9b, 0x97, 0x41, 0x16, 0x29, 0xd3, 0xd7, 0x13, 0x64, 0x03,
-  0xd5, 0x48, 0x25, 0x56, 0x16, 0xa3, 0x6d, 0x56, 0x56, 0xa7, 0x25, 0xf6,
-  0xad, 0x31, 0xc1, 0x77, 0x7d, 0x1b, 0x5c, 0x27, 0xa1, 0x3f, 0x41, 0xf1,
-  0x5f, 0xb6, 0x27, 0xef, 0xee, 0xf6, 0x06, 0x2b, 0xea, 0x49, 0xfa, 0x01,
-  0x8f, 0x97, 0x1d, 0x0b, 0x85, 0xf9, 0x48, 0x62, 0xf6, 0xc9, 0x70, 0xab,
-  0x55, 0xcc, 0xe1, 0xe0, 0xe4, 0xec, 0x83, 0xd4, 0x9a, 0x27, 0x0a, 0xc6,
-  0x02, 0x4e, 0xb2, 0x44, 0x7e, 0xec, 0x8a, 0x3c, 0x53, 0x00, 0x27, 0x28,
-  0x40, 0x29, 0x74, 0xd1, 0xb0, 0x22, 0xc2, 0xbc, 0x1e, 0xc6, 0x73, 0x15,
-  0x20, 0x49, 0x50, 0xfb, 0x05, 0x52, 0x5e, 0x8d, 0x8c, 0xee, 0x70, 0xcc,
-  0x27, 0x07, 0xfc, 0x61, 0x95, 0xb4, 0xa3, 0x07, 0x97, 0x7a, 0xd3, 0x7e,
-  0xd7, 0x92, 0xe0, 0x94, 0x89, 0x50, 0xde, 0x04, 0x42, 0xbd, 0xc9, 0x2c,
-  0xdf, 0x8e, 0x18, 0x77, 0xae, 0x94, 0x33, 0xbb, 0x96, 0x04, 0x94, 0x80,
-  0x6c, 0x7b, 0xcd, 0xdb, 0xad, 0x57, 0x67, 0x5a, 0x9b, 0x89, 0x2d, 0xe6,
-  0x45, 0x90, 0x68, 0x6d, 0x67, 0x3c, 0x92, 0xfd, 0x14, 0x20, 0x6b, 0x9f,
-  0x94, 0x0b, 0x45, 0x4b, 0x32, 0x58, 0xb1, 0xc4, 0x1f, 0x7a, 0xfc, 0xd1,
-  0xd1, 0x82, 0x64, 0x44, 0xe7, 0x1b, 0xb2, 0xc0, 0xac, 0x3b, 0xf1, 0x13,
-  0x52, 0x9d, 0xdb, 0x51, 0x7f, 0x10, 0x0b, 0x51, 0x96, 0xce, 0x88, 0xbe,
-  0x5f, 0xd1, 0xf1, 0xe4, 0x00, 0x26, 0x0c, 0x63, 0x77, 0x2a, 0x17, 0xa9,
-  0xc8, 0xac, 0x16, 0x37, 0x62, 0x07, 0x34, 0xcf, 0x9f, 0x21, 0xd0, 0x8c,
-  0xdf, 0x7c, 0x2c, 0x11, 0x0a, 0xaf, 0xdb, 0x7c, 0x6c, 0x89, 0xe0, 0x68,
-  0x4d, 0x0b, 0xa6, 0x20, 0xe4, 0x26, 0x6c, 0x79, 0x2b, 0x62, 0x64, 0xbe,
-  0x5e, 0x14, 0x37, 0xa6, 0x0b, 0x61, 0xa2, 0xa6, 0xe2, 0x5b, 0x73, 0x92,
-  0x5e, 0x28, 0x09, 0x43, 0x7f, 0x11, 0xf2, 0x3b, 0x6d, 0x81, 0xd8, 0x0f,
-  0x6f, 0xc9, 0x9f, 0x17, 0x56, 0x15, 0x8c, 0xf5, 0x6e, 0x62, 0x4f, 0x48,
-  0xda, 0xb8, 0x09, 0x8c, 0x62, 0xb8, 0x75, 0x9d, 0x5d, 0x2d, 0x35, 0xb3,
-  0x1f, 0x3d, 0xf4, 0x90, 0x14, 0x2d, 0x57, 0x66, 0x14, 0xa4, 0xe1, 0x28,
-  0xea, 0x26, 0x10, 0x88, 0x8b, 0x9a, 0x53, 0x9f, 0x64, 0x59, 0x69, 0x3f,
-  0xf8, 0x8c, 0xca, 0x91, 0x9e, 0xb4, 0xb3, 0x86, 0x97, 0xed, 0x83, 0x76,
-  0x89, 0x17, 0x97, 0x64, 0x2c, 0xd0, 0x0b, 0xab, 0xba, 0x51, 0xdd, 0x13,
-  0xbf, 0xdc, 0x42, 0x44, 0x72, 0x69, 0xfe, 0x92, 0xad, 0xfe, 0xce, 0xac,
-  0xc7, 0x36, 0xba, 0xf3, 0x4f, 0x9c, 0x24, 0x37, 0x0e, 0x6f, 0x9e, 0xec,
-  0x0f, 0x3b, 0x73, 0x54, 0x3c, 0x49, 0x1c, 0x7e, 0x30, 0xd2, 0x87, 0x84,
-  0xa1, 0x27, 0x0b, 0x3f, 0xb0, 0x40, 0x52, 0x39, 0xe8, 0x46, 0xda, 0xf5,
-  0x7a, 0x5d, 0xfe, 0x1a, 0x21, 0x48, 0xcd, 0x13, 0xa4, 0xfc, 0xec, 0x43,
-  0xb7, 0x39, 0xcb, 0xf4, 0x3d, 0x02, 0xc2, 0xe4, 0x31, 0x31, 0x68, 0x0d,
-  0x78, 0xf9, 0xd9, 0x12, 0x07, 0xd7, 0xaf, 0x97, 0x81, 0x6d, 0xaa, 0xab,
-  0xb8, 0x08, 0x2c, 0x5a, 0x12, 0x50, 0x94, 0xfa, 0xdf, 0x4d, 0x06, 0xd2,
-  0x17, 0xa5, 0xcb, 0xf9, 0x24, 0x9a, 0x5c, 0x6e, 0xd7, 0x56, 0xaa, 0x9d,
-  0x48, 0xe0, 0x82, 0x56, 0x43, 0x69, 0x2d, 0x8e, 0xdf, 0x9a, 0x4d, 0x46,
-  0x2a, 0xeb, 0x95, 0x19, 0xc4, 0x57, 0xcb, 0x16, 0x17, 0x65, 0x15, 0x35,
-  0xba, 0x0b, 0x33, 0x9f, 0x2a, 0x48, 0x7a, 0x30, 0x06, 0x6a, 0x23, 0xf3,
-  0xb8, 0xbd, 0x25, 0x03, 0x4e, 0x79, 0xac, 0xe3, 0x6e, 0x09, 0x8a, 0x5b,
-  0x57, 0x9c, 0x62, 0x9a, 0x5c, 0x2f, 0xa8, 0x6c, 0x10, 0xdd, 0x78, 0x4c,
-  0x20, 0x24, 0x6c, 0xdd, 0x55, 0x46, 0x7d, 0x6e, 0x77, 0x38, 0xa8, 0x8e,
-  0xcb, 0xce, 0xec, 0x3a, 0x33, 0x07, 0x91, 0xf3, 0x63, 0x46, 0x55, 0x79,
-  0x93, 0xf1, 0xae, 0x83, 0x75, 0x41, 0x87, 0x8a, 0x85, 0xb8, 0xfa, 0x64,
-  0x8d, 0x98, 0x9b, 0x58, 0x98, 0x5e, 0x44, 0x9d, 0xa5, 0xca, 0x0b, 0x92,
-  0x4d, 0xee, 0x84, 0x61, 0xee, 0x92, 0xb9, 0x95, 0x12, 0x96, 0x97, 0x6b,
-  0x3c, 0xce, 0x22, 0x7e, 0x08, 0xbf, 0xe0, 0x75, 0xa3, 0xa5, 0x17, 0x97,
-  0x1d, 0x7e, 0xff, 0xec, 0x8b, 0xa3, 0x66, 0xf9, 0xc9, 0xb7, 0xab, 0xee,
-  0x9f, 0xfc, 0xc8, 0x8a, 0x3e, 0xbd, 0x9e, 0x82, 0xd9, 0x4b, 0x70, 0x84,
-  0x25, 0xaf, 0xcd, 0xa6, 0x62, 0x97, 0x18, 0x85, 0xb4, 0xba, 0xde, 0x2e,
-  0xd4, 0x04, 0xe9, 0xab, 0xe5, 0x31, 0x91, 0xc4, 0xab, 0x4b, 0xc9, 0x44,
-  0x60, 0x28, 0xff, 0xc4, 0x55, 0xea, 0x11, 0xde, 0xd9, 0x1e, 0xeb, 0x48,
-  0x66, 0xc7, 0x44, 0x0e, 0xb9, 0xf3, 0xe3, 0x70, 0xe6, 0x27, 0xd4, 0x70,
-  0x5a, 0x1e, 0xf0, 0x89, 0xe4, 0x5e, 0xcd, 0xd5, 0x7f, 0x23, 0xec, 0xab,
-  0x51, 0x6a, 0x1b, 0x02, 0x3e, 0xe1, 0x5b, 0x81, 0xd6, 0xc9, 0x0c, 0xf9,
-  0x36, 0x37, 0x82, 0x29, 0x0f, 0x2c, 0x5d, 0x06, 0x51, 0x58, 0xfb, 0xaa,
-  0x01, 0x93, 0xe2, 0x26, 0x47, 0x64, 0xb3, 0x44, 0x0c, 0x42, 0x76, 0x5c,
-  0xe4, 0x35, 0x67, 0x05, 0xa2, 0xb7, 0xfc, 0x05, 0x60, 0x94, 0xc4, 0xc0,
-  0x4e, 0x15, 0x7f, 0xc4, 0x83, 0xb7, 0x75, 0xe0, 0xc3, 0x53, 0x4f, 0x3d,
-  0x62, 0x80, 0x8f, 0x58, 0x69, 0xfa, 0x03, 0xcb, 0x8c, 0xff, 0xce, 0xb3,
-  0x89, 0x12, 0xb6, 0x51, 0xa0, 0x1c, 0x73, 0xaa, 0x6c, 0x6c, 0xb0, 0x89,
-  0xf7, 0x98, 0xff, 0xca, 0xfe, 0xe7, 0x3b, 0x9a, 0xd8, 0x4d, 0xd1, 0x2e,
-  0xff, 0x19, 0x54, 0x33, 0x08, 0xd5, 0x08, 0x7a, 0xcc, 0xfc, 0xd4, 0x3e,
-  0x19, 0xca, 0x40, 0x61, 0x76, 0x7b, 0xf1, 0x8c, 0x42, 0xde, 0x71, 0x97,
-  0x12, 0xdf, 0xb3, 0xbe, 0x13, 0xc1, 0x7a, 0x11, 0xea, 0x18, 0xbe, 0xd1,
-  0x3b, 0x5b, 0x76, 0x35, 0x8e, 0x25, 0x5c, 0xba, 0x41, 0x49, 0x77, 0x71,
-  0x87, 0xc4, 0x24, 0xaf, 0x23, 0x3e, 0x0c, 0x86, 0x6c, 0xc9, 0x86, 0xb3,
-  0xd5, 0x0d, 0xc0, 0xa5, 0xcf, 0x5b, 0x1b, 0xab, 0x68, 0x0e, 0xcc, 0x3a,
-  0xf8, 0xb0, 0x6d, 0xe5, 0xce, 0x7c, 0x65, 0x5e, 0xd6, 0xee, 0xab, 0xc1,
-  0xf3, 0xd6, 0x39, 0x69, 0xa6, 0xb3, 0xfe, 0xdd, 0xe8, 0x91, 0xd0, 0xc7,
-  0xc5, 0xc9, 0xfb, 0x64, 0xb6, 0x40, 0xfd, 0x40, 0x21, 0xaa, 0x7c, 0x98,
-  0x66, 0xea, 0x85, 0x26, 0xff, 0x0e, 0xbb, 0x0a, 0x89, 0x78, 0x12, 0x1d,
-  0x89, 0xe1, 0x9a, 0x3a, 0x6e, 0x7e, 0x97, 0x29, 0x29, 0x66, 0xbf, 0x54,
-  0x23, 0xa1, 0x26, 0xd9, 0x9d, 0x3d, 0x27, 0xb6, 0xb7, 0x18, 0xf0, 0x57,
-  0xb1, 0xa4, 0xd9, 0x7d, 0x36, 0x5e, 0x20, 0x4c, 0x4d, 0xda, 0x21, 0x91,
-  0xdb, 0xac, 0xf6, 0x9f, 0x7b, 0x3e, 0x73, 0xf1, 0x92, 0x9b, 0x1f, 0x74,
-  0x27, 0xa3, 0x3b, 0x76, 0x1e, 0x7c, 0xe0, 0x3c, 0xc3, 0xd9, 0x8e, 0xfe,
-  0x2e, 0x08, 0x15, 0x03, 0xc2, 0x4e, 0x17, 0xa2, 0xd9, 0x52, 0xf9, 0x55,
-  0xc1, 0x4a, 0xc7, 0xfb, 0x7c, 0x5c, 0x95, 0x75, 0x79, 0xc9, 0xd8, 0x2c,
-  0xcf, 0x42, 0x3a, 0x3e, 0x1e, 0x26, 0x77, 0xd9, 0x48, 0x73, 0x41, 0x07,
-  0xa1, 0x2f, 0x19, 0x32, 0x84, 0x02, 0x24, 0x55, 0x9e, 0x35, 0x34, 0x65,
-  0x1a, 0x12, 0x25, 0xf6, 0x1a, 0x14, 0xed, 0xec, 0x67, 0xc5, 0x95, 0x31,
-  0x56, 0xa1, 0xbf, 0x53, 0xb9, 0x8a, 0x29, 0x5f, 0x4c, 0xf3, 0xac, 0x8c,
-  0xc4, 0xc5, 0xb9, 0x03, 0x7a, 0xad, 0x48, 0xc1, 0x14, 0xba, 0xc3, 0x47,
-  0x29, 0x75, 0x89, 0x55, 0xc9, 0x1c, 0x45, 0x72, 0x48, 0x47, 0x11, 0xbf,
-  0xe5, 0x0d, 0xb9, 0xcc, 0x82, 0xfc, 0x0c, 0x5b, 0x0f, 0xbc, 0xe3, 0xbc,
-  0x2b, 0x26, 0x65, 0x05, 0x30, 0x92, 0x47, 0x8d, 0x8e, 0x72, 0x16, 0x8b,
-  0x0a, 0x09, 0x87, 0xd4, 0xbf, 0x87, 0x50, 0x9e, 0xde, 0x5d, 0x73, 0xd8,
-  0x56, 0x57, 0x81, 0x2e, 0x27, 0xe4, 0x96, 0x72, 0x32, 0x8b, 0x30, 0x0d,
-  0x73, 0x35, 0x37, 0xbd, 0x6e, 0xbc, 0xd5, 0x88, 0x25, 0xa3, 0xe8, 0x7a,
-  0xb8, 0x44, 0x4a, 0xf1, 0xce, 0xbc, 0xcd, 0xaf, 0x96, 0xd4, 0x6c, 0xb1,
-  0x74, 0x06, 0xb8, 0x9c, 0x70, 0x62, 0xd1, 0x1b, 0xb9, 0x32, 0x2b, 0x3e,
-  0xa3, 0x61, 0x21, 0xa2, 0x58, 0x41, 0x64, 0xbe, 0xef, 0x62, 0xbb, 0xcf,
-  0x4b, 0x85, 0xff, 0xad, 0x6b, 0xc4, 0x2c, 0x3d, 0x12, 0xed, 0xae, 0xd8,
-  0x13, 0x10, 0x53, 0xf9, 0x7c, 0x2d, 0x2f, 0xa0, 0x5d, 0xf0, 0x42, 0xb2,
-  0x71, 0xa5, 0x6f, 0x19, 0xdf, 0x29, 0x22, 0x5a, 0x11, 0x5c, 0x8a, 0x17,
-  0x94, 0x9d, 0xd8, 0x82, 0x85, 0xb4, 0x3e, 0xed, 0x90, 0x97, 0x7f, 0x76,
-  0x4b, 0xfa, 0xc1, 0x5e, 0x7f, 0x94, 0x19, 0x6d, 0xae, 0xfa, 0x25, 0x49,
-  0x18, 0x5f, 0xe1, 0x8d, 0xe4, 0x02, 0x2a, 0x16, 0xad, 0xe9, 0xe9, 0xc1,
-  0xc7, 0x8b, 0x6f, 0x92, 0x64, 0x8f, 0x58, 0x8f, 0x9f, 0x92, 0x84, 0x01,
-  0x51, 0xd0, 0x6a, 0xc5, 0x95, 0xa5, 0xa3, 0x0b, 0xf4, 0xaf, 0x8b, 0xa2,
-  0xcd, 0x76, 0x1d, 0x73, 0xce, 0xe3, 0xe2, 0x94, 0x3b, 0x97, 0xd3, 0x82,
-  0x5b, 0x08, 0x62, 0x2d, 0x11, 0xc0, 0x4b, 0xd1, 0xef, 0x63, 0xbe, 0x91,
-  0xae, 0xb6, 0x3a, 0x8e, 0x59, 0x47, 0xd9, 0x28, 0xb4, 0xb7, 0xd2, 0x5d,
-  0xe5, 0xcb, 0xd1, 0x80, 0x69, 0x95, 0x89, 0x87, 0xbf, 0xe9, 0x16, 0x9b,
-  0x39, 0x7f, 0x77, 0xd8, 0x69, 0xee, 0xe5, 0x67, 0x2f, 0x76, 0x7e, 0x47,
-  0x88, 0x5e, 0x49, 0x7e, 0x11, 0xf1, 0x1f, 0x44, 0x49, 0x62, 0xbe, 0xaf,
-  0x28, 0x49, 0x53, 0x3d, 0x0c, 0xa5, 0x3c, 0xe4, 0xe7, 0x91, 0xd7, 0xcd,
-  0x84, 0xe0, 0x5a, 0x7a, 0x92, 0x69, 0x74, 0xac, 0xe7, 0xff, 0xe7, 0x7f,
-  0x85, 0x39, 0xa4, 0x3f, 0xfe, 0xcc, 0x4e, 0xe2, 0x4b, 0x94, 0xc4, 0x71,
-  0x98, 0x76, 0x95, 0x2f, 0xb5, 0xbb, 0x8a, 0xe9, 0x28, 0x6f, 0xfc, 0x61,
-  0xc3, 0x12, 0xf5, 0x43, 0xd9, 0x8f, 0x66, 0x20, 0xeb, 0xad, 0x29, 0x7d,
-  0xd3, 0x85, 0xad, 0xa4, 0x02, 0xa9, 0xd5, 0x03, 0x5c, 0xe9, 0x00, 0xe1,
-  0xae, 0x9f, 0x2c, 0x2b, 0x3e, 0xa1, 0x84, 0xf3, 0x42, 0xdd, 0xae, 0x7e,
-  0x72, 0xf2, 0x8e, 0x33, 0xb8, 0x0a, 0xfd, 0x27, 0x1d, 0x14, 0xa9, 0xba,
-  0x79, 0xb1, 0xc4, 0x6f, 0x29, 0x08, 0xa2, 0xff, 0x34, 0x2b, 0xd0, 0x6b,
-  0xee, 0xca, 0xff, 0x6a, 0xfb, 0x30, 0x8d, 0x6a, 0x41, 0x3d, 0xfe, 0xf4,
-  0x87, 0x5d, 0x4a, 0x7e, 0x59, 0xef, 0x36, 0xc1, 0x38, 0x76, 0xbb, 0xaa,
-  0x56, 0x33, 0x5a, 0xc5, 0x8e, 0xa9, 0x1f, 0xa4, 0xd4, 0xda, 0x1e, 0x29,
-  0x8c, 0xff, 0x85, 0x7a, 0xbd, 0x3f, 0xee, 0xf6, 0x5f, 0xfc, 0x6c, 0x3f,
-  0xfa, 0x87, 0xdd, 0x4f, 0x7f, 0xd8, 0x5b, 0x8f, 0xe6, 0x36, 0xb9, 0x54,
-  0x77, 0x0f, 0xa2, 0x48, 0x7a, 0x6c, 0xf1, 0x20, 0x19, 0x09, 0x12, 0x62,
-  0x74, 0xd5, 0x72, 0x50, 0x08, 0x2a, 0xa4, 0x03, 0x22, 0x8f, 0x55, 0x47,
-  0x45, 0xd5, 0x82, 0x39, 0x2a, 0x1c, 0xee, 0x4a, 0x7e, 0x59, 0xbc, 0x29,
-  0x52, 0xfa, 0x52, 0xa0, 0xf2, 0x81, 0x10, 0x2c, 0xb2, 0xf6, 0xde, 0x20,
-  0x72, 0x10, 0x65, 0x94, 0x08, 0x67, 0x43, 0x70, 0x51, 0xe6, 0x1a, 0x4b,
-  0x93, 0xce, 0xa4, 0x8f, 0x46, 0xf6, 0x27, 0x45, 0x16, 0xe4, 0x1c, 0x41,
-  0x09, 0x46, 0x77, 0xd8, 0x70, 0xb3, 0x52, 0xc1, 0xbc, 0x69, 0xe3, 0xd6,
-  0x12, 0xce, 0x42, 0xef, 0x5d, 0x09, 0x30, 0xaa, 0x44, 0xd5, 0x95, 0x16,
-  0x7f, 0x5d, 0x68, 0x7d, 0x36, 0x77, 0x93, 0x98, 0x96, 0x72, 0x57, 0xb7,
-  0x93, 0x7f, 0x26, 0x81, 0x17, 0xca, 0x65, 0x4f, 0xb8, 0x5c, 0x4b, 0x34,
-  0x1b, 0x35, 0x1d, 0x51, 0x35, 0x9b, 0x56, 0x1d, 0x04, 0x9a, 0x0f, 0xdc,
-  0x36, 0x23, 0xc7, 0xad, 0x94, 0xd6, 0x4b, 0x26, 0xc4, 0x9f, 0x0a, 0x6f,
-  0x12, 0x64, 0xa2, 0x30, 0x39, 0x2b, 0x1c, 0xba, 0x9c, 0x01, 0x4a, 0xf0,
-  0xd1, 0x26, 0xeb, 0x7b, 0x29, 0xa0, 0xc8, 0x38, 0xc5, 0x4f, 0x3d, 0x88,
-  0x9b, 0xc4, 0xf5, 0xfa, 0x41, 0x30, 0xd2, 0x6c, 0xa2, 0xc9, 0x83, 0x91,
-  0x84, 0x4c, 0x35, 0x69, 0xb9, 0xeb, 0xd4, 0x35, 0x20, 0xb2, 0xc6, 0xec,
-  0xb3, 0x8d, 0xfe, 0x46, 0xb2, 0xe9, 0xb2, 0xac, 0x92, 0x49, 0x5a, 0x5f,
-  0x6f, 0xc5, 0xfc, 0x8f, 0xce, 0xe5, 0xe7, 0x04, 0xd5, 0x48, 0x7c, 0x0e,
-  0x74, 0x55, 0xb2, 0x84, 0x8a, 0x0e, 0x4c, 0x2f, 0xea, 0x53, 0xc4, 0x49,
-  0x18, 0x27, 0xd8, 0x67, 0xf7, 0x9a, 0x78, 0x6c, 0xbc, 0x9f, 0xf5, 0x91,
-  0x92, 0xcc, 0x3f, 0xff, 0x8f, 0xf0, 0x5e, 0x90, 0x27, 0x19, 0xea, 0xd5,
-  0xe7, 0x7c, 0x1f, 0x77, 0x81, 0x52, 0x10, 0x2f, 0x79, 0x3d, 0xbf, 0xae,
-  0x8c, 0xda, 0x17, 0xa6, 0x15, 0x0d, 0xbf, 0x49, 0x98, 0xdf, 0xcf, 0x3c,
-  0xc5, 0xcf, 0xd8, 0x0d, 0x32, 0x77, 0x1c, 0x76, 0xbf, 0x23, 0x25, 0x1c,
-  0xa1, 0x48, 0xfa, 0x69, 0xdd, 0x0f, 0x54, 0x9c, 0xa0, 0xa6, 0x2e, 0x59,
-  0x21, 0x84, 0x5e, 0xa4, 0x78, 0x5a, 0x31, 0x46, 0x85, 0xb9, 0x64, 0x7b,
-  0x30, 0xd8, 0x26, 0x81, 0xb5, 0x6d, 0xfe, 0xd0, 0x08, 0x7e, 0xc2, 0x60,
-  0xdb, 0x6e, 0x99, 0x0f, 0xb3, 0xd1, 0x01, 0x59, 0x01, 0x33, 0x84, 0x54,
-  0x8a, 0x72, 0xf1, 0xf5, 0xfa, 0x6f, 0x0b, 0x20, 0x50, 0x2b, 0xa3, 0x48,
-  0x56, 0x9c, 0xb7, 0x3a, 0x6b, 0xdd, 0x91, 0x41, 0x71, 0x0d, 0x76, 0xa8,
-  0xd7, 0xc2, 0x8e, 0xd0, 0x5c, 0x77, 0xb2, 0xa9, 0x18, 0x3d, 0x03, 0x5c,
-  0x70, 0xde, 0x28, 0x31, 0x15, 0x12, 0x86, 0xd3, 0x95, 0x86, 0xdc, 0xf3,
-  0xbd, 0xb6, 0xc3, 0x63, 0x9e, 0x17, 0xc6, 0xb4, 0x30, 0x2a, 0x31, 0x48,
-  0x07, 0x09, 0x82, 0x17, 0xa6, 0xab, 0x08, 0xa5, 0x76, 0xbb, 0xcc, 0x82,
-  0x57, 0xda, 0xd7, 0x6a, 0x1c, 0xaa, 0x5a, 0x33, 0xeb, 0x22, 0x87, 0xf1,
-  0x37, 0x83, 0xcb, 0x92, 0x3f, 0xb2, 0xc5, 0x37, 0xa6, 0x80, 0x74, 0xb1,
-  0x21, 0x32, 0xbe, 0xdb, 0xa4, 0xfe, 0xcc, 0x08, 0x8e, 0x13, 0x02, 0x01,
-  0x41, 0x6b, 0x47, 0x6b, 0x31, 0x77, 0x87, 0xf5, 0x35, 0x58, 0x0f, 0x89,
-  0x2b, 0x25, 0x42, 0x63, 0x26, 0xde, 0x46, 0x33, 0xef, 0x6f, 0x8f, 0xce,
-  0x45, 0x3d, 0x81, 0xe7, 0xc1, 0x95, 0x46, 0x0b, 0xab, 0xff, 0x92, 0x05,
-  0xf3, 0xf2, 0xb9, 0xad, 0x9b, 0x57, 0x5f, 0xa7, 0x7b, 0x2f, 0x5e, 0x4a,
-  0xb7, 0x95, 0x20, 0x0a, 0xf7, 0xf6, 0x06, 0xff, 0x6a, 0x7b, 0x9b, 0xa3,
-  0xe5, 0x64, 0x93, 0x06, 0x72, 0x21, 0x95, 0xe2, 0x7f, 0x1b, 0x7f, 0xde,
-  0x88, 0xe2, 0xe4, 0x54, 0x63, 0x65, 0xbb, 0x9d, 0xbc, 0xce, 0xc0, 0xf2,
-  0xf9, 0x94, 0xe2, 0x5a, 0x6a, 0x52, 0x0b, 0x89, 0x72, 0xa2, 0x7f, 0xa0,
-  0x35, 0xb4, 0x98, 0xc3, 0x85, 0x51, 0x41, 0xeb, 0x8e, 0x24, 0x9a, 0x7b,
-  0x49, 0x95, 0xc6, 0xfd, 0xf9, 0xa9, 0xb9, 0x2c, 0xdc, 0x38, 0x64, 0xed,
-  0x10, 0xcc, 0x1b, 0xad, 0x86, 0xd7, 0xb0, 0x80, 0x3f, 0xf3, 0x86, 0x99,
-  0xec, 0x68, 0xe3, 0x69, 0xb4, 0x85, 0x5d, 0x31, 0xe8, 0xa9, 0xf9, 0x42,
-  0x90, 0x1d, 0xa2, 0xfb, 0x42, 0x91, 0x51, 0x6c, 0xc9, 0x7b, 0xe8, 0x40,
-  0x77, 0x5a, 0xcc, 0x75, 0x50, 0x35, 0x1d, 0xd2, 0x95, 0x38, 0xdb, 0xac,
-  0x92, 0x85, 0x00, 0x1d, 0x36, 0xce, 0x72, 0x66, 0x1a, 0x32, 0x6b, 0x4b,
-  0xf1, 0x9e, 0xe0, 0x1c, 0x98, 0xad, 0xb0, 0x4d, 0xfb, 0x40, 0x8c, 0x8c,
-  0x80, 0x8f, 0x9c, 0x9c, 0xcb, 0xaf, 0x06, 0x3b, 0xfb, 0xc9, 0xe9, 0x3c,
-  0x2b, 0xcc, 0x1a, 0xf4, 0x92, 0xaf, 0x8b, 0x05, 0x2d, 0x09, 0x8d, 0xfa,
-  0xeb, 0xe1, 0xb7, 0x01, 0xed, 0x01, 0xbd, 0xf1, 0xfc, 0x19, 0xbd, 0xf1,
-  0x61, 0xc8, 0x4f, 0xdd, 0x95, 0xd3, 0x4b, 0xaa, 0xe3, 0x7a, 0xf8, 0x90,
-  0x9a, 0x3f, 0x62, 0x8f, 0x7f, 0x46, 0x8f, 0x9b, 0x8d, 0x37, 0x69, 0xa6,
-  0x75, 0xec, 0xf7, 0xe8, 0xc0, 0x59, 0x39, 0x4d, 0x2b, 0xf8, 0x7b, 0x79,
-  0xf3, 0xad, 0xe8, 0xf1, 0xf3, 0xe7, 0x91, 0x1e, 0xf7, 0x96, 0x74, 0x68,
-  0xf0, 0x8f, 0xf7, 0xe8, 0x14, 0x0e, 0x3f, 0xfa, 0xdb, 0x28, 0x1d, 0xdf,
-  0x60, 0x2b, 0x02, 0xcc, 0x6e, 0x99, 0x54, 0x7f, 0x4f, 0x69, 0xce, 0x89,
-  0xf6, 0x4f, 0x29, 0xdd, 0x51, 0x81, 0x6d, 0xac, 0x41, 0x06, 0xf7, 0x67,
-  0x7b, 0xcf, 0x76, 0xb7, 0x5f, 0x0e, 0x9e, 0x0f, 0xf6, 0x2c, 0xb8, 0xcc,
-  0x6c, 0x2c, 0xf3, 0xf9, 0x06, 0x61, 0xfc, 0x65, 0x75, 0xb6, 0xf2, 0xc2,
-  0xb4, 0x43, 0x11, 0x7f, 0xfb, 0x13, 0x78, 0x8c, 0x1c, 0xac, 0x24, 0x25,
-  0x5e, 0x05, 0x3f, 0x45, 0x29, 0x56, 0x27, 0x89, 0xe8, 0x09, 0xa8, 0x13,
-  0xe2, 0xe4, 0x30, 0x86, 0x3f, 0xcd, 0xc0, 0x28, 0x37, 0xb6, 0x72, 0x53,
-  0x2e, 0xe0, 0x4b, 0x27, 0xc7, 0x8d, 0x92, 0x49, 0x8b, 0x8e, 0xc4, 0xa6,
-  0x31, 0x9d, 0xb1, 0x98, 0x53, 0x8c, 0x7b, 0xcf, 0x30, 0x5e, 0xaf, 0x06,
-  0x00, 0x67, 0x42, 0xe5, 0x5c, 0xb7, 0x14, 0x84, 0xff, 0xc6, 0x9c, 0x41,
-  0x79, 0xe2, 0x6f, 0x8c, 0xa9, 0x71, 0x4b, 0x0e, 0xe3, 0xa0, 0x9e, 0x14,
-  0xcb, 0x14, 0xe6, 0xcb, 0x61, 0x87, 0xbf, 0x60, 0x1b, 0x30, 0x87, 0xf0,
-  0xe9, 0xca, 0x0f, 0x84, 0x37, 0x01, 0x9e, 0x0f, 0x4a, 0xde, 0xa6, 0x71,
-  0xf7, 0xc3, 0xa4, 0x56, 0xeb, 0xe8, 0xf2, 0xbc, 0x11, 0xcc, 0x5d, 0x48,
-  0x84, 0xc9, 0x94, 0xb7, 0xc4, 0xbe, 0x6d, 0x26, 0x50, 0xa3, 0x69, 0x74,
-  0x29, 0x68, 0x31, 0xd7, 0xcb, 0x2a, 0xd7, 0x5c, 0x94, 0x6d, 0x81, 0xff,
-  0xd5, 0xad, 0x6b, 0x26, 0x97, 0x60, 0xac, 0xf6, 0x50, 0xa7, 0xfc, 0x93,
-  0xb6, 0xfa, 0xab, 0x77, 0xd9, 0xb3, 0xdf, 0x7e, 0x97, 0xed, 0x3d, 0x75,
-  0x97, 0x79, 0xdb, 0x8c, 0x5d, 0x40, 0x2b, 0x36, 0x9a, 0x99, 0x42, 0x2e,
-  0x83, 0x1a, 0xdf, 0x65, 0xde, 0x26, 0x73, 0xe1, 0xce, 0xd6, 0x16, 0x6b,
-  0xef, 0x31, 0xb7, 0xc9, 0x96, 0xed, 0x32, 0x6c, 0x33, 0xbb, 0xcf, 0x1e,
-  0xd9, 0x68, 0xec, 0x61, 0x5b, 0xbd, 0xcb, 0x2e, 0xda, 0x72, 0x65, 0xc5,
-  0x1e, 0xf3, 0x37, 0xc4, 0x93, 0x77, 0x99, 0x73, 0x77, 0xb1, 0xdc, 0x49,
-  0x96, 0x6c, 0x34, 0x7f, 0x9f, 0x2d, 0xad, 0x70, 0xb5, 0xfb, 0x2a, 0xb6,
-  0xcb, 0x9e, 0xfd, 0xea, 0x5d, 0xf6, 0xfc, 0xb7, 0xdf, 0x65, 0xcf, 0xfe,
-  0x9f, 0x2c, 0xfb, 0xef, 0x25, 0xcb, 0x76, 0x7f, 0xb1, 0x2c, 0xdb, 0xeb,
-  0x04, 0x34, 0x8d, 0xba, 0xca, 0x7e, 0xe6, 0x1f, 0xd5, 0xdd, 0xbf, 0xbf,
-  0xbd, 0xfd, 0x33, 0x9c, 0x27, 0xfb, 0x74, 0x5f, 0xff, 0x1c, 0x94, 0x2b,
-  0x8c, 0xa8, 0xf5, 0xc3, 0xd3, 0xc3, 0x6f, 0x87, 0xe2, 0xaf, 0x16, 0xc5,
-  0x4b, 0x15, 0x33, 0x76, 0xf0, 0x19, 0x75, 0x1d, 0xa9, 0xcf, 0x81, 0xae,
-  0xcf, 0x35, 0xcd, 0xfa, 0xf7, 0x3d, 0xf5, 0x19, 0x03, 0x69, 0x24, 0x47,
-  0x1b, 0x54, 0x66, 0x92, 0x54, 0xcc, 0x09, 0x0e, 0xd2, 0xea, 0x52, 0xd6,
-  0x2a, 0xee, 0x88, 0xf5, 0x9c, 0x8b, 0x4f, 0xa3, 0xf0, 0x5e, 0xdc, 0x6c,
-  0xae, 0x2b, 0xa4, 0x74, 0xe0, 0xd1, 0x2d, 0x0d, 0x17, 0xad, 0xea, 0x9d,
-  0xf4, 0xeb, 0x1b, 0x90, 0xbe, 0xce, 0xab, 0x6c, 0x49, 0x95, 0xd0, 0x8b,
-  0x6b, 0xef, 0xb7, 0x61, 0xf5, 0x43, 0x37, 0x5d, 0x42, 0x61, 0xe6, 0xcd,
-  0x37, 0xbd, 0x17, 0xa4, 0xa1, 0x13, 0x4b, 0x2f, 0x80, 0xa5, 0x96, 0x3f,
-  0xc4, 0xab, 0x94, 0xae, 0x43, 0xd4, 0x46, 0x18, 0xb3, 0x94, 0xa1, 0x2a,
-  0x41, 0xfd, 0xdc, 0x34, 0x19, 0xa0, 0x45, 0xf1, 0x8b, 0x94, 0x7e, 0xc3,
-  0x7f, 0x7f, 0x41, 0xdf, 0x25, 0x57, 0x2f, 0xff, 0xeb, 0x9a, 0xfe, 0x29,
-  0x25, 0x1c, 0x84, 0x25, 0xc9, 0x5f, 0xe5, 0x71, 0x7c, 0xa2, 0xfd, 0x5c,
-  0x21, 0x55, 0xc7, 0x8c, 0x79, 0x1b, 0x30, 0x00, 0x61, 0xd4, 0x3e, 0xd7,
-  0xda, 0x12, 0x90, 0xa0, 0x69, 0x06, 0x2d, 0x3f, 0x8f, 0x2b, 0x89, 0x99,
-  0x4f, 0xa5, 0xa8, 0x94, 0x01, 0x7e, 0xd5, 0x1e, 0x17, 0x21, 0x95, 0x05,
-  0xe8, 0x71, 0x61, 0x90, 0x90, 0xed, 0x98, 0x59, 0xfa, 0xa5, 0xdf, 0xbb,
-  0x3b, 0x9f, 0x87, 0xde, 0xe6, 0x8f, 0x9a, 0xcb, 0xe6, 0xf8, 0x04, 0x01,
-  0x84, 0x00, 0xaa, 0x7c, 0xe4, 0x32, 0x38, 0x62, 0x9f, 0x8d, 0xa4, 0xbb,
-  0x91, 0x03, 0x60, 0x92, 0xb1, 0xc5, 0x28, 0xb5, 0xde, 0x83, 0x0a, 0xd4,
-  0x9c, 0xbd, 0x5b, 0x43, 0x4e, 0x0a, 0x17, 0x6e, 0x22, 0xd1, 0xfc, 0x40,
-  0x5a, 0x10, 0xc2, 0x44, 0x83, 0x4c, 0x5f, 0x3a, 0x6a, 0xaa, 0x3f, 0x3e,
-  0xdf, 0xa1, 0x55, 0xd5, 0x56, 0x52, 0x2e, 0xc5, 0xcc, 0x7b, 0xee, 0x8f,
-  0xcf, 0xd2, 0xc1, 0x3f, 0x91, 0x6b, 0xe8, 0x45, 0xdb, 0x95, 0xf0, 0x07,
-  0x39, 0xe3, 0x57, 0x44, 0x88, 0xd2, 0x1f, 0xa5, 0x55, 0x24, 0x73, 0xc2,
-  0xde, 0x05, 0xc2, 0xa4, 0xe1, 0x51, 0x80, 0xeb, 0x9b, 0x5c, 0xdb, 0x58,
-  0xe0, 0xf0, 0xf6, 0x87, 0x61, 0x73, 0x9d, 0xca, 0xdf, 0xea, 0x30, 0xe9,
-  0x05, 0xf4, 0x4f, 0xe9, 0xb4, 0x47, 0xd1, 0xbb, 0x08, 0x49, 0x10, 0x56,
-  0xc7, 0xff, 0x04, 0xd1, 0x38, 0xdd, 0x79, 0x8e, 0x04, 0xe6, 0x60, 0xbf,
-  0x84, 0xbf, 0xde, 0xa1, 0x2e, 0xc8, 0xf4, 0xa6, 0x28, 0x6c, 0xec, 0x36,
-  0xab, 0xc7, 0x15, 0x55, 0x35, 0x91, 0xba, 0x00, 0x68, 0x6b, 0x4e, 0x3c,
-  0x78, 0xe6, 0x1a, 0xbb, 0xca, 0x34, 0x6b, 0xd2, 0x0e, 0x5a, 0x99, 0x31,
-  0x40, 0x87, 0x31, 0x88, 0x60, 0x91, 0x1d, 0xd8, 0x48, 0x8b, 0x52, 0xa6,
-  0xc2, 0x9d, 0x41, 0xaf, 0x3a, 0xa6, 0x38, 0x9d, 0x0c, 0x75, 0x14, 0x46,
-  0x40, 0x26, 0x34, 0x06, 0x3b, 0x04, 0x06, 0x8b, 0x23, 0xf3, 0x60, 0x77,
-  0x67, 0xef, 0x39, 0x73, 0x8e, 0xd8, 0xaf, 0x55, 0x1d, 0xa3, 0x0b, 0xe9,
-  0xbb, 0x7a, 0x84, 0x5f, 0xeb, 0xd9, 0xff, 0xe2, 0x51, 0x70, 0xbe, 0x95,
-  0x12, 0x97, 0xe2, 0x70, 0xa1, 0x33, 0x82, 0x64, 0x0d, 0xa6, 0x03, 0x1e,
-  0x5f, 0x67, 0x52, 0x3b, 0xfe, 0x97, 0x96, 0x64, 0xee, 0xf4, 0x89, 0x71,
-  0x6b, 0x97, 0xcd, 0x7c, 0x30, 0x2b, 0xff, 0x6e, 0xe6, 0x23, 0x1d, 0x94,
-  0xd5, 0x55, 0xb0, 0x73, 0x29, 0x27, 0xb1, 0xe0, 0xd9, 0x83, 0x60, 0x5c,
-  0x14, 0xd6, 0x66, 0x75, 0x82, 0x56, 0x89, 0x9b, 0x91, 0x93, 0x9e, 0x1c,
-  0x9a, 0x1e, 0x1f, 0x7d, 0xfa, 0xf8, 0x61, 0xf8, 0xf1, 0xac, 0x7b, 0x40,
-  0xcf, 0x4e, 0xcf, 0x2f, 0x8e, 0xde, 0x7e, 0x3a, 0x3b, 0x3f, 0xbd, 0x38,
-  0x3d, 0x3c, 0x3d, 0x49, 0x36, 0x77, 0xb7, 0x56, 0xa6, 0x60, 0x59, 0x77,
-  0x89, 0xc7, 0x5c, 0xa7, 0xfd, 0x67, 0xd1, 0x62, 0xbb, 0xb0, 0x49, 0xe3,
-  0x09, 0x5b, 0xfb, 0x5e, 0xb6, 0x40, 0x8b, 0x0b, 0xd8, 0xd5, 0xa7, 0x87,
-  0xec, 0x4d, 0x93, 0xab, 0x05, 0x6f, 0x66, 0x09, 0xc2, 0x6b, 0x7e, 0x4a,
-  0xdd, 0x04, 0x37, 0x46, 0x96, 0x49, 0x44, 0xd0, 0xcb, 0xde, 0x59, 0xe9,
-  0x3a, 0x7c, 0xd1, 0x55, 0x2d, 0x68, 0x0d, 0xa0, 0x31, 0xba, 0x5d, 0x51,
-  0xc7, 0xb7, 0x85, 0xdd, 0x17, 0x4c, 0xf8, 0x01, 0x5a, 0x64, 0xfb, 0x0a,
-  0x58, 0xe3, 0x25, 0x42, 0x63, 0xba, 0xac, 0x3a, 0xe8, 0x20, 0x39, 0x0b,
-  0xeb, 0xbb, 0xc8, 0x1b, 0x93, 0xac, 0xc8, 0x59, 0xd0, 0x4a, 0x3f, 0x10,
-  0xa0, 0xa3, 0xe9, 0x95, 0x38, 0xb1, 0x79, 0x80, 0x7e, 0xeb, 0xcd, 0x15,
-  0x72, 0x42, 0xb3, 0xc0, 0xbb, 0xcd, 0x6f, 0x33, 0x1d, 0xc6, 0x9d, 0xd7,
-  0x27, 0x6a, 0x8f, 0x74, 0x27, 0xf0, 0xd2, 0x45, 0x04, 0xe1, 0x91, 0x86,
-  0x7f, 0x38, 0xff, 0x06, 0x7a, 0x20, 0xb4, 0x0c, 0xe5, 0x81, 0x19, 0xfa,
-  0x63, 0x79, 0x64, 0x23, 0xf3, 0x24, 0x92, 0x1f, 0xbe, 0x47, 0x6b, 0xdf,
-  0xe3, 0x0d, 0x1d, 0x96, 0x18, 0xef, 0xb6, 0xe2, 0x90, 0x8a, 0xbe, 0xf7,
-  0x0c, 0x1d, 0x22, 0x9f, 0xbe, 0x1b, 0x8d, 0xd7, 0x15, 0x4d, 0xc1, 0x34,
-  0x57, 0x40, 0x58, 0x31, 0x3d, 0xb5, 0xa8, 0xe7, 0x89, 0x14, 0xdb, 0x14,
-  0x22, 0x5c, 0xe2, 0xd6, 0x30, 0x4a, 0xf8, 0xbe, 0x05, 0x40, 0x11, 0x22,
-  0x28, 0xe1, 0xdc, 0x7a, 0x56, 0xc4, 0x86, 0x87, 0x67, 0x11, 0x6e, 0x07,
-  0x2f, 0xd9, 0x9e, 0xa5, 0xa2, 0x56, 0xc6, 0xdc, 0x19, 0xec, 0x24, 0xc3,
-  0xf7, 0x5f, 0x09, 0xa3, 0xdf, 0x57, 0x43, 0xe6, 0x47, 0x26, 0x55, 0x58,
-  0xdf, 0x18, 0xc4, 0x59, 0x93, 0x20, 0x3c, 0xa6, 0x12, 0xc7, 0xfe, 0x53,
-  0xea, 0x92, 0xd7, 0xa4, 0xe8, 0xa1, 0x37, 0xea, 0x84, 0x13, 0xa8, 0x79,
-  0xdc, 0xbd, 0x68, 0x7e, 0x3a, 0x87, 0x67, 0xca, 0x3a, 0x8b, 0x8f, 0x7b,
-  0xb0, 0x9a, 0x3f, 0x6a, 0x2f, 0x38, 0x0f, 0x4f, 0x3c, 0x09, 0x4f, 0x39,
-  0x0a, 0xa2, 0x77, 0xa8, 0x54, 0xee, 0x4e, 0xc7, 0x59, 0x6b, 0xab, 0x66,
-  0x94, 0x84, 0xc3, 0x60, 0xc4, 0xec, 0x12, 0x8a, 0x16, 0xd2, 0xe3, 0x7a,
-  0xf8, 0x25, 0x02, 0x6b, 0x16, 0x32, 0x15, 0x67, 0x59, 0x42, 0x23, 0xe9,
-  0xd8, 0xd7, 0x5c, 0x95, 0x77, 0xac, 0x3b, 0x07, 0x7f, 0x42, 0x9d, 0x45,
-  0x26, 0x5d, 0xe5, 0x1b, 0x54, 0xa8, 0x15, 0xc0, 0xf5, 0x97, 0x6b, 0xe8,
-  0xcc, 0x3b, 0x4b, 0x53, 0x4a, 0xb8, 0x7b, 0xe0, 0x5c, 0xbd, 0x20, 0xb1,
-  0x00, 0xda, 0xce, 0x84, 0x34, 0x77, 0x07, 0x0c, 0xd7, 0x5d, 0x8d, 0xca,
-  0x43, 0x89, 0xb0, 0x84, 0x56, 0xaa, 0xbe, 0x84, 0xb2, 0xb1, 0x9f, 0x24,
-  0x6f, 0xb3, 0xe2, 0xa1, 0xdd, 0xa1, 0x1e, 0x08, 0x32, 0xe0, 0x12, 0xce,
-  0x1b, 0x97, 0xc3, 0x2d, 0x38, 0x46, 0x0a, 0x80, 0xda, 0x2e, 0x86, 0x5d,
-  0x6a, 0xf7, 0x39, 0x26, 0x01, 0xde, 0xd8, 0x69, 0x50, 0x4c, 0x8d, 0x3f,
-  0x19, 0x9b, 0xa0, 0x62, 0xd0, 0xe8, 0x1f, 0x3e, 0xf9, 0x94, 0x69, 0x00,
-  0x95, 0x1a, 0x0c, 0x98, 0x7a, 0x31, 0xfa, 0x2b, 0x1d, 0x57, 0x28, 0xed,
-  0xd3, 0x14, 0xf6, 0x2a, 0x4f, 0x84, 0x42, 0xe1, 0xc8, 0x5a, 0x36, 0x4f,
-  0x71, 0xc4, 0x2a, 0x74, 0x4d, 0x53, 0x79, 0x12, 0x84, 0x25, 0x95, 0x39,
-  0xba, 0xbd, 0x0b, 0xd0, 0xa7, 0x68, 0x06, 0x54, 0xb6, 0xe4, 0xf2, 0xd5,
-  0x2d, 0xde, 0xbf, 0x24, 0xe9, 0xc4, 0x08, 0xab, 0xce, 0x35, 0xc6, 0xb3,
-  0xc9, 0xb0, 0x3e, 0x0b, 0x32, 0xa5, 0xc7, 0x97, 0xb6, 0xa5, 0x32, 0xaf,
-  0xee, 0xfd, 0x89, 0xfe, 0x08, 0x47, 0xd1, 0x0a, 0xce, 0xd0, 0x3c, 0xeb,
-  0x69, 0xa7, 0xc7, 0x21, 0x3e, 0xf0, 0xfa, 0xb2, 0x0f, 0xbc, 0x71, 0x02,
-  0x75, 0x75, 0xdb, 0x90, 0x3d, 0x4f, 0xf9, 0xc0, 0xc7, 0x42, 0xe9, 0xcb,
-  0x74, 0x7f, 0xcf, 0x2d, 0x71, 0xf8, 0x5d, 0x5a, 0x15, 0x00, 0x91, 0xfb,
-  0x9a, 0x3f, 0x51, 0x5e, 0xcc, 0xa5, 0xaa, 0x40, 0x7a, 0x49, 0xf8, 0xdb,
-  0x2a, 0x73, 0x2c, 0xa7, 0xe4, 0x5e, 0x63, 0x66, 0x1b, 0xa1, 0x4e, 0x56,
-  0x34, 0xe8, 0xbc, 0x6c, 0x98, 0xc4, 0x99, 0x00, 0xbb, 0xa4, 0x33, 0x54,
-  0xe4, 0x62, 0xf1, 0x26, 0x59, 0x75, 0x42, 0x6a, 0xcd, 0xee, 0x26, 0x38,
-  0xbb, 0x16, 0x73, 0xda, 0x1f, 0x8a, 0xa5, 0x92, 0x90, 0xab, 0x27, 0x67,
-  0xe4, 0x8b, 0x8c, 0xba, 0x82, 0x6b, 0xc8, 0x72, 0x3d, 0xdf, 0x96, 0x39,
-  0x61, 0xa7, 0xd6, 0xec, 0x95, 0x60, 0xf4, 0x20, 0xb7, 0x4b, 0x2e, 0xc2,
-  0x3a, 0x04, 0xb0, 0x27, 0x2c, 0xe2, 0x45, 0x0c, 0x0a, 0x87, 0x04, 0x4e,
-  0xeb, 0x56, 0x86, 0x4f, 0xde, 0xc2, 0x04, 0x03, 0x1a, 0x91, 0xa2, 0x38,
-  0x2d, 0x45, 0x97, 0x8a, 0xb4, 0xd1, 0x03, 0xe3, 0x49, 0x44, 0xea, 0x1e,
-  0x50, 0x6a, 0x54, 0x04, 0x97, 0x6e, 0x0f, 0xcd, 0x60, 0xea, 0xf0, 0x34,
-  0xfb, 0xbe, 0x14, 0xef, 0x56, 0xb5, 0xc8, 0x4d, 0xa7, 0x30, 0x0e, 0x1e,
-  0x11, 0xe3, 0xf7, 0x0f, 0x0a, 0x15, 0x5b, 0xad, 0xcc, 0xcc, 0x29, 0x8b,
-  0x97, 0x6a, 0xee, 0xe4, 0x0d, 0x56, 0xac, 0x83, 0x55, 0x55, 0x0c, 0xa7,
-  0x54, 0x77, 0x98, 0x2d, 0xba, 0x47, 0xbe, 0xd0, 0x10, 0x9d, 0x45, 0xe8,
-  0x30, 0x8f, 0x13, 0xf4, 0x08, 0x71, 0x4b, 0x30, 0x71, 0x3d, 0x17, 0x8a,
-  0x17, 0x36, 0x7f, 0x54, 0xab, 0xa5, 0xa8, 0x5d, 0xdc, 0xd9, 0xb7, 0x6d,
-  0x49, 0x5c, 0xcc, 0x86, 0x29, 0x26, 0x7d, 0x23, 0x04, 0xe6, 0x2b, 0x1c,
-  0x4f, 0xce, 0x37, 0xd3, 0x02, 0xb9, 0xfa, 0xac, 0x11, 0xfc, 0x13, 0x86,
-  0xd2, 0xc9, 0xdc, 0x85, 0x20, 0x71, 0xa3, 0x12, 0x3c, 0x8b, 0xcd, 0x64,
-  0x0c, 0xac, 0xb7, 0xa4, 0xca, 0x7a, 0x8c, 0xce, 0x5e, 0x93, 0xb8, 0x30,
-  0x81, 0x3a, 0x61, 0xcb, 0x00, 0x4e, 0x3c, 0x7d, 0x32, 0x73, 0x1f, 0x39,
-  0x87, 0x0a, 0x6d, 0xc2, 0xde, 0x29, 0x04, 0x1e, 0xed, 0x7d, 0x8b, 0x7d,
-  0x35, 0xc1, 0x3c, 0x82, 0x56, 0x89, 0x99, 0xd1, 0xf9, 0x39, 0xb9, 0x96,
-  0x5c, 0xb6, 0x63, 0xb7, 0x93, 0x4a, 0x39, 0x1d, 0x71, 0x7e, 0x40, 0x4e,
-  0xe2, 0x43, 0xd4, 0xb1, 0x7c, 0x25, 0x61, 0xc1, 0x92, 0xc5, 0x88, 0x71,
-  0x75, 0x4c, 0x3a, 0xc8, 0x53, 0xfd, 0xf9, 0x38, 0xa5, 0x78, 0x6d, 0x1c,
-  0xf6, 0x36, 0x94, 0xf3, 0xd6, 0xd7, 0xa7, 0x48, 0x4e, 0x2b, 0xe6, 0xd0,
-  0xf3, 0x86, 0x71, 0x79, 0x9d, 0xfb, 0xe6, 0x11, 0xaf, 0xb8, 0x7c, 0x0f,
-  0x41, 0x7a, 0xc5, 0x95, 0x48, 0xc3, 0xee, 0x9f, 0xee, 0xb7, 0x66, 0x74,
-  0x31, 0x21, 0x4d, 0x6b, 0xb5, 0xdc, 0xad, 0xd0, 0xfe, 0xca, 0x6b, 0x73,
-  0xa2, 0x57, 0x0d, 0x0a, 0x0f, 0xfd, 0x9a, 0x41, 0x39, 0xc1, 0xe1, 0xa6,
-  0x50, 0xfa, 0xdc, 0x59, 0x11, 0xfe, 0xc8, 0x4a, 0x27, 0xec, 0x92, 0x21,
-  0x98, 0x36, 0x57, 0x14, 0xc2, 0xf4, 0x86, 0x61, 0x1f, 0xfc, 0xa5, 0x23,
-  0x79, 0x7c, 0x1a, 0xb1, 0x35, 0xe8, 0xbf, 0x3f, 0xee, 0xc3, 0xef, 0x35,
-  0xf9, 0x79, 0x69, 0x3f, 0x8e, 0x7a, 0xd2, 0x97, 0xdf, 0xa1, 0x1b, 0xf9,
-  0xfc, 0x9a, 0xbc, 0x1a, 0xaf, 0x63, 0xd9, 0x35, 0xde, 0x44, 0xc8, 0x63,
-  0xbf, 0xfd, 0xf7, 0xab, 0xa9, 0xe3, 0xb3, 0x59, 0xf1, 0x7d, 0x79, 0xec,
-  0x37, 0xff, 0x3e, 0x9f, 0xdd, 0xd5, 0x97, 0x8b, 0x95, 0x8a, 0x6f, 0x05,
-  0xc2, 0xdc, 0x96, 0x38, 0xee, 0x56, 0xf9, 0x15, 0x42, 0x51, 0x50, 0xd1,
-  0xa1, 0x54, 0x94, 0x6f, 0x45, 0x0b, 0x0c, 0xf8, 0x62, 0xf1, 0x37, 0x91,
-  0x60, 0x10, 0xcd, 0xe1, 0xe4, 0x48, 0xc5, 0x8f, 0xd7, 0xfc, 0xe7, 0x32,
-  0x0e, 0xd4, 0x23, 0xba, 0x00, 0xb5, 0x3a, 0x08, 0x0a, 0x4e, 0x30, 0x37,
-  0x80, 0x28, 0xbb, 0xb6, 0x54, 0x02, 0x4d, 0x93, 0xa2, 0x44, 0xe8, 0xd5,
-  0x58, 0x49, 0x12, 0x99, 0x1b, 0x82, 0x8a, 0x92, 0xf1, 0x65, 0x89, 0xa3,
-  0x2d, 0x46, 0x88, 0x54, 0x8e, 0xcc, 0xfb, 0x60, 0x6d, 0x69, 0x58, 0x62,
-  0x11, 0x2d, 0xbf, 0xb4, 0xa3, 0xe3, 0x29, 0xfd, 0xa6, 0x27, 0x25, 0x41,
-  0x4c, 0x73, 0xb4, 0xa1, 0x04, 0x2b, 0xa9, 0x3b, 0x09, 0x0b, 0x19, 0xf2,
-  0xb9, 0x30, 0xf6, 0x9d, 0xb4, 0xd2, 0x29, 0x43, 0x72, 0x93, 0xc3, 0xd3,
-  0x0f, 0x1f, 0x8e, 0x0e, 0xbb, 0x81, 0x3c, 0xf0, 0x54, 0x20, 0xdd, 0x00,
-  0xbc, 0xea, 0xa2, 0xe4, 0x07, 0x25, 0xe9, 0xf0, 0x75, 0xe6, 0x1a, 0xb7,
-  0x24, 0x4a, 0xdc, 0x03, 0x14, 0xac, 0x49, 0x85, 0x8b, 0x95, 0xb3, 0x16,
-  0x3c, 0xa2, 0x4e, 0x5e, 0xfb, 0x48, 0x2a, 0x57, 0xb0, 0x13, 0x9c, 0x1f,
-  0x02, 0x0e, 0x29, 0xaa, 0x57, 0xc8, 0xba, 0x27, 0x8c, 0x4b, 0xed, 0x01,
-  0x97, 0xed, 0x9b, 0x4c, 0xb6, 0x05, 0xb2, 0x2c, 0x49, 0x70, 0xa1, 0x19,
-  0x63, 0x77, 0x31, 0x53, 0x7b, 0x51, 0x4e, 0x48, 0xbf, 0xbc, 0xe4, 0xea,
-  0x98, 0xb3, 0xb4, 0xba, 0xa1, 0x38, 0xa0, 0x97, 0x1d, 0x82, 0xec, 0x40,
-  0x10, 0x0d, 0x4f, 0x26, 0xb1, 0xac, 0x73, 0x38, 0x97, 0x15, 0x15, 0x8f,
-  0xec, 0x33, 0xee, 0x90, 0x94, 0x93, 0xdb, 0xd7, 0xb4, 0x3d, 0x7a, 0xbd,
-  0xc8, 0xee, 0xe8, 0x33, 0x4c, 0xb6, 0x41, 0xa9, 0xe3, 0x21, 0x3d, 0x3d,
-  0x53, 0x22, 0xb3, 0x03, 0xfd, 0x41, 0xb2, 0xd6, 0x69, 0xad, 0x66, 0x4c,
-  0xff, 0x0e, 0xf2, 0x5d, 0xaa, 0xa9, 0xc4, 0x29, 0x1f, 0xc1, 0x5c, 0x7d,
-  0xa3, 0xec, 0x79, 0x5e, 0xac, 0x4d, 0x49, 0x43, 0xfc, 0x5c, 0x0e, 0x46,
-  0x78, 0x4b, 0x56, 0x8c, 0xc7, 0xab, 0xb7, 0x2c, 0xd8, 0x8b, 0xf9, 0xc6,
-  0x42, 0x90, 0xa5, 0x52, 0x3b, 0xae, 0x1d, 0x29, 0x3e, 0xe7, 0xef, 0xfa,
-  0x55, 0x3e, 0x4b, 0x5f, 0xc3, 0x77, 0x2a, 0xbe, 0x20, 0xa6, 0xb1, 0x7f,
-  0xbc, 0x25, 0xdc, 0x86, 0xb1, 0xdd, 0x9d, 0x21, 0xfb, 0x96, 0x1e, 0x9c,
-  0x55, 0xfc, 0x15, 0x60, 0xd8, 0xeb, 0x48, 0x03, 0xa3, 0xf5, 0x93, 0x2f,
-  0x26, 0x5b, 0x26, 0xa4, 0x6f, 0x7a, 0xe0, 0x41, 0xe4, 0x87, 0x7e, 0x7b,
-  0x49, 0xbd, 0xba, 0x78, 0xb5, 0xbb, 0x2a, 0xec, 0x73, 0xbf, 0x47, 0x0f,
-  0xa2, 0xd5, 0xa0, 0x5b, 0xdf, 0x7e, 0xfa, 0x67, 0x03, 0xaa, 0xb7, 0x47,
-  0xbc, 0x54, 0xee, 0x1e, 0x7a, 0x94, 0xc9, 0x10, 0x92, 0x28, 0x40, 0x67,
-  0x7a, 0x37, 0xd4, 0xca, 0x3b, 0xc9, 0xa5, 0xae, 0xfb, 0xd7, 0x52, 0x24,
-  0x62, 0x1b, 0xeb, 0x88, 0xc4, 0x5c, 0x9f, 0x76, 0x45, 0x3d, 0x7a, 0x25,
-  0xb5, 0x32, 0x1f, 0xbb, 0xe0, 0x20, 0x9b, 0xf9, 0xf4, 0xf4, 0x89, 0xa3,
-  0xb4, 0xaf, 0xdf, 0xf2, 0xfa, 0x46, 0xba, 0x55, 0xeb, 0xf2, 0xc6, 0x27,
-  0x5a, 0x93, 0xf0, 0x14, 0x59, 0x1d, 0x4c, 0x89, 0x5b, 0x83, 0xc8, 0xdd,
-  0x1d, 0xce, 0xc2, 0x2a, 0xec, 0xb7, 0xdb, 0x9e, 0x78, 0xea, 0x37, 0x3f,
-  0x16, 0x04, 0xf6, 0xc8, 0xc7, 0x02, 0x6a, 0x7f, 0x5d, 0x3c, 0xca, 0x49,
-  0x18, 0x10, 0x3a, 0x79, 0x71, 0x18, 0x69, 0x8b, 0xfd, 0x9d, 0xf6, 0x52,
-  0x0e, 0x18, 0x46, 0x04, 0xa8, 0x1b, 0x81, 0x71, 0xf8, 0x51, 0x92, 0x67,
-  0xd1, 0xde, 0xd6, 0xd3, 0x3e, 0x7a, 0x40, 0x99, 0x66, 0x81, 0xe6, 0xe7,
-  0xe6, 0xaa, 0xf3, 0xdc, 0x6f, 0x3f, 0x6d, 0xcd, 0xb4, 0xa6, 0xb5, 0x7c,
-  0x8a, 0x48, 0xf3, 0x1f, 0xfd, 0x3d, 0xfa, 0x61, 0xe3, 0xee, 0xaf, 0x39,
-  0xa8, 0xbe, 0xb2, 0x27, 0xf6, 0xe1, 0xdf, 0xa3, 0x27, 0x48, 0x62, 0x8b,
-  0xee, 0xa1, 0x56, 0x1f, 0xf0, 0xd8, 0xef, 0xf1, 0xfd, 0xdb, 0xdd, 0x65,
-  0x9f, 0x45, 0x4d, 0x29, 0x3c, 0xf1, 0x1b, 0x7e, 0xf8, 0xa3, 0x55, 0xd1,
-  0x39, 0xe7, 0xef, 0x35, 0xfd, 0x77, 0x5f, 0x67, 0x78, 0x55, 0xb1, 0x8a,
-  0x25, 0xf4, 0xa8, 0x5e, 0xa5, 0xcc, 0x20, 0xa9, 0xf5, 0x49, 0x30, 0x28,
-  0x5b, 0xc9, 0x59, 0xc8, 0x96, 0x95, 0x3d, 0x31, 0x01, 0xab, 0x6d, 0x5f,
-  0x59, 0x57, 0x38, 0xbf, 0x98, 0x13, 0xbe, 0x39, 0x7d, 0x57, 0xf8, 0x07,
-  0xba, 0x94, 0x13, 0x56, 0x8c, 0x99, 0x1e, 0xc5, 0xa4, 0xaf, 0xa0, 0x86,
-  0x1e, 0x6c, 0xdd, 0x2b, 0x24, 0x52, 0x58, 0xd9, 0x1d, 0x44, 0x4a, 0xa7,
-  0x4c, 0x4e, 0xb4, 0x9a, 0x1f, 0x56, 0x4a, 0x82, 0xbb, 0x4c, 0xfd, 0x11,
-  0x9b, 0x12, 0x01, 0xfd, 0xbe, 0xc4, 0xb0, 0x1c, 0x71, 0xd8, 0xd4, 0x65,
-  0x79, 0x5a, 0xe5, 0x6b, 0x3f, 0x59, 0xef, 0x7f, 0x4c, 0xf6, 0xd7, 0x7f,
-  0x47, 0x38, 0xb5, 0x67, 0xaa, 0xfd, 0x02, 0x74, 0x58, 0x9b, 0x7e, 0x7f,
-  0x15, 0x56, 0xca, 0xc3, 0xcb, 0x04, 0xc9, 0xa9, 0x71, 0x90, 0xd4, 0x25,
-  0x11, 0x55, 0x26, 0x1f, 0xba, 0x0b, 0x10, 0x81, 0x1b, 0x51, 0xbc, 0x96,
-  0xc3, 0xa3, 0x76, 0x74, 0x0d, 0x52, 0xb5, 0x90, 0xf7, 0xea, 0x3b, 0x50,
-  0x3f, 0x06, 0xc5, 0xed, 0x1c, 0x88, 0x6a, 0x39, 0x6c, 0xca, 0x43, 0x4d,
-  0x01, 0x3c, 0xc8, 0xd6, 0x24, 0xaa, 0x01, 0x07, 0x46, 0x1a, 0x28, 0xfd,
-  0x18, 0x31, 0xa5, 0x80, 0x29, 0x1f, 0x2f, 0x95, 0x6c, 0x5e, 0x78, 0x0e,
-  0x6d, 0xc7, 0xc1, 0x43, 0xb6, 0x48, 0xdc, 0x95, 0x8a, 0x7d, 0x08, 0x4e,
-  0xd6, 0xcf, 0x82, 0x02, 0x36, 0xfe, 0xd1, 0xd7, 0xa6, 0x6e, 0xf3, 0x94,
-  0x63, 0x14, 0x3c, 0x8d, 0xf2, 0x21, 0x9e, 0x4f, 0xad, 0xe2, 0xb7, 0xd2,
-  0x59, 0xc5, 0x09, 0xcc, 0x91, 0xa4, 0x87, 0x0f, 0xc3, 0x61, 0x08, 0x9c,
-  0x2a, 0xaa, 0x6c, 0x5c, 0x5e, 0x15, 0xf9, 0xdf, 0xa9, 0x45, 0xf8, 0xf9,
-  0xba, 0x50, 0x8a, 0x16, 0x74, 0x4d, 0xfd, 0xd6, 0xc4, 0x63, 0x41, 0xd1,
-  0x84, 0xee, 0x6a, 0x28, 0xa3, 0x06, 0x09, 0x29, 0x0a, 0x6b, 0x12, 0x11,
-  0x80, 0xcc, 0x23, 0x97, 0x6c, 0x65, 0x52, 0x73, 0xc9, 0x2c, 0xd1, 0xd1,
-  0xc9, 0x87, 0x83, 0xc5, 0xd5, 0x5d, 0x21, 0x90, 0x98, 0x25, 0x99, 0xf2,
-  0x59, 0xf2, 0x2b, 0xa0, 0x66, 0xa8, 0x54, 0xf2, 0xcb, 0x81, 0x66, 0xf1,
-  0x2c, 0x76, 0x94, 0x8c, 0xa6, 0xa3, 0x11, 0xe7, 0x09, 0xd1, 0x1c, 0xfa,
-  0x48, 0x5d, 0x94, 0x6b, 0x07, 0x0f, 0x64, 0xc1, 0xfb, 0x24, 0xb6, 0x10,
-  0xd3, 0x10, 0xe7, 0x18, 0x85, 0x67, 0xab, 0xcb, 0x14, 0x62, 0x1d, 0x02,
-  0x4f, 0xa0, 0x08, 0x21, 0x8b, 0x57, 0x39, 0x1e, 0xc5, 0xf0, 0x04, 0xfd,
-  0xb1, 0x2d, 0xcd, 0x5d, 0x72, 0x29, 0x6c, 0xef, 0x48, 0xf2, 0x81, 0x8d,
-  0xd6, 0xe6, 0x99, 0x13, 0x7f, 0x36, 0x98, 0xdb, 0x46, 0x16, 0x19, 0xdc,
-  0x30, 0x05, 0x3e, 0x1a, 0x18, 0x10, 0x91, 0x05, 0xa1, 0x6f, 0xd5, 0xc6,
-  0x35, 0xbf, 0x26, 0x54, 0xaf, 0xee, 0x8a, 0xee, 0xd6, 0x72, 0x7c, 0x9b,
-  0xb6, 0x8b, 0x1c, 0x4a, 0x11, 0x63, 0xd8, 0x16, 0x93, 0x70, 0xb4, 0xba,
-  0x48, 0xa5, 0x93, 0x3a, 0xbb, 0x21, 0xb7, 0x97, 0x4e, 0x53, 0x43, 0x15,
-  0x95, 0x89, 0x86, 0x8b, 0xc1, 0xa6, 0x76, 0xaf, 0xf4, 0x48, 0xfa, 0xb0,
-  0xc8, 0x15, 0xf5, 0xbd, 0x3f, 0x57, 0x29, 0xdb, 0x1d, 0xec, 0x83, 0x34,
-  0xb2, 0xa4, 0xde, 0xe8, 0xef, 0x80, 0x4f, 0xfc, 0x55, 0x00, 0xc5, 0xdf,
-  0x17, 0x9f, 0xe8, 0x6e, 0x0a, 0xba, 0x75, 0xc2, 0x7b, 0x02, 0xa1, 0x43,
-  0x4a, 0x30, 0xe3, 0x58, 0xe1, 0x5d, 0x6a, 0xd9, 0xa0, 0xa3, 0x4a, 0x7a,
-  0xfc, 0x30, 0xf5, 0xda, 0x68, 0x8f, 0x2c, 0x90, 0x91, 0x9b, 0x22, 0x35,
-  0x62, 0xc5, 0x4e, 0xb8, 0x3c, 0xfa, 0x28, 0x83, 0x00, 0xc5, 0xfd, 0xff,
-  0x27, 0xc7, 0xc6, 0xfc, 0x7b, 0xe6, 0x3a, 0xd1, 0xf0, 0x76, 0x8d, 0x6c,
-  0x7e, 0xed, 0xdd, 0xc7, 0x5f, 0x3c, 0x7a, 0x21, 0xe3, 0x9c, 0xd1, 0x6b,
-  0x8e, 0x48, 0xc8, 0x93, 0x77, 0xb6, 0x58, 0x14, 0xd7, 0xbc, 0x68, 0xe2,
-  0x07, 0x06, 0xf5, 0x9f, 0x98, 0x31, 0x46, 0xc4, 0x9b, 0x56, 0x39, 0x5f,
-  0x22, 0xe0, 0x32, 0xe5, 0x8d, 0x55, 0xb2, 0x5a, 0x23, 0xd1, 0x47, 0x59,
-  0x73, 0x47, 0x58, 0x48, 0xcc, 0x87, 0x4e, 0xa4, 0x27, 0x05, 0x64, 0x8a,
-  0x96, 0x06, 0x85, 0x7a, 0x1c, 0x74, 0x23, 0x81, 0xc2, 0x5c, 0x68, 0xb6,
-  0xd4, 0xa9, 0x7a, 0x40, 0x83, 0xd3, 0x17, 0xa5, 0x57, 0x77, 0xde, 0xdc,
-  0xd6, 0xdc, 0x28, 0x64, 0xa5, 0x85, 0x22, 0xd5, 0xf0, 0x9e, 0x3c, 0xe8,
-  0x1b, 0xfe, 0xf6, 0x18, 0xcb, 0xb1, 0x8d, 0xd6, 0x3c, 0x20, 0x55, 0xd2,
-  0x1b, 0xa2, 0x2e, 0xbf, 0xa7, 0x69, 0x45, 0x0a, 0x54, 0xe3, 0x76, 0x8c,
-  0x24, 0x5a, 0x68, 0x43, 0x7a, 0x8b, 0xc2, 0xdf, 0xc6, 0x53, 0x21, 0xce,
-  0x5b, 0x96, 0x1f, 0x76, 0x1e, 0x96, 0x1f, 0x0b, 0x87, 0x0f, 0xbd, 0xa4,
-  0x04, 0xe4, 0x6c, 0xaa, 0xc7, 0x35, 0xd7, 0xbc, 0x61, 0xfa, 0x58, 0x1f,
-  0x2e, 0x66, 0x27, 0x2b, 0x99, 0xa2, 0xc4, 0x7c, 0x25, 0x88, 0x5b, 0x9b,
-  0xaf, 0xa6, 0x73, 0xf3, 0x21, 0xd4, 0x46, 0xa7, 0x4b, 0x7a, 0xe2, 0x49,
-  0x3c, 0xf4, 0x5b, 0x17, 0x44, 0xd7, 0xca, 0xc1, 0xce, 0x43, 0xe8, 0x51,
-  0x58, 0xba, 0x43, 0xe2, 0x07, 0x2c, 0x97, 0x04, 0xb6, 0x26, 0x10, 0x7f,
-  0x75, 0x4c, 0x8b, 0xab, 0x87, 0x76, 0x65, 0x9c, 0x3d, 0x43, 0x08, 0x05,
-  0x0b, 0xde, 0x37, 0x5d, 0x81, 0x5d, 0x3e, 0x29, 0x84, 0xd1, 0x3a, 0x8f,
-  0x92, 0x23, 0x1d, 0x71, 0xc5, 0x6d, 0x0e, 0x89, 0x76, 0x7b, 0x78, 0x78,
-  0xb6, 0x95, 0x9c, 0xb9, 0xdc, 0x5a, 0x84, 0x8e, 0x80, 0x6e, 0xa5, 0x6b,
-  0xd2, 0x97, 0xb0, 0x52, 0xf8, 0x82, 0x59, 0x80, 0xe2, 0xa9, 0xb2, 0x92,
-  0xbc, 0x8c, 0xcd, 0x62, 0xb9, 0xae, 0xc0, 0x63, 0xff, 0x9b, 0x8b, 0x9c,
-  0xce, 0x58, 0x0e, 0x90, 0xf9, 0xce, 0x99, 0xb0, 0x92, 0x94, 0xeb, 0x1f,
-  0x40, 0x63, 0x49, 0x95, 0x04, 0xac, 0x66, 0xaa, 0x79, 0x49, 0x1e, 0xe6,
-  0x45, 0xc3, 0xd0, 0x3b, 0xcd, 0x61, 0x22, 0x14, 0x79, 0xe5, 0xa5, 0xfc,
-  0x4b, 0xcd, 0x97, 0x9a, 0xef, 0x9b, 0x0e, 0x19, 0x2b, 0xa4, 0xd3, 0x55,
-  0x56, 0x84, 0xf4, 0xce, 0xf8, 0x28, 0x5d, 0xd1, 0xb2, 0x67, 0x26, 0x83,
-  0x2e, 0xb3, 0xa8, 0x97, 0xdc, 0x2c, 0x9d, 0xcb, 0x01, 0x7e, 0xe4, 0x2d,
-  0xb6, 0x84, 0x83, 0x88, 0xb5, 0x37, 0x2a, 0xf9, 0x42, 0xb2, 0xee, 0x8a,
-  0xd2, 0xc9, 0x1b, 0xdc, 0x5d, 0xf3, 0x07, 0x9a, 0x0c, 0xf3, 0x58, 0x5d,
-  0x5f, 0xef, 0x19, 0x89, 0xb0, 0x37, 0xf8, 0x9c, 0x81, 0x87, 0xd7, 0xe6,
-  0x1a, 0xce, 0xaa, 0x25, 0x0c, 0x63, 0x52, 0x1c, 0xaa, 0xd3, 0x9e, 0xe8,
-  0xd7, 0x03, 0xa7, 0xd2, 0xf7, 0xff, 0x07, 0xed, 0xb4, 0xbf, 0x2d, 0x42,
-  0x77, 0xdd, 0x26, 0x6d, 0xa8, 0x84, 0xb6, 0xd5, 0x16, 0x97, 0x32, 0x21,
-  0xd1, 0x92, 0x56, 0xa3, 0xbc, 0x01, 0x79, 0xa8, 0x32, 0x65, 0xb4, 0xcf,
-  0x02, 0xe8, 0xfe, 0x2b, 0xbc, 0x15, 0xcd, 0x8c, 0x1a, 0x24, 0xff, 0x83,
-  0x3e, 0xa5, 0x6f, 0x33, 0x70, 0x10, 0xf1, 0x80, 0xaf, 0x8e, 0xde, 0x9d,
-  0x9e, 0x1f, 0xb5, 0xc1, 0xe9, 0x5c, 0x03, 0x3e, 0x81, 0x6f, 0xbf, 0xdb,
-  0x3b, 0xd0, 0x7f, 0x68, 0x12, 0x15, 0xa4, 0x8e, 0xd6, 0x93, 0x3f, 0xfb,
-  0xfe, 0xad, 0xed, 0x1d, 0xdd, 0xff, 0x05, 0x33, 0xd2, 0xbb, 0x4a, 0xad,
-  0x34, 0xd3, 0xdd, 0x4b, 0x9b, 0xee, 0x77, 0xa2, 0xde, 0x97, 0x3a, 0x7e,
-  0xb6, 0x7f, 0xd4, 0x05, 0xee, 0x80, 0x7c, 0x2b, 0x65, 0x96, 0xc9, 0xba,
-  0xa6, 0xd4, 0x2b, 0xdb, 0x68, 0xa0, 0xd1, 0xb2, 0xdd, 0x03, 0x8e, 0x05,
-  0x89, 0xa7, 0xa4, 0x4c, 0xb3, 0x41, 0xdc, 0x1b, 0x83, 0x24, 0xfc, 0x90,
-  0xc6, 0x45, 0xf0, 0x95, 0x58, 0x40, 0x8b, 0x0a, 0x4d, 0xb2, 0xc3, 0x90,
-  0xef, 0x31, 0x22, 0x49, 0xa6, 0x4d, 0x6b, 0x59, 0xfe, 0x7b, 0x4c, 0x89,
-  0x22, 0xd9, 0x51, 0xfe, 0x44, 0x46, 0x1c, 0xe2, 0xe6, 0x9b, 0x9b, 0x35,
-  0x55, 0x85, 0xf5, 0xba, 0x6a, 0x7f, 0x93, 0xa8, 0x6d, 0xbc, 0xf1, 0xa7,
-  0x0d, 0x07, 0x8a, 0xe4, 0x6a, 0x25, 0xf1, 0xea, 0x3e, 0xae, 0xda, 0xc3,
-  0xd6, 0x63, 0x41, 0x4c, 0x1d, 0xf1, 0xb2, 0xfc, 0x1b, 0x49, 0xa1, 0x93,
-  0xb8, 0x16, 0x8a, 0x2e, 0x51, 0x58, 0x05, 0xed, 0x73, 0x01, 0x13, 0xcb,
-  0x26, 0xa5, 0x4d, 0x45, 0x8b, 0xdb, 0x92, 0xaf, 0xa5, 0x6a, 0x57, 0x35,
-  0xb4, 0x34, 0x45, 0xc8, 0xee, 0x57, 0x82, 0x4f, 0x94, 0x03, 0x02, 0xb7,
-  0x7e, 0xfd, 0x50, 0x34, 0x74, 0x5a, 0x21, 0x58, 0x82, 0x49, 0xab, 0x70,
-  0x07, 0xd0, 0x5e, 0x72, 0xbb, 0xb7, 0x46, 0x42, 0xe4, 0xab, 0x17, 0xaf,
-  0xe8, 0xde, 0x46, 0xa4, 0x4e, 0x0a, 0x20, 0x08, 0x09, 0x5e, 0x8f, 0x8f,
-  0x6a, 0x98, 0x0b, 0x21, 0xb7, 0xbd, 0x6d, 0x49, 0xca, 0xd6, 0x8d, 0xb2,
-  0x29, 0x97, 0x5c, 0x18, 0x7a, 0x8d, 0xac, 0x2e, 0xcf, 0xb4, 0x1c, 0x03,
-  0x37, 0x60, 0x95, 0xc0, 0x2c, 0x43, 0x7a, 0xe3, 0xb2, 0xe4, 0x96, 0x1d,
-  0xcd, 0x9e, 0x6e, 0x05, 0xaf, 0x5f, 0x96, 0x36, 0xd8, 0x88, 0xed, 0xac,
-  0xca, 0xeb, 0x1b, 0x73, 0xf0, 0xfe, 0x4d, 0x68, 0x33, 0x66, 0x36, 0x99,
-  0x26, 0xc2, 0x86, 0x91, 0x17, 0x0b, 0x26, 0xc7, 0xb3, 0xd5, 0x50, 0xb5,
-  0xc5, 0x4b, 0x54, 0xe8, 0x20, 0xbe, 0xb5, 0x18, 0x70, 0xbc, 0x6e, 0xca,
-  0x79, 0xc0, 0x9f, 0x2e, 0xa9, 0x79, 0xb2, 0x13, 0xc2, 0x5b, 0x93, 0xa6,
-  0x0a, 0xd4, 0x82, 0xe2, 0x97, 0x53, 0x85, 0x65, 0x90, 0x7c, 0x2c, 0xa0,
-  0x4f, 0xc8, 0xd6, 0x94, 0xab, 0x24, 0x2f, 0xcc, 0x58, 0xcc, 0x58, 0x29,
-  0xc7, 0x2f, 0x22, 0xa8, 0x20, 0x0b, 0xdd, 0xde, 0x4a, 0x54, 0x94, 0x76,
-  0xe8, 0x1e, 0x70, 0xb4, 0x2d, 0x13, 0x24, 0xcb, 0xb6, 0xe4, 0x5d, 0x58,
-  0x71, 0x84, 0x8b, 0x25, 0x48, 0x09, 0x7a, 0xb4, 0x4d, 0x79, 0x39, 0xd9,
-  0x74, 0xda, 0x67, 0x2a, 0x4a, 0xa2, 0xe6, 0x23, 0xd5, 0xde, 0x2c, 0x53,
-  0x3a, 0xe6, 0x48, 0xaf, 0x6f, 0xf6, 0x04, 0xb7, 0x0f, 0xd2, 0x7f, 0x06,
-  0x80, 0xc9, 0x6a, 0xde, 0xac, 0x20, 0xc3, 0x94, 0x02, 0x96, 0x10, 0xe8,
-  0xce, 0x17, 0x82, 0xd9, 0xf9, 0x9b, 0x0a, 0xdd, 0x58, 0x79, 0x80, 0x90,
-  0xe3, 0x69, 0x7c, 0x7d, 0x55, 0xcd, 0xb9, 0x4e, 0x49, 0xac, 0x88, 0x8a,
-  0xa7, 0x73, 0xf3, 0x93, 0xba, 0xb6, 0x75, 0xd6, 0x70, 0x57, 0xf8, 0xd5,
-  0xe3, 0xb7, 0xad, 0x7a, 0x87, 0x34, 0x13, 0x31, 0xfa, 0x7e, 0xdf, 0xa9,
-  0xc0, 0x84, 0x2d, 0x38, 0xb2, 0xee, 0x6e, 0xb1, 0xad, 0x39, 0x13, 0x63,
-  0xf4, 0xe0, 0x7e, 0x13, 0x6f, 0x4e, 0xda, 0x60, 0x05, 0x92, 0x5b, 0xd0,
-  0x66, 0xb1, 0x57, 0xb4, 0x22, 0x27, 0xed, 0x06, 0x2a, 0xbd, 0xab, 0x1f,
-  0x09, 0xd1, 0x04, 0xd7, 0xb3, 0x72, 0x42, 0xb0, 0xe7, 0xec, 0xd1, 0xb9,
-  0xa0, 0x07, 0x75, 0x2e, 0x04, 0x30, 0x5e, 0xfb, 0xe3, 0x42, 0x23, 0x66,
-  0x97, 0xd2, 0xce, 0x13, 0x21, 0x16, 0x6f, 0xce, 0x0d, 0x54, 0xeb, 0x06,
-  0x65, 0xfc, 0xb2, 0x3f, 0x84, 0x22, 0x29, 0xc7, 0x8d, 0x37, 0x02, 0x7a,
-  0x20, 0xde, 0x1c, 0x0b, 0xdf, 0xc8, 0xc8, 0x08, 0x43, 0x0c, 0x7b, 0xf2,
-  0xb1, 0x91, 0xd1, 0x83, 0xc1, 0x2a, 0x9b, 0x1f, 0xb2, 0x48, 0xef, 0x2c,
-  0x31, 0x2f, 0x4e, 0xbc, 0xb9, 0xf6, 0x02, 0xeb, 0x0a, 0xa3, 0x0f, 0xb1,
-  0x05, 0x16, 0x42, 0xc0, 0x50, 0x0b, 0x73, 0xd6, 0x31, 0xcf, 0x8e, 0x7d,
-  0x70, 0xe9, 0x02, 0xcb, 0x37, 0x82, 0x59, 0x98, 0x1a, 0x09, 0x69, 0xb4,
-  0xe0, 0x71, 0xf6, 0x89, 0x0b, 0x36, 0x53, 0x25, 0xe6, 0xe6, 0xd3, 0xea,
-  0x09, 0x99, 0x4a, 0x7e, 0xdd, 0xc3, 0x0c, 0x85, 0xff, 0xac, 0xac, 0x10,
-  0xaa, 0xae, 0x94, 0x7e, 0x33, 0x2a, 0x49, 0x09, 0xe4, 0xe2, 0x8a, 0xcd,
-  0xf2, 0x09, 0xf1, 0xbe, 0xc7, 0xb4, 0xc1, 0x7c, 0x55, 0xcd, 0xcb, 0x9c,
-  0x4b, 0xea, 0x5a, 0x19, 0xe3, 0xf5, 0x31, 0x96, 0xdb, 0xbd, 0x2a, 0xb6,
-  0x31, 0xbb, 0x21, 0x14, 0xb2, 0x55, 0x14, 0x3e, 0x45, 0x28, 0x96, 0xbd,
-  0xc1, 0xf1, 0xd3, 0xba, 0xda, 0x3c, 0x24, 0x65, 0x14, 0x76, 0x05, 0xa2,
-  0xdc, 0x71, 0x5e, 0xb1, 0x8f, 0xdb, 0x9f, 0xb4, 0x67, 0xb2, 0xdb, 0xbf,
-  0xf9, 0xdd, 0xc4, 0x3a, 0x62, 0xee, 0xdc, 0x11, 0x52, 0x15, 0x00, 0x20,
-  0x20, 0x2d, 0xc2, 0x46, 0xc8, 0x47, 0x6e, 0xec, 0x52, 0x09, 0x05, 0x97,
-  0x4c, 0x05, 0x78, 0x06, 0x03, 0x2d, 0x29, 0xf8, 0xb8, 0x79, 0x8c, 0x9a,
-  0xe3, 0xf9, 0x95, 0xe5, 0x58, 0x3e, 0x39, 0xf2, 0xb4, 0xeb, 0x22, 0xcb,
-  0x77, 0xbf, 0x5e, 0xac, 0x9b, 0x23, 0x3d, 0x0e, 0x2b, 0x04, 0x9e, 0x7c,
-  0xb6, 0x2b, 0xf2, 0x26, 0x19, 0x79, 0x66, 0x79, 0x2f, 0x00, 0x50, 0xfa,
-  0xf8, 0xc9, 0xe2, 0x9e, 0x2f, 0x9d, 0xe3, 0x6a, 0xf6, 0xc8, 0x21, 0x37,
-  0x0f, 0xb8, 0x51, 0x11, 0x8c, 0xc6, 0x1b, 0x55, 0x70, 0x2e, 0xa5, 0xd8,
-  0xdc, 0x92, 0x99, 0x5f, 0xd6, 0x83, 0xd6, 0x2e, 0x5c, 0xde, 0x13, 0x79,
-  0x32, 0xda, 0x1d, 0x37, 0xb9, 0x94, 0x5a, 0xf2, 0xe0, 0x7a, 0x16, 0x6f,
-  0x4e, 0xba, 0xeb, 0xde, 0x92, 0xe9, 0xe9, 0x79, 0xbe, 0x4b, 0x66, 0x64,
-  0x36, 0xc6, 0x65, 0xb8, 0x37, 0xf4, 0x80, 0xff, 0x22, 0x01, 0x41, 0x56,
-  0xfc, 0xb4, 0xf0, 0xed, 0x76, 0xfa, 0xa2, 0xb9, 0x7b, 0x57, 0xe0, 0x3d,
-  0xbd, 0x00, 0xa7, 0x5d, 0x6e, 0xae, 0xef, 0x85, 0xe8, 0x1c, 0x28, 0x28,
-  0x80, 0x5e, 0x01, 0xa3, 0xbf, 0xd8, 0xce, 0xa0, 0xa4, 0x98, 0x10, 0x57,
-  0x72, 0x08, 0x31, 0x4b, 0xf8, 0x9b, 0x09, 0xb3, 0x50, 0x61, 0x5a, 0x51,
-  0x7f, 0x44, 0x14, 0x11, 0xad, 0x1f, 0x56, 0x67, 0x62, 0x4d, 0xc8, 0xe3,
-  0x4c, 0xbf, 0x1c, 0x16, 0x4d, 0xeb, 0xd0, 0x81, 0xd5, 0x03, 0xcf, 0x59,
-  0xc1, 0xdc, 0x85, 0xd9, 0xd5, 0xc4, 0x2f, 0x41, 0xe8, 0x0d, 0xbf, 0xea,
-  0xf1, 0x14, 0x5c, 0x99, 0xc1, 0xe3, 0x8f, 0x28, 0x9e, 0x12, 0x5a, 0x33,
-  0x94, 0x15, 0x4a, 0xe8, 0xdb, 0x4a, 0xce, 0x33, 0xca, 0x1c, 0xba, 0x25,
-  0x61, 0x4a, 0xa9, 0xc1, 0x09, 0x37, 0xb0, 0x99, 0x0f, 0x32, 0x81, 0xcf,
-  0x21, 0x73, 0x9d, 0xd8, 0x4d, 0x03, 0x9d, 0xc6, 0xec, 0x8c, 0x2d, 0x2d,
-  0x12, 0x9f, 0xb2, 0x37, 0x6c, 0x7b, 0x77, 0xb0, 0x6b, 0x74, 0x71, 0x98,
-  0xb4, 0xa4, 0x90, 0x7b, 0xea, 0x35, 0xa8, 0xd8, 0x84, 0x59, 0x91, 0x3e,
-  0xdd, 0xf5, 0x46, 0x9c, 0xd3, 0x87, 0xeb, 0xd0, 0x2d, 0x0c, 0xd7, 0xb2,
-  0x33, 0x6b, 0xee, 0xd2, 0x87, 0x50, 0x51, 0xdf, 0xe9, 0x3f, 0x7f, 0xf5,
-  0xaa, 0x75, 0xa3, 0xd7, 0x1e, 0x33, 0xe5, 0x8b, 0x9d, 0x1d, 0x4e, 0x7b,
-  0xee, 0xbe, 0x66, 0x7e, 0xd1, 0x7f, 0x85, 0x17, 0xdb, 0xaf, 0x71, 0x0d,
-  0xf7, 0xe5, 0xef, 0xf5, 0xe9, 0x37, 0x91, 0xcf, 0xc1, 0xeb, 0xb2, 0xf4,
-  0xad, 0x57, 0xf4, 0xb9, 0xc8, 0x5b, 0x9c, 0x91, 0x8d, 0x69, 0x2c, 0x2f,
-  0x2f, 0x29, 0x2a, 0x43, 0x4f, 0xe2, 0xe2, 0x33, 0x3b, 0xe2, 0x2e, 0xad,
-  0x26, 0xe1, 0x70, 0x77, 0x7a, 0xfd, 0xdd, 0x65, 0xc3, 0x05, 0xaf, 0x26,
-  0x10, 0x25, 0xb4, 0x9e, 0x64, 0x4d, 0x1a, 0x5b, 0x82, 0xb1, 0xb4, 0xdd,
-  0x86, 0x76, 0x4d, 0x8f, 0x76, 0x5f, 0xbd, 0xea, 0x51, 0xcf, 0x5e, 0xbc,
-  0x7a, 0xb5, 0x34, 0x6b, 0xca, 0xfb, 0xcc, 0x5d, 0xe9, 0x9c, 0x54, 0xf4,
-  0xba, 0xdb, 0x34, 0x35, 0x99, 0x2c, 0xf1, 0xef, 0xd0, 0x6f, 0xde, 0x24,
-  0x1f, 0x4e, 0x2f, 0x8e, 0x3c, 0xf7, 0x8d, 0xf3, 0x88, 0xfa, 0xf6, 0x28,
-  0x42, 0xb0, 0x73, 0x54, 0x44, 0x80, 0x69, 0x4c, 0xb6, 0x56, 0x08, 0x2c,
-  0x00, 0xae, 0x53, 0x93, 0x5f, 0xfe, 0xa5, 0xfb, 0xb9, 0x53, 0x71, 0x50,
-  0x5f, 0xe5, 0x8d, 0x9f, 0xcb, 0xbf, 0x69, 0x56, 0x7b, 0x0b, 0x9e, 0x90,
-  0xdb, 0x74, 0x9a, 0xdb, 0x68, 0xca, 0x46, 0x6d, 0x44, 0x4d, 0xc3, 0xbc,
-  0x7e, 0x1b, 0x64, 0x18, 0x6d, 0x04, 0xfc, 0x1d, 0xd9, 0x74, 0x52, 0xeb,
-  0x45, 0xc8, 0x8f, 0xf7, 0xf1, 0xa0, 0x9c, 0x16, 0xd8, 0xb3, 0x5c, 0x77,
-  0x31, 0x85, 0x3f, 0x97, 0x3f, 0xbd, 0x3c, 0x9e, 0x42, 0x92, 0x90, 0xc1,
-  0x5e, 0x8a, 0x61, 0xa6, 0x76, 0x7a, 0xde, 0x3c, 0x6c, 0xd4, 0xdd, 0x02,
-  0xcd, 0x54, 0xe5, 0x38, 0x8e, 0x31, 0x80, 0x13, 0x7f, 0x92, 0xcd, 0x95,
-  0x20, 0xaf, 0x68, 0xb7, 0x63, 0xf6, 0xf2, 0x65, 0x7e, 0xb5, 0xa8, 0xe2,
-  0x78, 0xa6, 0xbf, 0x38, 0x44, 0xad, 0x72, 0xb0, 0xa6, 0x77, 0xa9, 0x22,
-  0x79, 0x41, 0x9b, 0xab, 0x07, 0x5b, 0xed, 0x64, 0x45, 0xce, 0x82, 0x21,
-  0x37, 0xf0, 0x8b, 0x91, 0xc9, 0x7c, 0x69, 0x74, 0x19, 0x38, 0x13, 0x04,
-  0xce, 0x01, 0xef, 0x9f, 0x54, 0x49, 0x11, 0x04, 0xb3, 0xba, 0xb7, 0xcd,
-  0x7a, 0xd3, 0x75, 0x9a, 0xca, 0x14, 0x74, 0x03, 0x67, 0xe5, 0x62, 0xc3,
-  0x23, 0x3d, 0xa0, 0x27, 0xe1, 0x93, 0xb9, 0x2e, 0x3d, 0xca, 0xe5, 0x30,
-  0xb3, 0x51, 0x72, 0xb3, 0x21, 0x7d, 0x78, 0x89, 0xb4, 0x74, 0xbb, 0xb8,
-  0x57, 0x5c, 0xc2, 0x1c, 0x6b, 0x07, 0x52, 0x92, 0x51, 0xd6, 0x36, 0x60,
-  0xe8, 0xa4, 0xa5, 0x96, 0x55, 0x26, 0x9a, 0x4b, 0x29, 0x5f, 0xaa, 0x9b,
-  0xb4, 0x2c, 0xac, 0x96, 0xc4, 0x72, 0xca, 0x7c, 0x84, 0x13, 0x49, 0xb7,
-  0x06, 0x11, 0x37, 0x00, 0x6d, 0x78, 0x5e, 0x2d, 0x4b, 0x1c, 0x8c, 0xea,
-  0x43, 0x74, 0x49, 0x7a, 0x5e, 0x8f, 0x64, 0x78, 0xfc, 0x3f, 0x8f, 0x7e,
-  0xcf, 0xa8, 0x53, 0x95, 0xde, 0x59, 0x8c, 0xfd, 0xf7, 0x4c, 0x6b, 0x24,
-  0xd1, 0x20, 0x9b, 0xce, 0x99, 0x4e, 0xc5, 0x8c, 0xa7, 0x62, 0xad, 0xb8,
-  0x3d, 0x10, 0x56, 0x94, 0xda, 0x62, 0x66, 0x63, 0x85, 0x7b, 0x9b, 0xa2,
-  0x71, 0x24, 0xf9, 0x1d, 0xdd, 0x07, 0xc8, 0x35, 0x81, 0x8f, 0xe6, 0x40,
-  0xbe, 0x2e, 0xa6, 0x2d, 0x15, 0x3b, 0x83, 0x63, 0x18, 0x24, 0x06, 0x41,
-  0xdd, 0x20, 0x30, 0xe5, 0x50, 0xb7, 0x4c, 0x6f, 0x1f, 0xa9, 0xee, 0xe2,
-  0x27, 0xa4, 0xa1, 0x1e, 0x60, 0x95, 0x51, 0x80, 0xaa, 0x4a, 0x5e, 0x7f,
-  0x3c, 0x3f, 0x59, 0x92, 0x5b, 0x30, 0xc4, 0x2a, 0xd0, 0x74, 0xad, 0x9f,
-  0x67, 0xe0, 0xc3, 0xa8, 0x92, 0xb3, 0xf4, 0x2a, 0x5b, 0xf7, 0x69, 0x45,
-  0x5a, 0xcc, 0x42, 0xe2, 0x83, 0x88, 0x79, 0x8a, 0x7c, 0x1e, 0x63, 0x12,
-  0xe3, 0x2e, 0x30, 0xec, 0x27, 0x04, 0x5c, 0x4e, 0x53, 0x99, 0xbd, 0x45,
-  0x85, 0x2a, 0xc5, 0xdf, 0x47, 0x8b, 0x00, 0x88, 0x4f, 0xa8, 0xcd, 0x39,
-  0xe6, 0xc1, 0x98, 0xd2, 0xf9, 0x1c, 0x65, 0x2a, 0xd7, 0xff, 0x4c, 0x6e,
-  0xfa, 0x75, 0x87, 0xf1, 0xa7, 0xc1, 0x47, 0x88, 0x7d, 0x79, 0x2a, 0x38,
-  0x36, 0x6c, 0xdd, 0x4a, 0xec, 0xf2, 0x6f, 0xb9, 0xf9, 0xeb, 0x4c, 0xe3,
-  0x32, 0x19, 0xd1, 0x7e, 0xd5, 0x91, 0xea, 0x97, 0x38, 0xc3, 0x94, 0x66,
-  0x5d, 0x72, 0xac, 0x23, 0x4d, 0x4e, 0xa4, 0x7f, 0xfb, 0x82, 0xfd, 0x66,
-  0x45, 0xc8, 0x76, 0x4d, 0x22, 0xd5, 0xdc, 0xf1, 0x51, 0x16, 0x1b, 0x6c,
-  0x3a, 0x25, 0x86, 0x71, 0xeb, 0xc9, 0xa2, 0x71, 0x4e, 0x4a, 0x22, 0xa5,
-  0x46, 0x01, 0xcb, 0xc2, 0x3a, 0x9d, 0x5b, 0x2b, 0xfb, 0xbb, 0x53, 0xe0,
-  0xb8, 0x40, 0xd1, 0x81, 0x56, 0x2c, 0xef, 0x9b, 0xdd, 0x51, 0x48, 0xc2,
-  0x98, 0xb7, 0xac, 0xde, 0xde, 0xfb, 0x8f, 0x5e, 0x94, 0x49, 0x79, 0x09,
-  0xfb, 0x9b, 0xd7, 0xdd, 0x06, 0xb0, 0x62, 0x6c, 0x98, 0xd3, 0x5e, 0x87,
-  0xcb, 0xd9, 0x65, 0x97, 0xc8, 0x7d, 0x19, 0xf5, 0x2d, 0xf6, 0xbd, 0xec,
-  0x82, 0xe4, 0x90, 0x13, 0x1d, 0xfa, 0x6f, 0x73, 0x73, 0x8f, 0xd4, 0x9c,
-  0xab, 0xcf, 0x8e, 0x01, 0x66, 0x87, 0x76, 0xa1, 0xc2, 0xb0, 0x4c, 0x87,
-  0xc6, 0x53, 0x00, 0x5e, 0xb3, 0xaf, 0xd8, 0xe8, 0x8e, 0xd9, 0x13, 0xcb,
-  0xd1, 0x36, 0x96, 0xbb, 0xd6, 0x2a, 0x0d, 0xa9, 0xf3, 0x5a, 0x48, 0x49,
-  0x4d, 0xa6, 0xf8, 0xe5, 0xf3, 0x61, 0x6e, 0x85, 0xc8, 0xfc, 0x68, 0x06,
-  0x3d, 0xc0, 0x33, 0x2e, 0xb1, 0x5d, 0x68, 0xed, 0x03, 0x73, 0xd3, 0xf2,
-  0xe3, 0xf0, 0xcd, 0x14, 0x6c, 0x32, 0xc2, 0xa6, 0x58, 0x6e, 0x71, 0x8e,
-  0xb1, 0x30, 0xef, 0x0b, 0x67, 0x72, 0x8c, 0x4d, 0xc3, 0x83, 0x8e, 0x67,
-  0x5c, 0x69, 0xd1, 0x97, 0x00, 0xfb, 0x5a, 0xa3, 0x02, 0xc8, 0xd0, 0xdf,
-  0x7a, 0x14, 0x45, 0x28, 0x4a, 0x49, 0x85, 0x8e, 0x85, 0xd1, 0x81, 0xe0,
-  0x31, 0x4f, 0x78, 0xf7, 0x20, 0x43, 0x36, 0x92, 0x3f, 0xf6, 0x1d, 0x31,
-  0xf5, 0xe6, 0x43, 0x66, 0x74, 0x6c, 0x4b, 0x47, 0xad, 0xc6, 0xd4, 0x5a,
-  0xc4, 0xd9, 0xc3, 0x95, 0x96, 0xea, 0xb2, 0x53, 0x8e, 0xfb, 0xc1, 0x8f,
-  0x41, 0xf2, 0x94, 0x1b, 0x4d, 0x80, 0x78, 0x5d, 0x17, 0x45, 0x76, 0x4f,
-  0x5c, 0x83, 0xcb, 0x9b, 0x0b, 0x15, 0xed, 0xef, 0x0f, 0xce, 0x3f, 0x1c,
-  0x7f, 0xf8, 0x7a, 0x3f, 0x39, 0xba, 0xcf, 0xaa, 0x71, 0x6e, 0xb6, 0xe2,
-  0x5f, 0x17, 0x93, 0x7c, 0x0c, 0x41, 0x21, 0xb5, 0xd6, 0xfc, 0x7c, 0x16,
-  0xaa, 0x8f, 0x2b, 0x5e, 0x56, 0xba, 0x74, 0x03, 0xf9, 0x2e, 0xd8, 0xcf,
-  0x01, 0x2a, 0x25, 0x57, 0xe5, 0xd5, 0xc2, 0xdb, 0x3e, 0x63, 0xae, 0x01,
-  0x83, 0x80, 0x01, 0xa2, 0xa9, 0xd7, 0x32, 0xd7, 0xe4, 0x7a, 0x4d, 0xde,
-  0x9e, 0x9c, 0x84, 0x24, 0x6f, 0x28, 0x55, 0xc8, 0xdd, 0x67, 0xcc, 0x10,
-  0x9a, 0x30, 0x9b, 0xbf, 0xce, 0x47, 0x53, 0xd8, 0x63, 0xa4, 0x02, 0x70,
-  0x05, 0x18, 0x4f, 0xe4, 0xc1, 0xb7, 0x62, 0xba, 0xd2, 0x5d, 0x64, 0xc0,
-  0x52, 0x01, 0x10, 0xc4, 0x0a, 0xe7, 0xd5, 0x04, 0x06, 0x91, 0x91, 0x91,
-  0xe5, 0x65, 0x43, 0x3a, 0x52, 0xeb, 0x36, 0x6d, 0x93, 0xac, 0xaf, 0x8c,
-  0x24, 0x5c, 0xb3, 0xa9, 0xe3, 0xc3, 0x10, 0x24, 0x78, 0x09, 0xfa, 0x24,
-  0xb3, 0x21, 0x59, 0x39, 0x04, 0x3b, 0x7f, 0x2c, 0x8c, 0x36, 0xc9, 0x52,
-  0x5b, 0x6b, 0xb0, 0x26, 0x79, 0x19, 0x0a, 0x8c, 0xbb, 0xac, 0xca, 0x5c,
-  0x79, 0x70, 0x64, 0x64, 0x19, 0x71, 0x37, 0x48, 0x86, 0xa5, 0x79, 0x3e,
-  0xd4, 0xb2, 0x6c, 0xfd, 0x9a, 0x56, 0x25, 0x4c, 0x74, 0xc7, 0x61, 0xab,
-  0x40, 0xf1, 0x8f, 0xe8, 0x5c, 0x7b, 0xbc, 0x91, 0xda, 0x79, 0xb4, 0xff,
-  0x47, 0x99, 0x55, 0x2a, 0x1e, 0x34, 0xfe, 0x43, 0x9b, 0x64, 0xbd, 0x6f,
-  0x04, 0xea, 0x3a, 0xcd, 0x2c, 0x2a, 0xfa, 0x79, 0x2d, 0x3d, 0x52, 0x97,
-  0xca, 0x47, 0x36, 0x77, 0x07, 0xfc, 0x48, 0xd5, 0x0f, 0xb5, 0x3c, 0x3d,
-  0xf7, 0xa9, 0xd4, 0x5e, 0xb0, 0x31, 0x55, 0x96, 0x49, 0x19, 0xca, 0xf3,
-  0x05, 0xa1, 0x72, 0x36, 0x29, 0xac, 0x4b, 0xc6, 0xcf, 0x2b, 0xf3, 0x5f,
-  0x97, 0x1b, 0xa7, 0xe7, 0x3c, 0x0c, 0xa4, 0x17, 0x2c, 0x9a, 0x20, 0x2a,
-  0x75, 0x39, 0xd8, 0x8a, 0x61, 0x6b, 0x44, 0x2e, 0xf2, 0x95, 0x54, 0x1b,
-  0xf5, 0x7a, 0xf2, 0xa8, 0xe4, 0x1b, 0x28, 0xa4, 0xba, 0x7b, 0x4b, 0x23,
-  0x43, 0xd0, 0xf3, 0x8a, 0x73, 0x73, 0x10, 0x26, 0xa9, 0x57, 0x6a, 0xda,
-  0x8b, 0x6b, 0xba, 0x34, 0xbe, 0xb0, 0x39, 0x2f, 0x87, 0x62, 0xb9, 0x10,
-  0x96, 0xd8, 0x4d, 0x5e, 0xdc, 0x96, 0x37, 0x7c, 0xe3, 0x4b, 0xfd, 0xd8,
-  0x20, 0xc7, 0xd4, 0x67, 0x6b, 0x8a, 0x82, 0x8c, 0x64, 0x56, 0xa5, 0xef,
-  0x7c, 0x63, 0x79, 0xe0, 0x73, 0x33, 0x18, 0x09, 0xc9, 0x58, 0x52, 0x73,
-  0x7b, 0x3d, 0x75, 0x9a, 0xb3, 0x67, 0xa9, 0xa7, 0xc5, 0x19, 0x93, 0x6c,
-  0x4a, 0xa5, 0xa3, 0x1d, 0xc1, 0xb9, 0x5e, 0x36, 0x7a, 0xdb, 0x80, 0x69,
-  0x50, 0xa3, 0x98, 0xcb, 0x6f, 0x92, 0x81, 0x07, 0x67, 0x77, 0xd3, 0xed,
-  0x0c, 0x59, 0x44, 0x40, 0x39, 0xf6, 0x34, 0xbe, 0x2e, 0xcb, 0xe8, 0xc5,
-  0xed, 0xee, 0x10, 0x28, 0x35, 0xc8, 0x1f, 0x5d, 0xa2, 0x41, 0xb4, 0xab,
-  0xff, 0x48, 0x82, 0x40, 0xf7, 0xec, 0x29, 0x2b, 0x8f, 0xe8, 0x83, 0x1e,
-  0x27, 0x56, 0xfb, 0x76, 0xe3, 0x0e, 0x05, 0x77, 0x73, 0x0c, 0xe6, 0xc0,
-  0xbf, 0xeb, 0xdc, 0xc7, 0x4d, 0x2b, 0xd5, 0xd0, 0x9f, 0x94, 0xe8, 0x65,
-  0xc7, 0x78, 0x4b, 0x47, 0x9d, 0x88, 0x7d, 0x03, 0xc3, 0xa9, 0x68, 0x87,
-  0x35, 0xd0, 0xcf, 0xbc, 0x81, 0x00, 0xf9, 0xe3, 0xde, 0xce, 0x32, 0x21,
-  0xcf, 0x8a, 0xac, 0xf2, 0xf6, 0xd3, 0x71, 0xb4, 0x06, 0x3a, 0x5f, 0x84,
-  0x2e, 0x4d, 0x93, 0x2e, 0x90, 0xc5, 0x3c, 0x41, 0x65, 0x08, 0xaa, 0x2b,
-  0xb2, 0x64, 0xfe, 0xa3, 0x96, 0xf1, 0xaf, 0xad, 0x26, 0xb3, 0xac, 0x9c,
-  0x8c, 0x93, 0x5f, 0xe7, 0xde, 0x1a, 0x53, 0x4b, 0x51, 0x90, 0x19, 0xcb,
-  0x12, 0xcf, 0x5d, 0xe2, 0x69, 0xed, 0x4e, 0x6f, 0x80, 0x75, 0x0f, 0x61,
-  0xc7, 0x68, 0x84, 0x3c, 0x14, 0xc9, 0xc6, 0xae, 0x9d, 0xcd, 0x23, 0x02,
-  0xcb, 0x1e, 0x02, 0xc1, 0x20, 0xd3, 0x2d, 0x65, 0x91, 0xb2, 0x1a, 0x7b,
-  0x0e, 0x37, 0xad, 0x27, 0x4b, 0xd9, 0x24, 0x4f, 0x05, 0xb4, 0x89, 0x39,
-  0xa1, 0x6f, 0x79, 0x23, 0xfd, 0x81, 0x47, 0xca, 0x98, 0xb0, 0xd7, 0x62,
-  0xdd, 0x2e, 0xb3, 0xc7, 0x3c, 0x9d, 0xb1, 0x5d, 0xf5, 0x5e, 0x69, 0x37,
-  0x44, 0x06, 0x74, 0x92, 0xea, 0x02, 0xfd, 0xcc, 0xcf, 0x40, 0xf4, 0xed,
-  0x36, 0x96, 0x2e, 0x4e, 0x4d, 0xee, 0xb4, 0xbe, 0xe4, 0xcc, 0x73, 0x5a,
-  0xac, 0x0f, 0xad, 0x63, 0xc1, 0x2a, 0x6f, 0x69, 0x89, 0x64, 0x39, 0x94,
-  0x9b, 0x52, 0x16, 0x94, 0xaf, 0xf6, 0x3a, 0xcc, 0x32, 0xf9, 0xfa, 0xe8,
-  0x62, 0x6b, 0x90, 0x9c, 0x53, 0x5b, 0xb6, 0x7f, 0xf0, 0xaf, 0xc8, 0x45,
-  0x9b, 0x5a, 0x5d, 0x40, 0xb8, 0xfa, 0xc4, 0x72, 0x36, 0xfa, 0xda, 0x34,
-  0x2d, 0xa2, 0x79, 0x36, 0xa4, 0x43, 0x51, 0xad, 0x52, 0xe4, 0xbf, 0x89,
-  0x0c, 0x50, 0x9b, 0xdd, 0x63, 0x86, 0xe6, 0xc4, 0xf9, 0xb3, 0x8f, 0x5c,
-  0xda, 0xfe, 0xed, 0xd1, 0xc9, 0xd1, 0xc5, 0x51, 0xd7, 0x5a, 0x1c, 0x31,
-  0xcf, 0x10, 0x12, 0x2c, 0x9a, 0x6c, 0x7c, 0x5d, 0x94, 0xd3, 0xf2, 0x2a,
-  0x97, 0xaa, 0x4d, 0xc9, 0xf7, 0xd9, 0xe8, 0xed, 0xc1, 0x77, 0x74, 0x83,
-  0x91, 0x9f, 0xe3, 0xec, 0xfc, 0xf4, 0xec, 0xdd, 0xf1, 0x87, 0xb7, 0xbd,
-  0xe4, 0xf0, 0xf4, 0xec, 0x2f, 0xbd, 0xe4, 0xfd, 0xe9, 0x77, 0x47, 0x11,
-  0x60, 0x2d, 0x11, 0x75, 0x46, 0xaa, 0xc5, 0x4a, 0xed, 0x14, 0x16, 0xa0,
-  0x6c, 0xee, 0xa1, 0x48, 0x63, 0x47, 0x70, 0x11, 0xf2, 0xbc, 0x2e, 0xe5,
-  0x84, 0x9b, 0xb9, 0xeb, 0x25, 0xdf, 0x1c, 0x1d, 0xbc, 0xed, 0x05, 0x2c,
-  0x8d, 0x43, 0x1e, 0x15, 0x8d, 0xce, 0x0e, 0x19, 0xdc, 0x7e, 0xac, 0xef,
-  0xe2, 0x56, 0xe2, 0xd0, 0x0a, 0x23, 0x22, 0x8d, 0xe4, 0x40, 0xa5, 0x8b,
-  0xc9, 0xb2, 0x88, 0xbd, 0xb0, 0x82, 0x2e, 0xad, 0x93, 0xe6, 0x27, 0x1d,
-  0xb2, 0x5b, 0x49, 0x55, 0x3b, 0x29, 0x68, 0xc9, 0x19, 0xf5, 0x09, 0x20,
-  0xdd, 0x36, 0xa3, 0x4b, 0x97, 0x3c, 0x9e, 0xd2, 0xdd, 0x6b, 0x15, 0xdc,
-  0x80, 0xfb, 0x83, 0x5d, 0x5e, 0xa9, 0x14, 0x99, 0x01, 0x21, 0x37, 0x81,
-  0x4e, 0x86, 0xcc, 0x65, 0xa8, 0x1c, 0x5e, 0x21, 0x82, 0xbd, 0x75, 0x31,
-  0x95, 0xca, 0x1a, 0x29, 0xd9, 0xf5, 0x34, 0x85, 0xee, 0x9b, 0xc2, 0x68,
-  0xfd, 0x03, 0xff, 0x38, 0x02, 0xad, 0xe5, 0xba, 0x0f, 0x97, 0x66, 0x73,
-  0x66, 0x8c, 0xe6, 0xc1, 0x3a, 0x39, 0x73, 0x34, 0xe9, 0x1f, 0xab, 0x31,
-  0xbc, 0xea, 0x5a, 0x97, 0x03, 0x23, 0x0e, 0x01, 0x64, 0xf3, 0xab, 0xa3,
-  0xa4, 0x2d, 0x27, 0x5c, 0xa5, 0x33, 0x3e, 0x7b, 0x97, 0xc1, 0x3d, 0x00,
-  0x02, 0x40, 0x5d, 0xe7, 0x5e, 0x22, 0x97, 0xa3, 0x3a, 0x0f, 0x2e, 0x1d,
-  0xb9, 0x19, 0x97, 0x54, 0x6c, 0xfb, 0x51, 0xc2, 0x1a, 0xc8, 0xec, 0x88,
-  0x36, 0xd2, 0xa4, 0x10, 0x57, 0x1c, 0x85, 0x7c, 0xfa, 0x6c, 0xbf, 0x09,
-  0xf1, 0x82, 0x65, 0xd0, 0xc7, 0x46, 0x15, 0x85, 0x48, 0xbb, 0x10, 0x2f,
-  0xea, 0xd9, 0xaa, 0x8d, 0x67, 0xcf, 0xfa, 0xb3, 0x9d, 0x7b, 0xe7, 0xdd,
-  0xa5, 0x1b, 0xac, 0x4e, 0xfa, 0x42, 0x99, 0x38, 0x33, 0xa2, 0x37, 0xf4,
-  0x6b, 0x6c, 0xbe, 0x5b, 0x22, 0x1c, 0x7d, 0x7f, 0xa1, 0x2c, 0x86, 0x87,
-  0x73, 0x3e, 0x39, 0x36, 0x47, 0x22, 0x92, 0xa9, 0x3d, 0x29, 0x51, 0x01,
-  0x0e, 0x21, 0x6e, 0xdc, 0xe6, 0x58, 0x00, 0xd3, 0x56, 0xf8, 0x61, 0x2a,
-  0x89, 0x18, 0xfd, 0x32, 0x6a, 0x25, 0x3e, 0xf2, 0xe9, 0x60, 0xcd, 0xce,
-  0x8f, 0x2e, 0xce, 0x07, 0xc9, 0xa6, 0x4f, 0xc9, 0xf5, 0x72, 0xb0, 0x13,
-  0x86, 0x0b, 0xa8, 0x1a, 0xe3, 0x56, 0xe2, 0x7d, 0xd6, 0x7d, 0x17, 0x85,
-  0x1a, 0x57, 0x7f, 0x37, 0xc4, 0xb9, 0x7a, 0xc4, 0x03, 0x3b, 0xb1, 0xef,
-  0xf9, 0x35, 0x1f, 0x5b, 0xa3, 0xa4, 0x5f, 0xac, 0xf8, 0xda, 0x37, 0x47,
-  0x27, 0x11, 0xae, 0xf1, 0xef, 0xce, 0xdf, 0xfd, 0xa5, 0x3d, 0xca, 0x67,
-  0xcf, 0x23, 0x5f, 0xfd, 0x2d, 0x5d, 0xb9, 0x59, 0x5d, 0x4e, 0x6f, 0x33,
-  0xce, 0x1f, 0x40, 0xfa, 0xc0, 0xbe, 0xb9, 0x04, 0x88, 0xeb, 0xf8, 0x8b,
-  0x90, 0x4a, 0x12, 0xce, 0x00, 0x8a, 0xac, 0xc8, 0x18, 0x13, 0x79, 0x54,
-  0xa0, 0x7f, 0x9e, 0xbd, 0x87, 0x3c, 0x0d, 0xe4, 0xa5, 0x90, 0xab, 0x7c,
-  0x9e, 0xe6, 0x81, 0xdf, 0xf3, 0xa3, 0xc5, 0xf3, 0xba, 0xbc, 0x22, 0xc8,
-  0x19, 0xb1, 0x13, 0xa6, 0xf6, 0x84, 0x6e, 0x52, 0x19, 0x28, 0xcd, 0xf9,
-  0x5c, 0x16, 0x4d, 0xb6, 0x3d, 0xc1, 0x75, 0x47, 0x2e, 0x48, 0x50, 0x58,
-  0x10, 0x06, 0xc6, 0x5e, 0xb1, 0x85, 0x5e, 0x1b, 0x32, 0xe8, 0x89, 0x7d,
-  0x2b, 0xb8, 0x67, 0x6d, 0x5e, 0xde, 0xa1, 0x44, 0x70, 0xa1, 0xeb, 0xe3,
-  0x2e, 0x41, 0xc9, 0xaf, 0xac, 0x19, 0x6f, 0x73, 0x21, 0xef, 0x80, 0x91,
-  0x3d, 0xe6, 0x66, 0xb1, 0x1c, 0xbb, 0x7e, 0xf5, 0x3a, 0x76, 0x75, 0xfa,
-  0x19, 0x66, 0x8e, 0x28, 0xde, 0x53, 0x0c, 0xa9, 0x1f, 0x91, 0x70, 0xaf,
-  0x97, 0xd0, 0x31, 0x76, 0xa9, 0x0a, 0x5a, 0x2b, 0xbb, 0xb5, 0xde, 0x78,
-  0x61, 0x80, 0xfa, 0xbe, 0x9c, 0x17, 0x15, 0x31, 0xe2, 0x59, 0x2a, 0xeb,
-  0x0e, 0xb2, 0xa4, 0x90, 0xed, 0x0a, 0xb5, 0xea, 0x0f, 0xd2, 0x69, 0x93,
-  0x7e, 0x74, 0x35, 0x46, 0x52, 0xe7, 0xd0, 0x09, 0x26, 0x78, 0x54, 0x73,
-  0x71, 0x8e, 0x12, 0xbf, 0x4b, 0x72, 0x7b, 0x38, 0xd2, 0xaf, 0x0d, 0x93,
-  0x68, 0x6f, 0x13, 0xf3, 0xb6, 0x07, 0xa4, 0xce, 0xde, 0xfe, 0xf3, 0xd0,
-  0x61, 0x9d, 0xcf, 0x6f, 0x9f, 0xc3, 0x43, 0xf0, 0xb2, 0xc7, 0xff, 0x7a,
-  0xc9, 0x74, 0x35, 0x8d, 0xbd, 0xc9, 0xb0, 0xbb, 0x38, 0xd9, 0x90, 0x4d,
-  0x82, 0xe3, 0x33, 0xcd, 0x25, 0x1c, 0xac, 0xbc, 0xa9, 0xc5, 0x0b, 0x2d,
-  0x37, 0x8b, 0xa7, 0xca, 0x93, 0x9b, 0x60, 0x22, 0x3f, 0xc1, 0xc8, 0x05,
-  0x73, 0x52, 0x06, 0x37, 0x35, 0x36, 0xde, 0x4a, 0xc2, 0xd8, 0xdd, 0xc1,
-  0xb3, 0xf6, 0x01, 0x6d, 0xaa, 0x87, 0x3e, 0x05, 0xf6, 0x8d, 0x95, 0x17,
-  0xd9, 0x0b, 0xc7, 0x6d, 0x3e, 0x55, 0xbb, 0xe3, 0x29, 0xc6, 0xc2, 0x3f,
-  0x36, 0x07, 0x4c, 0x71, 0x08, 0xc9, 0x11, 0xa5, 0x5a, 0x9c, 0x1f, 0xbd,
-  0xfb, 0x38, 0x3c, 0x7a, 0x0b, 0x10, 0x42, 0x37, 0xd3, 0x0f, 0xc1, 0x97,
-  0x1c, 0xb1, 0x18, 0xf6, 0x72, 0x9a, 0x46, 0x4b, 0xde, 0x71, 0xd2, 0x97,
-  0xa0, 0xa0, 0x8a, 0x20, 0x15, 0x8c, 0x3a, 0x1f, 0x82, 0xdd, 0xf9, 0x7e,
-  0x96, 0x17, 0x7f, 0x41, 0xd6, 0x3b, 0x8f, 0x7a, 0x92, 0x11, 0xff, 0xfb,
-  0x6b, 0x0e, 0xaa, 0x07, 0x02, 0xe9, 0xbd, 0x5d, 0xcb, 0x7a, 0x9a, 0x65,
-  0x73, 0xc9, 0x21, 0x9a, 0x95, 0x8b, 0x82, 0x1d, 0x2c, 0x66, 0x65, 0xd4,
-  0xad, 0xc0, 0x5e, 0xac, 0x04, 0xad, 0x2a, 0x57, 0x60, 0x74, 0xe4, 0x08,
-  0x3b, 0x91, 0x01, 0x09, 0x2c, 0xab, 0xa3, 0xda, 0x49, 0x23, 0x33, 0xb3,
-  0x99, 0x37, 0xbe, 0x43, 0x6e, 0x49, 0x35, 0x03, 0xaa, 0x7f, 0x65, 0x54,
-  0x5e, 0xee, 0x4e, 0x3a, 0xbd, 0x2a, 0x8d, 0xad, 0x7b, 0x3d, 0xb3, 0x89,
-  0x4f, 0x15, 0x40, 0x14, 0xf5, 0x56, 0x7b, 0x56, 0xc3, 0x14, 0x52, 0x56,
-  0x12, 0x11, 0x51, 0xcb, 0x38, 0x25, 0x94, 0xb6, 0x3f, 0xcf, 0x13, 0xd0,
-  0x74, 0x14, 0x6b, 0x60, 0x91, 0x35, 0x94, 0x24, 0x4e, 0xcc, 0x07, 0x4f,
-  0x61, 0xb0, 0x11, 0xff, 0x9e, 0x55, 0x65, 0xd7, 0x2e, 0x54, 0x7d, 0x2c,
-  0xd6, 0xf3, 0x7f, 0x66, 0xc9, 0x80, 0xdd, 0xbd, 0xd8, 0x09, 0x98, 0xa5,
-  0xf7, 0xb0, 0x76, 0x97, 0x6e, 0x07, 0xc6, 0x7e, 0xd1, 0x74, 0xd0, 0x63,
-  0x08, 0x94, 0x13, 0x2f, 0x77, 0x63, 0xcb, 0xc0, 0xa9, 0x47, 0x0b, 0x45,
-  0x44, 0xdc, 0x6a, 0x8b, 0x39, 0x1c, 0x80, 0x4a, 0x78, 0x61, 0x6c, 0xaf,
-  0xe1, 0x72, 0x48, 0x69, 0x98, 0xa4, 0x98, 0x6f, 0x32, 0x31, 0x3a, 0xbe,
-  0xb7, 0x45, 0x3f, 0x9e, 0x96, 0x14, 0xf0, 0xa8, 0xad, 0x19, 0x1d, 0xa9,
-  0x67, 0x48, 0xba, 0x5f, 0x45, 0x1b, 0x11, 0x80, 0x1e, 0x1b, 0xc7, 0x07,
-  0xc3, 0x33, 0x32, 0x54, 0xf2, 0xb1, 0x38, 0x4f, 0xb5, 0x04, 0x00, 0xc6,
-  0xc1, 0x6f, 0x06, 0x82, 0x84, 0xdb, 0x51, 0xae, 0x62, 0xd3, 0x44, 0xaf,
-  0x4d, 0x69, 0x26, 0xdd, 0x46, 0xd6, 0x15, 0x70, 0xe2, 0xd7, 0xf0, 0x3e,
-  0x72, 0xca, 0x6d, 0xc4, 0xe8, 0xed, 0x29, 0xab, 0x34, 0xf2, 0x29, 0x68,
-  0x38, 0x30, 0x1f, 0xd2, 0xc2, 0xef, 0x2b, 0x16, 0xc0, 0xb4, 0x91, 0x97,
-  0x13, 0x64, 0x62, 0x30, 0x3b, 0x75, 0x58, 0x63, 0x47, 0x8a, 0x96, 0x4a,
-  0x67, 0x36, 0x6a, 0x32, 0x8a, 0xee, 0xf3, 0xd9, 0x62, 0xc6, 0xbc, 0x50,
-  0x3d, 0x29, 0x56, 0x3e, 0x23, 0x09, 0xad, 0x0b, 0x0b, 0xc0, 0x12, 0x03,
-  0x3c, 0xba, 0x7b, 0xdf, 0x46, 0xb0, 0xb0, 0x6d, 0xa5, 0x14, 0x27, 0xbd,
-  0xc3, 0xc4, 0xb6, 0x58, 0xa8, 0xff, 0xe3, 0x3b, 0x34, 0x79, 0x6d, 0x2e,
-  0xec, 0x2f, 0xc2, 0x4e, 0xa4, 0x9e, 0xe4, 0x60, 0xc1, 0x81, 0x9d, 0x49,
-  0xc0, 0xc9, 0x6c, 0xe2, 0x99, 0x07, 0xbc, 0xdd, 0xe0, 0x7c, 0x93, 0x55,
-  0x5a, 0x2e, 0xa3, 0x7a, 0x9e, 0x9f, 0x51, 0xf6, 0x3c, 0x0d, 0xd5, 0xb9,
-  0x92, 0xf8, 0x5a, 0x92, 0x8d, 0x7f, 0xc5, 0x15, 0x0f, 0x17, 0xf3, 0x80,
-  0x2c, 0xdd, 0x4a, 0x0a, 0xab, 0x6d, 0x98, 0xcf, 0xef, 0x48, 0x7c, 0x5d,
-  0x8c, 0x16, 0x72, 0xbe, 0xc9, 0x1c, 0xab, 0x7f, 0x02, 0xce, 0x9e, 0xa5,
-  0x22, 0x6f, 0x8b, 0x5c, 0x25, 0xc1, 0x35, 0xc2, 0x09, 0xd9, 0xcc, 0xc4,
-  0xb1, 0x4f, 0x93, 0xc2, 0xcb, 0xd7, 0xd3, 0xec, 0x9f, 0xe7, 0xf7, 0xf7,
-  0xe1, 0x65, 0xe9, 0xec, 0x1c, 0x2e, 0xc7, 0xc9, 0x46, 0xd0, 0x8b, 0xfb,
-  0x8e, 0x11, 0x34, 0x88, 0x16, 0xcd, 0xe4, 0x54, 0x82, 0x9a, 0x52, 0x49,
-  0xd8, 0x93, 0xcf, 0x33, 0x95, 0x7a, 0xb3, 0xa8, 0xbe, 0x48, 0x11, 0x0a,
-  0x77, 0x69, 0x1e, 0x2d, 0x8b, 0x21, 0xa8, 0x2e, 0xaf, 0x96, 0x90, 0x46,
-  0x5b, 0xcc, 0x9f, 0xcd, 0xb5, 0x51, 0xea, 0x68, 0x16, 0x75, 0x92, 0xb4,
-  0xd1, 0x49, 0xb9, 0xe0, 0x70, 0x48, 0x16, 0xf8, 0xd7, 0x73, 0x9e, 0x76,
-  0x3a, 0x4d, 0xe6, 0xb6, 0xca, 0x51, 0x9e, 0x95, 0x8f, 0x74, 0x9d, 0xec,
-  0x9a, 0xf9, 0xcf, 0x8b, 0x05, 0x21, 0xbb, 0x78, 0xb6, 0xf1, 0x41, 0xdd,
-  0x9a, 0xd1, 0x69, 0x47, 0x95, 0x14, 0xbd, 0x51, 0x44, 0x0c, 0xd4, 0x5e,
-  0x94, 0x81, 0x0f, 0x08, 0x2a, 0x01, 0x88, 0xb9, 0xee, 0x5f, 0xb0, 0x31,
-  0x6d, 0x50, 0x63, 0x39, 0x12, 0x93, 0xcb, 0xee, 0xcd, 0x64, 0x33, 0xcf,
-  0x74, 0x62, 0xef, 0x05, 0x77, 0x9b, 0x0d, 0xfc, 0x82, 0xc2, 0x11, 0x04,
-  0x41, 0x4b, 0x7e, 0x5b, 0x52, 0x7b, 0x88, 0xb8, 0xb2, 0x91, 0xb3, 0xc8,
-  0x89, 0x9c, 0x12, 0x74, 0xfa, 0x6f, 0x70, 0xa6, 0xeb, 0xb4, 0x9e, 0xf6,
-  0xf3, 0xae, 0x18, 0x3f, 0x02, 0x2a, 0xc9, 0x62, 0x0a, 0xec, 0x2e, 0x34,
-  0x4d, 0x0c, 0x0f, 0x86, 0x27, 0x1d, 0x0a, 0x99, 0x95, 0x3c, 0x76, 0xbb,
-  0x6d, 0x8d, 0xe7, 0x89, 0x54, 0x55, 0xea, 0x49, 0x6e, 0xe5, 0x8a, 0xae,
-  0x62, 0xa9, 0x62, 0xf2, 0xb3, 0x65, 0x95, 0x29, 0xea, 0x7d, 0xfe, 0xba,
-  0xe3, 0xf4, 0x0a, 0x3b, 0xc3, 0x5c, 0x28, 0x14, 0xec, 0xe7, 0x1a, 0x22,
-  0x31, 0x42, 0x0d, 0x3c, 0xb1, 0x2d, 0x50, 0x82, 0xc7, 0xe2, 0x71, 0xcc,
-  0x7e, 0xa5, 0x23, 0x1f, 0xd2, 0x25, 0x40, 0x75, 0x70, 0xfa, 0x31, 0xe2,
-  0x0f, 0x0b, 0x2f, 0x12, 0x55, 0xb2, 0xc6, 0xd3, 0x04, 0x2b, 0x68, 0xe4,
-  0xc6, 0xb2, 0xa2, 0x8a, 0xda, 0x70, 0xd1, 0x79, 0x62, 0x57, 0x0c, 0xb9,
-  0x18, 0x39, 0x68, 0x73, 0xc9, 0x55, 0x4c, 0xb4, 0x07, 0x5e, 0x9b, 0x5d,
-  0x01, 0x89, 0x1f, 0x32, 0x2c, 0xe9, 0x6f, 0x8b, 0x9c, 0x94, 0x09, 0xca,
-  0xe1, 0x18, 0x24, 0x6f, 0x19, 0x61, 0x22, 0xd5, 0x40, 0xb8, 0x36, 0x10,
-  0xea, 0x07, 0xd1, 0xa3, 0xb6, 0x03, 0x81, 0x2f, 0xdd, 0x74, 0x88, 0xce,
-  0xe1, 0x7b, 0x74, 0xfa, 0x90, 0x3a, 0x3d, 0x33, 0x07, 0x1d, 0x84, 0x15,
-  0x92, 0x5c, 0x05, 0x4c, 0x81, 0xc4, 0x1e, 0x15, 0x11, 0x2c, 0x44, 0x98,
-  0xf5, 0x4d, 0x68, 0x06, 0xf6, 0x5a, 0x04, 0xf0, 0x30, 0x8b, 0xc4, 0x08,
-  0x68, 0xa8, 0x7e, 0x40, 0x91, 0x4e, 0xb7, 0xb9, 0x02, 0xb8, 0x91, 0x33,
-  0x53, 0xea, 0x24, 0x35, 0xa5, 0xc5, 0x2e, 0xba, 0x73, 0xd3, 0xc4, 0xe8,
-  0x25, 0x82, 0x05, 0xe2, 0x30, 0x60, 0x18, 0x2c, 0xb2, 0xba, 0x2b, 0xfd,
-  0x44, 0xe4, 0x47, 0x48, 0x23, 0xe2, 0x4f, 0x15, 0x99, 0x87, 0x3c, 0x62,
-  0x4c, 0x64, 0x6b, 0xdd, 0x56, 0xf1, 0x5f, 0xdf, 0x52, 0x87, 0xcc, 0x46,
-  0x1b, 0x95, 0xb5, 0x72, 0xd0, 0x99, 0x41, 0x9a, 0xd7, 0x5b, 0xe7, 0x09,
-  0xa4, 0x3d, 0xbf, 0x90, 0x17, 0x81, 0xeb, 0x8e, 0x79, 0xac, 0x08, 0xab,
-  0xca, 0x8d, 0x85, 0xc5, 0xda, 0x7e, 0x31, 0x25, 0x42, 0x8c, 0xf3, 0x85,
-  0x6c, 0x48, 0x0b, 0xa1, 0x12, 0x64, 0x44, 0x8b, 0x1b, 0x00, 0x76, 0x1b,
-  0x05, 0xa9, 0x22, 0xc5, 0x39, 0xcc, 0x76, 0x5a, 0x48, 0xce, 0xf5, 0x78,
-  0x6a, 0x64, 0x7d, 0xc4, 0xd6, 0xd4, 0xda, 0x2c, 0x44, 0x1c, 0xd4, 0xeb,
-  0x8a, 0xd3, 0x7a, 0x41, 0xba, 0xc7, 0x74, 0x41, 0xdf, 0x66, 0xce, 0x1d,
-  0xcb, 0xf9, 0xa2, 0xa9, 0xa2, 0x51, 0x9e, 0x24, 0x4b, 0xda, 0x42, 0x67,
-  0xd4, 0xa3, 0x8c, 0x5a, 0x68, 0x19, 0x27, 0x65, 0x53, 0xea, 0xb2, 0x6a,
-  0x0c, 0x96, 0xf4, 0x8e, 0x0c, 0xc2, 0x9e, 0x5f, 0x9a, 0xd0, 0x8f, 0x5d,
-  0x12, 0x2c, 0x5e, 0xbb, 0xd3, 0xaa, 0x3b, 0x98, 0x46, 0x79, 0x70, 0x6a,
-  0x0e, 0x01, 0xd3, 0x25, 0xe3, 0xf7, 0x4d, 0x6f, 0x0f, 0xcd, 0xa0, 0x04,
-  0x58, 0xb5, 0x55, 0xed, 0xef, 0xb8, 0xeb, 0xfe, 0x0c, 0x6a, 0x12, 0xb2,
-  0xe2, 0x60, 0x0b, 0x0b, 0xca, 0xd9, 0x6b, 0x75, 0x89, 0x49, 0x2d, 0x8a,
-  0x18, 0xe6, 0xf1, 0x29, 0xd5, 0x08, 0x5b, 0xf5, 0x07, 0xff, 0x99, 0xf7,
-  0xe1, 0x8b, 0x36, 0x4f, 0xbf, 0x90, 0x60, 0xfd, 0xaa, 0x03, 0x95, 0x3e,
-  0xed, 0x44, 0x2d, 0xc1, 0x27, 0xff, 0xdf, 0x79, 0xa2, 0xd2, 0xa7, 0x1d,
-  0xa9, 0xb4, 0x75, 0xa6, 0x96, 0xd4, 0x90, 0x5c, 0xda, 0xe3, 0xdf, 0xf0,
-  0x94, 0xd9, 0x20, 0xee, 0x53, 0xcf, 0x98, 0xee, 0x89, 0xff, 0xbb, 0x4f,
-  0xd9, 0xe7, 0x1d, 0x2d, 0x10, 0x8c, 0x72, 0xfd, 0x2b, 0x73, 0x07, 0xce,
-  0x73, 0xa3, 0x95, 0x75, 0x99, 0x32, 0x0e, 0xea, 0x16, 0x80, 0xe8, 0xeb,
-  0xe1, 0xb0, 0x7f, 0x70, 0x76, 0xec, 0xd3, 0x8e, 0x0a, 0x5f, 0x1e, 0x67,
-  0x01, 0x71, 0x4a, 0x2a, 0x68, 0x7c, 0xf0, 0x44, 0x80, 0xb7, 0x42, 0x8a,
-  0x3d, 0x32, 0xe4, 0x93, 0xdd, 0x57, 0x2f, 0x77, 0xcd, 0x2a, 0x3e, 0x30,
-  0xaf, 0x93, 0xbc, 0xff, 0x7c, 0xf0, 0x6c, 0x9b, 0xaa, 0x08, 0xe7, 0x8d,
-  0xe7, 0x9c, 0x96, 0xf6, 0xcd, 0xd9, 0x8c, 0xc4, 0x7f, 0xa9, 0x5b, 0x1f,
-  0x8e, 0x0e, 0x13, 0x06, 0xa5, 0x80, 0xe4, 0x27, 0x01, 0x46, 0x9e, 0xf0,
-  0xf6, 0x92, 0x3a, 0x89, 0x20, 0x25, 0x1d, 0xfb, 0x81, 0x25, 0x06, 0xc2,
-  0xd4, 0x06, 0xa6, 0x43, 0x30, 0x1d, 0x96, 0xa2, 0x15, 0xa9, 0xa7, 0x85,
-  0xed, 0x09, 0x9d, 0x4e, 0x56, 0x82, 0x65, 0x66, 0xe6, 0x91, 0xaa, 0x70,
-  0xfe, 0x9c, 0x3c, 0x91, 0xa8, 0x95, 0x0a, 0x98, 0x2d, 0x5f, 0x1f, 0x55,
-  0xb6, 0x97, 0xa8, 0xeb, 0xce, 0x95, 0x16, 0x68, 0xe5, 0x72, 0x7c, 0x15,
-  0x52, 0x43, 0x1e, 0x81, 0xf1, 0xcc, 0x2a, 0xd0, 0x97, 0x7f, 0x9b, 0xc4,
-  0x3d, 0xd1, 0xab, 0xb4, 0xff, 0x88, 0xfa, 0xe6, 0x2b, 0xf9, 0xda, 0x77,
-  0x39, 0x77, 0xa2, 0xda, 0x2f, 0x1b, 0x11, 0x2b, 0xf4, 0x5d, 0xbb, 0x15,
-  0x1b, 0x60, 0x21, 0x15, 0x66, 0x27, 0xdb, 0x5e, 0x43, 0xb6, 0xf5, 0x55,
-  0x8d, 0x47, 0x80, 0xc7, 0xee, 0x5b, 0xdb, 0xc6, 0xfe, 0x9d, 0xca, 0x8b,
-  0x62, 0x67, 0x20, 0xe6, 0x13, 0xfc, 0xf2, 0x12, 0x4c, 0xeb, 0x75, 0x40,
-  0xd3, 0x72, 0x07, 0xb0, 0x90, 0x25, 0x06, 0xe2, 0xa7, 0x6d, 0x38, 0x7c,
-  0x96, 0x36, 0x63, 0x25, 0x81, 0x32, 0xc2, 0x2f, 0x9f, 0xa7, 0xd3, 0xe4,
-  0x09, 0xb8, 0xc1, 0xd8, 0xe2, 0xd3, 0x05, 0xc8, 0x56, 0xda, 0x2f, 0xbf,
-  0x0a, 0x65, 0x82, 0x92, 0x4d, 0x04, 0x81, 0x04, 0x30, 0xaf, 0x34, 0x48,
-  0x1a, 0x8b, 0x8b, 0xd8, 0xf8, 0x08, 0x2a, 0xa0, 0xc3, 0x5b, 0x83, 0x27,
-  0xd5, 0xc1, 0xed, 0x5c, 0x9b, 0x21, 0x63, 0xc3, 0xff, 0x0d, 0x97, 0xe8,
-  0x8b, 0xc4, 0xae, 0xd5, 0x53, 0x2e, 0x53, 0x66, 0xf2, 0xe4, 0x22, 0x50,
-  0x01, 0x63, 0x86, 0x53, 0x58, 0xff, 0xdf, 0x5d, 0xfa, 0xff, 0x4b, 0x77,
-  0xe9, 0x3f, 0x72, 0x4a, 0xa9, 0x62, 0x20, 0xdd, 0x69, 0xad, 0x93, 0xe9,
-  0x1f, 0xc6, 0x18, 0xb8, 0x6d, 0xfa, 0x30, 0x70, 0x29, 0x0d, 0xbf, 0xe0,
-  0x88, 0x86, 0x5b, 0xe1, 0xff, 0x8e, 0x23, 0xfa, 0xa4, 0x93, 0xf9, 0xff,
-  0x2c, 0xc7, 0xff, 0x6e, 0xe7, 0x70, 0x45, 0x9c, 0x7c, 0xd3, 0x6c, 0xb3,
-  0x3b, 0xe2, 0xca, 0x66, 0xb6, 0x7a, 0xd8, 0x29, 0x5b, 0xee, 0x2a, 0x26,
-  0xf0, 0x37, 0x4f, 0xdd, 0xf1, 0xd9, 0x77, 0x2f, 0x7b, 0xe4, 0xfd, 0x1f,
-  0x76, 0x23, 0x3e, 0x55, 0x72, 0xf2, 0xf6, 0xe0, 0xec, 0x17, 0x9c, 0xf6,
-  0xbf, 0xc0, 0x49, 0x35, 0xcf, 0xb2, 0x49, 0x9f, 0xbd, 0xcb, 0xaf, 0xf1,
-  0x8f, 0x68, 0x3c, 0x46, 0x33, 0x3a, 0xb1, 0x6d, 0xc9, 0xe9, 0x1c, 0x06,
-  0xba, 0xf0, 0x72, 0xb2, 0x99, 0x17, 0x92, 0x63, 0x4d, 0xb8, 0xb7, 0x3a,
-  0xb4, 0x50, 0xcb, 0x62, 0xb2, 0x25, 0xe0, 0x17, 0xfe, 0x36, 0xb6, 0x8a,
-  0x04, 0x28, 0xe9, 0x78, 0x5f, 0x11, 0x13, 0x8b, 0xe5, 0xb2, 0xf2, 0x9e,
-  0x61, 0x48, 0x42, 0x34, 0x5a, 0xfe, 0xe0, 0x86, 0xc2, 0x8e, 0x71, 0xe6,
-  0x4b, 0x79, 0xb6, 0xc3, 0x85, 0x4e, 0x91, 0xd8, 0xf6, 0x3b, 0x66, 0x77,
-  0x76, 0x3f, 0xbf, 0x2c, 0xde, 0xba, 0x72, 0x2a, 0xfd, 0x95, 0x68, 0xcd,
-  0x20, 0xc5, 0x51, 0x26, 0x8b, 0x2a, 0x2c, 0x65, 0x91, 0xfa, 0xb3, 0xc3,
-  0x21, 0x46, 0xee, 0xaf, 0xfd, 0x44, 0x7b, 0x2e, 0xcd, 0xe7, 0x5b, 0xd3,
-  0x19, 0xc1, 0xdd, 0xf6, 0x5a, 0xe1, 0x6c, 0xbf, 0x4b, 0x36, 0x9a, 0xb2,
-  0x9b, 0xa8, 0x63, 0x14, 0x08, 0x11, 0x89, 0xf6, 0x9b, 0xdd, 0x14, 0x9a,
-  0x22, 0xee, 0xf5, 0x47, 0xf0, 0x9c, 0x44, 0x06, 0x51, 0x31, 0x19, 0xa7,
-  0xad, 0xcc, 0x2e, 0x87, 0x79, 0xe1, 0x95, 0xd9, 0x49, 0xb9, 0xd6, 0x25,
-  0xcd, 0x5a, 0x48, 0xcf, 0xc5, 0xe7, 0x3b, 0x6b, 0xc6, 0x03, 0xbb, 0xb2,
-  0xa0, 0xcc, 0xa1, 0x1a, 0x98, 0x59, 0x55, 0x68, 0xb1, 0x20, 0x33, 0xc2,
-  0xea, 0x41, 0x93, 0x37, 0xfb, 0xf2, 0x5e, 0x08, 0xf2, 0xe5, 0x40, 0xe9,
-  0x12, 0x70, 0xe5, 0x6f, 0x08, 0x26, 0x5b, 0x5d, 0xc0, 0x22, 0x4c, 0x58,
-  0x54, 0x5a, 0x45, 0x2b, 0x15, 0x52, 0x14, 0xa3, 0xa4, 0xbd, 0xa0, 0x25,
-  0xa5, 0x2f, 0xa7, 0xe9, 0x9d, 0x40, 0x5f, 0xbb, 0xf2, 0x7e, 0x78, 0xf2,
-  0x0c, 0xd3, 0x7a, 0x71, 0x32, 0xf4, 0xe9, 0x5a, 0xeb, 0x84, 0x2b, 0xaf,
-  0x1a, 0xe1, 0xf3, 0xd5, 0xd1, 0xc1, 0xf0, 0x62, 0x10, 0x0c, 0xd1, 0x8c,
-  0x31, 0x8c, 0xa8, 0x5b, 0xc0, 0x7c, 0x06, 0x26, 0x8d, 0x69, 0xfa, 0x40,
-  0x84, 0x4d, 0x02, 0xe2, 0xa7, 0xce, 0x71, 0xdf, 0xb4, 0x75, 0xb2, 0xbb,
-  0x52, 0xc6, 0xf4, 0x35, 0x59, 0x15, 0xf2, 0xac, 0x98, 0xb9, 0x1b, 0xe5,
-  0x53, 0x1a, 0x81, 0xe9, 0xd7, 0xc8, 0x58, 0xbf, 0x02, 0x95, 0x44, 0x46,
-  0x58, 0x39, 0x25, 0x2c, 0x0e, 0x7d, 0xa6, 0x6d, 0x19, 0x13, 0x1f, 0x9c,
-  0xa4, 0xc9, 0x2d, 0x4f, 0x7a, 0x31, 0x5a, 0x46, 0x59, 0x67, 0x42, 0xba,
-  0x43, 0x6d, 0xe8, 0x5c, 0x31, 0x22, 0xdf, 0x62, 0x94, 0xf1, 0x0a, 0x52,
-  0x86, 0xc3, 0x8c, 0x82, 0xb4, 0xbe, 0x51, 0x9c, 0xeb, 0xb8, 0x41, 0x55,
-  0xe2, 0x74, 0x65, 0x6d, 0x88, 0xbd, 0x4e, 0x55, 0x77, 0x5a, 0x68, 0xe4,
-  0x5f, 0x11, 0x2e, 0xba, 0x0b, 0x89, 0xfc, 0x3e, 0x27, 0x06, 0xcb, 0xad,
-  0x15, 0xeb, 0x6d, 0xa3, 0x8b, 0x44, 0xcd, 0xcd, 0xb0, 0x75, 0xa0, 0x05,
-  0x6e, 0xcb, 0x78, 0x29, 0x08, 0x63, 0xe2, 0x66, 0xe6, 0x12, 0x19, 0x78,
-  0x59, 0x84, 0x4f, 0x9e, 0x90, 0xb5, 0x80, 0x6e, 0x26, 0x32, 0x3d, 0xbf,
-  0x78, 0x42, 0x9e, 0x3f, 0x0f, 0x27, 0xa4, 0xca, 0xfe, 0x36, 0x89, 0x31,
-  0x74, 0x02, 0x77, 0x0a, 0xd0, 0x2b, 0x83, 0x45, 0xcf, 0x99, 0x66, 0x94,
-  0xba, 0xba, 0x4d, 0x14, 0xfa, 0x8a, 0xe6, 0x73, 0xe4, 0x2d, 0x14, 0x40,
-  0xa7, 0xf0, 0x4d, 0x70, 0xeb, 0x83, 0xe7, 0xa9, 0xfd, 0xac, 0x82, 0x45,
-  0xba, 0xa9, 0xa7, 0xc2, 0x52, 0x20, 0x1f, 0x59, 0xa9, 0x41, 0x12, 0xf7,
-  0x3f, 0x88, 0xd8, 0x2b, 0x33, 0x72, 0x7b, 0x78, 0xfa, 0x54, 0xc1, 0xd9,
-  0x0e, 0xec, 0x91, 0x1a, 0xe7, 0xdd, 0xc9, 0x50, 0x72, 0x52, 0x8c, 0x9d,
-  0x07, 0x2f, 0xa3, 0x4f, 0x2e, 0x2a, 0xcb, 0x49, 0xbf, 0x6a, 0x0a, 0x02,
-  0x38, 0x0e, 0xb1, 0xbc, 0x33, 0xd2, 0x0e, 0x44, 0x19, 0x52, 0xcb, 0xeb,
-  0xa9, 0x13, 0x11, 0x0a, 0x0f, 0x4c, 0x4b, 0x2b, 0xae, 0x64, 0x07, 0x2c,
-  0x12, 0x5c, 0x63, 0x4b, 0x32, 0x05, 0x9c, 0x56, 0x01, 0x38, 0x63, 0x3f,
-  0x64, 0xb2, 0x34, 0xd6, 0xfc, 0x6d, 0x36, 0x45, 0xa2, 0x41, 0x56, 0x8c,
-  0xab, 0x87, 0xb9, 0x4f, 0x29, 0x3b, 0xf9, 0x47, 0xe6, 0x5f, 0xf1, 0xc0,
-  0x08, 0xbc, 0x19, 0xc5, 0xc7, 0x08, 0xbb, 0xad, 0x50, 0xff, 0xa2, 0x1c,
-  0x1c, 0x95, 0x6f, 0xec, 0x28, 0x01, 0x5a, 0x91, 0xe3, 0x6b, 0x56, 0xff,
-  0x25, 0x6b, 0x46, 0xa5, 0x37, 0x93, 0x36, 0x31, 0x4d, 0x4e, 0xd7, 0x67,
-  0xbc, 0x00, 0x09, 0x87, 0x05, 0x45, 0x3e, 0x79, 0xed, 0xf7, 0x7a, 0x3c,
-  0x61, 0xb7, 0x7b, 0x01, 0x50, 0x9a, 0x44, 0xc2, 0xbb, 0xb2, 0x1a, 0x67,
-  0xed, 0x9a, 0xbe, 0x74, 0x60, 0xb5, 0x20, 0xc6, 0x1e, 0xc3, 0x61, 0xac,
-  0x6f, 0x8e, 0xf2, 0x00, 0x05, 0x7f, 0x17, 0xaf, 0xbe, 0x8b, 0xb7, 0x5d,
-  0x82, 0xce, 0xd0, 0x08, 0x57, 0x46, 0xbe, 0x28, 0xf6, 0x83, 0x8b, 0x57,
-  0x6b, 0x0d, 0x6c, 0xf3, 0xf4, 0xed, 0xde, 0x32, 0x82, 0xd4, 0x81, 0xfc,
-  0x1a, 0x09, 0x53, 0x13, 0x62, 0xbf, 0x76, 0xec, 0x4d, 0x89, 0xad, 0x1d,
-  0x07, 0xe0, 0x17, 0xf9, 0x4b, 0x5f, 0xee, 0x7e, 0xf6, 0x72, 0x6b, 0x55,
-  0xb1, 0x2c, 0x62, 0x8b, 0xa7, 0xd4, 0x1c, 0xde, 0x44, 0xf4, 0xaf, 0xbd,
-  0x81, 0x3f, 0x41, 0x1e, 0xa5, 0xb5, 0xa4, 0x50, 0x85, 0x77, 0x9c, 0xb9,
-  0x70, 0x68, 0x53, 0x60, 0x22, 0x94, 0x86, 0x18, 0xdb, 0x85, 0xc7, 0x45,
-  0xd6, 0x8c, 0x9c, 0x73, 0x6c, 0xe6, 0xae, 0x59, 0xd8, 0x1d, 0x26, 0x9b,
-  0x89, 0xfd, 0x67, 0xda, 0x07, 0xbe, 0x3f, 0xfd, 0xfa, 0x41, 0xdc, 0x59,
-  0xfc, 0x7d, 0xd0, 0xfe, 0x97, 0x1f, 0x0c, 0x72, 0x0d, 0xfc, 0x9a, 0x55,
-  0x7e, 0xf6, 0x4f, 0x58, 0xe5, 0x67, 0xab, 0x57, 0xf9, 0xd9, 0x53, 0x57,
-  0xf9, 0xb3, 0x17, 0x2f, 0x3f, 0xff, 0x15, 0xab, 0xec, 0xcd, 0xf0, 0xff,
-  0xb1, 0x55, 0xf6, 0x76, 0xda, 0xaf, 0x5b, 0x65, 0x09, 0xaa, 0x07, 0x82,
-  0x58, 0xa8, 0xd6, 0x09, 0xfe, 0x44, 0x89, 0x9b, 0x0c, 0x7f, 0xe6, 0x67,
-  0x2d, 0x15, 0x62, 0x8b, 0x1d, 0xd3, 0x96, 0x59, 0x21, 0x4d, 0x2c, 0x62,
-  0x66, 0xbb, 0x34, 0x52, 0xe8, 0xb8, 0xf3, 0x29, 0x55, 0xeb, 0xd8, 0xe8,
-  0x6f, 0xa8, 0x83, 0x44, 0xd3, 0x26, 0x94, 0x85, 0x81, 0x3f, 0x67, 0x96,
-  0xfa, 0x9f, 0xc8, 0xe2, 0x11, 0x62, 0x0e, 0x3c, 0xd4, 0x88, 0x3f, 0x69,
-  0xcd, 0x78, 0xde, 0xbf, 0x4c, 0x89, 0xf8, 0x27, 0x48, 0x9e, 0x11, 0xf0,
-  0x90, 0x78, 0x66, 0x2e, 0x0e, 0xcf, 0x92, 0x77, 0xa9, 0x50, 0x7e, 0x27,
-  0x9b, 0x66, 0xb7, 0x7d, 0xf6, 0x7c, 0xf7, 0xd9, 0xd6, 0x4a, 0xad, 0xa3,
-  0x9d, 0xc8, 0x8e, 0x6f, 0x15, 0x65, 0x0c, 0xc4, 0x75, 0xb1, 0xa8, 0x90,
-  0x59, 0x86, 0xb1, 0x9a, 0x2f, 0x7d, 0xfa, 0x70, 0xfa, 0xf6, 0xe8, 0xe4,
-  0xe0, 0x2f, 0x36, 0x33, 0x8e, 0x46, 0xa6, 0x99, 0x16, 0x9f, 0x8c, 0xb2,
-  0xfe, 0xf0, 0xc9, 0xd8, 0x3f, 0xe6, 0x97, 0x9b, 0xcf, 0xb6, 0x08, 0xc6,
-  0x1e, 0x94, 0x5c, 0xb9, 0xca, 0x5a, 0x59, 0x85, 0x82, 0xa9, 0x5b, 0x91,
-  0x8a, 0x6d, 0xdd, 0x31, 0x3b, 0x83, 0x3d, 0xa1, 0xf5, 0x15, 0x5a, 0x52,
-  0xb7, 0x3e, 0x1e, 0xc1, 0x70, 0x2a, 0x5c, 0x0d, 0x9a, 0xc5, 0x57, 0x06,
-  0xb4, 0x22, 0xf3, 0x69, 0x6e, 0xee, 0x79, 0x52, 0xce, 0x6a, 0x73, 0xd2,
-  0xa9, 0xa6, 0x00, 0x85, 0xc1, 0x2e, 0xdb, 0x9c, 0x2f, 0xc8, 0x54, 0xa0,
-  0x5f, 0xac, 0x8e, 0xea, 0xb4, 0x37, 0x7a, 0x83, 0x93, 0x91, 0x4d, 0x8b,
-  0xac, 0xe9, 0x4b, 0xcf, 0x5e, 0x9b, 0x3f, 0xdf, 0xdc, 0xa6, 0xd3, 0x20,
-  0x09, 0x86, 0x4a, 0x96, 0x48, 0x5a, 0x9f, 0x43, 0xda, 0xd0, 0x9b, 0x1e,
-  0xa7, 0xf1, 0xd0, 0x52, 0xfb, 0xea, 0x93, 0x69, 0x95, 0x05, 0x14, 0xbe,
-  0x17, 0x17, 0x7f, 0x39, 0x3b, 0x7a, 0xf3, 0x9a, 0x70, 0x3a, 0x5f, 0x10,
-  0x12, 0xb3, 0x6e, 0xc1, 0x76, 0x12, 0xaa, 0xa8, 0x17, 0x8c, 0xe1, 0x87,
-  0xb7, 0xc7, 0xc3, 0xb3, 0x93, 0xd3, 0xc3, 0x37, 0xaf, 0x7f, 0x20, 0x25,
-  0xda, 0x9c, 0x94, 0x07, 0xef, 0x5d, 0xfb, 0x33, 0xcb, 0x52, 0x1a, 0x66,
-  0x4e, 0x1e, 0x7d, 0xff, 0xe9, 0xe8, 0xc3, 0x77, 0x6f, 0x5e, 0xdf, 0xa6,
-  0x55, 0x8f, 0xc6, 0xc7, 0x6f, 0x2f, 0xa9, 0x07, 0xd4, 0xda, 0x6b, 0xa4,
-  0x8d, 0x8c, 0xa6, 0x37, 0x75, 0xfe, 0xf7, 0x2c, 0x31, 0xaf, 0x4f, 0x17,
-  0x21, 0x4b, 0xe0, 0x05, 0x27, 0x9b, 0x99, 0xc9, 0xa0, 0xbf, 0x25, 0x5f,
-  0x9d, 0x7c, 0x4b, 0x4c, 0x54, 0xd6, 0x2d, 0x34, 0x63, 0xf2, 0xf3, 0xe4,
-  0x8b, 0x17, 0xbb, 0x7b, 0x5b, 0xae, 0x98, 0x0e, 0x98, 0xec, 0x4c, 0x8f,
-  0x6f, 0x02, 0x14, 0xf1, 0xdf, 0x33, 0xaf, 0x4a, 0xad, 0x14, 0x04, 0x7a,
-  0x68, 0xe5, 0xf1, 0xaa, 0x85, 0x8d, 0xa4, 0x40, 0x80, 0xa5, 0xa8, 0x16,
-  0x51, 0x85, 0x84, 0xfe, 0xc0, 0xc1, 0x70, 0xf1, 0xce, 0xcb, 0xe6, 0xfd,
-  0xca, 0xed, 0x3d, 0xd3, 0x1d, 0x71, 0x52, 0xac, 0x14, 0x06, 0xbf, 0xa3,
-  0xeb, 0xba, 0xab, 0x41, 0x63, 0xb2, 0x8d, 0x81, 0x25, 0xfb, 0x27, 0x3e,
-  0xcf, 0x17, 0xce, 0xa6, 0x02, 0x1e, 0xba, 0x64, 0xc6, 0x13, 0x8c, 0x52,
-  0x37, 0x9e, 0xe6, 0x50, 0x3d, 0xe2, 0xb2, 0x30, 0x66, 0x68, 0x05, 0x02,
-  0x4f, 0x35, 0x67, 0x3d, 0x63, 0x75, 0x9a, 0x5d, 0xa5, 0xe3, 0x07, 0xcb,
-  0xe0, 0x86, 0x05, 0x99, 0x94, 0x91, 0x24, 0xcf, 0x74, 0x4c, 0xba, 0xeb,
-  0x34, 0x9b, 0x5c, 0x01, 0xad, 0xcb, 0xd9, 0xa2, 0xe6, 0xb8, 0x5a, 0x1b,
-  0x97, 0xbb, 0x66, 0xb3, 0x62, 0x35, 0x55, 0x7d, 0x39, 0xe2, 0xdb, 0x96,
-  0x46, 0x69, 0xef, 0x3e, 0xda, 0x36, 0xa8, 0xf6, 0xb5, 0x72, 0x4e, 0x9f,
-  0xb7, 0x1d, 0x84, 0x7f, 0xc7, 0x21, 0xa7, 0x04, 0x77, 0xf8, 0xa0, 0x5e,
-  0xd3, 0x5f, 0xe3, 0x34, 0x97, 0xe0, 0xc8, 0x87, 0x95, 0xc6, 0xd5, 0xdc,
-  0x1c, 0x2b, 0x8c, 0xa5, 0x26, 0x11, 0xea, 0x68, 0x62, 0x4b, 0x6c, 0x9c,
-  0xf7, 0x30, 0x4e, 0x1f, 0x61, 0x7d, 0x78, 0x66, 0x7b, 0x66, 0x3d, 0x9a,
-  0x19, 0xda, 0x19, 0x4b, 0xda, 0xf3, 0x72, 0x15, 0x42, 0x8f, 0x34, 0x83,
-  0xe4, 0x29, 0xae, 0xfc, 0x9a, 0xda, 0x22, 0x99, 0x48, 0x68, 0x3a, 0x33,
-  0x53, 0x5f, 0xa8, 0x93, 0x3b, 0xf5, 0x13, 0x9e, 0xf1, 0x10, 0x27, 0xcc,
-  0xd6, 0x61, 0xae, 0x21, 0x43, 0x21, 0xd5, 0x4c, 0xe2, 0xf8, 0x28, 0x45,
-  0x10, 0x2c, 0x6b, 0x9b, 0xe9, 0x66, 0xad, 0x57, 0x30, 0x25, 0x05, 0x14,
-  0x5c, 0x18, 0x5b, 0x39, 0x9d, 0x22, 0xc9, 0xda, 0x3e, 0x86, 0x9d, 0xb2,
-  0xfb, 0x25, 0xd5, 0x1d, 0x83, 0x53, 0xda, 0x64, 0x74, 0x6a, 0x73, 0x46,
-  0x83, 0xd9, 0x62, 0xde, 0x8d, 0x28, 0xdf, 0xaa, 0x55, 0x19, 0x5a, 0x17,
-  0x95, 0x69, 0x94, 0xde, 0x97, 0x4b, 0x0a, 0xd7, 0x12, 0x67, 0xa1, 0x71,
-  0xb3, 0xde, 0x8c, 0x04, 0x18, 0xe9, 0x86, 0x31, 0x9f, 0xdd, 0x5b, 0x8a,
-  0x58, 0xfb, 0x14, 0x69, 0xe9, 0xcf, 0xa8, 0x92, 0x48, 0xa2, 0x20, 0xc4,
-  0x66, 0x7f, 0xcb, 0x26, 0x8f, 0xe5, 0x8d, 0xcd, 0xb1, 0x88, 0x64, 0x16,
-  0x5b, 0x66, 0x41, 0x5b, 0xe6, 0x83, 0x7d, 0x3d, 0xba, 0x43, 0x64, 0x4f,
-  0xd0, 0xc7, 0xb6, 0x39, 0x13, 0x42, 0x85, 0x50, 0x1e, 0x49, 0xc6, 0x0a,
-  0x1a, 0x2b, 0xb2, 0x3b, 0xbf, 0x31, 0xa7, 0x66, 0xd9, 0x06, 0x7f, 0x4f,
-  0xf7, 0xde, 0xe3, 0x65, 0x61, 0x69, 0xcd, 0xc9, 0x9e, 0x0f, 0x4b, 0x69,
-  0xd2, 0x6d, 0x96, 0x10, 0xe4, 0x95, 0x6b, 0xb7, 0x89, 0xa7, 0xcd, 0x56,
-  0xac, 0xe0, 0xfb, 0x72, 0xa9, 0x14, 0x58, 0x1f, 0x9e, 0x9f, 0xad, 0xf7,
-  0xc4, 0xd3, 0x6e, 0x3e, 0xd0, 0x37, 0xff, 0x4e, 0xa0, 0x33, 0x11, 0x15,
-  0xeb, 0x8b, 0xe7, 0x12, 0x14, 0xf7, 0x2a, 0xb0, 0x46, 0x5c, 0x3f, 0xed,
-  0x12, 0xb1, 0x5c, 0xd7, 0xc4, 0xb1, 0x26, 0x1b, 0x75, 0xa6, 0x3d, 0x42,
-  0x0e, 0xd7, 0xf5, 0x1c, 0x41, 0x57, 0xbc, 0x77, 0x1e, 0x57, 0x03, 0x77,
-  0xf3, 0x91, 0xe4, 0xbe, 0xe7, 0x9d, 0x19, 0xd5, 0x0e, 0x45, 0xa6, 0xd2,
-  0x55, 0x0e, 0x2d, 0x2b, 0xbe, 0xf2, 0x94, 0x97, 0x02, 0x95, 0x17, 0x3b,
-  0x53, 0x2c, 0x79, 0xe3, 0xcb, 0xb1, 0xa9, 0x9a, 0x8c, 0xe7, 0x0d, 0x72,
-  0xa0, 0xce, 0x28, 0x91, 0xeb, 0x6e, 0xfe, 0x3c, 0x36, 0xc2, 0xc7, 0x07,
-  0xe4, 0x8f, 0x67, 0x45, 0x99, 0x5c, 0xda, 0x1d, 0xf4, 0x6b, 0x87, 0xe3,
-  0x78, 0x6c, 0x50, 0x9a, 0xf4, 0xff, 0xeb, 0x86, 0x24, 0x06, 0x57, 0x77,
-  0xdd, 0x69, 0x64, 0x61, 0xc0, 0xe0, 0x49, 0x03, 0x6d, 0x8d, 0xd4, 0x98,
-  0x4b, 0x3b, 0xc1, 0xcd, 0x7c, 0x32, 0xdc, 0x4a, 0xd4, 0x00, 0x76, 0x65,
-  0xbe, 0x69, 0x9c, 0x34, 0x3c, 0x35, 0x81, 0xc9, 0x5f, 0x2d, 0x3c, 0x24,
-  0xec, 0xbe, 0x92, 0xda, 0x1f, 0x71, 0xfb, 0x97, 0xde, 0x54, 0xf2, 0xc8,
-  0x15, 0x09, 0x05, 0x1d, 0x97, 0xa4, 0x98, 0x77, 0xd1, 0x1e, 0x46, 0x2c,
-  0xf4, 0x76, 0xf7, 0x76, 0x25, 0x49, 0xd2, 0xeb, 0x1f, 0x97, 0x16, 0xfb,
-  0xed, 0x7b, 0xb8, 0xf7, 0xab, 0xe7, 0x70, 0xef, 0x9f, 0x34, 0x87, 0xcf,
-  0x7e, 0xdd, 0x1c, 0x3e, 0xfb, 0xcd, 0xe6, 0xd0, 0x55, 0xaf, 0xa2, 0x87,
-  0xa8, 0x65, 0xaf, 0xd8, 0x8f, 0x98, 0x1a, 0xa3, 0x07, 0x14, 0x3e, 0x1a,
-  0x51, 0x18, 0x8b, 0xac, 0x4b, 0xf3, 0x20, 0x25, 0xea, 0x64, 0xa8, 0xe3,
-  0xd3, 0x19, 0xb0, 0x63, 0xfb, 0x01, 0x2f, 0x76, 0x95, 0x37, 0x2e, 0x17,
-  0xdf, 0x1c, 0x38, 0xb2, 0x70, 0x8d, 0x70, 0xfc, 0xaa, 0x24, 0xcd, 0x81,
-  0x7c, 0x2f, 0x52, 0xe4, 0x15, 0x9f, 0xfc, 0x05, 0x59, 0xbc, 0xce, 0xe3,
-  0x10, 0x75, 0x13, 0x5d, 0xb4, 0x62, 0x02, 0xe1, 0xfc, 0xdd, 0x87, 0x7e,
-  0xa2, 0x95, 0x6e, 0x22, 0x6f, 0x02, 0xd9, 0x1f, 0xca, 0x29, 0x67, 0x9d,
-  0x73, 0xd7, 0xc3, 0xee, 0x36, 0xb2, 0xa7, 0x65, 0x03, 0x7a, 0xf6, 0xbe,
-  0x08, 0x08, 0xe7, 0xda, 0xe9, 0xf8, 0x76, 0x3c, 0x3f, 0x4a, 0x50, 0x93,
-  0x6e, 0xb9, 0x63, 0x47, 0xfd, 0x3a, 0x8f, 0xb8, 0x75, 0x1c, 0x29, 0xcc,
-  0x72, 0xc7, 0x4e, 0xdc, 0x71, 0xd3, 0xfa, 0x57, 0x2b, 0x93, 0xa9, 0xa9,
-  0xfa, 0x4a, 0xa4, 0x1b, 0xa7, 0x4e, 0x72, 0xaa, 0xee, 0xb8, 0x9c, 0x41,
-  0x01, 0x32, 0x0b, 0x7a, 0x21, 0x96, 0x55, 0xff, 0x48, 0xde, 0x75, 0xc9,
-  0x4e, 0x1c, 0x40, 0x59, 0x5a, 0x31, 0xc9, 0xa6, 0x85, 0x69, 0x5e, 0x0e,
-  0x8f, 0xb2, 0xe6, 0xf8, 0xd4, 0xa2, 0xd0, 0x8f, 0x48, 0xbd, 0x0a, 0x64,
-  0xb8, 0x20, 0x3b, 0x35, 0x58, 0xd6, 0x71, 0xc6, 0x99, 0x8b, 0xf9, 0x63,
-  0xa2, 0xf9, 0x65, 0x7b, 0xbc, 0xe9, 0x38, 0xeb, 0xa7, 0xf5, 0x38, 0xcf,
-  0xe3, 0xba, 0x25, 0xfb, 0x61, 0x40, 0x0d, 0x92, 0x5c, 0x2e, 0xc8, 0x3d,
-  0x8e, 0x57, 0x4c, 0x5f, 0x16, 0x4c, 0x75, 0xc5, 0xe4, 0xc5, 0x92, 0xd6,
-  0x47, 0x9d, 0x2e, 0x17, 0xcd, 0x55, 0xa9, 0x26, 0x66, 0x2f, 0x50, 0x55,
-  0xb5, 0x6a, 0xa8, 0x59, 0x9e, 0x71, 0x95, 0xcf, 0x41, 0x05, 0xe1, 0xb1,
-  0x00, 0xf7, 0x6c, 0x99, 0x1c, 0x28, 0x7f, 0x92, 0xde, 0xc3, 0x75, 0x63,
-  0xc2, 0xc2, 0xd3, 0xeb, 0xfd, 0x75, 0x52, 0xb4, 0x2d, 0x75, 0xaa, 0x79,
-  0x97, 0x68, 0x7b, 0x38, 0xb3, 0x9f, 0x5f, 0x45, 0x19, 0xb2, 0xe5, 0x5e,
-  0x30, 0x35, 0xac, 0xcd, 0x16, 0x7a, 0x50, 0x62, 0x18, 0xb0, 0xc3, 0xf1,
-  0xd4, 0xf4, 0xa0, 0xec, 0x4c, 0x33, 0xe2, 0x02, 0xb2, 0xd4, 0x5f, 0xd7,
-  0xd9, 0x3d, 0x23, 0x8b, 0x43, 0xbd, 0x89, 0x05, 0xcd, 0xb5, 0xa2, 0x6e,
-  0x0f, 0x86, 0x87, 0xc7, 0xc7, 0x2d, 0x14, 0x32, 0x4d, 0x1b, 0x17, 0xdd,
-  0xe5, 0x6a, 0x70, 0x35, 0xb1, 0x6c, 0x90, 0x0e, 0xc6, 0xdd, 0x8d, 0x11,
-  0xc3, 0xd9, 0x02, 0xb5, 0x59, 0x5a, 0xe7, 0xca, 0xdd, 0x9e, 0x8a, 0xa6,
-  0x53, 0x98, 0x6e, 0xe6, 0x94, 0x1c, 0x7b, 0xbd, 0x30, 0x5a, 0xfe, 0xef,
-  0x9f, 0x05, 0x18, 0x47, 0x53, 0xc9, 0x6c, 0xf1, 0xb9, 0xf2, 0xdd, 0x7f,
-  0xe1, 0x5e, 0x8b, 0xb0, 0xb0, 0x9d, 0x55, 0xc2, 0xd3, 0x0d, 0xea, 0x00,
-  0x92, 0xb4, 0xc2, 0xa4, 0x46, 0xd5, 0xa4, 0x88, 0x8c, 0x80, 0x1b, 0xe7,
-  0x2a, 0xd6, 0x70, 0x2a, 0x82, 0x31, 0xca, 0xba, 0x3b, 0xba, 0x96, 0x00,
-  0x3b, 0x76, 0xea, 0x95, 0x5e, 0xad, 0xee, 0xe5, 0x85, 0x2f, 0xac, 0x3c,
-  0x01, 0x29, 0xef, 0x7f, 0x7e, 0xd2, 0xdf, 0xfd, 0x6e, 0xfb, 0xb3, 0x61,
-  0x67, 0x0f, 0xc0, 0x7f, 0xcf, 0x13, 0xc0, 0x48, 0xbe, 0x64, 0xfd, 0x8f,
-  0xeb, 0x49, 0x9c, 0xa7, 0xef, 0x09, 0xed, 0xb4, 0xf2, 0xc7, 0xfe, 0xb9,
-  0x3b, 0x2d, 0x92, 0xd0, 0xe6, 0x09, 0x31, 0x7f, 0x4d, 0x17, 0x45, 0x7e,
-  0x0f, 0x44, 0x95, 0xb9, 0xe5, 0x5f, 0x13, 0x4b, 0xe8, 0x12, 0x36, 0xbc,
-  0x43, 0xad, 0x83, 0x6a, 0xab, 0xdf, 0x9a, 0x0f, 0x7f, 0x34, 0x2f, 0x1b,
-  0x9b, 0x72, 0x46, 0xee, 0x75, 0x6e, 0xa3, 0xe7, 0x53, 0x12, 0x41, 0xac,
-  0x47, 0xdc, 0xf3, 0x45, 0xd6, 0x10, 0xfe, 0x61, 0xa5, 0xaf, 0xa5, 0xed,
-  0xbf, 0xba, 0x00, 0xe5, 0xf5, 0x9c, 0x50, 0x3b, 0x2b, 0x4a, 0xaa, 0x60,
-  0x32, 0x1c, 0x44, 0xa6, 0x6d, 0xd0, 0x7a, 0x3c, 0x81, 0xb2, 0x75, 0x6c,
-  0x34, 0x88, 0x28, 0xa4, 0xe3, 0x91, 0x04, 0x4b, 0x16, 0xe9, 0x98, 0x56,
-  0xf3, 0xae, 0xa5, 0x0c, 0x36, 0x4f, 0xe7, 0x50, 0x14, 0x32, 0xf4, 0x95,
-  0x44, 0x85, 0x4c, 0x2e, 0xe9, 0x6a, 0x50, 0xb4, 0x28, 0x69, 0x91, 0x4e,
-  0x9e, 0x4f, 0x69, 0xf3, 0x6f, 0xab, 0xc3, 0x7d, 0x1a, 0x82, 0x5f, 0xbc,
-  0xb2, 0x4c, 0x2c, 0xeb, 0x08, 0x6a, 0x09, 0xa7, 0x1b, 0xfd, 0x1b, 0xa9,
-  0xa0, 0xaa, 0x44, 0xb4, 0x47, 0xc1, 0xc4, 0xc5, 0xd1, 0x7a, 0x93, 0xec,
-  0x11, 0xbd, 0xa6, 0xf2, 0x37, 0xda, 0xaf, 0x8a, 0x37, 0x62, 0xbb, 0xc0,
-  0x91, 0x3a, 0x59, 0x3d, 0xf6, 0xc6, 0x48, 0x09, 0x3c, 0x5b, 0x27, 0xfe,
-  0xc2, 0x56, 0xb0, 0x99, 0x11, 0xd0, 0x95, 0xb8, 0xfb, 0x28, 0x4c, 0x66,
-  0xcb, 0x6d, 0xf0, 0xc2, 0x7a, 0x55, 0x1b, 0x03, 0x67, 0x3d, 0xe5, 0xd7,
-  0xb6, 0x80, 0x4b, 0x0b, 0xe6, 0xe8, 0x57, 0xac, 0xe4, 0xa6, 0x51, 0x9f,
-  0xb5, 0xa4, 0x21, 0xb5, 0x48, 0xbc, 0x7b, 0xae, 0x9e, 0x61, 0xc0, 0x20,
-  0xb7, 0xec, 0x34, 0xe1, 0xcc, 0xb7, 0x03, 0x48, 0x24, 0x3a, 0x36, 0x53,
-  0x25, 0xa0, 0x20, 0xe7, 0xcd, 0x96, 0x2a, 0x97, 0xe6, 0x88, 0xe7, 0x85,
-  0xbf, 0xdf, 0xd3, 0xa8, 0xbb, 0x8e, 0x85, 0x52, 0x72, 0x20, 0xac, 0x4e,
-  0xd9, 0xf4, 0xa1, 0xd7, 0xfd, 0xc6, 0xc0, 0x48, 0x99, 0xcd, 0xd4, 0xd1,
-  0x5c, 0x30, 0x5a, 0x6d, 0x2b, 0xa0, 0x01, 0x94, 0x0a, 0xf5, 0x1e, 0xb3,
-  0xba, 0xcf, 0x03, 0x49, 0x5d, 0xed, 0x74, 0x0d, 0xc0, 0x06, 0xb8, 0xc2,
-  0xc3, 0x93, 0x88, 0xac, 0x15, 0x98, 0x0f, 0x04, 0xb0, 0x02, 0x03, 0x08,
-  0x24, 0xae, 0x65, 0xbd, 0x16, 0x89, 0x26, 0x44, 0x1f, 0xd2, 0x26, 0xdc,
-  0x4a, 0xa3, 0x2c, 0x6c, 0x8e, 0x17, 0x31, 0x32, 0xa9, 0x7f, 0xb1, 0x75,
-  0x02, 0x14, 0x28, 0x4b, 0x52, 0x2d, 0x3c, 0xd2, 0x96, 0x1b, 0x9a, 0xe8,
-  0x54, 0x65, 0xdf, 0xaf, 0x22, 0x43, 0x1c, 0x24, 0x47, 0xf4, 0x74, 0xd8,
-  0xd0, 0x9f, 0xd0, 0x02, 0x51, 0x84, 0x79, 0xbc, 0xef, 0x5c, 0x46, 0x29,
-  0xdc, 0x59, 0xb2, 0xf7, 0x12, 0x2d, 0x4d, 0xc7, 0x59, 0x1f, 0x03, 0x21,
-  0x36, 0x25, 0xc5, 0x5d, 0xb5, 0xcd, 0x64, 0xfd, 0x6a, 0x5a, 0x8e, 0x46,
-  0x66, 0xe4, 0xeb, 0xaa, 0xa7, 0x98, 0x6f, 0x07, 0x2e, 0x21, 0xbf, 0x27,
-  0x69, 0x75, 0x05, 0x77, 0x5b, 0x0f, 0x96, 0x03, 0x9b, 0x44, 0xd4, 0x0b,
-  0x57, 0x3a, 0x41, 0x3f, 0xaf, 0x55, 0x3c, 0x23, 0x37, 0x0d, 0xbb, 0x3f,
-  0xed, 0x16, 0xa4, 0xb1, 0x79, 0x98, 0x23, 0xc1, 0xf6, 0xd3, 0x4f, 0xb5,
-  0x7b, 0x09, 0x57, 0x99, 0x5c, 0x5e, 0xb6, 0x55, 0x44, 0x18, 0x04, 0x97,
-  0x30, 0x4f, 0xe7, 0x61, 0x45, 0x48, 0x9e, 0x82, 0xf6, 0x80, 0xd6, 0xff,
-  0x93, 0xfe, 0xd8, 0xed, 0xd1, 0x7f, 0xf7, 0xfe, 0x6b, 0x3d, 0x91, 0x02,
-  0xf6, 0x77, 0x77, 0x77, 0x03, 0x61, 0x38, 0x1c, 0x98, 0x25, 0x5b, 0x0b,
-  0xc1, 0xb7, 0x94, 0x48, 0xbe, 0xe4, 0x03, 0x17, 0xc9, 0x7a, 0x3e, 0xbb,
-  0xfa, 0x71, 0xb7, 0xbf, 0xbb, 0xb3, 0xb3, 0xf3, 0xf3, 0x60, 0x4e, 0xf3,
-  0x7b, 0x89, 0x66, 0xcd, 0x7f, 0xfd, 0x66, 0xb7, 0xb9, 0x27, 0xdb, 0x51,
-  0x6e, 0x0e, 0xfe, 0x9d, 0x2b, 0x79, 0x0a, 0xb6, 0x3c, 0xde, 0xc9, 0xfb,
-  0x9e, 0x90, 0x61, 0xcf, 0x66, 0x2a, 0xec, 0xb2, 0xd1, 0x54, 0x16, 0x26,
-  0x4b, 0x26, 0x4f, 0xe0, 0x8b, 0x67, 0x7b, 0x7b, 0x09, 0xab, 0x1c, 0x8c,
-  0x10, 0x65, 0x07, 0x3b, 0xd1, 0xdc, 0x4a, 0x51, 0x19, 0xbe, 0xcd, 0xa8,
-  0x34, 0x30, 0x15, 0x21, 0x65, 0x4b, 0xb9, 0x9b, 0x68, 0x03, 0xd2, 0x64,
-  0xae, 0x45, 0x6f, 0x2e, 0x4a, 0x73, 0x95, 0x97, 0x93, 0x07, 0xd7, 0xaa,
-  0x16, 0x99, 0x25, 0x4e, 0x78, 0x2e, 0x06, 0x96, 0x88, 0xbb, 0xb1, 0x8e,
-  0x56, 0x5a, 0xb5, 0x68, 0x4f, 0xdc, 0x73, 0x20, 0x32, 0x29, 0x68, 0x7e,
-  0xc1, 0x3e, 0x0c, 0x2a, 0x82, 0x45, 0x25, 0x14, 0xa3, 0x70, 0xbe, 0xdf,
-  0xa5, 0xad, 0x72, 0xe2, 0x34, 0xe3, 0xaf, 0xcd, 0x7f, 0x96, 0x55, 0x23,
-  0x23, 0xe5, 0xd2, 0xd6, 0xe5, 0xb8, 0xcc, 0x9a, 0xf1, 0x75, 0xc0, 0xce,
-  0x45, 0x32, 0xdc, 0xf4, 0xf6, 0xda, 0x0c, 0xe8, 0xc1, 0xd6, 0xd0, 0x89,
-  0x11, 0x7e, 0x7b, 0xd0, 0x78, 0xd3, 0x24, 0x91, 0xee, 0xa1, 0x7e, 0x16,
-  0xd7, 0x00, 0x5a, 0x51, 0x55, 0x3c, 0x73, 0x34, 0xd9, 0xf8, 0x5e, 0x5e,
-  0x2b, 0x72, 0x7f, 0x7c, 0x9d, 0xcd, 0x44, 0x66, 0x6e, 0x32, 0xfe, 0xdd,
-  0x9c, 0x4a, 0xd9, 0x83, 0xeb, 0x49, 0x78, 0xa9, 0xad, 0x5f, 0xea, 0xaf,
-  0xcc, 0x48, 0xb6, 0x04, 0xfb, 0x6e, 0x2f, 0x3a, 0x21, 0x21, 0xbd, 0x5a,
-  0x90, 0xe9, 0x38, 0x4a, 0xe5, 0x46, 0x51, 0xc2, 0xbb, 0x41, 0x1c, 0x5a,
-  0x60, 0x84, 0x62, 0x56, 0xe1, 0x1a, 0xab, 0x17, 0xa3, 0xbe, 0xe8, 0x3e,
-  0xe8, 0x11, 0x02, 0x1e, 0x74, 0x5a, 0xdf, 0x1e, 0x1f, 0x5e, 0x70, 0xe1,
-  0xb1, 0x1e, 0xe3, 0xd5, 0xcc, 0x1f, 0x04, 0x3e, 0x0f, 0x59, 0x62, 0x09,
-  0xc4, 0x86, 0xd2, 0x64, 0xb4, 0x59, 0xb9, 0x7b, 0x2c, 0x21, 0x6c, 0x66,
-  0x82, 0xaf, 0xfc, 0xf5, 0x3c, 0xe6, 0xc1, 0x08, 0x69, 0x6b, 0x4b, 0x4f,
-  0xb4, 0xd1, 0xf2, 0xe7, 0x2f, 0x06, 0x3b, 0x3c, 0x44, 0x9a, 0x43, 0x09,
-  0xea, 0x08, 0x5c, 0x12, 0x3e, 0x9e, 0x5a, 0x28, 0x7b, 0xd2, 0x25, 0x74,
-  0x63, 0xda, 0x95, 0x5e, 0xc2, 0x0c, 0x55, 0x9c, 0xcd, 0xa4, 0xbf, 0xf5,
-  0x42, 0xf8, 0x8f, 0x44, 0x04, 0xf5, 0xf6, 0xe2, 0x12, 0x2b, 0xad, 0xf2,
-  0xd0, 0x52, 0xb9, 0xf8, 0xa2, 0x54, 0xa4, 0x33, 0x0b, 0xe1, 0x18, 0x62,
-  0x55, 0xf6, 0x84, 0x00, 0x37, 0x7a, 0x8e, 0xf2, 0xb5, 0xa4, 0x5b, 0x40,
-  0x6e, 0x2c, 0xc1, 0xfe, 0x81, 0x98, 0xdf, 0x31, 0x5b, 0xc7, 0x34, 0x94,
-  0x80, 0x4f, 0xb7, 0xff, 0x95, 0x14, 0x57, 0x61, 0x4d, 0x39, 0x5a, 0x1f,
-  0x9d, 0xd6, 0x72, 0xcb, 0x82, 0x2f, 0xc4, 0x7c, 0xb5, 0x7a, 0xe7, 0x00,
-  0x9e, 0x46, 0x5e, 0xfd, 0xa6, 0x53, 0x8a, 0x27, 0x00, 0xf9, 0x5d, 0x92,
-  0xcb, 0xcf, 0x83, 0xd8, 0xa6, 0x18, 0x20, 0xb6, 0x00, 0x6c, 0x3d, 0x76,
-  0x4f, 0xad, 0xff, 0x99, 0xfc, 0xd0, 0x6f, 0x0e, 0xd6, 0x07, 0xed, 0x49,
-  0x8d, 0xd1, 0xc6, 0xd6, 0x2c, 0xdf, 0xda, 0xe6, 0x8c, 0xc8, 0x34, 0x92,
-  0xfb, 0xd9, 0x7d, 0x23, 0x85, 0x6d, 0x51, 0x70, 0xa4, 0x78, 0xb6, 0x97,
-  0xd4, 0x0f, 0x46, 0x87, 0x98, 0xf9, 0x93, 0xd0, 0xad, 0x30, 0x13, 0xf5,
-  0xbe, 0xb7, 0x68, 0xb2, 0x59, 0x74, 0x7d, 0xa4, 0x57, 0x0e, 0xf0, 0x8a,
-  0xd0, 0xea, 0x6a, 0x0c, 0xf9, 0x09, 0x65, 0x8b, 0x4a, 0x15, 0x62, 0xa3,
-  0x69, 0x5a, 0xdc, 0xd8, 0x32, 0x2b, 0xdc, 0x50, 0x8f, 0x6a, 0x01, 0x30,
-  0x96, 0xdb, 0xfd, 0x50, 0xa6, 0x87, 0x2f, 0xc6, 0x78, 0x49, 0xe7, 0x59,
-  0x5a, 0x01, 0xe6, 0xfb, 0x0b, 0x8a, 0x22, 0x45, 0xe7, 0xd6, 0x15, 0x49,
-  0xfa, 0xfd, 0xc2, 0x61, 0x0b, 0x9d, 0x75, 0x23, 0xa1, 0xcd, 0x7f, 0xf7,
-  0x35, 0xc2, 0xb0, 0xaa, 0x72, 0x24, 0x1e, 0xb7, 0xc5, 0x6c, 0x6c, 0x4c,
-  0xc2, 0xaf, 0x4e, 0xc0, 0xda, 0x9c, 0x8b, 0x83, 0xc4, 0xf0, 0xd0, 0x83,
-  0xe4, 0xd4, 0x19, 0x8f, 0x45, 0x0f, 0xfc, 0x3d, 0x4d, 0x35, 0x16, 0xd3,
-  0x11, 0x7f, 0xef, 0x6b, 0xa9, 0xb1, 0x68, 0xb5, 0x1d, 0x68, 0x34, 0x28,
-  0x5d, 0xf6, 0xe0, 0xf4, 0x3c, 0xef, 0x3a, 0x63, 0x22, 0x7c, 0x27, 0x7b,
-  0x8d, 0x14, 0x21, 0xc6, 0x78, 0x64, 0x2e, 0x07, 0xd0, 0x20, 0x1e, 0x44,
-  0x94, 0xd8, 0x33, 0x3e, 0xde, 0x5a, 0x62, 0x6f, 0x53, 0x73, 0xff, 0x2d,
-  0xe6, 0x1e, 0x3b, 0xaa, 0xd0, 0x70, 0x19, 0xf1, 0x55, 0x16, 0xbd, 0x20,
-  0xbd, 0x17, 0xcc, 0x63, 0xe2, 0x62, 0xa2, 0xa8, 0xf4, 0x4c, 0xca, 0xb3,
-  0xa8, 0xe5, 0x82, 0xcb, 0x6a, 0x5a, 0xda, 0xca, 0x78, 0xee, 0xe3, 0x8f,
-  0x54, 0x91, 0x60, 0x0e, 0x52, 0x5d, 0x0c, 0xb3, 0xed, 0x7a, 0x0c, 0x9b,
-  0x8d, 0xd3, 0x8a, 0xf1, 0xd1, 0xff, 0xd6, 0x58, 0xeb, 0x59, 0x55, 0xd6,
-  0xc9, 0x77, 0x2f, 0x34, 0x54, 0x2c, 0x25, 0x69, 0xe4, 0x6e, 0xb2, 0x7a,
-  0x39, 0xcf, 0x35, 0x92, 0xe7, 0xa3, 0x6e, 0x13, 0xcd, 0x2a, 0xd4, 0xd7,
-  0xfd, 0x4b, 0xaa, 0x3b, 0x12, 0xb2, 0xd7, 0x8d, 0xbc, 0x44, 0x31, 0xb0,
-  0xe0, 0xfa, 0x6c, 0x57, 0x90, 0x30, 0x17, 0x2e, 0x29, 0x3a, 0xe4, 0xdf,
-  0x31, 0x2a, 0xfc, 0x88, 0xca, 0x93, 0x42, 0x5d, 0xb0, 0x1d, 0x4f, 0x2e,
-  0x72, 0x72, 0x01, 0xb8, 0x4a, 0x14, 0x41, 0xf0, 0x99, 0x70, 0x01, 0x12,
-  0xfd, 0x74, 0x94, 0x57, 0x9d, 0x08, 0x1d, 0xe9, 0x15, 0xf5, 0x35, 0x5d,
-  0xcd, 0x74, 0x63, 0xc0, 0xf0, 0x5b, 0x5b, 0x52, 0x90, 0x00, 0xd6, 0xca,
-  0x87, 0x8b, 0x93, 0xf7, 0x12, 0xfc, 0x75, 0xeb, 0x13, 0x54, 0xee, 0x94,
-  0xad, 0x99, 0xc6, 0x88, 0x35, 0xbd, 0xc9, 0x50, 0xc4, 0x27, 0xa7, 0x09,
-  0xd1, 0xb4, 0xf5, 0x04, 0x05, 0x5e, 0x09, 0x96, 0x50, 0x4d, 0x34, 0x99,
-  0xd4, 0x88, 0x77, 0x93, 0xe0, 0x16, 0x35, 0xfc, 0x04, 0x30, 0x9f, 0x8d,
-  0xa0, 0xa1, 0x92, 0xea, 0x8e, 0x03, 0x3c, 0xdc, 0xd7, 0x65, 0xe7, 0xc8,
-  0xf8, 0x0b, 0x46, 0xdb, 0x90, 0x39, 0xee, 0x92, 0xb7, 0xe5, 0x5d, 0xd1,
-  0x3f, 0x21, 0x50, 0x78, 0x72, 0x52, 0x5e, 0x99, 0xa9, 0xfa, 0x10, 0xb5,
-  0xe4, 0x3f, 0x9e, 0x7d, 0x48, 0x36, 0x49, 0x12, 0x27, 0x67, 0x36, 0x31,
-  0x9d, 0x9e, 0xdc, 0x12, 0xa5, 0xd3, 0x88, 0xc3, 0x77, 0xae, 0x37, 0xbd,
-  0xe4, 0xe8, 0x87, 0x83, 0xf7, 0x67, 0x27, 0x47, 0x3f, 0x71, 0x94, 0x36,
-  0x18, 0x0e, 0xfd, 0xf8, 0x4b, 0x4f, 0x0b, 0x87, 0xd7, 0x9e, 0xa2, 0x4f,
-  0xa6, 0x1f, 0x0f, 0xcb, 0x65, 0x01, 0x1f, 0x1f, 0xdd, 0x82, 0xc3, 0xe1,
-  0xd9, 0x71, 0x5f, 0x0a, 0x30, 0x0a, 0x75, 0x7c, 0x5e, 0x90, 0xca, 0x8c,
-  0x53, 0x2c, 0xe4, 0x84, 0xdf, 0x86, 0x01, 0x0a, 0x3d, 0x11, 0xbd, 0xe4,
-  0x83, 0xf2, 0x89, 0xf5, 0xb0, 0xe2, 0x74, 0xc7, 0xbf, 0xcd, 0xaf, 0x10,
-  0x64, 0x68, 0xef, 0x9f, 0x46, 0xab, 0x3a, 0xd2, 0x26, 0x08, 0x08, 0x1b,
-  0xc8, 0x13, 0x69, 0x03, 0x80, 0x75, 0x36, 0x65, 0x97, 0xd6, 0x52, 0x39,
-  0x0a, 0x38, 0x09, 0x96, 0x91, 0xd0, 0x6c, 0x41, 0xf8, 0x44, 0xd0, 0x6d,
-  0x23, 0xad, 0x49, 0xfc, 0x20, 0x7a, 0x2a, 0xef, 0x11, 0x96, 0x1d, 0x72,
-  0xc9, 0x58, 0xe1, 0xb0, 0x6f, 0xec, 0xf4, 0x45, 0xb2, 0xbf, 0xfe, 0x3b,
-  0x5e, 0x24, 0xbe, 0xf7, 0x2f, 0x42, 0x71, 0x2b, 0x51, 0x14, 0x75, 0x0f,
-  0x72, 0xf2, 0x1c, 0x2b, 0xb7, 0xea, 0x81, 0x61, 0xff, 0xa7, 0x39, 0xea,
-  0x82, 0x90, 0x98, 0x64, 0xa3, 0xc5, 0xd5, 0x55, 0x24, 0xc7, 0xae, 0x80,
-  0x5c, 0xca, 0x18, 0x72, 0x6d, 0xd4, 0x16, 0x62, 0xe6, 0x14, 0xbf, 0xae,
-  0x19, 0xc3, 0x3a, 0xe2, 0x55, 0xa2, 0x52, 0x97, 0x13, 0xa3, 0xbf, 0x1c,
-  0xb0, 0x57, 0x1a, 0xb5, 0x2d, 0xc3, 0xe6, 0x30, 0x57, 0x1b, 0x5f, 0x6c,
-  0x48, 0xa0, 0x6d, 0x5d, 0x6e, 0x64, 0xd2, 0x68, 0xd6, 0x59, 0xa5, 0xa1,
-  0xf2, 0x58, 0xd4, 0x7b, 0x73, 0xe2, 0x37, 0x5e, 0x6f, 0x28, 0x09, 0xa4,
-  0x3e, 0xd9, 0x15, 0x38, 0x78, 0x4f, 0xc2, 0x3e, 0x5a, 0xb8, 0x5c, 0x56,
-  0x5f, 0xf0, 0x2f, 0xd7, 0xf9, 0x64, 0x92, 0x89, 0xa7, 0x84, 0xb8, 0xbc,
-  0x99, 0x08, 0x82, 0x03, 0x4b, 0xdd, 0x8b, 0xa9, 0xd5, 0x73, 0xe9, 0xeb,
-  0xbf, 0x69, 0x5f, 0xbd, 0x42, 0x17, 0xe4, 0xa6, 0x76, 0x0c, 0xd4, 0x23,
-  0xae, 0x95, 0x10, 0x5b, 0x6e, 0xda, 0xa5, 0x88, 0x85, 0xc0, 0x5c, 0x82,
-  0x6e, 0xa4, 0xd6, 0xa2, 0xc8, 0x69, 0x56, 0x68, 0xcd, 0x72, 0xe6, 0xa0,
-  0x9e, 0x16, 0xf1, 0x8e, 0x58, 0x47, 0xe8, 0xd2, 0xe2, 0x15, 0xd4, 0xda,
-  0x8c, 0x1b, 0x15, 0x91, 0xae, 0x72, 0xed, 0x23, 0x62, 0xeb, 0x5e, 0x76,
-  0x52, 0xd5, 0xdd, 0xe7, 0x76, 0x1e, 0x67, 0x78, 0x28, 0x8e, 0x8b, 0x6c,
-  0x31, 0x3c, 0x98, 0x15, 0x70, 0xfc, 0x8a, 0xb6, 0xdf, 0x0b, 0x53, 0x0c,
-  0x99, 0x10, 0x5a, 0xf9, 0x20, 0x6d, 0x38, 0xa2, 0x1d, 0x3f, 0x53, 0x18,
-  0x56, 0x94, 0x18, 0xce, 0x43, 0x40, 0xb7, 0xb9, 0xb5, 0xc5, 0xbd, 0x09,
-  0xc6, 0xbc, 0xe5, 0x98, 0x6a, 0x4c, 0x93, 0x9b, 0xa7, 0x41, 0x12, 0x09,
-  0x81, 0xb2, 0x8e, 0x63, 0xfb, 0x17, 0x47, 0xf5, 0x44, 0x5d, 0xe5, 0xdf,
-  0xc9, 0xa9, 0x8a, 0x80, 0xc1, 0xde, 0x4a, 0x30, 0xa5, 0x55, 0xa9, 0x93,
-  0x11, 0xcd, 0xec, 0x47, 0x12, 0xb5, 0x55, 0x63, 0xb6, 0x1a, 0x3d, 0xce,
-  0xe1, 0xf1, 0xad, 0x07, 0xb1, 0xa2, 0x53, 0xa2, 0xba, 0x60, 0xd3, 0xe9,
-  0xc5, 0x2e, 0xa5, 0x95, 0x29, 0xc2, 0xa2, 0x4d, 0x90, 0x62, 0x8a, 0xf3,
-  0xa0, 0x6d, 0x47, 0xc2, 0x6d, 0xb8, 0x3d, 0x9e, 0xd9, 0x92, 0x71, 0xe6,
-  0xc9, 0x2a, 0xad, 0xb8, 0x8a, 0x4a, 0x71, 0xa3, 0x98, 0x17, 0xae, 0xfd,
-  0x9a, 0x8d, 0x17, 0x4d, 0x1b, 0xa8, 0xeb, 0xf5, 0x49, 0xb2, 0x6d, 0xd1,
-  0xa5, 0x4d, 0x1c, 0x04, 0xb1, 0x50, 0xd6, 0xcf, 0x34, 0x55, 0x72, 0x7f,
-  0x7d, 0x4b, 0x22, 0x7b, 0x1c, 0xf5, 0xb1, 0x39, 0x94, 0xb1, 0x98, 0x9d,
-  0x76, 0xb9, 0xca, 0xd8, 0xc1, 0xe6, 0x02, 0xd8, 0xd1, 0xcf, 0x73, 0xd9,
-  0xbb, 0xc8, 0xd7, 0xdf, 0xb1, 0x37, 0xc6, 0xfb, 0xb8, 0xe5, 0xb1, 0x17,
-  0x47, 0x4d, 0x1d, 0x1c, 0xe5, 0xe0, 0xcb, 0xa8, 0x22, 0x63, 0x04, 0x94,
-  0xad, 0x38, 0xa4, 0xaf, 0xea, 0xe4, 0x07, 0x0e, 0xb2, 0xe3, 0xb3, 0xdb,
-  0x97, 0xe2, 0xdf, 0x24, 0x7d, 0x83, 0x6e, 0x3c, 0xfc, 0xc8, 0x4a, 0xfc,
-  0x60, 0x14, 0x37, 0xd5, 0xe8, 0xb9, 0xf9, 0xe3, 0x5b, 0xfa, 0xe3, 0x92,
-  0x8d, 0x44, 0x61, 0x3a, 0x60, 0xcf, 0x5c, 0xb8, 0xb5, 0x29, 0x4f, 0x25,
-  0xf1, 0x93, 0x5d, 0x80, 0xc3, 0x24, 0x38, 0x35, 0xd1, 0x22, 0xb8, 0x0c,
-  0x55, 0xe8, 0xbf, 0xda, 0x4c, 0x8f, 0xc9, 0x01, 0xc2, 0xc0, 0x95, 0xfc,
-  0x0f, 0x69, 0xfc, 0x9c, 0x26, 0xdf, 0x83, 0x17, 0x62, 0xc8, 0x15, 0x3f,
-  0xca, 0x18, 0xca, 0xdd, 0x4c, 0xd5, 0xdf, 0x29, 0x36, 0xa3, 0x65, 0x0a,
-  0x13, 0x14, 0xcd, 0x9a, 0x59, 0x58, 0x23, 0x2c, 0x23, 0x1b, 0xe4, 0x67,
-  0x87, 0x25, 0x1d, 0x34, 0x96, 0x67, 0xf9, 0x92, 0x2e, 0x2c, 0x1f, 0x32,
-  0x6e, 0x77, 0xf9, 0xa3, 0x73, 0xb5, 0xaf, 0x9c, 0xaa, 0xb7, 0x74, 0x45,
-  0xa9, 0xa1, 0x27, 0xec, 0xe3, 0xa4, 0xb0, 0xe9, 0x52, 0xbb, 0x94, 0x1e,
-  0x7e, 0xd4, 0x4a, 0x07, 0x56, 0x4b, 0x96, 0xf4, 0x73, 0xc6, 0x64, 0xef,
-  0x44, 0x24, 0x09, 0xb1, 0x70, 0x63, 0x23, 0x98, 0xb3, 0x6c, 0x46, 0xe1,
-  0x10, 0x7b, 0x33, 0x72, 0x6e, 0x35, 0x69, 0x56, 0xf4, 0xb9, 0x7e, 0xbc,
-  0xb9, 0x09, 0x69, 0x6f, 0x74, 0xcb, 0x32, 0xda, 0x26, 0xa8, 0x16, 0x7e,
-  0x50, 0x3f, 0x14, 0xe3, 0xeb, 0xb7, 0x1f, 0x86, 0xf1, 0xd7, 0xbb, 0x83,
-  0xc3, 0xd3, 0x46, 0x0b, 0xa1, 0xbd, 0xc0, 0x18, 0x38, 0xe1, 0x15, 0x41,
-  0x19, 0x4b, 0xef, 0xb7, 0xf1, 0xe6, 0xda, 0xaf, 0x58, 0xe7, 0x10, 0x69,
-  0x16, 0x2c, 0xc5, 0x45, 0xf1, 0x84, 0x27, 0xbe, 0x9f, 0xd2, 0x59, 0x88,
-  0xd6, 0x67, 0xb0, 0x67, 0x9a, 0x42, 0x08, 0x28, 0x64, 0x85, 0x16, 0x2b,
-  0x0f, 0x2f, 0xd4, 0xdd, 0xd7, 0xe0, 0x90, 0xd5, 0x3f, 0x7e, 0xc9, 0x32,
-  0x9f, 0xa4, 0xd5, 0x55, 0x16, 0x09, 0x38, 0x05, 0x33, 0x64, 0xdd, 0xf6,
-  0x2e, 0x20, 0x68, 0xb6, 0xea, 0x94, 0x5e, 0xe7, 0x5d, 0xda, 0x93, 0xcd,
-  0x8a, 0x1f, 0x55, 0xcb, 0x86, 0x64, 0xe6, 0x64, 0xef, 0xeb, 0xaf, 0xc2,
-  0xdb, 0xf3, 0xed, 0x87, 0x25, 0x9f, 0xa3, 0xdf, 0xf4, 0x15, 0xf3, 0x2c,
-  0x1a, 0x81, 0xa7, 0xd0, 0x87, 0x73, 0x21, 0x94, 0x6b, 0xf1, 0x0e, 0x28,
-  0x1f, 0xdb, 0x23, 0x52, 0xc2, 0x3c, 0x21, 0x7f, 0xac, 0x7c, 0x50, 0x80,
-  0xae, 0xf1, 0x4f, 0x31, 0x02, 0x76, 0xc8, 0xf9, 0x6a, 0xe7, 0x1c, 0xd9,
-  0x3b, 0x13, 0x45, 0x78, 0x6b, 0xd5, 0x1a, 0xc5, 0x9b, 0x23, 0xf9, 0x16,
-  0xcb, 0x13, 0x26, 0xb1, 0xb0, 0xc7, 0x7f, 0x6c, 0xef, 0x59, 0xc0, 0x92,
-  0x05, 0xae, 0xe3, 0x98, 0x9a, 0x1b, 0x3c, 0x54, 0x10, 0x8a, 0xfc, 0x7e,
-  0x88, 0x18, 0xf3, 0x92, 0xdd, 0x8c, 0x60, 0x34, 0x47, 0xa1, 0x6d, 0xe7,
-  0xa8, 0x9f, 0xaa, 0x89, 0x45, 0x7b, 0x32, 0x64, 0x02, 0x96, 0xc7, 0x36,
-  0x53, 0x1e, 0xc1, 0x58, 0xad, 0x22, 0x43, 0x79, 0x6f, 0x94, 0x24, 0xba,
-  0x5c, 0x9f, 0xbc, 0x49, 0xf5, 0x85, 0x64, 0x73, 0x64, 0xae, 0x6b, 0x2f,
-  0xb3, 0x91, 0x55, 0xec, 0xe7, 0x8c, 0x4d, 0x8e, 0x37, 0xf7, 0xe2, 0xf3,
-  0x17, 0xcf, 0xb7, 0xb6, 0x5c, 0xd9, 0x29, 0x86, 0x4c, 0x8c, 0x48, 0xcd,
-  0x99, 0xe5, 0x24, 0xb9, 0x38, 0xf8, 0x60, 0xa6, 0xf8, 0x1a, 0x82, 0xc1,
-  0x7a, 0x61, 0xe2, 0xcd, 0xd1, 0x3d, 0xa6, 0xef, 0xd1, 0x22, 0x92, 0x09,
-  0x0e, 0x81, 0x6e, 0x0d, 0x61, 0xba, 0x6c, 0x32, 0x7e, 0xc0, 0xba, 0xe1,
-  0x97, 0x4a, 0x05, 0xc4, 0x8d, 0x9c, 0x1f, 0x8a, 0x8b, 0x34, 0xc2, 0x4e,
-  0xd2, 0x9b, 0x36, 0xcc, 0x50, 0x3b, 0xe3, 0x6b, 0x0f, 0x7f, 0x90, 0x88,
-  0x36, 0x97, 0x7a, 0xc5, 0xce, 0xa2, 0xb3, 0xc5, 0x68, 0x6a, 0xee, 0xa0,
-  0x21, 0x95, 0xff, 0xba, 0x4f, 0x4e, 0x72, 0x29, 0x0a, 0xc4, 0x3a, 0xb8,
-  0xc4, 0xbb, 0x97, 0xdd, 0x39, 0x18, 0x77, 0x7b, 0xa3, 0x89, 0x07, 0xd1,
-  0xa5, 0x99, 0x88, 0xd6, 0x96, 0xac, 0xcf, 0xf9, 0x43, 0x54, 0x68, 0xac,
-  0xbf, 0x6c, 0x60, 0xf7, 0x59, 0xed, 0x99, 0x71, 0xfd, 0x3b, 0x52, 0x10,
-  0x91, 0xc0, 0x48, 0x8e, 0xe8, 0xe4, 0x35, 0xab, 0x82, 0xcb, 0x8b, 0x8c,
-  0x68, 0x6e, 0x95, 0xaf, 0x34, 0x42, 0xfd, 0x86, 0xcb, 0x96, 0x8b, 0xdb,
-  0x32, 0x82, 0x6e, 0x9a, 0xa1, 0x00, 0x1e, 0x09, 0xb2, 0x00, 0xb4, 0xac,
-  0x15, 0xce, 0xb9, 0x0d, 0x71, 0x52, 0x88, 0xf3, 0x15, 0xc0, 0xa8, 0x14,
-  0x19, 0xa9, 0xec, 0xae, 0xe1, 0x4c, 0x48, 0xf6, 0x02, 0x9b, 0x45, 0xbe,
-  0x0f, 0x0e, 0xaf, 0xe0, 0x21, 0x0b, 0x63, 0x28, 0x39, 0xff, 0xbc, 0x66,
-  0x6f, 0xd5, 0xad, 0x2f, 0x05, 0x3e, 0x16, 0x4a, 0xe6, 0x08, 0x94, 0x87,
-  0x06, 0xc6, 0xeb, 0x3a, 0xf7, 0x68, 0x1d, 0xd9, 0x2a, 0x4a, 0xe3, 0x04,
-  0xe8, 0x8c, 0xaa, 0xf7, 0x13, 0x71, 0xd8, 0x71, 0xdb, 0x6c, 0x78, 0x87,
-  0x59, 0xe4, 0x08, 0x44, 0x8b, 0x53, 0xfc, 0x4b, 0x85, 0xe1, 0xac, 0x27,
-  0x52, 0x11, 0x0b, 0xe6, 0xbd, 0xc2, 0x3f, 0x6d, 0x9b, 0xd2, 0x64, 0x24,
-  0x81, 0x8b, 0x23, 0xda, 0xa8, 0x47, 0x84, 0x12, 0xbd, 0xeb, 0x5f, 0xf6,
-  0xd7, 0xa3, 0x9a, 0xa7, 0x9d, 0x00, 0x62, 0x8a, 0x82, 0x1d, 0xda, 0xb2,
-  0xcf, 0xf4, 0x13, 0xae, 0x50, 0x1c, 0xc1, 0x66, 0x9b, 0xbc, 0x59, 0x84,
-  0xd2, 0x71, 0xa4, 0x6e, 0x51, 0x24, 0xbc, 0xe1, 0x3e, 0xa5, 0xc5, 0x70,
-  0x59, 0x69, 0xb0, 0xc7, 0x08, 0xab, 0x44, 0x95, 0x0c, 0x6a, 0x7b, 0x98,
-  0x89, 0x27, 0x73, 0x5a, 0xde, 0x05, 0xc8, 0x5b, 0x32, 0x05, 0x6c, 0xef,
-  0xda, 0x19, 0x08, 0x54, 0xb5, 0xf4, 0x3f, 0xf5, 0x97, 0x9f, 0x68, 0xa6,
-  0xfe, 0x4b, 0x67, 0x4a, 0x43, 0xfb, 0x69, 0x90, 0x75, 0x05, 0x23, 0x38,
-  0xf9, 0x23, 0x66, 0xe5, 0xaf, 0x04, 0x49, 0xe1, 0xa9, 0x31, 0x5d, 0x9e,
-  0xa1, 0xc1, 0x3f, 0x0e, 0xac, 0xc2, 0x2b, 0x8d, 0xa4, 0x94, 0x44, 0x02,
-  0xad, 0x7c, 0xf4, 0x10, 0xf8, 0x8e, 0x68, 0x1b, 0xfe, 0x54, 0xf4, 0x40,
-  0x54, 0x65, 0x6c, 0x2f, 0xca, 0xfa, 0xe4, 0x4a, 0x15, 0xbc, 0x8a, 0x3f,
-  0x55, 0x52, 0x84, 0xdd, 0x18, 0x1d, 0xa6, 0xe7, 0x64, 0x91, 0xf1, 0xcf,
-  0x43, 0x0b, 0x80, 0xd0, 0x32, 0xfb, 0x58, 0x8d, 0x3f, 0xf6, 0xeb, 0x87,
-  0xd9, 0xa8, 0x9c, 0xca, 0x5e, 0xe7, 0x9a, 0xde, 0x89, 0xfe, 0x8c, 0x17,
-  0x06, 0x91, 0x8d, 0xbe, 0x97, 0x82, 0xd8, 0x8b, 0x92, 0x3b, 0xb2, 0x91,
-  0x82, 0x92, 0xeb, 0x15, 0x57, 0x39, 0x47, 0x41, 0xcd, 0x3f, 0x26, 0x0c,
-  0xc7, 0x61, 0x75, 0x68, 0x01, 0xaf, 0xd5, 0x9d, 0x73, 0xd5, 0x2e, 0xcd,
-  0xdd, 0x78, 0x64, 0xf3, 0xb8, 0x6a, 0xa6, 0xb1, 0xf4, 0x4d, 0x3a, 0xa4,
-  0xa6, 0xa3, 0x9f, 0x90, 0x2b, 0xc2, 0xaf, 0x1e, 0xf2, 0x8f, 0xfa, 0x17,
-  0xf4, 0x23, 0xc1, 0x1c, 0x68, 0xb2, 0x10, 0xf9, 0x33, 0x34, 0x9d, 0x87,
-  0xaa, 0x77, 0x5c, 0xc6, 0xa5, 0x54, 0x1b, 0xcc, 0x44, 0x60, 0x61, 0x73,
-  0xb8, 0x83, 0x7e, 0xea, 0x51, 0xfa, 0xc4, 0x45, 0x06, 0x8d, 0xc9, 0xbf,
-  0xba, 0x35, 0x58, 0xa8, 0x04, 0x59, 0x98, 0xa5, 0x5a, 0x18, 0x59, 0xca,
-  0x22, 0xbb, 0xec, 0x4a, 0xce, 0xe4, 0xe6, 0xe8, 0xd3, 0xe0, 0xb1, 0xe6,
-  0x18, 0xd5, 0x03, 0x67, 0x88, 0x40, 0x25, 0xc8, 0xf9, 0x94, 0x5f, 0xda,
-  0xeb, 0xb7, 0x29, 0xa7, 0x13, 0xc6, 0x67, 0x50, 0xbb, 0x8f, 0x8c, 0xb5,
-  0x64, 0x24, 0xae, 0x27, 0x2d, 0x22, 0xf1, 0x40, 0xc1, 0x41, 0x51, 0xe8,
-  0x70, 0x75, 0x73, 0x2e, 0xae, 0xa8, 0xd5, 0x8b, 0xc9, 0xcd, 0x85, 0x18,
-  0xf0, 0x82, 0x9d, 0x64, 0x39, 0x40, 0xf9, 0x33, 0xf2, 0x69, 0x46, 0x62,
-  0x47, 0x49, 0x4c, 0xc4, 0x22, 0xec, 0xb4, 0xac, 0xb8, 0xb2, 0x7e, 0x88,
-  0x79, 0x3a, 0x56, 0x37, 0xb7, 0xbc, 0x74, 0xe1, 0x65, 0x33, 0xff, 0x44,
-  0x75, 0xd7, 0x1e, 0x3e, 0xa1, 0xfa, 0xf7, 0x85, 0xe7, 0x73, 0xc7, 0x0f,
-  0x30, 0xb5, 0x5c, 0x60, 0x72, 0x31, 0xa7, 0x76, 0xb0, 0xc5, 0xa7, 0x25,
-  0x9b, 0x33, 0x8f, 0x0d, 0x43, 0x22, 0x7a, 0x02, 0x01, 0xf3, 0x13, 0x61,
-  0x37, 0xdb, 0xa4, 0xdf, 0xcf, 0x83, 0x8e, 0x51, 0xc4, 0xfe, 0x13, 0x42,
-  0x7d, 0x76, 0x33, 0x99, 0xcb, 0x26, 0xab, 0xf2, 0xb1, 0x5f, 0x01, 0x03,
-  0x0f, 0x60, 0x3f, 0x31, 0x9d, 0x09, 0xc5, 0xfe, 0xa2, 0xbc, 0x4d, 0x9d,
-  0xff, 0xc1, 0x3b, 0xca, 0xf5, 0x3e, 0xc8, 0xe9, 0xa7, 0xf0, 0x30, 0x04,
-  0xda, 0x4d, 0x37, 0x51, 0xfc, 0xcf, 0x0b, 0xd6, 0x1e, 0x3f, 0x32, 0x4e,
-  0x10, 0xc3, 0xed, 0x25, 0x02, 0x44, 0xcf, 0xd3, 0xda, 0xf6, 0x90, 0x87,
-  0x80, 0x23, 0x85, 0x01, 0x93, 0x6e, 0x78, 0x1d, 0x70, 0x6f, 0x25, 0x91,
-  0x98, 0x0a, 0x47, 0x62, 0x2e, 0xcb, 0xc1, 0x92, 0x99, 0x61, 0xa8, 0x65,
-  0x77, 0x66, 0xda, 0x13, 0x22, 0x33, 0x82, 0xbd, 0xc7, 0x35, 0x9b, 0x42,
-  0x8c, 0x60, 0xd2, 0xc5, 0xbf, 0xcb, 0xd4, 0x1a, 0x6d, 0x52, 0x2e, 0x58,
-  0x21, 0xfa, 0xdc, 0xb2, 0x87, 0x86, 0xdd, 0xa3, 0x54, 0xd4, 0xed, 0xe8,
-  0xf0, 0xe2, 0xb1, 0xe6, 0x20, 0x88, 0x3a, 0x0b, 0xbe, 0xb7, 0x6c, 0xc1,
-  0x55, 0xa7, 0x15, 0xe9, 0x41, 0x3f, 0x4b, 0xac, 0xa2, 0x2b, 0xc0, 0x28,
-  0x0c, 0xcc, 0xca, 0x20, 0x8a, 0x25, 0xc6, 0xb8, 0x01, 0x3b, 0xff, 0xf3,
-  0x3f, 0xff, 0x22, 0x56, 0x53, 0x13, 0xc8, 0xcb, 0x4f, 0xf9, 0xdc, 0x17,
-  0x5e, 0xc7, 0x67, 0x5e, 0x89, 0x47, 0x5b, 0x44, 0x99, 0x31, 0x9a, 0x28,
-  0xd3, 0x2d, 0xe2, 0x96, 0x8e, 0xf9, 0x63, 0xd3, 0x30, 0x46, 0x06, 0x22,
-  0x1b, 0xce, 0x1e, 0x7d, 0x50, 0x5f, 0x55, 0x24, 0x31, 0xa3, 0x8f, 0xcf,
-  0x6e, 0x9f, 0x47, 0x40, 0x2a, 0x49, 0xc4, 0xab, 0xd4, 0x2a, 0x4b, 0xfa,
-  0x6a, 0xe9, 0x90, 0x60, 0x87, 0xd8, 0x21, 0x49, 0xe7, 0x7d, 0x86, 0x50,
-  0x6f, 0x10, 0xed, 0x7e, 0xae, 0xee, 0x83, 0x37, 0x88, 0x47, 0x7b, 0x62,
-  0xbe, 0xf4, 0xc9, 0xf2, 0xcb, 0x99, 0x6b, 0xda, 0x7e, 0xd8, 0x68, 0x05,
-  0x8e, 0x78, 0x0e, 0x55, 0xc3, 0xe4, 0x6e, 0xe6, 0x8e, 0x24, 0x71, 0x7d,
-  0x36, 0x89, 0xa8, 0xb7, 0x9d, 0xfd, 0xf5, 0x2c, 0xda, 0x07, 0xad, 0x41,
-  0x52, 0xdb, 0x3e, 0x60, 0x59, 0xbd, 0x1f, 0xcb, 0x16, 0xa3, 0x7b, 0xf0,
-  0xb2, 0x94, 0xda, 0x40, 0x4f, 0x11, 0x28, 0xcb, 0xf6, 0x79, 0xd8, 0x0f,
-  0x9c, 0xa5, 0x4f, 0x75, 0x3d, 0xa5, 0xcd, 0x9e, 0x5f, 0x3e, 0x98, 0x4e,
-  0xd5, 0xe6, 0x96, 0x7c, 0xfc, 0x2e, 0xe5, 0xe7, 0x74, 0xb9, 0x3c, 0xcb,
-  0x72, 0xa3, 0x86, 0xf3, 0x6f, 0x9e, 0x51, 0xfd, 0x45, 0xe6, 0x36, 0x7b,
-  0x64, 0xc6, 0x40, 0x7d, 0x86, 0xcf, 0xbb, 0x88, 0x98, 0x88, 0x0c, 0xab,
-  0x39, 0x0c, 0xa8, 0x24, 0x97, 0x98, 0x4c, 0x8f, 0x0c, 0xbe, 0xd5, 0x12,
-  0x35, 0xe2, 0xc2, 0xc0, 0xed, 0x09, 0xa1, 0x54, 0xad, 0x60, 0x42, 0x74,
-  0xf6, 0x3f, 0x41, 0xaa, 0x70, 0xe0, 0x56, 0x8b, 0x6e, 0xd9, 0xc2, 0x72,
-  0xa9, 0x6c, 0x0f, 0x0d, 0xbe, 0xf6, 0x4f, 0x18, 0x7d, 0x56, 0x4e, 0x1f,
-  0x19, 0x2a, 0xc1, 0x56, 0xed, 0xfa, 0x0a, 0xda, 0x46, 0xb5, 0x2d, 0x29,
-  0x7f, 0x43, 0x65, 0x60, 0x20, 0xb9, 0x51, 0xfe, 0x7a, 0x75, 0x73, 0x04,
-  0xbd, 0x49, 0x6d, 0x83, 0x96, 0x34, 0x1c, 0xe5, 0xeb, 0x38, 0xa2, 0x68,
-  0x14, 0x99, 0xc4, 0x23, 0xcf, 0x7a, 0xca, 0xc5, 0x11, 0x99, 0x12, 0xba,
-  0x30, 0xad, 0x34, 0xba, 0xf0, 0x81, 0xe8, 0x46, 0x28, 0xa9, 0x4c, 0xfa,
-  0xc7, 0x4f, 0x6e, 0x54, 0xfc, 0x94, 0x55, 0x47, 0xc0, 0x3c, 0x36, 0x86,
-  0xe8, 0x99, 0x97, 0x31, 0xa8, 0xf8, 0xf1, 0xc7, 0xf0, 0x4f, 0x96, 0x3e,
-  0x02, 0x09, 0xf4, 0xcf, 0x12, 0x2d, 0xa3, 0xfc, 0x78, 0xb3, 0x76, 0xcc,
-  0x4e, 0x94, 0x41, 0x34, 0x71, 0x01, 0x89, 0xad, 0x28, 0x23, 0x42, 0x57,
-  0x55, 0x33, 0x5b, 0xd3, 0xbf, 0x8d, 0x10, 0x90, 0x7d, 0x74, 0xd3, 0x13,
-  0xa5, 0xc4, 0x27, 0x4b, 0x32, 0xca, 0xa1, 0x0b, 0x54, 0x25, 0x73, 0xa5,
-  0x44, 0x99, 0x1c, 0x84, 0x0f, 0x26, 0xc9, 0x23, 0x7d, 0x3a, 0xe2, 0xa5,
-  0x42, 0x6b, 0x12, 0x08, 0x4d, 0x56, 0xb5, 0xa6, 0xb9, 0x53, 0xb6, 0x29,
-  0x04, 0x13, 0x1f, 0x39, 0x42, 0xe6, 0xfa, 0x8d, 0x7f, 0x51, 0x4f, 0xe7,
-  0xd3, 0xfa, 0x0f, 0x9b, 0x58, 0x55, 0x91, 0xd5, 0x5f, 0xf4, 0xcf, 0x7e,
-  0xfc, 0xd3, 0x8a, 0x89, 0x7e, 0xda, 0xa7, 0x97, 0xe2, 0xce, 0xc1, 0xaf,
-  0xea, 0xd6, 0x81, 0xda, 0x4a, 0x29, 0x94, 0x7e, 0xe5, 0x31, 0xc0, 0x32,
-  0x2b, 0xaf, 0x33, 0x5a, 0x8c, 0x50, 0xac, 0x17, 0x15, 0xd7, 0x8c, 0x7b,
-  0x5c, 0x8f, 0x53, 0xd7, 0x8c, 0x6d, 0x8f, 0x48, 0x60, 0xda, 0xd4, 0xb4,
-  0x4b, 0x7a, 0x65, 0x87, 0xe8, 0xf7, 0x4a, 0x7e, 0xd8, 0xed, 0x93, 0xeb,
-  0xd4, 0x2f, 0xec, 0x15, 0xb7, 0xf7, 0x94, 0x3e, 0xfd, 0xf2, 0x0b, 0xab,
-  0x73, 0x63, 0x75, 0xef, 0xa8, 0xd6, 0x25, 0xf4, 0xc8, 0x16, 0x7c, 0xca,
-  0x1d, 0xd5, 0xba, 0x86, 0x1e, 0x3f, 0xb3, 0xcb, 0xee, 0xa8, 0xdd, 0x98,
-  0x08, 0x21, 0xf9, 0xf0, 0x29, 0x9d, 0xcf, 0x45, 0xec, 0x3c, 0x61, 0xec,
-  0x52, 0x71, 0x94, 0xb6, 0xbb, 0x50, 0x19, 0x4b, 0xf9, 0xcc, 0xa6, 0x2c,
-  0x6f, 0xd8, 0x75, 0xc5, 0x20, 0xc5, 0xb4, 0x7a, 0xa4, 0x39, 0xae, 0xd5,
-  0x28, 0x33, 0xb8, 0x3d, 0x1c, 0x7e, 0x43, 0x75, 0xc0, 0xad, 0x04, 0xdc,
-  0x76, 0x58, 0x28, 0xa9, 0x8a, 0xf6, 0xa8, 0xa6, 0x02, 0x19, 0xcc, 0xf5,
-  0xba, 0xcd, 0x3c, 0x58, 0xdf, 0xe1, 0x53, 0xa7, 0xa1, 0x6d, 0x7a, 0xfc,
-  0x2e, 0x03, 0x25, 0x96, 0x32, 0xfb, 0x19, 0x19, 0x95, 0xbb, 0x01, 0x99,
-  0x09, 0x7f, 0xf3, 0xb1, 0x7d, 0x2e, 0x46, 0x4b, 0x7b, 0x8c, 0xd1, 0x11,
-  0x91, 0x3d, 0x4d, 0x30, 0x88, 0xc5, 0xfc, 0xff, 0xd0, 0xc2, 0xc2, 0xa0,
-  0xe7, 0x88, 0x18, 0x60, 0x23, 0x8f, 0x77, 0x79, 0x4e, 0xc6, 0x2b, 0xdb,
-  0xa7, 0x8f, 0xf7, 0x99, 0xbb, 0xcc, 0x05, 0x76, 0xba, 0x1d, 0x16, 0x2f,
-  0x2a, 0x13, 0xcf, 0x3f, 0xb5, 0xcf, 0x2e, 0x37, 0xc9, 0x56, 0x34, 0xa6,
-  0x3e, 0xc3, 0x17, 0x68, 0x0b, 0x9f, 0x8e, 0xb2, 0xab, 0xbc, 0x78, 0x92,
-  0x53, 0x47, 0x81, 0x0b, 0x29, 0x40, 0x9f, 0x59, 0xdf, 0x36, 0x2a, 0xe9,
-  0x59, 0x1c, 0x9b, 0xa0, 0x94, 0xfc, 0x47, 0xc5, 0x44, 0x2a, 0x24, 0x69,
-  0x24, 0x2a, 0x3c, 0x4f, 0xe7, 0x58, 0x5d, 0x11, 0x84, 0x6e, 0xc8, 0xc7,
-  0x0b, 0xca, 0x4d, 0x8e, 0x14, 0xeb, 0x09, 0xdc, 0x17, 0x46, 0x09, 0xe0,
-  0x9c, 0x84, 0x5b, 0x0a, 0x56, 0x2e, 0x59, 0x0b, 0xa7, 0x0d, 0xc6, 0x27,
-  0x9b, 0xaa, 0x8e, 0x62, 0x6f, 0x48, 0xf9, 0x56, 0x7d, 0xfe, 0x51, 0x31,
-  0x65, 0x44, 0xdc, 0xbc, 0xf6, 0x10, 0x9b, 0xd8, 0x26, 0xbc, 0x51, 0x7b,
-  0x7a, 0x3e, 0x7a, 0xc9, 0x93, 0xb7, 0x02, 0xfc, 0xba, 0x3a, 0xb5, 0x9d,
-  0xf2, 0xd4, 0x14, 0x81, 0xe4, 0x5f, 0xa6, 0xac, 0x55, 0xd1, 0x82, 0x3e,
-  0xd6, 0xbb, 0x94, 0x49, 0xd1, 0x3b, 0xb3, 0xe0, 0x92, 0xb6, 0xed, 0x2d,
-  0x03, 0xcc, 0xc8, 0x93, 0x44, 0x7c, 0x2e, 0xa5, 0x8a, 0x34, 0xd7, 0x29,
-  0xf1, 0x67, 0xab, 0xfe, 0x65, 0x9a, 0x75, 0xcc, 0xfa, 0x42, 0x57, 0xd1,
-  0xf3, 0xa7, 0x1f, 0x9f, 0xdf, 0xe5, 0xc8, 0x33, 0x74, 0x87, 0x14, 0x95,
-  0xe8, 0xd1, 0x79, 0xb2, 0xe5, 0x5b, 0x61, 0x05, 0x18, 0xa5, 0xe0, 0x10,
-  0x40, 0x1d, 0x11, 0xc1, 0x0e, 0xf4, 0xb0, 0x4c, 0x6e, 0x44, 0x33, 0xe0,
-  0xac, 0x71, 0x16, 0x07, 0x82, 0x25, 0x26, 0x72, 0xc4, 0x4c, 0x32, 0xdf,
-  0x8c, 0x8a, 0x4c, 0xa7, 0xa7, 0xc9, 0x9e, 0x74, 0xd3, 0xd0, 0xf5, 0x1f,
-  0x3f, 0x33, 0xac, 0xb1, 0xb9, 0x19, 0xb6, 0x15, 0x79, 0xdb, 0x47, 0x47,
-  0xb3, 0x53, 0x19, 0xcf, 0x04, 0xe8, 0xe1, 0x53, 0xb6, 0x11, 0xb9, 0xb9,
-  0x22, 0xa7, 0x15, 0xac, 0x93, 0xaa, 0xaa, 0x3b, 0x43, 0xc0, 0xf9, 0x0f,
-  0x29, 0x97, 0x09, 0xfc, 0x6a, 0x64, 0xc9, 0xab, 0xc3, 0x19, 0xa6, 0x09,
-  0x69, 0x19, 0xfd, 0xc7, 0x9c, 0xac, 0xf0, 0x47, 0x93, 0x43, 0x1a, 0xd8,
-  0x3a, 0x54, 0x6e, 0x21, 0x8f, 0xb4, 0x46, 0x9b, 0xd8, 0xa1, 0x60, 0x69,
-  0x12, 0xf7, 0x57, 0x37, 0x27, 0x28, 0xbf, 0xdf, 0x93, 0x5a, 0xeb, 0x3e,
-  0x35, 0xa7, 0x20, 0x86, 0x9b, 0xae, 0x53, 0xdc, 0x43, 0x5a, 0x12, 0xb6,
-  0x14, 0x02, 0xb6, 0x76, 0xf9, 0x15, 0x66, 0x57, 0x77, 0x48, 0x59, 0xb3,
-  0xff, 0xcb, 0x20, 0x21, 0x87, 0x74, 0x3d, 0x84, 0x13, 0xd9, 0xd1, 0x6e,
-  0x2c, 0xad, 0x54, 0x72, 0xeb, 0x0a, 0x23, 0x15, 0x1a, 0xf6, 0x2c, 0x73,
-  0x1e, 0xa4, 0xe9, 0x4b, 0x3e, 0xa2, 0x0a, 0xd4, 0x03, 0x8f, 0xb1, 0x2b,
-  0x82, 0x36, 0x97, 0xf4, 0x1e, 0x7c, 0xcd, 0xe6, 0x29, 0xde, 0x4f, 0xae,
-  0x06, 0x65, 0x95, 0xd3, 0x8d, 0x03, 0x80, 0x9b, 0x36, 0x46, 0x3b, 0xbf,
-  0x07, 0x89, 0x42, 0x36, 0x45, 0xac, 0x39, 0x8d, 0xa9, 0x30, 0x5d, 0x58,
-  0x12, 0x36, 0x3d, 0xc3, 0x7e, 0xa5, 0xdf, 0xd9, 0x56, 0xb5, 0xa6, 0x64,
-  0x2c, 0xf4, 0xc8, 0x99, 0x32, 0xae, 0xf0, 0x88, 0x42, 0x01, 0xec, 0x68,
-  0xdd, 0x40, 0x29, 0xe4, 0x65, 0x36, 0x5e, 0x85, 0xac, 0xcf, 0x10, 0x06,
-  0x95, 0xd7, 0xf5, 0x02, 0x0b, 0xf6, 0xee, 0xf8, 0xe4, 0xc8, 0xa2, 0x7d,
-  0xfe, 0xf7, 0xf6, 0x80, 0xa6, 0xbc, 0x1a, 0x07, 0xd8, 0x26, 0xce, 0xb6,
-  0xf2, 0x52, 0xe7, 0x24, 0x1d, 0xeb, 0xdb, 0x1e, 0x97, 0x69, 0xc0, 0x8f,
-  0x5b, 0xb9, 0x58, 0x47, 0x1f, 0xbe, 0x3b, 0x3e, 0x3f, 0xfd, 0xf0, 0xfe,
-  0xe8, 0x83, 0x75, 0xe3, 0xd2, 0xa1, 0x88, 0xb1, 0x72, 0xd6, 0x61, 0x2c,
-  0x37, 0xa7, 0x40, 0x00, 0x51, 0xc3, 0xa1, 0xbe, 0x0c, 0x71, 0x68, 0xcc,
-  0xe7, 0xf2, 0xaf, 0x81, 0xdf, 0x9c, 0xf7, 0x90, 0xba, 0x72, 0x29, 0xc2,
-  0x3e, 0x27, 0x73, 0x7f, 0x42, 0x11, 0xb5, 0x01, 0x3b, 0x7f, 0x6d, 0x99,
-  0x1b, 0x22, 0x06, 0xbd, 0x1f, 0x67, 0x52, 0x76, 0x8e, 0x4a, 0x9a, 0xac,
-  0xd9, 0x29, 0xe1, 0xf8, 0x8f, 0x8b, 0x92, 0xb5, 0x3a, 0xe1, 0x36, 0xf7,
-  0xc7, 0x5a, 0x40, 0x58, 0x49, 0x74, 0x34, 0x8c, 0xec, 0x6e, 0x5c, 0xe1,
-  0x36, 0x4e, 0xda, 0x54, 0xbf, 0x3b, 0x0b, 0x09, 0x0f, 0x1b, 0xe7, 0x32,
-  0x69, 0xfd, 0x8a, 0x3c, 0xdd, 0x80, 0x9e, 0x37, 0x8a, 0x1f, 0xd5, 0x87,
-  0xb0, 0xbf, 0xbd, 0xfd, 0x33, 0x8a, 0x41, 0x7d, 0x21, 0xd5, 0xa0, 0x42,
-  0x7e, 0xb2, 0xda, 0xeb, 0x86, 0x4b, 0xa5, 0xd0, 0xdc, 0x1c, 0xda, 0xb7,
-  0x76, 0x3a, 0xe1, 0xf5, 0xfb, 0x74, 0x76, 0x7e, 0xfa, 0xc3, 0x5f, 0x7e,
-  0xe3, 0x4f, 0x78, 0x20, 0x9c, 0x1f, 0x09, 0x9b, 0xa6, 0x8d, 0xff, 0xfc,
-  0x9b, 0x7f, 0xad, 0xdd, 0x7c, 0xcf, 0x2b, 0xa1, 0x17, 0xad, 0x9f, 0xc8,
-  0x25, 0x46, 0xf3, 0x5a, 0x03, 0x11, 0xf2, 0x03, 0x67, 0xfb, 0x5a, 0x7c,
-  0x0c, 0x2e, 0xb9, 0xba, 0xbd, 0x41, 0xbb, 0xc1, 0x6b, 0xd0, 0x38, 0x20,
-  0xef, 0xce, 0x21, 0x1b, 0x7b, 0x92, 0x80, 0x49, 0x19, 0x96, 0x3d, 0x64,
-  0xee, 0x01, 0xa7, 0x67, 0xe7, 0xe3, 0xe0, 0xe4, 0xe4, 0x37, 0x9d, 0x04,
-  0x14, 0xd4, 0x71, 0x63, 0xe9, 0x5b, 0x1d, 0x55, 0x0b, 0x80, 0xad, 0xa6,
-  0x89, 0xfb, 0x70, 0x2a, 0xbd, 0x79, 0x0d, 0xf5, 0xb8, 0x5f, 0x67, 0x46,
-  0xa9, 0xa5, 0x9a, 0x9a, 0xc9, 0x94, 0xa0, 0x2e, 0xc6, 0xda, 0xa6, 0x8e,
-  0x05, 0x95, 0x73, 0xf0, 0x4b, 0xb8, 0xbb, 0x61, 0x3f, 0x01, 0x67, 0xc6,
-  0xb3, 0xc8, 0x69, 0x42, 0xc0, 0x71, 0x97, 0x96, 0xbb, 0x83, 0xcb, 0x7a,
-  0x69, 0xfd, 0xdc, 0xb0, 0x6a, 0x10, 0x2e, 0x05, 0xba, 0x66, 0xab, 0xbc,
-  0xbe, 0x01, 0xc6, 0x9d, 0x0e, 0xa6, 0x54, 0x47, 0xe7, 0x24, 0x57, 0xd2,
-  0x75, 0xd1, 0x95, 0xe5, 0x34, 0xcd, 0xcf, 0x88, 0x1a, 0x0b, 0x97, 0x4a,
-  0xf4, 0x94, 0x6a, 0xc9, 0x0e, 0xbf, 0x5e, 0x21, 0xb2, 0xc4, 0x3b, 0x82,
-  0xf2, 0xd2, 0x4b, 0x8e, 0xa1, 0x03, 0x6a, 0x4f, 0xa8, 0x97, 0x6c, 0xc5,
-  0xb8, 0x17, 0x9d, 0xbc, 0x37, 0xac, 0x54, 0x22, 0x75, 0x3c, 0xc8, 0x80,
-  0x97, 0x24, 0x16, 0xb9, 0xda, 0xfa, 0xf7, 0x89, 0xe6, 0xb0, 0xf3, 0x84,
-  0xf8, 0x89, 0x2e, 0xfa, 0x9b, 0xa7, 0x34, 0x47, 0x2a, 0x38, 0x7c, 0x0e,
-  0x04, 0x21, 0x90, 0xcb, 0x87, 0x5c, 0xc7, 0x15, 0x58, 0x4b, 0x25, 0xa7,
-  0x5a, 0x49, 0x3b, 0xc0, 0x56, 0x19, 0x83, 0x9e, 0xc7, 0x46, 0x10, 0xe9,
-  0xf1, 0xd2, 0x2e, 0x47, 0xc2, 0x6e, 0xe6, 0x31, 0x72, 0x82, 0x32, 0xab,
-  0x41, 0xab, 0x3d, 0xd7, 0x5f, 0xf4, 0x56, 0xfb, 0xca, 0x5a, 0x13, 0x36,
-  0x4a, 0x2c, 0xba, 0x61, 0xd6, 0x9b, 0x77, 0xa8, 0xf9, 0xef, 0xc5, 0xe9,
-  0xe1, 0xe9, 0x89, 0xf9, 0xcb, 0xd1, 0xbb, 0xe3, 0x1f, 0xdc, 0x25, 0xc6,
-  0x1b, 0xa0, 0x85, 0x73, 0x77, 0x15, 0xde, 0xec, 0xa9, 0x61, 0x84, 0x52,
-  0x8c, 0xd2, 0xa2, 0x43, 0xc9, 0xe6, 0x1d, 0x4b, 0xa9, 0xd3, 0xd6, 0xaa,
-  0xb9, 0x26, 0xac, 0x1a, 0xa4, 0xf4, 0x71, 0xcb, 0x16, 0x13, 0xed, 0x76,
-  0x26, 0xa5, 0x3a, 0xf8, 0xa7, 0x52, 0x40, 0x65, 0x3e, 0x8b, 0x46, 0xe2,
-  0xef, 0x43, 0xe9, 0x5c, 0x59, 0xd9, 0x0a, 0x20, 0x8d, 0x5f, 0x5f, 0xaa,
-  0xc3, 0x70, 0xeb, 0x51, 0xe6, 0x19, 0x85, 0xcc, 0x1f, 0xa4, 0x2d, 0x0a,
-  0xd5, 0x54, 0x19, 0x0e, 0x31, 0x92, 0xfa, 0xe9, 0xde, 0xf2, 0xd3, 0xb7,
-  0x3b, 0x08, 0x42, 0x00, 0xed, 0x6d, 0x8b, 0xed, 0x31, 0xc9, 0x04, 0x08,
-  0xd2, 0x07, 0x51, 0x71, 0x14, 0x6e, 0x75, 0x58, 0x12, 0x5b, 0x16, 0x3d,
-  0x9a, 0xf7, 0x93, 0xf3, 0xad, 0x48, 0x24, 0x73, 0xb7, 0x29, 0xb2, 0x2c,
-  0xa8, 0xa0, 0x9f, 0x14, 0x54, 0xeb, 0xb4, 0x91, 0xfe, 0xaa, 0x46, 0xd2,
-  0x76, 0x2b, 0x2f, 0x7e, 0x4d, 0x23, 0x2f, 0x3a, 0x6d, 0x5c, 0xff, 0xaa,
-  0x46, 0x6c, 0x55, 0x55, 0xa3, 0x0a, 0xfd, 0x70, 0x7c, 0x91, 0x1c, 0x9e,
-  0xbe, 0x75, 0x7b, 0xf4, 0x42, 0xd0, 0x3f, 0xf8, 0x0f, 0x95, 0x64, 0x2c,
-  0x08, 0x38, 0x49, 0x02, 0x94, 0xcb, 0xb1, 0x50, 0x5b, 0x40, 0x38, 0x22,
-  0xe8, 0x5e, 0x6b, 0x02, 0x47, 0x5e, 0x31, 0x5d, 0x03, 0x85, 0xd1, 0x7d,
-  0xf6, 0x3b, 0x7e, 0x74, 0x46, 0x34, 0x10, 0x57, 0x2a, 0x79, 0x69, 0x6b,
-  0x13, 0x17, 0x50, 0x5a, 0x69, 0x86, 0xd5, 0x28, 0x25, 0xb6, 0x87, 0x82,
-  0xf3, 0x84, 0x8c, 0x26, 0x7c, 0xa0, 0x7c, 0xc6, 0x6c, 0x97, 0x39, 0xe6,
-  0x08, 0x08, 0x4d, 0x21, 0x51, 0xec, 0x49, 0x62, 0x46, 0xde, 0x68, 0x57,
-  0x7c, 0xe8, 0xd0, 0xae, 0x42, 0x5f, 0x5b, 0x3b, 0x46, 0x58, 0xe3, 0x61,
-  0xe4, 0x10, 0xcc, 0x71, 0xa2, 0x59, 0x22, 0xd0, 0x84, 0x0a, 0x07, 0x61,
-  0xe5, 0x2a, 0x39, 0xc1, 0x95, 0x64, 0x9b, 0xb0, 0xdf, 0xd9, 0xe3, 0x3f,
-  0xde, 0x19, 0xcd, 0x8c, 0x81, 0x0e, 0x02, 0x24, 0xc9, 0xff, 0xee, 0xe9,
-  0x65, 0xcf, 0x5c, 0x18, 0x6d, 0x96, 0x4e, 0x51, 0x7f, 0x66, 0xc2, 0x88,
-  0xc1, 0xfa, 0xa1, 0x68, 0xd2, 0x7b, 0xd8, 0x61, 0xa4, 0x36, 0x0b, 0xe5,
-  0x85, 0x7b, 0xf3, 0xb9, 0x5c, 0xc6, 0x96, 0x57, 0xa3, 0xac, 0xac, 0x25,
-  0xe2, 0x70, 0x01, 0xbe, 0xad, 0xaa, 0x39, 0x83, 0x42, 0xf9, 0x97, 0xd5,
-  0x54, 0x13, 0x67, 0x2d, 0x1a, 0xb7, 0xd5, 0xb7, 0xcd, 0x87, 0x13, 0x4d,
-  0x41, 0xa4, 0x0f, 0x20, 0xb8, 0x83, 0x22, 0x00, 0xa8, 0x01, 0x60, 0x39,
-  0x11, 0xcc, 0xf7, 0x30, 0x69, 0xfd, 0x28, 0x5b, 0xf6, 0x85, 0x9f, 0x96,
-  0xa4, 0xea, 0xe6, 0xa4, 0x14, 0xae, 0x4b, 0x44, 0x09, 0xa9, 0x3e, 0x97,
-  0xf9, 0xcd, 0x83, 0x96, 0x1e, 0x48, 0x0b, 0x64, 0xe0, 0x04, 0xa5, 0xad,
-  0x65, 0x61, 0x24, 0x41, 0xc1, 0xe5, 0x02, 0xbc, 0xe0, 0x3f, 0x0e, 0xf5,
-  0xe6, 0x76, 0xc5, 0x42, 0xb5, 0x28, 0x2b, 0xec, 0x6a, 0x26, 0xc9, 0xd0,
-  0xab, 0x93, 0x1d, 0xa7, 0x63, 0x84, 0x2c, 0x19, 0x63, 0x1b, 0xcc, 0x46,
-  0xdd, 0xf1, 0x73, 0xbd, 0xec, 0x7c, 0x47, 0x3f, 0xc3, 0xec, 0x17, 0x17,
-  0x96, 0x87, 0xa3, 0xeb, 0x55, 0xa6, 0xe6, 0xc3, 0xd6, 0x3e, 0xeb, 0x6e,
-  0x11, 0x75, 0xf2, 0x12, 0x49, 0x5a, 0xe9, 0xc7, 0x7a, 0x3e, 0x17, 0x6b,
-  0x34, 0xa3, 0x74, 0x1e, 0x51, 0x9f, 0xaa, 0x6c, 0x4e, 0x65, 0x4e, 0x2f,
-  0x5c, 0xc6, 0x31, 0x42, 0x4a, 0xb0, 0x27, 0x31, 0xd5, 0x63, 0xed, 0xa5,
-  0x51, 0x88, 0x7c, 0x63, 0xe0, 0x95, 0x7c, 0xf6, 0xe2, 0x4c, 0x2e, 0x34,
-  0xb3, 0x19, 0x8a, 0xdc, 0x6e, 0x3c, 0x29, 0xdd, 0x84, 0x1f, 0x11, 0xb4,
-  0x09, 0xd9, 0xce, 0xfa, 0x6f, 0x7d, 0x23, 0x64, 0x05, 0xe2, 0xcb, 0xc0,
-  0xf9, 0x13, 0x31, 0xde, 0x45, 0xc5, 0x09, 0x6d, 0x8e, 0x0b, 0x0b, 0xd0,
-  0xd1, 0xb4, 0x68, 0x78, 0xc0, 0x15, 0xb1, 0x17, 0x0d, 0x92, 0xf7, 0x21,
-  0x62, 0xa4, 0xbc, 0x6c, 0x24, 0x29, 0x95, 0x50, 0x49, 0x13, 0xaf, 0xc6,
-  0x36, 0x54, 0x2d, 0xd7, 0xa0, 0x70, 0xe1, 0xf3, 0xfd, 0x42, 0xa7, 0x1e,
-  0x7a, 0x5d, 0xb1, 0x34, 0x2f, 0xdb, 0xcd, 0xc3, 0xee, 0x8e, 0x9d, 0x07,
-  0x0c, 0x8b, 0x92, 0xeb, 0xb1, 0x14, 0x03, 0x63, 0xf6, 0x93, 0xed, 0x7a,
-  0x97, 0x32, 0x29, 0xab, 0x56, 0xc6, 0x72, 0x7a, 0xab, 0x2e, 0x14, 0x65,
-  0x6b, 0x84, 0x28, 0x49, 0x04, 0xec, 0x53, 0x76, 0xab, 0x30, 0xca, 0x8b,
-  0xf3, 0x7e, 0xc4, 0x39, 0xd1, 0x83, 0x45, 0x67, 0x45, 0x25, 0x87, 0x5f,
-  0x60, 0x72, 0x13, 0x66, 0x7c, 0x2d, 0x16, 0x9e, 0x62, 0x8a, 0x0f, 0x2f,
-  0xca, 0x4b, 0xe8, 0x70, 0x26, 0x95, 0xf4, 0xc6, 0xb3, 0xeb, 0xc6, 0x73,
-  0x87, 0x9d, 0x72, 0x76, 0x30, 0x1c, 0xea, 0x3e, 0x39, 0x0c, 0xb7, 0x84,
-  0x40, 0x4b, 0x28, 0xcb, 0x5b, 0xc9, 0x2f, 0x42, 0x2b, 0x5e, 0xda, 0xe8,
-  0x04, 0x1f, 0x77, 0x59, 0xbc, 0xbd, 0x65, 0x31, 0x1d, 0x1f, 0xee, 0x5d,
-  0x6b, 0x12, 0x39, 0x2b, 0xb6, 0xe5, 0x49, 0x0b, 0xf6, 0x90, 0x3f, 0xad,
-  0x98, 0x66, 0xa4, 0xe9, 0xa9, 0x1f, 0x8e, 0xbc, 0x81, 0x46, 0xfa, 0xb4,
-  0x4b, 0x79, 0xed, 0x3e, 0x8b, 0x0c, 0xfa, 0x3b, 0x1e, 0x55, 0xef, 0x1f,
-  0x19, 0xf4, 0x77, 0x91, 0x41, 0x3f, 0xb7, 0xdf, 0xe2, 0x4f, 0xed, 0xed,
-  0x7d, 0x26, 0x40, 0x66, 0xe6, 0x55, 0x9f, 0x26, 0xee, 0x63, 0xf2, 0x35,
-  0x1e, 0xb1, 0x79, 0xb0, 0xcf, 0x69, 0x89, 0xe1, 0xb7, 0xbc, 0xc3, 0xeb,
-  0x7d, 0xea, 0x85, 0x1b, 0xd6, 0x38, 0x45, 0x7b, 0xa4, 0x6a, 0xb2, 0x9c,
-  0x09, 0xc4, 0x8f, 0x12, 0xf0, 0x10, 0x1a, 0xe2, 0xce, 0xc8, 0xa0, 0xb2,
-  0x89, 0xa3, 0x74, 0xb4, 0x1b, 0xde, 0x77, 0x5e, 0x5a, 0x43, 0x7a, 0x7b,
-  0x8f, 0x37, 0x25, 0x65, 0x1c, 0x4b, 0xbd, 0x44, 0x6c, 0xcd, 0x49, 0xd6,
-  0x98, 0x35, 0x71, 0x0e, 0x20, 0xce, 0x46, 0xb9, 0xac, 0x52, 0x50, 0x53,
-  0xa2, 0x46, 0xe3, 0x60, 0x09, 0xf9, 0x29, 0xab, 0xd1, 0x29, 0x95, 0x60,
-  0x2d, 0x08, 0x91, 0x07, 0xa5, 0x40, 0x1c, 0x27, 0xe4, 0x89, 0x43, 0x45,
-  0xcc, 0x4b, 0xeb, 0xac, 0xd3, 0x2a, 0x8d, 0xbd, 0x60, 0x86, 0x78, 0x88,
-  0x2d, 0x9d, 0x21, 0xce, 0xa3, 0xb3, 0xfb, 0x99, 0x9d, 0x37, 0xbb, 0x12,
-  0xe4, 0xd9, 0xe0, 0xdc, 0xf9, 0x81, 0x7f, 0x45, 0x88, 0x38, 0x71, 0x31,
-  0x00, 0xcb, 0xde, 0x1e, 0xec, 0x4b, 0x79, 0xdb, 0x7d, 0x85, 0xe5, 0xf1,
-  0x19, 0x49, 0x3b, 0x21, 0x28, 0x1c, 0x24, 0xa7, 0xf0, 0xc4, 0xb4, 0x48,
-  0x59, 0x2f, 0xf9, 0x00, 0xb8, 0x84, 0xaa, 0xf6, 0xd6, 0x7d, 0xe5, 0xad,
-  0xb1, 0x76, 0x4b, 0xe3, 0xe2, 0xdb, 0x22, 0x68, 0x1d, 0xb7, 0x93, 0xba,
-  0x1c, 0xb3, 0xe4, 0xfc, 0xe8, 0xe2, 0x9c, 0x02, 0x7e, 0x10, 0x01, 0xdd,
-  0x3b, 0xd7, 0x88, 0x84, 0x2d, 0x4b, 0xe4, 0x27, 0xf2, 0xcc, 0x29, 0x25,
-  0x4e, 0x44, 0x30, 0xdb, 0x8b, 0x5d, 0x71, 0xfe, 0xa7, 0xbe, 0xc7, 0x80,
-  0x73, 0xb3, 0xe6, 0x3c, 0xe5, 0xce, 0xa7, 0xdf, 0xe6, 0xa1, 0xd9, 0xdb,
-  0x73, 0xf8, 0x04, 0x94, 0x27, 0xe2, 0x7b, 0x4e, 0x70, 0xa4, 0x03, 0xc1,
-  0x69, 0x59, 0xec, 0xb5, 0xad, 0xa9, 0xc5, 0x9a, 0x85, 0xa0, 0x31, 0x83,
-  0xc0, 0xa5, 0xfd, 0xb8, 0xaa, 0x01, 0xaa, 0x2d, 0x7a, 0x38, 0x60, 0x7c,
-  0xd2, 0x93, 0xa1, 0x9c, 0x1f, 0xf3, 0x7c, 0x67, 0x27, 0x6c, 0x2e, 0x1d,
-  0x19, 0xb1, 0x2a, 0xaa, 0x9d, 0x00, 0xe9, 0xf1, 0x0a, 0x7b, 0xce, 0xa0,
-  0x6e, 0xd6, 0x64, 0xb5, 0xf4, 0x2f, 0xc9, 0x95, 0x45, 0x33, 0xa6, 0x82,
-  0xda, 0x9b, 0x37, 0x96, 0x32, 0xdf, 0x03, 0xd8, 0x2f, 0x73, 0xd6, 0x96,
-  0x2d, 0x8c, 0xf9, 0xd7, 0xea, 0x37, 0xa9, 0x22, 0x0b, 0x91, 0x2f, 0xc7,
-  0x2e, 0xd0, 0xb0, 0x67, 0x81, 0x04, 0xdf, 0x7b, 0x11, 0xd9, 0x11, 0xc9,
-  0xf0, 0xe2, 0xf4, 0x3c, 0x91, 0x4d, 0x16, 0xde, 0xd0, 0x88, 0x84, 0xd3,
-  0x13, 0x96, 0x89, 0xa0, 0x17, 0xa9, 0xaa, 0x6a, 0x73, 0x67, 0x2d, 0xe9,
-  0x9b, 0xf7, 0x55, 0x96, 0x01, 0xe7, 0x94, 0xfd, 0x21, 0x63, 0xfb, 0x4e,
-  0xb2, 0x65, 0x95, 0xe0, 0x50, 0x4f, 0xa6, 0xf7, 0x12, 0x1f, 0xb4, 0x53,
-  0x3e, 0xc1, 0x9c, 0xd9, 0x49, 0xfb, 0x48, 0x72, 0x3c, 0x89, 0x20, 0x51,
-  0x10, 0x70, 0xb6, 0x52, 0x47, 0x77, 0x2f, 0xf2, 0x21, 0x3a, 0x75, 0x14,
-  0x96, 0x2c, 0xe3, 0x65, 0x90, 0xce, 0xd4, 0x44, 0xc1, 0x18, 0xa4, 0x18,
-  0x31, 0xc9, 0xa3, 0xec, 0x21, 0xe8, 0x0e, 0x81, 0x06, 0x6b, 0x8e, 0x4d,
-  0x59, 0x29, 0xa9, 0x9d, 0x5c, 0x9e, 0x6a, 0x3e, 0x38, 0xb5, 0xdb, 0xbb,
-  0xf9, 0xcf, 0x4e, 0xcf, 0x2f, 0x12, 0x7b, 0xf1, 0xe3, 0xdb, 0xf8, 0x51,
-  0xe7, 0x08, 0x11, 0xff, 0x3b, 0x5c, 0x38, 0x0e, 0xb6, 0x1d, 0xb8, 0xa5,
-  0xc4, 0x44, 0x68, 0xb4, 0x09, 0x6d, 0x83, 0xb8, 0x56, 0x88, 0x74, 0x74,
-  0xc2, 0x2c, 0x0f, 0xa9, 0x2f, 0x73, 0x84, 0x92, 0x85, 0x2e, 0x9c, 0x78,
-  0xf5, 0x15, 0xa7, 0xe4, 0x3e, 0xdb, 0x8d, 0xec, 0x0e, 0xf2, 0xa0, 0x9d,
-  0x1f, 0x51, 0x85, 0xdd, 0x8b, 0x6b, 0xfe, 0x5b, 0xd0, 0x73, 0xce, 0x9d,
-  0x93, 0x1f, 0x46, 0x8b, 0x34, 0x63, 0x77, 0x50, 0x7c, 0xca, 0x98, 0x1f,
-  0x68, 0xdf, 0x26, 0x80, 0x7a, 0x73, 0xf6, 0xcc, 0xc3, 0x22, 0x41, 0x72,
-  0xca, 0x5e, 0xc1, 0x21, 0xc7, 0x0f, 0xd6, 0xe5, 0x23, 0xeb, 0x46, 0x3d,
-  0xe3, 0x43, 0xd1, 0xa2, 0xac, 0x7d, 0xf6, 0xdc, 0x93, 0x16, 0x74, 0x5b,
-  0x49, 0x03, 0xc7, 0x5a, 0xec, 0x86, 0x7e, 0xd8, 0xd7, 0xed, 0x82, 0x2b,
-  0x83, 0x37, 0x06, 0x3f, 0xe7, 0xda, 0x79, 0x61, 0x13, 0xbd, 0x55, 0x61,
-  0xf0, 0xba, 0x42, 0x3f, 0x56, 0x10, 0x08, 0x94, 0xb7, 0xce, 0xb6, 0x7b,
-  0xc6, 0xbb, 0xfd, 0x2b, 0xb3, 0xd9, 0x2d, 0xa6, 0x89, 0x87, 0xee, 0x5d,
-  0xac, 0xa4, 0x71, 0xe5, 0xc5, 0x22, 0x83, 0xa6, 0x96, 0x56, 0x53, 0xa2,
-  0xc7, 0x96, 0xaa, 0xd7, 0x09, 0x5e, 0x0b, 0xa4, 0x6e, 0xe9, 0x13, 0x34,
-  0x3c, 0x93, 0x5b, 0xe8, 0xf8, 0xe4, 0xc8, 0xad, 0x14, 0x73, 0x6b, 0xe3,
-  0x14, 0x3b, 0x8d, 0x9f, 0x2a, 0xd4, 0xd9, 0xab, 0x62, 0x90, 0x9c, 0x51,
-  0xe5, 0x31, 0x68, 0x4f, 0xf5, 0xbf, 0xbb, 0xd6, 0xf8, 0xa0, 0xc0, 0x13,
-  0x6b, 0x2e, 0x4f, 0x98, 0x2a, 0x79, 0x61, 0x16, 0x16, 0x3f, 0xa1, 0xbf,
-  0x7a, 0x3c, 0xb0, 0xc1, 0x70, 0x5f, 0xb9, 0x97, 0x6b, 0x33, 0x14, 0x63,
-  0xb4, 0x77, 0x1f, 0x79, 0x2e, 0xfb, 0xca, 0x58, 0xf4, 0x68, 0x82, 0x3e,
-  0x00, 0xd9, 0x4c, 0xe7, 0x59, 0x8b, 0xa7, 0x72, 0x0b, 0x97, 0xfa, 0x8c,
-  0x1a, 0x35, 0xfc, 0x9c, 0x6b, 0x8a, 0x2f, 0x84, 0x83, 0x91, 0xad, 0x87,
-  0x40, 0x20, 0x42, 0x52, 0xe7, 0x4c, 0x5b, 0x05, 0x49, 0xdb, 0xa9, 0x85,
-  0xd8, 0xfa, 0xb1, 0x40, 0xcc, 0xad, 0xe5, 0x53, 0xe9, 0x4e, 0x6e, 0xa7,
-  0x8c, 0xda, 0x73, 0xde, 0x89, 0x76, 0xdb, 0xd8, 0x3b, 0xac, 0xd5, 0x3b,
-  0x41, 0x2f, 0x0a, 0x2f, 0x14, 0x39, 0x12, 0xc8, 0x2f, 0x6c, 0xae, 0x78,
-  0xdf, 0x04, 0x78, 0xfe, 0xc2, 0x35, 0x75, 0x49, 0xa9, 0x54, 0xb6, 0x2d,
-  0x27, 0x7f, 0x1c, 0xed, 0x76, 0x6e, 0x1f, 0x13, 0xab, 0x91, 0xef, 0xb1,
-  0x51, 0x84, 0x1d, 0xc9, 0x9f, 0x13, 0xde, 0x0c, 0x17, 0x25, 0x99, 0xc1,
-  0xc5, 0x83, 0x83, 0xdf, 0x0e, 0x38, 0xba, 0xc8, 0x0e, 0x29, 0x26, 0xf7,
-  0xb7, 0xc0, 0x5c, 0x76, 0x3d, 0x88, 0xb7, 0x66, 0x96, 0xde, 0x07, 0xd7,
-  0xfc, 0x6c, 0x31, 0x13, 0x84, 0x9f, 0xf7, 0xa5, 0xcf, 0xc5, 0xb5, 0xc1,
-  0xf5, 0x6b, 0x95, 0x9b, 0xc4, 0x8e, 0xc4, 0x4c, 0xb4, 0x58, 0xce, 0x5e,
-  0x8c, 0x7c, 0x02, 0xe4, 0x99, 0xc5, 0x7a, 0x87, 0x1c, 0x54, 0xc4, 0xec,
-  0x83, 0xcb, 0x58, 0x94, 0x5e, 0xf5, 0x32, 0x94, 0x9a, 0x7c, 0x27, 0xe1,
-  0x62, 0x79, 0x8e, 0x7f, 0xb5, 0x9c, 0x5a, 0xa3, 0xca, 0xfe, 0x0a, 0x75,
-  0x72, 0xc0, 0x17, 0x0e, 0xa7, 0xd1, 0xf0, 0x28, 0x8b, 0x45, 0xea, 0xd9,
-  0xf4, 0xcf, 0x5f, 0x89, 0xdf, 0x4a, 0xfc, 0x22, 0x5a, 0xe3, 0xaf, 0x1b,
-  0x66, 0x7a, 0xb1, 0x6b, 0x9d, 0x80, 0x84, 0xa7, 0x13, 0xf8, 0xb7, 0x8f,
-  0xaa, 0x2b, 0xa9, 0xce, 0xf7, 0x37, 0xc9, 0xfb, 0xb7, 0x2f, 0x08, 0xda,
-  0x71, 0x95, 0x55, 0x73, 0x63, 0xb5, 0x38, 0xc3, 0xfc, 0xf4, 0x5b, 0xaf,
-  0xb1, 0x3d, 0xe7, 0x51, 0x94, 0x6b, 0x36, 0x97, 0xd3, 0x0b, 0x32, 0xac,
-  0xe2, 0x81, 0x92, 0x0d, 0xaf, 0x7a, 0x92, 0x38, 0xcc, 0x3e, 0x31, 0x9a,
-  0x48, 0xaf, 0x82, 0x69, 0x12, 0x90, 0x28, 0x75, 0x04, 0xd8, 0x8b, 0x67,
-  0x4e, 0x80, 0x51, 0x91, 0x62, 0xa2, 0xf1, 0xbb, 0x22, 0xeb, 0x20, 0x72,
-  0xa2, 0x5e, 0xb0, 0xd0, 0x3c, 0xe4, 0x73, 0x4f, 0xaa, 0x6c, 0xf8, 0x1a,
-  0x94, 0x74, 0x84, 0x3b, 0xbd, 0xf7, 0x5e, 0xf8, 0xbe, 0x05, 0x22, 0x14,
-  0xa4, 0x1d, 0x26, 0x34, 0xe2, 0xd0, 0x53, 0xbc, 0x67, 0x5f, 0xda, 0x67,
-  0xc9, 0x93, 0x94, 0x17, 0x5e, 0xd9, 0x87, 0x25, 0x6f, 0x88, 0x02, 0xac,
-  0x66, 0x82, 0xb2, 0xa1, 0xb0, 0xd6, 0xe3, 0xcd, 0xbd, 0xf7, 0xca, 0xab,
-  0xb6, 0xeb, 0x04, 0x9c, 0xcb, 0x76, 0x6b, 0x62, 0x50, 0xf9, 0xfc, 0xda,
-  0x3f, 0x9c, 0x2f, 0xf9, 0x96, 0x3e, 0x23, 0x90, 0x64, 0x6b, 0x3d, 0x55,
-  0x08, 0x66, 0x7e, 0x8a, 0xbd, 0x9e, 0x75, 0xde, 0xfb, 0x87, 0x07, 0xcb,
-  0xb0, 0xff, 0xd8, 0xed, 0xde, 0x47, 0x76, 0xe5, 0xcc, 0x98, 0x21, 0x97,
-  0x57, 0x45, 0xfe, 0xf7, 0xcc, 0x43, 0x05, 0x69, 0xc9, 0x0e, 0xef, 0xf1,
-  0x3d, 0x11, 0x18, 0xb7, 0xe9, 0x34, 0x17, 0xa1, 0x48, 0x41, 0x34, 0xf7,
-  0xc0, 0x33, 0xd9, 0xb5, 0xf7, 0x39, 0x1d, 0x51, 0x8e, 0x81, 0x53, 0xc1,
-  0x3c, 0x0a, 0xe1, 0x66, 0x2d, 0xd0, 0xed, 0xcb, 0xe7, 0xa2, 0x77, 0xa9,
-  0x82, 0x4c, 0x37, 0x2f, 0xea, 0xde, 0x83, 0xb0, 0xac, 0x2b, 0xa6, 0x5f,
-  0xca, 0xb5, 0x27, 0x4b, 0x29, 0xf5, 0xd2, 0x52, 0x57, 0x00, 0x85, 0xfe,
-  0x7a, 0x97, 0x17, 0x02, 0x84, 0x0d, 0x5e, 0x7f, 0xb9, 0xc4, 0x1f, 0x29,
-  0x95, 0x81, 0x8f, 0xb0, 0x97, 0xbc, 0xe7, 0x3f, 0xb3, 0x27, 0xc1, 0x63,
-  0x7b, 0x53, 0x9a, 0xaf, 0x9e, 0xe7, 0x81, 0xb0, 0x07, 0x49, 0xbc, 0x28,
-  0x99, 0x72, 0x43, 0x47, 0xb8, 0x78, 0x2f, 0xed, 0xe7, 0xa7, 0xe5, 0x55,
-  0xe2, 0x73, 0x16, 0xbc, 0xe4, 0x2d, 0xf5, 0x0e, 0x14, 0xdf, 0x7a, 0x0e,
-  0x48, 0x9a, 0xf8, 0x15, 0x23, 0xdd, 0xd3, 0xaf, 0x64, 0x6f, 0xe8, 0x7d,
-  0x69, 0x4d, 0xd6, 0x65, 0x6f, 0x7c, 0xb6, 0xe3, 0x2b, 0xac, 0x13, 0x0a,
-  0xd3, 0x71, 0xf6, 0xec, 0xd2, 0x17, 0x78, 0x67, 0x1c, 0x4f, 0xa9, 0xf8,
-  0xe2, 0x54, 0x4b, 0x3a, 0x2a, 0xdb, 0x97, 0x7b, 0x6c, 0xaf, 0x25, 0x74,
-  0x2f, 0x7c, 0xf5, 0x29, 0x39, 0x7e, 0xeb, 0x3d, 0xf8, 0xcc, 0x0d, 0x30,
-  0x9d, 0x92, 0x36, 0xf0, 0xc0, 0xee, 0xaa, 0x5a, 0x8a, 0x49, 0x7a, 0x8f,
-  0xf2, 0xce, 0xf8, 0x50, 0x32, 0x2b, 0x0d, 0xe6, 0x3f, 0x78, 0x86, 0xb7,
-  0xc3, 0xe1, 0xb5, 0xb9, 0xd5, 0xc6, 0x0d, 0xd0, 0x81, 0x85, 0x06, 0x8f,
-  0xba, 0x6b, 0xff, 0xd9, 0xcb, 0x15, 0xcf, 0xca, 0xa5, 0x59, 0x47, 0xea,
-  0xa4, 0x7f, 0xf6, 0x59, 0x78, 0xcc, 0xd5, 0x24, 0x50, 0x0c, 0xb3, 0x9c,
-  0xb4, 0x64, 0x93, 0x12, 0x24, 0xff, 0x5d, 0xfd, 0x83, 0x15, 0xf1, 0x6d,
-  0xd5, 0xff, 0xee, 0xf7, 0xf7, 0x73, 0x3f, 0x75, 0x87, 0x3d, 0x83, 0x55,
-  0x86, 0xc0, 0xc1, 0xb8, 0x45, 0xb0, 0xed, 0xb0, 0x22, 0x98, 0x1d, 0xaf,
-  0x05, 0x5e, 0x73, 0xa3, 0x47, 0x2c, 0x0a, 0x27, 0x39, 0xd8, 0x08, 0x94,
-  0x7c, 0xe4, 0x89, 0x4f, 0xcd, 0x46, 0x32, 0x5f, 0x7c, 0x51, 0x9e, 0x27,
-  0x75, 0xa7, 0x73, 0x0c, 0xea, 0xeb, 0x05, 0x5b, 0xdd, 0x76, 0x44, 0xce,
-  0xcd, 0xe6, 0xbd, 0xb6, 0xe7, 0xa4, 0x97, 0x5c, 0xfb, 0x0c, 0x47, 0x3f,
-  0xa4, 0x28, 0x25, 0x9b, 0xe6, 0x96, 0x76, 0x19, 0xae, 0xf2, 0xaa, 0x64,
-  0xcf, 0x21, 0x65, 0xb9, 0x6f, 0xa6, 0xf1, 0xd4, 0x11, 0xc1, 0x15, 0x7b,
-  0x9f, 0x11, 0xd5, 0x86, 0xa0, 0x2e, 0x66, 0x95, 0xae, 0xb3, 0xf1, 0x8d,
-  0x1e, 0x19, 0xdb, 0x46, 0xe4, 0xad, 0xe7, 0x76, 0x6a, 0x69, 0xf7, 0x9d,
-  0x9d, 0x1f, 0x75, 0x8d, 0x00, 0xf7, 0x28, 0xef, 0x9a, 0xf3, 0x8b, 0xe1,
-  0xd9, 0x3e, 0xf5, 0x97, 0x03, 0x72, 0xe6, 0x40, 0x1c, 0x0e, 0xb3, 0xbf,
-  0x49, 0x12, 0x4a, 0xed, 0x9e, 0x7e, 0xb9, 0xe4, 0xe9, 0xa1, 0xb8, 0xf8,
-  0x8e, 0x27, 0x24, 0x7d, 0xcd, 0x3a, 0xf8, 0x2f, 0x7d, 0x26, 0xd8, 0x3e,
-  0x75, 0xf5, 0xb3, 0x23, 0x8c, 0x7a, 0x06, 0x69, 0x48, 0x91, 0x77, 0xf7,
-  0xf0, 0xe7, 0xce, 0x5f, 0x73, 0xbd, 0x28, 0x6e, 0xac, 0xbe, 0x28, 0x3c,
-  0x53, 0xba, 0xc0, 0xee, 0x85, 0x57, 0x7a, 0x34, 0x3c, 0x6f, 0xa8, 0xc5,
-  0xbf, 0xf4, 0xc4, 0x4b, 0xa1, 0xe5, 0x23, 0x39, 0x98, 0x68, 0xe4, 0xeb,
-  0xc2, 0x9b, 0x83, 0x57, 0x3b, 0xf6, 0xfa, 0x15, 0xca, 0x8a, 0x9b, 0xec,
-  0xc1, 0xed, 0x3a, 0x8e, 0xd7, 0x1b, 0x75, 0x31, 0x2f, 0xc8, 0x09, 0xe1,
-  0x1e, 0xb1, 0x0d, 0xfc, 0xf0, 0x03, 0xcb, 0xf8, 0x52, 0x49, 0x3d, 0x24,
-  0xce, 0x64, 0x8b, 0x59, 0x18, 0x99, 0xc8, 0xf4, 0x97, 0x74, 0xbc, 0x10,
-  0x9d, 0xa9, 0xb2, 0x69, 0x46, 0x34, 0x79, 0x6c, 0xa3, 0x60, 0x63, 0xf7,
-  0x03, 0x7b, 0x0f, 0xf5, 0x9c, 0x38, 0x50, 0x49, 0x00, 0x3b, 0xf8, 0x26,
-  0x0b, 0xf2, 0x8d, 0x89, 0xaf, 0xca, 0xac, 0xf8, 0xc1, 0xc7, 0x8b, 0x6f,
-  0x4e, 0xcf, 0x87, 0xc9, 0x36, 0xe5, 0x9b, 0x5e, 0x9c, 0x1f, 0x7f, 0xf5,
-  0xd1, 0x98, 0xfe, 0x36, 0x46, 0xf7, 0x36, 0x2d, 0x72, 0x73, 0x73, 0x24,
-  0xc3, 0x26, 0x2b, 0xcc, 0x42, 0x5e, 0x69, 0xd1, 0x09, 0x50, 0xe9, 0xd0,
-  0x5d, 0x59, 0x56, 0x5c, 0x78, 0x08, 0xf9, 0xfe, 0xd7, 0xa5, 0xac, 0x06,
-  0x13, 0x52, 0x15, 0x8c, 0xc3, 0x2a, 0x9d, 0x5d, 0x9b, 0xb7, 0x73, 0x88,
-  0x13, 0x85, 0x56, 0x24, 0x17, 0xdf, 0x1c, 0x7c, 0xf8, 0x76, 0xa8, 0x7c,
-  0xe4, 0xdf, 0x7f, 0xff, 0xbd, 0x0f, 0xf9, 0xa9, 0xf7, 0xb7, 0xb7, 0xa1,
-  0x63, 0x5e, 0xa7, 0xf7, 0xf7, 0x83, 0x3a, 0x5b, 0x5b, 0x1b, 0x1e, 0x1d,
-  0x25, 0x07, 0x27, 0xc3, 0xd3, 0x35, 0x97, 0x65, 0xbd, 0xb9, 0xbb, 0x65,
-  0x74, 0xa8, 0xab, 0xac, 0x31, 0x7f, 0x59, 0x5b, 0x3b, 0x39, 0xb8, 0x20,
-  0xc3, 0xf5, 0xbb, 0xa3, 0xf3, 0xe1, 0xf1, 0xe9, 0x07, 0x9a, 0x67, 0x22,
-  0x4c, 0x48, 0xa7, 0x77, 0x44, 0x10, 0x77, 0x99, 0x03, 0xed, 0x7c, 0xa7,
-  0x05, 0xaf, 0x85, 0x33, 0x91, 0x75, 0x72, 0x46, 0x44, 0xdd, 0x11, 0x8b,
-  0x85, 0x20, 0x96, 0x08, 0x8d, 0x69, 0x86, 0xa4, 0xdc, 0x5f, 0x6b, 0x89,
-  0xf3, 0x5e, 0x71, 0x92, 0x7d, 0x36, 0xe2, 0x9a, 0xa5, 0x3d, 0x86, 0x1e,
-  0x22, 0x7c, 0xe5, 0x31, 0x0b, 0x2c, 0x19, 0xc2, 0x31, 0x11, 0x7e, 0x26,
-  0x1f, 0x87, 0x07, 0x5f, 0x1f, 0xd1, 0xb3, 0x5f, 0x67, 0x8d, 0x9b, 0x59,
-  0xae, 0xcc, 0x4d, 0x5f, 0xf9, 0x90, 0x35, 0xf5, 0x38, 0x9d, 0x67, 0x1b,
-  0xd4, 0xa7, 0x51, 0x5f, 0xc8, 0xf4, 0x5d, 0xe3, 0xac, 0xd6, 0xbb, 0x0a,
-  0x00, 0x85, 0x3c, 0x0f, 0xae, 0x7e, 0xbf, 0xdd, 0xf3, 0xa3, 0x83, 0xb7,
-  0xef, 0x8f, 0xb4, 0xec, 0x2d, 0x5f, 0xc1, 0xa6, 0xd1, 0x6b, 0x2a, 0x06,
-  0xec, 0x62, 0x1f, 0x74, 0xcd, 0x2f, 0x4c, 0x1b, 0xe6, 0x37, 0x54, 0x9b,
-  0x37, 0xfe, 0x39, 0x57, 0x18, 0x00, 0xcf, 0x0e, 0x2e, 0xf3, 0x6d, 0x6e,
-  0x5d, 0xbf, 0x97, 0xda, 0x39, 0xe1, 0x41, 0xa4, 0xaa, 0xfa, 0xb2, 0x6f,
-  0x02, 0x3e, 0x8d, 0xcf, 0x77, 0x76, 0x76, 0x56, 0x8c, 0x03, 0x96, 0x81,
-  0x5c, 0xa0, 0x66, 0x28, 0xfb, 0xf4, 0xf8, 0xb6, 0x6b, 0xdf, 0xf5, 0x98,
-  0xb6, 0x1b, 0xd6, 0xed, 0x92, 0x4c, 0x6b, 0x5c, 0xbb, 0x79, 0x93, 0xc5,
-  0xbb, 0x3c, 0x2e, 0x4b, 0xbb, 0x02, 0xad, 0xc9, 0x31, 0xca, 0x2e, 0x94,
-  0x17, 0xc7, 0xe5, 0xa7, 0x1d, 0x9f, 0xe4, 0x10, 0x08, 0x69, 0xf5, 0xd0,
-  0x6d, 0x92, 0x7e, 0x03, 0x60, 0xca, 0xb8, 0x19, 0x94, 0xd5, 0xd5, 0xf6,
-  0x6c, 0x1f, 0xda, 0x89, 0x79, 0xe8, 0x1d, 0xc1, 0x5c, 0x13, 0xa3, 0xe5,
-  0x5a, 0x6e, 0x88, 0x9a, 0x26, 0xb6, 0x34, 0xd7, 0xd2, 0x13, 0xfa, 0xf5,
-  0x0b, 0x66, 0x81, 0x69, 0x7d, 0x2e, 0x75, 0xe4, 0x5a, 0x28, 0x2f, 0xf2,
-  0x11, 0xda, 0x7f, 0xf0, 0x1c, 0x0e, 0x8c, 0x2c, 0x30, 0x5f, 0x21, 0x7e,
-  0x29, 0x6c, 0x11, 0xf3, 0xd7, 0xca, 0x6c, 0x99, 0x41, 0x73, 0x0f, 0x11,
-  0x2a, 0xd5, 0x3b, 0x39, 0x63, 0x90, 0xe0, 0x0d, 0x73, 0x2a, 0xf8, 0x5c,
-  0x11, 0xe7, 0x2b, 0x7f, 0xc1, 0x1c, 0x20, 0x12, 0x22, 0x57, 0x32, 0x71,
-  0x40, 0xf3, 0x51, 0xc3, 0xdd, 0x6f, 0xf6, 0xfb, 0xd8, 0x3f, 0xb5, 0xdd,
-  0x2d, 0x4f, 0xf8, 0xb8, 0x37, 0x28, 0x9e, 0xfd, 0x42, 0x6e, 0x5c, 0x6f,
-  0xef, 0x0c, 0x4d, 0x2f, 0x82, 0x6f, 0x2d, 0x5c, 0x01, 0xd2, 0x9a, 0x3f,
-  0xe7, 0x57, 0xac, 0x30, 0xab, 0xb1, 0x0d, 0xa8, 0xe7, 0x93, 0xbf, 0x71,
-  0x78, 0x66, 0xa9, 0xe0, 0xcd, 0xd8, 0x6f, 0x69, 0xf0, 0x24, 0xad, 0x93,
-  0x64, 0x93, 0xc4, 0xb9, 0x6a, 0xac, 0xc0, 0xd8, 0xc1, 0xf2, 0x44, 0x35,
-  0x1a, 0xdf, 0x72, 0x58, 0xd1, 0xc3, 0x7d, 0x33, 0x35, 0x74, 0x3b, 0xfc,
-  0xef, 0xed, 0x41, 0x5d, 0x5f, 0x6f, 0xe7, 0x93, 0x4f, 0x55, 0x9d, 0x26,
-  0x3f, 0xad, 0x75, 0x32, 0x2a, 0xbb, 0x83, 0xf8, 0xdf, 0x98, 0xc1, 0x5f,
-  0x34, 0x53, 0xcb, 0x47, 0xf1, 0x7b, 0x8c, 0xa0, 0xdf, 0xa7, 0x56, 0xf5,
-  0x4b, 0x9f, 0xcc, 0x03, 0x9f, 0x2c, 0x83, 0xef, 0xaf, 0x18, 0x5d, 0x44,
-  0x14, 0x9a, 0x41, 0x32, 0xb5, 0xa3, 0x91, 0x2d, 0xf1, 0x8d, 0xae, 0x65,
-  0x28, 0x7e, 0xdc, 0xdb, 0xd9, 0xd9, 0xdd, 0xdf, 0xfd, 0xfc, 0xd5, 0xce,
-  0xfe, 0xee, 0xee, 0xee, 0xde, 0xfe, 0xee, 0xfe, 0xfe, 0xde, 0xce, 0xcf,
-  0xdb, 0xeb, 0xcb, 0xa6, 0xee, 0xfd, 0x57, 0x4b, 0x1a, 0x34, 0xa3, 0x5e,
-  0x67, 0xde, 0xb8, 0x9f, 0xec, 0xe8, 0x31, 0xaa, 0xc9, 0x7a, 0x52, 0xcf,
-  0x46, 0x84, 0xeb, 0xe2, 0xc3, 0xe9, 0x0f, 0xa6, 0x36, 0x4a, 0x71, 0xe6,
-  0x0d, 0xe8, 0xed, 0xe9, 0xf7, 0x1f, 0x4e, 0x4e, 0x0f, 0xde, 0x26, 0x17,
-  0xa7, 0xc9, 0x01, 0x5c, 0x78, 0x11, 0x39, 0x09, 0xee, 0x47, 0x82, 0x45,
-  0x73, 0x7d, 0x0e, 0xaf, 0x4e, 0x95, 0xf8, 0x9b, 0x2c, 0x88, 0x11, 0x9d,
-  0xe8, 0xf6, 0xb3, 0x84, 0x89, 0x46, 0x2d, 0x0d, 0xae, 0x9b, 0xd9, 0xe3,
-  0x37, 0xc2, 0x53, 0xbe, 0xdc, 0x63, 0x90, 0x85, 0xb3, 0xc2, 0xd1, 0x1d,
-  0x3d, 0xf9, 0x52, 0x2c, 0x5c, 0xe2, 0x52, 0x02, 0x4f, 0xb0, 0xa5, 0xad,
-  0x37, 0x19, 0x83, 0xe9, 0xca, 0x2b, 0x71, 0xd9, 0xae, 0x0e, 0x78, 0xd4,
-  0x16, 0xc0, 0x11, 0xfc, 0x0b, 0xd4, 0x1d, 0xd2, 0x2f, 0xb7, 0x82, 0x01,
-  0x9e, 0x2e, 0x1d, 0x92, 0xb9, 0xcc, 0xb3, 0x7b, 0x8c, 0xba, 0x2d, 0x7b,
-  0x99, 0x58, 0xd0, 0x8d, 0x0e, 0xec, 0x49, 0xea, 0x57, 0xc8, 0x2b, 0xed,
-  0x32, 0x70, 0x9a, 0x91, 0xcf, 0xd1, 0x77, 0x54, 0x24, 0xbb, 0x4f, 0xd0,
-  0x6f, 0xfc, 0x7b, 0x7c, 0xdb, 0x66, 0x9d, 0x72, 0x07, 0x3e, 0x0e, 0x8f,
-  0x3f, 0x7c, 0x8d, 0x08, 0xf7, 0xf7, 0xa7, 0xe7, 0x6f, 0x87, 0xa6, 0x59,
-  0x23, 0xaf, 0xd0, 0xf8, 0x45, 0x49, 0x92, 0x50, 0x7a, 0xc5, 0xe7, 0x92,
-  0x3e, 0xfd, 0x27, 0xde, 0x4e, 0x3d, 0x9b, 0x84, 0x84, 0x6e, 0x7a, 0xb6,
-  0x0b, 0xd5, 0x06, 0x8a, 0xdf, 0x1a, 0xde, 0x6e, 0xfc, 0x72, 0x96, 0x8e,
-  0xaf, 0xc9, 0xd8, 0xe6, 0xcd, 0x0a, 0xc8, 0xec, 0x36, 0xa5, 0x74, 0x6c,
-  0x93, 0x0d, 0xb5, 0xdd, 0x94, 0xd8, 0x8e, 0x68, 0xa5, 0xac, 0x2c, 0x6e,
-  0xaf, 0x35, 0x23, 0xb4, 0xd7, 0x2f, 0xa7, 0xe9, 0x15, 0x3e, 0x18, 0x1e,
-  0x03, 0xef, 0x63, 0xf2, 0xf9, 0xa7, 0x7e, 0x92, 0xae, 0x0d, 0xb4, 0x77,
-  0x8c, 0x0d, 0x80, 0x44, 0x1c, 0x14, 0x3c, 0xba, 0xd4, 0x0a, 0x1d, 0xa4,
-  0x3f, 0xa2, 0xfa, 0x1a, 0xa1, 0xb5, 0x88, 0x43, 0xb8, 0x5b, 0xb9, 0x06,
-  0x15, 0x46, 0x99, 0x46, 0xdb, 0xe8, 0xd8, 0x0e, 0xcf, 0x2b, 0x95, 0x43,
-  0xd0, 0x92, 0xe7, 0xce, 0xa9, 0x1d, 0xbc, 0xd8, 0xd5, 0xd8, 0xe5, 0x29,
-  0xa7, 0xce, 0x10, 0x88, 0x91, 0xe1, 0xf1, 0x84, 0x63, 0x14, 0x85, 0x76,
-  0x9d, 0xb8, 0xe9, 0x09, 0x85, 0xb4, 0x8e, 0x2b, 0xae, 0x45, 0xfa, 0xe5,
-  0x22, 0xdf, 0x75, 0x63, 0xba, 0x92, 0x52, 0xad, 0x03, 0x86, 0x22, 0x08,
-  0x93, 0x86, 0xb1, 0x8c, 0x38, 0xf5, 0x60, 0x5d, 0xb1, 0x4c, 0xdc, 0x4a,
-  0x5e, 0x33, 0x1f, 0x89, 0x2d, 0x2d, 0x42, 0x97, 0x17, 0x7d, 0x9d, 0x7d,
-  0x98, 0x98, 0x75, 0x7b, 0x4f, 0x3a, 0x2f, 0x24, 0xdd, 0x71, 0x46, 0x1f,
-  0x37, 0x02, 0x9c, 0x77, 0x8e, 0xc6, 0xbe, 0x5d, 0xcd, 0xcf, 0xd6, 0xb4,
-  0x29, 0xef, 0x2d, 0x37, 0x47, 0x92, 0xd9, 0x39, 0x54, 0xed, 0x0c, 0xae,
-  0x01, 0x52, 0x66, 0x6f, 0x01, 0x0b, 0x95, 0xf6, 0x0a, 0xa7, 0xb9, 0xa2,
-  0x0f, 0xde, 0xb4, 0x31, 0x90, 0xd2, 0xbd, 0x67, 0xd6, 0x88, 0x9a, 0xca,
-  0x9b, 0x3a, 0x9b, 0x5e, 0x92, 0x29, 0x64, 0xaf, 0x10, 0xae, 0x55, 0xec,
-  0xaa, 0x5f, 0x08, 0x20, 0x78, 0x51, 0x18, 0x4b, 0x25, 0x15, 0x74, 0x0e,
-  0xcb, 0x92, 0x2b, 0x88, 0x75, 0x57, 0x20, 0xbd, 0x2d, 0x43, 0x38, 0xb8,
-  0xf9, 0x67, 0x06, 0xe0, 0xd9, 0xe6, 0x5a, 0xa2, 0xc3, 0xcb, 0x16, 0xe0,
-  0x5b, 0x47, 0xe7, 0x8e, 0x66, 0xeb, 0x61, 0x4e, 0x44, 0x3d, 0x84, 0xd5,
-  0xf0, 0xea, 0x01, 0x2a, 0x71, 0x2e, 0x18, 0xac, 0xb3, 0x7b, 0x62, 0x91,
-  0x95, 0xb1, 0x39, 0x7b, 0xcd, 0x6a, 0xf5, 0x32, 0x5e, 0x6a, 0x0d, 0x3f,
-  0x87, 0x2c, 0xa4, 0xd9, 0x36, 0xfd, 0x06, 0x35, 0xb9, 0x40, 0xea, 0x59,
-  0x0d, 0x54, 0x2b, 0xcf, 0x16, 0xa1, 0x24, 0x8d, 0xc9, 0xdc, 0xc2, 0xcc,
-  0xf0, 0x6c, 0x8b, 0x39, 0x23, 0x86, 0x9a, 0xb2, 0x2d, 0x08, 0x25, 0xd8,
-  0xfb, 0x30, 0x6d, 0x25, 0x70, 0x9d, 0xb5, 0xd2, 0x3f, 0x5a, 0xa3, 0x5c,
-  0x8c, 0xdc, 0xc2, 0xd2, 0x1e, 0x01, 0x78, 0x95, 0x9a, 0x3c, 0x0c, 0x6b,
-  0xa4, 0x69, 0x11, 0x01, 0x6f, 0xf6, 0x84, 0xee, 0xc3, 0x08, 0x14, 0xe4,
-  0x2e, 0x2d, 0x6a, 0xbb, 0x73, 0xcc, 0x6c, 0xdd, 0xc8, 0x85, 0xb8, 0x06,
-  0x14, 0x7b, 0x28, 0x6e, 0x44, 0xf2, 0x2e, 0x97, 0x37, 0x8f, 0x8b, 0x9a,
-  0xb0, 0x4b, 0x6a, 0xfa, 0x4d, 0x1f, 0x58, 0x1a, 0xe4, 0xc5, 0x6a, 0xa1,
-  0x23, 0x9d, 0x78, 0xd2, 0x87, 0x31, 0x56, 0x70, 0x49, 0xd7, 0x1c, 0x21,
-  0x71, 0x80, 0x52, 0x46, 0x64, 0x80, 0xa8, 0xa1, 0xc3, 0xa6, 0x0a, 0x24,
-  0x89, 0x9f, 0xef, 0x80, 0x03, 0xcf, 0x40, 0x92, 0xfd, 0xe4, 0xab, 0xb4,
-  0xce, 0xc7, 0x3d, 0x29, 0x77, 0x20, 0xe5, 0x0f, 0x50, 0x40, 0x5b, 0x4b,
-  0x22, 0x24, 0x9b, 0x4c, 0xa4, 0xbb, 0x35, 0x48, 0xbe, 0xd7, 0x02, 0x16,
-  0xc6, 0x88, 0x44, 0xba, 0x31, 0x79, 0xf6, 0xa9, 0x35, 0x81, 0x83, 0xf0,
-  0xd9, 0x93, 0xfd, 0x29, 0x7e, 0x76, 0xd0, 0x5f, 0xe3, 0x23, 0x8e, 0xdb,
-  0x0f, 0xab, 0x9a, 0xd6, 0x37, 0x36, 0xa8, 0x85, 0xb5, 0x12, 0x51, 0xc4,
-  0xe5, 0xaf, 0x98, 0x28, 0x16, 0x46, 0xbe, 0x40, 0x5f, 0x10, 0xf2, 0x2a,
-  0xbc, 0xea, 0xd5, 0xb6, 0xf8, 0x0c, 0x5c, 0xa9, 0xb5, 0xc5, 0x9e, 0xd9,
-  0xfa, 0x5e, 0xd8, 0x99, 0x56, 0x44, 0xf5, 0xfb, 0x66, 0xc2, 0x68, 0x6a,
-  0x44, 0x80, 0x9e, 0x5e, 0x1c, 0xfd, 0x4b, 0x72, 0xd0, 0x8d, 0x81, 0x83,
-  0xdf, 0x43, 0xc4, 0xb0, 0xd4, 0x82, 0xb5, 0x1b, 0x0c, 0x7d, 0x67, 0x88,
-  0x29, 0x33, 0x5e, 0xa6, 0x58, 0xfe, 0x35, 0xc9, 0x90, 0x75, 0x0e, 0xdf,
-  0xba, 0x94, 0xfc, 0x08, 0x94, 0xca, 0xb3, 0x45, 0xd5, 0x10, 0x1d, 0xf0,
-  0x98, 0xfe, 0x18, 0xc5, 0x9e, 0xa7, 0xd0, 0x63, 0xcb, 0x7b, 0x73, 0xb0,
-  0x35, 0x45, 0x81, 0xa6, 0xf9, 0xea, 0x5a, 0xcb, 0x04, 0x12, 0x08, 0x9b,
-  0xe0, 0xc8, 0x64, 0x6a, 0x31, 0x65, 0x32, 0x97, 0xb4, 0xf2, 0xea, 0xbb,
-  0xd8, 0x16, 0x68, 0xf7, 0x7f, 0xa2, 0x23, 0xf7, 0x49, 0x2f, 0x16, 0xb9,
-  0x02, 0xb9, 0x2f, 0x97, 0x6c, 0x07, 0xb5, 0xb7, 0xac, 0x1e, 0x3b, 0xbe,
-  0xcd, 0xce, 0x14, 0x60, 0x8a, 0x85, 0xa0, 0x2b, 0x00, 0xf0, 0x0f, 0x04,
-  0xbf, 0x71, 0xa7, 0xaa, 0xd4, 0xf4, 0x2f, 0x26, 0xb0, 0x49, 0xd2, 0x1d,
-  0xc1, 0x95, 0x90, 0x85, 0x4d, 0x92, 0xc1, 0xfc, 0xa6, 0xd5, 0x76, 0xba,
-  0x0d, 0x48, 0x68, 0x31, 0xab, 0xd4, 0x8b, 0xe1, 0xe9, 0xe1, 0xb7, 0xc3,
-  0x56, 0xba, 0x4b, 0xcd, 0xa5, 0x52, 0x12, 0xad, 0x09, 0xd4, 0xd9, 0xd0,
-  0x46, 0x1a, 0x1e, 0x37, 0x1d, 0xf1, 0x64, 0x79, 0x1a, 0x3d, 0xec, 0x31,
-  0x5d, 0x36, 0xad, 0x66, 0xa9, 0x74, 0xc6, 0x38, 0xf3, 0x68, 0x66, 0x8b,
-  0x72, 0xcd, 0xbb, 0xf9, 0x78, 0xff, 0x94, 0xb5, 0xca, 0x44, 0x26, 0x21,
-  0xe5, 0x7a, 0x05, 0xa3, 0x8c, 0x59, 0x84, 0xcc, 0x2e, 0xe1, 0x55, 0xa4,
-  0xfe, 0xe1, 0x04, 0xf2, 0xce, 0x9c, 0x61, 0x73, 0xaf, 0xb9, 0xdd, 0x4d,
-  0x77, 0xd0, 0xb2, 0x71, 0x12, 0x39, 0x3e, 0x6d, 0x37, 0x75, 0x7d, 0xb3,
-  0xea, 0x84, 0xca, 0x82, 0x52, 0x14, 0x84, 0x74, 0x2b, 0xed, 0x35, 0xad,
-  0x0e, 0x34, 0xdb, 0xc2, 0xea, 0x59, 0xba, 0xe8, 0x22, 0xfc, 0x78, 0x90,
-  0x24, 0x53, 0x26, 0xc9, 0xec, 0x41, 0x12, 0x58, 0x44, 0x37, 0x20, 0x6e,
-  0x0e, 0x78, 0x25, 0x3e, 0xff, 0x3c, 0xd0, 0x05, 0xef, 0xed, 0xd3, 0xfb,
-  0xe6, 0xd7, 0x9e, 0xf7, 0x63, 0x4a, 0x78, 0x11, 0xf2, 0x36, 0x40, 0x0f,
-  0xb5, 0x2e, 0x90, 0x88, 0x85, 0xe1, 0x95, 0xdc, 0xe2, 0x2f, 0xda, 0x10,
-  0x4b, 0xb0, 0xcb, 0x7a, 0x4e, 0xee, 0xaf, 0xb1, 0x79, 0xcd, 0x1d, 0x4d,
-  0x6b, 0xc6, 0x1d, 0x2d, 0x31, 0xcc, 0x54, 0x4c, 0x76, 0x7b, 0xeb, 0x69,
-  0xcd, 0x46, 0x73, 0x1f, 0xd0, 0xa5, 0x4a, 0x46, 0xc0, 0xb0, 0x94, 0x86,
-  0x69, 0x92, 0xa5, 0x33, 0x76, 0x77, 0x74, 0xf6, 0x91, 0xad, 0x75, 0xe5,
-  0x64, 0xc4, 0xc7, 0xe5, 0xdd, 0xf9, 0xf8, 0x6b, 0xba, 0x73, 0x90, 0xac,
-  0x4c, 0xb5, 0xc2, 0x04, 0xb1, 0xc4, 0xaf, 0x25, 0x4e, 0x3a, 0x29, 0xb1,
-  0xab, 0x55, 0xef, 0xe1, 0x39, 0x42, 0xb1, 0x99, 0x0e, 0x1d, 0x6e, 0xe8,
-  0x98, 0x28, 0x4a, 0x7e, 0x1a, 0x46, 0x0d, 0xb5, 0xdf, 0xd3, 0xae, 0x3c,
-  0xb5, 0xbb, 0x52, 0x21, 0xd1, 0xe6, 0x53, 0xba, 0xef, 0x61, 0xc3, 0x4b,
-  0x72, 0xd4, 0xee, 0x60, 0xc7, 0xd7, 0xaf, 0x6c, 0x52, 0x63, 0x85, 0x14,
-  0x2a, 0x9a, 0xe2, 0x35, 0x4f, 0x45, 0x59, 0x48, 0x41, 0xc1, 0xed, 0xce,
-  0x6b, 0xf2, 0xb3, 0x5d, 0x66, 0x37, 0x30, 0x27, 0x49, 0x68, 0x01, 0x29,
-  0xcd, 0x35, 0x9b, 0xcd, 0x39, 0xf9, 0x2b, 0x52, 0x28, 0x15, 0xe7, 0xe8,
-  0xb9, 0x3b, 0x52, 0x2f, 0xec, 0x72, 0x4b, 0x1f, 0x39, 0x57, 0x44, 0xaa,
-  0x8b, 0x71, 0xba, 0x06, 0x94, 0x4f, 0x2d, 0xe4, 0xd1, 0x2c, 0x4d, 0x54,
-  0x3d, 0x6c, 0x53, 0xbb, 0xd3, 0x7e, 0xc6, 0x65, 0x6b, 0xcb, 0x5e, 0x0a,
-  0x9d, 0xb7, 0xa0, 0x8c, 0xa9, 0x55, 0xc2, 0x63, 0x47, 0x24, 0x0d, 0x18,
-  0x24, 0x32, 0xd4, 0x0b, 0xa3, 0x73, 0xcd, 0x8e, 0x6e, 0xda, 0x5a, 0x4a,
-  0x82, 0xeb, 0xc2, 0x68, 0x56, 0x3d, 0x33, 0xed, 0x4e, 0x73, 0xd3, 0xa1,
-  0x0d, 0xd0, 0xe9, 0x68, 0x19, 0x24, 0x91, 0x85, 0xba, 0x85, 0x2d, 0xb1,
-  0x45, 0xbb, 0xc2, 0x50, 0x48, 0x94, 0xd9, 0x15, 0xba, 0x7c, 0x0d, 0xf4,
-  0x92, 0xfe, 0xff, 0x90, 0x99, 0x21, 0xf5, 0x9c, 0x20, 0x60, 0x60, 0x3e,
-  0x9a, 0x7b, 0xec, 0x17, 0x82, 0x3a, 0x85, 0xc0, 0x27, 0x7c, 0xa7, 0x8e,
-  0xc3, 0x2b, 0x7d, 0xcd, 0x99, 0x7e, 0x90, 0x7f, 0x3a, 0xf6, 0x3c, 0xeb,
-  0x96, 0x7e, 0x12, 0x51, 0xc1, 0xcd, 0xad, 0xb9, 0x12, 0xa9, 0x00, 0xfd,
-  0x05, 0x1d, 0xb6, 0x17, 0xd9, 0x57, 0xc4, 0x5c, 0x7c, 0x58, 0xa6, 0xfe,
-  0xb4, 0xaa, 0x2d, 0xb7, 0xa6, 0x3d, 0xe5, 0xcd, 0x6f, 0x5d, 0x19, 0x4c,
-  0x28, 0xdf, 0x37, 0x2f, 0xf4, 0x3f, 0x8a, 0x3b, 0xe3, 0x4b, 0xfe, 0xc2,
-  0x80, 0xe4, 0x99, 0x7c, 0xe1, 0x8c, 0xda, 0xb2, 0x0f, 0xec, 0xcb, 0x4b,
-  0xc4, 0x42, 0xbf, 0x2e, 0x9e, 0x9c, 0xf6, 0xac, 0xf0, 0xf3, 0xca, 0x52,
-  0xdf, 0x29, 0x56, 0x8b, 0x43, 0xc6, 0x7f, 0xe5, 0x77, 0xc5, 0x78, 0x7c,
-  0xa0, 0x26, 0x06, 0x9c, 0x4b, 0x21, 0xbe, 0x97, 0xbd, 0xdd, 0x6d, 0xee,
-  0x8c, 0xd6, 0x98, 0x85, 0x5e, 0x27, 0x5b, 0xd2, 0xe1, 0x39, 0x70, 0x10,
-  0x50, 0x0e, 0xca, 0x0d, 0x9c, 0xd2, 0x3f, 0x08, 0x87, 0x33, 0x23, 0xf0,
-  0x82, 0xf2, 0x4d, 0xd3, 0xd5, 0x64, 0xee, 0x5a, 0xf0, 0x0e, 0x4a, 0x3a,
-  0x32, 0x11, 0xd0, 0xd8, 0x05, 0xea, 0x59, 0x95, 0x6f, 0x83, 0xaa, 0xb5,
-  0xfb, 0x56, 0x53, 0x46, 0x11, 0x95, 0x14, 0x05, 0x61, 0xef, 0x6c, 0x1e,
-  0x6c, 0x5e, 0x2b, 0xea, 0xc1, 0xec, 0xe8, 0xf3, 0x83, 0x0f, 0x5f, 0x1f,
-  0x41, 0x13, 0x80, 0x6c, 0xa7, 0x03, 0x9a, 0xd3, 0x6e, 0x9f, 0x2c, 0xb8,
-  0x96, 0xa4, 0x99, 0x31, 0x40, 0xd8, 0xcc, 0x6a, 0x7f, 0xb4, 0x7c, 0xc5,
-  0xa0, 0x60, 0xc6, 0xe6, 0xc5, 0x72, 0x0b, 0x30, 0x6d, 0x2d, 0x51, 0x8f,
-  0x2a, 0x34, 0x08, 0xc0, 0x98, 0x2b, 0x76, 0xbf, 0xd6, 0x8b, 0xd1, 0x1c,
-  0x35, 0x56, 0x60, 0x9f, 0x39, 0x31, 0xa3, 0x7e, 0x96, 0x41, 0xfb, 0x2c,
-  0xae, 0x69, 0xda, 0x92, 0xb5, 0xe9, 0x2b, 0xd8, 0xf4, 0x03, 0xdf, 0xab,
-  0xc6, 0xc4, 0x18, 0xbb, 0x3b, 0x3b, 0x8e, 0xb2, 0x2c, 0xb5, 0x0d, 0x06,
-  0xd2, 0xb2, 0x4a, 0x76, 0xfa, 0xaf, 0x5e, 0x2d, 0x13, 0x84, 0xb6, 0x51,
-  0x50, 0x21, 0xbc, 0x78, 0x72, 0x9b, 0x7d, 0x7a, 0x74, 0x59, 0x9b, 0x11,
-  0x8b, 0x06, 0x95, 0xe3, 0x04, 0x14, 0x58, 0x5b, 0xad, 0x45, 0x3c, 0x3c,
-  0x1c, 0xad, 0x41, 0x1c, 0xac, 0xb0, 0x66, 0x0d, 0x4d, 0xe5, 0x9a, 0xcb,
-  0x5a, 0x05, 0x75, 0x88, 0x3a, 0x83, 0xe6, 0x84, 0x0b, 0xcc, 0x6d, 0x38,
-  0xf6, 0x49, 0x13, 0xe3, 0x19, 0xf0, 0x4b, 0xa6, 0xe8, 0x32, 0x1c, 0x8d,
-  0xaa, 0x04, 0x1f, 0xcf, 0xc8, 0xff, 0x77, 0xfc, 0xe1, 0x6b, 0x76, 0x87,
-  0x18, 0xdb, 0x1e, 0xbe, 0xf4, 0xed, 0x8e, 0xa5, 0xff, 0x91, 0xb9, 0xc7,
-  0x08, 0x13, 0x0a, 0x1c, 0x06, 0xf3, 0xd0, 0xe7, 0x85, 0x94, 0x9e, 0x76,
-  0x75, 0xf4, 0xe2, 0xbe, 0xca, 0x8b, 0xa4, 0xef, 0x29, 0x27, 0x42, 0x3c,
-  0x46, 0x9a, 0xc9, 0xec, 0x41, 0x2d, 0x23, 0xf9, 0x02, 0x5a, 0xd7, 0xc8,
-  0x8c, 0x6d, 0x96, 0xed, 0x5c, 0x36, 0xcf, 0xb1, 0x83, 0x02, 0xdd, 0x24,
-  0xf2, 0x49, 0xfe, 0x0c, 0xce, 0x77, 0x47, 0x13, 0x79, 0x5a, 0x57, 0x5a,
-  0xae, 0xce, 0x36, 0x9d, 0x31, 0x69, 0x56, 0x3d, 0xf5, 0xfd, 0x74, 0xdd,
-  0x90, 0x5c, 0x26, 0xce, 0x97, 0xea, 0xb4, 0xda, 0x60, 0x49, 0x2f, 0xcb,
-  0x7f, 0xbc, 0x9f, 0x2b, 0x7a, 0x48, 0x07, 0x95, 0x6e, 0xaa, 0x62, 0xe2,
-  0x7c, 0x1a, 0xd2, 0xe3, 0x68, 0x20, 0xe4, 0x82, 0xdf, 0xe7, 0x4f, 0xa7,
-  0xf1, 0xcf, 0xf1, 0xfb, 0x3a, 0x35, 0x91, 0x03, 0x40, 0x2a, 0xad, 0x50,
-  0xd3, 0xd9, 0x04, 0x72, 0xb5, 0x65, 0x48, 0x0b, 0x87, 0xe4, 0xc8, 0xdb,
-  0x6a, 0xc9, 0x5a, 0x22, 0x5c, 0x15, 0xe0, 0xad, 0xa3, 0x3d, 0x04, 0x7a,
-  0x14, 0x5c, 0x5e, 0x37, 0xb9, 0xb0, 0xeb, 0x2e, 0x8a, 0x22, 0x23, 0x23,
-  0x15, 0x59, 0xe8, 0x39, 0xdb, 0x0b, 0x3d, 0x7b, 0x8a, 0xaa, 0x85, 0xd4,
-  0x6a, 0x06, 0xd0, 0xc0, 0x74, 0x3e, 0xad, 0xaf, 0x81, 0x00, 0xb4, 0xae,
-  0xa8, 0x50, 0xbd, 0xc2, 0xe7, 0xb9, 0x5d, 0xd2, 0xa7, 0x58, 0x99, 0x82,
-  0x72, 0xdd, 0x9a, 0x8a, 0xf6, 0x0c, 0xac, 0xad, 0x91, 0x13, 0x7e, 0x9b,
-  0x5c, 0xf1, 0xc3, 0x70, 0x02, 0xd5, 0x97, 0xbe, 0xd2, 0x1f, 0xef, 0x62,
-  0x0c, 0x8f, 0x78, 0xe6, 0x3d, 0xef, 0xc9, 0x53, 0x4f, 0x1c, 0xeb, 0xef,
-  0x91, 0xb8, 0x22, 0x0e, 0x9d, 0x27, 0xc8, 0xa2, 0x5b, 0xbd, 0xed, 0x4d,
-  0xf3, 0x6d, 0x01, 0x38, 0x7d, 0x60, 0x99, 0xa1, 0x1c, 0x46, 0x67, 0xb9,
-  0x38, 0x83, 0xec, 0xec, 0xe3, 0x85, 0x90, 0x49, 0xa9, 0x78, 0xf7, 0x6b,
-  0x04, 0xf9, 0x05, 0x41, 0x21, 0xcd, 0x48, 0xb7, 0x60, 0xf3, 0x17, 0xb1,
-  0x6e, 0x4e, 0x8c, 0xc4, 0x37, 0x31, 0x42, 0xee, 0x60, 0xcf, 0x66, 0xc0,
-  0x9c, 0x9d, 0x0e, 0x2f, 0xc8, 0x8d, 0x80, 0xab, 0x4f, 0xed, 0xd1, 0xef,
-  0x8e, 0xce, 0xbf, 0x3a, 0x1d, 0x1e, 0x99, 0xf5, 0x78, 0x7b, 0xf4, 0xd5,
-  0x47, 0x92, 0x5a, 0xb4, 0x3b, 0xd8, 0xf5, 0x4c, 0xd9, 0x31, 0xe2, 0xff,
-  0xa2, 0x72, 0xad, 0x48, 0x92, 0xc3, 0x36, 0x65, 0x3d, 0xa8, 0x67, 0xd3,
-  0xb5, 0x45, 0xc5, 0xe3, 0x82, 0xa3, 0xd3, 0x8c, 0x7d, 0x95, 0x39, 0x72,
-  0x09, 0xf2, 0x4b, 0xdd, 0x61, 0x04, 0xdb, 0xa3, 0xf2, 0x84, 0x30, 0x2f,
-  0xe5, 0x28, 0x31, 0x3f, 0x76, 0xbd, 0xef, 0x9c, 0x9a, 0xb7, 0xec, 0x99,
-  0x96, 0xc3, 0xe7, 0x8a, 0x2a, 0x82, 0x4f, 0x08, 0x9b, 0xf7, 0xd0, 0xea,
-  0xd1, 0xc2, 0xa9, 0x33, 0x2d, 0xf9, 0xd6, 0x44, 0x1d, 0x40, 0x6a, 0x1b,
-  0xf7, 0x78, 0xde, 0xe0, 0x0a, 0x67, 0x83, 0x42, 0x4a, 0x12, 0xd6, 0xbc,
-  0xb9, 0xb9, 0xfe, 0x2a, 0xc1, 0xc8, 0x32, 0xaf, 0x1a, 0x65, 0x0d, 0x6d,
-  0x78, 0x2a, 0xb7, 0xb6, 0xc4, 0xc3, 0x19, 0xb6, 0x2b, 0x3c, 0x5e, 0x9b,
-  0x62, 0x04, 0xdf, 0x61, 0x9c, 0xc2, 0x3d, 0xce, 0x35, 0xfd, 0x94, 0xf1,
-  0x16, 0x33, 0xef, 0x17, 0x58, 0xe1, 0xad, 0x73, 0xbb, 0x5c, 0xf4, 0x5c,
-  0xf0, 0x48, 0xc9, 0xcf, 0xc1, 0x8a, 0x80, 0xa4, 0x25, 0xa1, 0xdf, 0x9d,
-  0x52, 0x25, 0x4e, 0x41, 0xe1, 0xb3, 0x4b, 0x89, 0x01, 0x9e, 0x09, 0xb9,
-  0xbc, 0x0a, 0xa0, 0x6a, 0xb3, 0x12, 0x60, 0x72, 0x39, 0x41, 0x2c, 0x5c,
-  0x05, 0x51, 0x47, 0x4b, 0x8a, 0x90, 0x00, 0x6f, 0xbe, 0xf0, 0xbc, 0x73,
-  0xeb, 0xf8, 0x2f, 0xce, 0xa8, 0x17, 0x38, 0x59, 0x5b, 0x5b, 0x7b, 0x7b,
-  0x74, 0x71, 0x70, 0x7c, 0x72, 0xf4, 0x36, 0x39, 0xfe, 0xf0, 0xee, 0xf4,
-  0xfc, 0xfd, 0xc1, 0x85, 0xc0, 0x31, 0xde, 0x5a, 0x8f, 0x9c, 0xab, 0x9f,
-  0x26, 0x45, 0x82, 0x3c, 0x6f, 0x1d, 0xb6, 0xb0, 0x59, 0xc5, 0x2b, 0xa9,
-  0x8f, 0xce, 0xd3, 0x90, 0xb5, 0xe6, 0x60, 0x4d, 0xeb, 0xc5, 0xb8, 0x7a,
-  0x73, 0xa4, 0x17, 0x6c, 0xdb, 0xd8, 0xfb, 0x40, 0xa7, 0x53, 0xdd, 0x68,
-  0x20, 0x24, 0x5e, 0xd9, 0x94, 0x2d, 0x1f, 0xca, 0x77, 0x22, 0x2d, 0x27,
-  0x93, 0x78, 0x60, 0x4f, 0xf6, 0x8f, 0xb7, 0xb9, 0x50, 0xb5, 0x57, 0x8c,
-  0x40, 0x0b, 0xc9, 0x80, 0x95, 0x83, 0xda, 0xf1, 0x08, 0x74, 0x2e, 0x4b,
-  0xa0, 0x4a, 0xfc, 0x36, 0x2d, 0x2d, 0x0c, 0x56, 0xd4, 0x68, 0x01, 0x0c,
-  0xe3, 0xe1, 0x72, 0x6d, 0xde, 0xfa, 0xe6, 0x5c, 0xce, 0x65, 0x4a, 0x28,
-  0x22, 0x80, 0x83, 0x88, 0xe4, 0xa8, 0x36, 0x2b, 0x65, 0xcf, 0x3a, 0x68,
-  0x97, 0xac, 0xc0, 0xd6, 0xe8, 0x9c, 0x70, 0xd5, 0xfa, 0x4d, 0x6d, 0xda,
-  0x78, 0xbd, 0xd1, 0x98, 0xfa, 0xc7, 0xc2, 0xac, 0x4c, 0x73, 0xb1, 0xb5,
-  0x86, 0xea, 0x3e, 0x77, 0x85, 0x92, 0xd6, 0x59, 0x24, 0xa8, 0xb3, 0xf8,
-  0xf3, 0x6d, 0xaf, 0xa4, 0x23, 0x4e, 0x9b, 0x3b, 0xb7, 0xca, 0x60, 0xdd,
-  0x7f, 0x6b, 0x1e, 0x9a, 0x2c, 0x66, 0xf3, 0x76, 0x15, 0x6f, 0xf6, 0xe5,
-  0xe9, 0x12, 0xb2, 0xd2, 0x06, 0xe5, 0x03, 0x8e, 0x9f, 0x77, 0x32, 0x07,
-  0x3c, 0x0e, 0xec, 0xef, 0x46, 0x43, 0x81, 0x28, 0x23, 0x6b, 0xa3, 0x77,
-  0xdd, 0xba, 0x9c, 0x6d, 0xcd, 0x05, 0x13, 0x32, 0xb4, 0xcf, 0x76, 0x0b,
-  0x79, 0xa6, 0x0e, 0x6b, 0x84, 0xf9, 0xdf, 0x54, 0xfa, 0x2f, 0xda, 0xb2,
-  0xd2, 0xa0, 0x5c, 0x15, 0x61, 0xf0, 0xb1, 0x35, 0x28, 0xff, 0xc5, 0x36,
-  0xa4, 0xc7, 0x97, 0xf4, 0xfa, 0x69, 0x47, 0x75, 0xd5, 0xed, 0x81, 0x48,
-  0x71, 0x23, 0x4f, 0x1e, 0xb4, 0x84, 0x05, 0x71, 0x2a, 0x02, 0x6e, 0x44,
-  0xce, 0x52, 0x10, 0x12, 0x88, 0xa4, 0x44, 0x40, 0x4c, 0xb7, 0xef, 0x02,
-  0x75, 0x19, 0xca, 0x1b, 0xb2, 0xe5, 0xb5, 0x1e, 0xab, 0x97, 0x4a, 0xc7,
-  0x28, 0x32, 0xa1, 0xba, 0x83, 0xd0, 0x2b, 0xd6, 0x34, 0xeb, 0x57, 0x5f,
-  0x52, 0x2c, 0x22, 0xa4, 0x3f, 0xd7, 0x90, 0x87, 0x90, 0x27, 0xa3, 0x3a,
-  0x4b, 0x6b, 0x18, 0x54, 0x48, 0xa8, 0xe1, 0x3b, 0xc3, 0xba, 0x61, 0x1d,
-  0x69, 0x9b, 0x57, 0xa0, 0x0e, 0x22, 0x7a, 0x92, 0xbc, 0xa6, 0x67, 0x89,
-  0x14, 0x47, 0x0f, 0x05, 0x03, 0xe8, 0x6d, 0x2b, 0x1a, 0xe0, 0x30, 0xcd,
-  0x70, 0x8d, 0x79, 0x86, 0x85, 0x9e, 0xd1, 0x03, 0xa9, 0x6a, 0xf8, 0xeb,
-  0xae, 0x96, 0xd0, 0xfa, 0xfc, 0xda, 0x7c, 0x63, 0x3d, 0xb9, 0x22, 0x1b,
-  0x69, 0x64, 0xba, 0x1e, 0x08, 0xd0, 0x09, 0x3f, 0xfe, 0xe6, 0x3c, 0xbd,
-  0x4c, 0xb3, 0xe9, 0x1f, 0xf7, 0x76, 0x86, 0xe9, 0xd5, 0x62, 0x9a, 0xfe,
-  0x2b, 0x5e, 0x7c, 0xf3, 0xec, 0xd9, 0xde, 0xce, 0x67, 0x9f, 0xef, 0xac,
-  0x77, 0xd1, 0x07, 0x8e, 0x93, 0x05, 0x08, 0x1b, 0x70, 0xb2, 0x90, 0xdc,
-  0xc5, 0x77, 0x06, 0xe3, 0xab, 0x1c, 0x46, 0x1d, 0x29, 0x4a, 0x32, 0x07,
-  0x29, 0x5b, 0x93, 0x10, 0x93, 0x52, 0xe6, 0xd3, 0xdc, 0xb8, 0x66, 0x5f,
-  0xff, 0x61, 0x77, 0x9f, 0x45, 0x19, 0x98, 0xdc, 0x70, 0x4f, 0xd0, 0x5c,
-  0xbc, 0xce, 0x0b, 0x73, 0x03, 0x7d, 0x91, 0x34, 0xe9, 0x95, 0xdd, 0xab,
-  0x68, 0x01, 0xab, 0x61, 0x97, 0xb3, 0x41, 0x88, 0x9a, 0x54, 0xab, 0x41,
-  0xb2, 0x09, 0x2e, 0x8c, 0x8d, 0x1a, 0x4a, 0xd6, 0x3c, 0xab, 0x90, 0xb9,
-  0x7a, 0x55, 0xa5, 0x33, 0x4d, 0x3a, 0xa1, 0xf7, 0x09, 0xb6, 0x36, 0x98,
-  0x4f, 0x13, 0xae, 0xaf, 0x2c, 0x7e, 0x8b, 0xdc, 0x6d, 0xb8, 0xe9, 0xbc,
-  0x76, 0x65, 0x2f, 0xf9, 0xba, 0x39, 0x96, 0x6a, 0x61, 0x1b, 0xe4, 0x52,
-  0x59, 0x67, 0x9f, 0xca, 0x3a, 0x46, 0xc5, 0x22, 0x03, 0xd2, 0x6c, 0xa2,
-  0x23, 0x1d, 0xe0, 0xef, 0x60, 0xf5, 0x48, 0x99, 0x10, 0x70, 0x7d, 0xce,
-  0x79, 0xf4, 0xb6, 0x72, 0x14, 0x3b, 0xdf, 0xf2, 0xd6, 0xb8, 0x52, 0x07,
-  0xbe, 0x4c, 0x5e, 0xab, 0x97, 0x68, 0xf7, 0x8b, 0x37, 0xd8, 0x10, 0xbb,
-  0x5f, 0xfc, 0xab, 0xfd, 0xd9, 0x9e, 0xfc, 0x6c, 0xef, 0x8b, 0x7f, 0x1d,
-  0x0c, 0xd0, 0x3f, 0xda, 0x21, 0x1b, 0xfa, 0xeb, 0x0d, 0xe1, 0x4c, 0x4a,
-  0xe5, 0x08, 0xf3, 0xbf, 0xc8, 0x6c, 0xe7, 0x0a, 0xa3, 0x58, 0xeb, 0x75,
-  0xfd, 0xb2, 0x3f, 0xcb, 0x3d, 0x89, 0xa8, 0x5a, 0xb9, 0x95, 0xd7, 0x36,
-  0xcd, 0x1d, 0xe8, 0xab, 0xc8, 0xa4, 0xdb, 0x38, 0x08, 0xda, 0x11, 0x18,
-  0x25, 0x5e, 0xfe, 0x37, 0xda, 0xa9, 0xff, 0xb6, 0x96, 0x48, 0x74, 0x93,
-  0x96, 0xe3, 0x01, 0x01, 0x0f, 0xdd, 0xb6, 0x4c, 0x76, 0xc4, 0xbc, 0xc8,
-  0xd4, 0x32, 0x65, 0x72, 0xd0, 0x1d, 0xe8, 0xd5, 0x4e, 0xfa, 0x93, 0xb0,
-  0x95, 0xf0, 0x82, 0xaf, 0x25, 0xf6, 0x19, 0xce, 0x78, 0x31, 0x3a, 0x46,
-  0x43, 0xd2, 0x01, 0xcf, 0xfe, 0xf1, 0x87, 0x1f, 0x44, 0xa1, 0x32, 0x7f,
-  0x91, 0x9e, 0x5f, 0x1b, 0x59, 0x34, 0x31, 0xe2, 0x6d, 0x86, 0x62, 0x2c,
-  0x52, 0xf0, 0x4a, 0xae, 0xfc, 0x4b, 0x19, 0x29, 0x37, 0x62, 0x96, 0xf6,
-  0x60, 0x78, 0x78, 0x7c, 0x0c, 0xc4, 0x28, 0x26, 0xf5, 0x88, 0xc5, 0x18,
-  0xf6, 0xe6, 0x26, 0x20, 0x1e, 0x0e, 0x96, 0xe8, 0x6f, 0x7d, 0x5a, 0x3b,
-  0x2c, 0x3b, 0x76, 0xbf, 0x69, 0x4c, 0x0d, 0x70, 0x59, 0x4a, 0xec, 0x59,
-  0xd6, 0x72, 0xde, 0xac, 0xf3, 0x83, 0x57, 0xf9, 0xba, 0x04, 0xb1, 0xf8,
-  0x27, 0xeb, 0x8e, 0x04, 0x8b, 0xd7, 0x03, 0x8b, 0xf6, 0x86, 0x55, 0xa7,
-  0xfc, 0xef, 0xd9, 0x9b, 0xdd, 0x9d, 0xf8, 0x13, 0x88, 0xda, 0x12, 0xe7,
-  0xdf, 0x1b, 0x17, 0x10, 0x5c, 0xf5, 0x7c, 0x3e, 0xe1, 0xa7, 0xa5, 0x54,
-  0x34, 0xea, 0x76, 0xbd, 0x59, 0x1f, 0xd1, 0x0d, 0x4b, 0xff, 0x7f, 0x49,
-  0x3f, 0x10, 0xb1, 0x92, 0x67, 0xeb, 0xc5, 0x68, 0x96, 0xb7, 0x3a, 0xbc,
-  0x4d, 0x03, 0xfc, 0x82, 0x06, 0xfc, 0x7d, 0x66, 0x77, 0x47, 0x46, 0xaa,
-  0x1d, 0xeb, 0x7e, 0x1b, 0x97, 0x65, 0x39, 0x4a, 0xab, 0x0d, 0x09, 0xe7,
-  0x68, 0x3f, 0x37, 0x76, 0xf7, 0x9e, 0x3d, 0x7f, 0xb1, 0x31, 0x10, 0x3d,
-  0x0d, 0x22, 0xa2, 0xf1, 0xb9, 0x47, 0xb8, 0x09, 0x4b, 0x99, 0xc1, 0xa8,
-  0x69, 0xe4, 0xea, 0xc7, 0x82, 0xab, 0x24, 0xc5, 0xe8, 0x73, 0x6f, 0xf8,
-  0x6b, 0xff, 0x4a, 0xdf, 0x79, 0x83, 0x4f, 0xfc, 0x6b, 0x3e, 0x79, 0x63,
-  0x47, 0xf8, 0xaf, 0x34, 0x96, 0x37, 0x32, 0x08, 0xb3, 0xae, 0x9a, 0x4f,
-  0x58, 0x6f, 0xad, 0x45, 0xe5, 0x5a, 0x74, 0x71, 0x75, 0x11, 0xd7, 0x30,
-  0x68, 0x20, 0x18, 0xfa, 0x13, 0x8e, 0x7e, 0x40, 0x5b, 0x75, 0xc9, 0x74,
-  0xdb, 0xf7, 0x7d, 0xd3, 0x4a, 0x9f, 0x5a, 0xe9, 0x3b, 0x81, 0x0d, 0xaa,
-  0xc6, 0x3e, 0x2d, 0x44, 0x4f, 0xb2, 0x29, 0xa7, 0xf0, 0xb2, 0x88, 0x2a,
-  0x50, 0x96, 0x00, 0x01, 0x1c, 0x7e, 0x7d, 0xbc, 0x21, 0xc0, 0x1b, 0x36,
-  0x13, 0x7b, 0x31, 0xff, 0xb4, 0x85, 0x18, 0x8e, 0xd3, 0x39, 0x9d, 0xfe,
-  0xb5, 0x44, 0x38, 0x69, 0x53, 0xc2, 0x91, 0xd0, 0x77, 0x39, 0xf5, 0xd9,
-  0x7c, 0x4c, 0x6e, 0x9d, 0x29, 0x79, 0xbc, 0x2b, 0x66, 0x91, 0xf4, 0x9a,
-  0x31, 0xf3, 0x52, 0x0b, 0xa0, 0x04, 0x31, 0x9f, 0xb9, 0xcd, 0x9c, 0xec,
-  0xbf, 0xb3, 0x41, 0x4f, 0x9b, 0xa9, 0x27, 0x8f, 0x9a, 0x5f, 0xb1, 0x3c,
-  0x51, 0x11, 0xb1, 0x3e, 0xd0, 0x62, 0xe0, 0xbc, 0x13, 0x7c, 0xe9, 0x81,
-  0xec, 0xfd, 0x51, 0x26, 0xf9, 0x96, 0xec, 0x36, 0x61, 0xc5, 0x90, 0xe4,
-  0xe7, 0x6b, 0x5b, 0x03, 0xef, 0x8b, 0x04, 0xbc, 0xd2, 0xfc, 0x96, 0xc4,
-  0x1d, 0x5b, 0x35, 0xe9, 0xf1, 0x92, 0x98, 0x07, 0x36, 0x04, 0xe6, 0xa1,
-  0x71, 0x44, 0x31, 0x10, 0xbe, 0x4c, 0x0c, 0x74, 0xf4, 0x20, 0xce, 0x06,
-  0x6a, 0x61, 0xe3, 0xcf, 0x38, 0x04, 0xaf, 0x69, 0x19, 0xf0, 0xeb, 0x2f,
-  0x36, 0xd6, 0x6c, 0x11, 0x28, 0xab, 0xb9, 0x77, 0x02, 0xc8, 0xbc, 0x41,
-  0xfd, 0xf1, 0x78, 0x04, 0x09, 0xac, 0x8d, 0x11, 0x21, 0x0b, 0x0a, 0x42,
-  0x18, 0x6d, 0x6a, 0x4a, 0x39, 0xcb, 0x2d, 0x07, 0x35, 0x37, 0x9e, 0x11,
-  0xa7, 0x0d, 0x69, 0x8f, 0x1b, 0x84, 0x56, 0xc5, 0x7b, 0x1b, 0x96, 0x1c,
-  0x15, 0x3e, 0x53, 0x08, 0xbc, 0x2a, 0xd3, 0xca, 0xae, 0x6b, 0x92, 0x5d,
-  0xef, 0xb4, 0x79, 0x7f, 0x60, 0xb5, 0xa7, 0x3c, 0xb8, 0x7c, 0x45, 0xe6,
-  0x28, 0x0a, 0x8e, 0xc8, 0x3b, 0x4a, 0x04, 0x96, 0x8f, 0xbe, 0xa1, 0xe9,
-  0xde, 0x1d, 0x5c, 0xe5, 0x97, 0x3c, 0x19, 0x46, 0x44, 0x5e, 0x65, 0xdb,
-  0xe6, 0x9f, 0x3d, 0xf3, 0xf3, 0x3d, 0xd2, 0xca, 0xe8, 0x2f, 0xcf, 0x80,
-  0xc7, 0xf2, 0xef, 0x7e, 0xef, 0x6c, 0xd8, 0x73, 0x41, 0x7f, 0xc9, 0xed,
-  0x9d, 0x2f, 0x51, 0x1d, 0xe9, 0x25, 0xb6, 0x39, 0x0d, 0x10, 0x59, 0x72,
-  0xaa, 0x6a, 0xfa, 0xa0, 0x12, 0x32, 0xb4, 0xc8, 0x24, 0x5d, 0x50, 0x7a,
-  0x8a, 0x05, 0x8f, 0x08, 0x90, 0x42, 0x14, 0x75, 0xd2, 0xbb, 0x73, 0x71,
-  0xcf, 0x50, 0x3a, 0x0f, 0x6e, 0xd6, 0xec, 0x6e, 0xab, 0xe7, 0x23, 0x6d,
-  0x8d, 0x78, 0xbf, 0xa5, 0xe4, 0x78, 0x22, 0x10, 0x71, 0xa9, 0x95, 0xf4,
-  0xf9, 0x4d, 0x29, 0x98, 0xe8, 0x25, 0x0d, 0x63, 0x99, 0xf3, 0xee, 0x0a,
-  0xb6, 0x8b, 0x0e, 0x32, 0x90, 0x2f, 0xaf, 0x9b, 0x2d, 0xfa, 0x4c, 0x36,
-  0xad, 0x61, 0xab, 0x4b, 0xb5, 0x51, 0xfd, 0xaa, 0x00, 0x0f, 0xf8, 0x43,
-  0x1b, 0xfe, 0xd9, 0x2f, 0xc7, 0x4d, 0x66, 0x6c, 0x5d, 0x22, 0x4c, 0x9b,
-  0xb1, 0x9c, 0x3b, 0x9a, 0x31, 0x27, 0x31, 0xb6, 0xf0, 0xb4, 0xcf, 0xb7,
-  0xa7, 0xa8, 0x44, 0xfd, 0x77, 0x83, 0xe4, 0x04, 0x88, 0xf1, 0x3a, 0x65,
-  0x36, 0x1e, 0xbd, 0x61, 0x75, 0x37, 0x98, 0xad, 0x53, 0x2b, 0x57, 0x24,
-  0xbd, 0x47, 0xcc, 0x16, 0xba, 0xa5, 0x50, 0x3e, 0xd0, 0x19, 0x9d, 0xac,
-  0x5f, 0x88, 0x3e, 0xd2, 0x83, 0x2f, 0xdc, 0x3e, 0x07, 0x9f, 0x3f, 0xfb,
-  0xfd, 0x90, 0xc7, 0x65, 0x37, 0xac, 0xd7, 0x08, 0x83, 0xb6, 0x44, 0x01,
-  0xf5, 0xc4, 0xba, 0x3d, 0x04, 0x0c, 0xa9, 0xcc, 0xd8, 0xe9, 0x42, 0x14,
-  0x0b, 0x44, 0x0a, 0x84, 0x98, 0xb0, 0x69, 0x0d, 0xbb, 0x8c, 0x4a, 0x41,
-  0xd2, 0x36, 0x5a, 0x87, 0xdd, 0x38, 0xcd, 0xac, 0x71, 0xcd, 0x6b, 0x55,
-  0x5a, 0xb8, 0x39, 0x7c, 0x31, 0xac, 0x6e, 0xb8, 0x70, 0x1d, 0x75, 0x92,
-  0xfa, 0x95, 0xde, 0x9a, 0xbf, 0x90, 0x72, 0x36, 0xaa, 0xcc, 0xaa, 0x67,
-  0x15, 0x5f, 0x0d, 0x8c, 0x11, 0xf2, 0xea, 0x62, 0x7e, 0x73, 0xf1, 0xfe,
-  0x24, 0x51, 0x56, 0xa3, 0x4b, 0xa7, 0x2a, 0x2a, 0x32, 0x13, 0x43, 0x14,
-  0xcf, 0x08, 0xeb, 0x43, 0xf2, 0x14, 0xdf, 0x72, 0x3c, 0xb7, 0x94, 0xf0,
-  0x9e, 0xd0, 0xe4, 0xb4, 0x8e, 0xac, 0xf7, 0x04, 0xbf, 0xba, 0xc6, 0x5c,
-  0x6b, 0x1b, 0x34, 0x05, 0x1b, 0xbd, 0x64, 0x83, 0xba, 0x4a, 0xbf, 0xd8,
-  0xc0, 0x7c, 0xe2, 0xc7, 0xde, 0xf4, 0x6d, 0x0c, 0x22, 0xa7, 0x90, 0x9e,
-  0x79, 0xf3, 0x65, 0x6b, 0x96, 0xf0, 0x73, 0x6d, 0xea, 0x0d, 0xe7, 0x8b,
-  0x04, 0x3a, 0xb7, 0xbe, 0xeb, 0xb5, 0xff, 0xe6, 0xd0, 0xb4, 0xc2, 0x75,
-  0x37, 0x1d, 0xcc, 0x75, 0x6c, 0x7f, 0x96, 0x23, 0xf9, 0x35, 0x68, 0xe8,
-  0xf1, 0x53, 0x7c, 0xa1, 0xa2, 0xc8, 0x42, 0x40, 0x59, 0xba, 0xf1, 0x16,
-  0x50, 0xc9, 0x6b, 0x56, 0x33, 0x67, 0xbb, 0xef, 0xae, 0x84, 0x97, 0x01,
-  0x32, 0x67, 0x77, 0x80, 0x64, 0x48, 0x47, 0x8e, 0x6e, 0x1b, 0xb0, 0xc6,
-  0xfb, 0x3a, 0x26, 0x74, 0xdd, 0xa2, 0x72, 0xd5, 0xa4, 0xd7, 0x59, 0x8e,
-  0xc9, 0xae, 0x79, 0x3e, 0x46, 0x11, 0xfb, 0x37, 0x5f, 0x4e, 0xca, 0x2b,
-  0x92, 0x5c, 0x3d, 0x73, 0xd0, 0xe8, 0x4f, 0x00, 0x92, 0xf7, 0xe4, 0xa3,
-  0xdc, 0x61, 0x9c, 0x15, 0xd6, 0xe2, 0xf5, 0xdf, 0x4b, 0x20, 0xaa, 0xef,
-  0xc8, 0x15, 0x3a, 0x96, 0xb6, 0x6d, 0xd3, 0xbc, 0x1e, 0xa6, 0x7d, 0xfb,
-  0x0b, 0xff, 0x5b, 0x3a, 0x39, 0xa9, 0xb4, 0xcc, 0xf5, 0x4f, 0xa5, 0x40,
-  0xec, 0xf4, 0xc1, 0x56, 0x7f, 0x82, 0x83, 0x8b, 0xf8, 0xcd, 0xf9, 0xde,
-  0x9a, 0x4a, 0x86, 0xde, 0xc6, 0x97, 0x1b, 0x9c, 0x23, 0xb0, 0xf1, 0x7a,
-  0x03, 0x12, 0x8c, 0xe4, 0xd2, 0x6c, 0x94, 0x21, 0x8f, 0x4c, 0x2e, 0xa7,
-  0x0d, 0xbe, 0x15, 0xfb, 0xac, 0x3b, 0x08, 0x8b, 0xa3, 0x3b, 0x20, 0xb8,
-  0x96, 0x9d, 0x19, 0xe9, 0x83, 0x27, 0xe1, 0x26, 0x40, 0x9d, 0x11, 0xf4,
-  0x8a, 0xa8, 0x88, 0x47, 0x0d, 0x03, 0x65, 0xe4, 0xd2, 0x85, 0x5a, 0x06,
-  0xd2, 0x13, 0xe2, 0x01, 0x12, 0x37, 0xe7, 0xa2, 0x98, 0x53, 0x9a, 0xfb,
-  0xb8, 0x81, 0xb7, 0x85, 0xcf, 0xd2, 0x20, 0xf9, 0x58, 0x4c, 0xb8, 0x68,
-  0x3a, 0x19, 0xcb, 0x79, 0x35, 0x5e, 0xcc, 0xc8, 0x55, 0x31, 0x26, 0x07,
-  0x19, 0x2e, 0x1e, 0x56, 0x0f, 0x5a, 0xe1, 0x79, 0xbf, 0xc3, 0xec, 0x1c,
-  0x61, 0x87, 0xb9, 0x7c, 0x17, 0x50, 0x14, 0x02, 0x60, 0x89, 0x43, 0x1c,
-  0x5a, 0x81, 0x25, 0x3f, 0x11, 0x01, 0x44, 0x91, 0xc1, 0xa3, 0x77, 0x47,
-  0xe7, 0xe7, 0x47, 0xe7, 0x34, 0xdf, 0x07, 0x9d, 0x32, 0x5b, 0x4a, 0x82,
-  0xec, 0x42, 0x8d, 0x0a, 0xfb, 0xf5, 0x3d, 0x35, 0x9a, 0x95, 0x44, 0xa2,
-  0x50, 0x4a, 0x51, 0xc1, 0x82, 0x60, 0xba, 0x1f, 0x2e, 0x77, 0xe0, 0xbb,
-  0x17, 0x01, 0xfb, 0xb6, 0x61, 0x03, 0xc0, 0xa0, 0xe0, 0x80, 0x6c, 0xe9,
-  0x16, 0xae, 0x85, 0x4a, 0x18, 0xf0, 0x17, 0x9a, 0x5c, 0x7f, 0x9d, 0xb5,
-  0xd4, 0xd4, 0x81, 0x20, 0x75, 0x33, 0x09, 0xa6, 0x4f, 0xad, 0x7f, 0x02,
-  0x43, 0xbe, 0xa4, 0x33, 0x4a, 0xb6, 0x13, 0x26, 0xa3, 0x6e, 0x16, 0xf3,
-  0x7c, 0x62, 0xbd, 0xbd, 0xe6, 0xe7, 0x46, 0xfd, 0x4b, 0xf8, 0x94, 0xd7,
-  0x8a, 0x75, 0x41, 0x54, 0x53, 0x9d, 0x11, 0xbe, 0xb7, 0xad, 0x53, 0x84,
-  0x3a, 0x41, 0xe2, 0x1b, 0x83, 0xc6, 0x94, 0xd8, 0xbc, 0x9d, 0x26, 0x2e,
-  0x7b, 0x3f, 0x83, 0x97, 0x91, 0xa4, 0x85, 0xc2, 0x6f, 0x7c, 0xc9, 0x40,
-  0xbe, 0xac, 0x99, 0xc3, 0xbb, 0xbb, 0xa2, 0xb5, 0xe7, 0xc8, 0x0e, 0xad,
-  0xf6, 0x93, 0x1f, 0xeb, 0x7c, 0xfc, 0xb3, 0xbb, 0x3c, 0x90, 0xfe, 0xd3,
-  0xe6, 0xa3, 0xc2, 0xd4, 0xc9, 0x44, 0x89, 0x31, 0xcc, 0x59, 0xd9, 0x1f,
-  0x87, 0x47, 0xe7, 0xc9, 0xc1, 0xd7, 0xc4, 0xe8, 0xfd, 0x0f, 0x2e, 0x30,
-  0x3d, 0x27, 0xb7, 0xc3, 0x9a, 0x90, 0x25, 0x08, 0x45, 0x49, 0xa6, 0xae,
-  0x70, 0xa9, 0x79, 0x77, 0xd8, 0x06, 0xb8, 0x71, 0xaf, 0x3c, 0x3e, 0x89,
-  0xd6, 0x1a, 0x92, 0xbb, 0xf0, 0x91, 0x55, 0x7c, 0xca, 0x1a, 0xd2, 0x21,
-  0xf3, 0x57, 0x91, 0xc9, 0x8d, 0x38, 0x24, 0xa1, 0x6b, 0x23, 0xbd, 0xaf,
-  0x03, 0xb3, 0x93, 0x57, 0xe9, 0x20, 0xd9, 0x78, 0x5f, 0xfe, 0xdd, 0x28,
-  0x03, 0xe9, 0xf6, 0xb3, 0xc1, 0x4e, 0xb2, 0xf9, 0x7d, 0x5e, 0xbc, 0x7a,
-  0xf1, 0xe7, 0xe4, 0x78, 0x6b, 0xa3, 0x05, 0xe6, 0xe7, 0x92, 0x22, 0xa3,
-  0xb4, 0xb8, 0xb1, 0x4b, 0x76, 0x8a, 0x93, 0xcd, 0xa0, 0x3a, 0x71, 0x3e,
-  0xd4, 0x4c, 0xe7, 0xbf, 0xb4, 0x45, 0xe4, 0x70, 0x4a, 0x5e, 0x40, 0xf2,
-  0x9d, 0x2d, 0xdd, 0x4e, 0x56, 0xbe, 0x79, 0x6a, 0x42, 0x53, 0xf7, 0xea,
-  0x45, 0xd0, 0xc4, 0x73, 0xdb, 0xc6, 0x47, 0x6e, 0xe3, 0x17, 0x36, 0xb1,
-  0x37, 0xd8, 0xd9, 0x4b, 0x36, 0x4f, 0x87, 0xdb, 0x7b, 0xb6, 0x85, 0xb0,
-  0x89, 0x3d, 0x34, 0x41, 0x0f, 0xb5, 0x5f, 0x7e, 0x4e, 0xdf, 0xff, 0x31,
-  0x2b, 0x7e, 0x4e, 0x36, 0x7f, 0xd8, 0xdd, 0x35, 0x0d, 0xfc, 0x39, 0x39,
-  0x38, 0xfe, 0x21, 0x79, 0x3e, 0x30, 0x8d, 0x7d, 0x48, 0x6f, 0xa5, 0x39,
-  0x61, 0x25, 0x1e, 0xa2, 0x11, 0xf3, 0xfb, 0xa0, 0x8d, 0x17, 0x9d, 0x36,
-  0x4e, 0x8c, 0x5d, 0x78, 0x6f, 0xae, 0x95, 0x9d, 0xc1, 0xb3, 0xbd, 0x24,
-  0x7f, 0xf1, 0xf9, 0x4b, 0x6d, 0x48, 0xda, 0xc0, 0xef, 0xdb, 0xde, 0x4a,
-  0x66, 0x3e, 0x31, 0xaa, 0xce, 0xd1, 0xbd, 0x11, 0x68, 0x10, 0x11, 0x15,
-  0x79, 0x0a, 0xaf, 0xd3, 0x6a, 0x22, 0xdb, 0x8d, 0x6a, 0x8d, 0x98, 0x95,
-  0x12, 0x4a, 0xf8, 0x0c, 0x6e, 0x4b, 0x73, 0x71, 0xee, 0x07, 0xdd, 0x21,
-  0xdb, 0x54, 0x1f, 0xfd, 0x73, 0xf2, 0x7e, 0x78, 0x7c, 0x64, 0x46, 0xb4,
-  0x63, 0xba, 0xe6, 0xe6, 0x90, 0x3b, 0x84, 0x5f, 0x61, 0x72, 0x5f, 0x81,
-  0x6d, 0x56, 0xda, 0x50, 0x9d, 0x9b, 0x81, 0xac, 0x66, 0xd3, 0x99, 0x8b,
-  0xbb, 0xc6, 0x77, 0x09, 0x92, 0xd2, 0x3f, 0xb8, 0x22, 0x13, 0x82, 0xaf,
-  0x5a, 0x7c, 0xfa, 0xdb, 0xb2, 0x30, 0xc7, 0xa4, 0x2a, 0x2b, 0x42, 0x4e,
-  0x6d, 0xb4, 0xb4, 0x85, 0x6f, 0xdf, 0x1e, 0x71, 0x76, 0xfc, 0xfb, 0xb4,
-  0x30, 0x32, 0x92, 0x18, 0xae, 0xea, 0x1b, 0x8a, 0xff, 0x73, 0x38, 0x87,
-  0xdf, 0x3f, 0x79, 0x28, 0xee, 0xcd, 0x3a, 0x7e, 0x36, 0xd8, 0x25, 0xc8,
-  0x36, 0x59, 0xbd, 0xef, 0xde, 0x9b, 0x7f, 0xef, 0x3e, 0xdf, 0x48, 0xe8,
-  0x57, 0x6d, 0x0b, 0x5e, 0xcf, 0xeb, 0xda, 0xe1, 0xe9, 0xe9, 0xb7, 0xc7,
-  0x0c, 0x00, 0x39, 0x14, 0xb7, 0x2a, 0x29, 0x57, 0xd6, 0x2a, 0x66, 0xe9,
-  0x6a, 0xac, 0x37, 0x97, 0xad, 0x84, 0x60, 0xdc, 0x4d, 0x96, 0xcd, 0x09,
-  0x8d, 0xd0, 0x74, 0x24, 0x42, 0x23, 0x32, 0xda, 0x62, 0x9b, 0x48, 0xfd,
-  0xe9, 0x70, 0x71, 0x36, 0xb5, 0x75, 0xe1, 0x8e, 0x1e, 0x2c, 0x03, 0x47,
-  0xea, 0x4a, 0xca, 0xa2, 0x8b, 0x36, 0x5b, 0x41, 0x5d, 0xd0, 0x58, 0x61,
-  0xaa, 0x6a, 0x23, 0xb6, 0xef, 0xc6, 0xd0, 0x68, 0xf7, 0xdc, 0xe9, 0x7d,
-  0xf1, 0xda, 0x6e, 0x78, 0x24, 0xf1, 0xd0, 0x68, 0x91, 0xae, 0xc3, 0x10,
-  0x35, 0x32, 0x10, 0x04, 0x38, 0x2f, 0xb2, 0x19, 0x15, 0xbf, 0x33, 0xc0,
-  0xf3, 0x3e, 0x1c, 0xbc, 0x3f, 0x7a, 0xf3, 0xdd, 0xc1, 0xc9, 0xc7, 0x23,
-  0xf3, 0x4a, 0x6e, 0x3e, 0xb6, 0xe9, 0x20, 0x7c, 0xe8, 0xe3, 0x2c, 0x1f,
-  0x97, 0x53, 0x8a, 0x32, 0x6d, 0xfc, 0x79, 0x63, 0x8d, 0xe1, 0xe5, 0xc9,
-  0x3a, 0xbd, 0xb5, 0xcb, 0xaf, 0x99, 0x7d, 0x41, 0xff, 0xda, 0xe3, 0x7f,
-  0xed, 0xfd, 0x79, 0x7d, 0xab, 0x35, 0xe8, 0xc0, 0x4a, 0xa6, 0xfd, 0x72,
-  0xc7, 0x35, 0x03, 0x51, 0x3f, 0x19, 0xb9, 0x1b, 0x3c, 0x2b, 0xeb, 0x1a,
-  0xa3, 0xd1, 0xbb, 0x8d, 0x9e, 0xdd, 0x1c, 0x3d, 0xf8, 0x36, 0xf8, 0x3a,
-  0xbd, 0xf4, 0x06, 0x0a, 0xc6, 0xfa, 0x56, 0xcf, 0xaa, 0x1c, 0x08, 0x95,
-  0x53, 0x1b, 0xda, 0x04, 0xb3, 0x42, 0x26, 0x9b, 0xeb, 0xfc, 0x97, 0x37,
-  0x6f, 0x0f, 0x2e, 0x8e, 0xe8, 0x05, 0xfd, 0xbc, 0xa0, 0x11, 0x6d, 0x1a,
-  0x05, 0xf5, 0x67, 0x53, 0x42, 0xd3, 0x6f, 0x68, 0x40, 0xeb, 0x5b, 0x1c,
-  0xcb, 0x40, 0x50, 0xbd, 0xd3, 0xaf, 0xb2, 0x50, 0xe0, 0xb6, 0xcb, 0x38,
-  0xaf, 0x15, 0xb1, 0xb2, 0xb9, 0xce, 0xbf, 0x5b, 0xb7, 0x1e, 0x5c, 0xa9,
-  0x75, 0x22, 0xe1, 0xca, 0x09, 0x92, 0x2c, 0x82, 0xcc, 0x5a, 0x86, 0xa4,
-  0xb9, 0xf5, 0x91, 0x60, 0x05, 0x7b, 0x9c, 0x3c, 0xd6, 0x7c, 0xbb, 0xf0,
-  0x92, 0xd2, 0x4e, 0x3e, 0xa6, 0xb2, 0xdc, 0xdd, 0x7b, 0xf6, 0x67, 0xcc,
-  0xe7, 0x9b, 0xf5, 0x6d, 0x73, 0x37, 0xac, 0xff, 0x99, 0x3e, 0x9d, 0x37,
-  0x5e, 0xed, 0x37, 0xf9, 0x0c, 0xd9, 0x53, 0xb2, 0xa3, 0x18, 0x2e, 0x43,
-  0xab, 0xee, 0x11, 0xf5, 0x60, 0x42, 0xef, 0x38, 0x4b, 0x4c, 0xa9, 0x6d,
-  0x14, 0x3c, 0x80, 0xf5, 0x42, 0xd1, 0x2a, 0xd4, 0xe3, 0x60, 0xa7, 0x2e,
-  0x3e, 0xe7, 0xdf, 0x1f, 0x3d, 0x7e, 0x97, 0xc7, 0x28, 0x54, 0x40, 0xf4,
-  0xcd, 0xd9, 0x83, 0x26, 0x92, 0xe1, 0x5b, 0xd0, 0xc9, 0x79, 0xcd, 0x02,
-  0xcd, 0x78, 0x24, 0xbe, 0x1d, 0x35, 0x46, 0xa0, 0x13, 0x18, 0xd1, 0xf2,
-  0x00, 0x45, 0x09, 0x68, 0x03, 0x1f, 0x64, 0xa1, 0x77, 0x76, 0x3a, 0xca,
-  0x8d, 0x26, 0x6c, 0x53, 0x63, 0x3c, 0xab, 0xdc, 0x4e, 0xbd, 0x1e, 0xbf,
-  0xdc, 0x23, 0x59, 0xa2, 0x8b, 0x92, 0xe7, 0xb2, 0xb6, 0x3e, 0x24, 0x44,
-  0x1b, 0xe5, 0xd9, 0xf6, 0x3a, 0x75, 0xf2, 0xd1, 0x30, 0x0c, 0x36, 0xe9,
-  0xd9, 0x3e, 0x36, 0xa2, 0xa6, 0xc8, 0xaa, 0x95, 0x00, 0x8b, 0x48, 0x30,
-  0x0a, 0x43, 0xf4, 0x39, 0xe8, 0xcd, 0x3b, 0x83, 0xc1, 0xc0, 0x9a, 0x3b,
-  0x08, 0xa4, 0x49, 0x0c, 0x8a, 0xe8, 0xeb, 0x7c, 0x5e, 0x60, 0xcc, 0xf1,
-  0x26, 0x94, 0x79, 0x28, 0xd4, 0x5b, 0x02, 0xbc, 0x11, 0x3f, 0x81, 0x3d,
-  0x1a, 0x9e, 0x8f, 0x63, 0x43, 0x3e, 0xbb, 0xa1, 0xfc, 0x0b, 0x37, 0xb1,
-  0x45, 0x58, 0xd1, 0x37, 0xf6, 0x3d, 0x4a, 0x15, 0x1c, 0x2b, 0xa7, 0x4a,
-  0x3b, 0x17, 0xb4, 0x83, 0x09, 0x40, 0xce, 0xc5, 0xda, 0xb0, 0x24, 0x3c,
-  0x69, 0xd2, 0x95, 0x1e, 0x63, 0x0f, 0x48, 0xc8, 0x95, 0x77, 0xe0, 0x33,
-  0x00, 0x6b, 0x02, 0x61, 0x4f, 0x0a, 0x76, 0x0f, 0xe8, 0x0d, 0x32, 0xb7,
-  0x6a, 0xb3, 0xb4, 0x23, 0x34, 0xd1, 0x64, 0x33, 0x43, 0xf7, 0xef, 0x39,
-  0x2a, 0x69, 0x5a, 0x49, 0x4d, 0xe2, 0x31, 0x6a, 0x5b, 0x09, 0x3a, 0x52,
-  0x1d, 0xbc, 0x73, 0x57, 0x11, 0xda, 0xac, 0xcf, 0xdc, 0x2c, 0x9a, 0x88,
-  0xa8, 0xd2, 0x43, 0xd8, 0x39, 0x56, 0xc5, 0xcb, 0xc7, 0xda, 0xa2, 0x0d,
-  0x96, 0x77, 0xe6, 0xc6, 0xdd, 0xca, 0x6d, 0xd1, 0x65, 0x66, 0x94, 0xbd,
-  0xcb, 0xb6, 0x62, 0x83, 0xc8, 0xbd, 0x24, 0xbd, 0x33, 0x57, 0x4f, 0x91,
-  0x11, 0x3e, 0x13, 0x48, 0x07, 0x78, 0x65, 0x4e, 0x3c, 0x3f, 0xa3, 0x23,
-  0xcb, 0x96, 0x12, 0x49, 0xa9, 0x2b, 0x92, 0x94, 0x6c, 0xb2, 0xa1, 0xc1,
-  0xf4, 0xc8, 0xea, 0xd0, 0x23, 0x05, 0xbc, 0x9c, 0x11, 0x4b, 0xa9, 0x68,
-  0xea, 0x6a, 0x9e, 0x53, 0xcf, 0x8d, 0x88, 0x1e, 0xca, 0xbe, 0xc9, 0x81,
-  0x4b, 0x24, 0x3f, 0x07, 0xe3, 0x2a, 0x74, 0xb6, 0x50, 0x2a, 0xc4, 0x7e,
-  0xc4, 0xc6, 0xa7, 0xc5, 0xfd, 0x44, 0xf0, 0xde, 0xa2, 0x0f, 0xce, 0x0a,
-  0x0d, 0x09, 0x8b, 0x79, 0x75, 0x75, 0xc5, 0x56, 0x5b, 0xd2, 0x1d, 0x5a,
-  0x7c, 0x93, 0x9d, 0xd0, 0xac, 0x10, 0x0a, 0xfa, 0x61, 0xd9, 0x6c, 0x5e,
-  0xd8, 0x42, 0x7a, 0xe2, 0x75, 0x69, 0x6d, 0x66, 0x8d, 0x49, 0xf2, 0xba,
-  0x35, 0x36, 0xe9, 0x0a, 0x09, 0x1a, 0xed, 0x18, 0xf2, 0xe9, 0xf9, 0x1a,
-  0x4a, 0x07, 0x14, 0x8e, 0x90, 0x41, 0x17, 0x1d, 0x44, 0x7b, 0x0e, 0x81,
-  0xe2, 0x90, 0xa8, 0x77, 0x16, 0x6a, 0x85, 0xed, 0x9a, 0x8c, 0x52, 0x67,
-  0x72, 0xad, 0x25, 0x2d, 0x6f, 0x2f, 0x95, 0x5e, 0x3b, 0x2e, 0x44, 0x0e,
-  0x95, 0xb7, 0x99, 0x63, 0x7a, 0x74, 0x0e, 0x47, 0xc7, 0x36, 0x2c, 0xa7,
-  0xdf, 0x0a, 0x93, 0x4e, 0x80, 0xd7, 0xca, 0x2b, 0x0c, 0xb2, 0x33, 0x2b,
-  0x83, 0xc4, 0x6b, 0x92, 0x5d, 0x25, 0x65, 0x8b, 0x8c, 0x1a, 0x7d, 0x93,
-  0xb8, 0xb5, 0xb6, 0xc8, 0x7b, 0x84, 0xd9, 0x5a, 0x3c, 0xd3, 0x84, 0x8b,
-  0x07, 0x69, 0x05, 0x04, 0x8b, 0xd1, 0x73, 0xf1, 0x5f, 0x1d, 0xe5, 0xba,
-  0x5d, 0xa4, 0x75, 0xa4, 0x79, 0x8e, 0x64, 0x13, 0x60, 0x0f, 0x90, 0x42,
-  0x67, 0x43, 0xf8, 0x17, 0xb2, 0x4e, 0xd8, 0xc9, 0xf0, 0xa0, 0x75, 0x04,
-  0x69, 0x70, 0xe6, 0x2c, 0x44, 0x03, 0x79, 0x28, 0x44, 0xcd, 0x4b, 0xb8,
-  0x82, 0xfe, 0x68, 0x8d, 0xf3, 0x8d, 0xfa, 0x63, 0x95, 0xe8, 0xab, 0x09,
-  0x0b, 0x46, 0xad, 0x83, 0xf9, 0xd8, 0x39, 0x3d, 0x3b, 0x3f, 0xfd, 0xfa,
-  0xfc, 0x68, 0x38, 0x4c, 0xde, 0x1f, 0x5d, 0xb0, 0xad, 0x7f, 0xc1, 0xd0,
-  0xbb, 0x2b, 0x54, 0x8e, 0x46, 0xac, 0x41, 0xc9, 0x98, 0x14, 0x72, 0xa2,
-  0x8e, 0x04, 0xe4, 0x3c, 0x51, 0x51, 0x64, 0xdc, 0x8e, 0x6c, 0xc4, 0x4f,
-  0x05, 0xb1, 0x77, 0x0d, 0x6f, 0x3f, 0x30, 0x4d, 0x08, 0x48, 0x5a, 0xe7,
-  0xb9, 0x73, 0xa3, 0x42, 0x31, 0x66, 0x94, 0x93, 0xcd, 0x39, 0x74, 0x2e,
-  0x74, 0xba, 0xb2, 0xcd, 0x9f, 0x18, 0xde, 0x1f, 0xcd, 0x6c, 0x4a, 0x19,
-  0xb8, 0x3f, 0x1a, 0xe3, 0x57, 0x36, 0xc5, 0x1f, 0x93, 0x1f, 0x4c, 0x9b,
-  0x13, 0x63, 0xbc, 0x4a, 0xcd, 0xdb, 0x21, 0x8a, 0xdd, 0x3a, 0xae, 0xe5,
-  0xdc, 0x2b, 0xe6, 0x9c, 0x70, 0x8a, 0x61, 0xf5, 0x48, 0x9d, 0x49, 0x70,
-  0xc5, 0x30, 0x7f, 0x91, 0x60, 0xea, 0xec, 0x97, 0xa5, 0xd6, 0x58, 0x92,
-  0x9c, 0x64, 0x97, 0x28, 0xc3, 0x82, 0xcf, 0x99, 0xe6, 0x76, 0x88, 0x94,
-  0x7a, 0xf7, 0x3d, 0xfd, 0x68, 0x27, 0x79, 0xf6, 0xf9, 0xcb, 0x9d, 0xcf,
-  0xf9, 0xaf, 0xfa, 0xdf, 0x57, 0xcf, 0x77, 0x84, 0x1d, 0xdf, 0xfc, 0xeb,
-  0xf9, 0xfe, 0xf3, 0xdd, 0x7d, 0xe2, 0x69, 0xdc, 0xd9, 0xdf, 0x31, 0xff,
-  0xff, 0xb9, 0xfc, 0x84, 0xc8, 0x28, 0x5f, 0xed, 0x7d, 0xfe, 0x19, 0xd0,
-  0x30, 0xb4, 0x3f, 0xa6, 0xe6, 0x23, 0xfd, 0xa6, 0xec, 0x83, 0x2e, 0x0a,
-  0x9a, 0xcf, 0x1f, 0xdb, 0x9e, 0x48, 0x0a, 0xaf, 0x53, 0x15, 0x6c, 0x1a,
-  0xb8, 0xad, 0x01, 0xaa, 0x5e, 0x55, 0x66, 0xb0, 0xf1, 0x2b, 0x17, 0xda,
-  0x61, 0xc8, 0xdb, 0x5c, 0x48, 0x0f, 0xfc, 0x6b, 0xad, 0x77, 0x18, 0x68,
-  0xee, 0x51, 0xbd, 0xfd, 0xd2, 0x4f, 0x6b, 0x22, 0xf9, 0x1a, 0x08, 0xdc,
-  0x64, 0xa9, 0xe4, 0xbd, 0xb1, 0x96, 0x6b, 0xf3, 0x0b, 0x4b, 0x77, 0xaa,
-  0x31, 0xff, 0xd2, 0xef, 0xb1, 0xe7, 0x8a, 0xde, 0x92, 0xdd, 0x90, 0x84,
-  0x5f, 0xb3, 0xb9, 0x08, 0x91, 0x6f, 0xb5, 0x36, 0xcf, 0x9a, 0x5b, 0x7e,
-  0x37, 0x53, 0x5e, 0x55, 0x65, 0x9b, 0xc3, 0xc5, 0x75, 0x95, 0x23, 0x43,
-  0x0e, 0x9a, 0xfb, 0x38, 0xf7, 0xdb, 0x7b, 0x4a, 0x73, 0x6e, 0x44, 0xd8,
-  0xc1, 0x76, 0xe5, 0xfa, 0xde, 0xe2, 0xe4, 0x0c, 0x6c, 0xb3, 0x85, 0x33,
-  0x95, 0x20, 0xd4, 0xd6, 0x34, 0xc6, 0xab, 0x76, 0xcb, 0xf6, 0xf9, 0x0d,
-  0xd1, 0x39, 0x6d, 0x5e, 0x1c, 0xea, 0x95, 0xe2, 0x8a, 0xe7, 0xe7, 0x75,
-  0x67, 0x07, 0x9f, 0xa2, 0xdd, 0xe8, 0x7d, 0x4f, 0xbe, 0x81, 0xf3, 0x64,
-  0x0f, 0xdd, 0xca, 0xa1, 0x39, 0x6c, 0xbd, 0xd6, 0x6c, 0x64, 0x1c, 0x17,
-  0x94, 0xef, 0xd8, 0x91, 0x74, 0xcf, 0x01, 0xbe, 0x6e, 0x9b, 0xf3, 0x6f,
-  0x9f, 0x29, 0x68, 0xc0, 0xa9, 0x7f, 0xa0, 0x69, 0x5a, 0x50, 0x2d, 0x87,
-  0x2d, 0x15, 0x61, 0xfd, 0x3f, 0x58, 0xd8, 0x16, 0x2e, 0x33, 0x86, 0xb5,
-  0x51, 0x53, 0x34, 0x9f, 0x53, 0x3f, 0x97, 0xd6, 0x4a, 0xbb, 0x51, 0x5a,
-  0xb5, 0xaa, 0x26, 0xac, 0x49, 0xd5, 0x8d, 0x19, 0x71, 0xcd, 0x21, 0xdd,
-  0x91, 0xf5, 0x88, 0x7f, 0x59, 0x5b, 0x1b, 0x9e, 0x1d, 0x1d, 0xbd, 0x4d,
-  0x4e, 0x8e, 0xdf, 0x1f, 0x5f, 0x78, 0x5a, 0xb8, 0xbd, 0x3d, 0xd4, 0xd3,
-  0xaa, 0xb5, 0xe3, 0x3a, 0xd3, 0xe1, 0xa8, 0x97, 0xa5, 0xbe, 0x8b, 0xdc,
-  0xdf, 0xb3, 0x4c, 0xb2, 0x28, 0xa6, 0xdd, 0xf7, 0x60, 0x6f, 0x83, 0xd9,
-  0x89, 0x6a, 0x70, 0x7b, 0x5a, 0x5c, 0x6d, 0x34, 0x1a, 0xd3, 0xbb, 0x3e,
-  0xb3, 0x0b, 0xf4, 0xff, 0x22, 0x38, 0x8d, 0xb6, 0xba, 0x24, 0x2c, 0xb2,
-  0x36, 0xa5, 0x47, 0xb0, 0xad, 0x9d, 0x5e, 0xd1, 0xdc, 0x66, 0x0c, 0xad,
-  0xf6, 0xdc, 0x72, 0x80, 0xed, 0xdd, 0x65, 0x60, 0x3b, 0x98, 0xe5, 0x9c,
-  0x6b, 0xe9, 0x63, 0x8a, 0x51, 0xca, 0x44, 0x6e, 0x3c, 0xc8, 0x71, 0xff,
-  0x8b, 0xde, 0xe9, 0xb0, 0x80, 0x5a, 0xfd, 0x56, 0xcd, 0xf5, 0xf8, 0xcc,
-  0x04, 0x14, 0xc9, 0xb3, 0x1d, 0x9b, 0xae, 0x30, 0x87, 0xcc, 0x11, 0xfd,
-  0x9e, 0x3e, 0xb6, 0x9b, 0x18, 0x25, 0x64, 0x41, 0xaa, 0x7c, 0xb5, 0x28,
-  0x82, 0xeb, 0xee, 0x2f, 0xfc, 0xae, 0x19, 0xff, 0xcb, 0x1d, 0x5c, 0x6f,
-  0x97, 0x69, 0xd5, 0x37, 0xea, 0xd6, 0x43, 0x5f, 0x5d, 0xaa, 0xbc, 0x23,
-  0x04, 0x6f, 0xcc, 0xfe, 0x9e, 0xcc, 0xd5, 0xb9, 0xec, 0xa8, 0x88, 0x2e,
-  0xe7, 0xa4, 0x44, 0x5c, 0x72, 0x2a, 0x07, 0x80, 0x86, 0x4e, 0x99, 0xbe,
-  0xea, 0xe1, 0x74, 0x0a, 0x8e, 0x63, 0x18, 0xd6, 0x55, 0x74, 0x32, 0x8a,
-  0x32, 0x10, 0x20, 0x56, 0xa9, 0xd5, 0x9c, 0x86, 0x29, 0x63, 0x09, 0xf5,
-  0xe9, 0x59, 0xb2, 0xfb, 0x39, 0x8d, 0xe3, 0x69, 0xe3, 0x79, 0x57, 0x56,
-  0x63, 0x9b, 0x53, 0x0c, 0x1b, 0xc1, 0x4b, 0x30, 0xe5, 0xb4, 0x08, 0xd4,
-  0x5c, 0xe3, 0xd9, 0x55, 0x50, 0x2c, 0x40, 0x7b, 0x64, 0x94, 0x48, 0x3c,
-  0x1d, 0xee, 0x28, 0x04, 0xb8, 0x59, 0x2d, 0xa2, 0xbb, 0x46, 0xe6, 0x85,
-  0x1c, 0xac, 0x0c, 0xda, 0xdb, 0xa8, 0x6c, 0x02, 0x2a, 0x4f, 0x03, 0xb9,
-  0x44, 0xcc, 0x5e, 0xbb, 0xcb, 0x27, 0x50, 0xa5, 0x1d, 0xd7, 0x9c, 0x59,
-  0x2f, 0xde, 0x7c, 0x8c, 0x95, 0x46, 0xcc, 0x12, 0xc1, 0x4e, 0xdb, 0x33,
-  0x51, 0x60, 0x68, 0x5a, 0x4b, 0x78, 0x14, 0x36, 0xa1, 0x3f, 0x50, 0x7e,
-  0xb3, 0x8b, 0x0b, 0x90, 0xfd, 0x44, 0xa2, 0x79, 0xdd, 0x7d, 0x85, 0x72,
-  0x05, 0x9a, 0x66, 0xaa, 0xce, 0x84, 0xf7, 0x76, 0x63, 0xb7, 0xc7, 0x4c,
-  0x4c, 0x2d, 0xde, 0xb0, 0x77, 0x77, 0x8c, 0xd2, 0x3a, 0x2d, 0x47, 0x9d,
-  0x92, 0xf5, 0xa1, 0x25, 0x8a, 0x61, 0xf5, 0x31, 0x3b, 0xbb, 0x3b, 0xdf,
-  0x2e, 0x9f, 0x75, 0x30, 0xd5, 0xaf, 0x7c, 0x79, 0xef, 0xf9, 0x8a, 0x45,
-  0x3b, 0xad, 0x60, 0x8c, 0x67, 0x8a, 0x81, 0x84, 0x22, 0xe8, 0x22, 0x2f,
-  0xc1, 0xb2, 0x99, 0x8d, 0x9f, 0x5d, 0xa5, 0x28, 0xfd, 0xbb, 0xa2, 0xf7,
-  0x9a, 0x13, 0xd2, 0xe9, 0xca, 0x7b, 0x41, 0x65, 0xf3, 0x2f, 0x6b, 0x72,
-  0x8b, 0xcd, 0xc1, 0xb4, 0xe7, 0x6c, 0x57, 0x9b, 0x4e, 0xce, 0xdc, 0x0c,
-  0xde, 0xdb, 0x2c, 0x39, 0x7b, 0x6d, 0x21, 0xa1, 0xbb, 0xa7, 0xca, 0xae,
-  0x16, 0xcc, 0x84, 0x51, 0xb2, 0xad, 0x4f, 0xc4, 0xd4, 0x72, 0x5e, 0x8d,
-  0x6c, 0x26, 0xf8, 0x10, 0xef, 0x27, 0x08, 0xde, 0x71, 0xaa, 0x2a, 0xab,
-  0xd4, 0xee, 0xed, 0x5c, 0x0c, 0xe4, 0x94, 0x1d, 0x97, 0x33, 0xa9, 0xfe,
-  0xc9, 0xc7, 0xab, 0xf0, 0x12, 0xfb, 0x99, 0x79, 0x71, 0x80, 0x4c, 0x5f,
-  0xde, 0x28, 0x56, 0xd8, 0x53, 0x5a, 0x19, 0x45, 0xc3, 0x1a, 0x0e, 0x0b,
-  0xa0, 0x81, 0x9e, 0xec, 0x5a, 0xb4, 0x64, 0x3f, 0x45, 0x12, 0xbf, 0x56,
-  0x06, 0x4c, 0xe6, 0xca, 0x27, 0x67, 0xff, 0xe1, 0xe9, 0x87, 0x77, 0xc7,
-  0x5f, 0x5b, 0x2a, 0x23, 0x16, 0xe2, 0x2d, 0x8a, 0x0d, 0x76, 0x1f, 0xfb,
-  0x91, 0x6e, 0x29, 0xaa, 0x2a, 0xe8, 0x5b, 0x23, 0x9e, 0x3e, 0xf9, 0x3f,
-  0x80, 0x00, 0x29, 0x9e, 0x91, 0x83, 0x9c, 0xf9, 0x3f, 0xea, 0x2d, 0xe7,
-  0x6e, 0xe8, 0x50, 0xd5, 0x71, 0x96, 0x46, 0x5a, 0x35, 0x8b, 0xb9, 0x05,
-  0x11, 0x7a, 0x45, 0x59, 0x85, 0x49, 0x5b, 0x53, 0xd1, 0x17, 0x73, 0x16,
-  0x4d, 0x92, 0x50, 0xda, 0xf2, 0xe6, 0xf2, 0x1d, 0x40, 0xee, 0x04, 0xe1,
-  0x52, 0x91, 0x0b, 0x20, 0xc0, 0xe5, 0x4c, 0x89, 0x7a, 0xd3, 0xc7, 0xcb,
-  0x6b, 0xfc, 0x66, 0x92, 0xd6, 0xd7, 0x3c, 0x50, 0x5c, 0x1a, 0x39, 0xc3,
-  0xb4, 0x11, 0x6b, 0x4b, 0x27, 0x64, 0xa8, 0x3b, 0x30, 0x8e, 0x45, 0xff,
-  0xba, 0xf8, 0x90, 0xad, 0x69, 0xe6, 0xf0, 0x49, 0x9a, 0xc6, 0x9a, 0x22,
-  0x54, 0x89, 0x58, 0x27, 0x7e, 0xf2, 0x86, 0xc2, 0x32, 0xfb, 0x44, 0x28,
-  0x3f, 0x63, 0x42, 0x39, 0x3f, 0xfd, 0x54, 0xa4, 0xa4, 0x63, 0x7d, 0x3f,
-  0xbe, 0xf4, 0x32, 0xda, 0x18, 0x27, 0xa8, 0x9b, 0x8e, 0x7d, 0xc4, 0xe4,
-  0x60, 0xd9, 0xf8, 0xc3, 0x46, 0xbf, 0x7e, 0x98, 0x8d, 0xca, 0xa9, 0x26,
-  0x5e, 0x58, 0x02, 0x09, 0x7d, 0x48, 0x6b, 0xe6, 0x21, 0x25, 0x97, 0x23,
-  0xb5, 0x8d, 0xe7, 0x96, 0x74, 0x58, 0x29, 0xd7, 0x7f, 0xae, 0x65, 0x84,
-  0xf0, 0x90, 0x8e, 0x02, 0xdc, 0x3e, 0x24, 0xe3, 0xb3, 0x62, 0x3c, 0x2d,
-  0x65, 0x57, 0x53, 0x82, 0x39, 0x66, 0xaa, 0x3d, 0x74, 0x8a, 0xf8, 0x95,
-  0x0b, 0xf2, 0x70, 0xa0, 0x7e, 0x88, 0x51, 0x77, 0xd6, 0x85, 0x51, 0x03,
-  0x03, 0xa4, 0xb7, 0xf9, 0x17, 0x82, 0xca, 0xf7, 0xf8, 0x6d, 0xb8, 0xe0,
-  0x88, 0xe9, 0xea, 0x4f, 0xec, 0x50, 0xe4, 0xb8, 0xdf, 0x5f, 0xf4, 0xe3,
-  0xfa, 0x68, 0x67, 0xea, 0xcd, 0x7e, 0x4a, 0xab, 0x2b, 0x61, 0xe9, 0x93,
-  0x48, 0x1a, 0x8c, 0x44, 0x5b, 0xd6, 0xc6, 0x3a, 0x26, 0x49, 0x29, 0xb1,
-  0xa8, 0x19, 0xa8, 0x4f, 0x0b, 0xce, 0x29, 0x94, 0x8c, 0x2b, 0x76, 0x49,
-  0xda, 0x8d, 0xe8, 0x49, 0x9c, 0x3f, 0x58, 0x2c, 0x4a, 0xea, 0xee, 0x32,
-  0x2d, 0x4f, 0xe1, 0xfc, 0xb3, 0x72, 0x99, 0x79, 0xaf, 0x91, 0x13, 0x0f,
-  0x96, 0x70, 0x26, 0x8e, 0x13, 0xfe, 0x94, 0x56, 0xba, 0xd7, 0xf2, 0x91,
-  0xae, 0x09, 0xfe, 0xfd, 0x1b, 0xa9, 0x52, 0x66, 0xce, 0xb3, 0x30, 0xa5,
-  0x08, 0x7d, 0xe0, 0xe7, 0x3b, 0xe2, 0x7e, 0x6b, 0x04, 0xae, 0x5a, 0x27,
-  0x07, 0xe7, 0x47, 0x46, 0xb3, 0xbd, 0x2a, 0xc0, 0x51, 0x51, 0x34, 0x9a,
-  0x54, 0x97, 0x15, 0x52, 0x18, 0xad, 0xd0, 0xf3, 0x41, 0x1f, 0xbc, 0xf3,
-  0xde, 0xa4, 0xcd, 0x24, 0xc0, 0x00, 0xce, 0xdf, 0x76, 0x5b, 0x6e, 0xac,
-  0xbc, 0xc0, 0x90, 0x3a, 0x44, 0x93, 0xc0, 0x5b, 0x8a, 0x42, 0x24, 0xe6,
-  0x53, 0xa5, 0x72, 0x02, 0x9f, 0x05, 0x62, 0xdd, 0x27, 0x03, 0xd6, 0xb9,
-  0xc6, 0xa9, 0x76, 0xa9, 0x08, 0x7f, 0x53, 0x62, 0x4e, 0xf9, 0x56, 0x2b,
-  0xec, 0xe9, 0xb6, 0x53, 0x2f, 0xee, 0x32, 0xfa, 0x1b, 0xee, 0x19, 0xd2,
-  0x45, 0xba, 0x7a, 0x41, 0x66, 0x11, 0xf6, 0xec, 0xbd, 0x9e, 0x78, 0xca,
-  0x2f, 0xa7, 0x00, 0x12, 0xc6, 0x9a, 0x1d, 0xd3, 0xc2, 0x04, 0x24, 0x7e,
-  0x1d, 0x36, 0x07, 0x26, 0x72, 0x56, 0x69, 0x57, 0x10, 0x5c, 0x78, 0x44,
-  0x6c, 0x49, 0x37, 0xac, 0x00, 0xf8, 0xf2, 0x29, 0xea, 0xdb, 0xfd, 0x83,
-  0x1d, 0xad, 0xeb, 0xc3, 0x9a, 0x57, 0x57, 0xdd, 0x2c, 0xa9, 0xb2, 0xdb,
-  0x51, 0x2f, 0x06, 0xf4, 0x21, 0x88, 0x54, 0xc4, 0x4c, 0xe9, 0x2f, 0xf8,
-  0x31, 0x50, 0x6f, 0x4a, 0x77, 0x0a, 0xa9, 0x63, 0x29, 0xb4, 0x4a, 0x89,
-  0xa9, 0xba, 0x8e, 0x70, 0x60, 0x0f, 0x12, 0x7a, 0xe4, 0xab, 0xc6, 0xfd,
-  0x6f, 0xb7, 0xb5, 0x9e, 0x35, 0xf9, 0x6f, 0x28, 0x81, 0x58, 0x0f, 0x7c,
-  0x9d, 0xb5, 0x0a, 0x60, 0xdb, 0x4c, 0xa1, 0xf5, 0xfe, 0xba, 0x99, 0x8b,
-  0x8d, 0xe9, 0xd4, 0x09, 0x7c, 0x7d, 0x8c, 0x56, 0x15, 0x49, 0x75, 0x4e,
-  0x61, 0x12, 0xd9, 0x45, 0x45, 0x35, 0x1e, 0x5a, 0x29, 0x0e, 0x54, 0xa6,
-  0x8e, 0x32, 0x80, 0x2c, 0xb1, 0x17, 0xd2, 0x44, 0x00, 0x12, 0xb8, 0xcd,
-  0x6b, 0x0d, 0x3e, 0x9a, 0xbd, 0x3d, 0x66, 0x4c, 0x44, 0xc3, 0x84, 0x04,
-  0x59, 0x33, 0xf6, 0xa6, 0x32, 0x1b, 0x5f, 0x97, 0x8c, 0xa9, 0x35, 0x93,
-  0xe6, 0x65, 0x7a, 0xae, 0x27, 0xff, 0x4b, 0xf6, 0xc0, 0xb7, 0x2e, 0x69,
-  0x8f, 0x36, 0xc2, 0x80, 0x79, 0x28, 0x07, 0x6e, 0x43, 0x1c, 0xfd, 0x70,
-  0x71, 0x7e, 0x90, 0x7c, 0x73, 0x74, 0xf0, 0xf6, 0xe8, 0x7c, 0xd8, 0xb9,
-  0xf4, 0x05, 0xfe, 0xc1, 0x1a, 0x1a, 0x39, 0x81, 0xa1, 0x1a, 0x2b, 0xf1,
-  0x80, 0xe0, 0xf6, 0x55, 0xea, 0x99, 0xcd, 0x43, 0x07, 0xc9, 0x9c, 0x0f,
-  0x32, 0x88, 0x38, 0x5a, 0x00, 0x02, 0xe3, 0x1a, 0xc2, 0xc6, 0xb6, 0x31,
-  0x36, 0x12, 0x8a, 0x40, 0x0c, 0xea, 0x32, 0xf7, 0x33, 0x66, 0x1c, 0x57,
-  0x9f, 0xbb, 0x4c, 0x26, 0xa5, 0x26, 0x03, 0xb6, 0x57, 0xee, 0x1b, 0x97,
-  0xef, 0xed, 0x89, 0x2d, 0xb9, 0x64, 0xc4, 0x6b, 0xb8, 0xfe, 0x43, 0xdf,
-  0x7c, 0xb7, 0x6f, 0x26, 0xbf, 0x4f, 0x64, 0x8e, 0x0f, 0x59, 0xbd, 0xde,
-  0x71, 0x01, 0xb6, 0x3f, 0x0f, 0x19, 0x7d, 0x15, 0x9e, 0xa4, 0x6f, 0xa2,
-  0x2d, 0xd1, 0xe9, 0x9a, 0x52, 0x7d, 0xa4, 0xae, 0x05, 0x81, 0x4b, 0xd5,
-  0x53, 0x92, 0xe5, 0x04, 0x05, 0xe9, 0x2d, 0x02, 0x50, 0x72, 0x66, 0xa6,
-  0xe0, 0xc1, 0xd0, 0x11, 0x19, 0x02, 0x74, 0x1d, 0x73, 0xf6, 0xf8, 0x52,
-  0x9f, 0x32, 0xd7, 0x32, 0x7b, 0xcc, 0x4c, 0xb7, 0xe4, 0x21, 0xff, 0x7e,
-  0x40, 0x00, 0x44, 0x30, 0xf8, 0x75, 0x2b, 0x3e, 0x2a, 0xce, 0x50, 0xa9,
-  0xd9, 0x28, 0xcd, 0x51, 0x1f, 0xec, 0x9e, 0x57, 0xe8, 0x3e, 0x7d, 0x52,
-  0x2b, 0x84, 0xc8, 0xbb, 0x8c, 0x02, 0x23, 0xa3, 0x1e, 0xfe, 0x4d, 0xae,
-  0x3d, 0x4b, 0xef, 0xa8, 0xbe, 0xea, 0xe5, 0x02, 0xf9, 0x9b, 0x19, 0xa5,
-  0xd9, 0x80, 0x1e, 0xb7, 0xcf, 0x65, 0xc9, 0x37, 0x65, 0x8d, 0xbb, 0x20,
-  0x7c, 0x9c, 0x2e, 0xf9, 0xd8, 0xf4, 0xe3, 0x0d, 0x89, 0x6f, 0x59, 0x92,
-  0xd8, 0xb5, 0x35, 0x4d, 0xa9, 0x3a, 0x3b, 0xb8, 0xf8, 0x06, 0xd1, 0x55,
-  0x6c, 0xe1, 0xb7, 0x60, 0x4c, 0xd1, 0x98, 0x5a, 0x98, 0x92, 0x65, 0x0d,
-  0x38, 0xd6, 0x7f, 0x95, 0x98, 0x51, 0xf5, 0x49, 0x44, 0xef, 0x72, 0x06,
-  0x22, 0x4d, 0xb9, 0xd6, 0x2f, 0x64, 0x74, 0xab, 0x0e, 0x23, 0xa0, 0xef,
-  0x36, 0xdf, 0xce, 0xe2, 0x2d, 0x37, 0x38, 0x11, 0x7e, 0x83, 0xc7, 0x84,
-  0x4d, 0x4f, 0xca, 0xdc, 0x5a, 0xd2, 0x66, 0x1e, 0xc6, 0x2f, 0x28, 0xd3,
-  0x99, 0x03, 0x50, 0x93, 0x32, 0xce, 0x7b, 0xe8, 0x1d, 0xe9, 0x2f, 0x67,
-  0x0f, 0x83, 0x90, 0x80, 0x27, 0xf9, 0x6a, 0xd1, 0xb4, 0xc5, 0x4a, 0x87,
-  0xff, 0xd8, 0x6a, 0x96, 0x55, 0x59, 0x36, 0x5e, 0x1f, 0xa0, 0xfd, 0xa4,
-  0x8d, 0x9c, 0x68, 0x26, 0xb8, 0xe4, 0xbe, 0x50, 0x53, 0x85, 0xe8, 0xdd,
-  0xbe, 0x62, 0x98, 0x8e, 0xea, 0x72, 0xba, 0x68, 0x3c, 0xf4, 0xf5, 0x2f,
-  0xeb, 0xb3, 0xd7, 0xe9, 0xcd, 0xe3, 0x81, 0x92, 0x7d, 0x16, 0x4c, 0x51,
-  0x67, 0x2c, 0x7d, 0xa3, 0x5e, 0x22, 0xd8, 0x58, 0x95, 0x45, 0xbb, 0x06,
-  0x1c, 0x80, 0xde, 0x5b, 0x6b, 0x6b, 0x43, 0x5d, 0x6c, 0xa2, 0x7b, 0x0d,
-  0x17, 0xfd, 0x7b, 0x68, 0x93, 0xd4, 0x07, 0x0e, 0x16, 0x8c, 0xcd, 0x5f,
-  0x94, 0x04, 0x2e, 0xe3, 0x35, 0x85, 0x08, 0xe7, 0x35, 0xce, 0xeb, 0xf6,
-  0xa0, 0xf0, 0x2b, 0x1b, 0xae, 0xd0, 0xfc, 0xb2, 0x8b, 0x52, 0x39, 0xf9,
-  0x25, 0x5c, 0xe7, 0x36, 0x44, 0x2b, 0x1b, 0x3e, 0xca, 0x30, 0x4d, 0x97,
-  0x80, 0x56, 0x90, 0xb6, 0x70, 0x5c, 0xea, 0xe4, 0xf6, 0xff, 0xde, 0x4e,
-  0x7a, 0x5c, 0x9d, 0x20, 0x42, 0xda, 0xb3, 0x48, 0xfe, 0x3f, 0x00, 0x5e,
-  0x09, 0xbd, 0x2f, 0xb5, 0x39, 0x68, 0x13, 0xc8, 0x0e, 0x8c, 0x09, 0x75,
-  0x5d, 0x8d, 0xdd, 0xee, 0x37, 0xda, 0x41, 0x76, 0x47, 0xf6, 0x8b, 0xda,
-  0x08, 0x42, 0x17, 0xc2, 0x45, 0x9c, 0x2d, 0x01, 0x13, 0xe8, 0x36, 0x2e,
-  0xad, 0x57, 0x8f, 0xea, 0xa9, 0x72, 0xd1, 0x51, 0x56, 0xeb, 0x51, 0x4e,
-  0x49, 0xc3, 0xa6, 0x6b, 0x49, 0xcb, 0x6e, 0xa7, 0x72, 0x84, 0xfc, 0xa7,
-  0x26, 0x1d, 0x09, 0xb0, 0x4b, 0xb6, 0xbf, 0x57, 0xa2, 0x4f, 0x8a, 0x1d,
-  0x23, 0xb5, 0x49, 0x10, 0xa7, 0x8c, 0xa6, 0xd3, 0x70, 0xa4, 0x76, 0x52,
-  0xb5, 0x00, 0x8a, 0x56, 0x82, 0xd6, 0x52, 0x98, 0x47, 0x08, 0x49, 0x46,
-  0x1c, 0xc6, 0x9c, 0xb4, 0x4d, 0xc5, 0x24, 0xd5, 0x92, 0xd1, 0x2b, 0x55,
-  0xd3, 0x38, 0xec, 0x4a, 0xb9, 0xee, 0xcb, 0xdd, 0x8f, 0x24, 0x7c, 0x44,
-  0xe6, 0xa8, 0x84, 0xa6, 0xaf, 0x12, 0xe8, 0x90, 0xa4, 0xa2, 0x2f, 0x83,
-  0x37, 0x7c, 0x40, 0x8a, 0x43, 0x6c, 0x5e, 0x51, 0x96, 0x87, 0xb8, 0xa4,
-  0x84, 0xcb, 0x04, 0xfe, 0xaf, 0xeb, 0x5c, 0x70, 0xa5, 0x3c, 0xeb, 0xed,
-  0x2a, 0xaa, 0xf0, 0xf0, 0x11, 0xa4, 0xc0, 0x45, 0x55, 0x2d, 0xf0, 0x61,
-  0x10, 0x1e, 0x98, 0x81, 0x65, 0x55, 0x95, 0x4b, 0xe4, 0xd8, 0xcf, 0x29,
-  0x67, 0x14, 0x86, 0xc5, 0x3a, 0x3f, 0xf1, 0xeb, 0xfe, 0x27, 0x09, 0xc4,
-  0x5a, 0x24, 0x9c, 0x40, 0x22, 0x54, 0x71, 0x74, 0xa1, 0xec, 0xed, 0xc2,
-  0x30, 0x65, 0xcc, 0x06, 0x78, 0x4a, 0xb5, 0x85, 0x56, 0x21, 0x36, 0x6f,
-  0xf2, 0xb7, 0x7a, 0x32, 0x4b, 0x36, 0xe3, 0x5e, 0x42, 0xcc, 0xac, 0x17,
-  0x7a, 0x71, 0xa7, 0x56, 0x05, 0x38, 0xce, 0xe2, 0xae, 0x9b, 0x6a, 0x31,
-  0x6e, 0xda, 0x75, 0x60, 0xdd, 0x0e, 0xb3, 0xd5, 0xe6, 0x78, 0x8e, 0x4b,
-  0xdf, 0xb6, 0x3f, 0x3e, 0x13, 0xf3, 0x9e, 0xad, 0x0f, 0xea, 0xd9, 0x66,
-  0xda, 0x4a, 0x72, 0xb1, 0x35, 0x48, 0xfd, 0xef, 0x6e, 0xd9, 0x5d, 0xd6,
-  0x3f, 0xb3, 0x19, 0xf5, 0x6d, 0xfa, 0x23, 0x64, 0x27, 0x78, 0x77, 0xaf,
-  0x28, 0x62, 0x50, 0x3c, 0xaa, 0x44, 0xc8, 0x17, 0xa1, 0xd6, 0x90, 0xcb,
-  0x72, 0xcd, 0x12, 0x24, 0x9a, 0x2e, 0xf5, 0x05, 0xaa, 0xca, 0xd1, 0xdf,
-  0x6d, 0x33, 0x91, 0x5a, 0xe9, 0xc7, 0x56, 0xb9, 0xaa, 0x1d, 0xc9, 0x62,
-  0x07, 0xa7, 0x0a, 0x8a, 0x26, 0xab, 0x1f, 0x0a, 0x59, 0x9c, 0xcc, 0xdf,
-  0x20, 0x79, 0x2b, 0x87, 0x42, 0xbe, 0xd0, 0x55, 0x27, 0xc2, 0xbb, 0xf1,
-  0x8c, 0xa9, 0x50, 0x82, 0x7d, 0xf4, 0x56, 0x7d, 0xaa, 0x10, 0x39, 0x98,
-  0x1b, 0xb2, 0x6c, 0x74, 0x91, 0xcc, 0xbc, 0xea, 0x27, 0x4c, 0x17, 0x68,
-  0xc4, 0x1b, 0xd3, 0x6c, 0x67, 0xc3, 0x2b, 0xd3, 0xb5, 0xc9, 0xa0, 0xff,
-  0x12, 0xd6, 0x8f, 0x25, 0x2b, 0x64, 0xef, 0x05, 0x81, 0xdb, 0xb6, 0x22,
-  0x5d, 0x31, 0x4d, 0xfc, 0xd2, 0xce, 0xec, 0xbe, 0xda, 0x1b, 0xec, 0xbe,
-  0xfc, 0x7c, 0xb0, 0x33, 0xd8, 0xdd, 0x21, 0xf9, 0x42, 0x5d, 0xf1, 0x3a,
-  0xc7, 0xf3, 0x12, 0xf9, 0x54, 0xeb, 0xbd, 0xf0, 0x9b, 0x1f, 0x8e, 0x2e,
-  0xbe, 0x3f, 0x3d, 0xff, 0x36, 0x39, 0xfe, 0x70, 0x71, 0x74, 0xfe, 0xee,
-  0xe0, 0xf0, 0xa9, 0x84, 0xfd, 0xbe, 0xdb, 0xda, 0xab, 0x59, 0x9e, 0xb9,
-  0x89, 0x09, 0x7d, 0x83, 0x6e, 0xce, 0xb2, 0xe6, 0x7a, 0x67, 0x7f, 0x77,
-  0x25, 0x25, 0x75, 0xc4, 0x3d, 0xe8, 0xde, 0xd7, 0x41, 0xed, 0xd2, 0xa0,
-  0x96, 0xb7, 0x62, 0xa9, 0x19, 0x87, 0x8c, 0xad, 0xb2, 0xb8, 0x5c, 0x88,
-  0x79, 0x54, 0x41, 0x02, 0x23, 0xab, 0x08, 0xf6, 0x11, 0x93, 0xdf, 0x72,
-  0x7a, 0xad, 0x90, 0xcc, 0x08, 0x06, 0x5d, 0x64, 0xee, 0x1a, 0xd7, 0x07,
-  0x6f, 0xc4, 0x9d, 0xc2, 0x74, 0xb6, 0x13, 0xa8, 0x78, 0x2a, 0x95, 0x25,
-  0x77, 0x8d, 0x76, 0x8b, 0x14, 0x29, 0x65, 0xc2, 0xc1, 0x89, 0xcd, 0x13,
-  0xb1, 0x2c, 0x04, 0x6b, 0x89, 0xa7, 0xa7, 0xa3, 0xaf, 0xed, 0x12, 0xef,
-  0x3e, 0x7c, 0xb6, 0xc3, 0xbd, 0x5a, 0x2b, 0xae, 0x19, 0x03, 0x6b, 0xb9,
-  0x46, 0x0f, 0xa5, 0x23, 0x38, 0x0d, 0x5e, 0x6f, 0xf8, 0x53, 0x50, 0xa8,
-  0x88, 0x24, 0x0d, 0xf4, 0x90, 0x2d, 0x86, 0x64, 0xbe, 0xa3, 0x90, 0x3b,
-  0xc1, 0xfa, 0x9f, 0x96, 0xb5, 0xa0, 0xd6, 0xeb, 0x16, 0x49, 0x61, 0xc2,
-  0x95, 0xa9, 0xfc, 0xd7, 0x59, 0xd5, 0x06, 0x3a, 0x73, 0x52, 0xa5, 0x77,
-  0x28, 0xaf, 0x92, 0x3b, 0xca, 0xd1, 0xb5, 0x76, 0x75, 0x2d, 0x52, 0x9c,
-  0xdc, 0x9c, 0x27, 0x67, 0x47, 0xef, 0xfb, 0x5a, 0xe3, 0xd8, 0xfc, 0x9d,
-  0x9d, 0x51, 0xca, 0x2f, 0xc9, 0xb9, 0x3d, 0xf3, 0xac, 0x50, 0x2c, 0x0d,
-  0x64, 0xa2, 0x80, 0x7f, 0xfc, 0x01, 0xd0, 0xa1, 0xb1, 0x0c, 0x94, 0x02,
-  0x19, 0x55, 0xcc, 0x25, 0xe7, 0x16, 0x76, 0x69, 0x39, 0x69, 0x3d, 0x05,
-  0xb0, 0x9c, 0x6c, 0x5a, 0x90, 0x2e, 0x7d, 0x0f, 0x48, 0x54, 0xa0, 0x06,
-  0x2c, 0x4c, 0xa0, 0xd4, 0xcc, 0xeb, 0xb3, 0x6f, 0x0f, 0x87, 0x7f, 0xd8,
-  0xdd, 0x93, 0xee, 0x6c, 0xa9, 0x55, 0x40, 0xb2, 0xaa, 0x9b, 0x94, 0x0f,
-  0x71, 0xed, 0xf7, 0x51, 0x53, 0xac, 0x71, 0xc0, 0xb1, 0x18, 0x9b, 0x36,
-  0x31, 0x68, 0xab, 0x95, 0x19, 0x04, 0xe4, 0xd7, 0x83, 0x55, 0x31, 0x6d,
-  0xcd, 0x5e, 0x0a, 0x89, 0xa0, 0xbc, 0x93, 0x14, 0x58, 0x6a, 0x2c, 0xd4,
-  0x2f, 0x2d, 0xf4, 0x47, 0xdc, 0xb2, 0xb4, 0x86, 0x1c, 0x72, 0x07, 0x67,
-  0xe9, 0xae, 0x39, 0xcd, 0xb7, 0xfb, 0x2d, 0xf1, 0xc4, 0xca, 0xcd, 0xae,
-  0x84, 0x40, 0xee, 0x33, 0x38, 0x00, 0x82, 0x5e, 0x9f, 0x68, 0x09, 0xb7,
-  0xc2, 0xd5, 0x41, 0xa1, 0xa7, 0x4f, 0xcd, 0x42, 0x99, 0x93, 0xc5, 0xbc,
-  0x0d, 0x24, 0x14, 0xca, 0x29, 0x99, 0x2e, 0xf6, 0x91, 0xb7, 0x15, 0x55,
-  0x8e, 0x99, 0x33, 0x8e, 0xf4, 0xc3, 0x20, 0xf9, 0x26, 0x2b, 0x28, 0x71,
-  0x9e, 0x10, 0x77, 0x9a, 0x7b, 0x05, 0x5c, 0x20, 0xd5, 0x90, 0x44, 0x4d,
-  0xbd, 0x93, 0x2c, 0x15, 0x4e, 0x4e, 0x23, 0xeb, 0x6a, 0xb6, 0x70, 0xb5,
-  0x9e, 0x54, 0x4a, 0xe8, 0x3c, 0x21, 0x10, 0xb5, 0x64, 0x17, 0x4c, 0x12,
-  0x4d, 0x0d, 0x6c, 0xb6, 0x89, 0x35, 0x51, 0x12, 0x01, 0xcd, 0xc9, 0x31,
-  0x47, 0xac, 0x49, 0xbc, 0xca, 0xd7, 0xa0, 0xd3, 0x26, 0x6f, 0x21, 0x5b,
-  0x5c, 0x4e, 0xa8, 0x4c, 0xaa, 0x6b, 0x72, 0x7d, 0xd4, 0xe6, 0xba, 0x49,
-  0x8b, 0xf1, 0xc3, 0x60, 0x62, 0x74, 0x59, 0x72, 0x9e, 0x0d, 0x16, 0x37,
-  0xdb, 0xde, 0x31, 0x25, 0x91, 0x7f, 0xcd, 0x1c, 0x01, 0x6d, 0xc7, 0xb7,
-  0xd6, 0x2a, 0x0e, 0xa9, 0xc3, 0xd2, 0xd6, 0x99, 0xa0, 0x2d, 0xa1, 0xd9,
-  0xfe, 0x7c, 0x3c, 0x97, 0x92, 0x6c, 0x1d, 0x25, 0x96, 0xe1, 0x98, 0x5a,
-  0x18, 0xcc, 0xb3, 0xd9, 0xbe, 0xcd, 0x46, 0x56, 0xf9, 0x20, 0x55, 0x35,
-  0xac, 0x61, 0xe1, 0x39, 0x69, 0x8b, 0xec, 0x6a, 0x2a, 0x0a, 0x85, 0x6f,
-  0xba, 0xd8, 0x26, 0x22, 0x29, 0x20, 0x6c, 0xf0, 0x48, 0xb5, 0x23, 0x68,
-  0xec, 0x66, 0x1f, 0x36, 0x02, 0xa9, 0xe5, 0x87, 0x2b, 0x52, 0xe8, 0x5d,
-  0x23, 0xc2, 0x1c, 0x02, 0xb2, 0x65, 0x52, 0x86, 0xc5, 0xc5, 0xa3, 0x48,
-  0x24, 0x09, 0x3f, 0x11, 0x11, 0x2c, 0x76, 0x08, 0x68, 0xdc, 0x05, 0x15,
-  0x8d, 0xe0, 0xa7, 0xd6, 0x03, 0xe6, 0xb3, 0x62, 0x7e, 0x7d, 0xfb, 0x8c,
-  0x3c, 0xde, 0x17, 0x27, 0x43, 0x8d, 0x8a, 0x14, 0xd9, 0x9d, 0xb7, 0xb5,
-  0xb8, 0xf4, 0x80, 0xec, 0x3f, 0x72, 0x00, 0x31, 0xa5, 0x32, 0xd8, 0x0e,
-  0xd0, 0x13, 0x96, 0x0a, 0x2e, 0x4c, 0xe6, 0x92, 0x1f, 0x74, 0x12, 0x04,
-  0x46, 0x4c, 0x5d, 0xd1, 0xd2, 0x65, 0xac, 0x0c, 0x59, 0xa6, 0x17, 0xe2,
-  0xee, 0x33, 0xca, 0xd2, 0xb3, 0x5e, 0xd2, 0xdf, 0x03, 0x7f, 0xce, 0x6e,
-  0x7b, 0x12, 0xd3, 0x86, 0x69, 0x02, 0xa9, 0x0d, 0xd3, 0x92, 0xb6, 0x22,
-  0xe2, 0x60, 0x53, 0xb6, 0xf4, 0xad, 0x79, 0x9f, 0xfe, 0xd8, 0x93, 0x01,
-  0xdd, 0xee, 0x02, 0xb1, 0xcd, 0xbc, 0x95, 0xd3, 0x87, 0x50, 0x65, 0xd8,
-  0x5b, 0xb9, 0xaa, 0xc8, 0x8d, 0xb8, 0xcb, 0x2d, 0x81, 0x34, 0x17, 0x4d,
-  0x80, 0x2b, 0x54, 0x28, 0x41, 0xb5, 0x03, 0x66, 0x0a, 0xc5, 0xc9, 0x5d,
-  0x24, 0xb7, 0x7b, 0x1a, 0x6b, 0xa6, 0xdf, 0xe8, 0xbc, 0xb1, 0xb3, 0xde,
-  0x09, 0x91, 0x20, 0x6d, 0x91, 0x50, 0x6e, 0xde, 0xae, 0xa5, 0xac, 0x27,
-  0xb3, 0x67, 0x8d, 0x14, 0x69, 0x49, 0x99, 0xb2, 0x10, 0xb7, 0x02, 0xa7,
-  0xbc, 0x33, 0x1f, 0x3d, 0x19, 0xf0, 0x1e, 0xcc, 0x09, 0xc8, 0x6f, 0x0f,
-  0x11, 0x79, 0x5c, 0xd8, 0x44, 0x09, 0x71, 0xe5, 0x83, 0xa2, 0x0f, 0xcb,
-  0x7f, 0x9d, 0xb3, 0x63, 0x02, 0x58, 0x53, 0x5c, 0xe7, 0xe6, 0xe4, 0x6f,
-  0x24, 0xe6, 0x30, 0x2d, 0x48, 0xe2, 0x37, 0xb6, 0x8e, 0xda, 0x90, 0xa9,
-  0x3d, 0x37, 0x7c, 0x31, 0xd7, 0xff, 0x82, 0x86, 0x52, 0x6f, 0xb8, 0xb1,
-  0x0b, 0xc5, 0x79, 0x7b, 0x20, 0x12, 0xe7, 0xd0, 0xca, 0x61, 0x67, 0x95,
-  0xd6, 0x46, 0xdf, 0x38, 0xba, 0x27, 0x1d, 0x67, 0x43, 0xbe, 0xc4, 0xbf,
-  0xe6, 0x9c, 0x7e, 0xcc, 0xd1, 0xd9, 0xf1, 0x07, 0x2e, 0xf7, 0x6d, 0xcf,
-  0x42, 0x46, 0xd4, 0x8b, 0x6b, 0x5c, 0x57, 0x1e, 0xfd, 0x49, 0x95, 0x03,
-  0x9e, 0x1d, 0x47, 0xb4, 0x67, 0x68, 0x8f, 0xe7, 0xf2, 0xad, 0xf3, 0x05,
-  0x7f, 0x7d, 0x83, 0xee, 0xb9, 0xba, 0x9e, 0x6e, 0x74, 0xca, 0xd8, 0xda,
-  0x35, 0xe9, 0x5c, 0x28, 0xd6, 0x23, 0x35, 0x9e, 0x38, 0x05, 0x3f, 0x49,
-  0xa4, 0x95, 0x96, 0x9c, 0xeb, 0x75, 0x32, 0x1d, 0x7d, 0x57, 0xf8, 0x1f,
-  0x92, 0xc1, 0xb6, 0xf9, 0x60, 0xbd, 0xad, 0x2f, 0xce, 0x6f, 0xc6, 0xb5,
-  0xb9, 0xe1, 0x28, 0xad, 0xf7, 0x47, 0x18, 0xe4, 0x58, 0x0e, 0xd3, 0xe3,
-  0xc9, 0xcf, 0x49, 0x7f, 0x3c, 0xc5, 0xf8, 0x12, 0xd4, 0xcb, 0xfe, 0xd1,
-  0xac, 0x3c, 0x3d, 0xf1, 0xb3, 0x5d, 0xc3, 0x77, 0x39, 0x9d, 0xb7, 0xfb,
-  0x9e, 0x0e, 0xfd, 0x94, 0x0d, 0x06, 0xe6, 0xb7, 0x4d, 0x0e, 0x26, 0xb7,
-  0x94, 0x74, 0x37, 0x91, 0x7f, 0xd2, 0x78, 0x8e, 0x0a, 0x94, 0x1a, 0xc5,
-  0x48, 0xd3, 0x11, 0x57, 0x16, 0xff, 0x2e, 0x37, 0x46, 0xc7, 0x61, 0x47,
-  0xbf, 0xa0, 0xfc, 0x3f, 0xea, 0x20, 0xde, 0xf2, 0x7e, 0xa9, 0xc9, 0x1c,
-  0x3d, 0xc9, 0x59, 0x70, 0xd0, 0x52, 0x92, 0xce, 0xb4, 0x74, 0x83, 0xe4,
-  0x2b, 0x8a, 0x71, 0x56, 0x99, 0xc7, 0xfe, 0x2a, 0x17, 0x1f, 0x97, 0xe4,
-  0xa3, 0xc5, 0x48, 0x99, 0x7f, 0x62, 0x60, 0x47, 0x12, 0xe4, 0xc0, 0xd8,
-  0x31, 0xd9, 0xdf, 0xb4, 0x07, 0x87, 0x7e, 0x69, 0x4a, 0xbb, 0x19, 0x8a,
-  0xe6, 0x4b, 0x24, 0xc1, 0x50, 0x3c, 0x5e, 0x4a, 0xee, 0x21, 0x5f, 0x98,
-  0x93, 0x4c, 0x13, 0xfb, 0x4b, 0x9f, 0x4d, 0x45, 0x3d, 0xc7, 0x68, 0x4a,
-  0x35, 0x02, 0xbb, 0x25, 0x70, 0x87, 0xbb, 0x5e, 0x1f, 0x5e, 0x1b, 0xd1,
-  0x9c, 0xd9, 0xae, 0x0e, 0xd9, 0xa5, 0xa7, 0x5d, 0x1c, 0xd2, 0x1d, 0xa5,
-  0x8b, 0x60, 0x7f, 0xa9, 0xd9, 0x91, 0xd0, 0x42, 0xb7, 0x59, 0x76, 0xd9,
-  0xbd, 0xcb, 0xb3, 0xdb, 0x1e, 0x02, 0x25, 0x35, 0x0e, 0x3f, 0xbe, 0xa7,
-  0xd2, 0x26, 0xa8, 0x40, 0x7d, 0x71, 0x7e, 0xf0, 0x61, 0xf8, 0x8e, 0x5d,
-  0xe3, 0x17, 0xa5, 0x57, 0xdb, 0x5a, 0xe2, 0x0a, 0x1a, 0x3f, 0xb6, 0x34,
-  0x71, 0x77, 0x5c, 0x6f, 0x43, 0xf1, 0xf4, 0x52, 0xf8, 0xba, 0xd7, 0xe5,
-  0xdb, 0xe7, 0xaa, 0xd9, 0x34, 0x1b, 0xd4, 0xb5, 0xcd, 0xe1, 0x96, 0x55,
-  0x84, 0x6a, 0xbf, 0x28, 0x9b, 0xab, 0x3a, 0xaf, 0xcc, 0xd0, 0xf2, 0x10,
-  0x4d, 0xcb, 0xa1, 0x76, 0x46, 0x7f, 0xca, 0x77, 0xef, 0x52, 0x32, 0xd2,
-  0x43, 0x63, 0x2a, 0xf6, 0xa5, 0x52, 0x8d, 0xe3, 0x63, 0x73, 0xee, 0x54,
-  0xbe, 0x7b, 0x85, 0xca, 0xcf, 0x36, 0xee, 0xe7, 0x7d, 0x6a, 0xd3, 0x9b,
-  0xff, 0xb6, 0xbb, 0x15, 0x6f, 0xfe, 0xe2, 0x97, 0x36, 0x1f, 0xef, 0xbb,
-  0xda, 0x66, 0x2e, 0xa5, 0x68, 0xf3, 0xdf, 0xf6, 0xb6, 0x56, 0x8e, 0xc8,
-  0xcf, 0x8a, 0x74, 0xdf, 0x34, 0x6f, 0x50, 0x67, 0x93, 0x37, 0x7c, 0xcc,
-  0xac, 0xce, 0x64, 0x11, 0x3a, 0x1e, 0xdf, 0x70, 0x8b, 0xb0, 0x83, 0x60,
-  0xdb, 0x56, 0x53, 0x77, 0x81, 0x37, 0xc9, 0x2e, 0x39, 0xfe, 0x9f, 0x47,
-  0x3e, 0x8d, 0x64, 0xb1, 0xd1, 0xf8, 0x57, 0x14, 0xb1, 0x03, 0xd4, 0xe5,
-  0x00, 0xdf, 0xde, 0x5b, 0xf1, 0x6d, 0x37, 0x3a, 0xcf, 0x2d, 0x41, 0x51,
-  0x6c, 0x82, 0xc1, 0x29, 0x1b, 0xb6, 0x7c, 0xc7, 0x7e, 0x7b, 0xd5, 0xf7,
-  0x2e, 0x8e, 0xdf, 0x1f, 0x11, 0x6b, 0xf6, 0xdb, 0x63, 0x22, 0x9f, 0x1b,
-  0x0a, 0xfd, 0xa3, 0x7a, 0x20, 0x2c, 0x23, 0xaf, 0x5f, 0x2d, 0x85, 0xc3,
-  0xbb, 0x16, 0x6d, 0x66, 0x25, 0x87, 0x5d, 0x09, 0xfa, 0xb4, 0x60, 0xa0,
-  0x6b, 0xcd, 0xb4, 0x3c, 0xbe, 0xec, 0xbf, 0x2f, 0x27, 0xb0, 0x92, 0xfb,
-  0x43, 0x40, 0x05, 0xcd, 0x5b, 0xe6, 0x87, 0x1f, 0x8b, 0x59, 0xeb, 0xc7,
-  0x83, 0x48, 0xa6, 0xee, 0xda, 0xb2, 0xa2, 0x3c, 0x7f, 0xdf, 0xee, 0xf7,
-  0xa9, 0x33, 0x7d, 0x86, 0x75, 0x49, 0x70, 0xa7, 0xc5, 0xcf, 0xa1, 0xa2,
-  0xc5, 0x4c, 0x50, 0x3e, 0x7d, 0x60, 0x20, 0x42, 0xea, 0xe0, 0x63, 0x2e,
-  0x7b, 0xf3, 0x8a, 0x32, 0xc8, 0x9c, 0x8b, 0x8f, 0x9d, 0x78, 0x6b, 0x3e,
-  0x79, 0x29, 0x0c, 0xa9, 0xec, 0xce, 0xe1, 0x9f, 0xa4, 0xfc, 0x72, 0x39,
-  0x7f, 0xc0, 0x28, 0xef, 0x5a, 0xd0, 0x8a, 0x68, 0x7c, 0xf5, 0xef, 0xfc,
-  0x4e, 0xab, 0x0c, 0x95, 0x70, 0x4c, 0x7b, 0x3b, 0x50, 0x7e, 0x22, 0x55,
-  0x9b, 0x4e, 0x2b, 0xef, 0xba, 0x92, 0x6e, 0x6b, 0x75, 0x3b, 0x8f, 0xd8,
-  0xd4, 0xe3, 0x61, 0x6d, 0xf7, 0xd3, 0x27, 0x81, 0x2d, 0x29, 0xf5, 0xf5,
-  0x6d, 0x69, 0x83, 0x63, 0x46, 0xec, 0xcc, 0xdb, 0x05, 0x8e, 0xb3, 0x44,
-  0x93, 0xbc, 0x39, 0x87, 0x7f, 0xa3, 0xbf, 0x81, 0xba, 0x0c, 0x79, 0x11,
-  0x19, 0x4c, 0xff, 0x97, 0x8f, 0x26, 0x08, 0xbd, 0x26, 0xeb, 0x97, 0x44,
-  0x84, 0x41, 0x71, 0xac, 0x75, 0xee, 0x00, 0xf3, 0xc4, 0xf0, 0xe6, 0x32,
-  0x17, 0x04, 0xc9, 0x35, 0x35, 0x24, 0xd9, 0xa8, 0xb6, 0xc8, 0x58, 0xeb,
-  0x24, 0x67, 0xaf, 0x24, 0x09, 0xd2, 0xc5, 0x7c, 0x02, 0x50, 0x06, 0xc3,
-  0x51, 0xff, 0x83, 0x48, 0xb1, 0xab, 0x87, 0x64, 0x77, 0xaf, 0x97, 0xec,
-  0xed, 0xec, 0xee, 0x45, 0xc6, 0xb0, 0xfe, 0x1f, 0x04, 0x8a, 0xda, 0xc3,
-  0xaf, 0xd7, 0x9f, 0x3a, 0x0a, 0x97, 0xcf, 0x80, 0x9b, 0x44, 0x32, 0x7f,
-  0x8d, 0xf0, 0xa1, 0xf8, 0x2c, 0x88, 0x98, 0x51, 0xf5, 0x18, 0x74, 0x76,
-  0xb8, 0xb6, 0xd8, 0x49, 0xa8, 0x35, 0x36, 0x6d, 0xe9, 0xb0, 0x09, 0x2a,
-  0xe9, 0x70, 0xe1, 0x59, 0x20, 0x5f, 0xac, 0xa7, 0x34, 0xad, 0x50, 0x0a,
-  0xb4, 0xbd, 0x46, 0x79, 0xa3, 0xcb, 0x42, 0xd0, 0x1a, 0x5a, 0x1b, 0xb3,
-  0xdf, 0xdf, 0x1e, 0x1f, 0x5e, 0x28, 0xdf, 0xe1, 0x25, 0x29, 0x4f, 0xd5,
-  0xc3, 0xd3, 0x8a, 0x31, 0xae, 0x7c, 0x66, 0xb2, 0x7f, 0x9d, 0x19, 0x35,
-  0xba, 0x18, 0x2d, 0xae, 0xf6, 0xff, 0x9a, 0x56, 0x57, 0x65, 0xf1, 0xd8,
-  0xf3, 0x13, 0x24, 0x94, 0xed, 0x1b, 0x09, 0xb5, 0xfb, 0x6a, 0xf7, 0x19,
-  0xf2, 0xbf, 0xa7, 0x39, 0x0a, 0x02, 0x91, 0x80, 0xd8, 0x98, 0x6d, 0x30,
-  0xc1, 0x06, 0xd2, 0x24, 0x2c, 0xab, 0x46, 0x31, 0xd9, 0xe0, 0xeb, 0x3e,
-  0xf5, 0x9f, 0x9d, 0xc8, 0xb3, 0x9c, 0x7a, 0xbe, 0x21, 0xb9, 0x0a, 0x1b,
-  0x94, 0xa6, 0xb9, 0x98, 0x6f, 0xb4, 0x29, 0xe2, 0x1f, 0x19, 0x2b, 0x7d,
-  0xc2, 0xd6, 0x9e, 0x3c, 0xb4, 0xc4, 0xf7, 0xc8, 0x20, 0xaa, 0xb2, 0xf4,
-  0xc6, 0x95, 0x41, 0x76, 0xec, 0x1b, 0x1a, 0xf2, 0x38, 0x7f, 0x77, 0xc8,
-  0x0c, 0xa6, 0x9a, 0x2f, 0x85, 0xa9, 0x4e, 0xac, 0x6b, 0x6a, 0x8b, 0x7a,
-  0xf9, 0xc8, 0xf7, 0x29, 0xb7, 0x61, 0x7f, 0x32, 0x7a, 0xc2, 0x43, 0xe6,
-  0xdc, 0x31, 0x59, 0xdc, 0x41, 0xbb, 0xf4, 0x0e, 0x19, 0x6a, 0xa8, 0x1f,
-  0xa2, 0xf5, 0x8e, 0x37, 0xb9, 0xa4, 0x2c, 0x47, 0x1c, 0xa8, 0x6b, 0x5a,
-  0x49, 0x5a, 0xbd, 0x3b, 0xa6, 0xdf, 0x54, 0xe5, 0xf5, 0xed, 0xc1, 0x99,
-  0x67, 0xe8, 0xc2, 0x90, 0x74, 0x4e, 0x3d, 0x7a, 0x8e, 0x0c, 0x1d, 0x94,
-  0x54, 0x97, 0x6a, 0x4c, 0x3d, 0x67, 0xa2, 0x34, 0x90, 0x93, 0xa4, 0x1b,
-  0x01, 0x20, 0x5f, 0xca, 0x7d, 0x02, 0xff, 0x13, 0xaa, 0x19, 0x4c, 0x27,
-  0x29, 0x02, 0xa1, 0x72, 0x0b, 0x41, 0xe7, 0x42, 0x5b, 0xb9, 0xa0, 0xa1,
-  0xcc, 0xda, 0xdc, 0x27, 0x92, 0xc4, 0x21, 0xd9, 0x2a, 0x52, 0x6f, 0x04,
-  0x8f, 0x51, 0x56, 0xf2, 0x83, 0x0e, 0x80, 0xe5, 0xb3, 0xe9, 0x7c, 0x5a,
-  0xdf, 0x18, 0x51, 0xca, 0x01, 0x7c, 0xf3, 0xf5, 0x5c, 0x42, 0xe0, 0xe4,
-  0xf4, 0xc9, 0x19, 0x48, 0x43, 0xee, 0x27, 0xf0, 0x20, 0xb5, 0x16, 0x8c,
-  0xaf, 0x20, 0xb2, 0x38, 0xa7, 0x75, 0xc6, 0xac, 0x85, 0xa0, 0xd1, 0xa1,
-  0x88, 0x19, 0x2d, 0x18, 0x2c, 0x0d, 0x45, 0xa2, 0x42, 0x08, 0xd0, 0xda,
-  0xee, 0xed, 0xbd, 0x78, 0xd1, 0x4b, 0xd6, 0xc9, 0x5b, 0xa7, 0x95, 0xe5,
-  0x69, 0x6b, 0x99, 0x1d, 0xba, 0x1e, 0xad, 0x4b, 0xbb, 0x5d, 0x5d, 0x8e,
-  0xe9, 0xff, 0xe8, 0x3d, 0x2d, 0xc7, 0x78, 0x21, 0xe9, 0x2b, 0xd4, 0x4d,
-  0x84, 0x26, 0x2d, 0xc9, 0x0c, 0xaf, 0x0f, 0xfd, 0xee, 0xd8, 0x3a, 0x64,
-  0x28, 0xfa, 0x32, 0xcf, 0xca, 0xb9, 0x86, 0x59, 0x67, 0x52, 0x68, 0x03,
-  0xdf, 0xf7, 0x62, 0x53, 0x08, 0x8c, 0x33, 0xae, 0x4c, 0xd8, 0x04, 0xea,
-  0xc5, 0xa8, 0x2f, 0x69, 0xb5, 0x6c, 0x9e, 0xe5, 0xe6, 0x08, 0x98, 0x7f,
-  0x4e, 0xd5, 0xef, 0x1d, 0x88, 0xb6, 0xaf, 0x92, 0x75, 0x59, 0x24, 0xfa,
-  0x63, 0x80, 0x28, 0x69, 0x36, 0xa6, 0x61, 0x94, 0x6f, 0xe4, 0x1f, 0xff,
-  0xfe, 0xef, 0xa6, 0xd9, 0x7f, 0xa7, 0x56, 0xde, 0xfc, 0x5b, 0xdd, 0x5c,
-  0x7b, 0xcf, 0xac, 0xcb, 0xce, 0x39, 0x76, 0x31, 0x62, 0xe0, 0xbe, 0xc0,
-  0xd7, 0x8a, 0xec, 0xaf, 0xf7, 0x27, 0x22, 0xda, 0x7a, 0xde, 0xf8, 0x72,
-  0xe4, 0xe5, 0xb1, 0xb7, 0xd1, 0xc2, 0x2e, 0xbe, 0xa2, 0xf8, 0x6d, 0x46,
-  0xf9, 0xdc, 0x66, 0x11, 0x40, 0xc7, 0xb7, 0xa5, 0x77, 0xf5, 0xd1, 0x87,
-  0xef, 0x8e, 0xcf, 0x4f, 0x3f, 0xbc, 0x3f, 0xfa, 0x70, 0x91, 0x7c, 0x77,
-  0x70, 0x7e, 0x7c, 0xf0, 0xd5, 0x89, 0xa4, 0x8d, 0xd3, 0x10, 0x08, 0x2d,
-  0xc3, 0x4a, 0x6c, 0x87, 0x4e, 0xd5, 0xcb, 0xe8, 0x89, 0x16, 0xe1, 0xe8,
-  0xd4, 0x17, 0xfe, 0x24, 0x5c, 0xe0, 0x50, 0xe9, 0x3f, 0xa1, 0x9e, 0x50,
-  0x8f, 0xb4, 0xb8, 0x4f, 0x5a, 0x5a, 0x88, 0xac, 0x90, 0x07, 0x2f, 0x11,
-  0x99, 0x80, 0x3c, 0xb4, 0xa5, 0xf4, 0xa0, 0xbb, 0xa2, 0x7a, 0xb6, 0x4a,
-  0xc5, 0xd7, 0x9c, 0xcb, 0xae, 0x25, 0x3b, 0xf4, 0x55, 0xac, 0x21, 0x4b,
-  0x69, 0xd7, 0x87, 0x83, 0x93, 0x13, 0xf7, 0xa9, 0xd5, 0xd5, 0x5c, 0x84,
-  0xc7, 0x88, 0xb3, 0xa0, 0xd0, 0x28, 0x45, 0xd8, 0xae, 0x4a, 0x47, 0x6c,
-  0x5e, 0x3c, 0xf8, 0x1c, 0xe6, 0xf4, 0x31, 0xb3, 0x1c, 0x9b, 0x4c, 0x40,
-  0x41, 0xe1, 0x56, 0x63, 0x8d, 0xe5, 0xf5, 0x4d, 0x2f, 0xd9, 0xf8, 0xb7,
-  0x0d, 0xa9, 0xad, 0x0d, 0xd6, 0x5d, 0xae, 0x15, 0xb3, 0xe5, 0x3a, 0xf5,
-  0xe1, 0xd4, 0xf5, 0x49, 0x22, 0x88, 0xb6, 0x03, 0xf6, 0x45, 0x17, 0xff,
-  0xad, 0x55, 0x31, 0x00, 0xf0, 0xd2, 0x3d, 0x2e, 0x05, 0x15, 0x6c, 0x5e,
-  0xbd, 0xec, 0x51, 0x8a, 0x10, 0x45, 0xdf, 0x85, 0xf9, 0x93, 0x8e, 0x3d,
-  0x72, 0x65, 0x8c, 0xb5, 0x20, 0x9f, 0x81, 0x2d, 0x72, 0xa5, 0x6e, 0x35,
-  0x33, 0xd5, 0xe4, 0x1c, 0x93, 0xb8, 0xdc, 0xa2, 0x16, 0x51, 0x84, 0x5d,
-  0x75, 0xbf, 0xad, 0x35, 0x63, 0x10, 0xac, 0x23, 0x60, 0x7d, 0x95, 0x4f,
-  0x84, 0xac, 0x2f, 0xba, 0x2b, 0x06, 0x88, 0xf1, 0x9c, 0x1f, 0x82, 0xdb,
-  0xbc, 0xa0, 0xea, 0x86, 0xae, 0x26, 0x05, 0x40, 0xb8, 0xc6, 0x8a, 0xad,
-  0x28, 0xb3, 0xad, 0x90, 0xdb, 0x1c, 0xc0, 0x56, 0x28, 0xbb, 0xe9, 0x55,
-  0xa9, 0x8a, 0x6c, 0x6a, 0xa3, 0xcf, 0xb6, 0x72, 0x97, 0xa7, 0x1c, 0x5b,
-  0x06, 0x2e, 0xeb, 0xfb, 0x43, 0x9c, 0x5a, 0x3d, 0xed, 0x84, 0xd3, 0xa2,
-  0x25, 0xd7, 0x4a, 0xcc, 0xb5, 0x97, 0xe3, 0xec, 0xd2, 0x00, 0x48, 0x96,
-  0x30, 0xda, 0x5d, 0x29, 0xb1, 0x40, 0x43, 0xa6, 0x39, 0xd1, 0x40, 0x0c,
-  0xa2, 0x5b, 0xf4, 0x20, 0x9a, 0x14, 0xf0, 0x27, 0x9a, 0x54, 0x27, 0xb0,
-  0x39, 0x3d, 0x53, 0xca, 0xc4, 0x52, 0x49, 0x94, 0x26, 0xa3, 0xfc, 0x8a,
-  0x73, 0xeb, 0x29, 0x91, 0x9b, 0x76, 0x09, 0xa8, 0xd2, 0x8c, 0x85, 0x4c,
-  0x4b, 0x05, 0x22, 0x34, 0x28, 0xc1, 0xd7, 0xe5, 0xd4, 0x67, 0xeb, 0xd2,
-  0x91, 0xd4, 0x52, 0x93, 0x4c, 0x7d, 0x88, 0x88, 0x21, 0x2c, 0x68, 0x1e,
-  0x15, 0xd6, 0x25, 0x34, 0xdf, 0x02, 0x72, 0x23, 0xe7, 0x34, 0x38, 0x07,
-  0x0b, 0xa4, 0xd4, 0x68, 0x4e, 0x32, 0xe6, 0x41, 0x01, 0xc0, 0x24, 0x2d,
-  0xe0, 0x90, 0xa2, 0x7a, 0x89, 0x9b, 0x96, 0xa7, 0x9b, 0x5a, 0x19, 0x33,
-  0xd3, 0x29, 0x6d, 0x7a, 0x0e, 0xcd, 0xb6, 0x0b, 0xeb, 0xc8, 0x62, 0x09,
-  0x07, 0x95, 0xd9, 0x13, 0xd4, 0x69, 0x33, 0x53, 0x9b, 0x9e, 0xe0, 0x29,
-  0xcc, 0x16, 0xe1, 0xc7, 0xd8, 0x12, 0x93, 0x7f, 0xf5, 0x6d, 0x4d, 0x30,
-  0x09, 0xe0, 0x6e, 0xb9, 0x00, 0x3e, 0x5f, 0xa7, 0xb4, 0x5b, 0xc7, 0x52,
-  0x95, 0x11, 0xa1, 0x6e, 0x2a, 0x29, 0x09, 0x62, 0xa5, 0x96, 0x13, 0x2f,
-  0xd1, 0xc4, 0x95, 0xe9, 0xd4, 0x23, 0xea, 0x66, 0xbb, 0x3e, 0x0d, 0x2e,
-  0x71, 0x8a, 0xb2, 0x0c, 0x58, 0x02, 0x30, 0x84, 0x86, 0x49, 0x7d, 0xbd,
-  0x81, 0x08, 0x38, 0x9b, 0xd4, 0x9c, 0x8e, 0x6f, 0xd0, 0x13, 0x68, 0x1a,
-  0x66, 0xf6, 0x2f, 0x26, 0xa9, 0x4b, 0x91, 0xa7, 0x33, 0x56, 0xc2, 0xdc,
-  0xee, 0x9b, 0x3d, 0x30, 0x7c, 0x6f, 0x6d, 0xed, 0xf0, 0xe3, 0xf0, 0xe2,
-  0xf4, 0x7d, 0x72, 0xfa, 0xf1, 0xe2, 0xec, 0xe3, 0x85, 0xdc, 0x5c, 0x23,
-  0x06, 0x3f, 0x33, 0x04, 0x80, 0x6f, 0x53, 0x5d, 0xcc, 0x99, 0x04, 0xca,
-  0x81, 0xd5, 0x28, 0x41, 0xcf, 0xe7, 0x31, 0xf3, 0xd8, 0xe4, 0x26, 0x70,
-  0x56, 0x31, 0xef, 0x2f, 0xa6, 0xfc, 0xce, 0x4c, 0x39, 0x12, 0x53, 0xe1,
-  0x11, 0xd3, 0x5c, 0x29, 0xd8, 0x0f, 0x7a, 0xd6, 0xda, 0x35, 0x5f, 0x1e,
-  0xda, 0xf6, 0x00, 0xa2, 0xdc, 0x6d, 0x26, 0x24, 0xbf, 0xf4, 0x24, 0x3b,
-  0x49, 0x9c, 0x0f, 0xc5, 0xc7, 0x46, 0x4a, 0xe1, 0x4a, 0xf5, 0xe4, 0x2a,
-  0x3c, 0x15, 0x98, 0x9d, 0x76, 0x86, 0x9e, 0x9f, 0x28, 0xd8, 0x94, 0x66,
-  0x84, 0xd7, 0x16, 0x5a, 0x4e, 0x70, 0x1c, 0x40, 0xea, 0x18, 0x89, 0x40,
-  0xd8, 0x35, 0x56, 0xbd, 0x8d, 0x41, 0x45, 0xbe, 0xff, 0xe0, 0x96, 0xbd,
-  0x4b, 0x36, 0xbe, 0xcf, 0xfc, 0x06, 0xff, 0xf8, 0x9f, 0x94, 0xff, 0xf8,
-  0x49, 0x7f, 0xf2, 0x5f, 0xfc, 0xc9, 0x9f, 0x8a, 0x0d, 0x20, 0xd1, 0xda,
-  0x21, 0xe7, 0x6f, 0x8f, 0xce, 0xbf, 0x3a, 0x3a, 0x3f, 0x1d, 0x42, 0x1e,
-  0xa8, 0xdf, 0x28, 0xdc, 0xeb, 0x37, 0x59, 0x35, 0xca, 0xaa, 0x52, 0xea,
-  0x51, 0xe9, 0xbf, 0x5e, 0x6c, 0x7f, 0x3d, 0x1c, 0x1e, 0x9c, 0x1d, 0xdb,
-  0x8a, 0x2f, 0x36, 0x13, 0x8b, 0x6d, 0x8d, 0x82, 0x73, 0x05, 0x69, 0xfc,
-  0xfa, 0x8a, 0xd9, 0x17, 0xe3, 0x1b, 0x46, 0xe8, 0x06, 0xc1, 0x5d, 0x75,
-  0x50, 0x53, 0x54, 0x57, 0x12, 0xf4, 0xa8, 0x61, 0x65, 0x54, 0xf2, 0x59,
-  0xdb, 0x99, 0x5e, 0x9d, 0x9c, 0xea, 0x3d, 0x0b, 0x65, 0xbb, 0xa9, 0x46,
-  0xc6, 0x14, 0x1f, 0xdf, 0x68, 0x01, 0x64, 0x4e, 0x28, 0x30, 0xa2, 0x92,
-  0x91, 0xc6, 0xce, 0x68, 0xbf, 0xa1, 0x5a, 0xf2, 0xdb, 0x37, 0x74, 0x3e,
-  0xa8, 0x1a, 0xc9, 0x74, 0xc0, 0xd2, 0x9d, 0x0f, 0x94, 0xc2, 0x47, 0x49,
-  0xc4, 0xae, 0x62, 0x79, 0x30, 0x5f, 0xb3, 0x25, 0x04, 0xd9, 0x71, 0x64,
-  0x7e, 0xf2, 0xdc, 0xd2, 0x5d, 0xf9, 0xf5, 0xb8, 0x2f, 0x8d, 0x26, 0x3b,
-  0xbf, 0x9b, 0xc8, 0x25, 0x02, 0xb6, 0xe7, 0x82, 0xfd, 0xfc, 0x2c, 0xc3,
-  0xbb, 0x91, 0x1e, 0x2a, 0x73, 0x88, 0xcc, 0x07, 0xc1, 0x75, 0x27, 0xa3,
-  0x69, 0x5a, 0xdc, 0xe0, 0x36, 0xc3, 0xfd, 0x44, 0xb6, 0x9b, 0x92, 0x38,
-  0x51, 0xf9, 0x49, 0x04, 0xf6, 0x84, 0x57, 0x01, 0x4a, 0xe0, 0x94, 0x84,
-  0xdb, 0x03, 0x3b, 0xc5, 0x2d, 0x57, 0x95, 0x17, 0xc2, 0xc2, 0x71, 0x72,
-  0x93, 0x40, 0x3e, 0x98, 0xa3, 0x13, 0x73, 0x31, 0xd9, 0x6c, 0x0d, 0xd8,
-  0xba, 0xd9, 0x94, 0x7c, 0xaa, 0x0a, 0xad, 0xe1, 0x04, 0xc5, 0x1c, 0x82,
-  0x8c, 0xa5, 0x87, 0x12, 0x91, 0x23, 0x10, 0x83, 0xed, 0x82, 0x3c, 0xcc,
-  0xda, 0x96, 0xeb, 0x10, 0xc9, 0xcd, 0x42, 0x0c, 0x2c, 0x9b, 0xae, 0x7a,
-  0x87, 0x5f, 0x47, 0x46, 0x70, 0x6b, 0x87, 0x0e, 0x58, 0x63, 0x0b, 0x6b,
-  0x71, 0x27, 0x9c, 0x5a, 0x6a, 0x43, 0x75, 0xad, 0x34, 0x91, 0xa5, 0xcb,
-  0xc4, 0xaf, 0xc7, 0xac, 0x69, 0x26, 0x07, 0x9b, 0x48, 0xe0, 0xc0, 0xf2,
-  0xea, 0x28, 0xf6, 0xb7, 0x8d, 0xb7, 0xd5, 0x8e, 0x73, 0x58, 0x9d, 0xbc,
-  0xa0, 0xd3, 0x46, 0xa3, 0x6f, 0xc0, 0x8a, 0xca, 0x0d, 0xdc, 0x4c, 0x20,
-  0x72, 0xaa, 0x16, 0xe5, 0xab, 0x0f, 0x73, 0x65, 0xea, 0x07, 0x38, 0xd9,
-  0x38, 0xf1, 0x01, 0xf6, 0x80, 0xd5, 0x6f, 0xfb, 0x1f, 0xe8, 0xba, 0x28,
-  0xfb, 0xa3, 0x05, 0x0c, 0x1c, 0xaf, 0xe0, 0x15, 0x27, 0x43, 0x1a, 0xbb,
-  0x87, 0x59, 0xc9, 0xf0, 0x7b, 0x0a, 0xec, 0x20, 0xcd, 0x9c, 0x63, 0x3d,
-  0xc8, 0x3b, 0x6c, 0x33, 0xd6, 0x58, 0x9e, 0x12, 0x06, 0xf3, 0xbb, 0x4a,
-  0xbc, 0x76, 0x80, 0xb2, 0xc8, 0x16, 0x76, 0x57, 0x48, 0xb9, 0x54, 0x84,
-  0x28, 0xda, 0xd0, 0xe5, 0xc6, 0x12, 0xc7, 0x5f, 0x40, 0x4d, 0xc8, 0x84,
-  0x4e, 0x5d, 0x31, 0xc9, 0x9a, 0x01, 0x71, 0xdb, 0x50, 0x89, 0x26, 0xa6,
-  0x58, 0x48, 0xa7, 0x5c, 0xef, 0x62, 0xe9, 0x55, 0xc2, 0x87, 0xa9, 0xb9,
-  0xb8, 0xf8, 0xcb, 0xd9, 0xd1, 0x1b, 0x7d, 0x73, 0xd5, 0x9a, 0x31, 0xf3,
-  0x18, 0xc0, 0x27, 0x99, 0x30, 0x7d, 0x7a, 0x45, 0xa6, 0xcd, 0x26, 0xeb,
-  0x37, 0x1a, 0x14, 0xe7, 0xcf, 0xf4, 0x93, 0x1f, 0xde, 0x1e, 0x0f, 0xcf,
-  0x4e, 0x4e, 0x0f, 0xdf, 0xbc, 0xfe, 0x41, 0x45, 0xf2, 0x17, 0xe4, 0x6b,
-  0x67, 0x3d, 0xcd, 0xfe, 0xcc, 0x31, 0x23, 0xc8, 0x7b, 0x1f, 0x8e, 0xbe,
-  0xff, 0x64, 0xac, 0x83, 0x37, 0xc4, 0x8f, 0xde, 0xbb, 0x4d, 0xa7, 0xf2,
-  0x12, 0x99, 0x58, 0x11, 0xdd, 0x6e, 0xd0, 0xa6, 0xb2, 0xeb, 0x4e, 0xac,
-  0xad, 0xf3, 0xe9, 0x00, 0xff, 0x0f, 0x8a, 0x47, 0xf3, 0x4a, 0x3a, 0xa5,
-  0xad, 0xfc, 0xd4, 0x48, 0x55, 0x5e, 0x77, 0xfd, 0x6f, 0x34, 0x0c, 0x4e,
-  0xa4, 0x58, 0xbc, 0x1f, 0xe2, 0x06, 0x00, 0x54, 0x7e, 0xe3, 0x80, 0xb1,
-  0xc2, 0x43, 0x5c, 0x11, 0x12, 0xc4, 0x12, 0x39, 0x4a, 0xa9, 0x67, 0x04,
-  0x8f, 0x85, 0xed, 0x51, 0x28, 0x8c, 0x08, 0x8b, 0xaa, 0xb0, 0x74, 0x95,
-  0x63, 0xa2, 0xc2, 0xd8, 0xbe, 0xa4, 0x5a, 0x74, 0x16, 0x95, 0x6d, 0xce,
-  0x8e, 0xce, 0x87, 0xc7, 0xc3, 0x0b, 0x32, 0xa3, 0xa4, 0x02, 0xa2, 0x38,
-  0x73, 0xb5, 0x3c, 0x25, 0xc8, 0x0f, 0xda, 0xc4, 0x9d, 0x7e, 0xd5, 0x8d,
-  0xd6, 0x89, 0xb6, 0x62, 0xae, 0x9d, 0x0d, 0x49, 0x37, 0x00, 0xa7, 0x58,
-  0x92, 0x22, 0xca, 0xf4, 0xb3, 0xe9, 0xa5, 0x1e, 0xe0, 0x52, 0xb6, 0x46,
-  0xa7, 0xf8, 0x04, 0x0a, 0xc7, 0x60, 0x75, 0xa6, 0xf9, 0xc8, 0x2b, 0x39,
-  0xdd, 0x8e, 0xc5, 0x52, 0x98, 0x5f, 0xa8, 0x2e, 0xfc, 0x23, 0xa4, 0x8e,
-  0x65, 0x97, 0x62, 0x2c, 0x45, 0x71, 0xe5, 0x5a, 0x93, 0xf4, 0x40, 0x3f,
-  0x11, 0xd4, 0x1a, 0xaa, 0x30, 0x4e, 0xfc, 0xe2, 0xdf, 0xf8, 0xa9, 0x87,
-  0xe6, 0x14, 0xf6, 0x24, 0x10, 0xbf, 0x8a, 0xc8, 0x26, 0xa1, 0x9c, 0x73,
-  0x4a, 0x17, 0x79, 0x2c, 0x8c, 0xd6, 0x82, 0x14, 0x75, 0x00, 0x6e, 0x64,
-  0x64, 0x81, 0x0a, 0x22, 0xaa, 0xe3, 0x15, 0xe5, 0x82, 0x81, 0xa2, 0x6a,
-  0x42, 0xfa, 0x16, 0x5c, 0x59, 0xfe, 0xc7, 0xf4, 0x3a, 0xa5, 0x19, 0x1c,
-  0x2d, 0xfc, 0x92, 0x6a, 0xb6, 0xf7, 0x5c, 0xdd, 0x03, 0x13, 0x0f, 0xa8,
-  0x61, 0x5a, 0x81, 0x03, 0xb2, 0x11, 0xca, 0x75, 0x35, 0x7c, 0x04, 0x37,
-  0x38, 0x68, 0xb3, 0xe1, 0xe8, 0xbe, 0xd4, 0xb2, 0x9f, 0xab, 0x66, 0xd4,
-  0xab, 0xc1, 0x48, 0xdb, 0xb7, 0xca, 0x14, 0x00, 0xc4, 0x6e, 0x86, 0x9a,
-  0x3c, 0xf7, 0xc5, 0xd8, 0x5e, 0xc6, 0x94, 0xbd, 0x43, 0x81, 0xba, 0x4a,
-  0x98, 0x86, 0x8c, 0xf8, 0x23, 0x17, 0x2d, 0x0a, 0x37, 0xa2, 0xa2, 0x31,
-  0x85, 0xaf, 0x94, 0x85, 0xce, 0xe1, 0xa1, 0x79, 0xba, 0xbd, 0x6d, 0xc5,
-  0x7e, 0xea, 0x07, 0xf9, 0xa0, 0xcd, 0x34, 0xd7, 0xc5, 0xea, 0x71, 0xe2,
-  0x52, 0x8a, 0x3c, 0x19, 0x75, 0x90, 0x7a, 0xf9, 0x96, 0xb5, 0x64, 0xb1,
-  0xda, 0x38, 0x2f, 0x04, 0x5e, 0xab, 0x7a, 0x2d, 0x8d, 0xae, 0x15, 0x63,
-  0x33, 0xfa, 0xe5, 0x1c, 0xa5, 0x88, 0xc6, 0xc2, 0xc5, 0x0e, 0xf4, 0xab,
-  0x6d, 0x50, 0x2f, 0x11, 0x37, 0x59, 0x66, 0x56, 0xdf, 0x7f, 0x3c, 0xb9,
-  0x38, 0x3e, 0xf3, 0xe3, 0x78, 0xc9, 0xf7, 0xc7, 0x17, 0xdf, 0x18, 0xad,
-  0x7d, 0x78, 0xfc, 0xe1, 0xeb, 0x13, 0x0a, 0x96, 0xbc, 0x7f, 0x7f, 0xf0,
-  0x81, 0xd2, 0xf4, 0x3f, 0x00, 0x22, 0x78, 0x00, 0xc3, 0x81, 0xc4, 0x91,
-  0x99, 0x62, 0xda, 0x3b, 0x94, 0xc0, 0xdd, 0x0b, 0x7d, 0xf6, 0x9d, 0xe3,
-  0xc7, 0xd5, 0x89, 0x8b, 0xf6, 0x24, 0xad, 0xa1, 0xd6, 0x34, 0x2c, 0x83,
-  0x07, 0x72, 0xec, 0xe0, 0xd8, 0x92, 0xb1, 0x45, 0x13, 0xdd, 0x25, 0x61,
-  0x47, 0xb2, 0x20, 0x6b, 0xe8, 0x88, 0x47, 0xf3, 0xdd, 0xed, 0xe2, 0x00,
-  0x58, 0x51, 0x4b, 0xe1, 0x0a, 0x3b, 0xc6, 0xe8, 0x4c, 0x85, 0xd8, 0x35,
-  0x7c, 0x5f, 0xb6, 0xc1, 0xfb, 0xe6, 0x8b, 0xe8, 0x12, 0x02, 0xf2, 0xa5,
-  0x73, 0xad, 0x91, 0xc5, 0x49, 0x46, 0xf3, 0xf9, 0x89, 0x7f, 0xa1, 0x0e,
-  0x5a, 0xb5, 0xbb, 0x14, 0x67, 0x77, 0x55, 0x66, 0xee, 0xe4, 0xf6, 0x4f,
-  0xb5, 0x19, 0xf5, 0xa3, 0xc2, 0x0c, 0xe3, 0xcb, 0xa5, 0x4f, 0x72, 0xad,
-  0x6f, 0x96, 0x64, 0xcb, 0xd6, 0xeb, 0x11, 0xf7, 0xd9, 0x3e, 0xab, 0x95,
-  0x96, 0xa4, 0x58, 0xcb, 0xdc, 0x99, 0xe6, 0xb4, 0x65, 0xc1, 0x74, 0x00,
-  0xd8, 0x2c, 0xf9, 0x41, 0x32, 0x66, 0x48, 0x4b, 0x7d, 0xac, 0x95, 0xde,
-  0xcc, 0xf7, 0xdd, 0xa9, 0x3a, 0xf9, 0x35, 0x3f, 0xcc, 0x16, 0x50, 0x73,
-  0x21, 0x48, 0x94, 0x28, 0x2b, 0xcb, 0x41, 0x76, 0x9f, 0x51, 0xb4, 0x90,
-  0xfe, 0xfa, 0xd7, 0xf9, 0x95, 0x9f, 0x3a, 0xc6, 0x05, 0x9a, 0xe7, 0xb1,
-  0x95, 0x15, 0x46, 0x64, 0x56, 0x8b, 0xa4, 0x28, 0x5c, 0xab, 0x07, 0x52,
-  0xe9, 0x6d, 0x77, 0xd9, 0x07, 0xe5, 0xf7, 0x7b, 0xe1, 0xef, 0xf7, 0xd8,
-  0xed, 0x78, 0x7c, 0x76, 0xfb, 0xd2, 0x32, 0x89, 0x72, 0x42, 0xb4, 0xaf,
-  0xbe, 0xa9, 0x52, 0x40, 0x3b, 0x8c, 0x1e, 0xe5, 0x3b, 0x27, 0x65, 0x99,
-  0xc8, 0x4e, 0x74, 0x82, 0x62, 0x2d, 0x2a, 0x24, 0x7a, 0xe2, 0x11, 0xf8,
-  0x5b, 0x19, 0x3f, 0x0b, 0xb4, 0x1a, 0xe4, 0x14, 0x5d, 0x57, 0xa6, 0x41,
-  0xf3, 0xfb, 0xe7, 0x16, 0xd4, 0xee, 0x64, 0x1a, 0x8a, 0x9d, 0x49, 0x5a,
-  0x51, 0x3f, 0x9f, 0xdf, 0x6a, 0xb5, 0x5c, 0xf3, 0xd7, 0x97, 0xb6, 0xd0,
-  0x4d, 0xdd, 0x0a, 0xf6, 0xb4, 0x58, 0x7b, 0x55, 0xf8, 0xa3, 0x73, 0xc0,
-  0x17, 0x92, 0x64, 0x70, 0x46, 0x46, 0xa7, 0x5f, 0x59, 0x1b, 0xd9, 0xec,
-  0x95, 0xfb, 0x44, 0xf6, 0xc4, 0x14, 0x29, 0xa6, 0x90, 0x47, 0x9e, 0x70,
-  0xf1, 0x19, 0xf3, 0x65, 0xd5, 0x7f, 0xdc, 0xdb, 0xd9, 0xd9, 0xdd, 0xdf,
-  0xfd, 0xfc, 0xd5, 0xce, 0xfe, 0xee, 0xee, 0xee, 0xde, 0xfe, 0xee, 0xfe,
-  0xfe, 0xde, 0xce, 0xcf, 0xdb, 0xe4, 0x3f, 0xba, 0xcd, 0xb3, 0x3b, 0x8d,
-  0xf0, 0x70, 0x52, 0x1b, 0xb6, 0x35, 0x57, 0x3d, 0x17, 0x0b, 0x5e, 0xec,
-  0x5c, 0xd5, 0x7c, 0x2c, 0x3d, 0x03, 0x63, 0xcf, 0x99, 0x8a, 0x6d, 0xee,
-  0x52, 0x36, 0x71, 0x06, 0x3d, 0xba, 0x68, 0xf4, 0xea, 0x6f, 0x0b, 0x1a,
-  0xe9, 0x88, 0xd4, 0x01, 0xe8, 0x34, 0xb5, 0x4d, 0x90, 0xbb, 0x9a, 0x96,
-  0xa3, 0x11, 0x52, 0x00, 0x6c, 0x8e, 0xe8, 0x20, 0x21, 0x4e, 0xd2, 0x1b,
-  0xde, 0x12, 0xe2, 0x82, 0x07, 0x3a, 0x8f, 0x0f, 0xba, 0x9b, 0x1d, 0x56,
-  0xbc, 0x04, 0x91, 0x3c, 0x2e, 0x89, 0x9f, 0x7f, 0x42, 0x42, 0xc9, 0x4c,
-  0x52, 0x65, 0x73, 0x47, 0x92, 0xcb, 0xec, 0xf3, 0x9d, 0xfd, 0x7d, 0x2a,
-  0xa1, 0xf1, 0xc7, 0xdd, 0x9e, 0x00, 0x2b, 0x7d, 0xb4, 0x78, 0xcf, 0x5e,
-  0x4f, 0xdc, 0x06, 0x99, 0x1f, 0xfe, 0x38, 0x8b, 0xc5, 0x2c, 0xab, 0x8c,
-  0x21, 0x42, 0x45, 0x58, 0x81, 0x2c, 0x84, 0xd3, 0x9b, 0xb9, 0xca, 0xc0,
-  0x6c, 0xd2, 0x41, 0xb5, 0xd3, 0x8d, 0xc0, 0x9c, 0xab, 0x36, 0x9b, 0x9b,
-  0x79, 0x77, 0xdc, 0x10, 0x6d, 0xdb, 0x28, 0x23, 0x03, 0xd0, 0x13, 0xe7,
-  0x84, 0x70, 0x36, 0x0c, 0xdf, 0xb7, 0x22, 0x19, 0x70, 0xb8, 0x0a, 0x2e,
-  0x0d, 0x4a, 0x8f, 0xb3, 0x0e, 0x0f, 0x8f, 0x89, 0xa7, 0xdc, 0x4a, 0x22,
-  0xcc, 0x8f, 0xde, 0x60, 0xf7, 0x5e, 0xec, 0xfe, 0xcc, 0xb8, 0x3f, 0x3a,
-  0x10, 0x6e, 0xd6, 0xa4, 0xac, 0xda, 0xc4, 0x4f, 0x75, 0xd0, 0x8d, 0xb4,
-  0x99, 0x0d, 0xae, 0x06, 0xaa, 0x55, 0x88, 0xb7, 0xb1, 0xe7, 0xa3, 0xaf,
-  0x99, 0xef, 0x9b, 0x0b, 0xfe, 0xc2, 0x4e, 0x53, 0x87, 0x92, 0x3a, 0x84,
-  0xd9, 0x99, 0xd9, 0xaa, 0x8f, 0x63, 0x6e, 0x98, 0xa3, 0x8b, 0x03, 0x73,
-  0x79, 0x7c, 0x1b, 0x1a, 0xfa, 0xef, 0x33, 0x63, 0x95, 0xd3, 0x62, 0x6f,
-  0xe2, 0x3c, 0xdc, 0x5a, 0x96, 0x5d, 0x9a, 0xbb, 0xe7, 0xc9, 0x26, 0x05,
-  0x2d, 0x5e, 0x7c, 0xfe, 0xe2, 0xf9, 0x16, 0x97, 0x34, 0xe0, 0xd7, 0x32,
-  0x4a, 0xb4, 0x80, 0x57, 0x52, 0x58, 0x5e, 0xc8, 0x9d, 0x6c, 0x45, 0xd2,
-  0xc7, 0xf3, 0x63, 0x3e, 0xd2, 0xd7, 0x9c, 0x8c, 0xcf, 0x46, 0x6f, 0x97,
-  0x95, 0x0d, 0xf7, 0xad, 0xa7, 0x64, 0xcc, 0x72, 0x62, 0x0c, 0x44, 0x12,
-  0x33, 0x5d, 0x8c, 0x36, 0x89, 0x1e, 0x37, 0xac, 0x39, 0xa0, 0x25, 0x0a,
-  0xfd, 0x49, 0xfd, 0x24, 0x74, 0x06, 0x14, 0x83, 0xc4, 0x70, 0x2a, 0xfb,
-  0xcc, 0x5a, 0x60, 0x64, 0x07, 0xb1, 0x3c, 0x62, 0xe9, 0xdf, 0x61, 0xb5,
-  0xde, 0xe2, 0xd0, 0x39, 0x94, 0x42, 0xda, 0x86, 0xe6, 0x41, 0xc5, 0x60,
-  0x52, 0x8f, 0x5b, 0x69, 0x5d, 0x4e, 0xdb, 0xf4, 0xc8, 0x91, 0x94, 0x17,
-  0x45, 0x44, 0x91, 0x9d, 0x42, 0x8e, 0x0b, 0x37, 0xf0, 0x2c, 0xe6, 0x2d,
-  0x97, 0x8f, 0x24, 0xa5, 0x23, 0x39, 0x1c, 0xd8, 0xdd, 0x99, 0xb9, 0x8e,
-  0xaa, 0x07, 0xd1, 0xb0, 0x61, 0x26, 0xd8, 0xba, 0x64, 0x9d, 0xc8, 0x3a,
-  0xd3, 0x2f, 0xf8, 0x90, 0x74, 0xcb, 0x3e, 0xa2, 0x46, 0x73, 0xab, 0x03,
-  0x2d, 0xb1, 0xdf, 0x9f, 0xe9, 0xaf, 0x3c, 0xe0, 0x89, 0x9f, 0xa7, 0xa5,
-  0x7f, 0xd7, 0xe7, 0x3c, 0x4c, 0x62, 0xda, 0x1d, 0xd8, 0x92, 0xae, 0x31,
-  0x33, 0x25, 0x70, 0x48, 0xd6, 0xfa, 0xd9, 0x44, 0x4f, 0xb6, 0xb7, 0xb7,
-  0x96, 0xf4, 0x46, 0x7e, 0x1d, 0xfb, 0xfa, 0x19, 0xc8, 0x3d, 0xbc, 0xd4,
-  0x48, 0xb3, 0xe6, 0xed, 0xc6, 0x69, 0x6a, 0xf3, 0x9a, 0x56, 0x72, 0x22,
-  0x00, 0x53, 0x76, 0xa3, 0xaa, 0x79, 0xc5, 0x9d, 0x57, 0xe1, 0xd5, 0x1e,
-  0x84, 0x60, 0x5a, 0x94, 0x6c, 0x89, 0xab, 0x33, 0x73, 0x9c, 0x70, 0x90,
-  0x1c, 0xd0, 0x6e, 0x68, 0x7d, 0xd8, 0xeb, 0xb2, 0xfa, 0x73, 0x95, 0x3f,
-  0x5c, 0x95, 0x58, 0xeb, 0xce, 0xeb, 0x79, 0xbf, 0x54, 0x35, 0x4f, 0x73,
-  0xeb, 0xad, 0xb3, 0x77, 0x94, 0x31, 0x8f, 0x88, 0x95, 0x9c, 0x1e, 0x2f,
-  0x70, 0x5e, 0xb4, 0x0a, 0x6e, 0x4a, 0x23, 0x88, 0x18, 0xdb, 0x41, 0x80,
-  0x72, 0xb0, 0x52, 0x2a, 0x5b, 0xbf, 0x08, 0x1f, 0x52, 0xf9, 0x05, 0x1d,
-  0xce, 0x8a, 0xb5, 0xdd, 0xc4, 0x1c, 0xb6, 0x1c, 0xf1, 0xf6, 0x6a, 0xcd,
-  0x47, 0x8f, 0x77, 0x3c, 0xa3, 0x01, 0x18, 0xb8, 0x6a, 0x0e, 0x09, 0x09,
-  0x8c, 0x83, 0xe3, 0x13, 0x82, 0x97, 0x9d, 0x18, 0x13, 0x6f, 0xa8, 0xaa,
-  0x12, 0xe0, 0x96, 0x00, 0xbe, 0x15, 0x39, 0xa9, 0xeb, 0x3d, 0x5b, 0xb8,
-  0x43, 0xb3, 0x8e, 0x60, 0xb7, 0x50, 0x70, 0x8f, 0x4d, 0x7f, 0x21, 0xdb,
-  0x33, 0xab, 0x65, 0xf4, 0xa5, 0x9a, 0x9d, 0xb6, 0x20, 0xb2, 0x25, 0x8a,
-  0xf7, 0xdb, 0x6c, 0x5a, 0xce, 0x61, 0x52, 0xb3, 0x98, 0x46, 0xdd, 0xa0,
-  0x2a, 0x9b, 0x66, 0xb7, 0xe2, 0x5d, 0x65, 0x5a, 0xd0, 0xaf, 0x25, 0x86,
-  0xc9, 0x85, 0x43, 0x1b, 0x41, 0x87, 0x07, 0x71, 0x52, 0xfa, 0xe8, 0x36,
-  0xb3, 0xab, 0x38, 0xd2, 0x0c, 0xfa, 0xbe, 0x23, 0xb3, 0x37, 0x33, 0x64,
-  0xc9, 0xd0, 0xfb, 0x64, 0xe4, 0x0a, 0x48, 0xf4, 0x63, 0x2d, 0xbc, 0x08,
-  0x5d, 0xd4, 0x35, 0x3b, 0x0b, 0xb5, 0xf6, 0x1c, 0x7b, 0xdf, 0x7b, 0x4a,
-  0x37, 0xcc, 0x21, 0x03, 0xba, 0x79, 0x7a, 0xe4, 0xa9, 0xe5, 0x5a, 0xea,
-  0xc6, 0x22, 0xa3, 0xc2, 0x12, 0x3d, 0x4e, 0xc1, 0xc4, 0xe6, 0x28, 0xa7,
-  0xe6, 0x9f, 0x00, 0x26, 0x31, 0x54, 0xd1, 0x3c, 0x4b, 0x74, 0xa9, 0x1e,
-  0x36, 0xd4, 0xfc, 0x93, 0xd3, 0x0a, 0xe4, 0x5f, 0x68, 0xaa, 0x5a, 0x80,
-  0x95, 0xb7, 0xc7, 0xb7, 0x21, 0x45, 0x1d, 0x9b, 0xf1, 0xc0, 0xf6, 0x5e,
-  0xa2, 0xe7, 0xdc, 0xff, 0xb7, 0x3c, 0x95, 0x34, 0x08, 0xd6, 0x43, 0xca,
-  0x4a, 0xa7, 0x97, 0x97, 0x61, 0xc4, 0xa5, 0x02, 0xbf, 0x5a, 0x50, 0x34,
-  0xcc, 0x16, 0xc2, 0xa1, 0x5e, 0xcc, 0xe8, 0x2e, 0xca, 0xb8, 0x2a, 0xa7,
-  0x6d, 0x9c, 0x4c, 0xba, 0x85, 0x59, 0x5e, 0x6e, 0xfd, 0xa4, 0xbc, 0xa3,
-  0x92, 0xa2, 0x97, 0x97, 0xf9, 0x98, 0x02, 0xdc, 0x8e, 0x7d, 0x97, 0x64,
-  0x3c, 0x3f, 0x38, 0xd3, 0x2a, 0x46, 0x66, 0x6c, 0xc9, 0x7c, 0x31, 0x9a,
-  0x9a, 0xcb, 0x5a, 0x71, 0xe1, 0xe6, 0x54, 0x61, 0x96, 0x8c, 0xb5, 0x85,
-  0xe6, 0x98, 0x26, 0x0c, 0x06, 0x67, 0x07, 0x8b, 0x2c, 0x75, 0xd6, 0x49,
-  0x05, 0x9f, 0xa1, 0xb6, 0x2a, 0x01, 0x76, 0x67, 0x65, 0xa1, 0x69, 0x25,
-  0x8b, 0x9a, 0x69, 0x19, 0xb5, 0x28, 0xfb, 0x1a, 0x87, 0x26, 0xf2, 0xa9,
-  0x90, 0x9f, 0x8b, 0x69, 0x8e, 0x37, 0xfc, 0xc1, 0x4c, 0xfa, 0xf3, 0xeb,
-  0xb9, 0xae, 0xb4, 0x2a, 0x44, 0xac, 0x2d, 0x49, 0x22, 0x03, 0x8e, 0xde,
-  0xd9, 0x37, 0x67, 0x83, 0xe4, 0x88, 0x5a, 0xe2, 0x3e, 0x89, 0xa2, 0x0b,
-  0x1f, 0x8d, 0xf9, 0x9d, 0x19, 0xec, 0x15, 0x5d, 0x60, 0xa7, 0x15, 0xfd,
-  0x0b, 0xad, 0xc9, 0x2f, 0xd9, 0x2d, 0x8b, 0xdf, 0xb6, 0xbf, 0x6a, 0x1a,
-  0x52, 0xb8, 0xf2, 0x19, 0xfe, 0x6e, 0xce, 0x8a, 0x51, 0xbf, 0xec, 0x32,
-  0xb9, 0x2f, 0x94, 0x55, 0x8b, 0xc4, 0x86, 0xdf, 0x4c, 0x8c, 0x56, 0x06,
-  0xdd, 0x6a, 0xfe, 0x80, 0xf5, 0xf3, 0x84, 0x23, 0xeb, 0x9f, 0xdc, 0x80,
-  0xb7, 0xb5, 0x64, 0xfb, 0x59, 0x20, 0x1c, 0x1f, 0xac, 0x8a, 0xe9, 0x5b,
-  0xaa, 0x4c, 0x60, 0x83, 0xa5, 0x84, 0x49, 0xd9, 0xa3, 0x51, 0x67, 0x9d,
-  0xf3, 0xea, 0xd9, 0x6f, 0xfa, 0x0b, 0x32, 0xbb, 0xa9, 0x2f, 0x46, 0x6b,
-  0x31, 0x4b, 0x30, 0x58, 0xfb, 0xff, 0x02, 0x6a, 0x5b, 0xfe, 0x11, 0x13,
-  0xd7, 0x02, 0x00,
+  0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd,
+  0x6b, 0x5b, 0x23, 0x57, 0x92, 0x2e, 0xfa, 0x9d, 0x5f, 0x91, 0xa3, 0x3e,
+  0x3d, 0x40, 0xb7, 0x24, 0x2e, 0x75, 0xb1, 0x8b, 0xae, 0xf2, 0x18, 0x53,
+  0x94, 0xcd, 0x98, 0x2a, 0xd8, 0x40, 0xd9, 0xee, 0x6d, 0xfb, 0xa9, 0x27,
+  0x25, 0x25, 0x90, 0x8d, 0xa4, 0x54, 0x67, 0xa6, 0xa0, 0xe8, 0x99, 0xde,
+  0xbf, 0xfd, 0x44, 0xbc, 0x11, 0xb1, 0xd6, 0xca, 0xcc, 0x25, 0x28, 0xbb,
+  0xdb, 0xfd, 0xec, 0xb3, 0xcf, 0xf6, 0x4c, 0x17, 0x20, 0x65, 0xae, 0x6b,
+  0xac, 0x58, 0x71, 0x7d, 0x23, 0x49, 0x1e, 0xfb, 0xef, 0x03, 0xfe, 0xf7,
+  0x81, 0xfe, 0xa3, 0x9f, 0x6b, 0x49, 0x72, 0x5a, 0x16, 0x7f, 0xc9, 0xc6,
+  0x75, 0xfc, 0xd9, 0x0f, 0x1f, 0xfe, 0x3b, 0x91, 0xff, 0xa3, 0x77, 0x7e,
+  0xa2, 0x9f, 0x6b, 0x0f, 0xb6, 0xbd, 0x95, 0xf8, 0x17, 0xfe, 0xfb, 0xc3,
+  0x66, 0xf2, 0xd8, 0x0b, 0xff, 0x9d, 0x6c, 0xe0, 0x85, 0x0f, 0xda, 0xc3,
+  0x4b, 0xfe, 0xfd, 0xc3, 0x87, 0x87, 0x3b, 0xf9, 0x89, 0x47, 0xc5, 0xff,
+  0x6c, 0xf1, 0x7b, 0x3f, 0x7d, 0xe0, 0x5f, 0xe9, 0x93, 0xb5, 0xb5, 0x77,
+  0xfb, 0x6f, 0x0f, 0xed, 0xd5, 0xf1, 0xb2, 0x9c, 0x26, 0x83, 0xa4, 0x2e,
+  0xd3, 0x79, 0x75, 0x99, 0x95, 0x49, 0x9a, 0xbc, 0x3f, 0x3b, 0x5e, 0x5b,
+  0x3b, 0xff, 0xf3, 0xbb, 0x93, 0xd3, 0xf3, 0xa3, 0xf3, 0xc6, 0x63, 0x3f,
+  0x16, 0x8b, 0x3a, 0x2f, 0xe6, 0xd5, 0xcf, 0xc9, 0x8f, 0xf4, 0xd0, 0x70,
+  0x38, 0xfc, 0x79, 0x6d, 0xed, 0xf5, 0xe1, 0xf9, 0xc1, 0xd9, 0xd1, 0xe9,
+  0xc5, 0xd1, 0xc9, 0xbb, 0xc6, 0xb3, 0x49, 0x5e, 0x25, 0xd4, 0x58, 0x5d,
+  0x14, 0x53, 0xfa, 0xc7, 0xb7, 0x3f, 0x49, 0xeb, 0x34, 0xb9, 0x2c, 0x8b,
+  0x59, 0x52, 0x94, 0xfc, 0x45, 0x9a, 0x54, 0x59, 0x79, 0x9b, 0x95, 0xfd,
+  0x64, 0x59, 0xe5, 0xf3, 0xab, 0xa4, 0x98, 0x67, 0x49, 0x71, 0x99, 0xd4,
+  0xd7, 0x99, 0x35, 0x57, 0x2d, 0x17, 0x8b, 0xa2, 0xac, 0xb3, 0x49, 0xb2,
+  0x28, 0x8b, 0xba, 0x18, 0x17, 0xd3, 0x2a, 0xd9, 0x78, 0x7d, 0x74, 0x70,
+  0xd1, 0x4f, 0xde, 0x1c, 0x1d, 0x1f, 0xd2, 0xbf, 0x17, 0xa7, 0xf8, 0xe7,
+  0xbc, 0x9f, 0x7c, 0x7d, 0x72, 0xfa, 0xcd, 0xe1, 0x59, 0x3f, 0xf9, 0xe6,
+  0x82, 0x3f, 0xe3, 0x7f, 0xe9, 0xc3, 0xe4, 0xe8, 0xed, 0xfe, 0x69, 0xdf,
+  0x9a, 0xe3, 0x3f, 0xf8, 0xc3, 0xe3, 0xd7, 0xf4, 0xa1, 0xfc, 0xe0, 0x3f,
+  0x4f, 0x4f, 0x4e, 0x9f, 0xe8, 0x0f, 0xfe, 0xf3, 0xec, 0xe2, 0x2d, 0x7d,
+  0x7b, 0x76, 0x71, 0x4e, 0xff, 0x9e, 0x1f, 0xf0, 0x3f, 0xe8, 0xe5, 0xfc,
+  0xed, 0x57, 0xf8, 0xe7, 0xdc, 0x35, 0x77, 0xfe, 0x56, 0x3e, 0x47, 0x4f,
+  0x17, 0x87, 0xc7, 0xef, 0x0e, 0x2f, 0x92, 0x74, 0x3e, 0x49, 0x2e, 0xe8,
+  0xf9, 0xcd, 0x61, 0x72, 0x71, 0x9d, 0x25, 0xe3, 0x62, 0x36, 0xe3, 0x8f,
+  0x68, 0x45, 0x26, 0x59, 0x95, 0x5f, 0xcd, 0x69, 0x2a, 0x34, 0xf3, 0xbb,
+  0xa2, 0xbc, 0x49, 0x92, 0xbb, 0xbc, 0xbe, 0x2e, 0x96, 0xb5, 0x35, 0xb7,
+  0xa4, 0xd5, 0x48, 0xf2, 0x79, 0x9d, 0x95, 0xe9, 0x98, 0xd7, 0x7a, 0xb8,
+  0xd6, 0x58, 0xd5, 0xe2, 0x92, 0xd6, 0xb0, 0xa2, 0x45, 0x1b, 0x2d, 0xab,
+  0x69, 0x91, 0x4e, 0x78, 0xa9, 0xe8, 0x95, 0xcb, 0x25, 0x2d, 0x72, 0x99,
+  0x8f, 0x6f, 0xaa, 0x64, 0x9a, 0xdf, 0x64, 0xbc, 0x50, 0x1f, 0xef, 0x6d,
+  0xe1, 0xfa, 0xd2, 0x68, 0xba, 0xa4, 0x35, 0x9d, 0x0f, 0xac, 0xb9, 0x3a,
+  0x1f, 0xa7, 0xdc, 0x01, 0x56, 0x2e, 0x59, 0x2e, 0xb8, 0x35, 0x59, 0xb1,
+  0x64, 0x51, 0x54, 0xf4, 0xd2, 0xf9, 0xf9, 0x31, 0x8d, 0x7c, 0x3e, 0xcf,
+  0x30, 0x8e, 0xaa, 0x4f, 0x7f, 0x14, 0x37, 0x79, 0x46, 0xbf, 0x5c, 0xe6,
+  0xd3, 0x2c, 0x91, 0x1d, 0x75, 0xcd, 0xf1, 0xd6, 0x26, 0x65, 0x56, 0x2d,
+  0x67, 0x19, 0xad, 0xde, 0xdb, 0xac, 0x4e, 0xa7, 0xf9, 0xfc, 0x86, 0x7e,
+  0xe5, 0x89, 0xcf, 0x8a, 0x32, 0x1b, 0x26, 0xfb, 0x55, 0x72, 0x5f, 0x2c,
+  0x69, 0xc2, 0xd3, 0x29, 0xed, 0x79, 0x96, 0x8c, 0xb2, 0x69, 0x71, 0xd7,
+  0xe7, 0x9d, 0x4e, 0xe6, 0xcb, 0xd9, 0x88, 0x1a, 0x28, 0x2e, 0x7d, 0x73,
+  0x69, 0xbd, 0xa4, 0xe6, 0xe4, 0xe9, 0x59, 0x4a, 0x73, 0xa2, 0x77, 0xcb,
+  0xe4, 0x3a, 0xa3, 0x39, 0x57, 0x8b, 0x7c, 0xfe, 0x6f, 0xcd, 0x75, 0xa1,
+  0xa5, 0x5d, 0x14, 0x77, 0x59, 0x49, 0x2b, 0x3b, 0xba, 0x4f, 0x68, 0x11,
+  0x46, 0x42, 0x84, 0x97, 0x44, 0x64, 0x49, 0x4a, 0x4d, 0x38, 0x02, 0x1c,
+  0x94, 0xd9, 0x34, 0x65, 0x62, 0x72, 0x7d, 0x0c, 0x69, 0x13, 0x33, 0x47,
+  0x6d, 0xfa, 0xea, 0xc6, 0x93, 0x4d, 0xbc, 0x3c, 0xa1, 0x99, 0xe4, 0xd3,
+  0x8a, 0xb6, 0x81, 0x8f, 0x85, 0x3e, 0xc3, 0x9b, 0xca, 0xc7, 0x84, 0x68,
+  0xf3, 0x7e, 0x5e, 0xa7, 0x1f, 0xd1, 0xbd, 0xd2, 0xe6, 0x60, 0x92, 0x2d,
+  0xb2, 0xf9, 0x24, 0x9b, 0xd7, 0xc3, 0xe4, 0xcf, 0xc5, 0x72, 0x9d, 0xfa,
+  0xbe, 0xcc, 0x69, 0x0d, 0x52, 0x6d, 0x8a, 0x7a, 0x26, 0x22, 0x18, 0x97,
+  0xf9, 0x22, 0xd8, 0x8a, 0x62, 0x4e, 0x7b, 0x9e, 0x9c, 0xbd, 0x39, 0x48,
+  0x9e, 0xbc, 0xf8, 0xfc, 0xb9, 0xdf, 0x73, 0x6a, 0x20, 0x19, 0xa7, 0x73,
+  0x9a, 0x71, 0x36, 0xce, 0x2f, 0xef, 0x93, 0xd9, 0x72, 0x5a, 0xe7, 0x0b,
+  0x5a, 0x7d, 0xea, 0xbc, 0xe2, 0x03, 0xb4, 0x48, 0xcb, 0xba, 0x62, 0x22,
+  0xc0, 0x07, 0x98, 0xfb, 0x5d, 0x99, 0xd7, 0x7c, 0x90, 0xf0, 0x1d, 0x8d,
+  0x30, 0xab, 0x2b, 0x6b, 0x8e, 0x69, 0x8d, 0xfa, 0x19, 0x11, 0x6d, 0xd1,
+  0xd2, 0xa6, 0x15, 0x75, 0xba, 0xb7, 0xe6, 0x79, 0xc8, 0x75, 0x5d, 0x2f,
+  0xf6, 0xb6, 0xb6, 0xaa, 0xbc, 0xce, 0x86, 0xff, 0x45, 0xe7, 0xb0, 0x5f,
+  0xdf, 0x15, 0xfd, 0xfa, 0xba, 0xcc, 0xb2, 0xbf, 0x0f, 0x89, 0x86, 0xdd,
+  0x93, 0xd4, 0xef, 0xbd, 0x0e, 0xec, 0x2a, 0xab, 0xa9, 0x87, 0xbf, 0x2e,
+  0xb3, 0x39, 0xb7, 0x48, 0xe3, 0x48, 0xa7, 0x8b, 0xeb, 0x94, 0xb6, 0x33,
+  0x23, 0x6a, 0xe4, 0x93, 0x4d, 0x04, 0xc3, 0xa3, 0x92, 0xb3, 0xfd, 0xe3,
+  0xcf, 0xdd, 0x4e, 0x2f, 0xd1, 0x27, 0xfd, 0x3b, 0xcc, 0x3e, 0xa6, 0x33,
+  0x9a, 0x1b, 0x77, 0xb5, 0xc5, 0x24, 0xf6, 0xe3, 0xce, 0x60, 0x67, 0x7b,
+  0xfb, 0xe7, 0x61, 0xfd, 0xb1, 0xfe, 0xb4, 0xe7, 0xb7, 0xb7, 0xfd, 0x1b,
+  0xfc, 0xe8, 0x06, 0xcf, 0x37, 0x99, 0x12, 0xc9, 0x70, 0xe7, 0x7f, 0xcb,
+  0xca, 0xa2, 0xda, 0xfc, 0xb4, 0x96, 0xd2, 0xc1, 0xdf, 0x9a, 0xfd, 0xbe,
+  0xcb, 0x2a, 0xd0, 0x8c, 0x9f, 0x6b, 0x92, 0x96, 0x44, 0xb7, 0x45, 0xed,
+  0xd9, 0x53, 0x9f, 0x0e, 0x65, 0xed, 0x56, 0x86, 0xce, 0x1c, 0x3d, 0x4d,
+  0x8c, 0x2d, 0x9d, 0x32, 0x4f, 0xab, 0x92, 0x79, 0xf6, 0xd1, 0x9d, 0x72,
+  0x3a, 0xfd, 0x59, 0x3a, 0xbe, 0x4e, 0x0a, 0x22, 0xfe, 0x32, 0xb2, 0x05,
+  0xe1, 0x80, 0xd2, 0x72, 0x7c, 0x9d, 0xdf, 0xd2, 0x6a, 0xbc, 0x78, 0xf1,
+  0x7c, 0x40, 0xff, 0xbc, 0xf8, 0x79, 0xeb, 0xb6, 0x98, 0xd2, 0xe2, 0x3c,
+  0xfd, 0x79, 0x8b, 0xb7, 0xf8, 0xbf, 0xd2, 0xfe, 0xa8, 0x3f, 0xfe, 0xfb,
+  0xf0, 0xba, 0x9e, 0x4d, 0x57, 0x12, 0x4e, 0x3a, 0xa7, 0xff, 0xcd, 0x8a,
+  0xe5, 0xbc, 0x76, 0xc4, 0x42, 0x34, 0x57, 0x07, 0xcc, 0x89, 0x8e, 0x2b,
+  0x9d, 0x51, 0x26, 0x6d, 0xa6, 0x21, 0x3e, 0x75, 0x74, 0x40, 0xfd, 0x71,
+  0xac, 0xc7, 0xd7, 0x34, 0x7f, 0x22, 0x9e, 0x54, 0xd7, 0xa0, 0xce, 0x53,
+  0x3e, 0x98, 0xc4, 0x1f, 0x98, 0x5f, 0xa1, 0x29, 0xe9, 0x2c, 0xa7, 0xe7,
+  0x8a, 0x72, 0x92, 0x95, 0x4d, 0x32, 0xc6, 0x70, 0xfc, 0x78, 0x12, 0x5a,
+  0xcf, 0x05, 0x75, 0xbe, 0x64, 0x56, 0x87, 0x93, 0xc6, 0x2d, 0xd0, 0x19,
+  0xbd, 0xa2, 0xa5, 0xa2, 0xe5, 0x61, 0xc2, 0xe2, 0xd5, 0xbb, 0x4f, 0xde,
+  0xd1, 0x1e, 0x0a, 0x7f, 0x08, 0xe8, 0x6f, 0x9a, 0xd5, 0xf5, 0xa3, 0x2b,
+  0xe7, 0x89, 0x68, 0x6f, 0xa7, 0x43, 0x47, 0xab, 0x9e, 0xa7, 0xad, 0xdf,
+  0xdb, 0x6d, 0x3e, 0xfc, 0x3d, 0xf1, 0x4d, 0x4f, 0xc1, 0xd4, 0xfb, 0x7f,
+  0xfd, 0x3d, 0x20, 0x84, 0x3b, 0xfe, 0x36, 0x9f, 0xdf, 0x16, 0x37, 0x34,
+  0x71, 0x5c, 0x6c, 0x69, 0x63, 0x51, 0x13, 0x66, 0x0d, 0xb3, 0x45, 0xed,
+  0x6e, 0x0c, 0xa6, 0x10, 0xfa, 0x68, 0x94, 0x8e, 0xa6, 0xf7, 0xc9, 0x75,
+  0x7a, 0x9b, 0xf1, 0x7c, 0x17, 0x44, 0x3a, 0xbc, 0x02, 0xc4, 0xc9, 0xa7,
+  0x60, 0x2d, 0x7a, 0x56, 0x27, 0xc5, 0x72, 0x44, 0xe7, 0xfd, 0xaf, 0xcb,
+  0xa2, 0x96, 0x85, 0x49, 0x6f, 0x8b, 0x7c, 0xd2, 0xb8, 0x1e, 0xaf, 0x33,
+  0xe6, 0x31, 0xdc, 0x31, 0xee, 0x0d, 0xe2, 0x71, 0x3c, 0x52, 0xd0, 0x7e,
+  0x5e, 0xf3, 0x0d, 0x44, 0xdc, 0x29, 0x9d, 0x56, 0x45, 0x92, 0x5c, 0x15,
+  0x4c, 0xb8, 0xe0, 0x89, 0xa0, 0x3c, 0xda, 0x94, 0xeb, 0x94, 0x2f, 0x1a,
+  0xba, 0x53, 0x1c, 0x69, 0x96, 0x19, 0xd8, 0x23, 0x76, 0x2a, 0x9d, 0xf6,
+  0xe5, 0x42, 0xe1, 0x77, 0x74, 0xa9, 0x92, 0xf5, 0x7f, 0x5f, 0xef, 0x27,
+  0xeb, 0xff, 0xb1, 0x0e, 0xd6, 0xbe, 0xfe, 0x87, 0x75, 0xbf, 0xcf, 0x24,
+  0x21, 0xdd, 0xe6, 0x13, 0xbe, 0x1b, 0x68, 0x26, 0x47, 0xa7, 0xb7, 0xcf,
+  0x93, 0xbf, 0xf1, 0x75, 0x4e, 0xec, 0x2f, 0xfb, 0x68, 0x44, 0x62, 0x73,
+  0xa3, 0xb7, 0x13, 0xe2, 0x83, 0xe9, 0x82, 0xef, 0xf5, 0xac, 0x1c, 0x13,
+  0x45, 0xa5, 0x57, 0x44, 0x43, 0x74, 0x3d, 0x5a, 0x73, 0xdc, 0x3e, 0xbf,
+  0x22, 0xd3, 0x22, 0x9e, 0x95, 0xcc, 0xd3, 0x19, 0x11, 0xe9, 0x31, 0x8f,
+  0x28, 0x9f, 0x77, 0x37, 0xf3, 0xc7, 0xcb, 0xec, 0xf3, 0xed, 0xbd, 0xbd,
+  0x27, 0xbf, 0xdf, 0x7d, 0x96, 0xd5, 0xd7, 0xdb, 0x3f, 0x6f, 0xb9, 0x47,
+  0x8e, 0x2e, 0xb1, 0xec, 0x46, 0x7e, 0x36, 0x08, 0xba, 0x78, 0x1d, 0xe3,
+  0xa6, 0xf7, 0xe9, 0xf7, 0xec, 0x32, 0xff, 0xd8, 0x37, 0x11, 0x46, 0x8e,
+  0x41, 0x4a, 0xa4, 0x46, 0xfb, 0xc7, 0xa7, 0xd6, 0x9a, 0xbb, 0x5a, 0x66,
+  0x15, 0xad, 0xe4, 0xdd, 0x75, 0x5a, 0x27, 0xae, 0x01, 0xd9, 0xd9, 0x59,
+  0x7e, 0x75, 0x5d, 0x27, 0x77, 0x29, 0xf3, 0xff, 0xa3, 0x5a, 0x9a, 0xe0,
+  0x8b, 0x97, 0xb8, 0xfe, 0x65, 0x4a, 0xec, 0x9b, 0xf7, 0x10, 0xb7, 0xec,
+  0xc8, 0x5f, 0xfa, 0x35, 0x91, 0xb9, 0x6c, 0x88, 0x97, 0x70, 0x46, 0x69,
+  0xc5, 0x07, 0x69, 0x4e, 0xe7, 0xb5, 0xa6, 0x6b, 0x7b, 0xc9, 0x7f, 0x5d,
+  0xd3, 0xc5, 0x8c, 0x35, 0xd0, 0x81, 0xe2, 0xee, 0x7a, 0xc3, 0xdb, 0xc9,
+  0x7b, 0xe3, 0xee, 0x13, 0xda, 0xa4, 0xbe, 0x6e, 0xb3, 0x7b, 0xa3, 0xa2,
+  0x03, 0x47, 0xcc, 0xc2, 0x51, 0x46, 0x8f, 0xf9, 0x5e, 0x4f, 0xe6, 0x89,
+  0x31, 0xa6, 0x15, 0xdf, 0xdd, 0x72, 0x43, 0xd3, 0xe0, 0x83, 0xc9, 0xd2,
+  0xa2, 0xa5, 0x37, 0x2c, 0x25, 0xb4, 0x64, 0x11, 0xbc, 0x36, 0x29, 0x88,
+  0xc8, 0x68, 0xb4, 0xc4, 0x1f, 0x79, 0x66, 0xcc, 0xf5, 0xb0, 0x2a, 0x20,
+  0x72, 0x6a, 0x93, 0x3f, 0xcc, 0x6b, 0x66, 0xfb, 0x10, 0x2c, 0x69, 0xbc,
+  0xb4, 0x28, 0x90, 0x0d, 0x89, 0x77, 0x06, 0xf3, 0xc7, 0x8d, 0x45, 0xcf,
+  0x26, 0xb7, 0x24, 0x38, 0x90, 0x8c, 0x98, 0xb9, 0xb7, 0x70, 0xc5, 0x8e,
+  0x59, 0x5c, 0x99, 0xd2, 0x79, 0x19, 0x17, 0x65, 0xc9, 0x42, 0x38, 0xef,
+  0xe0, 0x48, 0xf8, 0xda, 0x2c, 0xa3, 0x9b, 0x3d, 0x5c, 0xce, 0x9c, 0xef,
+  0x18, 0xe2, 0x2f, 0x24, 0x2a, 0x80, 0x83, 0xd0, 0x95, 0x0e, 0x36, 0x8c,
+  0x89, 0x63, 0x74, 0xdc, 0xf6, 0x78, 0x9c, 0x2d, 0xea, 0x2a, 0x36, 0x27,
+  0xdb, 0x70, 0x1a, 0x4e, 0x99, 0xf1, 0xca, 0x87, 0x72, 0x10, 0xd6, 0xd5,
+  0xdd, 0xc3, 0x10, 0x85, 0x4c, 0xb4, 0x20, 0xd1, 0xa8, 0x72, 0xab, 0x56,
+  0x83, 0x36, 0x88, 0x8d, 0x61, 0xcd, 0x67, 0x3c, 0x50, 0x7e, 0xb8, 0x92,
+  0x93, 0x0a, 0x76, 0xc9, 0x1b, 0x29, 0xc2, 0xaf, 0xf4, 0xcb, 0xb7, 0x09,
+  0xad, 0xa7, 0x6b, 0x9c, 0x7a, 0x75, 0x7b, 0xca, 0xdd, 0x57, 0xa4, 0x36,
+  0xd0, 0xe5, 0x3a, 0xa9, 0xae, 0x49, 0x1e, 0xaa, 0xf4, 0x64, 0xe7, 0x33,
+  0xa2, 0x99, 0x5b, 0xde, 0xdf, 0x45, 0x96, 0x4d, 0x86, 0xc9, 0xc9, 0x25,
+  0x73, 0xd5, 0x92, 0x06, 0x5d, 0xe3, 0x6b, 0x66, 0xf4, 0xb4, 0x6e, 0x13,
+  0xc8, 0xd5, 0xee, 0x68, 0xc9, 0x50, 0x02, 0x8e, 0xcd, 0x94, 0x46, 0x8b,
+  0x9d, 0x30, 0x97, 0x9b, 0x36, 0x6f, 0x05, 0x9c, 0x43, 0xe2, 0xde, 0x3c,
+  0xbc, 0x51, 0x96, 0x80, 0x12, 0x47, 0x59, 0x7d, 0x97, 0x65, 0xae, 0xb9,
+  0x2a, 0xa3, 0x9b, 0x88, 0x37, 0x4d, 0x84, 0x31, 0x30, 0x43, 0x5e, 0xda,
+  0xd3, 0xb3, 0x93, 0xaf, 0xcf, 0x0e, 0xcf, 0xcf, 0x93, 0xb7, 0x87, 0x17,
+  0x87, 0x67, 0x8d, 0x95, 0x9e, 0x17, 0xe5, 0x0c, 0x3b, 0x3a, 0xc9, 0xab,
+  0xc5, 0x34, 0xbd, 0xe7, 0xad, 0xa6, 0x99, 0x5c, 0x95, 0x7c, 0xb2, 0x66,
+  0x19, 0xdf, 0x0a, 0x93, 0x25, 0x38, 0x59, 0x52, 0x10, 0x7f, 0x48, 0x55,
+  0x08, 0x65, 0x66, 0x02, 0xc9, 0x75, 0x7e, 0xe5, 0x57, 0x9a, 0x38, 0x8e,
+  0x5e, 0x6e, 0x7c, 0xbb, 0xb9, 0xfd, 0x60, 0x69, 0x10, 0xfa, 0x46, 0xdf,
+  0x7f, 0x26, 0xcb, 0x54, 0x61, 0x4e, 0x44, 0xb3, 0xf9, 0x0c, 0xcc, 0x8e,
+  0x7e, 0x7a, 0x01, 0x30, 0xbb, 0x24, 0xe9, 0x97, 0x2e, 0x3c, 0x11, 0xde,
+  0xdb, 0x63, 0xb2, 0xd1, 0x3a, 0x91, 0x95, 0xc8, 0x90, 0x59, 0x33, 0x37,
+  0x28, 0x43, 0x91, 0x1e, 0x1c, 0x13, 0x23, 0x31, 0x81, 0x79, 0x9f, 0x3e,
+  0xb6, 0xe0, 0x21, 0x64, 0xb4, 0xb3, 0x13, 0x69, 0xbe, 0x5a, 0x5e, 0xe2,
+  0x20, 0x27, 0x1b, 0x24, 0x2c, 0xbf, 0x25, 0x05, 0x86, 0x94, 0x88, 0x7e,
+  0x72, 0xba, 0x89, 0xf7, 0x76, 0xb6, 0x77, 0x9f, 0x0a, 0x23, 0x18, 0x5a,
+  0x73, 0x6f, 0x02, 0x46, 0xbc, 0x73, 0xc3, 0xdb, 0x2b, 0x0f, 0x71, 0xe3,
+  0xc3, 0x64, 0xe7, 0xad, 0x7c, 0xf2, 0xf4, 0xf3, 0x67, 0x9f, 0x3d, 0xd7,
+  0x0f, 0x9b, 0x04, 0xee, 0xc6, 0x0f, 0xea, 0x80, 0x32, 0xc6, 0xda, 0x19,
+  0x8d, 0x84, 0x66, 0x37, 0xcb, 0xe7, 0x74, 0x4c, 0xe8, 0x58, 0x29, 0xaf,
+  0x62, 0x7a, 0xa6, 0xc1, 0x5f, 0x0a, 0x67, 0xd3, 0x7d, 0x6d, 0x6a, 0x79,
+  0xf4, 0x32, 0x91, 0x2c, 0xf1, 0x72, 0xb7, 0x49, 0x58, 0x09, 0x3a, 0x60,
+  0x7c, 0xeb, 0x8c, 0x98, 0xc1, 0xb2, 0xaa, 0x43, 0x32, 0x69, 0x16, 0xed,
+  0xcd, 0xdd, 0x8a, 0xf4, 0x06, 0x8d, 0x8d, 0xee, 0x44, 0xbe, 0xe6, 0xba,
+  0xeb, 0x4e, 0xac, 0x00, 0x1c, 0xf2, 0x2e, 0xaf, 0xc0, 0x1a, 0xee, 0x8a,
+  0xe5, 0x94, 0x14, 0x0b, 0x7e, 0x60, 0xb9, 0xc0, 0x0b, 0xd4, 0xd5, 0xc2,
+  0xf3, 0x80, 0x59, 0xfe, 0x91, 0x69, 0xa7, 0xdd, 0x0a, 0x0d, 0x8d, 0xfe,
+  0x5c, 0x10, 0x29, 0xc9, 0x70, 0x86, 0xed, 0x1b, 0x02, 0xbc, 0xaf, 0x43,
+  0x89, 0x7c, 0xe6, 0xc1, 0xb4, 0x4f, 0x4f, 0xce, 0x2f, 0x58, 0x02, 0x38,
+  0x7d, 0x7f, 0x41, 0x0d, 0x91, 0x08, 0x50, 0xd5, 0x44, 0x94, 0xfc, 0xe2,
+  0x3c, 0x83, 0x56, 0x67, 0xcd, 0x11, 0xed, 0xe5, 0x60, 0x54, 0x10, 0x6b,
+  0xac, 0x4b, 0x19, 0xa3, 0xa8, 0xbd, 0x7c, 0x04, 0x4d, 0xe9, 0x95, 0x3b,
+  0xdc, 0xbf, 0x94, 0x6c, 0x7c, 0xb1, 0x49, 0x44, 0x3b, 0x70, 0xcd, 0xfd,
+  0xc8, 0x4f, 0x43, 0xf6, 0xa8, 0xf2, 0x59, 0x3e, 0x4d, 0x03, 0xe1, 0x4a,
+  0xf9, 0x29, 0x9f, 0x4e, 0xc7, 0x55, 0xc6, 0x44, 0x33, 0x18, 0xb4, 0xd7,
+  0xed, 0x78, 0x05, 0xc1, 0x93, 0xfc, 0x46, 0x4d, 0x58, 0x1c, 0x80, 0x08,
+  0xbb, 0xc8, 0xdd, 0xc2, 0xf1, 0x8e, 0x31, 0xb3, 0x6a, 0x2c, 0x53, 0x7b,
+  0xd7, 0x3a, 0xcb, 0xc6, 0xf7, 0x11, 0x8c, 0x07, 0x6e, 0xe1, 0x7a, 0xa3,
+  0xb4, 0xec, 0x39, 0x3e, 0x2c, 0x1a, 0x3d, 0x35, 0x7a, 0xb5, 0xa4, 0xc1,
+  0xcb, 0xaa, 0xf6, 0x93, 0xc1, 0xef, 0x78, 0xe4, 0xac, 0xd8, 0x39, 0xbe,
+  0x44, 0x0a, 0x03, 0x1d, 0x8d, 0xb5, 0x13, 0x18, 0x14, 0x9c, 0xf5, 0xe1,
+  0x44, 0xec, 0x0e, 0x89, 0x5c, 0x62, 0xa2, 0xc8, 0x24, 0x62, 0x2a, 0x20,
+  0xc1, 0xf1, 0x8e, 0x68, 0x30, 0xa5, 0x25, 0xa4, 0x03, 0xf0, 0x96, 0x87,
+  0xae, 0x9d, 0xa9, 0xb1, 0x02, 0xfb, 0x44, 0xcb, 0x4a, 0xb3, 0x72, 0x67,
+  0x72, 0x32, 0xc9, 0xf9, 0x3b, 0x22, 0x76, 0xba, 0x6e, 0x96, 0x19, 0x64,
+  0x73, 0x9d, 0xe3, 0xcc, 0xcf, 0x0d, 0xe7, 0xf3, 0x9a, 0x64, 0xfb, 0xa4,
+  0x27, 0x6c, 0x71, 0xc0, 0xdd, 0xf4, 0x78, 0x61, 0x67, 0xad, 0x4e, 0x68,
+  0x2e, 0x13, 0xbd, 0x72, 0xf5, 0x74, 0xd2, 0xf6, 0xcd, 0xd2, 0xfb, 0x50,
+  0x88, 0x06, 0xe3, 0xc4, 0xc8, 0x8b, 0xd2, 0x49, 0x1f, 0x74, 0xbf, 0x2d,
+  0x58, 0xb2, 0x51, 0x86, 0x8a, 0x9b, 0x09, 0xe7, 0xa7, 0x92, 0xa1, 0xf5,
+  0x49, 0x74, 0xe3, 0x27, 0xaf, 0xae, 0xed, 0xd1, 0xe0, 0x96, 0x4b, 0x69,
+  0x6e, 0xcc, 0xa9, 0x59, 0xdf, 0x9c, 0x18, 0x13, 0x2e, 0x4a, 0xe1, 0x2c,
+  0xd3, 0x82, 0x79, 0x67, 0x4f, 0x04, 0x48, 0x1d, 0x39, 0x86, 0xce, 0x84,
+  0x35, 0xc0, 0xae, 0xf2, 0x9f, 0xd6, 0x9c, 0x1b, 0xb6, 0x2e, 0x57, 0xf5,
+  0xe8, 0xd0, 0xfc, 0x42, 0x9d, 0x63, 0x91, 0xe8, 0x1e, 0xab, 0x98, 0xac,
+  0x6c, 0xdd, 0x41, 0x6d, 0x74, 0xef, 0xac, 0xd7, 0x72, 0x38, 0xa0, 0x83,
+  0xb4, 0x56, 0xbe, 0x82, 0x5a, 0xa0, 0xb7, 0x8a, 0x9b, 0x19, 0xcd, 0x68,
+  0x92, 0x13, 0x63, 0xa6, 0xdb, 0xc1, 0x76, 0xc6, 0xab, 0x4b, 0x11, 0x89,
+  0xf4, 0xbe, 0xa3, 0x5f, 0xb0, 0xce, 0x1f, 0xde, 0x0f, 0x36, 0xa6, 0xc1,
+  0x09, 0xed, 0xd4, 0x31, 0xe6, 0x31, 0xb8, 0x4d, 0xf8, 0x34, 0x90, 0x0c,
+  0xcf, 0x47, 0x63, 0x70, 0x72, 0x7c, 0x1b, 0x50, 0x35, 0x6b, 0xb6, 0x73,
+  0x16, 0x1a, 0xfa, 0xb0, 0x1e, 0x8c, 0x8a, 0x82, 0xd4, 0x48, 0x3f, 0x35,
+  0x66, 0xce, 0xd9, 0x9c, 0x99, 0x95, 0xee, 0xe8, 0x60, 0x20, 0x5f, 0xa1,
+  0xe5, 0x7b, 0xd2, 0x5d, 0xd2, 0xab, 0x34, 0x77, 0xf4, 0xa6, 0x8c, 0xcd,
+  0x3d, 0x3b, 0x2f, 0xf4, 0x71, 0xde, 0x29, 0x16, 0x47, 0x94, 0x87, 0x2c,
+  0x71, 0x6b, 0x67, 0x3c, 0x2f, 0x62, 0x02, 0x38, 0xc9, 0xda, 0x2c, 0x64,
+  0x38, 0x6b, 0x6e, 0x04, 0xa9, 0x95, 0x05, 0x40, 0x70, 0x42, 0x88, 0x73,
+  0xd4, 0x64, 0x6f, 0x98, 0x7c, 0x53, 0xdc, 0x65, 0xb0, 0xa5, 0x41, 0xd8,
+  0xce, 0xd9, 0x1a, 0x44, 0x72, 0xd9, 0x5d, 0x96, 0xcc, 0x48, 0x0e, 0xa4,
+  0xd5, 0x84, 0x28, 0x80, 0xcf, 0x68, 0x9c, 0x5e, 0x81, 0x28, 0xee, 0xd0,
+  0xad, 0x9b, 0x84, 0xdb, 0xc9, 0x4b, 0x39, 0x11, 0xc9, 0x06, 0x44, 0x8d,
+  0x31, 0x2f, 0xd6, 0xa2, 0xf6, 0xb3, 0x70, 0xeb, 0x41, 0x6c, 0xb3, 0x0a,
+  0x0e, 0x17, 0xdf, 0xbb, 0x7c, 0xe5, 0x7d, 0x36, 0xdc, 0x79, 0x31, 0xdc,
+  0x1e, 0xb2, 0x62, 0x90, 0xdd, 0xe6, 0xc5, 0xb2, 0xa2, 0xde, 0x31, 0x94,
+  0x24, 0x78, 0x33, 0xe3, 0x0b, 0xb2, 0x2e, 0xae, 0xae, 0xa6, 0x22, 0x86,
+  0x6c, 0x15, 0x97, 0x97, 0x81, 0xa4, 0x52, 0x66, 0x0b, 0x51, 0x48, 0x78,
+  0x71, 0xf4, 0xd0, 0x09, 0x8f, 0x0b, 0x45, 0x14, 0x5d, 0x4e, 0xaf, 0xde,
+  0x0f, 0x7e, 0x47, 0x1b, 0x3d, 0x30, 0x6e, 0x34, 0x20, 0x66, 0xd4, 0xb2,
+  0x95, 0xbe, 0x65, 0x9b, 0x52, 0x78, 0x25, 0x7a, 0xd6, 0x25, 0x62, 0x67,
+  0x0e, 0xd2, 0x72, 0x1f, 0x52, 0x0b, 0x89, 0x63, 0x67, 0x81, 0xa5, 0x2a,
+  0x20, 0x32, 0x62, 0x4e, 0xf3, 0x49, 0x5a, 0x4e, 0xfa, 0x30, 0x78, 0xd1,
+  0xc3, 0x7c, 0xda, 0x52, 0x21, 0xf7, 0xbe, 0xf0, 0x3c, 0x4f, 0x62, 0x83,
+  0x3d, 0x1e, 0x60, 0x68, 0x14, 0x30, 0xae, 0x43, 0x57, 0x41, 0x25, 0x23,
+  0x53, 0x81, 0x3a, 0xf5, 0xf2, 0x95, 0x67, 0xde, 0xa6, 0x32, 0x5f, 0x16,
+  0xd3, 0x69, 0x71, 0xc7, 0x97, 0x08, 0x8b, 0xc4, 0xc1, 0xb6, 0xda, 0x76,
+  0x54, 0x55, 0x31, 0xce, 0xc5, 0xe2, 0xa5, 0x8b, 0x0e, 0x35, 0x1f, 0xe6,
+  0x59, 0x7e, 0xb5, 0xd2, 0xdb, 0x9d, 0x85, 0xef, 0x2a, 0x9b, 0xc3, 0xc8,
+  0x21, 0x66, 0x0b, 0xd8, 0xb8, 0x5a, 0xcd, 0xf9, 0x4b, 0x4f, 0x8e, 0xa4,
+  0xb2, 0x62, 0x1a, 0x49, 0xce, 0x5a, 0xe5, 0x9d, 0x99, 0x1c, 0xf2, 0xb1,
+  0x67, 0x8d, 0xc1, 0x51, 0xed, 0xb7, 0x9a, 0xab, 0x96, 0xd4, 0x06, 0xad,
+  0xf7, 0x24, 0x67, 0xc3, 0x26, 0xe9, 0x80, 0x62, 0xab, 0x14, 0x8d, 0x85,
+  0x5e, 0x1b, 0x2f, 0xab, 0x9a, 0xc4, 0x65, 0xeb, 0x55, 0x9a, 0xa2, 0x7e,
+  0x89, 0x24, 0xf7, 0x99, 0xce, 0x5a, 0xcd, 0x11, 0xd1, 0x7d, 0x36, 0x7c,
+  0xf2, 0x7c, 0xb8, 0x1d, 0x10, 0xc2, 0x36, 0xaf, 0x33, 0x2b, 0x88, 0x3b,
+  0xc3, 0xed, 0xd6, 0xe3, 0x1b, 0x7c, 0xa7, 0x6f, 0xda, 0x92, 0x37, 0xd6,
+  0x1c, 0xb7, 0xbd, 0x9d, 0x03, 0x7a, 0x33, 0xbc, 0xc9, 0xe4, 0xce, 0xce,
+  0xbd, 0x5d, 0xcd, 0xf5, 0x4e, 0x3b, 0x3c, 0x87, 0x50, 0x2b, 0xf7, 0x21,
+  0xdd, 0xe7, 0x7b, 0xd2, 0xd2, 0xce, 0x70, 0x27, 0xd8, 0x7a, 0x1d, 0xce,
+  0x4e, 0x7c, 0x38, 0x5d, 0x02, 0x68, 0x0d, 0x66, 0xc7, 0x44, 0x7f, 0x91,
+  0x94, 0x5c, 0xbf, 0xad, 0xe6, 0x4c, 0xe1, 0xd4, 0x17, 0x6d, 0xc9, 0x74,
+  0x91, 0x9e, 0x34, 0x16, 0x09, 0x23, 0xda, 0xfd, 0x84, 0xe5, 0x01, 0x99,
+  0xe4, 0xa4, 0x2b, 0x72, 0xbf, 0xb4, 0x21, 0x7e, 0x6b, 0x64, 0x55, 0x30,
+  0xd4, 0x5d, 0x19, 0x60, 0x84, 0x74, 0x70, 0xb1, 0xe0, 0x62, 0xe0, 0x91,
+  0x2f, 0xe9, 0xde, 0x2a, 0xa7, 0xd0, 0xfd, 0xcc, 0x62, 0x4b, 0x8c, 0x84,
+  0xf8, 0x5b, 0x3e, 0xad, 0x95, 0x20, 0xc5, 0xb8, 0xc6, 0x7d, 0x0d, 0xdb,
+  0xa3, 0x7b, 0x6c, 0x36, 0x74, 0xfa, 0xf3, 0xa2, 0x1c, 0xdc, 0xcc, 0x8b,
+  0x3b, 0x62, 0x2d, 0x57, 0xd9, 0xaf, 0x99, 0xdd, 0x9c, 0x54, 0xb0, 0x8b,
+  0xe3, 0x73, 0x99, 0x56, 0x73, 0xaa, 0xad, 0xe6, 0xf8, 0x89, 0xad, 0x5d,
+  0x77, 0xaf, 0xe3, 0x4f, 0xda, 0xaa, 0xe4, 0xfd, 0xe2, 0xaa, 0x4c, 0x27,
+  0x99, 0x2a, 0xbe, 0x6e, 0x0d, 0x12, 0x0c, 0x2e, 0x49, 0x56, 0x8d, 0x4e,
+  0xd4, 0x47, 0xd1, 0x27, 0x44, 0x45, 0xb4, 0xb5, 0xa8, 0xac, 0xab, 0x8a,
+  0x74, 0x1a, 0x18, 0x1b, 0xd2, 0xbb, 0xf4, 0x7e, 0x28, 0xce, 0x0e, 0x37,
+  0xc6, 0x56, 0x73, 0x62, 0x74, 0xaf, 0x55, 0x63, 0xd7, 0x06, 0x42, 0x9e,
+  0x45, 0x0b, 0x7f, 0xaf, 0x67, 0x79, 0x9e, 0x5d, 0x15, 0xb5, 0x72, 0x0c,
+  0xb3, 0x47, 0xb4, 0x9a, 0x33, 0x5a, 0x54, 0x9b, 0x0e, 0xaf, 0x90, 0x53,
+  0x4c, 0x87, 0x6b, 0xf1, 0x95, 0x09, 0xf6, 0x72, 0x9e, 0xd8, 0xf5, 0x9a,
+  0xa8, 0x65, 0xea, 0x21, 0xda, 0x68, 0x35, 0xd7, 0xa5, 0x14, 0xda, 0x34,
+  0x6b, 0x9b, 0x0d, 0x5e, 0x21, 0x61, 0x3c, 0x7d, 0xd1, 0x24, 0x0c, 0xba,
+  0x26, 0xe7, 0x8b, 0x79, 0xab, 0xc5, 0xd7, 0x72, 0x3d, 0xa3, 0xdb, 0x77,
+  0xa7, 0xef, 0x30, 0x1d, 0xe2, 0xcb, 0xd9, 0x5c, 0x8e, 0x0d, 0x7f, 0x04,
+  0x8b, 0x85, 0xdd, 0xf8, 0x30, 0xb3, 0xdb, 0xe9, 0x22, 0xf5, 0x68, 0xc5,
+  0x00, 0x83, 0x11, 0x9a, 0xc1, 0x8b, 0x7d, 0x2a, 0xf4, 0x75, 0x99, 0x96,
+  0xf7, 0x32, 0x53, 0xb7, 0xa7, 0xd4, 0x89, 0xf4, 0xd4, 0x39, 0x36, 0xa2,
+  0x6f, 0xb3, 0xc9, 0xd4, 0x1a, 0x6e, 0xbe, 0x29, 0x27, 0x8e, 0x17, 0xc1,
+  0x6d, 0x9c, 0x7d, 0xc6, 0x0f, 0x0d, 0x5a, 0xcd, 0x61, 0x99, 0x30, 0x1e,
+  0x6c, 0xbf, 0xd0, 0x96, 0x6a, 0xda, 0x7c, 0x6c, 0x2a, 0xfa, 0xac, 0xaa,
+  0x70, 0x4d, 0xac, 0x3d, 0x74, 0xe2, 0x9e, 0x77, 0x16, 0x36, 0x9d, 0xae,
+  0x5c, 0x59, 0x21, 0xe4, 0xfd, 0x63, 0x5e, 0xc9, 0xd6, 0xea, 0xe2, 0x43,
+  0x5a, 0x5d, 0x5b, 0x5c, 0xaf, 0x7d, 0xae, 0x5e, 0xd9, 0x5f, 0xb2, 0xb0,
+  0xe8, 0x60, 0x28, 0x3f, 0xda, 0xfc, 0xba, 0xd2, 0xd5, 0xc5, 0x86, 0xfe,
+  0xf2, 0xf5, 0xed, 0xdc, 0x65, 0x8b, 0xdf, 0x66, 0x71, 0x77, 0xf8, 0x06,
+  0xab, 0xa7, 0xd5, 0x6d, 0xe7, 0xc2, 0xa0, 0x69, 0x6f, 0xb2, 0x49, 0x80,
+  0xed, 0xd0, 0xe1, 0x85, 0xc1, 0x6b, 0xec, 0xef, 0x8b, 0x8f, 0x62, 0xa3,
+  0xb6, 0xe1, 0x3b, 0x1b, 0x60, 0xda, 0x61, 0xd0, 0xb3, 0x82, 0x26, 0x87,
+  0xb7, 0x75, 0xf0, 0xc3, 0xc0, 0x97, 0x00, 0x01, 0xcc, 0xe4, 0x68, 0x19,
+  0xcf, 0x70, 0xdb, 0x0d, 0x6d, 0xb8, 0xd3, 0xbe, 0xdb, 0x21, 0x64, 0xeb,
+  0x97, 0x58, 0x3f, 0x92, 0x1f, 0xeb, 0xb2, 0x98, 0x3a, 0x96, 0x61, 0x23,
+  0x84, 0xb4, 0x44, 0x37, 0xe6, 0x98, 0x74, 0x7b, 0xba, 0x3b, 0x37, 0xd8,
+  0xe0, 0x10, 0x18, 0xb8, 0x4d, 0xc9, 0xa0, 0x2d, 0x1e, 0xa5, 0xe3, 0x1b,
+  0x16, 0x51, 0x72, 0xf5, 0xaf, 0xd8, 0x1e, 0x89, 0x18, 0x91, 0x4c, 0x49,
+  0x70, 0x61, 0x1f, 0xa9, 0xf5, 0xb4, 0x19, 0xdc, 0xb9, 0xbb, 0x3c, 0xd2,
+  0xaa, 0x9a, 0xde, 0xee, 0x46, 0x17, 0xd1, 0x56, 0xb1, 0xb1, 0x8c, 0xdc,
+  0xa5, 0x0d, 0x72, 0xf7, 0x97, 0x2d, 0x22, 0xbf, 0x6a, 0x4b, 0x78, 0x5e,
+  0x90, 0xec, 0x97, 0xcf, 0x6c, 0x8f, 0x72, 0x77, 0xc3, 0xd9, 0x65, 0xc1,
+  0x4f, 0xdf, 0xae, 0x3e, 0xae, 0x43, 0xfd, 0x3e, 0x67, 0x77, 0xe8, 0x24,
+  0x83, 0x15, 0x94, 0x4e, 0xcf, 0x04, 0xee, 0x4e, 0x92, 0x4b, 0x32, 0x6a,
+  0x36, 0x4b, 0x36, 0xd8, 0xa7, 0xca, 0x2e, 0xc4, 0xe7, 0x3b, 0x9f, 0x3d,
+  0x0f, 0x67, 0xfe, 0xc4, 0x66, 0xfe, 0xe4, 0xd7, 0xcd, 0xfc, 0xc9, 0x6f,
+  0x3d, 0xf3, 0x27, 0x8f, 0xcc, 0xfc, 0xc9, 0xa7, 0xce, 0xfc, 0xb3, 0x67,
+  0xcf, 0x3f, 0x0f, 0x67, 0xfe, 0x94, 0x67, 0x9e, 0x2f, 0x6e, 0x9f, 0xb6,
+  0x45, 0x6c, 0x48, 0xbf, 0xaa, 0xec, 0xd4, 0x0d, 0x71, 0x8b, 0xee, 0xa0,
+  0x62, 0x7a, 0x9b, 0xa9, 0x04, 0x4a, 0x1f, 0x1c, 0x9d, 0xde, 0x3e, 0x65,
+  0x9d, 0x86, 0x95, 0x80, 0x4c, 0x8c, 0xa9, 0x31, 0x42, 0x67, 0x33, 0x4a,
+  0xa8, 0x92, 0xb2, 0x49, 0x9f, 0x3d, 0x20, 0xc1, 0x68, 0x9e, 0xeb, 0x68,
+  0x9e, 0xc7, 0x46, 0xf3, 0xc9, 0x83, 0x79, 0x1e, 0x0c, 0xe6, 0x97, 0x8e,
+  0xe6, 0x69, 0x30, 0x9a, 0x94, 0x47, 0x93, 0x2e, 0xd8, 0x57, 0xdd, 0x26,
+  0x8b, 0x37, 0x74, 0x5f, 0x73, 0xb8, 0xc3, 0xa6, 0x79, 0xbe, 0xd4, 0xf3,
+  0x37, 0x77, 0x61, 0x02, 0xd0, 0x2d, 0xd9, 0x2b, 0xaf, 0x63, 0x95, 0x76,
+  0xd4, 0x82, 0xd2, 0x96, 0x64, 0xd2, 0x92, 0x9d, 0x79, 0xb0, 0x94, 0x07,
+  0xfa, 0x13, 0xfd, 0x8f, 0x48, 0xc4, 0x39, 0xab, 0xf9, 0xe2, 0x66, 0x63,
+  0x92, 0xdc, 0x14, 0xc6, 0x89, 0xf8, 0xa5, 0xb6, 0x54, 0x5b, 0x64, 0x15,
+  0x9b, 0x14, 0x68, 0x6e, 0x39, 0x87, 0x29, 0xb0, 0x0a, 0xec, 0xfc, 0x95,
+  0x44, 0xc4, 0xe2, 0xbe, 0x62, 0xbe, 0xf5, 0x8e, 0x9b, 0x50, 0x79, 0x82,
+  0x86, 0x7b, 0x39, 0x4d, 0xaf, 0xba, 0xb7, 0x6b, 0x7e, 0x35, 0x2f, 0x34,
+  0x6a, 0xa0, 0x22, 0x62, 0x45, 0x98, 0x87, 0x92, 0x6f, 0x45, 0x9c, 0x68,
+  0x3e, 0x9e, 0x2e, 0xe1, 0x3d, 0x3e, 0xa1, 0x09, 0x9e, 0x9f, 0x7f, 0x13,
+  0x52, 0xd7, 0x3e, 0xaf, 0x20, 0xab, 0x2b, 0x83, 0xf4, 0x8a, 0x35, 0x97,
+  0x97, 0xf2, 0x83, 0xc4, 0x32, 0x7a, 0xe1, 0x8b, 0xb8, 0xb4, 0x79, 0xae,
+  0xf6, 0x09, 0x78, 0xc2, 0xf8, 0xd5, 0xfd, 0xe0, 0x1d, 0x08, 0x32, 0x7e,
+  0x1d, 0xe5, 0x96, 0xd1, 0xa3, 0xd4, 0x66, 0x86, 0x3c, 0x56, 0x9a, 0x71,
+  0x3a, 0x61, 0x95, 0x5a, 0xac, 0xfb, 0xc9, 0xc1, 0xd7, 0x47, 0xec, 0xde,
+  0x4b, 0xf3, 0xa9, 0x18, 0x6d, 0x31, 0x6d, 0x5a, 0xc3, 0x6c, 0xca, 0xfa,
+  0xb8, 0xac, 0x5a, 0x95, 0x35, 0x1c, 0x59, 0xfa, 0x5f, 0xef, 0x6d, 0xf1,
+  0x37, 0x5a, 0xc2, 0x74, 0xeb, 0xe9, 0x70, 0xbb, 0x47, 0xc2, 0x7b, 0x41,
+  0xd7, 0xf1, 0xb8, 0x98, 0x64, 0xc9, 0x68, 0x9a, 0xce, 0x6f, 0x2a, 0x11,
+  0xd9, 0x44, 0x18, 0xc5, 0x48, 0xfb, 0x7c, 0x62, 0xcb, 0xb2, 0x58, 0xaa,
+  0xd1, 0xbb, 0x7d, 0x13, 0xca, 0x74, 0x54, 0x9e, 0x54, 0x97, 0x82, 0xf8,
+  0x30, 0x89, 0x6a, 0xca, 0x1b, 0xf3, 0x5d, 0xf0, 0xad, 0x02, 0xf9, 0x6f,
+  0x94, 0x61, 0x60, 0x76, 0x73, 0xb6, 0x9a, 0x1b, 0x7c, 0x03, 0x15, 0x8e,
+  0x08, 0x87, 0x0d, 0xee, 0x72, 0x50, 0x0a, 0x73, 0x73, 0x74, 0x2e, 0xd2,
+  0xa3, 0x4b, 0x99, 0xb8, 0x3e, 0x98, 0x57, 0x42, 0xc0, 0xa6, 0xd4, 0x82,
+  0x1d, 0x49, 0xd4, 0xc9, 0x34, 0xad, 0x6a, 0x18, 0x11, 0x41, 0x3e, 0x6a,
+  0x84, 0x0a, 0xd5, 0xb4, 0x74, 0x7e, 0xcf, 0x51, 0x33, 0x9f, 0xa2, 0xa6,
+  0x5d, 0xe6, 0x57, 0xcc, 0x8a, 0x60, 0xd2, 0x43, 0xa0, 0x8d, 0xc5, 0xd7,
+  0xb0, 0xde, 0x7f, 0x5d, 0x80, 0xc0, 0x48, 0xa3, 0xc8, 0xa6, 0x97, 0xb1,
+  0xf3, 0x0a, 0x9e, 0x8b, 0x31, 0xc1, 0x3a, 0xa2, 0x7c, 0x8d, 0x87, 0x26,
+  0x56, 0x53, 0x9c, 0x06, 0x8e, 0xcb, 0x48, 0xc6, 0xd3, 0x34, 0x9f, 0x55,
+  0x81, 0xc8, 0x3b, 0x8c, 0x71, 0x13, 0x36, 0xed, 0xf3, 0xdb, 0x23, 0x76,
+  0x3a, 0x95, 0x15, 0x9b, 0xe1, 0x78, 0x43, 0x52, 0x53, 0x0f, 0xc4, 0xa5,
+  0x73, 0x9d, 0x8d, 0x6f, 0x40, 0x76, 0x81, 0x89, 0xba, 0xcd, 0x85, 0x65,
+  0xd5, 0x59, 0xdd, 0xaf, 0xaf, 0x97, 0xac, 0xb6, 0x14, 0x24, 0xbf, 0xb0,
+  0xe3, 0x9a, 0x1d, 0x31, 0xcb, 0x31, 0xb6, 0x99, 0x3d, 0xb9, 0x1f, 0x49,
+  0x19, 0xa1, 0x2b, 0xa2, 0x46, 0x50, 0x13, 0x08, 0x63, 0x40, 0x44, 0xb0,
+  0x58, 0x35, 0x3a, 0x95, 0xbb, 0x1a, 0xfc, 0xa0, 0x52, 0x5f, 0x19, 0xdc,
+  0x50, 0x66, 0x44, 0x68, 0xad, 0x66, 0xab, 0x39, 0x59, 0xdb, 0x3e, 0x7b,
+  0x62, 0x73, 0x36, 0x46, 0x78, 0x43, 0x20, 0x69, 0x39, 0x6a, 0xa6, 0x1a,
+  0xa5, 0x55, 0x3e, 0x66, 0x02, 0x9a, 0xe4, 0x57, 0x19, 0x73, 0x0c, 0x12,
+  0x56, 0xeb, 0xe9, 0xac, 0x1f, 0xb1, 0x95, 0xb0, 0x3d, 0x46, 0x45, 0xbc,
+  0x0e, 0x59, 0x79, 0x6e, 0x22, 0x8a, 0xae, 0xa3, 0x0e, 0x33, 0xbe, 0x87,
+  0xa6, 0xd8, 0x5c, 0xac, 0xe2, 0x3c, 0x0a, 0xe5, 0x99, 0x6d, 0xbe, 0x03,
+  0x2f, 0x20, 0x1d, 0x14, 0x62, 0x2e, 0x7d, 0x3e, 0x21, 0x63, 0x78, 0x35,
+  0xd8, 0x62, 0x6c, 0xe6, 0x6a, 0xb3, 0xbb, 0xe3, 0x6c, 0xb0, 0x43, 0xf6,
+  0x2e, 0x1f, 0x67, 0xe6, 0x13, 0x9f, 0x47, 0xcc, 0x4f, 0xe3, 0x69, 0xce,
+  0xcf, 0xcd, 0x96, 0x15, 0xfc, 0x74, 0xa2, 0xd2, 0xf0, 0x25, 0x72, 0x97,
+  0xb3, 0xb7, 0xe9, 0x48, 0x6c, 0x67, 0x30, 0xc5, 0x56, 0xd7, 0x70, 0x9f,
+  0xa4, 0x65, 0x0e, 0x7f, 0x6d, 0xa7, 0x39, 0x19, 0x33, 0x4f, 0x13, 0xe3,
+  0xd4, 0x61, 0x42, 0x2d, 0x13, 0x67, 0x82, 0xb7, 0x43, 0xe1, 0xec, 0x30,
+  0xcf, 0x09, 0x0e, 0xce, 0x88, 0x17, 0x59, 0xc2, 0xc5, 0x92, 0x97, 0x7c,
+  0x79, 0xbd, 0xe2, 0xc9, 0xac, 0x60, 0x89, 0xc9, 0x29, 0xdc, 0xc4, 0xd7,
+  0x4d, 0x4f, 0x43, 0xc0, 0xfb, 0xc4, 0x1e, 0x27, 0xcd, 0xc1, 0xa7, 0x9e,
+  0x57, 0x71, 0x79, 0x81, 0x48, 0x6a, 0x7a, 0xef, 0x5b, 0x5a, 0x78, 0xa3,
+  0x23, 0xed, 0x4d, 0x96, 0xdf, 0x5a, 0x7c, 0x46, 0x20, 0x9b, 0x23, 0xa0,
+  0x25, 0xe9, 0x9d, 0x67, 0x75, 0xbb, 0xb9, 0x03, 0xf4, 0xb7, 0xd7, 0x4b,
+  0x82, 0xc8, 0x18, 0x69, 0x57, 0x17, 0x6f, 0x94, 0x99, 0xfa, 0x2b, 0x66,
+  0xbe, 0xa4, 0xc7, 0x61, 0x95, 0x3b, 0xaf, 0xbe, 0xdb, 0x3f, 0x7e, 0x7f,
+  0xb8, 0xf3, 0xa7, 0x36, 0xf9, 0xd0, 0x77, 0xbb, 0xf2, 0xdd, 0x6e, 0x2f,
+  0xc6, 0xb3, 0xe6, 0x45, 0xb2, 0xfe, 0x6a, 0x3d, 0xa9, 0xee, 0x67, 0xa3,
+  0x62, 0xea, 0xb8, 0x96, 0xf6, 0xc0, 0x43, 0xe8, 0xab, 0x53, 0xcd, 0x02,
+  0x34, 0x52, 0xc4, 0x57, 0xe2, 0x8a, 0x6c, 0x8f, 0x1d, 0x21, 0x02, 0xb0,
+  0x65, 0xc0, 0xa2, 0xcc, 0x34, 0x90, 0x4e, 0xc2, 0xf5, 0xa8, 0x6a, 0x5c,
+  0x7a, 0xba, 0x45, 0xdc, 0xba, 0xf8, 0xa5, 0xfb, 0x72, 0x90, 0xda, 0xec,
+  0xdc, 0x4d, 0xd8, 0x8f, 0x29, 0x77, 0xaa, 0x0c, 0x13, 0x7b, 0xcd, 0x51,
+  0x43, 0xb4, 0x06, 0x6c, 0x98, 0x7b, 0x5f, 0x09, 0x4f, 0xe1, 0x53, 0x2e,
+  0xe7, 0xb3, 0xcd, 0xf0, 0xa0, 0xf1, 0xb3, 0x4b, 0xff, 0x36, 0x65, 0x97,
+  0xa8, 0x5c, 0x2c, 0x3a, 0x16, 0xba, 0x78, 0xae, 0xd8, 0xa0, 0x2b, 0x07,
+  0xda, 0x47, 0xff, 0x81, 0xcf, 0xf2, 0x11, 0x2b, 0xbb, 0x36, 0x3f, 0x3a,
+  0x77, 0xdc, 0xa5, 0xc6, 0x27, 0x72, 0xc8, 0xa9, 0xce, 0x03, 0xe7, 0x89,
+  0x86, 0xcd, 0xb6, 0x89, 0x7b, 0x3d, 0x94, 0xeb, 0x65, 0xa6, 0x27, 0x58,
+  0xfc, 0xe3, 0x6d, 0xd2, 0xa7, 0xc6, 0x46, 0xf9, 0x5c, 0x68, 0xdb, 0x1b,
+  0x37, 0x93, 0xc1, 0x31, 0xd3, 0xf4, 0xb4, 0x50, 0xa6, 0xee, 0xcd, 0xf7,
+  0x1a, 0x03, 0xa0, 0x34, 0x10, 0xb5, 0x0b, 0x4b, 0x90, 0x80, 0xee, 0x82,
+  0x8d, 0x52, 0x0e, 0x96, 0x5b, 0xd9, 0x05, 0xf1, 0xf5, 0xb9, 0x50, 0xbd,
+  0xb2, 0x5c, 0x12, 0xcf, 0x57, 0x51, 0x25, 0xed, 0xdf, 0xfd, 0x34, 0xdb,
+  0x4c, 0xd4, 0x04, 0xfc, 0x2e, 0xab, 0x11, 0x48, 0xb3, 0xa5, 0xb7, 0xb8,
+  0xad, 0x65, 0x30, 0xb0, 0x0e, 0xc5, 0x21, 0x84, 0x51, 0x02, 0x39, 0x7d,
+  0x10, 0x80, 0x70, 0xcc, 0xf0, 0xf4, 0x5a, 0xf8, 0x00, 0x36, 0x1e, 0xb1,
+  0x7b, 0x8b, 0x25, 0x49, 0x6a, 0xef, 0x8a, 0xce, 0xaa, 0xc9, 0xac, 0xec,
+  0x26, 0x65, 0xb9, 0x8e, 0x54, 0x7c, 0x3b, 0xcd, 0xdc, 0x11, 0xc4, 0x0a,
+  0x10, 0x9e, 0x8f, 0x24, 0x75, 0xf7, 0x5e, 0x9b, 0x11, 0x8f, 0xfd, 0x18,
+  0x06, 0x7f, 0x49, 0xed, 0xd6, 0xef, 0xcc, 0xe2, 0xf0, 0x63, 0x56, 0xb2,
+  0xd6, 0xc8, 0x4c, 0x7f, 0x29, 0x5b, 0xe6, 0xbc, 0xd5, 0x70, 0xbc, 0xcb,
+  0x4e, 0x37, 0x04, 0x02, 0x04, 0xa4, 0x6a, 0x88, 0x45, 0x7b, 0xb3, 0x2c,
+  0x90, 0x03, 0x84, 0x53, 0x8c, 0x89, 0xe8, 0x86, 0xce, 0xc5, 0x69, 0xce,
+  0x99, 0xc6, 0x29, 0xd7, 0xe5, 0xed, 0xf3, 0x56, 0x74, 0x48, 0x29, 0xb5,
+  0x15, 0x76, 0xb7, 0x7b, 0xc2, 0x5b, 0xaa, 0x7b, 0xa8, 0x14, 0xc3, 0xc3,
+  0x11, 0x27, 0x99, 0x8f, 0x8d, 0x9b, 0x14, 0x33, 0xa2, 0x86, 0x7e, 0x97,
+  0x94, 0x2c, 0x64, 0xcf, 0xf6, 0x06, 0x17, 0x03, 0x0b, 0xfa, 0xec, 0x5b,
+  0x93, 0xb7, 0x92, 0x0d, 0x12, 0x74, 0x68, 0x96, 0x97, 0xec, 0xb7, 0x36,
+  0x87, 0x32, 0x3c, 0x56, 0xed, 0x1b, 0x08, 0x8e, 0x83, 0x6c, 0xb2, 0x99,
+  0xb4, 0x02, 0x3c, 0x66, 0xc5, 0x44, 0xc8, 0x01, 0x46, 0x27, 0x61, 0x94,
+  0x03, 0x16, 0xcf, 0x1c, 0x0b, 0xbe, 0x8c, 0x6c, 0x99, 0x0e, 0x4a, 0x8f,
+  0x6f, 0x60, 0xd0, 0x49, 0x11, 0xfc, 0xaa, 0xfc, 0x96, 0xa3, 0x51, 0x1d,
+  0x33, 0x37, 0x77, 0x0e, 0xfc, 0x39, 0x31, 0x16, 0x86, 0x19, 0x8f, 0x8a,
+  0xfa, 0xda, 0xd1, 0x15, 0x26, 0xcc, 0x9b, 0x98, 0x5c, 0x2e, 0x39, 0x78,
+  0xd7, 0xc7, 0x75, 0x80, 0xd2, 0xd8, 0x6e, 0x23, 0xd1, 0xe4, 0x1d, 0xcb,
+  0xd1, 0x0d, 0xbc, 0x89, 0x34, 0x43, 0x17, 0x9e, 0xc4, 0x66, 0x73, 0xbe,
+  0xad, 0x99, 0xb7, 0x17, 0xa6, 0x55, 0x61, 0x99, 0x79, 0xbb, 0x60, 0x05,
+  0xae, 0x54, 0x60, 0x4e, 0x3b, 0x4a, 0x08, 0x96, 0x1a, 0x62, 0x71, 0xb0,
+  0xa5, 0xc9, 0x86, 0xc8, 0x59, 0x18, 0x08, 0x86, 0x2c, 0x0a, 0x04, 0x5b,
+  0x2a, 0x46, 0x03, 0x79, 0xa9, 0xe2, 0x63, 0xdb, 0x35, 0xf1, 0x35, 0x0e,
+  0xf2, 0xaa, 0x43, 0xfb, 0xcf, 0x13, 0x6d, 0xbf, 0x52, 0xdd, 0x65, 0x90,
+  0x56, 0xe3, 0x3c, 0x8f, 0x29, 0x80, 0x1c, 0x17, 0xbf, 0x99, 0x1c, 0x62,
+  0x13, 0x93, 0xfd, 0xf3, 0x83, 0xa3, 0x23, 0xb7, 0xd6, 0x43, 0x89, 0x39,
+  0x43, 0x40, 0xbc, 0x32, 0x7a, 0xc8, 0x5c, 0xc2, 0xd8, 0x47, 0xed, 0xad,
+  0xcc, 0xd8, 0x0f, 0x36, 0x36, 0x33, 0x9b, 0x9c, 0x48, 0x7a, 0x9c, 0xdd,
+  0x55, 0x58, 0x28, 0xda, 0x84, 0x4a, 0xbd, 0x98, 0x7f, 0xaa, 0xef, 0x17,
+  0xd9, 0xab, 0xfd, 0xde, 0x30, 0x54, 0x8a, 0xdb, 0x84, 0x96, 0x2e, 0x59,
+  0xf7, 0x95, 0xab, 0x18, 0x82, 0x11, 0xb3, 0x95, 0x89, 0x46, 0x9a, 0xe8,
+  0xad, 0xcc, 0x5e, 0xe3, 0x19, 0x2b, 0x30, 0x97, 0xf0, 0xb5, 0xcf, 0x9f,
+  0xec, 0xd2, 0xcd, 0x4a, 0xb2, 0xe6, 0xac, 0x0a, 0xe5, 0x7b, 0x88, 0x86,
+  0x9f, 0xea, 0x84, 0x11, 0xe6, 0x9c, 0x7c, 0xc5, 0xef, 0xb4, 0xc5, 0xd2,
+  0xe0, 0xa6, 0x58, 0x61, 0x53, 0xe3, 0x40, 0x3c, 0xe7, 0x77, 0xcb, 0xed,
+  0xd2, 0x33, 0x4b, 0xa7, 0x48, 0x75, 0xad, 0x9d, 0x5d, 0xb2, 0x27, 0xa9,
+  0x23, 0xe4, 0x10, 0xd5, 0x4e, 0x89, 0x4e, 0xfb, 0xc9, 0x72, 0xce, 0x3f,
+  0x1d, 0x6b, 0xca, 0x31, 0x7d, 0xd6, 0xa9, 0x4b, 0x0e, 0xc1, 0x6c, 0x88,
+  0x3f, 0x4c, 0xc3, 0xd1, 0xb5, 0x14, 0x2f, 0x03, 0x0e, 0x25, 0x73, 0x2b,
+  0xef, 0x85, 0x5b, 0xa1, 0xc4, 0x6c, 0x98, 0xbf, 0x4e, 0x65, 0xe8, 0x8e,
+  0xfc, 0x6c, 0x32, 0x36, 0xad, 0x7a, 0x20, 0x4c, 0x6f, 0x76, 0x28, 0xf9,
+  0x7d, 0x85, 0x68, 0x99, 0xab, 0x0c, 0x51, 0x8f, 0x72, 0xef, 0x2c, 0x4d,
+  0x9f, 0x16, 0xcb, 0xe1, 0x47, 0x75, 0xe0, 0x7e, 0xbc, 0xef, 0xbc, 0x7d,
+  0x9e, 0x65, 0x42, 0x6c, 0xfa, 0x80, 0x6c, 0x64, 0xb0, 0xb3, 0xed, 0xeb,
+  0xe3, 0x25, 0xf8, 0x30, 0xf3, 0x94, 0xc7, 0xf4, 0xf2, 0x42, 0x25, 0x07,
+  0xbc, 0xe0, 0x02, 0x82, 0x8c, 0x0e, 0x24, 0x8e, 0x09, 0xf9, 0x04, 0x7a,
+  0x87, 0xb5, 0x59, 0x3e, 0xd8, 0xae, 0x44, 0x00, 0xd3, 0xfd, 0xc2, 0x72,
+  0x9a, 0x13, 0x95, 0x87, 0xc9, 0x01, 0x8c, 0xd7, 0xdc, 0x46, 0x85, 0x46,
+  0xec, 0xd6, 0xf4, 0x5b, 0xd5, 0xa1, 0x9e, 0xd4, 0xc5, 0x14, 0xfb, 0x6b,
+  0x1a, 0x63, 0xa3, 0x4d, 0xb8, 0xcb, 0x10, 0xb7, 0xd9, 0x68, 0xca, 0x49,
+  0xba, 0x78, 0x2d, 0x4e, 0x8c, 0xc2, 0x22, 0x37, 0xaa, 0xcd, 0xa1, 0x0a,
+  0x9e, 0xf6, 0x32, 0x5f, 0x99, 0xec, 0x90, 0x22, 0x59, 0x7f, 0x5e, 0xc8,
+  0x09, 0x0b, 0x2f, 0xf4, 0xb6, 0x30, 0x42, 0xec, 0x33, 0x90, 0x80, 0xda,
+  0x57, 0xbf, 0xbb, 0x7a, 0xb3, 0xc4, 0x33, 0x36, 0x27, 0xe6, 0x45, 0x2c,
+  0x3b, 0xca, 0xf4, 0xc4, 0x0c, 0x84, 0x2b, 0x5c, 0x8c, 0x15, 0x4e, 0x52,
+  0x91, 0x3b, 0x01, 0x29, 0x43, 0x62, 0x52, 0xe0, 0xa0, 0x96, 0x7e, 0xd2,
+  0x1b, 0xf4, 0xfa, 0x2b, 0x2f, 0xa4, 0xa8, 0x48, 0x22, 0xec, 0x22, 0x22,
+  0x13, 0x21, 0xc8, 0xa1, 0x13, 0x56, 0xa0, 0x51, 0xa1, 0x2a, 0xb0, 0x46,
+  0xc5, 0x55, 0x9c, 0xa4, 0xb6, 0x72, 0xea, 0xed, 0x63, 0x22, 0xb8, 0x82,
+  0xae, 0x25, 0x9c, 0x14, 0x43, 0x1b, 0x26, 0xfb, 0x73, 0x09, 0xfb, 0x65,
+  0xe7, 0x1b, 0x4f, 0xcc, 0xba, 0x80, 0xa4, 0xdf, 0x5e, 0xed, 0xc2, 0xdd,
+  0x13, 0x0d, 0x11, 0x6d, 0x85, 0x68, 0xa4, 0xea, 0x9e, 0x3e, 0xc4, 0x87,
+  0x80, 0x78, 0xf4, 0x3a, 0x2e, 0x78, 0xb5, 0x91, 0x21, 0x0c, 0xc9, 0x2d,
+  0x8a, 0xdc, 0x1b, 0x77, 0xd7, 0xc5, 0x54, 0x84, 0xed, 0x56, 0x73, 0x5e,
+  0xe1, 0x4b, 0xee, 0x20, 0xad, 0x88, 0x9d, 0x89, 0x6d, 0x8c, 0x2c, 0x6e,
+  0x94, 0x19, 0x5c, 0x1f, 0x6c, 0x09, 0x28, 0x4b, 0xf6, 0xdb, 0x4f, 0xb3,
+  0xb4, 0x9c, 0xde, 0x9b, 0x36, 0x30, 0xb8, 0x8d, 0xf9, 0x23, 0xd9, 0x2c,
+  0x48, 0x14, 0x96, 0x96, 0x73, 0x7e, 0x46, 0xc3, 0x30, 0x2c, 0x8f, 0xa2,
+  0x96, 0xc0, 0x18, 0x89, 0xde, 0x61, 0x11, 0xf4, 0x36, 0x67, 0xc3, 0x03,
+  0x11, 0x1b, 0x29, 0xb0, 0x6d, 0x4a, 0x64, 0xbf, 0x00, 0x48, 0x06, 0x4d,
+  0x4a, 0xd4, 0xe1, 0x35, 0x72, 0x82, 0xd4, 0x5a, 0x41, 0x47, 0xf1, 0x9a,
+  0x6e, 0xc8, 0x2a, 0xaf, 0x97, 0x69, 0x74, 0xb9, 0xce, 0xa1, 0x82, 0x7f,
+  0x36, 0x7c, 0xfa, 0x64, 0xb8, 0xed, 0x35, 0x09, 0xdc, 0xe3, 0x1c, 0xa0,
+  0x92, 0xcf, 0x34, 0x05, 0x4d, 0x15, 0xb2, 0x8e, 0x1c, 0xd7, 0x99, 0x9f,
+  0x85, 0x77, 0xa9, 0xa8, 0x00, 0xda, 0xb5, 0x94, 0x91, 0xec, 0xa3, 0xb6,
+  0x36, 0xba, 0x0f, 0xd9, 0xfe, 0x3f, 0x70, 0xdf, 0xcb, 0x85, 0x1f, 0xc6,
+  0xf3, 0x46, 0x0e, 0x18, 0xc6, 0xb0, 0x42, 0x20, 0x38, 0x10, 0x8a, 0x22,
+  0x8e, 0x3f, 0x5f, 0x92, 0x54, 0x50, 0x27, 0x2f, 0x8b, 0xcb, 0x4b, 0x3a,
+  0x7f, 0x5f, 0x74, 0x14, 0x10, 0x79, 0x64, 0xeb, 0x0c, 0xb9, 0x5e, 0xb8,
+  0x36, 0x8c, 0x7d, 0x25, 0xcd, 0x70, 0xe8, 0x44, 0x3d, 0xb9, 0x57, 0x39,
+  0x53, 0x88, 0x34, 0x37, 0x8c, 0xa8, 0x21, 0xe1, 0xf7, 0xb6, 0xe3, 0x12,
+  0x01, 0x65, 0x41, 0xb6, 0x30, 0x0f, 0x49, 0xfc, 0xac, 0x5e, 0x59, 0xed,
+  0x04, 0x15, 0xd3, 0x54, 0x6f, 0xf2, 0xc5, 0x82, 0x29, 0x48, 0x32, 0x4b,
+  0xc0, 0x80, 0x9c, 0xca, 0x3f, 0xca, 0xe8, 0xa8, 0x82, 0xd4, 0x2c, 0x8c,
+  0xa8, 0x58, 0x92, 0x5c, 0x22, 0x83, 0x1e, 0x65, 0xb4, 0x8f, 0xed, 0xe6,
+  0x4c, 0xe1, 0xf6, 0xe1, 0xc4, 0xaa, 0xcf, 0x4c, 0x38, 0x74, 0x78, 0xae,
+  0x5c, 0x9d, 0xb7, 0xc9, 0xc7, 0xf6, 0xa9, 0xb9, 0x27, 0xc6, 0x91, 0xbc,
+  0x69, 0xd9, 0x71, 0x99, 0xf3, 0xa3, 0xff, 0x79, 0xe8, 0x83, 0xbf, 0x5d,
+  0x74, 0xf5, 0x3d, 0x8e, 0x60, 0xec, 0xd6, 0x4c, 0x88, 0xdd, 0x1d, 0xd0,
+  0x7e, 0xf5, 0x30, 0x14, 0xbe, 0x00, 0xec, 0x6e, 0xa2, 0x1b, 0xbb, 0xe0,
+  0x68, 0x23, 0x89, 0x93, 0x47, 0xce, 0x19, 0x53, 0xe0, 0x1d, 0xf1, 0x97,
+  0x6c, 0x0b, 0x21, 0x5e, 0x45, 0xe7, 0x3a, 0xc0, 0x16, 0x22, 0xb0, 0xd3,
+  0x89, 0x76, 0x47, 0xb5, 0x88, 0xdd, 0x10, 0xb2, 0xfc, 0xf6, 0x69, 0xe8,
+  0xea, 0x16, 0x14, 0x40, 0x8d, 0x1f, 0xef, 0x32, 0x28, 0xb5, 0x82, 0x4a,
+  0x9c, 0xe9, 0xf2, 0xb7, 0x14, 0x60, 0x07, 0xe3, 0x7c, 0x71, 0xcd, 0x9a,
+  0xda, 0x4b, 0x84, 0xb3, 0xb1, 0x39, 0x58, 0x3e, 0xf8, 0x22, 0xea, 0xe4,
+  0x3a, 0xd7, 0x83, 0x51, 0xe9, 0xf5, 0x6e, 0x6f, 0x2b, 0x53, 0xcd, 0x4d,
+  0xb1, 0xb2, 0x30, 0x7f, 0x0d, 0xa1, 0xa4, 0xa6, 0xdb, 0x7c, 0xd0, 0x75,
+  0x24, 0x86, 0x36, 0x53, 0xda, 0x90, 0xb6, 0x60, 0x5f, 0x0d, 0x93, 0x33,
+  0x58, 0x35, 0x97, 0x0b, 0x89, 0xab, 0x67, 0x97, 0x98, 0x7e, 0xd7, 0xd1,
+  0x4b, 0xaa, 0xba, 0x11, 0xb2, 0x83, 0x6c, 0xc3, 0xb0, 0xbf, 0x79, 0x43,
+  0x5c, 0xcb, 0x83, 0xef, 0x48, 0x80, 0xde, 0x6b, 0x5b, 0x6b, 0xd9, 0xc7,
+  0xbc, 0xb7, 0xb5, 0x75, 0x77, 0x77, 0x37, 0x24, 0x8e, 0x3d, 0xaf, 0xaa,
+  0xe9, 0xb0, 0x28, 0xaf, 0xb6, 0x26, 0xc5, 0xb8, 0xda, 0x4a, 0x17, 0x8b,
+  0x6a, 0xcb, 0x46, 0xd8, 0xc8, 0x16, 0x33, 0x1b, 0xd5, 0xf9, 0xb9, 0x9b,
+  0x1c, 0xb3, 0x2a, 0x98, 0x90, 0x9d, 0x4c, 0x08, 0xd3, 0x1a, 0x31, 0x78,
+  0xf1, 0x84, 0x1c, 0xab, 0xe1, 0xfa, 0xeb, 0xf9, 0xf2, 0xe2, 0xf8, 0x5c,
+  0xcc, 0x63, 0xed, 0xfb, 0x9c, 0x53, 0x99, 0x12, 0xdb, 0x9e, 0xb0, 0x71,
+  0xd8, 0x5d, 0x44, 0xe3, 0x39, 0x3f, 0x3f, 0xc0, 0x87, 0xe7, 0x4b, 0x96,
+  0xac, 0xa8, 0x9b, 0xf2, 0x3e, 0x51, 0x8f, 0x4d, 0x9b, 0xf8, 0x69, 0xba,
+  0xc9, 0xa7, 0xfe, 0x67, 0x0b, 0x71, 0x95, 0xd7, 0xc3, 0xcb, 0x6c, 0x52,
+  0x94, 0x69, 0xc7, 0xb0, 0x5d, 0x70, 0x46, 0x1f, 0x56, 0x67, 0x4c, 0x4f,
+  0x6d, 0x91, 0xb6, 0xf0, 0x81, 0xd6, 0x6b, 0xc8, 0xbf, 0xc3, 0x18, 0x23,
+  0x8b, 0x66, 0x1f, 0xf3, 0x7a, 0xfd, 0xee, 0x35, 0x94, 0x69, 0x3a, 0x0f,
+  0xd5, 0x6f, 0x49, 0xd8, 0x24, 0x39, 0xc2, 0xbf, 0x37, 0x89, 0x8b, 0xaa,
+  0x67, 0x66, 0xc2, 0x4f, 0xfc, 0x93, 0x3e, 0x5a, 0xbb, 0x9d, 0x44, 0x4d,
+  0xc2, 0xe1, 0x55, 0x41, 0x97, 0xfc, 0xf5, 0xac, 0xbd, 0x9e, 0xe0, 0x1b,
+  0xe6, 0x41, 0x87, 0x35, 0x9c, 0xf4, 0xf0, 0x5b, 0x33, 0x54, 0x2c, 0xe7,
+  0x41, 0xeb, 0x44, 0x09, 0x63, 0xe2, 0x14, 0x9c, 0xd2, 0x64, 0x4e, 0xba,
+  0xce, 0xf6, 0x58, 0xa0, 0xaa, 0x37, 0xee, 0xbb, 0x8c, 0x08, 0xa7, 0xfb,
+  0xcf, 0x91, 0x78, 0x41, 0x6d, 0xfb, 0x94, 0x6e, 0xf8, 0x99, 0xd8, 0xa3,
+  0x14, 0x1b, 0x1d, 0x96, 0xa8, 0x25, 0x5a, 0x34, 0x97, 0x0a, 0xe7, 0x75,
+  0xc0, 0xcb, 0xcb, 0xbc, 0xee, 0xa5, 0x64, 0x56, 0x74, 0x78, 0xc0, 0xdb,
+  0xf4, 0x63, 0x3e, 0x5b, 0xce, 0xb0, 0x0d, 0x4c, 0x79, 0xfa, 0x98, 0xde,
+  0x25, 0x62, 0x2d, 0x62, 0x63, 0x88, 0x74, 0xbb, 0xce, 0xfa, 0xac, 0xe3,
+  0x04, 0x11, 0x6f, 0x59, 0xcd, 0x51, 0x4e, 0xde, 0x8d, 0xcc, 0xc2, 0x09,
+  0x91, 0xf9, 0x8c, 0x03, 0xc6, 0x9a, 0x5c, 0x24, 0x59, 0x5c, 0xa7, 0x55,
+  0x86, 0x2c, 0x8a, 0xfc, 0x52, 0xa6, 0x14, 0xe6, 0xf4, 0x34, 0x52, 0x7b,
+  0x34, 0xdf, 0xcf, 0x73, 0x5c, 0x12, 0xb8, 0xf2, 0x62, 0x22, 0x11, 0xbe,
+  0x10, 0xf0, 0xe5, 0xe2, 0x4d, 0x06, 0xdc, 0x16, 0xdf, 0x16, 0xe6, 0xf8,
+  0x6c, 0xab, 0xdb, 0x1f, 0xe1, 0x4b, 0x15, 0x81, 0xc6, 0x7c, 0xf8, 0x9f,
+  0x0d, 0x9f, 0xec, 0x72, 0xb0, 0x46, 0xc3, 0x10, 0x26, 0x19, 0x50, 0xc4,
+  0x74, 0xc6, 0xf9, 0xcc, 0x05, 0x64, 0xaf, 0x56, 0xb6, 0x20, 0x79, 0xce,
+  0x58, 0x4e, 0x98, 0xa5, 0x1f, 0xb1, 0xe6, 0xff, 0xb8, 0xdc, 0xf2, 0xf8,
+  0x69, 0x80, 0xac, 0x4a, 0x7a, 0x65, 0xd9, 0x26, 0x38, 0xf8, 0xa6, 0x9d,
+  0x1f, 0x09, 0x5b, 0xf6, 0x17, 0xa2, 0x5a, 0x15, 0xd8, 0x35, 0x04, 0x67,
+  0x60, 0x31, 0xca, 0xfd, 0x80, 0xa2, 0xa4, 0xcd, 0x88, 0xa1, 0x96, 0x76,
+  0x82, 0x08, 0x9e, 0x63, 0x88, 0xd8, 0xd0, 0xcb, 0x91, 0xc1, 0x7c, 0xde,
+  0x0b, 0xfa, 0xfb, 0x3a, 0xa7, 0x91, 0x97, 0xe3, 0xeb, 0x7b, 0xd6, 0xb7,
+  0xd8, 0x85, 0x22, 0x66, 0xa3, 0x20, 0x8e, 0xa0, 0x4d, 0xbf, 0xe8, 0x43,
+  0xf5, 0x7c, 0x1e, 0x7d, 0xc2, 0xe7, 0x87, 0x9e, 0x33, 0x39, 0xa1, 0x35,
+  0x3a, 0x56, 0x04, 0xf8, 0xe4, 0x66, 0xd3, 0x0a, 0x16, 0xb6, 0xc8, 0xe8,
+  0x06, 0x45, 0xa0, 0x06, 0xe1, 0x7a, 0x66, 0x25, 0x2d, 0x2f, 0x61, 0x7b,
+  0xbc, 0xf4, 0x1d, 0xb1, 0x1f, 0x49, 0xfa, 0x42, 0x88, 0x2f, 0xeb, 0x90,
+  0xf7, 0x5d, 0x1a, 0x61, 0x2d, 0x5d, 0xdf, 0xb7, 0xb5, 0x37, 0xdf, 0x79,
+  0x47, 0x2f, 0x2a, 0x6c, 0x3e, 0xa6, 0x41, 0xda, 0xc2, 0xe4, 0x96, 0xff,
+  0x2a, 0x6c, 0x87, 0x05, 0x1c, 0x1a, 0x8c, 0x40, 0x25, 0x30, 0x27, 0x1f,
+  0x0c, 0x2e, 0xeb, 0x8e, 0xa3, 0x26, 0xd8, 0xd2, 0xe6, 0x4e, 0x4f, 0x2f,
+  0x59, 0xbc, 0x24, 0x1a, 0xa9, 0x93, 0xe3, 0x37, 0x7c, 0x35, 0x1f, 0x9c,
+  0xd1, 0xcf, 0xdc, 0xc2, 0x0e, 0x58, 0x99, 0x00, 0xd2, 0x01, 0xdb, 0x74,
+  0xde, 0x7e, 0x77, 0x9e, 0x6c, 0x9c, 0x9c, 0x6f, 0x3d, 0x79, 0xb1, 0xdd,
+  0xb5, 0x2e, 0x6c, 0x30, 0x1c, 0x83, 0x06, 0xa2, 0x4b, 0x18, 0xe0, 0x76,
+  0x33, 0x5a, 0x8d, 0xfb, 0xe2, 0xa5, 0x84, 0x5d, 0x20, 0x6a, 0x12, 0x38,
+  0xdf, 0x62, 0x40, 0x89, 0x4d, 0x97, 0xd2, 0x2a, 0xf9, 0x3a, 0x3a, 0xcf,
+  0xd3, 0xc3, 0xb7, 0x66, 0xbe, 0x95, 0x48, 0x18, 0x92, 0x8b, 0x69, 0xd4,
+  0xec, 0xb0, 0xec, 0x12, 0xd6, 0x59, 0x76, 0x6b, 0x5e, 0x83, 0xe4, 0x18,
+  0xd7, 0x3d, 0xd8, 0x0e, 0x5b, 0x98, 0x4d, 0x78, 0x58, 0x64, 0x2c, 0x12,
+  0xfa, 0x16, 0x94, 0x33, 0xf1, 0x1d, 0xdc, 0x61, 0x3e, 0xa3, 0x2c, 0x8c,
+  0x81, 0x21, 0xc9, 0x9b, 0xf3, 0x8e, 0x7f, 0xbb, 0x13, 0x18, 0x89, 0x4e,
+  0xdb, 0x79, 0x31, 0xfc, 0x6c, 0xd3, 0xad, 0xe5, 0xa4, 0x6f, 0xd9, 0x24,
+  0x2f, 0x1f, 0x70, 0xf2, 0x9d, 0x67, 0xc2, 0x6f, 0xc3, 0x24, 0x71, 0xbc,
+  0x04, 0x07, 0x1c, 0xb2, 0xaa, 0xcc, 0x35, 0x0d, 0xbf, 0x15, 0xee, 0x20,
+  0x7e, 0xb5, 0x2d, 0xe0, 0x2b, 0x56, 0x48, 0x10, 0x90, 0x00, 0x5f, 0x17,
+  0x2b, 0xd0, 0xba, 0x68, 0xc9, 0xa8, 0x2c, 0xee, 0xd8, 0x8a, 0x84, 0xf4,
+  0x26, 0x50, 0x67, 0x2a, 0x51, 0xe5, 0xd7, 0x69, 0xc7, 0x0b, 0x4b, 0x73,
+  0x76, 0xc1, 0x2d, 0xdf, 0x5c, 0xbc, 0x3d, 0x96, 0xdc, 0x1e, 0xbe, 0xb9,
+  0x16, 0x1a, 0x63, 0x83, 0x31, 0x2f, 0x47, 0xc4, 0xdd, 0x59, 0x2d, 0xad,
+  0x45, 0x34, 0xe4, 0x63, 0x1f, 0x61, 0xbd, 0x30, 0x4d, 0x3a, 0x81, 0x7c,
+  0x11, 0xf3, 0x6b, 0xea, 0x5d, 0x68, 0x1e, 0x28, 0x6c, 0x26, 0x29, 0xe0,
+  0x74, 0x87, 0xdd, 0x2f, 0xda, 0x94, 0x43, 0x02, 0xdb, 0x54, 0x0d, 0x70,
+  0x5b, 0x1f, 0x07, 0x24, 0xd3, 0x0d, 0x78, 0x74, 0x03, 0x6a, 0x5e, 0xa2,
+  0x33, 0x98, 0x05, 0x1d, 0xd0, 0x2d, 0x2d, 0x74, 0x92, 0x0c, 0xde, 0xf0,
+  0x56, 0xf0, 0x23, 0x9d, 0xed, 0x0b, 0x76, 0x49, 0x15, 0x2c, 0x2c, 0x1b,
+  0x0c, 0x79, 0xfc, 0xa9, 0x98, 0x81, 0x87, 0xf6, 0x57, 0x99, 0xde, 0x21,
+  0xbd, 0x68, 0x8a, 0x68, 0x84, 0x48, 0x7c, 0x07, 0xbf, 0xcc, 0x4a, 0xba,
+  0xcb, 0x20, 0x43, 0x1a, 0x7b, 0x6a, 0x49, 0xe3, 0x12, 0x91, 0x4e, 0x2b,
+  0x58, 0xa7, 0xb5, 0xcf, 0x23, 0x49, 0xbe, 0xd4, 0x74, 0xf3, 0xae, 0x1d,
+  0xa9, 0x84, 0x73, 0x88, 0x71, 0x47, 0xd4, 0x75, 0x4b, 0x5a, 0x04, 0xdd,
+  0xaa, 0xec, 0x88, 0x2b, 0xef, 0xfb, 0x66, 0x0d, 0x12, 0x67, 0x99, 0x0f,
+  0x1a, 0x58, 0xe5, 0x3c, 0x92, 0x49, 0xc8, 0xcb, 0x89, 0x73, 0xd5, 0x81,
+  0x8f, 0x91, 0x10, 0x39, 0xd0, 0xd0, 0x16, 0x1e, 0x91, 0x64, 0x7f, 0x31,
+  0x6c, 0x85, 0x6c, 0x3c, 0x62, 0x65, 0x5a, 0xcd, 0x21, 0xa9, 0x3b, 0x85,
+  0x0b, 0xcc, 0x9a, 0x76, 0x3b, 0x10, 0x3b, 0x77, 0x3e, 0x03, 0x2d, 0x88,
+  0x97, 0xb4, 0x03, 0x88, 0x50, 0x47, 0x88, 0xd1, 0x48, 0x3c, 0x52, 0x0c,
+  0x06, 0xa1, 0x61, 0x12, 0xb8, 0x06, 0x1d, 0x13, 0x12, 0xcb, 0x50, 0xe2,
+  0xfd, 0x55, 0x8b, 0x31, 0xf2, 0xb6, 0x16, 0x39, 0xdf, 0x54, 0x0d, 0xcf,
+  0x9d, 0x1c, 0xde, 0x59, 0x56, 0x5e, 0x05, 0x96, 0xd5, 0x88, 0x55, 0xc2,
+  0x67, 0x93, 0x40, 0x3b, 0xfe, 0xf7, 0x81, 0x78, 0x9c, 0x71, 0x9b, 0x2d,
+  0xc5, 0x25, 0x87, 0x2f, 0xd6, 0x39, 0xa1, 0x4d, 0x7d, 0xf7, 0x73, 0x5a,
+  0x16, 0x26, 0xa2, 0xae, 0xb6, 0x3d, 0x9d, 0xbe, 0x9a, 0x92, 0xe6, 0x7f,
+  0xbf, 0x9e, 0x68, 0x46, 0xa6, 0x06, 0x76, 0xd7, 0x6a, 0x19, 0x40, 0xae,
+  0xcf, 0xf8, 0x7a, 0x39, 0xbf, 0x31, 0xcd, 0x7d, 0x5a, 0x14, 0x1c, 0x50,
+  0xc4, 0x0e, 0x99, 0x56, 0x73, 0xeb, 0x41, 0x6f, 0xff, 0x1e, 0xb6, 0x1d,
+  0x5b, 0x65, 0x64, 0xf3, 0x23, 0x19, 0xd0, 0x9d, 0x30, 0x77, 0xad, 0x0a,
+  0x38, 0x44, 0xf2, 0x65, 0xdf, 0x22, 0x5b, 0x6a, 0x4f, 0x3c, 0x1c, 0x23,
+  0x96, 0x76, 0xb9, 0x40, 0x16, 0x38, 0xcd, 0x61, 0x74, 0x75, 0xad, 0x8a,
+  0x5b, 0x9c, 0xed, 0xd9, 0x16, 0xd5, 0xd1, 0xb0, 0x08, 0xf3, 0xc3, 0x91,
+  0xbb, 0xda, 0xa3, 0x1c, 0x21, 0x76, 0x62, 0x98, 0xbc, 0x0d, 0x33, 0xc6,
+  0x5b, 0x91, 0x4f, 0xb6, 0x8b, 0xc3, 0xe4, 0x94, 0xd6, 0x6b, 0xd0, 0xf1,
+  0x6f, 0x5f, 0xd9, 0xb6, 0x4b, 0xd0, 0x48, 0x1a, 0x8e, 0x78, 0x92, 0xac,
+  0x5f, 0x16, 0xc5, 0x28, 0x2d, 0xd7, 0x75, 0x03, 0x10, 0xa6, 0x33, 0x52,
+  0xe5, 0x8d, 0x97, 0x24, 0x7a, 0x3a, 0x92, 0x2f, 0xe5, 0xad, 0xa1, 0x88,
+  0x51, 0x01, 0x6f, 0x28, 0xa6, 0x13, 0xb7, 0x08, 0xed, 0x0e, 0x23, 0x9b,
+  0xc6, 0x9b, 0x4a, 0xb2, 0x55, 0x5a, 0x96, 0x39, 0xc3, 0x37, 0xd0, 0x91,
+  0x5f, 0x96, 0x73, 0xc9, 0x86, 0x9e, 0x67, 0x77, 0x12, 0x59, 0xe0, 0x9c,
+  0x77, 0x1c, 0x11, 0xc4, 0x78, 0x0f, 0x6c, 0x1a, 0xd0, 0x4d, 0xec, 0x38,
+  0xd6, 0xd8, 0xb6, 0x28, 0x00, 0x04, 0x01, 0xc7, 0xa8, 0xc5, 0xc1, 0xf7,
+  0x30, 0x97, 0xe1, 0x13, 0x16, 0x67, 0x05, 0xe0, 0x67, 0xc2, 0x35, 0x02,
+  0x89, 0xe3, 0x35, 0x78, 0xe2, 0x72, 0xb6, 0xb0, 0xd0, 0xb2, 0xa8, 0x34,
+  0xf0, 0x3d, 0x4c, 0xfe, 0x9a, 0x91, 0x2c, 0x38, 0x0f, 0xe6, 0xa0, 0x37,
+  0x96, 0xde, 0x30, 0xcc, 0xc7, 0xad, 0xca, 0xa1, 0x7a, 0x24, 0xd1, 0x08,
+  0x0e, 0x2c, 0x81, 0x96, 0x3f, 0x00, 0x5d, 0x50, 0x0f, 0x39, 0xb7, 0xab,
+  0xdd, 0xc4, 0x5c, 0x36, 0xa9, 0x86, 0x0a, 0x20, 0x24, 0x4c, 0xf4, 0x2a,
+  0x7a, 0x95, 0x9a, 0x19, 0x6a, 0x84, 0x40, 0x00, 0x33, 0xe0, 0x86, 0xcb,
+  0x36, 0xb1, 0xe9, 0x24, 0xe6, 0x54, 0xc6, 0xa9, 0x90, 0x1d, 0xcf, 0x15,
+  0x06, 0x00, 0x1a, 0x92, 0x83, 0xf2, 0x9a, 0x3b, 0x11, 0xc6, 0x61, 0xf9,
+  0xa8, 0x1d, 0xba, 0xb3, 0xe0, 0x0d, 0xab, 0xf4, 0xbf, 0xc1, 0x8c, 0xb2,
+  0xc2, 0x9b, 0x2f, 0x19, 0xac, 0x23, 0x39, 0xac, 0x72, 0x81, 0x17, 0x9d,
+  0x40, 0xc2, 0x20, 0x5c, 0xa0, 0xb3, 0xb2, 0x2d, 0x0d, 0x40, 0xa4, 0x4e,
+  0xea, 0x2f, 0xb0, 0xb3, 0x39, 0xbd, 0x58, 0x28, 0x31, 0x2d, 0x43, 0xe9,
+  0xa9, 0x23, 0x59, 0xf1, 0xbc, 0x7a, 0xba, 0x5c, 0x3d, 0x75, 0xca, 0x2d,
+  0xe5, 0x2d, 0x56, 0x8d, 0xc1, 0x15, 0xca, 0xdf, 0x34, 0xe2, 0xd0, 0x5f,
+  0xc6, 0x71, 0x71, 0x8a, 0x95, 0x31, 0x7f, 0x99, 0x77, 0xde, 0xd4, 0x3b,
+  0xef, 0x21, 0x49, 0xec, 0x42, 0xed, 0xe2, 0xb5, 0xba, 0x50, 0x61, 0x69,
+  0x9d, 0x42, 0xaf, 0x69, 0x05, 0x82, 0x90, 0x76, 0xa0, 0x71, 0x7d, 0x4c,
+  0xfa, 0x1d, 0x29, 0x9e, 0xa3, 0x7f, 0x38, 0x14, 0x9c, 0xe8, 0xb1, 0x2a,
+  0xb2, 0xdb, 0x30, 0xb7, 0xd1, 0xaf, 0x8b, 0xde, 0xdc, 0x92, 0xb5, 0xfd,
+  0x49, 0x9c, 0xda, 0x87, 0xc4, 0xc4, 0xd8, 0xb4, 0x00, 0xc0, 0x24, 0xaf,
+  0x95, 0x5b, 0x2d, 0x60, 0xc4, 0x51, 0x58, 0x22, 0x49, 0x8c, 0x4f, 0x0c,
+  0x94, 0x08, 0x01, 0x52, 0xe1, 0x8a, 0x46, 0x02, 0x89, 0x39, 0x8b, 0xf1,
+  0x23, 0x72, 0x5a, 0xf5, 0x76, 0x72, 0x3c, 0x4b, 0x42, 0x22, 0xda, 0x5c,
+  0x4d, 0xf2, 0x14, 0x40, 0x5b, 0x93, 0x48, 0x18, 0xe7, 0x18, 0xda, 0x4b,
+  0xe5, 0x52, 0x84, 0xe7, 0x19, 0xf2, 0x3f, 0x68, 0xc3, 0x7f, 0x25, 0xcd,
+  0xc8, 0x01, 0x06, 0x7c, 0x54, 0x90, 0xe8, 0x19, 0x91, 0x79, 0x24, 0xca,
+  0x53, 0xfc, 0x54, 0x12, 0x8b, 0x8d, 0x85, 0x4e, 0x2b, 0x05, 0x1b, 0x1b,
+  0xc9, 0x2a, 0x3d, 0x40, 0x3a, 0xcc, 0x23, 0x1f, 0xa2, 0x9b, 0x0e, 0xe1,
+  0xe8, 0x7a, 0x4f, 0xc1, 0xca, 0xf4, 0x02, 0x61, 0x99, 0xd0, 0x5c, 0x1f,
+  0xca, 0x1a, 0x3b, 0x74, 0xf3, 0xb8, 0x7c, 0x08, 0x79, 0xb0, 0x45, 0xe9,
+  0x4e, 0x07, 0x89, 0x65, 0x7c, 0x3e, 0x6d, 0xa5, 0xff, 0x35, 0x85, 0xb4,
+  0x5f, 0x72, 0x1c, 0xfa, 0x8e, 0x8c, 0x94, 0xb9, 0x8b, 0x7f, 0x4e, 0xa7,
+  0x67, 0xd2, 0x5c, 0xe4, 0x5a, 0x15, 0xa7, 0x05, 0x93, 0x12, 0xc2, 0xf8,
+  0x5d, 0xd4, 0xf9, 0x22, 0x2b, 0x59, 0xb2, 0xac, 0xbc, 0xe4, 0x49, 0x3b,
+  0xd8, 0xcc, 0x51, 0xdb, 0xf9, 0x9c, 0x47, 0xdf, 0x51, 0xb9, 0xe9, 0x04,
+  0x1c, 0x7c, 0x7d, 0x04, 0x73, 0xe0, 0x34, 0xa7, 0xcb, 0x41, 0xce, 0x88,
+  0xcc, 0x45, 0xb0, 0xdd, 0xdc, 0x51, 0xb9, 0xca, 0x5d, 0x04, 0x42, 0xda,
+  0x4c, 0x15, 0x6f, 0xc5, 0xfa, 0x24, 0x16, 0xd3, 0xa3, 0x48, 0x01, 0x1a,
+  0x9c, 0xa3, 0x3a, 0x88, 0x8b, 0xba, 0x4d, 0xbd, 0x09, 0x3c, 0xba, 0x76,
+  0xe8, 0x5d, 0x13, 0xf7, 0x59, 0xcb, 0x11, 0xc7, 0x08, 0xee, 0x8a, 0x8e,
+  0xfd, 0xd1, 0x93, 0xad, 0x60, 0xe5, 0x65, 0xd5, 0xde, 0x5a, 0xc7, 0x53,
+  0x8b, 0xee, 0xe3, 0x60, 0x96, 0xd8, 0xa0, 0x56, 0x1c, 0x60, 0x4b, 0x8a,
+  0xb7, 0xe1, 0x43, 0x6d, 0x4b, 0xab, 0x2a, 0xea, 0x8d, 0x75, 0xf6, 0x74,
+  0x22, 0xa5, 0xff, 0x64, 0xcb, 0x3d, 0x34, 0x69, 0x3a, 0xa5, 0x6c, 0x51,
+  0xa8, 0x0a, 0x9f, 0x78, 0x68, 0xad, 0x59, 0xa2, 0x01, 0xff, 0x9d, 0x76,
+  0x62, 0xbb, 0xdc, 0xa9, 0xbf, 0x4f, 0x5e, 0xb1, 0x74, 0xf8, 0xa5, 0x46,
+  0x6e, 0xb2, 0x25, 0xb5, 0x0a, 0x02, 0x80, 0xf4, 0x82, 0xc5, 0xd8, 0x55,
+  0x61, 0xc5, 0x32, 0xc4, 0x9b, 0x43, 0x08, 0x65, 0xb8, 0x7a, 0x42, 0x7e,
+  0x0c, 0xe7, 0x51, 0x09, 0x5e, 0xe2, 0xbf, 0xb5, 0x17, 0xef, 0xd5, 0xe3,
+  0xab, 0xf7, 0x4b, 0x97, 0xef, 0xe1, 0xd5, 0x13, 0x50, 0x1c, 0xd2, 0x3f,
+  0x10, 0x1f, 0xfc, 0x2a, 0x88, 0x58, 0x85, 0x51, 0x52, 0x02, 0x9e, 0x9c,
+  0xa3, 0xb4, 0xc9, 0x6b, 0x02, 0x47, 0xe4, 0xab, 0x7f, 0xd6, 0xae, 0x83,
+  0x18, 0xa1, 0x27, 0xf1, 0xe0, 0xe3, 0xcd, 0x09, 0x73, 0xc7, 0xde, 0x87,
+  0x59, 0x21, 0x6a, 0x4b, 0x43, 0x0b, 0x1c, 0xb1, 0xf6, 0x91, 0xe8, 0xbf,
+  0x16, 0x62, 0x1e, 0x01, 0xa9, 0x6c, 0x10, 0x6f, 0x4e, 0xd5, 0x6f, 0x33,
+  0xae, 0x75, 0xe6, 0xf7, 0xa5, 0x5d, 0x55, 0x8f, 0x4d, 0x4e, 0xe9, 0x42,
+  0xa4, 0x2c, 0x04, 0x56, 0x37, 0x24, 0x7d, 0xd0, 0x8b, 0xfa, 0xdf, 0x22,
+  0xfe, 0x5c, 0xe3, 0x64, 0x3e, 0x4b, 0x05, 0xf4, 0xe8, 0x2e, 0xb1, 0xcd,
+  0x7e, 0x73, 0xcd, 0x52, 0xd5, 0xae, 0x6d, 0xa3, 0xe3, 0xcd, 0xe5, 0x08,
+  0xb0, 0xd3, 0xed, 0x63, 0xcb, 0x4c, 0x74, 0xfb, 0xfe, 0x0f, 0x9b, 0xa2,
+  0xc4, 0xc3, 0x8a, 0x0a, 0x28, 0xb8, 0x99, 0x57, 0x12, 0x14, 0x45, 0xc3,
+  0xca, 0xfe, 0xba, 0xe4, 0x44, 0xe5, 0x10, 0x99, 0xae, 0x63, 0xa7, 0x41,
+  0x20, 0x61, 0x1f, 0x1e, 0xd5, 0x29, 0x14, 0x6b, 0x75, 0xf9, 0xbf, 0xf2,
+  0xc6, 0x9a, 0x01, 0x22, 0xb5, 0x95, 0x6a, 0x87, 0xa0, 0xc3, 0x07, 0x88,
+  0xd5, 0x11, 0x67, 0x9c, 0x2e, 0x57, 0x52, 0x20, 0xdd, 0x54, 0xd9, 0x34,
+  0xbb, 0x92, 0x7b, 0xf5, 0xf8, 0xf0, 0xbb, 0xc3, 0xe3, 0x8e, 0x04, 0x59,
+  0xcb, 0xe7, 0xce, 0x81, 0x1c, 0x98, 0xa5, 0x0c, 0x1c, 0x0d, 0xc6, 0x1f,
+  0xb9, 0x31, 0x18, 0xe0, 0x49, 0x5a, 0x8c, 0x66, 0x0a, 0xe4, 0xcc, 0x20,
+  0x35, 0x3b, 0x0d, 0x46, 0xb6, 0x31, 0x09, 0xd6, 0x82, 0x0e, 0x59, 0x0d,
+  0x25, 0xcc, 0x0b, 0x17, 0xd3, 0xd7, 0xe7, 0xe7, 0x5b, 0x37, 0x59, 0x39,
+  0x62, 0x10, 0xce, 0x2e, 0x41, 0x21, 0x7d, 0x29, 0x79, 0x0d, 0xe5, 0x4f,
+  0x3c, 0x31, 0x08, 0x68, 0x75, 0x33, 0xe9, 0xbc, 0xb1, 0x28, 0xa6, 0xf9,
+  0xf8, 0x3e, 0x79, 0xad, 0x23, 0xab, 0x24, 0xee, 0x97, 0x77, 0x1d, 0xee,
+  0x18, 0x35, 0x87, 0x9f, 0x7c, 0x3b, 0xd8, 0x3f, 0x1f, 0xbc, 0x3e, 0x3c,
+  0x3e, 0xfc, 0x7a, 0xff, 0xe2, 0xd0, 0x32, 0xc0, 0x38, 0xac, 0x68, 0x05,
+  0x5d, 0x08, 0x45, 0x7c, 0xab, 0xe3, 0xc4, 0xaa, 0x70, 0xd2, 0x45, 0x9d,
+  0x8f, 0x6f, 0xb2, 0xda, 0xa7, 0x99, 0x08, 0xb4, 0x31, 0x73, 0xeb, 0x5a,
+  0xa2, 0x13, 0xe2, 0xcd, 0xd1, 0xd6, 0x4c, 0x67, 0x3a, 0xd4, 0xce, 0x0c,
+  0xd2, 0xe9, 0x1d, 0xc3, 0x70, 0xbd, 0x9f, 0xb3, 0xa2, 0xa5, 0x98, 0x38,
+  0x2c, 0x86, 0x63, 0xf6, 0xc1, 0x96, 0x04, 0xeb, 0xdf, 0xd8, 0x65, 0x04,
+  0xda, 0xad, 0x10, 0xd5, 0x24, 0x6a, 0x53, 0x53, 0x97, 0x5f, 0xe3, 0xc9,
+  0x56, 0x40, 0x9f, 0x47, 0x90, 0x60, 0x43, 0x84, 0x7e, 0xd5, 0x11, 0xd5,
+  0x84, 0x8a, 0xaa, 0xf1, 0x75, 0x36, 0xd3, 0xc3, 0xc5, 0xa1, 0x1e, 0xf4,
+  0xa8, 0x42, 0x74, 0xd1, 0x01, 0xbb, 0xe3, 0xb8, 0x26, 0x39, 0xca, 0xa2,
+  0x3f, 0x49, 0x4c, 0x26, 0x02, 0x11, 0x23, 0x22, 0x12, 0x11, 0x03, 0x90,
+  0x51, 0x24, 0x40, 0x08, 0x71, 0x9a, 0xa0, 0x12, 0x0b, 0xc6, 0x6f, 0x84,
+  0xdf, 0x3b, 0x35, 0x41, 0xb0, 0xe2, 0xda, 0xaa, 0xa6, 0x8f, 0x17, 0xb4,
+  0xe4, 0xc9, 0x42, 0x43, 0xc6, 0xf0, 0xa1, 0x9e, 0x66, 0x77, 0x33, 0xf0,
+  0x48, 0x05, 0xea, 0x57, 0x22, 0x55, 0xbb, 0xb9, 0x3f, 0xc8, 0x0a, 0x0a,
+  0xc2, 0x16, 0x35, 0x83, 0xd9, 0xf2, 0x7c, 0xd8, 0xed, 0x60, 0xe0, 0xc1,
+  0x86, 0xa4, 0x12, 0x53, 0x79, 0xea, 0xb6, 0xc2, 0xaf, 0x2a, 0x6a, 0x4b,
+  0xb6, 0x07, 0xa1, 0x4a, 0x70, 0x7c, 0xa9, 0x5a, 0x61, 0x34, 0xf7, 0xbf,
+  0xb9, 0xeb, 0xc8, 0xa7, 0x1f, 0x64, 0x8b, 0xb2, 0x8e, 0x04, 0xed, 0x4a,
+  0xd8, 0xaa, 0xb3, 0x4d, 0x4d, 0x02, 0x5c, 0x83, 0x00, 0x3d, 0xe7, 0xf0,
+  0xf4, 0x4c, 0x20, 0xaa, 0x8f, 0xf9, 0x17, 0x8d, 0x44, 0xe9, 0x00, 0x46,
+  0x00, 0xb2, 0x52, 0xb2, 0xc6, 0xe0, 0xf2, 0x86, 0x56, 0xed, 0x02, 0xe4,
+  0x2d, 0x96, 0x51, 0x22, 0x57, 0x14, 0xc9, 0x4f, 0x49, 0x1a, 0xf3, 0x69,
+  0x53, 0xbb, 0x87, 0x54, 0xe4, 0x91, 0xf0, 0x10, 0xfa, 0x22, 0x1a, 0x61,
+  0x10, 0x12, 0x7d, 0x63, 0xde, 0x95, 0x13, 0xfe, 0xd2, 0x54, 0x89, 0x07,
+  0x9c, 0xcd, 0x8d, 0xe4, 0x4f, 0x6e, 0x96, 0xdf, 0x4c, 0xca, 0x00, 0x13,
+  0xa3, 0x39, 0x55, 0xa0, 0x36, 0x31, 0xf2, 0x40, 0x9b, 0xd0, 0x45, 0x63,
+  0x33, 0x89, 0x9f, 0x1a, 0x00, 0x0e, 0x1e, 0x4f, 0xd8, 0x6c, 0x3e, 0xe2,
+  0x1f, 0x17, 0x44, 0x2f, 0x16, 0x73, 0x14, 0xbc, 0x1b, 0xa0, 0x89, 0x1d,
+  0x37, 0x80, 0xa6, 0x8f, 0x5a, 0x1c, 0x5b, 0x76, 0xaf, 0xb1, 0xf0, 0x62,
+  0xfd, 0xbd, 0x54, 0x27, 0x65, 0x3a, 0xcd, 0xeb, 0x7b, 0x51, 0x5d, 0x03,
+  0x1b, 0x08, 0xdb, 0x86, 0x23, 0xe7, 0x86, 0x16, 0xde, 0x01, 0x67, 0x61,
+  0x96, 0xba, 0x6d, 0x5d, 0x4b, 0x3f, 0x68, 0x23, 0x44, 0xd5, 0x02, 0x7a,
+  0xd6, 0x47, 0xf6, 0x24, 0xe4, 0xac, 0xe7, 0xeb, 0x50, 0x64, 0x65, 0x18,
+  0xa4, 0x4a, 0xa9, 0x7c, 0x5e, 0xc4, 0xa8, 0x4a, 0x19, 0x04, 0x29, 0x20,
+  0x82, 0xbd, 0xd3, 0x24, 0xc1, 0x15, 0xe4, 0xef, 0x31, 0x4b, 0xe4, 0x75,
+  0x64, 0x2d, 0x5f, 0x03, 0x54, 0x3c, 0xd4, 0x79, 0xb1, 0x6f, 0x30, 0xe9,
+  0xcd, 0x69, 0x84, 0x97, 0x97, 0x74, 0xc7, 0x75, 0xb0, 0x8b, 0x64, 0x9c,
+  0x2c, 0x5b, 0x3a, 0xd7, 0x2c, 0x53, 0x4d, 0xa7, 0x63, 0x01, 0x9a, 0x60,
+  0xea, 0xc1, 0x0b, 0x38, 0x5b, 0xa4, 0x4c, 0x0a, 0x9a, 0x30, 0x47, 0x41,
+  0x08, 0x0d, 0x8f, 0x32, 0xea, 0x2f, 0x67, 0x84, 0xb4, 0x10, 0xee, 0x2f,
+  0x62, 0x77, 0x22, 0xca, 0x63, 0x46, 0xcf, 0x1c, 0x85, 0x79, 0x07, 0xbf,
+  0x2b, 0xf1, 0xe4, 0x21, 0xd6, 0x1f, 0x28, 0x01, 0x6e, 0x81, 0xd3, 0xbe,
+  0xba, 0x3a, 0x11, 0xaa, 0xd0, 0x89, 0xef, 0x47, 0xfc, 0xbb, 0xc3, 0xea,
+  0xd2, 0x27, 0xd3, 0xea, 0x36, 0x7e, 0xb4, 0xab, 0xdb, 0x5f, 0x7e, 0xb4,
+  0x05, 0xf7, 0x92, 0x57, 0xfe, 0xf0, 0xf4, 0xfc, 0xbb, 0xc4, 0xc5, 0x97,
+  0xc5, 0xae, 0x6c, 0x39, 0xd5, 0x7e, 0x5e, 0x4c, 0xe7, 0xe1, 0xc9, 0xfe,
+  0x47, 0x8f, 0x36, 0xf5, 0xaf, 0xe7, 0xf9, 0x74, 0xff, 0xfc, 0xbb, 0xe0,
+  0x24, 0x07, 0x9b, 0x1f, 0x1c, 0xdd, 0x8e, 0x2c, 0x50, 0xc3, 0x75, 0x2c,
+  0xbc, 0x80, 0x5b, 0x8b, 0xd2, 0x78, 0x75, 0xfb, 0x29, 0x34, 0x4e, 0x43,
+  0xe9, 0xd0, 0x78, 0x67, 0x79, 0x1f, 0xa2, 0xf1, 0x70, 0x8f, 0x9a, 0x81,
+  0xb5, 0xbf, 0x8c, 0xc2, 0xc5, 0x98, 0xb6, 0x92, 0xc6, 0x69, 0x9c, 0xbf,
+  0x8c, 0xc6, 0xe9, 0x85, 0x0e, 0x8d, 0xdb, 0x86, 0xc6, 0x89, 0x7c, 0x15,
+  0x8d, 0x5b, 0xd8, 0x71, 0x26, 0xf4, 0x1d, 0x92, 0x77, 0x97, 0xb4, 0x1b,
+  0x04, 0x3b, 0xaf, 0x06, 0x1e, 0x99, 0xf9, 0xa5, 0xfb, 0xf5, 0x8b, 0x08,
+  0x9e, 0x99, 0xa3, 0x5b, 0xa4, 0xb7, 0x17, 0xcb, 0xfa, 0x4a, 0x68, 0xf0,
+  0xf5, 0xbb, 0xf3, 0x00, 0x41, 0x8a, 0x66, 0x51, 0x02, 0xe9, 0x30, 0x6c,
+  0x6d, 0xf8, 0x98, 0x39, 0x9d, 0x25, 0x31, 0xc5, 0x11, 0x17, 0xc9, 0x1d,
+  0xe6, 0x28, 0x3f, 0xb2, 0x0d, 0x11, 0xda, 0xcc, 0x55, 0xd9, 0x09, 0xd8,
+  0xe7, 0x3d, 0xe1, 0x81, 0x6c, 0x1a, 0x20, 0x2b, 0x7b, 0x5d, 0xd9, 0x14,
+  0x27, 0x49, 0xec, 0x2e, 0x9d, 0x76, 0xde, 0xc2, 0xa1, 0xa6, 0x73, 0x19,
+  0x69, 0x6e, 0x6e, 0x89, 0x44, 0x9b, 0x8f, 0x38, 0x02, 0x3c, 0x12, 0x94,
+  0xfa, 0xc5, 0x56, 0xa1, 0x06, 0x19, 0x0a, 0x44, 0x19, 0x89, 0x79, 0x06,
+  0x58, 0x40, 0x03, 0xad, 0x46, 0xc9, 0xcf, 0xa5, 0x1c, 0xa0, 0xfe, 0xc4,
+  0x20, 0xe5, 0x8e, 0x1c, 0x78, 0x4a, 0x15, 0xb3, 0x20, 0x82, 0x9c, 0x90,
+  0xde, 0xc1, 0xe6, 0xca, 0x07, 0xd1, 0xb5, 0xb0, 0xf3, 0x8b, 0xdb, 0xa7,
+  0x03, 0x9e, 0x2a, 0xed, 0xd5, 0x62, 0xa0, 0x73, 0x7e, 0x70, 0xeb, 0x47,
+  0xb9, 0x20, 0x1b, 0x84, 0xcf, 0x8b, 0x98, 0x41, 0x1a, 0x22, 0xaf, 0x34,
+  0x90, 0x36, 0x98, 0x22, 0x1c, 0xc6, 0x5c, 0x9b, 0x62, 0x03, 0x2b, 0x4d,
+  0xf8, 0x9c, 0x5d, 0xd9, 0x24, 0xb1, 0xa9, 0xd7, 0x83, 0x4f, 0xa5, 0x74,
+  0xa1, 0x9a, 0x5d, 0x5a, 0x5e, 0x2d, 0x3b, 0xce, 0x55, 0x98, 0xbc, 0xbc,
+  0xb9, 0xd9, 0xb2, 0x0a, 0x42, 0xc4, 0x8f, 0xff, 0x6f, 0x6f, 0xe2, 0xa7,
+  0xec, 0xe2, 0xf3, 0x7f, 0xfe, 0x2e, 0x3e, 0xff, 0xdf, 0x64, 0x17, 0x9f,
+  0xff, 0xff, 0x64, 0x17, 0x0d, 0xae, 0x24, 0xd8, 0x93, 0xfe, 0xea, 0xed,
+  0x3c, 0x77, 0x49, 0x35, 0x12, 0x7c, 0xcc, 0x92, 0x03, 0xef, 0x83, 0xb5,
+  0x22, 0x46, 0x06, 0xcd, 0xf4, 0x6e, 0xa0, 0xf7, 0x4a, 0x06, 0x5d, 0x1c,
+  0x65, 0x50, 0x13, 0xe4, 0x2d, 0xda, 0xf7, 0xe8, 0x34, 0x80, 0xa9, 0xf1,
+  0xbb, 0x63, 0x38, 0x96, 0x6a, 0x14, 0x88, 0x46, 0x3c, 0x54, 0xec, 0x06,
+  0x27, 0x3e, 0x2e, 0xb1, 0xff, 0x92, 0x8a, 0x0b, 0x57, 0xb9, 0x6c, 0x17,
+  0xc4, 0x91, 0x91, 0x05, 0x49, 0xd2, 0x06, 0xed, 0xbd, 0xe4, 0xe5, 0x1e,
+  0xc8, 0xe3, 0x5f, 0x44, 0xf3, 0xb1, 0x80, 0x54, 0xe9, 0x87, 0x14, 0x27,
+  0x07, 0xa5, 0x86, 0x26, 0x12, 0x5d, 0x83, 0x14, 0x42, 0xf0, 0x22, 0x5c,
+  0x3b, 0x8f, 0x90, 0xc3, 0xaf, 0xa2, 0x87, 0x7f, 0x88, 0x1c, 0x32, 0xbe,
+  0xac, 0x01, 0x3d, 0xc9, 0xee, 0xec, 0xf7, 0x67, 0xc7, 0x8f, 0x86, 0x63,
+  0xf5, 0xce, 0x04, 0xa8, 0xb2, 0x4c, 0x4e, 0xd3, 0xab, 0xac, 0x17, 0x82,
+  0x96, 0x7e, 0x02, 0x0c, 0xcd, 0x83, 0x28, 0x2e, 0x4d, 0xdc, 0x16, 0x18,
+  0x5f, 0x3c, 0x6a, 0x8b, 0x78, 0x6f, 0x63, 0x50, 0x77, 0x22, 0x23, 0x37,
+  0xd3, 0xed, 0xad, 0xa8, 0x8a, 0xfa, 0xb6, 0x7a, 0x7f, 0xe2, 0x64, 0x87,
+  0x9e, 0x0d, 0xd0, 0x4d, 0xb9, 0x1b, 0x31, 0xce, 0x8f, 0x78, 0x0b, 0x72,
+  0x33, 0x45, 0x82, 0xc7, 0x2a, 0x7e, 0x7d, 0x4d, 0x5f, 0x41, 0x55, 0x88,
+  0x6b, 0x41, 0x3a, 0xbe, 0x2c, 0xa6, 0x6d, 0xd2, 0x04, 0x56, 0x6a, 0x9a,
+  0x1c, 0xeb, 0xa0, 0xf6, 0xd4, 0xb1, 0x2e, 0x1b, 0x69, 0x43, 0x52, 0xa9,
+  0x41, 0x65, 0x53, 0x8b, 0x84, 0x9e, 0x72, 0x35, 0x9d, 0x76, 0x0c, 0x26,
+  0xd3, 0xaf, 0x86, 0x94, 0x68, 0x02, 0x78, 0x56, 0x8b, 0x98, 0x91, 0xa3,
+  0xb8, 0x8a, 0x9b, 0xd6, 0x6f, 0xe8, 0x70, 0x3e, 0x84, 0x67, 0x9e, 0x23,
+  0x2e, 0x5f, 0x06, 0xf1, 0x87, 0x3f, 0xee, 0x99, 0xc1, 0xe4, 0xe7, 0x78,
+  0x3a, 0x45, 0x07, 0x34, 0xd3, 0x32, 0xd3, 0xbc, 0x0b, 0x59, 0xd1, 0x48,
+  0x82, 0x56, 0x63, 0xf6, 0x5d, 0x2c, 0xb7, 0x15, 0x49, 0x48, 0x2d, 0x91,
+  0x90, 0x08, 0x40, 0x4b, 0x77, 0x71, 0x10, 0x66, 0x02, 0x3f, 0x95, 0x78,
+  0x42, 0xa8, 0xf7, 0x81, 0x54, 0xc6, 0x80, 0x66, 0xde, 0xb1, 0x58, 0x69,
+  0x20, 0x13, 0x1b, 0x9c, 0x83, 0x8e, 0x4d, 0x86, 0xa3, 0x23, 0x73, 0xfa,
+  0xed, 0xc1, 0xf9, 0xef, 0x76, 0x76, 0x2d, 0x7c, 0x33, 0x37, 0x34, 0xd7,
+  0x73, 0x40, 0xee, 0xb4, 0xc9, 0x9b, 0x95, 0x22, 0x29, 0xa1, 0xc5, 0x98,
+  0xef, 0x3e, 0xea, 0xd3, 0xbd, 0x26, 0xd6, 0x68, 0x2d, 0xa6, 0x22, 0xb9,
+  0x80, 0x3e, 0x46, 0x3e, 0x8b, 0x5a, 0x2d, 0x68, 0x83, 0x9c, 0xe1, 0x4c,
+  0x40, 0x99, 0xdc, 0xa2, 0xf5, 0x5d, 0xb4, 0xf7, 0x88, 0x4b, 0xbe, 0x70,
+  0xf5, 0xa4, 0x09, 0x54, 0x12, 0x89, 0x13, 0xeb, 0x86, 0xcd, 0x09, 0x18,
+  0x7b, 0x1b, 0xe9, 0xca, 0xee, 0x35, 0x29, 0xe9, 0x21, 0x12, 0x72, 0x2f,
+  0x58, 0x8f, 0x5e, 0xd4, 0xd4, 0x1e, 0x26, 0xdc, 0x2d, 0x4a, 0xc9, 0x43,
+  0xbc, 0xc9, 0xee, 0x5d, 0x15, 0x96, 0xc8, 0x86, 0x32, 0x20, 0x34, 0xfd,
+  0xe4, 0x3b, 0x7b, 0xf2, 0x6f, 0xb1, 0x48, 0x05, 0x21, 0x2d, 0x51, 0xbe,
+  0xb8, 0x2d, 0xd6, 0x00, 0x3c, 0x02, 0xd6, 0x0c, 0x95, 0x61, 0xb4, 0x5a,
+  0xd6, 0xf4, 0x3e, 0x46, 0xe6, 0x4d, 0xd8, 0x38, 0xe8, 0x72, 0x12, 0x91,
+  0x88, 0x7c, 0x92, 0x10, 0xf5, 0x51, 0x1d, 0x6d, 0xf5, 0x03, 0x21, 0xd9,
+  0x6c, 0xcc, 0x0f, 0x52, 0xa6, 0xd8, 0xb0, 0x98, 0x8f, 0x6f, 0x20, 0xcb,
+  0xeb, 0x0d, 0x17, 0x4e, 0xce, 0x02, 0x74, 0x5c, 0x5c, 0x7e, 0x24, 0x5b,
+  0x86, 0x7d, 0x0d, 0x4c, 0x8e, 0x7c, 0x0b, 0xe6, 0x73, 0x4b, 0xe8, 0xe3,
+  0x3c, 0x96, 0xdb, 0xbc, 0x2c, 0xe6, 0x90, 0x4d, 0x6e, 0xd3, 0x32, 0x87,
+  0x3a, 0x4a, 0xa3, 0xfd, 0xf0, 0xfa, 0xe8, 0x2c, 0xd9, 0xe0, 0xe4, 0xf9,
+  0xd1, 0xfd, 0x0a, 0xb4, 0xde, 0x64, 0x2b, 0xab, 0xc7, 0x5b, 0x8b, 0x9b,
+  0x7c, 0x6b, 0x5e, 0x55, 0x93, 0xd1, 0x66, 0x08, 0x8b, 0xc6, 0x5d, 0x32,
+  0x15, 0x0a, 0x11, 0xef, 0xb0, 0xc6, 0xb6, 0xa4, 0x86, 0x37, 0x68, 0x0d,
+  0x3a, 0x49, 0x05, 0x15, 0x2d, 0xf4, 0x6c, 0x58, 0x15, 0x9b, 0x50, 0x51,
+  0x6f, 0xd3, 0x7c, 0x6a, 0x06, 0x83, 0xb9, 0x50, 0x32, 0xe2, 0xd0, 0x14,
+  0xa2, 0x5e, 0x3c, 0x33, 0x08, 0x28, 0xd5, 0xa0, 0x8d, 0xf6, 0x39, 0xd5,
+  0xe8, 0x24, 0x81, 0xa3, 0x16, 0x60, 0x11, 0x0b, 0x30, 0xa2, 0xd5, 0x44,
+  0xce, 0xb8, 0x8b, 0x96, 0xef, 0x73, 0x05, 0x1a, 0x5e, 0x15, 0x71, 0x13,
+  0xb2, 0xe5, 0x23, 0x16, 0x88, 0xd8, 0x1b, 0x6e, 0xf5, 0x5c, 0xc5, 0x1d,
+  0x5a, 0x62, 0x14, 0x8d, 0xf2, 0x25, 0x8e, 0x88, 0xb8, 0x2e, 0x97, 0x95,
+  0xb3, 0x03, 0xc3, 0xb3, 0xad, 0xdb, 0x35, 0x5c, 0x61, 0x76, 0x72, 0xdb,
+  0xa9, 0x3e, 0xdb, 0x2a, 0xe9, 0xed, 0xf5, 0x70, 0xa8, 0xe6, 0x28, 0xfa,
+  0x21, 0xa2, 0x8d, 0x8e, 0x0a, 0x9b, 0xd5, 0xfb, 0xa9, 0x97, 0x74, 0x4c,
+  0xc1, 0xb5, 0xf7, 0x82, 0x18, 0xb0, 0xd3, 0xd5, 0x3c, 0xff, 0x9b, 0x20,
+  0xa0, 0xb8, 0xb3, 0x3b, 0xc9, 0x90, 0xf3, 0x91, 0x95, 0xe1, 0x0e, 0xf1,
+  0x08, 0xe2, 0x68, 0x3c, 0x7e, 0x48, 0x3f, 0x75, 0x87, 0x64, 0x85, 0x90,
+  0x52, 0xfe, 0x1a, 0x43, 0x0a, 0x06, 0x11, 0x31, 0x90, 0x34, 0x87, 0xe4,
+  0x2a, 0x29, 0x05, 0xf1, 0x13, 0x9d, 0x00, 0xee, 0xfc, 0xe4, 0x5c, 0xa0,
+  0x4f, 0xd2, 0x31, 0xfd, 0xc6, 0x32, 0xc5, 0xe6, 0xea, 0x03, 0x26, 0xdc,
+  0x30, 0x64, 0x80, 0x2b, 0xb1, 0x48, 0x82, 0x13, 0x13, 0xdc, 0x7d, 0x59,
+  0x0e, 0x96, 0x38, 0xca, 0xbc, 0x23, 0x0b, 0x51, 0xb6, 0xfa, 0x78, 0xc4,
+  0xd3, 0x90, 0x6d, 0x85, 0x4c, 0xc7, 0x2a, 0x8a, 0x41, 0xe2, 0x64, 0xe6,
+  0x0b, 0x93, 0x3e, 0x7d, 0x43, 0x33, 0x64, 0x28, 0x2a, 0x45, 0xbe, 0x59,
+  0xa4, 0x30, 0x10, 0x17, 0x5d, 0xe0, 0x15, 0xe5, 0xf3, 0xce, 0x51, 0xd6,
+  0x18, 0xa8, 0x06, 0x78, 0xbb, 0xee, 0x1e, 0xb1, 0x94, 0xfc, 0x32, 0xa2,
+  0x77, 0x54, 0xaf, 0x16, 0xae, 0x4e, 0xa8, 0xc8, 0x2f, 0xa3, 0xfb, 0x34,
+  0xa0, 0xfa, 0xdf, 0x2e, 0xee, 0x4c, 0xd3, 0xd8, 0x5f, 0xc6, 0x20, 0x12,
+  0xce, 0xb3, 0x29, 0x6a, 0x92, 0x80, 0xc0, 0x2d, 0xfb, 0x6f, 0x5c, 0xde,
+  0x2f, 0xd8, 0xe8, 0x26, 0xef, 0x29, 0x67, 0xe0, 0xab, 0x4a, 0x72, 0xfc,
+  0x82, 0x9a, 0x3d, 0xc3, 0x48, 0x12, 0xab, 0xeb, 0x50, 0x54, 0x10, 0x98,
+  0x59, 0x89, 0x76, 0x6a, 0x6c, 0x9d, 0x57, 0x4b, 0x98, 0x28, 0x27, 0x92,
+  0x69, 0xe4, 0xcb, 0xec, 0x75, 0xd0, 0x45, 0xb8, 0xa1, 0xca, 0x3c, 0xfb,
+  0x16, 0xc7, 0xc5, 0x36, 0x7a, 0xe0, 0x34, 0x80, 0xdb, 0xb2, 0x83, 0x71,
+  0xd3, 0x98, 0xbc, 0xbe, 0xa1, 0xe0, 0x50, 0x6d, 0xd2, 0x71, 0x9c, 0x92,
+  0x9a, 0x29, 0x97, 0x73, 0xf4, 0xde, 0x5c, 0x29, 0xc7, 0xda, 0xdb, 0x47,
+  0xec, 0xec, 0xe8, 0xfc, 0x20, 0xa1, 0xc3, 0x75, 0xf2, 0xee, 0xf8, 0xcf,
+  0x2c, 0x63, 0x03, 0xea, 0x06, 0x25, 0xed, 0xb8, 0xeb, 0xd8, 0x9d, 0x50,
+  0xf5, 0x03, 0x98, 0x84, 0x08, 0xdb, 0x90, 0xdb, 0x78, 0x70, 0x67, 0x5b,
+  0xec, 0xd3, 0xf5, 0x98, 0x5c, 0xe0, 0x2a, 0x24, 0x9a, 0xcb, 0x59, 0xc5,
+  0xe1, 0x40, 0xbd, 0xb1, 0x45, 0x53, 0x2d, 0xbb, 0x40, 0x7e, 0x1c, 0xe6,
+  0x12, 0x0a, 0xf7, 0xa2, 0x19, 0xb1, 0xa5, 0x90, 0xba, 0xa7, 0x89, 0xb6,
+  0x32, 0x8e, 0x69, 0xa2, 0x57, 0xe2, 0xb2, 0x5e, 0x91, 0x24, 0x13, 0xa4,
+  0xd5, 0xde, 0xfb, 0xb3, 0xe8, 0x91, 0xc7, 0xc4, 0x18, 0xcd, 0x30, 0xbc,
+  0x0b, 0xba, 0x62, 0xbe, 0x4e, 0x99, 0x1f, 0x88, 0xcd, 0x2f, 0xcd, 0x66,
+  0x9d, 0xbb, 0xb9, 0x2a, 0xd8, 0xc3, 0x6a, 0xb2, 0x9b, 0xfc, 0x15, 0xf8,
+  0xce, 0x60, 0x39, 0x94, 0xf8, 0x4b, 0x5e, 0xd0, 0x09, 0x1d, 0x42, 0x25,
+  0x20, 0x26, 0x39, 0x1a, 0x4a, 0x37, 0xa2, 0xc8, 0xea, 0x75, 0x0d, 0x5b,
+  0x09, 0x6c, 0x03, 0x79, 0x5f, 0xa6, 0xd6, 0xce, 0x5f, 0xa3, 0x59, 0xc3,
+  0xd7, 0xbe, 0xb3, 0xbd, 0xfd, 0x68, 0x52, 0xa1, 0xaa, 0x52, 0x0f, 0xe6,
+  0x16, 0x32, 0x4f, 0x91, 0x6d, 0x72, 0x08, 0x22, 0x69, 0xae, 0x88, 0x4d,
+  0xad, 0xe6, 0xb8, 0x4b, 0x97, 0xe3, 0xe7, 0xe3, 0x56, 0x45, 0x42, 0xc6,
+  0xdb, 0x19, 0x32, 0x0c, 0x89, 0xb9, 0x1e, 0x62, 0x8c, 0xd5, 0x5e, 0xe3,
+  0x9d, 0x28, 0x6e, 0x23, 0x0f, 0x88, 0x5f, 0x52, 0x1b, 0xcb, 0x30, 0xf9,
+  0xca, 0xa3, 0x6b, 0x87, 0x25, 0xee, 0x30, 0x2a, 0x30, 0x08, 0x2b, 0x4e,
+  0xf5, 0x90, 0xc1, 0x24, 0x9e, 0x38, 0xf8, 0x6f, 0x12, 0x8f, 0x2b, 0x69,
+  0xa5, 0x75, 0xb1, 0xa8, 0xd0, 0x2a, 0xc0, 0x42, 0x23, 0xf7, 0x7f, 0x98,
+  0xd1, 0xc8, 0xb8, 0x62, 0x97, 0xcd, 0x42, 0x49, 0xd7, 0x6c, 0x79, 0xc9,
+  0x00, 0x2c, 0x21, 0x78, 0x26, 0x0f, 0x66, 0x24, 0x3d, 0xfd, 0xac, 0x95,
+  0xde, 0x45, 0xbc, 0x1e, 0x09, 0x35, 0xc9, 0x4b, 0xfe, 0x37, 0x4e, 0xbb,
+  0x01, 0xc2, 0x0f, 0xc2, 0x1e, 0x1a, 0xb2, 0x1f, 0xbf, 0xab, 0x31, 0xdf,
+  0x9c, 0xfe, 0xd5, 0xbc, 0x3f, 0xba, 0xfe, 0x03, 0x8e, 0xf0, 0x27, 0xa1,
+  0xaa, 0x9f, 0xbc, 0x3e, 0x3c, 0xc3, 0xe5, 0x72, 0xf8, 0xee, 0x6b, 0xb8,
+  0x1b, 0x83, 0x8b, 0x9a, 0xdb, 0xac, 0x86, 0x8a, 0xf5, 0x17, 0x0a, 0xfd,
+  0xad, 0xe6, 0x58, 0x38, 0x63, 0x91, 0x0d, 0xc2, 0xfb, 0xe4, 0x37, 0xcd,
+  0xad, 0x4c, 0x45, 0xf3, 0x3b, 0xd8, 0x0f, 0x67, 0xf7, 0xe8, 0x6a, 0xc5,
+  0xd5, 0xbd, 0x96, 0x9e, 0xc7, 0x4f, 0xd1, 0x88, 0x88, 0x39, 0xc4, 0xa2,
+  0x00, 0x38, 0xe1, 0x6d, 0xd8, 0x00, 0xa1, 0x63, 0x66, 0xac, 0x22, 0x92,
+  0x2f, 0x80, 0xd7, 0x1c, 0x98, 0x58, 0x01, 0x3b, 0x61, 0xc8, 0xee, 0xfb,
+  0x8d, 0x6a, 0xb3, 0xa1, 0xe9, 0x39, 0x75, 0x8d, 0x15, 0x24, 0xf5, 0x63,
+  0xb5, 0x60, 0xa8, 0x57, 0x5c, 0xf5, 0x76, 0x44, 0x0c, 0x40, 0x0f, 0x2b,
+  0xde, 0x17, 0xa9, 0xac, 0xb1, 0xf4, 0xb4, 0xa7, 0x6a, 0x4c, 0x50, 0x36,
+  0xd5, 0x09, 0xf2, 0x40, 0xe6, 0x02, 0xc2, 0x92, 0x82, 0x36, 0x3b, 0x9b,
+  0xea, 0x40, 0x62, 0x40, 0x2b, 0xd5, 0x6a, 0x1d, 0x42, 0x52, 0x3e, 0x92,
+  0xf5, 0x83, 0xf7, 0x67, 0xc7, 0x1f, 0x0e, 0xf6, 0x3f, 0x7c, 0xf5, 0xfe,
+  0xdd, 0xeb, 0xe3, 0xc3, 0xf5, 0x36, 0x45, 0x5e, 0x8a, 0xf0, 0x91, 0x0b,
+  0x7e, 0x99, 0x56, 0x61, 0x6e, 0x21, 0x3a, 0x80, 0x5f, 0x03, 0x5a, 0x13,
+  0xbf, 0x01, 0x57, 0x47, 0x17, 0xbc, 0x6d, 0xcf, 0x5a, 0xce, 0x27, 0xc0,
+  0xef, 0x0b, 0x26, 0x6f, 0x40, 0x53, 0xca, 0xe8, 0x6c, 0x80, 0x51, 0x9c,
+  0x41, 0xc6, 0x1f, 0x65, 0xdb, 0x49, 0x50, 0x56, 0x28, 0x28, 0xb6, 0xd8,
+  0xb0, 0xc9, 0x20, 0x3d, 0xc8, 0xca, 0x36, 0x27, 0x34, 0x9e, 0xc8, 0x76,
+  0x57, 0x3e, 0x0d, 0x76, 0x92, 0xac, 0x73, 0x4b, 0x44, 0xc9, 0x03, 0x1d,
+  0xe4, 0xb8, 0xac, 0xd7, 0xfb, 0x26, 0x7e, 0xe6, 0x41, 0x7a, 0x15, 0x04,
+  0xb5, 0x4e, 0xe6, 0x19, 0xe7, 0xf6, 0xa6, 0x42, 0xd7, 0xc3, 0xec, 0x63,
+  0xa6, 0x38, 0x7e, 0x78, 0xeb, 0x40, 0x25, 0xbc, 0xef, 0x8b, 0x12, 0x86,
+  0xed, 0xd7, 0x5e, 0xd2, 0x93, 0x87, 0x48, 0xf5, 0xef, 0x86, 0xd9, 0x32,
+  0xd3, 0x4d, 0x51, 0x7a, 0x0b, 0xf5, 0xaa, 0x4f, 0xf7, 0x2f, 0xbe, 0x89,
+  0x7a, 0xc9, 0x7d, 0x8d, 0x74, 0x25, 0x45, 0x13, 0xbd, 0xbd, 0xa6, 0x17,
+  0xaa, 0xb7, 0x7d, 0xa7, 0xf3, 0x12, 0x59, 0xb7, 0x19, 0x46, 0x57, 0x1b,
+  0x0c, 0xb4, 0x3f, 0xa7, 0x66, 0x48, 0xea, 0x93, 0x13, 0x6f, 0x64, 0x8d,
+  0x57, 0x27, 0xf2, 0x5b, 0x81, 0x72, 0xe2, 0x80, 0x0b, 0x2e, 0xc4, 0x11,
+  0xd7, 0x28, 0x7e, 0xb1, 0x4a, 0xf1, 0x98, 0x46, 0xd1, 0x38, 0x5e, 0x1e,
+  0x26, 0x00, 0x83, 0x65, 0x2b, 0xe9, 0x1d, 0xd7, 0x2a, 0x01, 0xf2, 0x01,
+  0xd1, 0xcc, 0x28, 0x47, 0x0c, 0x45, 0x4c, 0xc8, 0x56, 0x93, 0x0c, 0x80,
+  0x2a, 0x54, 0xe0, 0xeb, 0x4b, 0xe5, 0xac, 0xdc, 0xb9, 0x0b, 0x14, 0x72,
+  0x85, 0x61, 0x69, 0xcc, 0xab, 0xeb, 0xfa, 0x8e, 0x28, 0x5d, 0x38, 0x49,
+  0xb5, 0xbb, 0xe3, 0x40, 0xbd, 0xc6, 0x08, 0x1b, 0xc9, 0xbb, 0x4a, 0x40,
+  0xa6, 0xbd, 0x44, 0x80, 0x86, 0x25, 0x40, 0xe9, 0x5b, 0x55, 0x67, 0x3c,
+  0xaf, 0x94, 0x3b, 0x27, 0xe3, 0x0c, 0x57, 0xf1, 0x5a, 0x3a, 0x7b, 0x8c,
+  0x96, 0x13, 0x8a, 0x23, 0xaa, 0xd2, 0x81, 0x92, 0xf7, 0x2d, 0x31, 0x87,
+  0x9b, 0x58, 0xaf, 0x9a, 0xb6, 0x1a, 0xee, 0xe9, 0xb7, 0xbd, 0x4d, 0xc0,
+  0x47, 0x5a, 0xb7, 0x89, 0x57, 0x90, 0xfe, 0xf1, 0x7b, 0x25, 0xc8, 0xc7,
+  0xef, 0xb2, 0x5a, 0x5d, 0xc0, 0xc6, 0xfd, 0xe2, 0x92, 0xee, 0x78, 0x64,
+  0xae, 0xd4, 0x9c, 0xbb, 0xd3, 0x19, 0xf3, 0xdd, 0xa5, 0x42, 0x76, 0xc9,
+  0x71, 0xa6, 0x66, 0x8a, 0xbd, 0x5e, 0xb2, 0x91, 0x0d, 0xaf, 0xa8, 0xbd,
+  0x1e, 0xb7, 0xb3, 0xb3, 0xc7, 0xff, 0xee, 0xe2, 0xdf, 0x27, 0x3d, 0xf5,
+  0x1a, 0x37, 0xf6, 0x9f, 0x2f, 0xa1, 0x6e, 0xd6, 0x36, 0x52, 0xab, 0xf8,
+  0x52, 0x72, 0x98, 0xa1, 0x12, 0x53, 0x94, 0xaf, 0x3a, 0x31, 0xaa, 0x6a,
+  0xc5, 0x90, 0x84, 0xfc, 0x42, 0xe0, 0xc2, 0x43, 0x88, 0x01, 0xc4, 0x25,
+  0x9a, 0xdb, 0x58, 0x30, 0x3b, 0x42, 0xf8, 0xb5, 0xf1, 0x87, 0x32, 0x23,
+  0x89, 0x8a, 0x54, 0xe5, 0x65, 0x8d, 0x23, 0x13, 0xa9, 0x5c, 0x02, 0x9f,
+  0xb7, 0xcc, 0x58, 0x3b, 0x76, 0xe0, 0x5d, 0xb6, 0xb5, 0x62, 0xe8, 0x67,
+  0x69, 0x56, 0x9f, 0x18, 0x2c, 0x8a, 0xbb, 0x48, 0x22, 0x95, 0xed, 0x26,
+  0x0c, 0xef, 0xfc, 0x58, 0x58, 0x3e, 0x77, 0xc6, 0x8e, 0x0c, 0x04, 0x42,
+  0x71, 0x3c, 0x44, 0x3e, 0xce, 0x05, 0x5a, 0x46, 0x92, 0x62, 0xa3, 0x95,
+  0x95, 0x9c, 0xa0, 0xa2, 0x42, 0xa2, 0xfb, 0x1b, 0xd7, 0x80, 0xb3, 0xab,
+  0xa0, 0xc4, 0x6e, 0x5b, 0x62, 0x78, 0x9c, 0xde, 0xed, 0x54, 0x7b, 0xb9,
+  0x58, 0x26, 0x2b, 0xa9, 0xc1, 0x46, 0xec, 0x5a, 0x26, 0x20, 0x86, 0xdd,
+  0x4e, 0xa3, 0x12, 0x5b, 0xd1, 0xaf, 0x3e, 0x39, 0x8b, 0x9c, 0x96, 0x67,
+  0xb2, 0x58, 0x8e, 0xd8, 0xf2, 0xf1, 0x52, 0xfe, 0x4a, 0xe8, 0xcf, 0x69,
+  0x3e, 0x86, 0x31, 0x64, 0xe3, 0x1a, 0xd5, 0x2d, 0x37, 0x3f, 0xe5, 0x04,
+  0x05, 0x58, 0xb3, 0x01, 0x18, 0x98, 0x36, 0x86, 0xd6, 0x54, 0xe0, 0xda,
+  0xe8, 0x44, 0x29, 0x69, 0x2f, 0x5a, 0x86, 0xb9, 0xc9, 0x8f, 0x02, 0xc0,
+  0x7e, 0x38, 0x59, 0xbd, 0xc8, 0x20, 0x26, 0xfb, 0x08, 0x6a, 0xb4, 0xdb,
+  0x18, 0xe7, 0x92, 0x0d, 0xa6, 0xa4, 0xf2, 0x19, 0x71, 0x75, 0x96, 0x98,
+  0x03, 0x10, 0x5d, 0xde, 0xc4, 0x66, 0xb5, 0x77, 0xcf, 0xe3, 0xd8, 0xd2,
+  0xfa, 0xfc, 0xa9, 0x8b, 0xbe, 0xaf, 0xae, 0xd3, 0xdd, 0x67, 0xcf, 0x75,
+  0xd8, 0x0d, 0xab, 0xde, 0xba, 0x7c, 0xb5, 0xb5, 0x25, 0x35, 0xca, 0xf9,
+  0x90, 0xb7, 0x6f, 0x7e, 0xf1, 0x42, 0xf2, 0xb3, 0x7f, 0x5a, 0x8f, 0xe6,
+  0x15, 0x86, 0xe5, 0x4e, 0x52, 0x94, 0xab, 0x11, 0x4d, 0x33, 0xd0, 0x2d,
+  0xfb, 0xed, 0x02, 0x5d, 0xf0, 0xaa, 0x75, 0x34, 0xbb, 0x06, 0x0b, 0xf3,
+  0xe5, 0x8b, 0xa5, 0xc2, 0x58, 0x8e, 0x60, 0xe9, 0xfa, 0x7e, 0x98, 0xec,
+  0x37, 0xd6, 0xa7, 0x32, 0x8d, 0xbe, 0x73, 0xba, 0xbc, 0x73, 0x3c, 0x6c,
+  0xd8, 0x53, 0xa2, 0xcb, 0xc9, 0xb7, 0xcc, 0x3e, 0x49, 0x2a, 0x11, 0xbe,
+  0xb8, 0xec, 0x18, 0x8a, 0x1d, 0x5d, 0x38, 0xb6, 0x58, 0x17, 0xcd, 0x48,
+  0xad, 0x40, 0x56, 0x1b, 0x15, 0x65, 0xdd, 0xc2, 0xb8, 0xe9, 0x30, 0x3a,
+  0x44, 0x7e, 0xf1, 0x52, 0x20, 0x11, 0xa8, 0x54, 0x0d, 0x4e, 0x40, 0x5f,
+  0xef, 0xe3, 0xf9, 0x20, 0x44, 0x0a, 0x5b, 0x4c, 0x07, 0x7a, 0xdf, 0xef,
+  0x75, 0xc2, 0xa9, 0x3f, 0x1b, 0x3e, 0x79, 0x31, 0xdc, 0xde, 0xf3, 0x2c,
+  0x51, 0x60, 0xa7, 0x30, 0xeb, 0xaf, 0xcf, 0xbf, 0xcd, 0xeb, 0xc8, 0x1b,
+  0x9c, 0x14, 0xb6, 0x07, 0x91, 0x89, 0x9f, 0xba, 0x2b, 0xa6, 0x97, 0xf4,
+  0xe6, 0xd6, 0xc1, 0x7d, 0xda, 0x35, 0x17, 0x24, 0xaa, 0x43, 0xee, 0x25,
+  0x44, 0x78, 0x93, 0x7a, 0x5a, 0xc5, 0xbe, 0xc7, 0x00, 0x4e, 0x8b, 0x69,
+  0x5a, 0xa2, 0xc2, 0x8d, 0x10, 0xdf, 0x03, 0x23, 0x7e, 0xfa, 0x34, 0x32,
+  0xe2, 0xfe, 0x8a, 0x01, 0x0d, 0xff, 0xf1, 0x11, 0x9d, 0x98, 0x83, 0xcc,
+  0xbc, 0xc9, 0x5a, 0xdb, 0xd7, 0x64, 0xa8, 0xdf, 0xf4, 0xee, 0x67, 0x85,
+  0xbb, 0xaa, 0xd3, 0x7a, 0x59, 0x7d, 0x02, 0x8f, 0x0a, 0x78, 0x8b, 0xbc,
+  0xe3, 0x02, 0x0c, 0xf4, 0x20, 0xad, 0xd6, 0xb5, 0x1b, 0xe9, 0xc7, 0x01,
+  0xe6, 0x4a, 0x72, 0x2e, 0x0d, 0x19, 0x38, 0xd6, 0x46, 0x7a, 0x93, 0x0e,
+  0x93, 0x93, 0x83, 0xf3, 0x53, 0xee, 0x62, 0xc1, 0x51, 0x73, 0x9b, 0x7c,
+  0x88, 0x3b, 0x38, 0x38, 0x56, 0x87, 0xec, 0xf1, 0xc5, 0x09, 0xf1, 0xac,
+  0x63, 0xa8, 0x56, 0xf9, 0x5c, 0x30, 0xe0, 0x44, 0x58, 0xe8, 0x74, 0xb4,
+  0xa0, 0x2b, 0x7b, 0xb2, 0xe9, 0x2c, 0x1c, 0xfd, 0x8e, 0xc9, 0xa3, 0x5a,
+  0x5e, 0x5d, 0x21, 0x0e, 0xc6, 0x45, 0xc7, 0x18, 0x56, 0x60, 0x56, 0x76,
+  0xf4, 0x16, 0x9b, 0x76, 0x60, 0x27, 0x01, 0x10, 0x0c, 0x78, 0xe8, 0xbc,
+  0xf0, 0xad, 0xa6, 0x66, 0x07, 0xcd, 0x51, 0xab, 0x51, 0x8c, 0x29, 0x11,
+  0xd9, 0x5b, 0x36, 0xc5, 0xe0, 0x7e, 0x19, 0xdb, 0x73, 0x55, 0xd4, 0x4c,
+  0x2e, 0x7e, 0x5f, 0x85, 0x84, 0xd3, 0x7c, 0x0b, 0x06, 0xbb, 0x65, 0x4d,
+  0xd5, 0x27, 0x7e, 0x45, 0x8e, 0x6a, 0xc4, 0x81, 0x66, 0xa4, 0xda, 0x0a,
+  0x6b, 0x78, 0xba, 0xd3, 0x34, 0xe8, 0x5c, 0xa6, 0xd3, 0x2a, 0x1b, 0x20,
+  0x8d, 0x78, 0xed, 0x13, 0xc5, 0x48, 0xbc, 0xa2, 0x99, 0xc7, 0x56, 0x48,
+  0x1e, 0x3c, 0x10, 0xd5, 0xcd, 0x82, 0x6a, 0x85, 0x2d, 0x8c, 0x46, 0xbc,
+  0x66, 0x19, 0xcb, 0x96, 0xe8, 0x81, 0xc8, 0x5f, 0x20, 0x29, 0xea, 0x5d,
+  0xa0, 0xce, 0x50, 0x2d, 0xab, 0x88, 0x64, 0x4c, 0xe1, 0x78, 0xab, 0x21,
+  0x5c, 0x24, 0x31, 0x49, 0xf9, 0x63, 0x53, 0x5c, 0x97, 0x8d, 0x26, 0x81,
+  0xfd, 0x4d, 0x3e, 0xcf, 0xe9, 0x36, 0x93, 0xc2, 0xe6, 0xe9, 0x55, 0xd6,
+  0xdd, 0x28, 0xa2, 0xf1, 0x4a, 0x6c, 0xb6, 0xa9, 0x94, 0x59, 0x49, 0x18,
+  0x54, 0x41, 0xac, 0x84, 0x9a, 0x6b, 0xaa, 0xae, 0xf4, 0x25, 0x62, 0x4f,
+  0x57, 0x15, 0x65, 0x74, 0x7b, 0xe9, 0xb7, 0x72, 0xd5, 0x4e, 0x1a, 0xc7,
+  0x0a, 0x35, 0xb8, 0x68, 0x55, 0xc1, 0x0d, 0x3e, 0x28, 0xa4, 0x09, 0x12,
+  0xdf, 0x62, 0x32, 0xe4, 0x4c, 0x89, 0x12, 0x04, 0xc9, 0x8a, 0xe2, 0x0f,
+  0x6c, 0xe2, 0x1c, 0xbe, 0x48, 0xf8, 0x6f, 0xf9, 0x6a, 0x33, 0xf1, 0xdb,
+  0xff, 0x90, 0x71, 0x6f, 0xb7, 0x41, 0x0b, 0x97, 0x88, 0x47, 0x25, 0xfa,
+  0x5c, 0x91, 0xfb, 0xf2, 0x06, 0xe5, 0x8f, 0x2a, 0xce, 0x4e, 0xe3, 0x49,
+  0x6d, 0x70, 0x95, 0x62, 0xa9, 0xba, 0x9e, 0x22, 0xb7, 0x68, 0x93, 0x9d,
+  0xe9, 0x7a, 0xb2, 0x00, 0x28, 0x57, 0x45, 0x8b, 0x95, 0x72, 0x7d, 0x2b,
+  0xa9, 0x99, 0x0c, 0x20, 0x0d, 0xb8, 0xe9, 0x10, 0xa4, 0xaf, 0xb1, 0xc5,
+  0x9c, 0x54, 0xcd, 0x36, 0xd0, 0xac, 0x1e, 0x07, 0x5f, 0x4e, 0xb2, 0x74,
+  0x1a, 0x55, 0x47, 0x79, 0xc0, 0x88, 0x04, 0x91, 0x60, 0x69, 0xd8, 0x01,
+  0xb9, 0xaa, 0x33, 0xec, 0x52, 0x9a, 0xdf, 0x29, 0x50, 0x45, 0xf3, 0x46,
+  0xe9, 0x13, 0x1c, 0xc4, 0xae, 0xb2, 0xc3, 0xbe, 0x47, 0x54, 0x46, 0x71,
+  0xc8, 0x7c, 0x70, 0x29, 0xba, 0x44, 0x75, 0xe4, 0xad, 0x01, 0xcf, 0xc8,
+  0x3d, 0x00, 0x9a, 0x16, 0xb9, 0xa3, 0xe3, 0xf0, 0xd4, 0x10, 0x59, 0x62,
+  0xc3, 0x8c, 0x05, 0x2c, 0xc6, 0x72, 0xcb, 0x1b, 0xe7, 0x71, 0x49, 0x10,
+  0x00, 0x0b, 0xed, 0x9b, 0x2a, 0x08, 0x22, 0x9a, 0x07, 0xd4, 0x4f, 0x72,
+  0xd7, 0xa0, 0xa3, 0x8a, 0x19, 0x40, 0x0a, 0x64, 0x15, 0x59, 0xfe, 0xda,
+  0x01, 0xe3, 0x73, 0x5b, 0x32, 0x50, 0x05, 0x0b, 0xde, 0xdd, 0x8d, 0x93,
+  0xa7, 0x82, 0x8e, 0xab, 0x1b, 0x96, 0x97, 0x62, 0x50, 0xa5, 0x97, 0xae,
+  0x06, 0x4e, 0x29, 0x80, 0xba, 0xc5, 0x98, 0x96, 0x4f, 0xd2, 0xb2, 0xf1,
+  0x19, 0x6a, 0xb6, 0x76, 0xcb, 0x0c, 0xb3, 0x5a, 0xc4, 0x3e, 0x90, 0xc0,
+  0xb4, 0xce, 0x62, 0xa4, 0x65, 0xc7, 0x26, 0xd5, 0x94, 0x8e, 0x91, 0x06,
+  0x20, 0xf7, 0x93, 0x4c, 0x31, 0x46, 0x68, 0xff, 0x23, 0x11, 0xf4, 0x2d,
+  0x70, 0x74, 0x18, 0x80, 0x6f, 0x39, 0x12, 0x6c, 0x92, 0x6c, 0xb8, 0xe6,
+  0xa5, 0xf5, 0xa7, 0xdb, 0x3b, 0x18, 0xef, 0xd3, 0xed, 0xcf, 0xc2, 0xda,
+  0x61, 0x0e, 0xaa, 0x49, 0xeb, 0xe3, 0x68, 0x5a, 0xe0, 0x43, 0x49, 0xea,
+  0x53, 0xf6, 0x27, 0xa9, 0x23, 0x60, 0x39, 0x85, 0xcc, 0xa7, 0xf8, 0x55,
+  0x83, 0x7c, 0x2e, 0xf0, 0x45, 0xf4, 0x53, 0x77, 0x32, 0x15, 0x1b, 0x43,
+  0x57, 0xc2, 0x4f, 0x12, 0x07, 0xea, 0x28, 0xb2, 0xab, 0x40, 0x5b, 0x35,
+  0xb1, 0xad, 0x14, 0x62, 0xdf, 0xd8, 0x29, 0xe0, 0xb9, 0x98, 0x7b, 0x75,
+  0xac, 0x18, 0xc6, 0xc0, 0x00, 0x0b, 0xcc, 0x28, 0x56, 0x17, 0x6c, 0x38,
+  0x57, 0x03, 0x2e, 0x71, 0xc5, 0x2d, 0x00, 0x56, 0x49, 0xbe, 0x67, 0x3a,
+  0x66, 0x0c, 0x6c, 0xe1, 0xc3, 0xa4, 0x60, 0x9c, 0xbd, 0x39, 0x68, 0x35,
+  0xb7, 0xfb, 0xe4, 0xf3, 0xcf, 0x1d, 0xa8, 0x5e, 0xa6, 0x29, 0x6c, 0xbe,
+  0x12, 0x11, 0x2b, 0x00, 0x02, 0x6f, 0x21, 0xa1, 0x0b, 0x74, 0xf2, 0x80,
+  0x1a, 0x25, 0xc9, 0x15, 0x5d, 0x1d, 0x79, 0x5d, 0xd7, 0x74, 0x5d, 0x12,
+  0x3a, 0xc5, 0xd1, 0x2e, 0xfa, 0x4a, 0xdf, 0xca, 0xa7, 0x7b, 0x6c, 0x71,
+  0xf5, 0x5c, 0x69, 0xa8, 0x01, 0x1d, 0x82, 0x2f, 0x3b, 0x39, 0x42, 0x57,
+  0x73, 0xa9, 0x14, 0xf1, 0x17, 0x56, 0xb9, 0xaf, 0xb2, 0xba, 0x9b, 0x85,
+  0xac, 0x48, 0xed, 0x9d, 0x2e, 0x56, 0x63, 0x31, 0x5b, 0xa5, 0x50, 0xc9,
+  0xa1, 0x7e, 0x29, 0xc6, 0x04, 0x83, 0x5c, 0x1d, 0xb3, 0x52, 0x5f, 0xdf,
+  0xf1, 0xf5, 0xfe, 0x25, 0x88, 0xe8, 0xa5, 0x2b, 0x1d, 0x10, 0x07, 0xf2,
+  0xff, 0xd2, 0x40, 0xc7, 0x55, 0x2d, 0x03, 0x1a, 0x76, 0x5d, 0xa7, 0xe3,
+  0x6b, 0xcf, 0xcd, 0x01, 0xc9, 0x94, 0xba, 0x47, 0xb4, 0xa2, 0x5f, 0x27,
+  0x2c, 0x2b, 0xd7, 0xe4, 0x92, 0x97, 0xae, 0x45, 0xd4, 0x54, 0x90, 0x62,
+  0x72, 0x3c, 0x16, 0xac, 0x02, 0x7a, 0x30, 0x40, 0x74, 0x2c, 0x04, 0x80,
+  0x2a, 0xca, 0xd8, 0xe8, 0x82, 0xf7, 0x83, 0x75, 0x8a, 0x94, 0x74, 0x41,
+  0xc9, 0xc2, 0xbd, 0xb0, 0x20, 0x39, 0x4b, 0x57, 0x33, 0x06, 0xe2, 0x10,
+  0xf0, 0x77, 0xc5, 0x80, 0x93, 0xe3, 0xbe, 0x4e, 0x7a, 0x0b, 0x37, 0xb4,
+  0x1e, 0x0f, 0x9e, 0x0c, 0xa3, 0x7b, 0x40, 0x8c, 0x32, 0x02, 0x87, 0xf3,
+  0xcf, 0x17, 0x57, 0x99, 0xe6, 0xf5, 0xf0, 0x2f, 0x8b, 0x2b, 0x27, 0xde,
+  0xf2, 0xc3, 0x00, 0x3a, 0xde, 0x8b, 0x1a, 0xea, 0x07, 0x6f, 0x12, 0xed,
+  0xf4, 0xd5, 0x97, 0x8d, 0xf7, 0x0d, 0x75, 0x56, 0xcb, 0x2e, 0x0e, 0xc7,
+  0xc5, 0x6c, 0x4b, 0xb1, 0x0b, 0xc7, 0x57, 0x79, 0x04, 0x56, 0x51, 0x2b,
+  0x02, 0x09, 0x09, 0x79, 0xb8, 0xa8, 0x30, 0xf0, 0xd6, 0xc8, 0x09, 0xc9,
+  0x18, 0x82, 0x2d, 0x90, 0xad, 0x2c, 0xfa, 0xe4, 0x8e, 0xcf, 0x55, 0x21,
+  0x90, 0x21, 0xa5, 0x94, 0x4f, 0x31, 0xf2, 0x61, 0xec, 0x9b, 0xba, 0x5c,
+  0x8e, 0xf9, 0x02, 0x7a, 0xcf, 0xce, 0xe0, 0x7a, 0xc9, 0xc1, 0x5b, 0x7c,
+  0xef, 0xd7, 0x11, 0x78, 0x94, 0x50, 0x81, 0xc0, 0x58, 0xed, 0xbc, 0xfb,
+  0x58, 0x88, 0x54, 0xed, 0xf0, 0x8b, 0x7c, 0x91, 0xe1, 0x6a, 0x57, 0xfc,
+  0x8c, 0x7e, 0x37, 0xcd, 0xc5, 0xc7, 0xbc, 0x70, 0x0b, 0x2c, 0x9e, 0x54,
+  0xf9, 0xdf, 0x0c, 0x79, 0xbb, 0x81, 0x42, 0x2d, 0x22, 0x55, 0x57, 0x00,
+  0xfd, 0xb3, 0x2b, 0xef, 0x26, 0xa5, 0x46, 0x10, 0xcc, 0x65, 0x8e, 0x4c,
+  0x9c, 0x80, 0x26, 0x1f, 0x32, 0x7b, 0x88, 0x69, 0x0d, 0x6d, 0x0e, 0x81,
+  0x6a, 0x23, 0xeb, 0x7d, 0x49, 0xc2, 0x53, 0xd8, 0x18, 0x8f, 0xff, 0xb1,
+  0x72, 0xf3, 0x7b, 0x77, 0xd9, 0xe8, 0xd5, 0x97, 0x1c, 0xbb, 0xf6, 0x11,
+  0xb8, 0xc0, 0x52, 0xb5, 0x84, 0xe9, 0x7b, 0x8b, 0xff, 0xec, 0x25, 0xc1,
+  0xfe, 0xb7, 0xdb, 0xa0, 0xb3, 0xb1, 0xaa, 0xd5, 0x00, 0xfe, 0x2c, 0x68,
+  0xf1, 0xb2, 0x28, 0x1e, 0x6c, 0xd0, 0xaa, 0xf3, 0x62, 0x45, 0x82, 0x1c,
+  0x28, 0xc9, 0x0c, 0xf2, 0xe1, 0x37, 0x42, 0xf7, 0x20, 0x28, 0xab, 0x4a,
+  0x04, 0xca, 0x8c, 0x41, 0x7b, 0xc0, 0x30, 0x2a, 0x37, 0xb6, 0xa5, 0xf9,
+  0xbf, 0xea, 0x03, 0xfd, 0x0b, 0x4a, 0xd1, 0xea, 0x85, 0x91, 0x33, 0x01,
+  0xf0, 0x54, 0xfe, 0xf5, 0x4f, 0xee, 0x6d, 0xfe, 0x87, 0x4e, 0x14, 0xf1,
+  0x9e, 0x07, 0x27, 0xc3, 0x9e, 0x11, 0x7b, 0x67, 0x4b, 0x6c, 0x8e, 0x66,
+  0x45, 0x5a, 0xef, 0xaf, 0x33, 0x7d, 0xad, 0xff, 0x69, 0x1d, 0xa2, 0x8e,
+  0x39, 0xfa, 0x50, 0x54, 0x52, 0xaa, 0x46, 0x17, 0x9d, 0xdc, 0x00, 0xce,
+  0xe1, 0xc2, 0x03, 0x15, 0x06, 0x1f, 0x1f, 0x37, 0x0f, 0x3c, 0xb1, 0xa1,
+  0xff, 0xd4, 0x73, 0x83, 0xff, 0xa9, 0xe7, 0x87, 0xff, 0x53, 0xcf, 0x4f,
+  0xe0, 0xa7, 0x5e, 0x0f, 0x0a, 0x5d, 0xda, 0x89, 0x5d, 0xff, 0xc5, 0x5b,
+  0xbe, 0x2e, 0x9d, 0xfa, 0x3e, 0x83, 0x2e, 0x83, 0x1e, 0x7b, 0xeb, 0x0f,
+  0xad, 0x59, 0x18, 0xf6, 0x82, 0x24, 0xf8, 0xf6, 0x12, 0x12, 0x3f, 0x68,
+  0xac, 0x92, 0x5f, 0x95, 0x7e, 0xc4, 0x87, 0x15, 0x3e, 0xc0, 0x0b, 0xce,
+  0x22, 0x7a, 0x35, 0x65, 0xe3, 0x71, 0x80, 0x50, 0x6c, 0x1d, 0xb8, 0x6d,
+  0xb0, 0x00, 0xb6, 0x4e, 0x58, 0xa3, 0x7b, 0x3d, 0x8a, 0x2b, 0x7c, 0xb9,
+  0x2c, 0x61, 0xb5, 0xd0, 0xe9, 0x09, 0xec, 0x92, 0x81, 0xa0, 0x6b, 0x5f,
+  0x6f, 0xf7, 0xdf, 0xbd, 0xdf, 0x3f, 0x7e, 0x30, 0x66, 0x3f, 0xcc, 0x04,
+  0x74, 0xce, 0x63, 0xd8, 0x2f, 0x42, 0x23, 0x05, 0x27, 0xb1, 0xb1, 0x10,
+  0xb2, 0x24, 0x5e, 0xfb, 0x23, 0xcb, 0x24, 0x3f, 0x47, 0xf3, 0x2c, 0xbf,
+  0x57, 0x31, 0xfc, 0x4d, 0x58, 0x80, 0xf0, 0x46, 0x52, 0x03, 0x7b, 0xf6,
+  0x3e, 0xbf, 0xde, 0xd3, 0x18, 0x1a, 0x38, 0x73, 0x22, 0x50, 0x18, 0x86,
+  0x41, 0x81, 0x68, 0x41, 0xa7, 0xa8, 0x9b, 0x99, 0x4d, 0x33, 0x05, 0x0d,
+  0x77, 0x4f, 0x0a, 0x5b, 0x5d, 0x5e, 0xae, 0x8e, 0x07, 0xda, 0x3f, 0x38,
+  0xf0, 0x69, 0xbf, 0x4d, 0x00, 0xa1, 0x46, 0x12, 0xc0, 0x3f, 0xdf, 0xba,
+  0x83, 0x85, 0x63, 0x4f, 0x36, 0xe7, 0xe5, 0xdf, 0x66, 0x83, 0xba, 0x90,
+  0xb4, 0xfb, 0x97, 0x3a, 0x9a, 0x2f, 0xa2, 0xeb, 0x88, 0xc3, 0x1c, 0x4a,
+  0xca, 0x56, 0x37, 0x1a, 0xb5, 0x6f, 0xcf, 0x35, 0x50, 0xe2, 0x74, 0x9f,
+  0x71, 0xe1, 0x35, 0x07, 0x5d, 0xd4, 0x9d, 0x4e, 0xc2, 0x50, 0x66, 0xd5,
+  0x91, 0xfc, 0xf4, 0x0d, 0xfc, 0xcd, 0xec, 0x90, 0x26, 0x55, 0x5e, 0x2c,
+  0x67, 0x44, 0xbd, 0x24, 0x32, 0x4d, 0x18, 0xc5, 0xfb, 0xe1, 0xa0, 0x6e,
+  0x6f, 0xb8, 0x2d, 0xf0, 0x2f, 0x62, 0xcd, 0xad, 0x3e, 0x55, 0x24, 0xdc,
+  0xb9, 0x1f, 0xbd, 0x44, 0x7a, 0xe7, 0x47, 0x17, 0x87, 0xc9, 0xfe, 0xfb,
+  0x8b, 0x6f, 0x7a, 0xb2, 0x80, 0x6d, 0x4c, 0x0d, 0x80, 0x29, 0x92, 0x92,
+  0x4e, 0x0b, 0xaf, 0xd0, 0xea, 0x15, 0xaf, 0x24, 0x4b, 0x9b, 0x91, 0x12,
+  0x3d, 0x2d, 0x67, 0x62, 0x6b, 0xa3, 0x9f, 0x0d, 0x9f, 0x6d, 0xb6, 0x36,
+  0x66, 0x35, 0x40, 0x76, 0x50, 0xc7, 0x59, 0x57, 0x8b, 0x6f, 0xce, 0x00,
+  0xa3, 0x99, 0x13, 0x1e, 0xb6, 0x7c, 0x61, 0x17, 0xc8, 0xfc, 0x66, 0xda,
+  0xef, 0x42, 0x00, 0x39, 0x3c, 0x24, 0x67, 0x30, 0x00, 0x8a, 0xb4, 0xc3,
+  0x30, 0x55, 0xa9, 0x4c, 0xad, 0x7a, 0xf3, 0x09, 0x3b, 0x6a, 0x2d, 0x15,
+  0x35, 0x82, 0x91, 0x61, 0x3e, 0x2f, 0xae, 0x1a, 0xc1, 0xd5, 0x43, 0xc3,
+  0xba, 0x91, 0x5d, 0xcb, 0xb3, 0x09, 0x44, 0x3e, 0xd9, 0x38, 0x0a, 0x2a,
+  0x9d, 0xcc, 0x72, 0x41, 0xa5, 0x0b, 0x00, 0xaa, 0xdb, 0x94, 0xac, 0x5a,
+  0xe5, 0x8f, 0xf2, 0x33, 0xce, 0x03, 0x0e, 0xb4, 0x52, 0x3d, 0x84, 0x0a,
+  0x7d, 0x41, 0x02, 0x9b, 0xc4, 0x73, 0xec, 0xcb, 0x6a, 0xa2, 0xee, 0xbc,
+  0xc4, 0x92, 0x61, 0x81, 0xbb, 0x25, 0x3f, 0x36, 0xce, 0x37, 0x13, 0x57,
+  0x10, 0x9d, 0xc5, 0x7b, 0x6d, 0x8f, 0x93, 0xd9, 0x5a, 0xc9, 0x6b, 0x1d,
+  0xd8, 0xac, 0x18, 0x16, 0x68, 0x70, 0x12, 0xbb, 0x37, 0x31, 0xb8, 0xdf,
+  0xf8, 0x6e, 0x12, 0x07, 0x24, 0xc1, 0x14, 0x20, 0xd8, 0x39, 0x9f, 0xcc,
+  0xc1, 0xf7, 0xaf, 0x83, 0xda, 0x3e, 0xa8, 0x19, 0xce, 0x73, 0xd2, 0xc8,
+  0x5a, 0x49, 0xa8, 0x5d, 0x05, 0x7e, 0x15, 0x60, 0xf7, 0x10, 0x25, 0x49,
+  0x55, 0xb8, 0x49, 0x96, 0x2d, 0x1c, 0x5a, 0xba, 0xd4, 0xd0, 0x81, 0x26,
+  0x4f, 0x67, 0x8e, 0x8d, 0x5e, 0xf7, 0x70, 0xd3, 0xad, 0x18, 0x9d, 0x72,
+  0x01, 0x8f, 0x4d, 0xc2, 0x55, 0x4b, 0xb8, 0xae, 0xfb, 0xce, 0x67, 0x4f,
+  0x3e, 0x4f, 0x2a, 0x4e, 0x40, 0xcf, 0x5b, 0x50, 0xae, 0x82, 0xad, 0xb7,
+  0x1a, 0x82, 0x48, 0xfd, 0xe7, 0xe6, 0xdb, 0x1b, 0x19, 0x2e, 0x1d, 0x63,
+  0xdb, 0xe0, 0xe6, 0xd2, 0x54, 0xe9, 0x2e, 0x22, 0x0d, 0x2d, 0xa2, 0x09,
+  0x08, 0x58, 0x31, 0x64, 0x70, 0xf3, 0x6a, 0x89, 0x19, 0x69, 0x18, 0x10,
+  0xe7, 0xa4, 0x40, 0x1d, 0x97, 0x7e, 0x72, 0x76, 0x78, 0x71, 0xd6, 0x4f,
+  0xce, 0x2f, 0x4e, 0xce, 0x56, 0xe0, 0x46, 0xd5, 0x63, 0x30, 0x3d, 0x5e,
+  0x33, 0x33, 0xd1, 0x99, 0x27, 0x2d, 0xe0, 0x18, 0x08, 0x0f, 0x14, 0x26,
+  0x02, 0x3b, 0xc2, 0x6c, 0xb0, 0x0a, 0x2d, 0xac, 0xb1, 0x5a, 0x20, 0x1b,
+  0xe2, 0xe5, 0x0f, 0x4e, 0x4c, 0xb6, 0xfd, 0x13, 0x28, 0x84, 0x69, 0x91,
+  0xa7, 0xeb, 0x58, 0x36, 0x46, 0xab, 0xc5, 0xdc, 0xbd, 0xff, 0x79, 0x45,
+  0x3d, 0x62, 0x17, 0x4b, 0x02, 0x2c, 0xe0, 0xca, 0x98, 0x04, 0x0e, 0x4a,
+  0xcf, 0x50, 0x05, 0x48, 0x8e, 0xda, 0x80, 0x50, 0xe9, 0xd1, 0xbc, 0x1f,
+  0xa1, 0xdf, 0xb4, 0x62, 0x0b, 0x54, 0x60, 0x88, 0xe6, 0x9a, 0xed, 0x22,
+  0xf9, 0xc3, 0xa5, 0x6c, 0x8c, 0xa7, 0x4a, 0x1c, 0x6c, 0x5e, 0x0c, 0x51,
+  0xc3, 0xe4, 0x7f, 0xec, 0xf2, 0x7a, 0x07, 0xb5, 0x50, 0xf6, 0x85, 0x04,
+  0x9c, 0x69, 0x0d, 0x28, 0xe7, 0x75, 0x1b, 0xd5, 0xfa, 0xc3, 0xb8, 0xe8,
+  0xcf, 0x86, 0x3b, 0x6d, 0xee, 0xcc, 0x28, 0x0f, 0x51, 0x0e, 0xc3, 0x51,
+  0xd0, 0x96, 0xb0, 0xef, 0x0a, 0x15, 0x3a, 0x80, 0xcc, 0xb0, 0x10, 0xcd,
+  0xa9, 0xe1, 0x34, 0xc4, 0x93, 0x45, 0x91, 0x94, 0xce, 0x49, 0x45, 0x9e,
+  0xc8, 0x75, 0xef, 0x05, 0x79, 0x61, 0xd9, 0x66, 0xab, 0x2d, 0xdc, 0x84,
+  0xb6, 0xb0, 0xda, 0x2d, 0x20, 0x98, 0x0c, 0x4e, 0xb7, 0x02, 0x70, 0x0b,
+  0x85, 0xd3, 0x6e, 0xcc, 0x7c, 0xe7, 0x57, 0x0b, 0x20, 0x5a, 0x3e, 0x43,
+  0x0d, 0x31, 0x65, 0x65, 0x61, 0xa8, 0x71, 0x28, 0x9c, 0x84, 0xb4, 0x56,
+  0x85, 0xaf, 0x00, 0x32, 0x97, 0x55, 0x96, 0xb4, 0x95, 0x64, 0xc4, 0x25,
+  0x56, 0x66, 0x71, 0x51, 0x4d, 0x0a, 0x58, 0x6a, 0x79, 0x11, 0xba, 0x09,
+  0x2d, 0x10, 0x5c, 0x11, 0xcc, 0x63, 0x57, 0x8b, 0x36, 0xa6, 0x56, 0x9d,
+  0x92, 0x09, 0xbc, 0x0d, 0xec, 0x81, 0xc8, 0x8c, 0xae, 0xf7, 0x32, 0xdc,
+  0x46, 0xe1, 0x74, 0x90, 0xc6, 0x3d, 0x83, 0xa8, 0x05, 0xd2, 0x41, 0x70,
+  0x1b, 0x0c, 0x9a, 0x43, 0x66, 0xdb, 0x75, 0x8b, 0x48, 0x86, 0x0e, 0x90,
+  0x33, 0xb4, 0xc4, 0x63, 0x13, 0x90, 0xc2, 0x56, 0xb2, 0x7d, 0xaf, 0x71,
+  0xed, 0x2b, 0xd0, 0xdb, 0x20, 0x5f, 0x3c, 0x0e, 0x20, 0x62, 0xd0, 0x25,
+  0x3c, 0x2c, 0x9f, 0x19, 0xdb, 0x70, 0x6c, 0x99, 0x3f, 0x2a, 0xef, 0x62,
+  0x7e, 0x55, 0xde, 0x8a, 0xaa, 0xc0, 0x8f, 0x24, 0x6e, 0xf1, 0x98, 0xdd,
+  0xec, 0x7c, 0xd8, 0xb2, 0xd2, 0x72, 0xe5, 0xf1, 0xcb, 0x57, 0x06, 0x6b,
+  0xc3, 0x2a, 0xae, 0xe0, 0xee, 0x61, 0x78, 0x72, 0x99, 0x0d, 0x5c, 0x58,
+  0x03, 0x82, 0xf9, 0x82, 0x11, 0x77, 0x0c, 0x17, 0x0a, 0x89, 0x26, 0xe2,
+  0x8c, 0x9d, 0xaa, 0xb1, 0x5e, 0xe8, 0x61, 0x5f, 0x0d, 0x0a, 0x7e, 0x3a,
+  0xdc, 0xdd, 0x7c, 0x48, 0xc5, 0x60, 0xf9, 0xdd, 0xc1, 0xd4, 0xb0, 0x9e,
+  0x25, 0x28, 0x45, 0x82, 0x36, 0x53, 0x3a, 0x08, 0x8f, 0x46, 0x59, 0xfb,
+  0x6e, 0x04, 0x03, 0x2f, 0x51, 0x7b, 0xdf, 0x18, 0x06, 0x35, 0x2e, 0x40,
+  0x5f, 0x78, 0xf3, 0x86, 0x41, 0x67, 0xa4, 0xc9, 0x29, 0x5d, 0x32, 0x6e,
+  0x95, 0x03, 0x9c, 0x95, 0x64, 0x03, 0x71, 0xc7, 0x34, 0x8e, 0xcd, 0xf6,
+  0x85, 0xc8, 0x7e, 0xd2, 0x34, 0x0f, 0x35, 0x1a, 0x3a, 0x78, 0x5c, 0x95,
+  0x8e, 0xbd, 0x1b, 0x25, 0x8d, 0x81, 0x0b, 0xa6, 0x59, 0xd9, 0x79, 0x95,
+  0xb4, 0xd9, 0x88, 0x6e, 0xdc, 0x74, 0x2d, 0x7a, 0x4f, 0x6b, 0x04, 0x61,
+  0x10, 0x93, 0xc5, 0x89, 0x1b, 0x74, 0x36, 0xab, 0xb0, 0x36, 0xe5, 0x72,
+  0xa1, 0x15, 0x8e, 0xef, 0xe6, 0xa8, 0x8b, 0xd6, 0xa5, 0x26, 0x0c, 0x9e,
+  0xcf, 0x4e, 0xcb, 0x07, 0xb8, 0xbb, 0x3d, 0xfc, 0xd8, 0x66, 0xa7, 0x55,
+  0x35, 0x1d, 0x8c, 0xc7, 0xe3, 0x95, 0x1c, 0xf5, 0xe0, 0xe0, 0x20, 0xd9,
+  0x38, 0x00, 0xb4, 0xd8, 0x81, 0x8e, 0xf2, 0xe0, 0x9a, 0xed, 0x3a, 0x53,
+  0x5a, 0xce, 0xf3, 0xeb, 0x25, 0x9b, 0x27, 0x79, 0x28, 0x56, 0x8d, 0xf9,
+  0xfc, 0x78, 0xab, 0xeb, 0x14, 0xe6, 0x22, 0x84, 0xa5, 0xea, 0x76, 0x4d,
+  0xfd, 0x45, 0xe4, 0x37, 0xc0, 0x14, 0x5b, 0xc2, 0xa0, 0xd1, 0x95, 0xf4,
+  0x12, 0xcd, 0x68, 0x5f, 0xce, 0xcd, 0x51, 0xe0, 0x14, 0xac, 0x79, 0x36,
+  0x47, 0x02, 0x0d, 0xb3, 0x34, 0x50, 0x19, 0xc2, 0xaa, 0xaa, 0xe4, 0xdd,
+  0xfe, 0x05, 0x7b, 0xf5, 0x6a, 0xcd, 0xc3, 0x5f, 0x91, 0x85, 0xec, 0x40,
+  0xae, 0x61, 0x2f, 0x4b, 0x83, 0x82, 0x65, 0x76, 0x05, 0x80, 0x15, 0xe5,
+  0x95, 0xf1, 0x45, 0x45, 0xd3, 0x8d, 0x15, 0x63, 0xd1, 0x15, 0x1d, 0xb8,
+  0x3b, 0x48, 0x02, 0x27, 0xf9, 0xcf, 0xb6, 0x53, 0x76, 0xe7, 0x79, 0xf7,
+  0x7e, 0x6b, 0xbc, 0xfe, 0xa3, 0x00, 0xc9, 0x6c, 0x69, 0xaf, 0x3f, 0xff,
+  0xaa, 0x6d, 0x42, 0xda, 0x8c, 0x3a, 0x15, 0xe8, 0x31, 0xa3, 0x8c, 0x6e,
+  0xe4, 0x77, 0x0b, 0x97, 0x49, 0x38, 0x85, 0x40, 0x90, 0xe6, 0x02, 0xdf,
+  0x06, 0x76, 0x41, 0x9b, 0x3e, 0x41, 0x45, 0x53, 0xc4, 0x7e, 0x2a, 0x77,
+  0xe1, 0xcc, 0x84, 0x2e, 0x46, 0x53, 0x1b, 0x76, 0xaf, 0x20, 0xe6, 0x22,
+  0xc0, 0x5f, 0xae, 0x42, 0x5f, 0x99, 0x2d, 0x04, 0xf0, 0x38, 0x6c, 0x7b,
+  0x95, 0x1e, 0x17, 0x0a, 0xfd, 0x21, 0xc6, 0x8e, 0x0d, 0xb0, 0x6a, 0xb6,
+  0x82, 0x8e, 0x52, 0x66, 0xae, 0x5d, 0x0b, 0x7a, 0xaa, 0x3d, 0xbb, 0xfc,
+  0x33, 0x6b, 0xbb, 0xbd, 0x43, 0xbb, 0xd1, 0x1d, 0x12, 0x2a, 0x8d, 0xee,
+  0xc7, 0x99, 0x9e, 0x7b, 0x3d, 0x0b, 0x6e, 0x1d, 0x80, 0x0a, 0x35, 0x2d,
+  0xae, 0x38, 0xdb, 0x4e, 0xd1, 0xfa, 0x34, 0x64, 0xd8, 0x4a, 0x05, 0xb6,
+  0xed, 0x13, 0x42, 0xc2, 0x9c, 0x40, 0x82, 0xdc, 0xc1, 0xa6, 0x93, 0x4c,
+  0xd6, 0x9f, 0xb9, 0x8a, 0x23, 0x7d, 0xad, 0x8b, 0x62, 0xc0, 0x53, 0x91,
+  0xfd, 0xb0, 0x00, 0xc1, 0xf1, 0xfd, 0x50, 0x1c, 0xbb, 0x55, 0xd3, 0x4c,
+  0x9c, 0x37, 0xc3, 0x46, 0x4c, 0x43, 0x65, 0x93, 0x75, 0xd4, 0x41, 0xad,
+  0x73, 0xec, 0xae, 0xda, 0xf6, 0xa6, 0x5e, 0xd9, 0x24, 0x55, 0x10, 0x0f,
+  0xf3, 0x66, 0x10, 0x95, 0x0d, 0x3b, 0x28, 0x55, 0x23, 0x29, 0x85, 0x74,
+  0x6b, 0xe0, 0xe3, 0x5a, 0x8d, 0x5c, 0x23, 0xdc, 0x87, 0xdd, 0x3d, 0x88,
+  0xdf, 0xc8, 0xb0, 0x00, 0x65, 0x1c, 0xba, 0x16, 0xa0, 0x0a, 0x8a, 0xc3,
+  0xf3, 0x4e, 0x2a, 0xf1, 0x4a, 0x8d, 0x16, 0xae, 0xe3, 0x17, 0xd9, 0x57,
+  0xe2, 0xd9, 0x93, 0x7f, 0xb8, 0x61, 0xb4, 0xd2, 0x68, 0x9d, 0xdd, 0x24,
+  0x9a, 0xcb, 0x29, 0xde, 0x49, 0xf9, 0x63, 0x15, 0x96, 0x84, 0x07, 0xcc,
+  0x56, 0x97, 0xa6, 0x42, 0xaa, 0xbb, 0x38, 0x16, 0x09, 0xa5, 0xb4, 0xf4,
+  0x50, 0x0b, 0x3c, 0x8f, 0x79, 0x6a, 0x00, 0xd5, 0x58, 0xd2, 0x2f, 0xc0,
+  0xd5, 0xb4, 0xfb, 0x74, 0xca, 0x59, 0xb6, 0x2c, 0xd8, 0x0d, 0x93, 0x63,
+  0x75, 0x42, 0xac, 0x7f, 0x29, 0xa1, 0x7d, 0xeb, 0x2f, 0xd7, 0x57, 0x17,
+  0x95, 0xd1, 0xaa, 0x76, 0x3c, 0x84, 0x75, 0xb1, 0xa8, 0xaf, 0xdb, 0x20,
+  0xd4, 0xb6, 0x28, 0x23, 0x33, 0x0c, 0x3a, 0xab, 0x2b, 0xc1, 0x32, 0x5c,
+  0x44, 0xf3, 0x6e, 0x02, 0x55, 0x4a, 0x48, 0x36, 0x9c, 0x74, 0x7e, 0xe6,
+  0x42, 0x90, 0x65, 0xb6, 0x5e, 0x21, 0xd8, 0x4d, 0xca, 0xcf, 0xc6, 0x22,
+  0x6e, 0x7d, 0x8c, 0x8f, 0x8c, 0x47, 0x06, 0x02, 0xa8, 0x93, 0xf1, 0x18,
+  0x31, 0x81, 0x10, 0x64, 0xe9, 0x4b, 0x12, 0xc2, 0xe4, 0x40, 0x62, 0xce,
+  0x70, 0xb1, 0xd0, 0xa4, 0xdb, 0x87, 0x25, 0x4b, 0x99, 0xfe, 0x10, 0x48,
+  0xd5, 0x2e, 0x01, 0x34, 0xb8, 0x62, 0x19, 0xf6, 0x6a, 0x5a, 0x8c, 0x8a,
+  0xcb, 0xcb, 0x07, 0x24, 0x1c, 0xc1, 0x03, 0x43, 0x1b, 0x72, 0xac, 0x7a,
+  0x8c, 0x87, 0xc1, 0xef, 0x8d, 0x78, 0x84, 0xb4, 0x2f, 0x74, 0xce, 0x7a,
+  0x5a, 0x30, 0x04, 0xe5, 0x57, 0x3a, 0x72, 0x4b, 0xc3, 0x78, 0x63, 0x98,
+  0x1d, 0x96, 0xf0, 0x4f, 0xad, 0x99, 0x60, 0xac, 0x79, 0x3e, 0xbe, 0x02,
+  0x00, 0xb1, 0x8d, 0xff, 0xfa, 0xfb, 0x8f, 0x3f, 0xaf, 0x28, 0xa2, 0x6b,
+  0x59, 0x8a, 0x88, 0xc9, 0x16, 0x94, 0x51, 0x07, 0x20, 0xef, 0xab, 0xa5,
+  0xb2, 0x58, 0x9a, 0x4d, 0x2f, 0x03, 0x34, 0x84, 0x2e, 0x4b, 0xae, 0x7c,
+  0x87, 0x56, 0x8b, 0x57, 0x43, 0x30, 0x18, 0x61, 0x15, 0x10, 0xd3, 0xde,
+  0x91, 0xe9, 0xd0, 0x1b, 0xd5, 0xe2, 0xd0, 0x65, 0x01, 0x0e, 0x85, 0xd7,
+  0xb9, 0xb6, 0xf5, 0x66, 0x78, 0x7f, 0x76, 0xe4, 0x74, 0xd1, 0x60, 0x27,
+  0xbe, 0xc6, 0x4e, 0x74, 0x96, 0xcd, 0xd7, 0xb1, 0xe8, 0xb7, 0xd1, 0x43,
+  0x3d, 0x04, 0x36, 0x1b, 0x04, 0x04, 0x77, 0xbf, 0x59, 0xa5, 0x61, 0x30,
+  0xe9, 0x47, 0x8b, 0x9e, 0xf4, 0x5b, 0x35, 0x21, 0x8a, 0xb2, 0x0b, 0x8c,
+  0xdf, 0x80, 0xfa, 0xd1, 0x98, 0x91, 0x4e, 0xc9, 0xad, 0xaf, 0x49, 0xde,
+  0x74, 0xc5, 0xb9, 0x5a, 0x88, 0x40, 0x8d, 0xc2, 0x5d, 0x52, 0xf5, 0x95,
+  0xe9, 0xff, 0x2e, 0x67, 0xe0, 0x04, 0xb5, 0x6a, 0x45, 0xf5, 0xb8, 0x0b,
+  0x5f, 0x0a, 0x42, 0x98, 0xad, 0x61, 0x28, 0xfb, 0x15, 0x3c, 0xb6, 0xfc,
+  0xe7, 0xf5, 0xff, 0x58, 0xf7, 0x88, 0xf5, 0x91, 0xd4, 0x7f, 0x1b, 0x7f,
+  0x07, 0x3a, 0x76, 0x70, 0xd4, 0xf7, 0xa3, 0x94, 0x20, 0x04, 0x91, 0x12,
+  0x5c, 0x05, 0xa9, 0x51, 0xa4, 0xe4, 0xd6, 0xaa, 0x61, 0x7c, 0x73, 0xb8,
+  0xff, 0xda, 0x25, 0x52, 0xfe, 0x2b, 0x70, 0x5f, 0x9d, 0x61, 0x67, 0x94,
+  0x49, 0x61, 0xb1, 0xa5, 0xea, 0xbe, 0x29, 0xf6, 0xc4, 0x6e, 0x3b, 0x50,
+  0x07, 0x29, 0x07, 0x1c, 0x53, 0xc8, 0x24, 0x1b, 0x51, 0x76, 0xd5, 0x62,
+  0xb6, 0x52, 0xdd, 0x0d, 0x4c, 0x8a, 0x66, 0x9d, 0xe4, 0xd3, 0x2b, 0x2c,
+  0x2e, 0xa0, 0xdf, 0x10, 0xcf, 0xe7, 0xa5, 0xfc, 0x5c, 0x55, 0x2d, 0xe2,
+  0x10, 0x85, 0x43, 0xf4, 0x59, 0x5a, 0x4c, 0xc5, 0x85, 0x37, 0xc6, 0x6b,
+  0x34, 0x03, 0x35, 0xd1, 0x82, 0x85, 0x23, 0xc4, 0x17, 0x38, 0xfc, 0x87,
+  0x70, 0x75, 0x86, 0x65, 0xf3, 0x7c, 0xac, 0x38, 0xf2, 0xab, 0xa5, 0x54,
+  0x89, 0x96, 0x6f, 0xd1, 0x7c, 0xf0, 0x28, 0xb2, 0x83, 0x56, 0x8f, 0x92,
+  0x45, 0x21, 0x3d, 0x92, 0xad, 0xfd, 0xcb, 0xaa, 0x26, 0xc9, 0xca, 0xc6,
+  0xcb, 0x8f, 0x5d, 0xa7, 0x41, 0xa5, 0x34, 0x29, 0xdf, 0xdd, 0x49, 0x95,
+  0xf2, 0xf6, 0x5a, 0x67, 0x86, 0x41, 0xb1, 0x0e, 0x51, 0xfd, 0xc5, 0x4c,
+  0xb9, 0xe4, 0x8d, 0x91, 0x6c, 0x30, 0xc4, 0x9b, 0x96, 0x02, 0x61, 0x15,
+  0x61, 0x9f, 0xda, 0x7b, 0xe8, 0x86, 0x69, 0x1f, 0xb8, 0xb0, 0x9b, 0xa6,
+  0xea, 0xd0, 0xdd, 0x75, 0xcb, 0xc0, 0x00, 0xd0, 0x10, 0xdd, 0x24, 0xe3,
+  0x9b, 0x1c, 0xae, 0xf5, 0x25, 0xf8, 0x7b, 0x3a, 0x37, 0x15, 0x5b, 0x86,
+  0xe9, 0xa0, 0x3e, 0x89, 0xb0, 0x86, 0x70, 0x2b, 0xc7, 0x89, 0x48, 0x52,
+  0xeb, 0x59, 0x1a, 0x65, 0x20, 0x44, 0x1b, 0x8f, 0xc2, 0x29, 0x59, 0xa9,
+  0x21, 0xe3, 0xdc, 0x2c, 0x69, 0xe0, 0xf2, 0xe8, 0x86, 0xb0, 0xb2, 0x1e,
+  0xcd, 0xd1, 0x55, 0xac, 0x27, 0xde, 0x69, 0xae, 0xf4, 0x3a, 0x8a, 0x0e,
+  0xe3, 0xaa, 0x3d, 0x83, 0x74, 0xe5, 0x50, 0x17, 0x79, 0xca, 0xba, 0x3c,
+  0xc4, 0xee, 0xaf, 0xf2, 0xdb, 0x68, 0x95, 0xac, 0xd4, 0x0d, 0x4c, 0x22,
+  0xde, 0xdc, 0x05, 0x62, 0x21, 0x16, 0x30, 0xd2, 0x83, 0xfe, 0x00, 0x12,
+  0xcc, 0x75, 0x80, 0x74, 0x65, 0xbb, 0x40, 0x42, 0x7c, 0x87, 0x71, 0xd4,
+  0xc2, 0x7c, 0x8f, 0x08, 0x3f, 0xe9, 0x7d, 0x53, 0x54, 0xf5, 0x5e, 0xcf,
+  0x21, 0x45, 0xa8, 0x53, 0x2a, 0x6b, 0x51, 0x8e, 0x16, 0xce, 0xe9, 0x44,
+  0xc4, 0x89, 0x04, 0x24, 0x07, 0x90, 0xae, 0x16, 0x7d, 0xda, 0xbc, 0xa7,
+  0x8a, 0xe4, 0xe3, 0x70, 0xd1, 0x98, 0xe4, 0x67, 0xb9, 0x8e, 0x81, 0x91,
+  0xbf, 0xba, 0xc1, 0x14, 0x3c, 0xa4, 0x1f, 0x06, 0x07, 0xe8, 0x7c, 0xf0,
+  0x0d, 0x9a, 0xfb, 0x53, 0xcf, 0x99, 0x09, 0xda, 0x5f, 0xd1, 0xc0, 0xd7,
+  0x56, 0x16, 0xd8, 0x15, 0x06, 0xe2, 0xea, 0x76, 0xc3, 0xfe, 0xaf, 0x03,
+  0xd4, 0xda, 0xb8, 0x93, 0xc9, 0x96, 0x6d, 0xb8, 0xe6, 0x94, 0xce, 0xa3,
+  0x88, 0x2e, 0x9a, 0x31, 0xbd, 0x40, 0x98, 0xe4, 0x64, 0x50, 0x5c, 0x0e,
+  0x18, 0xa4, 0x9f, 0x3a, 0x28, 0x6f, 0xd8, 0x35, 0x14, 0x9c, 0x3a, 0x04,
+  0xb2, 0x32, 0x25, 0xf1, 0xf1, 0x8b, 0xdc, 0xd5, 0x9a, 0x97, 0x5a, 0x3a,
+  0x45, 0x5b, 0x07, 0xa4, 0x1b, 0xb9, 0xc7, 0xca, 0x99, 0xbd, 0xee, 0x6a,
+  0xf6, 0x30, 0xfa, 0x84, 0x96, 0xec, 0xe9, 0x54, 0x3a, 0x47, 0x5c, 0x64,
+  0x5f, 0xee, 0x73, 0xcc, 0x1a, 0x6c, 0x78, 0x26, 0x36, 0x2f, 0x18, 0x2d,
+  0x96, 0x0b, 0x48, 0xa6, 0x5c, 0x44, 0xeb, 0xe1, 0x12, 0xb8, 0xfb, 0x86,
+  0x3b, 0x3e, 0xa0, 0x8e, 0xb4, 0x6e, 0x46, 0x13, 0x79, 0x6d, 0x15, 0x3a,
+  0xf8, 0x39, 0x87, 0xb5, 0xa8, 0xf8, 0xf9, 0xd9, 0xf0, 0xc9, 0x67, 0x5c,
+  0x91, 0xd7, 0x01, 0xae, 0x0e, 0x06, 0xb4, 0x74, 0x1f, 0xef, 0x07, 0x9e,
+  0x67, 0x62, 0x2b, 0x03, 0xfa, 0x6a, 0x53, 0x15, 0x4a, 0x69, 0xf3, 0x7a,
+  0x4c, 0x34, 0x43, 0x92, 0x6d, 0xb6, 0xd4, 0xc4, 0xca, 0x98, 0xaa, 0xf6,
+  0xe7, 0xbf, 0xd3, 0x48, 0x04, 0xd0, 0xd2, 0x1b, 0xbe, 0x8e, 0x06, 0xef,
+  0x88, 0xd1, 0xed, 0x25, 0xff, 0x59, 0x64, 0x3d, 0x44, 0x33, 0xb5, 0x82,
+  0x99, 0x3a, 0x99, 0x32, 0xfb, 0x67, 0xef, 0x8e, 0xde, 0x7d, 0xbd, 0xe7,
+  0x0e, 0x3e, 0xe0, 0xd7, 0x3d, 0x6c, 0x77, 0x4b, 0x90, 0x81, 0xcb, 0x06,
+  0x8f, 0xe4, 0x51, 0xe0, 0x6c, 0x8f, 0x04, 0x3b, 0x50, 0x7c, 0x34, 0x35,
+  0xc3, 0xd0, 0x37, 0x62, 0x67, 0x12, 0xb9, 0xcd, 0xca, 0xd9, 0x68, 0x4c,
+  0x0a, 0x2e, 0x11, 0x2e, 0x5c, 0x17, 0xa3, 0xc9, 0x26, 0x92, 0x5c, 0x90,
+  0xc7, 0x34, 0x45, 0x99, 0xbf, 0x22, 0xa4, 0xae, 0x06, 0x82, 0x7d, 0xd7,
+  0x34, 0x2e, 0x29, 0xa5, 0xd7, 0x85, 0x06, 0xe9, 0xcf, 0x9b, 0x70, 0xe1,
+  0x02, 0xff, 0x5b, 0x61, 0xdb, 0xaa, 0x1c, 0x77, 0xa9, 0x5b, 0x95, 0x15,
+  0xf2, 0xa3, 0xc7, 0xbb, 0xa3, 0x0b, 0x5e, 0x6c, 0xf3, 0x90, 0x61, 0xec,
+  0x53, 0x5f, 0x3b, 0xc7, 0xcd, 0xff, 0x93, 0xe3, 0x20, 0x7c, 0x20, 0x84,
+  0x08, 0x1e, 0xe2, 0x1f, 0x0f, 0x8e, 0xf2, 0x96, 0x28, 0xb0, 0x31, 0x07,
+  0x22, 0xbf, 0x65, 0xf7, 0x68, 0xa0, 0x18, 0xf2, 0x0c, 0x17, 0xcb, 0xd1,
+  0x6c, 0xf2, 0x2c, 0x79, 0x49, 0xff, 0x74, 0xd3, 0xd1, 0x0e, 0x9c, 0xbf,
+  0xf9, 0x14, 0x65, 0x78, 0x52, 0x07, 0x09, 0x24, 0x12, 0x3f, 0xff, 0xfa,
+  0x64, 0x97, 0x9a, 0xfe, 0x98, 0x1a, 0x76, 0xc4, 0x84, 0x56, 0xaf, 0x8e,
+  0x66, 0xf6, 0xeb, 0xab, 0xde, 0x3b, 0xca, 0xab, 0xbd, 0xb3, 0xfb, 0x79,
+  0x32, 0xca, 0xeb, 0xe4, 0xed, 0xeb, 0x67, 0xa4, 0xf7, 0x65, 0xe3, 0x9b,
+  0x6a, 0x39, 0x33, 0x16, 0x61, 0xc5, 0x89, 0xb1, 0x13, 0xeb, 0xed, 0xbb,
+  0xda, 0x27, 0x57, 0xf5, 0x1b, 0xc5, 0xc5, 0x2f, 0x5d, 0x0a, 0xaf, 0x2f,
+  0xdb, 0xed, 0x98, 0x19, 0xb7, 0xa4, 0x56, 0xf8, 0x88, 0x7d, 0x87, 0xd6,
+  0x80, 0xba, 0xaf, 0x24, 0xc1, 0xaa, 0x65, 0x4f, 0xfe, 0xac, 0x69, 0x2b,
+  0x93, 0xfc, 0x41, 0xab, 0xfe, 0x31, 0x20, 0x01, 0xfc, 0xaa, 0x13, 0x23,
+  0xce, 0xee, 0x53, 0x16, 0x81, 0xfa, 0xc9, 0x11, 0x9e, 0x96, 0x1c, 0x17,
+  0x7d, 0xe3, 0x18, 0x6f, 0x04, 0x90, 0x83, 0x22, 0x1a, 0x32, 0x8b, 0xcc,
+  0xc7, 0x4b, 0xd4, 0xe1, 0xea, 0xca, 0x90, 0x88, 0x77, 0x66, 0xc6, 0x60,
+  0xd8, 0x9e, 0xe5, 0x72, 0x8e, 0x4d, 0xd8, 0x5f, 0x70, 0x4c, 0x68, 0xb2,
+  0x33, 0xfc, 0x68, 0x89, 0xc6, 0x61, 0xa9, 0x75, 0x92, 0xd5, 0x8a, 0xce,
+  0x7d, 0x0d, 0x7f, 0x48, 0x6b, 0x34, 0xdc, 0xb4, 0x04, 0xe3, 0x4e, 0xd9,
+  0x2f, 0x58, 0xca, 0xa9, 0xd8, 0xa5, 0xfb, 0xf9, 0x2a, 0x1d, 0xdd, 0xc7,
+  0xf2, 0x2f, 0x79, 0x8e, 0x6c, 0x59, 0xda, 0xa8, 0x50, 0x9e, 0xfc, 0xb3,
+  0xe1, 0x53, 0x36, 0xbe, 0xf4, 0xb9, 0x94, 0xe8, 0x02, 0xf3, 0x65, 0x17,
+  0xaa, 0xb3, 0x30, 0x73, 0x6c, 0x40, 0x7e, 0xc5, 0x37, 0x13, 0x6e, 0xf1,
+  0x48, 0x21, 0xda, 0x20, 0x80, 0xd0, 0x4c, 0xcc, 0x1e, 0x49, 0x30, 0xa0,
+  0xdd, 0xbc, 0x0f, 0x4c, 0x68, 0xc8, 0xa0, 0x2b, 0x24, 0xd6, 0x23, 0x95,
+  0x50, 0x7d, 0xed, 0xe1, 0x81, 0x07, 0x51, 0xc1, 0x49, 0x47, 0x1c, 0xbb,
+  0xe8, 0x2e, 0xc1, 0xd7, 0x1d, 0x41, 0x04, 0xcd, 0xb8, 0x6b, 0x05, 0x1c,
+  0x4a, 0xd6, 0x7f, 0xc0, 0x52, 0x64, 0x9f, 0x35, 0x91, 0xcc, 0xe3, 0xb5,
+  0xfb, 0x00, 0x7e, 0x69, 0xb4, 0x9b, 0xd6, 0x0c, 0xcc, 0x04, 0x0b, 0xc0,
+  0x1f, 0x0e, 0x83, 0x59, 0x1d, 0x99, 0x3c, 0x1e, 0x9b, 0x12, 0x17, 0xb0,
+  0xde, 0x7a, 0x73, 0x74, 0x7c, 0xb8, 0x99, 0xbc, 0xc9, 0x2c, 0x03, 0x30,
+  0x9c, 0x16, 0xdf, 0x80, 0xff, 0x26, 0x9f, 0x18, 0x7d, 0xa8, 0x1d, 0x21,
+  0x16, 0x93, 0xa2, 0x5b, 0x02, 0x2d, 0x48, 0x48, 0x06, 0x0c, 0x5e, 0x40,
+  0x25, 0x0a, 0x04, 0x02, 0x5b, 0x0d, 0xf3, 0xd1, 0xd2, 0x82, 0x82, 0xa3,
+  0x2b, 0x54, 0x48, 0x90, 0x9a, 0x4d, 0x5c, 0x2d, 0x0a, 0x60, 0x5a, 0x85,
+  0x8b, 0xbc, 0x62, 0x3a, 0xa1, 0xb1, 0x6b, 0xf0, 0xab, 0xb8, 0xa5, 0xf3,
+  0x8a, 0x18, 0xd7, 0x7d, 0xec, 0x24, 0xc2, 0xaf, 0x0c, 0x62, 0xe0, 0x31,
+  0x22, 0xa0, 0x69, 0x56, 0x4c, 0x7c, 0x3e, 0x93, 0x14, 0xab, 0x9f, 0x4f,
+  0x1b, 0x85, 0x72, 0x02, 0xf0, 0xf2, 0x18, 0xec, 0xd5, 0xa9, 0x64, 0xd3,
+  0xf0, 0x80, 0xc2, 0x18, 0x19, 0x21, 0x2f, 0xaf, 0x84, 0xbb, 0x56, 0x86,
+  0x2e, 0x14, 0x33, 0xe1, 0xf4, 0x99, 0x32, 0xe6, 0xa7, 0x45, 0x6f, 0x89,
+  0x90, 0x41, 0xe8, 0xc4, 0xa2, 0xd9, 0x82, 0xd5, 0x48, 0x0c, 0xef, 0xfe,
+  0xdc, 0x02, 0xe2, 0xa4, 0x64, 0x27, 0x40, 0x31, 0x3a, 0x69, 0x9b, 0x91,
+  0x78, 0x46, 0xbd, 0xce, 0x83, 0x99, 0x91, 0x32, 0xb7, 0xbd, 0xb7, 0xe3,
+  0x02, 0x93, 0xef, 0xee, 0xee, 0x86, 0x0f, 0xdd, 0xe7, 0xff, 0xbc, 0xa0,
+  0xb1, 0xbf, 0x30, 0x69, 0xfe, 0x65, 0x39, 0xbf, 0x21, 0xda, 0xaa, 0x98,
+  0x82, 0xb5, 0xfe, 0x67, 0x15, 0x3f, 0x7d, 0x1e, 0x3a, 0xa8, 0x5d, 0x83,
+  0x76, 0x1c, 0xd6, 0x33, 0x4d, 0x35, 0xdc, 0x44, 0xa8, 0x62, 0x35, 0x78,
+  0x45, 0xa3, 0xf4, 0x14, 0xc7, 0x8c, 0x10, 0xed, 0x8c, 0x39, 0x20, 0x89,
+  0xad, 0x28, 0x3d, 0x1d, 0x91, 0x35, 0xdd, 0x1b, 0xfa, 0x72, 0x55, 0x9d,
+  0xe8, 0xc5, 0x4a, 0x81, 0x49, 0x60, 0x23, 0x74, 0xea, 0xa0, 0xba, 0x01,
+  0x05, 0xb8, 0x28, 0x65, 0x09, 0x34, 0xb1, 0x46, 0x45, 0x40, 0x66, 0x41,
+  0x2f, 0xeb, 0xa2, 0x28, 0x09, 0x5c, 0x4c, 0x62, 0x25, 0xca, 0x2b, 0x57,
+  0x06, 0xc8, 0x0d, 0x30, 0x69, 0x0d, 0x4e, 0x85, 0x1b, 0x12, 0x5b, 0xd7,
+  0x3b, 0xe7, 0x72, 0x3c, 0x2d, 0x78, 0x77, 0x98, 0xf1, 0x05, 0x2b, 0xff,
+  0x9f, 0x22, 0x89, 0xf2, 0x55, 0xa8, 0x27, 0x7d, 0x10, 0x09, 0x4e, 0x0c,
+  0x33, 0x4b, 0x0c, 0xf1, 0x03, 0x39, 0x74, 0x10, 0x71, 0x4f, 0x82, 0x36,
+  0x24, 0x82, 0xde, 0x81, 0x82, 0xe8, 0x75, 0x19, 0x2d, 0x79, 0x32, 0x08,
+  0x52, 0xce, 0xdd, 0x5d, 0xf1, 0x9a, 0x8e, 0x6d, 0x51, 0xe5, 0xb2, 0x2f,
+  0x3e, 0x72, 0x34, 0xb0, 0xc2, 0x74, 0x83, 0xc3, 0x0c, 0xcd, 0xcc, 0xb1,
+  0x72, 0x09, 0x61, 0x36, 0xe7, 0x07, 0x47, 0x1b, 0x3d, 0x5c, 0x96, 0xc1,
+  0x06, 0xe2, 0xf2, 0x1c, 0x44, 0x81, 0x87, 0x07, 0x55, 0xa2, 0x9f, 0x4d,
+  0x48, 0x05, 0x5a, 0x5c, 0x24, 0x78, 0x53, 0xbd, 0xc8, 0x12, 0xe4, 0x56,
+  0xb9, 0xda, 0x50, 0x86, 0xfb, 0x77, 0xa7, 0xa8, 0x30, 0xde, 0xfd, 0x69,
+  0xd0, 0xad, 0x82, 0x2a, 0x12, 0x09, 0xab, 0xb8, 0x2b, 0xf3, 0xba, 0xce,
+  0x84, 0x95, 0xa7, 0x96, 0xfb, 0x24, 0xba, 0xc8, 0x98, 0x9a, 0x1d, 0xb6,
+  0xa6, 0x60, 0xf6, 0x1d, 0x9e, 0x4a, 0x47, 0xdb, 0x65, 0xeb, 0x47, 0x30,
+  0xb1, 0x0e, 0x78, 0x4a, 0xc3, 0x5d, 0x1d, 0x03, 0xe5, 0x81, 0x8d, 0x1a,
+  0x31, 0x4d, 0x41, 0xfd, 0x0e, 0x12, 0xca, 0xd8, 0x2c, 0xf8, 0x7b, 0x3a,
+  0xb3, 0x24, 0x88, 0xcf, 0xb9, 0xc4, 0xf8, 0xc6, 0x7d, 0x56, 0x6f, 0xba,
+  0xdc, 0x11, 0x8d, 0x5d, 0x8d, 0xd5, 0xcf, 0x16, 0xa6, 0xd6, 0x82, 0x48,
+  0x62, 0x6b, 0x8d, 0xbe, 0x24, 0xf8, 0x8a, 0xbc, 0xe8, 0x25, 0xb0, 0xe0,
+  0xd8, 0x09, 0xaa, 0x75, 0xcd, 0x56, 0x35, 0x17, 0xa9, 0xf8, 0x6b, 0xfa,
+  0x06, 0xa9, 0x34, 0x59, 0x39, 0x66, 0x33, 0x63, 0xf2, 0x97, 0xe5, 0x24,
+  0x1f, 0x23, 0x4e, 0xc5, 0x17, 0x39, 0x0a, 0xcc, 0xd0, 0x41, 0x26, 0x57,
+  0x27, 0x59, 0xfd, 0x7b, 0x01, 0x26, 0xe2, 0xdc, 0xfb, 0xb2, 0xb8, 0x5a,
+  0xfa, 0x8c, 0x5b, 0x70, 0x5d, 0xa8, 0x5f, 0x3c, 0xea, 0xda, 0xd7, 0x86,
+  0xd3, 0xbb, 0xeb, 0xf5, 0xf1, 0x71, 0xd2, 0x2d, 0xf3, 0xa2, 0x0a, 0x82,
+  0xd0, 0x97, 0x5a, 0xba, 0xb9, 0x21, 0x71, 0x03, 0x08, 0x6c, 0xb9, 0xe0,
+  0xac, 0xb6, 0x50, 0x8f, 0x46, 0xf7, 0x3c, 0x94, 0x41, 0x27, 0xe0, 0xf2,
+  0x0e, 0x37, 0x03, 0xc7, 0x38, 0xf1, 0x9c, 0xca, 0x09, 0xc4, 0xbd, 0x7b,
+  0xfa, 0xe0, 0xb2, 0xbe, 0x4b, 0xc3, 0x42, 0xc4, 0x83, 0x1b, 0x91, 0x6f,
+  0xaa, 0x58, 0xc0, 0xab, 0x66, 0xc8, 0x06, 0xdb, 0x12, 0xa4, 0x09, 0xa8,
+  0xf5, 0xc8, 0xc1, 0x47, 0x68, 0x0e, 0x69, 0x92, 0xf4, 0xac, 0xb5, 0x5e,
+  0x5b, 0x89, 0x6d, 0x60, 0x20, 0x48, 0xc8, 0x76, 0x50, 0x3d, 0x66, 0x9f,
+  0xe8, 0xb9, 0xf3, 0x08, 0xa7, 0xea, 0x09, 0x99, 0x75, 0x76, 0x5b, 0x6c,
+  0xd0, 0x33, 0x5a, 0x15, 0xf3, 0x1c, 0x36, 0x73, 0xbc, 0x9b, 0x68, 0x32,
+  0x8a, 0x45, 0x25, 0xcc, 0x23, 0xe5, 0xe4, 0xb7, 0x6e, 0x82, 0x78, 0x03,
+  0x92, 0x9e, 0xb9, 0xb1, 0x64, 0x30, 0x81, 0xf7, 0x87, 0xa3, 0xf2, 0x85,
+  0xa0, 0x57, 0x4f, 0x96, 0x43, 0x53, 0x5d, 0x18, 0x4e, 0x63, 0x91, 0xbb,
+  0x61, 0x38, 0x81, 0xb1, 0xc0, 0x7c, 0x21, 0xb0, 0x11, 0xc2, 0x06, 0x92,
+  0x08, 0x5a, 0xfc, 0x92, 0x4d, 0xae, 0xea, 0xdd, 0x04, 0x28, 0xa3, 0xc4,
+  0xbf, 0x4b, 0x4e, 0x27, 0xc2, 0xde, 0xdb, 0x50, 0x02, 0x76, 0x75, 0x03,
+  0xa2, 0xea, 0x3a, 0xfd, 0xf8, 0x71, 0x58, 0x65, 0x5b, 0x24, 0x3b, 0x55,
+  0x5b, 0x55, 0x35, 0x05, 0x1c, 0x16, 0x72, 0x50, 0x3c, 0x29, 0x7c, 0x2b,
+  0xc5, 0xb6, 0xe7, 0x24, 0x39, 0x73, 0x84, 0x36, 0x7e, 0xc6, 0x10, 0x1c,
+  0x0d, 0xbb, 0x51, 0xa5, 0xb9, 0xe0, 0x49, 0x7f, 0xf7, 0x02, 0x34, 0x5d,
+  0xe3, 0x54, 0xe5, 0x0a, 0x56, 0xb8, 0x9b, 0x6e, 0x8a, 0xa5, 0x7b, 0x39,
+  0x0f, 0x92, 0xc5, 0xa6, 0x99, 0xcf, 0x49, 0x34, 0x09, 0x12, 0xcb, 0xe1,
+  0x1b, 0x15, 0x89, 0xa9, 0xc3, 0x30, 0x8d, 0x59, 0x5a, 0x42, 0x23, 0x38,
+  0x5c, 0xc3, 0x32, 0xea, 0x50, 0x03, 0xd9, 0x88, 0x48, 0xfb, 0x61, 0x6f,
+  0x44, 0xb1, 0xb2, 0xe9, 0x32, 0xe1, 0x22, 0x8e, 0xe1, 0x18, 0x3a, 0x1b,
+  0x77, 0xb2, 0x08, 0x08, 0xfa, 0x3a, 0xcb, 0x4b, 0xef, 0x8b, 0xac, 0x9c,
+  0xa9, 0xce, 0xdf, 0x70, 0x45, 0x00, 0x2e, 0xb6, 0x6a, 0x41, 0x94, 0x17,
+  0x70, 0x77, 0xfd, 0x24, 0xa8, 0x7e, 0xc0, 0x64, 0x4a, 0x13, 0x23, 0x0d,
+  0x89, 0x14, 0x31, 0x96, 0x6f, 0xc5, 0xd4, 0xa7, 0xae, 0x77, 0x14, 0x9c,
+  0xac, 0xa2, 0xf9, 0x87, 0xc7, 0x8c, 0x2c, 0xa6, 0xa7, 0x58, 0x00, 0x42,
+  0xc7, 0x90, 0x4f, 0xbb, 0x95, 0x11, 0x7c, 0x4c, 0xa5, 0xec, 0x6c, 0x8c,
+  0xc9, 0x7a, 0x03, 0xa9, 0xd8, 0x96, 0x05, 0x77, 0x5e, 0x32, 0x40, 0x48,
+  0x4d, 0x01, 0xae, 0x8a, 0x02, 0x8b, 0x54, 0x45, 0x5f, 0xf5, 0x80, 0x29,
+  0x23, 0xb8, 0xb5, 0x59, 0x9f, 0x0c, 0xd9, 0xe3, 0x0f, 0x57, 0x0d, 0x5b,
+  0x04, 0xd7, 0x16, 0x37, 0x07, 0x4e, 0x35, 0xf4, 0x68, 0xc9, 0xde, 0x57,
+  0xd2, 0x9e, 0xac, 0x97, 0x23, 0xe4, 0x9e, 0x46, 0x4c, 0x20, 0xfc, 0xc6,
+  0x77, 0x45, 0xa2, 0x43, 0x13, 0xf8, 0x15, 0xae, 0xe8, 0x2e, 0x5d, 0xd1,
+  0x65, 0xf6, 0x89, 0xa3, 0x73, 0x69, 0x95, 0x01, 0xe4, 0x17, 0xe6, 0x59,
+  0x57, 0x7e, 0xcf, 0x57, 0x49, 0x18, 0xde, 0x41, 0x2d, 0xd1, 0xeb, 0xe6,
+  0xcd, 0x0c, 0xf7, 0xb3, 0xf9, 0x9c, 0xd2, 0x4e, 0x07, 0xb8, 0x56, 0xe5,
+  0x37, 0x4b, 0xac, 0x91, 0x2c, 0x1d, 0xf6, 0x5c, 0x7c, 0xaf, 0x1f, 0xe8,
+  0x4e, 0x24, 0x96, 0xad, 0xd3, 0xa8, 0xa7, 0xdc, 0x6e, 0x4e, 0x10, 0xa0,
+  0xfd, 0xcd, 0x0d, 0xa6, 0x6b, 0x70, 0x6f, 0x7b, 0xc9, 0x4f, 0x3f, 0xf5,
+  0x13, 0x46, 0x9e, 0xfe, 0x89, 0x34, 0xcd, 0x9f, 0x38, 0xa6, 0xe3, 0xa7,
+  0x52, 0x01, 0xa8, 0x7e, 0xba, 0xa5, 0x2e, 0xf7, 0x57, 0xe5, 0xed, 0x24,
+  0x41, 0xb1, 0xdf, 0x10, 0xed, 0x5e, 0x4b, 0xb7, 0xb3, 0x19, 0x42, 0xb0,
+  0x91, 0x9c, 0xfc, 0x12, 0x2b, 0x12, 0x46, 0x1b, 0xb3, 0x9c, 0xcd, 0x15,
+  0x03, 0x5a, 0x38, 0x0d, 0xf8, 0x00, 0x98, 0xc5, 0xfa, 0xef, 0xd6, 0xfd,
+  0xde, 0x04, 0xa5, 0xe0, 0xd5, 0xae, 0xc3, 0x0f, 0xc6, 0xf0, 0x43, 0xd9,
+  0x24, 0x84, 0xa8, 0x7f, 0x01, 0xc1, 0xc6, 0xe1, 0x86, 0x3e, 0x79, 0xc2,
+  0xa6, 0x5d, 0x66, 0x07, 0x1a, 0x51, 0x2f, 0x1b, 0xcc, 0x56, 0xe9, 0xc5,
+  0xf5, 0x3d, 0x04, 0xfa, 0x8e, 0x32, 0x35, 0x77, 0x9e, 0xa9, 0x80, 0x0f,
+  0x76, 0x59, 0x7b, 0x00, 0x77, 0xeb, 0xa4, 0x52, 0xf6, 0xfe, 0x87, 0x3c,
+  0x97, 0xc6, 0xb2, 0x3e, 0x58, 0xc7, 0x65, 0x1a, 0x96, 0xbe, 0x2d, 0xbb,
+  0x6a, 0x7a, 0x33, 0x93, 0x12, 0x99, 0x9f, 0xc3, 0x87, 0xb2, 0xbb, 0x14,
+  0xc4, 0x4f, 0x70, 0xdc, 0x3d, 0x92, 0x7e, 0x0a, 0x2f, 0x65, 0x77, 0xf8,
+  0xfd, 0x88, 0x4f, 0xc8, 0x4a, 0x7b, 0xd9, 0xbb, 0x79, 0x1d, 0xdc, 0xb5,
+  0x03, 0x76, 0x0d, 0xfb, 0x02, 0x6d, 0x20, 0x0e, 0x78, 0x7b, 0xf8, 0x52,
+  0xad, 0x18, 0x19, 0xe2, 0x3e, 0xc2, 0xa5, 0x3d, 0xb2, 0x06, 0x0f, 0x03,
+  0x85, 0x75, 0xb9, 0x98, 0xcf, 0xdd, 0x5c, 0xb8, 0x6c, 0x72, 0x5e, 0xf4,
+  0xa5, 0x4a, 0xac, 0x69, 0xb2, 0x41, 0x8a, 0x65, 0x24, 0x7e, 0xa0, 0xa3,
+  0xd4, 0xf2, 0x98, 0x5e, 0x25, 0xbd, 0xd5, 0xf7, 0x60, 0x2f, 0x8a, 0xdf,
+  0x64, 0xca, 0x24, 0x67, 0xe6, 0xdf, 0x68, 0x69, 0x05, 0x55, 0xb6, 0x36,
+  0xec, 0x42, 0xff, 0xab, 0x5d, 0xe2, 0x9b, 0x6a, 0x4c, 0x8c, 0x22, 0xf3,
+  0x3a, 0x64, 0x7e, 0x5d, 0x5b, 0xe5, 0x9d, 0x58, 0x1e, 0x98, 0x3f, 0x72,
+  0xf8, 0x14, 0x2f, 0x19, 0x8d, 0xa3, 0x19, 0x86, 0xb7, 0x9a, 0xf3, 0xb2,
+  0x0d, 0x9a, 0x7b, 0x54, 0xc3, 0xbd, 0xa5, 0xd5, 0x39, 0x7b, 0x2f, 0x2c,
+  0xb4, 0x9a, 0x02, 0xc7, 0x72, 0x1b, 0x43, 0x84, 0x77, 0x56, 0x66, 0x67,
+  0x53, 0xe5, 0xb6, 0x32, 0x17, 0x23, 0xcc, 0x65, 0xae, 0x4e, 0xa9, 0xde,
+  0x75, 0x21, 0x90, 0x97, 0xbd, 0xbd, 0xe4, 0xa8, 0xb6, 0xc0, 0x6a, 0x9d,
+  0xe3, 0xaa, 0x00, 0x1c, 0x60, 0x8a, 0x7e, 0x73, 0xf2, 0xf6, 0xd0, 0x05,
+  0xf5, 0x8b, 0xc9, 0x88, 0x3f, 0x89, 0x82, 0x57, 0x0f, 0x11, 0x93, 0x65,
+  0xb8, 0x0e, 0xfd, 0x6e, 0x65, 0x60, 0xac, 0xce, 0x55, 0x56, 0x2f, 0xee,
+  0x96, 0xf9, 0x64, 0x03, 0xc8, 0x1b, 0xef, 0xe7, 0xf9, 0xc7, 0x81, 0xd8,
+  0xc4, 0x80, 0x8e, 0x58, 0x19, 0xf8, 0x84, 0x41, 0x57, 0x88, 0xdd, 0xa8,
+  0x98, 0x45, 0x20, 0xef, 0x2c, 0xd9, 0x24, 0xd4, 0xc3, 0x90, 0x88, 0x96,
+  0xcf, 0xc5, 0xbf, 0x2a, 0x4d, 0x6e, 0x32, 0x07, 0x30, 0xd9, 0x1e, 0xfb,
+  0x1e, 0x49, 0x50, 0x08, 0xf6, 0x9b, 0x9b, 0xdb, 0x3f, 0x3d, 0x7d, 0xbd,
+  0x7f, 0xb1, 0xef, 0xe6, 0x26, 0x58, 0x64, 0xcc, 0x55, 0x60, 0xe8, 0x60,
+  0xd1, 0x4d, 0x91, 0xaf, 0xd6, 0x7f, 0xcf, 0xb9, 0x6b, 0xed, 0xcb, 0xfe,
+  0xf4, 0xec, 0x84, 0xcd, 0x55, 0xbf, 0xff, 0x69, 0x3f, 0x00, 0x7c, 0x79,
+  0x9d, 0xd6, 0x69, 0x37, 0x65, 0x60, 0x77, 0x33, 0xe1, 0xf1, 0x19, 0x2a,
+  0x6a, 0xdf, 0x05, 0x0d, 0x49, 0x78, 0x56, 0xf2, 0x81, 0xf7, 0xb4, 0x1c,
+  0x3b, 0xe9, 0x49, 0xec, 0xd0, 0xb2, 0x9d, 0x11, 0x28, 0xe5, 0x60, 0x22,
+  0x85, 0xe7, 0x62, 0x06, 0x79, 0x6a, 0x6b, 0x35, 0x25, 0x99, 0x9f, 0xc4,
+  0xd6, 0x1a, 0xbc, 0x83, 0xed, 0xc6, 0x4c, 0x5f, 0x13, 0x5e, 0xa8, 0x36,
+  0x3a, 0xbb, 0xdb, 0x1f, 0xdb, 0x20, 0x29, 0xd5, 0x28, 0x48, 0x37, 0xe0,
+  0x01, 0x12, 0xce, 0x5e, 0x48, 0x31, 0xef, 0xa1, 0x8d, 0x56, 0x75, 0xf3,
+  0xce, 0xd9, 0x11, 0xdf, 0x26, 0xd1, 0xb9, 0xcd, 0x61, 0xd8, 0xf5, 0x42,
+  0x0d, 0x06, 0x03, 0xf3, 0x51, 0xc9, 0xb4, 0xe9, 0x83, 0xce, 0x43, 0xb5,
+  0x15, 0x2c, 0x36, 0x46, 0x1f, 0xe7, 0x13, 0x81, 0x79, 0xab, 0x2d, 0xcc,
+  0x2b, 0x0e, 0x0c, 0x3d, 0xc4, 0x83, 0xe6, 0x25, 0x87, 0xe8, 0xdc, 0x8b,
+  0x80, 0x73, 0xaa, 0x6b, 0x8f, 0x1e, 0xad, 0x96, 0x6c, 0xfc, 0xe3, 0xbf,
+  0xb6, 0x76, 0x86, 0xdb, 0xbd, 0xee, 0xe0, 0x11, 0xcb, 0x0f, 0x03, 0xab,
+  0x15, 0xa9, 0x91, 0xba, 0x43, 0xc5, 0xa3, 0xe3, 0x13, 0xf6, 0x45, 0x02,
+  0xe9, 0x82, 0xda, 0x8f, 0x0e, 0x65, 0x70, 0xd2, 0xb1, 0xc2, 0x8b, 0x87,
+  0x51, 0x19, 0x22, 0xf1, 0xc3, 0x79, 0x01, 0x1c, 0x84, 0x94, 0xb5, 0xa1,
+  0x86, 0x6d, 0xaf, 0x17, 0x5f, 0xe6, 0xf9, 0x44, 0x82, 0x25, 0x5a, 0xab,
+  0xfd, 0xab, 0xb2, 0x6b, 0x1d, 0x15, 0x04, 0xce, 0xa6, 0x95, 0x3c, 0xaf,
+  0xe1, 0x4a, 0xba, 0xc9, 0x48, 0x1e, 0x9c, 0x22, 0x99, 0x94, 0x4d, 0xb3,
+  0xab, 0x30, 0xd6, 0x9b, 0x75, 0xda, 0x2a, 0x1f, 0x1a, 0x2c, 0x35, 0x01,
+  0xc2, 0x44, 0x19, 0x0f, 0x74, 0x5b, 0x66, 0x1c, 0xdb, 0x9e, 0xe4, 0x93,
+  0x0e, 0xe8, 0x46, 0x0b, 0x9c, 0xce, 0x0d, 0x82, 0x6d, 0x14, 0xa3, 0xcc,
+  0x49, 0xfe, 0xd2, 0xba, 0xc9, 0x88, 0x80, 0xec, 0xbb, 0xcd, 0x27, 0xcb,
+  0x8e, 0xd8, 0xd0, 0x7e, 0x7f, 0xc8, 0xbc, 0xb6, 0x01, 0xa9, 0x24, 0xf6,
+  0x17, 0x7e, 0xa2, 0x70, 0x56, 0x64, 0xf6, 0x69, 0xc9, 0xc9, 0xea, 0xd8,
+  0xc5, 0x2f, 0xb3, 0x10, 0xa7, 0xea, 0xe0, 0xf4, 0xc3, 0xb7, 0x87, 0x87,
+  0xa7, 0x47, 0xaf, 0x8f, 0x0f, 0xf5, 0xb6, 0x71, 0x1f, 0xbd, 0xbb, 0xf8,
+  0xee, 0xd8, 0xc3, 0xe4, 0xab, 0xbb, 0xb9, 0xad, 0xf6, 0x73, 0x18, 0x23,
+  0x9a, 0x3b, 0xce, 0xe7, 0xcb, 0x8f, 0x7d, 0xa0, 0x7f, 0x11, 0x4d, 0xef,
+  0x1f, 0xfd, 0xd0, 0x4f, 0xbe, 0x39, 0x1d, 0xbc, 0xff, 0xa1, 0x83, 0xea,
+  0xd3, 0x30, 0x1e, 0xb5, 0xe5, 0x4b, 0x97, 0xf9, 0x80, 0x3a, 0xaa, 0x7e,
+  0xee, 0xa6, 0x07, 0x37, 0xfd, 0x5f, 0x9f, 0xff, 0x16, 0x29, 0xc9, 0xdd,
+  0xd0, 0xaf, 0x79, 0x50, 0x3b, 0x29, 0x10, 0xe6, 0xf5, 0x02, 0x06, 0x39,
+  0x3c, 0xdf, 0x36, 0x4c, 0xfe, 0x26, 0x01, 0xde, 0x27, 0x2f, 0xe9, 0x9f,
+  0x18, 0xa6, 0xe6, 0xd6, 0xf9, 0xf9, 0x37, 0x9b, 0xc9, 0x69, 0x50, 0x8e,
+  0xc4, 0x99, 0xa4, 0x86, 0x16, 0xe6, 0x0c, 0xbb, 0x50, 0x11, 0x1a, 0xb7,
+  0x4a, 0x2e, 0x61, 0xd1, 0x0d, 0xfc, 0x08, 0x0b, 0x9a, 0xe4, 0x4e, 0x0f,
+  0x92, 0x93, 0x27, 0x29, 0x93, 0xd4, 0x1b, 0x2e, 0x81, 0x26, 0x2a, 0xbc,
+  0xc8, 0x8d, 0x6d, 0x01, 0x09, 0x37, 0xbd, 0xa5, 0x4b, 0x39, 0x69, 0x81,
+  0x8f, 0xe8, 0x24, 0x9f, 0x20, 0xa4, 0x1c, 0x7a, 0x9f, 0xc8, 0x0b, 0x49,
+  0xb2, 0xfe, 0xbf, 0xb6, 0x86, 0x55, 0x75, 0xbd, 0x95, 0x4f, 0x3e, 0x94,
+  0x55, 0xba, 0xde, 0xbe, 0xa2, 0x83, 0xaf, 0x27, 0xfc, 0x75, 0xb2, 0x3e,
+  0x74, 0x8f, 0xea, 0xef, 0xfc, 0xf9, 0x6f, 0x89, 0x1c, 0x48, 0x6b, 0xf3,
+  0x28, 0x52, 0x7f, 0x67, 0x27, 0xf8, 0xd1, 0xa1, 0x93, 0xc6, 0xd5, 0x1b,
+  0xc5, 0x8d, 0x60, 0x1b, 0x64, 0x73, 0x79, 0x6b, 0x3a, 0xbb, 0x21, 0x50,
+  0xfe, 0x56, 0xf9, 0x45, 0xe0, 0x50, 0x73, 0x3a, 0xb7, 0xaf, 0x0f, 0xcf,
+  0xfa, 0x02, 0xe0, 0x1f, 0x82, 0xf7, 0x7b, 0xe8, 0x44, 0x05, 0xed, 0x5f,
+  0xa5, 0xa5, 0xf6, 0xff, 0x85, 0xa0, 0xfd, 0x37, 0xe5, 0x28, 0x79, 0x39,
+  0xa5, 0x17, 0xa7, 0xf1, 0xb4, 0xfb, 0x43, 0xc1, 0x27, 0xfb, 0x36, 0x2b,
+  0x47, 0x59, 0x59, 0x54, 0x6d, 0xac, 0x2a, 0x05, 0x82, 0x17, 0x39, 0x15,
+  0xcd, 0x88, 0x7a, 0x1a, 0xd3, 0x4f, 0x6b, 0xd8, 0xc6, 0x80, 0xa0, 0xda,
+  0x4e, 0x51, 0x5e, 0x47, 0x46, 0x00, 0x53, 0x09, 0x23, 0x72, 0xf1, 0x4f,
+  0xf0, 0x7d, 0x80, 0x99, 0xa6, 0xd3, 0xf5, 0x7e, 0x57, 0x07, 0x5f, 0xd7,
+  0x55, 0x5f, 0xa7, 0x8d, 0x93, 0xd6, 0xf8, 0x08, 0x09, 0xde, 0xbe, 0x8c,
+  0x43, 0x21, 0x2c, 0x2a, 0x55, 0x3a, 0x44, 0xe5, 0xbf, 0xd4, 0xb8, 0xdd,
+  0xfe, 0xaa, 0xe6, 0x9a, 0xf9, 0xe1, 0x9d, 0x05, 0x8b, 0x5e, 0x24, 0xbe,
+  0xe0, 0x27, 0xca, 0xcd, 0x48, 0x01, 0xb1, 0xa0, 0xd0, 0xe7, 0x8d, 0x2e,
+  0xde, 0x53, 0x23, 0x81, 0x68, 0x39, 0x0c, 0xc5, 0x25, 0x43, 0x56, 0x33,
+  0x8b, 0x24, 0x1c, 0x5d, 0x82, 0xe2, 0x36, 0xdf, 0xb1, 0x36, 0x68, 0x8e,
+  0x5b, 0x29, 0x5d, 0x02, 0x64, 0x0e, 0x89, 0x01, 0x8c, 0x1c, 0x6b, 0x57,
+  0x22, 0x32, 0xaf, 0x7f, 0x63, 0xd2, 0x79, 0xfa, 0x20, 0xed, 0x34, 0x32,
+  0x89, 0x8b, 0x72, 0xa6, 0xb8, 0x16, 0x5a, 0x15, 0x9b, 0x5e, 0xa7, 0x93,
+  0xe2, 0x52, 0x07, 0x83, 0x96, 0xa7, 0x08, 0xb1, 0xc9, 0xab, 0x7a, 0xc0,
+  0x3e, 0xd6, 0x78, 0x32, 0x1b, 0x94, 0x32, 0xcd, 0x10, 0x33, 0x27, 0x6f,
+  0x50, 0x3c, 0x49, 0x98, 0xa3, 0x94, 0xa4, 0x46, 0x60, 0x6a, 0xa5, 0xd0,
+  0x42, 0x83, 0x58, 0x35, 0xcc, 0xdb, 0x3c, 0xbb, 0xf3, 0x41, 0x10, 0xa1,
+  0x8d, 0xdf, 0x85, 0x3d, 0xe4, 0x66, 0x64, 0x12, 0xac, 0x75, 0xae, 0xec,
+  0x54, 0x45, 0x82, 0x7a, 0x66, 0xe9, 0xf8, 0x9a, 0xc4, 0xd3, 0x01, 0xc2,
+  0xdb, 0x93, 0x10, 0xd2, 0x0b, 0xc1, 0xf4, 0xed, 0x81, 0x26, 0x12, 0xb7,
+  0x00, 0x54, 0x1d, 0x04, 0x4c, 0xae, 0x04, 0xe6, 0xe6, 0x21, 0x3a, 0x1f,
+  0x8e, 0x90, 0xb9, 0x83, 0x45, 0x80, 0x16, 0x5c, 0x94, 0xae, 0x3c, 0x85,
+  0x0f, 0x00, 0x8f, 0x78, 0x79, 0x13, 0xad, 0x3e, 0xd1, 0x30, 0x99, 0x29,
+  0x42, 0x5b, 0x9a, 0xbc, 0x3b, 0x3e, 0xbf, 0x08, 0xe3, 0x25, 0x80, 0x67,
+  0x2f, 0xb5, 0xda, 0x56, 0x79, 0xe9, 0xc2, 0x98, 0xd2, 0xe3, 0xa3, 0xf3,
+  0x8b, 0xa8, 0xcd, 0x61, 0x8f, 0xf4, 0xf6, 0x59, 0x16, 0xa6, 0x0c, 0x6a,
+  0x6d, 0x57, 0xa4, 0xeb, 0x4a, 0xd0, 0x87, 0x99, 0x18, 0xf3, 0x32, 0x44,
+  0xd5, 0xeb, 0x2c, 0x31, 0x0f, 0xf1, 0x4f, 0x62, 0xa8, 0xd5, 0xa8, 0x3d,
+  0x0b, 0x06, 0xae, 0x96, 0xa3, 0x41, 0x80, 0xd4, 0x20, 0xac, 0x06, 0x50,
+  0x68, 0xf9, 0x98, 0xad, 0x07, 0x37, 0x5d, 0x0f, 0xd0, 0xc6, 0xe9, 0xc9,
+  0xe9, 0x13, 0x07, 0x68, 0xa1, 0xc0, 0x1a, 0x0d, 0x9f, 0xfc, 0x38, 0x61,
+  0xf9, 0x4f, 0xb1, 0x07, 0xf9, 0xe9, 0x06, 0x71, 0x75, 0xb3, 0x8c, 0x84,
+  0xd4, 0x78, 0x21, 0x5a, 0xeb, 0xa8, 0xae, 0x90, 0x66, 0x10, 0x2e, 0xc7,
+  0xa7, 0x04, 0x19, 0xe8, 0x11, 0xf4, 0x24, 0x0b, 0xc7, 0x71, 0xa4, 0xa8,
+  0x59, 0x4a, 0xa0, 0x43, 0x21, 0x43, 0xcf, 0x13, 0x82, 0x51, 0xd3, 0x39,
+  0xee, 0x24, 0xe7, 0x31, 0xe6, 0x59, 0x3e, 0x31, 0x1f, 0x64, 0x03, 0x69,
+  0x43, 0xd2, 0xc5, 0x50, 0x60, 0x96, 0xe3, 0x1e, 0x00, 0x41, 0xbe, 0x62,
+  0x27, 0xc5, 0x1e, 0xd2, 0x88, 0x2c, 0x1b, 0xfc, 0x20, 0x1e, 0x5e, 0x89,
+  0xc2, 0xf6, 0x48, 0x2e, 0xfd, 0x47, 0x2b, 0x28, 0xfa, 0xcc, 0x71, 0xcd,
+  0x48, 0x25, 0x9d, 0x9e, 0x44, 0x54, 0xb7, 0x76, 0xba, 0x56, 0xea, 0x0a,
+  0xd4, 0x69, 0xb3, 0x1f, 0x90, 0x7e, 0x89, 0xd8, 0xbf, 0xb0, 0x57, 0xeb,
+  0xc4, 0xd4, 0xe6, 0x39, 0x8d, 0x45, 0xe1, 0xb0, 0x2f, 0x39, 0x50, 0x59,
+  0xdd, 0x84, 0x82, 0x0b, 0x9f, 0xd7, 0xec, 0xae, 0x54, 0x54, 0xd4, 0x84,
+  0xd7, 0x24, 0x76, 0x94, 0x6f, 0xb2, 0x30, 0xb8, 0xbc, 0x29, 0x91, 0xee,
+  0xee, 0x34, 0xb0, 0x53, 0x1a, 0x51, 0x81, 0xd1, 0xf0, 0x19, 0x54, 0x20,
+  0xdd, 0xf4, 0xb5, 0xfd, 0x74, 0xd9, 0x25, 0x46, 0x2a, 0x40, 0xe9, 0xd5,
+  0xde, 0x90, 0x85, 0x7e, 0x05, 0x44, 0xde, 0xf6, 0xb8, 0x90, 0x26, 0x86,
+  0x48, 0x76, 0x43, 0xf6, 0xab, 0x13, 0x57, 0xda, 0x76, 0x43, 0x11, 0xc1,
+  0x7d, 0xec, 0x6f, 0xbb, 0xc0, 0x6c, 0x04, 0x56, 0x88, 0xef, 0xad, 0x27,
+  0x3f, 0xfc, 0x10, 0x1c, 0x3b, 0x76, 0xdc, 0x6e, 0xf6, 0x1b, 0x57, 0x85,
+  0x0f, 0xee, 0xd5, 0xf2, 0x32, 0x93, 0x18, 0x4f, 0x30, 0x1a, 0x50, 0xe2,
+  0xe2, 0x50, 0x06, 0x18, 0x07, 0x86, 0x2e, 0xb5, 0xa2, 0x2e, 0xae, 0x32,
+  0x6c, 0x85, 0x50, 0x4e, 0x18, 0x4a, 0xd5, 0xbd, 0xe6, 0x7d, 0x4c, 0x52,
+  0xdf, 0x85, 0x3f, 0x4a, 0xe8, 0x06, 0xe2, 0xcb, 0xc2, 0xa5, 0xaa, 0xdc,
+  0x45, 0x45, 0xe2, 0xc5, 0xdd, 0x7c, 0x18, 0xab, 0x08, 0xdc, 0x45, 0xda,
+  0x94, 0x34, 0x19, 0xcc, 0x48, 0x0a, 0x23, 0x03, 0x7f, 0x99, 0x4d, 0x8e,
+  0x63, 0x9a, 0xa1, 0xc8, 0x1f, 0x95, 0x2b, 0x41, 0xd6, 0x09, 0xc2, 0x11,
+  0x17, 0x07, 0xa2, 0x6d, 0xa4, 0x16, 0x53, 0xea, 0x62, 0x2b, 0x93, 0x1a,
+  0x7e, 0x42, 0x73, 0x85, 0x86, 0xbb, 0x25, 0xb1, 0x9d, 0xdd, 0x32, 0x56,
+  0x28, 0xdb, 0x1b, 0x98, 0x64, 0x11, 0x78, 0xa3, 0xc9, 0x6f, 0x42, 0xfa,
+  0x7f, 0x34, 0x04, 0x28, 0xc9, 0xc1, 0x55, 0xe0, 0x3a, 0x21, 0xbd, 0x2e,
+  0xaa, 0x73, 0x31, 0x1f, 0xd4, 0xe5, 0x12, 0x2b, 0xc4, 0x1b, 0xc2, 0xf8,
+  0x27, 0xec, 0x61, 0x30, 0x28, 0x37, 0x16, 0x55, 0x2d, 0xc8, 0x08, 0xc5,
+  0x27, 0x25, 0x7b, 0x63, 0x06, 0x48, 0xaa, 0x4e, 0x10, 0x85, 0x8f, 0x99,
+  0x65, 0xd3, 0x20, 0x94, 0x85, 0xa6, 0x6f, 0x75, 0x30, 0x98, 0xa5, 0x1f,
+  0x07, 0x78, 0xac, 0xea, 0x94, 0x42, 0xeb, 0xd8, 0x52, 0xa5, 0x85, 0x2a,
+  0x5c, 0x30, 0xd3, 0x97, 0x5d, 0x76, 0x90, 0xc6, 0x74, 0x33, 0x05, 0xf1,
+  0xdd, 0xf0, 0xf5, 0xe1, 0x45, 0xfb, 0x68, 0x21, 0xad, 0x53, 0x8d, 0x0f,
+  0xc8, 0xcb, 0xe1, 0xc2, 0xba, 0xef, 0x2f, 0x36, 0x7d, 0xe9, 0x5b, 0xa1,
+  0xd2, 0x46, 0xec, 0xab, 0xe6, 0x8a, 0x74, 0x61, 0x75, 0x25, 0x13, 0x46,
+  0x19, 0x2c, 0x70, 0x73, 0xdd, 0x81, 0xe0, 0x82, 0xdd, 0x4f, 0xb6, 0x77,
+  0xfa, 0xf4, 0xcf, 0x2e, 0xac, 0x79, 0x4f, 0xb6, 0x9f, 0x38, 0x17, 0x85,
+  0x3d, 0xd5, 0xf1, 0x52, 0x20, 0x93, 0x38, 0xad, 0x9a, 0x75, 0x7d, 0x9f,
+  0x7c, 0xfc, 0x88, 0xaf, 0x9a, 0x81, 0xa3, 0x03, 0x97, 0x02, 0xb0, 0xca,
+  0x25, 0x63, 0x03, 0xf7, 0x2b, 0x0e, 0xb3, 0xdc, 0x72, 0x2e, 0xb1, 0x69,
+  0xae, 0x9a, 0xcb, 0x70, 0x15, 0xa6, 0x5f, 0xdd, 0x46, 0x6c, 0x08, 0x41,
+  0xfd, 0x88, 0x56, 0x1a, 0xa9, 0x59, 0x96, 0xb9, 0xd3, 0x65, 0x8c, 0x78,
+  0x4c, 0x03, 0xa9, 0x99, 0x71, 0x6c, 0x7f, 0x0c, 0xef, 0xeb, 0x06, 0x49,
+  0x10, 0xbb, 0xcc, 0xc3, 0x94, 0xd1, 0x6a, 0x05, 0x9a, 0xe7, 0x1e, 0x87,
+  0xab, 0xd3, 0xa1, 0xc0, 0x0a, 0xdb, 0xaf, 0xbb, 0x5a, 0xe9, 0x57, 0xfe,
+  0x7a, 0x12, 0x8a, 0x9e, 0x56, 0x47, 0x3d, 0x5a, 0x4b, 0x70, 0x5f, 0xaa,
+  0x7a, 0x87, 0xbc, 0x8b, 0xcf, 0xdf, 0x9c, 0x93, 0xd6, 0x26, 0x92, 0xbd,
+  0xa6, 0x48, 0x12, 0x0a, 0x3c, 0xa0, 0xfe, 0x54, 0xfc, 0x1e, 0xa9, 0x55,
+  0x8b, 0xd8, 0x2f, 0x60, 0x9f, 0x5a, 0xfd, 0xf6, 0x81, 0xcc, 0xf0, 0x20,
+  0x51, 0x0f, 0x3c, 0x36, 0xda, 0x1c, 0xc6, 0x1a, 0x03, 0x2e, 0x9a, 0x65,
+  0x1c, 0xf7, 0xca, 0xdc, 0xb2, 0xa4, 0x72, 0x4c, 0x05, 0xa8, 0xcd, 0xe5,
+  0xac, 0x94, 0x36, 0x2c, 0xc9, 0x75, 0xf0, 0xa1, 0x82, 0xfc, 0xde, 0xbf,
+  0xfd, 0x83, 0xd2, 0xbc, 0xba, 0x72, 0x3d, 0x42, 0xed, 0x0a, 0x3f, 0x58,
+  0xc4, 0x00, 0xd3, 0x4a, 0xd6, 0x07, 0xbb, 0x18, 0xc0, 0xf2, 0xf0, 0x92,
+  0x44, 0x8e, 0x6c, 0xb2, 0x32, 0x1c, 0x40, 0x70, 0x78, 0xb4, 0xaa, 0xa1,
+  0xcf, 0xb5, 0x46, 0xc5, 0x0c, 0x5f, 0x24, 0x35, 0x84, 0x5a, 0x1f, 0x44,
+  0x88, 0x04, 0xb0, 0xa3, 0x1e, 0xf5, 0x01, 0x6a, 0x27, 0xf0, 0x26, 0x0d,
+  0xb0, 0x48, 0x43, 0x4d, 0x75, 0x09, 0x54, 0x4e, 0xe2, 0xe6, 0x11, 0x69,
+  0x97, 0x76, 0x04, 0x61, 0x2e, 0xb5, 0xab, 0x30, 0xa3, 0xa9, 0xc4, 0xe5,
+  0xac, 0x4f, 0x44, 0x3e, 0xc6, 0x26, 0xb8, 0x71, 0xf2, 0x31, 0xd1, 0x71,
+  0xe1, 0x0b, 0xbe, 0x11, 0x3a, 0x21, 0x31, 0x23, 0x6a, 0xe2, 0x2e, 0x9f,
+  0xd4, 0xd7, 0x40, 0x10, 0xc6, 0x1d, 0xc9, 0x65, 0xa1, 0x38, 0xa9, 0x40,
+  0x25, 0x8e, 0x3c, 0x96, 0xca, 0x18, 0xad, 0x6e, 0x26, 0x7b, 0x84, 0x35,
+  0x4d, 0x04, 0xea, 0x8a, 0x73, 0x69, 0xb0, 0x0d, 0x88, 0x81, 0xde, 0x12,
+  0xeb, 0x93, 0x43, 0x73, 0x21, 0x91, 0x6f, 0x79, 0xc9, 0xc8, 0xc0, 0x5d,
+  0xf1, 0xd1, 0xb2, 0x0f, 0x87, 0xee, 0x50, 0xc0, 0xba, 0xb3, 0x7e, 0x23,
+  0xd0, 0x97, 0xdf, 0xae, 0x5b, 0xe1, 0xc4, 0xe5, 0x5c, 0x58, 0xbf, 0x66,
+  0xbf, 0x11, 0xc3, 0xba, 0xc9, 0xa7, 0x1d, 0x73, 0x07, 0xba, 0x27, 0xd5,
+  0x7c, 0x86, 0xd7, 0xdf, 0xae, 0x6b, 0x20, 0x0c, 0xa3, 0x67, 0x66, 0x1a,
+  0xa0, 0xdd, 0x57, 0xa8, 0xdf, 0xf5, 0x2b, 0xe9, 0xe2, 0xeb, 0x75, 0x17,
+  0x2e, 0xd3, 0xb9, 0xed, 0x7c, 0x54, 0xb7, 0x19, 0xeb, 0xab, 0xbd, 0x64,
+  0x77, 0x7b, 0xfb, 0x5b, 0xe2, 0xb1, 0x33, 0x6c, 0xca, 0xce, 0xd7, 0xd1,
+  0xc4, 0x48, 0x49, 0x22, 0xe2, 0x8b, 0xcf, 0x62, 0xed, 0x07, 0x7f, 0x66,
+  0xae, 0x81, 0x35, 0x13, 0xca, 0x74, 0x5e, 0x47, 0x49, 0x22, 0xf5, 0x02,
+  0x4c, 0x9b, 0xf7, 0xf0, 0x56, 0x69, 0xa9, 0x17, 0x56, 0xc4, 0x60, 0xc1,
+  0x44, 0x2e, 0x17, 0xe3, 0xb1, 0x2f, 0x14, 0xb4, 0x98, 0x49, 0x55, 0xda,
+  0x85, 0xb5, 0x75, 0xca, 0x0f, 0x4c, 0x59, 0xc9, 0x2c, 0x3a, 0x19, 0x77,
+  0xd3, 0x05, 0xcc, 0xb8, 0x8e, 0x41, 0x07, 0x43, 0x62, 0xf0, 0x83, 0xb1,
+  0x05, 0xfa, 0xfd, 0x96, 0x7a, 0x39, 0xe0, 0x3f, 0x05, 0x61, 0xe8, 0x25,
+  0xed, 0xe8, 0x17, 0x3f, 0x0e, 0xe8, 0xdf, 0x9f, 0x3b, 0x61, 0x45, 0xb5,
+  0x60, 0x32, 0x69, 0x21, 0x30, 0x4b, 0x7c, 0x2c, 0x7d, 0x85, 0x59, 0xb4,
+  0x23, 0x48, 0x07, 0xf2, 0x6d, 0x15, 0x14, 0xe6, 0x8d, 0xc6, 0x74, 0x9b,
+  0xf1, 0x7c, 0xa3, 0xda, 0xb4, 0x02, 0xba, 0x62, 0x85, 0x11, 0x7c, 0x44,
+  0x6b, 0x05, 0x0e, 0xe0, 0xb9, 0x9c, 0x57, 0x58, 0xc6, 0x3a, 0xe7, 0x93,
+  0x83, 0x57, 0xc7, 0x99, 0x0f, 0x71, 0x42, 0x2b, 0x36, 0xdf, 0xd1, 0xb2,
+  0xba, 0x67, 0xd8, 0x34, 0xf1, 0x19, 0x20, 0x43, 0xc6, 0xe0, 0xe0, 0x69,
+  0xd9, 0x30, 0xfc, 0x6e, 0x50, 0x18, 0x47, 0xbd, 0x49, 0x38, 0x79, 0x5d,
+  0xd0, 0xe5, 0x97, 0x96, 0x25, 0x89, 0x2f, 0xba, 0xd5, 0x9a, 0x0d, 0x4b,
+  0x83, 0x67, 0x85, 0x00, 0xe6, 0x17, 0xe7, 0x06, 0xa0, 0xb6, 0x97, 0x8b,
+  0x48, 0x14, 0x17, 0xa7, 0xc7, 0x77, 0xd0, 0x14, 0x1b, 0x68, 0x19, 0x26,
+  0x92, 0x9b, 0x08, 0xf6, 0xa0, 0x56, 0x70, 0x0c, 0xcd, 0x9c, 0xd5, 0x88,
+  0xe0, 0x4d, 0xad, 0x30, 0x27, 0xb5, 0x72, 0x20, 0x6f, 0x99, 0xab, 0x61,
+  0x05, 0x30, 0xf5, 0x1f, 0x3d, 0x40, 0xa8, 0x14, 0xf4, 0xf5, 0xd9, 0x45,
+  0x0a, 0x0f, 0xc0, 0x41, 0x0c, 0xac, 0x3d, 0x79, 0x21, 0xb5, 0x88, 0xd6,
+  0x2b, 0xe0, 0x67, 0x0a, 0x51, 0xb4, 0x44, 0xc3, 0xae, 0xcb, 0x62, 0xb2,
+  0x1c, 0xc3, 0xec, 0xc0, 0xf1, 0x6a, 0x5c, 0x27, 0x6f, 0x24, 0x78, 0x85,
+  0x86, 0x9a, 0xc1, 0x4d, 0x3b, 0x19, 0xb1, 0xd5, 0x9c, 0x9a, 0xb7, 0x53,
+  0x79, 0xca, 0xa1, 0x65, 0x83, 0xed, 0x02, 0x2d, 0x3f, 0xd3, 0xbb, 0xb7,
+  0xec, 0xc8, 0xe8, 0xa8, 0x32, 0x1c, 0x2f, 0x30, 0x20, 0x8e, 0x47, 0x16,
+  0x92, 0x3f, 0xd6, 0x2e, 0x60, 0x21, 0x95, 0xa0, 0x4d, 0x48, 0x6f, 0x5f,
+  0x71, 0xbc, 0x75, 0xab, 0xc1, 0x10, 0x36, 0x7f, 0xd6, 0x57, 0xa1, 0xf5,
+  0x41, 0xaf, 0xd1, 0x5b, 0x77, 0x79, 0xc1, 0x4b, 0x94, 0xcf, 0x93, 0x55,
+  0x55, 0x79, 0x79, 0x00, 0x77, 0xd7, 0xc5, 0x34, 0xbc, 0xb7, 0xbb, 0x51,
+  0x09, 0x5c, 0x3f, 0xc3, 0xdb, 0xfc, 0xf4, 0xb6, 0x62, 0x41, 0x96, 0x11,
+  0xd2, 0x78, 0xa0, 0x56, 0xed, 0x71, 0x84, 0x4a, 0x4b, 0x7f, 0x29, 0x46,
+  0xaa, 0xf3, 0x70, 0xfd, 0x8d, 0xab, 0x68, 0xa6, 0x2a, 0x5c, 0xf0, 0xd7,
+  0xf4, 0x4e, 0x95, 0x4c, 0x96, 0x12, 0xcd, 0xc1, 0xe3, 0x99, 0x67, 0x35,
+  0xf3, 0x1b, 0x84, 0x7d, 0xc2, 0xfe, 0x91, 0x5c, 0x21, 0xe3, 0x1b, 0x21,
+  0xde, 0xc4, 0x03, 0xd8, 0xf8, 0xd4, 0x6a, 0xee, 0xb3, 0xe1, 0x93, 0x5d,
+  0xce, 0x23, 0x0c, 0x99, 0x51, 0xbc, 0x40, 0x6f, 0xdf, 0xc1, 0x1f, 0x6a,
+  0x34, 0x1c, 0x2f, 0xcf, 0xa0, 0xeb, 0x23, 0x55, 0x31, 0x3c, 0x63, 0x48,
+  0xcd, 0x0a, 0x1e, 0xe5, 0x94, 0xe3, 0x93, 0xd3, 0xf1, 0xbd, 0xc1, 0x8f,
+  0xfb, 0xf0, 0x2c, 0x2b, 0x92, 0x4c, 0x03, 0xc3, 0xd3, 0x9d, 0x32, 0x1a,
+  0x73, 0x37, 0x08, 0xe6, 0xda, 0x79, 0x25, 0x28, 0x5f, 0xad, 0x92, 0xcc,
+  0x7a, 0x7c, 0x5d, 0xc9, 0xe5, 0x15, 0xba, 0xc8, 0x3f, 0x95, 0xe5, 0x5e,
+  0xe5, 0xf3, 0x81, 0xc9, 0xb8, 0x2f, 0xf5, 0x97, 0x2f, 0x1e, 0x88, 0xf7,
+  0xc1, 0x1b, 0x4e, 0x2a, 0x56, 0xbe, 0xaa, 0x85, 0x65, 0xcc, 0x22, 0xd3,
+  0xa0, 0xdb, 0x95, 0x52, 0xbd, 0x5d, 0x82, 0xda, 0xa4, 0x6b, 0x53, 0x00,
+  0xef, 0x4d, 0x0c, 0x5b, 0x94, 0x45, 0x5d, 0x8c, 0x8b, 0xa9, 0x73, 0x33,
+  0x8c, 0xa3, 0xa9, 0x0e, 0x95, 0x06, 0x07, 0x49, 0x31, 0x73, 0x59, 0x10,
+  0x1d, 0x55, 0x6b, 0x38, 0xc9, 0x7e, 0x8d, 0xda, 0x0f, 0x90, 0x5f, 0xbb,
+  0x66, 0xda, 0xa3, 0xb7, 0xfb, 0xa7, 0x7d, 0xd8, 0xcb, 0xa4, 0xd8, 0xcb,
+  0x5b, 0xb6, 0xfc, 0x29, 0xf4, 0x7b, 0x63, 0xee, 0xe2, 0xb4, 0x92, 0x0a,
+  0x7e, 0x41, 0x41, 0xf1, 0xb6, 0x28, 0x33, 0x72, 0x71, 0x85, 0xad, 0xa5,
+  0xa3, 0x4b, 0x9a, 0xc9, 0x8a, 0x0d, 0x60, 0x8c, 0xed, 0xb9, 0xfb, 0xe4,
+  0xf3, 0xa7, 0x7d, 0xfc, 0xf6, 0x6c, 0xfb, 0x85, 0x68, 0x10, 0x47, 0x87,
+  0x17, 0x6f, 0xda, 0x42, 0x78, 0x49, 0xfa, 0x8b, 0xfc, 0x3b, 0xc8, 0xd2,
+  0xf2, 0x3a, 0x2d, 0x6b, 0x0e, 0x56, 0x1a, 0x54, 0xb3, 0x7a, 0x31, 0xd8,
+  0xde, 0x1e, 0xd6, 0xc4, 0x50, 0x42, 0xde, 0xfe, 0xe4, 0xe9, 0x70, 0x7b,
+  0xf3, 0xb7, 0x24, 0x20, 0x36, 0x5b, 0x0d, 0x78, 0x85, 0x93, 0x97, 0x9a,
+  0xc4, 0xd3, 0xf5, 0x5d, 0xbd, 0x05, 0x3c, 0x8e, 0x8b, 0xd2, 0x52, 0xc4,
+  0x55, 0x7d, 0x3c, 0x48, 0x3a, 0x41, 0x5a, 0xac, 0x24, 0x6d, 0x06, 0x24,
+  0x10, 0xab, 0x9b, 0xdc, 0x66, 0xb5, 0x96, 0x3f, 0x94, 0x6c, 0x58, 0x1d,
+  0xb9, 0xcd, 0x44, 0x82, 0xec, 0xa4, 0xae, 0x47, 0xed, 0x4b, 0x09, 0x45,
+  0x91, 0x10, 0x2a, 0x4d, 0x79, 0x2d, 0x33, 0x06, 0x3d, 0x93, 0x4b, 0x48,
+  0x83, 0x18, 0x14, 0x74, 0xe1, 0x21, 0xc0, 0xcb, 0xdd, 0x67, 0xcd, 0x2a,
+  0x4d, 0x58, 0x13, 0x30, 0xbe, 0x5f, 0xb9, 0x26, 0xfe, 0xde, 0x13, 0xa1,
+  0x7a, 0x26, 0xb5, 0x7c, 0x14, 0x78, 0xa0, 0x0b, 0x9c, 0x52, 0x59, 0xd9,
+  0x84, 0x87, 0x87, 0xb9, 0xdd, 0x1e, 0xe6, 0x47, 0x54, 0x7f, 0x87, 0xdd,
+  0xf4, 0x25, 0x24, 0xda, 0x4f, 0x54, 0x86, 0xf0, 0xc6, 0x86, 0x09, 0xf6,
+  0x9b, 0xbe, 0x3c, 0x83, 0xc0, 0x85, 0x89, 0xb2, 0xc3, 0x46, 0x86, 0x55,
+  0x81, 0x7e, 0xde, 0x00, 0x96, 0x37, 0x73, 0x26, 0x41, 0x96, 0x60, 0xd3,
+  0xfd, 0x26, 0xc4, 0x55, 0x4c, 0x08, 0x86, 0xa3, 0x18, 0x45, 0xa7, 0xd2,
+  0xf9, 0xa4, 0x61, 0x93, 0x40, 0x51, 0x1d, 0x98, 0xe9, 0xb2, 0x8f, 0x88,
+  0xb9, 0x23, 0x35, 0xf7, 0xf9, 0x93, 0xae, 0x59, 0xf8, 0xe4, 0xe2, 0x70,
+  0x2f, 0x2c, 0xbf, 0x2d, 0x26, 0x64, 0xb5, 0xde, 0x48, 0x90, 0x9c, 0x80,
+  0x44, 0x2d, 0x4a, 0x46, 0x6f, 0x0e, 0x66, 0xd7, 0x8f, 0x20, 0x56, 0x22,
+  0xc3, 0x94, 0xcb, 0x7a, 0x8a, 0x5b, 0x60, 0x65, 0x1e, 0x8a, 0xa4, 0x74,
+  0xe7, 0x97, 0x81, 0xba, 0x1d, 0xab, 0x25, 0x85, 0x69, 0x4b, 0x29, 0xc5,
+  0xe5, 0x22, 0x51, 0x0a, 0xed, 0x2c, 0x96, 0x50, 0x08, 0x24, 0x75, 0x4b,
+  0xea, 0x2e, 0xe8, 0x76, 0x2c, 0x3b, 0x71, 0x10, 0xd0, 0x44, 0xd9, 0x8f,
+  0x81, 0xf4, 0xc5, 0x0b, 0x83, 0xcd, 0xbb, 0x6c, 0x25, 0x37, 0x83, 0x78,
+  0xcb, 0xf1, 0xa2, 0xfe, 0xb5, 0xc4, 0xdb, 0xf7, 0x40, 0xf0, 0x22, 0x89,
+  0x49, 0x68, 0x1c, 0xbc, 0x26, 0x08, 0x1d, 0x68, 0x35, 0x77, 0x96, 0x2d,
+  0x32, 0x50, 0x7b, 0x00, 0xc1, 0x14, 0x32, 0x22, 0x67, 0x61, 0x67, 0x1c,
+  0x0f, 0x0b, 0xaf, 0xe1, 0x3b, 0x74, 0xc1, 0xc0, 0xe4, 0x9d, 0x92, 0x59,
+  0xe2, 0x10, 0x69, 0x94, 0x00, 0xc3, 0xf1, 0xb1, 0xc9, 0x5a, 0x5c, 0xad,
+  0xbe, 0x6f, 0xa7, 0xca, 0x05, 0x91, 0x76, 0x11, 0x2b, 0xd8, 0xf1, 0x80,
+  0x26, 0xdc, 0xe9, 0x2c, 0x3c, 0xec, 0x85, 0xb4, 0x5d, 0x0c, 0x1f, 0x38,
+  0x69, 0xe1, 0xc0, 0xc2, 0x71, 0x85, 0x7c, 0xab, 0x51, 0x75, 0x2e, 0xd9,
+  0xf8, 0xee, 0xec, 0xcd, 0x9f, 0x1d, 0xc0, 0xe4, 0x66, 0x3f, 0x89, 0xda,
+  0xab, 0x6d, 0x06, 0x81, 0x57, 0xda, 0x0b, 0x24, 0x2a, 0xa1, 0x34, 0xb6,
+  0xc2, 0xff, 0xd1, 0xa5, 0xdd, 0x49, 0x81, 0x60, 0xa1, 0x0d, 0x7a, 0x8f,
+  0x03, 0x84, 0xcf, 0x55, 0x8b, 0x78, 0x32, 0x7c, 0x06, 0x6f, 0xcf, 0x9b,
+  0x83, 0x67, 0x4f, 0x76, 0x77, 0x36, 0x87, 0xdd, 0xcb, 0xe5, 0xd1, 0x69,
+  0x36, 0x29, 0x20, 0xfb, 0xb8, 0x60, 0xfa, 0xdb, 0x38, 0xfc, 0xe1, 0xf4,
+  0x5d, 0x30, 0x41, 0xb7, 0x27, 0x1d, 0x29, 0x31, 0x9c, 0xa1, 0xe0, 0x26,
+  0xb8, 0x39, 0x7a, 0x73, 0x5d, 0x87, 0xc8, 0x04, 0x2e, 0xa4, 0x8b, 0x54,
+  0xd3, 0x7b, 0x53, 0xe6, 0x7c, 0xa4, 0x7a, 0xbc, 0x1e, 0xbd, 0x63, 0x92,
+  0x85, 0x49, 0xcf, 0x39, 0x61, 0x78, 0xbd, 0xac, 0xd7, 0x82, 0xc3, 0x6b,
+  0xce, 0xae, 0x61, 0x23, 0x86, 0x76, 0x1a, 0xd1, 0x4b, 0x8d, 0x41, 0x7a,
+  0x30, 0x1e, 0xa7, 0x58, 0xb0, 0x3e, 0xe5, 0xec, 0xa3, 0x92, 0x84, 0xc3,
+  0xc8, 0x0d, 0x62, 0x7b, 0x67, 0xfd, 0xa9, 0x03, 0x5e, 0xe5, 0x3c, 0x23,
+  0xce, 0xd8, 0xbf, 0x1a, 0xbc, 0xd8, 0x24, 0x70, 0x5f, 0x6d, 0xac, 0x5b,
+  0x91, 0xbd, 0x85, 0xa0, 0x00, 0x19, 0xa4, 0xc7, 0x42, 0xed, 0xa8, 0x5a,
+  0x96, 0x93, 0xe5, 0x8c, 0xe6, 0xff, 0xd5, 0xbd, 0x45, 0x0c, 0xf5, 0x55,
+  0x62, 0x81, 0x01, 0x20, 0x92, 0x97, 0x90, 0x49, 0x18, 0xf6, 0xb3, 0xed,
+  0x46, 0x7b, 0x43, 0xac, 0x42, 0xcb, 0x7e, 0x39, 0xd8, 0x71, 0x08, 0x3c,
+  0x6c, 0x4c, 0x80, 0xfd, 0xad, 0x6d, 0xd5, 0x62, 0x39, 0xe0, 0xb7, 0x14,
+  0x52, 0xb2, 0x3a, 0x65, 0x35, 0xe2, 0x91, 0xe0, 0xbe, 0x86, 0x99, 0x59,
+  0x1c, 0xe1, 0xa8, 0x5d, 0x21, 0xb5, 0xa4, 0xd9, 0x64, 0xac, 0x76, 0x48,
+  0x86, 0x35, 0xeb, 0xd2, 0xd6, 0x5b, 0xed, 0xc5, 0x55, 0x16, 0x06, 0xc7,
+  0x75, 0x99, 0xeb, 0x22, 0x4f, 0x3e, 0x4d, 0x36, 0x20, 0xe3, 0x7d, 0xfe,
+  0xec, 0xe9, 0x66, 0x33, 0xb8, 0x66, 0x33, 0xe2, 0xdf, 0xc2, 0xaa, 0xb9,
+  0x6c, 0x3e, 0x86, 0xf5, 0x47, 0xa5, 0x3e, 0xd0, 0xb9, 0x3a, 0xca, 0xa4,
+  0xe6, 0x19, 0x54, 0x7b, 0x94, 0x6f, 0x50, 0x7f, 0x7f, 0xc7, 0xd4, 0x07,
+  0x73, 0x85, 0x14, 0xfa, 0x4b, 0x36, 0xf4, 0x70, 0xf8, 0x0b, 0xc8, 0x61,
+  0x23, 0x68, 0xda, 0x26, 0x4e, 0xae, 0x25, 0x4d, 0x6c, 0x72, 0x40, 0x5f,
+  0xcc, 0xe2, 0x0a, 0xd5, 0x25, 0xa8, 0x62, 0x8a, 0xda, 0xda, 0x45, 0x70,
+  0xaf, 0xa9, 0xb1, 0x5d, 0x13, 0xfc, 0xe5, 0xe6, 0x4c, 0x62, 0xe0, 0xb0,
+  0xc4, 0xd3, 0x25, 0xe5, 0x83, 0xef, 0x62, 0xb7, 0x90, 0x12, 0xfa, 0x0b,
+  0x38, 0x3b, 0xde, 0x7f, 0x6b, 0x41, 0x83, 0x71, 0x7c, 0x8d, 0xef, 0x0e,
+  0x96, 0xee, 0x2c, 0x9b, 0x19, 0x28, 0xbb, 0x08, 0x09, 0x45, 0xe9, 0x2b,
+  0x7f, 0x89, 0x79, 0x48, 0xee, 0x7b, 0x04, 0x20, 0xae, 0xc2, 0x89, 0x31,
+  0xed, 0x26, 0x35, 0x44, 0x8d, 0xc6, 0xc0, 0x56, 0x54, 0xff, 0x71, 0xc4,
+  0x66, 0xb8, 0x31, 0xed, 0x5c, 0x73, 0xfb, 0xdd, 0x11, 0x65, 0xb7, 0x1c,
+  0x96, 0x74, 0xda, 0x5a, 0x86, 0x15, 0x83, 0x97, 0x8a, 0x58, 0xc0, 0x08,
+  0x80, 0xaa, 0x34, 0xe8, 0x66, 0x9c, 0x24, 0x1b, 0x18, 0xef, 0xd6, 0xd6,
+  0xe6, 0xa3, 0x63, 0xd6, 0x07, 0x1f, 0x1b, 0xe3, 0xa9, 0xe8, 0x2e, 0xbc,
+  0xb8, 0x99, 0x47, 0x13, 0xf3, 0x83, 0xe0, 0x4e, 0x79, 0xc3, 0x04, 0xae,
+  0x5b, 0x62, 0x12, 0x5d, 0x60, 0x37, 0x89, 0x55, 0x5d, 0x33, 0x97, 0x06,
+  0x40, 0x61, 0x76, 0xcd, 0x89, 0xab, 0x24, 0x2c, 0xd0, 0x05, 0xca, 0x13,
+  0x2c, 0xe1, 0x82, 0x13, 0x76, 0xa6, 0x9d, 0x32, 0x8e, 0xf3, 0x56, 0x25,
+  0xa0, 0x60, 0x7e, 0xe2, 0x2b, 0xf1, 0x7e, 0x5b, 0x39, 0x16, 0xa6, 0x73,
+  0x88, 0x7f, 0xb7, 0xcb, 0x8a, 0xed, 0xe9, 0x56, 0x15, 0xf4, 0x2e, 0x32,
+  0x9d, 0x3c, 0xc8, 0x87, 0xc7, 0x7c, 0xbe, 0x5d, 0xda, 0x54, 0x88, 0x16,
+  0x73, 0x3b, 0x49, 0x9b, 0x65, 0x96, 0xde, 0xf8, 0x79, 0x0b, 0xc6, 0xa4,
+  0xa5, 0x9c, 0x79, 0x60, 0x1e, 0x24, 0x33, 0xc5, 0x71, 0x36, 0x1c, 0x75,
+  0x63, 0xcd, 0xac, 0x68, 0x25, 0x3e, 0x6d, 0x2c, 0x67, 0x5f, 0x0e, 0x29,
+  0xa2, 0xe5, 0x63, 0x32, 0x35, 0x6a, 0x90, 0x3c, 0xa8, 0x45, 0x00, 0xad,
+  0x89, 0x86, 0x25, 0x71, 0x62, 0x80, 0x82, 0x17, 0x08, 0x79, 0x76, 0x32,
+  0xb9, 0x85, 0xd6, 0x68, 0xb2, 0x61, 0x70, 0x83, 0xce, 0xd9, 0x68, 0x35,
+  0xcf, 0xea, 0x72, 0xdc, 0xb1, 0x53, 0xc1, 0xd0, 0x2e, 0xf9, 0x41, 0x15,
+  0xf2, 0x20, 0xb1, 0x48, 0x43, 0x3c, 0x4c, 0xdd, 0x7f, 0xd0, 0x5f, 0x0a,
+  0x97, 0xce, 0xb0, 0x19, 0x1e, 0x8a, 0x48, 0xdc, 0xfa, 0x7a, 0xe5, 0xe2,
+  0xec, 0x35, 0x0e, 0x89, 0x99, 0xa4, 0x28, 0xe0, 0x2e, 0x05, 0xde, 0xbb,
+  0xa4, 0x5d, 0xc0, 0xd7, 0xfd, 0xa2, 0x13, 0xba, 0x3a, 0x76, 0xf1, 0x54,
+  0x92, 0xa3, 0x02, 0x54, 0x0e, 0x49, 0xe0, 0xf0, 0xb1, 0x01, 0xd0, 0x35,
+  0x04, 0xb4, 0xc6, 0xeb, 0x21, 0x52, 0xbb, 0x31, 0x32, 0xba, 0x8e, 0x49,
+  0x82, 0xed, 0x40, 0x98, 0xe3, 0xc6, 0x33, 0x9a, 0x59, 0xbd, 0xd8, 0xd8,
+  0xd9, 0x44, 0x5f, 0x56, 0x02, 0x2a, 0x28, 0x1b, 0xd1, 0xd5, 0x39, 0x10,
+  0x3a, 0x95, 0x1c, 0x04, 0x38, 0xf1, 0x88, 0x1b, 0x44, 0xe5, 0x07, 0x04,
+  0x80, 0x5f, 0xca, 0x59, 0x10, 0xca, 0xd0, 0x48, 0x2c, 0xc3, 0x71, 0x68,
+  0x4b, 0x95, 0x30, 0x2c, 0x2f, 0x38, 0x57, 0xa1, 0x92, 0x62, 0xa2, 0x1b,
+  0xb9, 0x93, 0x91, 0xe5, 0x6a, 0x48, 0xb2, 0x5c, 0xa2, 0x20, 0x8a, 0x72,
+  0x3a, 0x19, 0xf0, 0xcd, 0x71, 0x55, 0x16, 0xcb, 0xc5, 0xa0, 0x8c, 0x20,
+  0x73, 0xe9, 0xed, 0x01, 0xae, 0x1e, 0x4b, 0x9d, 0x49, 0x7a, 0x9c, 0x55,
+  0xd3, 0x73, 0x97, 0x7b, 0x98, 0xbb, 0x13, 0xcf, 0x7d, 0x91, 0xdd, 0xec,
+  0x50, 0xe8, 0x7e, 0xf2, 0xd7, 0x65, 0x4e, 0x14, 0xcd, 0xdb, 0x8a, 0x40,
+  0x44, 0xa4, 0x68, 0x64, 0xce, 0xc5, 0x4e, 0x8c, 0x83, 0x83, 0x08, 0xb4,
+  0x96, 0x62, 0xcd, 0xfa, 0x54, 0xea, 0x09, 0xac, 0x63, 0xea, 0x14, 0xab,
+  0xa8, 0x93, 0x05, 0x80, 0x31, 0x5e, 0xa8, 0xa4, 0x89, 0x38, 0x39, 0x09,
+  0x9c, 0x10, 0xa1, 0x99, 0xb9, 0xba, 0x10, 0xc0, 0xaa, 0x0a, 0x58, 0xeb,
+  0xb3, 0x7b, 0xbe, 0xc3, 0xd6, 0x9b, 0xa5, 0xb0, 0xd6, 0x2b, 0x36, 0x2d,
+  0xd6, 0xeb, 0xb6, 0xbc, 0xad, 0x9c, 0xb0, 0x6e, 0x4d, 0x9b, 0x15, 0x5d,
+  0x0b, 0x55, 0x4b, 0x17, 0xbe, 0x75, 0x69, 0xdc, 0x9f, 0xbe, 0x77, 0x7d,
+  0x09, 0x58, 0x1f, 0x2d, 0x39, 0x98, 0xa3, 0xd5, 0xf4, 0x6b, 0x61, 0xd4,
+  0x22, 0x10, 0xc8, 0x13, 0x5a, 0x6a, 0xd4, 0x03, 0xfe, 0x30, 0x10, 0x55,
+  0x96, 0xce, 0x86, 0x5c, 0xb0, 0x57, 0xc1, 0x62, 0xd9, 0x46, 0xcb, 0x96,
+  0xf1, 0xf6, 0xb6, 0x2f, 0x41, 0xd6, 0x55, 0xbf, 0x59, 0xbd, 0xa0, 0x15,
+  0xfc, 0x27, 0xdd, 0xb0, 0x87, 0x3d, 0x6c, 0x3e, 0xe6, 0x79, 0xc6, 0xeb,
+  0x0e, 0x78, 0x44, 0x75, 0x68, 0xb9, 0x74, 0xd4, 0x48, 0xab, 0x4d, 0xb8,
+  0xba, 0x21, 0x8c, 0x82, 0x7a, 0xbd, 0x9c, 0xdf, 0xd0, 0x10, 0xba, 0xe1,
+  0xca, 0xe6, 0x2e, 0xc9, 0xa7, 0x80, 0xb5, 0x48, 0x81, 0xbf, 0x28, 0xf8,
+  0x22, 0xbe, 0x05, 0xc6, 0xcf, 0xbb, 0x85, 0x44, 0xd2, 0xa9, 0xc7, 0x14,
+  0x1b, 0x9d, 0xde, 0x74, 0x32, 0x2a, 0xb7, 0x80, 0xf1, 0x2c, 0x46, 0x35,
+  0xee, 0xf8, 0x10, 0xd3, 0x79, 0x76, 0x15, 0xa2, 0x53, 0x0b, 0xc2, 0x82,
+  0xc1, 0x02, 0x41, 0x47, 0xb0, 0x82, 0x8f, 0xb1, 0x32, 0xd8, 0xf0, 0x3c,
+  0xeb, 0xb6, 0x32, 0x95, 0x86, 0x80, 0xa6, 0x91, 0x91, 0x28, 0x0b, 0x1e,
+  0x44, 0x78, 0xc9, 0x45, 0x1b, 0xb8, 0xb5, 0x0a, 0x21, 0xad, 0xf1, 0x5a,
+  0xbf, 0x01, 0x6a, 0x2d, 0xe0, 0xa8, 0x12, 0xf9, 0x5f, 0x47, 0x80, 0xe9,
+  0xe9, 0x48, 0x6c, 0x90, 0x7a, 0x51, 0x4c, 0x97, 0x52, 0x43, 0x8f, 0xcd,
+  0x6b, 0x9c, 0x05, 0xb2, 0x69, 0xa7, 0x49, 0xce, 0x9f, 0x8b, 0x38, 0x30,
+  0x2e, 0x16, 0xc5, 0x89, 0x43, 0xb4, 0x76, 0x58, 0xfb, 0x52, 0x42, 0x30,
+  0x4d, 0x71, 0x67, 0xf9, 0x3f, 0x68, 0x6e, 0x81, 0xf8, 0xce, 0x5b, 0x07,
+  0x77, 0xd7, 0xb1, 0x45, 0x99, 0x1e, 0x11, 0xae, 0x87, 0xb3, 0xcd, 0xb2,
+  0x54, 0xe0, 0x0b, 0xd4, 0x85, 0xb5, 0x59, 0xa0, 0x6b, 0x70, 0x67, 0x0f,
+  0x46, 0x20, 0x3c, 0x10, 0x71, 0x17, 0x5d, 0x6b, 0xab, 0x36, 0xa3, 0x01,
+  0x37, 0x2a, 0xf1, 0xeb, 0xd0, 0x54, 0x50, 0xbf, 0xc7, 0xa8, 0x66, 0x4b,
+  0x76, 0x59, 0x74, 0xac, 0xd6, 0xb4, 0x2b, 0xd3, 0xa5, 0x94, 0x38, 0xe0,
+  0xe4, 0x1b, 0x2f, 0x9d, 0xa7, 0x23, 0xde, 0x9c, 0xd1, 0xbd, 0x9b, 0xa7,
+  0xe5, 0xc8, 0x23, 0x99, 0xdd, 0x54, 0xe9, 0x2e, 0x79, 0xd8, 0x63, 0xad,
+  0x7e, 0xbe, 0x53, 0xde, 0xda, 0x21, 0x0b, 0x71, 0xa9, 0x84, 0x88, 0x27,
+  0x37, 0xca, 0x4e, 0x8c, 0xc9, 0x2e, 0x23, 0xd6, 0x57, 0x37, 0x18, 0x93,
+  0xd4, 0xd9, 0x1c, 0x90, 0x4a, 0x41, 0x25, 0x85, 0xe0, 0xd1, 0x35, 0xb0,
+  0x84, 0x96, 0xa2, 0x99, 0x3f, 0x45, 0x47, 0xa7, 0x40, 0x0d, 0x81, 0x38,
+  0xac, 0xcf, 0xa1, 0x56, 0x4f, 0x7e, 0x67, 0x8f, 0x25, 0x1b, 0xe7, 0xa7,
+  0xef, 0x0e, 0xbf, 0x3e, 0xd9, 0x7c, 0xcc, 0x49, 0xe1, 0xfc, 0xf5, 0x88,
+  0xf2, 0xc0, 0xb1, 0xc2, 0x01, 0x8f, 0xb4, 0x24, 0x1e, 0xb0, 0xe2, 0xe3,
+  0x7d, 0xd0, 0x66, 0x2c, 0xa4, 0xad, 0x2f, 0xb9, 0xa4, 0x72, 0x5e, 0x05,
+  0xe3, 0xd2, 0x0d, 0xff, 0x41, 0x38, 0x43, 0x17, 0xa6, 0x9f, 0xc6, 0x82,
+  0xf4, 0xbf, 0x3e, 0x3f, 0x1f, 0xec, 0x9f, 0x1e, 0x01, 0x15, 0xe0, 0xfc,
+  0x9c, 0x7e, 0x59, 0x05, 0xfb, 0x0f, 0x5e, 0xc6, 0xce, 0xda, 0xef, 0xe0,
+  0xac, 0x35, 0xbd, 0x54, 0xef, 0xc4, 0x2c, 0xf1, 0xb1, 0xf9, 0x52, 0xe2,
+  0xcd, 0x82, 0xf1, 0xb9, 0x83, 0xf6, 0x75, 0x7b, 0x7a, 0xb4, 0x85, 0xbe,
+  0xe0, 0x22, 0xc1, 0x3a, 0xc4, 0x23, 0xe6, 0x96, 0xdd, 0x62, 0x76, 0xbc,
+  0xaa, 0x48, 0xb5, 0x00, 0x7d, 0x1a, 0xfb, 0x48, 0x49, 0xf2, 0x24, 0x5d,
+  0x77, 0xb0, 0xc4, 0xd8, 0x22, 0x35, 0xbb, 0xed, 0xa8, 0x00, 0xbd, 0x91,
+  0x73, 0xc9, 0xac, 0xb2, 0x45, 0xcb, 0x17, 0x00, 0x5b, 0xaf, 0x80, 0xaf,
+  0x32, 0x50, 0xfe, 0xb9, 0x3a, 0x9e, 0xdb, 0x76, 0xbd, 0xf5, 0xc1, 0x32,
+  0xd9, 0x43, 0xad, 0xe4, 0x6c, 0xce, 0xa5, 0xce, 0x1b, 0x06, 0x33, 0x65,
+  0xc1, 0xd0, 0x15, 0xdc, 0x85, 0xaa, 0xae, 0x4c, 0x70, 0x81, 0xc1, 0x32,
+  0x3e, 0x3a, 0x3a, 0xa1, 0x2c, 0x5c, 0x89, 0x5f, 0x71, 0x7a, 0x1f, 0xcf,
+  0xc1, 0xf8, 0x2d, 0x30, 0xb2, 0xc3, 0x23, 0x11, 0x24, 0xa5, 0x3d, 0x74,
+  0xcd, 0x2b, 0x93, 0xf1, 0x09, 0x6c, 0xea, 0x20, 0x71, 0xd2, 0xe6, 0xc5,
+  0xc1, 0x69, 0x10, 0x50, 0xd0, 0xef, 0x1a, 0x3c, 0x46, 0xf7, 0x3e, 0xc3,
+  0x1b, 0xa9, 0xb5, 0x73, 0xd7, 0xfa, 0xec, 0xe1, 0x04, 0x7e, 0xab, 0x5b,
+  0xb6, 0xea, 0xf6, 0x0b, 0x2f, 0x3f, 0x75, 0x17, 0xae, 0xbe, 0xfa, 0xfc,
+  0x0c, 0x82, 0xdb, 0xcf, 0x7d, 0xd8, 0x5a, 0x1a, 0x85, 0x15, 0xcb, 0x27,
+  0xd1, 0x0c, 0x2b, 0x5d, 0x20, 0xab, 0xe4, 0xa4, 0x4b, 0xc4, 0x30, 0x3e,
+  0x86, 0xde, 0x76, 0xf4, 0x9a, 0x06, 0xc3, 0x72, 0x18, 0xeb, 0x9e, 0x5f,
+  0x79, 0x90, 0x9d, 0xae, 0x00, 0xe9, 0x63, 0xc6, 0xe4, 0x3e, 0xe1, 0x12,
+  0x7d, 0x81, 0xc9, 0x92, 0x5b, 0xc9, 0x02, 0x90, 0x7e, 0x0d, 0x40, 0x52,
+  0xec, 0xc0, 0x38, 0xe6, 0x34, 0x13, 0x07, 0x02, 0xfa, 0xae, 0x97, 0x52,
+  0x9d, 0x58, 0xc1, 0x84, 0x5c, 0xd9, 0xcf, 0x32, 0x43, 0x7d, 0x28, 0x1e,
+  0x70, 0x30, 0xe2, 0x4e, 0x25, 0x51, 0xd1, 0xc6, 0xe9, 0xcc, 0xcf, 0x34,
+  0xc4, 0x7f, 0x54, 0x16, 0x37, 0x74, 0x5a, 0xf9, 0x3d, 0xc8, 0xcd, 0xbc,
+  0xf6, 0x22, 0xc3, 0x99, 0x5a, 0x49, 0x37, 0xca, 0xc4, 0x79, 0x58, 0x23,
+  0xf1, 0x9d, 0x5c, 0x3a, 0x45, 0x83, 0x25, 0xbc, 0x2c, 0x24, 0x15, 0x22,
+  0x90, 0x84, 0x67, 0x98, 0xc2, 0x30, 0x9e, 0x2f, 0xc7, 0xe3, 0x2c, 0xb8,
+  0x26, 0xbb, 0xbe, 0x72, 0x2d, 0x46, 0xf2, 0xaf, 0xa3, 0x21, 0x47, 0x16,
+  0x21, 0x0d, 0x45, 0xf6, 0xbc, 0x41, 0x4c, 0xc2, 0xf4, 0x5f, 0x12, 0x55,
+  0x09, 0x37, 0x67, 0xab, 0x5c, 0xdb, 0x2c, 0x8c, 0xba, 0x3e, 0x03, 0x8f,
+  0x78, 0x23, 0xc9, 0x23, 0x97, 0x1a, 0xdf, 0x22, 0xe1, 0x20, 0x13, 0x5f,
+  0x86, 0x4c, 0x91, 0x8b, 0xfb, 0xc2, 0x8c, 0xbb, 0x62, 0x06, 0x40, 0xf5,
+  0xdc, 0xad, 0x2d, 0x8a, 0x15, 0x98, 0x04, 0xef, 0x0f, 0x80, 0xf3, 0xf2,
+  0xa0, 0xa8, 0xe5, 0x1f, 0x42, 0x38, 0x11, 0xf4, 0xd5, 0x51, 0x29, 0xa4,
+  0xd4, 0x85, 0x8b, 0xb8, 0x91, 0xc4, 0x3f, 0x97, 0xae, 0xcb, 0x85, 0xb1,
+  0x42, 0x9e, 0x21, 0xb0, 0xca, 0xc9, 0x21, 0x87, 0xcf, 0x44, 0xf4, 0x1c,
+  0xc9, 0x83, 0xe1, 0x31, 0x62, 0x9a, 0x08, 0x03, 0x44, 0x0f, 0xf0, 0x47,
+  0xa8, 0xde, 0x98, 0x9a, 0xaf, 0xc1, 0xe1, 0x2d, 0x49, 0x61, 0xeb, 0xae,
+  0x00, 0xc9, 0x23, 0x12, 0x63, 0xbe, 0xa2, 0x13, 0xd8, 0x07, 0xae, 0xc4,
+  0xc5, 0x1b, 0x1f, 0x45, 0xdd, 0x4f, 0xc4, 0x7a, 0x04, 0x95, 0x48, 0x22,
+  0x15, 0x63, 0x93, 0x4d, 0x82, 0xc7, 0xc2, 0x57, 0xf6, 0x3e, 0xdf, 0xb6,
+  0x48, 0x5a, 0x36, 0xd8, 0x85, 0xcf, 0x00, 0xc6, 0xb3, 0xab, 0x46, 0xf0,
+  0x63, 0xf4, 0xa9, 0x7b, 0xb2, 0x5d, 0x4d, 0xe7, 0xc5, 0xf0, 0x69, 0x18,
+  0xb2, 0xe3, 0x83, 0x3b, 0x8a, 0xe4, 0x25, 0x4f, 0x64, 0x8f, 0x6f, 0xd7,
+  0x3d, 0xff, 0x29, 0x60, 0x85, 0xc3, 0xbf, 0xf9, 0xfb, 0x2f, 0x22, 0xb8,
+  0xb1, 0xa9, 0xaf, 0x34, 0x51, 0x04, 0x4e, 0xe2, 0x9e, 0x6b, 0xb4, 0x47,
+  0x97, 0x16, 0x63, 0x24, 0x18, 0xf7, 0x16, 0xde, 0xd0, 0x8b, 0x60, 0x33,
+  0x3d, 0xd4, 0x75, 0xcf, 0x21, 0x13, 0x0e, 0x93, 0x46, 0xa9, 0xc9, 0x65,
+  0x2e, 0xf0, 0x09, 0x5d, 0xb5, 0xd9, 0x42, 0xb3, 0x82, 0x50, 0x78, 0xae,
+  0x12, 0xea, 0x73, 0x7b, 0x5c, 0x75, 0xdc, 0x24, 0x1b, 0x32, 0x03, 0xe5,
+  0x83, 0x9c, 0xae, 0x8c, 0xec, 0x60, 0x91, 0x16, 0xf6, 0xe3, 0xb9, 0x54,
+  0x8b, 0x42, 0x35, 0x62, 0xf9, 0x88, 0x4e, 0x90, 0xa6, 0x63, 0x0d, 0x9b,
+  0xb2, 0x12, 0xff, 0x36, 0xd7, 0x9b, 0xb7, 0x6b, 0x65, 0xa4, 0x11, 0xd1,
+  0xd0, 0xf3, 0xea, 0xda, 0xb4, 0x0f, 0x68, 0xb0, 0xcd, 0xc2, 0x7b, 0xb5,
+  0x15, 0x3a, 0x7d, 0x77, 0x82, 0x70, 0xf1, 0x4b, 0x59, 0xc1, 0x95, 0xd4,
+  0xb9, 0x25, 0x31, 0x82, 0x3e, 0x6b, 0xd3, 0x59, 0x8a, 0x2e, 0x8e, 0xcf,
+  0xb7, 0x98, 0xa5, 0x6e, 0x60, 0xb2, 0xe7, 0xef, 0x8e, 0xfa, 0x21, 0x86,
+  0x5b, 0x17, 0xe0, 0xd6, 0x79, 0x00, 0x37, 0x35, 0x29, 0xce, 0xa2, 0x1d,
+  0x02, 0x2c, 0x0d, 0x67, 0x5f, 0xe5, 0x89, 0xcb, 0x9e, 0xf7, 0x92, 0x88,
+  0x3f, 0xaf, 0xa7, 0x5b, 0xa8, 0xf1, 0x30, 0x92, 0x62, 0xb4, 0x60, 0xd0,
+  0x3c, 0xc0, 0x49, 0xf7, 0x13, 0xcb, 0x8a, 0xef, 0xb1, 0xc2, 0xc1, 0xcd,
+  0x60, 0x1e, 0xec, 0x04, 0x7b, 0x8c, 0x50, 0x7a, 0x7a, 0x4e, 0x7a, 0x5d,
+  0x82, 0xe1, 0xde, 0x34, 0xb5, 0x63, 0x64, 0x08, 0xc2, 0xe8, 0x36, 0x8a,
+  0x69, 0xdd, 0x4f, 0xdc, 0x28, 0x92, 0x9e, 0x2b, 0x6c, 0xa8, 0x94, 0xb3,
+  0x5e, 0x35, 0x21, 0xc5, 0xdd, 0xf0, 0x2e, 0x56, 0xa2, 0x9d, 0x36, 0x00,
+  0x1a, 0x78, 0x5a, 0xce, 0x7f, 0xcc, 0xf0, 0xf8, 0xf8, 0xc4, 0x4e, 0x44,
+  0xb9, 0x9c, 0x06, 0x75, 0xdd, 0x62, 0x17, 0xd0, 0xd3, 0x17, 0x8d, 0xc8,
+  0x19, 0xe2, 0xf7, 0xf5, 0x74, 0xe6, 0xcb, 0x7a, 0xa8, 0xa8, 0x93, 0xbc,
+  0xbb, 0x38, 0x7e, 0x9b, 0x74, 0xec, 0x79, 0x12, 0x52, 0x80, 0xef, 0x9a,
+  0x5f, 0x75, 0xfc, 0x14, 0x48, 0x55, 0xe0, 0x4c, 0x0b, 0x52, 0xfe, 0xf2,
+  0xab, 0xb9, 0x94, 0xf1, 0x79, 0x9b, 0x8f, 0xcb, 0x82, 0xd1, 0x0d, 0xc5,
+  0x04, 0xac, 0xc6, 0x31, 0xfa, 0xe2, 0xe8, 0xe8, 0x3c, 0xb9, 0xcb, 0x46,
+  0x8e, 0xf6, 0xdb, 0x92, 0xa5, 0x50, 0x20, 0x2e, 0x91, 0x45, 0x99, 0x67,
+  0x35, 0xab, 0x0a, 0x46, 0x30, 0x0c, 0x7c, 0xc0, 0x2f, 0x65, 0x83, 0x6c,
+  0x4e, 0xcb, 0x9a, 0xc1, 0xf6, 0xc2, 0x35, 0x83, 0xa6, 0x10, 0x2b, 0x16,
+  0x59, 0x11, 0x71, 0xca, 0xc8, 0x00, 0x4c, 0x24, 0xd0, 0xfa, 0x32, 0x2c,
+  0xeb, 0x8d, 0xd2, 0xca, 0x61, 0xbf, 0xe5, 0xa8, 0x50, 0xc6, 0xba, 0x82,
+  0x5a, 0x52, 0x6f, 0x72, 0xa0, 0x6b, 0x74, 0x50, 0x27, 0xac, 0x08, 0x76,
+  0x58, 0x42, 0x03, 0xe5, 0x83, 0x26, 0x45, 0x09, 0x0f, 0x67, 0x50, 0x19,
+  0x81, 0x4b, 0xf3, 0x2c, 0x19, 0x70, 0x04, 0x52, 0xcf, 0x7d, 0x44, 0xe3,
+  0xbe, 0x2e, 0x04, 0x58, 0x07, 0xcb, 0xcc, 0x62, 0x85, 0x64, 0xcd, 0x22,
+  0x5c, 0x53, 0x51, 0xce, 0x41, 0xa7, 0x5e, 0x10, 0x48, 0x1e, 0xd1, 0xd0,
+  0x6c, 0x3f, 0x7c, 0xee, 0x9e, 0xfa, 0xc9, 0x5e, 0xe7, 0x57, 0xab, 0xaa,
+  0xdd, 0x44, 0x95, 0x44, 0x1e, 0x91, 0x0a, 0x3c, 0x5d, 0xdd, 0xd0, 0xeb,
+  0x82, 0x5d, 0x49, 0xde, 0x6b, 0x86, 0x44, 0x6d, 0xff, 0x80, 0x52, 0x08,
+  0x91, 0x55, 0x73, 0xb6, 0xbd, 0xda, 0xd7, 0x71, 0x6c, 0x74, 0x93, 0xb3,
+  0x23, 0xfa, 0x1f, 0xcf, 0xe6, 0x5f, 0xae, 0xc4, 0xd0, 0xf4, 0x07, 0x77,
+  0xa3, 0x47, 0xb4, 0x7a, 0x5e, 0xe6, 0x19, 0x6f, 0x91, 0xa1, 0xfd, 0xd4,
+  0xf7, 0x80, 0x71, 0xc1, 0x51, 0x65, 0x26, 0x2e, 0x76, 0x89, 0x6b, 0x26,
+  0x03, 0x36, 0xb1, 0x7c, 0x4a, 0x28, 0x99, 0x2b, 0x41, 0xad, 0xf8, 0x14,
+  0x5a, 0x36, 0x8a, 0x9b, 0x44, 0x98, 0x5b, 0xc0, 0x8c, 0x57, 0x84, 0x92,
+  0x09, 0xc2, 0x50, 0xa6, 0xb5, 0x5f, 0x19, 0x8e, 0xa5, 0x31, 0xb7, 0x82,
+  0x0d, 0xb1, 0x6a, 0xb0, 0x8c, 0xa6, 0x01, 0x7d, 0x2f, 0x88, 0x6d, 0x6a,
+  0xd2, 0x2c, 0xf4, 0xa1, 0x30, 0xf9, 0xb6, 0xaa, 0x27, 0x05, 0x23, 0xb0,
+  0x6b, 0x0d, 0x16, 0xd6, 0x2e, 0x44, 0xb1, 0xf8, 0xaf, 0xbf, 0x77, 0x33,
+  0x11, 0x7f, 0xfc, 0x59, 0xee, 0x7f, 0xc1, 0xe6, 0xf1, 0x21, 0x34, 0x76,
+  0x2c, 0x2a, 0x5f, 0xa2, 0x8c, 0x09, 0x90, 0x41, 0xe8, 0xac, 0xae, 0x04,
+  0x54, 0x8c, 0xf6, 0x4d, 0x20, 0xb1, 0x0d, 0xba, 0xe2, 0x3a, 0x36, 0x13,
+  0x49, 0x81, 0xc8, 0x9f, 0x06, 0xf6, 0x7d, 0x5f, 0xee, 0x42, 0xab, 0x2d,
+  0x4c, 0x56, 0xd5, 0x4b, 0x31, 0x20, 0x2b, 0x2d, 0x77, 0x60, 0x80, 0x54,
+  0x8c, 0x21, 0x24, 0xee, 0x68, 0x8c, 0x9f, 0x85, 0x5e, 0x84, 0x9c, 0xe7,
+  0xf3, 0x2e, 0xea, 0xb7, 0xd0, 0xad, 0xba, 0x5d, 0xff, 0x8b, 0xe8, 0xac,
+  0x4f, 0xf7, 0xfb, 0xdf, 0x43, 0xe7, 0x2b, 0xad, 0x7e, 0xd2, 0xe3, 0x21,
+  0x7f, 0xf8, 0xdd, 0x0e, 0xc7, 0x4a, 0x76, 0x60, 0x8c, 0x24, 0x4a, 0xc6,
+  0x51, 0xb0, 0x83, 0xf8, 0x5a, 0x81, 0x33, 0xde, 0xec, 0x91, 0x63, 0xc4,
+  0xfb, 0x7c, 0x57, 0xfd, 0x7d, 0xc8, 0xff, 0xfe, 0xb8, 0x33, 0x78, 0xf6,
+  0xb3, 0xeb, 0xf5, 0x77, 0x3b, 0x1f, 0x7e, 0xb7, 0xdb, 0x8b, 0xc5, 0xc2,
+  0x5a, 0x56, 0x70, 0x33, 0x74, 0xb9, 0x0a, 0xaf, 0x30, 0x35, 0x4e, 0xf8,
+  0xb8, 0x12, 0x14, 0x91, 0xeb, 0xa6, 0x7c, 0xb1, 0x91, 0xfc, 0x91, 0xaa,
+  0x2d, 0x83, 0x31, 0xb0, 0x02, 0x07, 0x41, 0xb2, 0x23, 0x72, 0x2b, 0xf1,
+  0xa9, 0xc5, 0xa9, 0x02, 0x9c, 0x5b, 0xbd, 0x2d, 0x9d, 0x02, 0x08, 0x80,
+  0x5e, 0x99, 0xdc, 0x93, 0xec, 0x23, 0xb0, 0xbd, 0x43, 0x17, 0x27, 0x68,
+  0xba, 0xad, 0xd2, 0xae, 0x22, 0x00, 0x6e, 0x38, 0x7d, 0x84, 0xf1, 0x2a,
+  0x37, 0x63, 0x86, 0x53, 0x6f, 0xb1, 0xf6, 0x64, 0x3f, 0x52, 0x95, 0x99,
+  0x79, 0x93, 0xd0, 0xbb, 0x3f, 0x43, 0x6d, 0x5c, 0xee, 0x47, 0x4e, 0x50,
+  0x1a, 0xba, 0xcd, 0xa5, 0xbe, 0x22, 0x32, 0xa6, 0x44, 0xdc, 0x80, 0x6b,
+  0x1f, 0x5f, 0xdd, 0x65, 0x88, 0xae, 0x6c, 0x5f, 0xab, 0x1b, 0x27, 0xce,
+  0xfe, 0x2b, 0xb6, 0xe5, 0xa0, 0x1e, 0x4f, 0xf8, 0x7a, 0x10, 0xa8, 0x93,
+  0x89, 0xf5, 0x1b, 0x20, 0x48, 0x75, 0x17, 0xdf, 0x68, 0xb8, 0x19, 0xcb,
+  0xa0, 0x92, 0x31, 0x58, 0x2e, 0x70, 0x7a, 0xeb, 0x9d, 0xba, 0x2b, 0xd1,
+  0xb6, 0x87, 0x76, 0x07, 0xb5, 0x57, 0x35, 0x9d, 0xd7, 0xae, 0x9a, 0x38,
+  0xcb, 0xea, 0xd2, 0x9c, 0xd4, 0x9b, 0x09, 0x12, 0x7a, 0x03, 0xe4, 0x09,
+  0x5f, 0xfe, 0xa8, 0xdb, 0x5c, 0x90, 0x6f, 0xb9, 0x1a, 0xf8, 0x5b, 0x51,
+  0xa5, 0x00, 0x34, 0x28, 0x68, 0x3c, 0xea, 0xfc, 0xe9, 0xa4, 0xab, 0x06,
+  0x84, 0x1e, 0x4d, 0x25, 0x73, 0x15, 0x4c, 0x7c, 0xc2, 0x5f, 0x12, 0xa4,
+  0xf0, 0xf0, 0x64, 0x50, 0x3d, 0xa8, 0x32, 0x80, 0x74, 0x16, 0xb8, 0xe3,
+  0xc0, 0x6b, 0xa2, 0x1b, 0xd1, 0x71, 0xe9, 0xbb, 0xb2, 0x0c, 0xd9, 0x94,
+  0x2b, 0x91, 0xa9, 0x73, 0x1d, 0x68, 0x88, 0x6d, 0x88, 0xf3, 0xda, 0xd7,
+  0xe9, 0x59, 0x8d, 0x5f, 0x3e, 0x6c, 0xdf, 0xff, 0xad, 0xb2, 0xb9, 0x41,
+  0x3a, 0xf4, 0xf8, 0xba, 0x28, 0xa2, 0x70, 0xf1, 0x1e, 0xb9, 0x1c, 0xf9,
+  0x4c, 0xb0, 0xa8, 0xaf, 0xc0, 0xad, 0x37, 0x75, 0x39, 0x90, 0x71, 0x3b,
+  0xa1, 0x05, 0x24, 0xe6, 0xe6, 0xde, 0x4a, 0x1a, 0xae, 0x72, 0x0b, 0x53,
+  0x5d, 0x06, 0xd4, 0x01, 0x85, 0x8f, 0x5d, 0x68, 0xf2, 0x9d, 0x2e, 0x91,
+  0xae, 0x50, 0x13, 0xe2, 0xbd, 0xb1, 0x28, 0x51, 0x88, 0x75, 0x0d, 0xfc,
+  0x60, 0x5e, 0x0e, 0x68, 0x75, 0x49, 0xe5, 0x98, 0x67, 0xa1, 0x5f, 0x5b,
+  0x61, 0xa5, 0x8e, 0xb0, 0x25, 0x1c, 0x2e, 0xfb, 0xfb, 0xdd, 0xed, 0x95,
+  0xd0, 0xe2, 0x40, 0xd8, 0xb4, 0xaa, 0x93, 0x7c, 0x1c, 0x2b, 0x3b, 0x8f,
+  0x62, 0x2f, 0xf0, 0xe5, 0xad, 0x32, 0x24, 0x5c, 0x12, 0x2b, 0x1a, 0x00,
+  0x96, 0x68, 0xd5, 0xfa, 0x47, 0x93, 0x14, 0x7e, 0x2d, 0x5f, 0x7e, 0x94,
+  0x31, 0xd3, 0xfd, 0xcf, 0xb2, 0xc4, 0xee, 0x60, 0x94, 0xd1, 0xdd, 0xdd,
+  0x9e, 0xe3, 0x86, 0x4f, 0x41, 0xe8, 0x27, 0xcd, 0x58, 0x5b, 0xee, 0xec,
+  0x2b, 0xbc, 0x93, 0x5c, 0xc0, 0x62, 0xc7, 0xa7, 0xe1, 0x64, 0xff, 0xfd,
+  0xc5, 0x37, 0xc9, 0xee, 0x70, 0x5b, 0x77, 0xf7, 0x41, 0xe8, 0x00, 0x01,
+  0x3c, 0x6a, 0xb4, 0x61, 0xfa, 0x05, 0x4a, 0x47, 0xce, 0xff, 0xb2, 0x9c,
+  0x37, 0x8b, 0xff, 0xc4, 0xe2, 0x17, 0xf4, 0x48, 0x6a, 0x32, 0x94, 0x22,
+  0x57, 0x37, 0xa3, 0x4f, 0x43, 0x26, 0xa9, 0x80, 0xaa, 0x25, 0x9b, 0xf7,
+  0x3b, 0x32, 0x28, 0x1a, 0x5c, 0x55, 0x29, 0xac, 0x33, 0x58, 0xc5, 0x6d,
+  0xb2, 0x38, 0xd6, 0x32, 0xd3, 0x08, 0x08, 0x91, 0xee, 0x5d, 0xfd, 0x51,
+  0x1c, 0x80, 0xb3, 0x37, 0x07, 0xad, 0xe6, 0x9e, 0x7f, 0xf6, 0x6c, 0xfb,
+  0xb7, 0x0c, 0x34, 0x6c, 0x54, 0x2e, 0xfb, 0x17, 0x56, 0x86, 0x54, 0xbb,
+  0xdc, 0xa7, 0x14, 0x86, 0x74, 0x75, 0x21, 0x35, 0xe6, 0x25, 0x26, 0x13,
+  0x87, 0x19, 0xde, 0x3e, 0x8e, 0x33, 0xac, 0x7a, 0x89, 0x22, 0xe2, 0x55,
+  0xe0, 0xfa, 0xe2, 0x50, 0xde, 0xe5, 0x3c, 0x12, 0x3c, 0x83, 0xd7, 0xa1,
+  0x02, 0x4c, 0x45, 0x6e, 0x4b, 0x0e, 0x4e, 0xde, 0xbd, 0x3b, 0x3c, 0xb8,
+  0xf0, 0x55, 0xce, 0xee, 0xac, 0x92, 0xae, 0xf2, 0xd1, 0xd4, 0x43, 0x84,
+  0xc7, 0x2b, 0x43, 0xba, 0xca, 0x64, 0x89, 0xb7, 0x4a, 0x4a, 0x72, 0x9e,
+  0x48, 0xe0, 0x01, 0xf2, 0x8f, 0xe5, 0x78, 0x09, 0x43, 0x8d, 0x98, 0x70,
+  0xfe, 0x6f, 0x41, 0xc0, 0x7f, 0xa0, 0x20, 0xe0, 0x37, 0x16, 0xe5, 0xd6,
+  0x01, 0x2a, 0x8f, 0x55, 0xbd, 0xd3, 0xeb, 0x22, 0x88, 0x58, 0x5b, 0x55,
+  0xf7, 0x4e, 0x8a, 0x46, 0xf0, 0x46, 0x70, 0xfa, 0x45, 0xd5, 0xb8, 0x6d,
+  0x6c, 0x73, 0x57, 0x15, 0xf9, 0xfb, 0xcd, 0x0b, 0xc1, 0xad, 0x8e, 0x8d,
+  0xe3, 0x4a, 0x86, 0x4e, 0xbe, 0x1d, 0x2c, 0xfa, 0xc6, 0x11, 0x6a, 0xce,
+  0xd1, 0x9d, 0xc6, 0xfc, 0xa3, 0x34, 0x3e, 0xa4, 0x62, 0x08, 0x09, 0x1b,
+  0xeb, 0xd9, 0x18, 0x7c, 0x74, 0xef, 0xc6, 0xc0, 0x6c, 0x10, 0x6c, 0xd8,
+  0x09, 0x7a, 0x9c, 0x0f, 0xac, 0x29, 0x31, 0x10, 0xea, 0x04, 0xb5, 0xac,
+  0x89, 0x9c, 0x16, 0x0c, 0x84, 0x77, 0xa7, 0x84, 0xd3, 0x53, 0x8e, 0x3b,
+  0xfa, 0xe9, 0xd8, 0xc0, 0xb4, 0x28, 0x0d, 0x91, 0xd9, 0x8c, 0xae, 0xf0,
+  0xa9, 0xa1, 0x63, 0xe4, 0x52, 0x21, 0xa5, 0x90, 0x82, 0x59, 0x38, 0xd3,
+  0x2e, 0x67, 0x54, 0xea, 0xd7, 0x71, 0x2f, 0x5d, 0xfb, 0xe1, 0x94, 0x35,
+  0xe7, 0xb2, 0x48, 0x25, 0xfd, 0x15, 0x75, 0x2e, 0xdc, 0xd1, 0xc0, 0xb8,
+  0x75, 0x0d, 0x1c, 0x7b, 0xf0, 0x80, 0x1e, 0x5d, 0xc9, 0xc4, 0x19, 0x3f,
+  0x5c, 0xa2, 0x94, 0x1a, 0x59, 0x04, 0x9a, 0x45, 0xed, 0xd0, 0x66, 0xec,
+  0x53, 0x4e, 0xa0, 0x42, 0x25, 0x1b, 0x35, 0xe2, 0x3a, 0xad, 0x9c, 0x7c,
+  0x43, 0xa6, 0xd2, 0xb5, 0xb2, 0xa5, 0xaa, 0x8b, 0x80, 0xd1, 0x9f, 0xf6,
+  0xb5, 0xfa, 0xbc, 0x24, 0xab, 0xaf, 0x4a, 0x94, 0x01, 0xe2, 0xdb, 0x99,
+  0x58, 0xdd, 0x2a, 0xc5, 0x15, 0x11, 0x7f, 0xa9, 0x00, 0xf0, 0x90, 0xd8,
+  0xbc, 0x85, 0x50, 0xee, 0x39, 0x80, 0x25, 0x0a, 0x58, 0x14, 0x25, 0x10,
+  0x69, 0x85, 0x0d, 0x16, 0x77, 0x9b, 0x9c, 0x30, 0x6a, 0xdc, 0x01, 0x70,
+  0xa9, 0xe9, 0x6b, 0xe6, 0x81, 0x7b, 0xe0, 0x4c, 0x12, 0xc8, 0xd5, 0x19,
+  0x49, 0x49, 0x1c, 0xb5, 0xd5, 0xb6, 0xee, 0xa1, 0xb2, 0xd0, 0xd8, 0xd0,
+  0x5c, 0x04, 0xe7, 0xda, 0x95, 0x3e, 0x52, 0x41, 0x11, 0x54, 0xe3, 0xdc,
+  0x08, 0x0c, 0x86, 0xbf, 0x0a, 0x52, 0x68, 0x3c, 0xe5, 0x54, 0x8d, 0xf5,
+  0x2a, 0x94, 0x02, 0x34, 0xbb, 0x05, 0x51, 0x6f, 0xb4, 0x50, 0x06, 0xb2,
+  0xc0, 0x2e, 0x75, 0x1b, 0x18, 0x31, 0xb4, 0x9b, 0x6a, 0x35, 0x44, 0x1b,
+  0x0c, 0x53, 0x1c, 0xae, 0x47, 0x07, 0x25, 0xa8, 0x13, 0x66, 0x2d, 0x8a,
+  0x91, 0x3c, 0xaf, 0x5b, 0xe3, 0xe4, 0xbd, 0x6a, 0x36, 0xe7, 0xb6, 0xa8,
+  0x03, 0xe1, 0xd8, 0x51, 0xea, 0x5d, 0xd1, 0xb0, 0x8e, 0xb2, 0x2f, 0x5f,
+  0x0f, 0xe9, 0xc4, 0xf4, 0xb8, 0x9e, 0x58, 0xaf, 0x99, 0xa9, 0xaa, 0xa9,
+  0xdd, 0xf6, 0x36, 0xad, 0x44, 0x30, 0xe0, 0xae, 0x44, 0x18, 0x2a, 0x6a,
+  0xaa, 0xda, 0x6c, 0x70, 0x4c, 0x29, 0xf8, 0x6f, 0x17, 0x32, 0xd6, 0x35,
+  0xb5, 0x7a, 0x54, 0xbd, 0x9d, 0x17, 0xbb, 0xc3, 0x9d, 0xe7, 0x9f, 0x0f,
+  0x77, 0xb6, 0x87, 0x3b, 0xbd, 0x10, 0xdd, 0x1e, 0xd6, 0x7f, 0x0e, 0x74,
+  0x0b, 0xdb, 0x89, 0xdc, 0x85, 0x31, 0x9f, 0x5e, 0xd8, 0xc1, 0xec, 0x7e,
+  0x18, 0x04, 0x1f, 0x76, 0xba, 0xd0, 0x00, 0xc5, 0x76, 0xcb, 0x83, 0x00,
+  0x96, 0x0c, 0xa4, 0xb6, 0xe0, 0x48, 0x4d, 0x07, 0x03, 0x14, 0xac, 0x92,
+  0x59, 0xd0, 0xbc, 0x4a, 0x16, 0x71, 0xe3, 0x04, 0xc9, 0x76, 0x86, 0x52,
+  0x48, 0x27, 0x27, 0x70, 0xe2, 0xfc, 0xc6, 0x70, 0xbb, 0xaf, 0x9d, 0x7b,
+  0xdb, 0xc5, 0x50, 0x9c, 0x9e, 0x9c, 0x5d, 0x28, 0x2a, 0x98, 0x70, 0x85,
+  0xb4, 0xba, 0x1d, 0x36, 0x1e, 0x0c, 0xb8, 0x70, 0xc4, 0xe8, 0x2b, 0x6c,
+  0xf8, 0xf0, 0x94, 0x5a, 0x69, 0xe3, 0xc7, 0xb9, 0xe6, 0x1d, 0x3c, 0xd1,
+  0x60, 0xa0, 0x2e, 0xd9, 0x41, 0xb6, 0xe8, 0x22, 0x72, 0xa2, 0x11, 0x46,
+  0x93, 0xc8, 0x10, 0x80, 0xc2, 0xaf, 0xfe, 0xf1, 0x8f, 0x8f, 0x14, 0xe0,
+  0xdd, 0x79, 0x31, 0x7c, 0xe6, 0x8d, 0x80, 0x02, 0xbe, 0x92, 0xf4, 0xf6,
+  0x7e, 0x44, 0x6e, 0xe5, 0xcf, 0x83, 0x1f, 0xe9, 0xcf, 0x9f, 0x7b, 0x8e,
+  0x8b, 0x72, 0x84, 0x70, 0xa4, 0x92, 0xa1, 0x18, 0x53, 0x2d, 0x05, 0x10,
+  0x4f, 0xbb, 0x74, 0x1a, 0xc8, 0x65, 0x1c, 0x4e, 0x82, 0x33, 0x2b, 0x38,
+  0x1d, 0x42, 0xf3, 0x62, 0x2f, 0xec, 0x78, 0x45, 0xd2, 0xb9, 0x20, 0x0b,
+  0xfb, 0xd2, 0x0e, 0xfe, 0xcd, 0xbe, 0x95, 0xc0, 0x53, 0x94, 0x1a, 0x96,
+  0x04, 0xae, 0x69, 0x50, 0xac, 0x13, 0x80, 0x8f, 0x0f, 0x3b, 0xb1, 0xc1,
+  0x6a, 0x7e, 0x52, 0x36, 0x2f, 0xc8, 0x02, 0x24, 0x48, 0x71, 0xcd, 0x6d,
+  0xb1, 0x10, 0x8b, 0xd0, 0x94, 0xb9, 0xa0, 0x52, 0x97, 0xc6, 0x1f, 0x0d,
+  0x91, 0xae, 0x6e, 0x78, 0xc6, 0x0a, 0xa6, 0x11, 0x20, 0x61, 0x62, 0x8c,
+  0x86, 0x3c, 0x31, 0x0a, 0xaa, 0x8e, 0x34, 0x54, 0x04, 0xae, 0x08, 0xfb,
+  0x72, 0x71, 0x5d, 0x52, 0xf3, 0x0f, 0x80, 0x2e, 0xd3, 0x53, 0xf2, 0x8c,
+  0x23, 0xf4, 0x85, 0x47, 0xff, 0xfd, 0x2d, 0x35, 0x98, 0xb4, 0xbe, 0x1e,
+  0x40, 0x5b, 0x6e, 0x8b, 0x55, 0x6d, 0x0c, 0x2e, 0xb6, 0xaa, 0x4f, 0xc3,
+  0x42, 0x2b, 0xb4, 0x26, 0x5b, 0xc3, 0xe1, 0x16, 0x4b, 0x9b, 0x5b, 0xf4,
+  0xc3, 0x17, 0xde, 0x81, 0x0d, 0xa6, 0x8d, 0xaf, 0xcf, 0x1a, 0x3c, 0x77,
+  0x06, 0xbc, 0x15, 0x2d, 0xb9, 0xee, 0x45, 0xef, 0xea, 0xaf, 0x4b, 0xe4,
+  0x12, 0x95, 0x2c, 0x7c, 0x88, 0xe5, 0x69, 0x16, 0xa8, 0x77, 0x9d, 0x53,
+  0x64, 0x51, 0xc5, 0x95, 0x02, 0x8f, 0xd4, 0xd7, 0xad, 0x84, 0x52, 0x09,
+  0x56, 0x05, 0x49, 0xe6, 0xb5, 0x81, 0x23, 0x01, 0x62, 0x2d, 0xad, 0x1f,
+  0xcc, 0x77, 0x78, 0xba, 0xdb, 0x4c, 0x03, 0x54, 0xb4, 0xaf, 0x15, 0x65,
+  0x04, 0x71, 0x7f, 0xda, 0x2a, 0x95, 0xc0, 0x63, 0xad, 0x91, 0xd4, 0xff,
+  0xd9, 0xee, 0x93, 0xed, 0xad, 0xe7, 0xc3, 0xa7, 0xc3, 0x5d, 0x17, 0xeb,
+  0x48, 0x1c, 0x8b, 0xf6, 0xa7, 0x06, 0xfc, 0xdb, 0x2a, 0x41, 0x98, 0xae,
+  0x93, 0x02, 0xb8, 0x65, 0x4d, 0x65, 0xc9, 0xa7, 0xf3, 0xa5, 0x0c, 0xee,
+  0x16, 0x26, 0xe1, 0xc5, 0x4a, 0x08, 0xb3, 0x6c, 0xc8, 0x83, 0x50, 0x0f,
+  0xdc, 0x12, 0xe5, 0x6a, 0x96, 0xa3, 0x9c, 0x84, 0xa8, 0x9a, 0x0b, 0xc6,
+  0x71, 0x30, 0x46, 0x36, 0x72, 0xd5, 0x18, 0xb9, 0x44, 0x53, 0x61, 0xe6,
+  0x3b, 0x76, 0xa3, 0xc4, 0x74, 0x44, 0x19, 0xbd, 0x44, 0x10, 0x06, 0xc5,
+  0xc6, 0x24, 0xd7, 0x2f, 0x97, 0x52, 0x40, 0xa8, 0x2c, 0xc6, 0xe2, 0xcd,
+  0x98, 0x94, 0xd3, 0x6f, 0xe8, 0xb8, 0xc2, 0xf7, 0x9f, 0xc6, 0xaf, 0x7a,
+  0x41, 0x77, 0x91, 0x48, 0xa2, 0x54, 0x30, 0xf1, 0x3c, 0x88, 0xbd, 0x7e,
+  0xa0, 0xf9, 0x64, 0x70, 0xcb, 0x49, 0x95, 0xfb, 0x49, 0x1e, 0x2b, 0xd0,
+  0x6b, 0x4e, 0xd8, 0x40, 0x07, 0x11, 0x48, 0x2a, 0x76, 0x36, 0x33, 0x6a,
+  0x89, 0xc4, 0xcc, 0xf8, 0x08, 0x45, 0x8f, 0x83, 0x19, 0xf5, 0x0b, 0x3e,
+  0x54, 0xd2, 0x58, 0x31, 0xdf, 0x7e, 0x35, 0x41, 0x3c, 0xf9, 0xe7, 0x13,
+  0xc4, 0xee, 0xff, 0x25, 0x88, 0x7f, 0x25, 0x41, 0xbc, 0x88, 0x11, 0xc4,
+  0x93, 0x5f, 0x4d, 0x10, 0x4f, 0xff, 0xf9, 0x04, 0xf1, 0xe4, 0xff, 0x12,
+  0xc4, 0xbf, 0x90, 0x20, 0x76, 0x9f, 0xb7, 0xae, 0x0c, 0xd6, 0xc8, 0xe9,
+  0xce, 0x37, 0xc5, 0xfc, 0x8b, 0xc8, 0xd5, 0xea, 0xf2, 0xdf, 0x58, 0xa5,
+  0xf0, 0x32, 0xa1, 0x26, 0xfa, 0x86, 0x4a, 0xbd, 0xaa, 0x3c, 0x95, 0x87,
+  0x71, 0xed, 0xda, 0x74, 0x18, 0x0c, 0x3a, 0x9d, 0x0e, 0x93, 0x53, 0xf7,
+  0x1a, 0x5b, 0x4a, 0xf9, 0xb3, 0xa5, 0x44, 0x21, 0x66, 0x97, 0xd8, 0x07,
+  0x08, 0x73, 0x7d, 0x7c, 0x09, 0xb9, 0x93, 0xed, 0x6e, 0x9d, 0x1c, 0x2e,
+  0x04, 0x2e, 0x8a, 0xc3, 0x04, 0xad, 0xb0, 0x0a, 0x9f, 0xfa, 0x3c, 0x4f,
+  0x43, 0x17, 0x58, 0xa7, 0x2b, 0x7c, 0xbd, 0x9f, 0x84, 0x45, 0xf8, 0x38,
+  0x2d, 0xbd, 0x5b, 0x0e, 0xf0, 0xa3, 0x38, 0x96, 0xff, 0x96, 0x95, 0x45,
+  0x62, 0x08, 0x3a, 0x8a, 0x04, 0x8a, 0xc2, 0x99, 0x26, 0x35, 0xf9, 0x0f,
+  0xb9, 0xdf, 0x8e, 0x9e, 0xf6, 0x47, 0x94, 0xa6, 0x16, 0xf0, 0x57, 0x06,
+  0xd4, 0x72, 0x79, 0xa7, 0x73, 0xef, 0x07, 0x91, 0xca, 0x14, 0xb6, 0x04,
+  0xaa, 0x54, 0x20, 0xbb, 0xad, 0x93, 0xb3, 0xc4, 0x1b, 0xc9, 0xa6, 0x97,
+  0x30, 0x31, 0xc7, 0x69, 0xeb, 0x5c, 0xf5, 0xc0, 0x0d, 0xc7, 0x15, 0xcb,
+  0x1a, 0x46, 0x34, 0x9d, 0xd7, 0x19, 0x3b, 0x07, 0xc2, 0x01, 0xf5, 0x61,
+  0x78, 0xb8, 0x55, 0xdb, 0x89, 0xab, 0xdd, 0xab, 0x21, 0x92, 0x2c, 0x3a,
+  0xbb, 0x21, 0x76, 0x87, 0xd4, 0x1c, 0x73, 0x1d, 0x89, 0x26, 0x7f, 0xe5,
+  0x96, 0xc1, 0x02, 0x2d, 0xc2, 0xc5, 0xd8, 0x40, 0xaa, 0xaa, 0xf9, 0x65,
+  0xd1, 0xe5, 0xa7, 0x2c, 0x03, 0x8c, 0x4e, 0x30, 0x7b, 0x54, 0xcb, 0xd1,
+  0x5f, 0x5c, 0x08, 0xe1, 0x34, 0xc5, 0xe1, 0x6a, 0x94, 0x14, 0x97, 0xa2,
+  0x68, 0xcb, 0x91, 0xc8, 0x81, 0x75, 0xb7, 0x39, 0xfa, 0x10, 0x2e, 0x63,
+  0x57, 0x98, 0x4d, 0xe9, 0x2c, 0x08, 0x88, 0xed, 0x4c, 0x2a, 0x88, 0xeb,
+  0xec, 0xec, 0xbb, 0x9d, 0x27, 0xd6, 0xb4, 0x2a, 0xad, 0x3c, 0x16, 0x6e,
+  0x96, 0x5b, 0x4d, 0x15, 0xed, 0x2d, 0x7e, 0x95, 0x1f, 0x5f, 0xd9, 0x16,
+  0x91, 0x6b, 0x1f, 0x95, 0xd5, 0xfa, 0x7f, 0xe4, 0x1f, 0x71, 0x95, 0xd3,
+  0xa9, 0x3b, 0xbc, 0xce, 0x16, 0xec, 0xce, 0x8f, 0xe3, 0x6c, 0xe0, 0xf5,
+  0x55, 0x1d, 0xbc, 0xe2, 0x6f, 0xa5, 0x87, 0x87, 0xdb, 0x86, 0xa3, 0xfe,
+  0x17, 0x74, 0xf0, 0x7e, 0x2e, 0x00, 0x35, 0x21, 0x87, 0x58, 0x28, 0xe4,
+  0x1d, 0xf3, 0xbf, 0xbb, 0xb4, 0x9c, 0x4b, 0xb0, 0x3a, 0x78, 0x9d, 0x1a,
+  0xc8, 0x38, 0x3b, 0x78, 0x01, 0x33, 0x57, 0x07, 0x69, 0xfd, 0x92, 0x4d,
+  0x7d, 0xb0, 0xf7, 0x15, 0x73, 0x03, 0x02, 0x50, 0x37, 0xa6, 0x05, 0x76,
+  0x2f, 0x8a, 0x5a, 0xf0, 0xa5, 0x39, 0x3c, 0x98, 0x55, 0xb2, 0x12, 0x55,
+  0x87, 0x23, 0x85, 0x46, 0x6c, 0x23, 0x7c, 0x81, 0x4d, 0x6e, 0x19, 0x46,
+  0xac, 0xe5, 0x02, 0xa5, 0x8c, 0x14, 0x59, 0x4b, 0x94, 0x9c, 0xd4, 0xef,
+  0x9e, 0x74, 0xdd, 0x8e, 0x20, 0x43, 0x80, 0x13, 0x6e, 0x3c, 0x87, 0x4e,
+  0x7d, 0x5b, 0xe4, 0xbe, 0x8c, 0xf4, 0xf0, 0xd7, 0xd5, 0x6f, 0xea, 0x07,
+  0xd5, 0x59, 0xd3, 0x2a, 0x4c, 0x33, 0x8c, 0x84, 0x5f, 0x3b, 0xc3, 0x45,
+  0x2a, 0x50, 0x3b, 0x44, 0xc5, 0xf3, 0xb4, 0xb6, 0x23, 0xe6, 0xb7, 0x01,
+  0xc3, 0x94, 0x52, 0x64, 0xac, 0x9d, 0x8c, 0xb3, 0x6e, 0x44, 0x9c, 0xaf,
+  0xd4, 0xf3, 0x18, 0x70, 0xd3, 0x6e, 0xe7, 0x3e, 0x19, 0x18, 0xbd, 0xbb,
+  0x7b, 0x25, 0x7e, 0xad, 0x84, 0x00, 0xb5, 0x6e, 0x71, 0x51, 0xde, 0x8f,
+  0x18, 0x15, 0x6b, 0x61, 0xc8, 0xf4, 0x95, 0xc2, 0x01, 0x63, 0xd2, 0xb2,
+  0x56, 0xf8, 0x43, 0x0f, 0x1f, 0x3e, 0x8d, 0x6e, 0x34, 0x20, 0x52, 0x3e,
+  0x6b, 0xc3, 0x59, 0xf1, 0x37, 0xd2, 0xe4, 0xd2, 0x61, 0x51, 0x5e, 0xc5,
+  0x49, 0xde, 0x2a, 0x19, 0xb6, 0x1f, 0xb6, 0xa7, 0xf7, 0xe9, 0xea, 0x55,
+  0xea, 0xe6, 0xb0, 0x9c, 0xb9, 0x43, 0xca, 0xf0, 0xf3, 0xd0, 0xf2, 0x0f,
+  0x52, 0x42, 0x1c, 0x85, 0xfb, 0x0e, 0x3f, 0xbc, 0x7f, 0x77, 0xfe, 0xfe,
+  0x94, 0xed, 0x1e, 0x87, 0xaf, 0x3f, 0x9c, 0x9e, 0x9d, 0x38, 0x92, 0xbc,
+  0x38, 0x39, 0x38, 0x09, 0xca, 0xa5, 0x87, 0x94, 0x81, 0x78, 0xdf, 0x16,
+  0xae, 0x74, 0xc0, 0x4e, 0x3e, 0xde, 0x07, 0x0c, 0x95, 0x47, 0x1d, 0x70,
+  0xfe, 0xef, 0x7d, 0xe5, 0xd8, 0xd0, 0xe1, 0xa1, 0xa1, 0x0f, 0x12, 0xe6,
+  0x08, 0xcb, 0x57, 0x9a, 0x5c, 0x2d, 0xd9, 0xc6, 0x15, 0x06, 0x4e, 0x2a,
+  0x9e, 0x7a, 0x95, 0x65, 0x7e, 0x73, 0x05, 0x62, 0xdc, 0xa5, 0x7e, 0xfb,
+  0x9e, 0x1a, 0x4a, 0xe9, 0xb3, 0x88, 0x84, 0x21, 0xe8, 0x34, 0x8f, 0xca,
+  0x19, 0x21, 0x41, 0xd8, 0xa5, 0x10, 0xac, 0x29, 0xd2, 0x7f, 0x4c, 0x5a,
+  0x54, 0xb0, 0x76, 0xed, 0x20, 0x02, 0x77, 0xc5, 0x49, 0xd5, 0x8b, 0x86,
+  0x90, 0x51, 0x66, 0x0a, 0xae, 0x17, 0xb9, 0xab, 0x1e, 0x23, 0x22, 0x99,
+  0x80, 0x63, 0xc6, 0x0f, 0xf1, 0x4b, 0x94, 0x9f, 0x12, 0x46, 0x09, 0xef,
+  0x81, 0x81, 0x5a, 0x9d, 0x37, 0x86, 0xef, 0x3a, 0x0a, 0x32, 0x75, 0x9a,
+  0x49, 0xc9, 0x92, 0xe9, 0xcd, 0xf9, 0x0f, 0xd1, 0x05, 0xb0, 0x74, 0x57,
+  0x35, 0xa5, 0xac, 0xb9, 0x40, 0x77, 0x01, 0xb6, 0x90, 0x68, 0x14, 0xc3,
+  0x15, 0x65, 0x93, 0x11, 0xc9, 0xb3, 0x7b, 0x82, 0x4f, 0xa9, 0x39, 0x00,
+  0x82, 0x8a, 0x81, 0x3c, 0xb9, 0x83, 0x53, 0x81, 0x9b, 0x70, 0xb0, 0x18,
+  0x6b, 0x01, 0xd4, 0x4b, 0xa5, 0xef, 0x3c, 0xdd, 0x1e, 0x6e, 0x27, 0xe7,
+  0x6f, 0xbf, 0x52, 0xf4, 0xc1, 0xaf, 0xce, 0xa5, 0x80, 0x2d, 0x5f, 0x0b,
+  0xf6, 0xde, 0x30, 0x8c, 0xb7, 0xe2, 0xa1, 0xd3, 0x20, 0xfe, 0x98, 0x7a,
+  0x28, 0x07, 0xbb, 0x39, 0x56, 0xce, 0xaa, 0x1f, 0x00, 0x55, 0x10, 0xf9,
+  0x32, 0x80, 0xa3, 0x4d, 0x48, 0xc4, 0x4b, 0x9e, 0x92, 0x3b, 0x38, 0x3c,
+  0xb7, 0x38, 0x19, 0x46, 0x18, 0xd3, 0xc7, 0xfb, 0x01, 0x31, 0x16, 0x8e,
+  0x39, 0x78, 0x40, 0xc8, 0x65, 0xb1, 0x0c, 0xd9, 0xfa, 0x3e, 0x99, 0xa0,
+  0x15, 0x86, 0x69, 0x81, 0xd1, 0x5a, 0xb1, 0x63, 0xb6, 0xec, 0x38, 0x43,
+  0xf0, 0x24, 0x8d, 0xdf, 0xdc, 0x8d, 0x99, 0x43, 0xe7, 0x51, 0x67, 0xb8,
+  0x15, 0x3d, 0x07, 0xa2, 0x81, 0x62, 0xe5, 0x02, 0x74, 0x0b, 0x7e, 0xf0,
+  0xb8, 0x3a, 0xb5, 0xe5, 0x70, 0x39, 0x4a, 0xae, 0x62, 0x3a, 0x20, 0xc9,
+  0x65, 0xd1, 0x02, 0xcb, 0x7d, 0x12, 0x9b, 0xf2, 0x88, 0xf1, 0x5a, 0x1f,
+  0x91, 0xea, 0xb9, 0xff, 0x95, 0xe0, 0xae, 0xc1, 0x4c, 0x6d, 0x66, 0xab,
+  0xfc, 0xc8, 0x32, 0x4b, 0x9d, 0xe4, 0x7b, 0x49, 0xfe, 0x46, 0x8b, 0x28,
+  0x29, 0xc0, 0x5b, 0x6f, 0x91, 0x02, 0xda, 0x93, 0x94, 0xd3, 0xe8, 0x4c,
+  0x58, 0x22, 0xac, 0xb4, 0x00, 0x84, 0x3c, 0xe9, 0xee, 0x37, 0x3b, 0x2a,
+  0xf1, 0x5d, 0x89, 0x54, 0x6e, 0x02, 0x1b, 0x46, 0x47, 0x3c, 0xb0, 0xbc,
+  0x99, 0xa4, 0x2b, 0x6b, 0x34, 0x41, 0x0c, 0xf5, 0xa3, 0x2c, 0x09, 0x03,
+  0x97, 0x78, 0xeb, 0xe8, 0x1a, 0xfd, 0xea, 0x45, 0x92, 0xfe, 0x23, 0xab,
+  0xa4, 0x9d, 0x45, 0xcb, 0x2a, 0xe8, 0x32, 0x35, 0x03, 0x05, 0x3a, 0xd9,
+  0xbb, 0x9f, 0x36, 0x29, 0x9f, 0x3a, 0xec, 0x73, 0x87, 0x3b, 0xe1, 0xc7,
+  0x77, 0x91, 0x12, 0xad, 0xe1, 0x84, 0x1f, 0x9c, 0xa2, 0x1b, 0x50, 0x63,
+  0x96, 0x6d, 0x9f, 0x7d, 0x73, 0x2c, 0x6e, 0x28, 0x5a, 0x75, 0x25, 0x9c,
+  0xf1, 0xc3, 0x76, 0x2f, 0x17, 0xa7, 0xfe, 0x89, 0xd3, 0x8f, 0x64, 0x4a,
+  0x24, 0xff, 0xe0, 0x9e, 0x22, 0xd0, 0xbb, 0xb1, 0xa3, 0xe8, 0xa5, 0x31,
+  0x95, 0x07, 0x63, 0x3e, 0x6c, 0x1a, 0x6c, 0x61, 0xc8, 0xc7, 0x12, 0x4c,
+  0xca, 0x78, 0xca, 0xf8, 0x8b, 0xff, 0xf8, 0xe2, 0x01, 0x81, 0x32, 0x6d,
+  0x94, 0x40, 0x54, 0xd9, 0x41, 0x58, 0x91, 0xb6, 0x60, 0x81, 0x52, 0x60,
+  0xaa, 0x31, 0x37, 0xbb, 0xed, 0x58, 0x4c, 0x04, 0xf4, 0xe0, 0xf2, 0x11,
+  0x92, 0x4b, 0xb4, 0x3d, 0x19, 0x71, 0x74, 0x1e, 0x6d, 0xd1, 0xbe, 0x18,
+  0xdf, 0x4c, 0x54, 0x24, 0x41, 0x8c, 0x33, 0xff, 0xbd, 0xe5, 0x1b, 0x69,
+  0xe5, 0xaf, 0x3d, 0x7d, 0xd2, 0xca, 0x7f, 0xc1, 0x93, 0x3b, 0x74, 0x39,
+  0xbd, 0xc4, 0x6f, 0x88, 0x70, 0x46, 0xba, 0xd9, 0xcf, 0xed, 0x35, 0x7a,
+  0xaf, 0x92, 0x85, 0xf7, 0x04, 0x83, 0x00, 0xf8, 0x5d, 0xdd, 0x3d, 0xab,
+  0x25, 0xd4, 0xc0, 0x57, 0x77, 0x35, 0xef, 0x56, 0x97, 0x17, 0x44, 0x75,
+  0x27, 0xab, 0x2e, 0xc8, 0xd9, 0x63, 0x78, 0x7f, 0x67, 0xfb, 0xf3, 0xed,
+  0x78, 0x1c, 0x29, 0xe4, 0x03, 0x8b, 0x76, 0x1d, 0x67, 0x41, 0xbd, 0xfb,
+  0xdc, 0x57, 0x39, 0x0d, 0x02, 0x30, 0x74, 0x63, 0x39, 0xfe, 0x22, 0x26,
+  0xa2, 0x20, 0x1a, 0x23, 0x57, 0x3f, 0xa5, 0xba, 0xf4, 0x1c, 0x06, 0xb2,
+  0xc5, 0x2d, 0xb8, 0x80, 0x01, 0x17, 0x95, 0x10, 0x81, 0x59, 0xf2, 0x11,
+  0x5a, 0x8d, 0xb5, 0x31, 0x0b, 0x86, 0x73, 0xfd, 0x85, 0xcc, 0x58, 0x1f,
+  0xdc, 0x69, 0x6c, 0xca, 0x72, 0xf4, 0x40, 0x05, 0xcf, 0x6f, 0x88, 0xc1,
+  0x9c, 0x4a, 0x26, 0x8c, 0xd4, 0x78, 0xfc, 0xc4, 0xfa, 0x9d, 0x78, 0xa5,
+  0x53, 0xe4, 0x75, 0x55, 0xf1, 0xce, 0xdf, 0xd8, 0xdf, 0xba, 0xb1, 0x0f,
+  0xd7, 0xd2, 0x67, 0xc3, 0x27, 0x2f, 0x18, 0x79, 0x0a, 0x7c, 0x25, 0x5c,
+  0x7b, 0xe2, 0x28, 0x05, 0x43, 0x2f, 0x0b, 0x4e, 0x93, 0x06, 0x04, 0xcb,
+  0xea, 0xaf, 0x9a, 0x87, 0xb7, 0xc2, 0x2c, 0x5a, 0x25, 0x35, 0x51, 0xae,
+  0x0b, 0xf1, 0x09, 0x4d, 0xd8, 0x02, 0x9e, 0xc5, 0x15, 0x87, 0x69, 0x0c,
+  0xba, 0x89, 0xde, 0xe2, 0xef, 0x53, 0xc3, 0xe4, 0x64, 0xd8, 0x06, 0x79,
+  0xd1, 0x54, 0x24, 0xee, 0x41, 0x07, 0x17, 0xa6, 0xef, 0x74, 0xea, 0x7b,
+  0x8c, 0xbc, 0x19, 0x70, 0x94, 0x01, 0xfc, 0x9c, 0x29, 0x5d, 0x51, 0xb6,
+  0xb8, 0xd0, 0xef, 0xe2, 0x1e, 0x35, 0x0e, 0xf2, 0x51, 0x55, 0x5d, 0xef,
+  0x12, 0x3d, 0xec, 0x0e, 0x3f, 0x67, 0x01, 0x50, 0x5c, 0xa0, 0x2b, 0x52,
+  0x52, 0x14, 0x43, 0xaf, 0xd5, 0xda, 0xc9, 0x22, 0x9b, 0x9f, 0x9f, 0x1f,
+  0x87, 0x18, 0x5d, 0x7f, 0xed, 0x7b, 0xff, 0x72, 0xa4, 0xcc, 0x6c, 0xe5,
+  0x91, 0x45, 0x25, 0x99, 0x87, 0xe9, 0x60, 0x96, 0x21, 0x23, 0x33, 0x30,
+  0xef, 0xcc, 0x27, 0x56, 0x9a, 0x46, 0x0c, 0xc1, 0x28, 0x8d, 0xdd, 0xb9,
+  0xd5, 0x82, 0x22, 0xf2, 0x61, 0x7c, 0x17, 0x5b, 0xa7, 0x2c, 0xcc, 0x53,
+  0xab, 0x45, 0x21, 0x86, 0xf4, 0xdb, 0xbe, 0x24, 0xd1, 0xf2, 0x5b, 0xdd,
+  0x3a, 0x0e, 0x2d, 0xa4, 0xac, 0x66, 0xe5, 0x79, 0xc5, 0xcb, 0xcb, 0xd2,
+  0x92, 0x34, 0x7c, 0x38, 0x1d, 0xfd, 0x8c, 0xff, 0x07, 0x37, 0xfb, 0xd7,
+  0x25, 0xef, 0x99, 0xab, 0xfe, 0x16, 0x89, 0xe3, 0xd9, 0x3a, 0x47, 0x30,
+  0xcf, 0xb9, 0x96, 0x7a, 0x4b, 0xcb, 0x51, 0x5e, 0x97, 0xa9, 0x56, 0xbc,
+  0xd4, 0x5a, 0x79, 0x41, 0x90, 0x11, 0x23, 0x46, 0x09, 0x22, 0xc7, 0x9b,
+  0x4e, 0xc4, 0xa6, 0x22, 0x4a, 0x27, 0xc9, 0xff, 0x40, 0xaf, 0xda, 0x80,
+  0x68, 0x4f, 0x08, 0x6e, 0xfb, 0xea, 0xf0, 0xcd, 0xc9, 0xd9, 0x61, 0x13,
+  0xff, 0x58, 0x6a, 0x72, 0x21, 0x4e, 0xad, 0x3d, 0xba, 0xbf, 0x00, 0x4c,
+  0x03, 0x76, 0x6f, 0x7e, 0xc5, 0x6a, 0x7b, 0x9d, 0x7e, 0xff, 0x3a, 0x08,
+  0x26, 0xb0, 0x0a, 0x8e, 0x01, 0x0e, 0xae, 0xd2, 0x58, 0x07, 0x49, 0x86,
+  0x28, 0x74, 0xd3, 0xd7, 0x83, 0x71, 0xc3, 0x93, 0x92, 0x23, 0x88, 0x75,
+  0x94, 0xce, 0x52, 0x49, 0xe4, 0xaf, 0x2a, 0x36, 0x97, 0xbb, 0x66, 0x3b,
+  0x51, 0x46, 0x19, 0xd7, 0x78, 0x81, 0xff, 0x56, 0xaf, 0x65, 0xce, 0x02,
+  0xe1, 0xc4, 0x90, 0x61, 0xe2, 0x3a, 0xf1, 0xbd, 0x08, 0xc4, 0x2b, 0xc2,
+  0x3b, 0xd1, 0x4b, 0x2c, 0x38, 0x93, 0xa3, 0xc3, 0xe5, 0xb6, 0x15, 0x06,
+  0xde, 0x49, 0x45, 0xe8, 0x27, 0x58, 0x13, 0x4d, 0x48, 0x08, 0xd7, 0x31,
+  0x22, 0x5a, 0x51, 0xb7, 0x1b, 0x15, 0xf1, 0x75, 0x3f, 0x52, 0xb7, 0x6c,
+  0x3a, 0xe0, 0xf5, 0x3f, 0xae, 0x27, 0x6a, 0x18, 0xc6, 0x15, 0xa5, 0xc0,
+  0x43, 0x71, 0x94, 0x15, 0xd3, 0xa1, 0x98, 0x5c, 0x1e, 0x8b, 0xc8, 0xb5,
+  0x59, 0x5b, 0x78, 0x7e, 0xdc, 0xed, 0xa1, 0x31, 0x9a, 0x2e, 0xe0, 0xc0,
+  0x4a, 0xdc, 0xeb, 0xf5, 0x60, 0x8d, 0x08, 0x4b, 0x95, 0x32, 0x3f, 0x08,
+  0xc9, 0xeb, 0xb0, 0xaa, 0x30, 0x16, 0x13, 0xd9, 0x09, 0x5a, 0xd4, 0xf7,
+  0xcf, 0x86, 0xc8, 0x02, 0x54, 0xe3, 0xea, 0x7e, 0x5e, 0x23, 0x32, 0x4c,
+  0x5c, 0xf2, 0x45, 0x09, 0x3d, 0xb8, 0x4b, 0xc6, 0x9e, 0x6e, 0x2b, 0xf8,
+  0xaf, 0x5e, 0x3c, 0x7b, 0xc1, 0xc7, 0x0e, 0x01, 0xa7, 0x8a, 0x99, 0xa6,
+  0x69, 0xaa, 0xc8, 0xdf, 0xd7, 0x11, 0x9b, 0x6b, 0xa8, 0x83, 0x00, 0xaa,
+  0xdb, 0x6f, 0x0e, 0x8f, 0x51, 0x36, 0x35, 0xbc, 0xb6, 0xf3, 0xa0, 0xa9,
+  0xe1, 0x4a, 0x93, 0xde, 0xaa, 0xb0, 0x4d, 0x5c, 0x37, 0x5a, 0x5a, 0x94,
+  0x76, 0x21, 0xbd, 0x91, 0xf8, 0x01, 0x3b, 0x0f, 0x96, 0x90, 0x1e, 0xec,
+  0xfe, 0xaa, 0xd1, 0x29, 0x39, 0x70, 0x0e, 0x00, 0x11, 0x26, 0x47, 0x81,
+  0x6c, 0xfc, 0x61, 0xd3, 0x61, 0xdb, 0x6a, 0x65, 0x2e, 0xae, 0x82, 0xb1,
+  0xcc, 0x1a, 0x08, 0xdf, 0xab, 0x9a, 0xbb, 0x04, 0xc3, 0xa2, 0xd5, 0x6b,
+  0xe3, 0xa8, 0x48, 0x04, 0x44, 0x5d, 0x2c, 0x12, 0xa0, 0xf6, 0x31, 0x9f,
+  0xd5, 0xbd, 0xef, 0x06, 0xf2, 0xf0, 0x1c, 0x90, 0xf2, 0xab, 0x79, 0x8a,
+  0x26, 0x44, 0x90, 0x84, 0x3c, 0x47, 0x70, 0xa6, 0xd2, 0xa2, 0x5e, 0x9c,
+  0x08, 0x4f, 0xa3, 0xb9, 0xb2, 0xfb, 0x28, 0xc2, 0x9a, 0x84, 0x0f, 0x06,
+  0xa7, 0x51, 0x2f, 0x8e, 0x56, 0xc1, 0x78, 0x9c, 0x66, 0x97, 0x28, 0xa9,
+  0xdc, 0xec, 0x4d, 0x17, 0x50, 0x8c, 0x25, 0x8d, 0xca, 0x52, 0xd0, 0xd1,
+  0x36, 0x97, 0x50, 0x26, 0xf5, 0x60, 0x20, 0x99, 0x9a, 0x9c, 0x31, 0x3b,
+  0x63, 0x94, 0xca, 0x6a, 0x91, 0x8e, 0x25, 0x4e, 0x59, 0x2b, 0xd8, 0x02,
+  0xb8, 0xa2, 0x43, 0xc0, 0x0c, 0x64, 0x81, 0xbc, 0xf7, 0x37, 0xce, 0xbb,
+  0xa9, 0x9e, 0x1a, 0x83, 0xd5, 0x60, 0x93, 0x87, 0xb7, 0x13, 0x62, 0x75,
+  0xfe, 0x6a, 0x5c, 0x36, 0x4a, 0x71, 0x5d, 0x44, 0xd4, 0xeb, 0xab, 0x72,
+  0x21, 0x90, 0x86, 0x31, 0xbc, 0xc5, 0x40, 0xba, 0x94, 0x27, 0x8d, 0x57,
+  0x54, 0x59, 0x2d, 0x43, 0x91, 0x57, 0x8f, 0x5e, 0x37, 0x80, 0x70, 0x25,
+  0xe9, 0x8c, 0x76, 0x3a, 0xde, 0x5c, 0x90, 0xa8, 0x85, 0x60, 0x5a, 0x7f,
+  0x9f, 0xb8, 0xd6, 0xbc, 0x30, 0x3d, 0xba, 0xf7, 0xdf, 0xc4, 0x9b, 0xd3,
+  0x36, 0x24, 0x1a, 0x57, 0x5a, 0xb0, 0x66, 0x41, 0x2b, 0x56, 0x8a, 0x84,
+  0xa9, 0x81, 0xd1, 0xe4, 0xad, 0x93, 0x6e, 0x2c, 0xfc, 0xf5, 0x8c, 0xf4,
+  0x7d, 0xc4, 0x69, 0x3e, 0xb6, 0x16, 0xfc, 0xa0, 0xad, 0x85, 0x7a, 0xca,
+  0xaa, 0x70, 0x5e, 0x68, 0x84, 0xa8, 0x94, 0x29, 0x4f, 0xf9, 0x40, 0xbc,
+  0x39, 0x3f, 0x51, 0x29, 0x0d, 0xcf, 0xcd, 0xe3, 0xe5, 0x70, 0x0a, 0xf3,
+  0xa4, 0x18, 0xd7, 0xc1, 0x0c, 0xf8, 0x81, 0x78, 0x73, 0x16, 0x13, 0xd6,
+  0x99, 0x19, 0xdb, 0x95, 0x91, 0x49, 0xf2, 0xd8, 0xcc, 0xf8, 0xc1, 0xce,
+  0x2e, 0xd3, 0x87, 0xc2, 0xc3, 0x5b, 0x5b, 0x2c, 0x9b, 0xb3, 0x22, 0x64,
+  0xb1, 0xb1, 0xc1, 0xb6, 0xc3, 0x18, 0x43, 0x6c, 0x83, 0x35, 0x31, 0xa6,
+  0xcb, 0xc8, 0xbd, 0xd5, 0x50, 0x56, 0xc7, 0x3d, 0xb8, 0x72, 0x83, 0xb5,
+  0x8f, 0xce, 0x2a, 0x4c, 0xe7, 0x5a, 0x09, 0xf0, 0x83, 0x60, 0xf0, 0x71,
+  0x71, 0x81, 0xfa, 0xc3, 0xc3, 0x0b, 0x32, 0x9d, 0x5b, 0x7d, 0x62, 0x00,
+  0xbd, 0x3a, 0x5e, 0xa1, 0x19, 0xa4, 0x69, 0xb3, 0x72, 0xb1, 0xc2, 0xf7,
+  0xae, 0x20, 0x7b, 0xdf, 0x5f, 0xe2, 0x2b, 0xc1, 0xd2, 0x35, 0x9a, 0xcf,
+  0x1d, 0xa6, 0x11, 0x78, 0x4c, 0x30, 0xc6, 0x98, 0x07, 0x3e, 0x70, 0xc4,
+  0x77, 0xa6, 0x38, 0xbb, 0x61, 0x9b, 0xb2, 0x13, 0x0d, 0x3e, 0xac, 0x0e,
+  0x71, 0x05, 0xa1, 0xe1, 0x69, 0xdb, 0x6d, 0x99, 0x52, 0x65, 0x00, 0xd6,
+  0x2e, 0xd3, 0xd1, 0x1f, 0xe7, 0x07, 0xe8, 0xb8, 0xd9, 0xa5, 0x3b, 0x93,
+  0xed, 0xf1, 0x2d, 0xee, 0x26, 0xd6, 0x39, 0xff, 0x6a, 0x5d, 0xdb, 0xa5,
+  0x8f, 0xe0, 0x51, 0x83, 0x50, 0x64, 0xd1, 0x55, 0x1a, 0xbb, 0xb4, 0x5c,
+  0xcc, 0x15, 0x4b, 0xb1, 0x22, 0x5b, 0x74, 0xad, 0x63, 0x05, 0x44, 0x73,
+  0x56, 0xac, 0x0c, 0xdb, 0xb1, 0x7a, 0x71, 0xf4, 0x69, 0x3f, 0x44, 0xe1,
+  0xef, 0x21, 0x88, 0xb8, 0x5f, 0x23, 0x3b, 0x0e, 0x0f, 0x30, 0x3c, 0xed,
+  0xb6, 0xcd, 0xf2, 0x26, 0x19, 0x17, 0x47, 0x17, 0x5a, 0x40, 0x16, 0xed,
+  0xe3, 0x27, 0x4b, 0x46, 0xbe, 0x72, 0x8d, 0xcb, 0xd9, 0x23, 0x87, 0x9c,
+  0x1e, 0xf0, 0xb3, 0xe2, 0x24, 0x90, 0x60, 0x56, 0x9d, 0x73, 0xa9, 0x48,
+  0x91, 0x2b, 0x56, 0x7e, 0xd5, 0x08, 0x1a, 0x54, 0xb8, 0x7a, 0x24, 0xfa,
+  0x64, 0x74, 0x38, 0x7e, 0x71, 0xd9, 0xa7, 0x7e, 0xef, 0x47, 0x16, 0x6f,
+  0x4e, 0x87, 0xeb, 0xdf, 0xd2, 0xe5, 0xe9, 0x3b, 0x68, 0x4b, 0xb5, 0xa7,
+  0x00, 0xa1, 0xa5, 0x33, 0x64, 0x3b, 0xe0, 0xbf, 0x88, 0x41, 0xb0, 0xb6,
+  0x36, 0x0d, 0x0e, 0xe1, 0xa0, 0x44, 0x36, 0x2b, 0x2c, 0x63, 0x2f, 0xf1,
+  0x23, 0x9a, 0x0e, 0xb7, 0x65, 0x1a, 0xd6, 0x16, 0x7b, 0x4b, 0x38, 0x67,
+  0x02, 0x21, 0x2c, 0xcc, 0x4d, 0xb8, 0xc4, 0x8c, 0x86, 0x0c, 0x6f, 0x70,
+  0x10, 0xba, 0x64, 0x3f, 0xa1, 0x78, 0x31, 0x23, 0x18, 0x74, 0x2e, 0x75,
+  0x5a, 0x9a, 0x4d, 0xc3, 0xea, 0x4b, 0xc5, 0xda, 0xb9, 0xb5, 0x33, 0xdc,
+  0xe9, 0x27, 0x4d, 0x9d, 0xcc, 0x84, 0x6b, 0xe0, 0x29, 0x49, 0x76, 0x38,
+  0x77, 0xdd, 0x29, 0x4e, 0xc2, 0x1d, 0x57, 0x26, 0x67, 0x7a, 0x52, 0x40,
+  0xc0, 0x91, 0x17, 0xe4, 0xb9, 0x52, 0x4c, 0x67, 0x01, 0xb7, 0x07, 0x4f,
+  0x5f, 0xbc, 0x68, 0x5c, 0x69, 0xa1, 0xe6, 0xfc, 0x6c, 0x7b, 0x5b, 0xca,
+  0xe7, 0xb4, 0x5f, 0xa3, 0x2f, 0x06, 0x2f, 0xf0, 0x62, 0xf3, 0x35, 0x29,
+  0xdd, 0xb6, 0xfa, 0xbd, 0x01, 0x7f, 0x13, 0xe9, 0x0e, 0x46, 0x96, 0x95,
+  0x6f, 0xbd, 0xe0, 0xee, 0x22, 0x6f, 0xe1, 0x61, 0x59, 0xc6, 0xe2, 0xf2,
+  0x92, 0xe3, 0x67, 0xf9, 0x49, 0x70, 0x7e, 0x12, 0x05, 0xef, 0xd2, 0x72,
+  0xd2, 0x9d, 0xee, 0x76, 0x7f, 0xb0, 0xb3, 0x6a, 0xba, 0xb0, 0x09, 0xf0,
+  0x48, 0xb0, 0x9f, 0xac, 0x41, 0x91, 0xf0, 0x2c, 0x31, 0x71, 0xed, 0x86,
+  0x76, 0x68, 0x44, 0x3b, 0x2f, 0x5e, 0xf4, 0x79, 0x64, 0xcf, 0x5e, 0xbc,
+  0x58, 0x19, 0x2f, 0x11, 0x74, 0x73, 0x57, 0x78, 0x9b, 0x14, 0xbf, 0xee,
+  0x89, 0xa6, 0x62, 0x19, 0x3d, 0xde, 0x0f, 0x7f, 0xf3, 0x0a, 0x35, 0x80,
+  0x02, 0x6b, 0x8d, 0xcf, 0xaf, 0x6a, 0xa5, 0x73, 0x73, 0x92, 0xd8, 0xbd,
+  0x69, 0x84, 0xac, 0x5e, 0x74, 0xc3, 0xc0, 0x90, 0x96, 0x67, 0x1e, 0xa4,
+  0x4e, 0xc9, 0x5b, 0x01, 0x11, 0x98, 0xe4, 0x57, 0x79, 0xed, 0x61, 0xd9,
+  0xaa, 0x64, 0x83, 0x76, 0x5b, 0x2a, 0x41, 0x48, 0xa9, 0x19, 0x0d, 0x93,
+  0x59, 0x47, 0xf0, 0xbd, 0x20, 0x46, 0xaf, 0xb3, 0x2e, 0xb0, 0xde, 0x89,
+  0xa3, 0xca, 0xa6, 0x13, 0x97, 0xf6, 0x2c, 0x8f, 0x0f, 0xf0, 0xa0, 0x9e,
+  0x16, 0xe8, 0x71, 0x02, 0x51, 0x9e, 0x22, 0xbe, 0x4f, 0xba, 0xd6, 0xbe,
+  0x3b, 0xa3, 0x97, 0xb8, 0x26, 0xb1, 0xb1, 0x5b, 0x0a, 0xaa, 0x84, 0xdb,
+  0xfb, 0x75, 0x58, 0xaf, 0x82, 0xba, 0xd2, 0x66, 0xb2, 0x9b, 0xf3, 0x3e,
+  0x74, 0xca, 0xb6, 0x88, 0xbd, 0x76, 0x92, 0x59, 0xf1, 0x56, 0xb5, 0xcb,
+  0xb8, 0x76, 0xc4, 0x30, 0xb3, 0x2c, 0x57, 0x97, 0x88, 0xd3, 0x44, 0x1d,
+  0x78, 0x3e, 0x59, 0x5b, 0xbd, 0x4b, 0x2d, 0x11, 0x13, 0x09, 0xd8, 0x76,
+  0xb0, 0x4d, 0x33, 0xb4, 0xc4, 0x47, 0xa4, 0x5a, 0xc7, 0xf0, 0x06, 0x5c,
+  0xa5, 0x5d, 0xf5, 0x8f, 0x4e, 0x60, 0xeb, 0x53, 0xe8, 0x45, 0x4d, 0x40,
+  0xb5, 0x34, 0x0d, 0xda, 0x6f, 0xa9, 0x9b, 0x2c, 0x4b, 0xd0, 0x2d, 0x0a,
+  0xc9, 0xc5, 0x1f, 0xcd, 0x4c, 0x7b, 0x95, 0xd5, 0x41, 0x01, 0x45, 0x83,
+  0x55, 0xe9, 0xc6, 0x34, 0xa9, 0x97, 0x1a, 0xdc, 0x47, 0xb6, 0xc8, 0xd7,
+  0x05, 0x76, 0x26, 0x05, 0x03, 0x13, 0xe3, 0xeb, 0x51, 0x20, 0xcc, 0x6d,
+  0x6f, 0x3b, 0x11, 0xef, 0xbc, 0xd5, 0xba, 0xcb, 0x44, 0xcc, 0x41, 0xd8,
+  0x1d, 0x88, 0x34, 0xb0, 0x10, 0x58, 0xf9, 0xd2, 0x42, 0x42, 0xc8, 0x36,
+  0x87, 0x11, 0x6d, 0x1e, 0x55, 0xfc, 0xb0, 0x5b, 0xce, 0x86, 0x96, 0x7d,
+  0xac, 0x51, 0x85, 0x17, 0x23, 0xb7, 0xfb, 0xe8, 0xfc, 0xe8, 0x7f, 0x1e,
+  0xfe, 0x86, 0x19, 0xd4, 0x67, 0x01, 0xf8, 0x01, 0xbf, 0x16, 0xc7, 0x94,
+  0x75, 0xc5, 0x70, 0x7c, 0x9a, 0x6e, 0x68, 0x16, 0x16, 0x18, 0xf9, 0x2b,
+  0xde, 0x6b, 0x5f, 0x7c, 0x2f, 0x56, 0xe4, 0x91, 0x16, 0x76, 0xb6, 0x08,
+  0xd2, 0x57, 0x42, 0xd8, 0x09, 0x45, 0x03, 0x34, 0xf0, 0x7c, 0x16, 0xab,
+  0x7d, 0x60, 0x62, 0x7a, 0x13, 0x43, 0x73, 0x08, 0x40, 0x46, 0x84, 0x26,
+  0xe8, 0x3d, 0x44, 0x0a, 0x61, 0x01, 0xb8, 0xaf, 0xd0, 0x74, 0xcf, 0x57,
+  0x31, 0x29, 0xa5, 0x78, 0x3c, 0x8a, 0x03, 0x24, 0x90, 0xa4, 0x61, 0xea,
+  0xbf, 0x93, 0x86, 0x64, 0x86, 0xd3, 0xcc, 0xd0, 0x13, 0xe1, 0x18, 0x0c,
+  0x4b, 0xcd, 0x46, 0xd2, 0x07, 0x2b, 0xba, 0xf1, 0x4b, 0x64, 0xc9, 0x57,
+  0x5c, 0xc4, 0x9a, 0x3b, 0x4f, 0x80, 0x75, 0x6e, 0x70, 0x65, 0x82, 0x9c,
+  0xee, 0x91, 0xf8, 0xab, 0x4c, 0xed, 0x6b, 0xf2, 0x70, 0xdb, 0x4e, 0x08,
+  0x10, 0x31, 0x98, 0x17, 0x18, 0x6c, 0xca, 0xa7, 0x5f, 0x55, 0xdd, 0xba,
+  0x96, 0xd9, 0xd5, 0x24, 0xc4, 0xd7, 0x6e, 0xae, 0xc2, 0x9d, 0x8b, 0x8d,
+  0x0e, 0x76, 0x37, 0x0f, 0x02, 0xf7, 0xd2, 0xa9, 0xda, 0x2d, 0x18, 0x0a,
+  0x0e, 0x4e, 0x10, 0x07, 0x22, 0x01, 0x1b, 0xda, 0xbc, 0xcb, 0xcb, 0xd8,
+  0x7c, 0x08, 0xf8, 0x3c, 0x57, 0x3e, 0x0e, 0x60, 0x11, 0x5a, 0x7a, 0x69,
+  0x3e, 0xf1, 0xf9, 0xad, 0x0e, 0xa7, 0x7a, 0x06, 0xb3, 0x3f, 0x42, 0x73,
+  0xda, 0x47, 0x83, 0xfa, 0xad, 0x79, 0xe9, 0xfa, 0xb4, 0x12, 0x77, 0x9d,
+  0xf2, 0xe2, 0x8d, 0x70, 0x80, 0x00, 0x93, 0x66, 0x90, 0x76, 0xbc, 0x3e,
+  0x0d, 0xd3, 0xd5, 0xb5, 0x88, 0x16, 0x0d, 0x77, 0xbb, 0xf8, 0x06, 0x10,
+  0x9d, 0x45, 0x93, 0x76, 0xd8, 0x25, 0x55, 0xdc, 0x54, 0x3b, 0xc9, 0x52,
+  0xc3, 0xfb, 0xa2, 0x3d, 0x25, 0x4a, 0xed, 0xe0, 0xe2, 0x24, 0x77, 0x59,
+  0x99, 0x79, 0x40, 0x42, 0x84, 0xee, 0xd2, 0xe9, 0x1b, 0x26, 0xe7, 0x05,
+  0x3d, 0x1f, 0xa9, 0x75, 0x6b, 0xe9, 0x88, 0x0d, 0x3c, 0x7b, 0x8c, 0xc7,
+  0x83, 0x38, 0x72, 0xd0, 0x98, 0x58, 0x80, 0x9b, 0xf3, 0x8d, 0x41, 0xe0,
+  0xb2, 0xa9, 0x96, 0x06, 0xce, 0x3e, 0x5e, 0xd9, 0x58, 0x49, 0x9c, 0x87,
+  0xb5, 0x91, 0x59, 0x4e, 0x6f, 0x50, 0x24, 0x03, 0x14, 0xe3, 0x02, 0x3a,
+  0x6f, 0xd0, 0xdc, 0x43, 0x79, 0xd6, 0x3b, 0x2f, 0x9a, 0xe1, 0x4f, 0x5c,
+  0x6e, 0x79, 0x4a, 0xd2, 0x62, 0x80, 0xab, 0xb9, 0x22, 0x25, 0xf7, 0xd4,
+  0xc1, 0x4d, 0x8f, 0x69, 0x08, 0x9c, 0x46, 0xa6, 0xa9, 0x87, 0x32, 0xc7,
+  0x00, 0xa9, 0x12, 0xf9, 0x90, 0x0a, 0x01, 0x0d, 0x9e, 0xcc, 0x98, 0x9a,
+  0xc3, 0x8e, 0xa7, 0x53, 0xd4, 0x54, 0xda, 0x57, 0x9b, 0x1a, 0x8b, 0x8a,
+  0xc6, 0x1f, 0x84, 0x2b, 0x59, 0x60, 0xfe, 0x46, 0xb5, 0x69, 0x35, 0x10,
+  0x56, 0x08, 0xee, 0x8d, 0xf4, 0x56, 0xad, 0xe8, 0x05, 0x63, 0x83, 0xab,
+  0xc0, 0x3e, 0xb7, 0x54, 0x29, 0x9d, 0xf2, 0x24, 0xa8, 0x21, 0xd7, 0x09,
+  0xd0, 0xb2, 0x72, 0x9a, 0x5c, 0x1d, 0x84, 0xe3, 0xec, 0x19, 0x27, 0x20,
+  0x07, 0x1e, 0x67, 0x21, 0xf8, 0x01, 0x5b, 0x59, 0x3d, 0xde, 0x12, 0x24,
+  0x5a, 0x90, 0xf8, 0x1c, 0xe8, 0xfc, 0x4e, 0x3d, 0x68, 0x67, 0xf9, 0x75,
+  0x3d, 0x3c, 0x62, 0x7f, 0x08, 0x2a, 0x6d, 0x07, 0xe9, 0xb5, 0xe0, 0xa8,
+  0xe6, 0xd9, 0x8d, 0x58, 0x68, 0x3d, 0xbe, 0xa5, 0x5f, 0x74, 0xe7, 0x02,
+  0xb5, 0xe0, 0xb8, 0xc6, 0x3d, 0xc1, 0xaf, 0x70, 0x29, 0x2a, 0x49, 0x10,
+  0x8c, 0x50, 0x2f, 0x63, 0xad, 0xb9, 0x5b, 0xc7, 0xc5, 0x1d, 0x5f, 0x36,
+  0x28, 0xdb, 0x01, 0x8e, 0x07, 0x1b, 0x1f, 0xb3, 0xbd, 0xf3, 0xe9, 0xc1,
+  0x08, 0x24, 0x88, 0xd8, 0x00, 0x93, 0x00, 0x89, 0x17, 0x75, 0x36, 0x3b,
+  0xa5, 0xca, 0x5a, 0x66, 0xa1, 0x79, 0x74, 0xdf, 0xcd, 0xde, 0xb7, 0xd9,
+  0x98, 0x8d, 0x78, 0xf0, 0x34, 0x52, 0x71, 0x68, 0x71, 0xfb, 0x14, 0xa7,
+  0xe2, 0x79, 0x5f, 0xfe, 0x7a, 0x2e, 0xb8, 0x16, 0x75, 0xd3, 0xde, 0x0c,
+  0x72, 0xd2, 0x42, 0xa5, 0x47, 0xa7, 0x56, 0x6a, 0x6c, 0xf8, 0xa9, 0x41,
+  0xb0, 0x1d, 0x8c, 0x4c, 0xf9, 0x48, 0x69, 0x5f, 0xb4, 0xfb, 0x2e, 0x59,
+  0x29, 0xe9, 0x3d, 0x1c, 0xb2, 0xba, 0x33, 0x7c, 0xd2, 0x3c, 0xa1, 0xac,
+  0xb0, 0xc6, 0xea, 0xe6, 0x71, 0x28, 0x40, 0xaa, 0x9c, 0x5a, 0x8a, 0xfd,
+  0x49, 0x34, 0x27, 0x72, 0x58, 0xd9, 0x06, 0x62, 0x40, 0x7a, 0x12, 0x50,
+  0x82, 0x2d, 0xe5, 0x6d, 0x94, 0x0a, 0x83, 0x9d, 0xb8, 0x26, 0xef, 0xde,
+  0x32, 0x90, 0x22, 0xe9, 0x1a, 0xbb, 0xe0, 0x15, 0x36, 0x99, 0xb5, 0x9a,
+  0xb5, 0x99, 0xd1, 0x6a, 0x4c, 0xf2, 0xb0, 0x5b, 0xd5, 0x4f, 0x2d, 0x51,
+  0x01, 0x35, 0x53, 0xf7, 0xdb, 0x61, 0xae, 0x3d, 0x24, 0x4f, 0x4d, 0xbb,
+  0xa8, 0x82, 0x1a, 0xdf, 0x5d, 0xaa, 0x52, 0x46, 0xcf, 0xee, 0x35, 0x37,
+  0x5f, 0x99, 0xae, 0xe4, 0xbc, 0x0a, 0x44, 0xf2, 0x1e, 0x2d, 0x88, 0x96,
+  0x80, 0xee, 0x4b, 0xc8, 0x1a, 0x54, 0xd7, 0xa7, 0x1f, 0x3f, 0x76, 0x77,
+  0x42, 0x84, 0x71, 0x80, 0xde, 0x23, 0xa6, 0x57, 0x2e, 0xc8, 0x67, 0x1f,
+  0x3f, 0x36, 0xbf, 0x8c, 0xa3, 0xf3, 0x6b, 0x70, 0x1a, 0xcb, 0x36, 0x28,
+  0x53, 0x5c, 0x17, 0xba, 0x5a, 0x69, 0x64, 0x1d, 0x45, 0x8f, 0xbb, 0x4b,
+  0xf3, 0x3a, 0x82, 0x4b, 0xad, 0xca, 0xa9, 0x86, 0x54, 0xf8, 0x2b, 0x8c,
+  0x51, 0x41, 0xaf, 0x89, 0x63, 0x48, 0xe5, 0x41, 0x3d, 0x90, 0xda, 0x20,
+  0xad, 0xdb, 0x52, 0x70, 0x84, 0x3b, 0xeb, 0xc4, 0xbd, 0xc8, 0xb2, 0x73,
+  0xd5, 0xaf, 0xe5, 0xbc, 0xce, 0x91, 0xb6, 0x89, 0xba, 0xed, 0xd4, 0xc2,
+  0x0e, 0x2d, 0x7f, 0x3e, 0x5f, 0xb2, 0x86, 0x2a, 0x8b, 0x8d, 0x3e, 0xed,
+  0x70, 0xc5, 0x96, 0x7d, 0x0a, 0x1f, 0x84, 0x05, 0x7f, 0xb0, 0x29, 0xab,
+  0x0a, 0x20, 0xdc, 0x30, 0x2e, 0xc5, 0x73, 0x97, 0x6c, 0x1f, 0x23, 0xd9,
+  0x01, 0x5e, 0x8d, 0xb0, 0x1a, 0x17, 0xc5, 0x69, 0xda, 0x45, 0xf6, 0x91,
+  0x56, 0x5b, 0xc2, 0xe2, 0x05, 0x28, 0x81, 0xd4, 0x66, 0xbe, 0x04, 0xaf,
+  0x8a, 0x92, 0x36, 0x75, 0xa6, 0x42, 0x11, 0xa4, 0xa2, 0xce, 0x69, 0x97,
+  0xae, 0x5c, 0x3d, 0x77, 0xda, 0x06, 0x29, 0xbc, 0x08, 0xcf, 0x65, 0x51,
+  0xab, 0x08, 0xed, 0x8a, 0x46, 0x2a, 0xef, 0xb4, 0x71, 0x3f, 0x74, 0x51,
+  0xee, 0x86, 0xc7, 0xf0, 0x9f, 0x9f, 0x2d, 0x1c, 0xac, 0xd1, 0x03, 0x55,
+  0xe8, 0x6f, 0x32, 0x57, 0xdc, 0x6b, 0x9a, 0x65, 0x0b, 0x5b, 0xb1, 0x74,
+  0x56, 0x2c, 0xe7, 0xb5, 0x9d, 0x46, 0x3b, 0x8c, 0x90, 0x51, 0x84, 0x0a,
+  0x71, 0xec, 0x57, 0x1d, 0x70, 0x88, 0x16, 0xec, 0x16, 0xb3, 0xea, 0x5b,
+  0x51, 0x2e, 0x82, 0xf2, 0x55, 0x4e, 0xd6, 0x5a, 0x7d, 0x22, 0xfd, 0x96,
+  0x61, 0x2c, 0x6e, 0xdb, 0x1c, 0xd1, 0xe8, 0x62, 0x6f, 0x0e, 0x5b, 0x68,
+  0xd3, 0x6b, 0x91, 0xd4, 0x10, 0x08, 0xab, 0x30, 0x62, 0x5e, 0x81, 0xbf,
+  0x2b, 0xf7, 0x43, 0xfa, 0x45, 0x55, 0xb8, 0xb8, 0x86, 0xba, 0x76, 0x41,
+  0x26, 0xb2, 0x82, 0x5d, 0x56, 0x8b, 0x1c, 0x29, 0x3d, 0x2d, 0xb3, 0x60,
+  0x1d, 0xcd, 0x3c, 0x61, 0xa3, 0x0f, 0x07, 0x1f, 0xc6, 0x71, 0xb5, 0x9a,
+  0xfb, 0x57, 0x11, 0x84, 0xa3, 0xe4, 0x55, 0x34, 0x71, 0xa1, 0xc7, 0x4e,
+  0xae, 0x1f, 0x65, 0xf6, 0x28, 0x2a, 0x6a, 0x2c, 0x59, 0x3d, 0x47, 0xcc,
+  0x72, 0x02, 0x29, 0x5e, 0x15, 0xbc, 0x6e, 0x09, 0x61, 0xe1, 0x2c, 0x36,
+  0x2a, 0x60, 0xcb, 0xa5, 0x3c, 0x0d, 0x86, 0x7e, 0xda, 0x60, 0x68, 0x5b,
+  0x1d, 0xda, 0x26, 0x7f, 0x3c, 0x2d, 0x38, 0x6e, 0xba, 0x72, 0x65, 0x05,
+  0xcb, 0x0e, 0x58, 0x1b, 0x4a, 0xa4, 0x09, 0xb7, 0x99, 0x44, 0xca, 0x2c,
+  0xbf, 0x2b, 0x18, 0x38, 0xc5, 0xd5, 0x3d, 0x74, 0xed, 0xe8, 0x9b, 0x1d,
+  0x2e, 0x2d, 0xed, 0x04, 0x25, 0x55, 0xfb, 0x4d, 0x88, 0x2f, 0x1d, 0x36,
+  0x40, 0x71, 0xe0, 0x68, 0xbe, 0xd6, 0x12, 0x46, 0x7c, 0xc5, 0x75, 0x4c,
+  0x2b, 0x0c, 0x9c, 0x9d, 0x0b, 0xd0, 0x00, 0x62, 0x32, 0x78, 0x3a, 0x91,
+  0x92, 0xd0, 0xd8, 0x00, 0x6a, 0x23, 0x2f, 0x26, 0x88, 0xe6, 0xd0, 0x5a,
+  0xae, 0x9d, 0xdc, 0x4a, 0xc1, 0x46, 0x08, 0x60, 0xb7, 0x7d, 0x9d, 0x6f,
+  0x6e, 0xa2, 0xaf, 0xb8, 0xc4, 0xb3, 0xbe, 0xd6, 0xc0, 0x55, 0x1a, 0xb3,
+  0x4a, 0xaf, 0x71, 0x28, 0x6e, 0x62, 0x61, 0xa0, 0x5d, 0xc5, 0x0a, 0xd0,
+  0xdb, 0xcc, 0xb3, 0xda, 0x7f, 0x21, 0x93, 0xaa, 0x78, 0xe0, 0x55, 0x3e,
+  0xed, 0x26, 0xa7, 0x9d, 0xe7, 0x02, 0x71, 0x56, 0x72, 0xf1, 0x38, 0x2e,
+  0xdf, 0x0b, 0xa0, 0x9c, 0xd7, 0x05, 0x6f, 0x7e, 0xa5, 0x99, 0x0d, 0x57,
+  0x10, 0xe5, 0x24, 0xc4, 0x09, 0x2a, 0xa5, 0xf2, 0x15, 0xea, 0xbe, 0xa3,
+  0x60, 0x73, 0xf1, 0x94, 0x61, 0xe2, 0xea, 0x19, 0xa2, 0x96, 0xd5, 0x8c,
+  0x6e, 0xa9, 0xa1, 0x2b, 0xc9, 0x44, 0x3c, 0x21, 0x52, 0xad, 0x0c, 0x96,
+  0xa7, 0xea, 0xa6, 0x2b, 0x1f, 0xf7, 0x1b, 0xa9, 0x56, 0x90, 0x17, 0xd5,
+  0x47, 0x52, 0x73, 0xf2, 0x1e, 0xe9, 0xa5, 0x5b, 0x02, 0x8d, 0x4a, 0x57,
+  0xe4, 0x54, 0x61, 0x66, 0x5c, 0x90, 0x7f, 0x9b, 0x6c, 0x1a, 0x51, 0xaf,
+  0x55, 0x5a, 0x4d, 0x07, 0x79, 0x9b, 0xf0, 0x05, 0x58, 0xd9, 0xe5, 0x95,
+  0x86, 0x65, 0x2a, 0x19, 0xcc, 0xe1, 0x7c, 0x9f, 0xeb, 0x8a, 0x74, 0xb0,
+  0xce, 0x1f, 0x60, 0x37, 0x4f, 0x76, 0x9a, 0x8a, 0xda, 0x3f, 0x2f, 0xcc,
+  0xd6, 0x8c, 0x89, 0x7c, 0x0e, 0xd1, 0x1a, 0x0c, 0x11, 0xf1, 0x4a, 0x44,
+  0xcd, 0x40, 0xda, 0x30, 0x84, 0xb6, 0x35, 0x22, 0x0b, 0x92, 0x4d, 0x5c,
+  0xea, 0x0e, 0x88, 0x3f, 0x16, 0x48, 0xbb, 0x25, 0x66, 0xc7, 0x4f, 0x89,
+  0x9c, 0x3d, 0x07, 0x01, 0x12, 0x3d, 0x0d, 0x40, 0x3b, 0x51, 0x41, 0x4c,
+  0x10, 0xca, 0xe4, 0x1e, 0x1b, 0x28, 0x04, 0x69, 0x20, 0x61, 0x82, 0x1a,
+  0x2d, 0xc9, 0xcd, 0x0a, 0xf5, 0x08, 0x7c, 0x69, 0xa4, 0x7e, 0x67, 0x23,
+  0xf8, 0xbe, 0xaa, 0xa6, 0x12, 0xc1, 0x66, 0x88, 0x92, 0x82, 0x2e, 0x29,
+  0xb8, 0x92, 0x17, 0xe5, 0xbd, 0x85, 0xaf, 0x32, 0xf4, 0xc8, 0xc5, 0xf1,
+  0x79, 0xa0, 0x96, 0x05, 0x65, 0x11, 0x3a, 0xfc, 0x96, 0xd3, 0xd2, 0x45,
+  0x6b, 0x80, 0x69, 0x19, 0x29, 0x30, 0x59, 0xf0, 0x86, 0xb1, 0x45, 0xb5,
+  0x9f, 0x5b, 0xd5, 0x49, 0x35, 0x70, 0xb6, 0xcf, 0xa1, 0x74, 0x1d, 0xda,
+  0x8d, 0x04, 0x47, 0x87, 0xc6, 0x3e, 0x30, 0x7c, 0x1f, 0xe6, 0x8b, 0x98,
+  0x0d, 0x31, 0xf2, 0xbf, 0x8a, 0x39, 0x43, 0xd5, 0xb2, 0x41, 0xc7, 0x32,
+  0x55, 0x27, 0x8c, 0x69, 0x3f, 0x85, 0x75, 0x3c, 0x9b, 0x8f, 0xcb, 0xfb,
+  0x06, 0x64, 0xfa, 0xe4, 0x13, 0x8a, 0xb5, 0x37, 0xcb, 0xb3, 0x31, 0x3e,
+  0x3f, 0xb3, 0x62, 0x2e, 0x29, 0x95, 0x48, 0x46, 0x1a, 0x7d, 0xe2, 0xc6,
+  0xd8, 0xe4, 0x66, 0x3b, 0xd8, 0xfd, 0x76, 0x73, 0x69, 0xdd, 0x28, 0x4e,
+  0xc3, 0x6a, 0x98, 0x30, 0x03, 0x53, 0xc6, 0x50, 0x65, 0x24, 0x84, 0xcb,
+  0x66, 0xbf, 0x9f, 0x21, 0xf6, 0xb6, 0x37, 0x79, 0x09, 0x43, 0xb6, 0x53,
+  0xf7, 0x1a, 0xbb, 0x8d, 0xf5, 0x89, 0x44, 0x30, 0x12, 0x23, 0x17, 0x02,
+  0x50, 0x0a, 0x50, 0x12, 0xa0, 0xcd, 0x94, 0x8c, 0xfa, 0x06, 0x05, 0x28,
+  0xb2, 0xd2, 0x8a, 0xfd, 0xbf, 0x10, 0xee, 0x53, 0xab, 0xf9, 0xea, 0x53,
+  0xb7, 0xdd, 0x6d, 0xf4, 0xc3, 0xb9, 0x8e, 0x2b, 0x76, 0xc3, 0x54, 0xe8,
+  0x87, 0xf7, 0x02, 0xb3, 0x6f, 0xaf, 0x08, 0x38, 0x08, 0x83, 0xad, 0x76,
+  0xf2, 0x4f, 0xc4, 0xc6, 0xda, 0xe8, 0xa0, 0x6e, 0xa4, 0x2f, 0xf0, 0xed,
+  0x85, 0x22, 0x21, 0x29, 0x32, 0x82, 0xd8, 0x78, 0x62, 0xe9, 0x5e, 0x97,
+  0xd3, 0xf4, 0xae, 0x5b, 0x39, 0x82, 0xa7, 0x4f, 0x8d, 0x0a, 0xaa, 0x07,
+  0x4d, 0x36, 0x8c, 0xec, 0xae, 0xfc, 0x80, 0xbf, 0x3a, 0xdc, 0x3f, 0xbf,
+  0x18, 0xb6, 0xef, 0xb9, 0x4e, 0xba, 0x29, 0xaf, 0x9e, 0x59, 0xce, 0x70,
+  0x28, 0x51, 0xda, 0x89, 0x84, 0x45, 0x85, 0x43, 0xe0, 0x93, 0xcb, 0xc3,
+  0x93, 0xd1, 0x59, 0xfb, 0xcc, 0x26, 0x23, 0x10, 0x81, 0x90, 0x4b, 0xe1,
+  0x04, 0x1e, 0xe5, 0x53, 0x9e, 0x01, 0x8d, 0x8b, 0xf8, 0xfd, 0x4c, 0x33,
+  0x77, 0x2a, 0x2e, 0x98, 0x5b, 0x4c, 0x01, 0x6f, 0x89, 0x6e, 0x5a, 0xa5,
+  0xa0, 0xda, 0xdb, 0xf6, 0xfd, 0xfe, 0xd9, 0xbb, 0xa3, 0x77, 0x5f, 0xef,
+  0x35, 0x2e, 0xea, 0x29, 0x03, 0x0b, 0x6b, 0xdc, 0x82, 0xd4, 0xcd, 0x92,
+  0xd5, 0x12, 0xfc, 0x00, 0x07, 0x62, 0x15, 0x91, 0x1c, 0x68, 0x39, 0xaf,
+  0xec, 0x2a, 0x14, 0x6b, 0xa5, 0x96, 0xe6, 0x04, 0x44, 0x4f, 0x8b, 0x4a,
+  0x5a, 0xf9, 0x8f, 0xbc, 0xc9, 0x30, 0x1f, 0xde, 0x16, 0x37, 0x9d, 0xf8,
+  0xd8, 0xef, 0xf3, 0x39, 0x76, 0x79, 0xf5, 0x26, 0x3b, 0x55, 0x2e, 0x28,
+  0xcf, 0xc2, 0x47, 0xf0, 0x76, 0x15, 0xda, 0x03, 0xca, 0x27, 0xf3, 0x5d,
+  0xff, 0xcb, 0xd7, 0xa0, 0x5b, 0x43, 0x2d, 0xa8, 0x91, 0xf7, 0x4b, 0xd6,
+  0xe0, 0xe9, 0xd3, 0xd6, 0x1a, 0xd0, 0xb5, 0x54, 0x3d, 0x15, 0x1b, 0xe8,
+  0x27, 0x27, 0x66, 0x9c, 0x9f, 0x1c, 0x7c, 0x7b, 0xfe, 0x34, 0x48, 0xcb,
+  0xa8, 0x5b, 0xf6, 0xbc, 0x5c, 0x12, 0x63, 0xf1, 0x46, 0x17, 0xca, 0xe1,
+  0x91, 0x9c, 0x8c, 0x26, 0x63, 0x7c, 0x16, 0x9a, 0xca, 0xa3, 0x7c, 0xd6,
+  0x97, 0xc1, 0x64, 0x33, 0x14, 0x5b, 0x40, 0xf3, 0x62, 0xe9, 0xca, 0xb0,
+  0x05, 0xa0, 0x98, 0x7d, 0xab, 0x89, 0x19, 0x29, 0x72, 0x6f, 0x15, 0x32,
+  0x83, 0x9a, 0x98, 0x9d, 0xa8, 0x49, 0xcd, 0xb5, 0xdc, 0xdd, 0x19, 0x7e,
+  0xd6, 0x6f, 0xcb, 0x99, 0xc4, 0xac, 0x48, 0xf0, 0x9e, 0x2e, 0xb9, 0x67,
+  0x49, 0xca, 0x34, 0x64, 0x34, 0x17, 0xc4, 0x1b, 0x11, 0x08, 0xaa, 0xa7,
+  0x2e, 0xd9, 0x83, 0x61, 0xe0, 0xfc, 0x50, 0x75, 0x7b, 0x53, 0x7d, 0x6a,
+  0x6f, 0x6b, 0xcb, 0x5b, 0x39, 0x25, 0xe8, 0x74, 0xf8, 0xdb, 0xa9, 0x63,
+  0xd2, 0x67, 0xfa, 0xab, 0x88, 0x22, 0xfd, 0x34, 0xaa, 0x58, 0xe1, 0xf9,
+  0xfd, 0x64, 0xaa, 0xf8, 0xfc, 0x11, 0x7e, 0xff, 0x0b, 0x68, 0x02, 0x9e,
+  0xad, 0xff, 0xcd, 0xa8, 0x22, 0xfd, 0x34, 0xb2, 0x48, 0x1b, 0x74, 0xb1,
+  0x02, 0x37, 0xe5, 0xb7, 0x44, 0xae, 0xc6, 0x30, 0x9e, 0x0d, 0x5c, 0x85,
+  0xb5, 0xc7, 0x28, 0xa6, 0x61, 0xb9, 0x67, 0x39, 0x05, 0x44, 0xf3, 0x4c,
+  0x67, 0xbb, 0x01, 0x07, 0x41, 0x16, 0x42, 0xb3, 0x9a, 0x8f, 0x26, 0x5e,
+  0x48, 0x0b, 0x52, 0xd1, 0xe6, 0xa3, 0x1c, 0xc8, 0xd1, 0x96, 0xa0, 0x44,
+  0x0a, 0x75, 0x75, 0xc2, 0xdc, 0x7f, 0x39, 0xad, 0xfd, 0x1f, 0xc1, 0x81,
+  0x9e, 0xf9, 0xfa, 0x78, 0x9f, 0x42, 0x73, 0xcf, 0xae, 0x1d, 0xcd, 0x75,
+  0x50, 0xbb, 0x03, 0xde, 0xf4, 0x1b, 0x27, 0x77, 0x75, 0x05, 0x6d, 0xb7,
+  0xea, 0xa8, 0xca, 0x5d, 0x16, 0xf3, 0x2b, 0xc4, 0xcd, 0x84, 0x45, 0x9c,
+  0x34, 0x39, 0xa8, 0x8b, 0xe7, 0xaf, 0x74, 0xec, 0xe0, 0x46, 0x02, 0x70,
+  0x7e, 0x81, 0xb5, 0xa4, 0x11, 0x74, 0xee, 0xcc, 0x67, 0xbf, 0x86, 0x3d,
+  0x1a, 0xa5, 0x33, 0xe6, 0xcf, 0x48, 0x80, 0x4d, 0x84, 0xbe, 0xe5, 0x60,
+  0x78, 0x0f, 0x4a, 0x2c, 0x46, 0x00, 0x35, 0x53, 0x2c, 0x07, 0xf2, 0x51,
+  0x5a, 0x6f, 0xf0, 0xd1, 0x48, 0xc6, 0xc9, 0xaa, 0xfc, 0xc7, 0xff, 0x53,
+  0x78, 0xe8, 0xb3, 0x4f, 0x23, 0xe7, 0x7f, 0xc5, 0xcd, 0xfa, 0xbf, 0x11,
+  0xf1, 0x46, 0xb6, 0x79, 0x43, 0x31, 0x4d, 0x45, 0x21, 0x92, 0x8b, 0x65,
+  0xd3, 0x83, 0x9b, 0x40, 0x8d, 0xc1, 0x22, 0x1e, 0x9d, 0x7e, 0xf7, 0x5c,
+  0x02, 0x22, 0xcf, 0xbb, 0xf5, 0x8f, 0x8e, 0x5f, 0xef, 0x9f, 0x46, 0x6e,
+  0x86, 0xab, 0xaa, 0x4a, 0x17, 0xb9, 0xd9, 0x4b, 0x1e, 0x31, 0xde, 0x78,
+  0xcb, 0x74, 0xc7, 0x46, 0xa3, 0xdb, 0x65, 0x2a, 0x22, 0x5b, 0x7e, 0xc7,
+  0x33, 0x67, 0x4e, 0xb9, 0xfc, 0xeb, 0xe4, 0x41, 0xf7, 0x65, 0xd4, 0x16,
+  0x94, 0xd7, 0x0f, 0x99, 0x7c, 0xdc, 0x29, 0x6f, 0x25, 0x4c, 0xc7, 0xe7,
+  0xa5, 0xe6, 0x9d, 0xb6, 0x3f, 0x4a, 0xac, 0x41, 0xb1, 0xb4, 0x69, 0xdf,
+  0x7e, 0xe4, 0x33, 0x6b, 0x3d, 0x92, 0xd8, 0xc5, 0x9d, 0x49, 0x5b, 0x0c,
+  0xd5, 0xab, 0xa3, 0x0a, 0xfa, 0xe9, 0x7e, 0x09, 0x93, 0x07, 0xe3, 0x13,
+  0x55, 0x9d, 0x4a, 0x78, 0x99, 0x99, 0xcc, 0x83, 0x31, 0xb8, 0x7d, 0x97,
+  0xba, 0xa7, 0x9a, 0xed, 0x3a, 0x1f, 0xe7, 0x8b, 0x74, 0x9a, 0x34, 0xcc,
+  0x56, 0xd1, 0xfa, 0xbb, 0xed, 0xf2, 0xa5, 0xcd, 0x09, 0x91, 0xbe, 0xdf,
+  0x46, 0xd9, 0x6d, 0x96, 0xfc, 0xb0, 0xaa, 0xe4, 0x41, 0x82, 0xbb, 0x82,
+  0xc6, 0xa9, 0xa5, 0x00, 0x29, 0x1d, 0x48, 0xf8, 0xc6, 0x13, 0xdd, 0x64,
+  0x35, 0xc4, 0x2d, 0x70, 0x62, 0x59, 0xb2, 0xf3, 0xe2, 0xf9, 0x4e, 0x52,
+  0xa5, 0xf7, 0xc0, 0x10, 0xab, 0xf4, 0xfd, 0xa7, 0xc3, 0x27, 0x5b, 0x8c,
+  0x95, 0x98, 0xd7, 0x41, 0xcc, 0x81, 0xb6, 0x1f, 0x40, 0xab, 0x38, 0xe4,
+  0x28, 0x39, 0x4f, 0xef, 0x0e, 0x0f, 0x12, 0xa9, 0xb5, 0x83, 0x7c, 0xf0,
+  0x96, 0x8a, 0x6b, 0x95, 0x3f, 0x69, 0xd5, 0x86, 0x2e, 0x85, 0x3c, 0xa6,
+  0x98, 0x47, 0x96, 0x23, 0x31, 0xda, 0x44, 0xea, 0xc6, 0xdc, 0x8d, 0x84,
+  0x99, 0xa5, 0x90, 0xa9, 0xae, 0x4c, 0x0c, 0x26, 0x2b, 0x5c, 0x93, 0x10,
+  0x12, 0xe0, 0xe1, 0x8a, 0xb2, 0x55, 0x4d, 0xba, 0x7a, 0x19, 0x0f, 0x1e,
+  0x3b, 0x33, 0x00, 0x1b, 0xf6, 0xc2, 0x72, 0x71, 0x1e, 0x71, 0x9b, 0xeb,
+  0x2b, 0x96, 0x57, 0xd1, 0x48, 0xb5, 0x09, 0xca, 0xbd, 0x1e, 0xc5, 0x90,
+  0xaa, 0x7c, 0xa9, 0x20, 0xa9, 0x31, 0x39, 0x65, 0xd8, 0xc5, 0xf5, 0xc1,
+  0xba, 0x5d, 0x52, 0x16, 0x52, 0xa5, 0xa5, 0x80, 0x62, 0x85, 0xbb, 0xfe,
+  0xe9, 0x72, 0x6b, 0xcd, 0xb7, 0x01, 0x29, 0xf3, 0xf3, 0xac, 0x1e, 0x68,
+  0x6b, 0x2f, 0x4f, 0x4e, 0x2f, 0x5e, 0xdd, 0xa6, 0x1d, 0x38, 0x2c, 0x86,
+  0x54, 0xb6, 0x3a, 0x33, 0xde, 0x8c, 0xce, 0x6f, 0x06, 0x49, 0x73, 0xe7,
+  0x2e, 0x77, 0xcc, 0x9e, 0x8c, 0x41, 0x0f, 0x5e, 0x5c, 0xfc, 0xf9, 0xf4,
+  0xf0, 0xd5, 0x4b, 0x36, 0xc2, 0x7f, 0xc1, 0x8e, 0x90, 0xaa, 0x61, 0x93,
+  0x4f, 0xea, 0xfb, 0x45, 0xf7, 0x66, 0xfc, 0xe1, 0xf5, 0xd1, 0xf9, 0xe9,
+  0xf1, 0xc9, 0xc1, 0xab, 0x97, 0x3f, 0xb0, 0xbd, 0x81, 0x56, 0xef, 0x3e,
+  0x78, 0xd7, 0x7d, 0xe6, 0xd2, 0x60, 0xba, 0x05, 0xd4, 0x0f, 0xbf, 0xff,
+  0x70, 0xf8, 0xee, 0xbb, 0x57, 0x2f, 0x6f, 0xd3, 0xb2, 0xcf, 0xf3, 0x93,
+  0xb7, 0xd9, 0x2a, 0x3c, 0xbf, 0xcd, 0xe9, 0xaa, 0x61, 0x32, 0x76, 0x15,
+  0xeb, 0x82, 0x35, 0xba, 0xe0, 0x35, 0x5a, 0x2e, 0x38, 0xd0, 0xf4, 0x81,
+  0x68, 0x43, 0xb9, 0xcb, 0x7c, 0xc9, 0xf2, 0xb6, 0x80, 0x1f, 0x04, 0x37,
+  0x36, 0x53, 0x9d, 0xdf, 0x9f, 0x1d, 0x0f, 0xa3, 0x04, 0xe3, 0xea, 0x3e,
+  0xf9, 0xa2, 0x69, 0x56, 0xa7, 0xd1, 0xb5, 0x8a, 0xc2, 0x5c, 0x07, 0x2e,
+  0xe9, 0x51, 0xb1, 0xc7, 0x1f, 0x0c, 0xad, 0x14, 0xd6, 0xe5, 0xc3, 0xb6,
+  0xef, 0x2d, 0x7b, 0x55, 0x62, 0xab, 0x68, 0x06, 0x39, 0x90, 0x40, 0xb6,
+  0x2c, 0x60, 0x69, 0xda, 0x35, 0xfb, 0xf9, 0x9c, 0x08, 0x84, 0x3c, 0x40,
+  0xa8, 0xe1, 0xf8, 0x1d, 0xcc, 0xed, 0x40, 0xca, 0x21, 0x48, 0xe2, 0x52,
+  0x73, 0x12, 0xc2, 0x88, 0x8b, 0x72, 0x65, 0xc9, 0x18, 0x2e, 0x99, 0x72,
+  0xe3, 0xc6, 0x55, 0x0a, 0xfd, 0x36, 0x93, 0x62, 0x2c, 0x65, 0x31, 0xa8,
+  0x1c, 0x17, 0x49, 0x9b, 0x6c, 0xe0, 0xa3, 0x6b, 0x9c, 0x2b, 0xcb, 0x94,
+  0x9c, 0xd3, 0xc9, 0x69, 0xb9, 0x2e, 0x42, 0x5d, 0x36, 0xd6, 0xd7, 0xe0,
+  0xe8, 0x3a, 0x91, 0xd9, 0x25, 0x30, 0x74, 0x67, 0xce, 0x0e, 0x5b, 0xe1,
+  0x8a, 0x8f, 0x6c, 0x9c, 0x6f, 0xba, 0x34, 0x58, 0x6e, 0xf1, 0xf4, 0xfd,
+  0x45, 0x90, 0x01, 0xdd, 0x09, 0x62, 0xec, 0x1c, 0xc2, 0x96, 0xa0, 0xec,
+  0x17, 0xaa, 0x37, 0xe8, 0xb5, 0x8b, 0xff, 0x99, 0xb7, 0x81, 0x18, 0x43,
+  0x3e, 0x0f, 0x81, 0x2e, 0x3a, 0xa2, 0x9f, 0x82, 0x39, 0x49, 0x0e, 0x20,
+  0xe3, 0x7d, 0x49, 0x7c, 0x1a, 0x4d, 0xbe, 0xdf, 0x66, 0x47, 0xbd, 0x61,
+  0xd8, 0x8f, 0xb8, 0x3c, 0x37, 0x3b, 0xc9, 0x9e, 0xf7, 0xed, 0x0c, 0x0e,
+  0xd7, 0x37, 0x8f, 0xd3, 0xc1, 0xae, 0xca, 0xc8, 0x60, 0x76, 0x67, 0xcf,
+  0xc6, 0x88, 0x28, 0xef, 0xa6, 0x0b, 0x4a, 0x23, 0xd9, 0x8c, 0xa8, 0xaf,
+  0x02, 0x00, 0x31, 0xa0, 0x16, 0x20, 0x70, 0xc4, 0x0a, 0x67, 0xa8, 0x93,
+  0x4f, 0x7d, 0xb9, 0xae, 0xd9, 0x2a, 0x0a, 0x6c, 0x28, 0x9b, 0x18, 0x59,
+  0xd4, 0x3f, 0xb7, 0x04, 0x64, 0x66, 0x85, 0x83, 0x0b, 0x1f, 0xcc, 0xc9,
+  0xb1, 0x98, 0xd1, 0xb8, 0x3c, 0x94, 0x68, 0x1f, 0x5c, 0x74, 0x30, 0x53,
+  0xf9, 0x05, 0x8e, 0x64, 0x0c, 0xb2, 0x27, 0x10, 0x38, 0xcc, 0xfb, 0x22,
+  0x94, 0xa4, 0x99, 0x58, 0x10, 0x2a, 0x86, 0x1a, 0x57, 0xcd, 0x2e, 0x99,
+  0x15, 0xf9, 0xee, 0x55, 0xd2, 0xbb, 0x9a, 0x16, 0xa3, 0x11, 0x4d, 0xaa,
+  0xe7, 0xea, 0x7d, 0x5d, 0x10, 0xdb, 0xbc, 0x82, 0xc8, 0xeb, 0x0b, 0x4d,
+  0xbb, 0xc3, 0x8a, 0x4a, 0xa3, 0xe8, 0x6b, 0x55, 0xce, 0x36, 0xf6, 0xd6,
+  0xea, 0xd7, 0xd8, 0xbe, 0xa2, 0x12, 0xa8, 0xb7, 0x96, 0x2a, 0x08, 0x23,
+  0x7f, 0x6a, 0xfd, 0x77, 0xa2, 0xbb, 0x39, 0xc7, 0xd8, 0x67, 0x03, 0x2b,
+  0xf3, 0x01, 0xcb, 0xd1, 0xf2, 0x8f, 0x79, 0x24, 0xff, 0x97, 0x27, 0x4c,
+  0x13, 0xe8, 0xfd, 0x17, 0x0f, 0x62, 0xa7, 0xcf, 0xff, 0xee, 0xfe, 0xbd,
+  0x67, 0x45, 0x3e, 0xb9, 0xea, 0x7b, 0x50, 0x50, 0x34, 0x52, 0x3f, 0x94,
+  0xdd, 0xb4, 0x2b, 0x1b, 0xcd, 0x67, 0x57, 0x3f, 0xee, 0x0c, 0x76, 0xb6,
+  0xb7, 0xb7, 0x7f, 0x1e, 0x2e, 0x78, 0xc5, 0x2e, 0xd1, 0x2a, 0x43, 0x20,
+  0x06, 0xad, 0x6e, 0xc9, 0xf2, 0x6c, 0x05, 0x77, 0x7d, 0x3d, 0x5e, 0x0c,
+  0xb8, 0x0c, 0x7a, 0x37, 0x1a, 0xe9, 0x62, 0x59, 0xce, 0x8d, 0x06, 0x2e,
+  0x0e, 0x4e, 0x3f, 0xbc, 0x3b, 0x79, 0x7d, 0x78, 0xbc, 0xff, 0x67, 0x57,
+  0xf9, 0xcf, 0x00, 0x34, 0x78, 0x0c, 0x1f, 0xb2, 0xb4, 0xba, 0xff, 0x50,
+  0x65, 0x35, 0x7d, 0xb9, 0xf1, 0x64, 0x13, 0xf1, 0x7e, 0xed, 0x3d, 0x65,
+  0xcf, 0x62, 0x00, 0x40, 0x68, 0xa1, 0x61, 0x61, 0x31, 0xc1, 0x96, 0xbf,
+  0xab, 0x11, 0x01, 0xcd, 0x03, 0xbd, 0x4c, 0x39, 0x3b, 0xa1, 0x03, 0x64,
+  0xa5, 0xee, 0x65, 0x55, 0x3b, 0xb9, 0x1e, 0xc4, 0x9b, 0x54, 0x61, 0x48,
+  0x92, 0x0d, 0x92, 0xf4, 0x3e, 0x7b, 0xba, 0xf3, 0x64, 0xb3, 0xd9, 0xfa,
+  0xd3, 0x56, 0xa4, 0x6f, 0xcd, 0x6e, 0x9e, 0xd1, 0xf4, 0xa6, 0xca, 0xff,
+  0x46, 0xf7, 0x18, 0xe3, 0x19, 0x77, 0xc3, 0xe6, 0x2f, 0x14, 0xa9, 0xa3,
+  0x4e, 0xf8, 0xb7, 0xe4, 0xab, 0xe3, 0x6f, 0x39, 0x69, 0xc1, 0x29, 0x49,
+  0x33, 0x81, 0x86, 0x48, 0xbe, 0x78, 0xb6, 0xb3, 0xbb, 0xe9, 0xca, 0xa0,
+  0x49, 0xd2, 0x13, 0x1f, 0xf6, 0x4e, 0x7c, 0xc4, 0xdf, 0xb2, 0xa0, 0x1e,
+  0x95, 0x70, 0x79, 0xef, 0x36, 0x45, 0x8c, 0x92, 0xdd, 0x9a, 0x00, 0xda,
+  0x85, 0x4b, 0xbf, 0x06, 0xb4, 0x31, 0xa7, 0x4f, 0x75, 0x20, 0xc5, 0x2e,
+  0x7c, 0xf6, 0xd9, 0x90, 0x23, 0xce, 0x4c, 0x53, 0xa2, 0xe1, 0x68, 0xd6,
+  0x55, 0x5c, 0xd6, 0xf9, 0x67, 0xcb, 0x4e, 0x2b, 0x9d, 0x6f, 0xcd, 0xc5,
+  0x9e, 0x17, 0x2a, 0x58, 0x55, 0xf1, 0x75, 0x0e, 0xd0, 0xbe, 0xb4, 0xaa,
+  0x02, 0x50, 0x24, 0x30, 0x4b, 0x93, 0xa1, 0x2c, 0x02, 0x7a, 0xf8, 0xb0,
+  0xf1, 0x8d, 0x84, 0xf1, 0x12, 0xc9, 0x8e, 0xe6, 0xa9, 0x0a, 0xfc, 0x52,
+  0xd3, 0xec, 0x2a, 0x1d, 0xdf, 0xbb, 0x64, 0x1f, 0x6c, 0xc8, 0xa4, 0xe8,
+  0xa0, 0x98, 0x73, 0x0c, 0x3d, 0xfb, 0xc0, 0xa6, 0xd9, 0xe4, 0x0a, 0x11,
+  0x91, 0x52, 0x75, 0x8d, 0x83, 0xb2, 0x4c, 0xd2, 0x97, 0xa1, 0xb9, 0x8a,
+  0x83, 0xe6, 0x81, 0x5f, 0x1d, 0xcb, 0x62, 0x4b, 0xdc, 0xa2, 0x3e, 0x26,
+  0x1b, 0x06, 0x57, 0x7e, 0x64, 0x4d, 0x9f, 0x7e, 0xde, 0xa2, 0xe0, 0x69,
+  0xc5, 0x11, 0x14, 0x2c, 0x23, 0x26, 0x2f, 0xed, 0xb7, 0x2f, 0xba, 0x61,
+  0xa7, 0x09, 0x3b, 0x0f, 0x23, 0xe5, 0xa9, 0x59, 0xb6, 0x44, 0x6c, 0x09,
+  0x87, 0x23, 0xbb, 0xcb, 0x50, 0x02, 0xcf, 0x1c, 0xaf, 0x5b, 0x39, 0x91,
+  0xde, 0xf9, 0xd9, 0x69, 0xaf, 0xaf, 0xba, 0x24, 0x75, 0x30, 0xa0, 0xbf,
+  0x13, 0x1c, 0x3e, 0x4e, 0x3c, 0x7c, 0x46, 0xfa, 0x85, 0x18, 0xa6, 0x30,
+  0x4e, 0x29, 0xf5, 0xd8, 0xf5, 0x59, 0xe1, 0x4b, 0xce, 0x96, 0xb8, 0x2b,
+  0xca, 0x89, 0x98, 0x86, 0x82, 0x24, 0x59, 0x62, 0x16, 0xcd, 0x59, 0x8a,
+  0x51, 0xab, 0xaf, 0x15, 0xa6, 0x56, 0x2e, 0xb3, 0x9e, 0x03, 0xc8, 0xe6,
+  0x18, 0xe6, 0xb0, 0x13, 0x52, 0xfc, 0xb4, 0xb5, 0x90, 0x6e, 0x0c, 0x2f,
+  0xed, 0xb7, 0xd8, 0x42, 0xba, 0xa7, 0x2e, 0xb5, 0xba, 0xb3, 0x43, 0x94,
+  0xe3, 0x15, 0x6e, 0x2f, 0xb0, 0x62, 0x1c, 0xae, 0xf6, 0x78, 0xb9, 0x30,
+  0x8d, 0x70, 0x92, 0x43, 0xe7, 0x47, 0x57, 0xda, 0xf4, 0x0b, 0x68, 0x09,
+  0x6c, 0x55, 0xa4, 0xb0, 0xf0, 0xc3, 0xd3, 0xc3, 0xeb, 0x2f, 0xf9, 0xdf,
+  0xd8, 0xb4, 0xf8, 0x73, 0x67, 0x55, 0xf9, 0x17, 0x4c, 0x2b, 0x98, 0x97,
+  0x5b, 0x51, 0x9d, 0x5b, 0xc7, 0xbc, 0x51, 0x3f, 0xbe, 0x77, 0xb7, 0x3b,
+  0xc3, 0xed, 0xa8, 0x33, 0xfe, 0x0d, 0xd7, 0x82, 0x6e, 0xe2, 0x07, 0xf2,
+  0x84, 0xac, 0x94, 0x00, 0xfb, 0xd3, 0xb5, 0xb0, 0xba, 0xea, 0xc9, 0x06,
+  0x8a, 0xb8, 0x02, 0xe2, 0x92, 0x5f, 0x76, 0x20, 0x25, 0x8d, 0x6a, 0x7d,
+  0x4f, 0x3b, 0x27, 0x93, 0x06, 0xb5, 0xf3, 0xeb, 0x06, 0xb5, 0xf3, 0x9b,
+  0x0e, 0x6a, 0xf7, 0xd7, 0x0d, 0x6a, 0xf7, 0xb7, 0x1a, 0x54, 0x39, 0xb0,
+  0x7c, 0xaa, 0x78, 0x95, 0x8b, 0x33, 0x8d, 0x6c, 0x64, 0xbc, 0xb2, 0x19,
+  0xe3, 0x01, 0x33, 0xff, 0xbc, 0xd0, 0x5b, 0x72, 0x70, 0xa8, 0xef, 0xfa,
+  0xf0, 0x32, 0x11, 0xea, 0xba, 0x61, 0xe5, 0x2a, 0x4f, 0xba, 0x70, 0x5c,
+  0x0b, 0x87, 0x12, 0x3e, 0x57, 0x49, 0x50, 0xc1, 0x72, 0x6e, 0x9d, 0x28,
+  0x4e, 0x03, 0x5f, 0xc0, 0x22, 0x77, 0x77, 0x0b, 0x3f, 0x64, 0xb9, 0x22,
+  0xf1, 0x3f, 0x96, 0xbe, 0xf0, 0xbc, 0x39, 0x61, 0x86, 0xbd, 0x8a, 0xea,
+  0xcd, 0x87, 0x0a, 0xb6, 0xcb, 0xe1, 0xc7, 0x97, 0x4b, 0x0e, 0xdf, 0x91,
+  0x87, 0x93, 0xc9, 0x72, 0xb6, 0x30, 0x48, 0x9a, 0x7c, 0xae, 0x31, 0xf0,
+  0x3c, 0x5e, 0x12, 0xa7, 0xae, 0x0a, 0x93, 0x14, 0xfa, 0x1d, 0xe3, 0x9b,
+  0x01, 0xf3, 0x4e, 0x32, 0x41, 0x69, 0xe7, 0x8c, 0x9c, 0x7c, 0x2e, 0x55,
+  0x6e, 0x69, 0x5b, 0xfb, 0x0e, 0x19, 0x06, 0x0a, 0x92, 0xaa, 0x19, 0xa2,
+  0x26, 0xbd, 0xef, 0x84, 0x7c, 0xb0, 0x6a, 0xc3, 0x01, 0x33, 0x1c, 0xe9,
+  0xa8, 0x5a, 0x25, 0xe7, 0xc7, 0x86, 0xa5, 0xd6, 0xad, 0x9e, 0xe6, 0x0a,
+  0x5b, 0x4d, 0xdc, 0x8f, 0x10, 0xfa, 0x10, 0x10, 0x66, 0x35, 0xb8, 0x65,
+  0x2b, 0x03, 0x7d, 0x3f, 0x62, 0x38, 0x61, 0xe4, 0x73, 0x61, 0x1d, 0x3a,
+  0x76, 0xbd, 0x6a, 0x9c, 0xe7, 0xbf, 0xa5, 0x23, 0x53, 0x7a, 0x45, 0x37,
+  0x0f, 0x6f, 0x58, 0x2a, 0xdb, 0x25, 0xbb, 0x15, 0x6e, 0x96, 0xdf, 0x2d,
+  0x49, 0xff, 0x72, 0xfb, 0xf5, 0xff, 0xa1, 0x0d, 0xa3, 0xff, 0xa7, 0xa5,
+  0xbb, 0xe7, 0x1c, 0xe2, 0x7c, 0x9a, 0x4a, 0x61, 0x71, 0x59, 0x1a, 0xa9,
+  0x8a, 0x30, 0xcd, 0x52, 0x16, 0xb4, 0xcc, 0xcd, 0x70, 0x9d, 0x7d, 0x14,
+  0x03, 0x4d, 0xf7, 0xb2, 0xd7, 0xcc, 0xe4, 0x6b, 0x36, 0x6d, 0xe2, 0xd9,
+  0xfd, 0xf3, 0x83, 0xa3, 0xa3, 0x86, 0xad, 0x97, 0x17, 0x4f, 0xf2, 0xb2,
+  0x10, 0xb1, 0x58, 0x71, 0x86, 0x1a, 0xa7, 0xd9, 0x60, 0xb8, 0x31, 0x44,
+  0x42, 0xc1, 0x64, 0x1e, 0x71, 0xb0, 0x7f, 0x95, 0x5b, 0x7a, 0x7d, 0xaa,
+  0x17, 0xf4, 0x9c, 0x2d, 0x38, 0x9c, 0xf5, 0x73, 0xbd, 0x24, 0xed, 0xa4,
+  0xfa, 0x67, 0x13, 0xe4, 0xf0, 0xb7, 0x26, 0xbd, 0x48, 0xda, 0xf2, 0x69,
+  0xa9, 0x99, 0xd5, 0x92, 0xd7, 0xa3, 0x79, 0xc7, 0x8c, 0x7e, 0xc5, 0x5a,
+  0xba, 0x50, 0x20, 0x8d, 0xd0, 0x06, 0x0b, 0x15, 0x5e, 0x97, 0x2a, 0x06,
+  0xb6, 0xac, 0xa6, 0xc2, 0xaa, 0xc5, 0xa5, 0x77, 0x5a, 0x5c, 0x7a, 0x39,
+  0xcf, 0x3f, 0xc2, 0x4e, 0x9d, 0x71, 0x91, 0x80, 0xb4, 0xbe, 0x5e, 0x51,
+  0x89, 0xfa, 0xc0, 0xca, 0xa4, 0x3a, 0xe0, 0x52, 0x5a, 0x04, 0x94, 0xa2,
+  0x94, 0x3a, 0x8f, 0x89, 0xb4, 0xd1, 0x0f, 0x4d, 0x26, 0x60, 0xd8, 0x11,
+  0x1b, 0xf1, 0x3c, 0xab, 0xd9, 0xcd, 0xd4, 0x52, 0xe2, 0x1a, 0x31, 0x7d,
+  0x83, 0x65, 0xdf, 0xaa, 0x7e, 0x43, 0xb6, 0xd9, 0x5b, 0x29, 0xbb, 0x05,
+  0x99, 0xcf, 0x41, 0xc9, 0x6f, 0xce, 0x8d, 0x34, 0xf9, 0x43, 0x6f, 0x3d,
+  0x41, 0x61, 0x87, 0xdd, 0xc5, 0xcb, 0x3d, 0xb1, 0xc0, 0xad, 0x61, 0x72,
+  0xe2, 0x28, 0x66, 0x30, 0xef, 0x23, 0x1a, 0xb8, 0x2e, 0xc7, 0x1a, 0x5c,
+  0x8a, 0xdf, 0x07, 0x96, 0x48, 0x1f, 0x63, 0x52, 0x92, 0xfa, 0x83, 0xc4,
+  0xfc, 0x7b, 0x0f, 0xe2, 0x2a, 0xd7, 0x8e, 0x1b, 0x62, 0x3f, 0xd0, 0x14,
+  0x49, 0xfd, 0xe0, 0x84, 0x74, 0x38, 0xbe, 0x3a, 0x8a, 0xb6, 0x4c, 0x22,
+  0x9a, 0x4c, 0x18, 0x9f, 0xaf, 0x62, 0x44, 0x2e, 0xa6, 0x79, 0xcd, 0x55,
+  0x99, 0x93, 0x62, 0xde, 0x4c, 0x94, 0x18, 0x17, 0x53, 0xe2, 0x37, 0x1d,
+  0xef, 0x10, 0x8a, 0xb4, 0xcb, 0xd9, 0x84, 0xa9, 0x7e, 0xb6, 0x28, 0xaa,
+  0x2a, 0xd7, 0xa2, 0x1e, 0x62, 0x35, 0xc5, 0x9b, 0x66, 0x21, 0xf1, 0x9d,
+  0x47, 0x30, 0xb1, 0x1b, 0x86, 0x00, 0xe4, 0x3d, 0xda, 0x66, 0x8c, 0x53,
+  0x5a, 0x51, 0x04, 0xb5, 0xc6, 0xb3, 0xcd, 0xe4, 0x92, 0xff, 0x96, 0x88,
+  0x9c, 0x74, 0xbb, 0x2a, 0xf9, 0xee, 0x99, 0xa1, 0x69, 0x7c, 0x9f, 0xcf,
+  0x27, 0xcc, 0x5e, 0xa4, 0x34, 0x82, 0xb3, 0xa0, 0xc9, 0x5a, 0xc3, 0xb7,
+  0x13, 0xe5, 0xb9, 0xe6, 0x6b, 0xb7, 0xd7, 0x95, 0x5a, 0xc5, 0xc6, 0xda,
+  0x9a, 0x09, 0x2a, 0x7c, 0xd0, 0x20, 0x19, 0xee, 0xab, 0x28, 0x23, 0x84,
+  0x1b, 0xd4, 0x9b, 0x75, 0xa0, 0x96, 0x5c, 0x03, 0x65, 0x84, 0x32, 0x55,
+  0x7c, 0xb9, 0xbb, 0x81, 0x27, 0x17, 0x39, 0x9f, 0x87, 0xa1, 0xa3, 0x88,
+  0xf6, 0xf1, 0x44, 0x02, 0x81, 0x6a, 0x3b, 0x1e, 0x8f, 0xb3, 0x25, 0x91,
+  0x73, 0xf9, 0xc4, 0xea, 0x9a, 0xf3, 0x37, 0xd8, 0x34, 0x09, 0x1b, 0xed,
+  0xda, 0x8a, 0xd0, 0x70, 0xdc, 0x3d, 0x0c, 0x6c, 0xad, 0xca, 0x9e, 0xdf,
+  0x9f, 0x0e, 0x2e, 0x8d, 0x92, 0x66, 0x1a, 0x4b, 0x3e, 0x0c, 0x16, 0x23,
+  0x74, 0x31, 0xcb, 0xb2, 0xf5, 0x35, 0x74, 0xb7, 0x54, 0xef, 0x8e, 0xa5,
+  0x85, 0xe8, 0xa2, 0x46, 0x2e, 0x06, 0xce, 0xd3, 0xa9, 0x60, 0xd2, 0x87,
+  0xa5, 0x5b, 0xca, 0xf4, 0x5e, 0xfa, 0xc2, 0x3d, 0x5d, 0xba, 0x2e, 0x5a,
+  0x47, 0x26, 0xdc, 0x30, 0x26, 0x43, 0xc9, 0x7e, 0x4c, 0x5e, 0x17, 0x77,
+  0xf3, 0xc1, 0x31, 0x07, 0x70, 0x27, 0xc7, 0xc5, 0x15, 0x2d, 0xd5, 0x3b,
+  0xa9, 0x30, 0xd5, 0xb6, 0x37, 0x9f, 0xbe, 0x4b, 0x36, 0xde, 0xf3, 0x9c,
+  0x4e, 0x9d, 0x5b, 0x93, 0x9f, 0xdc, 0x4c, 0xe4, 0xea, 0x25, 0xf6, 0x18,
+  0x94, 0x11, 0xea, 0x27, 0x87, 0x3f, 0xec, 0xbf, 0x3d, 0x3d, 0x3e, 0xfc,
+  0x49, 0x94, 0xb2, 0xce, 0x74, 0xf8, 0xe3, 0x2f, 0x03, 0x1b, 0x9c, 0xd5,
+  0x66, 0xa3, 0x4b, 0x7b, 0x7a, 0xbf, 0x9a, 0x17, 0xc8, 0xf1, 0x31, 0x12,
+  0x3c, 0x3f, 0x3f, 0x3d, 0x1a, 0x28, 0xbc, 0x88, 0x70, 0x01, 0x85, 0x65,
+  0xc4, 0x29, 0xd6, 0x94, 0xd5, 0x6f, 0xbb, 0x21, 0xeb, 0x76, 0x22, 0xfa,
+  0x1e, 0x98, 0xbd, 0x2f, 0x50, 0xe6, 0x34, 0x83, 0x38, 0x18, 0x7e, 0x6d,
+  0x98, 0x25, 0x4c, 0x04, 0x1d, 0x7f, 0x22, 0x8b, 0x31, 0x0e, 0x48, 0xb8,
+  0xca, 0xa6, 0x99, 0x42, 0x22, 0xaf, 0xe0, 0xa3, 0xc0, 0xf9, 0xc1, 0x36,
+  0xb2, 0x2f, 0xa9, 0x53, 0x2f, 0x4d, 0x7d, 0x4b, 0x23, 0x87, 0x63, 0xaa,
+  0x71, 0x17, 0x42, 0x23, 0xc2, 0x3b, 0xda, 0x35, 0x37, 0xf7, 0x48, 0x94,
+  0x59, 0x26, 0x7b, 0xbd, 0xdf, 0x50, 0xd6, 0x7b, 0xef, 0x42, 0x41, 0xfe,
+  0xf9, 0xd7, 0x89, 0x46, 0xf7, 0x3c, 0x72, 0x9d, 0x3c, 0x48, 0x16, 0xcc,
+  0x34, 0x8c, 0x30, 0x1e, 0xa6, 0x8c, 0x49, 0xa1, 0xb4, 0xdf, 0x76, 0xf9,
+  0xb9, 0x54, 0x15, 0x1a, 0x11, 0xc8, 0xa1, 0x63, 0x0e, 0x02, 0x8b, 0x70,
+  0xc0, 0x03, 0xad, 0x9d, 0xef, 0xe8, 0xe5, 0xbf, 0x8c, 0x0e, 0x5a, 0xfb,
+  0xde, 0x8d, 0xf4, 0xfc, 0x54, 0x3a, 0x78, 0xff, 0xdb, 0xd2, 0x01, 0x6a,
+  0xe6, 0xbc, 0x7c, 0x7f, 0x76, 0xbc, 0x6a, 0xcb, 0x53, 0xb8, 0x09, 0x18,
+  0x33, 0x25, 0xab, 0xc7, 0xd7, 0xed, 0x14, 0xce, 0x04, 0x9e, 0x35, 0xbe,
+  0xd0, 0x99, 0x27, 0xdf, 0x5b, 0x4d, 0x82, 0x2e, 0x63, 0x37, 0x08, 0x01,
+  0x63, 0x62, 0xd4, 0x28, 0x63, 0x3a, 0x00, 0x0b, 0x2c, 0x00, 0x9a, 0x8e,
+  0x52, 0x85, 0x57, 0x00, 0x78, 0x28, 0x5c, 0x6a, 0x30, 0x56, 0x76, 0x29,
+  0xd9, 0x40, 0xe1, 0x42, 0x62, 0xdf, 0x3d, 0xf5, 0x37, 0xf4, 0xba, 0x8c,
+  0xaf, 0x77, 0xa9, 0xdf, 0xd0, 0x64, 0x36, 0x85, 0x02, 0xbc, 0xc0, 0xf1,
+  0x70, 0xad, 0xa1, 0x55, 0xae, 0x7d, 0x96, 0xd5, 0xb3, 0x12, 0x0e, 0x46,
+  0xae, 0xe5, 0x36, 0x30, 0xae, 0x2f, 0xfe, 0x4e, 0x04, 0x90, 0x90, 0xf0,
+  0xf0, 0xfa, 0xe8, 0xe0, 0xa2, 0x2f, 0x60, 0xb2, 0x92, 0x42, 0xc2, 0xa1,
+  0x42, 0x6d, 0x71, 0x83, 0x73, 0x4c, 0x98, 0x5c, 0x39, 0xbb, 0xc4, 0x2e,
+  0xc1, 0xb0, 0xae, 0x97, 0x4f, 0x71, 0xd1, 0xb4, 0x06, 0x0f, 0x6e, 0x01,
+  0x6f, 0x64, 0xa7, 0xfa, 0x43, 0xb0, 0xe5, 0x2e, 0xbc, 0x8c, 0xeb, 0x1f,
+  0xc9, 0x1c, 0x79, 0x09, 0xf5, 0x16, 0x74, 0x35, 0x6c, 0x98, 0x5e, 0x35,
+  0xbb, 0x36, 0x5d, 0x91, 0xee, 0xeb, 0x8b, 0xf3, 0x49, 0x72, 0x68, 0xb3,
+  0x88, 0x55, 0xb4, 0xfe, 0x52, 0x44, 0xfd, 0x50, 0xa7, 0xa2, 0x84, 0x73,
+  0x35, 0x90, 0x9d, 0x15, 0x75, 0x18, 0x77, 0x9e, 0x65, 0x30, 0x89, 0x4b,
+  0x2d, 0x0a, 0x4d, 0x85, 0x6a, 0xc8, 0x8c, 0x67, 0x24, 0xa1, 0x13, 0x7d,
+  0x97, 0xe0, 0x3b, 0x28, 0x98, 0xc7, 0xa9, 0xe2, 0xa7, 0x79, 0x39, 0x0d,
+  0x94, 0x97, 0x98, 0xeb, 0xd8, 0x4c, 0xdb, 0xee, 0x80, 0x84, 0xaa, 0x50,
+  0xeb, 0x85, 0xaf, 0x32, 0x29, 0xc0, 0x68, 0xca, 0xc7, 0x56, 0x9d, 0x4e,
+  0x6f, 0x04, 0x06, 0x84, 0xf4, 0xba, 0xd2, 0x63, 0x1f, 0x38, 0x07, 0xf3,
+  0x10, 0xae, 0x5e, 0xc6, 0xfc, 0x8e, 0xc2, 0xb0, 0x8f, 0x96, 0x57, 0x57,
+  0x5e, 0x77, 0xa6, 0xd5, 0xc5, 0x1f, 0xec, 0x63, 0x5c, 0xaf, 0x12, 0xd1,
+  0xa3, 0x69, 0xe5, 0x7a, 0xcb, 0xf9, 0x44, 0xf1, 0xca, 0xaf, 0x8b, 0x62,
+  0xd2, 0x1b, 0x26, 0xfb, 0xd0, 0x7a, 0xba, 0x00, 0x4d, 0xa5, 0x37, 0x5b,
+  0xad, 0x7f, 0xb1, 0xae, 0x38, 0x09, 0xbd, 0x6b, 0xd2, 0x43, 0x38, 0xc1,
+  0x88, 0x14, 0xf2, 0x9e, 0x28, 0xc4, 0x8c, 0xc5, 0xc9, 0xc7, 0x80, 0x28,
+  0x6a, 0xfd, 0xe5, 0x7a, 0x12, 0xc5, 0x08, 0xb1, 0xd7, 0xf4, 0x3d, 0xb5,
+  0x07, 0x09, 0xc5, 0x8c, 0x9d, 0xd7, 0x9f, 0xf6, 0xe1, 0x3a, 0x27, 0xed,
+  0x05, 0xf2, 0xb0, 0x00, 0xae, 0x48, 0xd8, 0x55, 0x9b, 0xd4, 0x51, 0x11,
+  0x53, 0x94, 0xb5, 0xd6, 0x40, 0xff, 0x60, 0x03, 0xb5, 0x4a, 0x94, 0xc0,
+  0x62, 0xbd, 0x2c, 0x12, 0x8f, 0x12, 0xd2, 0x85, 0xc6, 0xe4, 0x11, 0x74,
+  0xa3, 0x3e, 0x00, 0x48, 0x25, 0xaa, 0x60, 0x6e, 0xb7, 0x8b, 0xe8, 0xe4,
+  0x60, 0x47, 0x82, 0xf7, 0x20, 0xf3, 0x72, 0x35, 0x16, 0x85, 0x5e, 0x68,
+  0xd3, 0xf3, 0x08, 0xb2, 0x88, 0xca, 0xce, 0x4e, 0x07, 0xf7, 0x45, 0xe8,
+  0x00, 0x6c, 0x56, 0x72, 0x42, 0x71, 0x01, 0xdc, 0xd0, 0xcb, 0x48, 0x41,
+  0xbd, 0x23, 0x41, 0x53, 0xb1, 0x38, 0x87, 0xa0, 0xc4, 0x36, 0xb2, 0xd9,
+  0x2c, 0xe3, 0x8b, 0x59, 0x1d, 0x1e, 0xcc, 0xe6, 0xd0, 0x29, 0xed, 0x38,
+  0xf5, 0xbb, 0x55, 0x00, 0x04, 0x97, 0xc6, 0x6a, 0xdb, 0x3b, 0x65, 0xb8,
+  0x69, 0xc9, 0xb1, 0xd0, 0xa4, 0x5f, 0x6b, 0x0c, 0x68, 0x34, 0x16, 0x1a,
+  0x03, 0x22, 0x41, 0x0c, 0x61, 0xc6, 0x70, 0x13, 0x6e, 0x05, 0x69, 0xc2,
+  0xc1, 0xc5, 0x73, 0xc7, 0x0f, 0x22, 0xb8, 0x8a, 0x8f, 0x68, 0xf2, 0x52,
+  0x04, 0xcf, 0x28, 0x00, 0x82, 0x00, 0x85, 0x68, 0x8c, 0x4f, 0x60, 0x1d,
+  0x4a, 0xb0, 0x74, 0xc8, 0xe1, 0x35, 0x54, 0x7d, 0xb6, 0x66, 0x4e, 0x33,
+  0xf6, 0x58, 0xc3, 0xaf, 0xd8, 0x31, 0xd6, 0xb3, 0x79, 0x96, 0x15, 0x2f,
+  0x69, 0x43, 0xc5, 0xf5, 0xba, 0x74, 0x3e, 0x76, 0xe6, 0x4a, 0x8a, 0x0b,
+  0x96, 0x68, 0x94, 0x16, 0xc9, 0x05, 0x1f, 0x39, 0xa3, 0x94, 0x6b, 0xaf,
+  0xc6, 0xca, 0xeb, 0x80, 0x7b, 0x05, 0xec, 0xcb, 0xa2, 0x88, 0xaa, 0x46,
+  0x4f, 0x1d, 0x6d, 0x83, 0xee, 0xa9, 0xb4, 0x53, 0xc0, 0xa2, 0xc6, 0xf5,
+  0xdd, 0x93, 0x11, 0xf5, 0x80, 0xfd, 0x6e, 0x5e, 0x7f, 0x58, 0xb2, 0x14,
+  0x13, 0x29, 0x9d, 0xa8, 0xea, 0x2a, 0x6d, 0x1b, 0x62, 0x67, 0xc7, 0x33,
+  0xc1, 0x4a, 0x88, 0x8c, 0xb1, 0xf7, 0xa5, 0x59, 0xc5, 0x7a, 0x16, 0xa4,
+  0x50, 0x87, 0x45, 0xe9, 0x5d, 0x9b, 0xda, 0x64, 0xc4, 0xfb, 0x2a, 0x51,
+  0x18, 0x80, 0x03, 0xe2, 0x5d, 0xa3, 0x26, 0x07, 0xbd, 0xa8, 0xfe, 0xed,
+  0x16, 0x20, 0xd1, 0x6a, 0x76, 0xcd, 0xa3, 0x65, 0x5d, 0xf8, 0xcb, 0x8c,
+  0x2b, 0xa0, 0xd6, 0x79, 0xbd, 0xec, 0x3a, 0xdf, 0x46, 0x66, 0x20, 0x80,
+  0xb7, 0x1a, 0x4c, 0x9c, 0x37, 0xc3, 0xbb, 0x94, 0x71, 0x96, 0xd8, 0xe4,
+  0x57, 0x23, 0xa9, 0x40, 0xcc, 0x88, 0x8c, 0x8a, 0x0e, 0x0c, 0xfc, 0xb6,
+  0xbd, 0x6a, 0x9f, 0x7a, 0xf4, 0xa3, 0x6b, 0xfa, 0xde, 0xe8, 0xed, 0xdf,
+  0xff, 0x97, 0x7d, 0x09, 0xd8, 0xe1, 0xbf, 0xdb, 0x4a, 0x59, 0x38, 0x4a,
+  0xda, 0x71, 0x99, 0x82, 0xbf, 0x25, 0xbf, 0xc7, 0xaa, 0xa0, 0x6c, 0x82,
+  0x2c, 0x0d, 0x20, 0xd1, 0xb8, 0xc1, 0xdf, 0x0f, 0x5d, 0x14, 0x8a, 0x36,
+  0x92, 0x26, 0xf3, 0xec, 0x0e, 0x6c, 0xaf, 0xc3, 0xc3, 0xe4, 0x18, 0xff,
+  0x44, 0x37, 0x18, 0xd1, 0x71, 0x4a, 0xc7, 0x91, 0xa3, 0x09, 0x04, 0xc7,
+  0x47, 0x76, 0xf1, 0xa7, 0x52, 0xd9, 0x66, 0x9d, 0x8e, 0x04, 0xf6, 0x5d,
+  0x3f, 0xef, 0x1a, 0x32, 0x39, 0xc4, 0x6b, 0x0f, 0xbb, 0xf1, 0xfb, 0x81,
+  0x60, 0x4a, 0x2b, 0xad, 0x2b, 0x44, 0xbc, 0x7d, 0x26, 0x1b, 0x73, 0x97,
+  0xcf, 0x9f, 0xec, 0x0e, 0x02, 0xb1, 0xb5, 0x1f, 0x8f, 0x92, 0x85, 0x85,
+  0xb7, 0x18, 0x8f, 0xe1, 0x40, 0x65, 0xf7, 0x09, 0xa2, 0x8f, 0x7e, 0xaf,
+  0x98, 0x64, 0x82, 0x1e, 0xb1, 0x84, 0x18, 0x11, 0x14, 0x7f, 0x5e, 0xe9,
+  0xb5, 0x7c, 0x84, 0x78, 0x3c, 0x64, 0x60, 0x2c, 0x8c, 0x90, 0x0f, 0x29,
+  0x0d, 0xf4, 0x03, 0xbc, 0xa4, 0xf2, 0xea, 0x81, 0x7c, 0x34, 0xb8, 0xe0,
+  0x8f, 0xd4, 0xbc, 0x6a, 0xee, 0x73, 0xbe, 0x34, 0x2c, 0x92, 0xbc, 0x9f,
+  0x74, 0xf1, 0xdb, 0x92, 0x58, 0x04, 0x1e, 0x07, 0xa5, 0xd3, 0xe1, 0xee,
+  0x8c, 0xd3, 0x8e, 0xd2, 0x07, 0xa9, 0x73, 0x9a, 0xdf, 0x66, 0x0f, 0xb7,
+  0x86, 0x58, 0x58, 0x8e, 0xcf, 0x99, 0xa5, 0x86, 0x90, 0x28, 0xc2, 0x61,
+  0x10, 0x1a, 0x21, 0x51, 0xa6, 0x02, 0x24, 0x34, 0x7c, 0xac, 0x39, 0x31,
+  0x52, 0xe3, 0x26, 0x0b, 0xaa, 0x6e, 0xd3, 0x15, 0x27, 0x75, 0x0a, 0xd8,
+  0x0d, 0x3c, 0x05, 0xe5, 0x4a, 0xbb, 0x8f, 0xcc, 0xb5, 0x10, 0xff, 0x4b,
+  0xc0, 0x2d, 0xb0, 0x72, 0x4d, 0x30, 0x3c, 0xf0, 0xfd, 0xa8, 0x55, 0x3a,
+  0x89, 0xee, 0x6d, 0x72, 0xc4, 0x32, 0x0b, 0xa4, 0xe2, 0xa5, 0x48, 0x3c,
+  0xa8, 0x58, 0x3e, 0x1b, 0x19, 0x3a, 0xb5, 0xeb, 0xe9, 0xe1, 0xe6, 0xdc,
+  0x28, 0xe4, 0x9a, 0x1e, 0x04, 0x42, 0xda, 0xf0, 0x81, 0xc2, 0xe1, 0xb6,
+  0x53, 0xf5, 0xe2, 0x03, 0xf0, 0x9e, 0x3f, 0x00, 0xfe, 0xf1, 0x22, 0x30,
+  0x29, 0xe1, 0x03, 0xac, 0x97, 0x00, 0x75, 0x2e, 0x17, 0x52, 0xc8, 0x96,
+  0x91, 0x4a, 0x0a, 0x11, 0xc3, 0x3a, 0xa1, 0xcb, 0xdd, 0x95, 0x6b, 0x95,
+  0xad, 0x31, 0x0f, 0x60, 0x2b, 0x77, 0xf3, 0x69, 0x67, 0x60, 0xac, 0xa1,
+  0x7c, 0x00, 0xf2, 0x94, 0xa3, 0x10, 0xba, 0x41, 0xb2, 0x92, 0x2b, 0x87,
+  0xb4, 0xa0, 0xa9, 0x04, 0x65, 0x15, 0x99, 0xdb, 0xcb, 0xb9, 0x45, 0x62,
+  0x3d, 0x3c, 0x30, 0x28, 0x7d, 0x56, 0xcb, 0x9c, 0x49, 0xdf, 0x42, 0x15,
+  0x81, 0xc2, 0x41, 0x03, 0x65, 0xd5, 0xcb, 0x02, 0x6f, 0x68, 0xab, 0x1e,
+  0x99, 0x27, 0xb2, 0xbf, 0x76, 0xd5, 0x9b, 0x98, 0xa7, 0x1e, 0xc8, 0x56,
+  0x66, 0x80, 0x63, 0x82, 0xf9, 0x32, 0x29, 0xb1, 0xb7, 0xe3, 0xd1, 0xc3,
+  0x25, 0xf1, 0x67, 0x7c, 0x95, 0x0f, 0x57, 0xac, 0x8c, 0x98, 0xd5, 0xf5,
+  0xec, 0xf8, 0xa5, 0x91, 0x25, 0x51, 0x99, 0xae, 0xbd, 0x28, 0xb1, 0x68,
+  0xd5, 0x64, 0x05, 0xea, 0x57, 0xb2, 0xe1, 0x60, 0xae, 0xa5, 0x38, 0x99,
+  0x3b, 0x08, 0x62, 0x00, 0xb0, 0x92, 0x64, 0x8f, 0x35, 0x07, 0xee, 0xd2,
+  0xc1, 0x64, 0x59, 0xb1, 0xe1, 0xe6, 0x5d, 0xd6, 0x69, 0xa1, 0x3a, 0xb5,
+  0x73, 0x39, 0x07, 0x93, 0x4a, 0x1c, 0x63, 0x99, 0xde, 0x27, 0xd1, 0xf4,
+  0x99, 0x64, 0xb5, 0xff, 0xf5, 0x59, 0x0c, 0x05, 0x00, 0x31, 0xc0, 0x1f,
+  0xf2, 0x45, 0xc0, 0x91, 0x8e, 0x4e, 0x1d, 0xda, 0x9e, 0x03, 0x71, 0x95,
+  0x50, 0x61, 0x3e, 0x11, 0x01, 0xb2, 0x2b, 0x1f, 0xe2, 0xc7, 0x96, 0x61,
+  0x8c, 0x80, 0x9a, 0x44, 0xd0, 0x83, 0x02, 0x4c, 0x83, 0x81, 0x09, 0x3e,
+  0x6a, 0x9f, 0x3c, 0x3a, 0x05, 0x36, 0xdf, 0xc3, 0xcd, 0xd1, 0x43, 0xcf,
+  0x9b, 0x67, 0xfb, 0xc5, 0xca, 0x29, 0x09, 0xbe, 0xa4, 0x4e, 0x49, 0x86,
+  0x1f, 0x26, 0x85, 0xe9, 0x35, 0x20, 0xda, 0x79, 0x73, 0x98, 0x0f, 0x8f,
+  0x21, 0x98, 0xc3, 0xa3, 0x23, 0xa1, 0xbe, 0x8c, 0x62, 0x2b, 0xbe, 0x7b,
+  0x15, 0xb7, 0x91, 0xfa, 0xa6, 0xbb, 0x3e, 0x71, 0xdf, 0x00, 0xa2, 0xc8,
+  0xe0, 0xa1, 0x31, 0x94, 0xb8, 0x90, 0x9a, 0x44, 0x64, 0xd6, 0x47, 0x31,
+  0x7f, 0x78, 0x0c, 0x86, 0x5e, 0x53, 0xb9, 0x31, 0xd0, 0x10, 0xfc, 0x87,
+  0x4a, 0x5f, 0xb8, 0xc9, 0x2f, 0x0b, 0x83, 0x43, 0xcb, 0xe7, 0x9f, 0xc0,
+  0x85, 0x57, 0xd1, 0x79, 0x77, 0x1c, 0xd6, 0xdd, 0x07, 0x39, 0x45, 0x62,
+  0x86, 0x37, 0x68, 0x3d, 0x07, 0xda, 0x94, 0xea, 0x6a, 0x98, 0x2d, 0x7d,
+  0x20, 0x16, 0xa6, 0x62, 0xfa, 0xc8, 0x5a, 0x70, 0xb8, 0xb0, 0x9b, 0x90,
+  0xe6, 0xc8, 0x99, 0xc4, 0xa0, 0x28, 0x41, 0x8c, 0xf6, 0x02, 0x4e, 0x35,
+  0xe6, 0x84, 0xbb, 0x87, 0x9b, 0x83, 0xe9, 0x20, 0xf5, 0x83, 0x76, 0x49,
+  0x44, 0xc0, 0x86, 0x12, 0x7d, 0x91, 0xae, 0xe3, 0x95, 0x20, 0x3d, 0x51,
+  0x3e, 0x19, 0x59, 0x12, 0xbe, 0x1f, 0xdc, 0xe1, 0xbb, 0xf0, 0x57, 0x46,
+  0xf3, 0x08, 0xfe, 0xc3, 0x84, 0xba, 0xe2, 0xb0, 0xb5, 0xce, 0xd3, 0x63,
+  0x73, 0x88, 0x92, 0xb8, 0xce, 0xc1, 0x4e, 0x5b, 0x30, 0x87, 0x55, 0xa7,
+  0xed, 0xb7, 0x3a, 0x6c, 0x1c, 0x3f, 0xf8, 0xc1, 0xc0, 0xbf, 0x65, 0x24,
+  0x02, 0xf3, 0xe7, 0x21, 0xf1, 0x24, 0x12, 0x54, 0xee, 0x4d, 0xa6, 0x76,
+  0x7b, 0x3a, 0x12, 0x6d, 0x88, 0xd6, 0xcc, 0xb2, 0xf1, 0x50, 0x6b, 0xe6,
+  0xae, 0x77, 0x4d, 0xc1, 0x6e, 0xf0, 0x08, 0xb9, 0x72, 0xc5, 0xa5, 0x68,
+  0x8f, 0x76, 0x10, 0x3e, 0x6d, 0xfc, 0x52, 0xd2, 0xed, 0x93, 0x0e, 0x6a,
+  0x78, 0xcc, 0xe2, 0x5d, 0x6b, 0xa4, 0xfa, 0x27, 0x76, 0xbd, 0x32, 0xb8,
+  0x9e, 0x14, 0x89, 0x6c, 0xe2, 0xf7, 0x81, 0xdb, 0x4a, 0xd9, 0xf8, 0x1c,
+  0x20, 0xb3, 0xcb, 0x33, 0x81, 0x90, 0x4b, 0xb2, 0x6a, 0xb5, 0x2c, 0x05,
+  0x8b, 0xf6, 0x71, 0x11, 0xc1, 0x54, 0x79, 0xd7, 0x1e, 0x47, 0xfc, 0xf2,
+  0xe8, 0x16, 0x59, 0xa9, 0x98, 0x99, 0x2b, 0x46, 0xe5, 0xa6, 0x18, 0x8e,
+  0x4a, 0x3f, 0x6c, 0x8f, 0xc9, 0x0f, 0xea, 0x17, 0x8e, 0x4a, 0xda, 0xfb,
+  0x94, 0x31, 0x55, 0x53, 0xbe, 0xf8, 0xf3, 0xcb, 0x7b, 0xda, 0xf6, 0x8a,
+  0xd4, 0x80, 0x4f, 0x50, 0x16, 0xe4, 0x41, 0x23, 0x3a, 0xc6, 0x41, 0xa1,
+  0x61, 0x97, 0x0d, 0x88, 0x15, 0x34, 0x99, 0xaf, 0xac, 0xe7, 0xd3, 0x80,
+  0x5c, 0x71, 0x22, 0xa4, 0xd3, 0x86, 0x86, 0x8c, 0xc2, 0x0a, 0x2b, 0x1b,
+  0x77, 0x60, 0x6d, 0x45, 0xb2, 0xf5, 0x92, 0xb6, 0x19, 0xbf, 0x0a, 0x9c,
+  0xbc, 0xc3, 0x07, 0x90, 0xa5, 0x5d, 0xff, 0xa4, 0x27, 0xa5, 0x8b, 0x85,
+  0x1e, 0xf1, 0x4f, 0x98, 0xbb, 0x02, 0xe7, 0x31, 0xb9, 0x2b, 0x02, 0x62,
+  0x5f, 0x30, 0xbd, 0xea, 0xa2, 0xb8, 0xf1, 0xd5, 0x47, 0x61, 0x35, 0x7c,
+  0xb8, 0x39, 0xc1, 0x3e, 0xd5, 0x15, 0xdc, 0x3a, 0x3f, 0xff, 0x86, 0x31,
+  0x9b, 0x1d, 0xb7, 0xd9, 0xf2, 0x5e, 0x64, 0x88, 0x7e, 0x9f, 0x70, 0x09,
+  0xba, 0xea, 0xce, 0x58, 0x07, 0x67, 0x6b, 0xfa, 0xd4, 0x65, 0x68, 0x49,
+  0xb5, 0xbf, 0xc5, 0x44, 0x39, 0x31, 0xc0, 0x75, 0xa3, 0xb3, 0x6a, 0x16,
+  0x2c, 0xe7, 0x72, 0x07, 0x8f, 0xd0, 0xb9, 0x0a, 0xc4, 0xcd, 0x39, 0x46,
+  0x67, 0xc4, 0xda, 0x18, 0x5b, 0x3c, 0x57, 0x15, 0x53, 0xfb, 0xcd, 0x37,
+  0x16, 0xea, 0xa0, 0xc0, 0x07, 0xc0, 0x82, 0xfc, 0xf8, 0x90, 0xb9, 0x80,
+  0x5f, 0xbc, 0xa0, 0x65, 0x64, 0xcc, 0x32, 0x64, 0xc9, 0x9c, 0x6d, 0x0f,
+  0x58, 0xad, 0x6e, 0x92, 0xea, 0xf7, 0xa9, 0x63, 0xf6, 0xd9, 0x57, 0x0e,
+  0x98, 0x93, 0xc7, 0x2c, 0x65, 0x48, 0x0d, 0x47, 0x78, 0x94, 0x91, 0xfa,
+  0xf9, 0x49, 0x46, 0x00, 0xb1, 0x47, 0x0b, 0xcc, 0x3f, 0xe3, 0x9e, 0xb8,
+  0x46, 0x7d, 0x81, 0x49, 0x12, 0xe5, 0x39, 0x86, 0xf5, 0x51, 0x36, 0x91,
+  0x6a, 0x72, 0x27, 0xca, 0x33, 0x7b, 0xcb, 0xd8, 0xd8, 0xb4, 0x5c, 0x54,
+  0x0e, 0x1a, 0x2f, 0x39, 0x20, 0x2e, 0x92, 0x85, 0xdb, 0xd1, 0x8c, 0xc7,
+  0xc5, 0x54, 0xfc, 0x7b, 0xb7, 0x80, 0x5a, 0x8f, 0xef, 0x85, 0x97, 0xbb,
+  0xe2, 0x8b, 0xcd, 0x30, 0xbe, 0xa0, 0x0d, 0x45, 0x44, 0xb6, 0xe7, 0x1f,
+  0x65, 0x53, 0xc4, 0xe2, 0x16, 0x55, 0x10, 0xeb, 0x02, 0x32, 0x11, 0x42,
+  0xed, 0xdb, 0xf9, 0x40, 0xdd, 0xca, 0x4f, 0x23, 0x05, 0xd8, 0x01, 0x6d,
+  0x69, 0x5b, 0x28, 0xab, 0xec, 0x9e, 0x90, 0x2f, 0xb5, 0x02, 0x01, 0x6f,
+  0xe8, 0x63, 0xa3, 0x4b, 0xa5, 0x78, 0x68, 0x6b, 0x15, 0x24, 0x50, 0xb0,
+  0x71, 0xcb, 0x64, 0x1f, 0xb3, 0x6e, 0x9d, 0xa6, 0x28, 0x8b, 0xcf, 0x35,
+  0x9a, 0xdd, 0x27, 0x82, 0x05, 0xab, 0x15, 0x84, 0xbb, 0x7d, 0x8a, 0x14,
+  0x1b, 0x13, 0xec, 0x31, 0x54, 0x8c, 0xfc, 0xd3, 0x8f, 0xcf, 0x6f, 0x72,
+  0xe4, 0x25, 0x5e, 0x0b, 0x55, 0x8a, 0x62, 0x47, 0x27, 0xf9, 0x54, 0xa5,
+  0x0a, 0x60, 0x86, 0x9a, 0x45, 0xe3, 0x0e, 0x52, 0x9b, 0x45, 0x88, 0xc1,
+  0xb5, 0x8b, 0x3b, 0x1d, 0x91, 0x0c, 0x04, 0x66, 0xda, 0x55, 0xb0, 0x67,
+  0x81, 0x92, 0x31, 0xf5, 0x33, 0xa9, 0x56, 0x48, 0xa2, 0xf9, 0x94, 0x4f,
+  0x4f, 0x9d, 0x7d, 0xd2, 0x4d, 0xc3, 0xd7, 0x7f, 0xfc, 0xcc, 0x88, 0xc4,
+  0xe6, 0x57, 0xd8, 0x41, 0x5c, 0x37, 0x8f, 0x8e, 0xe5, 0xe0, 0x4a, 0xa0,
+  0x2e, 0x1c, 0x90, 0x9f, 0x42, 0x46, 0x6c, 0x41, 0xc9, 0xb4, 0x34, 0x22,
+  0x26, 0xe4, 0x60, 0x81, 0xc5, 0xfd, 0x62, 0x80, 0xd1, 0xb3, 0xfc, 0x51,
+  0x55, 0x2d, 0x57, 0x5c, 0x73, 0x70, 0xe7, 0x65, 0xd4, 0xe0, 0x8b, 0xac,
+  0x3a, 0x33, 0x75, 0xc8, 0x84, 0x10, 0x6c, 0xe0, 0x2c, 0x5e, 0x1c, 0x72,
+  0x90, 0x49, 0xf1, 0x2b, 0x9f, 0x6d, 0x06, 0xf5, 0x82, 0x85, 0x97, 0x47,
+  0x46, 0xe0, 0xcd, 0xa2, 0xec, 0x9b, 0x43, 0x7e, 0xf2, 0x74, 0xe2, 0x23,
+  0x7b, 0x54, 0x07, 0xf6, 0xc5, 0x13, 0xf7, 0x1e, 0x6e, 0x4e, 0xfd, 0x84,
+  0xbf, 0x61, 0x2c, 0x46, 0x00, 0xcf, 0xf2, 0xf2, 0x47, 0xf3, 0xb2, 0xef,
+  0x6d, 0x6d, 0xfd, 0xfc, 0x63, 0x23, 0x38, 0xe7, 0xcb, 0x9f, 0xf1, 0xcc,
+  0x2f, 0xc2, 0xdd, 0x11, 0x38, 0xb2, 0x98, 0xc1, 0xdd, 0xa2, 0x75, 0xd4,
+  0x0b, 0xd6, 0xf1, 0x53, 0x69, 0x9c, 0x61, 0x30, 0x1c, 0x57, 0xef, 0xb7,
+  0xe8, 0x4a, 0xdf, 0x12, 0x32, 0xd2, 0xac, 0x87, 0xf1, 0xd1, 0x57, 0xd6,
+  0xad, 0x10, 0xb6, 0xed, 0xe1, 0xdc, 0xfa, 0x49, 0x80, 0xe1, 0xd5, 0x8f,
+  0x02, 0xd8, 0x70, 0x87, 0x1c, 0xa2, 0xea, 0x61, 0x97, 0xe0, 0xae, 0x12,
+  0xfd, 0x29, 0x98, 0xe4, 0x58, 0xb0, 0x85, 0x9c, 0x39, 0x2d, 0x56, 0xd1,
+  0x43, 0x02, 0x21, 0xde, 0x15, 0x3e, 0xa2, 0x22, 0x40, 0x0b, 0xd2, 0xa0,
+  0x11, 0x3d, 0xf1, 0x53, 0x89, 0xad, 0xa8, 0x3c, 0xae, 0x68, 0x07, 0x4b,
+  0x9d, 0xeb, 0x5b, 0xc2, 0x6f, 0x04, 0xa5, 0x8b, 0x27, 0x2a, 0xf0, 0xcc,
+  0x5a, 0xd0, 0x42, 0x3b, 0x50, 0xf8, 0x4e, 0x6f, 0x24, 0xcd, 0xe7, 0xb1,
+  0xb8, 0x64, 0x81, 0xfd, 0x89, 0x43, 0x39, 0x3f, 0x8c, 0x73, 0x64, 0x26,
+  0x25, 0x59, 0x69, 0xd9, 0x46, 0xe5, 0xb2, 0x1d, 0xc7, 0x8b, 0x61, 0x21,
+  0x09, 0xa7, 0x5c, 0x8d, 0x7d, 0x14, 0xc1, 0xf4, 0xa2, 0xab, 0x28, 0x17,
+  0x58, 0xf6, 0x18, 0x64, 0x82, 0x0a, 0x0e, 0x55, 0x56, 0x47, 0x22, 0x64,
+  0x64, 0x64, 0x96, 0x94, 0x7f, 0xa4, 0xb1, 0x92, 0xeb, 0x2b, 0xf1, 0x17,
+  0x12, 0x17, 0x82, 0xd2, 0x0d, 0xfc, 0x15, 0xa4, 0x25, 0x87, 0x7d, 0x24,
+  0x00, 0x14, 0xd2, 0x7a, 0x0f, 0x99, 0xe8, 0x36, 0xe2, 0x58, 0x9a, 0xca,
+  0xbe, 0xb1, 0xc2, 0x96, 0xac, 0xa3, 0xd1, 0x85, 0x1c, 0xef, 0x83, 0x38,
+  0xe8, 0xb9, 0xdf, 0xd2, 0x7b, 0xcb, 0x5a, 0x8d, 0xdc, 0x29, 0x24, 0x12,
+  0x89, 0x89, 0x43, 0x8a, 0x46, 0x31, 0xae, 0xaf, 0xac, 0x2d, 0xbf, 0xed,
+  0x8b, 0xad, 0xb8, 0x68, 0x74, 0xfa, 0x5e, 0xfc, 0xca, 0x4a, 0x1c, 0xd1,
+  0xe3, 0x43, 0x84, 0x1c, 0x0c, 0x51, 0x22, 0x0d, 0x78, 0xbf, 0xb9, 0x8c,
+  0x9b, 0x79, 0xc4, 0x3c, 0x2f, 0x44, 0xda, 0x28, 0x0b, 0x0c, 0x69, 0x17,
+  0xb1, 0xf4, 0xd2, 0x2d, 0x53, 0xbd, 0x24, 0x89, 0x67, 0x1a, 0x04, 0xa9,
+  0x67, 0x89, 0x07, 0x62, 0x13, 0x86, 0xa4, 0xe9, 0x6f, 0x83, 0x85, 0xf1,
+  0xa0, 0xf6, 0x64, 0xef, 0xb5, 0x91, 0x15, 0xbe, 0xbb, 0xf7, 0x1a, 0x19,
+  0x1a, 0x04, 0x04, 0x36, 0xb2, 0x15, 0x7c, 0xd9, 0xcc, 0x2e, 0xb5, 0xf2,
+  0x1e, 0xac, 0x75, 0x2d, 0x73, 0xa8, 0x54, 0xe5, 0x03, 0x4c, 0x74, 0xd2,
+  0x4d, 0x14, 0x23, 0xee, 0x0d, 0xf7, 0x9e, 0xfa, 0x35, 0x57, 0x57, 0xe8,
+  0x83, 0xde, 0x8a, 0xf0, 0xb0, 0x2f, 0x7d, 0x2a, 0xfc, 0xef, 0x9f, 0x6e,
+  0x23, 0xd1, 0x55, 0x5b, 0x49, 0xc3, 0x38, 0xbc, 0xdf, 0x3f, 0x49, 0x1f,
+  0x62, 0x98, 0xd0, 0xa5, 0x3a, 0xdc, 0x52, 0x6a, 0xbf, 0xa5, 0x63, 0x2d,
+  0x5e, 0x76, 0x97, 0x5a, 0x3c, 0xb1, 0xbc, 0xd5, 0x41, 0x5b, 0x8e, 0x9c,
+  0xa4, 0x7e, 0x90, 0x16, 0x53, 0x87, 0xac, 0xc4, 0xf8, 0x6e, 0xb2, 0xa1,
+  0xac, 0x6a, 0x33, 0x12, 0x53, 0x83, 0x01, 0x70, 0x5d, 0x70, 0xf8, 0xb4,
+  0x78, 0x53, 0xfe, 0xb8, 0x3a, 0x5a, 0xfe, 0x9f, 0x77, 0x75, 0xfd, 0x20,
+  0x61, 0x55, 0xc2, 0x95, 0x5f, 0xaa, 0xf6, 0xb1, 0x22, 0x67, 0xe2, 0xdc,
+  0xa1, 0x27, 0xb8, 0x4a, 0x52, 0xf6, 0xa6, 0x66, 0x5a, 0x86, 0xf9, 0xe1,
+  0xdc, 0xd6, 0x72, 0xce, 0xc6, 0x89, 0x08, 0x98, 0xbf, 0x27, 0x5c, 0x1c,
+  0x58, 0x97, 0x80, 0x77, 0xd1, 0xb8, 0xfc, 0x5a, 0xad, 0xaf, 0x60, 0xe8,
+  0x02, 0x23, 0x6e, 0x79, 0x1a, 0x81, 0xfb, 0x43, 0xde, 0xf2, 0xa1, 0x76,
+  0x78, 0x50, 0x2b, 0xd5, 0x04, 0x89, 0xb7, 0xad, 0xe6, 0xbe, 0x3e, 0xbc,
+  0xd8, 0x1c, 0x26, 0x67, 0x16, 0x57, 0x81, 0xf1, 0xa1, 0xe4, 0xa2, 0x9e,
+  0xf2, 0xd4, 0x95, 0x2b, 0x33, 0xb0, 0x00, 0x89, 0xfa, 0xca, 0x3e, 0x92,
+  0x9c, 0x35, 0x8f, 0x86, 0xcc, 0x56, 0x28, 0x46, 0x35, 0x9b, 0x31, 0x63,
+  0x0e, 0x82, 0xa3, 0x42, 0x9b, 0x9f, 0xd3, 0x09, 0x81, 0x44, 0xc2, 0x0d,
+  0xbe, 0x3e, 0x3c, 0x3e, 0xbc, 0x38, 0x8c, 0x61, 0x3a, 0x95, 0xd9, 0x14,
+  0x37, 0x58, 0x9d, 0x8d, 0xaf, 0xe7, 0x44, 0xf7, 0x57, 0xbc, 0x25, 0x00,
+  0x77, 0xf8, 0x3e, 0x1b, 0xbd, 0xde, 0xff, 0x8e, 0x8b, 0x97, 0xf2, 0xb9,
+  0x39, 0x3d, 0x3b, 0x39, 0x7d, 0x73, 0xf4, 0xee, 0x75, 0x3f, 0x39, 0x38,
+  0x39, 0xfd, 0x73, 0x3f, 0x79, 0x7b, 0xf2, 0xdd, 0x61, 0x84, 0xf2, 0x38,
+  0x14, 0x2e, 0x12, 0x82, 0xa5, 0x35, 0xb7, 0xc4, 0x98, 0x2e, 0xe1, 0xfd,
+  0x52, 0x6b, 0xaa, 0x99, 0x0d, 0xc1, 0xac, 0xb9, 0x02, 0x24, 0x06, 0x2d,
+  0x3c, 0xad, 0x5d, 0x3f, 0xf9, 0xe6, 0x70, 0xff, 0x75, 0x37, 0x40, 0xf2,
+  0x5c, 0x66, 0xc5, 0xb3, 0x73, 0x53, 0x66, 0x16, 0x4e, 0x0c, 0x93, 0x4d,
+  0xde, 0xac, 0x6f, 0xde, 0x64, 0x01, 0x58, 0x32, 0x1d, 0x03, 0xd8, 0xcb,
+  0x26, 0xab, 0xaa, 0xd8, 0x4b, 0x0c, 0x9a, 0x0b, 0xfb, 0x7b, 0xf8, 0x36,
+  0x44, 0xec, 0x58, 0x58, 0x11, 0x25, 0x51, 0x3f, 0x03, 0x7b, 0x0e, 0xca,
+  0x89, 0x12, 0x91, 0xb2, 0xb8, 0x48, 0x44, 0xa6, 0x0e, 0x59, 0x6a, 0xf4,
+  0x19, 0xc6, 0x18, 0xc4, 0x25, 0x89, 0xc3, 0x48, 0x35, 0x96, 0x6e, 0x94,
+  0x71, 0xb8, 0x4f, 0x85, 0x5a, 0x73, 0x48, 0x37, 0xd7, 0xe0, 0xfa, 0x2e,
+  0x8b, 0x97, 0x75, 0x95, 0x70, 0x36, 0x8b, 0xb7, 0x4a, 0x35, 0x73, 0x1f,
+  0x4b, 0xe8, 0xfb, 0xd4, 0x30, 0xb1, 0x1f, 0xe4, 0xe3, 0x08, 0x3a, 0x0d,
+  0xc4, 0x8a, 0xe5, 0x25, 0x11, 0x67, 0x26, 0x71, 0x2b, 0xd8, 0x27, 0x3d,
+  0x8c, 0xb8, 0x1d, 0x8e, 0xf8, 0x98, 0x5f, 0x23, 0x8f, 0x69, 0x75, 0x08,
+  0x87, 0x1e, 0x18, 0xe5, 0xed, 0x3c, 0x3e, 0xbe, 0xa6, 0x05, 0x81, 0xf0,
+  0x87, 0x4e, 0x51, 0x32, 0x55, 0xec, 0x65, 0x2b, 0xe3, 0xf9, 0x37, 0x7a,
+  0x93, 0x05, 0xf9, 0x11, 0x52, 0x56, 0xe3, 0x98, 0x47, 0xe3, 0x4a, 0x9f,
+  0x23, 0x74, 0x0b, 0xd0, 0x3e, 0xc4, 0x2e, 0xe6, 0x52, 0x7e, 0x33, 0x52,
+  0xc6, 0x71, 0x20, 0x0a, 0x47, 0x15, 0x14, 0xc6, 0xb2, 0xc0, 0x3b, 0xc5,
+  0x1a, 0x73, 0xc6, 0x79, 0xcb, 0xfb, 0x4e, 0xc7, 0x63, 0xda, 0xdc, 0x48,
+  0xd2, 0x56, 0xe1, 0x8f, 0xf6, 0x93, 0xed, 0x56, 0xd5, 0xa8, 0x2a, 0x19,
+  0x48, 0xad, 0x77, 0xc9, 0x22, 0xec, 0xa6, 0xcc, 0xbe, 0x59, 0xc1, 0x0b,
+  0xc3, 0x8a, 0xa1, 0xba, 0xf6, 0x41, 0xf2, 0xd8, 0xf1, 0x11, 0x9d, 0x00,
+  0x1e, 0x7a, 0x27, 0x71, 0x06, 0x51, 0x87, 0xa8, 0xf2, 0x9e, 0xf3, 0xa1,
+  0xc0, 0x7a, 0x53, 0x5b, 0xdd, 0x8e, 0x39, 0xca, 0x38, 0xda, 0x33, 0xc2,
+  0x8f, 0x1f, 0xe9, 0xba, 0x63, 0x3b, 0x3c, 0x3b, 0xbc, 0x38, 0xfb, 0x84,
+  0x48, 0x8c, 0x0d, 0x8e, 0x7a, 0xde, 0x4c, 0x82, 0x6e, 0x7d, 0xbf, 0xfc,
+  0xd5, 0x23, 0xfd, 0x3e, 0x94, 0xfd, 0xff, 0x24, 0xe6, 0xf0, 0xde, 0x10,
+  0x84, 0xfe, 0xc8, 0x2c, 0x11, 0x5c, 0xbd, 0xba, 0xb7, 0x6f, 0x0e, 0x8f,
+  0x4f, 0xbb, 0xb3, 0xfc, 0xee, 0xec, 0xcd, 0x9f, 0x87, 0x0f, 0xe4, 0x75,
+  0xff, 0xf3, 0xe3, 0xf2, 0x3f, 0xa6, 0x75, 0x1d, 0xaf, 0x77, 0x51, 0xa5,
+  0x52, 0x71, 0xcd, 0xc2, 0xd2, 0x50, 0x49, 0x42, 0xca, 0xae, 0xd6, 0x2b,
+  0x61, 0xda, 0x69, 0xea, 0x1d, 0x21, 0xcb, 0x04, 0x52, 0x50, 0x0d, 0x11,
+  0x7b, 0x2a, 0x55, 0x4c, 0xe7, 0xbe, 0x7a, 0xad, 0x46, 0x05, 0xf1, 0x50,
+  0xf2, 0x11, 0xd7, 0x0c, 0x6b, 0xc0, 0x67, 0x44, 0x44, 0x7d, 0x0d, 0xd0,
+  0x47, 0x6f, 0x8e, 0x11, 0x7e, 0x9c, 0x5c, 0x0d, 0x8b, 0x32, 0x67, 0xa3,
+  0xa6, 0x56, 0x9a, 0x95, 0xd6, 0x12, 0x14, 0x54, 0xe7, 0x63, 0xcd, 0x47,
+  0x28, 0xd6, 0x9c, 0x46, 0x79, 0x25, 0x86, 0x85, 0xd1, 0x6c, 0x77, 0x06,
+  0x7b, 0x08, 0x02, 0xc0, 0x5c, 0x9b, 0x1e, 0x1c, 0x36, 0x1a, 0x0d, 0x59,
+  0xdd, 0xd3, 0x46, 0xcf, 0x12, 0xcf, 0x7c, 0x4d, 0x3f, 0x73, 0x53, 0xf6,
+  0x73, 0xe5, 0x38, 0xbc, 0xbb, 0xb4, 0x04, 0x00, 0x53, 0x47, 0x93, 0xca,
+  0x49, 0x93, 0x6a, 0x6c, 0xd8, 0x3d, 0x02, 0x5f, 0xd9, 0xbb, 0xa4, 0xe5,
+  0x9b, 0xf8, 0xdf, 0x48, 0xc1, 0xbe, 0xd4, 0xfb, 0xc7, 0x78, 0x42, 0xec,
+  0x85, 0xd7, 0xfa, 0x43, 0xf2, 0xb2, 0x94, 0x1a, 0x1a, 0xb5, 0xbc, 0x4a,
+  0x1a, 0x4f, 0xde, 0x01, 0xc4, 0x09, 0x3a, 0x14, 0xec, 0xae, 0x7e, 0xc3,
+  0x4d, 0xc9, 0xb5, 0x74, 0x81, 0x42, 0x24, 0xf6, 0x46, 0xea, 0x3e, 0x78,
+  0xa1, 0x33, 0x27, 0x2b, 0x0e, 0x1c, 0x20, 0x90, 0x06, 0x43, 0x32, 0x42,
+  0xdd, 0xb1, 0x82, 0x39, 0x9e, 0xab, 0xff, 0xf9, 0xc1, 0xd8, 0x62, 0x8d,
+  0xe1, 0xaf, 0x02, 0x80, 0x3c, 0x91, 0x54, 0x97, 0x4e, 0xbb, 0x46, 0xf1,
+  0xe9, 0x14, 0x8c, 0x39, 0xc1, 0x9a, 0xac, 0x45, 0x1d, 0xc4, 0xac, 0x85,
+  0xd6, 0xe3, 0xa0, 0xf2, 0x03, 0x62, 0x1a, 0xe9, 0x4b, 0xa2, 0x64, 0x91,
+  0xa5, 0xe8, 0x9e, 0xe8, 0x0b, 0xc4, 0x10, 0x8a, 0xe7, 0xea, 0x7b, 0x83,
+  0x88, 0x21, 0x8d, 0x0d, 0x86, 0x2b, 0x2e, 0xb1, 0x7f, 0xde, 0x29, 0xfe,
+  0xb3, 0x27, 0x0a, 0x59, 0xc4, 0x97, 0xf8, 0xe3, 0x17, 0x91, 0x45, 0x50,
+  0x96, 0x4a, 0x9c, 0x97, 0x1b, 0x44, 0xfe, 0x0d, 0xfa, 0x18, 0x74, 0xd2,
+  0xce, 0x27, 0x9b, 0x0a, 0x53, 0x13, 0x6c, 0xb7, 0x9a, 0x06, 0x59, 0xf4,
+  0x68, 0x52, 0x45, 0x83, 0x24, 0x22, 0x2a, 0xbc, 0xec, 0xb1, 0x64, 0x5b,
+  0xd1, 0x03, 0x4f, 0xb6, 0xf9, 0x42, 0xc6, 0xd9, 0xc9, 0x7e, 0x4b, 0x78,
+  0xca, 0xbf, 0x01, 0x9e, 0x92, 0x2b, 0x4f, 0xe3, 0x00, 0xbc, 0x9c, 0xa4,
+  0xb0, 0x87, 0x03, 0xac, 0x82, 0x9a, 0xfe, 0xe2, 0xbf, 0xe3, 0x85, 0x9f,
+  0x51, 0xdb, 0xfc, 0x4d, 0x13, 0x48, 0x43, 0x1c, 0x2e, 0xac, 0x8f, 0x72,
+  0xe1, 0x3b, 0x94, 0xd4, 0x9d, 0x15, 0x13, 0xc5, 0x66, 0x4c, 0x6b, 0x5b,
+  0xe9, 0x08, 0xd7, 0x50, 0x24, 0x3d, 0x2d, 0x21, 0xc8, 0xe7, 0x10, 0xe9,
+  0x85, 0xb4, 0xb4, 0x3c, 0xf2, 0x15, 0x4d, 0xaa, 0x87, 0x80, 0xbf, 0x8d,
+  0x10, 0x9e, 0x18, 0x57, 0x3b, 0xd3, 0x31, 0x5d, 0x32, 0x0d, 0x05, 0x61,
+  0x3c, 0x24, 0x82, 0x54, 0x15, 0xc1, 0x4e, 0x44, 0x11, 0x23, 0x27, 0xbe,
+  0x08, 0x56, 0x2d, 0x47, 0xa3, 0xbb, 0x8a, 0xcf, 0x34, 0xc8, 0xca, 0x20,
+  0x46, 0x39, 0xa6, 0x05, 0xe5, 0x53, 0x52, 0x17, 0x81, 0x1a, 0xd3, 0x1f,
+  0xad, 0x48, 0x28, 0x57, 0xe1, 0xb6, 0xf8, 0xaf, 0x89, 0x57, 0x58, 0x64,
+  0x48, 0xc9, 0xc6, 0x8c, 0xa7, 0xb2, 0x69, 0x4e, 0xb0, 0xe8, 0x56, 0x78,
+  0x48, 0x54, 0x54, 0x6f, 0x74, 0x38, 0x6a, 0xd4, 0x32, 0x37, 0xc2, 0x18,
+  0x6a, 0x74, 0x07, 0x03, 0x34, 0x4d, 0x4a, 0xc9, 0xb6, 0x96, 0xa4, 0x93,
+  0x1e, 0x13, 0x4f, 0x2a, 0x3a, 0x67, 0xe7, 0x81, 0x15, 0x04, 0x0b, 0xdf,
+  0x37, 0xd3, 0x25, 0x83, 0x27, 0x26, 0x1b, 0x83, 0x4d, 0x27, 0x1f, 0xa3,
+  0x1a, 0xa6, 0xd0, 0x46, 0xd7, 0xe7, 0x9f, 0xfa, 0x40, 0x61, 0x97, 0xd2,
+  0x22, 0x85, 0x5d, 0xf4, 0x34, 0x5a, 0x2e, 0x1a, 0xf7, 0xb6, 0x25, 0x86,
+  0x77, 0x63, 0x97, 0x79, 0x37, 0xa6, 0xbf, 0xd3, 0xd6, 0x3c, 0xbb, 0x0b,
+  0xdb, 0xf2, 0x5a, 0xaa, 0x6b, 0xef, 0x37, 0x3c, 0x53, 0xd7, 0x22, 0xbf,
+  0x4f, 0x17, 0x1d, 0xeb, 0x0d, 0x87, 0x48, 0xf0, 0x17, 0x6a, 0x65, 0x11,
+  0x19, 0x32, 0x95, 0x0c, 0x01, 0x14, 0xef, 0x0d, 0x21, 0x12, 0x1d, 0x38,
+  0x99, 0x65, 0x40, 0xb4, 0xe5, 0xec, 0x6b, 0xbe, 0x52, 0x1d, 0xa6, 0x47,
+  0xa3, 0xcc, 0xd2, 0x5b, 0xa9, 0x85, 0x37, 0xef, 0x06, 0x67, 0xbd, 0xc5,
+  0x87, 0xc3, 0xe4, 0xb5, 0x66, 0x7a, 0x20, 0xc1, 0x69, 0xa9, 0xe3, 0x42,
+  0xe0, 0x7f, 0xd0, 0xcc, 0x77, 0x9a, 0x96, 0x15, 0x21, 0x14, 0x7d, 0xbf,
+  0x6a, 0xa4, 0x8a, 0x88, 0x87, 0x48, 0x10, 0x19, 0xd5, 0x4c, 0x32, 0xcd,
+  0x47, 0xf8, 0xdb, 0x2c, 0xc6, 0x39, 0x42, 0x95, 0xab, 0x61, 0xcc, 0xe6,
+  0xa3, 0x20, 0x01, 0x02, 0x2e, 0xe1, 0xbd, 0x45, 0xe6, 0x5f, 0xb1, 0x26,
+  0x8a, 0x4b, 0xcd, 0xa3, 0xb2, 0xb6, 0x23, 0x98, 0x20, 0xd0, 0x53, 0x9f,
+  0x94, 0x13, 0x78, 0x54, 0xef, 0xf9, 0xc9, 0x32, 0x2d, 0x45, 0xf5, 0x9e,
+  0xdf, 0x98, 0xc1, 0x5d, 0xec, 0x48, 0xd9, 0x78, 0x59, 0x37, 0x01, 0x69,
+  0x83, 0x31, 0xa9, 0x60, 0x80, 0x21, 0x6d, 0xc0, 0x83, 0xa6, 0x42, 0x7f,
+  0xef, 0xd4, 0xac, 0xed, 0x7b, 0xbd, 0x4d, 0x43, 0x1f, 0x41, 0xe8, 0xbe,
+  0x33, 0xc3, 0xc7, 0x80, 0x45, 0x6c, 0xc8, 0x65, 0x26, 0xd0, 0x94, 0x48,
+  0xe7, 0x87, 0x70, 0x14, 0xed, 0x9e, 0x28, 0xb2, 0x8c, 0xf6, 0xfe, 0x26,
+  0x4b, 0xb9, 0xc2, 0x56, 0xd0, 0xb9, 0x33, 0x6c, 0x5e, 0xea, 0x57, 0x9d,
+  0xbc, 0x97, 0x4e, 0xcf, 0x30, 0x3d, 0x0c, 0x93, 0x7d, 0x97, 0x03, 0x60,
+  0xaf, 0xda, 0xe2, 0x77, 0x12, 0x02, 0x10, 0xe4, 0xe6, 0x41, 0x3f, 0x59,
+  0xaa, 0xc7, 0x47, 0x2e, 0xa7, 0xb6, 0x33, 0x8b, 0x9b, 0x72, 0xf4, 0x94,
+  0x7e, 0x7c, 0xcb, 0x3f, 0x98, 0xfd, 0xb0, 0xe2, 0x25, 0x48, 0xfb, 0x02,
+  0x04, 0xd7, 0xe5, 0x34, 0x5c, 0xd8, 0x49, 0x7e, 0xe8, 0x86, 0x57, 0x96,
+  0xf0, 0xc3, 0x09, 0x53, 0xbe, 0x52, 0x15, 0xfc, 0xe7, 0xd6, 0x4c, 0x5f,
+  0x0c, 0x8f, 0xc9, 0x2a, 0xaf, 0x30, 0x5f, 0x58, 0xe7, 0x48, 0x0d, 0x3d,
+  0x97, 0x32, 0x73, 0xe7, 0xa2, 0x37, 0xd2, 0x22, 0x74, 0x45, 0x13, 0x5a,
+  0xaa, 0xbf, 0xb1, 0x21, 0x7b, 0x49, 0x9a, 0x0c, 0x11, 0xf6, 0x38, 0x81,
+  0x95, 0x74, 0xe6, 0x58, 0x1e, 0x13, 0xa0, 0x47, 0x8d, 0x12, 0x28, 0x50,
+  0xd8, 0xb4, 0xa1, 0xa4, 0xe6, 0x2b, 0x86, 0xb0, 0x7a, 0xca, 0x48, 0x9c,
+  0x4e, 0xa2, 0xf9, 0xd3, 0x0f, 0x2e, 0xd5, 0x6b, 0xce, 0x65, 0x54, 0x31,
+  0xd0, 0xaa, 0x6d, 0x57, 0x48, 0xf8, 0x93, 0xad, 0x1e, 0x2d, 0xf3, 0xa9,
+  0x4a, 0x8f, 0x78, 0xd4, 0x79, 0x62, 0x25, 0xcd, 0x7b, 0xc5, 0x38, 0x25,
+  0xdb, 0x12, 0x85, 0xfc, 0x90, 0x83, 0x76, 0xe3, 0x92, 0x25, 0x67, 0xd9,
+  0x8c, 0x31, 0x82, 0x7d, 0x0a, 0x25, 0xe4, 0x44, 0xc6, 0x30, 0xe0, 0xee,
+  0x56, 0x38, 0x0a, 0x27, 0x8c, 0x93, 0xc0, 0x86, 0x12, 0xc9, 0xa5, 0xf8,
+  0xb7, 0x8e, 0xbb, 0xa0, 0xba, 0x9f, 0x8f, 0xaf, 0x5f, 0xbf, 0x3b, 0x5f,
+  0x5b, 0x1d, 0x82, 0x11, 0x4c, 0x0e, 0x4f, 0x97, 0xc5, 0x9c, 0x69, 0x41,
+  0xf2, 0x3b, 0xb4, 0xae, 0x05, 0x6b, 0x4d, 0xfb, 0xc1, 0xb7, 0xf1, 0xe6,
+  0x9a, 0xaf, 0xb8, 0xc4, 0x5c, 0xe6, 0xe6, 0x62, 0xb9, 0xd1, 0xa8, 0x4e,
+  0xdc, 0xa3, 0x83, 0x94, 0xcf, 0x82, 0x24, 0xb5, 0xae, 0xad, 0x70, 0x49,
+  0x73, 0x4e, 0x57, 0x36, 0xb1, 0x16, 0x4b, 0x14, 0xba, 0x65, 0x24, 0x9d,
+  0x2e, 0x5d, 0xa3, 0xf4, 0xa3, 0xfd, 0xf8, 0x25, 0xdb, 0x7c, 0x9c, 0x96,
+  0x57, 0x59, 0x04, 0x85, 0xb9, 0xb3, 0x42, 0x86, 0x3a, 0x16, 0xe8, 0x00,
+  0x44, 0xaa, 0x53, 0x7e, 0x5d, 0xa8, 0xb4, 0xaf, 0xc4, 0x8a, 0x8f, 0xca,
+  0x55, 0x53, 0xa2, 0x35, 0xd9, 0xfd, 0xfa, 0xab, 0xee, 0x05, 0xf9, 0xfa,
+  0xdd, 0x8a, 0xee, 0xf8, 0x9b, 0x81, 0xc9, 0x43, 0x6a, 0x2f, 0x0d, 0xa0,
+  0x33, 0xba, 0x6b, 0xa1, 0xd8, 0xfb, 0xf1, 0x01, 0x18, 0x30, 0xff, 0x23,
+  0x5c, 0x82, 0x9e, 0xd0, 0x1f, 0x0f, 0x3e, 0xa8, 0x10, 0x92, 0xf1, 0xae,
+  0x04, 0x5b, 0xf2, 0x5c, 0x6a, 0x43, 0x9e, 0x49, 0xfc, 0xd6, 0xa9, 0xda,
+  0xf1, 0x37, 0x1f, 0xda, 0xa3, 0x78, 0x73, 0xcc, 0xdf, 0x50, 0x3d, 0x70,
+  0xad, 0xcb, 0x7c, 0x76, 0xe5, 0xc7, 0xd6, 0xae, 0x53, 0x86, 0x9d, 0x48,
+  0x8b, 0x63, 0x3a, 0xc8, 0xbb, 0x7c, 0xe8, 0x2d, 0x09, 0x63, 0x7c, 0x5f,
+  0x7d, 0xf2, 0xbe, 0xdb, 0x0b, 0xc9, 0xc6, 0x88, 0x6e, 0x40, 0x77, 0x61,
+  0x3e, 0x51, 0xab, 0xf7, 0x53, 0x01, 0xd2, 0x8c, 0x37, 0xf7, 0xec, 0xf3,
+  0x67, 0x4f, 0x37, 0x37, 0xfb, 0x0e, 0x8e, 0xc7, 0xb2, 0xfc, 0x18, 0x7d,
+  0x20, 0x67, 0x66, 0x20, 0x0a, 0x25, 0x8d, 0xfa, 0x1a, 0x67, 0xcd, 0x65,
+  0xf4, 0xc7, 0x9b, 0xe3, 0xab, 0xc1, 0xde, 0xe3, 0x75, 0x61, 0xfc, 0x18,
+  0xf0, 0x48, 0x87, 0xe2, 0xc2, 0xfc, 0x3b, 0x93, 0x07, 0x1c, 0xa8, 0xc0,
+  0xca, 0x83, 0x06, 0xe5, 0xc2, 0x83, 0x28, 0x89, 0xaf, 0x0e, 0x5e, 0x2d,
+  0xbb, 0xbc, 0xb8, 0xf0, 0xc0, 0x9b, 0xa3, 0xe3, 0x43, 0xc7, 0x47, 0xfe,
+  0xd7, 0xd6, 0x90, 0xc7, 0x58, 0x8e, 0x3b, 0x5c, 0x53, 0xe4, 0xc8, 0x00,
+  0x10, 0x41, 0x93, 0xec, 0xbf, 0xed, 0x8b, 0x36, 0x8b, 0x8f, 0x1b, 0x19,
+  0xf6, 0x87, 0xef, 0xbe, 0x3b, 0x3a, 0x3b, 0x79, 0xf7, 0xf6, 0xf0, 0x9d,
+  0xcb, 0x55, 0xe1, 0xeb, 0x39, 0xee, 0xa4, 0xed, 0xf8, 0xab, 0x72, 0xce,
+  0x76, 0x62, 0x81, 0x94, 0x1d, 0x88, 0x3c, 0x0b, 0xda, 0x2f, 0xfd, 0x6b,
+  0x18, 0x36, 0x17, 0x3c, 0x64, 0x5b, 0xc7, 0x44, 0xb2, 0xe0, 0x28, 0xef,
+  0x09, 0xe7, 0x02, 0x0e, 0x25, 0xc3, 0x45, 0x7c, 0x63, 0xb9, 0xb8, 0x76,
+  0x3f, 0x8e, 0x33, 0xad, 0x3c, 0x52, 0x05, 0xc5, 0x56, 0x2d, 0x73, 0xcd,
+  0xe7, 0xf7, 0x35, 0x06, 0xe1, 0x49, 0xed, 0x7d, 0xa5, 0xec, 0x3d, 0xee,
+  0x28, 0x13, 0x74, 0x96, 0xb0, 0x4c, 0xd6, 0xb5, 0xba, 0xda, 0xe0, 0x7a,
+  0x13, 0x33, 0x6f, 0x70, 0xeb, 0x7a, 0xf0, 0x6b, 0x0b, 0xb2, 0x68, 0xab,
+  0xff, 0xc1, 0x0c, 0x1a, 0xe1, 0x17, 0x28, 0x71, 0xf4, 0x85, 0xc6, 0x5a,
+  0x74, 0xd1, 0x44, 0xab, 0xd0, 0xa1, 0xe9, 0xa0, 0x90, 0x0c, 0x0c, 0x05,
+  0xbe, 0xe0, 0xb5, 0xf0, 0xae, 0xff, 0x70, 0x7a, 0x76, 0xf2, 0xc3, 0x9f,
+  0xff, 0xc9, 0x5d, 0x04, 0x47, 0xfb, 0x47, 0xbe, 0xf1, 0xac, 0xf1, 0x9f,
+  0xff, 0xe9, 0xbd, 0x35, 0x9b, 0xef, 0x6b, 0x6e, 0x68, 0xad, 0x9e, 0xd1,
+  0x8e, 0xa9, 0x45, 0x5c, 0x97, 0x79, 0x65, 0xa9, 0x56, 0xfa, 0x81, 0x8f,
+  0xc0, 0x76, 0x2c, 0x02, 0x81, 0x17, 0x55, 0x93, 0x38, 0xd3, 0xae, 0x5f,
+  0x78, 0x28, 0x28, 0x1a, 0x5e, 0x5e, 0x0a, 0xcb, 0xf2, 0x0a, 0xae, 0x06,
+  0x6e, 0x7f, 0xb7, 0x1e, 0xfb, 0xc7, 0xc7, 0xff, 0xd4, 0x45, 0x80, 0xf5,
+  0xc3, 0xcf, 0x65, 0xe0, 0xc4, 0x5b, 0x0b, 0xa5, 0xe9, 0x88, 0x59, 0x0d,
+  0x43, 0xc9, 0xbb, 0x13, 0x1d, 0x8d, 0xb8, 0x49, 0x07, 0x55, 0x46, 0x8a,
+  0x00, 0x3c, 0x54, 0xac, 0x74, 0xf1, 0xb5, 0xc8, 0x03, 0xeb, 0x94, 0x7d,
+  0xc7, 0x97, 0xf0, 0x4a, 0xba, 0x9a, 0x6f, 0x16, 0x74, 0x01, 0x98, 0x2f,
+  0x20, 0x07, 0x14, 0xce, 0xc7, 0x2f, 0xc5, 0xaa, 0xac, 0x06, 0x61, 0x24,
+  0x2e, 0x83, 0x8d, 0xc6, 0x1c, 0xec, 0x55, 0xe6, 0xd5, 0x0d, 0x40, 0x17,
+  0xf8, 0x50, 0x6a, 0x71, 0x74, 0x81, 0x2c, 0x61, 0x95, 0x01, 0x43, 0xa1,
+  0xb1, 0xcb, 0x88, 0xe9, 0xdf, 0x8b, 0x93, 0x83, 0x93, 0x63, 0xfa, 0xe5,
+  0xf0, 0xcd, 0xd1, 0x0f, 0x9e, 0xa1, 0x09, 0xb6, 0x48, 0x43, 0x9b, 0xf2,
+  0x75, 0xac, 0x5a, 0xce, 0x7e, 0xf6, 0xd3, 0x48, 0xda, 0xb7, 0x2f, 0x80,
+  0xd7, 0x52, 0x23, 0xa3, 0xc1, 0x46, 0x9f, 0x14, 0x5e, 0xe4, 0x56, 0x99,
+  0x8d, 0xc0, 0xe1, 0x2e, 0x09, 0x09, 0x06, 0x5d, 0xe6, 0x86, 0xff, 0xd6,
+  0x18, 0x5c, 0x51, 0xba, 0x32, 0xbc, 0x75, 0x68, 0x70, 0x6d, 0xd9, 0x58,
+  0x02, 0x64, 0x7c, 0x92, 0xcf, 0xc2, 0x49, 0x9a, 0xe2, 0xed, 0xe2, 0x83,
+  0x50, 0x14, 0x8c, 0x79, 0x58, 0xe8, 0x0e, 0x6c, 0x85, 0x63, 0x41, 0x9d,
+  0x73, 0x2d, 0x36, 0xe7, 0xa4, 0x0b, 0xa0, 0xf9, 0xea, 0xc8, 0x78, 0x44,
+  0x04, 0x84, 0x57, 0x80, 0x5c, 0x34, 0x55, 0x04, 0x3b, 0x01, 0xe6, 0x3e,
+  0x28, 0x93, 0x7f, 0x5d, 0xe6, 0xb7, 0xa9, 0xd4, 0x6c, 0xbf, 0x74, 0x15,
+  0xae, 0x5a, 0x6d, 0xa4, 0xbf, 0xaa, 0x91, 0xb4, 0xd9, 0xca, 0xb3, 0x5f,
+  0xd3, 0xc8, 0xb3, 0x56, 0x1b, 0xd7, 0xbf, 0xaa, 0x11, 0x57, 0x82, 0x91,
+  0xae, 0xc5, 0x1f, 0x8e, 0x2e, 0x92, 0x83, 0x93, 0xd7, 0x9e, 0x46, 0x2f,
+  0x34, 0x87, 0xbd, 0x14, 0x74, 0xa9, 0xd1, 0x72, 0xce, 0xb2, 0x04, 0x1f,
+  0x28, 0x29, 0x85, 0xcd, 0x6d, 0x49, 0x8d, 0x70, 0x71, 0xdf, 0xa9, 0x99,
+  0x20, 0xe7, 0xbf, 0x4b, 0x71, 0xed, 0x85, 0x3e, 0xc0, 0x46, 0x39, 0xf1,
+  0xca, 0xa3, 0x47, 0x70, 0x19, 0x96, 0xb4, 0x34, 0xfc, 0x97, 0x51, 0xca,
+  0x8e, 0xe7, 0xb9, 0xf8, 0xea, 0x49, 0x36, 0xd9, 0x37, 0xa3, 0x9a, 0x58,
+  0x14, 0x0b, 0x97, 0x87, 0x0e, 0x03, 0x0f, 0x67, 0x6b, 0x23, 0x7a, 0x4b,
+  0xd4, 0xff, 0xbc, 0xb6, 0xa1, 0x84, 0x09, 0xf0, 0x3b, 0xca, 0x09, 0xe7,
+  0x0d, 0x8a, 0xd1, 0x1a, 0x3c, 0x90, 0xbc, 0x58, 0x6a, 0x9b, 0x98, 0x2d,
+  0x02, 0xb7, 0xe2, 0xdc, 0xe9, 0xf2, 0x5a, 0xa1, 0xba, 0xc3, 0xa2, 0x5c,
+  0x13, 0xae, 0x9f, 0x5d, 0xf9, 0xf1, 0x86, 0x6e, 0x69, 0xf1, 0x02, 0x6b,
+  0xe6, 0x74, 0xfe, 0xb7, 0xe0, 0x8e, 0x7e, 0xe2, 0xc3, 0x75, 0x66, 0xe9,
+  0x54, 0x82, 0xa8, 0xc4, 0xc0, 0x49, 0xfa, 0x4e, 0x9d, 0x7e, 0x44, 0xdc,
+  0x1b, 0x8b, 0x44, 0x58, 0xc3, 0x71, 0xc0, 0x06, 0x9f, 0x2a, 0x73, 0x36,
+  0xcd, 0x1e, 0x36, 0xd5, 0x85, 0x4f, 0x57, 0x91, 0x44, 0xd8, 0x30, 0x82,
+  0xd6, 0x30, 0xe0, 0x14, 0xa9, 0x38, 0xab, 0xb8, 0x1e, 0x79, 0xdc, 0xc1,
+  0x6e, 0x6f, 0xb3, 0x5b, 0xc1, 0x80, 0xc3, 0xb8, 0x03, 0xfe, 0x94, 0x03,
+  0x2c, 0xf2, 0x71, 0xce, 0x71, 0x5b, 0x0e, 0xf5, 0x88, 0xfa, 0xc3, 0xa2,
+  0x0d, 0xe2, 0xf6, 0xda, 0x10, 0xc7, 0xc4, 0x44, 0x8f, 0x49, 0x81, 0x65,
+  0x94, 0x58, 0x34, 0x54, 0x83, 0xa6, 0x6f, 0xee, 0x2d, 0xb6, 0x21, 0x9d,
+  0x17, 0x11, 0x4c, 0x32, 0xb7, 0x31, 0xaa, 0x06, 0x7b, 0x8d, 0xf3, 0x99,
+  0xfc, 0x38, 0x30, 0x4e, 0xee, 0x4b, 0x22, 0x2a, 0x13, 0x17, 0x33, 0x94,
+  0x9a, 0xa3, 0xf5, 0x9e, 0x91, 0x74, 0x8e, 0x31, 0x52, 0x16, 0x45, 0xec,
+  0xec, 0xac, 0x46, 0xd5, 0x8a, 0xbe, 0x7f, 0xde, 0xea, 0xc7, 0xba, 0x11,
+  0x80, 0xab, 0x0b, 0x67, 0xdc, 0x6c, 0xe7, 0xba, 0x70, 0xf3, 0xdd, 0xd6,
+  0x3e, 0x6b, 0x93, 0x88, 0xa5, 0x9e, 0x30, 0xf2, 0x6e, 0x11, 0x66, 0xa0,
+  0x7d, 0xae, 0x4f, 0x5e, 0x9c, 0x26, 0x77, 0x19, 0x1b, 0x8e, 0xf4, 0x4a,
+  0x2d, 0xb3, 0xc5, 0xd4, 0xcd, 0xce, 0xc2, 0xa6, 0x25, 0xdf, 0x4d, 0xa0,
+  0xa8, 0x25, 0x5c, 0x77, 0xac, 0xe3, 0xed, 0x06, 0xe0, 0x85, 0x02, 0xe3,
+  0x0b, 0xdf, 0x09, 0xfb, 0xec, 0xd9, 0x47, 0x45, 0x64, 0x32, 0xcf, 0x1d,
+  0x49, 0x6a, 0x65, 0x75, 0x7c, 0xc4, 0x59, 0xfe, 0xc0, 0xb5, 0xb4, 0xbf,
+  0xf5, 0x8d, 0x4e, 0x20, 0x4f, 0x2b, 0xf9, 0x81, 0x57, 0x61, 0x59, 0x0a,
+  0xce, 0x8e, 0x2f, 0x4e, 0x04, 0x58, 0x94, 0x74, 0xae, 0xf1, 0x7f, 0x0c,
+  0xa7, 0xc2, 0x58, 0x69, 0xc9, 0xdb, 0x6e, 0xea, 0x74, 0x71, 0x59, 0x3b,
+  0xd8, 0x39, 0x36, 0xb6, 0x4f, 0x82, 0x62, 0x7c, 0xb8, 0x94, 0x83, 0xfa,
+  0x4a, 0x52, 0xa8, 0x41, 0x6e, 0x1e, 0x84, 0x5f, 0x76, 0x21, 0x09, 0x3c,
+  0xfe, 0xa6, 0x5f, 0x87, 0x9d, 0x9d, 0xd6, 0x62, 0x9f, 0xee, 0x9f, 0x9f,
+  0xdb, 0x52, 0xa3, 0x42, 0x93, 0xad, 0xa7, 0xac, 0xa0, 0x66, 0x24, 0x33,
+  0xf8, 0xa5, 0xe1, 0x23, 0x47, 0xd4, 0x1d, 0x6d, 0xa4, 0x95, 0x5a, 0xb8,
+  0xf3, 0xc4, 0xaf, 0xb9, 0xeb, 0xec, 0x3b, 0x69, 0xad, 0xff, 0x89, 0x9d,
+  0x45, 0xfb, 0xfa, 0x2e, 0xd2, 0xd7, 0xd3, 0xd6, 0xbc, 0x76, 0x77, 0x3f,
+  0x53, 0x34, 0x19, 0xf1, 0x4b, 0x07, 0x94, 0xa2, 0xc4, 0xa1, 0xcc, 0x82,
+  0x1e, 0x1c, 0x18, 0x30, 0x70, 0x16, 0x29, 0x28, 0x08, 0x3f, 0xda, 0x3c,
+  0xec, 0xea, 0x99, 0x9f, 0x16, 0x29, 0x4d, 0xdc, 0x1e, 0x3b, 0x44, 0xe4,
+  0x98, 0x74, 0x4e, 0x8f, 0x41, 0xc4, 0x71, 0x42, 0xef, 0x1d, 0x1d, 0xa1,
+  0xa2, 0x8e, 0xc3, 0x34, 0xd8, 0x30, 0x82, 0x7e, 0x3e, 0x73, 0xfd, 0xb8,
+  0x91, 0xb3, 0x52, 0x23, 0x00, 0x87, 0xc3, 0x90, 0x23, 0x28, 0x8d, 0xf8,
+  0x44, 0x14, 0x17, 0x9f, 0xd2, 0x0d, 0x75, 0x96, 0xb7, 0x7d, 0x2f, 0x72,
+  0xfc, 0x4e, 0x99, 0x8a, 0xb5, 0x14, 0xd8, 0x30, 0x39, 0x81, 0x12, 0xd6,
+  0x00, 0xa3, 0x86, 0x2a, 0xcb, 0xc7, 0xdd, 0x15, 0x65, 0x09, 0x4f, 0xfb,
+  0xce, 0x8b, 0x60, 0x4d, 0x6c, 0x58, 0xe6, 0xb5, 0xdc, 0xb2, 0xe3, 0xe3,
+  0x58, 0x88, 0x45, 0x24, 0x64, 0x08, 0x11, 0xe1, 0xac, 0x33, 0xc4, 0xc2,
+  0xb4, 0x59, 0x2c, 0x9d, 0xa9, 0x4d, 0xe7, 0x5c, 0xb8, 0x04, 0x27, 0x09,
+  0xee, 0x20, 0x4f, 0xc9, 0x7f, 0x5d, 0x32, 0x43, 0xc2, 0xad, 0xcb, 0x80,
+  0x67, 0xf2, 0xa7, 0xbd, 0x27, 0x28, 0x39, 0x5c, 0x30, 0x10, 0xb7, 0xb2,
+  0x4f, 0x2c, 0xd1, 0x93, 0xe1, 0xd6, 0xdf, 0x27, 0xc9, 0xa2, 0x56, 0x8f,
+  0xb0, 0x35, 0x85, 0xc9, 0x18, 0x6a, 0x5a, 0xb3, 0x03, 0x8c, 0x01, 0x41,
+  0xf9, 0x8b, 0x44, 0xa0, 0x26, 0xba, 0x5e, 0x38, 0xd7, 0xb9, 0x71, 0x7d,
+  0x13, 0x0e, 0x02, 0x34, 0x15, 0x74, 0xe9, 0xa5, 0x0b, 0xb5, 0x10, 0x3c,
+  0xdd, 0xde, 0xee, 0x36, 0x97, 0x8e, 0x8a, 0x5b, 0x8b, 0xf0, 0x55, 0xf4,
+  0x1f, 0xbc, 0x22, 0x4a, 0x33, 0xa4, 0x8b, 0x8a, 0x85, 0xd4, 0xc1, 0x25,
+  0xdb, 0x04, 0x78, 0xc5, 0xcc, 0x23, 0x14, 0xac, 0x9b, 0x9c, 0xca, 0xef,
+  0x81, 0x46, 0xa4, 0x6b, 0xd6, 0x3c, 0x8b, 0x02, 0x54, 0x64, 0xf5, 0x76,
+  0x52, 0x43, 0x7e, 0x80, 0x11, 0x4e, 0x63, 0x24, 0x3a, 0x23, 0xeb, 0x84,
+  0x32, 0xed, 0x3e, 0x8b, 0x50, 0x44, 0x72, 0x7e, 0x71, 0x72, 0x66, 0xc5,
+  0xc7, 0xba, 0x6c, 0x17, 0xe9, 0x98, 0xfc, 0x84, 0x8b, 0x72, 0xee, 0xc7,
+  0x02, 0x31, 0xcd, 0x20, 0x2f, 0x69, 0xb6, 0xb4, 0x58, 0x41, 0xaf, 0x72,
+  0x89, 0x21, 0xb4, 0x52, 0xe7, 0xf6, 0x9d, 0x9a, 0xe0, 0xad, 0x92, 0x18,
+  0x5f, 0xc7, 0xd3, 0x6c, 0x16, 0xe8, 0x03, 0xbb, 0x72, 0xd0, 0x4e, 0x96,
+  0x20, 0x76, 0x31, 0x17, 0x33, 0x1d, 0xa9, 0xe1, 0x98, 0xa3, 0x8a, 0xd5,
+  0x98, 0xe6, 0x5c, 0x83, 0x6d, 0x5a, 0x94, 0x43, 0x74, 0xe2, 0x8b, 0xc5,
+  0x49, 0x14, 0xc1, 0xb0, 0x15, 0x6d, 0x8a, 0xcf, 0x81, 0x69, 0xa6, 0x21,
+  0x19, 0x4a, 0x43, 0xb8, 0x13, 0xba, 0x15, 0xb7, 0x2d, 0xb6, 0xcc, 0xa2,
+  0xc9, 0x02, 0x69, 0xd1, 0x4b, 0x59, 0xdb, 0x7e, 0x9d, 0x4f, 0x4f, 0xce,
+  0x2e, 0x12, 0x1b, 0x9c, 0x5c, 0x9c, 0xf8, 0xa8, 0x75, 0x84, 0x18, 0xfc,
+  0x0e, 0x1a, 0x9c, 0x87, 0xa5, 0xe9, 0x68, 0xa5, 0x2a, 0x11, 0xd6, 0xd6,
+  0x84, 0xb5, 0xc1, 0x50, 0xc9, 0xe5, 0xbd, 0xc5, 0x94, 0xb1, 0xb0, 0xec,
+  0x79, 0x8e, 0x22, 0x2a, 0x33, 0x83, 0x8e, 0xbb, 0x7b, 0xbd, 0x4c, 0xf3,
+  0x64, 0x27, 0x42, 0x1d, 0xac, 0x40, 0x9f, 0x1d, 0x9e, 0x5f, 0xc8, 0xaa,
+  0xf1, 0x6f, 0x9d, 0x91, 0x8b, 0xf5, 0x50, 0x3f, 0x8c, 0x06, 0xa9, 0x80,
+  0x3a, 0x38, 0x49, 0x8a, 0x43, 0xf6, 0xb9, 0x7d, 0x67, 0x55, 0x0e, 0xd6,
+  0xec, 0x49, 0x90, 0x10, 0x0f, 0xce, 0xa9, 0xb4, 0x82, 0x43, 0x8e, 0x0f,
+  0x7a, 0xda, 0x49, 0x8f, 0xee, 0x5c, 0x39, 0x14, 0x0c, 0xbf, 0xee, 0x5b,
+  0x78, 0x1a, 0x70, 0x0b, 0xe6, 0xee, 0xda, 0xc0, 0x91, 0x79, 0xd7, 0xf9,
+  0x43, 0x17, 0xf4, 0x7c, 0x95, 0xcd, 0x8d, 0x30, 0xe4, 0x39, 0xdf, 0xce,
+  0x33, 0xe7, 0x3d, 0x32, 0xf9, 0x28, 0x18, 0x0a, 0x7f, 0x6c, 0x99, 0xc8,
+  0x08, 0xe1, 0x6b, 0x91, 0xdd, 0x93, 0xe7, 0x6e, 0x15, 0x59, 0x99, 0x70,
+  0x51, 0x22, 0x32, 0xfd, 0xe0, 0x32, 0xe2, 0x30, 0x9b, 0x7c, 0xbe, 0xcc,
+  0xd4, 0x62, 0x96, 0x96, 0xd3, 0x1c, 0x25, 0x88, 0x46, 0x31, 0xb3, 0xb0,
+  0xcb, 0xa9, 0xf7, 0xfd, 0xe8, 0x4d, 0x74, 0x74, 0x7c, 0xe8, 0x77, 0x4b,
+  0x2a, 0x0b, 0xe0, 0x24, 0x7b, 0x21, 0x8f, 0xab, 0x93, 0xb9, 0xeb, 0x62,
+  0x98, 0x9c, 0x72, 0xe9, 0x4e, 0x78, 0x9f, 0xaa, 0xff, 0xf0, 0xad, 0xc9,
+  0x61, 0x81, 0x31, 0x86, 0xee, 0x4f, 0x48, 0xa7, 0xf9, 0x9c, 0x36, 0x17,
+  0x9f, 0xf0, 0xaf, 0x41, 0xd5, 0xc5, 0xce, 0x94, 0x5f, 0xf8, 0x97, 0x2b,
+  0x9a, 0x08, 0xe9, 0x69, 0xed, 0x47, 0x9e, 0x2a, 0x6d, 0x91, 0x12, 0x87,
+  0x26, 0xb8, 0x03, 0xf0, 0x67, 0x3e, 0xd3, 0xa5, 0x94, 0xdd, 0x99, 0x48,
+  0x0b, 0x97, 0xf6, 0x8c, 0xc9, 0xb1, 0xf2, 0x9c, 0x6f, 0x4a, 0x2e, 0x85,
+  0x7d, 0x59, 0x27, 0x64, 0x1b, 0xd0, 0xb9, 0x61, 0x67, 0x09, 0xb5, 0x35,
+  0x67, 0x8e, 0x3b, 0x75, 0xb8, 0xd1, 0x2e, 0x81, 0x8c, 0x79, 0xe6, 0xc8,
+  0x0e, 0x0f, 0xcf, 0xa4, 0x5b, 0x83, 0xb7, 0x61, 0x5a, 0x7c, 0x2a, 0xd4,
+  0xe8, 0x48, 0xc7, 0xdd, 0x63, 0x8d, 0xd1, 0x71, 0xc7, 0x3e, 0xe5, 0x8a,
+  0xb7, 0x9b, 0x4d, 0x43, 0x74, 0xcd, 0x87, 0xd2, 0xdd, 0xd3, 0x67, 0xbe,
+  0xa9, 0x4b, 0xc6, 0x80, 0x73, 0x6d, 0x79, 0x1e, 0xe4, 0xcb, 0x6e, 0xe4,
+  0xee, 0x31, 0x55, 0x14, 0xe4, 0x2e, 0x8b, 0x46, 0xbf, 0x07, 0x7d, 0x08,
+  0x31, 0x5c, 0x14, 0xac, 0xf9, 0xcc, 0xef, 0x3d, 0xe6, 0xca, 0x50, 0x62,
+  0x10, 0xc5, 0x06, 0x21, 0x65, 0x68, 0x1c, 0x1a, 0x8b, 0x68, 0x9b, 0xaa,
+  0xa0, 0xcf, 0xd2, 0x8f, 0x9d, 0xab, 0x7e, 0xb6, 0x9c, 0x29, 0xd4, 0x44,
+  0xd0, 0xd3, 0xe7, 0xaa, 0xcd, 0x72, 0xe5, 0xb1, 0xb9, 0x03, 0xc4, 0xf4,
+  0x09, 0x15, 0x85, 0x29, 0x4b, 0x41, 0xb2, 0xa6, 0x84, 0x74, 0xbb, 0xc4,
+  0x9a, 0x2e, 0xda, 0x30, 0x67, 0x3c, 0xe0, 0x42, 0x56, 0x41, 0xd1, 0x14,
+  0xcb, 0x22, 0x80, 0x2a, 0xe5, 0x05, 0xd7, 0xe7, 0xe4, 0xab, 0xd5, 0x3e,
+  0xfb, 0x32, 0xfb, 0x0b, 0xea, 0x11, 0x6b, 0x3c, 0xbf, 0x40, 0x85, 0xc9,
+  0x2c, 0x39, 0x64, 0xc1, 0xb3, 0xbc, 0xa7, 0x2f, 0xd4, 0x54, 0xa1, 0xaa,
+  0xb0, 0x15, 0xc9, 0x6d, 0x5b, 0x9a, 0x9f, 0xed, 0x38, 0xbb, 0x0f, 0x03,
+  0x3b, 0xac, 0x57, 0xc2, 0x1d, 0x02, 0x78, 0x07, 0x46, 0x01, 0x3e, 0xff,
+  0x26, 0x79, 0xfb, 0xfa, 0x19, 0xe7, 0x18, 0x5f, 0x65, 0x25, 0xd7, 0x9f,
+  0xf6, 0xba, 0xd8, 0xc9, 0xb7, 0x41, 0x63, 0xbb, 0x41, 0x4c, 0x80, 0x5c,
+  0xb5, 0xb9, 0x9e, 0x5e, 0xe0, 0xd9, 0xcf, 0xef, 0x19, 0x25, 0xf1, 0xaa,
+  0xaf, 0xee, 0x13, 0x31, 0x83, 0xf0, 0x42, 0x1a, 0x80, 0xa8, 0x88, 0x2e,
+  0xed, 0xdc, 0x94, 0x26, 0x13, 0x7b, 0xf6, 0xc4, 0x33, 0xb1, 0xf2, 0x7e,
+  0xc1, 0xf5, 0x37, 0xe6, 0x57, 0x2c, 0x51, 0x47, 0x4e, 0xd4, 0x33, 0x61,
+  0x9c, 0x07, 0x72, 0xee, 0x59, 0x9c, 0xed, 0xbe, 0x06, 0xb0, 0x46, 0x78,
+  0x3b, 0x82, 0xf7, 0x9e, 0x85, 0xea, 0x24, 0x97, 0xc2, 0x63, 0x0a, 0xd3,
+  0xb2, 0x18, 0x90, 0x55, 0x82, 0x67, 0x9f, 0xbb, 0x67, 0xd9, 0x78, 0x90,
+  0xcf, 0x83, 0x02, 0x45, 0x2b, 0xde, 0x50, 0x21, 0x58, 0x44, 0x03, 0x1f,
+  0x66, 0x21, 0x92, 0x4f, 0xb0, 0xf6, 0xc1, 0x2b, 0x2f, 0x9a, 0xda, 0x32,
+  0xaa, 0xaf, 0x3a, 0xd2, 0xc4, 0xa4, 0xf2, 0xc5, 0x75, 0x78, 0x38, 0x9f,
+  0xcb, 0x4d, 0x7d, 0xca, 0x68, 0x1d, 0x8d, 0xfd, 0x34, 0x26, 0x98, 0x85,
+  0xbe, 0x3b, 0x3b, 0xeb, 0x42, 0xfb, 0x07, 0xfb, 0xf6, 0x46, 0xfb, 0xe0,
+  0x80, 0xda, 0x83, 0x4e, 0x76, 0xf4, 0xcc, 0xd0, 0x94, 0x8b, 0xab, 0x79,
+  0xfe, 0xb7, 0x2c, 0x48, 0x4f, 0xb7, 0xe2, 0x52, 0xc1, 0xe3, 0xbb, 0xca,
+  0x30, 0x6e, 0xd3, 0x69, 0xae, 0x4c, 0x91, 0xed, 0xe8, 0xfe, 0x81, 0x27,
+  0x4a, 0xb5, 0x1f, 0x73, 0x3e, 0xa2, 0xd0, 0x02, 0x50, 0xa6, 0x8f, 0x3d,
+  0x38, 0x59, 0x03, 0xfd, 0xe5, 0xf9, 0x53, 0x95, 0xbd, 0x4c, 0x48, 0xe6,
+  0x7b, 0x89, 0x17, 0x62, 0x8a, 0x9a, 0x03, 0x6d, 0x36, 0xfd, 0x5c, 0xaf,
+  0x3e, 0xdd, 0x4a, 0x0d, 0xd2, 0x4a, 0x8d, 0x43, 0x73, 0x44, 0x40, 0x99,
+  0xdd, 0xe5, 0x73, 0xcd, 0x16, 0xeb, 0xbc, 0xfe, 0x7c, 0x85, 0x09, 0xaa,
+  0x92, 0x7b, 0xf3, 0x10, 0xb4, 0x14, 0x3c, 0xff, 0x99, 0x3b, 0x09, 0x41,
+  0xc1, 0x06, 0x4b, 0x7f, 0x42, 0xd8, 0x9e, 0x15, 0xf5, 0xb1, 0x83, 0x04,
+  0xb5, 0x7f, 0x21, 0x86, 0x5a, 0x96, 0xee, 0x23, 0xa9, 0x99, 0x97, 0xae,
+  0xfb, 0x69, 0x71, 0x95, 0x84, 0xce, 0xd0, 0xe7, 0x42, 0x52, 0x6f, 0x50,
+  0x4d, 0xd7, 0xce, 0x01, 0x73, 0x93, 0xb0, 0x4e, 0xa5, 0x7f, 0xfa, 0x85,
+  0xd2, 0x86, 0xdd, 0x97, 0x26, 0xa6, 0xae, 0x7c, 0xe3, 0xb3, 0xed, 0x50,
+  0x68, 0x9d, 0xb0, 0xa5, 0x5e, 0x60, 0x3f, 0x57, 0xbe, 0x20, 0x94, 0x71,
+  0x34, 0xe5, 0x92, 0x8f, 0x53, 0x2b, 0x24, 0x69, 0xe0, 0xd3, 0xfe, 0xb1,
+  0xdd, 0x06, 0xd3, 0xbd, 0x08, 0x45, 0xa8, 0xe4, 0xe8, 0x75, 0xf0, 0xe0,
+  0x13, 0x3f, 0xc1, 0x74, 0xca, 0xd2, 0xc0, 0xbd, 0x18, 0x22, 0x2a, 0x2d,
+  0x61, 0x19, 0x3c, 0xfa, 0x54, 0x13, 0x7e, 0x24, 0xdc, 0x05, 0xeb, 0xdf,
+  0x79, 0x46, 0xc8, 0xe1, 0x00, 0x39, 0x7a, 0x35, 0x60, 0x2a, 0xe6, 0xe6,
+  0x2f, 0x68, 0xef, 0xfd, 0x67, 0xcf, 0x1f, 0x78, 0x56, 0x2f, 0xcd, 0xca,
+  0x5d, 0xf5, 0xc1, 0x7b, 0x9f, 0x75, 0x8f, 0xb9, 0xa9, 0x05, 0x06, 0xa6,
+  0xa3, 0x27, 0x2d, 0xd9, 0x60, 0x10, 0xc8, 0xff, 0x30, 0xcb, 0x4f, 0xc9,
+  0xb9, 0x8a, 0xd5, 0x7f, 0x84, 0xe3, 0xfd, 0x3c, 0x40, 0xec, 0x52, 0xb3,
+  0x4f, 0x99, 0xc1, 0x56, 0x3c, 0x6e, 0x14, 0xc5, 0xf5, 0xf1, 0xe4, 0x58,
+  0x9d, 0xa0, 0x05, 0xd9, 0x73, 0x92, 0x23, 0x96, 0x73, 0xcf, 0x39, 0x44,
+  0x11, 0x54, 0x20, 0x55, 0x8b, 0xed, 0xd6, 0xd1, 0x7d, 0x43, 0x9b, 0x0a,
+  0xea, 0x08, 0x8c, 0x67, 0xdb, 0xad, 0x63, 0x50, 0x5d, 0x2f, 0x45, 0xf3,
+  0x76, 0x33, 0xf2, 0x08, 0x5a, 0xc1, 0x6b, 0xbb, 0x9e, 0x7b, 0xe9, 0xb5,
+  0x2f, 0xb8, 0x48, 0x07, 0x0c, 0x7b, 0x26, 0xea, 0xb9, 0x83, 0xd2, 0x87,
+  0x75, 0xb4, 0x2c, 0x04, 0xb9, 0x9a, 0xe1, 0x79, 0x37, 0xd2, 0x38, 0x5e,
+  0x98, 0x02, 0xdc, 0x04, 0xdd, 0xa8, 0x68, 0xc3, 0x01, 0xf1, 0xb4, 0x4b,
+  0xd7, 0xd9, 0xf8, 0xc6, 0x8e, 0x8c, 0x6b, 0x23, 0xf2, 0xd6, 0x53, 0xb7,
+  0xb4, 0x4c, 0x7d, 0xa7, 0x67, 0x87, 0x6d, 0x45, 0xc0, 0x3f, 0x2a, 0x54,
+  0x73, 0x76, 0x71, 0x7e, 0xba, 0xc7, 0xe3, 0x15, 0x1f, 0x0c, 0x1d, 0x88,
+  0x83, 0xf3, 0xec, 0xaf, 0x9a, 0x15, 0x5d, 0xf9, 0xa7, 0x9f, 0xaf, 0x78,
+  0xfa, 0x5c, 0x43, 0xa4, 0x8e, 0x26, 0xcc, 0x7d, 0x69, 0x1f, 0xc2, 0x97,
+  0x3e, 0x53, 0x90, 0x09, 0xb3, 0xee, 0x8a, 0xf1, 0x88, 0x47, 0xe6, 0x52,
+  0x6a, 0xfc, 0xc3, 0x9f, 0x7b, 0x9b, 0xcd, 0xf5, 0x72, 0x7e, 0xe3, 0xe4,
+  0x45, 0x0d, 0x60, 0xb3, 0x0d, 0xf6, 0x2f, 0xbc, 0xb0, 0xa3, 0x11, 0x00,
+  0x9d, 0x39, 0xf7, 0x77, 0x5f, 0x2d, 0x15, 0x16, 0xb3, 0x2a, 0xfe, 0x23,
+  0xe2, 0xaf, 0xcb, 0x60, 0x0d, 0x5e, 0x6c, 0xbb, 0xeb, 0x77, 0xb1, 0x1c,
+  0x91, 0x40, 0x9a, 0xdc, 0x64, 0xf7, 0x9e, 0xea, 0xc4, 0x65, 0x47, 0xe2,
+  0x62, 0x3e, 0x67, 0x43, 0x84, 0x7f, 0xc4, 0x35, 0xf0, 0xc3, 0x0f, 0xc2,
+  0xe3, 0x0b, 0x0b, 0x6d, 0x50, 0xd7, 0x82, 0x2b, 0x1d, 0x4f, 0x3c, 0x51,
+  0x2a, 0xd8, 0xf0, 0xf1, 0x82, 0x41, 0xbe, 0xcc, 0xa6, 0x19, 0x43, 0xb7,
+  0x8b, 0x9e, 0x02, 0xc2, 0x8e, 0xa5, 0x60, 0x72, 0x8c, 0x31, 0xbc, 0x2a,
+  0x9c, 0xec, 0x0c, 0x7b, 0xde, 0x9c, 0x03, 0x53, 0xd5, 0x5e, 0x45, 0x3b,
+  0xbe, 0xff, 0xfe, 0xe2, 0x9b, 0x93, 0xb3, 0xf3, 0x64, 0x8b, 0x31, 0x35,
+  0x2f, 0xce, 0x8e, 0xbe, 0x7a, 0x4f, 0xea, 0xbf, 0x73, 0xcb, 0xbc, 0x4e,
+  0xe7, 0x39, 0xdd, 0x1c, 0xc9, 0x79, 0x9d, 0xcd, 0x69, 0x23, 0xaf, 0xac,
+  0x9e, 0x30, 0x62, 0x74, 0xf8, 0xae, 0x2c, 0x4a, 0x29, 0xbb, 0x86, 0x04,
+  0xb9, 0xeb, 0x42, 0x77, 0x43, 0x22, 0xdd, 0xe6, 0x92, 0xab, 0x51, 0x78,
+  0xdd, 0x36, 0x6f, 0x41, 0x82, 0x9a, 0x77, 0x35, 0xb9, 0xf8, 0x66, 0xff,
+  0xdd, 0xb7, 0xe7, 0x56, 0x64, 0xe2, 0xfb, 0xef, 0xbf, 0x0f, 0xbd, 0xfe,
+  0xd5, 0xde, 0xd6, 0x16, 0x64, 0xcc, 0xeb, 0xf4, 0xe3, 0xc7, 0x61, 0x95,
+  0xad, 0xad, 0xbd, 0xf1, 0xce, 0x3a, 0x5f, 0x66, 0xba, 0x5a, 0x92, 0x68,
+  0x41, 0x5f, 0x6f, 0xd1, 0x02, 0x73, 0x35, 0xeb, 0xad, 0x65, 0x9d, 0x4f,
+  0xe9, 0x46, 0xca, 0x2a, 0xbc, 0xbd, 0xb5, 0xb6, 0x76, 0x7e, 0x78, 0x98,
+  0xec, 0x1f, 0x9f, 0x9f, 0x04, 0xef, 0x6e, 0xec, 0x6c, 0x92, 0xe8, 0x75,
+  0x95, 0xd5, 0xf4, 0xcb, 0xda, 0xda, 0xf1, 0xfe, 0x05, 0xeb, 0xbc, 0xdf,
+  0x1d, 0x9e, 0x9d, 0x1f, 0x9d, 0xbc, 0xe3, 0xed, 0xe1, 0x88, 0xc5, 0x74,
+  0x7a, 0xc7, 0x01, 0xab, 0x97, 0x39, 0xd0, 0x7a, 0xee, 0xac, 0x70, 0x74,
+  0x1b, 0xf9, 0x9f, 0xee, 0xac, 0x3b, 0x46, 0xed, 0xd6, 0x38, 0x07, 0x0e,
+  0x5d, 0xa7, 0x95, 0xb0, 0x58, 0xc4, 0xb5, 0xc4, 0x1b, 0xbe, 0x24, 0x04,
+  0x26, 0x1b, 0x49, 0x74, 0x75, 0x5f, 0x30, 0x2e, 0xe0, 0xe8, 0x08, 0x02,
+  0x27, 0xe3, 0x33, 0x3f, 0x3f, 0xe2, 0x52, 0x3f, 0xc9, 0xfb, 0xf3, 0xfd,
+  0xaf, 0x0f, 0xf9, 0xd9, 0xaf, 0xb3, 0xda, 0x6f, 0x88, 0x54, 0xb8, 0xe6,
+  0x5e, 0xde, 0x65, 0x75, 0x35, 0x4e, 0x17, 0x9c, 0xc6, 0x4f, 0xfd, 0x0c,
+  0xe4, 0x26, 0x0a, 0x1a, 0x17, 0x6d, 0xc0, 0x17, 0xfe, 0x9e, 0xeb, 0xf3,
+  0xa8, 0xd1, 0x1d, 0xb6, 0x7b, 0x76, 0xb8, 0xff, 0xfa, 0xed, 0xa1, 0xc5,
+  0xe8, 0xcb, 0xcd, 0x4d, 0x8d, 0x5e, 0x73, 0xe5, 0x62, 0x6f, 0x0b, 0x67,
+  0xe9, 0x80, 0x57, 0x9f, 0xbe, 0xe1, 0x42, 0xc2, 0xf1, 0xee, 0xfc, 0x4e,
+  0xe1, 0xd9, 0xe1, 0x65, 0xbe, 0x25, 0xad, 0x5b, 0x7f, 0xa9, 0x5b, 0x13,
+  0x99, 0x44, 0x6a, 0x12, 0xb3, 0x98, 0x35, 0x60, 0x0e, 0xf9, 0x7c, 0x7b,
+  0x7b, 0xfb, 0x81, 0x79, 0x40, 0xa1, 0xd0, 0x7b, 0x97, 0xa6, 0xb2, 0xc7,
+  0x8f, 0x6f, 0xf9, 0xf6, 0xfd, 0x88, 0xa7, 0x0a, 0x97, 0xc0, 0x95, 0x11,
+  0xe7, 0x62, 0x86, 0xc9, 0xeb, 0x2c, 0x3e, 0xe4, 0x71, 0x51, 0xb8, 0x1d,
+  0x68, 0x2c, 0x0e, 0xc9, 0xc8, 0x90, 0x79, 0x7c, 0x6c, 0xb1, 0x0d, 0x9c,
+  0x74, 0x20, 0xc4, 0xb3, 0x95, 0xf7, 0xed, 0x26, 0xf9, 0x1b, 0x6a, 0x93,
+  0x7f, 0x0c, 0x8b, 0xf2, 0x6a, 0x6b, 0xb6, 0x07, 0xa1, 0x86, 0x1e, 0x7a,
+  0xc3, 0x78, 0x2a, 0x09, 0x09, 0xc7, 0x2e, 0x2c, 0xbd, 0xe2, 0x85, 0xe5,
+  0xfc, 0x99, 0x4f, 0x18, 0xd7, 0x2f, 0x58, 0x05, 0x89, 0x89, 0xba, 0xb4,
+  0x99, 0x5b, 0x69, 0xd4, 0x48, 0x27, 0x4c, 0x7f, 0x30, 0x3a, 0x0e, 0x89,
+  0x85, 0x50, 0x2f, 0x1c, 0xef, 0x06, 0x12, 0xa1, 0x5f, 0x4b, 0x22, 0x99,
+  0x61, 0xfd, 0x11, 0x9c, 0x57, 0xeb, 0xf4, 0x0a, 0xbc, 0x24, 0x3b, 0xc2,
+  0x17, 0x9c, 0xe3, 0x5a, 0xa2, 0xc0, 0x0f, 0x7a, 0xe0, 0xdc, 0x59, 0x4d,
+  0x5b, 0x70, 0x31, 0x40, 0xdc, 0x70, 0xbb, 0xcf, 0xc1, 0x00, 0xf4, 0x53,
+  0x39, 0x6a, 0xf9, 0x84, 0xce, 0x83, 0x49, 0xc9, 0xea, 0xcf, 0xf5, 0xa2,
+  0x0e, 0x68, 0xe7, 0x9c, 0x46, 0xd1, 0xe9, 0x6b, 0xe9, 0x2b, 0x0d, 0x57,
+  0xd2, 0x5d, 0x58, 0xa9, 0x9e, 0x76, 0x63, 0x0b, 0x79, 0x64, 0x9f, 0xdc,
+  0xc7, 0xc1, 0xa9, 0xfe, 0xc6, 0x29, 0xbe, 0xf9, 0x2d, 0x4f, 0x9e, 0x99,
+  0x7c, 0x92, 0x6c, 0xf0, 0x2d, 0x60, 0x82, 0x2e, 0xa2, 0x73, 0xa0, 0xb0,
+  0x22, 0xe7, 0x21, 0x54, 0x38, 0x1e, 0x18, 0xe1, 0x1e, 0x2d, 0x0d, 0x5f,
+  0x2a, 0xff, 0x6b, 0x6b, 0x58, 0x55, 0xd7, 0x5b, 0xf9, 0xe4, 0x43, 0x59,
+  0xa5, 0xc9, 0x4f, 0x4d, 0x8e, 0x5f, 0x8d, 0xdb, 0x93, 0xf8, 0x5f, 0x58,
+  0xc1, 0x5f, 0xb4, 0x52, 0xab, 0x67, 0xf1, 0x5b, 0xcc, 0x60, 0x30, 0x00,
+  0xbc, 0x83, 0xf6, 0xf4, 0x81, 0x1e, 0xf8, 0xe0, 0x30, 0x2a, 0x7e, 0xc5,
+  0xec, 0x22, 0xac, 0x90, 0x26, 0x29, 0xa1, 0xe6, 0xc4, 0x5b, 0xe2, 0x84,
+  0x6e, 0x15, 0x89, 0x7e, 0xdc, 0xdd, 0xde, 0xde, 0xd9, 0xdb, 0xf9, 0xfc,
+  0xc5, 0xf6, 0xde, 0xce, 0xce, 0xce, 0xee, 0xde, 0xce, 0xde, 0xde, 0xee,
+  0xf6, 0xcf, 0x5b, 0xbd, 0x55, 0x4b, 0xf7, 0xf6, 0xab, 0x15, 0x0d, 0xd2,
+  0xac, 0x7b, 0x12, 0xc7, 0xfa, 0x93, 0x9b, 0x3d, 0x66, 0x35, 0xe9, 0x25,
+  0xd5, 0x6c, 0x44, 0x5d, 0xe9, 0xe1, 0x0c, 0x27, 0x53, 0x91, 0x2c, 0x9d,
+  0x05, 0x13, 0x7a, 0x7d, 0xf2, 0xfd, 0xbb, 0xe3, 0x93, 0xfd, 0xd7, 0xc9,
+  0xc5, 0x49, 0xb2, 0x0f, 0xcb, 0x5f, 0x84, 0x4f, 0x22, 0x16, 0x9d, 0xd3,
+  0x2e, 0x05, 0x20, 0x43, 0xb4, 0x65, 0x71, 0x14, 0x89, 0x99, 0xca, 0x85,
+  0x3f, 0x61, 0x10, 0xed, 0x71, 0x16, 0xd0, 0xec, 0xb8, 0xa5, 0xe1, 0x75,
+  0x3d, 0x7b, 0xfc, 0x46, 0xf8, 0x94, 0x9e, 0xfb, 0xe2, 0x8e, 0xf7, 0xca,
+  0x3b, 0x86, 0x63, 0x27, 0x5f, 0x13, 0x9b, 0xd4, 0xa5, 0xa5, 0x8e, 0x6c,
+  0x97, 0x86, 0xb3, 0x21, 0xd1, 0x5b, 0x78, 0x03, 0xe7, 0x12, 0xfe, 0xaf,
+  0xbc, 0xea, 0xe2, 0xe9, 0x90, 0x58, 0xdf, 0xb7, 0x48, 0x09, 0x48, 0x49,
+  0x2c, 0x96, 0x6e, 0x76, 0x26, 0x78, 0xb2, 0x72, 0x4a, 0x74, 0x99, 0x67,
+  0x1f, 0x31, 0xeb, 0x26, 0xef, 0x95, 0x40, 0x67, 0x3f, 0x3b, 0x54, 0x8b,
+  0x30, 0x73, 0x44, 0x5e, 0xda, 0x90, 0x11, 0xe1, 0x15, 0xe9, 0x8e, 0xfb,
+  0x31, 0x96, 0xec, 0xbb, 0xe0, 0x6f, 0xc2, 0x7b, 0x7c, 0xcb, 0x59, 0x78,
+  0x65, 0x00, 0xef, 0xcf, 0x8f, 0xde, 0x7d, 0x0d, 0x1f, 0xee, 0xf7, 0x27,
+  0x67, 0xaf, 0xcf, 0xa9, 0x59, 0x96, 0x70, 0xd6, 0x60, 0xe4, 0x63, 0x4e,
+  0xa8, 0xa3, 0x92, 0x73, 0xc9, 0x5d, 0xff, 0x51, 0xc8, 0xa9, 0xef, 0x00,
+  0x25, 0x30, 0xcc, 0x40, 0xe5, 0x61, 0xa4, 0x88, 0xf8, 0xad, 0x11, 0x50,
+  0xe3, 0x97, 0xb3, 0x74, 0x7c, 0xcd, 0x3a, 0xba, 0x10, 0x2b, 0x82, 0xed,
+  0xb6, 0x38, 0x65, 0x66, 0x8b, 0x55, 0xaf, 0xad, 0xba, 0x00, 0x39, 0xa2,
+  0x15, 0x56, 0xce, 0x7d, 0x99, 0xb9, 0xc0, 0x40, 0x43, 0xb4, 0x7e, 0x39,
+  0x4d, 0xaf, 0xd0, 0x61, 0xf7, 0x18, 0x04, 0x9d, 0x69, 0xf7, 0x9f, 0xda,
+  0x25, 0x5f, 0x1b, 0x68, 0xef, 0x08, 0x04, 0x00, 0x20, 0x39, 0xc0, 0x5f,
+  0xa8, 0xef, 0x49, 0xc4, 0x4e, 0x76, 0xd4, 0x23, 0xae, 0x87, 0xcb, 0xb5,
+  0xb7, 0xab, 0x98, 0xa1, 0x84, 0xb6, 0x20, 0xef, 0x90, 0x68, 0x3e, 0x08,
+  0x10, 0x7c, 0x44, 0x3d, 0xe5, 0x96, 0x02, 0x2b, 0x50, 0xe5, 0x03, 0x13,
+  0x51, 0x9b, 0x08, 0x46, 0x0f, 0x59, 0x72, 0x1e, 0x0c, 0xd0, 0xa7, 0x2a,
+  0x8b, 0x78, 0x53, 0x39, 0xb8, 0xc7, 0x55, 0x29, 0x39, 0x5e, 0xa5, 0x67,
+  0x68, 0x32, 0xbe, 0xc8, 0x89, 0x77, 0x32, 0x57, 0x35, 0x0d, 0x25, 0xe5,
+  0x2a, 0xa7, 0xa8, 0xdd, 0x6d, 0x18, 0xe3, 0xa4, 0x50, 0x49, 0x56, 0x73,
+  0xcf, 0xa2, 0x5e, 0xa4, 0x95, 0xbc, 0x92, 0xc4, 0x02, 0x07, 0x93, 0xc1,
+  0x97, 0x97, 0x60, 0x5f, 0xad, 0x69, 0x50, 0x81, 0xbf, 0x27, 0xbd, 0xf1,
+  0x92, 0xef, 0x38, 0x12, 0xe3, 0x89, 0x81, 0x0b, 0xe5, 0x68, 0x0a, 0x6e,
+  0x50, 0x28, 0xb9, 0xb1, 0x6c, 0x96, 0x87, 0x23, 0xcd, 0x31, 0x67, 0xf6,
+  0x76, 0x58, 0xb7, 0x82, 0x6b, 0x08, 0x3e, 0x72, 0xb7, 0x40, 0x24, 0x23,
+  0x3f, 0xf5, 0x00, 0x36, 0xc1, 0xb2, 0x49, 0xc8, 0x9d, 0x7f, 0x8f, 0xf6,
+  0x88, 0x9b, 0xca, 0xeb, 0x2a, 0x9b, 0x5e, 0x2a, 0xe2, 0x90, 0x5c, 0x21,
+  0x3c, 0xcb, 0xb4, 0x85, 0x4b, 0xc4, 0x1e, 0xd3, 0xb9, 0x03, 0x40, 0x29,
+  0x94, 0x97, 0x5c, 0x81, 0xad, 0xcb, 0x73, 0x20, 0xc9, 0x06, 0x0f, 0x11,
+  0xbf, 0xe8, 0x9f, 0x24, 0x54, 0xcb, 0x35, 0xd7, 0x60, 0x1d, 0x8d, 0x18,
+  0x63, 0xbe, 0x75, 0x6c, 0xed, 0x78, 0xb5, 0xee, 0x17, 0x5c, 0xc2, 0x80,
+  0xc3, 0x22, 0x7c, 0xc9, 0xb9, 0xd4, 0x12, 0x79, 0x00, 0x92, 0x92, 0x7d,
+  0xe4, 0xac, 0x16, 0x9d, 0x9b, 0x57, 0xf3, 0x9c, 0x54, 0xaf, 0xf3, 0xe5,
+  0xd6, 0xf0, 0x39, 0x78, 0x21, 0xaf, 0x36, 0x63, 0x8a, 0xb1, 0xaa, 0xa6,
+  0xc1, 0xb8, 0x0e, 0xd5, 0x02, 0xca, 0xa1, 0xab, 0x81, 0xad, 0xa8, 0x20,
+  0x92, 0x71, 0x76, 0x6f, 0xfe, 0x3f, 0xb8, 0x5f, 0x53, 0x51, 0x21, 0x21,
+  0x04, 0x07, 0x1d, 0x03, 0x18, 0x80, 0xcf, 0x45, 0x23, 0x68, 0xbc, 0x31,
+  0xcb, 0xe5, 0xc8, 0x6f, 0x2c, 0xd3, 0x08, 0xc2, 0x1c, 0xb9, 0x49, 0xf8,
+  0x9b, 0x71, 0x6a, 0x5c, 0x84, 0xef, 0xb2, 0x03, 0x12, 0x95, 0x2b, 0xd4,
+  0x16, 0x31, 0x14, 0xa4, 0x30, 0x2e, 0x2b, 0x47, 0x39, 0xb4, 0x5a, 0x37,
+  0x7a, 0x21, 0xae, 0x21, 0xfe, 0xb5, 0xcb, 0x6e, 0x94, 0xf3, 0xae, 0xe6,
+  0x37, 0x8f, 0xb3, 0x9a, 0xee, 0x90, 0x4c, 0x63, 0x9c, 0xde, 0x0b, 0x37,
+  0xc8, 0xe7, 0x0f, 0x33, 0x1d, 0x1d, 0xc4, 0x27, 0x75, 0x8c, 0xb9, 0x2a,
+  0xac, 0x0e, 0x1c, 0x2b, 0x3e, 0xf4, 0x50, 0x82, 0x39, 0x90, 0x16, 0xd3,
+  0xca, 0xee, 0xe0, 0xd1, 0x35, 0x22, 0xa5, 0x71, 0xe0, 0x25, 0xf9, 0x73,
+  0x2f, 0xf9, 0x2a, 0xad, 0xf2, 0x71, 0x5f, 0x0b, 0x9d, 0x6a, 0xe1, 0x53,
+  0x7e, 0xc3, 0xd7, 0xbf, 0xdc, 0x90, 0xc4, 0x9e, 0xcd, 0x61, 0xf2, 0xbd,
+  0x95, 0xae, 0x25, 0x25, 0x12, 0xe8, 0x49, 0xec, 0x10, 0xe0, 0xd6, 0x1a,
+  0xb8, 0x4b, 0x4a, 0x9f, 0x01, 0xb4, 0x91, 0x74, 0xe2, 0x6b, 0x19, 0x61,
+  0x57, 0xd3, 0xea, 0xc6, 0xf9, 0xc2, 0xb0, 0x57, 0xca, 0x8a, 0x00, 0xcf,
+  0x28, 0xb2, 0xb4, 0xd8, 0x06, 0x8a, 0xa5, 0x0b, 0x30, 0xc1, 0xdf, 0xee,
+  0xf8, 0x5a, 0xd9, 0x69, 0x58, 0x60, 0x2b, 0x8d, 0x4c, 0x0c, 0x4a, 0x3d,
+  0x82, 0x32, 0x1d, 0x8b, 0x1a, 0x0c, 0x68, 0xc1, 0x78, 0x69, 0x94, 0x81,
+  0x9e, 0x5c, 0x1c, 0xfe, 0x5b, 0xb2, 0xdf, 0x76, 0x9f, 0xf3, 0xcd, 0xd4,
+  0x80, 0x58, 0xea, 0x7b, 0x02, 0xc3, 0xd8, 0x25, 0x18, 0x51, 0x2a, 0x7c,
+  0xa5, 0xd8, 0xfe, 0x35, 0x4d, 0x7d, 0xf6, 0x76, 0xe2, 0xaa, 0xd0, 0xc8,
+  0xea, 0xfa, 0xde, 0xea, 0x0a, 0xf0, 0x6b, 0x70, 0x2a, 0x04, 0x95, 0x8d,
+  0x24, 0xde, 0x39, 0x4f, 0x05, 0x70, 0x87, 0xe1, 0xd4, 0x68, 0x53, 0xe6,
+  0xc2, 0x40, 0x11, 0x84, 0x2d, 0xee, 0x24, 0x01, 0x2c, 0xcb, 0x6b, 0xa8,
+  0x5a, 0x92, 0xc2, 0x25, 0x15, 0x0e, 0x83, 0xca, 0xce, 0x69, 0x88, 0x6c,
+  0xf7, 0x81, 0x8f, 0xdc, 0x07, 0xbb, 0x58, 0xf4, 0x0a, 0x94, 0xb1, 0x5c,
+  0x8a, 0x1e, 0xd4, 0x24, 0x59, 0x3b, 0x76, 0x72, 0x9b, 0x9d, 0x5a, 0x28,
+  0x22, 0x36, 0x62, 0x0c, 0xbc, 0xa8, 0xe9, 0xbd, 0xf8, 0xcd, 0x71, 0xa7,
+  0x1a, 0xd7, 0x0c, 0x2f, 0x26, 0x20, 0xc1, 0x01, 0x7a, 0x0a, 0xe5, 0xe3,
+  0xb5, 0x7a, 0x96, 0x84, 0x7d, 0x53, 0xab, 0xcd, 0x40, 0x7d, 0x64, 0xf0,
+  0x60, 0x55, 0x79, 0x14, 0x02, 0xbb, 0x18, 0x06, 0xca, 0x57, 0x52, 0x24,
+  0x39, 0xb1, 0x6a, 0xe0, 0x2d, 0x82, 0x26, 0x6e, 0x78, 0x54, 0xb7, 0xd8,
+  0x93, 0xab, 0x4b, 0x15, 0x44, 0xa9, 0xbe, 0x71, 0x10, 0x7c, 0xda, 0x2c,
+  0x17, 0x4b, 0x1d, 0x67, 0x41, 0x8e, 0xce, 0xbc, 0x58, 0x0b, 0x6e, 0x3e,
+  0xa1, 0x9f, 0xa2, 0x32, 0x9e, 0x28, 0xf0, 0x6c, 0x52, 0x5b, 0x6f, 0x94,
+  0x49, 0xc1, 0x09, 0xa2, 0x12, 0xd9, 0x45, 0x80, 0x98, 0xf2, 0x09, 0x14,
+  0xca, 0x9c, 0x81, 0xb8, 0xd7, 0x3c, 0x75, 0xf3, 0x1d, 0xb4, 0x6a, 0x9e,
+  0x9a, 0x21, 0xef, 0x2c, 0xe6, 0x22, 0x3a, 0xb1, 0x9e, 0x32, 0xd7, 0x32,
+  0xb0, 0xb0, 0x1e, 0xe9, 0xa8, 0x79, 0x77, 0x20, 0xd9, 0xce, 0x9d, 0x9c,
+  0x65, 0x9b, 0xde, 0xc0, 0x19, 0x64, 0x9e, 0x32, 0x49, 0x66, 0xf7, 0x9a,
+  0x9c, 0xa2, 0xb2, 0x01, 0xa3, 0x3c, 0xc0, 0x2a, 0xf1, 0xf9, 0xe7, 0x1d,
+  0x59, 0xf0, 0xa3, 0x7b, 0x7a, 0x8f, 0xbe, 0x0e, 0xac, 0x1f, 0x53, 0x0e,
+  0x35, 0x61, 0x6b, 0x03, 0xe4, 0x50, 0x67, 0x02, 0x89, 0x68, 0x18, 0x01,
+  0x6c, 0x9a, 0xf4, 0xe8, 0x3c, 0x33, 0x1d, 0x2a, 0xeb, 0x7b, 0xbe, 0xbf,
+  0x26, 0xea, 0xb5, 0x0c, 0x34, 0xad, 0x24, 0x64, 0x69, 0x85, 0x62, 0x66,
+  0x6c, 0xb2, 0x3d, 0xda, 0x40, 0x6a, 0x26, 0xc9, 0x7d, 0xc8, 0x97, 0x2a,
+  0x2b, 0x01, 0xe7, 0x85, 0x36, 0xcc, 0x8b, 0xac, 0x83, 0x71, 0xd4, 0xd1,
+  0xa2, 0x23, 0x57, 0xa3, 0xd6, 0xf3, 0x88, 0xf7, 0xab, 0x87, 0xf3, 0xfe,
+  0xd7, 0x0c, 0x67, 0x3f, 0x79, 0x30, 0x49, 0x43, 0x2b, 0x10, 0x33, 0xc7,
+  0xaf, 0xd4, 0xbd, 0x3a, 0x29, 0x40, 0xd5, 0x26, 0xf7, 0xc8, 0x1a, 0xa1,
+  0xcc, 0x74, 0xab, 0xfc, 0x5f, 0xd7, 0x30, 0x31, 0x2f, 0xe4, 0x69, 0x28,
+  0x35, 0xdc, 0x7e, 0xdf, 0x86, 0xf2, 0xa9, 0xc3, 0x35, 0xb8, 0x50, 0xcb,
+  0xc2, 0x6a, 0xc1, 0xb8, 0x6a, 0xe2, 0xd3, 0xce, 0x70, 0x3b, 0x94, 0xaf,
+  0x5c, 0x3a, 0x54, 0x09, 0x08, 0xda, 0x1a, 0xe0, 0x52, 0x5e, 0x44, 0xe1,
+  0x99, 0x20, 0x3f, 0xb0, 0xf5, 0x9a, 0x7e, 0xb6, 0x23, 0x20, 0x5e, 0x74,
+  0x92, 0xb4, 0x62, 0x12, 0x23, 0xe8, 0x64, 0xb3, 0x05, 0xd2, 0x46, 0x8c,
+  0x03, 0x86, 0x42, 0x00, 0xce, 0xd1, 0x53, 0x7f, 0xa4, 0x9e, 0xb9, 0xed,
+  0xd6, 0x31, 0x4a, 0x56, 0x01, 0x1e, 0xb0, 0xc0, 0x7e, 0x08, 0x9f, 0x59,
+  0x26, 0x2d, 0xd5, 0x2b, 0xd3, 0xdb, 0x0e, 0x9a, 0xa9, 0xa6, 0x4c, 0xcf,
+  0xb8, 0x6c, 0x93, 0xcb, 0x65, 0x09, 0xc6, 0xab, 0x20, 0x8c, 0x8a, 0x48,
+  0xc3, 0xad, 0x72, 0x84, 0x6e, 0x84, 0xd3, 0x20, 0x83, 0x9b, 0x8e, 0xcb,
+  0x72, 0x81, 0x73, 0x2d, 0xf6, 0x71, 0x60, 0x67, 0x68, 0xd1, 0x3f, 0xef,
+  0x7d, 0x73, 0xe2, 0x19, 0xb5, 0x3b, 0xcd, 0x69, 0x40, 0xeb, 0x00, 0x66,
+  0xb1, 0x02, 0xe8, 0xca, 0x0b, 0x8d, 0x84, 0x1d, 0x30, 0x7b, 0xb3, 0xb6,
+  0x78, 0xb7, 0x86, 0x58, 0x9b, 0xe9, 0xca, 0x35, 0xd0, 0x4f, 0x06, 0xff,
+  0x43, 0x57, 0x86, 0xc5, 0x73, 0x8e, 0x1e, 0x43, 0xe5, 0x8e, 0x45, 0x80,
+  0x68, 0xaa, 0x49, 0x7e, 0x60, 0xf8, 0x1c, 0x1a, 0x6a, 0xf3, 0x70, 0x99,
+  0xb7, 0x96, 0x23, 0x04, 0xfe, 0xf7, 0x26, 0xc4, 0xae, 0x6d, 0x14, 0x7d,
+  0x57, 0x56, 0x21, 0xcd, 0xad, 0xb9, 0x52, 0x20, 0x12, 0x2f, 0xd8, 0x19,
+  0xb0, 0xbb, 0xc8, 0xbe, 0xe2, 0x4a, 0x8d, 0x07, 0x45, 0x1a, 0x2e, 0xab,
+  0xe9, 0x72, 0x6b, 0x36, 0x52, 0x21, 0x7e, 0x67, 0xca, 0x90, 0x04, 0xd7,
+  0x01, 0xbd, 0x30, 0x78, 0xaf, 0xe6, 0x8c, 0x2f, 0xa5, 0x87, 0x21, 0xec,
+  0xee, 0xd2, 0xc3, 0x29, 0xca, 0x95, 0xdb, 0x03, 0x7b, 0xfa, 0x12, 0x67,
+  0xc5, 0xf6, 0xd4, 0x92, 0xd3, 0x5c, 0x15, 0x79, 0xde, 0xb2, 0x66, 0xb9,
+  0xd6, 0x35, 0xa6, 0x30, 0x10, 0x97, 0x0e, 0x1f, 0x32, 0xf9, 0x55, 0xde,
+  0x55, 0xe5, 0xf1, 0x9e, 0x9b, 0x18, 0x4a, 0xd4, 0xbd, 0xda, 0x5e, 0x76,
+  0x77, 0xb6, 0x64, 0x30, 0x5b, 0xd2, 0x80, 0xc8, 0x75, 0x4a, 0x92, 0x3e,
+  0x0c, 0xc4, 0x00, 0x88, 0xc2, 0x9b, 0x8b, 0x13, 0x05, 0x38, 0x7c, 0x67,
+  0x96, 0xcf, 0x33, 0x57, 0x5f, 0x93, 0xaf, 0x26, 0xba, 0x6b, 0xa5, 0x28,
+  0x53, 0xa1, 0xfb, 0xb3, 0xe6, 0x37, 0xa8, 0xef, 0x44, 0x3e, 0x22, 0xa5,
+  0xc1, 0x6d, 0xa8, 0x35, 0x65, 0x0a, 0x2f, 0x4a, 0x17, 0xfa, 0x9d, 0xcb,
+  0xa0, 0x03, 0x6a, 0xcf, 0x5c, 0x9d, 0xfe, 0x67, 0xfb, 0xef, 0xbe, 0x3e,
+  0x84, 0x24, 0xe0, 0x20, 0x27, 0x73, 0xa6, 0xf6, 0xc9, 0x72, 0x0c, 0x55,
+  0x88, 0x56, 0x0c, 0xd1, 0x6f, 0x80, 0x62, 0xb6, 0xfa, 0x8c, 0x28, 0x39,
+  0x09, 0xe2, 0xc5, 0x76, 0x6b, 0x4c, 0xdb, 0x5a, 0x62, 0x16, 0x55, 0x48,
+  0x10, 0xac, 0x30, 0x72, 0xca, 0x4b, 0x01, 0x74, 0x83, 0xd1, 0x22, 0x55,
+  0x90, 0x9a, 0x34, 0x04, 0x31, 0x51, 0x3b, 0xcb, 0xb0, 0x79, 0x16, 0xd7,
+  0x2c, 0xc1, 0xc5, 0xe9, 0xf4, 0x25, 0x74, 0xfa, 0x61, 0x68, 0x55, 0x13,
+  0x8c, 0x8d, 0x9d, 0xed, 0x6d, 0x5f, 0x72, 0x27, 0x75, 0x0d, 0x76, 0xb8,
+  0x65, 0x99, 0x6c, 0x0f, 0x5e, 0xbc, 0x58, 0xc5, 0x08, 0x5d, 0xa3, 0x40,
+  0x44, 0x79, 0xf6, 0xc9, 0x6d, 0x0e, 0xf8, 0xd1, 0x55, 0x6d, 0x46, 0x34,
+  0x9a, 0x2a, 0x07, 0x1c, 0xa1, 0xac, 0xa8, 0x93, 0x5a, 0xd4, 0xc2, 0x23,
+  0xde, 0x1a, 0xb8, 0xcf, 0xe6, 0x4e, 0xad, 0xe1, 0xa5, 0x5c, 0xf3, 0x58,
+  0xd9, 0x80, 0xce, 0x30, 0x63, 0xd0, 0x82, 0x43, 0x0a, 0x73, 0xe7, 0xc5,
+  0xfd, 0xa4, 0x85, 0x09, 0x14, 0xf8, 0x15, 0x4b, 0x74, 0xd9, 0x9d, 0x8d,
+  0x89, 0x04, 0xef, 0x4f, 0xd9, 0xfe, 0x77, 0xf4, 0xee, 0x6b, 0x31, 0x87,
+  0x90, 0x6e, 0x0f, 0x5b, 0xfa, 0x56, 0x4b, 0xd3, 0x7f, 0x2f, 0xb5, 0x73,
+  0x38, 0x9c, 0x14, 0xe1, 0x1b, 0x52, 0x77, 0x37, 0x9f, 0x0b, 0x2b, 0xf0,
+  0xbb, 0xbf, 0xc2, 0x56, 0x79, 0x91, 0x0c, 0x02, 0xe1, 0x44, 0x0b, 0xe7,
+  0xb0, 0x64, 0x32, 0xbb, 0x37, 0xcd, 0x48, 0x7b, 0x40, 0xeb, 0xe6, 0x99,
+  0x71, 0xcd, 0x8a, 0x9e, 0x2b, 0xea, 0x39, 0x28, 0xa8, 0x23, 0x9b, 0x44,
+  0xba, 0x94, 0x6e, 0x70, 0xbe, 0x5b, 0x92, 0xc8, 0xa7, 0x0d, 0xa5, 0x61,
+  0xea, 0x6c, 0x56, 0x7a, 0x64, 0xc9, 0xaa, 0x6f, 0xb6, 0x9f, 0xb6, 0x19,
+  0x12, 0x46, 0xc5, 0x34, 0xe4, 0xea, 0xbc, 0xdb, 0xa8, 0x0a, 0x5b, 0x14,
+  0xff, 0xf8, 0x38, 0x1f, 0x18, 0x21, 0x1f, 0x54, 0xbe, 0xa9, 0xe6, 0x13,
+  0x6f, 0xd3, 0xd0, 0x11, 0x47, 0x1d, 0x21, 0x17, 0xf2, 0xbe, 0x74, 0x9d,
+  0xc6, 0xbb, 0x93, 0xf7, 0x6d, 0x69, 0x22, 0x07, 0x80, 0x45, 0x5a, 0x2d,
+  0xad, 0xe4, 0x52, 0x4f, 0x4d, 0x97, 0x61, 0x29, 0x1c, 0x9c, 0x23, 0x6f,
+  0x8a, 0x25, 0x6b, 0x89, 0x66, 0xb8, 0xa3, 0xee, 0x12, 0xd3, 0x10, 0x80,
+  0xf8, 0x71, 0x79, 0xdd, 0x20, 0x34, 0xf4, 0x52, 0x21, 0xab, 0x99, 0xa5,
+  0xb1, 0x50, 0xa3, 0x28, 0x57, 0x1e, 0xf8, 0xbb, 0x5c, 0x2a, 0x76, 0x27,
+  0xe2, 0x13, 0x68, 0xf0, 0x69, 0x75, 0x8d, 0xc0, 0x41, 0x67, 0x8a, 0xea,
+  0x8a, 0x57, 0xe8, 0x5e, 0x51, 0xac, 0x49, 0x9e, 0x12, 0x61, 0x0a, 0xc2,
+  0x75, 0x63, 0x29, 0x9a, 0x2b, 0xb0, 0xb6, 0xc6, 0x46, 0xf8, 0x2d, 0x36,
+  0xc5, 0x9f, 0x77, 0x17, 0xd0, 0x6c, 0xe9, 0x0f, 0xda, 0xe3, 0xbd, 0x8f,
+  0xe1, 0x11, 0xcb, 0x7c, 0x60, 0x3d, 0xf9, 0xd4, 0x13, 0x27, 0xf2, 0x7b,
+  0xc4, 0xaf, 0x88, 0x43, 0x17, 0x30, 0xb2, 0x28, 0xa9, 0x37, 0xad, 0x69,
+  0xa1, 0x2e, 0x00, 0xa3, 0x0f, 0x34, 0x33, 0xe0, 0x40, 0xb4, 0xb6, 0x0b,
+  0x0a, 0x3b, 0x30, 0x78, 0x05, 0xea, 0xcc, 0xd8, 0x7b, 0x88, 0x59, 0xe2,
+  0xab, 0x44, 0x4d, 0x25, 0x13, 0x85, 0x65, 0x0b, 0x51, 0x7f, 0xe1, 0xeb,
+  0x96, 0x14, 0x3a, 0xf4, 0x89, 0x19, 0xca, 0x00, 0x05, 0xee, 0x40, 0x22,
+  0xd2, 0xcf, 0x2f, 0xd8, 0x8c, 0x80, 0xab, 0xcf, 0xf4, 0xd1, 0xef, 0x0e,
+  0xcf, 0xbe, 0x3a, 0x39, 0x3f, 0xa4, 0xfd, 0x78, 0x7d, 0xf8, 0xd5, 0x7b,
+  0xe6, 0x5a, 0x4c, 0x1d, 0x62, 0x7a, 0x06, 0x86, 0xb2, 0xd8, 0xbf, 0x00,
+  0x78, 0x86, 0x54, 0x1a, 0x26, 0x53, 0x91, 0x83, 0xfa, 0x2e, 0xb1, 0x57,
+  0x45, 0x3c, 0xc1, 0x22, 0x9e, 0x66, 0x62, 0xab, 0xcc, 0x91, 0x86, 0xe0,
+  0x31, 0xd3, 0x39, 0xda, 0x6f, 0xce, 0xf5, 0x1e, 0x6a, 0x83, 0x8b, 0x32,
+  0x74, 0xd7, 0x6a, 0xcf, 0x1b, 0x35, 0x6f, 0xc5, 0x32, 0xad, 0x87, 0x8f,
+  0x9a, 0x1d, 0x15, 0x50, 0xda, 0x51, 0xb8, 0x02, 0xc4, 0x7b, 0xe0, 0xe4,
+  0x68, 0x85, 0xeb, 0x9c, 0x16, 0x72, 0x6b, 0xa2, 0xa4, 0x3d, 0xb7, 0x8d,
+  0x7b, 0x3c, 0xaf, 0x71, 0x85, 0x8b, 0x42, 0x21, 0x91, 0x8c, 0xc0, 0x3a,
+  0x82, 0xe7, 0x73, 0x22, 0xb9, 0xe7, 0x53, 0xbd, 0x0e, 0xc0, 0xfd, 0xaa,
+  0x4c, 0xa0, 0xe2, 0xe4, 0xd6, 0x56, 0x7f, 0xb8, 0x44, 0xfb, 0x6a, 0x1d,
+  0x9a, 0x0d, 0x55, 0x82, 0xef, 0x30, 0x4f, 0x2d, 0xcb, 0x2a, 0xf5, 0xe7,
+  0xad, 0x3a, 0x22, 0x56, 0x3e, 0x08, 0xca, 0x51, 0xd2, 0xb9, 0x5d, 0xcd,
+  0x7a, 0x2e, 0x64, 0xa6, 0x6c, 0xe7, 0x10, 0x41, 0xc0, 0xc0, 0xab, 0x11,
+  0xab, 0xdf, 0x2c, 0xcd, 0xee, 0x05, 0x14, 0x39, 0xbb, 0x9c, 0x53, 0x10,
+  0xa8, 0x90, 0xab, 0x0b, 0xd6, 0x9b, 0x34, 0xab, 0x0e, 0x26, 0x9f, 0x4e,
+  0x24, 0xcc, 0x55, 0x03, 0xf1, 0x78, 0x4b, 0xe1, 0x12, 0x10, 0xe2, 0xeb,
+  0x9e, 0x77, 0x69, 0x5d, 0x6a, 0xd5, 0xf3, 0x19, 0x0d, 0x1c, 0x27, 0x6b,
+  0x6b, 0x6b, 0xaf, 0x0f, 0x2f, 0xf6, 0x8f, 0x8e, 0x0f, 0x5f, 0x27, 0x47,
+  0xef, 0xde, 0x9c, 0x9c, 0xbd, 0xdd, 0xbf, 0xd0, 0x70, 0x8c, 0xd7, 0xce,
+  0x22, 0xe7, 0xf1, 0x9c, 0x14, 0xbc, 0x3e, 0xb0, 0xd6, 0x81, 0x84, 0x69,
+  0x17, 0xaf, 0xb4, 0x50, 0x81, 0x2c, 0x43, 0xd6, 0x58, 0x83, 0xb5, 0x44,
+  0xc3, 0x38, 0x3c, 0xfe, 0x15, 0xcb, 0x05, 0x5b, 0xce, 0xf7, 0x3e, 0xb4,
+  0xe5, 0x74, 0x20, 0xad, 0x5c, 0xbc, 0xf2, 0xc1, 0xa6, 0x52, 0xb6, 0x81,
+  0x5c, 0x4d, 0x33, 0xbd, 0x13, 0x01, 0xae, 0x8c, 0xf4, 0x7f, 0x41, 0x44,
+  0x3e, 0xda, 0x6a, 0xc2, 0x33, 0xc3, 0xd0, 0x62, 0x70, 0x68, 0x29, 0x00,
+  0x51, 0x42, 0xd8, 0x8d, 0xcb, 0x02, 0x51, 0x25, 0x61, 0x9b, 0x0e, 0x50,
+  0x02, 0x3b, 0xca, 0xf8, 0xc1, 0x88, 0xfe, 0x11, 0xf8, 0xa8, 0x60, 0x7f,
+  0x15, 0xea, 0x6e, 0xca, 0xc1, 0x47, 0x88, 0x29, 0x62, 0xfc, 0xd4, 0x8a,
+  0x76, 0xca, 0x9d, 0x75, 0x60, 0xba, 0x3a, 0x86, 0x6d, 0xde, 0x39, 0xad,
+  0xb5, 0x18, 0x36, 0xb5, 0xe1, 0xfc, 0xf5, 0x24, 0x31, 0x0d, 0x8e, 0xb4,
+  0x06, 0x27, 0xaf, 0x05, 0x03, 0xdc, 0xf3, 0xcf, 0xb9, 0x87, 0x54, 0xd4,
+  0x00, 0x52, 0xaf, 0xf1, 0xe7, 0x34, 0x65, 0x75, 0x51, 0xe9, 0x69, 0xf3,
+  0xe7, 0xd6, 0x50, 0x5b, 0x06, 0xaf, 0xe9, 0xa1, 0xc9, 0x72, 0xb6, 0xd0,
+  0x2a, 0xd2, 0x26, 0x51, 0xc3, 0x96, 0x67, 0x5b, 0x28, 0x42, 0x1b, 0x84,
+  0x0f, 0x18, 0x7e, 0xde, 0xe8, 0x1a, 0xc8, 0x3c, 0x40, 0xdf, 0xb5, 0xb9,
+  0x02, 0x59, 0x47, 0xf6, 0xde, 0x3b, 0x2b, 0x0d, 0xe3, 0x62, 0x8e, 0x1a,
+  0x92, 0x0b, 0x16, 0xe4, 0xdc, 0x3d, 0x8b, 0x95, 0x0c, 0x5e, 0x48, 0x7d,
+  0x88, 0x12, 0xd6, 0x7f, 0xc3, 0xea, 0xcc, 0x30, 0xc9, 0x6a, 0x83, 0x7a,
+  0x55, 0x74, 0x9d, 0x8f, 0x8d, 0x49, 0x85, 0x2f, 0x36, 0x43, 0x7a, 0x42,
+  0x4e, 0x6f, 0x5d, 0x7b, 0x28, 0xdd, 0xf6, 0x08, 0x94, 0x8b, 0x13, 0x3f,
+  0xb9, 0xb7, 0xda, 0xdd, 0x5c, 0x27, 0x43, 0x90, 0x32, 0xd7, 0x34, 0x75,
+  0x5d, 0x39, 0x25, 0x1c, 0x62, 0x46, 0xbe, 0x4b, 0x40, 0x5f, 0x17, 0x37,
+  0xac, 0xcb, 0x23, 0xb7, 0x73, 0x74, 0x1f, 0x66, 0xe1, 0x49, 0xf0, 0x99,
+  0x96, 0x6a, 0x02, 0xd3, 0x9b, 0xaf, 0x19, 0xcc, 0xaf, 0xbd, 0x64, 0x21,
+  0x8c, 0xe0, 0xfe, 0x52, 0x2f, 0x00, 0x4c, 0x9e, 0x95, 0xea, 0x2c, 0xad,
+  0xa0, 0x50, 0x21, 0x17, 0x47, 0xee, 0x0c, 0x67, 0x86, 0xf5, 0x15, 0x31,
+  0x02, 0xc0, 0x2c, 0xb0, 0x68, 0x41, 0x0e, 0x4d, 0x19, 0x4e, 0xc3, 0x0e,
+  0x85, 0xc4, 0xdd, 0xbb, 0x56, 0xcc, 0xc1, 0x41, 0xcd, 0x20, 0x78, 0x5a,
+  0xa3, 0x49, 0x4f, 0x8b, 0x4a, 0xce, 0x1b, 0x24, 0xfc, 0x1e, 0xb3, 0x9e,
+  0x1e, 0xc8, 0xa0, 0xb7, 0xb8, 0xa6, 0x3e, 0x7a, 0xc9, 0x15, 0xeb, 0x48,
+  0x23, 0x1a, 0x7a, 0x87, 0x81, 0x4e, 0xe4, 0xf1, 0x57, 0x67, 0xe9, 0x65,
+  0x9a, 0x4d, 0x7f, 0xbf, 0xbb, 0x7d, 0x9e, 0x5e, 0x2d, 0xa7, 0xe9, 0xbf,
+  0xe3, 0xc5, 0x57, 0x4f, 0x9e, 0xec, 0x6e, 0x7f, 0xf6, 0xf9, 0x76, 0xaf,
+  0x1d, 0x7d, 0xa0, 0x11, 0x59, 0x16, 0x61, 0xc3, 0x37, 0x19, 0xf8, 0x2e,
+  0xfa, 0x19, 0x8e, 0xaf, 0x72, 0x28, 0x75, 0x2c, 0x28, 0xe9, 0x1a, 0xa4,
+  0xa2, 0x4d, 0x82, 0x4d, 0x2a, 0xec, 0x20, 0xdd, 0xb8, 0x44, 0xd7, 0xbf,
+  0xdb, 0xd9, 0x13, 0x56, 0x76, 0x05, 0xe3, 0x7b, 0x2a, 0x14, 0x9b, 0xbc,
+  0xcc, 0xe7, 0x74, 0x03, 0x7d, 0x91, 0xd4, 0xe9, 0x95, 0xa3, 0x55, 0xb4,
+  0x80, 0xdd, 0x70, 0xdb, 0x59, 0xc3, 0x45, 0xcd, 0xa2, 0x95, 0x14, 0xb3,
+  0xe1, 0x52, 0x2d, 0x10, 0xb2, 0x16, 0x59, 0xc9, 0x70, 0x14, 0xc5, 0x55,
+  0x99, 0xce, 0x2c, 0x57, 0x85, 0xdf, 0xe7, 0xb0, 0xb5, 0xe1, 0x62, 0x8a,
+  0x34, 0x0a, 0x8b, 0x3d, 0x13, 0x89, 0x57, 0x08, 0x6e, 0xba, 0xa8, 0x3c,
+  0x0c, 0x9f, 0x5c, 0x37, 0x61, 0x11, 0x18, 0x5a, 0x2c, 0xd8, 0x54, 0x7a,
+  0x98, 0x95, 0xb0, 0x0c, 0x70, 0xb3, 0x89, 0xcd, 0x74, 0x88, 0xdf, 0x81,
+  0xff, 0x90, 0x0a, 0xe0, 0x62, 0x6f, 0x21, 0x99, 0xd5, 0x82, 0xd2, 0xd1,
+  0xb3, 0xdc, 0x86, 0xbc, 0x31, 0xaf, 0xd4, 0xc7, 0x6c, 0x26, 0x2f, 0xcd,
+  0x4a, 0xb4, 0xf3, 0xc5, 0x2b, 0x10, 0xc4, 0xce, 0x17, 0xff, 0xee, 0x3e,
+  0xdb, 0xd5, 0xcf, 0x76, 0xbf, 0xf8, 0xf7, 0xe1, 0x10, 0xe3, 0x63, 0x0a,
+  0x59, 0xb7, 0xaf, 0xd7, 0x15, 0x6d, 0x25, 0xd5, 0x23, 0x2c, 0x7f, 0x39,
+  0xf8, 0x63, 0xd9, 0xeb, 0x9e, 0xf5, 0x1c, 0xae, 0x72, 0x5f, 0x3d, 0xaa,
+  0x8e, 0x6f, 0xe5, 0x55, 0x88, 0x6b, 0x5d, 0xc5, 0x16, 0xdd, 0xf9, 0x41,
+  0xd0, 0x8e, 0x46, 0x5f, 0xe2, 0xe5, 0x3f, 0x30, 0xa5, 0xfe, 0x61, 0x2d,
+  0x51, 0xef, 0x26, 0x6f, 0xc7, 0x3d, 0x1c, 0x1e, 0x46, 0xb6, 0xf4, 0x68,
+  0x6a, 0x45, 0x67, 0xb8, 0x65, 0x4e, 0x00, 0xe1, 0x3b, 0x50, 0x82, 0xc6,
+  0x31, 0xd8, 0x3f, 0x2a, 0xae, 0x85, 0x6c, 0xf8, 0x5a, 0xe2, 0x9e, 0x91,
+  0x44, 0x19, 0x92, 0x31, 0x50, 0x2b, 0x45, 0x2a, 0xa0, 0xfc, 0xf0, 0x83,
+  0x0a, 0x54, 0xf4, 0x8b, 0x8e, 0xfc, 0x9a, 0x78, 0xd1, 0x84, 0xd8, 0xdb,
+  0x0c, 0x75, 0xea, 0x19, 0x68, 0x90, 0xe6, 0xa1, 0x57, 0xfe, 0xa5, 0xce,
+  0x54, 0x1a, 0xa1, 0xad, 0xdd, 0x3f, 0x3f, 0x38, 0x3a, 0x42, 0xa0, 0x29,
+  0x16, 0xf5, 0x50, 0xd8, 0x18, 0x68, 0x73, 0x03, 0x21, 0x1e, 0x3e, 0x2c,
+  0x31, 0x24, 0x7d, 0xde, 0x3b, 0x6c, 0x3b, 0xa8, 0x9f, 0x1a, 0x33, 0x05,
+  0x5c, 0xb7, 0x12, 0x34, 0x2b, 0x52, 0xce, 0xab, 0x9e, 0x3c, 0x78, 0x95,
+  0xf7, 0xd4, 0x89, 0x25, 0x9f, 0xf4, 0x3c, 0x7c, 0x8e, 0xec, 0x07, 0x36,
+  0xed, 0x95, 0x88, 0x4e, 0xf9, 0xdf, 0xb2, 0x57, 0x3b, 0xdb, 0xf1, 0x27,
+  0xe0, 0xb5, 0x65, 0x4c, 0xf1, 0x57, 0xde, 0x21, 0xf8, 0xd0, 0xf3, 0xf9,
+  0x44, 0x9e, 0xbe, 0xce, 0x27, 0x13, 0xba, 0x13, 0x6e, 0xd3, 0xe9, 0x92,
+  0x68, 0x61, 0xc4, 0x37, 0x2c, 0xff, 0xff, 0x8a, 0x71, 0xc0, 0x63, 0xa5,
+  0xcf, 0x56, 0xcb, 0xd1, 0x2c, 0x6f, 0x0c, 0x78, 0x8b, 0x27, 0xf8, 0x05,
+  0x4f, 0xf8, 0xfb, 0xcc, 0x51, 0x47, 0xc6, 0xa2, 0x9d, 0xc8, 0x7e, 0xeb,
+  0x97, 0x45, 0x31, 0x4a, 0xcb, 0x75, 0x75, 0xe7, 0xd8, 0x38, 0xd7, 0x77,
+  0x76, 0x9f, 0x3c, 0x7d, 0xb6, 0x3e, 0x54, 0x39, 0x0d, 0x2c, 0xa2, 0x0e,
+  0x51, 0x2a, 0xa4, 0x89, 0x54, 0x0e, 0x68, 0x03, 0xcf, 0x35, 0xe6, 0x5c,
+  0x65, 0x2e, 0xc6, 0xdd, 0xbd, 0x92, 0xde, 0xfe, 0x9d, 0xfb, 0x79, 0x85,
+  0x2e, 0xfe, 0x3d, 0x9f, 0xbc, 0x72, 0x33, 0xfc, 0x77, 0x9e, 0xcb, 0x2b,
+  0x9d, 0x04, 0xed, 0xab, 0xa5, 0x21, 0x56, 0x61, 0x75, 0x9a, 0xc7, 0x36,
+  0xd7, 0x36, 0x71, 0x0d, 0x93, 0x46, 0x04, 0xc3, 0x60, 0x22, 0xde, 0x0f,
+  0x48, 0xab, 0x3e, 0x07, 0x6f, 0xeb, 0xe3, 0x80, 0x5a, 0x19, 0x70, 0x2b,
+  0x03, 0xcf, 0xb0, 0x01, 0x05, 0x3f, 0xe0, 0x8d, 0xe8, 0x6b, 0x22, 0xe6,
+  0x14, 0x56, 0x16, 0x15, 0x05, 0x8a, 0x02, 0x41, 0x00, 0x07, 0x5f, 0x1f,
+  0xad, 0x57, 0x61, 0x51, 0x86, 0x7e, 0xcc, 0x3e, 0xed, 0x42, 0x0c, 0xc7,
+  0xe9, 0x82, 0x4f, 0xff, 0x5a, 0xa2, 0x35, 0x15, 0x53, 0x8e, 0x23, 0xe1,
+  0x7e, 0x25, 0x6b, 0x9a, 0x3a, 0x33, 0xb0, 0x5c, 0xb6, 0x78, 0x97, 0x02,
+  0x52, 0x1f, 0x34, 0x03, 0xd0, 0x66, 0x09, 0x28, 0x81, 0xcf, 0x67, 0xe1,
+  0x12, 0x2e, 0x07, 0x6f, 0x9c, 0xd3, 0xd3, 0x25, 0xf8, 0xe9, 0xa3, 0xf4,
+  0x95, 0xf0, 0x13, 0x63, 0x11, 0x3d, 0x28, 0xc0, 0x9e, 0x4f, 0x84, 0xdc,
+  0x03, 0x89, 0xff, 0xa3, 0x4c, 0xd3, 0x34, 0xc5, 0x6c, 0x22, 0x82, 0x21,
+  0xf3, 0xcf, 0x97, 0x5f, 0x1a, 0xce, 0xf3, 0x17, 0x09, 0xea, 0xa2, 0xca,
+  0x5b, 0xea, 0x77, 0x54, 0x03, 0x94, 0xd8, 0x6c, 0xf1, 0x92, 0xaa, 0x07,
+  0xce, 0x05, 0x16, 0x44, 0xe3, 0xa8, 0x60, 0x10, 0xa2, 0xf1, 0x8f, 0xee,
+  0xd5, 0xd8, 0xc0, 0x2d, 0xac, 0xff, 0x09, 0x87, 0xe0, 0x25, 0x6f, 0x03,
+  0xbe, 0xfe, 0x62, 0x7d, 0xcd, 0xd5, 0xc7, 0x70, 0x92, 0x7b, 0xcb, 0x81,
+  0x2c, 0x04, 0x1a, 0xce, 0xa7, 0xb8, 0x74, 0xa0, 0xc6, 0x22, 0x8d, 0x31,
+  0x40, 0x07, 0x8a, 0x87, 0x93, 0x34, 0x35, 0xe5, 0x74, 0xe7, 0x86, 0x81,
+  0x5a, 0x1a, 0xcf, 0x18, 0xfd, 0x84, 0xa5, 0xc7, 0x75, 0x8e, 0x56, 0xc5,
+  0x7b, 0xeb, 0x0e, 0x23, 0x19, 0x36, 0x53, 0x30, 0xbc, 0x32, 0x33, 0xa4,
+  0xc9, 0x35, 0x4d, 0xcc, 0xf7, 0xd2, 0x7c, 0x38, 0xb1, 0x2a, 0x10, 0x1e,
+  0x7c, 0x9a, 0xa3, 0xa0, 0xd9, 0x74, 0x8e, 0xc8, 0x1b, 0xce, 0x21, 0xd6,
+  0x4e, 0x5f, 0xf1, 0x72, 0xef, 0x0c, 0xaf, 0xf2, 0x4b, 0x59, 0x0c, 0x62,
+  0x91, 0x57, 0xd9, 0x16, 0xfd, 0xd9, 0xa7, 0xcf, 0x77, 0x59, 0x2a, 0xe3,
+  0x5f, 0x9e, 0x20, 0x1e, 0x2b, 0xbc, 0xfb, 0x83, 0xb3, 0xe1, 0xce, 0x05,
+  0xff, 0x92, 0xbb, 0x3b, 0x5f, 0xbd, 0x3a, 0x3a, 0xca, 0x81, 0x15, 0x43,
+  0x68, 0x54, 0x81, 0x0b, 0x83, 0x4a, 0x80, 0x7f, 0x5f, 0x40, 0x3e, 0xa9,
+  0x7c, 0xf0, 0x88, 0x06, 0x52, 0xa8, 0xa0, 0xce, 0x72, 0x77, 0xae, 0xe6,
+  0x19, 0xce, 0x02, 0xc2, 0xcd, 0x9a, 0xdd, 0x6d, 0xf6, 0xc3, 0x48, 0x5b,
+  0x62, 0xef, 0xb7, 0x9c, 0x57, 0xcf, 0x58, 0x1d, 0x3e, 0x23, 0x93, 0xbb,
+  0xdf, 0xe0, 0x66, 0xd7, 0x90, 0x6a, 0x6c, 0x99, 0xc6, 0xd8, 0xe6, 0xbc,
+  0xbd, 0x83, 0x41, 0x29, 0x59, 0x93, 0x36, 0xd9, 0x83, 0xb6, 0xc9, 0xdd,
+  0x64, 0xd3, 0x0a, 0xba, 0xba, 0x42, 0x35, 0x5a, 0xaf, 0x86, 0xa6, 0x8d,
+  0x8e, 0xd6, 0xc3, 0xb3, 0x5f, 0x8c, 0xeb, 0x8c, 0x74, 0x5d, 0x86, 0xd6,
+  0x9a, 0x09, 0x9f, 0x3b, 0x9c, 0x49, 0x4d, 0x4d, 0x90, 0xf0, 0x74, 0x20,
+  0xb7, 0xa7, 0x8a, 0x44, 0x83, 0x37, 0xc3, 0xe4, 0x18, 0x11, 0xe3, 0x55,
+  0x2a, 0x08, 0x2d, 0x76, 0xc3, 0x1a, 0x35, 0x10, 0xe9, 0x54, 0x86, 0x32,
+  0xc7, 0xef, 0x31, 0x28, 0x86, 0x91, 0x54, 0x6e, 0x40, 0xe9, 0x42, 0x5c,
+  0x22, 0x5f, 0xa8, 0x3c, 0xd2, 0x87, 0x2d, 0xdc, 0x3d, 0x07, 0x9b, 0xbf,
+  0xd8, 0xfd, 0x90, 0xfe, 0xe5, 0x08, 0x36, 0x68, 0x24, 0x04, 0xc3, 0x0e,
+  0xd9, 0xba, 0x3b, 0x04, 0x12, 0x52, 0x99, 0x89, 0xd1, 0x85, 0xd1, 0x19,
+  0x18, 0x26, 0x06, 0x3e, 0x61, 0x6a, 0x0d, 0x54, 0x06, 0x04, 0x6c, 0x22,
+  0xa3, 0x1e, 0xf4, 0xc6, 0x69, 0xe6, 0x94, 0x6b, 0x2d, 0x11, 0xe8, 0xc2,
+  0xcd, 0x61, 0x8b, 0xd1, 0x5a, 0x1e, 0xce, 0x5d, 0xc7, 0x83, 0xe4, 0x71,
+  0xa5, 0xb7, 0xf4, 0x0b, 0x0b, 0x67, 0xa3, 0x92, 0x76, 0x3d, 0x2b, 0xe5,
+  0x6a, 0x90, 0x18, 0xa1, 0x42, 0x38, 0x89, 0xa8, 0x29, 0x6f, 0x8f, 0x13,
+  0x43, 0xba, 0xb9, 0xf4, 0xa2, 0xa2, 0x45, 0x66, 0x62, 0x8a, 0x6a, 0x19,
+  0x11, 0x79, 0x48, 0x9f, 0x92, 0x5b, 0x4e, 0xd6, 0x96, 0x73, 0xe5, 0x13,
+  0x5e, 0x9c, 0xc6, 0x91, 0x0d, 0x9e, 0x90, 0x57, 0xd7, 0x04, 0x95, 0x6b,
+  0x9d, 0x97, 0x60, 0xbd, 0x9f, 0xac, 0xf3, 0x50, 0xf9, 0x8b, 0x75, 0xac,
+  0x27, 0x3e, 0x0e, 0x96, 0x6f, 0x7d, 0x18, 0x39, 0x85, 0xfc, 0xcc, 0xab,
+  0x2f, 0x1b, 0xab, 0x84, 0xcf, 0xad, 0xa9, 0x57, 0x92, 0x66, 0xd2, 0x91,
+  0xb9, 0xed, 0xdd, 0xa0, 0xfd, 0x57, 0x07, 0xd4, 0x0a, 0xe0, 0xc6, 0x83,
+  0x30, 0xd7, 0xb1, 0xfb, 0x2c, 0x47, 0xce, 0x6c, 0xa7, 0xa1, 0xc7, 0x4f,
+  0xf1, 0x85, 0xb1, 0x22, 0x17, 0x02, 0x2a, 0xdc, 0x4d, 0x48, 0xc0, 0x38,
+  0x2f, 0xed, 0x66, 0x2e, 0x7a, 0xdf, 0x5d, 0x01, 0x2b, 0x03, 0x78, 0xce,
+  0xce, 0x10, 0x39, 0x94, 0xbe, 0xb8, 0xaf, 0x6b, 0xc0, 0x29, 0xef, 0x3d,
+  0x2c, 0x68, 0xcf, 0x45, 0xe5, 0x9a, 0x4a, 0x6f, 0xab, 0x1c, 0xe3, 0x5d,
+  0x8b, 0x7c, 0x0c, 0x50, 0xed, 0x57, 0x5f, 0x4e, 0x8a, 0x2b, 0xe6, 0x5c,
+  0x7d, 0x3a, 0x68, 0xfc, 0x13, 0x01, 0xc9, 0xbb, 0xda, 0xa9, 0x0c, 0x18,
+  0x67, 0x45, 0xa4, 0x78, 0xfb, 0x7b, 0x45, 0x88, 0xea, 0x1b, 0x36, 0x85,
+  0x8e, 0xb5, 0x6d, 0xd7, 0xb4, 0xec, 0x07, 0xb5, 0xef, 0xbe, 0x08, 0xfb,
+  0xb2, 0xc5, 0x49, 0xb5, 0x65, 0xc8, 0x46, 0xc4, 0x29, 0x6a, 0xb9, 0xca,
+  0xd1, 0x71, 0x81, 0x40, 0xb7, 0x9a, 0x53, 0xa1, 0xb3, 0x5a, 0xee, 0xad,
+  0xa9, 0x26, 0xf6, 0xad, 0x7f, 0xb9, 0x2e, 0x39, 0x02, 0xeb, 0x2f, 0xd7,
+  0xc1, 0xc1, 0x98, 0x2f, 0x59, 0x15, 0x3c, 0xbd, 0x9c, 0xd6, 0xe5, 0x56,
+  0x1c, 0x88, 0xec, 0xa0, 0x78, 0x7f, 0xfe, 0x80, 0xe0, 0x5a, 0xf6, 0x6a,
+  0x64, 0x18, 0x3c, 0x09, 0x33, 0x01, 0x53, 0xae, 0x8c, 0x8a, 0x01, 0x4c,
+  0x47, 0xb5, 0x04, 0xca, 0xe8, 0xa5, 0x0b, 0xb1, 0x0c, 0x78, 0x29, 0x15,
+  0xc7, 0x2f, 0x88, 0x99, 0x73, 0x39, 0x5f, 0x70, 0x76, 0xfc, 0x18, 0x10,
+  0xee, 0x7a, 0x96, 0x86, 0xc9, 0xfb, 0xb9, 0xd4, 0x12, 0xc8, 0x58, 0x59,
+  0xce, 0xcb, 0xf1, 0x72, 0xc6, 0xa6, 0x8a, 0x31, 0x1b, 0xc8, 0x70, 0xf1,
+  0x88, 0x78, 0xd0, 0x70, 0xcf, 0x87, 0x03, 0x16, 0xe3, 0x88, 0x18, 0xcc,
+  0xb5, 0x5f, 0x84, 0xa2, 0x70, 0x00, 0x96, 0x1a, 0xc4, 0x21, 0x15, 0x38,
+  0xdc, 0x14, 0x65, 0x40, 0xec, 0x19, 0x3c, 0x7c, 0x73, 0x78, 0x76, 0x76,
+  0x78, 0xc6, 0xeb, 0xbd, 0x3f, 0x6f, 0x94, 0x8d, 0x73, 0xd0, 0xa9, 0xde,
+  0xd5, 0x68, 0x61, 0xbf, 0x5d, 0x10, 0x7d, 0x61, 0x85, 0xe9, 0x64, 0xc2,
+  0x28, 0xe3, 0xd0, 0x20, 0x04, 0x29, 0x48, 0xca, 0x75, 0x87, 0xe6, 0x45,
+  0x84, 0x7d, 0x3b, 0xb7, 0x41, 0x58, 0xb7, 0x31, 0x90, 0x2d, 0x7c, 0x0b,
+  0xa5, 0xd6, 0x25, 0x5d, 0x5a, 0x4e, 0xfe, 0x75, 0xd6, 0x10, 0x53, 0x87,
+  0x1a, 0xa9, 0x9b, 0xa9, 0x33, 0x7d, 0xea, 0xec, 0x13, 0x98, 0xf2, 0x25,
+  0x9f, 0x51, 0xd6, 0x9d, 0xb0, 0x18, 0x55, 0xbd, 0x5c, 0xe4, 0x13, 0x67,
+  0xed, 0xa5, 0xcf, 0x49, 0xfc, 0x4b, 0xe4, 0x94, 0x57, 0x16, 0xeb, 0x02,
+  0xaf, 0xa6, 0x19, 0x23, 0x42, 0x6b, 0x5b, 0x0b, 0xc1, 0x37, 0x41, 0xbe,
+  0x9c, 0x04, 0x8d, 0x59, 0xd5, 0xa4, 0x66, 0x76, 0xb9, 0xd2, 0x7e, 0x06,
+  0x2b, 0x23, 0x73, 0x0b, 0x0b, 0xbf, 0x09, 0x39, 0x03, 0xdb, 0xb2, 0x66,
+  0x3e, 0xde, 0x9d, 0x43, 0xd8, 0xf6, 0x04, 0x07, 0x05, 0x49, 0xa5, 0xe5,
+  0x5e, 0xf2, 0x63, 0x95, 0x8f, 0x7f, 0xf6, 0x97, 0x07, 0xd2, 0x7f, 0x9a,
+  0x15, 0xe5, 0xb0, 0x74, 0xba, 0x50, 0xaa, 0x0c, 0x4b, 0x32, 0xf7, 0xfb,
+  0xf3, 0xc3, 0xb3, 0x64, 0xff, 0x6b, 0xc6, 0x01, 0xfe, 0x07, 0x37, 0x98,
+  0x9f, 0xd3, 0xdb, 0x61, 0x4d, 0x31, 0x16, 0x14, 0xdd, 0x24, 0x33, 0x53,
+  0xb8, 0x20, 0x73, 0x35, 0x76, 0x36, 0xb7, 0x02, 0xdc, 0x01, 0x0c, 0x45,
+  0x63, 0x0f, 0xd7, 0x92, 0x47, 0x77, 0xf1, 0x53, 0xf6, 0x90, 0x0f, 0x59,
+  0xb8, 0x8b, 0x82, 0x8b, 0x24, 0x2e, 0x09, 0xdb, 0x1b, 0x1d, 0x7d, 0xd5,
+  0x51, 0x3b, 0x65, 0x97, 0xf6, 0x93, 0xf5, 0xb7, 0xc5, 0xdf, 0x48, 0x18,
+  0x48, 0xb7, 0x9e, 0x0c, 0xb7, 0x93, 0x8d, 0xef, 0xf3, 0xf9, 0x8b, 0x67,
+  0x7f, 0x4a, 0x8e, 0x36, 0xd7, 0x1b, 0xc1, 0xfc, 0x52, 0x83, 0x75, 0x94,
+  0xce, 0x6f, 0xdc, 0x96, 0x9d, 0xe0, 0x64, 0x4b, 0x50, 0x9d, 0x15, 0x66,
+  0x91, 0xba, 0xd1, 0x2b, 0x5b, 0x44, 0xea, 0xa7, 0xe6, 0x05, 0x24, 0xdf,
+  0x39, 0xdc, 0x6b, 0xd6, 0xf2, 0xe9, 0xa9, 0x09, 0x2f, 0xdd, 0x8b, 0x67,
+  0x9d, 0x26, 0x9e, 0xba, 0x36, 0xde, 0x4b, 0x1b, 0xbf, 0xb0, 0x89, 0xdd,
+  0xe1, 0xf6, 0x6e, 0xb2, 0x71, 0x72, 0xbe, 0xb5, 0xeb, 0x5a, 0xe8, 0x36,
+  0xb1, 0x8b, 0x26, 0xf8, 0xa1, 0xe6, 0xcb, 0x4f, 0xb9, 0xff, 0x1f, 0xb3,
+  0xf9, 0xcf, 0xc9, 0xc6, 0x0f, 0x3b, 0x3b, 0xd4, 0xc0, 0x9f, 0x92, 0xfd,
+  0xa3, 0x1f, 0x92, 0xa7, 0x43, 0x6a, 0xec, 0x5d, 0x7a, 0xab, 0xcd, 0x29,
+  0x9c, 0xed, 0x39, 0x1a, 0xa1, 0xef, 0x3b, 0x6d, 0x3c, 0x6b, 0xb5, 0x71,
+  0x4c, 0x7a, 0xe1, 0x47, 0xba, 0x56, 0xb6, 0x87, 0x4f, 0x76, 0x93, 0xfc,
+  0xd9, 0xe7, 0xcf, 0xad, 0x21, 0x6d, 0x03, 0xdf, 0x37, 0xad, 0x95, 0x02,
+  0x98, 0x42, 0xa2, 0xce, 0xe1, 0x47, 0x62, 0x68, 0x60, 0x11, 0xa8, 0x95,
+  0x71, 0x9d, 0x96, 0x56, 0xc5, 0x98, 0xeb, 0x1d, 0xd0, 0x4e, 0x29, 0x90,
+  0x74, 0x06, 0xb3, 0x25, 0x5d, 0x9c, 0x7b, 0x9d, 0xe1, 0xb0, 0x6e, 0x6a,
+  0x8f, 0xfe, 0x29, 0x79, 0x7b, 0x7e, 0x74, 0x48, 0x33, 0xda, 0xa6, 0xa1,
+  0xf9, 0x35, 0x94, 0x01, 0xe1, 0x2b, 0x2c, 0xee, 0x0b, 0xe0, 0x92, 0x6a,
+  0x1b, 0x61, 0xbd, 0x5d, 0x10, 0x1d, 0x5d, 0xdc, 0x15, 0xfa, 0xe5, 0x90,
+  0x94, 0xc1, 0xfe, 0x15, 0xab, 0x10, 0x72, 0xd5, 0xa2, 0xeb, 0x6f, 0x8b,
+  0x39, 0x1d, 0x93, 0xb2, 0x28, 0x39, 0x72, 0x6a, 0xbd, 0x21, 0x2d, 0x7c,
+  0xfb, 0xfa, 0x50, 0x92, 0xea, 0xdf, 0xa6, 0x73, 0xe2, 0x91, 0x0c, 0x8e,
+  0x55, 0xdd, 0xb0, 0xff, 0x5f, 0xdc, 0x39, 0xf2, 0xfe, 0xf1, 0xfd, 0xfc,
+  0x23, 0xed, 0xe3, 0x67, 0xc3, 0x1d, 0x0e, 0xd9, 0x66, 0xad, 0xf7, 0xcd,
+  0x5b, 0xfa, 0x7b, 0xe7, 0xe9, 0x7a, 0xc2, 0x5f, 0x35, 0x35, 0x78, 0x3b,
+  0xaf, 0x6b, 0x07, 0x27, 0x27, 0xdf, 0x1e, 0x49, 0x00, 0xc8, 0x81, 0x9a,
+  0x55, 0x59, 0xb8, 0x72, 0x5a, 0xb1, 0x70, 0x57, 0xd2, 0xde, 0x7c, 0xb6,
+  0x12, 0x9c, 0x71, 0x37, 0x59, 0xb6, 0xe0, 0x68, 0x84, 0xba, 0xc5, 0x11,
+  0x6a, 0xe5, 0xd1, 0x2e, 0xb6, 0x89, 0xc5, 0x9f, 0x06, 0xb0, 0x57, 0xc5,
+  0x60, 0xc9, 0x66, 0xc2, 0x1d, 0xdd, 0x3b, 0xe0, 0x8e, 0xd4, 0x17, 0x44,
+  0xc4, 0x10, 0x5d, 0xb6, 0x82, 0x99, 0xa0, 0xa5, 0xec, 0x08, 0xbd, 0xa8,
+  0xba, 0xef, 0xfa, 0x39, 0x49, 0xf7, 0x32, 0xe8, 0x3d, 0xb5, 0xda, 0xae,
+  0x07, 0xf0, 0xd2, 0x90, 0x68, 0x17, 0x5a, 0xec, 0x07, 0xa6, 0x63, 0x8b,
+  0xa8, 0x37, 0xde, 0x5c, 0xc1, 0x96, 0x8d, 0xf0, 0xbc, 0x77, 0xfb, 0x6f,
+  0x0f, 0x5f, 0x7d, 0xb7, 0x7f, 0xfc, 0xfe, 0x90, 0x5e, 0xc9, 0x01, 0xe4,
+  0xee, 0x42, 0xf8, 0x30, 0xc6, 0x59, 0x8e, 0x5a, 0xbf, 0x15, 0x89, 0x07,
+  0xeb, 0x6b, 0x12, 0x5e, 0x9e, 0xf4, 0xf8, 0xad, 0x1d, 0x79, 0x8d, 0xe8,
+  0x82, 0xff, 0xda, 0x95, 0xbf, 0x76, 0xff, 0xd4, 0xdb, 0x6c, 0x4c, 0xba,
+  0xa3, 0x25, 0x33, 0xbd, 0xdc, 0x49, 0xc5, 0x27, 0x0e, 0x0f, 0x92, 0xdc,
+  0x0d, 0x59, 0x95, 0x9e, 0xf9, 0x68, 0xc2, 0xb2, 0x97, 0x1b, 0xa3, 0xfb,
+  0x50, 0x07, 0xef, 0xf1, 0x4b, 0xaf, 0x20, 0x60, 0xf4, 0x36, 0xfb, 0x4e,
+  0xe4, 0x80, 0xab, 0x9c, 0xdb, 0xb0, 0x26, 0xb2, 0x8f, 0x0b, 0x8e, 0x88,
+  0xdc, 0xe8, 0xc9, 0x2f, 0xaf, 0x5e, 0xef, 0x5f, 0x1c, 0xf2, 0x0b, 0xd6,
+  0xbd, 0x55, 0x37, 0xb0, 0x34, 0x0a, 0x1e, 0xcf, 0x86, 0xba, 0xa6, 0x5f,
+  0xf1, 0x84, 0x7a, 0x9b, 0xe2, 0xcb, 0x80, 0x53, 0xbd, 0x35, 0x2e, 0xe6,
+  0x69, 0x12, 0xb8, 0xed, 0x13, 0xd5, 0x2b, 0x8b, 0x58, 0xd9, 0xe8, 0xc9,
+  0x77, 0x3d, 0x67, 0xc1, 0xa5, 0xbb, 0x7c, 0xfd, 0x36, 0x33, 0x77, 0xe5,
+  0x04, 0x49, 0x16, 0x9d, 0xcc, 0x5a, 0x09, 0x49, 0xf3, 0xfb, 0xa3, 0xce,
+  0x0a, 0xb1, 0x38, 0x05, 0x78, 0xdb, 0x6e, 0xe3, 0x35, 0x13, 0x9e, 0x6d,
+  0x4c, 0x45, 0xb1, 0xb3, 0xfb, 0xe4, 0x4f, 0x58, 0xcf, 0x57, 0xbd, 0x2d,
+  0xba, 0x1b, 0x7a, 0x7f, 0xe2, 0xae, 0x73, 0xb3, 0x71, 0x06, 0x41, 0xe4,
+  0xac, 0x4f, 0x29, 0x45, 0x49, 0xb8, 0x0c, 0xef, 0x7a, 0x80, 0xef, 0x83,
+  0x05, 0xbd, 0x93, 0x2c, 0x31, 0x43, 0xc4, 0xb1, 0xe0, 0x01, 0xec, 0xd7,
+  0x28, 0xbb, 0xca, 0xe7, 0x73, 0x57, 0x53, 0x58, 0xba, 0x0b, 0xef, 0x8f,
+  0xbe, 0xbc, 0x2b, 0x73, 0x54, 0x04, 0x21, 0xee, 0x73, 0x76, 0x6f, 0x89,
+  0x64, 0x55, 0x65, 0x2a, 0xae, 0xec, 0x59, 0x47, 0x32, 0x1e, 0xa9, 0x6d,
+  0xc7, 0x94, 0x11, 0xc8, 0x04, 0xc4, 0x5a, 0xee, 0x21, 0x28, 0x21, 0xda,
+  0x20, 0x0c, 0xb2, 0xb0, 0x3b, 0x3b, 0x1d, 0x71, 0x96, 0xb9, 0x4b, 0x8d,
+  0x09, 0xb4, 0x72, 0xb7, 0xf4, 0x76, 0xfc, 0xf2, 0x00, 0x9b, 0x89, 0x2f,
+  0x4a, 0x59, 0xcb, 0xca, 0xd9, 0x90, 0xe0, 0x6d, 0xd4, 0x67, 0x9b, 0xfb,
+  0xd4, 0xca, 0x47, 0xc3, 0x34, 0x44, 0xa5, 0x17, 0xfd, 0x98, 0x58, 0xcd,
+  0x3c, 0x2b, 0x1f, 0x0c, 0xb0, 0x88, 0x38, 0xa3, 0x30, 0xc5, 0x20, 0xd2,
+  0x81, 0xdf, 0x19, 0x0e, 0x87, 0xbe, 0x32, 0x39, 0x6f, 0x8b, 0xfa, 0xa0,
+  0x50, 0xce, 0x28, 0x40, 0x90, 0xc5, 0x1a, 0x6f, 0x40, 0x98, 0x87, 0x40,
+  0xbd, 0xa9, 0x81, 0x37, 0x6a, 0x27, 0x70, 0x47, 0x23, 0xb0, 0x71, 0xac,
+  0x6b, 0xb7, 0xeb, 0x06, 0xdb, 0x70, 0x13, 0xdb, 0x84, 0x07, 0xc6, 0x26,
+  0xb6, 0x47, 0xad, 0xb0, 0xe9, 0xf8, 0x54, 0xe1, 0xd6, 0x82, 0x29, 0x98,
+  0x03, 0xc8, 0x41, 0x27, 0x92, 0x71, 0x2c, 0x8b, 0xa6, 0x43, 0xd1, 0x62,
+  0x6b, 0xcc, 0xe4, 0x8a, 0x3b, 0xc0, 0x20, 0x48, 0xb5, 0x9a, 0x45, 0xc9,
+  0x9a, 0x1e, 0xaf, 0xb1, 0xdd, 0x20, 0x0b, 0x27, 0x36, 0x6b, 0x3b, 0x0a,
+  0x28, 0xcc, 0x3a, 0x33, 0x64, 0xff, 0xbe, 0x07, 0x1d, 0x5e, 0x43, 0xd1,
+  0xcf, 0x4c, 0xb5, 0x67, 0x1a, 0x2a, 0xdc, 0x5e, 0x3a, 0x79, 0x6f, 0xae,
+  0xe2, 0x68, 0xb3, 0x81, 0x40, 0xba, 0x58, 0x22, 0xa2, 0x71, 0x0f, 0x05,
+  0xf5, 0x78, 0xc8, 0x5f, 0x3e, 0xb6, 0x16, 0x9d, 0xb3, 0xbc, 0xb5, 0x36,
+  0xfe, 0x56, 0x6e, 0xb2, 0x2e, 0x5a, 0x51, 0xb1, 0x2e, 0x0b, 0x78, 0x86,
+  0xe7, 0x7b, 0x49, 0x7a, 0x47, 0x57, 0xcf, 0x3c, 0xe3, 0xf8, 0x4c, 0x44,
+  0x3a, 0xc0, 0x2a, 0x73, 0x1c, 0xd8, 0x19, 0x3d, 0xac, 0xb2, 0x50, 0xad,
+  0xc6, 0x34, 0x31, 0xdf, 0xd9, 0xb3, 0x12, 0xdb, 0x02, 0x98, 0x6b, 0x06,
+  0xbd, 0x1c, 0x15, 0xc1, 0x19, 0xe0, 0x54, 0x25, 0x75, 0x53, 0xcf, 0x79,
+  0xe4, 0x9b, 0x28, 0x98, 0x2c, 0xe2, 0x3c, 0xe2, 0x12, 0xd9, 0xce, 0x21,
+  0x71, 0x15, 0xb6, 0x5a, 0x28, 0x32, 0xe0, 0x3a, 0x71, 0xfe, 0x69, 0x35,
+  0x3f, 0x71, 0x78, 0xef, 0x7c, 0x00, 0xa8, 0x0b, 0x57, 0x4e, 0x57, 0xd4,
+  0xab, 0xab, 0x2b, 0x2b, 0xbd, 0xd3, 0x9a, 0x5a, 0x9c, 0xc8, 0x8e, 0x79,
+  0x55, 0x38, 0x0a, 0xfa, 0x7e, 0xd5, 0x6a, 0x5e, 0x98, 0xcd, 0xc7, 0xac,
+  0x2e, 0x0d, 0x62, 0x36, 0x9f, 0xa4, 0xec, 0x5b, 0xed, 0x92, 0xae, 0x90,
+  0xa0, 0xd1, 0xf4, 0x21, 0x9f, 0x9c, 0xad, 0x01, 0x64, 0x7e, 0xee, 0x01,
+  0x19, 0x6c, 0xd3, 0x81, 0xcf, 0xe7, 0x23, 0x50, 0x7c, 0x24, 0xea, 0x9d,
+  0x0b, 0xb5, 0x92, 0xda, 0x80, 0xa3, 0xd4, 0xab, 0x5c, 0x6b, 0x49, 0xc3,
+  0xda, 0xcb, 0x05, 0x55, 0x8e, 0xe6, 0xca, 0x87, 0x8a, 0xdb, 0xcc, 0x83,
+  0x44, 0x7a, 0x83, 0xa3, 0x07, 0xf6, 0xd5, 0xd3, 0xef, 0x98, 0x49, 0xcb,
+  0xc1, 0xeb, 0xf8, 0x15, 0x26, 0xd9, 0x5a, 0x95, 0xb0, 0x72, 0x8b, 0x9a,
+  0x4a, 0x8a, 0x90, 0xc5, 0xcb, 0xd8, 0xd4, 0x6f, 0x6d, 0x2d, 0x0a, 0x8d,
+  0x08, 0xc8, 0x4b, 0xa0, 0x9a, 0x48, 0xc9, 0x11, 0xc3, 0xca, 0x77, 0x31,
+  0x7a, 0xde, 0xff, 0x6b, 0xb3, 0xec, 0xb9, 0x4d, 0xea, 0x21, 0xcd, 0x73,
+  0xa4, 0x44, 0x00, 0x1a, 0x60, 0x81, 0xce, 0xb9, 0xf0, 0x2f, 0x74, 0x9f,
+  0x40, 0xc9, 0xb0, 0xa0, 0xb5, 0x18, 0x69, 0xe7, 0xcc, 0xb9, 0x10, 0x0d,
+  0xe4, 0xa1, 0x30, 0xaa, 0x2f, 0xc7, 0x15, 0x0c, 0x46, 0x6b, 0x92, 0x6f,
+  0x34, 0x18, 0x87, 0xb5, 0xb5, 0x57, 0x03, 0x16, 0x8c, 0x1a, 0x07, 0xf3,
+  0xb1, 0x73, 0x7a, 0x7a, 0x76, 0xf2, 0xf5, 0xd9, 0xe1, 0xf9, 0x79, 0xf2,
+  0xf6, 0xf0, 0x42, 0x74, 0xfd, 0x0b, 0x09, 0xbd, 0xbb, 0x62, 0x75, 0x3d,
+  0x81, 0xaf, 0xc1, 0x30, 0x9c, 0x2c, 0xe4, 0xc4, 0x0c, 0x09, 0xc8, 0x79,
+  0x2a, 0xd8, 0x8f, 0x06, 0xf9, 0x0d, 0x4a, 0xfc, 0x54, 0x23, 0xf6, 0xae,
+  0x61, 0xed, 0x47, 0x4c, 0x13, 0x1c, 0x92, 0xce, 0x78, 0xee, 0xcd, 0xa8,
+  0x10, 0x8c, 0x25, 0xca, 0xc9, 0xe5, 0x1c, 0x7a, 0x13, 0x3a, 0x5f, 0xd9,
+  0xf4, 0x13, 0xd3, 0xfb, 0x3d, 0xad, 0x66, 0xcd, 0x78, 0xb3, 0xfc, 0xeb,
+  0x99, 0x11, 0xc5, 0xef, 0x93, 0x1f, 0xa8, 0xcd, 0x09, 0x29, 0xaf, 0x6c,
+  0x41, 0xa6, 0x5b, 0xf6, 0x1c, 0xf5, 0x4e, 0x7d, 0x59, 0x21, 0x60, 0xe6,
+  0x07, 0xff, 0x71, 0x29, 0xe2, 0x61, 0xbc, 0x2a, 0x4f, 0xa3, 0xac, 0x8e,
+  0xc0, 0x1e, 0x69, 0x4c, 0x9d, 0xeb, 0x59, 0x0b, 0x19, 0x27, 0xc9, 0x71,
+  0x76, 0x59, 0x43, 0x0a, 0xe1, 0xee, 0xa8, 0xb9, 0x6d, 0xc6, 0x7f, 0xde,
+  0xe1, 0xba, 0x67, 0xf4, 0xeb, 0x93, 0xcf, 0x9f, 0x6f, 0x7f, 0x2e, 0xbf,
+  0xda, 0xbf, 0x2f, 0x9e, 0x6e, 0x2b, 0x8e, 0x3a, 0xfd, 0xf5, 0x74, 0xef,
+  0xe9, 0xce, 0x1e, 0xc3, 0x3b, 0x6e, 0xef, 0x6d, 0xd3, 0xff, 0x3f, 0xd5,
+  0x4f, 0x18, 0xc3, 0xf2, 0xc5, 0xee, 0xe7, 0x9f, 0x21, 0x1a, 0x86, 0xe9,
+  0x63, 0x4a, 0x9d, 0x0c, 0xea, 0x62, 0x00, 0x94, 0x29, 0x48, 0x3e, 0xbf,
+  0x6f, 0x5a, 0x22, 0xd9, 0xbd, 0x3e, 0x66, 0x67, 0xea, 0x95, 0xe8, 0x34,
+  0xd3, 0x0c, 0xe5, 0x25, 0x2e, 0x03, 0xe0, 0x1b, 0x8b, 0x10, 0x97, 0xb4,
+  0x6d, 0x9d, 0x86, 0xbe, 0x5d, 0xe3, 0x6f, 0xc0, 0xb6, 0x35, 0xde, 0x91,
+  0x40, 0xf3, 0x00, 0x21, 0xee, 0x97, 0x76, 0x6d, 0x89, 0xe4, 0x6b, 0xc0,
+  0x7d, 0xd3, 0xad, 0xd2, 0xf7, 0xc6, 0x56, 0x0b, 0xda, 0x3d, 0xc5, 0x62,
+  0xe0, 0x4c, 0x72, 0x12, 0x2e, 0x25, 0x5c, 0xf9, 0x97, 0xf6, 0x27, 0x96,
+  0x2b, 0x7e, 0x4b, 0xa9, 0x21, 0xe9, 0xf6, 0xe6, 0x72, 0x11, 0x22, 0x7d,
+  0x35, 0x88, 0x67, 0xcd, 0x6f, 0xbf, 0x5f, 0x29, 0x66, 0x65, 0xfa, 0x90,
+  0xcb, 0xe1, 0x92, 0xd2, 0xba, 0x91, 0x29, 0x77, 0x9a, 0x53, 0x32, 0xfa,
+  0x05, 0xcd, 0xf9, 0x19, 0x81, 0x82, 0xdd, 0xce, 0x0d, 0x82, 0xcd, 0xc9,
+  0x25, 0xb0, 0xcd, 0x56, 0xc3, 0xe1, 0x8a, 0xda, 0x35, 0x27, 0xaf, 0x3a,
+  0x92, 0x1d, 0xc8, 0x1b, 0x2a, 0x73, 0xba, 0xbc, 0x38, 0x3a, 0x85, 0xb7,
+  0x05, 0xae, 0x78, 0x79, 0xde, 0x28, 0xbb, 0xd3, 0x15, 0x53, 0x63, 0xd0,
+  0x9f, 0xf6, 0x81, 0xf3, 0xe4, 0x0e, 0xdd, 0x83, 0x53, 0xf3, 0xb1, 0xf5,
+  0xae, 0xb0, 0xf0, 0x86, 0x8b, 0x55, 0x8f, 0x1d, 0x49, 0xff, 0x1c, 0xc2,
+  0xd7, 0x5d, 0x73, 0xe1, 0xed, 0x83, 0xb2, 0xd2, 0x18, 0x1f, 0xd0, 0x9d,
+  0x96, 0x8c, 0xee, 0xbf, 0x69, 0x2c, 0x6c, 0xf0, 0x3b, 0x17, 0xb6, 0x85,
+  0xcb, 0x4c, 0xab, 0x84, 0xa6, 0x42, 0xf9, 0xd3, 0x30, 0x97, 0xd6, 0x71,
+  0xbb, 0x51, 0x5a, 0x36, 0x50, 0xf4, 0xd7, 0xb4, 0x3e, 0xc3, 0x8c, 0x21,
+  0xea, 0x90, 0xee, 0x28, 0x72, 0xc4, 0xbf, 0xad, 0xad, 0x9d, 0x9f, 0x1e,
+  0x1e, 0xbe, 0x4e, 0x8e, 0x8f, 0xde, 0x1e, 0x5d, 0x04, 0x52, 0xb8, 0xbb,
+  0x3d, 0xcc, 0xd2, 0x6a, 0x15, 0xa7, 0x5a, 0xcb, 0xe1, 0x51, 0x9b, 0xb5,
+  0x12, 0x88, 0xde, 0xdf, 0xb3, 0x4c, 0xb3, 0x28, 0xa6, 0xed, 0xf7, 0xa0,
+  0x6f, 0x03, 0xd9, 0x69, 0x98, 0x7c, 0x15, 0x04, 0x46, 0x26, 0x15, 0x49,
+  0x34, 0x63, 0x57, 0x70, 0x79, 0xf0, 0x67, 0x8d, 0xd3, 0x68, 0x8a, 0x4b,
+  0x0a, 0x3e, 0xeb, 0x52, 0x7a, 0x34, 0xb6, 0xb5, 0x35, 0x2a, 0x5e, 0xdb,
+  0x4c, 0x42, 0xab, 0x03, 0xb3, 0x1c, 0xc2, 0xf6, 0xee, 0x32, 0xa0, 0x1d,
+  0xcc, 0x72, 0xc9, 0xb5, 0x0c, 0x63, 0x8a, 0x5d, 0x0d, 0xda, 0x8b, 0x42,
+  0xf8, 0x78, 0xd8, 0x63, 0x58, 0x5c, 0xdc, 0x02, 0x6a, 0xad, 0xaf, 0xb0,
+  0x6a, 0xf5, 0x93, 0x6d, 0x97, 0xae, 0xb0, 0x00, 0xcf, 0x51, 0xf9, 0x9e,
+  0x3b, 0xdb, 0x49, 0x48, 0x08, 0x59, 0xb2, 0x28, 0x5f, 0x2e, 0xe7, 0x9d,
+  0xeb, 0xee, 0xcf, 0xf2, 0x2e, 0xcd, 0xff, 0xf9, 0x36, 0xae, 0xb7, 0xcb,
+  0xb4, 0x1c, 0x90, 0xb8, 0x75, 0x3f, 0x30, 0x93, 0xaa, 0x50, 0x84, 0xc6,
+  0x1b, 0x8b, 0xbd, 0x27, 0xf3, 0xe5, 0x6e, 0x5b, 0x22, 0xa2, 0xcf, 0x39,
+  0x29, 0xe0, 0x97, 0x9c, 0xea, 0x01, 0xe0, 0xa9, 0x73, 0xa6, 0xaf, 0x59,
+  0x38, 0xbd, 0x80, 0xe3, 0x81, 0x89, 0x6d, 0x17, 0x3d, 0x8f, 0xe2, 0x0c,
+  0x04, 0xb0, 0x55, 0x6e, 0x35, 0xe7, 0x69, 0xea, 0x5c, 0xba, 0xf2, 0xf4,
+  0x2c, 0xd9, 0xf9, 0x9c, 0xe7, 0xf1, 0x69, 0xf3, 0x79, 0x53, 0x94, 0x63,
+  0x97, 0x53, 0x0c, 0x1d, 0x21, 0x48, 0x30, 0x95, 0xb4, 0x08, 0x54, 0x6b,
+  0x92, 0xd5, 0xb5, 0xa0, 0x58, 0x04, 0xed, 0xb1, 0x52, 0xa2, 0xfe, 0x74,
+  0x98, 0xa3, 0xe0, 0xe0, 0x16, 0xb1, 0x88, 0xef, 0x1a, 0x5d, 0x17, 0x36,
+  0xb0, 0x4a, 0xd0, 0xde, 0x7a, 0xe9, 0x12, 0x50, 0x65, 0x19, 0xd8, 0x24,
+  0x42, 0xb4, 0x76, 0x97, 0x4f, 0x20, 0x4a, 0x7b, 0x88, 0x3a, 0xda, 0x2f,
+  0x21, 0x3e, 0x89, 0x95, 0x86, 0xcf, 0x12, 0xce, 0x4e, 0x37, 0x32, 0x15,
+  0x60, 0x78, 0x59, 0x0b, 0x58, 0x14, 0x36, 0x20, 0x3f, 0x70, 0x7e, 0xb3,
+  0xf7, 0x0b, 0xb0, 0xfe, 0xc4, 0xac, 0xb9, 0xe7, 0x7b, 0xe1, 0x5c, 0x81,
+  0xba, 0x9e, 0x9a, 0x31, 0xe1, 0xad, 0x23, 0xec, 0xe6, 0x9c, 0x19, 0xa9,
+  0x25, 0x98, 0xf6, 0xce, 0x36, 0x09, 0xad, 0xd3, 0xa2, 0x51, 0xfc, 0x9c,
+  0x88, 0xaa, 0xab, 0x89, 0x62, 0x5a, 0x03, 0xac, 0xce, 0xce, 0xf6, 0xb7,
+  0xab, 0x57, 0x1d, 0x20, 0xf7, 0x0f, 0xbe, 0xbc, 0xfb, 0xf4, 0x81, 0x4d,
+  0x3b, 0x29, 0xa1, 0x8c, 0x67, 0x16, 0x03, 0x09, 0x41, 0xd0, 0x7b, 0x5e,
+  0x3a, 0xdb, 0x46, 0x84, 0x9f, 0x5d, 0xa5, 0x3c, 0xfc, 0x87, 0x46, 0x6f,
+  0x39, 0x21, 0xad, 0xa1, 0xbc, 0xd5, 0xa8, 0x6c, 0xf9, 0xb2, 0x62, 0xb3,
+  0xd8, 0x02, 0x00, 0x7d, 0x5e, 0x77, 0x75, 0xe9, 0xe4, 0x82, 0xcd, 0x10,
+  0xbc, 0x2d, 0x9c, 0xb3, 0xdf, 0x64, 0x12, 0x46, 0x3d, 0x65, 0x76, 0xb5,
+  0x14, 0x24, 0x8c, 0x42, 0x74, 0x7d, 0xc6, 0xb3, 0xd6, 0xf3, 0x4a, 0xbc,
+  0x99, 0xc3, 0x87, 0x84, 0x9e, 0xc0, 0x78, 0xc7, 0xa9, 0x89, 0xac, 0x22,
+  0x72, 0xb4, 0x2f, 0x06, 0x36, 0xca, 0x8e, 0xd9, 0x0b, 0x06, 0x6e, 0xb0,
+  0x96, 0xb4, 0xeb, 0x66, 0x0b, 0x60, 0xe3, 0x10, 0x99, 0xbe, 0x42, 0x28,
+  0x8e, 0xd9, 0x73, 0x5a, 0x19, 0x7b, 0xc3, 0x6a, 0x71, 0x0b, 0xa0, 0x81,
+  0xbe, 0x52, 0x2d, 0x5a, 0x72, 0x5d, 0x31, 0xc7, 0xaf, 0x0c, 0x38, 0x53,
+  0x60, 0xf6, 0xd9, 0xd8, 0x7f, 0x70, 0xf2, 0xee, 0xcd, 0xd1, 0xd7, 0x0e,
+  0xca, 0x48, 0x98, 0x78, 0x03, 0x62, 0xc3, 0xd5, 0x37, 0x77, 0x9e, 0x6e,
+  0x2d, 0xc5, 0xa8, 0xd1, 0xb7, 0xc4, 0x9e, 0x3e, 0x84, 0x1f, 0x80, 0x81,
+  0xcc, 0x9f, 0xb0, 0x81, 0x5c, 0xf0, 0x3f, 0xaa, 0x4d, 0x6f, 0x6e, 0x68,
+  0x41, 0xd5, 0x49, 0x96, 0x46, 0x5a, 0xd6, 0xcb, 0x85, 0x0b, 0x22, 0x0c,
+  0x4a, 0x39, 0x2a, 0x00, 0xb7, 0xa5, 0xa2, 0x2f, 0x17, 0xc2, 0x9a, 0x34,
+  0xa1, 0xb4, 0x61, 0xcd, 0x95, 0x3b, 0x80, 0xcd, 0x09, 0x8a, 0xa5, 0xa2,
+  0x17, 0x40, 0x27, 0x2e, 0x67, 0xca, 0x88, 0x9d, 0x61, 0xbc, 0xbc, 0xf9,
+  0x6f, 0x26, 0x28, 0x86, 0x19, 0x96, 0x3c, 0x9f, 0x89, 0x3a, 0xc6, 0xf3,
+  0x46, 0x4d, 0x69, 0x17, 0x8c, 0xe3, 0xa2, 0x7f, 0xbd, 0x7f, 0xc8, 0x55,
+  0xbf, 0xf2, 0xf1, 0x49, 0x96, 0xc6, 0x9a, 0xc2, 0x55, 0x09, 0x5f, 0x27,
+  0x3e, 0x79, 0xc5, 0x6e, 0x99, 0x3d, 0xc6, 0xa1, 0x9f, 0x09, 0xa0, 0x5c,
+  0x98, 0x7e, 0xaa, 0x5c, 0xd2, 0x83, 0xc5, 0x1f, 0x5d, 0x06, 0x19, 0x6d,
+  0x12, 0x27, 0x68, 0x44, 0x27, 0x36, 0x62, 0x36, 0xb0, 0xac, 0xff, 0x6e,
+  0x7d, 0x50, 0xdd, 0xcf, 0x46, 0xc5, 0xd4, 0x12, 0x2f, 0x1c, 0x80, 0x84,
+  0x3d, 0x64, 0xd5, 0xd5, 0x90, 0x92, 0x2b, 0x9e, 0xda, 0x3a, 0x30, 0x4b,
+  0xfa, 0x58, 0x29, 0x3f, 0x7e, 0x29, 0x4f, 0x04, 0xf7, 0x90, 0xcd, 0x02,
+  0xd8, 0x3e, 0xcc, 0xe3, 0xb3, 0xf9, 0x78, 0x5a, 0x28, 0x55, 0x73, 0x82,
+  0x39, 0x56, 0xaa, 0x39, 0x75, 0xf6, 0xf8, 0x15, 0x4b, 0xb6, 0x70, 0xa0,
+  0xf4, 0x08, 0x89, 0x3b, 0x3d, 0x45, 0xd4, 0xc0, 0x04, 0xf9, 0x6d, 0xf9,
+  0x42, 0xa3, 0xf2, 0x03, 0x7c, 0x1b, 0xa9, 0x55, 0x42, 0x43, 0xfd, 0x49,
+  0x0c, 0x8a, 0xe2, 0xf7, 0xfb, 0xb3, 0x75, 0x6e, 0x8f, 0xb6, 0x96, 0x9e,
+  0xe8, 0x29, 0x2d, 0xaf, 0x14, 0xa5, 0x4f, 0x3d, 0x69, 0x50, 0x12, 0x5d,
+  0x05, 0x19, 0x67, 0x98, 0x64, 0xa1, 0xc4, 0x45, 0xcd, 0x40, 0x7c, 0x5a,
+  0x4a, 0x4e, 0xa1, 0x66, 0x5c, 0x89, 0x49, 0xd2, 0x11, 0x62, 0xc0, 0x71,
+  0x7e, 0xe7, 0x62, 0x51, 0x52, 0x7f, 0x97, 0x59, 0x65, 0x0b, 0x6f, 0x9f,
+  0xd5, 0xcb, 0x2c, 0x78, 0x8d, 0x8d, 0x78, 0xd0, 0x84, 0x33, 0x35, 0x9c,
+  0x48, 0x57, 0x90, 0x25, 0x18, 0xd7, 0x06, 0xc9, 0x3f, 0x59, 0xe5, 0x9b,
+  0x90, 0xef, 0x5f, 0x69, 0x3d, 0x2b, 0x3a, 0xcf, 0x8a, 0x94, 0xa2, 0xf0,
+  0x81, 0x9f, 0x6f, 0xab, 0xf9, 0xad, 0xd6, 0x70, 0xd5, 0x2a, 0xd9, 0x3f,
+  0x3b, 0x24, 0xc9, 0xf6, 0x6a, 0x0e, 0x8c, 0x8a, 0x79, 0x6d, 0x49, 0x75,
+  0xd9, 0x5c, 0x4b, 0x68, 0xcd, 0xed, 0x7c, 0x70, 0x87, 0x77, 0xc1, 0x9b,
+  0x4c, 0x4c, 0x1a, 0x18, 0x20, 0xf9, 0xdb, 0x9e, 0xe4, 0xc6, 0x06, 0x27,
+  0x0c, 0xae, 0xc3, 0x30, 0x09, 0x42, 0x52, 0xec, 0x22, 0xa1, 0xae, 0x0a,
+  0x83, 0x12, 0x3e, 0xed, 0xb0, 0xf5, 0x10, 0x43, 0xd8, 0xd6, 0x1a, 0xa7,
+  0xda, 0xa7, 0x22, 0xfc, 0xd5, 0x80, 0x39, 0xb5, 0xaf, 0x86, 0xdb, 0xd3,
+  0x93, 0x53, 0x3f, 0x6e, 0x32, 0xfa, 0x2b, 0xee, 0x19, 0x96, 0x45, 0xda,
+  0x72, 0x41, 0xe6, 0x22, 0xec, 0xc5, 0x7a, 0x3d, 0x09, 0x84, 0x5f, 0x49,
+  0x01, 0xe4, 0x18, 0x6b, 0x31, 0x4c, 0x2b, 0x12, 0x90, 0xda, 0x75, 0x44,
+  0x1d, 0x98, 0xe8, 0x59, 0x65, 0xaa, 0xe0, 0x70, 0xe1, 0x11, 0xa3, 0x25,
+  0xdd, 0x88, 0x00, 0x10, 0xf2, 0xa7, 0xa8, 0x6d, 0xf7, 0x77, 0x6e, 0xb6,
+  0x7e, 0x0c, 0xee, 0x4b, 0xfe, 0xe8, 0x95, 0x43, 0xb7, 0xe3, 0x51, 0x0c,
+  0xb9, 0x23, 0xb0, 0x54, 0xf8, 0x4c, 0xf9, 0x17, 0x7c, 0x8c, 0xa8, 0x37,
+  0x83, 0x3b, 0x05, 0xd7, 0x71, 0x10, 0x5a, 0x85, 0xfa, 0x54, 0xfd, 0x40,
+  0xc4, 0xb1, 0x07, 0x0e, 0x3d, 0x0a, 0x45, 0xe3, 0xc1, 0xb7, 0x5b, 0x56,
+  0x05, 0x97, 0xed, 0x37, 0x9c, 0x40, 0x6c, 0x07, 0xbe, 0xca, 0x1a, 0x65,
+  0x73, 0x5d, 0xa6, 0x50, 0x6f, 0xd0, 0xa3, 0xb5, 0x58, 0x9f, 0x4e, 0x3d,
+  0xc3, 0xb7, 0xc7, 0x78, 0x57, 0x91, 0x54, 0xe7, 0x05, 0x26, 0xe5, 0x5d,
+  0x5c, 0x8f, 0xe3, 0xbe, 0x91, 0xe2, 0xc0, 0x05, 0xcd, 0x38, 0x03, 0xc8,
+  0x01, 0x7b, 0x21, 0x4d, 0x04, 0x41, 0x02, 0xb7, 0x79, 0x65, 0xce, 0x47,
+  0xa2, 0xed, 0xb1, 0xc4, 0x44, 0xd4, 0x02, 0x48, 0x90, 0xd5, 0xe3, 0x60,
+  0x29, 0xb3, 0xf1, 0x75, 0x21, 0x31, 0xb5, 0xb4, 0x68, 0x41, 0xa6, 0x67,
+  0x2f, 0xf9, 0x6f, 0xa5, 0x81, 0x6f, 0x7d, 0xd2, 0x1e, 0x13, 0xc2, 0x50,
+  0x70, 0x28, 0x87, 0x9e, 0x20, 0x0e, 0x7f, 0xb8, 0x38, 0xdb, 0x4f, 0xbe,
+  0x39, 0xdc, 0x7f, 0x7d, 0x78, 0x76, 0xde, 0xba, 0xf4, 0x35, 0xfc, 0x43,
+  0x24, 0x34, 0x36, 0x02, 0x43, 0x34, 0x36, 0xe0, 0x01, 0x8d, 0xdb, 0x37,
+  0xae, 0x47, 0xc4, 0xc3, 0x07, 0x89, 0xce, 0x07, 0x2b, 0x44, 0xe2, 0x2d,
+  0x00, 0xee, 0x71, 0x05, 0x66, 0xe3, 0xda, 0x18, 0x13, 0x87, 0xe2, 0x20,
+  0x06, 0x33, 0x99, 0x87, 0x19, 0x33, 0x1e, 0xab, 0xcf, 0x5f, 0x26, 0x93,
+  0xc2, 0x92, 0x01, 0x9b, 0x3b, 0xf7, 0x8d, 0xcf, 0xf7, 0x0e, 0xd8, 0x96,
+  0x5e, 0x32, 0x6a, 0x35, 0xec, 0xfd, 0x30, 0xa0, 0x7e, 0x07, 0xb4, 0xf8,
+  0x03, 0x06, 0x73, 0xbc, 0xcf, 0xaa, 0x5e, 0xcb, 0x04, 0xd8, 0xec, 0x1e,
+  0x3c, 0xfa, 0xaa, 0x7b, 0x92, 0xbe, 0x89, 0xb6, 0xc4, 0xa7, 0x8b, 0xeb,
+  0x3c, 0x77, 0x34, 0x08, 0x5c, 0xaa, 0x81, 0x90, 0xac, 0x27, 0xa8, 0x93,
+  0xde, 0xa2, 0x01, 0x4a, 0x5e, 0xcd, 0xd4, 0x78, 0x30, 0x0c, 0x44, 0xa7,
+  0x00, 0x59, 0x87, 0xce, 0x9e, 0x5c, 0xea, 0x53, 0x81, 0x68, 0x16, 0x8b,
+  0x19, 0x0d, 0x4b, 0x1f, 0x0a, 0xef, 0x07, 0x38, 0x40, 0x34, 0x06, 0xbf,
+  0x6a, 0xf8, 0x47, 0xd5, 0x18, 0xaa, 0xd5, 0xfd, 0xb4, 0x39, 0x1e, 0x83,
+  0xa3, 0x79, 0x0b, 0xdd, 0xe7, 0x2e, 0xad, 0xb0, 0x88, 0xbe, 0x2b, 0x51,
+  0x60, 0xac, 0xd4, 0xc3, 0xbe, 0x29, 0x55, 0x4a, 0xf9, 0x1d, 0x93, 0x57,
+  0x83, 0x5c, 0xa0, 0x90, 0x98, 0x51, 0x05, 0x0d, 0xd1, 0xe3, 0xee, 0xb9,
+  0x2c, 0xf9, 0xa6, 0xa8, 0x70, 0x17, 0x74, 0x1f, 0xe7, 0x4b, 0x3e, 0xb6,
+  0xfc, 0x78, 0x43, 0xfd, 0x5b, 0x0e, 0x24, 0x16, 0xa0, 0xca, 0x60, 0x5f,
+  0xa7, 0xfb, 0x17, 0xdf, 0xc0, 0xbb, 0x0a, 0x12, 0x7e, 0x0d, 0xc4, 0x14,
+  0xf3, 0xa9, 0x75, 0x53, 0xb2, 0x9c, 0x02, 0x27, 0xf2, 0xaf, 0x01, 0x33,
+  0x9a, 0x3c, 0x09, 0xef, 0x5d, 0x2e, 0x81, 0x48, 0x53, 0xa9, 0x0a, 0x0b,
+  0x1e, 0xdd, 0xa8, 0xcd, 0x87, 0xd0, 0x77, 0x97, 0x6f, 0xe7, 0xe2, 0x2d,
+  0xd7, 0x25, 0x11, 0x7e, 0x5d, 0xe6, 0x04, 0xa2, 0x67, 0x61, 0x8e, 0x35,
+  0x9e, 0x10, 0x79, 0x18, 0x5f, 0x70, 0xa6, 0xb3, 0x38, 0xa0, 0x26, 0x45,
+  0x1c, 0xf7, 0x30, 0x38, 0xd2, 0x5f, 0xce, 0xee, 0x87, 0x5d, 0x00, 0x9e,
+  0xe4, 0xab, 0x65, 0xdd, 0x64, 0x2b, 0x2d, 0xfc, 0x63, 0x27, 0x59, 0x96,
+  0x45, 0x51, 0x07, 0x63, 0x80, 0xf4, 0x93, 0xd6, 0x7a, 0xa2, 0x05, 0xe0,
+  0x52, 0xc6, 0xc2, 0x4d, 0xcd, 0x55, 0xee, 0x0e, 0x05, 0xc3, 0x74, 0x54,
+  0x15, 0xd3, 0x65, 0x1d, 0x44, 0x5f, 0xff, 0xb2, 0x31, 0x07, 0x83, 0xde,
+  0x38, 0x1a, 0x1a, 0xd8, 0xe7, 0x5c, 0x20, 0xea, 0x48, 0xd3, 0x27, 0xf1,
+  0x12, 0xce, 0xc6, 0xb2, 0x98, 0x37, 0xcb, 0xc7, 0x21, 0xd0, 0x7b, 0x73,
+  0x6d, 0xed, 0xdc, 0x36, 0x9b, 0xe1, 0x5e, 0xbb, 0x9b, 0xfe, 0x3d, 0xa4,
+  0x49, 0x1e, 0x83, 0x38, 0x0b, 0xc6, 0xf4, 0x8b, 0x81, 0xc0, 0x65, 0xb2,
+  0xa7, 0x60, 0xe1, 0xb2, 0xc7, 0x79, 0xd5, 0x9c, 0x14, 0xbe, 0x72, 0xee,
+  0x0a, 0xcb, 0x2f, 0xbb, 0x28, 0x0c, 0xca, 0x5f, 0xdd, 0x75, 0x9e, 0x20,
+  0x1a, 0xd9, 0xf0, 0x51, 0x84, 0x69, 0xbe, 0x04, 0xac, 0xd6, 0xb0, 0x0b,
+  0xc7, 0xe5, 0x41, 0x6e, 0xfd, 0xaf, 0xad, 0xa4, 0x9f, 0x68, 0x19, 0xf8,
+  0x08, 0xc8, 0xd1, 0xff, 0x83, 0xc0, 0x2b, 0x85, 0xf7, 0xe5, 0x36, 0x87,
+  0x4d, 0x00, 0xd9, 0x21, 0xa9, 0x50, 0xd7, 0xe5, 0xd8, 0x53, 0x3f, 0x49,
+  0x07, 0xd9, 0x1d, 0xeb, 0x2f, 0xa6, 0x23, 0x28, 0x5c, 0x88, 0x94, 0xfb,
+  0x75, 0x00, 0x4c, 0x80, 0xdb, 0xb8, 0x74, 0x56, 0x3d, 0xae, 0xbc, 0x29,
+  0x75, 0x28, 0x45, 0xac, 0x47, 0x15, 0x26, 0x73, 0x9b, 0x4a, 0x46, 0xbd,
+  0xd3, 0xdb, 0xab, 0xa4, 0x2a, 0xe4, 0xa7, 0x25, 0x1d, 0x69, 0x60, 0x97,
+  0x92, 0x7f, 0x50, 0xdd, 0x4f, 0xcb, 0xe2, 0x22, 0xb5, 0x49, 0x23, 0x4e,
+  0x25, 0x9a, 0xce, 0xdc, 0x91, 0x36, 0x48, 0x93, 0x02, 0xd8, 0x5b, 0x09,
+  0x58, 0x4b, 0x45, 0x1e, 0xe1, 0x48, 0x32, 0xc6, 0x30, 0x96, 0xa4, 0x6d,
+  0xae, 0xdb, 0x68, 0x9a, 0x8c, 0x5d, 0xa9, 0x96, 0xc6, 0xe1, 0x76, 0xca,
+  0x0f, 0x5f, 0xef, 0x7e, 0x24, 0xe1, 0xc3, 0x33, 0x77, 0x97, 0x32, 0x4e,
+  0x9a, 0x17, 0x09, 0x6c, 0x4a, 0x5a, 0xfb, 0x55, 0x82, 0x37, 0xc2, 0x80,
+  0x14, 0x1f, 0xb1, 0x79, 0xc5, 0x59, 0x1e, 0x6a, 0x92, 0x52, 0x2c, 0x13,
+  0xd8, 0xbf, 0xae, 0x73, 0x8d, 0x2b, 0x95, 0x55, 0x6f, 0x56, 0xd5, 0x84,
+  0x85, 0x8f, 0x43, 0x0a, 0xbc, 0x57, 0xd5, 0x05, 0x3e, 0x0c, 0xbb, 0x07,
+  0x66, 0xe8, 0x50, 0x55, 0xf5, 0x12, 0x39, 0x0a, 0x73, 0xca, 0x25, 0x0a,
+  0xc3, 0xc5, 0x3a, 0x7f, 0x62, 0xef, 0x61, 0x97, 0x1c, 0xc4, 0x3a, 0x4f,
+  0x24, 0x81, 0x44, 0xa1, 0xe2, 0xf8, 0x42, 0xd9, 0xdd, 0x81, 0x62, 0x2a,
+  0x31, 0x1b, 0xc0, 0x29, 0xb5, 0x16, 0x1a, 0x35, 0xdc, 0x82, 0xc5, 0xdf,
+  0xec, 0xeb, 0x2a, 0xb9, 0x8c, 0x7b, 0x75, 0x31, 0x8b, 0x5c, 0x18, 0xf8,
+  0x9d, 0x1a, 0xc5, 0xe3, 0x24, 0x8b, 0xbb, 0xaa, 0xcb, 0xe5, 0xb8, 0x01,
+  0xd1, 0x07, 0x8a, 0x68, 0xb8, 0xe6, 0xdd, 0x1a, 0x17, 0xa1, 0x6e, 0x7f,
+  0x74, 0xaa, 0xea, 0xbd, 0x68, 0x1f, 0x3c, 0xb2, 0x8d, 0xb4, 0x91, 0xe4,
+  0xe2, 0xca, 0x7d, 0x86, 0xfd, 0x6e, 0x3a, 0x2a, 0x1b, 0x9c, 0xba, 0x8c,
+  0xfa, 0x56, 0x71, 0x78, 0xce, 0x4e, 0x08, 0xee, 0x5e, 0x15, 0xc4, 0x20,
+  0x78, 0x94, 0x89, 0x82, 0x2f, 0x42, 0xac, 0x61, 0x93, 0xe5, 0x9a, 0x03,
+  0x48, 0xa4, 0x21, 0x0d, 0x34, 0x54, 0x55, 0xbc, 0xbf, 0x5b, 0xb4, 0x90,
+  0x56, 0x20, 0xc8, 0x15, 0xc7, 0xaa, 0x3c, 0xc8, 0x62, 0x2b, 0x4e, 0x15,
+  0x10, 0x4d, 0x4e, 0x3e, 0x54, 0xb0, 0x38, 0x5d, 0xbf, 0x61, 0xf2, 0x5a,
+  0x0f, 0x85, 0xf6, 0xd0, 0x16, 0x27, 0xba, 0x77, 0xe3, 0xa9, 0x40, 0xa1,
+  0x74, 0xe8, 0xe8, 0xb5, 0xd9, 0x54, 0xc1, 0x72, 0xb0, 0x36, 0xac, 0xd9,
+  0xd8, 0x26, 0xd1, 0xba, 0x5a, 0x17, 0x34, 0x04, 0x9e, 0xf1, 0xfa, 0x34,
+  0xdb, 0x5e, 0x0f, 0xaa, 0x7b, 0x6d, 0x48, 0xd0, 0x7f, 0x01, 0xed, 0xc7,
+  0x81, 0x15, 0x8a, 0xf5, 0x82, 0x83, 0xdb, 0x36, 0x23, 0x43, 0xa1, 0x26,
+  0x7e, 0xe9, 0x60, 0x76, 0x5e, 0xec, 0x0e, 0x77, 0x9e, 0x7f, 0x3e, 0xdc,
+  0x1e, 0xee, 0x6c, 0x33, 0x7f, 0xe1, 0xa1, 0x04, 0x83, 0x93, 0x75, 0x89,
+  0x74, 0xd5, 0x78, 0xaf, 0xdb, 0xe7, 0xbb, 0xc3, 0x8b, 0xef, 0x4f, 0xce,
+  0xbe, 0x4d, 0x8e, 0xde, 0x5d, 0x1c, 0x9e, 0xbd, 0xd9, 0x3f, 0xf8, 0x54,
+  0xc0, 0xfe, 0xd0, 0x6c, 0x1d, 0x54, 0xb7, 0xce, 0xfc, 0xc2, 0x74, 0x6d,
+  0x83, 0x7e, 0xcd, 0xb2, 0xfa, 0x7a, 0x7b, 0x6f, 0xe7, 0x41, 0x48, 0xea,
+  0x88, 0x79, 0xd0, 0xbf, 0x6f, 0x93, 0xda, 0xe1, 0x49, 0xad, 0x6e, 0xc5,
+  0x41, 0x33, 0x9e, 0x4b, 0x6c, 0x95, 0x8b, 0xcb, 0x05, 0x9b, 0x47, 0xf1,
+  0x24, 0x20, 0xb2, 0x2a, 0x63, 0x1f, 0x09, 0xf8, 0xad, 0xa4, 0xd7, 0x2a,
+  0xc8, 0x8c, 0xc6, 0xa0, 0x2b, 0xcf, 0x5d, 0x93, 0x4a, 0xd2, 0xb5, 0x9a,
+  0x53, 0x04, 0xce, 0x76, 0x02, 0x11, 0xcf, 0xb8, 0xb2, 0xe6, 0xae, 0x31,
+  0xb5, 0x68, 0x7d, 0x53, 0x01, 0x1c, 0x9c, 0xb8, 0x3c, 0x11, 0x87, 0x42,
+  0xb0, 0x96, 0x04, 0x72, 0x3a, 0xc6, 0xda, 0x2c, 0x06, 0x1e, 0x86, 0xcf,
+  0xb6, 0xb0, 0x57, 0x2b, 0x8b, 0x6b, 0xc6, 0xc4, 0x1a, 0xa6, 0xd1, 0x03,
+  0x1d, 0x08, 0x4e, 0x43, 0x30, 0x1a, 0xe9, 0x0a, 0x02, 0x15, 0x83, 0xa4,
+  0x01, 0x1e, 0xb2, 0x81, 0x90, 0x2c, 0x77, 0x14, 0x72, 0x27, 0x44, 0xfe,
+  0xb3, 0xb2, 0x16, 0xdc, 0x7a, 0xd5, 0x00, 0x29, 0x4c, 0xa4, 0xa0, 0x55,
+  0xf8, 0xba, 0x88, 0xda, 0x88, 0xce, 0x9c, 0x94, 0xe9, 0x1d, 0xaa, 0xb2,
+  0xe4, 0x1e, 0x72, 0x74, 0xad, 0x59, 0x94, 0x8b, 0x05, 0x27, 0xbf, 0xe6,
+  0xc9, 0xe9, 0xe1, 0xdb, 0x81, 0x95, 0x13, 0xa6, 0xdf, 0xc5, 0x18, 0x65,
+  0xf8, 0x92, 0x92, 0xdb, 0xb3, 0xc8, 0xe6, 0x16, 0x4b, 0x03, 0x9e, 0xa8,
+  0xc1, 0x3f, 0xe1, 0x04, 0xf8, 0xd0, 0x38, 0x04, 0x4a, 0x0d, 0x19, 0xb5,
+  0x98, 0x4b, 0xc9, 0x2d, 0x6c, 0xc3, 0x72, 0xf2, 0x7e, 0x6a, 0xc0, 0x72,
+  0xb2, 0xe1, 0x82, 0x74, 0xb9, 0x3f, 0x44, 0xa2, 0x22, 0x6a, 0xc0, 0x85,
+  0x09, 0x14, 0x96, 0x79, 0x7d, 0xfa, 0xed, 0xc1, 0xf9, 0xef, 0x76, 0x76,
+  0x75, 0x38, 0x9b, 0xa6, 0x15, 0x30, 0xaf, 0x6a, 0x27, 0xe5, 0x83, 0x5d,
+  0x87, 0x63, 0xb4, 0x14, 0x6b, 0x1c, 0x70, 0x6c, 0xc6, 0x86, 0x4b, 0x0c,
+  0xda, 0x6c, 0x64, 0x06, 0x21, 0xf2, 0xeb, 0xde, 0x89, 0x98, 0xae, 0xdc,
+  0x2f, 0xbb, 0x44, 0x50, 0x15, 0x4a, 0xeb, 0x32, 0xd5, 0x2e, 0xd4, 0x2f,
+  0x9d, 0xdb, 0x47, 0xd2, 0xb2, 0xb6, 0x86, 0x1c, 0x72, 0x1f, 0xce, 0xd2,
+  0xde, 0x73, 0x5e, 0x6f, 0xff, 0x2d, 0xe3, 0xc4, 0xea, 0xcd, 0x6e, 0x80,
+  0x40, 0xbe, 0x1b, 0x1c, 0x00, 0x8d, 0x5e, 0x9f, 0x58, 0xe5, 0xb7, 0xb9,
+  0xaf, 0x83, 0xc2, 0x4f, 0x9f, 0xd0, 0x46, 0xd1, 0xc9, 0x12, 0xdc, 0x06,
+  0x66, 0x0a, 0xc5, 0x94, 0x55, 0x17, 0xf7, 0xc8, 0xeb, 0x92, 0x0b, 0xce,
+  0x2c, 0x24, 0x8e, 0xf4, 0xdd, 0x30, 0xf9, 0x26, 0x9b, 0x73, 0xe2, 0x3c,
+  0x47, 0xdc, 0x59, 0xee, 0x15, 0xe2, 0x02, 0xb9, 0xf4, 0x24, 0x4a, 0xf1,
+  0x1d, 0x67, 0xa9, 0x62, 0x72, 0x12, 0xaf, 0xab, 0x44, 0xc3, 0xb5, 0x32,
+  0x54, 0x29, 0x47, 0xe7, 0x29, 0x80, 0xa8, 0x03, 0xbb, 0x10, 0x90, 0x68,
+  0x6e, 0x60, 0xa3, 0x09, 0xac, 0x89, 0x92, 0x08, 0x68, 0x4e, 0x8f, 0x39,
+  0x7c, 0x4d, 0x6a, 0x55, 0xbe, 0x06, 0x9c, 0x36, 0x5b, 0x0b, 0x45, 0xe3,
+  0xf2, 0x4c, 0x65, 0x52, 0x5e, 0xb3, 0xe9, 0xa3, 0xa2, 0xeb, 0x26, 0x9d,
+  0x8f, 0xef, 0x87, 0x13, 0x92, 0x65, 0xd9, 0x78, 0x36, 0x5c, 0xde, 0x6c,
+  0x05, 0xc7, 0x94, 0x59, 0xfe, 0xb5, 0x60, 0x04, 0x34, 0x0d, 0xdf, 0x56,
+  0xe6, 0xb8, 0x0b, 0x1d, 0x96, 0x36, 0xce, 0x04, 0x93, 0x84, 0x65, 0xfb,
+  0xcb, 0xf1, 0x5c, 0x09, 0xb2, 0x75, 0x98, 0x38, 0x84, 0x63, 0x6e, 0x61,
+  0xb8, 0xc8, 0x66, 0x7b, 0x2e, 0x1b, 0xd9, 0xf8, 0x83, 0x56, 0xd5, 0x70,
+  0x8a, 0x45, 0x60, 0xa4, 0x9d, 0x67, 0x57, 0x53, 0x15, 0x28, 0x42, 0xd5,
+  0xc5, 0x35, 0x11, 0x49, 0x01, 0x11, 0x85, 0x47, 0x8b, 0x24, 0x41, 0x62,
+  0x27, 0x3a, 0xac, 0x35, 0xa4, 0x56, 0x1e, 0x2e, 0x59, 0xa0, 0xf7, 0x8d,
+  0x28, 0x72, 0x08, 0xc0, 0x96, 0x59, 0x18, 0x56, 0x13, 0x8f, 0x45, 0x22,
+  0xa9, 0xfb, 0x89, 0x81, 0x60, 0x41, 0x21, 0x80, 0x71, 0xd7, 0xa8, 0x68,
+  0x38, 0x3f, 0xad, 0x94, 0xb0, 0x9c, 0x15, 0xfa, 0xfa, 0xf6, 0x09, 0x5b,
+  0xbc, 0x2f, 0x8e, 0xcf, 0xcd, 0x2b, 0x32, 0xcf, 0xee, 0x02, 0xd2, 0x92,
+  0xd2, 0x03, 0x4a, 0x7f, 0x6c, 0x00, 0x12, 0x48, 0x65, 0xa0, 0x1d, 0x60,
+  0x24, 0xc2, 0x15, 0xbc, 0x9b, 0xcc, 0x27, 0x3f, 0xd8, 0x22, 0x68, 0x18,
+  0x31, 0x0f, 0xc5, 0x2a, 0x9e, 0x89, 0x30, 0xe4, 0x90, 0x5e, 0x18, 0xbb,
+  0x8f, 0x84, 0xa5, 0x27, 0xfd, 0x64, 0xb0, 0x0b, 0xfc, 0x9c, 0x9d, 0xe6,
+  0x22, 0xa6, 0xb5, 0xc0, 0x04, 0x72, 0x1b, 0xd4, 0x92, 0xb5, 0xa2, 0xec,
+  0x60, 0x43, 0x49, 0xfa, 0x96, 0xde, 0xe7, 0x1f, 0xbb, 0x3a, 0xa1, 0xdb,
+  0x1d, 0x44, 0x6c, 0x0b, 0x6e, 0xe5, 0xf4, 0xbe, 0x2b, 0x32, 0xec, 0x3e,
+  0xb8, 0xab, 0xc8, 0x8d, 0xb8, 0xcb, 0x1d, 0x80, 0xb4, 0x14, 0x4d, 0x80,
+  0x29, 0x54, 0x21, 0x41, 0x6d, 0x00, 0xb4, 0x84, 0x6a, 0xe4, 0x9e, 0x27,
+  0xb7, 0xbb, 0xe6, 0x6b, 0xe6, 0x6f, 0x6c, 0xdd, 0xc4, 0x58, 0xef, 0x99,
+  0x48, 0x27, 0x6d, 0x91, 0xa3, 0xdc, 0x02, 0xaa, 0xe5, 0xac, 0x27, 0xa2,
+  0x59, 0xe2, 0x22, 0x0d, 0x2e, 0x53, 0xcc, 0xd5, 0xac, 0x20, 0x29, 0xef,
+  0x82, 0x47, 0xcf, 0x0a, 0x7c, 0x10, 0xe6, 0x84, 0xc8, 0xef, 0x20, 0x22,
+  0xf2, 0x68, 0xee, 0x12, 0x25, 0xd4, 0x94, 0x0f, 0x88, 0x3e, 0x6c, 0xff,
+  0x75, 0x2e, 0x86, 0x09, 0xc4, 0x9a, 0xe2, 0x3a, 0xa7, 0x93, 0xbf, 0x9e,
+  0xd0, 0x61, 0x5a, 0x32, 0xc7, 0xaf, 0x5d, 0xf9, 0xb5, 0x73, 0x81, 0xf6,
+  0x5c, 0x0f, 0xd9, 0xdc, 0xe0, 0x0b, 0x9e, 0x4a, 0xb5, 0xee, 0xe7, 0xae,
+  0x10, 0xe7, 0xcd, 0x89, 0xa8, 0x9f, 0xc3, 0x0a, 0x8e, 0x9d, 0x96, 0x56,
+  0x56, 0x7d, 0xfd, 0xf0, 0x23, 0xcb, 0x38, 0xeb, 0xda, 0x93, 0x7c, 0x2d,
+  0x39, 0xfd, 0x58, 0xa3, 0xd3, 0xa3, 0x77, 0x52, 0x29, 0xdc, 0x9d, 0x85,
+  0x8c, 0xa1, 0x17, 0xd7, 0xa4, 0xc8, 0x3d, 0xc6, 0x93, 0x1a, 0x06, 0xbc,
+  0x18, 0x8e, 0x98, 0x66, 0x98, 0xc6, 0x73, 0xed, 0xeb, 0x6c, 0x29, 0xbd,
+  0xaf, 0xf3, 0x3d, 0x57, 0x55, 0xd3, 0xf5, 0x56, 0xf5, 0x5b, 0xb7, 0x27,
+  0xad, 0x0b, 0xc5, 0x59, 0xa4, 0xc6, 0x13, 0x2f, 0xe0, 0x27, 0x89, 0xb6,
+  0xd2, 0xe0, 0x73, 0xfd, 0x56, 0xa6, 0x63, 0x68, 0x0a, 0xff, 0x5d, 0x32,
+  0xdc, 0xa2, 0x0e, 0xab, 0x2d, 0x7b, 0x71, 0x71, 0x33, 0xae, 0xe8, 0x86,
+  0xe3, 0xb4, 0xde, 0x1f, 0xa1, 0x90, 0x63, 0x3b, 0x68, 0xc4, 0x93, 0x9f,
+  0x93, 0xc1, 0x78, 0x8a, 0xf9, 0x25, 0x28, 0xb5, 0xfd, 0x23, 0xed, 0x3c,
+  0x3f, 0xf1, 0xb3, 0xdb, 0xc3, 0x37, 0x39, 0x9f, 0xb7, 0x8f, 0x7d, 0x9b,
+  0xfa, 0x89, 0x28, 0x0c, 0x82, 0x6f, 0x9b, 0xec, 0x4f, 0x6e, 0x39, 0xe9,
+  0x6e, 0xa2, 0x7f, 0xf2, 0x7c, 0x0e, 0xe7, 0xa8, 0x50, 0x8a, 0x99, 0xa6,
+  0x23, 0x29, 0x4a, 0xfe, 0x5d, 0x4e, 0x4a, 0xc7, 0x41, 0x4b, 0xbe, 0xe0,
+  0xfc, 0x3f, 0x1e, 0x20, 0xde, 0x0a, 0xbe, 0xb4, 0x64, 0x8e, 0xbe, 0xe6,
+  0x2c, 0xf8, 0xd0, 0x52, 0xe6, 0xce, 0xbc, 0x75, 0xc3, 0xe4, 0x2b, 0xf6,
+  0x71, 0x96, 0x59, 0x80, 0xfe, 0xaa, 0x17, 0x9f, 0x54, 0xf2, 0xe3, 0xcd,
+  0x48, 0x05, 0x7f, 0x62, 0xe8, 0x66, 0xd2, 0xc9, 0x81, 0x71, 0x73, 0x72,
+  0xdf, 0x34, 0x27, 0x87, 0x71, 0x59, 0x4a, 0x3b, 0x4d, 0xc5, 0xf2, 0x25,
+  0x92, 0xce, 0x54, 0x02, 0x5c, 0x4a, 0x19, 0xa1, 0x5c, 0x98, 0x93, 0xcc,
+  0x12, 0xfb, 0x8b, 0x10, 0x4d, 0xc5, 0x2c, 0xc7, 0x68, 0xca, 0x24, 0x02,
+  0x47, 0x12, 0xb8, 0xc3, 0xfd, 0xa8, 0x0f, 0xae, 0x89, 0x35, 0x67, 0x6e,
+  0xa8, 0xe7, 0x62, 0xd2, 0xb3, 0x21, 0x9e, 0xf3, 0x1d, 0x65, 0x9b, 0xe0,
+  0xbe, 0xb4, 0xec, 0x48, 0x48, 0xa1, 0x5b, 0xc2, 0xbb, 0x1c, 0xed, 0xca,
+  0xea, 0x36, 0xa7, 0xc0, 0x49, 0x8d, 0xe7, 0xef, 0xdf, 0x72, 0x69, 0x13,
+  0x14, 0xae, 0xbe, 0x38, 0xdb, 0x7f, 0x77, 0xfe, 0x46, 0x4c, 0xe3, 0x17,
+  0x85, 0x2f, 0x89, 0xad, 0xf6, 0x20, 0xe7, 0x3f, 0x76, 0x30, 0x71, 0x77,
+  0x52, 0x6f, 0xc3, 0xe2, 0xe9, 0xb5, 0x58, 0x76, 0xbf, 0x8d, 0xb7, 0x2f,
+  0xc5, 0xb6, 0x79, 0x35, 0x78, 0x68, 0x1b, 0xe7, 0x9b, 0x4e, 0x10, 0xaa,
+  0xc2, 0xa2, 0x6c, 0xbe, 0x60, 0xbd, 0x21, 0x43, 0xeb, 0x43, 0xbc, 0x2c,
+  0x07, 0x36, 0x18, 0xfb, 0x54, 0xee, 0xde, 0x95, 0x60, 0xa4, 0x07, 0xa4,
+  0x2a, 0x0e, 0xb4, 0x52, 0x4d, 0x50, 0x82, 0xce, 0x99, 0x53, 0xe5, 0xee,
+  0x55, 0x28, 0x3f, 0xd7, 0x78, 0x98, 0xf7, 0x69, 0x4d, 0x6f, 0xfc, 0x61,
+  0x67, 0x33, 0xde, 0xfc, 0xc5, 0x2f, 0x6d, 0x3e, 0x3e, 0x76, 0xd3, 0xcd,
+  0x7c, 0x4a, 0xd1, 0xc6, 0x1f, 0x76, 0x37, 0x1f, 0x9c, 0x51, 0x98, 0x15,
+  0xe9, 0xfb, 0xa4, 0x37, 0x78, 0xb0, 0xc9, 0x2b, 0x39, 0x66, 0x4e, 0x66,
+  0x72, 0x11, 0x3a, 0x01, 0xde, 0x70, 0x03, 0xb0, 0x83, 0xc3, 0xb6, 0x9d,
+  0xa4, 0xee, 0x1d, 0x6f, 0x9a, 0x5d, 0x72, 0xf4, 0x3f, 0x0f, 0x43, 0x18,
+  0xc9, 0xf9, 0x7a, 0x1d, 0x5e, 0x51, 0x8c, 0x0e, 0x50, 0x15, 0x43, 0xf4,
+  0xbd, 0xfb, 0x40, 0xdf, 0x7e, 0x76, 0x81, 0x59, 0x82, 0xbd, 0xd8, 0x1c,
+  0x06, 0x67, 0x68, 0xd8, 0xda, 0xcf, 0x9a, 0x2f, 0xb4, 0xbe, 0xba, 0xbf,
+  0x8b, 0xa3, 0xb7, 0x87, 0x8c, 0x9a, 0xfd, 0xfa, 0x88, 0xc1, 0xe7, 0xce,
+  0x15, 0xfe, 0xd1, 0x2c, 0x10, 0x0e, 0x91, 0x37, 0xac, 0x96, 0x22, 0xee,
+  0x5d, 0x17, 0x6d, 0xe6, 0x38, 0x87, 0xdb, 0x09, 0xee, 0x5a, 0x63, 0xa0,
+  0x2b, 0xcb, 0xb4, 0x3c, 0xba, 0x1c, 0xbc, 0x2d, 0x26, 0xd0, 0x92, 0x07,
+  0xe7, 0x08, 0x15, 0xa4, 0xb7, 0xe8, 0xc3, 0xf7, 0xf3, 0x59, 0xe3, 0xe3,
+  0x61, 0x24, 0x53, 0x77, 0x6d, 0x55, 0x51, 0x9e, 0xbf, 0x6d, 0x0d, 0x06,
+  0x3c, 0x98, 0x81, 0x84, 0x75, 0xa9, 0x73, 0xa7, 0x81, 0xcf, 0x61, 0xac,
+  0x85, 0x16, 0x28, 0x9f, 0xde, 0x4b, 0x20, 0x42, 0xea, 0xc3, 0xc7, 0x7c,
+  0xf6, 0xe6, 0x15, 0x67, 0x90, 0x79, 0x13, 0x9f, 0x18, 0xf1, 0xd6, 0x42,
+  0xf0, 0x52, 0x28, 0x52, 0xd9, 0x9d, 0x8f, 0x7f, 0xd2, 0xaa, 0xcd, 0xc5,
+  0xe2, 0x1e, 0xb3, 0xbc, 0x6b, 0x84, 0x56, 0x44, 0xfd, 0xab, 0x7f, 0x93,
+  0x77, 0x1a, 0x65, 0xa8, 0x14, 0x63, 0x3a, 0xa0, 0x40, 0xfd, 0x44, 0xab,
+  0x36, 0x9d, 0x94, 0xc1, 0x75, 0xa5, 0xc3, 0xb6, 0xea, 0x76, 0x01, 0xb0,
+  0x69, 0x80, 0xc3, 0xda, 0x1c, 0x67, 0x08, 0x02, 0x5b, 0x70, 0xea, 0xeb,
+  0xeb, 0xc2, 0x39, 0xc7, 0x88, 0xed, 0x2c, 0x9a, 0x75, 0x91, 0xb3, 0xc4,
+  0x92, 0xbc, 0x25, 0x87, 0x7f, 0x7d, 0xb0, 0x8e, 0xba, 0x0c, 0xf9, 0x3c,
+  0x32, 0x99, 0xc1, 0x2f, 0x9f, 0x4d, 0xc7, 0xf5, 0x9a, 0xf4, 0x2e, 0x19,
+  0x08, 0x83, 0xfd, 0x58, 0x3d, 0x19, 0x80, 0xe0, 0xc4, 0x08, 0x71, 0xd1,
+  0x05, 0xc1, 0x7c, 0xcd, 0x14, 0x49, 0x51, 0xaa, 0x5d, 0x64, 0xac, 0x33,
+  0x92, 0x8b, 0x55, 0x92, 0x19, 0xe9, 0x72, 0x31, 0x41, 0x50, 0x86, 0x84,
+  0xa3, 0xfe, 0x27, 0x83, 0x62, 0x97, 0xf7, 0xc9, 0xce, 0x6e, 0x3f, 0xd9,
+  0xdd, 0xde, 0xd9, 0x8d, 0xcc, 0xa1, 0xf7, 0x9f, 0x1c, 0x14, 0xb5, 0x8b,
+  0xaf, 0x7b, 0x9f, 0x3a, 0x0b, 0x9f, 0xcf, 0x80, 0x9b, 0x44, 0x33, 0x7f,
+  0x89, 0xf9, 0xb0, 0x7f, 0x16, 0x40, 0xcc, 0x28, 0x96, 0x0c, 0x38, 0x3b,
+  0x5c, 0x5b, 0x62, 0x24, 0xb4, 0x1a, 0x9b, 0xae, 0x74, 0xd8, 0x04, 0x95,
+  0x74, 0xa4, 0x5e, 0x2d, 0x22, 0x5f, 0x9c, 0xa5, 0x34, 0x2d, 0x51, 0x41,
+  0xb4, 0xb9, 0x47, 0x79, 0x6d, 0xdb, 0xc2, 0xa1, 0x35, 0xbc, 0x37, 0x44,
+  0xef, 0xaf, 0x8f, 0x0e, 0x2e, 0x0c, 0xef, 0xf0, 0x92, 0x85, 0xa7, 0xf2,
+  0xfe, 0xd3, 0x8a, 0x31, 0x3e, 0xf8, 0xcc, 0x64, 0xef, 0x3a, 0x23, 0x31,
+  0x7a, 0x3e, 0x5a, 0x5e, 0xed, 0xfd, 0x25, 0x2d, 0xaf, 0x8a, 0xf9, 0x63,
+  0xcf, 0x4f, 0x90, 0x50, 0xb6, 0x47, 0x1c, 0x6a, 0xe7, 0xc5, 0xce, 0x13,
+  0xe4, 0x7f, 0x4f, 0x73, 0x14, 0x04, 0x62, 0x06, 0xb1, 0x3e, 0x5b, 0x17,
+  0x80, 0x0d, 0xa4, 0x49, 0x38, 0x54, 0x8d, 0xf9, 0x64, 0x5d, 0xae, 0xfb,
+  0x34, 0x7c, 0x76, 0xa2, 0xcf, 0x4a, 0xea, 0xf9, 0xba, 0xe6, 0x2a, 0xac,
+  0x73, 0x9a, 0xe6, 0x72, 0xb1, 0xde, 0x84, 0x88, 0x7f, 0x64, 0xae, 0xdc,
+  0x85, 0xab, 0x3d, 0x79, 0xe0, 0x80, 0xef, 0x91, 0x41, 0x54, 0x66, 0xe9,
+  0x8d, 0xaf, 0x9e, 0xec, 0xd1, 0x37, 0xcc, 0xe5, 0x71, 0xf6, 0xe6, 0x40,
+  0x10, 0x4c, 0x2d, 0x5f, 0x0a, 0x4b, 0x9d, 0x38, 0xd3, 0xd4, 0x26, 0x8f,
+  0xf2, 0x91, 0xfe, 0x39, 0xb7, 0x61, 0x6f, 0x32, 0xfa, 0x84, 0x87, 0xe8,
+  0xdc, 0x09, 0x58, 0xdc, 0x7e, 0xb3, 0xf4, 0x0e, 0x2b, 0x6a, 0xa8, 0x1f,
+  0x62, 0x65, 0x92, 0x37, 0xa4, 0x12, 0xad, 0x78, 0x1c, 0x78, 0x68, 0x56,
+  0x80, 0xda, 0xac, 0x3b, 0x34, 0x6e, 0xae, 0xf2, 0xfa, 0x7a, 0xff, 0x34,
+  0x50, 0x74, 0xa1, 0x48, 0x7a, 0xa3, 0x1e, 0x3f, 0xc7, 0x8a, 0x0e, 0x2a,
+  0xb1, 0x6b, 0x35, 0xa6, 0xbe, 0x57, 0x51, 0x6a, 0xf0, 0x49, 0x96, 0x8d,
+  0x10, 0x20, 0x5f, 0xe8, 0x7d, 0x02, 0xfb, 0x13, 0xaa, 0x19, 0x4c, 0x27,
+  0x29, 0x1c, 0xa1, 0x7a, 0x0b, 0x41, 0xe6, 0x42, 0x5b, 0xb9, 0x46, 0x43,
+  0xd1, 0xde, 0x7c, 0x4c, 0x34, 0x89, 0x43, 0xb3, 0x55, 0xb4, 0xde, 0x08,
+  0x1e, 0xe3, 0xac, 0xe4, 0x7b, 0x9b, 0x80, 0xf0, 0x67, 0x1a, 0x7c, 0x5a,
+  0xdd, 0x10, 0x2b, 0x15, 0x07, 0x3e, 0xf5, 0x9e, 0xab, 0x0b, 0x9c, 0x8d,
+  0x3e, 0xb9, 0x04, 0xd2, 0xb0, 0xf9, 0x09, 0x38, 0x48, 0x8d, 0x0d, 0x93,
+  0x2b, 0x88, 0x35, 0xce, 0x69, 0x95, 0x09, 0x6a, 0x21, 0x60, 0x74, 0xd8,
+  0x63, 0xc6, 0x1b, 0x06, 0x4d, 0xc3, 0x22, 0x51, 0xc1, 0x04, 0x78, 0x6f,
+  0x77, 0x77, 0x9f, 0x3d, 0xeb, 0x27, 0x3d, 0xb6, 0xd6, 0x59, 0x41, 0x7a,
+  0x26, 0x2d, 0xa2, 0xd0, 0x5e, 0xb4, 0x2e, 0xed, 0x56, 0x79, 0x39, 0xe6,
+  0xff, 0xf1, 0x7b, 0x56, 0x8e, 0xf1, 0x42, 0xd3, 0x57, 0x78, 0x98, 0x70,
+  0x4d, 0x3a, 0x90, 0x19, 0xd9, 0x1f, 0xfe, 0xee, 0xc8, 0x19, 0x64, 0xd8,
+  0xfb, 0xb2, 0xc8, 0x8a, 0x85, 0xb9, 0x59, 0x67, 0x5a, 0x68, 0x03, 0xfd,
+  0x07, 0xbe, 0x29, 0x38, 0xc6, 0x25, 0xae, 0x4c, 0xd1, 0x04, 0xaa, 0xe5,
+  0x68, 0xa0, 0x69, 0xb5, 0xa2, 0x9e, 0xe5, 0x74, 0x04, 0xe8, 0xcf, 0xa9,
+  0xd9, 0xbd, 0x3b, 0xac, 0xed, 0xab, 0xa4, 0xa7, 0x9b, 0xc4, 0x3f, 0x86,
+  0xf0, 0x92, 0x66, 0x63, 0x9e, 0x46, 0xf1, 0x4a, 0xff, 0xf8, 0x8f, 0xff,
+  0xa0, 0x66, 0xff, 0x83, 0x5b, 0x79, 0xf5, 0x87, 0xaa, 0xbe, 0x0e, 0x9e,
+  0xe9, 0x29, 0xe5, 0x1c, 0x79, 0x1f, 0x31, 0xe2, 0xbe, 0x80, 0xd7, 0x8a,
+  0xec, 0xaf, 0xb7, 0xc7, 0xca, 0xda, 0xfa, 0xc1, 0xfc, 0x72, 0xe4, 0xe5,
+  0x89, 0xb5, 0xd1, 0x85, 0x5d, 0x7c, 0xc5, 0xfe, 0xdb, 0x8c, 0xf3, 0xb9,
+  0x69, 0x13, 0x00, 0xc7, 0xb7, 0x69, 0x77, 0xf5, 0xe1, 0xbb, 0xef, 0x8e,
+  0xce, 0x4e, 0xde, 0xbd, 0x3d, 0x7c, 0x77, 0x91, 0x7c, 0xb7, 0x7f, 0x76,
+  0xb4, 0xff, 0xd5, 0xb1, 0xa6, 0x8d, 0xf3, 0x14, 0x38, 0x5a, 0x46, 0x84,
+  0xd8, 0x16, 0x9c, 0x6a, 0x90, 0xd1, 0x13, 0x2d, 0xc2, 0xd1, 0xaa, 0x2f,
+  0xfc, 0x41, 0xb1, 0xc0, 0x21, 0xd2, 0x7f, 0x40, 0x3d, 0xa1, 0x3e, 0x4b,
+  0x71, 0x1f, 0xac, 0xb4, 0x10, 0x6b, 0x21, 0xf7, 0x41, 0x22, 0x32, 0x07,
+  0xf2, 0x30, 0x49, 0xd9, 0x41, 0xf7, 0x45, 0xf5, 0x5c, 0x95, 0x8a, 0xaf,
+  0x25, 0x97, 0xdd, 0x4a, 0x76, 0xd8, 0xab, 0xd8, 0x43, 0xe1, 0xd2, 0x7e,
+  0x0c, 0xfb, 0xc7, 0xc7, 0xbe, 0xab, 0x87, 0xab, 0xb9, 0x28, 0x8e, 0x91,
+  0x64, 0x41, 0xa1, 0x51, 0xf6, 0xb0, 0x5d, 0x15, 0x1e, 0xd8, 0x7c, 0x7e,
+  0x1f, 0x62, 0x98, 0x73, 0x67, 0xb4, 0x1d, 0x1b, 0x02, 0x40, 0xc1, 0xee,
+  0x56, 0xd2, 0xc6, 0xf2, 0xea, 0xa6, 0x9f, 0xac, 0xff, 0x61, 0x5d, 0x4b,
+  0x72, 0x03, 0x75, 0x57, 0x6a, 0xc5, 0x6c, 0xfa, 0x41, 0xbd, 0x3b, 0xf1,
+  0x63, 0x52, 0x0f, 0xa2, 0x1b, 0x80, 0x7b, 0xd1, 0xfb, 0x7f, 0x2b, 0x13,
+  0x0c, 0x10, 0x78, 0xe9, 0x1f, 0xd7, 0x82, 0x0a, 0x2e, 0xaf, 0x5e, 0x69,
+  0x94, 0x3d, 0x44, 0xd1, 0x77, 0xa1, 0xfe, 0xa4, 0xe3, 0x00, 0x5c, 0x19,
+  0x73, 0x9d, 0xb3, 0xcd, 0xc0, 0x15, 0xb9, 0x32, 0xb3, 0x1a, 0x2d, 0x35,
+  0x1b, 0xc7, 0xd4, 0x2f, 0xb7, 0xac, 0x94, 0x15, 0x81, 0xaa, 0x3e, 0x6e,
+  0x59, 0xcd, 0x18, 0x38, 0xeb, 0x38, 0xb0, 0xbe, 0xcc, 0x27, 0x0a, 0xd6,
+  0x17, 0xa5, 0x8a, 0x21, 0x7c, 0x3c, 0x67, 0x07, 0xc0, 0x36, 0x9f, 0x73,
+  0x75, 0x43, 0x5f, 0x93, 0x02, 0x41, 0xb8, 0xa4, 0xc5, 0x96, 0x9c, 0xd9,
+  0x36, 0xd7, 0xdb, 0x1c, 0x81, 0xad, 0x10, 0x76, 0xd3, 0xab, 0xc2, 0x04,
+  0xd9, 0xd4, 0x79, 0x9f, 0x5d, 0xe5, 0xae, 0x40, 0x38, 0x76, 0x08, 0x5c,
+  0xce, 0xf6, 0x07, 0x3f, 0xb5, 0x59, 0xda, 0x39, 0x4e, 0x8b, 0xb7, 0xdc,
+  0x2a, 0x31, 0x57, 0x41, 0x8e, 0xb3, 0x4f, 0x03, 0x60, 0x5e, 0x22, 0xd1,
+  0xee, 0x06, 0x89, 0x05, 0x18, 0x32, 0xcb, 0x89, 0x46, 0xc4, 0x20, 0x86,
+  0xc5, 0x0f, 0xa2, 0x49, 0x0d, 0xfe, 0x44, 0x93, 0x66, 0x04, 0xa6, 0xd3,
+  0x33, 0xe5, 0x4c, 0x2c, 0xe3, 0x44, 0x69, 0x32, 0xca, 0xaf, 0x24, 0xb7,
+  0x9e, 0x13, 0xb9, 0x99, 0x4a, 0x00, 0x95, 0x46, 0x1a, 0x32, 0x6f, 0x15,
+  0x80, 0xd0, 0x20, 0x04, 0x5f, 0x17, 0xd3, 0x10, 0xad, 0xcb, 0x66, 0x52,
+  0x69, 0x4d, 0x32, 0xb3, 0x21, 0xc2, 0x87, 0xb0, 0xe4, 0x75, 0xb4, 0xb0,
+  0x2e, 0x85, 0xf9, 0xd6, 0x20, 0x37, 0x36, 0x4e, 0x03, 0x73, 0x70, 0x8e,
+  0x94, 0x1a, 0xcb, 0x49, 0xc6, 0x3a, 0x58, 0x00, 0x30, 0x73, 0x0b, 0x18,
+  0xa4, 0xb8, 0x5e, 0xe2, 0x86, 0xc3, 0xe9, 0xe6, 0x56, 0xc6, 0x82, 0x74,
+  0xca, 0x44, 0x2f, 0xae, 0xd9, 0x66, 0x61, 0x1d, 0xdd, 0x2c, 0xc5, 0xa0,
+  0x22, 0x9a, 0xe0, 0x41, 0xd3, 0x4a, 0x6d, 0x04, 0x8c, 0x67, 0x4e, 0x24,
+  0x22, 0x8f, 0x89, 0x26, 0xa6, 0x7f, 0x0d, 0x5c, 0x4d, 0x30, 0x75, 0xe0,
+  0x6e, 0x7a, 0x07, 0xbe, 0x5c, 0xa7, 0x4c, 0xad, 0x63, 0xad, 0xca, 0x08,
+  0x57, 0x37, 0x97, 0x94, 0x04, 0xb0, 0x52, 0xc3, 0x88, 0x97, 0x58, 0xe2,
+  0xca, 0x74, 0x1a, 0x00, 0x75, 0x8b, 0x5e, 0x9f, 0x76, 0x2e, 0x71, 0xf6,
+  0xb2, 0x0c, 0x85, 0x03, 0x48, 0x08, 0x8d, 0x80, 0xfa, 0x06, 0x13, 0xd1,
+  0xe0, 0x6c, 0x16, 0x73, 0x5a, 0xb6, 0xc1, 0x80, 0xa1, 0x99, 0x9b, 0x39,
+  0xbc, 0x98, 0xb4, 0x2e, 0x45, 0x9e, 0xce, 0x44, 0x08, 0xf3, 0xd4, 0x37,
+  0xbb, 0x97, 0xf0, 0xbd, 0xb5, 0xb5, 0x83, 0xf7, 0xe7, 0x17, 0x27, 0x6f,
+  0x93, 0x93, 0xf7, 0x17, 0xa7, 0xef, 0x2f, 0xf4, 0xe6, 0x1a, 0x49, 0xf0,
+  0xb3, 0x84, 0x00, 0xc8, 0x6d, 0x6a, 0x9b, 0x39, 0x53, 0x47, 0x39, 0x62,
+  0x35, 0x0a, 0xc0, 0xf3, 0x05, 0xc8, 0x3c, 0x2e, 0xb9, 0x09, 0x98, 0x55,
+  0x82, 0xfb, 0x8b, 0x25, 0xbf, 0xa3, 0x25, 0x47, 0x62, 0x2a, 0x2c, 0x62,
+  0x96, 0x2b, 0x05, 0xfd, 0xc1, 0xce, 0x5a, 0xb3, 0xe6, 0xcb, 0x7d, 0x53,
+  0x1f, 0x80, 0x97, 0xbb, 0x89, 0x84, 0x14, 0x96, 0x9e, 0x14, 0x23, 0x89,
+  0xb7, 0xa1, 0x84, 0xb1, 0x91, 0x5a, 0xb8, 0xd2, 0x2c, 0xb9, 0x16, 0x9e,
+  0x8a, 0x98, 0x9d, 0x66, 0x86, 0x5e, 0x98, 0x28, 0x58, 0x17, 0x34, 0xc3,
+  0x6b, 0x17, 0x5a, 0xce, 0xe1, 0x38, 0x08, 0xa9, 0x93, 0x48, 0x04, 0x8e,
+  0x5d, 0x13, 0xd1, 0x9b, 0x14, 0x2a, 0xb6, 0xfd, 0x77, 0x6e, 0xd9, 0xbb,
+  0x64, 0xfd, 0xfb, 0x2c, 0x6c, 0xf0, 0xf7, 0xff, 0xc5, 0xf9, 0x8f, 0x1f,
+  0xec, 0x93, 0xbf, 0x4b, 0x97, 0x3f, 0xcd, 0xd7, 0x11, 0x89, 0xd6, 0x74,
+  0x39, 0x7f, 0x7b, 0x78, 0xf6, 0xd5, 0xe1, 0xd9, 0xc9, 0x39, 0xf8, 0x81,
+  0xd9, 0x8d, 0xba, 0xb4, 0x7e, 0x93, 0x95, 0xa3, 0xac, 0x2c, 0xb4, 0x1e,
+  0x95, 0xfd, 0xf5, 0x6c, 0xeb, 0xeb, 0xf3, 0xf3, 0xfd, 0xd3, 0x23, 0x57,
+  0xf1, 0xc5, 0x65, 0x62, 0x89, 0xae, 0x31, 0x97, 0x5c, 0x41, 0x9e, 0xbf,
+  0xbd, 0x42, 0x74, 0x31, 0xbe, 0x91, 0x08, 0xdd, 0x8e, 0x73, 0xd7, 0x0c,
+  0xd4, 0xec, 0xd5, 0xd5, 0x04, 0x3d, 0x6e, 0xd8, 0x10, 0x95, 0x42, 0xd4,
+  0x76, 0x81, 0x57, 0x67, 0xa3, 0x7a, 0xdf, 0x85, 0xb2, 0xdd, 0x94, 0x23,
+  0x52, 0xc5, 0xc7, 0x37, 0x56, 0x00, 0x59, 0x12, 0x0a, 0x88, 0x55, 0x4a,
+  0xa4, 0xb1, 0x57, 0xda, 0x6f, 0xb8, 0x96, 0xfc, 0xd6, 0x0d, 0x9f, 0x0f,
+  0xae, 0x46, 0x32, 0x1d, 0x0a, 0x77, 0x97, 0x03, 0x65, 0xe1, 0xa3, 0xcc,
+  0x62, 0x1f, 0x42, 0x79, 0xa0, 0xde, 0x5c, 0x09, 0x41, 0x31, 0x1c, 0xd1,
+  0x27, 0x4f, 0x1d, 0xdc, 0x55, 0x58, 0x8f, 0xfb, 0x92, 0x24, 0xd9, 0xc5,
+  0xdd, 0x44, 0x2f, 0x11, 0xa0, 0x3d, 0xcf, 0xc5, 0xce, 0x2f, 0x3c, 0xbc,
+  0xed, 0xe9, 0xe1, 0x32, 0x87, 0xc8, 0x7c, 0xd0, 0xb8, 0xee, 0x64, 0x34,
+  0x4d, 0xe7, 0x37, 0xb8, 0xcd, 0x70, 0x3f, 0xb1, 0xee, 0x66, 0x20, 0x4e,
+  0x5c, 0x7e, 0x12, 0x8e, 0x3d, 0xc5, 0x55, 0x80, 0x10, 0x38, 0x65, 0xe6,
+  0x76, 0x2f, 0x46, 0x71, 0x87, 0x55, 0x15, 0xb8, 0xb0, 0x70, 0x9c, 0xfc,
+  0x22, 0xb0, 0x0d, 0xe6, 0xf0, 0x98, 0x2e, 0x26, 0x97, 0xad, 0x01, 0x5d,
+  0x37, 0x9b, 0xb2, 0x4d, 0xd5, 0x42, 0x6b, 0x24, 0x41, 0x31, 0x07, 0x23,
+  0x13, 0xee, 0x61, 0x40, 0xe4, 0x70, 0xc4, 0x80, 0x5c, 0x90, 0x87, 0x59,
+  0xb9, 0x72, 0x1d, 0xca, 0xb9, 0x85, 0x89, 0x01, 0x65, 0xd3, 0x57, 0xef,
+  0x08, 0xeb, 0xc8, 0x68, 0xdc, 0xda, 0x81, 0x0f, 0xac, 0x71, 0x85, 0xb5,
+  0x64, 0x10, 0x5e, 0x2c, 0x75, 0xae, 0xba, 0x46, 0x9a, 0xc8, 0xca, 0x6d,
+  0x92, 0xd7, 0x63, 0xda, 0xb4, 0x80, 0x83, 0x4d, 0xd4, 0x71, 0xe0, 0x70,
+  0x75, 0x2c, 0xf6, 0xb7, 0x19, 0x6f, 0x6b, 0x03, 0x17, 0xb7, 0x3a, 0x5b,
+  0x41, 0xa7, 0xb5, 0x79, 0xdf, 0x10, 0x2b, 0xaa, 0x37, 0x70, 0x3d, 0x01,
+  0xcb, 0x29, 0x1b, 0x90, 0xaf, 0x61, 0x98, 0xab, 0x40, 0x3f, 0xc0, 0xc8,
+  0x26, 0x89, 0x0f, 0xd0, 0x07, 0x9c, 0x7c, 0x3b, 0x78, 0xc7, 0xd7, 0x45,
+  0x31, 0x18, 0x2d, 0xa1, 0xe0, 0x04, 0x05, 0xaf, 0x24, 0x19, 0x92, 0xf4,
+  0x1e, 0x41, 0x25, 0xc3, 0xf7, 0xec, 0xd8, 0x41, 0x9a, 0xb9, 0xf8, 0x7a,
+  0x90, 0x77, 0xd8, 0x44, 0xac, 0x71, 0x38, 0x25, 0x12, 0xcc, 0xef, 0x2b,
+  0xf1, 0xba, 0x09, 0xea, 0x26, 0xbb, 0xb0, 0xbb, 0xb9, 0x96, 0x4b, 0x85,
+  0x8b, 0xa2, 0x19, 0xba, 0x5c, 0x3b, 0xe0, 0xf8, 0x0b, 0x88, 0x09, 0x99,
+  0xc2, 0xa9, 0x5b, 0x4c, 0xb2, 0x65, 0x40, 0xdc, 0xd6, 0x5c, 0xa2, 0x49,
+  0x20, 0x16, 0xd2, 0xa9, 0xd4, 0xbb, 0x58, 0x79, 0x95, 0xc8, 0x61, 0xaa,
+  0x2f, 0x2e, 0xfe, 0x7c, 0x7a, 0xf8, 0xca, 0xde, 0x7c, 0x68, 0xcf, 0x04,
+  0x79, 0x0c, 0xc1, 0x27, 0x99, 0x22, 0x7d, 0x06, 0x45, 0xa6, 0x89, 0xc8,
+  0x06, 0xb5, 0x39, 0xc5, 0xa5, 0x9b, 0x41, 0xf2, 0xc3, 0xeb, 0xa3, 0xf3,
+  0xd3, 0xe3, 0x93, 0x83, 0x57, 0x2f, 0x7f, 0x30, 0x96, 0xfc, 0x05, 0xdb,
+  0xda, 0x45, 0x4e, 0x73, 0x9f, 0x79, 0x64, 0x04, 0x7d, 0xef, 0xdd, 0xe1,
+  0xf7, 0x1f, 0x48, 0x3b, 0x78, 0xc5, 0xf8, 0xe8, 0xfd, 0xdb, 0x74, 0xaa,
+  0x2f, 0xb1, 0x8a, 0x15, 0x91, 0xed, 0x86, 0x4d, 0x28, 0xbb, 0xf6, 0xc2,
+  0xba, 0x3a, 0x9f, 0x3e, 0xe0, 0xff, 0xde, 0xe2, 0xd1, 0x82, 0x92, 0x4e,
+  0x69, 0x23, 0x3f, 0x35, 0x52, 0x95, 0xd7, 0x5f, 0xff, 0xeb, 0xb5, 0x04,
+  0x27, 0xb2, 0x2f, 0x3e, 0x74, 0x71, 0x23, 0x00, 0x54, 0xbf, 0xf1, 0x81,
+  0xb1, 0x8a, 0x43, 0x5c, 0x72, 0x24, 0x88, 0x03, 0x72, 0xd4, 0x52, 0xcf,
+  0x70, 0x1e, 0x2b, 0xda, 0xa3, 0x42, 0x18, 0x71, 0x2c, 0xaa, 0x85, 0xa5,
+  0x1b, 0x1f, 0x53, 0x11, 0xc6, 0x8d, 0x25, 0xb5, 0xa2, 0xb3, 0xa8, 0x6c,
+  0x73, 0x7a, 0x78, 0x76, 0x7e, 0x74, 0x7e, 0xc1, 0x6a, 0x94, 0x56, 0x40,
+  0x54, 0x63, 0xae, 0x95, 0xa7, 0x04, 0xf8, 0x41, 0x13, 0xb8, 0x33, 0xac,
+  0xba, 0xd1, 0x38, 0xd1, 0x8e, 0xcd, 0x35, 0xb3, 0x21, 0xf9, 0x06, 0x90,
+  0x14, 0x4b, 0x16, 0x44, 0x05, 0x7e, 0x36, 0xbd, 0xb4, 0x03, 0x5c, 0x28,
+  0x69, 0xb4, 0x8a, 0x4f, 0xa0, 0x70, 0x0c, 0x76, 0x67, 0x9a, 0x8f, 0x82,
+  0x92, 0xd3, 0x4d, 0x5f, 0x2c, 0xbb, 0xf9, 0x15, 0xea, 0x22, 0x3c, 0x42,
+  0x66, 0x58, 0xf6, 0x29, 0xc6, 0x5a, 0x14, 0x57, 0xaf, 0x35, 0x4d, 0x0f,
+  0x0c, 0x13, 0x41, 0x9d, 0xa2, 0x0a, 0xe5, 0x24, 0x2c, 0xfe, 0x8d, 0x4f,
+  0x83, 0x68, 0x4e, 0x45, 0x4f, 0x02, 0xf0, 0xab, 0xb2, 0x6c, 0x66, 0xca,
+  0xb9, 0xa4, 0x74, 0xb1, 0xc5, 0x82, 0xa4, 0x16, 0xa4, 0xa8, 0x23, 0xe0,
+  0x46, 0x67, 0xd6, 0x11, 0x41, 0x54, 0x74, 0xbc, 0xe2, 0x5c, 0x30, 0x40,
+  0x54, 0x4d, 0x58, 0xde, 0x82, 0x29, 0x2b, 0xec, 0xcc, 0xae, 0x53, 0x5e,
+  0xc1, 0xd1, 0x32, 0x2c, 0xa9, 0xe6, 0x46, 0x2f, 0xd5, 0x3d, 0xb0, 0xf0,
+  0x08, 0x35, 0x4c, 0x4b, 0x60, 0x40, 0xd6, 0x0a, 0xb9, 0x6e, 0x8a, 0x8f,
+  0xc6, 0x0d, 0x0e, 0x9b, 0x68, 0x38, 0x46, 0x97, 0x56, 0xf6, 0xf3, 0xa1,
+  0x15, 0x0d, 0x6a, 0x30, 0x32, 0xf9, 0x96, 0x99, 0x05, 0x00, 0x89, 0x99,
+  0xa1, 0x62, 0xcb, 0xfd, 0x7c, 0xec, 0x2e, 0x63, 0xce, 0xde, 0x61, 0x47,
+  0x5d, 0xa9, 0x48, 0x43, 0xc4, 0xfe, 0xd8, 0x44, 0x8b, 0xc2, 0x8d, 0xa8,
+  0x68, 0xcc, 0xee, 0x2b, 0x43, 0xa1, 0xf3, 0xf1, 0xd0, 0xb2, 0xdc, 0x01,
+  0x59, 0x89, 0x9d, 0xfa, 0x5e, 0x3b, 0x74, 0x99, 0xe6, 0xb6, 0x59, 0x7d,
+  0x49, 0x5c, 0x4a, 0x91, 0x27, 0x63, 0x06, 0xd2, 0x20, 0xdf, 0xb2, 0xd2,
+  0x2c, 0x56, 0xe7, 0xe7, 0x05, 0xc3, 0x6b, 0x54, 0xaf, 0xe5, 0xd9, 0x35,
+  0x7c, 0x6c, 0x24, 0x5f, 0x2e, 0x50, 0x8a, 0x68, 0xac, 0x58, 0xec, 0x88,
+  0x7e, 0x75, 0x0d, 0xda, 0x25, 0xe2, 0x17, 0x8b, 0x56, 0xf5, 0xed, 0xfb,
+  0xe3, 0x8b, 0xa3, 0xd3, 0xd0, 0x8f, 0x97, 0x7c, 0x7f, 0x74, 0xf1, 0x0d,
+  0x49, 0xed, 0xe7, 0x47, 0xef, 0xbe, 0x3e, 0x66, 0x67, 0xc9, 0xdb, 0xb7,
+  0xfb, 0xef, 0x38, 0x4d, 0xff, 0x1d, 0x42, 0x04, 0xf7, 0xa1, 0x38, 0x30,
+  0x3b, 0xa2, 0x25, 0x66, 0xda, 0xe1, 0x04, 0xee, 0x7e, 0xd7, 0x66, 0xdf,
+  0x3a, 0x7e, 0x52, 0x9d, 0x78, 0xde, 0x5c, 0xa4, 0x35, 0xd4, 0x9a, 0x86,
+  0x66, 0x70, 0xcf, 0x86, 0x1d, 0x1c, 0x5b, 0x56, 0xb6, 0x78, 0xa1, 0xdb,
+  0x20, 0xec, 0x48, 0x16, 0x14, 0x09, 0x1d, 0xfe, 0x68, 0xb9, 0xbb, 0xbd,
+  0x1f, 0x00, 0x3b, 0xea, 0x20, 0x5c, 0xa1, 0xc7, 0x90, 0xcc, 0x34, 0x57,
+  0xbd, 0x46, 0xee, 0xcb, 0x66, 0xf0, 0x3e, 0xf5, 0x88, 0x21, 0xc1, 0x21,
+  0x5f, 0x78, 0xd3, 0x1a, 0x6b, 0x9c, 0xac, 0x34, 0x9f, 0x1d, 0x87, 0x17,
+  0xea, 0xb0, 0x51, 0xbb, 0xcb, 0xe2, 0xec, 0xae, 0x8a, 0xcc, 0x9f, 0xdc,
+  0xc1, 0x89, 0x35, 0x63, 0x76, 0x54, 0xa8, 0x61, 0x72, 0xb9, 0x0c, 0x98,
+  0xaf, 0x0d, 0x68, 0x4b, 0x36, 0x5d, 0xbd, 0x1e, 0x35, 0x9f, 0xed, 0x89,
+  0x58, 0xe9, 0x40, 0x8a, 0xad, 0xcc, 0x1d, 0x35, 0x67, 0x2d, 0x6b, 0x4c,
+  0x07, 0x02, 0x9b, 0x35, 0x3f, 0x48, 0xe7, 0x0c, 0x6e, 0x69, 0x8f, 0x35,
+  0xd2, 0x9b, 0xe5, 0xbe, 0x3b, 0x31, 0x23, 0xbf, 0xe5, 0x87, 0xb9, 0x02,
+  0x6a, 0xde, 0x05, 0x89, 0x12, 0x65, 0x45, 0x31, 0xcc, 0x3e, 0x66, 0xec,
+  0x2d, 0xe4, 0x5f, 0xff, 0xb2, 0xb8, 0x0a, 0x53, 0xc7, 0xa4, 0x40, 0xf3,
+  0x22, 0xb6, 0xb3, 0x8a, 0x88, 0x2c, 0x62, 0x91, 0x16, 0x85, 0x6b, 0x8c,
+  0x40, 0x2b, 0xbd, 0xed, 0xac, 0xea, 0x50, 0xbf, 0xdf, 0xed, 0x7e, 0xbf,
+  0x2b, 0x66, 0xc7, 0xa3, 0xd3, 0xdb, 0xe7, 0x0e, 0x49, 0x54, 0x12, 0xa2,
+  0x43, 0xf1, 0xcd, 0x84, 0x02, 0xa6, 0x30, 0x7e, 0x54, 0xee, 0x9c, 0x54,
+  0x78, 0xa2, 0x18, 0xd1, 0x39, 0x14, 0x6b, 0x59, 0x22, 0xd1, 0x13, 0x8f,
+  0xc0, 0xde, 0x2a, 0xf1, 0xb3, 0x88, 0x56, 0x03, 0x9f, 0xe2, 0xeb, 0x8a,
+  0x1a, 0xa4, 0xef, 0x9f, 0xba, 0xa0, 0x76, 0xcf, 0xd3, 0x50, 0xec, 0x4c,
+  0xd3, 0x8a, 0x06, 0xf9, 0xe2, 0xd6, 0xaa, 0xe5, 0xd2, 0xaf, 0xcf, 0x5d,
+  0xa1, 0x9b, 0xaa, 0xe1, 0xec, 0x69, 0xa0, 0xf6, 0x1a, 0xf3, 0xc7, 0xe0,
+  0x10, 0x5f, 0xc8, 0x9c, 0xc1, 0x2b, 0x19, 0xad, 0x71, 0x65, 0xcd, 0xc8,
+  0xe6, 0xa0, 0xdc, 0x27, 0xb2, 0x27, 0xa6, 0x48, 0x31, 0x05, 0x3f, 0x0a,
+  0x98, 0x4b, 0x88, 0x98, 0xaf, 0xbb, 0xfe, 0xe3, 0xee, 0xf6, 0xf6, 0xce,
+  0xde, 0xce, 0xe7, 0x2f, 0xb6, 0xf7, 0x76, 0x76, 0x76, 0x76, 0xf7, 0x76,
+  0xf6, 0xf6, 0x76, 0xb7, 0x7f, 0xde, 0x62, 0xfb, 0xd1, 0x6d, 0x9e, 0xdd,
+  0x99, 0x87, 0x47, 0x92, 0xda, 0x40, 0xd6, 0x52, 0xf5, 0x5c, 0x35, 0x78,
+  0xd5, 0x73, 0x4d, 0xf2, 0x71, 0xf0, 0x0c, 0x12, 0x7b, 0x2e, 0x50, 0x6c,
+  0x0b, 0x9f, 0xb2, 0x89, 0x33, 0x18, 0xc0, 0x45, 0x63, 0x54, 0x7f, 0x5d,
+  0xf2, 0x4c, 0x47, 0x2c, 0x0e, 0x40, 0xa6, 0xa9, 0x5c, 0x82, 0xdc, 0xd5,
+  0xb4, 0x18, 0x8d, 0x90, 0x02, 0xe0, 0x72, 0x44, 0x87, 0x09, 0x63, 0x92,
+  0xde, 0x08, 0x49, 0xa8, 0x09, 0x1e, 0xd1, 0x79, 0x72, 0xd0, 0xfd, 0xea,
+  0x88, 0xe0, 0xa5, 0x11, 0xc9, 0xe3, 0x82, 0xf1, 0xf9, 0x27, 0xcc, 0x94,
+  0x68, 0x91, 0x4a, 0x97, 0x3b, 0x92, 0x5c, 0x66, 0x9f, 0x6f, 0xef, 0xed,
+  0x71, 0x09, 0x8d, 0xdf, 0xef, 0xf4, 0x35, 0xb0, 0x32, 0x8c, 0x16, 0xef,
+  0xbb, 0xeb, 0x49, 0xda, 0x60, 0xf5, 0x23, 0x9c, 0xe7, 0x7c, 0x39, 0xcb,
+  0x4a, 0x52, 0x44, 0xb8, 0x08, 0x2b, 0x22, 0x0b, 0x61, 0xf4, 0x16, 0xac,
+  0x32, 0x20, 0x9b, 0xb4, 0xa2, 0xda, 0xf9, 0x46, 0x10, 0xcc, 0x55, 0x97,
+  0xcd, 0x2d, 0xb8, 0x3b, 0x7e, 0x8a, 0xae, 0x6d, 0x94, 0x91, 0x41, 0xd0,
+  0x93, 0xe4, 0x84, 0x48, 0x36, 0x8c, 0xdc, 0xb7, 0xca, 0x19, 0x70, 0xb8,
+  0xe6, 0x52, 0x1a, 0x94, 0x1f, 0x17, 0x19, 0x1e, 0x16, 0x93, 0x40, 0xb8,
+  0xd5, 0x44, 0x98, 0x1f, 0x83, 0xc9, 0xee, 0x3e, 0xdb, 0xf9, 0x59, 0xe2,
+  0xfe, 0xf8, 0x40, 0xf8, 0x55, 0xd3, 0xb2, 0x6a, 0x93, 0x30, 0xd5, 0xc1,
+  0x08, 0x69, 0x23, 0x1b, 0x5e, 0x0d, 0x4d, 0xaa, 0x50, 0x6b, 0x63, 0x3f,
+  0x8c, 0xbe, 0x16, 0xbc, 0x6f, 0x29, 0xf8, 0x0b, 0x3d, 0xcd, 0x0c, 0x4a,
+  0x66, 0x10, 0x16, 0x63, 0x66, 0xa3, 0x3e, 0x0e, 0xdd, 0x30, 0x87, 0x17,
+  0xfb, 0x74, 0x79, 0x7c, 0xdb, 0x55, 0xf4, 0xdf, 0x66, 0xa4, 0x95, 0xf3,
+  0x66, 0x6f, 0xe0, 0x3c, 0xdc, 0x3a, 0x94, 0x5d, 0x5e, 0xbb, 0xa7, 0xc9,
+  0x06, 0x3b, 0x2d, 0x9e, 0x7d, 0xfe, 0xec, 0xe9, 0xa6, 0x94, 0x34, 0x90,
+  0xd7, 0x32, 0x4e, 0xb4, 0x80, 0x55, 0x52, 0x51, 0x5e, 0xd8, 0x9c, 0xec,
+  0x58, 0xd2, 0xfb, 0xb3, 0x23, 0x39, 0xd2, 0xd7, 0x92, 0x8c, 0x2f, 0x4a,
+  0x6f, 0x1b, 0x95, 0x0d, 0xf7, 0x6d, 0x20, 0x64, 0xcc, 0x72, 0x46, 0x0c,
+  0x44, 0x12, 0x33, 0x5f, 0x8c, 0x2e, 0x89, 0x1e, 0x37, 0x2c, 0x1d, 0xd0,
+  0x02, 0x85, 0xfe, 0xb4, 0x7e, 0x12, 0x06, 0x03, 0x88, 0x41, 0x46, 0x38,
+  0x55, 0x3a, 0x73, 0x1a, 0x18, 0xeb, 0x41, 0xc2, 0x8f, 0x84, 0xfb, 0xb7,
+  0x50, 0xad, 0x37, 0xc5, 0x75, 0x0e, 0xa1, 0x90, 0xc9, 0x90, 0x1e, 0xb4,
+  0x18, 0x4c, 0x1e, 0x71, 0x23, 0xad, 0xcb, 0x4b, 0x9b, 0x01, 0x38, 0x92,
+  0xe1, 0xa2, 0x28, 0x2b, 0x72, 0x4b, 0x28, 0x7e, 0xe1, 0x1a, 0x96, 0xc5,
+  0xbc, 0x61, 0xf2, 0xd1, 0xa4, 0x74, 0x24, 0x87, 0x23, 0x76, 0x77, 0x46,
+  0xd7, 0x51, 0x79, 0xaf, 0x12, 0x36, 0xd4, 0x04, 0x57, 0x97, 0xac, 0xe5,
+  0x59, 0x17, 0xf8, 0x85, 0x30, 0x24, 0xdd, 0xa1, 0x8f, 0x98, 0xd2, 0xdc,
+  0x18, 0x40, 0x83, 0xed, 0x0f, 0x66, 0xf6, 0x55, 0x10, 0x78, 0x12, 0xe6,
+  0x69, 0xd9, 0xef, 0xf6, 0x5c, 0x10, 0x93, 0x98, 0xb6, 0x27, 0xb6, 0x62,
+  0x68, 0x82, 0x4c, 0x89, 0x38, 0x24, 0xa7, 0xfd, 0x6c, 0x60, 0x24, 0x5b,
+  0x5b, 0x9b, 0x2b, 0x46, 0xa3, 0x5f, 0xc7, 0x7a, 0x3f, 0x05, 0xb8, 0x47,
+  0x90, 0x1a, 0x49, 0x7b, 0xde, 0x6c, 0x9c, 0x97, 0x36, 0xaf, 0x78, 0x27,
+  0x27, 0x1a, 0x60, 0x2a, 0x66, 0x54, 0x53, 0xaf, 0x64, 0xf0, 0xc6, 0xbc,
+  0x9a, 0x93, 0xd0, 0x98, 0x16, 0x03, 0x5b, 0x92, 0xea, 0xcc, 0xe2, 0x27,
+  0x1c, 0x26, 0xfb, 0x4c, 0x0d, 0x8d, 0x8e, 0x83, 0x21, 0x9b, 0x3d, 0xd7,
+  0xf0, 0xc3, 0x4d, 0x88, 0x75, 0xe6, 0xbc, 0x7e, 0xf0, 0xa5, 0x89, 0x79,
+  0x96, 0x5b, 0xef, 0x8c, 0xbd, 0xa3, 0x4c, 0x70, 0x44, 0x1c, 0xe7, 0x0c,
+  0x70, 0x81, 0xf3, 0x79, 0xa3, 0xe0, 0xa6, 0x36, 0x02, 0x8f, 0xb1, 0x9b,
+  0x04, 0x20, 0x07, 0x4b, 0x83, 0xb2, 0x0d, 0x8b, 0xf0, 0x21, 0x95, 0x5f,
+  0xa3, 0xc3, 0x45, 0xb0, 0x76, 0x44, 0x2c, 0x6e, 0xcb, 0x91, 0x90, 0x57,
+  0x63, 0x3d, 0xfa, 0x42, 0xf1, 0x12, 0x0d, 0x20, 0x81, 0xab, 0x74, 0x48,
+  0x98, 0x61, 0xec, 0x1f, 0x1d, 0x73, 0x78, 0xd9, 0x31, 0xa9, 0x78, 0xe7,
+  0x26, 0x2a, 0x21, 0xdc, 0x12, 0x81, 0x6f, 0xf3, 0x9c, 0xc5, 0xf5, 0xbe,
+  0x2b, 0xdc, 0x61, 0x59, 0x47, 0xd0, 0x5b, 0xd8, 0xb9, 0x27, 0xaa, 0xbf,
+  0x82, 0xed, 0xd1, 0x6e, 0x91, 0xbc, 0x54, 0x89, 0xd1, 0x16, 0x40, 0xb6,
+  0x0c, 0xf1, 0x7e, 0x9b, 0x4d, 0x8b, 0x05, 0x54, 0x6a, 0x61, 0xd3, 0xa8,
+  0x1b, 0x54, 0x66, 0xd3, 0xec, 0x56, 0xad, 0xab, 0x02, 0x0b, 0xfa, 0xb5,
+  0xfa, 0x30, 0xa5, 0x70, 0x68, 0xad, 0xd1, 0xe1, 0x1d, 0x3f, 0x29, 0x77,
+  0xba, 0x25, 0xe8, 0x2a, 0x1e, 0x34, 0x83, 0xfb, 0xf7, 0x60, 0xf6, 0xb4,
+  0x42, 0x0e, 0x0c, 0x7d, 0xc0, 0x4a, 0xae, 0x06, 0x89, 0xbe, 0xaf, 0x14,
+  0x17, 0xa1, 0x1d, 0x75, 0x2d, 0xc6, 0x42, 0xab, 0x3d, 0x27, 0xd6, 0xf7,
+  0xbe, 0xc1, 0x0d, 0x8b, 0xcb, 0x80, 0x6f, 0x9e, 0x3e, 0x5b, 0x6a, 0xa5,
+  0x96, 0x3a, 0x69, 0x64, 0x5c, 0x58, 0xa2, 0x2f, 0x29, 0x98, 0x20, 0x8e,
+  0x62, 0x4a, 0x7f, 0x22, 0x30, 0x49, 0x42, 0x15, 0xe9, 0x59, 0x86, 0x4b,
+  0x0d, 0x62, 0x43, 0xe9, 0x4f, 0x49, 0x2b, 0xd0, 0xbf, 0xd0, 0x54, 0xb9,
+  0x04, 0x2a, 0x6f, 0x5f, 0x6e, 0x43, 0xf6, 0x3a, 0xd6, 0xe3, 0xa1, 0x1b,
+  0xbd, 0x7a, 0xcf, 0x65, 0xfc, 0xaf, 0x65, 0x29, 0x79, 0x12, 0x22, 0x87,
+  0x14, 0xa5, 0x2d, 0xaf, 0x6c, 0xc3, 0x48, 0x4a, 0x05, 0x7e, 0xb5, 0x64,
+  0x6f, 0x98, 0x2b, 0x84, 0xc3, 0xa3, 0x98, 0xf1, 0x5d, 0x94, 0x49, 0x55,
+  0x4e, 0xd7, 0x38, 0xab, 0x74, 0x4b, 0xda, 0x5e, 0x69, 0xfd, 0xb8, 0xb8,
+  0xe3, 0x92, 0xa2, 0x97, 0x97, 0xf9, 0x98, 0x1d, 0xdc, 0x1e, 0x7d, 0x97,
+  0x79, 0xbc, 0x3c, 0x38, 0xb3, 0x2a, 0x46, 0x34, 0xb7, 0x64, 0xb1, 0x1c,
+  0x4d, 0xe9, 0xb2, 0xb6, 0xb8, 0x70, 0x3a, 0x55, 0x58, 0x25, 0xd2, 0xb6,
+  0xd0, 0x9c, 0xc0, 0x84, 0x41, 0xe1, 0x6c, 0xc5, 0x22, 0x6b, 0x9d, 0x75,
+  0x16, 0xc1, 0x67, 0xa8, 0xad, 0xca, 0x01, 0xbb, 0xb3, 0x62, 0x6e, 0x69,
+  0x25, 0xcb, 0x4a, 0x60, 0x19, 0xad, 0x28, 0xfb, 0x9a, 0xb8, 0x26, 0xf2,
+  0xa9, 0x82, 0x9f, 0xab, 0x6a, 0x8e, 0x37, 0xc2, 0xc9, 0x4c, 0x06, 0x8b,
+  0xeb, 0x85, 0xed, 0xb4, 0x09, 0x44, 0x22, 0x2d, 0x69, 0x22, 0x03, 0x8e,
+  0xde, 0xe9, 0x37, 0xa7, 0xc3, 0xe4, 0x90, 0x5b, 0x92, 0x31, 0xa9, 0xa0,
+  0x0b, 0x1b, 0x0d, 0x7d, 0x47, 0x93, 0xbd, 0xe2, 0x0b, 0xec, 0xa4, 0xe4,
+  0xbf, 0xd0, 0x9a, 0x7e, 0x29, 0x66, 0x59, 0x7c, 0xdb, 0xec, 0x95, 0x1a,
+  0xb2, 0x70, 0xe5, 0x53, 0xfc, 0x4e, 0x67, 0x85, 0xc4, 0x2f, 0xb7, 0x4d,
+  0xbe, 0x87, 0xa2, 0x6c, 0x80, 0xd8, 0xc8, 0x9b, 0x09, 0x49, 0x65, 0x90,
+  0xad, 0x16, 0xf7, 0xd8, 0xbf, 0x80, 0x39, 0x8a, 0xfc, 0x29, 0x0d, 0x04,
+  0xa4, 0xa5, 0xe4, 0xe7, 0x02, 0xe1, 0xe4, 0x60, 0x95, 0x02, 0xdf, 0x52,
+  0x66, 0x1a, 0x36, 0x58, 0xa8, 0x9b, 0x54, 0x2c, 0x1a, 0x55, 0xd6, 0x3a,
+  0xaf, 0x81, 0xfe, 0x66, 0x5f, 0xb0, 0xda, 0xcd, 0x63, 0x21, 0xa9, 0x85,
+  0xb6, 0x60, 0xb8, 0xf6, 0xff, 0x02, 0x04, 0x11, 0x01, 0xde, 0x00, 0xa4,
+  0x02, 0x00,
 };
 #define BUF_SIZE 0x10000
 static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
index d2bf7fb..5db8548 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
@@ -89,7 +89,7 @@ CURLcode get_libcurl_info(void)
   if(curlinfo->protocols) {
     for(proto = curlinfo->protocols; *proto; proto++) {
       for(p = possibly_built_in; p->proto_name; p++) {
-        if(curl_strequal(*proto, p->proto_name)) {
+        if(curlx_raw_equal(*proto, p->proto_name)) {
           built_in_protos |= p->proto_pattern;
           break;
         }
index f417356..9a6465e 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -24,7 +24,6 @@
 #ifdef USE_METALINK
 
 #include <sys/stat.h>
-#include <stdlib.h>
 
 #ifdef HAVE_FCNTL_H
 #  include <fcntl.h>
@@ -93,6 +92,8 @@ struct win32_crypto_hash {
 #  error "Can't compile METALINK support without a crypto library."
 #endif
 
+#include "rawstr.h"
+
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
 #include "curlx.h"
@@ -562,13 +563,18 @@ int Curl_digest_final(digest_context *context, unsigned char *result)
 
 static unsigned char hex_to_uint(const char *s)
 {
-  char buf[3];
-  unsigned long val;
-  buf[0] = s[0];
-  buf[1] = s[1];
-  buf[2] = 0;
-  val = strtoul(buf, NULL, 16);
-  return (unsigned char)(val&0xff);
+  int v[2];
+  int i;
+  for(i = 0; i < 2; ++i) {
+    v[i] = Curl_raw_toupper(s[i]);
+    if('0' <= v[i] && v[i] <= '9') {
+      v[i] -= '0';
+    }
+    else if('A' <= v[i] && v[i] <= 'Z') {
+      v[i] -= 'A'-10;
+    }
+  }
+  return (unsigned char)((v[0] << 4) | v[1]);
 }
 
 /*
@@ -741,7 +747,7 @@ static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo)
         ++digest_alias) {
       metalink_checksum_t **p;
       for(p = fileinfo->checksums; *p; ++p) {
-        if(curl_strequal(digest_alias->alias_name, (*p)->type) &&
+        if(Curl_raw_equal(digest_alias->alias_name, (*p)->type) &&
            check_hex_digest((*p)->hash, digest_alias->digest_def)) {
           f->checksum =
             new_metalink_checksum_from_hex_digest(digest_alias->digest_def,
@@ -771,10 +777,10 @@ static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo)
          metainfo file URL may be appeared in fileinfo->metaurls.
       */
       if((*p)->type == NULL ||
-         curl_strequal((*p)->type, "http") ||
-         curl_strequal((*p)->type, "https") ||
-         curl_strequal((*p)->type, "ftp") ||
-         curl_strequal((*p)->type, "ftps")) {
+         Curl_raw_equal((*p)->type, "http") ||
+         Curl_raw_equal((*p)->type, "https") ||
+         Curl_raw_equal((*p)->type, "ftp") ||
+         Curl_raw_equal((*p)->type, "ftps")) {
         res = new_metalink_resource((*p)->url);
         tail->next = res;
         tail = res;
@@ -900,7 +906,7 @@ static int check_content_type(const char *content_type, const char *media_type)
   if(!*ptr) {
     return 0;
   }
-  return curl_strnequal(ptr, media_type, media_type_len) &&
+  return Curl_raw_nequal(ptr, media_type, media_type_len) &&
     (*(ptr+media_type_len) == '\0' || *(ptr+media_type_len) == ' ' ||
      *(ptr+media_type_len) == '\t' || *(ptr+media_type_len) == ';');
 }
index c30b320..97bb87b 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
 #  include <locale.h>
 #endif
 
+#ifdef HAVE_NETINET_TCP_H
+#  include <netinet/tcp.h>
+#endif
+
 #ifdef __VMS
 #  include <fabdef.h>
 #endif
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
@@ -139,8 +143,8 @@ static bool is_fatal_error(CURLcode code)
  * and CD/DVD images should be either a STREAM_LF format or a fixed format.
  *
  */
-static curl_off_t vms_realfilesize(const char *name,
-                                   const struct_stat *stat_buf)
+static curl_off_t vms_realfilesize(const char * name,
+                                   const struct_stat * stat_buf)
 {
   char buffer[8192];
   curl_off_t count;
@@ -170,8 +174,8 @@ static curl_off_t vms_realfilesize(const char *name,
  *  if not to call a routine to get the correct size.
  *
  */
-static curl_off_t VmsSpecialSize(const char *name,
-                                 const struct_stat *stat_buf)
+static curl_off_t VmsSpecialSize(const char * name,
+                                 const struct_stat * stat_buf)
 {
   switch(stat_buf->st_fab_rfm) {
   case FAB$C_VAR:
@@ -317,7 +321,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
   /* Single header file for all URLs */
   if(config->headerfile) {
     /* open file for output: */
-    if(strcmp(config->headerfile, "-")) {
+    if(!curlx_strequal(config->headerfile, "-")) {
       FILE *newfile = fopen(config->headerfile, "wb");
       if(!newfile) {
         warnf(config->global, "Failed to open %s\n", config->headerfile);
@@ -460,7 +464,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
         urlnum = 1; /* without globbing, this is a single URL */
 
       /* if multiple files extracted to stdout, insert separators! */
-      separator= ((!outfiles || !strcmp(outfiles, "-")) && urlnum > 1);
+      separator= ((!outfiles || curlx_strequal(outfiles, "-")) && urlnum > 1);
 
       /* Here's looping around each globbed URL */
       for(li = 0 ; li < urlnum; li++) {
@@ -530,7 +534,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
         }
 
         if(((urlnode->flags&GETOUT_USEREMOTE) ||
-            (outfile && strcmp("-", outfile))) &&
+            (outfile && !curlx_strequal("-", outfile))) &&
            (metalink || !config->use_metalink)) {
 
           /*
@@ -649,7 +653,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
           infd = -1;
           if(stat(uploadfile, &fileinfo) == 0) {
             fileinfo.st_size = VmsSpecialSize(uploadfile, &fileinfo);
-            switch(fileinfo.st_fab_rfm) {
+            switch (fileinfo.st_fab_rfm) {
             case FAB$C_VAR:
             case FAB$C_VFC:
             case FAB$C_STMCR:
@@ -711,7 +715,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
           DEBUGASSERT(infd == STDIN_FILENO);
 
           set_binmode(stdin);
-          if(!strcmp(uploadfile, ".")) {
+          if(curlx_strequal(uploadfile, ".")) {
             if(curlx_nonblock((curl_socket_t)infd, TRUE) < 0)
               warnf(config->global,
                     "fcntl failed on fd=%d: %s\n", infd, strerror(errno));
@@ -796,7 +800,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
 
         /* where to store */
         my_setopt(curl, CURLOPT_WRITEDATA, &outs);
-        my_setopt(curl, CURLOPT_INTERLEAVEDATA, &outs);
         if(metalink || !config->use_metalink)
           /* what call to write */
           my_setopt(curl, CURLOPT_WRITEFUNCTION, tool_write_cb);
@@ -854,18 +857,20 @@ static CURLcode operate_do(struct GlobalConfig *global,
           /* TODO: Make this a run-time check instead of compile-time one. */
 
           my_setopt_str(curl, CURLOPT_PROXY, config->proxy);
-          /* new in libcurl 7.5 */
-          if(config->proxy)
-            my_setopt_enum(curl, CURLOPT_PROXYTYPE, config->proxyver);
-
           my_setopt_str(curl, CURLOPT_PROXYUSERPWD, config->proxyuserpwd);
 
           /* new in libcurl 7.3 */
           my_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, config->proxytunnel?1L:0L);
 
-          /* new in libcurl 7.52.0 */
-          if(config->preproxy)
-            my_setopt_str(curl, CURLOPT_PRE_PROXY, config->preproxy);
+          /* new in libcurl 7.5 */
+          if(config->proxy)
+            my_setopt_enum(curl, CURLOPT_PROXYTYPE, (long)config->proxyver);
+
+          /* new in libcurl 7.10 */
+          if(config->socksproxy) {
+            my_setopt_str(curl, CURLOPT_PROXY, config->socksproxy);
+            my_setopt_enum(curl, CURLOPT_PROXYTYPE, (long)config->socksver);
+          }
 
           /* new in libcurl 7.10.6 */
           if(config->proxyanyauth)
@@ -994,7 +999,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
           my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, CURL_OFF_T_C(0));
 
         my_setopt_str(curl, CURLOPT_KEYPASSWD, config->key_passwd);
-        my_setopt_str(curl, CURLOPT_PROXY_KEYPASSWD, config->proxy_key_passwd);
 
         if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) {
 
@@ -1012,9 +1016,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
 
         if(config->cacert)
           my_setopt_str(curl, CURLOPT_CAINFO, config->cacert);
-        if(config->proxy_cacert)
-          my_setopt_str(curl, CURLOPT_PROXY_CAINFO, config->proxy_cacert);
-
         if(config->capath) {
           result = res_setopt_str(curl, CURLOPT_CAPATH, config->capath);
           if(result == CURLE_NOT_BUILT_IN) {
@@ -1025,44 +1026,17 @@ static CURLcode operate_do(struct GlobalConfig *global,
           else if(result)
             goto show_error;
         }
-        /* For the time being if --proxy-capath is not set then we use the
-           --capath value for it, if any. See #1257 */
-        if(config->proxy_capath || config->capath) {
-          result = res_setopt_str(curl, CURLOPT_PROXY_CAPATH,
-                                  (config->proxy_capath ?
-                                   config->proxy_capath :
-                                   config->capath));
-          if(result == CURLE_NOT_BUILT_IN) {
-            if(config->proxy_capath) {
-              warnf(config->global,
-                    "ignoring --proxy-capath, not supported by libcurl\n");
-            }
-          }
-          else if(result)
-            goto show_error;
-        }
-
         if(config->crlfile)
           my_setopt_str(curl, CURLOPT_CRLFILE, config->crlfile);
-        if(config->proxy_crlfile)
-          my_setopt_str(curl, CURLOPT_PROXY_CRLFILE, config->proxy_crlfile);
-        else if(config->crlfile) /* CURLOPT_PROXY_CRLFILE default is crlfile */
-          my_setopt_str(curl, CURLOPT_PROXY_CRLFILE, config->crlfile);
 
         if(config->pinnedpubkey)
           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_PROXY_SSLCERT, config->proxy_cert);
           my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type);
-          my_setopt_str(curl, CURLOPT_PROXY_SSLCERTTYPE,
-                        config->proxy_cert_type);
           my_setopt_str(curl, CURLOPT_SSLKEY, config->key);
-          my_setopt_str(curl, CURLOPT_PROXY_SSLKEY, config->proxy_key);
           my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type);
-          my_setopt_str(curl, CURLOPT_PROXY_SSLKEYTYPE,
-                        config->proxy_key_type);
 
           if(config->insecure_ok) {
             my_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
@@ -1073,13 +1047,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
             /* libcurl default is strict verifyhost -> 2L   */
             /* my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L); */
           }
-          if(config->proxy_insecure_ok) {
-            my_setopt(curl, CURLOPT_PROXY_SSL_VERIFYPEER, 0L);
-            my_setopt(curl, CURLOPT_PROXY_SSL_VERIFYHOST, 0L);
-          }
-          else {
-            my_setopt(curl, CURLOPT_PROXY_SSL_VERIFYPEER, 1L);
-          }
 
           if(config->verifystatus)
             my_setopt(curl, CURLOPT_SSL_VERIFYSTATUS, 1L);
@@ -1088,8 +1055,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
             my_setopt(curl, CURLOPT_SSL_FALSESTART, 1L);
 
           my_setopt_enum(curl, CURLOPT_SSLVERSION, config->ssl_version);
-          my_setopt_enum(curl, CURLOPT_PROXY_SSLVERSION,
-                         config->proxy_ssl_version);
         }
         if(config->path_as_is)
           my_setopt(curl, CURLOPT_PATH_AS_IS, 1L);
@@ -1191,10 +1156,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
         if(config->cipher_list)
           my_setopt_str(curl, CURLOPT_SSL_CIPHER_LIST, config->cipher_list);
 
-        if(config->proxy_cipher_list)
-          my_setopt_str(curl, CURLOPT_PROXY_SSL_CIPHER_LIST,
-                        config->proxy_cipher_list);
-
         /* new in libcurl 7.9.2: */
         if(config->disable_epsv)
           /* disable it */
@@ -1216,6 +1177,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
           result = res_setopt_str(curl, CURLOPT_SSLENGINE, config->engine);
           if(result)
             goto show_error;
+          my_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1L);
         }
 
         /* new in curl 7.10.7, extended in 7.19.4. Modified to use
@@ -1363,15 +1325,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
           if(config->tls_authtype)
             my_setopt_str(curl, CURLOPT_TLSAUTH_TYPE,
                           config->tls_authtype);
-          if(config->proxy_tls_username)
-            my_setopt_str(curl, CURLOPT_PROXY_TLSAUTH_USERNAME,
-                          config->proxy_tls_username);
-          if(config->proxy_tls_password)
-            my_setopt_str(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD,
-                          config->proxy_tls_password);
-          if(config->proxy_tls_authtype)
-            my_setopt_str(curl, CURLOPT_PROXY_TLSAUTH_TYPE,
-                          config->proxy_tls_authtype);
         }
 
         /* new in 7.22.0 */
@@ -1387,10 +1340,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
             my_setopt_bitmask(curl, CURLOPT_SSL_OPTIONS, mask);
         }
 
-        if(config->proxy_ssl_allow_beast)
-          my_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS,
-                    (long)CURLSSLOPT_ALLOW_BEAST);
-
         if(config->mail_auth)
           my_setopt_str(curl, CURLOPT_MAIL_AUTH, config->mail_auth);
 
@@ -1406,17 +1355,11 @@ static CURLcode operate_do(struct GlobalConfig *global,
           my_setopt(curl, CURLOPT_SSL_ENABLE_ALPN, 0L);
         }
 
-        /* new in 7.40.0, abstract support added in 7.53.0 */
-        if(config->unix_socket_path) {
-          if(config->abstract_unix_socket) {
-            my_setopt_str(curl, CURLOPT_ABSTRACT_UNIX_SOCKET,
-                          config->unix_socket_path);
-          }
-          else {
-            my_setopt_str(curl, CURLOPT_UNIX_SOCKET_PATH,
-                          config->unix_socket_path);
-          }
-        }
+        /* new in 7.40.0 */
+        if(config->unix_socket_path)
+          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);
@@ -1498,7 +1441,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
             enum {
               RETRY_NO,
               RETRY_TIMEOUT,
-              RETRY_CONNREFUSED,
               RETRY_HTTP,
               RETRY_FTP,
               RETRY_LAST /* not used */
@@ -1510,13 +1452,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
                (CURLE_FTP_ACCEPT_TIMEOUT == result))
               /* retry timeout always */
               retry = RETRY_TIMEOUT;
-            else if(config->retry_connrefused &&
-                    (CURLE_COULDNT_CONNECT == result)) {
-              long oserrno;
-              curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &oserrno);
-              if(ECONNREFUSED == oserrno)
-                retry = RETRY_CONNREFUSED;
-            }
             else if((CURLE_OK == result) ||
                     (config->failonerror &&
                      (CURLE_HTTP_RETURNED_ERROR == result))) {
@@ -1564,11 +1499,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
 
             if(retry) {
               static const char * const m[]={
-                NULL,
-                "timeout",
-                "connection refused",
-                "HTTP error",
-                "FTP error"
+                NULL, "timeout", "HTTP error", "FTP error"
               };
 
               warnf(config->global, "Transient problem: %s "
@@ -1628,14 +1559,14 @@ static CURLcode operate_do(struct GlobalConfig *global,
               char *effective_url = NULL;
               curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url);
               if(effective_url &&
-                 curl_strnequal(effective_url, "http", 4)) {
+                 curlx_strnequal(effective_url, "http", 4)) {
                 /* This was HTTP(S) */
                 curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
                 if(response != 200 && response != 206) {
                   metalink_next_res = 1;
                   fprintf(global->errors,
                           "Metalink: fetching (%s) from (%s) FAILED "
-                          "(HTTP status code %ld)\n",
+                          "(HTTP status code %d)\n",
                           mlfile->filename, this_url, response);
                 }
               }
@@ -1691,13 +1622,8 @@ static CURLcode operate_do(struct GlobalConfig *global,
           fprintf(global->errors, "curl: (%d) %s\n", result, (errorbuffer[0]) ?
                   errorbuffer : curl_easy_strerror(result));
           if(result == CURLE_SSL_CACERT)
-            fprintf(global->errors, "%s%s%s",
-                    CURL_CA_CERT_ERRORMSG1, CURL_CA_CERT_ERRORMSG2,
-                    ((config->proxy &&
-                      curl_strnequal(config->proxy, "https://", 8)) ?
-                     "HTTPS proxy has similar options --proxy-cacert "
-                     "and --proxy-insecure.\n" :
-                     ""));
+            fprintf(global->errors, "%s%s",
+                    CURL_CA_CERT_ERRORMSG1, CURL_CA_CERT_ERRORMSG2);
         }
 
         /* Fall through comment to 'quit_urls' label */
@@ -1751,65 +1677,20 @@ static CURLcode operate_do(struct GlobalConfig *global,
         }
 #endif
 
-#if defined(HAVE_UTIME) || \
-    (defined(WIN32) && (CURL_SIZEOF_CURL_OFF_T >= 8))
+#ifdef HAVE_UTIME
         /* File time can only be set _after_ the file has been closed */
         if(!result && config->remote_time && outs.s_isreg && outs.filename) {
           /* Ask libcurl if we got a remote file time */
           long filetime = -1;
           curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
           if(filetime >= 0) {
-/* Windows utime() may attempt to adjust our unix gmt 'filetime' by a daylight
-   saving time offset and since it's GMT that is bad behavior. When we have
-   access to a 64-bit type we can bypass utime and set the times directly. */
-#if defined(WIN32) && (CURL_SIZEOF_CURL_OFF_T >= 8)
-            /* 910670515199 is the maximum unix filetime that can be used as a
-               Windows FILETIME without overflow: 30827-12-31T23:59:59. */
-            if(filetime <= CURL_OFF_T_C(910670515199)) {
-              HANDLE hfile = CreateFileA(outs.filename, FILE_WRITE_ATTRIBUTES,
-                                         (FILE_SHARE_READ | FILE_SHARE_WRITE |
-                                          FILE_SHARE_DELETE),
-                                         NULL, OPEN_EXISTING, 0, NULL);
-              if(hfile != INVALID_HANDLE_VALUE) {
-                curl_off_t converted = ((curl_off_t)filetime * 10000000) +
-                                       CURL_OFF_T_C(116444736000000000);
-                FILETIME ft;
-                ft.dwLowDateTime = (DWORD)(converted & 0xFFFFFFFF);
-                ft.dwHighDateTime = (DWORD)(converted >> 32);
-                if(!SetFileTime(hfile, NULL, &ft, &ft)) {
-                  fprintf(config->global->errors,
-                          "Failed to set filetime %ld on outfile: "
-                          "SetFileTime failed: GetLastError %u\n",
-                          filetime, GetLastError());
-                }
-                CloseHandle(hfile);
-              }
-              else {
-                fprintf(config->global->errors,
-                        "Failed to set filetime %ld on outfile: "
-                        "CreateFile failed: GetLastError %u\n",
-                        filetime, GetLastError());
-              }
-            }
-            else {
-              fprintf(config->global->errors,
-                      "Failed to set filetime %ld on outfile: overflow\n",
-                      filetime);
-            }
-#elif defined(HAVE_UTIME)
             struct utimbuf times;
             times.actime = (time_t)filetime;
             times.modtime = (time_t)filetime;
-            if(utime(outs.filename, &times)) {
-              fprintf(config->global->errors,
-                      "Failed to set filetime %ld on outfile: errno %d\n",
-                      filetime, errno);
-            }
-#endif
+            utime(outs.filename, &times); /* set the time we got */
           }
         }
-#endif /* defined(HAVE_UTIME) || \
-          (defined(WIN32) && (CURL_SIZEOF_CURL_OFF_T >= 8)) */
+#endif
 
 #ifdef USE_METALINK
         if(!metalink && config->use_metalink && result == CURLE_OK) {
@@ -1912,9 +1793,9 @@ static CURLcode operate_do(struct GlobalConfig *global,
     urlnode->flags = 0;
 
     /*
-    ** Bail out upon critical errors or --fail-early
+    ** Bail out upon critical errors
     */
-    if(is_fatal_error(result) || (result && global->fail_early))
+    if(is_fatal_error(result))
       goto quit_curl;
 
   } /* for-loop through all URLs */
@@ -1961,8 +1842,8 @@ CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[])
 
   /* Parse .curlrc if necessary */
   if((argc == 1) ||
-     (!curl_strequal(argv[1], "-q") &&
-      !curl_strequal(argv[1], "--disable"))) {
+     (!curlx_strequal(argv[1], "-q") &&
+      !curlx_strequal(argv[1], "--disable"))) {
     parseconfig(NULL, config); /* ignore possible failure */
 
     /* If we had no arguments then make sure a url was specified in .curlrc */
@@ -2023,9 +1904,6 @@ CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[])
           result = operate_do(config, config->current);
 
           config->current = config->current->next;
-
-          if(config->current && config->current->easy)
-            curl_easy_reset(config->current->easy);
         }
 
 #ifndef CURL_DISABLE_LIBCURL_OPTION
index 21b5ffe..b43dc95 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
@@ -63,8 +63,8 @@ bool output_expected(const char *url, const char *uploadfile)
 
 bool stdin_upload(const char *uploadfile)
 {
-  return (!strcmp(uploadfile, "-") ||
-          !strcmp(uploadfile, ".")) ? TRUE : FALSE;
+  return (curlx_strequal(uploadfile, "-") ||
+          curlx_strequal(uploadfile, ".")) ? TRUE : FALSE;
 }
 
 /*
index 257e5c6..f2e68da 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-#include "strcase.h"
+#include "rawstr.h"
 
 #define ENABLE_CURLX_PRINTF
 /* use our own printf() functions */
@@ -66,15 +66,12 @@ ParameterError file2string(char **bufp, FILE *file)
 
   if(file) {
     while(fgets(buffer, sizeof(buffer), file)) {
-      ptr = strchr(buffer, '\r');
-      if(ptr)
+      if((ptr = strchr(buffer, '\r')) != NULL)
         *ptr = '\0';
-      ptr = strchr(buffer, '\n');
-      if(ptr)
+      if((ptr = strchr(buffer, '\n')) != NULL)
         *ptr = '\0';
       buflen = strlen(buffer);
-      ptr = realloc(string, stringlen+buflen+1);
-      if(!ptr) {
+      if((ptr = realloc(string, stringlen+buflen+1)) == NULL) {
         Curl_safefree(string);
         return PARAM_NO_MEM;
       }
@@ -105,8 +102,7 @@ ParameterError file2memory(char **bufp, size_t *size, FILE *file)
         }
         alloc *= 2;
         /* allocate an extra char, reserved space, for null termination */
-        newbuf = realloc(buffer, alloc+1);
-        if(!newbuf) {
+        if((newbuf = realloc(buffer, alloc+1)) == NULL) {
           Curl_safefree(buffer);
           return PARAM_NO_MEM;
         }
@@ -119,8 +115,7 @@ ParameterError file2memory(char **bufp, size_t *size, FILE *file)
     buffer[nused] = '\0';
     /* free trailing slack space, if possible */
     if(alloc != nused) {
-      newbuf = realloc(buffer, nused+1);
-      if(!newbuf) {
+      if((newbuf = realloc(buffer, nused+1)) == NULL) {
         Curl_safefree(buffer);
         return PARAM_NO_MEM;
       }
@@ -289,8 +284,6 @@ long proto2num(struct OperationConfig *config, long *val, const char *str)
   if(!buffer)
     return 1;
 
-  /* Allow strtok() here since this isn't used threaded */
-  /* !checksrc! disable BANNEDFUNC 2 */
   for(token = strtok(buffer, sep);
       token;
       token = strtok(NULL, sep)) {
@@ -317,8 +310,8 @@ long proto2num(struct OperationConfig *config, long *val, const char *str)
     }
 
     for(pp=protos; pp->name; pp++) {
-      if(curl_strequal(token, pp->name)) {
-        switch(action) {
+      if(curlx_raw_equal(token, pp->name)) {
+        switch (action) {
         case deny:
           *val &= ~(pp->bit);
           break;
@@ -360,7 +353,7 @@ int check_protocol(const char *str)
   if(!str)
     return PARAM_REQUIRES_PARAMETER;
   for(pp = curlinfo->protocols; *pp; pp++) {
-    if(curl_strequal(*pp, str))
+    if(curlx_raw_equal(*pp, str))
       return PARAM_OK;
   }
   return PARAM_LIBCURL_UNSUPPORTED_PROTOCOL;
@@ -471,11 +464,11 @@ ParameterError add2list(struct curl_slist **list, const char *ptr)
 
 int ftpfilemethod(struct OperationConfig *config, const char *str)
 {
-  if(curl_strequal("singlecwd", str))
+  if(curlx_raw_equal("singlecwd", str))
     return CURLFTPMETHOD_SINGLECWD;
-  if(curl_strequal("nocwd", str))
+  if(curlx_raw_equal("nocwd", str))
     return CURLFTPMETHOD_NOCWD;
-  if(curl_strequal("multicwd", str))
+  if(curlx_raw_equal("multicwd", str))
     return CURLFTPMETHOD_MULTICWD;
 
   warnf(config->global, "unrecognized ftp file method '%s', using default\n",
@@ -486,9 +479,9 @@ int ftpfilemethod(struct OperationConfig *config, const char *str)
 
 int ftpcccmethod(struct OperationConfig *config, const char *str)
 {
-  if(curl_strequal("passive", str))
+  if(curlx_raw_equal("passive", str))
     return CURLFTPSSL_CCC_PASSIVE;
-  if(curl_strequal("active", str))
+  if(curlx_raw_equal("active", str))
     return CURLFTPSSL_CCC_ACTIVE;
 
   warnf(config->global, "unrecognized ftp CCC method '%s', using default\n",
@@ -499,11 +492,11 @@ int ftpcccmethod(struct OperationConfig *config, const char *str)
 
 long delegation(struct OperationConfig *config, char *str)
 {
-  if(curl_strequal("none", str))
+  if(curlx_raw_equal("none", str))
     return CURLGSSAPI_DELEGATION_NONE;
-  if(curl_strequal("policy", str))
+  if(curlx_raw_equal("policy", str))
     return CURLGSSAPI_DELEGATION_POLICY_FLAG;
-  if(curl_strequal("always", str))
+  if(curlx_raw_equal("always", str))
     return CURLGSSAPI_DELEGATION_FLAG;
 
   warnf(config->global, "unrecognized delegation method '%s', using none\n",
index 7cf11d8..d9454c2 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -209,10 +209,14 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
                   filename, lineno, option);
           }
         }
-        if(!*param)
-          /* do this so getparameter can check for required parameters.
-             Otherwise it always thinks there's a parameter. */
-          param = NULL;
+      }
+
+      if(!*param) {
+        /* do this so getparameter can check for required parameters.
+           Otherwise it always thinks there's a parameter. */
+        if(alloced_param)
+          Curl_safefree(param);
+        param = NULL;
       }
 
 #ifdef DEBUG_CONFIG
index ad3d307..c854225 100644 (file)
 const NameValue setopt_nv_CURLPROXY[] = {
   NV(CURLPROXY_HTTP),
   NV(CURLPROXY_HTTP_1_0),
-  NV(CURLPROXY_HTTPS),
-  NV(CURLPROXY_SOCKS4),
-  NV(CURLPROXY_SOCKS5),
-  NV(CURLPROXY_SOCKS4A),
-  NV(CURLPROXY_SOCKS5_HOSTNAME),
-  NVEND,
-};
-
-const NameValue setopt_nv_CURL_SOCKS_PROXY[] = {
   NV(CURLPROXY_SOCKS4),
   NV(CURLPROXY_SOCKS5),
   NV(CURLPROXY_SOCKS4A),
@@ -92,7 +83,6 @@ const NameValue setopt_nv_CURL_SSLVERSION[] = {
   NV(CURL_SSLVERSION_TLSv1_0),
   NV(CURL_SSLVERSION_TLSv1_1),
   NV(CURL_SSLVERSION_TLSv1_2),
-  NV(CURL_SSLVERSION_TLSv1_3),
   NVEND,
 };
 
@@ -168,8 +158,6 @@ static const NameValue setopt_nv_CURLNONZERODEFAULTS[] = {
   NV1(CURLOPT_SSL_ENABLE_NPN, 1),
   NV1(CURLOPT_SSL_ENABLE_ALPN, 1),
   NV1(CURLOPT_TCP_NODELAY, 1),
-  NV1(CURLOPT_PROXY_SSL_VERIFYPEER, 1),
-  NV1(CURLOPT_PROXY_SSL_VERIFYHOST, 1),
   NVEND
 };
 
index c27541b..7cd3875 100644 (file)
@@ -47,7 +47,6 @@ typedef struct {
 } NameValueUnsigned;
 
 extern const NameValue setopt_nv_CURLPROXY[];
-extern const NameValue setopt_nv_CURL_SOCKS_PROXY[];
 extern const NameValue setopt_nv_CURL_HTTP_VERSION[];
 extern const NameValue setopt_nv_CURL_SSLVERSION[];
 extern const NameValue setopt_nv_CURL_TIMECOND[];
@@ -62,7 +61,6 @@ extern const NameValueUnsigned setopt_nv_CURLAUTH[];
 #define setopt_nv_CURLOPT_HTTP_VERSION setopt_nv_CURL_HTTP_VERSION
 #define setopt_nv_CURLOPT_HTTPAUTH setopt_nv_CURLAUTH
 #define setopt_nv_CURLOPT_SSLVERSION setopt_nv_CURL_SSLVERSION
-#define setopt_nv_CURLOPT_PROXY_SSLVERSION setopt_nv_CURL_SSLVERSION
 #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
index d002f27..a357b8b 100644 (file)
@@ -44,7 +44,7 @@ static CURLcode glob_fixed(URLGlob *glob, char *fixed, size_t len)
   pat->content.Set.ptr_s = 0;
   pat->globindex = -1;
 
-  pat->content.Set.elements = malloc(sizeof(char *));
+  pat->content.Set.elements = malloc(sizeof(char*));
 
   if(!pat->content.Set.elements)
     return GLOBERROR("out of memory", 0, CURLE_OUT_OF_MEMORY);
@@ -118,14 +118,14 @@ static CURLcode glob_set(URLGlob *glob, char **patternp,
       *buf = '\0';
       if(pat->content.Set.elements) {
         char **new_arr = realloc(pat->content.Set.elements,
-                                 (pat->content.Set.size + 1) * sizeof(char *));
+                                 (pat->content.Set.size + 1) * sizeof(char*));
         if(!new_arr)
           return GLOBERROR("out of memory", 0, CURLE_OUT_OF_MEMORY);
 
         pat->content.Set.elements = new_arr;
       }
       else
-        pat->content.Set.elements = malloc(sizeof(char *));
+        pat->content.Set.elements = malloc(sizeof(char*));
 
       if(!pat->content.Set.elements)
         return GLOBERROR("out of memory", 0, CURLE_OUT_OF_MEMORY);
@@ -188,48 +188,44 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
     /* character range detected */
     char min_c;
     char max_c;
-    char end_c;
-    unsigned long step = 1;
+    int step=1;
 
     pat->type = UPTCharRange;
 
-    rc = sscanf(pattern, "%c-%c%c", &min_c, &max_c, &end_c);
+    rc = sscanf(pattern, "%c-%c", &min_c, &max_c);
 
-    if(rc == 3) {
-      if(end_c == ':') {
-        char *endp;
-        errno = 0;
-        step = strtoul(&pattern[4], &endp, 10);
-        if(errno || &pattern[4] == endp || *endp != ']')
-          step = 0;
-        else
-          pattern = endp+1;
+    if((rc == 2) && (pattern[3] == ':')) {
+      char *endp;
+      unsigned long lstep;
+      errno = 0;
+      lstep = strtoul(&pattern[4], &endp, 10);
+      if(errno || (*endp != ']'))
+        step = -1;
+      else {
+        pattern = endp+1;
+        step = (int)lstep;
+        if(step > (max_c - min_c))
+          step = -1;
       }
-      else if(end_c != ']')
-        /* then this is wrong */
-        rc = 0;
-      else
-        /* end_c == ']' */
-        pattern += 4;
     }
+    else
+      pattern += 4;
 
     *posp += (pattern - *patternp);
 
-    if(rc != 3 || !step || step > (unsigned)INT_MAX ||
-       (min_c == max_c && step != 1) ||
-       (min_c != max_c && (min_c > max_c || step > (unsigned)(max_c - min_c) ||
-                           (max_c - min_c) > ('z' - 'a'))))
+    if((rc != 2) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a')) ||
+       (step <= 0) )
       /* the pattern is not well-formed */
       return GLOBERROR("bad range", *posp, CURLE_URL_MALFORMAT);
 
     /* if there was a ":[num]" thing, use that as step or else use 1 */
-    pat->content.CharRange.step = (int)step;
+    pat->content.CharRange.step = step;
     pat->content.CharRange.ptr_c = pat->content.CharRange.min_c = min_c;
     pat->content.CharRange.max_c = max_c;
 
-    if(multiply(amount, ((pat->content.CharRange.max_c -
+    if(multiply(amount, (pat->content.CharRange.max_c -
                           pat->content.CharRange.min_c) /
-                         pat->content.CharRange.step + 1)))
+                         pat->content.CharRange.step + 1) )
       return GLOBERROR("range overflow", *posp, CURLE_URL_MALFORMAT);
   }
   else if(ISDIGIT(*pattern)) {
@@ -261,12 +257,6 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
         endp = NULL;
       else {
         pattern = endp+1;
-        while(*pattern && ISBLANK(*pattern))
-          pattern++;
-        if(!ISDIGIT(*pattern)) {
-          endp = NULL;
-          goto fail;
-        }
         errno = 0;
         max_n = strtoul(pattern, &endp, 10);
         if(errno || (*endp == ':')) {
@@ -287,12 +277,9 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
       }
     }
 
-    fail:
     *posp += (pattern - *patternp);
 
-    if(!endp || !step_n ||
-       (min_n == max_n && step_n != 1) ||
-       (min_n != max_n && (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);
 
@@ -302,9 +289,9 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
     pat->content.NumRange.max_n = max_n;
     pat->content.NumRange.step = step_n;
 
-    if(multiply(amount, ((pat->content.NumRange.max_n -
-                          pat->content.NumRange.min_n) /
-                         pat->content.NumRange.step + 1)))
+    if(multiply(amount, (pat->content.NumRange.max_n -
+                         pat->content.NumRange.min_n) /
+                        pat->content.NumRange.step + 1) )
       return GLOBERROR("range overflow", *posp, CURLE_URL_MALFORMAT);
   }
   else
@@ -420,7 +407,7 @@ static CURLcode glob_parse(URLGlob *glob, char *pattern,
   return res;
 }
 
-CURLcode glob_url(URLGlob **glob, char *url, unsigned long *urlnum,
+CURLcode glob_url(URLGlob** glob, char* url, unsigned long *urlnum,
                   FILE *error)
 {
   /*
@@ -437,7 +424,6 @@ CURLcode glob_url(URLGlob **glob, char *url, unsigned long *urlnum,
   glob_buffer = malloc(strlen(url) + 1);
   if(!glob_buffer)
     return CURLE_OUT_OF_MEMORY;
-  glob_buffer[0]=0;
 
   glob_expand = calloc(1, sizeof(URLGlob));
   if(!glob_expand) {
@@ -515,7 +501,7 @@ CURLcode glob_next_url(char **globbed, URLGlob *glob)
     for(i = 0; carry && (i < glob->size); i++) {
       carry = FALSE;
       pat = &glob->pattern[glob->size - 1 - i];
-      switch(pat->type) {
+      switch (pat->type) {
       case UPTSet:
         if((pat->content.Set.elements) &&
            (++pat->content.Set.ptr_s == pat->content.Set.size)) {
@@ -555,25 +541,20 @@ CURLcode glob_next_url(char **globbed, URLGlob *glob)
     switch(pat->type) {
     case UPTSet:
       if(pat->content.Set.elements) {
+        len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
         snprintf(buf, buflen, "%s",
                  pat->content.Set.elements[pat->content.Set.ptr_s]);
-        len = strlen(buf);
         buf += len;
         buflen -= len;
       }
       break;
     case UPTCharRange:
-      if(buflen) {
-        *buf++ = pat->content.CharRange.ptr_c;
-        *buf = '\0';
-        buflen--;
-      }
+      *buf++ = pat->content.CharRange.ptr_c;
       break;
     case UPTNumRange:
-      snprintf(buf, buflen, "%0*ld",
-               pat->content.NumRange.padlength,
-               pat->content.NumRange.ptr_n);
-      len = strlen(buf);
+      len = snprintf(buf, buflen, "%0*ld",
+                     pat->content.NumRange.padlength,
+                     pat->content.NumRange.ptr_n);
       buf += len;
       buflen -= len;
       break;
@@ -582,6 +563,7 @@ CURLcode glob_next_url(char **globbed, URLGlob *glob)
       return CURLE_FAILED_INIT;
     }
   }
+  *buf = '\0';
 
   *globbed = strdup(glob->glob_buffer);
   if(!*globbed)
@@ -630,7 +612,7 @@ CURLcode glob_match_url(char **result, char *filename, URLGlob *glob)
       }
 
       if(pat) {
-        switch(pat->type) {
+        switch (pat->type) {
         case UPTSet:
           if(pat->content.Set.elements) {
             appendthis = pat->content.Set.elements[pat->content.Set.ptr_s];
@@ -645,7 +627,7 @@ CURLcode glob_match_url(char **result, char *filename, URLGlob *glob)
           appendlen = 1;
           break;
         case UPTNumRange:
-          snprintf(numbuf, sizeof(numbuf), "%0*lu",
+          snprintf(numbuf, sizeof(numbuf), "%0*d",
                    pat->content.NumRange.padlength,
                    pat->content.NumRange.ptr_n);
           appendthis = numbuf;
index 82d9d46..c3be948 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -68,9 +68,9 @@ typedef struct {
   size_t pos;        /* column position of error or 0 */
 } URLGlob;
 
-CURLcode glob_url(URLGlob**, char *, unsigned long *, FILE *);
+CURLcode glob_url(URLGlob**, char*, unsigned long *, FILE *);
 CURLcode glob_next_url(char **, URLGlob *);
-CURLcode glob_match_url(char **, char *, URLGlob *);
+CURLcode glob_match_url(char **, char*, URLGlob *);
 void glob_cleanup(URLGlob* glob);
 
 #endif /* HEADER_CURL_TOOL_URLGLOB_H */
index 1dddc2a..8bb7f33 100644 (file)
@@ -25,7 +25,7 @@
 
 #define CURL_NAME "curl"
 #define CURL_COPYRIGHT LIBCURL_COPYRIGHT
-#define CURL_VERSION "7.53.1"
+#define CURL_VERSION "7.50.2"
 #define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
 #define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
 #define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
index 0bc075a..c1bfcbe 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -33,7 +33,7 @@
 
 static const struct
 {
-  const char *name;
+  const char * name;
   CURLINFO id;
   enum {
     writeenv_NONE,
@@ -59,7 +59,7 @@ static const struct
   {NULL, 0, writeenv_NONE}
  };
 
-static void internalSetEnv(const char *name, char *value)
+static void internalSetEnv(const char * name, char * value)
 {
   /* Add your OS-specific code here. */
 #ifdef __riscos__
@@ -78,7 +78,7 @@ void ourWriteEnv(CURL *curl)
   double doubleinfo;
 
   for(i=0; variables[i].name; i++) {
-    switch(variables[i].type) {
+    switch (variables[i].type) {
     case writeenv_STRING:
       if(curl_easy_getinfo(curl, variables[i].id, &string) == CURLE_OK)
         internalSetEnv(variables[i].name, string);
index 2fb7774..6e94afe 100644 (file)
@@ -52,14 +52,12 @@ typedef enum {
   VAR_FTP_ENTRY_PATH,
   VAR_REDIRECT_URL,
   VAR_SSL_VERIFY_RESULT,
-  VAR_PROXY_SSL_VERIFY_RESULT,
   VAR_EFFECTIVE_FILENAME,
   VAR_PRIMARY_IP,
   VAR_PRIMARY_PORT,
   VAR_LOCAL_IP,
   VAR_LOCAL_PORT,
   VAR_HTTP_VERSION,
-  VAR_SCHEME,
   VAR_NUM_OF_VARS /* must be the last */
 } replaceid;
 
@@ -93,14 +91,12 @@ static const struct variable replacements[]={
   {"ftp_entry_path", VAR_FTP_ENTRY_PATH},
   {"redirect_url", VAR_REDIRECT_URL},
   {"ssl_verify_result", VAR_SSL_VERIFY_RESULT},
-  {"proxy_ssl_verify_result", VAR_PROXY_SSL_VERIFY_RESULT},
   {"filename_effective", VAR_EFFECTIVE_FILENAME},
   {"remote_ip", VAR_PRIMARY_IP},
   {"remote_port", VAR_PRIMARY_PORT},
   {"local_ip", VAR_LOCAL_IP},
   {"local_port", VAR_LOCAL_PORT},
   {"http_version", VAR_HTTP_VERSION},
-  {"scheme", VAR_SCHEME},
   {NULL, VAR_NONE}
 };
 
@@ -124,14 +120,9 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
         char *end;
         char keepit;
         int i;
-        if('{' == ptr[1]) {
+        if(('{' == ptr[1]) && ((end = strchr(ptr, '}')) != NULL)) {
           bool match = FALSE;
-          end = strchr(ptr, '}');
           ptr += 2; /* pass the % and the { */
-          if(!end) {
-            fputs("%{", stream);
-            continue;
-          }
           keepit = *end;
           *end = 0; /* zero terminate */
           for(i = 0; replacements[i].name; i++) {
@@ -179,41 +170,41 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME,
                                      &doubleinfo))
-                  fprintf(stream, "%.6f", doubleinfo);
+                  fprintf(stream, "%.3f", doubleinfo);
                 break;
               case VAR_TOTAL_TIME:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &doubleinfo))
-                  fprintf(stream, "%.6f", doubleinfo);
+                  fprintf(stream, "%.3f", doubleinfo);
                 break;
               case VAR_NAMELOOKUP_TIME:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME,
                                      &doubleinfo))
-                  fprintf(stream, "%.6f", doubleinfo);
+                  fprintf(stream, "%.3f", doubleinfo);
                 break;
               case VAR_CONNECT_TIME:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &doubleinfo))
-                  fprintf(stream, "%.6f", doubleinfo);
+                  fprintf(stream, "%.3f", doubleinfo);
                 break;
               case VAR_APPCONNECT_TIME:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME,
                                      &doubleinfo))
-                  fprintf(stream, "%.6f", doubleinfo);
+                  fprintf(stream, "%.3f", doubleinfo);
                 break;
               case VAR_PRETRANSFER_TIME:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME,
                                      &doubleinfo))
-                  fprintf(stream, "%.6f", doubleinfo);
+                  fprintf(stream, "%.3f", doubleinfo);
                 break;
               case VAR_STARTTRANSFER_TIME:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME,
                                      &doubleinfo))
-                  fprintf(stream, "%.6f", doubleinfo);
+                  fprintf(stream, "%.3f", doubleinfo);
                 break;
               case VAR_SIZE_UPLOAD:
                 if(CURLE_OK ==
@@ -261,12 +252,6 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
                                      &longinfo))
                   fprintf(stream, "%ld", longinfo);
                 break;
-              case VAR_PROXY_SSL_VERIFY_RESULT:
-                if(CURLE_OK ==
-                   curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT,
-                                     &longinfo))
-                  fprintf(stream, "%ld", longinfo);
-                break;
               case VAR_EFFECTIVE_FILENAME:
                 if(outs->filename)
                   fprintf(stream, "%s", outs->filename);
@@ -300,7 +285,7 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
                    curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION,
                                      &longinfo)) {
                   const char *version = "0";
-                  switch(longinfo) {
+                  switch (longinfo) {
                   case CURL_HTTP_VERSION_1_0:
                     version = "1.0";
                     break;
@@ -315,12 +300,6 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
                   fprintf(stream, version);
                 }
                 break;
-              case VAR_SCHEME:
-                if(CURLE_OK ==
-                   curl_easy_getinfo(curl, CURLINFO_SCHEME,
-                                     &stringp))
-                  fprintf(stream, "%s", stringp);
-                break;
               default:
                 break;
               }
index d9dbf0e..585d017 100644 (file)
@@ -99,8 +99,3 @@ checksrc:
        cd libtest && $(MAKE) checksrc
        cd unit && $(MAKE) checksrc
        cd server && $(MAKE) checksrc
-
-if CURLDEBUG
-# for debug builds, we scan the sources on all regular make invokes
-all-local: checksrc
-endif
index 5f9ebcb..13d33ab 100644 (file)
@@ -450,9 +450,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu tests/Makefile
+         $(AUTOMAKE) --foreign tests/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -633,8 +633,7 @@ distdir: $(DISTFILES)
        done
 check-am: all-am
 check: check-recursive
-@CURLDEBUG_FALSE@all-local:
-all-am: Makefile all-local
+all-am: Makefile
 installdirs: installdirs-recursive
 installdirs-am:
 install: install-recursive
@@ -737,9 +736,9 @@ uninstall-am:
 
 .MAKE: $(am__recursive_targets) install-am install-strip
 
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \
-       check check-am clean clean-generic clean-libtool cscopelist-am \
-       ctags ctags-am distclean distclean-generic distclean-libtool \
+.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-dvi \
        install-dvi-am install-exec install-exec-am install-html \
@@ -790,9 +789,6 @@ checksrc:
        cd unit && $(MAKE) checksrc
        cd server && $(MAKE) checksrc
 
-# for debug builds, we scan the sources on all regular make invokes
-@CURLDEBUG_TRUE@all-local: checksrc
-
 # 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 8f52688..834be63 100644 (file)
@@ -4,7 +4,7 @@
                             | (__| |_| |  _ <| |___
                              \___|\___/|_| \_\_____|
 
-The curl Test Suite
+The cURL Test Suite
 
  1. Running
   1.1 Requires to run
@@ -164,7 +164,7 @@ The curl Test Suite
 
  1.8 Logs
 
-  All logs are generated in the log/ subdirectory (it is emptied first in the
+  All logs are generated in the logs/ subdirectory (it is emptied first in the
   runtests.pl script). Use runtests.pl -k to force it to keep the temporary
   files after the test run since successful runs will clean it up otherwise.
 
index 6bdbd45..286e763 100644 (file)
@@ -21,7 +21,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -409,7 +409,7 @@ test626 test627 test628 test629 test630 test631 test632 test633 test634 \
 test635 test636 test637 test638 test639 test640 test641 \
 \
 test700 test701 test702 test703 test704 test705 test706 test707 test708 \
-test709 test710 test711 test712 test713 test714 test715 \
+test709 test710 test711 test712 \
 \
 test800 test801 test802 test803 test804 test805 test806 test807 test808 \
 test809 test810 test811 test812 test813 test814 test815 test816 test817 \
@@ -449,17 +449,14 @@ test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
 test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
 test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
-test1144 test1145 test1146 \
+test1144 \
 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 test1241 test1242 test1243 \
-test1244 test1245 test1246 test1247 test1248 test1249 test1250 test1251 \
-test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 \
-\
-test1280 test1281 test1282 test1283 test1284 test1285 test1286 \
+test1244 \
 \
 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 \
 test1308 test1309 test1310 test1311 test1312 test1313 test1314 test1315 \
@@ -480,7 +477,7 @@ test1408 test1409 test1410 test1411 test1412 test1413 test1414 test1415 \
 test1416 test1417 test1418 test1419 test1420 test1421 test1422 test1423 \
 test1424 \
 test1428 test1429 test1430 test1431 test1432 test1433 test1434 test1435 \
-test1436 test1437 test1438 test1439 \
+test1436 test1437 \
 \
 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
 test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
@@ -488,10 +485,9 @@ test1516 test1517 \
 \
 test1520 \
 \
-test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \
-test1533 test1534 test1535 test1536 \
+test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
 \
-test1600 test1601 test1602 test1603 test1604 test1605 \
+test1600 test1601 test1602 test1603 test1604 \
 \
 test1700 test1701 test1702 \
 \
@@ -505,7 +501,7 @@ test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
 test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
 test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
 test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
-test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055
+test2048 test2049 test2050 test2051 test2052
 
 
 # TESTCASES are taken from Makefile.inc
@@ -522,9 +518,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/data/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \
        $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu tests/data/Makefile
+         $(AUTOMAKE) --foreign tests/data/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
index 8251ab9..6673bb7 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2017, 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
@@ -80,7 +80,7 @@ test626 test627 test628 test629 test630 test631 test632 test633 test634 \
 test635 test636 test637 test638 test639 test640 test641 \
 \
 test700 test701 test702 test703 test704 test705 test706 test707 test708 \
-test709 test710 test711 test712 test713 test714 test715 \
+test709 test710 test711 test712 \
 \
 test800 test801 test802 test803 test804 test805 test806 test807 test808 \
 test809 test810 test811 test812 test813 test814 test815 test816 test817 \
@@ -120,17 +120,14 @@ test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
 test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
 test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
-test1144 test1145 test1146 \
+test1144 \
 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 test1241 test1242 test1243 \
-test1244 test1245 test1246 test1247 test1248 test1249 test1250 test1251 \
-test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 \
-\
-test1280 test1281 test1282 test1283 test1284 test1285 test1286 \
+test1244 \
 \
 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 \
 test1308 test1309 test1310 test1311 test1312 test1313 test1314 test1315 \
@@ -151,7 +148,7 @@ test1408 test1409 test1410 test1411 test1412 test1413 test1414 test1415 \
 test1416 test1417 test1418 test1419 test1420 test1421 test1422 test1423 \
 test1424 \
 test1428 test1429 test1430 test1431 test1432 test1433 test1434 test1435 \
-test1436 test1437 test1438 test1439 \
+test1436 test1437 \
 \
 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
 test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
@@ -159,10 +156,9 @@ test1516 test1517 \
 \
 test1520 \
 \
-test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \
-test1533 test1534 test1535 test1536 \
+test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
 \
-test1600 test1601 test1602 test1603 test1604 test1605 \
+test1600 test1601 test1602 test1603 test1604 \
 \
 test1700 test1701 test1702 \
 \
@@ -176,4 +172,4 @@ test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
 test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
 test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
 test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
-test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055
+test2048 test2049 test2050 test2051 test2052
index 7c0e160..b882735 100644 (file)
@@ -8,7 +8,7 @@ HTTP GET
 
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index 2705730..3ac9e12 100644 (file)
@@ -27,7 +27,7 @@ HTTP/1.1 407 Authorization Required to proxy me my dear
 Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
 Content-Length: 28\r
 
-27 bytes and newline to ign
+And you should ignore this data.\r
 </connect1001>
 
 # This is supposed to be returned when the server gets the second
index 05172ec..20b434c 100644 (file)
@@ -32,8 +32,7 @@ http
 idn
 </features>
 <setenv>
-CHARSET=UTF-8
-LANG=en_US.UTF-8
+CHARSET=ISO8859-1
 </setenv>
  <name>
 HTTP over proxy with too long IDN host name
index 14fc7e5..e4aea65 100644 (file)
@@ -839,6 +839,7 @@ daniel
 HTTP/1.1 200 OK swsbounce\r
 Server: no
 \r
+Nice proxy auth sir!
 </connect1000>
 
 <datacheck>
index c481d39..a55a272 100644 (file)
@@ -844,6 +844,7 @@ daniel
 HTTP/1.1 200 OK swsbounce\r
 Server: no
 \r
+Nice proxy auth sir!
 </connect1000>
 
 <datacheck>
index 7512a2e..3b733a5 100644 (file)
@@ -15,25 +15,27 @@ HTTP proxy NTLM auth
 HTTP/1.1 200 We are fine and cool\r
 Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2\r
 Content-Length: 27\r
-\r
+
 This is all fine and dandy
 </data>
 
-# This is the CONNECT response
 <connect1001>
 HTTP/1.1 200 We are fine and cool\r
 Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2\r
-\r
+Content-Length: 27\r
+
+This is all fine and dandy
 </connect1001>
 
 <datacheck>
 HTTP/1.1 200 We are fine and cool\r
 Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2\r
-\r
+Content-Length: 27\r
+
 HTTP/1.1 200 We are fine and cool\r
 Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2\r
 Content-Length: 27\r
-\r
+
 This is all fine and dandy
 </datacheck>
 </reply>
index b68b5a2..c18ae46 100644 (file)
@@ -8,7 +8,7 @@ CURLOPT_URL
 </info>
 
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Content-Length: 6
index 94cfe91..90ffc41 100644 (file)
@@ -9,7 +9,7 @@ CURLOPT_URL
 </info>
 
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Content-Length: 6
index d9db12c..77b78f7 100644 (file)
@@ -9,7 +9,7 @@ CURLOPT_URL
 </info>
 
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Content-Length: 6
index f7c6a7a..960aade 100644 (file)
@@ -58,7 +58,7 @@ 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 CURLcurl_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,
index 72761c6..30f730c 100644 (file)
@@ -4,7 +4,6 @@
 source analysis
 symbols-in-versions
 documentation
---manual
 </keywords>
 </info>
 
@@ -20,7 +19,7 @@ Verify that all libcurl options have man pages
  </name>
 
 <command type="perl">
-%SRCDIR/manpage-scan.pl %SRCDIR/.. %PWD/..
+%SRCDIR/manpage-scan.pl %SRCDIR/..
 </command>
 </client>
 
index 3fb9093..3b4a1b4 100644 (file)
@@ -30,10 +30,6 @@ data to
 
 verify
 </data>
-# make sure no data is written
-<datacheck nonewline="yes">
-
-</datacheck>
 </reply>
 
 #
@@ -62,8 +58,5 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 </protocol>
-<errorcode>
-8
-</errorcode>
 </verify>
 </testcase>
diff --git a/tests/data/test1145 b/tests/data/test1145
deleted file mode 100644 (file)
index 287bebf..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<testcase>
-<info>
-<keywords>
-FILE
-</keywords>
-</info>
-
-<reply>
-</reply>
-
-# Client-side
-<client>
-<server>
-file
-</server>
-<name>
-file:// bad host
-</name>
-# This command should not succeed since we only accept
-# file:/// file://localhost/ file://127.0.0.1/
-<command>
-file://bad-host%PWD/log/test1145.txt
-</command>
-<file name="log/test1145.txt">
-foo
-   bar
-bar
-   foo
-moo
-</file>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-# CURLE_URL_MALFORMAT is error code 3
-<errorcode>
-3
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1146 b/tests/data/test1146
deleted file mode 100644 (file)
index 43f33b7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<testcase>
-<info>
-<keywords>
-FILE
---proto-default
-</keywords>
-</info>
-
-<reply>
-<data>
-foo
-   bar
-bar
-   foo
-moo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-file
-</server>
-<name>
---proto-default file
-</name>
-<command>
---proto-default file %PWD/log/test1146.txt
-</command>
-<file name="log/test1146.txt">
-foo
-   bar
-bar
-   foo
-moo
-</file>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<errorcode>
-0
-</errorcode>
-</verify>
-</testcase>
index 7e4a882..6d7bb7b 100644 (file)
@@ -8,7 +8,7 @@ HTTP GET
 
 #
 # Server-side
-<reply>
+<reply name="1205">
 <data>
 HTTP/1.1 200 OK
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index ca2f6c6..3c1d3d4 100644 (file)
@@ -23,12 +23,14 @@ mooooooo
 <connect>
 HTTP/1.1 200 welcome dear\r
 Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Content-Length: 0\r
 \r
 </connect>
 
 <datacheck>
 HTTP/1.1 200 welcome dear\r
 Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Content-Length: 0\r
 \r
 HTTP/1.1 200 OK\r
 Date: Thu, 09 Nov 2010 14:49:00 GMT\r
index 61998d1..16533a8 100644 (file)
@@ -9,7 +9,7 @@ dotdot removal
 
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Content-Length: 6
index d0659f1..ead4336 100644 (file)
@@ -11,7 +11,7 @@ dotdot removal
 
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Content-Length: 6
diff --git a/tests/data/test1245 b/tests/data/test1245
deleted file mode 100644 (file)
index 34d6549..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<testcase>
-<info>
-<keywords>
-FTP
-HTTP
-HTTP GET
---proto
---proto-redir
-followlocation
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data>
-HTTP/1.1 301 OK swsclose\r
-Date: Thu, 09 Nov 2010 14:49:00 GMT\r
-Server: test-server/fake\r
-Content-Length: 0\r
-Location: ftp://127.0.0.1:8992/1245\r
-Connection: close\r
-\r
-</data>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-ftp
-http
-</server>
-<name>
---proto deny must override --proto-redir allow
-</name>
-<command>
---location --proto +all,-ftp --proto-redir -all,+ftp http://%HOSTIP:%HTTPPORT/1245
-</command>
-# The data section doesn't do variable substitution, so we must assert this
-<precheck>
-perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%FTPPORT' ne '8992' );"
-</precheck>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /1245 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-# 1 - Protocol ftp not supported or disabled in libcurl
-<errorcode>
-1
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1246 b/tests/data/test1246
deleted file mode 100644 (file)
index 6565929..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<testcase>
-<info>
-# verify URL with hostname ending in pound sign
-<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>
-URL with '#' at end of host name instead of '/'
- </name>
- <command>
---proxy http://%HOSTIP:%HTTPPORT http://test.remote.haxx.se.1246:%HTTPPORT#@127.0.0.1/tricked.html no-scheme-url.com.1246:%HTTPPORT#@127.127.127.127/again.html
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET http://test.remote.haxx.se.1246:%HTTPPORT/ HTTP/1.1\r
-Host: test.remote.haxx.se.1246:%HTTPPORT\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-\r
-GET http://no-scheme-url.com.1246:%HTTPPORT/ HTTP/1.1\r
-Host: no-scheme-url.com.1246:%HTTPPORT\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1247 b/tests/data/test1247
deleted file mode 100644 (file)
index 48c5ccd..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
---fail-early
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data>
-</data>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-none
-</server>
- <name>
---fail-early
- </name>
- <command>
---fail-early h1234://%HOSTIP:%HTTPPORT/1247 http://%HOSTIP:%HTTPPORT/1247
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-# Protocol "h1234" not supported or disabled in libcurl
-<errorcode>
-1
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1248 b/tests/data/test1248
deleted file mode 100644 (file)
index 28e7a85..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Access a non-proxied host with using the combination of --proxy option and --noproxy option
-</name>
-<command>
-http://user:secret@%HOSTIP:%HTTPPORT/1248 --proxy http://dummy:%PROXYPORT/ --noproxy %HOSTIP --max-time 5
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /1248 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Basic dXNlcjpzZWNyZXQ=\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1249 b/tests/data/test1249
deleted file mode 100644 (file)
index ab56140..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-NO_PROXY
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<data>
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Server: test-server/fake
-Content-Length: 4
-Content-Type: text/html
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Access a non-proxied host with using the combination of --proxy option and NO_PROXY env var
-</name>
-<setenv>
-NO_PROXY=%HOSTIP
-</setenv>
-<command>
-http://user:secret@%HOSTIP:%HTTPPORT/1249 --proxy http://dummy:%PROXYPORT/ --max-time 5
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /1249 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Basic dXNlcjpzZWNyZXQ=\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1250 b/tests/data/test1250
deleted file mode 100644 (file)
index bf67b7f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-http_proxy
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Access a non-proxied host with using the combination of http_proxy env var and --noproxy option
-</name>
-<setenv>
-http_proxy=http://dummy:%PROXYPORT/
-</setenv>
-<command>
-http://user:secret@%HOSTIP:%HTTPPORT/1250 --noproxy %HOSTIP --max-time 5
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /1250 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Basic dXNlcjpzZWNyZXQ=\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1251 b/tests/data/test1251
deleted file mode 100644 (file)
index f37a685..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-http_proxy
-NO_PROXY
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<data>
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Server: test-server/fake
-Content-Length: 4
-Content-Type: text/html
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Access a non-proxied host with using the combination of http_proxy env var and NO_PROXY env var
-</name>
-<setenv>
-http_proxy=http://dummy:%PROXYPORT/
-NO_PROXY=%HOSTIP
-</setenv>
-<command>
-http://user:secret@%HOSTIP:%HTTPPORT/1251 --max-time 5
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /1251 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Basic dXNlcjpzZWNyZXQ=\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1252 b/tests/data/test1252
deleted file mode 100644 (file)
index cbaef48..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-NO_PROXY
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Under condition using --proxy, override NO_PROXY by --nproxy and access target URL directly
-</name>
-<setenv>
-NO_PROXY=example.com
-</setenv>
-<command>
-http://%HOSTIP:%HTTPPORT/1252 --proxy http://%HOSTIP:%HTTPPORT --noproxy %HOSTIP
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /1252 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1253 b/tests/data/test1253
deleted file mode 100644 (file)
index 7400299..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-NO_PROXY
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Under condition using --proxy, override NO_PROXY by --nproxy and access target URL through proxy
-</name>
-<setenv>
-NO_PROXY=example.com
-</setenv>
-<command>
-http://somewhere.example.com/1253 --proxy http://%HOSTIP:%HTTPPORT --noproxy %HOSTIP
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET http://somewhere.example.com/1253 HTTP/1.1\r
-Host: somewhere.example.com\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1254 b/tests/data/test1254
deleted file mode 100644 (file)
index 817b934..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-NO_PROXY
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Under condition using --proxy, override NO_PROXY by --nproxy and access target URL through proxy
-</name>
-<setenv>
-NO_PROXY=example.com
-</setenv>
-<command>
-http://somewhere.example.com/1254 --proxy http://%HOSTIP:%HTTPPORT --noproxy ""
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET http://somewhere.example.com/1254 HTTP/1.1\r
-Host: somewhere.example.com\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1255 b/tests/data/test1255
deleted file mode 100644 (file)
index d82310f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-NO_PROXY
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Under condition using http_proxy, override NO_PROXY by --nproxy and access target URL directly
-</name>
-<setenv>
-http_proxy=http://%HOSTIP:%HTTPPORT
-NO_PROXY=example.com
-</setenv>
-<command>
-http://%HOSTIP:%HTTPPORT/1255 --noproxy %HOSTIP
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /1255 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1256 b/tests/data/test1256
deleted file mode 100644 (file)
index 09c59f4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-NO_PROXY
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Under condition using http_proxy, override NO_PROXY by --nproxy and access target URL through proxy
-</name>
-<setenv>
-http_proxy=http://%HOSTIP:%HTTPPORT
-NO_PROXY=example.com
-</setenv>
-<command>
-http://somewhere.example.com/1256 --noproxy %HOSTIP
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET http://somewhere.example.com/1256 HTTP/1.1\r
-Host: somewhere.example.com\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1257 b/tests/data/test1257
deleted file mode 100644 (file)
index 6b7e937..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP proxy
-NO_PROXY
-noproxy
-</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
-
-foo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-Under condition using http_proxy, override NO_PROXY by --nproxy and access target URL through proxy
-</name>
-<setenv>
-http_proxy=http://%HOSTIP:%HTTPPORT
-NO_PROXY=example.com
-</setenv>
-<command>
-http://somewhere.example.com/1257 --noproxy ""
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET http://somewhere.example.com/1257 HTTP/1.1\r
-Host: somewhere.example.com\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1258 b/tests/data/test1258
deleted file mode 100644 (file)
index 6fa88e1..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-HTTP replaced headers
-cookies
-httponly
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<data>
-HTTP/1.0 200 OK swsclose\r
-Date: Thu, 09 Nov 2010 14:49:00 GMT\r
-Content-Type: text/html\r
-Set-Cookie: I-am=here; domain=localhost;
-\r
-boo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
- <name>
-HTTP, use cookies with localhost
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/1258 http://%HOSTIP:%HTTPPORT/we/want?hoge=fuga -b non-existing -H "Host: localhost"
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /we/want/1258 HTTP/1.1\r
-Host: localhost\r
-Accept: */*\r
-\r
-GET /we/want?hoge=fuga HTTP/1.1\r
-Host: localhost\r
-Accept: */*\r
-Cookie: I-am=here\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1259 b/tests/data/test1259
deleted file mode 100644 (file)
index bad4ee2..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<data>
-HTTP/1.0 200 OK swsclose\r
-Date: Thu, 09 Nov 2010 14:49:00 GMT\r
-Content-Type: text/html\r
-Set-Cookie: I-am=here; domain=localhost;
-\r
-boo
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
- <name>
-HTTP URL with semicolon in password
- </name>
- <command>
-"http://user:pass;word@%HOSTIP:%HTTPPORT/we/want/1259"
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /we/want/1259 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Basic dXNlcjpwYXNzO3dvcmQ=\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1280 b/tests/data/test1280
deleted file mode 100644 (file)
index 15c1e2f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<testcase>
-<info>
-<keywords>
-globbing
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data>
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 6
-Connection: close
-
-bytes
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
- <name>
-simple [a-d] globbing
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/[a-d]/1280
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /a/1280 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-GET /b/1280 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-GET /c/1280 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-GET /d/1280 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1281 b/tests/data/test1281
deleted file mode 100644 (file)
index 661b3c8..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<testcase>
-<info>
-<keywords>
-URL
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data>
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-none
-</server>
-<features>
-http
-</features>
- <name>
-reject non-numerical port number in URL
- </name>
- <command>
-http://%HOSTIP:alpha/beta/1281
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-# 3 == CURLE_URL_MALFORMAT
-<errorcode>
-3
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1282 b/tests/data/test1282
deleted file mode 100644 (file)
index 197356c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<testcase>
-<info>
-<keywords>
-FTP
-PASV
-RETR
-</keywords>
-</info>
-# Server-side
-<reply>
-<servercmd>
-REPLY PASS 633 XXXXXXXX\x00\x00XXXXXXXX
-</servercmd>
-</reply>
-
-# Client-side
-<client>
-<server>
-ftp
-</server>
-<features>
-GSS-API
-</features>
- <name>
-FTP with 633 response before gss initialized
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/1282
-</command>
-
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-USER anonymous\r
-PASS ftp@example.com\r
-</protocol>
-
-# 67 == CURLE_LOGIN_DENIED
-<errorcode>
-67
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1283 b/tests/data/test1283
deleted file mode 100644 (file)
index ac275e9..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-globbing
-[] range
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data nocheck="yes">
-HTTP/1.1 200 OK\r
-Date: Thu, 09 Nov 2010 14:49:00 GMT\r
-Content-Length: 6\r
-Connection: close\r
-\r
-bytes
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-<name>
-globbing range with same start and stop
-</name>
-<command option="no-output">
-http://%HOSTIP:%HTTPPORT/[a-a][1-1][b-b:1][2-2:1]/1283 -o "log/outfile1283_#1#2#3#4.dump"
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /a1b2/1283 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-<file name="log/outfile1283_a1b2.dump">
-HTTP/1.1 200 OK\r
-Date: Thu, 09 Nov 2010 14:49:00 GMT\r
-Content-Length: 6\r
-Connection: close\r
-\r
-bytes
-</file>
-</verify>
-</testcase>
diff --git a/tests/data/test1284 b/tests/data/test1284
deleted file mode 100644 (file)
index 8437a40..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP POST
-HTTP Digest auth
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<data>
-HTTP/1.1 401 authentication please swsbounce\r
-Server: Microsoft-IIS/6.0\r
-WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-</data>
-<data1000>
-HTTP/1.1 200 A OK\r
-Server: Microsoft-IIS/6.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 3\r
-\r
-ok
-</data1000>
-
-<datacheck>
-HTTP/1.1 401 authentication please swsbounce\r
-Server: Microsoft-IIS/6.0\r
-WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-HTTP/1.1 200 A OK\r
-Server: Microsoft-IIS/6.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 3\r
-\r
-ok
-</datacheck>
-
-</reply>
-
-# Client-side
-<client>
-#
-<server>
-http
-</server>
-<features>
-!SSPI
-crypto
-</features>
-<name>
-HTTP POST --digest with user-specified Content-Length header
-</name>
-# This test is to ensure 'Content-Length: 0' is sent while negotiating auth
-# even when there is a user-specified Content-Length header.
-# https://github.com/curl/curl/pull/1242
-<command>
--H "Content-Length: 11" -u auser:apasswd --digest -d "junkelijunk" http://%HOSTIP:%HTTPPORT/1284
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol nonewline="yes">
-POST /1284 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-Content-Length: 0\r
-Content-Type: application/x-www-form-urlencoded\r
-\r
-POST /1284 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1284", response="5763079608de439072861a59ac733515"\r
-Accept: */*\r
-Content-Length: 11\r
-Content-Type: application/x-www-form-urlencoded\r
-\r
-junkelijunk
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1285 b/tests/data/test1285
deleted file mode 100644 (file)
index 16c6623..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP PUT
-HTTP Digest auth
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<data>
-HTTP/1.1 401 authentication please swsbounce\r
-Server: Microsoft-IIS/6.0\r
-WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-</data>
-<data1000>
-HTTP/1.1 200 A OK\r
-Server: Microsoft-IIS/6.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 3\r
-\r
-ok
-</data1000>
-
-<datacheck>
-HTTP/1.1 401 authentication please swsbounce\r
-Server: Microsoft-IIS/6.0\r
-WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-HTTP/1.1 200 A OK\r
-Server: Microsoft-IIS/6.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 3\r
-\r
-ok
-</datacheck>
-
-</reply>
-
-# Client-side
-<client>
-#
-<server>
-http
-</server>
-<features>
-!SSPI
-crypto
-</features>
-<name>
-HTTP PUT --digest with user-specified Content-Length header
-</name>
-# This test is to ensure 'Content-Length: 0' is sent while negotiating auth
-# even when there is a user-specified Content-Length header.
-# https://github.com/curl/curl/pull/1242
-<command>
--H "Content-Length: 85" -u auser:apasswd --digest -T log/put1285 http://%HOSTIP:%HTTPPORT/1285
-</command>
-<file name="log/put1285">
-This is data we upload with PUT
-a second line
-line three
-four is the number of lines
-</file>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-PUT /1285 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-Content-Length: 0\r
-\r
-PUT /1285 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1285", response="dc185587d5e8391b347eef194c2a3cd6"\r
-Accept: */*\r
-Content-Length: 85\r
-Expect: 100-continue\r
-\r
-This is data we upload with PUT
-a second line
-line three
-four is the number of lines
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1286 b/tests/data/test1286
deleted file mode 100644 (file)
index 41782cb..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-HTTP Digest auth
-followlocation
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<data>
-HTTP/1.1 401 authentication please swsbounce\r
-Server: Microsoft-IIS/6.0\r
-WWW-Authenticate: Digest realm="testrealm", nonce="1053604144", qop="auth"\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-</data>
-<data1000>
-HTTP/1.1 302 Thanks for this, but we want to redir you!\r
-Server: Microsoft-IIS/5.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Location: /12860001\r
-Content-Length: 0\r
-\r
-</data1000>
-<data1001>
-HTTP/1.1 404 Not Found\r
-Server: Microsoft-IIS/5.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-</data1001>
-
-<datacheck>
-HTTP/1.1 401 authentication please swsbounce\r
-Server: Microsoft-IIS/6.0\r
-WWW-Authenticate: Digest realm="testrealm", nonce="1053604144", qop="auth"\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-HTTP/1.1 302 Thanks for this, but we want to redir you!\r
-Server: Microsoft-IIS/5.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Location: /12860001\r
-Content-Length: 0\r
-\r
-HTTP/1.1 404 Not Found\r
-Server: Microsoft-IIS/5.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 0\r
-\r
-</datacheck>
-
-</reply>
-
-# Client-side
-<client>
-#
-<server>
-http
-</server>
-<features>
-crypto
-</features>
-<name>
-HTTP GET --digest increasing nonce-count
-</name>
-# This test is to ensure the nonce-count (nc) increases
-# https://github.com/curl/curl/pull/1251
-<command>
--u auser:apasswd --location --digest http://%HOSTIP:%HTTPPORT/1286
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-# Reorder the fields in 'Authorization: Digest' header.
-# Since regular and SSPI digest auth header fields may not have the same order
-# or whitespace we homogenize so that both may be tested. Also:
-# - Remove the unique value from cnonce if in RFC format
-# - Remove the unique value from response if in RFC format
-# - Remove quotes from qop="auth" used by SSPI
-# The if statement is one line because runtests evaluates one line at a time.
-<strippart>
-if(s/^(Authorization: Digest )([^\r\n]+)(\r?\n)$//) { $_ = $1 . join(', ', map { s/^(cnonce=)"[a-zA-Z0-9+\/=]+"$/$1REMOVED/; s/^(response=)"[a-f0-9]{32}"$/$1REMOVED/; s/^qop="auth"$/qop=auth/; $_ } sort split(/, */, $2)) . $3; }
-</strippart>
-<protocol>
-GET /1286 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-GET /1286 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Digest cnonce=REMOVED, nc=00000001, nonce="1053604144", qop=auth, realm="testrealm", response=REMOVED, uri="/1286", username="auser"\r
-Accept: */*\r
-\r
-GET /12860001 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Authorization: Digest cnonce=REMOVED, nc=00000002, nonce="1053604144", qop=auth, realm="testrealm", response=REMOVED, uri="/12860001", username="auser"\r
-Accept: */*\r
-\r
-</protocol>
-</verify>
-</testcase>
index 8506c00..4b6fac8 100644 (file)
@@ -2,7 +2,7 @@
 <info>
 <keywords>
 unittest
-curl_strcasecompare
+curl_strequal
 </keywords>
 </info>
 
@@ -16,7 +16,7 @@ none
 unittest
 </features>
  <name>
-curl_strcasecompare unit tests
+curl_strequal unit tests
  </name>
 <tool>
 unit1301
index 838fe63..0ee7370 100644 (file)
@@ -77,7 +77,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index 1e2b4a7..602b09a 100644 (file)
@@ -96,7 +96,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index 07c3f49..0c2199e 100644 (file)
@@ -84,7 +84,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index 18167b4..98f238f 100644 (file)
@@ -79,7 +79,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index 6f53ca8..a159e49 100644 (file)
@@ -133,7 +133,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index 4e8d46d..f223954 100644 (file)
@@ -93,7 +93,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index 0ccb08a..c7e4cd4 100644 (file)
@@ -88,7 +88,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index 981e4e4..8f8cb2a 100644 (file)
@@ -68,7 +68,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
index a20f898..7a86806 100644 (file)
@@ -73,7 +73,6 @@ int main(int argc, char *argv[])
      them yourself.
 
   CURLOPT_WRITEDATA set to a objectpointer
-  CURLOPT_INTERLEAVEDATA set to a objectpointer
   CURLOPT_WRITEFUNCTION set to a functionpointer
   CURLOPT_READDATA set to a objectpointer
   CURLOPT_READFUNCTION set to a functionpointer
diff --git a/tests/data/test1438 b/tests/data/test1438
deleted file mode 100644 (file)
index 8aaedb7..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<testcase>
-<info>
-<keywords>
-protocol
---write-out
-</keywords>
-</info>
-# Server-side
-<reply>
-<data nocheck="yes">
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 9
-Connection: close
-Content-Type: text/plain
-
-testdata
-</data>
-
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-
-<name>
-Check if %{scheme} returns HTTP
-</name>
-<command>
-http://%HOSTIP:%HTTPPORT/1438 --write-out '%{scheme}'
-</command>
-</client>
-
-# Verify data
-<verify>
-<stdout nonewline="yes">
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 9
-Connection: close
-Content-Type: text/plain
-
-testdata
-HTTP
-</stdout>
-<protocol>
-GET /1438 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-<strip>
-^User-Agent:.*
-</strip>
-</verify>
-</testcase>
diff --git a/tests/data/test1439 b/tests/data/test1439
deleted file mode 100644 (file)
index cb906ad..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
---write-out
-</keywords>
-</info>
-# Server-side
-<reply>
-<data nocheck="yes">
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 9
-Connection: close
-Content-Type: text/plain
-
-testdata
-</data>
-
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-
-<name>
-Check if %{scheme} returns HTTP
-</name>
-<command>
-http://%HOSTIP:%HTTPPORT/1439 --write-out '%{http_version}'
-</command>
-</client>
-
-# Verify data
-<verify>
-<stdout nonewline="yes">
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 9
-Connection: close
-Content-Type: text/plain
-
-testdata
-1.1
-</stdout>
-<protocol>
-GET /1439 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-<strip>
-^User-Agent:.*
-</strip>
-</verify>
-</testcase>
index 595da5e..0560d5c 100644 (file)
@@ -14,6 +14,7 @@ CURLOPT_PROXYHEADER
 <reply>
 <connect>
 HTTP/1.1 200 OK\r
+Content-Length: 17\r
 \r
 </connect>
 <data>
@@ -25,6 +26,7 @@ ETag: "21025-dc7-39462498"
 </data>
 <datacheck>
 HTTP/1.1 200 OK\r
+Content-Length: 17\r
 \r
 HTTP/1.1 200 OK swsclose
 Date: Thu, 09 Nov 2010 14:49:00 GMT
diff --git a/tests/data/test1532 b/tests/data/test1532
deleted file mode 100644 (file)
index 5b2afc7..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data nocheck="yes">
-HTTP/1.0 200 OK swsclose\r
-Content-Length: 0\r
-\r
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-# tool is what to use instead of 'curl'
-<tool>
-lib1532
-</tool>
-<name>
-Test CURLINFO_RESPONSE_CODE
-</name>
-<command>
-http://%HOSTIP:%HTTPPORT/1532
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-GET /1532 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-<errorcode>
-0
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1533 b/tests/data/test1533
deleted file mode 100644 (file)
index 5651816..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP POST
-CURLOPT_KEEP_SENDING_ON_ERROR
-</keywords>
-</info>
-
-# Server-side
-<reply>
-<servercmd>
-auth_required
-</servercmd>
-<data nocheck="yes">
-HTTP/1.1 401 Authorization Required\r
-Date: Thu, 09 Nov 2010 14:49:00 GMT\r
-Server: test-server/fake\r
-Content-Length: 15\r
-
-Early Response
-</data>
-</reply>
-# Client-side
-<client>
-<server>
-http
-</server>
-<tool>
-lib1533
-</tool>
-<name>
-HTTP with CURLOPT_KEEP_SENDING_ON_ERROR and an early error response
-</name>
-<command>
-http://%HOSTIP:%HTTPPORT/1533
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-# TEST_ERR_SUCCESS is errorcode 120
-<verify>
-<errorcode>
-120
-</errorcode>
-<protocol nonewline="yes">
-POST /1533 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-Content-Length: 3\r
-Content-Type: application/x-www-form-urlencoded\r
-\r
-POST /1533 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-Content-Length: 3\r
-Content-Type: application/x-www-form-urlencoded\r
-\r
-POST /1533 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-Content-Length: 3\r
-Content-Type: application/x-www-form-urlencoded\r
-\r
-aaaPOST /1533 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-Content-Length: 3\r
-Content-Type: application/x-www-form-urlencoded\r
-\r
-aaa
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test1534 b/tests/data/test1534
deleted file mode 100644 (file)
index 5ebf57d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data nocheck="yes">
-HTTP/1.0 200 OK swsclose\r
-Last-Modified: Thu, 01 Jan 1970 00:00:30 GMT\r
-Content-Length: 0\r
-\r
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-# tool is what to use instead of 'curl'
-<tool>
-lib1534
-</tool>
-<name>
-CURLINFO_FILETIME init and reset
-</name>
-<command>
-http://%HOSTIP:%HTTPPORT/1534
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-GET /1534 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-<errorcode>
-0
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1535 b/tests/data/test1535
deleted file mode 100644 (file)
index 226190d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data nocheck="yes">
-HTTP/1.0 200 OK swsclose
-Last-Modified: Thu, 01 Jan 1970 00:00:30 GMT
-Content-Length: 0
-
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-# tool is what to use instead of 'curl'
-<tool>
-lib1535
-</tool>
-<name>
-Test CURLINFO_RESPONSE_CODE CURLINFO_PROTOCOL
-</name>
-<command>
-http://%HOSTIP:%HTTPPORT/1535
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-GET /1535 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-<errorcode>
-0
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1536 b/tests/data/test1536
deleted file mode 100644 (file)
index a6e5a66..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data nocheck="yes">
-HTTP/1.0 200 OK swsclose
-Last-Modified: Thu, 01 Jan 1970 00:00:30 GMT
-Content-Length: 0
-
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-http
-</server>
-# tool is what to use instead of 'curl'
-<tool>
-lib1536
-</tool>
-<name>
-Test CURLINFO_RESPONSE_CODE CURLINFO_SCHEME
-</name>
-<command>
-http://%HOSTIP:%HTTPPORT/1536
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-GET /1536 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-</protocol>
-<errorcode>
-0
-</errorcode>
-</verify>
-</testcase>
diff --git a/tests/data/test1605 b/tests/data/test1605
deleted file mode 100644 (file)
index 09ef669..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<testcase>
-<info>
-<keywords>
-unittest
-</keywords>
-</info>
-
-#
-# Client-side
-<client>
-<server>
-none
-</server>
-<features>
-unittest
-</features>
- <name>
-Test negative data lengths as input to libcurl functions
- </name>
-<tool>
-unit1605
-</tool>
-</client>
-
-</testcase>
index 6fc0ad2..ddfe1e9 100644 (file)
@@ -31,14 +31,13 @@ http
 idn
 </features>
 <setenv>
-CHARSET=UTF-8
-LANG=en_US.UTF-8
+CHARSET=ISO8859-1
 </setenv>
  <name>
 HTTP over proxy with IDN host name
  </name>
  <command>
-http://www.åäö.se/page/165 -x %HOSTIP:%HTTPPORT http://www.große.de/page/165
+http://www.åäö.se/page/165 -x %HOSTIP:%HTTPPORT
 </command>
 </client>
 
@@ -54,11 +53,6 @@ Host: www.xn--4cab6c.se
 Accept: */*\r
 Proxy-Connection: Keep-Alive\r
 \r
-GET http://www.xn--groe-xna.de/page/165 HTTP/1.1\r
-Host: www.xn--groe-xna.de\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-\r
 </protocol>
 </verify>
 </testcase>
index 0110184..96a6c14 100644 (file)
@@ -48,7 +48,7 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 Connection: Upgrade, HTTP2-Settings\r
 Upgrade: %H2CVER\r
-HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA\r
+HTTP2-Settings: AAMAAABkAAQAAP__\r
 \r
 </protocol>
 </verify>
index b827ab5..16ee12d 100644 (file)
@@ -58,7 +58,7 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 Connection: Upgrade, HTTP2-Settings\r
 Upgrade: %H2CVER\r
-HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA\r
+HTTP2-Settings: AAMAAABkAAQAAP__\r
 \r
 </protocol>
 # CURLE_HTTP2: Send failure: Broken pipe
index 72675b5..881ee03 100644 (file)
@@ -8,7 +8,7 @@ globbing
 </info>
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index 12fdbee..f708665 100644 (file)
@@ -5,7 +5,6 @@ HTTP
 HTTP GET
 HTTP Basic auth
 HTTP NTLM auth
-flaky
 </keywords>
 </info>
 # Server-side
index 15647d3..3190f80 100644 (file)
@@ -19,7 +19,7 @@ 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_WEIRD_SERVER_REPLY so we test for that return code.
+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
@@ -46,7 +46,7 @@ Set the default protocol to ftp for a schemeless URL
 #
 # Verify data after the test has been "shot"
 <verify>
-# CURLE_WEIRD_SERVER_REPLY is error code 8
+# CURLE_FTP_WEIRD_SERVER_REPLY is error code 8
 <errorcode>
 8
 </errorcode>
index 0f0eb52..133c14d 100644 (file)
@@ -42,7 +42,6 @@ idn
 </features>
 <setenv>
 CHARSET=UTF-8
-LANG=en_US.UTF-8
 </setenv>
  <name>
 Connection re-use with IDN host name
index f54a30a..4422978 100644 (file)
@@ -43,7 +43,6 @@ idn
 </features>
 <setenv>
 CHARSET=UTF-8
-LANG=en_US.UTF-8
 </setenv>
  <name>
 Connection re-use with IDN host name over HTTP proxy
index 787f584..eb2b1df 100644 (file)
@@ -26,7 +26,7 @@ https Server-localhost-sv.pem
 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/2048
+--insecure --cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost.nn-sv.pub.der https://localhost:%HTTPSPORT/2034
 </command>
 </client>
 
diff --git a/tests/data/test2053 b/tests/data/test2053
deleted file mode 100644 (file)
index 98e7845..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-CURLOPT_CONNECT_TO
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data>
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 3
-Content-Type: text/plain
-
-OK
-</data>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-http
-</server>
- <name>
-Connect to specific host with IP addresses
- </name>
-
- <command>
-http://10.0.0.1:8081/2053 --connect-to 10.0.0.1:8081:%HOSTIP:%HTTPPORT --next http://[fc00::1]:8082/2053 --connect-to [fc00::1]:8082:%HOSTIP:%HTTPPORT
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /2053 HTTP/1.1\r
-Host: 10.0.0.1:8081\r
-Accept: */*\r
-\r
-GET /2053 HTTP/1.1\r
-Host: [fc00::1]:8082\r
-Accept: */*\r
-\r
-</protocol>
-
-</verify>
-</testcase>
diff --git a/tests/data/test2054 b/tests/data/test2054
deleted file mode 100644 (file)
index 2a0b54e..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-CURLOPT_CONNECT_TO
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<data>
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 3
-Content-Type: text/plain
-
-OK
-</data>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-http
-</server>
- <name>
-Connect to specific host: use the first "connect-to" string that matches
- </name>
-
- <command>
-http://%HOSTIP:%HTTPPORT/2054 --connect-to foo::bar: --connect-to :123::456 --next http://www.example.com:%HTTPPORT/2054 --connect-to www.example.com::%HOSTIP: --connect-to www.example.com::foo: --next http://%HOSTIP:8083/2054 --connect-to :8083::%HTTPPORT --connect-to :8083::123 --next http://www.example.com:8084/2054 --connect-to www.example.com:8084:%HOSTIP:%HTTPPORT --connect-to www.example.com:8084:foo:123
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<protocol>
-GET /2054 HTTP/1.1\r
-Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-GET /2054 HTTP/1.1\r
-Host: www.example.com:%HTTPPORT\r
-Accept: */*\r
-\r
-GET /2054 HTTP/1.1\r
-Host: %HOSTIP:8083\r
-Accept: */*\r
-\r
-GET /2054 HTTP/1.1\r
-Host: www.example.com:8084\r
-Accept: */*\r
-\r
-</protocol>
-
-</verify>
-</testcase>
diff --git a/tests/data/test2055 b/tests/data/test2055
deleted file mode 100755 (executable)
index cca4494..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<testcase>
-<info>
-<keywords>
-HTTP
-HTTP GET
-HTTP CONNECT
-HTTP proxy
-proxytunnel
-CURLOPT_CONNECT_TO
-SOCKS5
-</keywords>
-</info>
-
-#
-# Server-side
-<reply>
-<connect>
-HTTP/1.1 200 Connection established
-
-</connect>
-
-<data>
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 3
-Content-Type: text/plain
-
-OK
-</data>
-
-<datacheck>
-HTTP/1.1 200 Connection established
-
-HTTP/1.1 200 OK
-Date: Thu, 09 Nov 2010 14:49:00 GMT
-Content-Length: 3
-Content-Type: text/plain
-
-OK
-</datacheck>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-http
-http-proxy
-socks5
-</server>
- <name>
-Connect to specific host via SOCKS proxy and HTTP proxy (switch to tunnel mode automatically)
- </name>
-
- <command>
-http://www.example.com.2055/2055 --connect-to ::connect.example.com.2055:%HTTPPORT -x %HOSTIP:%PROXYPORT --preproxy socks5://%HOSTIP:%SOCKSPORT
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<strip>
-^User-Agent:.*
-</strip>
-<proxy>
-CONNECT connect.example.com.2055:%HTTPPORT HTTP/1.1\r
-Host: connect.example.com.2055:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
-\r
-</proxy>
-<protocol>
-GET /2055 HTTP/1.1\r
-Host: www.example.com.2055\r
-Accept: */*\r
-\r
-</protocol>
-
-</verify>
-</testcase>
index 3aefac4..961eba1 100644 (file)
@@ -16,7 +16,6 @@ HTTP proxy NTLM auth
 <connect1001>
 HTTP/1.1 407 Authorization Required to proxy me my dear\r
 Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
-Content-Length: 33\r
 \r
 And you should ignore this data.
 </connect1001>
@@ -53,7 +52,6 @@ Nice proxy auth sir!
 <datacheck>
 HTTP/1.1 407 Authorization Required to proxy me my dear\r
 Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
-Content-Length: 33\r
 \r
 HTTP/1.1 200 Things are fine in proxy land\r
 Server: Microsoft-IIS/5.0\r
index a0de1fa..edbb6a6 100644 (file)
@@ -16,7 +16,6 @@ HTTP proxy NTLM auth
 <connect1001>
 HTTP/1.1 407 Authorization Required to proxy me my dear\r
 Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
-Content-Length: 33\r
 \r
 And you should ignore this data.
 </connect1001>
@@ -53,7 +52,6 @@ Nice proxy auth sir!
 <datacheck>
 HTTP/1.1 407 Authorization Required to proxy me my dear\r
 Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
-Content-Length: 33\r
 \r
 HTTP/1.1 200 Things are fine in proxy land\r
 Server: Microsoft-IIS/5.0\r
index a7c456c..1a162b8 100644 (file)
@@ -19,7 +19,7 @@ Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4
 Content-Length: 1033\r
 \r
 And you should ignore this data.
-QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
+QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQz
 </connect1001>
 
 # This is supposed to be returned when the server gets the second
index bd779d3..0a6d4da 100644 (file)
@@ -8,7 +8,7 @@ HTTP/1.0
 </info>
 #
 # Server-side
-<reply>
+<reply name="47">
 <data>
 HTTP/1.0 200 OK swsclose
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index 56a5c91..faf3d72 100644 (file)
@@ -7,7 +7,7 @@ HTTP GET
 </info>
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK\r
 Date: Thu, 09 Nov 2010 14:49:00 GMT\r
index 674bc43..9c9dcc9 100644 (file)
@@ -6,7 +6,7 @@ missing URL
 </info>
 #
 # Server-side
-<reply>
+<reply name="1">
 </reply>
 
 # Client-side
index 96e690b..f1939fe 100644 (file)
@@ -41,12 +41,10 @@ Content-Type: text/html
 Funny-head: yesyes
 Set-Cookie: test4=overwritten4; domain=host.foo.com; expires=Sat May 5 GMT 11:56:27 2035
 Set-Cookie: test1=overwritten1; domain=foo.com; expires=Thu Mar 3 GMT 11:56:27 2033
-Set-Cookie: test6=six; domain=.www.host.foo.com; expires=Thu Mar 3 GMT 11:56:27 2033
-Set-Cookie: test6=six_more; expires=Thu Mar 3 GMT 11:56:27 2033
 Content-Type: text/html
-Content-Length: 73
+Content-Length: 32
 
-run 3: overwrite cookie 1 and 4, set cookie 6 with and without tailmatch
+run 3: overwrite cookie 1 and 4
 </data3>
 </reply>
 
@@ -168,28 +166,24 @@ lock:   cookie [Pigs in space]: 60
 unlock: cookie [Pigs in space]: 61
 lock:   cookie [Pigs in space]: 62
 unlock: cookie [Pigs in space]: 63
-lock:   cookie [Pigs in space]: 64
-unlock: cookie [Pigs in space]: 65
+run 3: overwrite cookie 1 and 4
+lock:   dns    [Pigs in space]: 64
+unlock: dns    [Pigs in space]: 65
+CLEANUP
 lock:   cookie [Pigs in space]: 66
 unlock: cookie [Pigs in space]: 67
-run 3: overwrite cookie 1 and 4, set cookie 6 with and without tailmatch
-lock:   dns    [Pigs in space]: 68
-unlock: dns    [Pigs in space]: 69
-CLEANUP
-lock:   cookie [Pigs in space]: 70
-unlock: cookie [Pigs in space]: 71
-lock:   share  [Pigs in space]: 72
-unlock: share  [Pigs in space]: 73
+lock:   share  [Pigs in space]: 68
+unlock: share  [Pigs in space]: 69
 CURLOPT_SHARE
-lock:   share  [Pigs in space]: 74
-unlock: share  [Pigs in space]: 75
+lock:   share  [Pigs in space]: 70
+unlock: share  [Pigs in space]: 71
 CURLOPT_COOKIELIST ALL
-lock:   cookie [Pigs in space]: 76
-unlock: cookie [Pigs in space]: 77
+lock:   cookie [Pigs in space]: 72
+unlock: cookie [Pigs in space]: 73
 CURLOPT_COOKIEJAR
 CURLOPT_COOKIELIST RELOAD
-lock:   cookie [Pigs in space]: 78
-unlock: cookie [Pigs in space]: 79
+lock:   cookie [Pigs in space]: 74
+unlock: cookie [Pigs in space]: 75
 loaded cookies:
 -----------------
   .host.foo.com        TRUE    /       FALSE   1896263787      injected        yes
@@ -198,21 +192,19 @@ loaded cookies:
   .foo.com     TRUE    /       FALSE   1896263787      test3   three
   .host.foo.com        TRUE    /       FALSE   2061978987      test4   overwritten4
   .host.foo.com        TRUE    /       FALSE   1896263787      test5   five
-  .www.host.foo.com    TRUE    /       FALSE   1993463787      test6   six
-  www.host.foo.com     FALSE   /       FALSE   1993463787      test6   six_more
 -----------------
 try SHARE_CLEANUP...
-lock:   share  [Pigs in space]: 80
-unlock: share  [Pigs in space]: 81
+lock:   share  [Pigs in space]: 76
+unlock: share  [Pigs in space]: 77
 SHARE_CLEANUP failed, correct
 CLEANUP
-lock:   cookie [Pigs in space]: 82
-unlock: cookie [Pigs in space]: 83
-lock:   share  [Pigs in space]: 84
-unlock: share  [Pigs in space]: 85
+lock:   cookie [Pigs in space]: 78
+unlock: cookie [Pigs in space]: 79
+lock:   share  [Pigs in space]: 80
+unlock: share  [Pigs in space]: 81
 SHARE_CLEANUP
-lock:   share  [Pigs in space]: 86
-unlock: share  [Pigs in space]: 87
+lock:   share  [Pigs in space]: 82
+unlock: share  [Pigs in space]: 83
 GLOBAL_CLEANUP
 </stdout>
 <stderr>
@@ -229,8 +221,6 @@ http://%HOSTIP:%HTTPPORT/506
 .foo.com       TRUE    /       FALSE   1896263787      test3   three
 .host.foo.com  TRUE    /       FALSE   2061978987      test4   overwritten4
 .host.foo.com  TRUE    /       FALSE   1896263787      test5   five
-.www.host.foo.com      TRUE    /       FALSE   1993463787      test6   six
-www.host.foo.com       FALSE   /       FALSE   1993463787      test6   six_more
 </file>
 </verify>
 </testcase>
index 513634f..c81a45e 100644 (file)
@@ -116,12 +116,6 @@ nothing
 81: 20111323 12:34:56 => -1
 82: 20110623 12:34:79 => -1
 83: Wed, 31 Dec 2008 23:59:60 GMT => 1230768000
-84: 20110623 12:3 => 1308830580
-85: 20110623 1:3 => 1308790980
-86: 20110623 1:30 => 1308792600
-87: 20110623 12:12:3 => 1308831123
-88: 20110623 01:12:3 => 1308791523
-89: 20110623 01:99:30 => -1
 </stdout>
 
 # This test case previously tested an overflow case ("2094 Nov 6 =>
index 5d1478b..b44ca34 100644 (file)
Binary files a/tests/data/test552 and b/tests/data/test552 differ
index 549b9a4..55c7c91 100644 (file)
@@ -8,7 +8,7 @@ HTTP GET
 
 <reply>
 <data>
-HTTP/1.1 200 OK swsclose\r
+HTTP/1.1 200 OK\r
 Server: test-server/fake\r
 Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT\r
 Content-Length: 6\r
index ad9350f..8d0944a 100644 (file)
@@ -40,7 +40,6 @@ All curl_mprintf() unsigned long tests OK!
 All curl_mprintf() signed long tests OK!
 All curl_mprintf() curl_off_t tests OK!
 All curl_mprintf() strings tests OK!
-All float strings tests OK!
 </stdout>
 </verify>
 
index 27457ff..a1ac7d4 100644 (file)
@@ -41,8 +41,8 @@ FD connect.c: sclose()
 MEM lib558.c: malloc()
 MEM lib558.c: free()
 MEM escape.c: malloc()
-MEM strdup.c: realloc()
-MEM strdup.c: realloc()
+MEM escape.c: realloc()
+MEM escape.c: realloc()
 MEM escape.c: free()
 </file>
 <stripfile>
index abbe49a..e4ee4ac 100644 (file)
@@ -7,7 +7,7 @@ HTTP POST
 </info>
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK\r
 Date: Thu, 09 Nov 2010 14:49:00 GMT\r
index 9c96017..1924650 100644 (file)
@@ -7,7 +7,7 @@ HTTP GET
 </info>
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.0 200 OK swsclose
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index ac63fa5..ce6f894 100644 (file)
@@ -9,7 +9,7 @@ SOCKS4
 
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index 799597f..014aca2 100644 (file)
@@ -9,7 +9,7 @@ SOCKS5
 
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index e8bffc3..716d9ae 100644 (file)
@@ -9,7 +9,7 @@ SOCKS4
 
 #
 # Server-side
-<reply>
+<reply name="1">
 <data>
 HTTP/1.1 200 OK
 Date: Thu, 09 Nov 2010 14:49:00 GMT
index 341a003..b71f969 100644 (file)
@@ -31,7 +31,6 @@ HTTP and -F upload in config file
 -F name=daniel
 -F tool=curl
 -F file=@log/test71.txt
-user-agent = ""
 </stdin>
  <command>
 http://%HOSTIP:%HTTPPORT/we/want/71 -K -
@@ -47,10 +46,11 @@ bar
 # Verify data after the test has been "shot"
 <verify>
 <strip>
-^(Content-Type: multipart/form-data;|------------).*
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
 </strip>
 <protocol>
 POST /we/want/71 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: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 408\r
index 252c9ef..c62e9f2 100644 (file)
@@ -6,6 +6,7 @@ FTP
 PASV
 RETR
 SOCKS5
+all_proxy
 </keywords>
 </info>
 #
diff --git a/tests/data/test713 b/tests/data/test713
deleted file mode 100755 (executable)
index bb79994..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<testcase>
-#based off test 712
-<info>
-<keywords>
-FTP
-PASV
-RETR
-SOCKS5
-CURLOPT_CONNECT_TO
-</keywords>
-</info>
-#
-# Server-side
-<reply>
-<data>
-silly content
-</data>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-ftp
-socks5
-</server>
- <name>
-FTP fetch with --proxy set to socks5:// and with --connect-to
- </name>
- <command>
-ftp://ftp.example.com/713 --connect-to ::%HOSTIP:%FTPPORT --proxy socks5://%HOSTIP:%SOCKSPORT 
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-USER anonymous\r
-PASS ftp@example.com\r
-PWD\r
-EPSV\r
-TYPE I\r
-SIZE 713\r
-RETR 713\r
-QUIT\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test714 b/tests/data/test714
deleted file mode 100755 (executable)
index 9d1f0a9..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<testcase>
-#based off test 712
-<info>
-<keywords>
-FTP
-PASV
-RETR
-HTTP
-HTTP CONNECT
-proxytunnel
-CURLOPT_CONNECT_TO
-</keywords>
-</info>
-#
-# Server-side
-<reply>
-<connect>
-HTTP/1.1 200 Connection established
-
-</connect>
-
-<data nocheck="yes">
-silly content
-</data>
-
-<datacheck>
-HTTP/1.1 200 Connection established
-
-HTTP/1.1 200 Connection established
-
-silly content
-</datacheck>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-ftp
-http-proxy
-</server>
- <name>
-FTP fetch with --proxy set to http:// and with --connect-to
- </name>
- <command>
-ftp://ftp.example.com.714/714 --connect-to ::connect.example.com.714:%FTPPORT --proxytunnel --proxy http://%HOSTIP:%PROXYPORT 
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-USER anonymous\r
-PASS ftp@example.com\r
-PWD\r
-EPSV\r
-TYPE I\r
-SIZE 714\r
-RETR 714\r
-QUIT\r
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test715 b/tests/data/test715
deleted file mode 100755 (executable)
index ffcfc7e..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<testcase>
-#based off test 712
-<info>
-<keywords>
-FTP
-PASV
-RETR
-HTTP
-HTTP CONNECT
-proxytunnel
-SOCKS5
-CURLOPT_CONNECT_TO
-</keywords>
-</info>
-#
-# Server-side
-<reply>
-<connect>
-HTTP/1.1 200 Connection established
-
-</connect>
-
-<data nocheck="yes">
-silly content
-</data>
-
-<datacheck>
-HTTP/1.1 200 Connection established
-
-HTTP/1.1 200 Connection established
-
-silly content
-</datacheck>
-</reply>
-
-#
-# Client-side
-<client>
-<server>
-ftp
-http-proxy
-socks5
-</server>
- <name>
-FTP fetch with --preproxy, --proxy and --connect-to
- </name>
- <command>
-ftp://ftp.example.com.715/715 --connect-to ::connect.example.com.715:%FTPPORT --proxytunnel --proxy %HOSTIP:%PROXYPORT --preproxy socks5://%HOSTIP:%SOCKSPORT 
-</command>
-</client>
-
-#
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-USER anonymous\r
-PASS ftp@example.com\r
-PWD\r
-EPSV\r
-TYPE I\r
-SIZE 715\r
-RETR 715\r
-QUIT\r
-</protocol>
-</verify>
-</testcase>
index ebdebd6..9ad98f7 100644 (file)
@@ -11,7 +11,7 @@ APOP
 <reply>
 <servercmd>
 CAPA APOP
-REPLY welcome +OK curl POP3 server ready to serve <1972.987654321\@curl>
+REPLY welcome +OK cURL POP3 server ready to serve <1972.987654321\@curl>
 </servercmd>
 <data>
 From: me@somewhere\r
index 081298f..01a7df8 100755 (executable)
@@ -609,7 +609,7 @@ sub protocolsetup {
             '   / __| | | | |_) | |    '."\r\n",
             '  | (__| |_| |  _ {| |___ '."\r\n",
             '   \___|\___/|_| \_\_____|'."\r\n",
-            '+OK curl POP3 server ready to serve '."\r\n")
+            '+OK cURL POP3 server ready to serve '."\r\n")
         );
     }
     elsif($proto eq 'imap') {
@@ -643,7 +643,7 @@ sub protocolsetup {
             '   / __| | | | |_) | |    '."\r\n",
             '  | (__| |_| |  _ {| |___ '."\r\n",
             '   \___|\___/|_| \_\_____|'."\r\n",
-            '* OK curl IMAP server ready to serve'."\r\n")
+            '* OK cURL IMAP server ready to serve'."\r\n")
         );
     }
     elsif($proto eq 'smtp') {
@@ -1057,7 +1057,7 @@ sub EXPN_smtp {
 }
 
 sub QUIT_smtp {
-    sendcontrol "221 curl $smtp_type server signing off\r\n";
+    sendcontrol "221 cURL $smtp_type server signing off\r\n";
 
     return 0;
 }
@@ -1605,7 +1605,7 @@ sub NOOP_imap {
 }
 
 sub LOGOUT_imap {
-    sendcontrol "* BYE curl IMAP server signing off\r\n";
+    sendcontrol "* BYE cURL IMAP server signing off\r\n";
     sendcontrol "$cmdid OK LOGOUT completed\r\n";
 
     return 0;
@@ -1941,7 +1941,7 @@ sub QUIT_pop3 {
         @deleted = ();
     }
 
-    sendcontrol "+OK curl POP3 server signing off\r\n";
+    sendcontrol "+OK cURL POP3 server signing off\r\n";
 
     return 0;
 }
index a7449c3..cc9d7e1 100644 (file)
@@ -43,10 +43,6 @@ if(NOT WIN32)
   # library at (tests)/libtest/.libs/libhostname.so
   set_target_properties(hostname PROPERTIES
       LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/.libs)
-  if(HIDES_CURL_PRIVATE_SYMBOLS)
-    set_property(TARGET hostname APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
-    set_property(TARGET hostname APPEND PROPERTY COMPILE_FLAGS ${CURL_CFLAG_SYMBOLS_HIDE})
-  endif()
 endif()
 
 # # files used only in some libcurl test programs
index 4820f21..eec09b8 100644 (file)
@@ -124,9 +124,7 @@ noinst_PROGRAMS = chkhostname$(EXEEXT) libauthretry$(EXEEXT) \
        lib1515$(EXEEXT) lib1517$(EXEEXT) lib1520$(EXEEXT) \
        lib1525$(EXEEXT) lib1526$(EXEEXT) lib1527$(EXEEXT) \
        lib1528$(EXEEXT) lib1529$(EXEEXT) lib1530$(EXEEXT) \
-       lib1531$(EXEEXT) lib1532$(EXEEXT) lib1533$(EXEEXT) \
-       lib1534$(EXEEXT) lib1535$(EXEEXT) lib1536$(EXEEXT) \
-       lib1900$(EXEEXT) lib2033$(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
@@ -350,508 +348,473 @@ am_lib1531_OBJECTS = lib1531-lib1531.$(OBJEXT) $(am__objects_68) \
        $(am__objects_69) $(am__objects_70)
 lib1531_OBJECTS = $(am_lib1531_OBJECTS)
 lib1531_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_71 = lib1532-first.$(OBJEXT)
-am__objects_72 = lib1532-testutil.$(OBJEXT)
-am__objects_73 = ../../lib/lib1532-warnless.$(OBJEXT)
-am_lib1532_OBJECTS = lib1532-lib1532.$(OBJEXT) $(am__objects_71) \
+am__objects_71 = lib1900-first.$(OBJEXT)
+am__objects_72 = lib1900-testutil.$(OBJEXT)
+am__objects_73 = ../../lib/lib1900-warnless.$(OBJEXT)
+am_lib1900_OBJECTS = lib1900-lib1900.$(OBJEXT) $(am__objects_71) \
        $(am__objects_72) $(am__objects_73)
-lib1532_OBJECTS = $(am_lib1532_OBJECTS)
-lib1532_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_74 = lib1533-first.$(OBJEXT)
-am__objects_75 = lib1533-testutil.$(OBJEXT)
-am__objects_76 = ../../lib/lib1533-warnless.$(OBJEXT)
-am_lib1533_OBJECTS = lib1533-lib1533.$(OBJEXT) $(am__objects_74) \
-       $(am__objects_75) $(am__objects_76)
-lib1533_OBJECTS = $(am_lib1533_OBJECTS)
-lib1533_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_77 = lib1534-first.$(OBJEXT)
-am__objects_78 = lib1534-testutil.$(OBJEXT)
-am__objects_79 = ../../lib/lib1534-warnless.$(OBJEXT)
-am_lib1534_OBJECTS = lib1534-lib1534.$(OBJEXT) $(am__objects_77) \
-       $(am__objects_78) $(am__objects_79)
-lib1534_OBJECTS = $(am_lib1534_OBJECTS)
-lib1534_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_80 = lib1535-first.$(OBJEXT)
-am__objects_81 = lib1535-testutil.$(OBJEXT)
-am__objects_82 = ../../lib/lib1535-warnless.$(OBJEXT)
-am_lib1535_OBJECTS = lib1535-lib1535.$(OBJEXT) $(am__objects_80) \
-       $(am__objects_81) $(am__objects_82)
-lib1535_OBJECTS = $(am_lib1535_OBJECTS)
-lib1535_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_83 = lib1536-first.$(OBJEXT)
-am__objects_84 = lib1536-testutil.$(OBJEXT)
-am__objects_85 = ../../lib/lib1536-warnless.$(OBJEXT)
-am_lib1536_OBJECTS = lib1536-lib1536.$(OBJEXT) $(am__objects_83) \
-       $(am__objects_84) $(am__objects_85)
-lib1536_OBJECTS = $(am_lib1536_OBJECTS)
-lib1536_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_86 = lib1900-first.$(OBJEXT)
-am__objects_87 = lib1900-testutil.$(OBJEXT)
-am__objects_88 = ../../lib/lib1900-warnless.$(OBJEXT)
-am_lib1900_OBJECTS = lib1900-lib1900.$(OBJEXT) $(am__objects_86) \
-       $(am__objects_87) $(am__objects_88)
 lib1900_OBJECTS = $(am_lib1900_OBJECTS)
 lib1900_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_89 = lib2033-first.$(OBJEXT)
-am__objects_90 = lib2033-testutil.$(OBJEXT)
-am__objects_91 = ../../lib/lib2033-warnless.$(OBJEXT)
+am__objects_74 = lib2033-first.$(OBJEXT)
+am__objects_75 = lib2033-testutil.$(OBJEXT)
+am__objects_76 = ../../lib/lib2033-warnless.$(OBJEXT)
 am_lib2033_OBJECTS = lib2033-libntlmconnect.$(OBJEXT) \
-       $(am__objects_89) $(am__objects_90) $(am__objects_91)
+       $(am__objects_74) $(am__objects_75) $(am__objects_76)
 lib2033_OBJECTS = $(am_lib2033_OBJECTS)
 lib2033_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_92 = lib500-first.$(OBJEXT)
-am__objects_93 = lib500-testutil.$(OBJEXT)
-am__objects_94 = lib500-testtrace.$(OBJEXT)
-am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_92) \
-       $(am__objects_93) $(am__objects_94)
+am__objects_77 = lib500-first.$(OBJEXT)
+am__objects_78 = lib500-testutil.$(OBJEXT)
+am__objects_79 = lib500-testtrace.$(OBJEXT)
+am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_77) \
+       $(am__objects_78) $(am__objects_79)
 lib500_OBJECTS = $(am_lib500_OBJECTS)
 lib500_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_95 = lib501-first.$(OBJEXT)
-am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_95)
+am__objects_80 = lib501-first.$(OBJEXT)
+am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_80)
 lib501_OBJECTS = $(am_lib501_OBJECTS)
 lib501_LDADD = $(LDADD)
 lib501_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_96 = lib502-first.$(OBJEXT)
-am__objects_97 = lib502-testutil.$(OBJEXT)
-am__objects_98 = ../../lib/lib502-warnless.$(OBJEXT)
-am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_96) \
-       $(am__objects_97) $(am__objects_98)
+am__objects_81 = lib502-first.$(OBJEXT)
+am__objects_82 = lib502-testutil.$(OBJEXT)
+am__objects_83 = ../../lib/lib502-warnless.$(OBJEXT)
+am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_81) \
+       $(am__objects_82) $(am__objects_83)
 lib502_OBJECTS = $(am_lib502_OBJECTS)
 lib502_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_99 = lib503-first.$(OBJEXT)
-am__objects_100 = lib503-testutil.$(OBJEXT)
-am__objects_101 = ../../lib/lib503-warnless.$(OBJEXT)
-am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_99) \
-       $(am__objects_100) $(am__objects_101)
+am__objects_84 = lib503-first.$(OBJEXT)
+am__objects_85 = lib503-testutil.$(OBJEXT)
+am__objects_86 = ../../lib/lib503-warnless.$(OBJEXT)
+am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_84) \
+       $(am__objects_85) $(am__objects_86)
 lib503_OBJECTS = $(am_lib503_OBJECTS)
 lib503_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_102 = lib504-first.$(OBJEXT)
-am__objects_103 = lib504-testutil.$(OBJEXT)
-am__objects_104 = ../../lib/lib504-warnless.$(OBJEXT)
-am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_102) \
-       $(am__objects_103) $(am__objects_104)
+am__objects_87 = lib504-first.$(OBJEXT)
+am__objects_88 = lib504-testutil.$(OBJEXT)
+am__objects_89 = ../../lib/lib504-warnless.$(OBJEXT)
+am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_87) \
+       $(am__objects_88) $(am__objects_89)
 lib504_OBJECTS = $(am_lib504_OBJECTS)
 lib504_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_105 = lib505-first.$(OBJEXT)
-am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_105)
+am__objects_90 = lib505-first.$(OBJEXT)
+am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_90)
 lib505_OBJECTS = $(am_lib505_OBJECTS)
 lib505_LDADD = $(LDADD)
 lib505_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_106 = lib506-first.$(OBJEXT)
-am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_106)
+am__objects_91 = lib506-first.$(OBJEXT)
+am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_91)
 lib506_OBJECTS = $(am_lib506_OBJECTS)
 lib506_LDADD = $(LDADD)
 lib506_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_107 = lib507-first.$(OBJEXT)
-am__objects_108 = lib507-testutil.$(OBJEXT)
-am__objects_109 = ../../lib/lib507-warnless.$(OBJEXT)
-am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_107) \
-       $(am__objects_108) $(am__objects_109)
+am__objects_92 = lib507-first.$(OBJEXT)
+am__objects_93 = lib507-testutil.$(OBJEXT)
+am__objects_94 = ../../lib/lib507-warnless.$(OBJEXT)
+am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_92) \
+       $(am__objects_93) $(am__objects_94)
 lib507_OBJECTS = $(am_lib507_OBJECTS)
 lib507_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_110 = lib508-first.$(OBJEXT)
-am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_110)
+am__objects_95 = lib508-first.$(OBJEXT)
+am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_95)
 lib508_OBJECTS = $(am_lib508_OBJECTS)
 lib508_LDADD = $(LDADD)
 lib508_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_111 = lib509-first.$(OBJEXT)
-am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_111)
+am__objects_96 = lib509-first.$(OBJEXT)
+am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_96)
 lib509_OBJECTS = $(am_lib509_OBJECTS)
 lib509_LDADD = $(LDADD)
 lib509_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_112 = lib510-first.$(OBJEXT)
-am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_112)
+am__objects_97 = lib510-first.$(OBJEXT)
+am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_97)
 lib510_OBJECTS = $(am_lib510_OBJECTS)
 lib510_LDADD = $(LDADD)
 lib510_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_113 = lib511-first.$(OBJEXT)
-am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_113)
+am__objects_98 = lib511-first.$(OBJEXT)
+am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_98)
 lib511_OBJECTS = $(am_lib511_OBJECTS)
 lib511_LDADD = $(LDADD)
 lib511_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_114 = lib512-first.$(OBJEXT)
-am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_114)
+am__objects_99 = lib512-first.$(OBJEXT)
+am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_99)
 lib512_OBJECTS = $(am_lib512_OBJECTS)
 lib512_LDADD = $(LDADD)
 lib512_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_115 = lib513-first.$(OBJEXT)
-am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_115)
+am__objects_100 = lib513-first.$(OBJEXT)
+am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_100)
 lib513_OBJECTS = $(am_lib513_OBJECTS)
 lib513_LDADD = $(LDADD)
 lib513_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_116 = lib514-first.$(OBJEXT)
-am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_116)
+am__objects_101 = lib514-first.$(OBJEXT)
+am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_101)
 lib514_OBJECTS = $(am_lib514_OBJECTS)
 lib514_LDADD = $(LDADD)
 lib514_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_117 = lib515-first.$(OBJEXT)
-am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_117)
+am__objects_102 = lib515-first.$(OBJEXT)
+am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_102)
 lib515_OBJECTS = $(am_lib515_OBJECTS)
 lib515_LDADD = $(LDADD)
 lib515_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_118 = lib516-first.$(OBJEXT)
-am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_118)
+am__objects_103 = lib516-first.$(OBJEXT)
+am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_103)
 lib516_OBJECTS = $(am_lib516_OBJECTS)
 lib516_LDADD = $(LDADD)
 lib516_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_119 = lib517-first.$(OBJEXT)
-am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_119)
+am__objects_104 = lib517-first.$(OBJEXT)
+am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_104)
 lib517_OBJECTS = $(am_lib517_OBJECTS)
 lib517_LDADD = $(LDADD)
 lib517_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_120 = lib518-first.$(OBJEXT)
-am__objects_121 = ../../lib/lib518-warnless.$(OBJEXT)
-am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_120) \
-       $(am__objects_121)
+am__objects_105 = lib518-first.$(OBJEXT)
+am__objects_106 = ../../lib/lib518-warnless.$(OBJEXT)
+am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_105) \
+       $(am__objects_106)
 lib518_OBJECTS = $(am_lib518_OBJECTS)
 lib518_LDADD = $(LDADD)
 lib518_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_122 = lib519-first.$(OBJEXT)
-am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_122)
+am__objects_107 = lib519-first.$(OBJEXT)
+am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_107)
 lib519_OBJECTS = $(am_lib519_OBJECTS)
 lib519_LDADD = $(LDADD)
 lib519_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_123 = lib520-first.$(OBJEXT)
-am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_123)
+am__objects_108 = lib520-first.$(OBJEXT)
+am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_108)
 lib520_OBJECTS = $(am_lib520_OBJECTS)
 lib520_LDADD = $(LDADD)
 lib520_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_124 = lib521-first.$(OBJEXT)
-am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_124)
+am__objects_109 = lib521-first.$(OBJEXT)
+am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_109)
 lib521_OBJECTS = $(am_lib521_OBJECTS)
 lib521_LDADD = $(LDADD)
 lib521_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_125 = lib523-first.$(OBJEXT)
-am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_125)
+am__objects_110 = lib523-first.$(OBJEXT)
+am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_110)
 lib523_OBJECTS = $(am_lib523_OBJECTS)
 lib523_LDADD = $(LDADD)
 lib523_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_126 = lib524-first.$(OBJEXT)
-am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_126)
+am__objects_111 = lib524-first.$(OBJEXT)
+am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_111)
 lib524_OBJECTS = $(am_lib524_OBJECTS)
 lib524_LDADD = $(LDADD)
 lib524_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_127 = lib525-first.$(OBJEXT)
-am__objects_128 = lib525-testutil.$(OBJEXT)
-am__objects_129 = ../../lib/lib525-warnless.$(OBJEXT)
-am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_127) \
-       $(am__objects_128) $(am__objects_129)
+am__objects_112 = lib525-first.$(OBJEXT)
+am__objects_113 = lib525-testutil.$(OBJEXT)
+am__objects_114 = ../../lib/lib525-warnless.$(OBJEXT)
+am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_112) \
+       $(am__objects_113) $(am__objects_114)
 lib525_OBJECTS = $(am_lib525_OBJECTS)
 lib525_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_130 = lib526-first.$(OBJEXT)
-am__objects_131 = lib526-testutil.$(OBJEXT)
-am__objects_132 = ../../lib/lib526-warnless.$(OBJEXT)
-am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_130) \
-       $(am__objects_131) $(am__objects_132)
+am__objects_115 = lib526-first.$(OBJEXT)
+am__objects_116 = lib526-testutil.$(OBJEXT)
+am__objects_117 = ../../lib/lib526-warnless.$(OBJEXT)
+am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_115) \
+       $(am__objects_116) $(am__objects_117)
 lib526_OBJECTS = $(am_lib526_OBJECTS)
 lib526_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_133 = lib527-first.$(OBJEXT)
-am__objects_134 = lib527-testutil.$(OBJEXT)
-am__objects_135 = ../../lib/lib527-warnless.$(OBJEXT)
-am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_133) \
-       $(am__objects_134) $(am__objects_135)
+am__objects_118 = lib527-first.$(OBJEXT)
+am__objects_119 = lib527-testutil.$(OBJEXT)
+am__objects_120 = ../../lib/lib527-warnless.$(OBJEXT)
+am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_118) \
+       $(am__objects_119) $(am__objects_120)
 lib527_OBJECTS = $(am_lib527_OBJECTS)
 lib527_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_136 = lib529-first.$(OBJEXT)
-am__objects_137 = lib529-testutil.$(OBJEXT)
-am__objects_138 = ../../lib/lib529-warnless.$(OBJEXT)
-am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_136) \
-       $(am__objects_137) $(am__objects_138)
+am__objects_121 = lib529-first.$(OBJEXT)
+am__objects_122 = lib529-testutil.$(OBJEXT)
+am__objects_123 = ../../lib/lib529-warnless.$(OBJEXT)
+am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_121) \
+       $(am__objects_122) $(am__objects_123)
 lib529_OBJECTS = $(am_lib529_OBJECTS)
 lib529_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_139 = lib530-first.$(OBJEXT)
-am__objects_140 = lib530-testutil.$(OBJEXT)
-am__objects_141 = ../../lib/lib530-warnless.$(OBJEXT)
-am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_139) \
-       $(am__objects_140) $(am__objects_141)
+am__objects_124 = lib530-first.$(OBJEXT)
+am__objects_125 = lib530-testutil.$(OBJEXT)
+am__objects_126 = ../../lib/lib530-warnless.$(OBJEXT)
+am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_124) \
+       $(am__objects_125) $(am__objects_126)
 lib530_OBJECTS = $(am_lib530_OBJECTS)
 lib530_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_142 = lib532-first.$(OBJEXT)
-am__objects_143 = lib532-testutil.$(OBJEXT)
-am__objects_144 = ../../lib/lib532-warnless.$(OBJEXT)
-am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_142) \
-       $(am__objects_143) $(am__objects_144)
+am__objects_127 = lib532-first.$(OBJEXT)
+am__objects_128 = lib532-testutil.$(OBJEXT)
+am__objects_129 = ../../lib/lib532-warnless.$(OBJEXT)
+am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_127) \
+       $(am__objects_128) $(am__objects_129)
 lib532_OBJECTS = $(am_lib532_OBJECTS)
 lib532_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_145 = lib533-first.$(OBJEXT)
-am__objects_146 = lib533-testutil.$(OBJEXT)
-am__objects_147 = ../../lib/lib533-warnless.$(OBJEXT)
-am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_145) \
-       $(am__objects_146) $(am__objects_147)
+am__objects_130 = lib533-first.$(OBJEXT)
+am__objects_131 = lib533-testutil.$(OBJEXT)
+am__objects_132 = ../../lib/lib533-warnless.$(OBJEXT)
+am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_130) \
+       $(am__objects_131) $(am__objects_132)
 lib533_OBJECTS = $(am_lib533_OBJECTS)
 lib533_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_148 = lib536-first.$(OBJEXT)
-am__objects_149 = lib536-testutil.$(OBJEXT)
-am__objects_150 = ../../lib/lib536-warnless.$(OBJEXT)
-am_lib536_OBJECTS = lib536-lib536.$(OBJEXT) $(am__objects_148) \
-       $(am__objects_149) $(am__objects_150)
+am__objects_133 = lib536-first.$(OBJEXT)
+am__objects_134 = lib536-testutil.$(OBJEXT)
+am__objects_135 = ../../lib/lib536-warnless.$(OBJEXT)
+am_lib536_OBJECTS = lib536-lib536.$(OBJEXT) $(am__objects_133) \
+       $(am__objects_134) $(am__objects_135)
 lib536_OBJECTS = $(am_lib536_OBJECTS)
 lib536_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_151 = lib537-first.$(OBJEXT)
-am__objects_152 = ../../lib/lib537-warnless.$(OBJEXT)
-am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_151) \
-       $(am__objects_152)
+am__objects_136 = lib537-first.$(OBJEXT)
+am__objects_137 = ../../lib/lib537-warnless.$(OBJEXT)
+am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_136) \
+       $(am__objects_137)
 lib537_OBJECTS = $(am_lib537_OBJECTS)
 lib537_LDADD = $(LDADD)
 lib537_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_153 = lib539-first.$(OBJEXT)
-am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_153)
+am__objects_138 = lib539-first.$(OBJEXT)
+am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_138)
 lib539_OBJECTS = $(am_lib539_OBJECTS)
 lib539_LDADD = $(LDADD)
 lib539_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_154 = lib540-first.$(OBJEXT)
-am__objects_155 = lib540-testutil.$(OBJEXT)
-am__objects_156 = ../../lib/lib540-warnless.$(OBJEXT)
-am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_154) \
-       $(am__objects_155) $(am__objects_156)
+am__objects_139 = lib540-first.$(OBJEXT)
+am__objects_140 = lib540-testutil.$(OBJEXT)
+am__objects_141 = ../../lib/lib540-warnless.$(OBJEXT)
+am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_139) \
+       $(am__objects_140) $(am__objects_141)
 lib540_OBJECTS = $(am_lib540_OBJECTS)
 lib540_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_157 = lib541-first.$(OBJEXT)
-am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_157)
+am__objects_142 = lib541-first.$(OBJEXT)
+am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_142)
 lib541_OBJECTS = $(am_lib541_OBJECTS)
 lib541_LDADD = $(LDADD)
 lib541_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_158 = lib542-first.$(OBJEXT)
-am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_158)
+am__objects_143 = lib542-first.$(OBJEXT)
+am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_143)
 lib542_OBJECTS = $(am_lib542_OBJECTS)
 lib542_LDADD = $(LDADD)
 lib542_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_159 = lib543-first.$(OBJEXT)
-am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_159)
+am__objects_144 = lib543-first.$(OBJEXT)
+am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_144)
 lib543_OBJECTS = $(am_lib543_OBJECTS)
 lib543_LDADD = $(LDADD)
 lib543_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_160 = lib544-first.$(OBJEXT)
-am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_160)
+am__objects_145 = lib544-first.$(OBJEXT)
+am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_145)
 lib544_OBJECTS = $(am_lib544_OBJECTS)
 lib544_LDADD = $(LDADD)
 lib544_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_161 = lib545-first.$(OBJEXT)
-am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_161)
+am__objects_146 = lib545-first.$(OBJEXT)
+am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_146)
 lib545_OBJECTS = $(am_lib545_OBJECTS)
 lib545_LDADD = $(LDADD)
 lib545_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_162 = lib547-first.$(OBJEXT)
-am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_162)
+am__objects_147 = lib547-first.$(OBJEXT)
+am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_147)
 lib547_OBJECTS = $(am_lib547_OBJECTS)
 lib547_LDADD = $(LDADD)
 lib547_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_163 = lib548-first.$(OBJEXT)
-am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_163)
+am__objects_148 = lib548-first.$(OBJEXT)
+am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_148)
 lib548_OBJECTS = $(am_lib548_OBJECTS)
 lib548_LDADD = $(LDADD)
 lib548_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_164 = lib549-first.$(OBJEXT)
-am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_164)
+am__objects_149 = lib549-first.$(OBJEXT)
+am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_149)
 lib549_OBJECTS = $(am_lib549_OBJECTS)
 lib549_LDADD = $(LDADD)
 lib549_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_165 = lib552-first.$(OBJEXT)
-am__objects_166 = ../../lib/lib552-warnless.$(OBJEXT)
-am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_165) \
-       $(am__objects_166)
+am__objects_150 = lib552-first.$(OBJEXT)
+am__objects_151 = ../../lib/lib552-warnless.$(OBJEXT)
+am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_150) \
+       $(am__objects_151)
 lib552_OBJECTS = $(am_lib552_OBJECTS)
 lib552_LDADD = $(LDADD)
 lib552_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_167 = lib553-first.$(OBJEXT)
-am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_167)
+am__objects_152 = lib553-first.$(OBJEXT)
+am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_152)
 lib553_OBJECTS = $(am_lib553_OBJECTS)
 lib553_LDADD = $(LDADD)
 lib553_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_168 = lib554-first.$(OBJEXT)
-am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_168)
+am__objects_153 = lib554-first.$(OBJEXT)
+am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_153)
 lib554_OBJECTS = $(am_lib554_OBJECTS)
 lib554_LDADD = $(LDADD)
 lib554_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_169 = lib555-first.$(OBJEXT)
-am__objects_170 = lib555-testutil.$(OBJEXT)
-am__objects_171 = ../../lib/lib555-warnless.$(OBJEXT)
-am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_169) \
-       $(am__objects_170) $(am__objects_171)
+am__objects_154 = lib555-first.$(OBJEXT)
+am__objects_155 = lib555-testutil.$(OBJEXT)
+am__objects_156 = ../../lib/lib555-warnless.$(OBJEXT)
+am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_154) \
+       $(am__objects_155) $(am__objects_156)
 lib555_OBJECTS = $(am_lib555_OBJECTS)
 lib555_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_172 = lib556-first.$(OBJEXT)
-am__objects_173 = ../../lib/lib556-warnless.$(OBJEXT)
-am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_172) \
-       $(am__objects_173)
+am__objects_157 = lib556-first.$(OBJEXT)
+am__objects_158 = ../../lib/lib556-warnless.$(OBJEXT)
+am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_157) \
+       $(am__objects_158)
 lib556_OBJECTS = $(am_lib556_OBJECTS)
 lib556_LDADD = $(LDADD)
 lib556_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_174 = lib557-first.$(OBJEXT)
-am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_174)
+am__objects_159 = lib557-first.$(OBJEXT)
+am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_159)
 lib557_OBJECTS = $(am_lib557_OBJECTS)
 lib557_LDADD = $(LDADD)
 lib557_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_175 = lib558-first.$(OBJEXT)
-am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_175)
+am__objects_160 = lib558-first.$(OBJEXT)
+am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_160)
 lib558_OBJECTS = $(am_lib558_OBJECTS)
 lib558_LDADD = $(LDADD)
 lib558_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_176 = lib560-first.$(OBJEXT)
-am__objects_177 = lib560-testutil.$(OBJEXT)
-am__objects_178 = ../../lib/lib560-warnless.$(OBJEXT)
-am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_176) \
-       $(am__objects_177) $(am__objects_178)
+am__objects_161 = lib560-first.$(OBJEXT)
+am__objects_162 = lib560-testutil.$(OBJEXT)
+am__objects_163 = ../../lib/lib560-warnless.$(OBJEXT)
+am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_161) \
+       $(am__objects_162) $(am__objects_163)
 lib560_OBJECTS = $(am_lib560_OBJECTS)
 lib560_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_179 = lib562-first.$(OBJEXT)
-am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_179)
+am__objects_164 = lib562-first.$(OBJEXT)
+am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_164)
 lib562_OBJECTS = $(am_lib562_OBJECTS)
 lib562_LDADD = $(LDADD)
 lib562_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_180 = lib564-first.$(OBJEXT)
-am__objects_181 = lib564-testutil.$(OBJEXT)
-am__objects_182 = ../../lib/lib564-warnless.$(OBJEXT)
-am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_180) \
-       $(am__objects_181) $(am__objects_182)
+am__objects_165 = lib564-first.$(OBJEXT)
+am__objects_166 = lib564-testutil.$(OBJEXT)
+am__objects_167 = ../../lib/lib564-warnless.$(OBJEXT)
+am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_165) \
+       $(am__objects_166) $(am__objects_167)
 lib564_OBJECTS = $(am_lib564_OBJECTS)
 lib564_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_183 = lib565-first.$(OBJEXT)
-am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_183)
+am__objects_168 = lib565-first.$(OBJEXT)
+am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_168)
 lib565_OBJECTS = $(am_lib565_OBJECTS)
 lib565_LDADD = $(LDADD)
 lib565_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_184 = lib566-first.$(OBJEXT)
-am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_184)
+am__objects_169 = lib566-first.$(OBJEXT)
+am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_169)
 lib566_OBJECTS = $(am_lib566_OBJECTS)
 lib566_LDADD = $(LDADD)
 lib566_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_185 = lib567-first.$(OBJEXT)
-am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_185)
+am__objects_170 = lib567-first.$(OBJEXT)
+am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_170)
 lib567_OBJECTS = $(am_lib567_OBJECTS)
 lib567_LDADD = $(LDADD)
 lib567_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_186 = lib568-first.$(OBJEXT)
-am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_186)
+am__objects_171 = lib568-first.$(OBJEXT)
+am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_171)
 lib568_OBJECTS = $(am_lib568_OBJECTS)
 lib568_LDADD = $(LDADD)
 lib568_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_187 = lib569-first.$(OBJEXT)
-am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_187)
+am__objects_172 = lib569-first.$(OBJEXT)
+am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_172)
 lib569_OBJECTS = $(am_lib569_OBJECTS)
 lib569_LDADD = $(LDADD)
 lib569_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_188 = lib570-first.$(OBJEXT)
-am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_188)
+am__objects_173 = lib570-first.$(OBJEXT)
+am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_173)
 lib570_OBJECTS = $(am_lib570_OBJECTS)
 lib570_LDADD = $(LDADD)
 lib570_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_189 = lib571-first.$(OBJEXT)
-am__objects_190 = ../../lib/lib571-warnless.$(OBJEXT)
-am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_189) \
-       $(am__objects_190)
+am__objects_174 = lib571-first.$(OBJEXT)
+am__objects_175 = ../../lib/lib571-warnless.$(OBJEXT)
+am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_174) \
+       $(am__objects_175)
 lib571_OBJECTS = $(am_lib571_OBJECTS)
 lib571_LDADD = $(LDADD)
 lib571_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_191 = lib572-first.$(OBJEXT)
-am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_191)
+am__objects_176 = lib572-first.$(OBJEXT)
+am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_176)
 lib572_OBJECTS = $(am_lib572_OBJECTS)
 lib572_LDADD = $(LDADD)
 lib572_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_192 = lib573-first.$(OBJEXT)
-am__objects_193 = lib573-testutil.$(OBJEXT)
-am__objects_194 = ../../lib/lib573-warnless.$(OBJEXT)
-am__objects_195 = lib573-testtrace.$(OBJEXT)
-am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_192) \
-       $(am__objects_193) $(am__objects_194) $(am__objects_195)
+am__objects_177 = lib573-first.$(OBJEXT)
+am__objects_178 = lib573-testutil.$(OBJEXT)
+am__objects_179 = ../../lib/lib573-warnless.$(OBJEXT)
+am__objects_180 = lib573-testtrace.$(OBJEXT)
+am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_177) \
+       $(am__objects_178) $(am__objects_179) $(am__objects_180)
 lib573_OBJECTS = $(am_lib573_OBJECTS)
 lib573_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_196 = lib574-first.$(OBJEXT)
-am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_196)
+am__objects_181 = lib574-first.$(OBJEXT)
+am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_181)
 lib574_OBJECTS = $(am_lib574_OBJECTS)
 lib574_LDADD = $(LDADD)
 lib574_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_197 = lib575-first.$(OBJEXT)
-am__objects_198 = lib575-testutil.$(OBJEXT)
-am__objects_199 = ../../lib/lib575-warnless.$(OBJEXT)
-am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_197) \
-       $(am__objects_198) $(am__objects_199)
+am__objects_182 = lib575-first.$(OBJEXT)
+am__objects_183 = lib575-testutil.$(OBJEXT)
+am__objects_184 = ../../lib/lib575-warnless.$(OBJEXT)
+am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_182) \
+       $(am__objects_183) $(am__objects_184)
 lib575_OBJECTS = $(am_lib575_OBJECTS)
 lib575_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_200 = lib576-first.$(OBJEXT)
-am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_200)
+am__objects_185 = lib576-first.$(OBJEXT)
+am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_185)
 lib576_OBJECTS = $(am_lib576_OBJECTS)
 lib576_LDADD = $(LDADD)
 lib576_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_201 = lib578-first.$(OBJEXT)
-am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_201)
+am__objects_186 = lib578-first.$(OBJEXT)
+am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_186)
 lib578_OBJECTS = $(am_lib578_OBJECTS)
 lib578_LDADD = $(LDADD)
 lib578_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_202 = lib579-first.$(OBJEXT)
-am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_202)
+am__objects_187 = lib579-first.$(OBJEXT)
+am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_187)
 lib579_OBJECTS = $(am_lib579_OBJECTS)
 lib579_LDADD = $(LDADD)
 lib579_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_203 = lib582-first.$(OBJEXT)
-am__objects_204 = lib582-testutil.$(OBJEXT)
-am__objects_205 = ../../lib/lib582-warnless.$(OBJEXT)
-am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_203) \
-       $(am__objects_204) $(am__objects_205)
+am__objects_188 = lib582-first.$(OBJEXT)
+am__objects_189 = lib582-testutil.$(OBJEXT)
+am__objects_190 = ../../lib/lib582-warnless.$(OBJEXT)
+am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_188) \
+       $(am__objects_189) $(am__objects_190)
 lib582_OBJECTS = $(am_lib582_OBJECTS)
 lib582_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_206 = lib583-first.$(OBJEXT)
-am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_206)
+am__objects_191 = lib583-first.$(OBJEXT)
+am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_191)
 lib583_OBJECTS = $(am_lib583_OBJECTS)
 lib583_LDADD = $(LDADD)
 lib583_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_207 = lib585-first.$(OBJEXT)
-am__objects_208 = lib585-testutil.$(OBJEXT)
-am__objects_209 = lib585-testtrace.$(OBJEXT)
-am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_207) \
-       $(am__objects_208) $(am__objects_209)
+am__objects_192 = lib585-first.$(OBJEXT)
+am__objects_193 = lib585-testutil.$(OBJEXT)
+am__objects_194 = lib585-testtrace.$(OBJEXT)
+am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_192) \
+       $(am__objects_193) $(am__objects_194)
 lib585_OBJECTS = $(am_lib585_OBJECTS)
 lib585_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_210 = lib586-first.$(OBJEXT)
-am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_210)
+am__objects_195 = lib586-first.$(OBJEXT)
+am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_195)
 lib586_OBJECTS = $(am_lib586_OBJECTS)
 lib586_LDADD = $(LDADD)
 lib586_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_211 = lib587-first.$(OBJEXT)
-am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_211)
+am__objects_196 = lib587-first.$(OBJEXT)
+am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_196)
 lib587_OBJECTS = $(am_lib587_OBJECTS)
 lib587_LDADD = $(LDADD)
 lib587_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_212 = lib590-first.$(OBJEXT)
-am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_212)
+am__objects_197 = lib590-first.$(OBJEXT)
+am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_197)
 lib590_OBJECTS = $(am_lib590_OBJECTS)
 lib590_LDADD = $(LDADD)
 lib590_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_213 = lib591-first.$(OBJEXT)
-am__objects_214 = lib591-testutil.$(OBJEXT)
-am__objects_215 = ../../lib/lib591-warnless.$(OBJEXT)
-am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_213) \
-       $(am__objects_214) $(am__objects_215)
+am__objects_198 = lib591-first.$(OBJEXT)
+am__objects_199 = lib591-testutil.$(OBJEXT)
+am__objects_200 = ../../lib/lib591-warnless.$(OBJEXT)
+am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_198) \
+       $(am__objects_199) $(am__objects_200)
 lib591_OBJECTS = $(am_lib591_OBJECTS)
 lib591_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_216 = lib597-first.$(OBJEXT)
-am__objects_217 = lib597-testutil.$(OBJEXT)
-am__objects_218 = ../../lib/lib597-warnless.$(OBJEXT)
-am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_216) \
-       $(am__objects_217) $(am__objects_218)
+am__objects_201 = lib597-first.$(OBJEXT)
+am__objects_202 = lib597-testutil.$(OBJEXT)
+am__objects_203 = ../../lib/lib597-warnless.$(OBJEXT)
+am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_201) \
+       $(am__objects_202) $(am__objects_203)
 lib597_OBJECTS = $(am_lib597_OBJECTS)
 lib597_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_219 = lib598-first.$(OBJEXT)
-am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_219)
+am__objects_204 = lib598-first.$(OBJEXT)
+am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_204)
 lib598_OBJECTS = $(am_lib598_OBJECTS)
 lib598_LDADD = $(LDADD)
 lib598_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_220 = lib599-first.$(OBJEXT)
-am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_220)
+am__objects_205 = lib599-first.$(OBJEXT)
+am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_205)
 lib599_OBJECTS = $(am_lib599_OBJECTS)
 lib599_LDADD = $(LDADD)
 lib599_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_221 = libauthretry-first.$(OBJEXT)
+am__objects_206 = libauthretry-first.$(OBJEXT)
 am_libauthretry_OBJECTS = libauthretry-libauthretry.$(OBJEXT) \
-       $(am__objects_221)
+       $(am__objects_206)
 libauthretry_OBJECTS = $(am_libauthretry_OBJECTS)
 libauthretry_LDADD = $(LDADD)
 libauthretry_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_222 = libntlmconnect-first.$(OBJEXT)
-am__objects_223 = libntlmconnect-testutil.$(OBJEXT)
-am__objects_224 = ../../lib/libntlmconnect-warnless.$(OBJEXT)
+am__objects_207 = libntlmconnect-first.$(OBJEXT)
+am__objects_208 = libntlmconnect-testutil.$(OBJEXT)
+am__objects_209 = ../../lib/libntlmconnect-warnless.$(OBJEXT)
 am_libntlmconnect_OBJECTS = libntlmconnect-libntlmconnect.$(OBJEXT) \
-       $(am__objects_222) $(am__objects_223) $(am__objects_224)
+       $(am__objects_207) $(am__objects_208) $(am__objects_209)
 libntlmconnect_OBJECTS = $(am_libntlmconnect_OBJECTS)
 libntlmconnect_DEPENDENCIES = $(am__DEPENDENCIES_1)
 AM_V_P = $(am__v_P_@AM_V@)
@@ -897,35 +860,33 @@ SOURCES = $(libhostname_la_SOURCES) $(chkhostname_SOURCES) \
        $(lib1515_SOURCES) $(lib1517_SOURCES) $(lib1520_SOURCES) \
        $(lib1525_SOURCES) $(lib1526_SOURCES) $(lib1527_SOURCES) \
        $(lib1528_SOURCES) $(lib1529_SOURCES) $(lib1530_SOURCES) \
-       $(lib1531_SOURCES) $(lib1532_SOURCES) $(lib1533_SOURCES) \
-       $(lib1534_SOURCES) $(lib1535_SOURCES) $(lib1536_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) \
+       $(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) \
@@ -936,35 +897,33 @@ DIST_SOURCES = $(libhostname_la_SOURCES) $(chkhostname_SOURCES) \
        $(lib1515_SOURCES) $(lib1517_SOURCES) $(lib1520_SOURCES) \
        $(lib1525_SOURCES) $(lib1526_SOURCES) $(lib1527_SOURCES) \
        $(lib1528_SOURCES) $(lib1529_SOURCES) $(lib1530_SOURCES) \
-       $(lib1531_SOURCES) $(lib1532_SOURCES) $(lib1533_SOURCES) \
-       $(lib1534_SOURCES) $(lib1535_SOURCES) $(lib1536_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) \
+       $(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 \
@@ -1515,21 +1474,6 @@ lib1530_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1530
 lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1531_LDADD = $(TESTUTIL_LIBS)
 lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
-lib1532_SOURCES = lib1532.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1532_LDADD = $(TESTUTIL_LIBS)
-lib1532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1532
-lib1533_SOURCES = lib1533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1533_LDADD = $(TESTUTIL_LIBS)
-lib1533_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1533
-lib1534_SOURCES = lib1534.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1534_LDADD = $(TESTUTIL_LIBS)
-lib1534_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1534
-lib1535_SOURCES = lib1535.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1535_LDADD = $(TESTUTIL_LIBS)
-lib1535_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1535
-lib1536_SOURCES = lib1536.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1536_LDADD = $(TESTUTIL_LIBS)
-lib1536_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1536
 lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1900_LDADD = $(TESTUTIL_LIBS)
 lib1900_CPPFLAGS = $(AM_CPPFLAGS)
@@ -1769,36 +1713,6 @@ lib1530$(EXEEXT): $(lib1530_OBJECTS) $(lib1530_DEPENDENCIES) $(EXTRA_lib1530_DEP
 lib1531$(EXEEXT): $(lib1531_OBJECTS) $(lib1531_DEPENDENCIES) $(EXTRA_lib1531_DEPENDENCIES) 
        @rm -f lib1531$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(lib1531_OBJECTS) $(lib1531_LDADD) $(LIBS)
-../../lib/lib1532-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
-       ../../lib/$(DEPDIR)/$(am__dirstamp)
-
-lib1532$(EXEEXT): $(lib1532_OBJECTS) $(lib1532_DEPENDENCIES) $(EXTRA_lib1532_DEPENDENCIES) 
-       @rm -f lib1532$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(lib1532_OBJECTS) $(lib1532_LDADD) $(LIBS)
-../../lib/lib1533-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
-       ../../lib/$(DEPDIR)/$(am__dirstamp)
-
-lib1533$(EXEEXT): $(lib1533_OBJECTS) $(lib1533_DEPENDENCIES) $(EXTRA_lib1533_DEPENDENCIES) 
-       @rm -f lib1533$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(lib1533_OBJECTS) $(lib1533_LDADD) $(LIBS)
-../../lib/lib1534-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
-       ../../lib/$(DEPDIR)/$(am__dirstamp)
-
-lib1534$(EXEEXT): $(lib1534_OBJECTS) $(lib1534_DEPENDENCIES) $(EXTRA_lib1534_DEPENDENCIES) 
-       @rm -f lib1534$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(lib1534_OBJECTS) $(lib1534_LDADD) $(LIBS)
-../../lib/lib1535-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
-       ../../lib/$(DEPDIR)/$(am__dirstamp)
-
-lib1535$(EXEEXT): $(lib1535_OBJECTS) $(lib1535_DEPENDENCIES) $(EXTRA_lib1535_DEPENDENCIES) 
-       @rm -f lib1535$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(lib1535_OBJECTS) $(lib1535_LDADD) $(LIBS)
-../../lib/lib1536-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
-       ../../lib/$(DEPDIR)/$(am__dirstamp)
-
-lib1536$(EXEEXT): $(lib1536_OBJECTS) $(lib1536_DEPENDENCIES) $(EXTRA_lib1536_DEPENDENCIES) 
-       @rm -f lib1536$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(lib1536_OBJECTS) $(lib1536_LDADD) $(LIBS)
 ../../lib/lib1900-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 
@@ -2212,11 +2126,6 @@ distclean-compile:
 @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)/lib1532-warnless.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1533-warnless.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1534-warnless.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1535-warnless.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1536-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@
@@ -2320,21 +2229,6 @@ distclean-compile:
 @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)/lib1532-first.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1532-lib1532.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1532-testutil.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1533-first.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1533-lib1533.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1533-testutil.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1534-first.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1534-lib1534.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1534-testutil.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1535-first.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1535-lib1535.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1535-testutil.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1536-first.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1536-lib1536.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1536-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@
@@ -3917,286 +3811,6 @@ lib1531-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) $(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`
 
-lib1532-lib1532.o: lib1532.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-lib1532.o -MD -MP -MF $(DEPDIR)/lib1532-lib1532.Tpo -c -o lib1532-lib1532.o `test -f 'lib1532.c' || echo '$(srcdir)/'`lib1532.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-lib1532.Tpo $(DEPDIR)/lib1532-lib1532.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1532.c' object='lib1532-lib1532.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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-lib1532.o `test -f 'lib1532.c' || echo '$(srcdir)/'`lib1532.c
-
-lib1532-lib1532.obj: lib1532.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-lib1532.obj -MD -MP -MF $(DEPDIR)/lib1532-lib1532.Tpo -c -o lib1532-lib1532.obj `if test -f 'lib1532.c'; then $(CYGPATH_W) 'lib1532.c'; else $(CYGPATH_W) '$(srcdir)/lib1532.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-lib1532.Tpo $(DEPDIR)/lib1532-lib1532.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1532.c' object='lib1532-lib1532.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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-lib1532.obj `if test -f 'lib1532.c'; then $(CYGPATH_W) 'lib1532.c'; else $(CYGPATH_W) '$(srcdir)/lib1532.c'; fi`
-
-lib1532-first.o: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-first.o -MD -MP -MF $(DEPDIR)/lib1532-first.Tpo -c -o lib1532-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-first.Tpo $(DEPDIR)/lib1532-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1532-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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1532-first.obj: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-first.obj -MD -MP -MF $(DEPDIR)/lib1532-first.Tpo -c -o lib1532-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)/lib1532-first.Tpo $(DEPDIR)/lib1532-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1532-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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1532-testutil.o: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-testutil.o -MD -MP -MF $(DEPDIR)/lib1532-testutil.Tpo -c -o lib1532-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-testutil.Tpo $(DEPDIR)/lib1532-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1532-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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1532-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-testutil.obj -MD -MP -MF $(DEPDIR)/lib1532-testutil.Tpo -c -o lib1532-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)/lib1532-testutil.Tpo $(DEPDIR)/lib1532-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1532-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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1532-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1532-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1532-warnless.Tpo -c -o ../../lib/lib1532-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1532-warnless.Tpo ../../lib/$(DEPDIR)/lib1532-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1532-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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1532-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1532-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1532-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1532-warnless.Tpo -c -o ../../lib/lib1532-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)/lib1532-warnless.Tpo ../../lib/$(DEPDIR)/lib1532-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1532-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) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1532-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1533-lib1533.o: lib1533.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-lib1533.o -MD -MP -MF $(DEPDIR)/lib1533-lib1533.Tpo -c -o lib1533-lib1533.o `test -f 'lib1533.c' || echo '$(srcdir)/'`lib1533.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-lib1533.Tpo $(DEPDIR)/lib1533-lib1533.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1533.c' object='lib1533-lib1533.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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-lib1533.o `test -f 'lib1533.c' || echo '$(srcdir)/'`lib1533.c
-
-lib1533-lib1533.obj: lib1533.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-lib1533.obj -MD -MP -MF $(DEPDIR)/lib1533-lib1533.Tpo -c -o lib1533-lib1533.obj `if test -f 'lib1533.c'; then $(CYGPATH_W) 'lib1533.c'; else $(CYGPATH_W) '$(srcdir)/lib1533.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-lib1533.Tpo $(DEPDIR)/lib1533-lib1533.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1533.c' object='lib1533-lib1533.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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-lib1533.obj `if test -f 'lib1533.c'; then $(CYGPATH_W) 'lib1533.c'; else $(CYGPATH_W) '$(srcdir)/lib1533.c'; fi`
-
-lib1533-first.o: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-first.o -MD -MP -MF $(DEPDIR)/lib1533-first.Tpo -c -o lib1533-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-first.Tpo $(DEPDIR)/lib1533-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1533-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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1533-first.obj: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-first.obj -MD -MP -MF $(DEPDIR)/lib1533-first.Tpo -c -o lib1533-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)/lib1533-first.Tpo $(DEPDIR)/lib1533-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1533-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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1533-testutil.o: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-testutil.o -MD -MP -MF $(DEPDIR)/lib1533-testutil.Tpo -c -o lib1533-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-testutil.Tpo $(DEPDIR)/lib1533-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1533-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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1533-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-testutil.obj -MD -MP -MF $(DEPDIR)/lib1533-testutil.Tpo -c -o lib1533-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)/lib1533-testutil.Tpo $(DEPDIR)/lib1533-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1533-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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1533-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1533-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1533-warnless.Tpo -c -o ../../lib/lib1533-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1533-warnless.Tpo ../../lib/$(DEPDIR)/lib1533-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1533-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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1533-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1533-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1533-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1533-warnless.Tpo -c -o ../../lib/lib1533-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)/lib1533-warnless.Tpo ../../lib/$(DEPDIR)/lib1533-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1533-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) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1533-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1534-lib1534.o: lib1534.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-lib1534.o -MD -MP -MF $(DEPDIR)/lib1534-lib1534.Tpo -c -o lib1534-lib1534.o `test -f 'lib1534.c' || echo '$(srcdir)/'`lib1534.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-lib1534.Tpo $(DEPDIR)/lib1534-lib1534.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1534.c' object='lib1534-lib1534.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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-lib1534.o `test -f 'lib1534.c' || echo '$(srcdir)/'`lib1534.c
-
-lib1534-lib1534.obj: lib1534.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-lib1534.obj -MD -MP -MF $(DEPDIR)/lib1534-lib1534.Tpo -c -o lib1534-lib1534.obj `if test -f 'lib1534.c'; then $(CYGPATH_W) 'lib1534.c'; else $(CYGPATH_W) '$(srcdir)/lib1534.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-lib1534.Tpo $(DEPDIR)/lib1534-lib1534.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1534.c' object='lib1534-lib1534.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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-lib1534.obj `if test -f 'lib1534.c'; then $(CYGPATH_W) 'lib1534.c'; else $(CYGPATH_W) '$(srcdir)/lib1534.c'; fi`
-
-lib1534-first.o: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-first.o -MD -MP -MF $(DEPDIR)/lib1534-first.Tpo -c -o lib1534-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-first.Tpo $(DEPDIR)/lib1534-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1534-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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1534-first.obj: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-first.obj -MD -MP -MF $(DEPDIR)/lib1534-first.Tpo -c -o lib1534-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)/lib1534-first.Tpo $(DEPDIR)/lib1534-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1534-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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1534-testutil.o: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-testutil.o -MD -MP -MF $(DEPDIR)/lib1534-testutil.Tpo -c -o lib1534-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-testutil.Tpo $(DEPDIR)/lib1534-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1534-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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1534-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-testutil.obj -MD -MP -MF $(DEPDIR)/lib1534-testutil.Tpo -c -o lib1534-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)/lib1534-testutil.Tpo $(DEPDIR)/lib1534-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1534-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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1534-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1534-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1534-warnless.Tpo -c -o ../../lib/lib1534-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1534-warnless.Tpo ../../lib/$(DEPDIR)/lib1534-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1534-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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1534-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1534-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1534-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1534-warnless.Tpo -c -o ../../lib/lib1534-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)/lib1534-warnless.Tpo ../../lib/$(DEPDIR)/lib1534-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1534-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) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1534-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1535-lib1535.o: lib1535.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-lib1535.o -MD -MP -MF $(DEPDIR)/lib1535-lib1535.Tpo -c -o lib1535-lib1535.o `test -f 'lib1535.c' || echo '$(srcdir)/'`lib1535.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-lib1535.Tpo $(DEPDIR)/lib1535-lib1535.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1535.c' object='lib1535-lib1535.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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-lib1535.o `test -f 'lib1535.c' || echo '$(srcdir)/'`lib1535.c
-
-lib1535-lib1535.obj: lib1535.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-lib1535.obj -MD -MP -MF $(DEPDIR)/lib1535-lib1535.Tpo -c -o lib1535-lib1535.obj `if test -f 'lib1535.c'; then $(CYGPATH_W) 'lib1535.c'; else $(CYGPATH_W) '$(srcdir)/lib1535.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-lib1535.Tpo $(DEPDIR)/lib1535-lib1535.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1535.c' object='lib1535-lib1535.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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-lib1535.obj `if test -f 'lib1535.c'; then $(CYGPATH_W) 'lib1535.c'; else $(CYGPATH_W) '$(srcdir)/lib1535.c'; fi`
-
-lib1535-first.o: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-first.o -MD -MP -MF $(DEPDIR)/lib1535-first.Tpo -c -o lib1535-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-first.Tpo $(DEPDIR)/lib1535-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1535-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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1535-first.obj: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-first.obj -MD -MP -MF $(DEPDIR)/lib1535-first.Tpo -c -o lib1535-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)/lib1535-first.Tpo $(DEPDIR)/lib1535-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1535-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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1535-testutil.o: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-testutil.o -MD -MP -MF $(DEPDIR)/lib1535-testutil.Tpo -c -o lib1535-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-testutil.Tpo $(DEPDIR)/lib1535-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1535-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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1535-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-testutil.obj -MD -MP -MF $(DEPDIR)/lib1535-testutil.Tpo -c -o lib1535-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)/lib1535-testutil.Tpo $(DEPDIR)/lib1535-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1535-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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1535-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1535-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1535-warnless.Tpo -c -o ../../lib/lib1535-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1535-warnless.Tpo ../../lib/$(DEPDIR)/lib1535-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1535-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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1535-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1535-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1535-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1535-warnless.Tpo -c -o ../../lib/lib1535-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)/lib1535-warnless.Tpo ../../lib/$(DEPDIR)/lib1535-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1535-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) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1535-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1536-lib1536.o: lib1536.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-lib1536.o -MD -MP -MF $(DEPDIR)/lib1536-lib1536.Tpo -c -o lib1536-lib1536.o `test -f 'lib1536.c' || echo '$(srcdir)/'`lib1536.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-lib1536.Tpo $(DEPDIR)/lib1536-lib1536.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1536.c' object='lib1536-lib1536.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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-lib1536.o `test -f 'lib1536.c' || echo '$(srcdir)/'`lib1536.c
-
-lib1536-lib1536.obj: lib1536.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-lib1536.obj -MD -MP -MF $(DEPDIR)/lib1536-lib1536.Tpo -c -o lib1536-lib1536.obj `if test -f 'lib1536.c'; then $(CYGPATH_W) 'lib1536.c'; else $(CYGPATH_W) '$(srcdir)/lib1536.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-lib1536.Tpo $(DEPDIR)/lib1536-lib1536.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1536.c' object='lib1536-lib1536.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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-lib1536.obj `if test -f 'lib1536.c'; then $(CYGPATH_W) 'lib1536.c'; else $(CYGPATH_W) '$(srcdir)/lib1536.c'; fi`
-
-lib1536-first.o: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-first.o -MD -MP -MF $(DEPDIR)/lib1536-first.Tpo -c -o lib1536-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-first.Tpo $(DEPDIR)/lib1536-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1536-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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1536-first.obj: first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-first.obj -MD -MP -MF $(DEPDIR)/lib1536-first.Tpo -c -o lib1536-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)/lib1536-first.Tpo $(DEPDIR)/lib1536-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1536-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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1536-testutil.o: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-testutil.o -MD -MP -MF $(DEPDIR)/lib1536-testutil.Tpo -c -o lib1536-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-testutil.Tpo $(DEPDIR)/lib1536-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1536-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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1536-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-testutil.obj -MD -MP -MF $(DEPDIR)/lib1536-testutil.Tpo -c -o lib1536-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)/lib1536-testutil.Tpo $(DEPDIR)/lib1536-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1536-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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1536-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1536-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1536-warnless.Tpo -c -o ../../lib/lib1536-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1536-warnless.Tpo ../../lib/$(DEPDIR)/lib1536-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1536-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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1536-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1536-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1536-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1536-warnless.Tpo -c -o ../../lib/lib1536-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)/lib1536-warnless.Tpo ../../lib/$(DEPDIR)/lib1536-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1536-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) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1536-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
index 66628aa..7ae66d7 100644 (file)
@@ -23,8 +23,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect                \
  lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \
  lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515         lib1517 \
  lib1520 \
- lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 lib1533 \
- lib1534 lib1535 lib1536 \
+ lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 \
  lib1900 \
  lib2033
 
@@ -392,26 +391,6 @@ lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1531_LDADD = $(TESTUTIL_LIBS)
 lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
 
-lib1532_SOURCES = lib1532.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1532_LDADD = $(TESTUTIL_LIBS)
-lib1532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1532
-
-lib1533_SOURCES = lib1533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1533_LDADD = $(TESTUTIL_LIBS)
-lib1533_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1533
-
-lib1534_SOURCES = lib1534.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1534_LDADD = $(TESTUTIL_LIBS)
-lib1534_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1534
-
-lib1535_SOURCES = lib1535.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1535_LDADD = $(TESTUTIL_LIBS)
-lib1535_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1535
-
-lib1536_SOURCES = lib1536.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-lib1536_LDADD = $(TESTUTIL_LIBS)
-lib1536_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1536
-
 lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1900_LDADD = $(TESTUTIL_LIBS)
 lib1900_CPPFLAGS = $(AM_CPPFLAGS)
index 73d23a1..f3c4958 100644 (file)
@@ -29,8 +29,8 @@
 
 int test(char *URL)
 {
-  CURL *curls = NULL;
-  CURLM *multi = NULL;
+  CURLcurls = NULL;
+  CURLMmulti = NULL;
   int still_running;
   int i = TEST_ERR_FAILURE;
   int res = 0;
index bd555cb..e4e1a16 100644 (file)
@@ -41,8 +41,8 @@
 
 int test(char *URL)
 {
-  CURL *easy = NULL;
-  CURLM *multi = NULL;
+  CURLeasy = NULL;
+  CURLMmulti = NULL;
   int still_running;
   int res = 0;
 
index 7ab3057..5a7994e 100644 (file)
@@ -68,7 +68,7 @@ int test(char *URL)
    CURLM *mcurl = NULL;
    int still_running = 1;
    struct timeval mp_start;
-   struct curl_slist *rcpt_list = NULL;
+   struct curl_slistrcpt_list = NULL;
 
    curl_global_init(CURL_GLOBAL_DEFAULT);
 
index e1840e7..bec3167 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 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
@@ -26,7 +26,7 @@
 int test(char *URL)
 {
   long unmet;
-  CURL *curl = NULL;
+  CURLcurl = NULL;
   int res = 0;
 
   global_init(CURL_GLOBAL_ALL);
index 7763c22..2fd19bb 100644 (file)
@@ -113,7 +113,7 @@ test_cleanup:
 
 int test(char *URL)
 {
-  CURLM *multi = NULL;
+  CURLMmulti = NULL;
   int res = 0;
   char *address = libtest_arg2;
   char *port = libtest_arg3;
@@ -136,8 +136,7 @@ int test(char *URL)
              "http://testserver.example.com:%s/%s%04d", port, path, i);
 
     /* second request must succeed like the first one */
-    res = do_one_request(multi, target_url, dns_entry);
-    if(res)
+    if((res = do_one_request(multi, target_url, dns_entry)))
       goto test_cleanup;
 
     if(i < count)
index 4d5b0c8..a4ce79b 100644 (file)
@@ -81,8 +81,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 39d51bb..c58ebed 100644 (file)
@@ -56,8 +56,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index b2d2a41..ef66a48 100644 (file)
@@ -54,8 +54,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 5dec7fc..f008cf1 100644 (file)
@@ -55,8 +55,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index a130c49..09af481 100644 (file)
@@ -37,8 +37,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index c63a109..3333ae6 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -36,8 +36,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 6fc69f2..d1ca34c 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, 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
@@ -46,8 +46,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
diff --git a/tests/libtest/lib1532.c b/tests/libtest/lib1532.c
deleted file mode 100644 (file)
index 4a3ff32..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-#include "test.h"
-
-#include "memdebug.h"
-
-/* Test CURLINFO_RESPONSE_CODE */
-
-int test(char *URL)
-{
-  CURL *curl;
-  long httpcode;
-  int res = CURLE_OK;
-
-  global_init(CURL_GLOBAL_ALL);
-
-  easy_init(curl);
-
-  easy_setopt(curl, CURLOPT_URL, URL);
-
-  res = curl_easy_perform(curl);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_perform() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-
-  res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(httpcode != 200) {
-    fprintf(stderr, "%s:%d unexpected response code %ld\n",
-            __FILE__, __LINE__, httpcode);
-    res = CURLE_HTTP_RETURNED_ERROR;
-    goto test_cleanup;
-  }
-
-  /* Test for a regression of github bug 1017 (response code does not reset) */
-  curl_easy_reset(curl);
-
-  res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(httpcode != 0) {
-    fprintf(stderr, "%s:%d curl_easy_reset failed to zero the response code\n"
-            "possible regression of github bug 1017\n", __FILE__, __LINE__);
-    res = CURLE_HTTP_RETURNED_ERROR;
-    goto test_cleanup;
-  }
-
-test_cleanup:
-  curl_easy_cleanup(curl);
-  curl_global_cleanup();
-  return res;
-}
diff --git a/tests/libtest/lib1533.c b/tests/libtest/lib1533.c
deleted file mode 100644 (file)
index ada94b9..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-
-/*
- * This test sends data with CURLOPT_KEEP_SENDING_ON_ERROR.
- * The server responds with an early error response.
- * The test is successful if the connection can be reused for the next request,
- * because this implies that the data has been sent completely to the server.
- */
-
-#include "test.h"
-
-#include "memdebug.h"
-
-struct cb_data {
-  CURL *easy_handle;
-  int response_received;
-  int paused;
-  size_t remaining_bytes;
-};
-
-
-static void reset_data(struct cb_data *data, CURL *curl)
-{
-  data->easy_handle = curl;
-  data->response_received = 0;
-  data->paused = 0;
-  data->remaining_bytes = 3;
-}
-
-
-static size_t read_callback(void *ptr, size_t size, size_t nitems,
-                            void *userdata)
-{
-  struct cb_data *data = (struct cb_data *)userdata;
-
-  /* wait until the server has sent all response headers */
-  if(data->response_received) {
-    size_t totalsize = nitems * size;
-
-    size_t bytes_to_send = data->remaining_bytes;
-    if(bytes_to_send > totalsize) {
-      bytes_to_send = totalsize;
-    }
-
-    memset(ptr, 'a', bytes_to_send);
-    data->remaining_bytes -= bytes_to_send;
-
-    return bytes_to_send;
-  }
-  else {
-    data->paused = 1;
-    return CURL_READFUNC_PAUSE;
-  }
-}
-
-
-static size_t write_callback(char *ptr, size_t size, size_t nmemb,
-                             void *userdata)
-{
-  struct cb_data *data = (struct cb_data *)userdata;
-  size_t totalsize = nmemb * size;
-
-  /* unused parameter */
-  (void)ptr;
-
-  /* all response headers have been received */
-  data->response_received = 1;
-
-  if(data->paused) {
-    /* continue to send request body data */
-    data->paused = 0;
-    curl_easy_pause(data->easy_handle, CURLPAUSE_CONT);
-  }
-
-  return totalsize;
-}
-
-
-static int perform_and_check_connections(CURL *curl, const char *description,
-                                         long expected_connections)
-{
-  CURLcode res;
-  long connections = 0;
-
-  res = curl_easy_perform(curl);
-  if(res != CURLE_OK) {
-    fprintf(stderr, "curl_easy_perform() failed\n");
-    return TEST_ERR_MAJOR_BAD;
-  }
-
-  res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connections);
-  if(res != CURLE_OK) {
-    fprintf(stderr, "curl_easy_getinfo() failed\n");
-    return TEST_ERR_MAJOR_BAD;
-  }
-
-  fprintf(stderr, "%s: expected: %ld connections; actual: %ld connections\n",
-          description, expected_connections, connections);
-
-  if(connections != expected_connections) {
-    return TEST_ERR_FAILURE;
-  }
-
-  return TEST_ERR_SUCCESS;
-}
-
-
-int test(char *URL)
-{
-  struct cb_data data;
-  CURL *curl = NULL;
-  CURLcode res = CURLE_FAILED_INIT;
-
-  if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
-    fprintf(stderr, "curl_global_init() failed\n");
-    return TEST_ERR_MAJOR_BAD;
-  }
-
-  curl = curl_easy_init();
-  if(curl == NULL) {
-    fprintf(stderr, "curl_easy_init() failed\n");
-    curl_global_cleanup();
-    return TEST_ERR_MAJOR_BAD;
-  }
-
-  reset_data(&data, curl);
-
-  test_setopt(curl, CURLOPT_URL, URL);
-  test_setopt(curl, CURLOPT_POST, 1L);
-  test_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE,
-              (curl_off_t)data.remaining_bytes);
-  test_setopt(curl, CURLOPT_VERBOSE, 1L);
-  test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
-  test_setopt(curl, CURLOPT_READDATA, &data);
-  test_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
-  test_setopt(curl, CURLOPT_WRITEDATA, &data);
-
-  res = perform_and_check_connections(curl,
-    "First request without CURLOPT_KEEP_SENDING_ON_ERROR", 1);
-  if(res != TEST_ERR_SUCCESS) {
-    goto test_cleanup;
-  }
-
-  reset_data(&data, curl);
-
-  res = perform_and_check_connections(curl,
-    "Second request without CURLOPT_KEEP_SENDING_ON_ERROR", 1);
-  if(res != TEST_ERR_SUCCESS) {
-    goto test_cleanup;
-  }
-
-  test_setopt(curl, CURLOPT_KEEP_SENDING_ON_ERROR, 1L);
-
-  reset_data(&data, curl);
-
-  res = perform_and_check_connections(curl,
-    "First request with CURLOPT_KEEP_SENDING_ON_ERROR", 1);
-  if(res != TEST_ERR_SUCCESS) {
-    goto test_cleanup;
-  }
-
-  reset_data(&data, curl);
-
-  res = perform_and_check_connections(curl,
-    "Second request with CURLOPT_KEEP_SENDING_ON_ERROR", 0);
-  if(res != TEST_ERR_SUCCESS) {
-    goto test_cleanup;
-  }
-
-  res = TEST_ERR_SUCCESS;
-
-test_cleanup:
-
-  curl_easy_cleanup(curl);
-
-  curl_global_cleanup();
-
-  return (int)res;
-}
-
diff --git a/tests/libtest/lib1534.c b/tests/libtest/lib1534.c
deleted file mode 100644 (file)
index 61e72ab..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-#include "test.h"
-
-#include "memdebug.h"
-
-/* Test CURLINFO_FILETIME */
-
-int test(char *URL)
-{
-  CURL *curl, *dupe = NULL;
-  long filetime;
-  int res = CURLE_OK;
-
-  global_init(CURL_GLOBAL_ALL);
-
-  easy_init(curl);
-
-  /* Test that a filetime is properly initialized on curl_easy_init.
-  */
-
-  res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(filetime != -1) {
-    fprintf(stderr, "%s:%d filetime init failed; expected -1 but is %ld\n",
-            __FILE__, __LINE__, filetime);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-  easy_setopt(curl, CURLOPT_URL, URL);
-  easy_setopt(curl, CURLOPT_FILETIME, 1L);
-
-  res = curl_easy_perform(curl);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_perform() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-
-  /* Test that a filetime is properly set after receiving an HTTP resource.
-  */
-
-  res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(filetime != 30) {
-    fprintf(stderr, "%s:%d filetime of http resource is incorrect; "
-            "expected 30 but is %ld\n",
-            __FILE__, __LINE__, filetime);
-    res = CURLE_HTTP_RETURNED_ERROR;
-    goto test_cleanup;
-  }
-
-  /* Test that a filetime is properly initialized on curl_easy_duphandle.
-  */
-
-  dupe = curl_easy_duphandle(curl);
-  if(!dupe) {
-    fprintf(stderr, "%s:%d curl_easy_duphandle() failed\n",
-            __FILE__, __LINE__);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-  res = curl_easy_getinfo(dupe, CURLINFO_FILETIME, &filetime);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(filetime != -1) {
-    fprintf(stderr, "%s:%d filetime init failed; expected -1 but is %ld\n",
-            __FILE__, __LINE__, filetime);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-
-  /* Test that a filetime is properly initialized on curl_easy_reset.
-  */
-
-  curl_easy_reset(curl);
-
-  res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(filetime != -1) {
-    fprintf(stderr, "%s:%d filetime init failed; expected -1 but is %ld\n",
-            __FILE__, __LINE__, filetime);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-test_cleanup:
-  curl_easy_cleanup(curl);
-  curl_easy_cleanup(dupe);
-  curl_global_cleanup();
-  return res;
-}
diff --git a/tests/libtest/lib1535.c b/tests/libtest/lib1535.c
deleted file mode 100644 (file)
index 32519f2..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-#include "test.h"
-
-#include "memdebug.h"
-
-/* Test CURLINFO_PROTOCOL */
-
-int test(char *URL)
-{
-  CURL *curl, *dupe = NULL;
-  long protocol;
-  int res = CURLE_OK;
-
-  global_init(CURL_GLOBAL_ALL);
-
-  easy_init(curl);
-
-  /* Test that protocol is properly initialized on curl_easy_init.
-  */
-
-  res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(protocol != 0) {
-    fprintf(stderr, "%s:%d protocol init failed; expected 0 but is %ld\n",
-            __FILE__, __LINE__, protocol);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-  easy_setopt(curl, CURLOPT_URL, URL);
-
-  res = curl_easy_perform(curl);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_perform() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-
-  /* Test that a protocol is properly set after receiving an HTTP resource.
-  */
-
-  res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(protocol != CURLPROTO_HTTP) {
-    fprintf(stderr, "%s:%d protocol of http resource is incorrect; "
-            "expected %ld but is %ld\n",
-            __FILE__, __LINE__, CURLPROTO_HTTP, protocol);
-    res = CURLE_HTTP_RETURNED_ERROR;
-    goto test_cleanup;
-  }
-
-  /* Test that a protocol is properly initialized on curl_easy_duphandle.
-  */
-
-  dupe = curl_easy_duphandle(curl);
-  if(!dupe) {
-    fprintf(stderr, "%s:%d curl_easy_duphandle() failed\n",
-            __FILE__, __LINE__);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-  res = curl_easy_getinfo(dupe, CURLINFO_PROTOCOL, &protocol);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(protocol != 0) {
-    fprintf(stderr, "%s:%d protocol init failed; expected 0 but is %ld\n",
-            __FILE__, __LINE__, protocol);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-
-  /* Test that a protocol is properly initialized on curl_easy_reset.
-  */
-
-  curl_easy_reset(curl);
-
-  res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(protocol != 0) {
-    fprintf(stderr, "%s:%d protocol init failed; expected 0 but is %ld\n",
-            __FILE__, __LINE__, protocol);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-test_cleanup:
-  curl_easy_cleanup(curl);
-  curl_easy_cleanup(dupe);
-  curl_global_cleanup();
-  return res;
-}
diff --git a/tests/libtest/lib1536.c b/tests/libtest/lib1536.c
deleted file mode 100644 (file)
index 7f5b614..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-#include "test.h"
-
-#include "memdebug.h"
-
-/* Test CURLINFO_SCHEME */
-
-int test(char *URL)
-{
-  CURL *curl, *dupe = NULL;
-  char *scheme;
-  int res = CURLE_OK;
-
-  global_init(CURL_GLOBAL_ALL);
-
-  easy_init(curl);
-
-  /* Test that scheme is properly initialized on curl_easy_init.
-  */
-
-  res = curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(scheme != NULL) {
-    fprintf(stderr, "%s:%d scheme init failed; expected NULL\n",
-            __FILE__, __LINE__);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-  easy_setopt(curl, CURLOPT_URL, URL);
-
-  res = curl_easy_perform(curl);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_perform() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-
-  /* Test that a scheme is properly set after receiving an HTTP resource.
-  */
-
-  res = curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(memcmp(scheme, "HTTP", 5) != 0) {
-    fprintf(stderr, "%s:%d scheme of http resource is incorrect; "
-            "expected 'HTTP' but is %s\n",
-            __FILE__, __LINE__, CURLPROTO_HTTP,
-            (scheme == NULL ? "NULL" : "invalid"));
-    res = CURLE_HTTP_RETURNED_ERROR;
-    goto test_cleanup;
-  }
-
-  /* Test that a scheme is properly initialized on curl_easy_duphandle.
-  */
-
-  dupe = curl_easy_duphandle(curl);
-  if(!dupe) {
-    fprintf(stderr, "%s:%d curl_easy_duphandle() failed\n",
-            __FILE__, __LINE__);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-  res = curl_easy_getinfo(dupe, CURLINFO_SCHEME, &scheme);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(scheme != 0) {
-    fprintf(stderr, "%s:%d scheme init failed; expected NULL\n",
-            __FILE__, __LINE__);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-
-  /* Test that a scheme is properly initialized on curl_easy_reset.
-  */
-
-  curl_easy_reset(curl);
-
-  res = curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
-  if(res) {
-    fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
-            __FILE__, __LINE__, res, curl_easy_strerror(res));
-    goto test_cleanup;
-  }
-  if(scheme != 0) {
-    fprintf(stderr, "%s:%d scheme init failed; expected NULL\n",
-            __FILE__, __LINE__);
-    res = CURLE_FAILED_INIT;
-    goto test_cleanup;
-  }
-
-test_cleanup:
-  curl_easy_cleanup(curl);
-  curl_easy_cleanup(dupe);
-  curl_global_cleanup();
-  return res;
-}
index d17b24b..43b0598 100644 (file)
@@ -68,8 +68,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 7a23412..2a105f0 100644 (file)
@@ -35,8 +35,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index b8db83c..8de30c2 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -37,7 +37,7 @@ struct userdata {
   int counter;
 };
 
-static int locks[3];
+int lock[3];
 
 /* lock callback */
 static void my_lock(CURL *handle, curl_lock_data data,
@@ -50,7 +50,7 @@ static void my_lock(CURL *handle, curl_lock_data data,
   (void)handle;
   (void)laccess;
 
-  switch(data) {
+  switch (data) {
     case CURL_LOCK_DATA_SHARE:
       what = "share";
       locknum = 0;
@@ -69,11 +69,11 @@ static void my_lock(CURL *handle, curl_lock_data data,
   }
 
   /* detect locking of locked locks */
-  if(locks[locknum]) {
+  if(lock[locknum]) {
     printf("lock: double locked %s\n", what);
     return;
   }
-  locks[locknum]++;
+  lock[locknum]++;
 
   printf("lock:   %-6s [%s]: %d\n", what, user->text, user->counter);
   user->counter++;
@@ -86,7 +86,7 @@ static void my_unlock(CURL *handle, curl_lock_data data, void *useptr)
   struct userdata *user = (struct userdata *)useptr;
   int locknum;
   (void)handle;
-  switch(data) {
+  switch (data) {
     case CURL_LOCK_DATA_SHARE:
       what = "share";
       locknum = 0;
@@ -105,11 +105,11 @@ static void my_unlock(CURL *handle, curl_lock_data data, void *useptr)
   }
 
   /* detect unlocking of unlocked locks */
-  if(!locks[locknum]) {
+  if(!lock[locknum]) {
     printf("unlock: double unlocked %s\n", what);
     return;
   }
-  locks[locknum]--;
+  lock[locknum]--;
 
   printf("unlock: %-6s [%s]: %d\n", what, user->text, user->counter);
   user->counter++;
@@ -195,8 +195,7 @@ int test(char *URL)
 
   /* prepare share */
   printf("SHARE_INIT\n");
-  share = curl_share_init();
-  if(!share) {
+  if((share = curl_share_init()) == NULL) {
     fprintf(stderr, "curl_share_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
@@ -231,8 +230,7 @@ int test(char *URL)
   }
 
   /* initial cookie manipulation */
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_share_cleanup(share);
     curl_global_cleanup();
@@ -277,8 +275,7 @@ int test(char *URL)
 
   /* fetch a another one and save cookies */
   printf("*** run %d\n", i);
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_share_cleanup(share);
     curl_global_cleanup();
@@ -305,8 +302,7 @@ int test(char *URL)
   curl_slist_free_all(headers);
 
   /* load cookies */
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_share_cleanup(share);
     curl_global_cleanup();
index ebe897a..7487992 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -29,8 +29,8 @@
 
 int test(char *URL)
 {
-  CURL *curls = NULL;
-  CURLM *multi = NULL;
+  CURLcurls = NULL;
+  CURLMmulti = NULL;
   int still_running;
   int i = -1;
   int res = 0;
index 1f6c683..cb60ce1 100644 (file)
@@ -62,8 +62,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index a2522eb..085a975 100644 (file)
@@ -122,8 +122,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 68588cf..cb5296e 100644 (file)
@@ -68,8 +68,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 2467bf0..0b7ae6f 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 7c34bc4..58091ef 100644 (file)
@@ -42,8 +42,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 7b33d52..f516d09 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 6fb1787..d3e6e44 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 00c54c4..9faf262 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 22162ff..2f68ebd 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -116,12 +116,6 @@ static const char * const dates[]={
   "20111323 12:34:56",
   "20110623 12:34:79",
   "Wed, 31 Dec 2008 23:59:60 GMT", /* leap second */
-  "20110623 12:3",
-  "20110623 1:3",
-  "20110623 1:30",
-  "20110623 12:12:3",
-  "20110623 01:12:3",
-  "20110623 01:99:30",
   NULL
 };
 
index 960fcfc..e37a777 100644 (file)
@@ -489,8 +489,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     close_file_descriptors();
     curl_global_cleanup();
index 5c55aeb..6e30598 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 72b0875..b5a71da 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index b7efca0..40f4def 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 44aa2e2..f326469 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 08fd34d..3440562 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 6d7c3e4..c156141 100644 (file)
@@ -491,8 +491,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     close_file_descriptors();
     curl_global_cleanup();
index 7c03dd2..9f0f8fa 100644 (file)
@@ -35,15 +35,14 @@ int test(char *URL)
      return TEST_ERR_MAJOR_BAD;
    }
 
-   curl = curl_easy_init();
-   if(!curl) {
+   if((curl = curl_easy_init()) == NULL) {
      fprintf(stderr, "curl_easy_init() failed\n");
      curl_global_cleanup();
      return TEST_ERR_MAJOR_BAD;
    }
 
    /*
-    * Begin with curl set to use a single CWD to the URL's directory.
+    * Begin with cURL set to use a single CWD to the URL's directory.
     */
    test_setopt(curl, CURLOPT_URL, URL);
    test_setopt(curl, CURLOPT_VERBOSE, 1L);
@@ -54,7 +53,7 @@ int test(char *URL)
    /*
     * Change the FTP_FILEMETHOD option to use full paths rather than a CWD
     * command.  Alter the URL's path a bit, appending a "./".  Use an innocuous
-    * QUOTE command, after which curl will CWD to ftp_conn->entrypath and then
+    * QUOTE command, after which cURL will CWD to ftp_conn->entrypath and then
     * (on the next call to ftp_statemach_act) find a non-zero ftpconn->dirdepth
     * even though no directories are stored in the ftpconn->dirs array (after a
     * call to freedirs).
@@ -66,7 +65,7 @@ int test(char *URL)
      return TEST_ERR_MAJOR_BAD;
    }
 
-   slist = curl_slist_append(NULL, "SYST");
+   slist = curl_slist_append (NULL, "SYST");
    if(slist == NULL) {
      free(newURL);
      curl_easy_cleanup(curl);
index f5d89c4..9b3b5a4 100644 (file)
@@ -48,7 +48,7 @@
 
 CURL *eh[NUM_HANDLES];
 
-static int init(int num, CURLM *cm, const char *url, const char *userpwd,
+static int init(int num, CURLM *cm, const char* url, const char* userpwd,
                 struct curl_slist *headers)
 {
   int res = 0;
@@ -99,7 +99,7 @@ init_failed:
   return res; /* failure */
 }
 
-static int loop(int num, CURLM *cm, const char *url, const char *userpwd,
+static int loop(int num, CURLM *cm, const char* url, const char* userpwd,
                 struct curl_slist *headers)
 {
   CURLMsg *msg;
index 3e9cb3c..604446a 100644 (file)
@@ -79,8 +79,7 @@ int test(char *URL)
   }
 
   /* get a curl handle */
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     fclose(hd_src);
index 4016874..c82ccd5 100644 (file)
@@ -42,8 +42,7 @@ int test(char *URL)
   }
 
   /* get a curl handle */
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 6d2532d..8fec052 100644 (file)
@@ -36,15 +36,14 @@ int test(char *URL)
   char *s;
   (void)URL;
 
-  easy = curl_easy_init();
-  if(!easy) {
+  if((easy = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     return TEST_ERR_MAJOR_BAD;
   }
 
   asize = (int)sizeof(a);
 
-  s = curl_easy_escape(easy, (char *)a, asize);
+  s = curl_easy_escape(easy, (char*)a, asize);
 
   if(s)
     printf("%s\n", s);
index 28eacda..4b08a0a 100644 (file)
@@ -47,8 +47,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index ce967c0..4ec42a3 100644 (file)
@@ -90,8 +90,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 1d832b5..1370295 100644 (file)
@@ -38,8 +38,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index c1266c7..9fe4a71 100644 (file)
@@ -89,7 +89,7 @@ int my_trace(CURL *handle, curl_infotype type,
   const char *text;
   (void)handle; /* prevent compiler warning */
 
-  switch(type) {
+  switch (type) {
   case CURLINFO_TEXT:
     fprintf(stderr, "== Info: %s", (char *)data);
   default: /* in case a new one is introduced to shock us */
@@ -147,11 +147,11 @@ static size_t write_callback(void *ptr, size_t size, size_t nmemb,
 }
 
 
-static curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp)
+static curlioerr ioctl_callback(CURL * handle, int cmd, void *clientp)
 {
   (void)clientp;
   if(cmd == CURLIOCMD_RESTARTREAD) {
-    printf("APPLICATION: received a CURLIOCMD_RESTARTREAD request\n");
+    printf("APPLICATION: recieved a CURLIOCMD_RESTARTREAD request\n");
     printf("APPLICATION: ** REWINDING! **\n");
     current_offset = 0;
     return CURLIOE_OK;
@@ -172,8 +172,7 @@ int test(char *URL)
 
   config.trace_ascii = 1; /* enable ascii tracing */
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 288f4c1..9afaad4 100644 (file)
@@ -67,8 +67,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 0837462..803df26 100644 (file)
@@ -162,8 +162,7 @@ static int once(char *URL, bool oldstyle)
   if(formrc)
     printf("curl_formadd(4) = %d\n", (int)formrc);
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_formfree(formpost);
     curl_global_cleanup();
index f06c529..5279353 100644 (file)
@@ -45,8 +45,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
@@ -77,10 +76,11 @@ int test(char *URL)
 
     if(!res) {
       /* we assume that sending always work */
+      size_t total=0;
 
       do {
         /* busy-read like crazy */
-        res = curl_easy_recv(curl, buf, sizeof(buf), &iolen);
+        res = curl_easy_recv(curl, buf, 1024, &iolen);
 
 #ifdef TPF
         sleep(1); /* avoid ctl-10 dump */
@@ -91,12 +91,10 @@ int test(char *URL)
           if(!write(STDOUT_FILENO, buf, iolen))
             break;
         }
+        total += iolen;
 
-      } while((res == CURLE_OK && iolen != 0) || (res == CURLE_AGAIN));
+      } while(((res == CURLE_OK) || (res == CURLE_AGAIN)) && (total < 129));
     }
-
-    if(res != CURLE_OK || iolen != 0)
-      return TEST_ERR_FAILURE;
   }
 
 test_cleanup:
index 68fdfa2..5bdb8ab 100644 (file)
@@ -1345,6 +1345,7 @@ static int test_curl_off_t_formatting(void)
   num_cofft_tests = i;
 
 #endif
+  /* !checksrc! enable LONGLINE */
 
   for(i=1; i<=num_cofft_tests; i++) {
 
@@ -1373,31 +1374,16 @@ static int test_curl_off_t_formatting(void)
   return failed;
 }
 
-static int _string_check(int linenumber, char *buf, const char *buf2)
+static int string_check(char *buf, const char *buf2)
 {
   if(strcmp(buf, buf2)) {
     /* they shouldn't differ */
-    printf("sprintf line %d failed:\nwe      '%s'\nsystem: '%s'\n",
-           linenumber, buf, buf2);
+    printf("sprintf failed:\nwe '%s'\nsystem: '%s'\n",
+           buf, buf2);
     return 1;
   }
   return 0;
 }
-#define string_check(x,y) _string_check(__LINE__, x, y)
-
-static int _strlen_check(int linenumber, char *buf, size_t len)
-{
-  size_t buflen = strlen(buf);
-  if(len != buflen) {
-    /* they shouldn't differ */
-    printf("sprintf strlen:%d failed:\nwe '%d'\nsystem: '%d'\n",
-           linenumber, buflen, len);
-    return 1;
-  }
-  return 0;
-}
-
-#define strlen_check(x,y) _strlen_check(__LINE__, x, y)
 
 /*
  * The output strings in this test need to have been verified with a system
@@ -1436,228 +1422,11 @@ static int test_string_formatting(void)
   return errors;
 }
 
-static int test_weird_arguments(void)
-{
-  int errors = 0;
-  char buf[256];
-  int rc;
-
-  /* MAX_PARAMETERS is 128, try exact 128! */
-  rc = curl_msnprintf(buf, sizeof(buf),
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 1 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 2 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 3 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 4 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 5 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 6 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 7 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 8 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 9 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 10 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 11 */
-                      "%d%d%d%d%d%d%d%d"     /* 8 */
-                      ,
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 1 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 2 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 3 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 4 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 5 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 6 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 7 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 8 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 9 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 10 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 11 */
-                      0, 1, 2, 3, 4, 5, 6, 7); /* 8 */
-
-  if(rc != 128) {
-    printf("curl_mprintf() returned %d and not 128!\n", rc);
-    errors++;
-  }
-
-  errors += string_check(buf,
-                         "0123456789" /* 10 */
-                         "0123456789" /* 10 1 */
-                         "0123456789" /* 10 2 */
-                         "0123456789" /* 10 3 */
-                         "0123456789" /* 10 4 */
-                         "0123456789" /* 10 5 */
-                         "0123456789" /* 10 6 */
-                         "0123456789" /* 10 7 */
-                         "0123456789" /* 10 8 */
-                         "0123456789" /* 10 9 */
-                         "0123456789" /* 10 10*/
-                         "0123456789" /* 10 11 */
-                         "01234567"   /* 8 */
-    );
-
-  /* MAX_PARAMETERS is 128, try more! */
-  buf[0] = 0;
-  rc = curl_msnprintf(buf, sizeof(buf),
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 1 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 2 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 3 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 4 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 5 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 6 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 7 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 8 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 9 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 10 */
-                      "%d%d%d%d%d%d%d%d%d%d" /* 10 11 */
-                      "%d%d%d%d%d%d%d%d%d"   /* 9 */
-                      ,
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 1 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 2 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 3 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 4 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 5 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 6 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 7 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 8 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 9 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 10 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 11 */
-                      0, 1, 2, 3, 4, 5, 6, 7, 8);   /* 9 */
-
-  if(rc != -1) {
-    printf("curl_mprintf() returned %d and not -1!\n", rc);
-    errors++;
-  }
-
-  errors += string_check(buf, "");
-
-  if(errors)
-    printf("Some curl_mprintf() weird arguments tests failed!\n");
-
-  return errors;
-}
-
-/* DBL_MAX value from Linux */
-#define MAXIMIZE -1.7976931348623157081452E+308
-
-static int test_float_formatting(void)
-{
-  int errors = 0;
-  char buf[512]; /* larger than max float size */
-  curl_msnprintf(buf, sizeof(buf), "%f", 9.0);
-  errors += string_check(buf, "9.000000");
-
-  curl_msnprintf(buf, sizeof(buf), "%.1f", 9.1);
-  errors += string_check(buf, "9.1");
-
-  curl_msnprintf(buf, sizeof(buf), "%.2f", 9.1);
-  errors += string_check(buf, "9.10");
-
-  curl_msnprintf(buf, sizeof(buf), "%.0f", 9.1);
-  errors += string_check(buf, "9");
-
-  curl_msnprintf(buf, sizeof(buf), "%0f", 9.1);
-  errors += string_check(buf, "9.100000");
-
-  curl_msnprintf(buf, sizeof(buf), "%10f", 9.1);
-  errors += string_check(buf, "  9.100000");
-
-  curl_msnprintf(buf, sizeof(buf), "%10.3f", 9.1);
-  errors += string_check(buf, "     9.100");
-
-  curl_msnprintf(buf, sizeof(buf), "%-10.3f", 9.1);
-  errors += string_check(buf, "9.100     ");
-
-  curl_msnprintf(buf, sizeof(buf), "%-10.3f", 9.123456);
-  errors += string_check(buf, "9.123     ");
-
-  curl_msnprintf(buf, sizeof(buf), "%.-2f", 9.1);
-  errors += string_check(buf, "9.100000");
-
-  curl_msnprintf(buf, sizeof(buf), "%*f", 10, 9.1);
-  errors += string_check(buf, "  9.100000");
-
-  curl_msnprintf(buf, sizeof(buf), "%*f", 3, 9.1);
-  errors += string_check(buf, "9.100000");
-
-  curl_msnprintf(buf, sizeof(buf), "%*f", 6, 9.2987654);
-  errors += string_check(buf, "9.298765");
-
-  curl_msnprintf(buf, sizeof(buf), "%*f", 6, 9.298765);
-  errors += string_check(buf, "9.298765");
-
-  curl_msnprintf(buf, sizeof(buf), "%*f", 6, 9.29876);
-  errors += string_check(buf, "9.298760");
-
-  curl_msnprintf(buf, sizeof(buf), "%.*f", 6, 9.2987654);
-  errors += string_check(buf, "9.298765");
-  curl_msnprintf(buf, sizeof(buf), "%.*f", 5, 9.2987654);
-  errors += string_check(buf, "9.29877");
-  curl_msnprintf(buf, sizeof(buf), "%.*f", 4, 9.2987654);
-  errors += string_check(buf, "9.2988");
-  curl_msnprintf(buf, sizeof(buf), "%.*f", 3, 9.2987654);
-  errors += string_check(buf, "9.299");
-  curl_msnprintf(buf, sizeof(buf), "%.*f", 2, 9.2987654);
-  errors += string_check(buf, "9.30");
-  curl_msnprintf(buf, sizeof(buf), "%.*f", 1, 9.2987654);
-  errors += string_check(buf, "9.3");
-  curl_msnprintf(buf, sizeof(buf), "%.*f", 0, 9.2987654);
-  errors += string_check(buf, "9");
-
-  /* very large precisions easily turn into system specific outputs so we only
-     check the output buffer length here as we know the internal limit */
-
-  curl_msnprintf(buf, sizeof(buf), "%.*f", (1<<30), 9.2987654);
-  errors += strlen_check(buf, 325);
-
-  curl_msnprintf(buf, sizeof(buf), "%10000.10000f", 9.2987654);
-  errors += strlen_check(buf, 325);
-
-  curl_msnprintf(buf, sizeof(buf), "%240.10000f",
-                 123456789123456789123456789.2987654);
-  errors += strlen_check(buf, 325);
-
-  /* 1<<31 turns negative (-2147483648) when used signed */
-  curl_msnprintf(buf, sizeof(buf), "%*f", (1<<31), 9.1);
-  errors += string_check(buf, "9.100000");
-
-  /* curl_msnprintf() limits a single float output to 325 bytes maximum
-     width */
-  curl_msnprintf(buf, sizeof(buf), "%*f", (1<<30), 9.1);
-  errors += string_check(buf, "                                                                                                                                                                                                                                                                                                                             9.100000");
-  curl_msnprintf(buf, sizeof(buf), "%100000f", 9.1);
-  errors += string_check(buf, "                                                                                                                                                                                                                                                                                                                             9.100000");
-
-  curl_msnprintf(buf, sizeof(buf), "%f", MAXIMIZE);
-  errors += strlen_check(buf, 317);
-
-  curl_msnprintf(buf, 2, "%f", MAXIMIZE);
-  errors += strlen_check(buf, 1);
-  curl_msnprintf(buf, 3, "%f", MAXIMIZE);
-  errors += strlen_check(buf, 2);
-  curl_msnprintf(buf, 4, "%f", MAXIMIZE);
-  errors += strlen_check(buf, 3);
-  curl_msnprintf(buf, 5, "%f", MAXIMIZE);
-  errors += strlen_check(buf, 4);
-  curl_msnprintf(buf, 6, "%f", MAXIMIZE);
-  errors += strlen_check(buf, 5);
-
-  if(!errors)
-    printf("All float strings tests OK!\n");
-  else
-    printf("test_float_formatting Failed!\n");
-
-  return errors;
-}
-/* !checksrc! enable LONGLINE */
-
 int test(char *URL)
 {
   int errors = 0;
   (void)URL; /* not used */
 
-  errors += test_weird_arguments();
-
   errors += test_unsigned_short_formatting();
 
   errors += test_signed_short_formatting();
@@ -1674,8 +1443,6 @@ int test(char *URL)
 
   errors += test_string_formatting();
 
-  errors += test_float_formatting();
-
   if(errors)
     return TEST_ERR_MAJOR_BAD;
   else
index 285b9f5..819b507 100644 (file)
@@ -46,8 +46,7 @@ int test(char *URL)
   }
 
   /* get a curl handle */
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index ecf8c55..94a91d5 100644 (file)
@@ -35,8 +35,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index f9f55e3..38e0c0b 100644 (file)
@@ -37,8 +37,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 0cdef81..9b3a077 100644 (file)
@@ -55,8 +55,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
@@ -67,8 +66,7 @@ int test(char *URL)
 
   test_setopt(curl, CURLOPT_URL, URL);
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -102,8 +100,7 @@ int test(char *URL)
   sdpf = NULL;
 
   /* Make sure we can do a normal request now */
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -118,8 +115,7 @@ int test(char *URL)
 
   /* Now do a POST style one */
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -148,8 +144,7 @@ int test(char *URL)
   custom_headers = NULL;
 
   /* Make sure we can do a normal request now */
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
index d7381d9..55282b6 100644 (file)
@@ -53,8 +53,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     fclose(idfile);
@@ -78,8 +77,7 @@ int test(char *URL)
 
   /* Go through the various Session IDs */
   for(i = 0; i < 3; i++) {
-    stream_uri = suburl(URL, request++);
-    if(!stream_uri) {
+    if((stream_uri = suburl(URL, request++)) == NULL) {
       res = TEST_ERR_MAJOR_BAD;
       goto test_cleanup;
     }
@@ -98,8 +96,7 @@ int test(char *URL)
     fprintf(idfile, "Got Session ID: [%s]\n", rtsp_session_id);
     rtsp_session_id = NULL;
 
-    stream_uri = suburl(URL, request++);
-    if(!stream_uri) {
+    if((stream_uri = suburl(URL, request++)) == NULL) {
       res = TEST_ERR_MAJOR_BAD;
       goto test_cleanup;
     }
index 9d9b5a1..2dc57b7 100644 (file)
@@ -40,8 +40,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
@@ -55,8 +54,7 @@ int test(char *URL)
 
   test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -76,8 +74,7 @@ int test(char *URL)
                     "RAW/RAW/UDP;unicast;client_port=3056-3057");
   test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -91,8 +88,7 @@ int test(char *URL)
 
   test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_PLAY);
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
index 40a78fa..ad6c366 100644 (file)
@@ -50,8 +50,7 @@ static const char *RTP_DATA = "$_1234\n\0asdf";
 
 static int rtp_packet_count = 0;
 
-static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream)
-{
+static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) {
   char *data = (char *)ptr;
   int channel = RTP_PKT_CHANNEL(data);
   int message_size;
@@ -118,8 +117,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     fclose(protofile);
     curl_global_cleanup();
@@ -127,8 +125,7 @@ int test(char *URL)
   }
   test_setopt(curl, CURLOPT_URL, URL);
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -149,8 +146,7 @@ int test(char *URL)
     goto test_cleanup;
 
   /* This PLAY starts the interleave */
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -164,8 +160,7 @@ int test(char *URL)
     goto test_cleanup;
 
   /* The DESCRIBE request will try to consume data after the Content */
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -178,8 +173,7 @@ int test(char *URL)
   if(res)
     goto test_cleanup;
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
index 47a9da5..3475e80 100644 (file)
@@ -55,8 +55,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
@@ -70,8 +69,7 @@ int test(char *URL)
   test_setopt(curl, CURLOPT_URL, URL);
 
   /* SETUP */
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -85,8 +83,7 @@ int test(char *URL)
   if(res)
     goto test_cleanup;
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -120,8 +117,7 @@ int test(char *URL)
   paramsf = NULL;
 
   /* Heartbeat GET_PARAMETERS */
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -135,8 +131,7 @@ int test(char *URL)
 
   /* POST GET_PARAMETERS */
 
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
@@ -154,8 +149,7 @@ int test(char *URL)
   test_setopt(curl, CURLOPT_POSTFIELDS, NULL);
 
   /* Make sure we can do a normal request now */
-  stream_uri = suburl(URL, request++);
-  if(!stream_uri) {
+  if((stream_uri = suburl(URL, request++)) == NULL) {
     res = TEST_ERR_MAJOR_BAD;
     goto test_cleanup;
   }
index a51cda0..9f9222b 100644 (file)
@@ -40,8 +40,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 9603b58..5e01d36 100644 (file)
@@ -58,8 +58,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 61aa4f5..aae299c 100644 (file)
@@ -97,8 +97,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index eec0455..444b416 100644 (file)
@@ -145,10 +145,10 @@ static int curlTimerCallback(CURLM *multi, long timeout_ms, void *userp)
 /**
  * Check for curl completion.
  */
-static int checkForCompletion(CURLM *curl, int *success)
+static int checkForCompletion(CURLM* curl, int* success)
 {
   int numMessages;
-  CURLMsg *message;
+  CURLMsgmessage;
   int result = 0;
   *success = 0;
   while((message = curl_multi_info_read(curl, &numMessages)) != NULL) {
index 5b11fab..9af48d2 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -33,8 +33,8 @@
 int test(char *URL)
 {
   int stillRunning;
-  CURLM *multiHandle = NULL;
-  CURL *curl = NULL;
+  CURLMmultiHandle = NULL;
+  CURLcurl = NULL;
   int res = 0;
 
   global_init(CURL_GLOBAL_ALL);
index a4fc6fe..eb7cfa0 100644 (file)
@@ -45,7 +45,7 @@ static void my_lock(CURL *handle, curl_lock_data data,
   (void)handle;
   (void)laccess;
 
-  switch(data) {
+  switch (data) {
     case CURL_LOCK_DATA_SHARE:
       what = "share";
       break;
@@ -72,7 +72,7 @@ static void my_unlock(CURL *handle, curl_lock_data data, void *useptr)
   const char *what;
   struct userdata *user = (struct userdata *)useptr;
   (void)handle;
-  switch(data) {
+  switch ( data) {
     case CURL_LOCK_DATA_SHARE:
       what = "share";
       break;
@@ -101,8 +101,7 @@ static void *fire(void *ptr)
   CURL *curl;
   int i=0;
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     return NULL;
   }
@@ -149,8 +148,7 @@ int test(char *URL)
 
   /* prepare share */
   printf("SHARE_INIT\n");
-  share = curl_share_init();
-  if(!share) {
+  if((share = curl_share_init()) == NULL) {
     fprintf(stderr, "curl_share_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
@@ -199,8 +197,7 @@ int test(char *URL)
 
   /* fetch a another one */
   printf("*** run %d\n", i);
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_share_cleanup(share);
     curl_global_cleanup();
index cc3afdf..7b863cc 100644 (file)
@@ -46,8 +46,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index c27e60b..b107f29 100644 (file)
@@ -33,8 +33,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 843fb21..1dee0b9 100644 (file)
@@ -50,8 +50,7 @@ int test(char *URL)
     return TEST_ERR_MAJOR_BAD;
   }
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 139dab9..994f9de 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include "test.h"
+#include "strequal.h"
 #include "memdebug.h"
 
 static CURLcode send_request(CURL *curl, const char *url, int seq,
@@ -32,7 +33,7 @@ static CURLcode send_request(CURL *curl, const char *url, int seq,
 {
   CURLcode res;
   size_t len = strlen(url) + 4 + 1;
-  char *full_url = malloc(len);
+  charfull_url = malloc(len);
   if(!full_url) {
     fprintf(stderr, "Not enough memory for full url\n");
     return CURLE_OUT_OF_MEMORY;
@@ -71,11 +72,11 @@ static long parse_auth_name(const char *arg)
 {
   if(!arg)
     return CURLAUTH_NONE;
-  if(curl_strequal(arg, "basic"))
+  if(strequal(arg, "basic"))
     return CURLAUTH_BASIC;
-  if(curl_strequal(arg, "digest"))
+  if(strequal(arg, "digest"))
     return CURLAUTH_DIGEST;
-  if(curl_strequal(arg, "ntlm"))
+  if(strequal(arg, "ntlm"))
     return CURLAUTH_NTLM;
   return CURLAUTH_NONE;
 }
@@ -101,8 +102,7 @@ int test(char *url)
 
   /* Send wrong password, then right password */
 
-  curl = curl_easy_init();
-  if(!curl) {
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
@@ -121,8 +121,8 @@ int test(char *url)
   curl_easy_cleanup(curl);
 
   /* Send wrong password twice, then right password */
-  curl = curl_easy_init();
-  if(!curl) {
+
+  if((curl = curl_easy_init()) == NULL) {
     fprintf(stderr, "curl_easy_init() failed\n");
     curl_global_cleanup();
     return TEST_ERR_MAJOR_BAD;
index 40a837c..736222d 100644 (file)
@@ -37,7 +37,7 @@ static CURL *easy[MAX_EASY_HANDLES];
 static curl_socket_t sockets[MAX_EASY_HANDLES];
 static int res = 0;
 
-static size_t callback(char *ptr, size_t size, size_t nmemb, void *data)
+static size_t callback(char* ptr, size_t size, size_t nmemb, void* data)
 {
   ssize_t idx = ((CURL **) data) - easy;
   curl_socket_t sock;
@@ -104,7 +104,7 @@ int test(char *url)
   int num_handles = 0;
   enum HandleState state = ReadyForNewHandle;
   size_t urllen = strlen(url) + 4 + 1;
-  char *full_url = malloc(urllen);
+  charfull_url = malloc(urllen);
 
   start_test_timing();
 
index 3da03b8..9fd33aa 100644 (file)
@@ -20,8 +20,6 @@
  *
  ***************************************************************************/
 
-/* !checksrc! disable ASSIGNWITHINCONDITION all */
-
 /* Now include the curl_setup.h file from libcurl's private libdir (the source
    version, but that might include "curl_config.h" from the build dir so we
    need both of them in the include path), so that we get good in-depth
index 5eeeeb6..958719f 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 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
@@ -110,7 +110,7 @@ int libtest_debug_cb(CURL *handle, curl_infotype type,
              now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec);
   }
 
-  switch(type) {
+  switch (type) {
   case CURLINFO_TEXT:
     fprintf(stderr, "%s== Info: %s", timestr, (char *)data);
   default: /* in case a new one is introduced to shock us */
index 1cc47eb..fc6e1e3 100644 (file)
@@ -39,9 +39,8 @@
 use strict;
 use warnings;
 
-# we may get the dir roots pointed out
+# we may get the dir root pointed out
 my $root=$ARGV[0] || ".";
-my $buildroot=$ARGV[1] || ".";
 my $syms = "$root/docs/libcurl/symbols-in-versions";
 my $curlh = "$root/include/curl/curl.h";
 my $errors=0;
@@ -148,10 +147,10 @@ my %opts = (
     '-N, --buffer' => 6,
     '--sessionid' => 6,
 
-    # deprecated options do not need to be in tool_help.c nor curl.1
-    '--krb4' => 6,
-    '--ftp-ssl' => 6,
-    '--ftp-ssl-reqd' => 6,
+    # deprecated options do not need to be in curl -h output
+    '--krb4' => 4,
+    '--ftp-ssl' => 4,
+    '--ftp-ssl-reqd' => 4,
 
     # for tests and debug only, can remain hidden
     '--test-event' => 6,
@@ -197,7 +196,7 @@ close(R);
 
 #########################################################################
 # parse the curl.1 man page, extract all documented command line options
-open(R, "<$buildroot/docs/curl.1") ||
+open(R, "<$root/docs/curl.1") ||
     die "no input file";
 my @manpage; # store all parsed parameters
 while(<R>) {
index 10a87aa..391ef6c 100644 (file)
@@ -20,7 +20,7 @@
 #
 ###########################################################################
 
-# This Perl package helps with path transforming when running curl tests on
+# This Perl package helps with path transforming when running cURL tests on
 # Win32 platform with Msys or Cygwin.
 # Three main functions 'sys_native_abs_path', 'sys_native_path' and
 # 'build_sys_abs_path' autodetect format of given pathnames. Following formats
index 692e11d..48b1b20 100644 (file)
Binary files a/tests/runtests.pdf and b/tests/runtests.pdf differ
index 583ba3b..b8497f9 100755 (executable)
@@ -2653,7 +2653,7 @@ sub checksystem {
     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 ":"");
+    logmsg sprintf("%s\n", $ftp_ipv6?"FTP-IPv6 ":"OFF");
 
     logmsg sprintf("* Env: %s%s", $valgrind?"Valgrind ":"",
                    $run_event_based?"event-based ":"");
@@ -3594,7 +3594,7 @@ sub singletest {
             $usevalgrind = 1;
             my $valgrindcmd = "$valgrind ";
             $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
-            $valgrindcmd .= "--quiet --leak-check=yes ";
+            $valgrindcmd .= "--leak-check=yes ";
             $valgrindcmd .= "--suppressions=$srcdir/valgrind.supp ";
            # $valgrindcmd .= "--gen-suppressions=all ";
             $valgrindcmd .= "--num-callers=16 ";
index 7981975..77fbc31 100644 (file)
@@ -123,6 +123,7 @@ PROGRAMS = $(noinst_PROGRAMS)
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = ../../lib/fake_ntlm-mprintf.$(OBJEXT) \
        ../../lib/fake_ntlm-nonblock.$(OBJEXT) \
+       ../../lib/fake_ntlm-strequal.$(OBJEXT) \
        ../../lib/fake_ntlm-strtoofft.$(OBJEXT) \
        ../../lib/fake_ntlm-timeval.$(OBJEXT) \
        ../../lib/fake_ntlm-warnless.$(OBJEXT)
@@ -145,6 +146,7 @@ fake_ntlm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am__objects_5 = ../../lib/getpart-mprintf.$(OBJEXT) \
        ../../lib/getpart-nonblock.$(OBJEXT) \
+       ../../lib/getpart-strequal.$(OBJEXT) \
        ../../lib/getpart-strtoofft.$(OBJEXT) \
        ../../lib/getpart-timeval.$(OBJEXT) \
        ../../lib/getpart-warnless.$(OBJEXT)
@@ -160,6 +162,7 @@ getpart_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am__objects_7 = ../../lib/resolve-mprintf.$(OBJEXT) \
        ../../lib/resolve-nonblock.$(OBJEXT) \
+       ../../lib/resolve-strequal.$(OBJEXT) \
        ../../lib/resolve-strtoofft.$(OBJEXT) \
        ../../lib/resolve-timeval.$(OBJEXT) \
        ../../lib/resolve-warnless.$(OBJEXT)
@@ -176,6 +179,7 @@ resolve_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am__objects_10 = ../../lib/rtspd-mprintf.$(OBJEXT) \
        ../../lib/rtspd-nonblock.$(OBJEXT) \
+       ../../lib/rtspd-strequal.$(OBJEXT) \
        ../../lib/rtspd-strtoofft.$(OBJEXT) \
        ../../lib/rtspd-timeval.$(OBJEXT) \
        ../../lib/rtspd-warnless.$(OBJEXT)
@@ -192,6 +196,7 @@ rtspd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am__objects_13 = ../../lib/sockfilt-mprintf.$(OBJEXT) \
        ../../lib/sockfilt-nonblock.$(OBJEXT) \
+       ../../lib/sockfilt-strequal.$(OBJEXT) \
        ../../lib/sockfilt-strtoofft.$(OBJEXT) \
        ../../lib/sockfilt-timeval.$(OBJEXT) \
        ../../lib/sockfilt-warnless.$(OBJEXT)
@@ -210,6 +215,7 @@ sockfilt_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am__objects_16 = ../../lib/sws-mprintf.$(OBJEXT) \
        ../../lib/sws-nonblock.$(OBJEXT) \
+       ../../lib/sws-strequal.$(OBJEXT) \
        ../../lib/sws-strtoofft.$(OBJEXT) \
        ../../lib/sws-timeval.$(OBJEXT) \
        ../../lib/sws-warnless.$(OBJEXT)
@@ -226,6 +232,7 @@ sws_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am__objects_19 = ../../lib/tftpd-mprintf.$(OBJEXT) \
        ../../lib/tftpd-nonblock.$(OBJEXT) \
+       ../../lib/tftpd-strequal.$(OBJEXT) \
        ../../lib/tftpd-strtoofft.$(OBJEXT) \
        ../../lib/tftpd-timeval.$(OBJEXT) \
        ../../lib/tftpd-warnless.$(OBJEXT)
@@ -550,6 +557,7 @@ AUTOMAKE_OPTIONS = foreign nostdinc
 CURLX_SRCS = \
  ../../lib/mprintf.c \
  ../../lib/nonblock.c \
+ ../../lib/strequal.c \
  ../../lib/strtoofft.c \
  ../../lib/timeval.c \
  ../../lib/warnless.c
@@ -557,6 +565,7 @@ CURLX_SRCS = \
 CURLX_HDRS = \
  ../../lib/curlx.h \
  ../../lib/nonblock.h \
+ ../../lib/strequal.h \
  ../../lib/strtoofft.h \
  ../../lib/timeval.h \
  ../../lib/warnless.h
@@ -672,6 +681,8 @@ clean-noinstPROGRAMS:
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/fake_ntlm-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/fake_ntlm-strequal.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/fake_ntlm-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/fake_ntlm-timeval.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -690,6 +701,8 @@ fake_ntlm$(EXEEXT): $(fake_ntlm_OBJECTS) $(fake_ntlm_DEPENDENCIES) $(EXTRA_fake_
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/getpart-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/getpart-strequal.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/getpart-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/getpart-timeval.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -708,6 +721,8 @@ getpart$(EXEEXT): $(getpart_OBJECTS) $(getpart_DEPENDENCIES) $(EXTRA_getpart_DEP
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/resolve-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/resolve-strequal.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/resolve-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/resolve-timeval.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -726,6 +741,8 @@ resolve$(EXEEXT): $(resolve_OBJECTS) $(resolve_DEPENDENCIES) $(EXTRA_resolve_DEP
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/rtspd-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/rtspd-strequal.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/rtspd-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/rtspd-timeval.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -744,6 +761,8 @@ rtspd$(EXEEXT): $(rtspd_OBJECTS) $(rtspd_DEPENDENCIES) $(EXTRA_rtspd_DEPENDENCIE
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/sockfilt-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/sockfilt-strequal.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/sockfilt-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/sockfilt-timeval.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -764,6 +783,8 @@ sockfilt$(EXEEXT): $(sockfilt_OBJECTS) $(sockfilt_DEPENDENCIES) $(EXTRA_sockfilt
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/sws-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/sws-strequal.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/sws-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/sws-timeval.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -784,6 +805,8 @@ sws$(EXEEXT): $(sws_OBJECTS) $(sws_DEPENDENCIES) $(EXTRA_sws_DEPENDENCIES)
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/tftpd-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/tftpd-strequal.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/tftpd-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 ../../lib/tftpd-timeval.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -810,6 +833,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-memdebug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-mprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-strequal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-timeval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-warnless.Po@am__quote@
@@ -817,6 +841,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-memdebug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-mprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-strequal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-timeval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-warnless.Po@am__quote@
@@ -824,6 +849,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-memdebug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-mprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-strequal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-timeval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-warnless.Po@am__quote@
@@ -831,6 +857,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-memdebug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-mprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-strequal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-timeval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-warnless.Po@am__quote@
@@ -839,6 +866,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-memdebug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-mprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-strequal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-timeval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-warnless.Po@am__quote@
@@ -847,6 +875,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-memdebug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-mprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-strequal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-timeval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-warnless.Po@am__quote@
@@ -854,6 +883,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-memdebug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-mprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-strequal.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-strtoofft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-timeval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-warnless.Po@am__quote@
@@ -930,6 +960,20 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -c -o ../../lib/fake_ntlm-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
 
+../../lib/fake_ntlm-strequal.o: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -MT ../../lib/fake_ntlm-strequal.o -MD -MP -MF ../../lib/$(DEPDIR)/fake_ntlm-strequal.Tpo -c -o ../../lib/fake_ntlm-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/fake_ntlm-strequal.Tpo ../../lib/$(DEPDIR)/fake_ntlm-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/fake_ntlm-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -c -o ../../lib/fake_ntlm-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+
+../../lib/fake_ntlm-strequal.obj: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -MT ../../lib/fake_ntlm-strequal.obj -MD -MP -MF ../../lib/$(DEPDIR)/fake_ntlm-strequal.Tpo -c -o ../../lib/fake_ntlm-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/fake_ntlm-strequal.Tpo ../../lib/$(DEPDIR)/fake_ntlm-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/fake_ntlm-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -c -o ../../lib/fake_ntlm-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+
 ../../lib/fake_ntlm-strtoofft.o: ../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -MT ../../lib/fake_ntlm-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Tpo -c -o ../../lib/fake_ntlm-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Tpo ../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Po
@@ -1070,6 +1114,20 @@ fake_ntlm-fake_ntlm.obj: fake_ntlm.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o ../../lib/getpart-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
 
+../../lib/getpart-strequal.o: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT ../../lib/getpart-strequal.o -MD -MP -MF ../../lib/$(DEPDIR)/getpart-strequal.Tpo -c -o ../../lib/getpart-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/getpart-strequal.Tpo ../../lib/$(DEPDIR)/getpart-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/getpart-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o ../../lib/getpart-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+
+../../lib/getpart-strequal.obj: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT ../../lib/getpart-strequal.obj -MD -MP -MF ../../lib/$(DEPDIR)/getpart-strequal.Tpo -c -o ../../lib/getpart-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/getpart-strequal.Tpo ../../lib/$(DEPDIR)/getpart-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/getpart-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o ../../lib/getpart-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+
 ../../lib/getpart-strtoofft.o: ../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT ../../lib/getpart-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/getpart-strtoofft.Tpo -c -o ../../lib/getpart-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/getpart-strtoofft.Tpo ../../lib/$(DEPDIR)/getpart-strtoofft.Po
@@ -1196,6 +1254,20 @@ getpart-testpart.obj: testpart.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o ../../lib/resolve-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
 
+../../lib/resolve-strequal.o: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT ../../lib/resolve-strequal.o -MD -MP -MF ../../lib/$(DEPDIR)/resolve-strequal.Tpo -c -o ../../lib/resolve-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/resolve-strequal.Tpo ../../lib/$(DEPDIR)/resolve-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/resolve-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o ../../lib/resolve-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+
+../../lib/resolve-strequal.obj: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT ../../lib/resolve-strequal.obj -MD -MP -MF ../../lib/$(DEPDIR)/resolve-strequal.Tpo -c -o ../../lib/resolve-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/resolve-strequal.Tpo ../../lib/$(DEPDIR)/resolve-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/resolve-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o ../../lib/resolve-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+
 ../../lib/resolve-strtoofft.o: ../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT ../../lib/resolve-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/resolve-strtoofft.Tpo -c -o ../../lib/resolve-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/resolve-strtoofft.Tpo ../../lib/$(DEPDIR)/resolve-strtoofft.Po
@@ -1336,6 +1408,20 @@ resolve-resolve.obj: resolve.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o ../../lib/rtspd-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
 
+../../lib/rtspd-strequal.o: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT ../../lib/rtspd-strequal.o -MD -MP -MF ../../lib/$(DEPDIR)/rtspd-strequal.Tpo -c -o ../../lib/rtspd-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/rtspd-strequal.Tpo ../../lib/$(DEPDIR)/rtspd-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/rtspd-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o ../../lib/rtspd-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+
+../../lib/rtspd-strequal.obj: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT ../../lib/rtspd-strequal.obj -MD -MP -MF ../../lib/$(DEPDIR)/rtspd-strequal.Tpo -c -o ../../lib/rtspd-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/rtspd-strequal.Tpo ../../lib/$(DEPDIR)/rtspd-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/rtspd-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o ../../lib/rtspd-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+
 ../../lib/rtspd-strtoofft.o: ../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT ../../lib/rtspd-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/rtspd-strtoofft.Tpo -c -o ../../lib/rtspd-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/rtspd-strtoofft.Tpo ../../lib/$(DEPDIR)/rtspd-strtoofft.Po
@@ -1476,6 +1562,20 @@ rtspd-rtspd.obj: rtspd.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o ../../lib/sockfilt-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
 
+../../lib/sockfilt-strequal.o: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT ../../lib/sockfilt-strequal.o -MD -MP -MF ../../lib/$(DEPDIR)/sockfilt-strequal.Tpo -c -o ../../lib/sockfilt-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sockfilt-strequal.Tpo ../../lib/$(DEPDIR)/sockfilt-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/sockfilt-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o ../../lib/sockfilt-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+
+../../lib/sockfilt-strequal.obj: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT ../../lib/sockfilt-strequal.obj -MD -MP -MF ../../lib/$(DEPDIR)/sockfilt-strequal.Tpo -c -o ../../lib/sockfilt-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sockfilt-strequal.Tpo ../../lib/$(DEPDIR)/sockfilt-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/sockfilt-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o ../../lib/sockfilt-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+
 ../../lib/sockfilt-strtoofft.o: ../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT ../../lib/sockfilt-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/sockfilt-strtoofft.Tpo -c -o ../../lib/sockfilt-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sockfilt-strtoofft.Tpo ../../lib/$(DEPDIR)/sockfilt-strtoofft.Po
@@ -1630,6 +1730,20 @@ sockfilt-sockfilt.obj: sockfilt.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o ../../lib/sws-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
 
+../../lib/sws-strequal.o: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT ../../lib/sws-strequal.o -MD -MP -MF ../../lib/$(DEPDIR)/sws-strequal.Tpo -c -o ../../lib/sws-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sws-strequal.Tpo ../../lib/$(DEPDIR)/sws-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/sws-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o ../../lib/sws-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+
+../../lib/sws-strequal.obj: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT ../../lib/sws-strequal.obj -MD -MP -MF ../../lib/$(DEPDIR)/sws-strequal.Tpo -c -o ../../lib/sws-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sws-strequal.Tpo ../../lib/$(DEPDIR)/sws-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/sws-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o ../../lib/sws-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+
 ../../lib/sws-strtoofft.o: ../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT ../../lib/sws-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/sws-strtoofft.Tpo -c -o ../../lib/sws-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sws-strtoofft.Tpo ../../lib/$(DEPDIR)/sws-strtoofft.Po
@@ -1784,6 +1898,20 @@ sws-sws.obj: sws.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o ../../lib/tftpd-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
 
+../../lib/tftpd-strequal.o: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT ../../lib/tftpd-strequal.o -MD -MP -MF ../../lib/$(DEPDIR)/tftpd-strequal.Tpo -c -o ../../lib/tftpd-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/tftpd-strequal.Tpo ../../lib/$(DEPDIR)/tftpd-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/tftpd-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o ../../lib/tftpd-strequal.o `test -f '../../lib/strequal.c' || echo '$(srcdir)/'`../../lib/strequal.c
+
+../../lib/tftpd-strequal.obj: ../../lib/strequal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT ../../lib/tftpd-strequal.obj -MD -MP -MF ../../lib/$(DEPDIR)/tftpd-strequal.Tpo -c -o ../../lib/tftpd-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/tftpd-strequal.Tpo ../../lib/$(DEPDIR)/tftpd-strequal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/strequal.c' object='../../lib/tftpd-strequal.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o ../../lib/tftpd-strequal.obj `if test -f '../../lib/strequal.c'; then $(CYGPATH_W) '../../lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strequal.c'; fi`
+
 ../../lib/tftpd-strtoofft.o: ../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT ../../lib/tftpd-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/tftpd-strtoofft.Tpo -c -o ../../lib/tftpd-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/tftpd-strtoofft.Tpo ../../lib/$(DEPDIR)/tftpd-strtoofft.Po
index c3ea664..6e81dfd 100644 (file)
@@ -3,6 +3,7 @@ noinst_PROGRAMS = getpart resolve rtspd sockfilt sws tftpd fake_ntlm
 CURLX_SRCS = \
  ../../lib/mprintf.c \
  ../../lib/nonblock.c \
+ ../../lib/strequal.c \
  ../../lib/strtoofft.c \
  ../../lib/timeval.c \
  ../../lib/warnless.c
@@ -10,6 +11,7 @@ CURLX_SRCS = \
 CURLX_HDRS = \
  ../../lib/curlx.h \
  ../../lib/nonblock.h \
+ ../../lib/strequal.h \
  ../../lib/strtoofft.h \
  ../../lib/timeval.h \
  ../../lib/warnless.h
index 25758bd..1952fbb 100644 (file)
@@ -309,8 +309,7 @@ int getpart(char **outbuf, size_t *outlen,
       ptr++;
       end = ptr;
       EAT_WORD(end);
-      len.sig = end - ptr;
-      if(len.sig > MAX_TAG_LEN) {
+      if((len.sig = end - ptr) > MAX_TAG_LEN) {
         error = GPE_NO_BUFFER_SPACE;
         break;
       }
@@ -371,8 +370,7 @@ int getpart(char **outbuf, size_t *outlen,
       /* get potential tag */
       end = ptr;
       EAT_WORD(end);
-      len.sig = end - ptr;
-      if(len.sig > MAX_TAG_LEN) {
+      if((len.sig = end - ptr) > MAX_TAG_LEN) {
         error = GPE_NO_BUFFER_SPACE;
         break;
       }
@@ -391,8 +389,7 @@ int getpart(char **outbuf, size_t *outlen,
       end = ptr;
       while(*end && ('>' != *end))
         end++;
-      len.sig = end - ptr;
-      if(len.sig > MAX_TAG_LEN) {
+      if((len.sig = end - ptr) > MAX_TAG_LEN) {
         error = GPE_NO_BUFFER_SPACE;
         break;
       }
index ea231da..91ef6c6 100644 (file)
@@ -129,7 +129,7 @@ static void storerequest(char *reqbuf, size_t totalsize);
 
 const char *serverlogfile = DEFAULT_LOGFILE;
 
-#define RTSPDVERSION "curl test suite RTSP server/0.1"
+#define RTSPDVERSION "cURL test suite RTSP server/0.1"
 
 #define REQUEST_DUMP  "log/server.input"
 #define RESPONSE_DUMP "log/server.response"
@@ -260,42 +260,36 @@ static void install_signal_handlers(void)
 {
 #ifdef SIGHUP
   /* ignore SIGHUP signal */
-  old_sighup_handler = signal(SIGHUP, SIG_IGN);
-  if(old_sighup_handler == SIG_ERR)
+  if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGHUP handler: %s", strerror(errno));
 #endif
 #ifdef SIGPIPE
   /* ignore SIGPIPE signal */
-  old_sigpipe_handler = signal(SIGPIPE, SIG_IGN);
-  if(old_sigpipe_handler == SIG_ERR)
+  if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGPIPE handler: %s", strerror(errno));
 #endif
 #ifdef SIGALRM
   /* ignore SIGALRM signal */
-  old_sigalrm_handler = signal(SIGALRM, SIG_IGN);
-  if(old_sigalrm_handler == SIG_ERR)
+  if((old_sigalrm_handler = signal(SIGALRM, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGALRM handler: %s", strerror(errno));
 #endif
 #ifdef SIGINT
   /* handle SIGINT signal with our exit_signal_handler */
-  old_sigint_handler = signal(SIGINT, exit_signal_handler);
-  if(old_sigint_handler == SIG_ERR)
+  if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGINT handler: %s", strerror(errno));
   else
     siginterrupt(SIGINT, 1);
 #endif
 #ifdef SIGTERM
   /* handle SIGTERM signal with our exit_signal_handler */
-  old_sigterm_handler = signal(SIGTERM, exit_signal_handler);
-  if(old_sigterm_handler == SIG_ERR)
+  if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGTERM handler: %s", strerror(errno));
   else
     siginterrupt(SIGTERM, 1);
 #endif
 #if defined(SIGBREAK) && defined(WIN32)
   /* handle SIGBREAK signal with our exit_signal_handler */
-  old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler);
-  if(old_sigbreak_handler == SIG_ERR)
+  if((old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGBREAK handler: %s", strerror(errno));
   else
     siginterrupt(SIGBREAK, 1);
@@ -596,7 +590,7 @@ static int ProcessRequest(struct httprequest *req)
     if(got_exit_signal)
       return 1; /* done */
 
-    if((req->cl==0) && strncasecompare("Content-Length:", line, 15)) {
+    if((req->cl==0) && curlx_strnequal("Content-Length:", line, 15)) {
       /* If we don't ignore content-length, we read it and we read the whole
          request including the body before we return. If we've been told to
          ignore the content-length, we will return as soon as all headers
@@ -622,7 +616,7 @@ static int ProcessRequest(struct httprequest *req)
         logmsg("... but will abort after %zu bytes", req->cl);
       break;
     }
-    else if(strncasecompare("Transfer-Encoding: chunked", line,
+    else if(curlx_strnequal("Transfer-Encoding: chunked", line,
                             strlen("Transfer-Encoding: chunked"))) {
       /* chunked data coming in */
       chunked = TRUE;
index 78588d3..38aa51e 100644 (file)
@@ -206,42 +206,36 @@ static void install_signal_handlers(void)
 {
 #ifdef SIGHUP
   /* ignore SIGHUP signal */
-  old_sighup_handler = signal(SIGHUP, SIG_IGN);
-  if(old_sighup_handler == SIG_ERR)
+  if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGHUP handler: %s", strerror(errno));
 #endif
 #ifdef SIGPIPE
   /* ignore SIGPIPE signal */
-  old_sigpipe_handler = signal(SIGPIPE, SIG_IGN);
-  if(old_sigpipe_handler == SIG_ERR)
+  if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGPIPE handler: %s", strerror(errno));
 #endif
 #ifdef SIGALRM
   /* ignore SIGALRM signal */
-  old_sigalrm_handler = signal(SIGALRM, SIG_IGN);
-  if(old_sigalrm_handler == SIG_ERR)
+  if((old_sigalrm_handler = signal(SIGALRM, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGALRM handler: %s", strerror(errno));
 #endif
 #ifdef SIGINT
   /* handle SIGINT signal with our exit_signal_handler */
-  old_sigint_handler = signal(SIGINT, exit_signal_handler);
-  if(old_sigint_handler == SIG_ERR)
+  if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGINT handler: %s", strerror(errno));
   else
     siginterrupt(SIGINT, 1);
 #endif
 #ifdef SIGTERM
   /* handle SIGTERM signal with our exit_signal_handler */
-  old_sigterm_handler = signal(SIGTERM, exit_signal_handler);
-  if(old_sigterm_handler == SIG_ERR)
+  if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGTERM handler: %s", strerror(errno));
   else
     siginterrupt(SIGTERM, 1);
 #endif
 #if defined(SIGBREAK) && defined(WIN32)
   /* handle SIGBREAK signal with our exit_signal_handler */
-  old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler);
-  if(old_sigbreak_handler == SIG_ERR)
+  if((old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGBREAK handler: %s", strerror(errno));
   else
     siginterrupt(SIGBREAK, 1);
@@ -1289,7 +1283,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
       sclose(sock);
       return CURL_SOCKET_BAD;
     }
-    switch(localaddr.sa.sa_family) {
+    switch (localaddr.sa.sa_family) {
     case AF_INET:
       *listenport = ntohs(localaddr.sa4.sin_port);
       break;
index 5646f96..27c86e0 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2017, 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
@@ -140,7 +140,7 @@ static void storerequest(char *reqbuf, size_t totalsize);
 
 const char *serverlogfile = DEFAULT_LOGFILE;
 
-#define SWSVERSION "curl test suite HTTP server/0.1"
+#define SWSVERSION "cURL test suite HTTP server/0.1"
 
 #define REQUEST_DUMP  "log/server.input"
 #define RESPONSE_DUMP "log/server.response"
@@ -265,42 +265,36 @@ static void install_signal_handlers(void)
 {
 #ifdef SIGHUP
   /* ignore SIGHUP signal */
-  old_sighup_handler = signal(SIGHUP, SIG_IGN);
-  if(old_sighup_handler == SIG_ERR)
+  if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGHUP handler: %s", strerror(errno));
 #endif
 #ifdef SIGPIPE
   /* ignore SIGPIPE signal */
-  old_sigpipe_handler = signal(SIGPIPE, SIG_IGN);
-  if(old_sigpipe_handler == SIG_ERR)
+  if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGPIPE handler: %s", strerror(errno));
 #endif
 #ifdef SIGALRM
   /* ignore SIGALRM signal */
-  old_sigalrm_handler = signal(SIGALRM, SIG_IGN);
-  if(old_sigalrm_handler == SIG_ERR)
+  if((old_sigalrm_handler = signal(SIGALRM, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGALRM handler: %s", strerror(errno));
 #endif
 #ifdef SIGINT
   /* handle SIGINT signal with our exit_signal_handler */
-  old_sigint_handler = signal(SIGINT, exit_signal_handler);
-  if(old_sigint_handler == SIG_ERR)
+  if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGINT handler: %s", strerror(errno));
   else
     siginterrupt(SIGINT, 1);
 #endif
 #ifdef SIGTERM
   /* handle SIGTERM signal with our exit_signal_handler */
-  old_sigterm_handler = signal(SIGTERM, exit_signal_handler);
-  if(old_sigterm_handler == SIG_ERR)
+  if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGTERM handler: %s", strerror(errno));
   else
     siginterrupt(SIGTERM, 1);
 #endif
 #if defined(SIGBREAK) && defined(WIN32)
   /* handle SIGBREAK signal with our exit_signal_handler */
-  old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler);
-  if(old_sigbreak_handler == SIG_ERR)
+  if((old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGBREAK handler: %s", strerror(errno));
   else
     siginterrupt(SIGBREAK, 1);
@@ -703,7 +697,7 @@ static int ProcessRequest(struct httprequest *req)
     if(got_exit_signal)
       return 1; /* done */
 
-    if((req->cl==0) && strncasecompare("Content-Length:", line, 15)) {
+    if((req->cl==0) && curlx_strnequal("Content-Length:", line, 15)) {
       /* If we don't ignore content-length, we read it and we read the whole
          request including the body before we return. If we've been told to
          ignore the content-length, we will return as soon as all headers
@@ -729,7 +723,7 @@ static int ProcessRequest(struct httprequest *req)
         logmsg("... but will abort after %zu bytes", req->cl);
       break;
     }
-    else if(strncasecompare("Transfer-Encoding: chunked", line,
+    else if(curlx_strnequal("Transfer-Encoding: chunked", line,
                             strlen("Transfer-Encoding: chunked"))) {
       /* chunked data coming in */
       chunked = TRUE;
@@ -1200,21 +1194,14 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     size_t num = count;
     if(num > 200)
       num = 200;
-
-    retry:
     written = swrite(sock, buffer, num);
     if(written < 0) {
-      if((EWOULDBLOCK == SOCKERRNO) || (EAGAIN == SOCKERRNO)) {
-        wait_ms(10);
-        goto retry;
-      }
       sendfailure = TRUE;
       break;
     }
     else {
       logmsg("Sent off %zd bytes", written);
     }
-
     /* write to file as well */
     fwrite(buffer, 1, (size_t)written, dump);
 
@@ -2244,9 +2231,9 @@ int main(int argc, char *argv[])
     /* Clear out closed sockets */
     for(socket_idx = num_sockets - 1; socket_idx >= 1; --socket_idx) {
       if(CURL_SOCKET_BAD == all_sockets[socket_idx]) {
-        char *dst = (char *) (all_sockets + socket_idx);
-        char *src = (char *) (all_sockets + socket_idx + 1);
-        char *end = (char *) (all_sockets + num_sockets);
+        chardst = (char *) (all_sockets + socket_idx);
+        charsrc = (char *) (all_sockets + socket_idx + 1);
+        charend = (char *) (all_sockets + num_sockets);
         memmove(dst, src, end - src);
         num_sockets -= 1;
       }
index c866743..afc0884 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 /*
- * Copyright (c) 1983, 2016 Regents of the University of California.
+ * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -367,36 +367,31 @@ static void install_signal_handlers(void)
 {
 #ifdef SIGHUP
   /* ignore SIGHUP signal */
-  old_sighup_handler = signal(SIGHUP, SIG_IGN);
-  if(old_sighup_handler == SIG_ERR)
+  if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGHUP handler: %s", strerror(errno));
 #endif
 #ifdef SIGPIPE
   /* ignore SIGPIPE signal */
-  old_sigpipe_handler = signal(SIGPIPE, SIG_IGN);
-  if(old_sigpipe_handler == SIG_ERR)
+  if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
     logmsg("cannot install SIGPIPE handler: %s", strerror(errno));
 #endif
 #ifdef SIGINT
   /* handle SIGINT signal with our exit_signal_handler */
-  old_sigint_handler = signal(SIGINT, exit_signal_handler);
-  if(old_sigint_handler == SIG_ERR)
+  if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGINT handler: %s", strerror(errno));
   else
     siginterrupt(SIGINT, 1);
 #endif
 #ifdef SIGTERM
   /* handle SIGTERM signal with our exit_signal_handler */
-  old_sigterm_handler = signal(SIGTERM, exit_signal_handler);
-  if(old_sigterm_handler == SIG_ERR)
+  if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGTERM handler: %s", strerror(errno));
   else
     siginterrupt(SIGTERM, 1);
 #endif
 #if defined(SIGBREAK) && defined(WIN32)
   /* handle SIGBREAK signal with our exit_signal_handler */
-  old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler);
-  if(old_sigbreak_handler == SIG_ERR)
+  if((old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler)) == SIG_ERR)
     logmsg("cannot install SIGBREAK handler: %s", strerror(errno));
   else
     siginterrupt(SIGBREAK, 1);
@@ -1045,10 +1040,10 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)
 #ifdef USE_WINSOCK
   recvtimeout = sizeof(recvtimeoutbak);
   getsockopt(peer, SOL_SOCKET, SO_RCVTIMEO,
-             (char *)&recvtimeoutbak, (int *)&recvtimeout);
+             (char*)&recvtimeoutbak, (int*)&recvtimeout);
   recvtimeout = TIMEOUT*1000;
   setsockopt(peer, SOL_SOCKET, SO_RCVTIMEO,
-             (const char *)&recvtimeout, sizeof(recvtimeout));
+             (const char*)&recvtimeout, sizeof(recvtimeout));
 #endif
 
   if(tp->th_opcode == opcode_WRQ)
@@ -1059,7 +1054,7 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)
 #ifdef USE_WINSOCK
   recvtimeout = recvtimeoutbak;
   setsockopt(peer, SOL_SOCKET, SO_RCVTIMEO,
-             (const char *)&recvtimeout, sizeof(recvtimeout));
+             (const char*)&recvtimeout, sizeof(recvtimeout));
 #endif
 
   return 0;
@@ -1237,17 +1232,19 @@ static void sendtftp(struct testcase *test, struct formats *pf)
 {
   int size;
   ssize_t n;
-  /* These are volatile to live through a siglongjmp */
+  /* This is volatile to live through a siglongjmp */
   volatile unsigned short sendblock; /* block count */
-  struct tftphdr * volatile sdp = r_init(); /* data buffer */
-  struct tftphdr * const sap = &ackbuf.hdr; /* ack buffer */
+  struct tftphdr *sdp;      /* data buffer */
+  struct tftphdr *sap;      /* ack buffer */
 
   sendblock = 1;
 #if defined(HAVE_ALARM) && defined(SIGALRM)
   mysignal(SIGALRM, timer);
 #endif
+  sdp = r_init();
+  sap = &ackbuf.hdr;
   do {
-    size = readit(test, (struct tftphdr **)&sdp, pf->f_convert);
+    size = readit(test, &sdp, pf->f_convert);
     if(size < 0) {
       nak(errno + 100);
       return;
index 8465cd9..d993363 100644 (file)
@@ -135,7 +135,7 @@ void logmsg(const char *msg, ...)
 
 #ifdef WIN32
 /* use instead of perror() on generic windows */
-void win32_perror(const char *msg)
+void win32_perror (const char *msg)
 {
   char buf[512];
   DWORD err = SOCKERRNO;
@@ -305,87 +305,3 @@ void clear_advisor_read_lock(const char *filename)
     logmsg("Error removing lock file %s error: %d %s",
            filename, error, strerror(error));
 }
-
-
-/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
-   its behavior is altered by the current locale. */
-static char 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';
-  case 'b':
-    return 'B';
-  case 'c':
-    return 'C';
-  case 'd':
-    return 'D';
-  case 'e':
-    return 'E';
-  case 'f':
-    return 'F';
-  case 'g':
-    return 'G';
-  case 'h':
-    return 'H';
-  case 'i':
-    return 'I';
-  case 'j':
-    return 'J';
-  case 'k':
-    return 'K';
-  case 'l':
-    return 'L';
-  case 'm':
-    return 'M';
-  case 'n':
-    return 'N';
-  case 'o':
-    return 'O';
-  case 'p':
-    return 'P';
-  case 'q':
-    return 'Q';
-  case 'r':
-    return 'R';
-  case 's':
-    return 'S';
-  case 't':
-    return 'T';
-  case 'u':
-    return 'U';
-  case 'v':
-    return 'V';
-  case 'w':
-    return 'W';
-  case 'x':
-    return 'X';
-  case 'y':
-    return 'Y';
-  case 'z':
-    return 'Z';
-  }
-#endif
-
-  return in;
-}
-
-int strncasecompare(const char *first, const char *second, size_t max)
-{
-  while(*first && *second && max) {
-    if(raw_toupper(*first) != raw_toupper(*second)) {
-      break;
-    }
-    max--;
-    first++;
-    second++;
-  }
-  if(0 == max)
-    return 1; /* they are equal this far */
-
-  return raw_toupper(*first) == raw_toupper(*second);
-}
index a2a56ba..2a19a61 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 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
@@ -44,7 +44,7 @@ extern const char *serverlogfile;
 
 #undef perror
 #define perror(m) win32_perror(m)
-void win32_perror(const char *msg);
+void win32_perror (const char *msg);
 #endif  /* WIN32 */
 
 #ifdef USE_WINSOCK
@@ -63,6 +63,4 @@ void set_advisor_read_lock(const char *filename);
 
 void clear_advisor_read_lock(const char *filename);
 
-int strncasecompare(const char *first, const char *second, size_t max);
-
 #endif  /* HEADER_CURL_SERVER_UTIL_H */
index ee07d64..509f5dc 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
 .\" *
 .\" * This software is licensed as described in the file COPYING, which
 .\" * you should have received as part of this distribution. The terms
@@ -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 https://curl.haxx.se/dev/builds.html
+published on the curl site, at https://curl.haxx.se/auto/
 
 \fIoptions\fP may be omitted. See \fI--setup\fP for what happens then.
 
@@ -78,13 +78,13 @@ Specify your target environment. Recognized strings include 'vc', 'mingw32',
 \&'borland' and 'netware'.
 .SH "INITIAL SETUP"
 First you make a checkout from git (or you write a script that downloads daily
-snapshots automatically, find inspiration in
-https://curl.haxx.se/dev/autocurl.txt ):
+snapshots automatically, find inspiration at
+https://curl.haxx.se/auto/autocurl.txt):
 
 .nf
   $ mkdir daily-curl
   $ cd daily-curl
-  $ git clone https://github.com/curl/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 73d38cf..200b8fd 100644 (file)
@@ -53,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="https://curl.haxx.se/dev/builds.html">https://curl.haxx.se/dev/builds.html</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>
@@ -80,11 +80,11 @@ 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 in <a href="https://curl.haxx.se/dev/autocurl.txt">https://curl.haxx.se/dev/autocurl.txt</a> ): 
+<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 https://github.com/curl/curl.git
+&nbsp; $ git clone git://github.com/curl/curl.git
 </pre>
 
 <p class="level0">
index e691666..4d81d7f 100644 (file)
Binary files a/tests/testcurl.pdf and b/tests/testcurl.pdf differ
diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt
deleted file mode 100644 (file)
index 14589d6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-set(UT_SRC
-  unit1300.c
-  unit1301.c
-  unit1302.c
-  unit1303.c
-  unit1304.c
-  unit1305.c
-  unit1307.c
-  unit1308.c
-  unit1309.c
-  unit1330.c
-# Broken link on Linux
-#  unit1394.c
-  unit1395.c
-  unit1396.c
-  unit1397.c
-  unit1398.c
-  unit1600.c
-  unit1601.c
-  unit1603.c
-# Broken link on Linux
-#  unit1604.c
-  )
-
-set(UT_COMMON_FILES ../libtest/first.c ../libtest/test.h curlcheck.h)
-include_directories(
-  ${CURL_SOURCE_DIR}/lib          # To be able to reach "curl_setup_once.h"
-  ${CURL_SOURCE_DIR}/tests/libtest
-  ${CURL_SOURCE_DIR}/src
-  ${CURL_BINARY_DIR}/lib          # To be able to reach "curl_config.h"
-  ${CURL_BINARY_DIR}/include      # To be able to reach "curl/curlbuild.h"
-)
-
-foreach(_testfile ${UT_SRC})
-
-  get_filename_component(_testname ${_testfile} NAME_WE)
-  add_executable(${_testname} ${_testfile} ${UT_COMMON_FILES})
-  target_link_libraries(${_testname} libcurl ${CURL_LIBS})
-  set_target_properties(${_testname}
-      PROPERTIES COMPILE_DEFINITIONS "UNITTESTS")
-
-  if(HIDES_CURL_PRIVATE_SYMBOLS)
-    set_target_properties(${_testname}
-         PROPERTIES
-               EXCLUDE_FROM_ALL TRUE
-               EXCLUDE_FROM_DEFAULT_BUILD TRUE
-       )
-  else()
-    add_test(NAME ${_testname}
-             COMMAND ${_testname} "http://www.google.com"
-    )
-  endif()
-endforeach()
index 7075f8c..d4987d6 100644 (file)
@@ -54,7 +54,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include/curl \
               -I$(top_srcdir)/tests/libtest
 endif
 
-EXTRA_DIST = Makefile.inc CMakeLists.txt
+EXTRA_DIST = Makefile.inc
 
 # Prevent LIBS from being used for all link targets
 LIBS = $(BLANK_AT_MAKETIME)
index cb00b4f..e4ef785 100644 (file)
@@ -124,7 +124,7 @@ am__EXEEXT_1 = unit1300$(EXEEXT) unit1301$(EXEEXT) unit1302$(EXEEXT) \
        unit1330$(EXEEXT) unit1394$(EXEEXT) unit1395$(EXEEXT) \
        unit1396$(EXEEXT) unit1397$(EXEEXT) unit1398$(EXEEXT) \
        unit1600$(EXEEXT) unit1601$(EXEEXT) unit1602$(EXEEXT) \
-       unit1603$(EXEEXT) unit1604$(EXEEXT) unit1605$(EXEEXT)
+       unit1603$(EXEEXT) unit1604$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = ../libtest/unit1300-first.$(OBJEXT)
@@ -252,12 +252,6 @@ unit1604_OBJECTS = $(am_unit1604_OBJECTS)
 unit1604_LDADD = $(LDADD)
 unit1604_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
        $(top_builddir)/lib/libcurlu.la
-am__objects_21 = ../libtest/unit1605-first.$(OBJEXT)
-am_unit1605_OBJECTS = unit1605-unit1605.$(OBJEXT) $(am__objects_21)
-unit1605_OBJECTS = $(am_unit1605_OBJECTS)
-unit1605_LDADD = $(LDADD)
-unit1605_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
@@ -298,15 +292,14 @@ SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) $(unit1302_SOURCES) \
        $(unit1330_SOURCES) $(unit1394_SOURCES) $(unit1395_SOURCES) \
        $(unit1396_SOURCES) $(unit1397_SOURCES) $(unit1398_SOURCES) \
        $(unit1600_SOURCES) $(unit1601_SOURCES) $(unit1602_SOURCES) \
-       $(unit1603_SOURCES) $(unit1604_SOURCES) $(unit1605_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) $(unit1600_SOURCES) $(unit1601_SOURCES) \
-       $(unit1602_SOURCES) $(unit1603_SOURCES) $(unit1604_SOURCES) \
-       $(unit1605_SOURCES)
+       $(unit1602_SOURCES) $(unit1603_SOURCES) $(unit1604_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -580,7 +573,7 @@ AUTOMAKE_OPTIONS = foreign nostdinc
 @USE_EMBEDDED_ARES_TRUE@       -I$(top_builddir)/ares \
 @USE_EMBEDDED_ARES_TRUE@       -I$(top_srcdir)/ares -DCURL_STATICLIB \
 @USE_EMBEDDED_ARES_TRUE@       -DUNITTESTS
-EXTRA_DIST = Makefile.inc CMakeLists.txt
+EXTRA_DIST = Makefile.inc
 LDADD = $(top_builddir)/src/libcurltool.la   \
         $(top_builddir)/lib/libcurlu.la      \
         @LDFLAGS@ @LIBCURL_LIBS@
@@ -596,7 +589,7 @@ 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       \
- unit1600 unit1601 unit1602 unit1603 unit1604 unit1605
+ unit1600 unit1601 unit1602 unit1603 unit1604
 
 unit1300_SOURCES = unit1300.c $(UNITFILES)
 unit1300_CPPFLAGS = $(AM_CPPFLAGS)
@@ -641,8 +634,6 @@ unit1603_SOURCES = unit1603.c $(UNITFILES)
 unit1603_CPPFLAGS = $(AM_CPPFLAGS)
 unit1604_SOURCES = unit1604.c $(UNITFILES)
 unit1604_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS)
-unit1605_SOURCES = unit1605.c $(UNITFILES)
-unit1605_CPPFLAGS = $(AM_CPPFLAGS)
 all: all-am
 
 .SUFFIXES:
@@ -812,12 +803,6 @@ unit1603$(EXEEXT): $(unit1603_OBJECTS) $(unit1603_DEPENDENCIES) $(EXTRA_unit1603
 unit1604$(EXEEXT): $(unit1604_OBJECTS) $(unit1604_DEPENDENCIES) $(EXTRA_unit1604_DEPENDENCIES) 
        @rm -f unit1604$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(unit1604_OBJECTS) $(unit1604_LDADD) $(LIBS)
-../libtest/unit1605-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
-       ../libtest/$(DEPDIR)/$(am__dirstamp)
-
-unit1605$(EXEEXT): $(unit1605_OBJECTS) $(unit1605_DEPENDENCIES) $(EXTRA_unit1605_DEPENDENCIES) 
-       @rm -f unit1605$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(unit1605_OBJECTS) $(unit1605_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -846,7 +831,6 @@ distclean-compile:
 @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@../libtest/$(DEPDIR)/unit1605-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@
@@ -867,7 +851,6 @@ distclean-compile:
 @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@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1605-unit1605.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -1453,34 +1436,6 @@ unit1604-unit1604.obj: unit1604.c
 @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`
 
-unit1605-unit1605.o: unit1605.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1605-unit1605.o -MD -MP -MF $(DEPDIR)/unit1605-unit1605.Tpo -c -o unit1605-unit1605.o `test -f 'unit1605.c' || echo '$(srcdir)/'`unit1605.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1605-unit1605.Tpo $(DEPDIR)/unit1605-unit1605.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1605.c' object='unit1605-unit1605.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) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1605-unit1605.o `test -f 'unit1605.c' || echo '$(srcdir)/'`unit1605.c
-
-unit1605-unit1605.obj: unit1605.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1605-unit1605.obj -MD -MP -MF $(DEPDIR)/unit1605-unit1605.Tpo -c -o unit1605-unit1605.obj `if test -f 'unit1605.c'; then $(CYGPATH_W) 'unit1605.c'; else $(CYGPATH_W) '$(srcdir)/unit1605.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1605-unit1605.Tpo $(DEPDIR)/unit1605-unit1605.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1605.c' object='unit1605-unit1605.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) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1605-unit1605.obj `if test -f 'unit1605.c'; then $(CYGPATH_W) 'unit1605.c'; else $(CYGPATH_W) '$(srcdir)/unit1605.c'; fi`
-
-../libtest/unit1605-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1605-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1605-first.Tpo -c -o ../libtest/unit1605-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1605-first.Tpo ../libtest/$(DEPDIR)/unit1605-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1605-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) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1605-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1605-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1605-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1605-first.Tpo -c -o ../libtest/unit1605-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)/unit1605-first.Tpo ../libtest/$(DEPDIR)/unit1605-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1605-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) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1605-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
 
index e7db96f..c5a1523 100644 (file)
@@ -7,7 +7,7 @@ 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       \
- unit1600 unit1601 unit1602 unit1603 unit1604 unit1605
+ unit1600 unit1601 unit1602 unit1603 unit1604
 
 unit1300_SOURCES = unit1300.c $(UNITFILES)
 unit1300_CPPFLAGS = $(AM_CPPFLAGS)
@@ -72,5 +72,3 @@ unit1603_CPPFLAGS = $(AM_CPPFLAGS)
 unit1604_SOURCES = unit1604.c $(UNITFILES)
 unit1604_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS)
 
-unit1605_SOURCES = unit1605.c $(UNITFILES)
-unit1605_CPPFLAGS = $(AM_CPPFLAGS)
index aa86101..928076e 100644 (file)
@@ -21,7 +21,7 @@
  ***************************************************************************/
 #include "curlcheck.h"
 
-#include "strcase.h"
+#include "strequal.h"
 
 static CURLcode unit_setup(void) {return CURLE_OK;}
 static void unit_stop(void) {}
index c39e147..a4bd598 100644 (file)
@@ -69,12 +69,12 @@ struct timetest {
 };
 
 UNITTEST_START
-{
-  struct timeval now;
-  long timeout;
-  unsigned int i;
 
-  const struct timetest run[] = {
+struct timeval now;
+long timeout;
+unsigned int i;
+
+const struct timetest run[] = {
   /* both timeouts set, not connecting */
   {BASE + 4, 0,      10000, 8000, FALSE, 6000, "6 seconds should be left"},
   {BASE + 4, 990000, 10000, 8000, FALSE, 5010, "5010 ms should be left"},
@@ -126,20 +126,21 @@ UNITTEST_START
   /* both timeouts set, connecting, connect timeout the longer one */
   {BASE + 4, 0,      10000, 12000, TRUE, 6000, "6 seconds should be left"},
 
-  };
-
-  /* this is the pretended start time of the transfer */
-  data->progress.t_startsingle.tv_sec = BASE;
-  data->progress.t_startsingle.tv_usec = 0;
-  data->progress.t_startop.tv_sec = BASE;
-  data->progress.t_startop.tv_usec = 0;
-
-  for(i=0; i < sizeof(run)/sizeof(run[0]); i++) {
-    NOW(run[i].now_s, run[i].now_us);
-    TIMEOUTS(run[i].timeout_ms, run[i].connecttimeout_ms);
-    timeout =  Curl_timeleft(data, &now, run[i].connecting);
-    if(timeout != run[i].result)
-      fail(run[i].comment);
-  }
+};
+
+/* this is the pretended start time of the transfer */
+data->progress.t_startsingle.tv_sec = BASE;
+data->progress.t_startsingle.tv_usec = 0;
+data->progress.t_startop.tv_sec = BASE;
+data->progress.t_startop.tv_usec = 0;
+
+for(i=0; i < sizeof(run)/sizeof(run[0]); i++) {
+  NOW(run[i].now_s, run[i].now_us);
+  TIMEOUTS(run[i].timeout_ms, run[i].connecttimeout_ms);
+  timeout =  Curl_timeleft(data, &now, run[i].connecting);
+  if(timeout != run[i].result)
+    fail(run[i].comment);
 }
+
+
 UNITTEST_STOP
index 83375f5..11bba39 100644 (file)
@@ -48,7 +48,7 @@ static void unit_stop(void)
 UNITTEST_START
   int result;
 
-  static const char * const filename1 = "log/netrc1304";
+  static const char* const filename1 = "log/netrc1304";
   memcpy(filename, filename1, strlen(filename1));
 
   /*
index db0a44c..ad270f5 100644 (file)
@@ -78,20 +78,17 @@ static Curl_addrinfo *fake_ai(void)
   static Curl_addrinfo *ai;
   int ss_size;
 
-  ss_size = sizeof(struct sockaddr_in);
+  ss_size = sizeof (struct sockaddr_in);
 
-  ai = calloc(1, sizeof(Curl_addrinfo));
-  if(!ai)
+  if((ai = calloc(1, sizeof(Curl_addrinfo))) == NULL)
     return NULL;
 
-  ai->ai_canonname = strdup("dummy");
-  if(!ai->ai_canonname) {
+  if((ai->ai_canonname = strdup("dummy")) == NULL) {
     free(ai);
     return NULL;
   }
 
-  ai->ai_addr = calloc(1, ss_size);
-  if(!ai->ai_addr) {
+  if((ai->ai_addr = calloc(1, ss_size)) == NULL) {
     free(ai->ai_canonname);
     free(ai);
     return NULL;
index 5c1a008..968bcff 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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
@@ -42,8 +42,8 @@ static size_t print_httppost_callback(void *arg, const char *buf, size_t len)
 
 UNITTEST_START
   int rc;
-  struct curl_httppost *post = NULL;
-  struct curl_httppost *last = NULL;
+  struct curl_httppostpost = NULL;
+  struct curl_httppostlast = NULL;
   size_t total_size = 0;
   char buffer[] = "test buffer";
 
index 5f1ee9f..c67c0a5 100644 (file)
@@ -32,7 +32,7 @@ static struct curl_hash hash_static;
 
 static void mydtor(void *p)
 {
-  int *ptr = (int *)p;
+  int *ptr = (int*)p;
   free(ptr);
 }
 
index 5f1ea95..242be00 100644 (file)
@@ -42,8 +42,7 @@ static void unit_stop(void)
 
 #if defined(MSDOS) || defined(WIN32)
 
-static char *getflagstr(int flags)
-{
+static char *getflagstr(int flags) {
   char *buf = malloc(256);
   fail_unless(buf, "out of memory");
   snprintf(buf, 256, "%s,%s,%s,%s",
@@ -54,8 +53,7 @@ static char *getflagstr(int flags)
   return buf;
 }
 
-static char *getcurlcodestr(int cc)
-{
+static char *getcurlcodestr(int cc) {
   char *buf = malloc(256);
   fail_unless(buf, "out of memory");
   snprintf(buf, 256, "%s (%d)",
diff --git a/tests/unit/unit1605.c b/tests/unit/unit1605.c
deleted file mode 100644 (file)
index c807cb3..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  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.
- *
- ***************************************************************************/
-#include "curlcheck.h"
-
-#include "llist.h"
-
-static CURLcode unit_setup(void)
-{
-  return CURLE_OK;
-}
-
-static void unit_stop(void)
-{
-
-}
-
-UNITTEST_START
-  CURL *easy = curl_easy_init();
-  int len;
-  char *esc;
-
-  esc = curl_easy_escape(easy, "", -1);
-  fail_unless(esc == NULL, "negative string length can't work");
-
-  esc = curl_easy_unescape(easy, "%41%41%41%41", -1, &len);
-  fail_unless(esc == NULL, "negative string length can't work");
-
-  curl_easy_cleanup(easy);
-
-UNITTEST_STOP
index e6f66fd..838183b 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
 #
 # This software is licensed as described in the file COPYING, which
 # you should have received as part of this distribution. The terms
@@ -26,9 +26,90 @@ sub valgrindparse {
     my ($srcdir,     # the dir in which the runtests script resides
         $sslenabled,
         $file) = @_;
+    my $leak;
+    my $invalidread;
+    my $uninitedvar;
+    my $error;
+    my $partial;
+    my $us;
+
     my @o;
+
+    my $bt=0;
+    my $nssinit=0;
+
     open(VAL, "<$file");
-    @o = <VAL>;
+    while(<VAL>) {
+        if($bt) {
+            # back trace parsing
+            if($_ =~ /^==(\d+)== *(at|by) 0x([0-9A-F]+): (.*)/) {
+                my $w = $4;
+                if($w =~ /(.*) \(([^:]*):(\d+)/) {
+                    my ($func, $source, $line)=($1, $2, $3);
+                    my $sourcename = basename($source);
+                    if(-f "$srcdir/../src/$sourcename" ||
+                       -f "$srcdir/../lib/$sourcename") {
+                        # this is our source
+ #                       print "$func() at $source:$line\n";
+                        $us++;
+                    } #else {print "Not our source: $func, $source, $line\n";}
+                }
+
+                # the memory leakage within NSS_InitContext is not a bug of curl
+                if($w =~ /NSS_InitContext/) {
+                    $nssinit++;
+                }
+            }
+            else {
+                if($us and not $nssinit) {
+                    # the stack trace included source details about us
+
+                    $error++;
+                    if($leak) {
+                        push @o, "\n Leaked $leak bytes\n";
+                    }
+                    if($invalidread) {
+                        push @o, "\n Read $invalidread invalid bytes\n";
+                    }
+                    if($uninitedvar) {
+                        push @o, "\n Conditional jump or move depends on uninitialised value(s)\n";
+                    }
+                }
+                $bt = 0; # no more backtrace
+                $us = 0;
+                $nssinit = 0;
+            }
+        }
+        else {
+            if($_ =~ /(\d+) bytes in (\d+) blocks are definitely lost/) {
+                $leak = $1;
+                if($leak) {
+                    $error++;
+                }
+                $bt = 1;
+            }
+            elsif($_ =~ /Invalid read of size (\d+)/) {
+                $invalidread = $1;
+                $error++;
+                $bt = 1;
+            }
+            elsif($_ =~ /Conditional jump or move/) {
+                # If we require SSL, this test case most probaly makes
+                # us use OpenSSL. OpenSSL produces numerous valgrind
+                # errors of this kind, rendering it impossible for us to
+                # detect (valid) reports on actual curl or libcurl code.
+
+                if(!$sslenabled) {
+                    $uninitedvar = 1;
+                    $error++;
+                    $bt = 1;
+                }
+                else {
+                    $partial=1;
+                }
+            }
+        }
+    }
     close(VAL);
     return @o;
 }
diff --git a/winbuild/Makefile.msvc.names b/winbuild/Makefile.msvc.names
new file mode 100644 (file)
index 0000000..13eafac
--- /dev/null
@@ -0,0 +1,81 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2010, 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
+#\r
+# This file is included from MSVC makefiles located in lib and src,\r
+# providing libcurl common file names required by these makefiles.\r
+#\r
+\r
+# ------------------\r
+# libcurl base name\r
+# ------------------\r
+\r
+!IF !DEFINED(LIB_NAME) || "$(LIB_NAME)" == ""\r
+LIB_NAME = libcurl\r
+!ENDIF\r
+\r
+# -------------------------------------------------\r
+# libcurl static and dynamic libraries common base\r
+# file names for release and debug configurations\r
+# -------------------------------------------------\r
+\r
+!IF !DEFINED(LIB_NAME_STA_REL) || "$(LIB_NAME_STA_REL)" == ""\r
+LIB_NAME_STA_REL = $(LIB_NAME)\r
+!ENDIF\r
+\r
+!IF !DEFINED(LIB_NAME_STA_DBG) || "$(LIB_NAME_STA_DBG)" == ""\r
+LIB_NAME_STA_DBG = $(LIB_NAME_STA_REL)d\r
+!ENDIF\r
+\r
+!IF !DEFINED(LIB_NAME_DYN_REL) || "$(LIB_NAME_DYN_REL)" == ""\r
+LIB_NAME_DYN_REL = $(LIB_NAME)\r
+!ENDIF\r
+\r
+!IF !DEFINED(LIB_NAME_DYN_DBG) || "$(LIB_NAME_DYN_DBG)" == ""\r
+LIB_NAME_DYN_DBG = $(LIB_NAME_DYN_REL)d\r
+!ENDIF\r
+\r
+# --------------------------------------------\r
+# Base names for libcurl DLL import libraries\r
+# --------------------------------------------\r
+\r
+!IF !DEFINED(LIB_NAME_IMP_REL) || "$(LIB_NAME_IMP_REL)" == ""\r
+LIB_NAME_IMP_REL = $(LIB_NAME_DYN_REL)_imp\r
+!ENDIF\r
+\r
+!IF !DEFINED(LIB_NAME_IMP_DBG) || "$(LIB_NAME_IMP_DBG)" == ""\r
+LIB_NAME_IMP_DBG = $(LIB_NAME_DYN_DBG)_imp\r
+!ENDIF\r
+\r
+# --------------------------------------\r
+# File names with extension and no path\r
+# --------------------------------------\r
+\r
+LIBCURL_STA_LIB_REL = $(LIB_NAME_STA_REL).lib\r
+LIBCURL_STA_LIB_DBG = $(LIB_NAME_STA_DBG).lib\r
+LIBCURL_DYN_LIB_REL = $(LIB_NAME_DYN_REL).dll\r
+LIBCURL_DYN_LIB_DBG = $(LIB_NAME_DYN_DBG).dll\r
+LIBCURL_IMP_LIB_REL = $(LIB_NAME_IMP_REL).lib\r
+LIBCURL_IMP_LIB_DBG = $(LIB_NAME_IMP_DBG).lib\r
+LIBCURL_DYN_LIB_PDB = $(LIB_NAME_IMP_DBG).pdb\r
+\r
+# End of Makefile.msvc.names\r
index f78da43..bd5c8e0 100644 (file)
@@ -21,8 +21,6 @@ CFGSET=true
 !MESSAGE                                  Libraries can be fetched at http://pecl2.php.net/downloads/php-windows-builds/
 !MESSAGE                                  Uncompress them into the deps folder.
 !MESSAGE   WITH_SSL=<dll or static>     - Enable OpenSSL support, DLL or static
-!MESSAGE   ENABLE_NGHTTP2=<yes or no>   - Enable HTTP/2 support, defaults to no
-!MESSAGE                                  Requires OpenSSL
 !MESSAGE   WITH_CARES=<dll or static>   - Enable c-ares support, DLL or static
 !MESSAGE   WITH_ZLIB=<dll or static>    - Enable zlib support, DLL or static
 !MESSAGE   WITH_SSH2=<dll or static>    - Enable libSSH2 support, DLL or static
@@ -57,10 +55,7 @@ ENABLE_SSPI = $(USE_SSPI)
 !ENDIF
 
 # default options
-
 !IFNDEF MACHINE
-# Note: nmake magically changes the value of PROCESSOR_ARCHITECTURE from "AMD64"
-# to "x86" when building in a 32 bit build environment on a 64 bit machine.
 !IF "$(PROCESSOR_ARCHITECTURE)"=="AMD64"
 MACHINE = x64
 !ELSE
@@ -114,16 +109,6 @@ USE_SSL = true
 SSL     = static
 !ENDIF
 
-!IF "$(USE_SSL)"=="true"
-!IF "$(ENABLE_NGHTTP2)"=="yes"
-USE_NGHTTP2 = true
-!ENDIF
-!ENDIF
-
-!IFNDEF USE_NGHTTP2
-USE_NGHTTP2 = false
-!ENDIF
-
 !IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"
 USE_MBEDTLS = true
 MBEDTLS     = $(WITH_MBEDTLS)
@@ -228,7 +213,6 @@ $(MODE):
 
        @SET CONFIG_NAME_LIB=$(CONFIG_NAME_LIB)
        @SET MACHINE=$(MACHINE)
-       @SET USE_NGHTTP2=$(USE_NGHTTP2)
        @SET USE_IDN=$(USE_IDN)
        @SET USE_IPV6=$(USE_IPV6)
        @SET USE_SSPI=$(USE_SSPI)
index 96ab37e..3b4fc10 100644 (file)
@@ -123,22 +123,8 @@ USE_SSL      = true
 SSL          = static\r
 !ENDIF\r
 \r
-!IFNDEF USE_NGHTTP2\r
-USE_NGHTTP2  = false\r
-!ENDIF\r
-\r
 !IFDEF USE_SSL\r
 SSL_CFLAGS   = /DUSE_OPENSSL /I"$(DEVEL_INCLUDE)/openssl"\r
-\r
-!IF "$(USE_NGHTTP2)"=="yes"\r
-USE_NGHTTP2  = true\r
-!ENDIF\r
-\r
-!IF "$(USE_NGHTTP2)"=="true"\r
-SSL_CFLAGS   = $(SSL_CFLAGS) /DUSE_NGHTTP2\r
-SSL_LIBS     = $(SSL_LIBS) nghttp2.lib\r
-!ENDIF\r
-\r
 !ENDIF\r
 \r
 !IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"\r
@@ -430,7 +416,6 @@ package: $(TARGET)
 \r
 $(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DISTDIR)\r
        @echo Using SSL: $(USE_SSL)\r
-       @echo Using NGHTTP2: $(USE_NGHTTP2)\r
        @echo Using c-ares: $(USE_CARES)\r
        @echo Using SSH2: $(USE_SSH2)\r
        @echo Using ZLIB: $(USE_ZLIB)\r
@@ -509,6 +494,7 @@ CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP)
 \r
 CURL_FROM_LIBCURL=$(CURL_DIROBJ)\tool_hugehelp.obj \\r
  $(CURL_DIROBJ)\nonblock.obj \\r
+ $(CURL_DIROBJ)\rawstr.obj \\r
  $(CURL_DIROBJ)\strtoofft.obj \\r
  $(CURL_DIROBJ)\warnless.obj\r
  \r
@@ -523,6 +509,8 @@ $(CURL_DIROBJ)\tool_hugehelp.obj: $(CURL_SRC_DIR)\tool_hugehelp.c
        $(CURL_CC) $(CURL_CFLAGS) /Zm200 /Fo"$@" $(CURL_SRC_DIR)\tool_hugehelp.c\r
 $(CURL_DIROBJ)\nonblock.obj: ../lib/nonblock.c\r
        $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+$(CURL_DIROBJ)\rawstr.obj: ../lib/rawstr.c\r
+       $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/rawstr.c\r
 $(CURL_DIROBJ)\strtoofft.obj: ../lib/strtoofft.c\r
        $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 $(CURL_DIROBJ)\warnless.obj: ../lib/warnless.c\r