zlib 1.2.4-pre1
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b129ef2..7eefa49 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -66,17 +66,19 @@
 endif()
 
 if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
-  # If we're doing an out of source build and the user has a zconf.h
-  # in their source tree...
-  if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
-     message(FATAL_ERROR "You must remove zconf.h from the source tree.  This f
-ile is generated by the ./configure script shipped with zlib.  CMake generates t
-his file for you automatically in the build directory")
+    # If we're doing an out of source build and the user has a zconf.h
+    # in their source tree...
+    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
+        message(FATAL_ERROR
+            "You must remove ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h "
+            "from the source tree.  This file is included with zlib "
+            "but CMake generates this file for you automatically "
+            "in the build directory.")
   endif()
 endif()
 
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.in
-               ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h @ONLY)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
+               ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 
 
@@ -85,7 +87,7 @@
 #============================================================================
 
 set(ZLIB_PUBLIC_HDRS
-    zconf.h
+    ${CMAKE_CURRENT_BINARY_DIR}/zconf.h
     zlib.h
 )
 set(ZLIB_PRIVATE_HDRS
@@ -129,6 +131,7 @@
                        COMMAND windres.exe
                             -D GCC_WINDRES
                             -I ${CMAKE_CURRENT_SOURCE_DIR}
+                            -I ${CMAKE_CURRENT_BINARY_DIR}
                             -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
                             -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
     set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
diff --git a/ChangeLog b/ChangeLog
index 736b59e..8b7afd1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,31 @@
 
                 ChangeLog file for zlib
 
+Changes in 1.2.4 (11 Mar 2010)
+- Fix VER3 extraction in configure for no fourth subversion
+- Update zlib.3, add docs to Makefile.in to make .pdf out of it
+- Add zlib.3.pdf to distribution
+- Don't set error code in gzerror() if passed pointer is NULL
+- Apply destination directory fixes to CMakeLists.txt [Lowman]
+- Move #cmakedefine's to a new zconf.in.cmakein
+- Restore zconf.h for builds that don't use configure or cmake
+- Add distclean to dummy Makefile for convenience
+- Update and improve INDEX, README, and FAQ
+- Update CMakeLists.txt for the return of zconf.h [Lowman]
+- Update contrib/vstudio/vc9 and vc10 [Vollant]
+- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc
+- Apply license and readme changes to contrib/asm686 [Raiter]
+- Check file name lengths and add -c option in minigzip.c [Li]
+- Update contrib/amd64 and contrib/masmx86/ [Vollant]
+- Avoid use of "eof" parameter in trees.c to not shadow library variable
+- Update make_vms.com for removal of zlibdefs.h [Zinser]
+- Update assembler code and vstudio projects in contrib [Vollant]
+- Remove outdated assembler code contrib/masm686 and contrib/asm586
+- Remove old vc7 and vc8 from contrib/vstudio
+- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe]
+- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open()
+- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant]
+
 Changes in 1.2.3.9 (21 Feb 2010)
 - Expunge gzio.c
 - Move as400 build information to old
@@ -256,7 +281,7 @@
   compile
 - Fix some spelling errors in comments [Betts]
 - Correct inflateInit2() error return documentation in zlib.h
-- Added zran.c example of compressed data random access to examples
+- Add zran.c example of compressed data random access to examples
   directory, shows use of inflatePrime()
 - Fix cast for assignments to strm->state in inflate.c and infback.c
 - Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer]
diff --git a/FAQ b/FAQ
index 61e8e8a..5603207 100644
--- a/FAQ
+++ b/FAQ
@@ -3,8 +3,8 @@
 
 
 If your question is not there, please check the zlib home page
-http://www.zlib.org which may have more recent information.
-The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html
+http://zlib.net/ which may have more recent information.
+The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
 
 
  1. Is zlib Y2K-compliant?
@@ -13,54 +13,51 @@
 
  2. Where can I get a Windows DLL version?
 
-    The zlib sources can be compiled without change to produce a DLL.
-    See the file win32/DLL_FAQ.txt in the zlib distribution.
-    Pointers to the precompiled DLL are found in the zlib web site at
-    http://www.zlib.org.
+    The zlib sources can be compiled without change to produce a DLL.  See the
+    file win32/DLL_FAQ.txt in the zlib distribution.  Pointers to the
+    precompiled DLL are found in the zlib web site at http://zlib.net/ .
 
  3. Where can I get a Visual Basic interface to zlib?
 
     See
-        * http://www.dogma.net/markn/articles/zlibtool/zlibtool.htm
-        * contrib/visual-basic.txt in the zlib distribution
+        * http://marknelson.us/1997/01/01/zlib-engine/
         * win32/DLL_FAQ.txt in the zlib distribution
 
  4. compress() returns Z_BUF_ERROR.
 
     Make sure that before the call of compress, the length of the compressed
-    buffer is equal to the total size of the compressed buffer and not
-    zero. For Visual Basic, check that this parameter is passed by reference
+    buffer is equal to the available size of the compressed buffer and not
+    zero.  For Visual Basic, check that this parameter is passed by reference
     ("as any"), not by value ("as long").
 
  5. deflate() or inflate() returns Z_BUF_ERROR.
 
-    Before making the call, make sure that avail_in and avail_out are not
-    zero. When setting the parameter flush equal to Z_FINISH, also make sure
-    that avail_out is big enough to allow processing all pending input.
-    Note that a Z_BUF_ERROR is not fatal--another call to deflate() or
-    inflate() can be made with more input or output space. A Z_BUF_ERROR
-    may in fact be unavoidable depending on how the functions are used, since
-    it is not possible to tell whether or not there is more output pending
-    when strm.avail_out returns with zero.
+    Before making the call, make sure that avail_in and avail_out are not zero.
+    When setting the parameter flush equal to Z_FINISH, also make sure that
+    avail_out is big enough to allow processing all pending input.  Note that a
+    Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be
+    made with more input or output space.  A Z_BUF_ERROR may in fact be
+    unavoidable depending on how the functions are used, since it is not
+    possible to tell whether or not there is more output pending when
+    strm.avail_out returns with zero.  See http://zlib.net/zlib_how.html for a
+    heavily annotated example.
 
  6. Where's the zlib documentation (man pages, etc.)?
 
-    It's in zlib.h for the moment, and Francis S. Lin has converted it to a
-    web page zlib.html. Volunteers to transform this to Unix-style man pages,
-    please contact us (zlib@gzip.org). Examples of zlib usage are in the files
-    example.c and minigzip.c.
+    It's in zlib.h .  Examples of zlib usage are in the files example.c and
+    minigzip.c, with more in examples/ .
 
  7. Why don't you use GNU autoconf or libtool or ...?
 
-    Because we would like to keep zlib as a very small and simple
-    package. zlib is rather portable and doesn't need much configuration.
+    Because we would like to keep zlib as a very small and simple package.
+    zlib is rather portable and doesn't need much configuration.
 
  8. I found a bug in zlib.
 
-    Most of the time, such problems are due to an incorrect usage of
-    zlib. Please try to reproduce the problem with a small program and send
-    the corresponding source to us at zlib@gzip.org . Do not send
-    multi-megabyte data files without prior agreement.
+    Most of the time, such problems are due to an incorrect usage of zlib.
+    Please try to reproduce the problem with a small program and send the
+    corresponding source to us at zlib@gzip.org .  Do not send multi-megabyte
+    data files without prior agreement.
 
  9. Why do I get "undefined reference to gzputc"?
 
@@ -77,12 +74,12 @@
 
 11. Can zlib handle .zip archives?
 
-    Not by itself, no. See the directory contrib/minizip in the zlib
+    Not by itself, no.  See the directory contrib/minizip in the zlib
     distribution.
 
 12. Can zlib handle .Z files?
 
-    No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt
+    No, sorry.  You have to spawn an uncompress or gunzip subprocess, or adapt
     the code of uncompress on your own.
 
 13. How can I make a Unix shared library?
@@ -99,8 +96,10 @@
 
     However, many flavors of Unix come with a shared zlib already installed.
     Before going to the trouble of compiling a shared version of zlib and
-    trying to install it, you may want to check if it's already there! If you
-    can #include <zlib.h>, it's there. The -lz option will probably link to it.
+    trying to install it, you may want to check if it's already there!  If you
+    can #include <zlib.h>, it's there.  The -lz option will probably link to
+    it.  You can check the version at the top of zlib.h or with the
+    ZLIB_VERSION symbol defined in zlib.h .
 
 15. I have a question about OttoPDF.
 
@@ -121,39 +120,39 @@
         symbol __register_frame_info: referenced symbol not found
 
     The symbol __register_frame_info is not part of zlib, it is generated by
-    the C compiler (cc or gcc). You must recompile applications using zlib
-    which have this problem. This problem is specific to Solaris. See
+    the C compiler (cc or gcc).  You must recompile applications using zlib
+    which have this problem.  This problem is specific to Solaris.  See
     http://www.sunfreeware.com for Solaris versions of zlib and applications
     using zlib.
 
 18. Why does gzip give an error on a file I make with compress/deflate?
 
     The compress and deflate functions produce data in the zlib format, which
-    is different and incompatible with the gzip format. The gz* functions in
-    zlib on the other hand use the gzip format. Both the zlib and gzip
-    formats use the same compressed data format internally, but have different
-    headers and trailers around the compressed data.
+    is different and incompatible with the gzip format.  The gz* functions in
+    zlib on the other hand use the gzip format.  Both the zlib and gzip formats
+    use the same compressed data format internally, but have different headers
+    and trailers around the compressed data.
 
 19. Ok, so why are there two different formats?
 
-    The gzip format was designed to retain the directory information about
-    a single file, such as the name and last modification date. The zlib
-    format on the other hand was designed for in-memory and communication
-    channel applications, and has a much more compact header and trailer and
-    uses a faster integrity check than gzip.
+    The gzip format was designed to retain the directory information about a
+    single file, such as the name and last modification date.  The zlib format
+    on the other hand was designed for in-memory and communication channel
+    applications, and has a much more compact header and trailer and uses a
+    faster integrity check than gzip.
 
 20. Well that's nice, but how do I make a gzip file in memory?
 
     You can request that deflate write the gzip format instead of the zlib
-    format using deflateInit2(). You can also request that inflate decode
-    the gzip format using inflateInit2(). Read zlib.h for more details.
+    format using deflateInit2().  You can also request that inflate decode the
+    gzip format using inflateInit2().  Read zlib.h for more details.
 
 21. Is zlib thread-safe?
 
-    Yes. However any library routines that zlib uses and any application-
-    provided memory allocation routines must also be thread-safe. zlib's gz*
+    Yes.  However any library routines that zlib uses and any application-
+    provided memory allocation routines must also be thread-safe.  zlib's gz*
     functions use stdio library routines, and most of zlib's functions use the
-    library memory allocation routines by default. zlib's Init functions allow
+    library memory allocation routines by default.  zlib's Init functions allow
     for the application to provide custom memory allocation routines.
 
     Of course, you should only operate on any given zlib or gzip stream from a
@@ -161,27 +160,27 @@
 
 22. Can I use zlib in my commercial application?
 
-    Yes. Please read the license in zlib.h.
+    Yes.  Please read the license in zlib.h.
 
 23. Is zlib under the GNU license?
 
-    No. Please read the license in zlib.h.
+    No.  Please read the license in zlib.h.
 
 24. The license says that altered source versions must be "plainly marked". So
     what exactly do I need to do to meet that requirement?
 
-    You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In
+    You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h.  In
     particular, the final version number needs to be changed to "f", and an
-    identification string should be appended to ZLIB_VERSION. Version numbers
+    identification string should be appended to ZLIB_VERSION.  Version numbers
     x.x.x.f are reserved for modifications to zlib by others than the zlib
-    maintainers. For example, if the version of the base zlib you are altering
+    maintainers.  For example, if the version of the base zlib you are altering
     is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and
-    ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also
+    ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3".  You can also
     update the version strings in deflate.c and inftrees.c.
 
     For altered source distributions, you should also note the origin and
     nature of the changes in zlib.h, as well as in ChangeLog and README, along
-    with the dates of the alterations. The origin should include at least your
+    with the dates of the alterations.  The origin should include at least your
     name (or your company's name), and an email address to contact for help or
     issues with the library.
 
@@ -197,111 +196,112 @@
 
 26. Will zlib work on a 64-bit machine?
 
-    It should. It has been tested on 64-bit machines, and has no dependence
-    on any data types being limited to 32-bits in length. If you have any
+    Yes.  It has been tested on 64-bit machines, and has no dependence on any
+    data types being limited to 32-bits in length.  If you have any
     difficulties, please provide a complete problem report to zlib@gzip.org
 
 27. Will zlib decompress data from the PKWare Data Compression Library?
 
-    No. The PKWare DCL uses a completely different compressed data format
-    than does PKZIP and zlib. However, you can look in zlib's contrib/blast
+    No.  The PKWare DCL uses a completely different compressed data format than
+    does PKZIP and zlib.  However, you can look in zlib's contrib/blast
     directory for a possible solution to your problem.
 
 28. Can I access data randomly in a compressed stream?
 
-    No, not without some preparation. If when compressing you periodically
-    use Z_FULL_FLUSH, carefully write all the pending data at those points,
-    and keep an index of those locations, then you can start decompression
-    at those points. You have to be careful to not use Z_FULL_FLUSH too
-    often, since it can significantly degrade compression.
+    No, not without some preparation.  If when compressing you periodically use
+    Z_FULL_FLUSH, carefully write all the pending data at those points, and
+    keep an index of those locations, then you can start decompression at those
+    points.  You have to be careful to not use Z_FULL_FLUSH too often, since it
+    can significantly degrade compression.  Alternatively, you can scan a
+    deflate stream once to generate an index, and then use that index for
+    random access.  See examples/zran.c .
 
 29. Does zlib work on MVS, OS/390, CICS, etc.?
 
-    Yes, there are working ports of zlib 1.1.4 to MVS which you can find
-    here:
+    It has in the past, but we have not heard of any recent evidence.  There
+    were working ports of zlib 1.1.4 to MVS, but those links no longer work.
+    If you know of recent, successful applications of zlib on these operating
+    systems, please let us know.  Thanks.
 
-    http://www.homerow.net/asm/zlib390.htm
-    http://www.homerow.net/asm/zlibLE.htm
+30. Is there some simpler, easier to read version of inflate I can look at to
+    understand the deflate format?
 
-    If these are updated to more recent versions of zlib, please let us
-    know. Thanks.
-
-30. Is there some simpler, easier to read version of inflate I can look at
-    to understand the deflate format?
-
-    First off, you should read RFC 1951. Second, yes. Look in zlib's
+    First off, you should read RFC 1951.  Second, yes.  Look in zlib's
     contrib/puff directory.
 
 31. Does zlib infringe on any patents?
 
-    As far as we know, no. In fact, that was originally the whole point behind
-    zlib. Look here for some more information:
+    As far as we know, no.  In fact, that was originally the whole point behind
+    zlib.  Look here for some more information:
 
     http://www.gzip.org/#faq11
 
 32. Can zlib work with greater than 4 GB of data?
 
-    Yes. inflate() and deflate() will process any amount of data correctly.
+    Yes.  inflate() and deflate() will process any amount of data correctly.
     Each call of inflate() or deflate() is limited to input and output chunks
     of the maximum value that can be stored in the compiler's "unsigned int"
-    type, but there is no limit to the number of chunks. Note however that the
-    strm.total_in and strm_total_out counters may be limited to 4 GB. These
+    type, but there is no limit to the number of chunks.  Note however that the
+    strm.total_in and strm_total_out counters may be limited to 4 GB.  These
     counters are provided as a convenience and are not used internally by
-    inflate() or deflate(). The application can easily set up its own counters
+    inflate() or deflate().  The application can easily set up its own counters
     updated after each call of inflate() or deflate() to count beyond 4 GB.
     compress() and uncompress() may be limited to 4 GB, since they operate in a
-    single call. gzseek() and gztell() may be limited to 4 GB depending on how
-    zlib is compiled. See the zlibCompileFlags() function in zlib.h.
+    single call.  gzseek() and gztell() may be limited to 4 GB depending on how
+    zlib is compiled.  See the zlibCompileFlags() function in zlib.h.
 
-    The word "may" appears several times above since there is a 4 GB limit
-    only if the compiler's "long" type is 32 bits. If the compiler's "long"
-    type is 64 bits, then the limit is 16 exabytes.
+    The word "may" appears several times above since there is a 4 GB limit only
+    if the compiler's "long" type is 32 bits.  If the compiler's "long" type is
+    64 bits, then the limit is 16 exabytes.
 
 33. Does zlib have any security vulnerabilities?
 
-    The only one that we are aware of is potentially in gzprintf(). If zlib
-    is compiled to use sprintf() or vsprintf(), then there is no protection
-    against a buffer overflow of a 4K string space, other than the caller of
-    gzprintf() assuring that the output will not exceed 4K. On the other
-    hand, if zlib is compiled to use snprintf() or vsnprintf(), which should
-    normally be the case, then there is no vulnerability. The ./configure
-    script will display warnings if an insecure variation of sprintf() will
-    be used by gzprintf(). Also the zlibCompileFlags() function will return
-    information on what variant of sprintf() is used by gzprintf().
+    The only one that we are aware of is potentially in gzprintf().  If zlib is
+    compiled to use sprintf() or vsprintf(), then there is no protection
+    against a buffer overflow of an 8K string space (or other value as set by
+    gzbuffer()), other than the caller of gzprintf() assuring that the output
+    will not exceed 8K.  On the other hand, if zlib is compiled to use
+    snprintf() or vsnprintf(), which should normally be the case, then there is
+    no vulnerability.  The ./configure script will display warnings if an
+    insecure variation of sprintf() will be used by gzprintf().  Also the
+    zlibCompileFlags() function will return information on what variant of
+    sprintf() is used by gzprintf().
 
     If you don't have snprintf() or vsnprintf() and would like one, you can
     find a portable implementation here:
 
         http://www.ijs.si/software/snprintf/
 
-    Note that you should be using the most recent version of zlib. Versions
-    1.1.3 and before were subject to a double-free vulnerability, and version
-    1.2.1 was subject to an access exception when decompressing invalid
-    compressed data.
+    Note that you should be using the most recent version of zlib.  Versions
+    1.1.3 and before were subject to a double-free vulnerability, and versions
+    1.2.1 and 1.2.2 were subject to an access exception when decompressing
+    invalid compressed data.
 
 34. Is there a Java version of zlib?
 
     Probably what you want is to use zlib in Java. zlib is already included
     as part of the Java SDK in the java.util.zip package. If you really want
     a version of zlib written in the Java language, look on the zlib home
-    page for links: http://www.zlib.org/
+    page for links: http://zlib.net/ .
 
 35. I get this or that compiler or source-code scanner warning when I crank it
     up to maximally-pedantic. Can't you guys write proper code?
 
     Many years ago, we gave up attempting to avoid warnings on every compiler
-    in the universe. It just got to be a waste of time, and some compilers
-    were downright silly. So now, we simply make sure that the code always
-    works.
+    in the universe.  It just got to be a waste of time, and some compilers
+    were downright silly as well as contradicted each other.  So now, we simply
+    make sure that the code always works.
 
 36. Valgrind (or some similar memory access checker) says that deflate is
     performing a conditional jump that depends on an uninitialized value.
     Isn't that a bug?
 
-    No. That is intentional for performance reasons, and the output of
-    deflate is not affected. This only started showing up recently since
-    zlib 1.2.x uses malloc() by default for allocations, whereas earlier
-    versions used calloc(), which zeros out the allocated memory.
+    No.  That is intentional for performance reasons, and the output of deflate
+    is not affected.  This only started showing up recently since zlib 1.2.x
+    uses malloc() by default for allocations, whereas earlier versions used
+    calloc(), which zeros out the allocated memory.  Even though the code was
+    correct, versions 1.2.4 and later was changed to not stimulate these
+    checkers.
 
 37. Will zlib read the (insert any ancient or arcane format here) compressed
     data format?
@@ -311,20 +311,21 @@
 
 38. How can I encrypt/decrypt zip files with zlib?
 
-    zlib doesn't support encryption. The original PKZIP encryption is very weak
-    and can be broken with freely available programs. To get strong encryption,
-    use GnuPG, http://www.gnupg.org/ , which already includes zlib compression.
-    For PKZIP compatible "encryption", look at http://www.info-zip.org/
+    zlib doesn't support encryption.  The original PKZIP encryption is very
+    weak and can be broken with freely available programs.  To get strong
+    encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib
+    compression.  For PKZIP compatible "encryption", look at
+    http://www.info-zip.org/
 
 39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
 
-    "gzip" is the gzip format, and "deflate" is the zlib format. They should
-    probably have called the second one "zlib" instead to avoid confusion
-    with the raw deflate compressed data format. While the HTTP 1.1 RFC 2616
+    "gzip" is the gzip format, and "deflate" is the zlib format.  They should
+    probably have called the second one "zlib" instead to avoid confusion with
+    the raw deflate compressed data format.  While the HTTP 1.1 RFC 2616
     correctly points to the zlib specification in RFC 1950 for the "deflate"
     transfer encoding, there have been reports of servers and browsers that
     incorrectly produce or expect raw deflate data per the deflate
-    specficiation in RFC 1951, most notably Microsoft. So even though the
+    specficiation in RFC 1951, most notably Microsoft.  So even though the
     "deflate" transfer encoding using the zlib format would be the more
     efficient approach (and in fact exactly what the zlib format was designed
     for), using the "gzip" transfer encoding is probably more reliable due to
@@ -334,28 +335,32 @@
 
 40. Does zlib support the new "Deflate64" format introduced by PKWare?
 
-    No. PKWare has apparently decided to keep that format proprietary, since
-    they have not documented it as they have previous compression formats.
-    In any case, the compression improvements are so modest compared to other
-    more modern approaches, that it's not worth the effort to implement.
+    No.  PKWare has apparently decided to keep that format proprietary, since
+    they have not documented it as they have previous compression formats.  In
+    any case, the compression improvements are so modest compared to other more
+    modern approaches, that it's not worth the effort to implement.
 
 41. I'm having a problem with the zip functions in zlib, can you help?
 
-    There are no zip functions in zlib. You are probably using minizip by
-    Giles Vollant, which is found in the contrib directory of zlib. It is not
-    part of zlib. In fact none of the stuff in contrib is part of zlib. The
-    files in there are not supported by the zlib authors. You need to contact
-    the authors of the contribution for help.
+    There are no zip functions in zlib.  You are probably using minizip by
+    Giles Vollant, which is found in the contrib directory of zlib.  It is not
+    part of zlib.  In fact none of the stuff in contrib is part of zlib.  The
+    files in there are not supported by the zlib authors.  You need to contact
+    the authors of the respective contribution for help.
 
 42. The match.asm code in contrib is under the GNU General Public License.
     Since it's part of zlib, doesn't that mean that all of zlib falls under the
     GNU GPL?
 
-    No. The files in contrib are not part of zlib. They were contributed by
+    No.  The files in contrib are not part of zlib.  They were contributed by
     other authors and are provided as a convenience to the user within the zlib
-    distribution. Each of the items in contrib have their own license.
+    distribution.  Each of the items in contrib have their own license.
 
-43. Can you please sign these lengthy legal documents and fax them back to us
+43. Is zlib subject to export controls?  What is its ECCN?
+
+    zlib is not subject to export controls, and so is classified as EAR99.
+
+44. Can you please sign these lengthy legal documents and fax them back to us
     so that we can use your software in our product?
 
     No. Go away. Shoo.
diff --git a/INDEX b/INDEX
index 01b0070..f66bf9b 100644
--- a/INDEX
+++ b/INDEX
@@ -2,33 +2,33 @@
 ChangeLog       history of changes
 FAQ             Frequently Asked Questions about zlib
 INDEX           this file
+Makefile        dummy Makefile that tells you to ./configure
 Makefile.in     template for Unix Makefile
 README          guess what
 configure       configure script for Unix
 make_vms.com    makefile for VMS
 treebuild.xml   XML description of source file dependencies
+zconf.h.cmakein zconf.h template for cmake
 zconf.h.in      zconf.h template for configure
 zlib.3          Man page for zlib
+zlib.3.pdf      Man page in PDF format
 zlib.map        Linux symbol information
 zlib.pc.in      Template for pkg-config descriptor
 zlib2ansi       perl script to convert source files for C++ compilation
 
 amiga/          makefiles for Amiga SAS C
-as400/          makefiles for IBM AS/400
 doc/            documentation for formats and algorithms
 msdos/          makefiles for MSDOS
 nintendods/     makefile for Nintendo DS
-objs/           destination for object files
 old/            makefiles for various architectures and zlib documentation
                 files that have not yet been updated for zlib 1.2.x
-pics/           destination for position-independent-code object files
 projects/       projects for various Integrated Development Environments
 qnx/            makefiles for QNX
 watcom/         makefiles for OpenWatcom
 win32/          makefiles for Windows
 
                 zlib public header files (required for library use):
-zconf.h         (made by configure)
+zconf.h
 zlib.h
 
                 private source files used to build the zlib library:
diff --git a/Makefile b/Makefile
index 744c494..3839b42 100644
--- a/Makefile
+++ b/Makefile
@@ -1,2 +1,5 @@
 all:
 	-@echo "Use ./configure first.  Thank you."
+
+distclean:
+	make -f Makefile.in distclean
diff --git a/Makefile.in b/Makefile.in
index c1cbeb5..efaec6f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -32,7 +32,7 @@
 
 STATICLIB=libz.a
 SHAREDLIB=libz.so
-SHAREDLIBV=libz.so.1.2.3.9
+SHAREDLIBV=libz.so.1.2.4
 SHAREDLIBM=libz.so.1
 LIBS=$(STATICLIB) $(SHAREDLIB) $(SHAREDLIBV)
 
@@ -193,6 +193,18 @@
 	cd $(DESTDIR)$(man3dir); rm -f zlib.3
 	cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc
 
+docs: zlib.3.pdf
+
+zlib.3.pdf: zlib.3
+	groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf
+
+zconf.h.in: zconf.h.cmakein
+	sed "/^#cmakedefine/D" < zconf.h.cmakein > zconf.h.in
+	touch -r zconf.h.cmakein zconf.h.in
+
+zconf: zconf.h.in
+	cp -p zconf.h.in zconf.h
+
 mostlyclean: clean
 clean:
 	rm -f *.o *.lo *~ \
@@ -203,10 +215,11 @@
 	rm -rf objs
 
 maintainer-clean: distclean
-distclean: clean
-	rm -f Makefile zconf.h zlib.pc
+distclean: clean zconf docs
+	rm -f Makefile zlib.pc
 	-@rm -f .DS_Store
 	-@printf 'all:\n\t-@echo "Use ./configure first.  Thank you."\n' > Makefile
+	-@printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile
 	-@touch -r Makefile.in Makefile
 
 tags:
diff --git a/README b/README
index e6bea09..f24aeee 100644
--- a/README
+++ b/README
@@ -1,56 +1,51 @@
 ZLIB DATA COMPRESSION LIBRARY
 
-zlib 1.2.3.9 is a general purpose data compression library.  All the code is
+zlib 1.2.4 is a general purpose data compression library.  All the code is
 thread safe.  The data format used by the zlib library is described by RFCs
 (Request for Comments) 1950 to 1952 in the files
 http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
-and rfc1952.txt (gzip format). These documents are also available in other
-formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
+and rfc1952.txt (gzip format).
 
 All functions of the compression library are documented in the file zlib.h
-(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
+(volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
 of the library is given in the file example.c which also tests that the library
-is working correctly. Another example is given in the file minigzip.c. The
+is working correctly.  Another example is given in the file minigzip.c.  The
 compression library itself is composed of all source files except example.c and
 minigzip.c.
 
 To compile all files and run the test program, follow the instructions given at
-the top of Makefile. In short "make test; make install" should work for most
-machines. For Unix: "./configure; make test; make install". For MSDOS, use one
-of the special makefiles such as Makefile.msc. For VMS, use make_vms.com.
+the top of Makefile.in.  In short "./configure; make test", and if that goes
+well, "make install" should work for most flavors of Unix.  For Windows, use one
+of the special makefiles in win32/ or projects/ .  For VMS, use make_vms.com.
 
 Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
-<info@winimage.com> for the Windows DLL version. The zlib home page is
-http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem,
-please check this site to verify that you have the latest version of zlib;
-otherwise get the latest version and check whether the problem still exists or
-not.
+<info@winimage.com> for the Windows DLL version.  The zlib home page is
+http://zlib.net/ .  Before reporting a problem, please check this site to
+verify that you have the latest version of zlib; otherwise get the latest
+version and check whether the problem still exists or not.
 
-PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking
-for help.
+PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
 
-Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
-issue of  Dr. Dobb's Journal; a copy of the article is available in
-http://dogma.net/markn/articles/zlibtool/zlibtool.htm
+Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan.  1997
+issue of Dr.  Dobb's Journal; a copy of the article is available at
+http://marknelson.us/1997/01/01/zlib-engine/ .
 
-The changes made in version 1.2.3.9 are documented in the file ChangeLog.
+The changes made in version 1.2.4 are documented in the file ChangeLog.
 
-Unsupported third party contributions are provided in directory "contrib".
+Unsupported third party contributions are provided in directory contrib/ .
 
-A Java implementation of zlib is available in the Java Development Kit
-http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html
-See the zlib home page http://www.zlib.org for details.
+zlib is available in Java using the java.util.zip package, documented at
+http://java.sun.com/developer/technicalArticles/Programming/compression/ .
 
-A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is in the
-CPAN (Comprehensive Perl Archive Network) sites
-http://www.cpan.org/modules/by-module/Compress/
+A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
+at CPAN (Comprehensive Perl Archive Network) sites, including
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
 
 A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
 available in Python 1.5 and later versions, see
-http://www.python.org/doc/lib/module-zlib.html
+http://www.python.org/doc/lib/module-zlib.html .
 
-A zlib binding for TCL written by Andreas Kupries <a.kupries@westend.com> is
-availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html
+zlib is built into tcl: http://wiki.tcl.tk/4610 .
 
 An experimental package to read and write files in .zip format, written on top
 of zlib by Gilles Vollant <info@winimage.com>, is available in the
@@ -74,25 +69,21 @@
 - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
   other compilers. Use "make test" to check your compiler.
 
-- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers.
+- gzdopen is not supported on RISCOS or BEOS.
 
 - For PalmOs, see http://palmzlib.sourceforge.net/
 
-- When building a shared, i.e. dynamic library on Mac OS X, the library must be
-  installed before testing (do "make install" before "make test"), since the
-  library location is specified in the library.
-
 
 Acknowledgments:
 
-  The deflate format used by zlib was defined by Phil Katz. The deflate
-  and zlib specifications were written by L. Peter Deutsch. Thanks to all the
-  people who reported problems and suggested various improvements in zlib;
-  they are too numerous to cite here.
+  The deflate format used by zlib was defined by Phil Katz.  The deflate and
+  zlib specifications were written by L.  Peter Deutsch.  Thanks to all the
+  people who reported problems and suggested various improvements in zlib; they
+  are too numerous to cite here.
 
 Copyright notice:
 
- (C) 1995-2004 Jean-loup Gailly and Mark Adler
+ (C) 1995-2010 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -113,13 +104,11 @@
   Jean-loup Gailly        Mark Adler
   jloup@gzip.org          madler@alumni.caltech.edu
 
-If you use the zlib library in a product, we would appreciate *not*
-receiving lengthy legal documents to sign. The sources are provided
-for free but without warranty of any kind.  The library has been
-entirely written by Jean-loup Gailly and Mark Adler; it does not
-include third-party code.
+If you use the zlib library in a product, we would appreciate *not* receiving
+lengthy legal documents to sign.  The sources are provided for free but without
+warranty of any kind.  The library has been entirely written by Jean-loup
+Gailly and Mark Adler; it does not include third-party code.
 
-If you redistribute modified sources, we would appreciate that you include
-in the file ChangeLog history information documenting your changes. Please
-read the FAQ for more information on the distribution of modified source
-versions.
+If you redistribute modified sources, we would appreciate that you include in
+the file ChangeLog history information documenting your changes.  Please read
+the FAQ for more information on the distribution of modified source versions.
diff --git a/configure b/configure
index 2ec1d5c..d3ee355 100755
--- a/configure
+++ b/configure
@@ -16,7 +16,7 @@
 STATICLIB=libz.a
 LDFLAGS="${LDFLAGS} -L. ${STATICLIB}"
 VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
-VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
+VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h`
 VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
 VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h`
 AR=${AR-"ar"}
@@ -250,7 +250,7 @@
   fi
 fi
 
-sed "/^#cmakedefine/D" < zconf.h.in > zconf.h
+cp -p zconf.h.in zconf.h
 
 cat > $test.c <<EOF
 #include <unistd.h>
diff --git a/contrib/README.contrib b/contrib/README.contrib
index 17fc8f6..dd2285d 100644
--- a/contrib/README.contrib
+++ b/contrib/README.contrib
@@ -12,7 +12,6 @@
         asm code for AMD64
         See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393
 
-asm586/
 asm686/     by Brian Raiter <breadbox@muppetlabs.com>
         asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax
         See http://www.muppetlabs.com/~breadbox/software/assembly.html
@@ -26,6 +25,10 @@
 dotzlib/    by Henrik Ravn <henrik@ravn.com>
         Support for Microsoft .Net and Visual C++ .Net
 
+gcc_gvmat64/by Gilles Vollant <info@winimage.com>
+        GCC Version of x86 64-bit (AMD64 and Intel EM64t) code for x64
+        assembler to replace longest_match() and inflate_fast()
+
 infback9/   by Mark Adler <madler@alumni.caltech.edu>
         Unsupported diffs to infback to decode the deflate64 format
 
@@ -42,21 +45,19 @@
             and Kevin Ruland <kevin@rodin.wustl.edu>
         Yet another C++ I/O streams interface
 
-masm686/    by Dan Higdon <hdan@kinesoft.com>
-            and Chuck Walbourn <chuckw@kinesoft.com>
-        asm code for Pentium Pro/PII, using the MASM syntax
-
 masmx64/    by Gilles Vollant <info@winimage.com>
-	x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to
-	replace longest_match() and inflate_fast()
+        x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to
+        replace longest_match() and inflate_fast(),  also masm x86
+        64-bits translation of Chris Anderson inflate_fast()
 
 masmx86/    by Gilles Vollant <info@winimage.com>
         x86 asm code to replace longest_match() and inflate_fast(),
-        for Visual C++ and MASM
+        for Visual C++ and MASM (32 bits).
+        Based on Brian Raiter (asm686) and Chris Anderson (inflate86)
 
 minizip/    by Gilles Vollant <info@winimage.com>
         Mini zip and unzip based on zlib
-	Includes Zip64 support by Mathias Svensson <mathias@result42.com>
+        Includes Zip64 support by Mathias Svensson <mathias@result42.com>
         See http://www.winimage.com/zLibDll/unzip.html
 
 pascal/     by Bob Dellaca <bobdl@xtra.co.nz> et al.
diff --git a/contrib/amd64/amd64-match.S b/contrib/amd64/amd64-match.S
index b3bf1ac..81d4a1c 100644
--- a/contrib/amd64/amd64-match.S
+++ b/contrib/amd64/amd64-match.S
@@ -52,14 +52,73 @@
 #define save_r13        (64-LocalVarsSize)(%rsp)
 #define save_r15        (80-LocalVarsSize)(%rsp)
 
+
+.globl	match_init, longest_match
+
 /*
  * On AMD64 the first argument of a function (in our case -- the pointer to
  * deflate_state structure) is passed in %rdi, hence our offsets below are
  * all off of that.
  */
+
+/* you can check the structure offset by running
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "deflate.h"
+
+void print_depl()
+{
+deflate_state ds;
+deflate_state *s=&ds;
+printf("size pointer=%u\n",(int)sizeof(void*));
+
+printf("#define dsWSize         (%3u)(%%rdi)\n",(int)(((char*)&(s->w_size))-((char*)s)));
+printf("#define dsWMask         (%3u)(%%rdi)\n",(int)(((char*)&(s->w_mask))-((char*)s)));
+printf("#define dsWindow        (%3u)(%%rdi)\n",(int)(((char*)&(s->window))-((char*)s)));
+printf("#define dsPrev          (%3u)(%%rdi)\n",(int)(((char*)&(s->prev))-((char*)s)));
+printf("#define dsMatchLen      (%3u)(%%rdi)\n",(int)(((char*)&(s->match_length))-((char*)s)));
+printf("#define dsPrevMatch     (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_match))-((char*)s)));
+printf("#define dsStrStart      (%3u)(%%rdi)\n",(int)(((char*)&(s->strstart))-((char*)s)));
+printf("#define dsMatchStart    (%3u)(%%rdi)\n",(int)(((char*)&(s->match_start))-((char*)s)));
+printf("#define dsLookahead     (%3u)(%%rdi)\n",(int)(((char*)&(s->lookahead))-((char*)s)));
+printf("#define dsPrevLen       (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_length))-((char*)s)));
+printf("#define dsMaxChainLen   (%3u)(%%rdi)\n",(int)(((char*)&(s->max_chain_length))-((char*)s)));
+printf("#define dsGoodMatch     (%3u)(%%rdi)\n",(int)(((char*)&(s->good_match))-((char*)s)));
+printf("#define dsNiceMatch     (%3u)(%%rdi)\n",(int)(((char*)&(s->nice_match))-((char*)s)));
+}
+
+*/
+
+
+/*
+  to compile for XCode 3.2 on MacOSX x86_64
+  - run "gcc -g -c -DXCODE_MAC_X64_STRUCTURE amd64-match.S"
+ */
+
+
+#ifndef CURRENT_LINX_XCODE_MAC_X64_STRUCTURE
+#define dsWSize		( 68)(%rdi)
+#define dsWMask		( 76)(%rdi)
+#define dsWindow	( 80)(%rdi)
+#define dsPrev		( 96)(%rdi)
+#define dsMatchLen	(144)(%rdi)
+#define dsPrevMatch	(148)(%rdi)
+#define dsStrStart	(156)(%rdi)
+#define dsMatchStart	(160)(%rdi)
+#define dsLookahead	(164)(%rdi)
+#define dsPrevLen	(168)(%rdi)
+#define dsMaxChainLen	(172)(%rdi)
+#define dsGoodMatch	(188)(%rdi)
+#define dsNiceMatch	(192)(%rdi)
+
+#else 
+
 #ifndef STRUCT_OFFSET
 #	define STRUCT_OFFSET	(0)
 #endif
+
+
 #define dsWSize		( 56 + STRUCT_OFFSET)(%rdi)
 #define dsWMask		( 64 + STRUCT_OFFSET)(%rdi)
 #define dsWindow	( 72 + STRUCT_OFFSET)(%rdi)
@@ -74,7 +133,10 @@
 #define dsGoodMatch	(180 + STRUCT_OFFSET)(%rdi)
 #define dsNiceMatch	(184 + STRUCT_OFFSET)(%rdi)
 
-.globl	match_init, longest_match
+#endif
+
+
+
 
 .text
 
@@ -222,7 +284,9 @@
  * straightforward "rep cmpsb" would not drastically degrade
  * performance -- unrolling it, for example, makes no difference.
  */
+
 #undef USE_SSE	/* works, but is 6-7% slower, than non-SSE... */
+
 LoopCmps:
 #ifdef USE_SSE
 		/* Preload the SSE registers */
@@ -244,29 +308,55 @@
 		notw	%ax
 		bsfw	%ax, %ax
 		jnz	LeaveLoopCmps
-		add	$16, %rdx
+		
+		/* this is the only iteration of the loop with a possibility of having
+		   incremented rdx by 0x108 (each loop iteration add 16*4 = 0x40 
+		   and (0x40*4)+8=0x108 */
+		add	$8, %rdx
+		jz LenMaximum
+		add	$8, %rdx
+
+		
 		pmovmskb %xmm3, %rax
 		notw	%ax
 		bsfw	%ax, %ax
 		jnz	LeaveLoopCmps
+		
+		
 		add	$16, %rdx
+
+
 		pmovmskb %xmm5, %rax
 		notw	%ax
 		bsfw	%ax, %ax
 		jnz	LeaveLoopCmps
+		
 		add	$16, %rdx
+
+
 		pmovmskb %xmm7, %rax
 		notw	%ax
 		bsfw	%ax, %ax
 		jnz	LeaveLoopCmps
+		
 		add	$16, %rdx
+		
 		jmp	LoopCmps
 LeaveLoopCmps:	add	%rax, %rdx
 #else
 		mov	(%windowbestlen, %rdx), %rax
 		xor	(%prev, %rdx), %rax
 		jnz	LeaveLoopCmps
-		add	$8, %rdx
+		
+		mov	8(%windowbestlen, %rdx), %rax
+		xor	8(%prev, %rdx), %rax
+		jnz	LeaveLoopCmps8
+
+		mov	16(%windowbestlen, %rdx), %rax
+		xor	16(%prev, %rdx), %rax
+		jnz	LeaveLoopCmps16
+				
+		add	$24, %rdx
 		jnz	LoopCmps
 		jmp	LenMaximum
 #	if 0
@@ -274,10 +364,15 @@
  * This three-liner is tantalizingly simple, but bsf is a slow instruction,
  * and the complicated alternative down below is quite a bit faster. Sad...
  */
+
 LeaveLoopCmps:	bsf	%rax, %rax /* find the first non-zero bit */
 		shrl	$3, %eax /* divide by 8 to get the byte */
 		add	%rax, %rdx
 #	else
+LeaveLoopCmps16:
+		add	$8, %rdx
+LeaveLoopCmps8:
+		add	$8, %rdx
 LeaveLoopCmps:	testl   $0xFFFFFFFF, %eax /* Check the first 4 bytes */
 		jnz     Check16
 		add     $4, %rdx
diff --git a/contrib/asm586/README.586 b/contrib/asm586/README.586
deleted file mode 100644
index 6bb78f3..0000000
--- a/contrib/asm586/README.586
+++ /dev/null
@@ -1,43 +0,0 @@
-This is a patched version of zlib modified to use
-Pentium-optimized assembly code in the deflation algorithm. The files
-changed/added by this patch are:
-
-README.586
-match.S
-
-The effectiveness of these modifications is a bit marginal, as the the
-program's bottleneck seems to be mostly L1-cache contention, for which
-there is no real way to work around without rewriting the basic
-algorithm. The speedup on average is around 5-10% (which is generally
-less than the amount of variance between subsequent executions).
-However, when used at level 9 compression, the cache contention can
-drop enough for the assembly version to achieve 10-20% speedup (and
-sometimes more, depending on the amount of overall redundancy in the
-files). Even here, though, cache contention can still be the limiting
-factor, depending on the nature of the program using the zlib library.
-This may also mean that better improvements will be seen on a Pentium
-with MMX, which suffers much less from L1-cache contention, but I have
-not yet verified this.
-
-Note that this code has been tailored for the Pentium in particular,
-and will not perform well on the Pentium Pro (due to the use of a
-partial register in the inner loop).
-
-If you are using an assembler other than GNU as, you will have to
-translate match.S to use your assembler's syntax. (Have fun.)
-
-Brian Raiter
-breadbox@muppetlabs.com
-April, 1998
-
-
-Added for zlib 1.1.3:
-
-The patches come from
-http://www.muppetlabs.com/~breadbox/software/assembly.html
-
-To compile zlib with this asm file, copy match.S to the zlib directory
-then do:
-
-CFLAGS="-O3 -DASMV" ./configure
-make OBJA=match.o
diff --git a/contrib/asm586/match.S b/contrib/asm586/match.S
deleted file mode 100644
index 0368b35..0000000
--- a/contrib/asm586/match.S
+++ /dev/null
@@ -1,364 +0,0 @@
-/* match.s -- Pentium-optimized version of longest_match()
- * Written for zlib 1.1.2
- * Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License.
- */
-
-#ifndef NO_UNDERLINE
-#define	match_init	_match_init
-#define	longest_match	_longest_match
-#endif
-
-#define	MAX_MATCH	(258)
-#define	MIN_MATCH	(3)
-#define	MIN_LOOKAHEAD	(MAX_MATCH + MIN_MATCH + 1)
-#define	MAX_MATCH_8	((MAX_MATCH + 7) & ~7)
-
-/* stack frame offsets */
-
-#define	wmask			0	/* local copy of s->wmask	*/
-#define	window			4	/* local copy of s->window	*/
-#define	windowbestlen		8	/* s->window + bestlen		*/
-#define	chainlenscanend		12	/* high word: current chain len	*/
-					/* low word: last bytes sought	*/
-#define	scanstart		16	/* first two bytes of string	*/
-#define	scanalign		20	/* dword-misalignment of string	*/
-#define	nicematch		24	/* a good enough match size	*/
-#define	bestlen			28	/* size of best match so far	*/
-#define	scan			32	/* ptr to string wanting match	*/
-
-#define	LocalVarsSize		(36)
-/*	saved ebx		36 */
-/*	saved edi		40 */
-/*	saved esi		44 */
-/*	saved ebp		48 */
-/*	return address		52 */
-#define	deflatestate		56	/* the function arguments	*/
-#define	curmatch		60
-
-/* Offsets for fields in the deflate_state structure. These numbers
- * are calculated from the definition of deflate_state, with the
- * assumption that the compiler will dword-align the fields. (Thus,
- * changing the definition of deflate_state could easily cause this
- * program to crash horribly, without so much as a warning at
- * compile time. Sigh.)
- */
-
-/* All the +zlib1222add offsets are due to the addition of fields
- *  in zlib in the deflate_state structure since the asm code was first written
- * (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").
- * (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").
- * if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").
- */
-
-#define zlib1222add		(8)
-
-#define	dsWSize			(36+zlib1222add)
-#define	dsWMask			(44+zlib1222add)
-#define	dsWindow		(48+zlib1222add)
-#define	dsPrev			(56+zlib1222add)
-#define	dsMatchLen		(88+zlib1222add)
-#define	dsPrevMatch		(92+zlib1222add)
-#define	dsStrStart		(100+zlib1222add)
-#define	dsMatchStart		(104+zlib1222add)
-#define	dsLookahead		(108+zlib1222add)
-#define	dsPrevLen		(112+zlib1222add)
-#define	dsMaxChainLen		(116+zlib1222add)
-#define	dsGoodMatch		(132+zlib1222add)
-#define	dsNiceMatch		(136+zlib1222add)
-
-
-.file "match.S"
-
-.globl	match_init, longest_match
-
-.text
-
-/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
-
-longest_match:
-
-/* Save registers that the compiler may be using, and adjust %esp to	*/
-/* make room for our stack frame.					*/
-
-		pushl	%ebp
-		pushl	%edi
-		pushl	%esi
-		pushl	%ebx
-		subl	$LocalVarsSize, %esp
-
-/* Retrieve the function arguments. %ecx will hold cur_match		*/
-/* throughout the entire function. %edx will hold the pointer to the	*/
-/* deflate_state structure during the function's setup (before		*/
-/* entering the main loop).						*/
-
-		movl	deflatestate(%esp), %edx
-		movl	curmatch(%esp), %ecx
-
-/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;	*/
-
-		movl	dsNiceMatch(%edx), %eax
-		movl	dsLookahead(%edx), %ebx
-		cmpl	%eax, %ebx
-		jl	LookaheadLess
-		movl	%eax, %ebx
-LookaheadLess:	movl	%ebx, nicematch(%esp)
-
-/* register Bytef *scan = s->window + s->strstart;			*/
-
-		movl	dsWindow(%edx), %esi
-		movl	%esi, window(%esp)
-		movl	dsStrStart(%edx), %ebp
-		lea	(%esi,%ebp), %edi
-		movl	%edi, scan(%esp)
-
-/* Determine how many bytes the scan ptr is off from being		*/
-/* dword-aligned.							*/
-
-		movl	%edi, %eax
-		negl	%eax
-		andl	$3, %eax
-		movl	%eax, scanalign(%esp)
-
-/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ?			*/
-/*     s->strstart - (IPos)MAX_DIST(s) : NIL;				*/
-
-		movl	dsWSize(%edx), %eax
-		subl	$MIN_LOOKAHEAD, %eax
-		subl	%eax, %ebp
-		jg	LimitPositive
-		xorl	%ebp, %ebp
-LimitPositive:
-
-/* unsigned chain_length = s->max_chain_length;				*/
-/* if (s->prev_length >= s->good_match) {				*/
-/*     chain_length >>= 2;						*/
-/* }									*/
-
-		movl	dsPrevLen(%edx), %eax
-		movl	dsGoodMatch(%edx), %ebx
-		cmpl	%ebx, %eax
-		movl	dsMaxChainLen(%edx), %ebx
-		jl	LastMatchGood
-		shrl	$2, %ebx
-LastMatchGood:
-
-/* chainlen is decremented once beforehand so that the function can	*/
-/* use the sign flag instead of the zero flag for the exit test.	*/
-/* It is then shifted into the high word, to make room for the scanend	*/
-/* scanend value, which it will always accompany.			*/
-
-		decl	%ebx
-		shll	$16, %ebx
-
-/* int best_len = s->prev_length;					*/
-
-		movl	dsPrevLen(%edx), %eax
-		movl	%eax, bestlen(%esp)
-
-/* Store the sum of s->window + best_len in %esi locally, and in %esi.	*/
-
-		addl	%eax, %esi
-		movl	%esi, windowbestlen(%esp)
-
-/* register ush scan_start = *(ushf*)scan;				*/
-/* register ush scan_end   = *(ushf*)(scan+best_len-1);			*/
-
-		movw	(%edi), %bx
-		movw	%bx, scanstart(%esp)
-		movw	-1(%edi,%eax), %bx
-		movl	%ebx, chainlenscanend(%esp)
-
-/* Posf *prev = s->prev;						*/
-/* uInt wmask = s->w_mask;						*/
-
-		movl	dsPrev(%edx), %edi
-		movl	dsWMask(%edx), %edx
-		mov	%edx, wmask(%esp)
-
-/* Jump into the main loop.						*/
-
-		jmp	LoopEntry
-
-.balign 16
-
-/* do {
- *     match = s->window + cur_match;
- *     if (*(ushf*)(match+best_len-1) != scan_end ||
- *         *(ushf*)match != scan_start) continue;
- *     [...]
- * } while ((cur_match = prev[cur_match & wmask]) > limit
- *          && --chain_length != 0);
- *
- * Here is the inner loop of the function. The function will spend the
- * majority of its time in this loop, and majority of that time will
- * be spent in the first ten instructions.
- *
- * Within this loop:
- * %ebx = chainlenscanend - i.e., ((chainlen << 16) | scanend)
- * %ecx = curmatch
- * %edx = curmatch & wmask
- * %esi = windowbestlen - i.e., (window + bestlen)
- * %edi = prev
- * %ebp = limit
- *
- * Two optimization notes on the choice of instructions:
- *
- * The first instruction uses a 16-bit address, which costs an extra,
- * unpairable cycle. This is cheaper than doing a 32-bit access and
- * zeroing the high word, due to the 3-cycle misalignment penalty which
- * would occur half the time. This also turns out to be cheaper than
- * doing two separate 8-bit accesses, as the memory is so rarely in the
- * L1 cache.
- *
- * The window buffer, however, apparently spends a lot of time in the
- * cache, and so it is faster to retrieve the word at the end of the
- * match string with two 8-bit loads. The instructions that test the
- * word at the beginning of the match string, however, are executed
- * much less frequently, and there it was cheaper to use 16-bit
- * instructions, which avoided the necessity of saving off and
- * subsequently reloading one of the other registers.
- */
-LookupLoop:
-							/* 1 U & V  */
-		movw	(%edi,%edx,2), %cx		/* 2 U pipe */
-		movl	wmask(%esp), %edx		/* 2 V pipe */
-		cmpl	%ebp, %ecx			/* 3 U pipe */
-		jbe	LeaveNow			/* 3 V pipe */
-		subl	$0x00010000, %ebx		/* 4 U pipe */
-		js	LeaveNow			/* 4 V pipe */
-LoopEntry:	movb	-1(%esi,%ecx), %al		/* 5 U pipe */
-		andl	%ecx, %edx			/* 5 V pipe */
-		cmpb	%bl, %al			/* 6 U pipe */
-		jnz	LookupLoop			/* 6 V pipe */
-		movb	(%esi,%ecx), %ah
-		cmpb	%bh, %ah
-		jnz	LookupLoop
-		movl	window(%esp), %eax
-		movw	(%eax,%ecx), %ax
-		cmpw	scanstart(%esp), %ax
-		jnz	LookupLoop
-
-/* Store the current value of chainlen.					*/
-
-		movl	%ebx, chainlenscanend(%esp)
-
-/* Point %edi to the string under scrutiny, and %esi to the string we	*/
-/* are hoping to match it up with. In actuality, %esi and %edi are	*/
-/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is	*/
-/* initialized to -(MAX_MATCH_8 - scanalign).				*/
-
-		movl	window(%esp), %esi
-		movl	scan(%esp), %edi
-		addl	%ecx, %esi
-		movl	scanalign(%esp), %eax
-		movl	$(-MAX_MATCH_8), %edx
-		lea	MAX_MATCH_8(%edi,%eax), %edi
-		lea	MAX_MATCH_8(%esi,%eax), %esi
-
-/* Test the strings for equality, 8 bytes at a time. At the end,
- * adjust %edx so that it is offset to the exact byte that mismatched.
- *
- * We already know at this point that the first three bytes of the
- * strings match each other, and they can be safely passed over before
- * starting the compare loop. So what this code does is skip over 0-3
- * bytes, as much as necessary in order to dword-align the %edi
- * pointer. (%esi will still be misaligned three times out of four.)
- *
- * It should be confessed that this loop usually does not represent
- * much of the total running time. Replacing it with a more
- * straightforward "rep cmpsb" would not drastically degrade
- * performance.
- */
-LoopCmps:
-		movl	(%esi,%edx), %eax
-		movl	(%edi,%edx), %ebx
-		xorl	%ebx, %eax
-		jnz	LeaveLoopCmps
-		movl	4(%esi,%edx), %eax
-		movl	4(%edi,%edx), %ebx
-		xorl	%ebx, %eax
-		jnz	LeaveLoopCmps4
-		addl	$8, %edx
-		jnz	LoopCmps
-		jmp	LenMaximum
-LeaveLoopCmps4:	addl	$4, %edx
-LeaveLoopCmps:	testl	$0x0000FFFF, %eax
-		jnz	LenLower
-		addl	$2, %edx
-		shrl	$16, %eax
-LenLower:	subb	$1, %al
-		adcl	$0, %edx
-
-/* Calculate the length of the match. If it is longer than MAX_MATCH,	*/
-/* then automatically accept it as the best possible match and leave.	*/
-
-		lea	(%edi,%edx), %eax
-		movl	scan(%esp), %edi
-		subl	%edi, %eax
-		cmpl	$MAX_MATCH, %eax
-		jge	LenMaximum
-
-/* If the length of the match is not longer than the best match we	*/
-/* have so far, then forget it and return to the lookup loop.		*/
-
-		movl	deflatestate(%esp), %edx
-		movl	bestlen(%esp), %ebx
-		cmpl	%ebx, %eax
-		jg	LongerMatch
-		movl	chainlenscanend(%esp), %ebx
-		movl	windowbestlen(%esp), %esi
-		movl	dsPrev(%edx), %edi
-		movl	wmask(%esp), %edx
-		andl	%ecx, %edx
-		jmp	LookupLoop
-
-/*         s->match_start = cur_match;					*/
-/*         best_len = len;						*/
-/*         if (len >= nice_match) break;				*/
-/*         scan_end = *(ushf*)(scan+best_len-1);			*/
-
-LongerMatch:	movl	nicematch(%esp), %ebx
-		movl	%eax, bestlen(%esp)
-		movl	%ecx, dsMatchStart(%edx)
-		cmpl	%ebx, %eax
-		jge	LeaveNow
-		movl	window(%esp), %esi
-		addl	%eax, %esi
-		movl	%esi, windowbestlen(%esp)
-		movl	chainlenscanend(%esp), %ebx
-		movw	-1(%edi,%eax), %bx
-		movl	dsPrev(%edx), %edi
-		movl	%ebx, chainlenscanend(%esp)
-		movl	wmask(%esp), %edx
-		andl	%ecx, %edx
-		jmp	LookupLoop
-
-/* Accept the current string, with the maximum possible length.		*/
-
-LenMaximum:	movl	deflatestate(%esp), %edx
-		movl	$MAX_MATCH, bestlen(%esp)
-		movl	%ecx, dsMatchStart(%edx)
-
-/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len;		*/
-/* return s->lookahead;							*/
-
-LeaveNow:
-		movl	deflatestate(%esp), %edx
-		movl	bestlen(%esp), %ebx
-		movl	dsLookahead(%edx), %eax
-		cmpl	%eax, %ebx
-		jg	LookaheadRet
-		movl	%ebx, %eax
-LookaheadRet:
-
-/* Restore the stack and return from whence we came.			*/
-
-		addl	$LocalVarsSize, %esp
-		popl	%ebx
-		popl	%esi
-		popl	%edi
-		popl	%ebp
-match_init:	ret
diff --git a/contrib/asm686/README.686 b/contrib/asm686/README.686
index a593f23..a0bf3be 100644
--- a/contrib/asm686/README.686
+++ b/contrib/asm686/README.686
@@ -32,3 +32,20 @@
 
 CFLAGS="-O3 -DASMV" ./configure
 make OBJA=match.o
+
+
+Update:
+
+I've been ignoring these assembly routines for years, believing that
+gcc's generated code had caught up with it sometime around gcc 2.95
+and the major rearchitecting of the Pentium 4. However, I recently
+learned that, despite what I believed, this code still has some life
+in it. On the Pentium 4 and AMD64 chips, it continues to run about 8%
+faster than the code produced by gcc 4.1.
+
+In acknowledgement of its continuing usefulness, I've altered the
+license to match that of the rest of zlib. Share and Enjoy!
+
+Brian Raiter
+breadbox@muppetlabs.com
+April, 2007
diff --git a/contrib/asm686/match.S b/contrib/asm686/match.S
index 5c3e9ee..06817e1 100644
--- a/contrib/asm686/match.S
+++ b/contrib/asm686/match.S
@@ -1,9 +1,23 @@
-/* match.s -- Pentium-Pro-optimized version of longest_match()
- * Written for zlib 1.1.2
- * Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
+/* match.S -- x86 assembly version of the zlib longest_match() function.
+ * Optimized for the Intel 686 chips (PPro and later).
  *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License.
+ * Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the author be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
  */
 
 #ifndef NO_UNDERLINE
diff --git a/contrib/delphi/ZLib.pas b/contrib/delphi/ZLib.pas
index 3f2b8b4..179f9a9 100644
--- a/contrib/delphi/ZLib.pas
+++ b/contrib/delphi/ZLib.pas
@@ -152,7 +152,7 @@
   const OutBuf: Pointer; BufSize: Integer);
 
 const
-  zlib_version = '1.2.3';
+  zlib_version = '1.2.4';
 
 type
   EZlibError = class(Exception);
diff --git a/contrib/dotzlib/DotZLib/UnitTests.cs b/contrib/dotzlib/DotZLib/UnitTests.cs
index eb751bb..42c4588 100644
--- a/contrib/dotzlib/DotZLib/UnitTests.cs
+++ b/contrib/dotzlib/DotZLib/UnitTests.cs
@@ -156,7 +156,7 @@
         public void Info_Version()

         {

             Info info = new Info();

-            Assert.AreEqual("1.2.3", Info.Version);

+            Assert.AreEqual("1.2.4", Info.Version);

             Assert.AreEqual(32, info.SizeOfUInt);

             Assert.AreEqual(32, info.SizeOfULong);

             Assert.AreEqual(32, info.SizeOfPointer);

diff --git a/contrib/gcc_gvmat64/gvmat64.S b/contrib/gcc_gvmat64/gvmat64.S
new file mode 100644
index 0000000..dd858dd
--- /dev/null
+++ b/contrib/gcc_gvmat64/gvmat64.S
@@ -0,0 +1,574 @@
+/*

+;uInt longest_match_x64(

+;    deflate_state *s,

+;    IPos cur_match);                             // current match 

+

+; gvmat64.S -- Asm portion of the optimized longest_match for 32 bits x86_64

+;  (AMD64 on Athlon 64, Opteron, Phenom

+;     and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)

+; this file is translation from gvmat64.asm to GCC 4.x (for Linux, Mac XCode)

+; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.

+;

+; File written by Gilles Vollant, by converting to assembly the longest_match

+;  from Jean-loup Gailly in deflate.c of zLib and infoZip zip.

+;  and by taking inspiration on asm686 with masm, optimised assembly code

+;        from Brian Raiter, written 1998

+;

+;  This software is provided 'as-is', without any express or implied

+;  warranty.  In no event will the authors be held liable for any damages

+;  arising from the use of this software.

+;

+;  Permission is granted to anyone to use this software for any purpose,

+;  including commercial applications, and to alter it and redistribute it

+;  freely, subject to the following restrictions:

+;

+;  1. The origin of this software must not be misrepresented; you must not

+;     claim that you wrote the original software. If you use this software

+;     in a product, an acknowledgment in the product documentation would be

+;     appreciated but is not required.

+;  2. Altered source versions must be plainly marked as such, and must not be

+;     misrepresented as being the original software

+;  3. This notice may not be removed or altered from any source distribution.

+;

+;         http://www.zlib.net

+;         http://www.winimage.com/zLibDll

+;         http://www.muppetlabs.com/~breadbox/software/assembly.html

+;

+; to compile this file for zLib, I use option:

+;   gcc -c -arch x86_64 gvmat64.S

+

+

+;uInt longest_match(s, cur_match)

+;    deflate_state *s;

+;    IPos cur_match;                             // current match /

+;

+; with XCode for Mac, I had strange error with some jump on intel syntax

+; this is why BEFORE_JMP and AFTER_JMP are used

+ */

+

+

+#define BEFORE_JMP .att_syntax

+#define AFTER_JMP .intel_syntax noprefix

+

+#ifndef NO_UNDERLINE

+#	define	match_init	_match_init

+#	define	longest_match	_longest_match

+#endif

+

+.intel_syntax noprefix

+

+.globl	match_init, longest_match

+.text

+longest_match:

+

+

+

+#define LocalVarsSize 96

+/*

+; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12

+; free register :  r14,r15

+; register can be saved : rsp

+*/

+

+#define chainlenwmask     (rsp + 8 - LocalVarsSize)

+#define nicematch         (rsp + 16 - LocalVarsSize)

+

+#define save_rdi        (rsp + 24 - LocalVarsSize)

+#define save_rsi        (rsp + 32 - LocalVarsSize)

+#define save_rbx        (rsp + 40 - LocalVarsSize)

+#define save_rbp        (rsp + 48 - LocalVarsSize)

+#define save_r12        (rsp + 56 - LocalVarsSize)

+#define save_r13        (rsp + 64 - LocalVarsSize)

+#define save_r14        (rsp + 72 - LocalVarsSize)

+#define save_r15        (rsp + 80 - LocalVarsSize)

+

+

+/*

+;  all the +4 offsets are due to the addition of pending_buf_size (in zlib

+;  in the deflate_state structure since the asm code was first written

+;  (if you compile with zlib 1.0.4 or older, remove the +4).

+;  Note : these value are good with a 8 bytes boundary pack structure

+*/

+

+#define    MAX_MATCH              258

+#define    MIN_MATCH              3

+#define    MIN_LOOKAHEAD          (MAX_MATCH+MIN_MATCH+1)

+

+/*

+;;; Offsets for fields in the deflate_state structure. These numbers

+;;; are calculated from the definition of deflate_state, with the

+;;; assumption that the compiler will dword-align the fields. (Thus,

+;;; changing the definition of deflate_state could easily cause this

+;;; program to crash horribly, without so much as a warning at

+;;; compile time. Sigh.)

+

+;  all the +zlib1222add offsets are due to the addition of fields

+;  in zlib in the deflate_state structure since the asm code was first written

+;  (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").

+;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").

+;  if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").

+*/

+

+

+

+/* you can check the structure offset by running

+

+#include <stdlib.h>

+#include <stdio.h>

+#include "deflate.h"

+

+void print_depl()

+{

+deflate_state ds;

+deflate_state *s=&ds;

+printf("size pointer=%u\n",(int)sizeof(void*));

+

+printf("#define dsWSize         %u\n",(int)(((char*)&(s->w_size))-((char*)s)));

+printf("#define dsWMask         %u\n",(int)(((char*)&(s->w_mask))-((char*)s)));

+printf("#define dsWindow        %u\n",(int)(((char*)&(s->window))-((char*)s)));

+printf("#define dsPrev          %u\n",(int)(((char*)&(s->prev))-((char*)s)));

+printf("#define dsMatchLen      %u\n",(int)(((char*)&(s->match_length))-((char*)s)));

+printf("#define dsPrevMatch     %u\n",(int)(((char*)&(s->prev_match))-((char*)s)));

+printf("#define dsStrStart      %u\n",(int)(((char*)&(s->strstart))-((char*)s)));

+printf("#define dsMatchStart    %u\n",(int)(((char*)&(s->match_start))-((char*)s)));

+printf("#define dsLookahead     %u\n",(int)(((char*)&(s->lookahead))-((char*)s)));

+printf("#define dsPrevLen       %u\n",(int)(((char*)&(s->prev_length))-((char*)s)));

+printf("#define dsMaxChainLen   %u\n",(int)(((char*)&(s->max_chain_length))-((char*)s)));

+printf("#define dsGoodMatch     %u\n",(int)(((char*)&(s->good_match))-((char*)s)));

+printf("#define dsNiceMatch     %u\n",(int)(((char*)&(s->nice_match))-((char*)s)));

+}

+*/

+

+#define dsWSize          68

+#define dsWMask          76

+#define dsWindow         80

+#define dsPrev           96

+#define dsMatchLen       144

+#define dsPrevMatch      148

+#define dsStrStart       156

+#define dsMatchStart     160

+#define dsLookahead      164

+#define dsPrevLen        168

+#define dsMaxChainLen    172

+#define dsGoodMatch      188

+#define dsNiceMatch      192

+

+#define window_size      [ rcx + dsWSize]

+#define WMask            [ rcx + dsWMask]

+#define window_ad        [ rcx + dsWindow]

+#define prev_ad          [ rcx + dsPrev]

+#define strstart         [ rcx + dsStrStart]

+#define match_start      [ rcx + dsMatchStart]

+#define Lookahead        [ rcx + dsLookahead] //; 0ffffffffh on infozip

+#define prev_length      [ rcx + dsPrevLen]

+#define max_chain_length [ rcx + dsMaxChainLen]

+#define good_match       [ rcx + dsGoodMatch]

+#define nice_match       [ rcx + dsNiceMatch]

+

+/*

+; windows:

+; parameter 1 in rcx(deflate state s), param 2 in rdx (cur match)

+

+; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and

+; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp

+;

+; All registers must be preserved across the call, except for

+;   rax, rcx, rdx, r8, r9, r10, and r11, which are scratch.

+

+;

+; gcc on macosx-linux:

+; see http://www.x86-64.org/documentation/abi-0.99.pdf

+; param 1 in rdi, param 2 in rsi

+; rbx, rsp, rbp, r12 to r15 must be preserved

+

+;;; Save registers that the compiler may be using, and adjust esp to

+;;; make room for our stack frame.

+

+

+;;; Retrieve the function arguments. r8d will hold cur_match

+;;; throughout the entire function. edx will hold the pointer to the

+;;; deflate_state structure during the function's setup (before

+;;; entering the main loop.

+

+; ms: parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)

+; mac: param 1 in rdi, param 2 rsi

+; this clear high 32 bits of r8, which can be garbage in both r8 and rdx

+*/

+        mov [save_rbx],rbx

+        mov [save_rbp],rbp

+

+

+        mov rcx,rdi

+

+        mov r8d,esi

+

+

+        mov [save_r12],r12

+        mov [save_r13],r13

+        mov [save_r14],r14

+        mov [save_r15],r15

+

+

+//;;; uInt wmask = s->w_mask;

+//;;; unsigned chain_length = s->max_chain_length;

+//;;; if (s->prev_length >= s->good_match) {

+//;;;     chain_length >>= 2;

+//;;; }

+

+

+        mov edi, prev_length

+        mov esi, good_match

+        mov eax, WMask

+        mov ebx, max_chain_length

+        cmp edi, esi

+        jl  LastMatchGood

+        shr ebx, 2

+LastMatchGood:

+

+//;;; chainlen is decremented once beforehand so that the function can

+//;;; use the sign flag instead of the zero flag for the exit test.

+//;;; It is then shifted into the high word, to make room for the wmask

+//;;; value, which it will always accompany.

+

+        dec ebx

+        shl ebx, 16

+        or  ebx, eax

+

+//;;; on zlib only

+//;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;

+

+

+

+        mov eax, nice_match

+        mov [chainlenwmask], ebx

+        mov r10d, Lookahead

+        cmp r10d, eax

+        cmovnl r10d, eax

+        mov [nicematch],r10d

+

+

+

+//;;; register Bytef *scan = s->window + s->strstart;

+        mov r10, window_ad

+        mov ebp, strstart

+        lea r13, [r10 + rbp]

+

+//;;; Determine how many bytes the scan ptr is off from being

+//;;; dword-aligned.

+

+         mov r9,r13

+         neg r13

+         and r13,3

+

+//;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?

+//;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;

+

+

+        mov eax, window_size

+        sub eax, MIN_LOOKAHEAD

+

+

+        xor edi,edi

+        sub ebp, eax

+

+        mov r11d, prev_length

+

+        cmovng ebp,edi

+

+//;;; int best_len = s->prev_length;

+

+

+//;;; Store the sum of s->window + best_len in esi locally, and in esi.

+

+       lea  rsi,[r10+r11]

+

+//;;; register ush scan_start = *(ushf*)scan;

+//;;; register ush scan_end   = *(ushf*)(scan+best_len-1);

+//;;; Posf *prev = s->prev;

+

+        movzx r12d,word ptr [r9]

+        movzx ebx, word ptr [r9 + r11 - 1]

+

+        mov rdi, prev_ad

+

+//;;; Jump into the main loop.

+

+        mov edx, [chainlenwmask]

+

+        cmp bx,word ptr [rsi + r8 - 1]

+        jz  LookupLoopIsZero

+				

+						

+						

+LookupLoop1:

+        and r8d, edx

+

+        movzx   r8d, word ptr [rdi + r8*2]

+        cmp r8d, ebp

+        jbe LeaveNow

+		

+		

+		

+        sub edx, 0x00010000

+		BEFORE_JMP

+        js  LeaveNow

+		AFTER_JMP

+

+LoopEntry1:

+        cmp bx,word ptr [rsi + r8 - 1]

+		BEFORE_JMP

+        jz  LookupLoopIsZero

+		AFTER_JMP

+

+LookupLoop2:

+        and r8d, edx

+

+        movzx   r8d, word ptr [rdi + r8*2]

+        cmp r8d, ebp

+		BEFORE_JMP

+        jbe LeaveNow

+		AFTER_JMP

+        sub edx, 0x00010000

+		BEFORE_JMP

+        js  LeaveNow

+		AFTER_JMP

+

+LoopEntry2:

+        cmp bx,word ptr [rsi + r8 - 1]

+		BEFORE_JMP

+        jz  LookupLoopIsZero

+		AFTER_JMP

+

+LookupLoop4:

+        and r8d, edx

+

+        movzx   r8d, word ptr [rdi + r8*2]

+        cmp r8d, ebp

+		BEFORE_JMP

+        jbe LeaveNow

+		AFTER_JMP

+        sub edx, 0x00010000

+		BEFORE_JMP

+        js  LeaveNow

+		AFTER_JMP

+

+LoopEntry4:

+

+        cmp bx,word ptr [rsi + r8 - 1]

+		BEFORE_JMP

+        jnz LookupLoop1

+        jmp LookupLoopIsZero

+		AFTER_JMP

+/*

+;;; do {

+;;;     match = s->window + cur_match;

+;;;     if (*(ushf*)(match+best_len-1) != scan_end ||

+;;;         *(ushf*)match != scan_start) continue;

+;;;     [...]

+;;; } while ((cur_match = prev[cur_match & wmask]) > limit

+;;;          && --chain_length != 0);

+;;;

+;;; Here is the inner loop of the function. The function will spend the

+;;; majority of its time in this loop, and majority of that time will

+;;; be spent in the first ten instructions.

+;;;

+;;; Within this loop:

+;;; ebx = scanend

+;;; r8d = curmatch

+;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)

+;;; esi = windowbestlen - i.e., (window + bestlen)

+;;; edi = prev

+;;; ebp = limit

+*/

+.balign 16

+LookupLoop:

+        and r8d, edx

+

+        movzx   r8d, word ptr [rdi + r8*2]

+        cmp r8d, ebp

+		BEFORE_JMP

+        jbe LeaveNow

+		AFTER_JMP

+        sub edx, 0x00010000

+		BEFORE_JMP

+        js  LeaveNow

+		AFTER_JMP

+

+LoopEntry:

+

+        cmp bx,word ptr [rsi + r8 - 1]

+		BEFORE_JMP

+        jnz LookupLoop1

+		AFTER_JMP

+LookupLoopIsZero:

+        cmp     r12w, word ptr [r10 + r8]

+		BEFORE_JMP

+        jnz LookupLoop1

+		AFTER_JMP

+

+

+//;;; Store the current value of chainlen.

+        mov [chainlenwmask], edx

+/*

+;;; Point edi to the string under scrutiny, and esi to the string we

+;;; are hoping to match it up with. In actuality, esi and edi are

+;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is

+;;; initialized to -(MAX_MATCH_8 - scanalign).

+*/

+        lea rsi,[r8+r10]

+        mov rdx, 0xfffffffffffffef8 //; -(MAX_MATCH_8)

+        lea rsi, [rsi + r13 + 0x0108] //;MAX_MATCH_8]

+        lea rdi, [r9 + r13 + 0x0108] //;MAX_MATCH_8]

+

+        prefetcht1 [rsi+rdx]

+        prefetcht1 [rdi+rdx]

+

+/*

+;;; Test the strings for equality, 8 bytes at a time. At the end,

+;;; adjust rdx so that it is offset to the exact byte that mismatched.

+;;;

+;;; We already know at this point that the first three bytes of the

+;;; strings match each other, and they can be safely passed over before

+;;; starting the compare loop. So what this code does is skip over 0-3

+;;; bytes, as much as necessary in order to dword-align the edi

+;;; pointer. (rsi will still be misaligned three times out of four.)

+;;;

+;;; It should be confessed that this loop usually does not represent

+;;; much of the total running time. Replacing it with a more

+;;; straightforward "rep cmpsb" would not drastically degrade

+;;; performance.

+*/

+

+LoopCmps:

+        mov rax, [rsi + rdx]

+        xor rax, [rdi + rdx]

+        jnz LeaveLoopCmps

+

+        mov rax, [rsi + rdx + 8]

+        xor rax, [rdi + rdx + 8]

+        jnz LeaveLoopCmps8

+

+

+        mov rax, [rsi + rdx + 8+8]

+        xor rax, [rdi + rdx + 8+8]

+        jnz LeaveLoopCmps16

+

+        add rdx,8+8+8

+

+		BEFORE_JMP

+        jnz  LoopCmps

+        jmp  LenMaximum

+		AFTER_JMP

+		

+LeaveLoopCmps16: add rdx,8

+LeaveLoopCmps8: add rdx,8

+LeaveLoopCmps:

+

+        test    eax, 0x0000FFFF

+        jnz LenLower

+

+        test eax,0xffffffff

+

+        jnz LenLower32

+

+        add rdx,4

+        shr rax,32

+        or ax,ax

+		BEFORE_JMP

+        jnz LenLower

+		AFTER_JMP

+

+LenLower32:

+        shr eax,16

+        add rdx,2

+		

+LenLower:		

+        sub al, 1

+        adc rdx, 0

+//;;; Calculate the length of the match. If it is longer than MAX_MATCH,

+//;;; then automatically accept it as the best possible match and leave.

+

+        lea rax, [rdi + rdx]

+        sub rax, r9

+        cmp eax, MAX_MATCH

+		BEFORE_JMP

+        jge LenMaximum

+		AFTER_JMP

+/*

+;;; If the length of the match is not longer than the best match we

+;;; have so far, then forget it and return to the lookup loop.

+;///////////////////////////////////

+*/

+        cmp eax, r11d

+        jg  LongerMatch

+

+        lea rsi,[r10+r11]

+

+        mov rdi, prev_ad

+        mov edx, [chainlenwmask]

+		BEFORE_JMP

+        jmp LookupLoop

+		AFTER_JMP

+/*

+;;;         s->match_start = cur_match;

+;;;         best_len = len;

+;;;         if (len >= nice_match) break;

+;;;         scan_end = *(ushf*)(scan+best_len-1);

+*/

+LongerMatch:

+        mov r11d, eax

+        mov match_start, r8d

+        cmp eax, [nicematch]

+		BEFORE_JMP

+        jge LeaveNow

+		AFTER_JMP

+

+        lea rsi,[r10+rax]

+

+        movzx   ebx, word ptr [r9 + rax - 1]

+        mov rdi, prev_ad

+        mov edx, [chainlenwmask]

+		BEFORE_JMP

+        jmp LookupLoop

+		AFTER_JMP

+

+//;;; Accept the current string, with the maximum possible length.

+

+LenMaximum:

+        mov r11d,MAX_MATCH

+        mov match_start, r8d

+

+//;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;

+//;;; return s->lookahead;

+

+LeaveNow:

+        mov eax, Lookahead

+        cmp r11d, eax

+        cmovng eax, r11d

+

+

+

+//;;; Restore the stack and return from whence we came.

+

+

+//        mov rsi,[save_rsi]

+//        mov rdi,[save_rdi]

+        mov rbx,[save_rbx]

+        mov rbp,[save_rbp]

+        mov r12,[save_r12]

+        mov r13,[save_r13]

+        mov r14,[save_r14]

+        mov r15,[save_r15]

+

+

+        ret 0

+//; please don't remove this string !

+//; Your can freely use gvmat64 in any free or commercial app

+//; but it is far better don't remove the string in the binary!

+ //   db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0

+

+

+match_init:

+  ret 0

+

+

diff --git a/contrib/infback9/inftree9.c b/contrib/infback9/inftree9.c
index c2c8af9..8d15fdc 100644
--- a/contrib/infback9/inftree9.c
+++ b/contrib/infback9/inftree9.c
@@ -9,7 +9,7 @@
 #define MAXBITS 15
 
 const char inflate9_copyright[] =
-   " inflate9 1.2.3.9 Copyright 1995-2010 Mark Adler ";
+   " inflate9 1.2.4 Copyright 1995-2010 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -64,7 +64,7 @@
     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
         128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
         130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
-        133, 133, 133, 133, 144, 193, 201};
+        133, 133, 133, 133, 144, 66, 199};
     static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
         65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
diff --git a/contrib/masm686/match.asm b/contrib/masm686/match.asm
deleted file mode 100644
index 4b03a71..0000000
--- a/contrib/masm686/match.asm
+++ /dev/null
@@ -1,413 +0,0 @@
-

-; match.asm -- Pentium-Pro optimized version of longest_match()

-;

-; Updated for zlib 1.1.3 and converted to MASM 6.1x

-; Copyright (C) 2000 Dan Higdon <hdan@kinesoft.com>

-;                    and Chuck Walbourn <chuckw@kinesoft.com>

-; Corrections by Cosmin Truta <cosmint@cs.ubbcluj.ro>

-;

-; This is free software; you can redistribute it and/or modify it

-; under the terms of the GNU General Public License.

-

-; Based on match.S

-; Written for zlib 1.1.2

-; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>

-;

-; Modified by Gilles Vollant (2005) for add gzhead and gzindex

-

-	.686P

-	.MODEL	FLAT

-

-;===========================================================================

-; EQUATES

-;===========================================================================

-

-MAX_MATCH	EQU 258

-MIN_MATCH	EQU 3

-MIN_LOOKAHEAD	EQU (MAX_MATCH + MIN_MATCH + 1)

-MAX_MATCH_8	EQU ((MAX_MATCH + 7) AND (NOT 7))

-

-;===========================================================================

-; STRUCTURES

-;===========================================================================

-

-; This STRUCT assumes a 4-byte alignment

-

-DEFLATE_STATE	STRUCT

-ds_strm			dd ?

-ds_status		dd ?

-ds_pending_buf		dd ?

-ds_pending_buf_size	dd ?

-ds_pending_out		dd ?

-ds_pending		dd ?

-ds_wrap			dd ?

-; gzhead and gzindex are added in zlib 1.2.2.2 (see deflate.h)

-ds_gzhead               dd ?

-ds_gzindex              dd ?

-ds_data_type		db ?

-ds_method		db ?

-			db ?	; padding

-			db ?	; padding

-ds_last_flush		dd ?

-ds_w_size		dd ?	; used

-ds_w_bits		dd ?

-ds_w_mask		dd ?	; used

-ds_window		dd ?	; used

-ds_window_size		dd ?

-ds_prev			dd ?	; used

-ds_head			dd ?

-ds_ins_h		dd ?

-ds_hash_size		dd ?

-ds_hash_bits		dd ?

-ds_hash_mask		dd ?

-ds_hash_shift		dd ?

-ds_block_start		dd ?

-ds_match_length		dd ?	; used

-ds_prev_match		dd ?	; used

-ds_match_available	dd ?

-ds_strstart		dd ?	; used

-ds_match_start		dd ?	; used

-ds_lookahead		dd ?	; used

-ds_prev_length		dd ?	; used

-ds_max_chain_length	dd ?	; used

-ds_max_laxy_match	dd ?

-ds_level		dd ?

-ds_strategy		dd ?

-ds_good_match		dd ?	; used

-ds_nice_match		dd ?	; used

-

-; Don't need anymore of the struct for match

-DEFLATE_STATE	ENDS

-

-;===========================================================================

-; CODE

-;===========================================================================

-_TEXT	SEGMENT

-

-;---------------------------------------------------------------------------

-; match_init

-;---------------------------------------------------------------------------

-	ALIGN	4

-PUBLIC	_match_init

-_match_init	PROC

-	; no initialization needed

-	ret

-_match_init	ENDP

-

-;---------------------------------------------------------------------------

-; uInt longest_match(deflate_state *deflatestate, IPos curmatch)

-;---------------------------------------------------------------------------

-	ALIGN	4

-

-PUBLIC	_longest_match

-_longest_match	PROC

-

-; Since this code uses EBP for a scratch register, the stack frame must

-; be manually constructed and referenced relative to the ESP register.

-

-; Stack image

-; Variables

-chainlenwmask	=  0	; high word: current chain len

-			; low word: s->wmask

-window		=  4	; local copy of s->window

-windowbestlen	=  8	; s->window + bestlen

-scanend		= 12	; last two bytes of string

-scanstart	= 16	; first two bytes of string

-scanalign	= 20	; dword-misalignment of string

-nicematch	= 24	; a good enough match size

-bestlen		= 28	; size of best match so far

-scan		= 32	; ptr to string wanting match

-varsize		= 36	; number of bytes (also offset to last saved register)

-

-; Saved Registers (actually pushed into place)

-ebx_save	= 36

-edi_save	= 40

-esi_save	= 44

-ebp_save	= 48

-

-; Parameters

-retaddr		= 52

-deflatestate	= 56

-curmatch	= 60

-

-; Save registers that the compiler may be using

-	push	ebp

-	push	edi

-	push	esi

-	push	ebx

-

-; Allocate local variable space

-	sub	esp,varsize

-

-; Retrieve the function arguments. ecx will hold cur_match

-; throughout the entire function. edx will hold the pointer to the

-; deflate_state structure during the function's setup (before

-; entering the main loop).

-

-	mov	edx, [esp+deflatestate]

-ASSUME	edx:PTR DEFLATE_STATE

-

-	mov	ecx, [esp+curmatch]

-

-; uInt wmask = s->w_mask;

-; unsigned chain_length = s->max_chain_length;

-; if (s->prev_length >= s->good_match) {

-;     chain_length >>= 2;

-; }

-

-	mov	eax, [edx].ds_prev_length

-	mov	ebx, [edx].ds_good_match

-	cmp	eax, ebx

-	mov	eax, [edx].ds_w_mask

-	mov	ebx, [edx].ds_max_chain_length

-	jl	SHORT LastMatchGood

-	shr	ebx, 2

-LastMatchGood:

-

-; chainlen is decremented once beforehand so that the function can

-; use the sign flag instead of the zero flag for the exit test.

-; It is then shifted into the high word, to make room for the wmask

-; value, which it will always accompany.

-

-	dec	ebx

-	shl	ebx, 16

-	or	ebx, eax

-	mov	[esp+chainlenwmask], ebx

-

-; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;

-

-	mov	eax, [edx].ds_nice_match

-	mov	ebx, [edx].ds_lookahead

-	cmp	ebx, eax

-	jl	SHORT LookaheadLess

-	mov	ebx, eax

-LookaheadLess:

-	mov	[esp+nicematch], ebx

-

-;/* register Bytef *scan = s->window + s->strstart;                     */

-

-	mov	esi, [edx].ds_window

-	mov	[esp+window], esi

-	mov	ebp, [edx].ds_strstart

-	lea	edi, [esi+ebp]

-	mov	[esp+scan],edi

-

-;/* Determine how many bytes the scan ptr is off from being             */

-;/* dword-aligned.                                                      */

-

-	mov	eax, edi

-	neg	eax

-	and	eax, 3

-	mov	[esp+scanalign], eax

-

-;/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ?                      */

-;/*     s->strstart - (IPos)MAX_DIST(s) : NIL;                          */

-

-	mov	eax, [edx].ds_w_size

-	sub	eax, MIN_LOOKAHEAD

-	sub	ebp, eax

-	jg	SHORT LimitPositive

-	xor	ebp, ebp

-LimitPositive:

-

-;/* int best_len = s->prev_length;                                      */

-

-	mov	eax, [edx].ds_prev_length

-	mov	[esp+bestlen], eax

-

-;/* Store the sum of s->window + best_len in %esi locally, and in %esi. */

-

-	add	esi, eax

-	mov	[esp+windowbestlen], esi

-

-;/* register ush scan_start = *(ushf*)scan;                             */

-;/* register ush scan_end   = *(ushf*)(scan+best_len-1);                */

-;/* Posf *prev = s->prev;                                               */

-

-	movzx	ebx, WORD PTR[edi]

-	mov	[esp+scanstart], ebx

-	movzx	ebx, WORD PTR[eax+edi-1]

-	mov	[esp+scanend], ebx

-	mov	edi, [edx].ds_prev

-

-;/* Jump into the main loop.                                            */

-

-	mov	edx, [esp+chainlenwmask]

-	jmp	SHORT LoopEntry

-

-;/* do {

-; *     match = s->window + cur_match;

-; *     if (*(ushf*)(match+best_len-1) != scan_end ||

-; *         *(ushf*)match != scan_start) continue;

-; *     [...]

-; * } while ((cur_match = prev[cur_match & wmask]) > limit

-; *          && --chain_length != 0);

-; *

-; * Here is the inner loop of the function. The function will spend the

-; * majority of its time in this loop, and majority of that time will

-; * be spent in the first ten instructions.

-; *

-; * Within this loop:

-; * %ebx = scanend

-; * %ecx = curmatch

-; * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)

-; * %esi = windowbestlen - i.e., (window + bestlen)

-; * %edi = prev

-; * %ebp = limit

-; */

-

-	ALIGN	4

-LookupLoop:

-	and	ecx, edx

-	movzx	ecx, WORD PTR[edi+ecx*2]

-	cmp	ecx, ebp

-	jbe	LeaveNow

-	sub	edx, 000010000H

-	js	LeaveNow

-

-LoopEntry:

-	movzx	eax, WORD PTR[esi+ecx-1]

-	cmp	eax, ebx

-	jnz	SHORT LookupLoop

-

-	mov	eax, [esp+window]

-	movzx	eax, WORD PTR[eax+ecx]

-	cmp	eax, [esp+scanstart]

-	jnz	SHORT LookupLoop

-

-;/* Store the current value of chainlen.                                */

-

-	mov	[esp+chainlenwmask], edx

-

-;/* Point %edi to the string under scrutiny, and %esi to the string we  */

-;/* are hoping to match it up with. In actuality, %esi and %edi are     */

-;/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is     */

-;/* initialized to -(MAX_MATCH_8 - scanalign).                          */

-

-	mov	esi, [esp+window]

-	mov	edi, [esp+scan]

-	add	esi, ecx

-	mov	eax, [esp+scanalign]

-	mov	edx, -MAX_MATCH_8

-	lea	edi, [edi+eax+MAX_MATCH_8]

-	lea	esi, [esi+eax+MAX_MATCH_8]

-

-;/* Test the strings for equality, 8 bytes at a time. At the end,

-; * adjust %edx so that it is offset to the exact byte that mismatched.

-; *

-; * We already know at this point that the first three bytes of the

-; * strings match each other, and they can be safely passed over before

-; * starting the compare loop. So what this code does is skip over 0-3

-; * bytes, as much as necessary in order to dword-align the %edi

-; * pointer. (%esi will still be misaligned three times out of four.)

-; *

-; * It should be confessed that this loop usually does not represent

-; * much of the total running time. Replacing it with a more

-; * straightforward "rep cmpsb" would not drastically degrade

-; * performance.

-; */

-

-LoopCmps:

-	mov	eax, DWORD PTR[esi+edx]

-	xor	eax, DWORD PTR[edi+edx]

-	jnz	SHORT LeaveLoopCmps

-

-	mov	eax, DWORD PTR[esi+edx+4]

-	xor	eax, DWORD PTR[edi+edx+4]

-	jnz	SHORT LeaveLoopCmps4

-

-	add	edx, 8

-	jnz	SHORT LoopCmps

-	jmp	LenMaximum

-	ALIGN	4

-

-LeaveLoopCmps4:

-	add	edx, 4

-

-LeaveLoopCmps:

-	test	eax, 00000FFFFH

-	jnz	SHORT LenLower

-

-	add	edx, 2

-	shr	eax, 16

-

-LenLower:

-	sub	al, 1

-	adc	edx, 0

-

-;/* Calculate the length of the match. If it is longer than MAX_MATCH,  */

-;/* then automatically accept it as the best possible match and leave.  */

-

-	lea	eax, [edi+edx]

-	mov	edi, [esp+scan]

-	sub	eax, edi

-	cmp	eax, MAX_MATCH

-	jge	SHORT LenMaximum

-

-;/* If the length of the match is not longer than the best match we     */

-;/* have so far, then forget it and return to the lookup loop.          */

-

-	mov	edx, [esp+deflatestate]

-	mov	ebx, [esp+bestlen]

-	cmp	eax, ebx

-	jg	SHORT LongerMatch

-	mov	esi, [esp+windowbestlen]

-	mov	edi, [edx].ds_prev

-	mov	ebx, [esp+scanend]

-	mov	edx, [esp+chainlenwmask]

-	jmp	LookupLoop

-	ALIGN	4

-

-;/*         s->match_start = cur_match;                                 */

-;/*         best_len = len;                                             */

-;/*         if (len >= nice_match) break;                               */

-;/*         scan_end = *(ushf*)(scan+best_len-1);                       */

-

-LongerMatch:

-	mov	ebx, [esp+nicematch]

-	mov	[esp+bestlen], eax

-	mov	[edx].ds_match_start, ecx

-	cmp	eax, ebx

-	jge	SHORT LeaveNow

-	mov	esi, [esp+window]

-	add	esi, eax

-	mov	[esp+windowbestlen], esi

-	movzx	ebx, WORD PTR[edi+eax-1]

-	mov	edi, [edx].ds_prev

-	mov	[esp+scanend], ebx

-	mov	edx, [esp+chainlenwmask]

-	jmp	LookupLoop

-	ALIGN	4

-

-;/* Accept the current string, with the maximum possible length.        */

-

-LenMaximum:

-	mov	edx, [esp+deflatestate]

-	mov	DWORD PTR[esp+bestlen], MAX_MATCH

-	mov	[edx].ds_match_start, ecx

-

-;/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len;          */

-;/* return s->lookahead;                                                */

-

-LeaveNow:

-	mov	edx, [esp+deflatestate]

-	mov	ebx, [esp+bestlen]

-	mov	eax, [edx].ds_lookahead

-	cmp	ebx, eax

-	jg	SHORT LookaheadRet

-	mov	eax, ebx

-LookaheadRet:

-

-; Restore the stack and return from whence we came.

-

-	add	esp, varsize

-	pop	ebx

-	pop	esi

-	pop	edi

-	pop	ebp

-	ret

-

-_longest_match	ENDP

-

-_TEXT	ENDS

-END

diff --git a/contrib/masmx64/gvmat64.asm b/contrib/masmx64/gvmat64.asm
index d2790cc..9879c28 100644
--- a/contrib/masmx64/gvmat64.asm
+++ b/contrib/masmx64/gvmat64.asm
@@ -2,8 +2,10 @@
 ;    deflate_state *s,

 ;    IPos cur_match);                             /* current match */

 

-; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86

-; Copyright (C) 1995-2005 Jean-loup Gailly, Brian Raiter and Gilles Vollant.

+; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86_64

+;  (AMD64 on Athlon 64, Opteron, Phenom

+;     and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)

+; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.

 ;

 ; File written by Gilles Vollant, by converting to assembly the longest_match

 ;  from Jean-loup Gailly in deflate.c of zLib and infoZip zip.

@@ -11,6 +13,24 @@
 ;  and by taking inspiration on asm686 with masm, optimised assembly code

 ;        from Brian Raiter, written 1998

 ;

+;  This software is provided 'as-is', without any express or implied

+;  warranty.  In no event will the authors be held liable for any damages

+;  arising from the use of this software.

+;

+;  Permission is granted to anyone to use this software for any purpose,

+;  including commercial applications, and to alter it and redistribute it

+;  freely, subject to the following restrictions:

+;

+;  1. The origin of this software must not be misrepresented; you must not

+;     claim that you wrote the original software. If you use this software

+;     in a product, an acknowledgment in the product documentation would be

+;     appreciated but is not required.

+;  2. Altered source versions must be plainly marked as such, and must not be

+;     misrepresented as being the original software

+;  3. This notice may not be removed or altered from any source distribution.

+;

+;

+;

 ;         http://www.zlib.net

 ;         http://www.winimage.com/zLibDll

 ;         http://www.muppetlabs.com/~breadbox/software/assembly.html

@@ -26,10 +46,10 @@
 ;

 ; This file compile with Microsoft Macro Assembler (x64) for AMD64

 ;

-;   ml64.exe is given with Visual Studio 2005 and Windows 2003 server DDK

+;   ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK

 ;

-;   (you can get Windows 2003 server DDK with ml64 and cl for AMD64 from

-;      http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)

+;   (you can get Windows WDK with ml64 for AMD64 from

+;      http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)

 ;

 

 

@@ -71,6 +91,25 @@
 ;save_r15        equ  rsp + 80 - LocalVarsSize

 

 

+; summary of register usage

+; scanend     ebx

+; scanendw    bx

+; chainlenwmask   edx

+; curmatch    rsi

+; curmatchd   esi

+; windowbestlen   r8

+; scanalign   r9

+; scanalignd  r9d

+; window      r10

+; bestlen     r11

+; bestlend    r11d

+; scanstart   r12d

+; scanstartw  r12w

+; scan        r13

+; nicematch   r14d

+; limit       r15

+; limitd      r15d

+; prev        rcx

 

 ;  all the +4 offsets are due to the addition of pending_buf_size (in zlib

 ;  in the deflate_state structure since the asm code was first written

diff --git a/contrib/masmx64/inffas8664.c b/contrib/masmx64/inffas8664.c
index 2263d77..e8af06f 100644
--- a/contrib/masmx64/inffas8664.c
+++ b/contrib/masmx64/inffas8664.c
@@ -130,7 +130,7 @@
     ar.beg = ar.out - (start - strm->avail_out);

     ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);

     ar.wsize = state->wsize;

-    ar.write = state->write;

+    ar.write = state->wnext;

     ar.window = state->window;

     ar.hold = state->hold;

     ar.bits = state->bits;

diff --git a/contrib/masmx64/inffasx64.asm b/contrib/masmx64/inffasx64.asm
index c2ba03f..60a8d89 100644
--- a/contrib/masmx64/inffasx64.asm
+++ b/contrib/masmx64/inffasx64.asm
@@ -9,11 +9,15 @@
 ;   ml64.exe /Flinffasx64 /c /Zi inffasx64.asm

 ;   with Microsoft Macro Assembler (x64) for AMD64

 ;

-;   ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK

+

+; This file compile with Microsoft Macro Assembler (x64) for AMD64

 ;

-;   (you can get Windows 2003 server DDK with ml64 and cl.exe for AMD64 from

-;      http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)

+;   ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK

 ;

+;   (you can get Windows WDK with ml64 for AMD64 from

+;      http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)

+;

+

 

 .code

 inffas8664fnc PROC

diff --git a/contrib/masmx86/bld_ml32.bat b/contrib/masmx86/bld_ml32.bat
index 36962e1..e1b86bf 100644
--- a/contrib/masmx86/bld_ml32.bat
+++ b/contrib/masmx86/bld_ml32.bat
@@ -1,2 +1,2 @@
-ml /coff /Zi /c /Flgvmat32.lst  gvmat32.asm

+ml /coff /Zi /c /Flmatch686.lst match686.asm

 ml /coff /Zi /c /Flinffas32.lst inffas32.asm

diff --git a/contrib/masmx86/gvmat32.asm b/contrib/masmx86/gvmat32.asm
deleted file mode 100644
index 8111616..0000000
--- a/contrib/masmx86/gvmat32.asm
+++ /dev/null
@@ -1,972 +0,0 @@
-; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86

-; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.

-; File written by Gilles Vollant, by modifiying the longest_match

-;  from Jean-loup Gailly in deflate.c

-;

-;         http://www.zlib.net

-;         http://www.winimage.com/zLibDll

-;         http://www.muppetlabs.com/~breadbox/software/assembly.html

-;

-; For Visual C++ 4.x and higher and ML 6.x and higher

-;   ml.exe is in directory \MASM611C of Win95 DDK

-;   ml.exe is also distributed in http://www.masm32.com/masmdl.htm

-;    and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/

-;

-; this file contain two implementation of longest_match

-;

-;  longest_match_7fff : written 1996 by Gilles Vollant optimized for

-;            first Pentium. Assume s->w_mask == 0x7fff

-;  longest_match_686 : written by Brian raiter (1998), optimized for Pentium Pro

-;

-;  for using an seembly version of longest_match, you need define ASMV in project

-;  There is two way in using gvmat32.asm

-;

-;  A) Suggested method

-;    if you want include both longest_match_7fff and longest_match_686

-;    compile the asm file running

-;           ml /coff /Zi /Flgvmat32.lst /c gvmat32.asm

-;    and include gvmat32c.c in your project

-;    if you have an old cpu (386,486 or first Pentium) and s->w_mask==0x7fff,

-;        longest_match_7fff will be used

-;    if you have a more modern CPU (Pentium Pro, II and higher)

-;        longest_match_686 will be used

-;    on old cpu with s->w_mask!=0x7fff, longest_match_686 will be used,

-;        but this is not a sitation you'll find often

-;

-;  B) Alternative

-;    if you are not interresed in old cpu performance and want the smaller

-;       binaries possible

-;

-;    compile the asm file running

-;           ml /coff /Zi /c /Flgvmat32.lst /DNOOLDPENTIUMCODE gvmat32.asm

-;    and do not include gvmat32c.c in your project (ou define also

-;              NOOLDPENTIUMCODE)

-;

-; note : as I known, longest_match_686 is very faster than longest_match_7fff

-;        on pentium Pro/II/III, faster (but less) in P4, but it seem

-;        longest_match_7fff can be faster (very very litte) on AMD Athlon64/K8

-;

-; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2

-

-;uInt longest_match_7fff(s, cur_match)

-;    deflate_state *s;

-;    IPos cur_match;                             /* current match */

-

-    NbStack         equ     76

-    cur_match       equ     dword ptr[esp+NbStack-0]

-    str_s           equ     dword ptr[esp+NbStack-4]

-; 5 dword on top (ret,ebp,esi,edi,ebx)

-    adrret          equ     dword ptr[esp+NbStack-8]

-    pushebp         equ     dword ptr[esp+NbStack-12]

-    pushedi         equ     dword ptr[esp+NbStack-16]

-    pushesi         equ     dword ptr[esp+NbStack-20]

-    pushebx         equ     dword ptr[esp+NbStack-24]

-

-    chain_length    equ     dword ptr [esp+NbStack-28]

-    limit           equ     dword ptr [esp+NbStack-32]

-    best_len        equ     dword ptr [esp+NbStack-36]

-    window          equ     dword ptr [esp+NbStack-40]

-    prev            equ     dword ptr [esp+NbStack-44]

-    scan_start      equ      word ptr [esp+NbStack-48]

-    wmask           equ     dword ptr [esp+NbStack-52]

-    match_start_ptr equ     dword ptr [esp+NbStack-56]

-    nice_match      equ     dword ptr [esp+NbStack-60]

-    scan            equ     dword ptr [esp+NbStack-64]

-

-    windowlen       equ     dword ptr [esp+NbStack-68]

-    match_start     equ     dword ptr [esp+NbStack-72]

-    strend          equ     dword ptr [esp+NbStack-76]

-    NbStackAdd      equ     (NbStack-24)

-

-    .386p

-

-    name    gvmatch

-    .MODEL  FLAT

-

-

-

-;  all the +zlib1222add offsets are due to the addition of fields

-;  in zlib in the deflate_state structure since the asm code was first written

-;  (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").

-;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").

-;  if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").

-

-    zlib1222add         equ     8

-

-;  Note : these value are good with a 8 bytes boundary pack structure

-    dep_chain_length    equ     74h+zlib1222add

-    dep_window          equ     30h+zlib1222add

-    dep_strstart        equ     64h+zlib1222add

-    dep_prev_length     equ     70h+zlib1222add

-    dep_nice_match      equ     88h+zlib1222add

-    dep_w_size          equ     24h+zlib1222add

-    dep_prev            equ     38h+zlib1222add

-    dep_w_mask          equ     2ch+zlib1222add

-    dep_good_match      equ     84h+zlib1222add

-    dep_match_start     equ     68h+zlib1222add

-    dep_lookahead       equ     6ch+zlib1222add

-

-

-_TEXT                   segment

-

-IFDEF NOUNDERLINE

-   IFDEF NOOLDPENTIUMCODE

-            public  longest_match

-            public  match_init

-   ELSE

-            public  longest_match_7fff

-            public  cpudetect32

-            public  longest_match_686

-   ENDIF

-ELSE

-   IFDEF NOOLDPENTIUMCODE

-            public  _longest_match

-            public  _match_init

-   ELSE

-            public  _longest_match_7fff

-            public  _cpudetect32

-            public  _longest_match_686

-   ENDIF

-ENDIF

-

-    MAX_MATCH           equ     258

-    MIN_MATCH           equ     3

-    MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1)

-

-

-

-IFNDEF NOOLDPENTIUMCODE

-IFDEF NOUNDERLINE

-longest_match_7fff   proc near

-ELSE

-_longest_match_7fff  proc near

-ENDIF

-

-    mov     edx,[esp+4]

-

-

-

-    push    ebp

-    push    edi

-    push    esi

-    push    ebx

-

-    sub     esp,NbStackAdd

-

-; initialize or check the variables used in match.asm.

-    mov     ebp,edx

-

-; chain_length = s->max_chain_length

-; if (prev_length>=good_match) chain_length >>= 2

-    mov     edx,[ebp+dep_chain_length]

-    mov     ebx,[ebp+dep_prev_length]

-    cmp     [ebp+dep_good_match],ebx

-    ja      noshr

-    shr     edx,2

-noshr:

-; we increment chain_length because in the asm, the --chain_lenght is in the beginning of the loop

-    inc     edx

-    mov     edi,[ebp+dep_nice_match]

-    mov     chain_length,edx

-    mov     eax,[ebp+dep_lookahead]

-    cmp     eax,edi

-; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;

-    jae     nolookaheadnicematch

-    mov     edi,eax

-nolookaheadnicematch:

-; best_len = s->prev_length

-    mov     best_len,ebx

-

-; window = s->window

-    mov     esi,[ebp+dep_window]

-    mov     ecx,[ebp+dep_strstart]

-    mov     window,esi

-

-    mov     nice_match,edi

-; scan = window + strstart

-    add     esi,ecx

-    mov     scan,esi

-; dx = *window

-    mov     dx,word ptr [esi]

-; bx = *(window+best_len-1)

-    mov     bx,word ptr [esi+ebx-1]

-    add     esi,MAX_MATCH-1

-; scan_start = *scan

-    mov     scan_start,dx

-; strend = scan + MAX_MATCH-1

-    mov     strend,esi

-; bx = scan_end = *(window+best_len-1)

-

-;    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?

-;        s->strstart - (IPos)MAX_DIST(s) : NIL;

-

-    mov     esi,[ebp+dep_w_size]

-    sub     esi,MIN_LOOKAHEAD

-; here esi = MAX_DIST(s)

-    sub     ecx,esi

-    ja      nodist

-    xor     ecx,ecx

-nodist:

-    mov     limit,ecx

-

-; prev = s->prev

-    mov     edx,[ebp+dep_prev]

-    mov     prev,edx

-

-;

-    mov     edx,dword ptr [ebp+dep_match_start]

-    mov     bp,scan_start

-    mov     eax,cur_match

-    mov     match_start,edx

-

-    mov     edx,window

-    mov     edi,edx

-    add     edi,best_len

-    mov     esi,prev

-    dec     edi

-; windowlen = window + best_len -1

-    mov     windowlen,edi

-

-    jmp     beginloop2

-    align   4

-

-; here, in the loop

-;       eax = ax = cur_match

-;       ecx = limit

-;        bx = scan_end

-;        bp = scan_start

-;       edi = windowlen (window + best_len -1)

-;       esi = prev

-

-

-;// here; chain_length <=16

-normalbeg0add16:

-    add     chain_length,16

-    jz      exitloop

-normalbeg0:

-    cmp     word ptr[edi+eax],bx

-    je      normalbeg2noroll

-rcontlabnoroll:

-; cur_match = prev[cur_match & wmask]

-    and     eax,7fffh

-    mov     ax,word ptr[esi+eax*2]

-; if cur_match > limit, go to exitloop

-    cmp     ecx,eax

-    jnb     exitloop

-; if --chain_length != 0, go to exitloop

-    dec     chain_length

-    jnz     normalbeg0

-    jmp     exitloop

-

-normalbeg2noroll:

-; if (scan_start==*(cur_match+window)) goto normalbeg2

-    cmp     bp,word ptr[edx+eax]

-    jne     rcontlabnoroll

-    jmp     normalbeg2

-

-contloop3:

-    mov     edi,windowlen

-

-; cur_match = prev[cur_match & wmask]

-    and     eax,7fffh

-    mov     ax,word ptr[esi+eax*2]

-; if cur_match > limit, go to exitloop

-    cmp     ecx,eax

-jnbexitloopshort1:

-    jnb     exitloop

-; if --chain_length != 0, go to exitloop

-

-

-; begin the main loop

-beginloop2:

-    sub     chain_length,16+1

-; if chain_length <=16, don't use the unrolled loop

-    jna     normalbeg0add16

-

-do16:

-    cmp     word ptr[edi+eax],bx

-    je      normalbeg2dc0

-

-maccn   MACRO   lab

-    and     eax,7fffh

-    mov     ax,word ptr[esi+eax*2]

-    cmp     ecx,eax

-    jnb     exitloop

-    cmp     word ptr[edi+eax],bx

-    je      lab

-    ENDM

-

-rcontloop0:

-    maccn   normalbeg2dc1

-

-rcontloop1:

-    maccn   normalbeg2dc2

-

-rcontloop2:

-    maccn   normalbeg2dc3

-

-rcontloop3:

-    maccn   normalbeg2dc4

-

-rcontloop4:

-    maccn   normalbeg2dc5

-

-rcontloop5:

-    maccn   normalbeg2dc6

-

-rcontloop6:

-    maccn   normalbeg2dc7

-

-rcontloop7:

-    maccn   normalbeg2dc8

-

-rcontloop8:

-    maccn   normalbeg2dc9

-

-rcontloop9:

-    maccn   normalbeg2dc10

-

-rcontloop10:

-    maccn   short normalbeg2dc11

-

-rcontloop11:

-    maccn   short normalbeg2dc12

-

-rcontloop12:

-    maccn   short normalbeg2dc13

-

-rcontloop13:

-    maccn   short normalbeg2dc14

-

-rcontloop14:

-    maccn   short normalbeg2dc15

-

-rcontloop15:

-    and     eax,7fffh

-    mov     ax,word ptr[esi+eax*2]

-    cmp     ecx,eax

-    jnb     exitloop

-

-    sub     chain_length,16

-    ja      do16

-    jmp     normalbeg0add16

-

-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

-

-normbeg MACRO   rcontlab,valsub

-; if we are here, we know that *(match+best_len-1) == scan_end

-    cmp     bp,word ptr[edx+eax]

-; if (match != scan_start) goto rcontlab

-    jne     rcontlab

-; calculate the good chain_length, and we'll compare scan and match string

-    add     chain_length,16-valsub

-    jmp     iseq

-    ENDM

-

-

-normalbeg2dc11:

-    normbeg rcontloop11,11

-

-normalbeg2dc12:

-    normbeg short rcontloop12,12

-

-normalbeg2dc13:

-    normbeg short rcontloop13,13

-

-normalbeg2dc14:

-    normbeg short rcontloop14,14

-

-normalbeg2dc15:

-    normbeg short rcontloop15,15

-

-normalbeg2dc10:

-    normbeg rcontloop10,10

-

-normalbeg2dc9:

-    normbeg rcontloop9,9

-

-normalbeg2dc8:

-    normbeg rcontloop8,8

-

-normalbeg2dc7:

-    normbeg rcontloop7,7

-

-normalbeg2dc6:

-    normbeg rcontloop6,6

-

-normalbeg2dc5:

-    normbeg rcontloop5,5

-

-normalbeg2dc4:

-    normbeg rcontloop4,4

-

-normalbeg2dc3:

-    normbeg rcontloop3,3

-

-normalbeg2dc2:

-    normbeg rcontloop2,2

-

-normalbeg2dc1:

-    normbeg rcontloop1,1

-

-normalbeg2dc0:

-    normbeg rcontloop0,0

-

-

-; we go in normalbeg2 because *(ushf*)(match+best_len-1) == scan_end

-

-normalbeg2:

-    mov     edi,window

-

-    cmp     bp,word ptr[edi+eax]

-    jne     contloop3                   ; if *(ushf*)match != scan_start, continue

-

-iseq:

-; if we are here, we know that *(match+best_len-1) == scan_end

-; and (match == scan_start)

-

-    mov     edi,edx

-    mov     esi,scan                    ; esi = scan

-    add     edi,eax                     ; edi = window + cur_match = match

-

-    mov     edx,[esi+3]                 ; compare manually dword at match+3

-    xor     edx,[edi+3]                 ; and scan +3

-

-    jz      begincompare                ; if equal, go to long compare

-

-; we will determine the unmatch byte and calculate len (in esi)

-    or      dl,dl

-    je      eq1rr

-    mov     esi,3

-    jmp     trfinval

-eq1rr:

-    or      dx,dx

-    je      eq1

-

-    mov     esi,4

-    jmp     trfinval

-eq1:

-    and     edx,0ffffffh

-    jz      eq11

-    mov     esi,5

-    jmp     trfinval

-eq11:

-    mov     esi,6

-    jmp     trfinval

-

-begincompare:

-    ; here we now scan and match begin same

-    add     edi,6

-    add     esi,6

-    mov     ecx,(MAX_MATCH-(2+4))/4     ; scan for at most MAX_MATCH bytes

-    repe    cmpsd                       ; loop until mismatch

-

-    je      trfin                       ; go to trfin if not unmatch

-; we determine the unmatch byte

-    sub     esi,4

-    mov     edx,[edi-4]

-    xor     edx,[esi]

-

-    or      dl,dl

-    jnz     trfin

-    inc     esi

-

-    or      dx,dx

-    jnz     trfin

-    inc     esi

-

-    and     edx,0ffffffh

-    jnz     trfin

-    inc     esi

-

-trfin:

-    sub     esi,scan          ; esi = len

-trfinval:

-; here we have finised compare, and esi contain len of equal string

-    cmp     esi,best_len        ; if len > best_len, go newbestlen

-    ja      short newbestlen

-; now we restore edx, ecx and esi, for the big loop

-    mov     esi,prev

-    mov     ecx,limit

-    mov     edx,window

-    jmp     contloop3

-

-newbestlen:

-    mov     best_len,esi        ; len become best_len

-

-    mov     match_start,eax     ; save new position as match_start

-    cmp     esi,nice_match      ; if best_len >= nice_match, exit

-    jae     exitloop

-    mov     ecx,scan

-    mov     edx,window          ; restore edx=window

-    add     ecx,esi

-    add     esi,edx

-

-    dec     esi

-    mov     windowlen,esi       ; windowlen = window + best_len-1

-    mov     bx,[ecx-1]          ; bx = *(scan+best_len-1) = scan_end

-

-; now we restore ecx and esi, for the big loop :

-    mov     esi,prev

-    mov     ecx,limit

-    jmp     contloop3

-

-exitloop:

-; exit : s->match_start=match_start

-    mov     ebx,match_start

-    mov     ebp,str_s

-    mov     ecx,best_len

-    mov     dword ptr [ebp+dep_match_start],ebx

-    mov     eax,dword ptr [ebp+dep_lookahead]

-    cmp     ecx,eax

-    ja      minexlo

-    mov     eax,ecx

-minexlo:

-; return min(best_len,s->lookahead)

-

-; restore stack and register ebx,esi,edi,ebp

-    add     esp,NbStackAdd

-

-    pop     ebx

-    pop     esi

-    pop     edi

-    pop     ebp

-    ret

-InfoAuthor:

-; please don't remove this string !

-; Your are free use gvmat32 in any fre or commercial apps if you don't remove the string in the binary!

-    db     0dh,0ah,"GVMat32 optimised assembly code written 1996-98 by Gilles Vollant",0dh,0ah

-

-

-

-IFDEF NOUNDERLINE

-longest_match_7fff   endp

-ELSE

-_longest_match_7fff  endp

-ENDIF

-

-

-IFDEF NOUNDERLINE

-cpudetect32     proc near

-ELSE

-_cpudetect32    proc near

-ENDIF

-

-    push    ebx

-

-    pushfd                  ; push original EFLAGS

-    pop     eax             ; get original EFLAGS

-    mov     ecx, eax        ; save original EFLAGS

-    xor     eax, 40000h     ; flip AC bit in EFLAGS

-    push    eax             ; save new EFLAGS value on stack

-    popfd                   ; replace current EFLAGS value

-    pushfd                  ; get new EFLAGS

-    pop     eax             ; store new EFLAGS in EAX

-    xor     eax, ecx        ; canÂ’t toggle AC bit, processor=80386

-    jz      end_cpu_is_386  ; jump if 80386 processor

-    push    ecx

-    popfd                   ; restore AC bit in EFLAGS first

-

-    pushfd

-    pushfd

-    pop     ecx

-

-    mov     eax, ecx        ; get original EFLAGS

-    xor     eax, 200000h    ; flip ID bit in EFLAGS

-    push    eax             ; save new EFLAGS value on stack

-    popfd                   ; replace current EFLAGS value

-    pushfd                  ; get new EFLAGS

-    pop     eax             ; store new EFLAGS in EAX

-    popfd                   ; restore original EFLAGS

-    xor     eax, ecx        ; canÂ’t toggle ID bit,

-    je      is_old_486      ; processor=old

-

-    mov     eax,1

-    db      0fh,0a2h        ;CPUID

-

-exitcpudetect:

-    pop ebx

-    ret

-

-end_cpu_is_386:

-    mov     eax,0300h

-    jmp     exitcpudetect

-

-is_old_486:

-    mov     eax,0400h

-    jmp     exitcpudetect

-

-IFDEF NOUNDERLINE

-cpudetect32     endp

-ELSE

-_cpudetect32    endp

-ENDIF

-ENDIF

-

-MAX_MATCH       equ     258

-MIN_MATCH       equ     3

-MIN_LOOKAHEAD   equ     (MAX_MATCH + MIN_MATCH + 1)

-MAX_MATCH_8_     equ     ((MAX_MATCH + 7) AND 0FFF0h)

-

-

-;;; stack frame offsets

-

-chainlenwmask   equ  esp + 0    ; high word: current chain len

-                    ; low word: s->wmask

-window      equ  esp + 4    ; local copy of s->window

-windowbestlen   equ  esp + 8    ; s->window + bestlen

-scanstart   equ  esp + 16   ; first two bytes of string

-scanend     equ  esp + 12   ; last two bytes of string

-scanalign   equ  esp + 20   ; dword-misalignment of string

-nicematch   equ  esp + 24   ; a good enough match size

-bestlen     equ  esp + 28   ; size of best match so far

-scan        equ  esp + 32   ; ptr to string wanting match

-

-LocalVarsSize   equ 36

-;   saved ebx   byte esp + 36

-;   saved edi   byte esp + 40

-;   saved esi   byte esp + 44

-;   saved ebp   byte esp + 48

-;   return address  byte esp + 52

-deflatestate    equ  esp + 56   ; the function arguments

-curmatch    equ  esp + 60

-

-;;; Offsets for fields in the deflate_state structure. These numbers

-;;; are calculated from the definition of deflate_state, with the

-;;; assumption that the compiler will dword-align the fields. (Thus,

-;;; changing the definition of deflate_state could easily cause this

-;;; program to crash horribly, without so much as a warning at

-;;; compile time. Sigh.)

-

-dsWSize     equ 36+zlib1222add

-dsWMask     equ 44+zlib1222add

-dsWindow    equ 48+zlib1222add

-dsPrev      equ 56+zlib1222add

-dsMatchLen  equ 88+zlib1222add

-dsPrevMatch equ 92+zlib1222add

-dsStrStart  equ 100+zlib1222add

-dsMatchStart    equ 104+zlib1222add

-dsLookahead equ 108+zlib1222add

-dsPrevLen   equ 112+zlib1222add

-dsMaxChainLen   equ 116+zlib1222add

-dsGoodMatch equ 132+zlib1222add

-dsNiceMatch equ 136+zlib1222add

-

-

-;;; match.asm -- Pentium-Pro-optimized version of longest_match()

-;;; Written for zlib 1.1.2

-;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>

-;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html

-;;;

-;;; This is free software; you can redistribute it and/or modify it

-;;; under the terms of the GNU General Public License.

-

-;GLOBAL _longest_match, _match_init

-

-

-;SECTION    .text

-

-;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)

-

-;_longest_match:

-IFDEF NOOLDPENTIUMCODE

-    IFDEF NOUNDERLINE

-    longest_match       proc near

-    ELSE

-    _longest_match      proc near

-    ENDIF

-ELSE

-    IFDEF NOUNDERLINE

-    longest_match_686   proc near

-    ELSE

-    _longest_match_686  proc near

-    ENDIF

-ENDIF

-

-;;; Save registers that the compiler may be using, and adjust esp to

-;;; make room for our stack frame.

-

-        push    ebp

-        push    edi

-        push    esi

-        push    ebx

-        sub esp, LocalVarsSize

-

-;;; Retrieve the function arguments. ecx will hold cur_match

-;;; throughout the entire function. edx will hold the pointer to the

-;;; deflate_state structure during the function's setup (before

-;;; entering the main loop.

-

-        mov edx, [deflatestate]

-        mov ecx, [curmatch]

-

-;;; uInt wmask = s->w_mask;

-;;; unsigned chain_length = s->max_chain_length;

-;;; if (s->prev_length >= s->good_match) {

-;;;     chain_length >>= 2;

-;;; }

-

-        mov eax, [edx + dsPrevLen]

-        mov ebx, [edx + dsGoodMatch]

-        cmp eax, ebx

-        mov eax, [edx + dsWMask]

-        mov ebx, [edx + dsMaxChainLen]

-        jl  LastMatchGood

-        shr ebx, 2

-LastMatchGood:

-

-;;; chainlen is decremented once beforehand so that the function can

-;;; use the sign flag instead of the zero flag for the exit test.

-;;; It is then shifted into the high word, to make room for the wmask

-;;; value, which it will always accompany.

-

-        dec ebx

-        shl ebx, 16

-        or  ebx, eax

-        mov [chainlenwmask], ebx

-

-;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;

-

-        mov eax, [edx + dsNiceMatch]

-        mov ebx, [edx + dsLookahead]

-        cmp ebx, eax

-        jl  LookaheadLess

-        mov ebx, eax

-LookaheadLess:  mov [nicematch], ebx

-

-;;; register Bytef *scan = s->window + s->strstart;

-

-        mov esi, [edx + dsWindow]

-        mov [window], esi

-        mov ebp, [edx + dsStrStart]

-        lea edi, [esi + ebp]

-        mov [scan], edi

-

-;;; Determine how many bytes the scan ptr is off from being

-;;; dword-aligned.

-

-        mov eax, edi

-        neg eax

-        and eax, 3

-        mov [scanalign], eax

-

-;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?

-;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;

-

-        mov eax, [edx + dsWSize]

-        sub eax, MIN_LOOKAHEAD

-        sub ebp, eax

-        jg  LimitPositive

-        xor ebp, ebp

-LimitPositive:

-

-;;; int best_len = s->prev_length;

-

-        mov eax, [edx + dsPrevLen]

-        mov [bestlen], eax

-

-;;; Store the sum of s->window + best_len in esi locally, and in esi.

-

-        add esi, eax

-        mov [windowbestlen], esi

-

-;;; register ush scan_start = *(ushf*)scan;

-;;; register ush scan_end   = *(ushf*)(scan+best_len-1);

-;;; Posf *prev = s->prev;

-

-        movzx   ebx, word ptr [edi]

-        mov [scanstart], ebx

-        movzx   ebx, word ptr [edi + eax - 1]

-        mov [scanend], ebx

-        mov edi, [edx + dsPrev]

-

-;;; Jump into the main loop.

-

-        mov edx, [chainlenwmask]

-        jmp short LoopEntry

-

-align 4

-

-;;; do {

-;;;     match = s->window + cur_match;

-;;;     if (*(ushf*)(match+best_len-1) != scan_end ||

-;;;         *(ushf*)match != scan_start) continue;

-;;;     [...]

-;;; } while ((cur_match = prev[cur_match & wmask]) > limit

-;;;          && --chain_length != 0);

-;;;

-;;; Here is the inner loop of the function. The function will spend the

-;;; majority of its time in this loop, and majority of that time will

-;;; be spent in the first ten instructions.

-;;;

-;;; Within this loop:

-;;; ebx = scanend

-;;; ecx = curmatch

-;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)

-;;; esi = windowbestlen - i.e., (window + bestlen)

-;;; edi = prev

-;;; ebp = limit

-

-LookupLoop:

-        and ecx, edx

-        movzx   ecx, word ptr [edi + ecx*2]

-        cmp ecx, ebp

-        jbe LeaveNow

-        sub edx, 00010000h

-        js  LeaveNow

-LoopEntry:  movzx   eax, word ptr [esi + ecx - 1]

-        cmp eax, ebx

-        jnz LookupLoop

-        mov eax, [window]

-        movzx   eax, word ptr [eax + ecx]

-        cmp eax, [scanstart]

-        jnz LookupLoop

-

-;;; Store the current value of chainlen.

-

-        mov [chainlenwmask], edx

-

-;;; Point edi to the string under scrutiny, and esi to the string we

-;;; are hoping to match it up with. In actuality, esi and edi are

-;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is

-;;; initialized to -(MAX_MATCH_8 - scanalign).

-

-        mov esi, [window]

-        mov edi, [scan]

-        add esi, ecx

-        mov eax, [scanalign]

-        mov edx, 0fffffef8h; -(MAX_MATCH_8)

-        lea edi, [edi + eax + 0108h] ;MAX_MATCH_8]

-        lea esi, [esi + eax + 0108h] ;MAX_MATCH_8]

-

-;;; Test the strings for equality, 8 bytes at a time. At the end,

-;;; adjust edx so that it is offset to the exact byte that mismatched.

-;;;

-;;; We already know at this point that the first three bytes of the

-;;; strings match each other, and they can be safely passed over before

-;;; starting the compare loop. So what this code does is skip over 0-3

-;;; bytes, as much as necessary in order to dword-align the edi

-;;; pointer. (esi will still be misaligned three times out of four.)

-;;;

-;;; It should be confessed that this loop usually does not represent

-;;; much of the total running time. Replacing it with a more

-;;; straightforward "rep cmpsb" would not drastically degrade

-;;; performance.

-

-LoopCmps:

-        mov eax, [esi + edx]

-        xor eax, [edi + edx]

-        jnz LeaveLoopCmps

-        mov eax, [esi + edx + 4]

-        xor eax, [edi + edx + 4]

-        jnz LeaveLoopCmps4

-        add edx, 8

-        jnz LoopCmps

-        jmp short LenMaximum

-LeaveLoopCmps4: add edx, 4

-LeaveLoopCmps:  test    eax, 0000FFFFh

-        jnz LenLower

-        add edx,  2

-        shr eax, 16

-LenLower:   sub al, 1

-        adc edx, 0

-

-;;; Calculate the length of the match. If it is longer than MAX_MATCH,

-;;; then automatically accept it as the best possible match and leave.

-

-        lea eax, [edi + edx]

-        mov edi, [scan]

-        sub eax, edi

-        cmp eax, MAX_MATCH

-        jge LenMaximum

-

-;;; If the length of the match is not longer than the best match we

-;;; have so far, then forget it and return to the lookup loop.

-

-        mov edx, [deflatestate]

-        mov ebx, [bestlen]

-        cmp eax, ebx

-        jg  LongerMatch

-        mov esi, [windowbestlen]

-        mov edi, [edx + dsPrev]

-        mov ebx, [scanend]

-        mov edx, [chainlenwmask]

-        jmp LookupLoop

-

-;;;         s->match_start = cur_match;

-;;;         best_len = len;

-;;;         if (len >= nice_match) break;

-;;;         scan_end = *(ushf*)(scan+best_len-1);

-

-LongerMatch:    mov ebx, [nicematch]

-        mov [bestlen], eax

-        mov [edx + dsMatchStart], ecx

-        cmp eax, ebx

-        jge LeaveNow

-        mov esi, [window]

-        add esi, eax

-        mov [windowbestlen], esi

-        movzx   ebx, word ptr [edi + eax - 1]

-        mov edi, [edx + dsPrev]

-        mov [scanend], ebx

-        mov edx, [chainlenwmask]

-        jmp LookupLoop

-

-;;; Accept the current string, with the maximum possible length.

-

-LenMaximum: mov edx, [deflatestate]

-        mov dword ptr [bestlen], MAX_MATCH

-        mov [edx + dsMatchStart], ecx

-

-;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;

-;;; return s->lookahead;

-

-LeaveNow:

-        mov edx, [deflatestate]

-        mov ebx, [bestlen]

-        mov eax, [edx + dsLookahead]

-        cmp ebx, eax

-        jg  LookaheadRet

-        mov eax, ebx

-LookaheadRet:

-

-;;; Restore the stack and return from whence we came.

-

-        add esp, LocalVarsSize

-        pop ebx

-        pop esi

-        pop edi

-        pop ebp

-

-        ret

-; please don't remove this string !

-; Your can freely use gvmat32 in any free or commercial app if you don't remove the string in the binary!

-    db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah

-

-

-IFDEF NOOLDPENTIUMCODE

-    IFDEF NOUNDERLINE

-    longest_match       endp

-    ELSE

-    _longest_match      endp

-    ENDIF

-

-    IFDEF NOUNDERLINE

-    match_init      proc near

-                    ret

-    match_init      endp

-    ELSE

-    _match_init     proc near

-                    ret

-    _match_init     endp

-    ENDIF

-ELSE

-    IFDEF NOUNDERLINE

-    longest_match_686   endp

-    ELSE

-    _longest_match_686  endp

-    ENDIF

-ENDIF

-

-_TEXT   ends

-end

diff --git a/contrib/masmx86/gvmat32c.c b/contrib/masmx86/gvmat32c.c
deleted file mode 100644
index 7ad2b27..0000000
--- a/contrib/masmx86/gvmat32c.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86

- * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.

- * File written by Gilles Vollant, by modifiying the longest_match

- *  from Jean-loup Gailly in deflate.c

- *  it prepare all parameters and call the assembly longest_match_gvasm

- *  longest_match execute standard C code is wmask != 0x7fff

- *     (assembly code is faster with a fixed wmask)

- *

- * Read comment at beginning of gvmat32.asm for more information

- */

-

-#if defined(ASMV) && (!defined(NOOLDPENTIUMCODE))

-#include "deflate.h"

-

-/* if your C compiler don't add underline before function name,

-        define ADD_UNDERLINE_ASMFUNC */

-#ifdef ADD_UNDERLINE_ASMFUNC

-#define longest_match_7fff _longest_match_7fff

-#define longest_match_686  _longest_match_686

-#define cpudetect32        _cpudetect32

-#endif

-

-

-unsigned long cpudetect32();

-

-uInt longest_match_c(

-    deflate_state *s,

-    IPos cur_match);                             /* current match */

-

-

-uInt longest_match_7fff(

-    deflate_state *s,

-    IPos cur_match);                             /* current match */

-

-uInt longest_match_686(

-    deflate_state *s,

-    IPos cur_match);                             /* current match */

-

-

-static uInt iIsPPro=2;

-

-void match_init ()

-{

-    iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;

-}

-

-uInt longest_match(

-    deflate_state *s,

-    IPos cur_match)                             /* current match */

-{

-    if (iIsPPro!=0)

-        return longest_match_686(s,cur_match);

-

-    if (s->w_mask != 0x7fff)

-        return longest_match_686(s,cur_match);

-

-    /* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */

-        return longest_match_7fff(s,cur_match);

-}

-

-

-#endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */

diff --git a/contrib/masmx86/match686.asm b/contrib/masmx86/match686.asm
new file mode 100644
index 0000000..1eaf555
--- /dev/null
+++ b/contrib/masmx86/match686.asm
@@ -0,0 +1,478 @@
+; match686.asm -- Asm portion of the optimized longest_match for 32 bits x86

+; Copyright (C) 1995-1996 Jean-loup Gailly, Brian Raiter and Gilles Vollant.

+; File written by Gilles Vollant, by converting match686.S from Brian Raiter

+; for MASM. This is as assembly version of longest_match

+;  from Jean-loup Gailly in deflate.c

+;

+;         http://www.zlib.net

+;         http://www.winimage.com/zLibDll

+;         http://www.muppetlabs.com/~breadbox/software/assembly.html

+;

+; For Visual C++ 4.x and higher and ML 6.x and higher

+;   ml.exe is distributed in

+;  http://www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64

+;

+; this file contain two implementation of longest_match

+;

+;  this longest_match was written by Brian raiter (1998), optimized for Pentium Pro

+;   (and the faster known version of match_init on modern Core 2 Duo and AMD Phenom)

+;

+;  for using an assembly version of longest_match, you need define ASMV in project

+;

+;    compile the asm file running

+;           ml /coff /Zi /c /Flmatch686.lst match686.asm

+;    and do not include match686.obj in your project

+;

+; note: contrib of zLib 1.2.3 and earlier contained both a deprecated version for

+;  Pentium (prior Pentium Pro) and this version for Pentium Pro and modern processor

+;  with autoselect (with cpu detection code)

+;  if you want support the old pentium optimization, you can still use these version

+;

+; this file is not optimized for old pentium, but it compatible with all x86 32 bits

+; processor (starting 80386)

+;

+;

+; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2

+

+;uInt longest_match(s, cur_match)

+;    deflate_state *s;

+;    IPos cur_match;                             /* current match */

+

+    NbStack         equ     76

+    cur_match       equ     dword ptr[esp+NbStack-0]

+    str_s           equ     dword ptr[esp+NbStack-4]

+; 5 dword on top (ret,ebp,esi,edi,ebx)

+    adrret          equ     dword ptr[esp+NbStack-8]

+    pushebp         equ     dword ptr[esp+NbStack-12]

+    pushedi         equ     dword ptr[esp+NbStack-16]

+    pushesi         equ     dword ptr[esp+NbStack-20]

+    pushebx         equ     dword ptr[esp+NbStack-24]

+

+    chain_length    equ     dword ptr [esp+NbStack-28]

+    limit           equ     dword ptr [esp+NbStack-32]

+    best_len        equ     dword ptr [esp+NbStack-36]

+    window          equ     dword ptr [esp+NbStack-40]

+    prev            equ     dword ptr [esp+NbStack-44]

+    scan_start      equ      word ptr [esp+NbStack-48]

+    wmask           equ     dword ptr [esp+NbStack-52]

+    match_start_ptr equ     dword ptr [esp+NbStack-56]

+    nice_match      equ     dword ptr [esp+NbStack-60]

+    scan            equ     dword ptr [esp+NbStack-64]

+

+    windowlen       equ     dword ptr [esp+NbStack-68]

+    match_start     equ     dword ptr [esp+NbStack-72]

+    strend          equ     dword ptr [esp+NbStack-76]

+    NbStackAdd      equ     (NbStack-24)

+

+    .386p

+

+    name    gvmatch

+    .MODEL  FLAT

+

+

+

+;  all the +zlib1222add offsets are due to the addition of fields

+;  in zlib in the deflate_state structure since the asm code was first written

+;  (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").

+;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").

+;  if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").

+

+    zlib1222add         equ     8

+

+;  Note : these value are good with a 8 bytes boundary pack structure

+    dep_chain_length    equ     74h+zlib1222add

+    dep_window          equ     30h+zlib1222add

+    dep_strstart        equ     64h+zlib1222add

+    dep_prev_length     equ     70h+zlib1222add

+    dep_nice_match      equ     88h+zlib1222add

+    dep_w_size          equ     24h+zlib1222add

+    dep_prev            equ     38h+zlib1222add

+    dep_w_mask          equ     2ch+zlib1222add

+    dep_good_match      equ     84h+zlib1222add

+    dep_match_start     equ     68h+zlib1222add

+    dep_lookahead       equ     6ch+zlib1222add

+

+

+_TEXT                   segment

+

+IFDEF NOUNDERLINE

+            public  longest_match

+            public  match_init

+ELSE

+            public  _longest_match

+            public  _match_init

+ENDIF

+

+    MAX_MATCH           equ     258

+    MIN_MATCH           equ     3

+    MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1)

+

+

+

+MAX_MATCH       equ     258

+MIN_MATCH       equ     3

+MIN_LOOKAHEAD   equ     (MAX_MATCH + MIN_MATCH + 1)

+MAX_MATCH_8_     equ     ((MAX_MATCH + 7) AND 0FFF0h)

+

+

+;;; stack frame offsets

+

+chainlenwmask   equ  esp + 0    ; high word: current chain len

+                    ; low word: s->wmask

+window      equ  esp + 4    ; local copy of s->window

+windowbestlen   equ  esp + 8    ; s->window + bestlen

+scanstart   equ  esp + 16   ; first two bytes of string

+scanend     equ  esp + 12   ; last two bytes of string

+scanalign   equ  esp + 20   ; dword-misalignment of string

+nicematch   equ  esp + 24   ; a good enough match size

+bestlen     equ  esp + 28   ; size of best match so far

+scan        equ  esp + 32   ; ptr to string wanting match

+

+LocalVarsSize   equ 36

+;   saved ebx   byte esp + 36

+;   saved edi   byte esp + 40

+;   saved esi   byte esp + 44

+;   saved ebp   byte esp + 48

+;   return address  byte esp + 52

+deflatestate    equ  esp + 56   ; the function arguments

+curmatch    equ  esp + 60

+

+;;; Offsets for fields in the deflate_state structure. These numbers

+;;; are calculated from the definition of deflate_state, with the

+;;; assumption that the compiler will dword-align the fields. (Thus,

+;;; changing the definition of deflate_state could easily cause this

+;;; program to crash horribly, without so much as a warning at

+;;; compile time. Sigh.)

+

+dsWSize     equ 36+zlib1222add

+dsWMask     equ 44+zlib1222add

+dsWindow    equ 48+zlib1222add

+dsPrev      equ 56+zlib1222add

+dsMatchLen  equ 88+zlib1222add

+dsPrevMatch equ 92+zlib1222add

+dsStrStart  equ 100+zlib1222add

+dsMatchStart    equ 104+zlib1222add

+dsLookahead equ 108+zlib1222add

+dsPrevLen   equ 112+zlib1222add

+dsMaxChainLen   equ 116+zlib1222add

+dsGoodMatch equ 132+zlib1222add

+dsNiceMatch equ 136+zlib1222add

+

+

+;;; match686.asm -- Pentium-Pro-optimized version of longest_match()

+;;; Written for zlib 1.1.2

+;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>

+;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html

+;;;

+;;

+;;  This software is provided 'as-is', without any express or implied

+;;  warranty.  In no event will the authors be held liable for any damages

+;;  arising from the use of this software.

+;;

+;;  Permission is granted to anyone to use this software for any purpose,

+;;  including commercial applications, and to alter it and redistribute it

+;;  freely, subject to the following restrictions:

+;;

+;;  1. The origin of this software must not be misrepresented; you must not

+;;     claim that you wrote the original software. If you use this software

+;;     in a product, an acknowledgment in the product documentation would be

+;;     appreciated but is not required.

+;;  2. Altered source versions must be plainly marked as such, and must not be

+;;     misrepresented as being the original software

+;;  3. This notice may not be removed or altered from any source distribution.

+;;

+

+;GLOBAL _longest_match, _match_init

+

+

+;SECTION    .text

+

+;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)

+

+;_longest_match:

+    IFDEF NOUNDERLINE

+    longest_match       proc near

+    ELSE

+    _longest_match      proc near

+    ENDIF

+

+;;; Save registers that the compiler may be using, and adjust esp to

+;;; make room for our stack frame.

+

+        push    ebp

+        push    edi

+        push    esi

+        push    ebx

+        sub esp, LocalVarsSize

+

+;;; Retrieve the function arguments. ecx will hold cur_match

+;;; throughout the entire function. edx will hold the pointer to the

+;;; deflate_state structure during the function's setup (before

+;;; entering the main loop.

+

+        mov edx, [deflatestate]

+        mov ecx, [curmatch]

+

+;;; uInt wmask = s->w_mask;

+;;; unsigned chain_length = s->max_chain_length;

+;;; if (s->prev_length >= s->good_match) {

+;;;     chain_length >>= 2;

+;;; }

+

+        mov eax, [edx + dsPrevLen]

+        mov ebx, [edx + dsGoodMatch]

+        cmp eax, ebx

+        mov eax, [edx + dsWMask]

+        mov ebx, [edx + dsMaxChainLen]

+        jl  LastMatchGood

+        shr ebx, 2

+LastMatchGood:

+

+;;; chainlen is decremented once beforehand so that the function can

+;;; use the sign flag instead of the zero flag for the exit test.

+;;; It is then shifted into the high word, to make room for the wmask

+;;; value, which it will always accompany.

+

+        dec ebx

+        shl ebx, 16

+        or  ebx, eax

+        mov [chainlenwmask], ebx

+

+;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;

+

+        mov eax, [edx + dsNiceMatch]

+        mov ebx, [edx + dsLookahead]

+        cmp ebx, eax

+        jl  LookaheadLess

+        mov ebx, eax

+LookaheadLess:  mov [nicematch], ebx

+

+;;; register Bytef *scan = s->window + s->strstart;

+

+        mov esi, [edx + dsWindow]

+        mov [window], esi

+        mov ebp, [edx + dsStrStart]

+        lea edi, [esi + ebp]

+        mov [scan], edi

+

+;;; Determine how many bytes the scan ptr is off from being

+;;; dword-aligned.

+

+        mov eax, edi

+        neg eax

+        and eax, 3

+        mov [scanalign], eax

+

+;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?

+;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;

+

+        mov eax, [edx + dsWSize]

+        sub eax, MIN_LOOKAHEAD

+        sub ebp, eax

+        jg  LimitPositive

+        xor ebp, ebp

+LimitPositive:

+

+;;; int best_len = s->prev_length;

+

+        mov eax, [edx + dsPrevLen]

+        mov [bestlen], eax

+

+;;; Store the sum of s->window + best_len in esi locally, and in esi.

+

+        add esi, eax

+        mov [windowbestlen], esi

+

+;;; register ush scan_start = *(ushf*)scan;

+;;; register ush scan_end   = *(ushf*)(scan+best_len-1);

+;;; Posf *prev = s->prev;

+

+        movzx   ebx, word ptr [edi]

+        mov [scanstart], ebx

+        movzx   ebx, word ptr [edi + eax - 1]

+        mov [scanend], ebx

+        mov edi, [edx + dsPrev]

+

+;;; Jump into the main loop.

+

+        mov edx, [chainlenwmask]

+        jmp short LoopEntry

+

+align 4

+

+;;; do {

+;;;     match = s->window + cur_match;

+;;;     if (*(ushf*)(match+best_len-1) != scan_end ||

+;;;         *(ushf*)match != scan_start) continue;

+;;;     [...]

+;;; } while ((cur_match = prev[cur_match & wmask]) > limit

+;;;          && --chain_length != 0);

+;;;

+;;; Here is the inner loop of the function. The function will spend the

+;;; majority of its time in this loop, and majority of that time will

+;;; be spent in the first ten instructions.

+;;;

+;;; Within this loop:

+;;; ebx = scanend

+;;; ecx = curmatch

+;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)

+;;; esi = windowbestlen - i.e., (window + bestlen)

+;;; edi = prev

+;;; ebp = limit

+

+LookupLoop:

+        and ecx, edx

+        movzx   ecx, word ptr [edi + ecx*2]

+        cmp ecx, ebp

+        jbe LeaveNow

+        sub edx, 00010000h

+        js  LeaveNow

+LoopEntry:  movzx   eax, word ptr [esi + ecx - 1]

+        cmp eax, ebx

+        jnz LookupLoop

+        mov eax, [window]

+        movzx   eax, word ptr [eax + ecx]

+        cmp eax, [scanstart]

+        jnz LookupLoop

+

+;;; Store the current value of chainlen.

+

+        mov [chainlenwmask], edx

+

+;;; Point edi to the string under scrutiny, and esi to the string we

+;;; are hoping to match it up with. In actuality, esi and edi are

+;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is

+;;; initialized to -(MAX_MATCH_8 - scanalign).

+

+        mov esi, [window]

+        mov edi, [scan]

+        add esi, ecx

+        mov eax, [scanalign]

+        mov edx, 0fffffef8h; -(MAX_MATCH_8)

+        lea edi, [edi + eax + 0108h] ;MAX_MATCH_8]

+        lea esi, [esi + eax + 0108h] ;MAX_MATCH_8]

+

+;;; Test the strings for equality, 8 bytes at a time. At the end,

+;;; adjust edx so that it is offset to the exact byte that mismatched.

+;;;

+;;; We already know at this point that the first three bytes of the

+;;; strings match each other, and they can be safely passed over before

+;;; starting the compare loop. So what this code does is skip over 0-3

+;;; bytes, as much as necessary in order to dword-align the edi

+;;; pointer. (esi will still be misaligned three times out of four.)

+;;;

+;;; It should be confessed that this loop usually does not represent

+;;; much of the total running time. Replacing it with a more

+;;; straightforward "rep cmpsb" would not drastically degrade

+;;; performance.

+

+LoopCmps:

+        mov eax, [esi + edx]

+        xor eax, [edi + edx]

+        jnz LeaveLoopCmps

+        mov eax, [esi + edx + 4]

+        xor eax, [edi + edx + 4]

+        jnz LeaveLoopCmps4

+        add edx, 8

+        jnz LoopCmps

+        jmp short LenMaximum

+LeaveLoopCmps4: add edx, 4

+LeaveLoopCmps:  test    eax, 0000FFFFh

+        jnz LenLower

+        add edx,  2

+        shr eax, 16

+LenLower:   sub al, 1

+        adc edx, 0

+

+;;; Calculate the length of the match. If it is longer than MAX_MATCH,

+;;; then automatically accept it as the best possible match and leave.

+

+        lea eax, [edi + edx]

+        mov edi, [scan]

+        sub eax, edi

+        cmp eax, MAX_MATCH

+        jge LenMaximum

+

+;;; If the length of the match is not longer than the best match we

+;;; have so far, then forget it and return to the lookup loop.

+

+        mov edx, [deflatestate]

+        mov ebx, [bestlen]

+        cmp eax, ebx

+        jg  LongerMatch

+        mov esi, [windowbestlen]

+        mov edi, [edx + dsPrev]

+        mov ebx, [scanend]

+        mov edx, [chainlenwmask]

+        jmp LookupLoop

+

+;;;         s->match_start = cur_match;

+;;;         best_len = len;

+;;;         if (len >= nice_match) break;

+;;;         scan_end = *(ushf*)(scan+best_len-1);

+

+LongerMatch:    mov ebx, [nicematch]

+        mov [bestlen], eax

+        mov [edx + dsMatchStart], ecx

+        cmp eax, ebx

+        jge LeaveNow

+        mov esi, [window]

+        add esi, eax

+        mov [windowbestlen], esi

+        movzx   ebx, word ptr [edi + eax - 1]

+        mov edi, [edx + dsPrev]

+        mov [scanend], ebx

+        mov edx, [chainlenwmask]

+        jmp LookupLoop

+

+;;; Accept the current string, with the maximum possible length.

+

+LenMaximum: mov edx, [deflatestate]

+        mov dword ptr [bestlen], MAX_MATCH

+        mov [edx + dsMatchStart], ecx

+

+;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;

+;;; return s->lookahead;

+

+LeaveNow:

+        mov edx, [deflatestate]

+        mov ebx, [bestlen]

+        mov eax, [edx + dsLookahead]

+        cmp ebx, eax

+        jg  LookaheadRet

+        mov eax, ebx

+LookaheadRet:

+

+;;; Restore the stack and return from whence we came.

+

+        add esp, LocalVarsSize

+        pop ebx

+        pop esi

+        pop edi

+        pop ebp

+

+        ret

+; please don't remove this string !

+; Your can freely use match686 in any free or commercial app if you don't remove the string in the binary!

+    db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah

+

+

+    IFDEF NOUNDERLINE

+    longest_match       endp

+    ELSE

+    _longest_match      endp

+    ENDIF

+

+    IFDEF NOUNDERLINE

+    match_init      proc near

+                    ret

+    match_init      endp

+    ELSE

+    _match_init     proc near

+                    ret

+    _match_init     endp

+    ENDIF

+

+

+_TEXT   ends

+end

diff --git a/contrib/masmx86/match686.obj b/contrib/masmx86/match686.obj
new file mode 100644
index 0000000..2e4631f
--- /dev/null
+++ b/contrib/masmx86/match686.obj
Binary files differ
diff --git a/contrib/masmx86/mkasm.bat b/contrib/masmx86/mkasm.bat
deleted file mode 100755
index 70a51f8..0000000
--- a/contrib/masmx86/mkasm.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cl /DASMV /I..\.. /O2 /c gvmat32c.c

-ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm

-ml /coff /Zi /c /Flinffas32.lst inffas32.asm

diff --git a/contrib/masmx86/readme.txt b/contrib/masmx86/readme.txt
index 7b57167..413580e 100644
--- a/contrib/masmx86/readme.txt
+++ b/contrib/masmx86/readme.txt
@@ -14,8 +14,8 @@
 Build instructions
 ------------------
 * With Microsoft C and MASM:
-nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj"
+nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj"
 
 * With Borland C and TASM:
-make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj" OBJPA="+gvmat32c.obj+gvmat32.obj+inffas32.obj"
+make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj" OBJPA="+match686c.obj+match686.obj+inffas32.obj"
 
diff --git a/contrib/pascal/zlibpas.pas b/contrib/pascal/zlibpas.pas
index 836848c..dc7d37d 100644
--- a/contrib/pascal/zlibpas.pas
+++ b/contrib/pascal/zlibpas.pas
@@ -10,7 +10,7 @@
 interface
 
 const
-  ZLIB_VERSION = '1.2.3';
+  ZLIB_VERSION = '1.2.4';
 
 type
   alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;
diff --git a/contrib/vstudio/readme.txt b/contrib/vstudio/readme.txt
index a7b7247..904888b 100644
--- a/contrib/vstudio/readme.txt
+++ b/contrib/vstudio/readme.txt
@@ -1,8 +1,8 @@
-Building instructions for the DLL versions of Zlib 1.2.3

+Building instructions for the DLL versions of Zlib 1.2.4

 ========================================================

 

 This directory contains projects that build zlib and minizip using

-Microsoft Visual C++ 7.0/7.1/8.0/9.0/10.0, and Visual C++ .

+Microsoft Visual C++ 9.0/10.0, and Visual C++ .

 

 You don't need to build these projects yourself. You can download the

 binaries from:

@@ -15,51 +15,17 @@
 bld_ml32.bat in contrib\masmx86

 

 

-Build instructions for Visual Studio 7.x (32 bits)

---------------------------------------------------

-- Uncompress current zlib, including all contrib/* files

-- Download the crtdll library from

-    http://www.winimage.com/zLibDll/crtdll.zip

-  Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc7.

-- Open contrib\vstudio\vc7\zlibvc.sln with Microsoft Visual C++ 7.x

-  (Visual Studio .Net 2002 or 2003).

-

-Build instructions for Visual Studio 2005 (32 bits or 64 bits)

---------------------------------------------------------------

-- Uncompress current zlib, including all contrib/* files

-- For 32 bits only: download the crtdll library from

-    http://www.winimage.com/zLibDll/crtdll.zip

-  Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc8.

-- Open contrib\vstudio\vc8\zlibvc.sln with Microsoft Visual C++ 2005

-

-Build instructions for Visual Studio 2005 64 bits, PSDK compiler

-----------------------------------------------------------------

-at the time of writing this text file, Visual Studio 2005 (and

-  Microsoft Visual C++ 8.0) is on the beta 2 stage.

-Using you can get the free 64 bits compiler from Platform SDK,

-  which is NOT a beta, and compile using the Visual studio 2005 IDE

-see http://www.winimage.com/misc/sdk64onvs2005/ for instruction

-

-- Uncompress current zlib, including all contrib/* files

-- start Visual Studio 2005 from a platform SDK command prompt, using

-  the /useenv switch

-- Open contrib\vstudio\vc8\zlibvc.sln with Microsoft Visual C++ 2005

 

 

 Build instructions for Visual Studio 2008 (32 bits or 64 bits)

 --------------------------------------------------------------

 - Uncompress current zlib, including all contrib/* files

-- For 32 bits only: download the crtdll library from

-    http://www.winimage.com/zLibDll/crtdll.zip

-  Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc9.

 - Open contrib\vstudio\vc9\zlibvc.sln with Microsoft Visual C++ 2008.0

+- Or run: vcbuild /rebuild contrib\vstudio\vc9\zlibvc.sln "Release|Win32"

 

 Build instructions for Visual Studio 2010 (32 bits or 64 bits)

 --------------------------------------------------------------

 - Uncompress current zlib, including all contrib/* files

-- For 32 bits only: download the crtdll library from

-    http://www.winimage.com/zLibDll/crtdll.zip

-  Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc10.

 - Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010.0

 

 

diff --git a/contrib/vstudio/vc10/testzlib.vcxproj b/contrib/vstudio/vc10/testzlib.vcxproj
index 9810412..9088d17 100644
--- a/contrib/vstudio/vc10/testzlib.vcxproj
+++ b/contrib/vstudio/vc10/testzlib.vcxproj
@@ -194,7 +194,7 @@
       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>

     </ClCompile>

     <Link>

-      <AdditionalDependencies>..\..\masmx86\gvmat32.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

+      <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

       <OutputFile>$(OutDir)testzlib.exe</OutputFile>

       <GenerateDebugInformation>true</GenerateDebugInformation>

       <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>

@@ -254,7 +254,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>

     </ClCompile>

     <Link>

-      <AdditionalDependencies>..\..\masmx86\gvmat32.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

+      <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

       <OutputFile>$(OutDir)testzlib.exe</OutputFile>

       <GenerateDebugInformation>true</GenerateDebugInformation>

       <SubSystem>Console</SubSystem>

@@ -397,14 +397,6 @@
     <ClCompile Include="..\..\..\compress.c" />

     <ClCompile Include="..\..\..\crc32.c" />

     <ClCompile Include="..\..\..\deflate.c" />

-    <ClCompile Include="..\..\masmx86\gvmat32c.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </ClCompile>

     <ClCompile Include="..\..\..\infback.c" />

     <ClCompile Include="..\..\masmx64\inffas8664.c">

       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>

diff --git a/contrib/vstudio/vc10/testzlib.vcxproj.filters b/contrib/vstudio/vc10/testzlib.vcxproj.filters
index a0d9b23..249daa8 100644
--- a/contrib/vstudio/vc10/testzlib.vcxproj.filters
+++ b/contrib/vstudio/vc10/testzlib.vcxproj.filters
@@ -27,9 +27,6 @@
     <ClCompile Include="..\..\..\deflate.c">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="..\..\masmx86\gvmat32c.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="..\..\..\infback.c">

       <Filter>Source Files</Filter>

     </ClCompile>

diff --git a/contrib/vstudio/vc10/zlib.rc b/contrib/vstudio/vc10/zlib.rc
index 72cb8b4..23802d8 100644
--- a/contrib/vstudio/vc10/zlib.rc
+++ b/contrib/vstudio/vc10/zlib.rc
@@ -2,8 +2,8 @@
 

 #define IDR_VERSION1  1

 IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE

-  FILEVERSION	 1,2,3,0

-  PRODUCTVERSION 1,2,3,0

+  FILEVERSION	 1,2,4,0

+  PRODUCTVERSION 1,2,4,0

   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK

   FILEFLAGS	0

   FILEOS	VOS_DOS_WINDOWS32

@@ -16,13 +16,13 @@
     //language ID = U.S. English, char set = Windows, Multilingual

 

     BEGIN

-      VALUE "FileDescription", "zlib data compression library\0"

-      VALUE "FileVersion",	"1.2.3.0\0"

+      VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"

+      VALUE "FileVersion",	"1.2.4.0\0"

       VALUE "InternalName",	"zlib\0"

       VALUE "OriginalFilename",	"zlib.dll\0"

       VALUE "ProductName",	"ZLib.DLL\0"

       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"

-      VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0"

+      VALUE "LegalCopyright", "(C) 1995-2010 Jean-loup Gailly & Mark Adler\0"

     END

   END

   BLOCK "VarFileInfo"

diff --git a/contrib/vstudio/vc10/zlibstat.vcxproj b/contrib/vstudio/vc10/zlibstat.vcxproj
index fbf6c1b..2682fca 100644
--- a/contrib/vstudio/vc10/zlibstat.vcxproj
+++ b/contrib/vstudio/vc10/zlibstat.vcxproj
@@ -206,7 +206,7 @@
     </ResourceCompile>

     <Lib>

       <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>

-      <AdditionalDependencies>..\..\masmx86\gvmat32.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

+      <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

       <OutputFile>$(OutDir)zlibstat.lib</OutputFile>

       <SuppressStartupBanner>true</SuppressStartupBanner>

     </Lib>

@@ -422,16 +422,7 @@
     <ClCompile Include="..\..\..\compress.c" />

     <ClCompile Include="..\..\..\crc32.c" />

     <ClCompile Include="..\..\..\deflate.c" />

-    <ClCompile Include="..\..\masmx86\gvmat32c.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </ClCompile>

     <ClCompile Include="..\..\..\gzclose.c" />

-    <ClCompile Include="..\..\..\gzio.c" />

     <ClCompile Include="..\..\..\gzlib.c" />

     <ClCompile Include="..\..\..\gzread.c" />

     <ClCompile Include="..\..\..\gzwrite.c" />

diff --git a/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/contrib/vstudio/vc10/zlibstat.vcxproj.filters
index f676c2d..c8c7f7e 100644
--- a/contrib/vstudio/vc10/zlibstat.vcxproj.filters
+++ b/contrib/vstudio/vc10/zlibstat.vcxproj.filters
@@ -18,15 +18,9 @@
     <ClCompile Include="..\..\..\deflate.c">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="..\..\masmx86\gvmat32c.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="..\..\..\gzclose.c">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="..\..\..\gzio.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="..\..\..\gzlib.c">

       <Filter>Source Files</Filter>

     </ClCompile>

diff --git a/contrib/vstudio/vc10/zlibvc.def b/contrib/vstudio/vc10/zlibvc.def
index 0b6a9e9..b3b7cab 100644
--- a/contrib/vstudio/vc10/zlibvc.def
+++ b/contrib/vstudio/vc10/zlibvc.def
@@ -1,7 +1,7 @@
+LIBRARY

+; zlib data compression and ZIP file I/O library

 

-VERSION		1.23

-

-HEAPSIZE	1048576,8192

+VERSION		1.24

 

 EXPORTS

         adler32                                  @1

@@ -90,25 +90,47 @@
         unzGoToFilePos                           @101

 

         fill_win32_filefunc                      @110

-        fill_win32_filefunc64                    @111

-        fill_win32_filefunc64A                   @112

-        fill_win32_filefunc64W                   @113

 

-; quick hack by hkuno@microhouse.co.jp

-        unzOpen64                         @120

-        unzOpen2_64                       @121

-        unzGetGlobalInfo64                @122

-        unzGetCurrentFileInfo64           @124

-        unzGetCurrentFileZStreamPos64     @125

-        unztell64                         @126

-        unzGetFilePos64                   @127

-        unzGoToFilePos64                  @128

+; zlibwapi v1.2.4 added:

+        fill_win32_filefunc64                   @111

+        fill_win32_filefunc64A                  @112

+        fill_win32_filefunc64W                  @113

 

-        zipOpen64                         @130

-        zipOpen2_64                       @131

-        zipOpenNewFileInZip64             @132

-        zipOpenNewFileInZip2_64           @133

-        zipOpenNewFileInZip3_64           @134

-        zipOpenNewFileInZip4_64           @135

-        zipCloseFileInZipRaw64            @136

-; end hack

+        unzOpen64                               @120

+        unzOpen2_64                             @121

+        unzGetGlobalInfo64                      @122

+        unzGetCurrentFileInfo64                 @124

+        unzGetCurrentFileZStreamPos64           @125

+        unztell64                               @126

+        unzGetFilePos64                         @127

+        unzGoToFilePos64                        @128

+

+        zipOpen64                               @130

+        zipOpen2_64                             @131

+        zipOpenNewFileInZip64                   @132

+        zipOpenNewFileInZip2_64                 @133

+        zipOpenNewFileInZip3_64                 @134

+        zipOpenNewFileInZip4_64                 @135

+        zipCloseFileInZipRaw64                  @136

+

+; zlib1 v1.2.4 added:

+        adler32_combine                         @140

+        adler32_combine64                       @141

+        crc32_combine                           @142

+        crc32_combine64                         @143

+        deflateSetHeader                        @144

+        deflateTune                             @145

+        gzbuffer                                @146

+        gzclose_r                               @147

+        gzclose_w                               @148

+        gzdirect                                @149

+        gzoffset                                @150

+        gzoffset64                              @151

+        gzopen64                                @152

+        gzseek64                                @153

+        gztell64                                @154

+        inflateGetHeader                        @156

+        inflateMark                             @157

+        inflatePrime                            @158

+        inflateReset2                           @159

+        inflateUndermine                        @160

diff --git a/contrib/vstudio/vc10/zlibvc.sln b/contrib/vstudio/vc10/zlibvc.sln
index 6d2ef64..6f6ffd5 100644
--- a/contrib/vstudio/vc10/zlibvc.sln
+++ b/contrib/vstudio/vc10/zlibvc.sln
@@ -36,8 +36,8 @@
 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32

-		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = ReleaseWithoutAsm|x64

-		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = ReleaseWithoutAsm|x64

+		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64

+		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32

@@ -94,8 +94,8 @@
 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64

 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium

+		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32

+		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32

@@ -110,8 +110,8 @@
 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium

-		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium

-		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium

+		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32

+		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32

@@ -126,8 +126,8 @@
 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium

+		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32

+		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64

 	EndGlobalSection

 	GlobalSection(SolutionProperties) = preSolution

 		HideSolutionNode = FALSE

diff --git a/contrib/vstudio/vc10/zlibvc.vcxproj b/contrib/vstudio/vc10/zlibvc.vcxproj
index e1067fa..9862398 100644
--- a/contrib/vstudio/vc10/zlibvc.vcxproj
+++ b/contrib/vstudio/vc10/zlibvc.vcxproj
@@ -213,7 +213,7 @@
     </ResourceCompile>

     <Link>

       <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>

-      <AdditionalDependencies>..\..\masmx86\gvmat32.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

+      <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

       <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>

       <SuppressStartupBanner>true</SuppressStartupBanner>

       <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>

@@ -291,7 +291,7 @@
       <StringPooling>true</StringPooling>

       <ExceptionHandling>

       </ExceptionHandling>

-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <BufferSecurityCheck>false</BufferSecurityCheck>

       <FunctionLevelLinking>true</FunctionLevelLinking>

       <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>

@@ -310,7 +310,7 @@
     </ResourceCompile>

     <Link>

       <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>

-      <AdditionalDependencies>..\..\masmx86\gvmat32.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

+      <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>

       <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>

       <SuppressStartupBanner>true</SuppressStartupBanner>

       <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>

@@ -598,17 +598,7 @@
     <ClCompile Include="..\..\..\compress.c" />

     <ClCompile Include="..\..\..\crc32.c" />

     <ClCompile Include="..\..\..\deflate.c" />

-    <ClCompile Include="..\..\masmx86\gvmat32c.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </ClCompile>

     <ClCompile Include="..\..\..\gzclose.c" />

-    <ClCompile Include="..\..\..\gzio.c" />

     <ClCompile Include="..\..\..\gzlib.c" />

     <ClCompile Include="..\..\..\gzread.c" />

     <ClCompile Include="..\..\..\gzwrite.c" />

diff --git a/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/contrib/vstudio/vc10/zlibvc.vcxproj.filters
index 7b595c4..180b71c 100644
--- a/contrib/vstudio/vc10/zlibvc.vcxproj.filters
+++ b/contrib/vstudio/vc10/zlibvc.vcxproj.filters
@@ -27,15 +27,9 @@
     <ClCompile Include="..\..\..\deflate.c">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="..\..\masmx86\gvmat32c.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="..\..\..\gzclose.c">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="..\..\..\gzio.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="..\..\..\gzlib.c">

       <Filter>Source Files</Filter>

     </ClCompile>

diff --git a/contrib/vstudio/vc7/zlibvc.def b/contrib/vstudio/vc7/zlibvc.def
deleted file mode 100644
index 0b6a9e9..0000000
--- a/contrib/vstudio/vc7/zlibvc.def
+++ /dev/null
@@ -1,114 +0,0 @@
-

-VERSION		1.23

-

-HEAPSIZE	1048576,8192

-

-EXPORTS

-        adler32                                  @1

-        compress                                 @2

-        crc32                                    @3

-        deflate                                  @4

-        deflateCopy                              @5

-        deflateEnd                               @6

-        deflateInit2_                            @7

-        deflateInit_                             @8

-        deflateParams                            @9

-        deflateReset                             @10

-        deflateSetDictionary                     @11

-        gzclose                                  @12

-        gzdopen                                  @13

-        gzerror                                  @14

-        gzflush                                  @15

-        gzopen                                   @16

-        gzread                                   @17

-        gzwrite                                  @18

-        inflate                                  @19

-        inflateEnd                               @20

-        inflateInit2_                            @21

-        inflateInit_                             @22

-        inflateReset                             @23

-        inflateSetDictionary                     @24

-        inflateSync                              @25

-        uncompress                               @26

-        zlibVersion                              @27

-        gzprintf                                 @28

-        gzputc                                   @29

-        gzgetc                                   @30

-        gzseek                                   @31

-        gzrewind                                 @32

-        gztell                                   @33

-        gzeof                                    @34

-        gzsetparams                              @35

-        zError                                   @36

-        inflateSyncPoint                         @37

-        get_crc_table                            @38

-        compress2                                @39

-        gzputs                                   @40

-        gzgets                                   @41

-        inflateCopy                              @42

-        inflateBackInit_                         @43

-        inflateBack                              @44

-        inflateBackEnd                           @45

-        compressBound                            @46

-        deflateBound                             @47

-        gzclearerr                               @48

-        gzungetc                                 @49

-        zlibCompileFlags                         @50

-        deflatePrime                             @51

-

-        unzOpen                                  @61

-        unzClose                                 @62

-        unzGetGlobalInfo                         @63

-        unzGetCurrentFileInfo                    @64

-        unzGoToFirstFile                         @65

-        unzGoToNextFile                          @66

-        unzOpenCurrentFile                       @67

-        unzReadCurrentFile                       @68

-        unzOpenCurrentFile3                      @69

-        unztell                                  @70

-        unzeof                                   @71

-        unzCloseCurrentFile                      @72

-        unzGetGlobalComment                      @73

-        unzStringFileNameCompare                 @74

-        unzLocateFile                            @75

-        unzGetLocalExtrafield                    @76

-        unzOpen2                                 @77

-        unzOpenCurrentFile2                      @78

-        unzOpenCurrentFilePassword               @79

-

-        zipOpen                                  @80

-        zipOpenNewFileInZip                      @81

-        zipWriteInFileInZip                      @82

-        zipCloseFileInZip                        @83

-        zipClose                                 @84

-        zipOpenNewFileInZip2                     @86

-        zipCloseFileInZipRaw                     @87

-        zipOpen2                                 @88

-        zipOpenNewFileInZip3                     @89

-

-        unzGetFilePos                            @100

-        unzGoToFilePos                           @101

-

-        fill_win32_filefunc                      @110

-        fill_win32_filefunc64                    @111

-        fill_win32_filefunc64A                   @112

-        fill_win32_filefunc64W                   @113

-

-; quick hack by hkuno@microhouse.co.jp

-        unzOpen64                         @120

-        unzOpen2_64                       @121

-        unzGetGlobalInfo64                @122

-        unzGetCurrentFileInfo64           @124

-        unzGetCurrentFileZStreamPos64     @125

-        unztell64                         @126

-        unzGetFilePos64                   @127

-        unzGoToFilePos64                  @128

-

-        zipOpen64                         @130

-        zipOpen2_64                       @131

-        zipOpenNewFileInZip64             @132

-        zipOpenNewFileInZip2_64           @133

-        zipOpenNewFileInZip3_64           @134

-        zipOpenNewFileInZip4_64           @135

-        zipCloseFileInZipRaw64            @136

-; end hack

diff --git a/contrib/vstudio/vc8/zlibvc.def b/contrib/vstudio/vc8/zlibvc.def
deleted file mode 100644
index 0b6a9e9..0000000
--- a/contrib/vstudio/vc8/zlibvc.def
+++ /dev/null
@@ -1,114 +0,0 @@
-

-VERSION		1.23

-

-HEAPSIZE	1048576,8192

-

-EXPORTS

-        adler32                                  @1

-        compress                                 @2

-        crc32                                    @3

-        deflate                                  @4

-        deflateCopy                              @5

-        deflateEnd                               @6

-        deflateInit2_                            @7

-        deflateInit_                             @8

-        deflateParams                            @9

-        deflateReset                             @10

-        deflateSetDictionary                     @11

-        gzclose                                  @12

-        gzdopen                                  @13

-        gzerror                                  @14

-        gzflush                                  @15

-        gzopen                                   @16

-        gzread                                   @17

-        gzwrite                                  @18

-        inflate                                  @19

-        inflateEnd                               @20

-        inflateInit2_                            @21

-        inflateInit_                             @22

-        inflateReset                             @23

-        inflateSetDictionary                     @24

-        inflateSync                              @25

-        uncompress                               @26

-        zlibVersion                              @27

-        gzprintf                                 @28

-        gzputc                                   @29

-        gzgetc                                   @30

-        gzseek                                   @31

-        gzrewind                                 @32

-        gztell                                   @33

-        gzeof                                    @34

-        gzsetparams                              @35

-        zError                                   @36

-        inflateSyncPoint                         @37

-        get_crc_table                            @38

-        compress2                                @39

-        gzputs                                   @40

-        gzgets                                   @41

-        inflateCopy                              @42

-        inflateBackInit_                         @43

-        inflateBack                              @44

-        inflateBackEnd                           @45

-        compressBound                            @46

-        deflateBound                             @47

-        gzclearerr                               @48

-        gzungetc                                 @49

-        zlibCompileFlags                         @50

-        deflatePrime                             @51

-

-        unzOpen                                  @61

-        unzClose                                 @62

-        unzGetGlobalInfo                         @63

-        unzGetCurrentFileInfo                    @64

-        unzGoToFirstFile                         @65

-        unzGoToNextFile                          @66

-        unzOpenCurrentFile                       @67

-        unzReadCurrentFile                       @68

-        unzOpenCurrentFile3                      @69

-        unztell                                  @70

-        unzeof                                   @71

-        unzCloseCurrentFile                      @72

-        unzGetGlobalComment                      @73

-        unzStringFileNameCompare                 @74

-        unzLocateFile                            @75

-        unzGetLocalExtrafield                    @76

-        unzOpen2                                 @77

-        unzOpenCurrentFile2                      @78

-        unzOpenCurrentFilePassword               @79

-

-        zipOpen                                  @80

-        zipOpenNewFileInZip                      @81

-        zipWriteInFileInZip                      @82

-        zipCloseFileInZip                        @83

-        zipClose                                 @84

-        zipOpenNewFileInZip2                     @86

-        zipCloseFileInZipRaw                     @87

-        zipOpen2                                 @88

-        zipOpenNewFileInZip3                     @89

-

-        unzGetFilePos                            @100

-        unzGoToFilePos                           @101

-

-        fill_win32_filefunc                      @110

-        fill_win32_filefunc64                    @111

-        fill_win32_filefunc64A                   @112

-        fill_win32_filefunc64W                   @113

-

-; quick hack by hkuno@microhouse.co.jp

-        unzOpen64                         @120

-        unzOpen2_64                       @121

-        unzGetGlobalInfo64                @122

-        unzGetCurrentFileInfo64           @124

-        unzGetCurrentFileZStreamPos64     @125

-        unztell64                         @126

-        unzGetFilePos64                   @127

-        unzGoToFilePos64                  @128

-

-        zipOpen64                         @130

-        zipOpen2_64                       @131

-        zipOpenNewFileInZip64             @132

-        zipOpenNewFileInZip2_64           @133

-        zipOpenNewFileInZip3_64           @134

-        zipOpenNewFileInZip4_64           @135

-        zipCloseFileInZipRaw64            @136

-; end hack

diff --git a/contrib/vstudio/vc9/testzlib.vcproj b/contrib/vstudio/vc9/testzlib.vcproj
index 9ad07ae..9cb0bf8 100644
--- a/contrib/vstudio/vc9/testzlib.vcproj
+++ b/contrib/vstudio/vc9/testzlib.vcproj
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="Windows-1252"?>

 <VisualStudioProject

 	ProjectType="Visual C++"

-	Version="9.00"

+	Version="9,00"

 	Name="testzlib"

 	ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"

 	RootNamespace="testzlib"

@@ -71,7 +71,7 @@
 			/>

 			<Tool

 				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"

+				AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"

 				OutputFile="$(OutDir)/testzlib.exe"

 				LinkIncremental="2"

 				GenerateManifest="false"

@@ -105,6 +105,152 @@
 			/>

 		</Configuration>

 		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="x64\TestZlib$(ConfigurationName)"

+			IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"

+			ConfigurationType="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="..\..\.."

+				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"

+				BasicRuntimeChecks="0"

+				RuntimeLibrary="3"

+				BufferSecurityCheck="false"

+				AssemblerListingLocation="$(IntDir)\"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"

+				GenerateManifest="false"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|Itanium"

+			OutputDirectory="ia64\TestZlib$(ConfigurationName)"

+			IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="2"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="..\..\.."

+				PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="0"

+				RuntimeLibrary="3"

+				BufferSecurityCheck="false"

+				UsePrecompiledHeader="0"

+				AssemblerOutput="4"

+				AssemblerListingLocation="$(IntDir)\"

+				WarningLevel="3"

+				Detect64BitPortabilityProblems="true"

+				DebugInformationFormat="3"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)/testzlib.exe"

+				LinkIncremental="2"

+				GenerateManifest="false"

+				GenerateDebugInformation="true"

+				ProgramDatabaseFile="$(OutDir)/testzlib.pdb"

+				SubSystem="1"

+				TargetMachine="5"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

 			Name="ReleaseWithoutAsm|Win32"

 			OutputDirectory="x86\TestZlib$(ConfigurationName)"

 			IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"

@@ -191,245 +337,6 @@
 			/>

 		</Configuration>

 		<Configuration

-			Name="Release|Win32"

-			OutputDirectory="x86\TestZlib$(ConfigurationName)"

-			IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"

-			ConfigurationType="1"

-			CharacterSet="2"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				OmitFramePointers="true"

-				AdditionalIncludeDirectories="..\..\.."

-				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"

-				StringPooling="true"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="0"

-				BufferSecurityCheck="false"

-				EnableFunctionLevelLinking="true"

-				UsePrecompiledHeader="0"

-				AssemblerListingLocation="$(IntDir)\"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="true"

-				DebugInformationFormat="3"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"

-				OutputFile="$(OutDir)/testzlib.exe"

-				LinkIncremental="1"

-				GenerateManifest="false"

-				GenerateDebugInformation="true"

-				SubSystem="1"

-				OptimizeReferences="2"

-				EnableCOMDATFolding="2"

-				OptimizeForWindows98="1"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

-				TargetMachine="1"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			OutputDirectory="x64\TestZlib$(ConfigurationName)"

-			IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"

-			ConfigurationType="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				AdditionalIncludeDirectories="..\..\.."

-				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="3"

-				BufferSecurityCheck="false"

-				AssemblerListingLocation="$(IntDir)\"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"

-				GenerateManifest="false"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Itanium"

-			OutputDirectory="ia64\TestZlib$(ConfigurationName)"

-			IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"

-			ConfigurationType="1"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				TargetEnvironment="2"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\.."

-				PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"

-				MinimalRebuild="true"

-				BasicRuntimeChecks="0"

-				RuntimeLibrary="3"

-				BufferSecurityCheck="false"

-				UsePrecompiledHeader="0"

-				AssemblerOutput="4"

-				AssemblerListingLocation="$(IntDir)\"

-				WarningLevel="3"

-				Detect64BitPortabilityProblems="true"

-				DebugInformationFormat="3"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)/testzlib.exe"

-				LinkIncremental="2"

-				GenerateManifest="false"

-				GenerateDebugInformation="true"

-				ProgramDatabaseFile="$(OutDir)/testzlib.pdb"

-				SubSystem="1"

-				TargetMachine="5"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

 			Name="ReleaseWithoutAsm|x64"

 			OutputDirectory="x64\TestZlib$(ConfigurationName)"

 			IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"

@@ -493,9 +400,6 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -581,7 +485,91 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="x86\TestZlib$(ConfigurationName)"

+			IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="2"

+				InlineFunctionExpansion="1"

+				OmitFramePointers="true"

+				AdditionalIncludeDirectories="..\..\.."

+				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"

+				StringPooling="true"

+				BasicRuntimeChecks="0"

+				RuntimeLibrary="0"

+				BufferSecurityCheck="false"

+				EnableFunctionLevelLinking="true"

+				UsePrecompiledHeader="0"

+				AssemblerListingLocation="$(IntDir)\"

+				WarningLevel="3"

+				Detect64BitPortabilityProblems="true"

+				DebugInformationFormat="3"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"

+				OutputFile="$(OutDir)/testzlib.exe"

+				LinkIncremental="1"

+				GenerateManifest="false"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				OptimizeForWindows98="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

 			/>

 			<Tool

 				Name="VCPostBuildEventTool"

@@ -614,7 +602,7 @@
 				AdditionalIncludeDirectories="..\..\.."

 				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"

 				BasicRuntimeChecks="0"

-				RuntimeLibrary="2"

+				RuntimeLibrary="0"

 				BufferSecurityCheck="false"

 				AssemblerListingLocation="$(IntDir)\"

 			/>

@@ -651,9 +639,6 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -739,9 +724,6 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -770,82 +752,6 @@
 				>

 			</File>

 			<File

-				RelativePath="..\..\masmx86\gvmat32c.c"

-				>

-				<FileConfiguration

-					Name="Debug|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Win64 (AMD64)"

-					ExcludedFromBuild="TRUE"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Win64 (AMD64)"

-					ExcludedFromBuild="TRUE"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseAsm|Win64 (AMD64)"

-					ExcludedFromBuild="TRUE"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

 				RelativePath="..\..\..\infback.c"

 				>

 			</File>

@@ -861,22 +767,6 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

-					Name="ReleaseWithoutAsm|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

 					Name="Debug|Itanium"

 					ExcludedFromBuild="true"

 					>

@@ -885,6 +775,14 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

+					Name="ReleaseWithoutAsm|Win32"

+					ExcludedFromBuild="true"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

 					Name="ReleaseWithoutAsm|Itanium"

 					ExcludedFromBuild="true"

 					>

@@ -893,6 +791,14 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

+					Name="Release|Win32"

+					ExcludedFromBuild="true"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

 					Name="Release|Itanium"

 					ExcludedFromBuild="true"

 					>

diff --git a/contrib/vstudio/vc9/zlib.rc b/contrib/vstudio/vc9/zlib.rc
index 72cb8b4..23802d8 100644
--- a/contrib/vstudio/vc9/zlib.rc
+++ b/contrib/vstudio/vc9/zlib.rc
@@ -2,8 +2,8 @@
 

 #define IDR_VERSION1  1

 IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE

-  FILEVERSION	 1,2,3,0

-  PRODUCTVERSION 1,2,3,0

+  FILEVERSION	 1,2,4,0

+  PRODUCTVERSION 1,2,4,0

   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK

   FILEFLAGS	0

   FILEOS	VOS_DOS_WINDOWS32

@@ -16,13 +16,13 @@
     //language ID = U.S. English, char set = Windows, Multilingual

 

     BEGIN

-      VALUE "FileDescription", "zlib data compression library\0"

-      VALUE "FileVersion",	"1.2.3.0\0"

+      VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"

+      VALUE "FileVersion",	"1.2.4.0\0"

       VALUE "InternalName",	"zlib\0"

       VALUE "OriginalFilename",	"zlib.dll\0"

       VALUE "ProductName",	"ZLib.DLL\0"

       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"

-      VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0"

+      VALUE "LegalCopyright", "(C) 1995-2010 Jean-loup Gailly & Mark Adler\0"

     END

   END

   BLOCK "VarFileInfo"

diff --git a/contrib/vstudio/vc9/zlibstat.vcproj b/contrib/vstudio/vc9/zlibstat.vcproj
index ff9813a..61c76c7 100644
--- a/contrib/vstudio/vc9/zlibstat.vcproj
+++ b/contrib/vstudio/vc9/zlibstat.vcproj
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="Windows-1252"?>

 <VisualStudioProject

 	ProjectType="Visual C++"

-	Version="9.00"

+	Version="9,00"

 	Name="zlibstat"

 	ProjectGUID="{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"

 	TargetFrameworkVersion="131072"

@@ -94,153 +94,6 @@
 			/>

 		</Configuration>

 		<Configuration

-			Name="Release|Win32"

-			OutputDirectory="x86\ZlibStat$(ConfigurationName)"

-			IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"

-			ConfigurationType="4"

-			InheritedPropertySheets="UpgradeFromVC70.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

-				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF"

-				StringPooling="true"

-				ExceptionHandling="0"

-				RuntimeLibrary="0"

-				BufferSecurityCheck="false"

-				EnableFunctionLevelLinking="true"

-				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"

-				AssemblerListingLocation="$(IntDir)\"

-				ObjectFile="$(IntDir)\"

-				ProgramDataBaseFileName="$(OutDir)\"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				Culture="1036"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"

-				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj "

-				OutputFile="$(OutDir)\zlibstat.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="ReleaseWithoutAsm|Win32"

-			OutputDirectory="x86\ZlibStat$(ConfigurationName)"

-			IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"

-			ConfigurationType="4"

-			InheritedPropertySheets="UpgradeFromVC70.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

-				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"

-				StringPooling="true"

-				ExceptionHandling="0"

-				RuntimeLibrary="0"

-				BufferSecurityCheck="false"

-				EnableFunctionLevelLinking="true"

-				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"

-				AssemblerListingLocation="$(IntDir)\"

-				ObjectFile="$(IntDir)\"

-				ProgramDataBaseFileName="$(OutDir)\"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				Culture="1036"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"

-				OutputFile="$(OutDir)\zlibstat.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

 			Name="Debug|x64"

 			OutputDirectory="x64\ZlibStat$(ConfigurationName)"

 			IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"

@@ -389,6 +242,80 @@
 			/>

 		</Configuration>

 		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="x86\ZlibStat$(ConfigurationName)"

+			IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"

+			ConfigurationType="4"

+			InheritedPropertySheets="UpgradeFromVC70.vsprops"

+			UseOfMFC="0"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				InlineFunctionExpansion="1"

+				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

+				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF"

+				StringPooling="true"

+				ExceptionHandling="0"

+				RuntimeLibrary="0"

+				BufferSecurityCheck="false"

+				EnableFunctionLevelLinking="true"

+				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"

+				AssemblerListingLocation="$(IntDir)\"

+				ObjectFile="$(IntDir)\"

+				ProgramDataBaseFileName="$(OutDir)\"

+				WarningLevel="3"

+				SuppressStartupBanner="true"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+				Culture="1036"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLibrarianTool"

+				AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"

+				AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "

+				OutputFile="$(OutDir)\zlibstat.lib"

+				SuppressStartupBanner="true"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

 			Name="Release|x64"

 			OutputDirectory="x64\ZlibStat$(ConfigurationName)"

 			IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"

@@ -538,6 +465,79 @@
 			/>

 		</Configuration>

 		<Configuration

+			Name="ReleaseWithoutAsm|Win32"

+			OutputDirectory="x86\ZlibStat$(ConfigurationName)"

+			IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"

+			ConfigurationType="4"

+			InheritedPropertySheets="UpgradeFromVC70.vsprops"

+			UseOfMFC="0"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				InlineFunctionExpansion="1"

+				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

+				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"

+				StringPooling="true"

+				ExceptionHandling="0"

+				RuntimeLibrary="0"

+				BufferSecurityCheck="false"

+				EnableFunctionLevelLinking="true"

+				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"

+				AssemblerListingLocation="$(IntDir)\"

+				ObjectFile="$(IntDir)\"

+				ProgramDataBaseFileName="$(OutDir)\"

+				WarningLevel="3"

+				SuppressStartupBanner="true"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+				Culture="1036"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLibrarianTool"

+				AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"

+				OutputFile="$(OutDir)\zlibstat.lib"

+				SuppressStartupBanner="true"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

 			Name="ReleaseWithoutAsm|x64"

 			OutputDirectory="x64\ZlibStat$(ConfigurationName)"

 			IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"

@@ -709,63 +709,11 @@
 				>

 			</File>

 			<File

-				RelativePath="..\..\masmx86\gvmat32c.c"

-				>

-				<FileConfiguration

-					Name="Debug|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

 				RelativePath="..\..\..\gzclose.c"

 				>

 			</File>

 			<File

-				RelativePath="..\..\..\gzio.c"

+				RelativePath="..\..\..\gzguts.h"

 				>

 			</File>

 			<File

@@ -796,22 +744,6 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

-					Name="Release|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

 					Name="Debug|Itanium"

 					ExcludedFromBuild="true"

 					>

@@ -820,6 +752,14 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

+					Name="Release|Win32"

+					ExcludedFromBuild="true"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

 					Name="Release|Itanium"

 					ExcludedFromBuild="true"

 					>

@@ -828,6 +768,14 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

+					Name="ReleaseWithoutAsm|Win32"

+					ExcludedFromBuild="true"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

 					Name="ReleaseWithoutAsm|Itanium"

 					ExcludedFromBuild="true"

 					>

diff --git a/contrib/vstudio/vc9/zlibvc.def b/contrib/vstudio/vc9/zlibvc.def
index 0b6a9e9..b3b7cab 100644
--- a/contrib/vstudio/vc9/zlibvc.def
+++ b/contrib/vstudio/vc9/zlibvc.def
@@ -1,7 +1,7 @@
+LIBRARY

+; zlib data compression and ZIP file I/O library

 

-VERSION		1.23

-

-HEAPSIZE	1048576,8192

+VERSION		1.24

 

 EXPORTS

         adler32                                  @1

@@ -90,25 +90,47 @@
         unzGoToFilePos                           @101

 

         fill_win32_filefunc                      @110

-        fill_win32_filefunc64                    @111

-        fill_win32_filefunc64A                   @112

-        fill_win32_filefunc64W                   @113

 

-; quick hack by hkuno@microhouse.co.jp

-        unzOpen64                         @120

-        unzOpen2_64                       @121

-        unzGetGlobalInfo64                @122

-        unzGetCurrentFileInfo64           @124

-        unzGetCurrentFileZStreamPos64     @125

-        unztell64                         @126

-        unzGetFilePos64                   @127

-        unzGoToFilePos64                  @128

+; zlibwapi v1.2.4 added:

+        fill_win32_filefunc64                   @111

+        fill_win32_filefunc64A                  @112

+        fill_win32_filefunc64W                  @113

 

-        zipOpen64                         @130

-        zipOpen2_64                       @131

-        zipOpenNewFileInZip64             @132

-        zipOpenNewFileInZip2_64           @133

-        zipOpenNewFileInZip3_64           @134

-        zipOpenNewFileInZip4_64           @135

-        zipCloseFileInZipRaw64            @136

-; end hack

+        unzOpen64                               @120

+        unzOpen2_64                             @121

+        unzGetGlobalInfo64                      @122

+        unzGetCurrentFileInfo64                 @124

+        unzGetCurrentFileZStreamPos64           @125

+        unztell64                               @126

+        unzGetFilePos64                         @127

+        unzGoToFilePos64                        @128

+

+        zipOpen64                               @130

+        zipOpen2_64                             @131

+        zipOpenNewFileInZip64                   @132

+        zipOpenNewFileInZip2_64                 @133

+        zipOpenNewFileInZip3_64                 @134

+        zipOpenNewFileInZip4_64                 @135

+        zipCloseFileInZipRaw64                  @136

+

+; zlib1 v1.2.4 added:

+        adler32_combine                         @140

+        adler32_combine64                       @141

+        crc32_combine                           @142

+        crc32_combine64                         @143

+        deflateSetHeader                        @144

+        deflateTune                             @145

+        gzbuffer                                @146

+        gzclose_r                               @147

+        gzclose_w                               @148

+        gzdirect                                @149

+        gzoffset                                @150

+        gzoffset64                              @151

+        gzopen64                                @152

+        gzseek64                                @153

+        gztell64                                @154

+        inflateGetHeader                        @156

+        inflateMark                             @157

+        inflatePrime                            @158

+        inflateReset2                           @159

+        inflateUndermine                        @160

diff --git a/contrib/vstudio/vc9/zlibvc.sln b/contrib/vstudio/vc9/zlibvc.sln
index c7f1b0b..b482967 100644
--- a/contrib/vstudio/vc9/zlibvc.sln
+++ b/contrib/vstudio/vc9/zlibvc.sln
@@ -45,8 +45,8 @@
 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32

-		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = ReleaseWithoutAsm|x64

-		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = ReleaseWithoutAsm|x64

+		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64

+		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium

 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32

@@ -103,8 +103,8 @@
 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64

 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium

+		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32

+		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32

@@ -119,8 +119,8 @@
 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium

 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium

-		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium

-		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium

+		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32

+		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32

@@ -135,8 +135,8 @@
 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium

 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium

-		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium

+		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32

+		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64

 	EndGlobalSection

 	GlobalSection(SolutionProperties) = preSolution

 		HideSolutionNode = FALSE

diff --git a/contrib/vstudio/vc9/zlibvc.vcproj b/contrib/vstudio/vc9/zlibvc.vcproj
index ee86786..c9a8947 100644
--- a/contrib/vstudio/vc9/zlibvc.vcproj
+++ b/contrib/vstudio/vc9/zlibvc.vcproj
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="Windows-1252"?>

 <VisualStudioProject

 	ProjectType="Visual C++"

-	Version="9.00"

+	Version="9,00"

 	Name="zlibvc"

 	ProjectGUID="{8FD826F8-3739-44E6-8CC8-997122E53B8D}"

+	RootNamespace="zlibvc"

 	TargetFrameworkVersion="131072"

 	>

 	<Platforms>

@@ -80,7 +81,7 @@
 			<Tool

 				Name="VCLinkerTool"

 				AdditionalOptions="/MACHINE:I386"

-				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"

+				AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"

 				OutputFile="$(OutDir)\zlibwapi.dll"

 				LinkIncremental="2"

 				SuppressStartupBanner="true"

@@ -118,6 +119,195 @@
 			/>

 		</Configuration>

 		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="x64\ZlibDll$(ConfigurationName)"

+			IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"

+			ConfigurationType="2"

+			InheritedPropertySheets="UpgradeFromVC70.vsprops"

+			UseOfMFC="0"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				PreprocessorDefinitions="_DEBUG"

+				MkTypLibCompatible="true"

+				SuppressStartupBanner="true"

+				TargetEnvironment="3"

+				TypeLibraryName="$(OutDir)/zlibvc.tlb"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

+				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"

+				ExceptionHandling="0"

+				RuntimeLibrary="3"

+				BufferSecurityCheck="false"

+				PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"

+				AssemblerListingLocation="$(IntDir)\"

+				ObjectFile="$(IntDir)\"

+				ProgramDataBaseFileName="$(OutDir)\"

+				BrowseInformation="0"

+				WarningLevel="3"

+				SuppressStartupBanner="true"

+				DebugInformationFormat="3"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+				PreprocessorDefinitions="_DEBUG"

+				Culture="1036"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "

+				OutputFile="$(OutDir)\zlibwapi.dll"

+				LinkIncremental="2"

+				SuppressStartupBanner="true"

+				GenerateManifest="false"

+				ModuleDefinitionFile=".\zlibvc.def"

+				GenerateDebugInformation="true"

+				ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"

+				GenerateMapFile="true"

+				MapFileName="$(OutDir)/zlibwapi.map"

+				SubSystem="2"

+				ImportLibrary="$(OutDir)/zlibwapi.lib"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|Itanium"

+			OutputDirectory="ia64\ZlibDll$(ConfigurationName)"

+			IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"

+			ConfigurationType="2"

+			InheritedPropertySheets="UpgradeFromVC70.vsprops"

+			UseOfMFC="0"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				PreprocessorDefinitions="_DEBUG"

+				MkTypLibCompatible="true"

+				SuppressStartupBanner="true"

+				TargetEnvironment="2"

+				TypeLibraryName="$(OutDir)/zlibvc.tlb"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

+				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"

+				ExceptionHandling="0"

+				RuntimeLibrary="3"

+				BufferSecurityCheck="false"

+				PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"

+				AssemblerListingLocation="$(IntDir)\"

+				ObjectFile="$(IntDir)\"

+				ProgramDataBaseFileName="$(OutDir)\"

+				BrowseInformation="0"

+				WarningLevel="3"

+				SuppressStartupBanner="true"

+				DebugInformationFormat="3"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+				PreprocessorDefinitions="_DEBUG"

+				Culture="1036"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\zlibwapi.dll"

+				LinkIncremental="2"

+				SuppressStartupBanner="true"

+				GenerateManifest="false"

+				ModuleDefinitionFile=".\zlibvc.def"

+				GenerateDebugInformation="true"

+				ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"

+				GenerateMapFile="true"

+				MapFileName="$(OutDir)/zlibwapi.map"

+				SubSystem="2"

+				ImportLibrary="$(OutDir)/zlibwapi.lib"

+				TargetMachine="5"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

 			Name="ReleaseWithoutAsm|Win32"

 			OutputDirectory="x86\ZlibDll$(ConfigurationName)"

 			IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"

@@ -218,302 +408,6 @@
 			/>

 		</Configuration>

 		<Configuration

-			Name="Release|Win32"

-			OutputDirectory="x86\ZlibDll$(ConfigurationName)"

-			IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"

-			ConfigurationType="2"

-			InheritedPropertySheets="UpgradeFromVC70.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			WholeProgramOptimization="1"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="NDEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="1"

-				TypeLibraryName="$(OutDir)/zlibvc.tlb"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

-				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"

-				StringPooling="true"

-				ExceptionHandling="0"

-				RuntimeLibrary="2"

-				BufferSecurityCheck="false"

-				EnableFunctionLevelLinking="true"

-				PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"

-				AssemblerOutput="2"

-				AssemblerListingLocation="$(IntDir)\"

-				ObjectFile="$(IntDir)\"

-				ProgramDataBaseFileName="$(OutDir)\"

-				BrowseInformation="0"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1036"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalOptions="/MACHINE:I386"

-				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj "

-				OutputFile="$(OutDir)\zlibwapi.dll"

-				LinkIncremental="1"

-				SuppressStartupBanner="true"

-				GenerateManifest="false"

-				IgnoreAllDefaultLibraries="false"

-				ModuleDefinitionFile=".\zlibvc.def"

-				ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"

-				GenerateMapFile="true"

-				MapFileName="$(OutDir)/zlibwapi.map"

-				SubSystem="2"

-				OptimizeForWindows98="1"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

-				ImportLibrary="$(OutDir)/zlibwapi.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|x64"

-			OutputDirectory="x64\ZlibDll$(ConfigurationName)"

-			IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"

-			ConfigurationType="2"

-			InheritedPropertySheets="UpgradeFromVC70.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="_DEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="3"

-				TypeLibraryName="$(OutDir)/zlibvc.tlb"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

-				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"

-				ExceptionHandling="0"

-				RuntimeLibrary="3"

-				BufferSecurityCheck="false"

-				PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"

-				AssemblerListingLocation="$(IntDir)\"

-				ObjectFile="$(IntDir)\"

-				ProgramDataBaseFileName="$(OutDir)\"

-				BrowseInformation="0"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-				DebugInformationFormat="3"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1036"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "

-				OutputFile="$(OutDir)\zlibwapi.dll"

-				LinkIncremental="2"

-				SuppressStartupBanner="true"

-				GenerateManifest="false"

-				ModuleDefinitionFile=".\zlibvc.def"

-				GenerateDebugInformation="true"

-				ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"

-				GenerateMapFile="true"

-				MapFileName="$(OutDir)/zlibwapi.map"

-				SubSystem="2"

-				ImportLibrary="$(OutDir)/zlibwapi.lib"

-				TargetMachine="17"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Itanium"

-			OutputDirectory="ia64\ZlibDll$(ConfigurationName)"

-			IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"

-			ConfigurationType="2"

-			InheritedPropertySheets="UpgradeFromVC70.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-				PreprocessorDefinitions="_DEBUG"

-				MkTypLibCompatible="true"

-				SuppressStartupBanner="true"

-				TargetEnvironment="2"

-				TypeLibraryName="$(OutDir)/zlibvc.tlb"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

-				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"

-				ExceptionHandling="0"

-				RuntimeLibrary="3"

-				BufferSecurityCheck="false"

-				PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"

-				AssemblerListingLocation="$(IntDir)\"

-				ObjectFile="$(IntDir)\"

-				ProgramDataBaseFileName="$(OutDir)\"

-				BrowseInformation="0"

-				WarningLevel="3"

-				SuppressStartupBanner="true"

-				DebugInformationFormat="3"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1036"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLinkerTool"

-				OutputFile="$(OutDir)\zlibwapi.dll"

-				LinkIncremental="2"

-				SuppressStartupBanner="true"

-				GenerateManifest="false"

-				ModuleDefinitionFile=".\zlibvc.def"

-				GenerateDebugInformation="true"

-				ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"

-				GenerateMapFile="true"

-				MapFileName="$(OutDir)/zlibwapi.map"

-				SubSystem="2"

-				ImportLibrary="$(OutDir)/zlibwapi.lib"

-				TargetMachine="5"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCManifestTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCAppVerifierTool"

-			/>

-			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

 			Name="ReleaseWithoutAsm|x64"

 			OutputDirectory="x64\ZlibDll$(ConfigurationName)"

 			IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"

@@ -608,9 +502,6 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -709,7 +600,105 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="x86\ZlibDll$(ConfigurationName)"

+			IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"

+			ConfigurationType="2"

+			InheritedPropertySheets="UpgradeFromVC70.vsprops"

+			UseOfMFC="0"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				PreprocessorDefinitions="NDEBUG"

+				MkTypLibCompatible="true"

+				SuppressStartupBanner="true"

+				TargetEnvironment="1"

+				TypeLibraryName="$(OutDir)/zlibvc.tlb"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				InlineFunctionExpansion="1"

+				AdditionalIncludeDirectories="..\..\..;..\..\masmx86"

+				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"

+				StringPooling="true"

+				ExceptionHandling="0"

+				RuntimeLibrary="0"

+				BufferSecurityCheck="false"

+				EnableFunctionLevelLinking="true"

+				PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"

+				AssemblerOutput="2"

+				AssemblerListingLocation="$(IntDir)\"

+				ObjectFile="$(IntDir)\"

+				ProgramDataBaseFileName="$(OutDir)\"

+				BrowseInformation="0"

+				WarningLevel="3"

+				SuppressStartupBanner="true"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+				PreprocessorDefinitions="NDEBUG"

+				Culture="1036"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				AdditionalOptions="/MACHINE:I386"

+				AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "

+				OutputFile="$(OutDir)\zlibwapi.dll"

+				LinkIncremental="1"

+				SuppressStartupBanner="true"

+				GenerateManifest="false"

+				IgnoreAllDefaultLibraries="false"

+				ModuleDefinitionFile=".\zlibvc.def"

+				ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"

+				GenerateMapFile="true"

+				MapFileName="$(OutDir)/zlibwapi.map"

+				SubSystem="2"

+				OptimizeForWindows98="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				ImportLibrary="$(OutDir)/zlibwapi.lib"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

 			/>

 			<Tool

 				Name="VCPostBuildEventTool"

@@ -811,9 +800,6 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -912,9 +898,6 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

-				Name="VCWebDeploymentTool"

-			/>

-			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -943,71 +926,11 @@
 				>

 			</File>

 			<File

-				RelativePath="..\..\masmx86\gvmat32c.c"

-				>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Debug|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="ReleaseWithoutAsm|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|x64"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Itanium"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

 				RelativePath="..\..\..\gzclose.c"

 				>

 			</File>

 			<File

-				RelativePath="..\..\..\gzio.c"

+				RelativePath="..\..\..\gzguts.h"

 				>

 			</File>

 			<File

@@ -1038,22 +961,6 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

-					Name="ReleaseWithoutAsm|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

-					Name="Release|Win32"

-					ExcludedFromBuild="true"

-					>

-					<Tool

-						Name="VCCLCompilerTool"

-					/>

-				</FileConfiguration>

-				<FileConfiguration

 					Name="Debug|Itanium"

 					ExcludedFromBuild="true"

 					>

@@ -1062,6 +969,14 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

+					Name="ReleaseWithoutAsm|Win32"

+					ExcludedFromBuild="true"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

 					Name="ReleaseWithoutAsm|Itanium"

 					ExcludedFromBuild="true"

 					>

@@ -1070,6 +985,14 @@
 					/>

 				</FileConfiguration>

 				<FileConfiguration

+					Name="Release|Win32"

+					ExcludedFromBuild="true"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

 					Name="Release|Itanium"

 					ExcludedFromBuild="true"

 					>

diff --git a/deflate.c b/deflate.c
index 414a67a..fcd698c 100644
--- a/deflate.c
+++ b/deflate.c
@@ -52,7 +52,7 @@
 #include "deflate.h"
 
 const char deflate_copyright[] =
-   " deflate 1.2.3.9 Copyright 1995-2010 Jean-loup Gailly and Mark Adler ";
+   " deflate 1.2.4 Copyright 1995-2010 Jean-loup Gailly and Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -1433,21 +1433,21 @@
  * Flush the current block, with given end-of-file flag.
  * IN assertion: strstart is set to the end of the current match.
  */
-#define FLUSH_BLOCK_ONLY(s, eof) { \
+#define FLUSH_BLOCK_ONLY(s, last) { \
    _tr_flush_block(s, (s->block_start >= 0L ? \
                    (charf *)&s->window[(unsigned)s->block_start] : \
                    (charf *)Z_NULL), \
                 (ulg)((long)s->strstart - s->block_start), \
-                (eof)); \
+                (last)); \
    s->block_start = s->strstart; \
    flush_pending(s->strm); \
    Tracev((stderr,"[FLUSH]")); \
 }
 
 /* Same but force premature exit if necessary. */
-#define FLUSH_BLOCK(s, eof) { \
-   FLUSH_BLOCK_ONLY(s, eof); \
-   if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
+#define FLUSH_BLOCK(s, last) { \
+   FLUSH_BLOCK_ONLY(s, last); \
+   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
 }
 
 /* ===========================================================================
diff --git a/deflate.h b/deflate.h
index f1df04c..f53deba 100644
--- a/deflate.h
+++ b/deflate.h
@@ -293,10 +293,10 @@
 void _tr_init         OF((deflate_state *s));
 int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc));
 void _tr_flush_block  OF((deflate_state *s, charf *buf, ulg stored_len,
-                          int eof));
+                          int last));
 void _tr_align        OF((deflate_state *s));
 void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
-                          int eof));
+                          int last));
 
 #define d_code(dist) \
    ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
diff --git a/gzlib.c b/gzlib.c
index 03240b1..6fdb08a 100644
--- a/gzlib.c
+++ b/gzlib.c
@@ -147,6 +147,14 @@
         return NULL;
     }
 
+    /* save the path name for error messages */
+    state->path = malloc(strlen(path) + 1);
+    if (state->path == NULL) {
+        free(state);
+        return NULL;
+    }
+    strcpy(state->path, path);
+
     /* open the file with the appropriate mode (or just use fd) */
     state->fd = fd != -1 ? fd :
         open(path,
@@ -170,14 +178,6 @@
     if (state->mode == GZ_APPEND)
         state->mode = GZ_WRITE;         /* simplify later checks */
 
-    /* save the path name for error messages */
-    state->path = malloc(strlen(path) + 1);
-    if (state->path == NULL) {
-        free(state);
-        return NULL;
-    }
-    strcpy(state->path, path);
-
     /* save the current position for rewinding (only if reading) */
     if (state->mode == GZ_READ) {
         state->start = LSEEK(state->fd, 0, SEEK_CUR);
@@ -450,7 +450,8 @@
         return NULL;
 
     /* return error information */
-    *errnum = state->err;
+    if (errnum != NULL)
+        *errnum = state->err;
     return state->msg == NULL ? "" : state->msg;
 }
 
diff --git a/gzread.c b/gzread.c
index 7f68055..434ef02 100644
--- a/gzread.c
+++ b/gzread.c
@@ -645,6 +645,7 @@
         free(state->in);
     }
     gz_error(state, Z_OK, NULL);
+    free(state->path);
     ret = close(state->fd);
     free(state);
     return ret ? Z_ERRNO : Z_OK;
diff --git a/gzwrite.c b/gzwrite.c
index 844312a..427840d 100644
--- a/gzwrite.c
+++ b/gzwrite.c
@@ -523,8 +523,9 @@
     (void)deflateEnd(&(state->strm));
     free(state->out);
     free(state->in);
-    ret += close(state->fd);
     gz_error(state, Z_OK, NULL);
+    free(state->path);
+    ret += close(state->fd);
     free(state);
     return ret ? Z_ERRNO : Z_OK;
 }
diff --git a/inftrees.c b/inftrees.c
index b766799..3ee7d06 100644
--- a/inftrees.c
+++ b/inftrees.c
@@ -9,7 +9,7 @@
 #define MAXBITS 15
 
 const char inflate_copyright[] =
-   " inflate 1.2.3.9 Copyright 1995-2010 Mark Adler ";
+   " inflate 1.2.4 Copyright 1995-2010 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -62,7 +62,7 @@
         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 193, 201};
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 66, 199};
     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
diff --git a/make_vms.com b/make_vms.com
index f35a48f..deee87f 100644
--- a/make_vms.com
+++ b/make_vms.com
@@ -13,8 +13,10 @@
 $! 0.02 20061008 Adapt to new Makefile.in
 $! 0.03 20091224 Add support for large file check
 $! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite
+$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in
 $!
 $ on error then goto err_exit
+$ set proc/parse=ext
 $!
 $ true  = 1
 $ false = 0
@@ -38,7 +40,7 @@
 $ ccopt   = ""
 $ lopts   = ""
 $ dnsrl   = ""
-$ aconf_in_file = "config.hin"
+$ aconf_in_file = "zconf.h.in#zconf.h_in"
 $ conf_check_string = ""
 $ linkonly = false
 $ optfile  = name + ".opt"
@@ -104,13 +106,16 @@
 $   goto find_aconf
 $ endif
 $ open/read/err=aconf_err aconf_in 'fname'
-$ open/write aconf zlibdefs.h
+$ open/write aconf zconf.h
 $ACONF_LOOP:
 $ read/end_of_file=aconf_exit aconf_in line
 $ work = f$edit(line, "compress,trim")
 $ if f$extract(0,6,work) .nes. "#undef"
 $ then
-$   write aconf line
+$   if f$extract(0,12,work) .nes. "#cmakedefine"
+$   then
+$       write aconf line
+$   endif
 $ else
 $   cdef = f$element(1," ",work)
 $   gosub check_config
diff --git a/minigzip.c b/minigzip.c
index 9d18266..84d823b 100644
--- a/minigzip.c
+++ b/minigzip.c
@@ -262,6 +262,11 @@
     FILE  *in;
     gzFile out;
 
+    if (strlen(file) + strlen(GZ_SUFFIX) >= sizeof(outfile)) {
+        fprintf(stderr, "%s: filename too long\n", prog);
+        exit(1);
+    }
+
     strcpy(outfile, file);
     strcat(outfile, GZ_SUFFIX);
 
@@ -291,7 +296,12 @@
     char *infile, *outfile;
     FILE  *out;
     gzFile in;
-    uInt len = (uInt)strlen(file);
+    size_t len = strlen(file);
+
+    if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) {
+        fprintf(stderr, "%s: filename too long\n", prog);
+        exit(1);
+    }
 
     strcpy(buf, file);
 
@@ -322,7 +332,8 @@
 
 
 /* ===========================================================================
- * Usage:  minigzip [-d] [-f] [-h] [-r] [-1 to -9] [files...]
+ * Usage:  minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...]
+ *   -c : write to standard output
  *   -d : decompress
  *   -f : compress with Z_FILTERED
  *   -h : compress with Z_HUFFMAN_ONLY
@@ -334,17 +345,30 @@
     int argc;
     char *argv[];
 {
+    int copyout = 0;
     int uncompr = 0;
     gzFile file;
-    char outmode[20];
+    char *bname, outmode[20];
 
     strcpy(outmode, "wb6 ");
 
     prog = argv[0];
+    bname = strrchr(argv[0], '/');
+    if (bname)
+      bname++;
+    else
+      bname = argv[0];
     argc--, argv++;
 
+    if (!strcmp(bname, "gunzip"))
+      uncompr = 1;
+    else if (!strcmp(bname, "zcat"))
+      copyout = uncompr = 1;
+
     while (argc > 0) {
-      if (strcmp(*argv, "-d") == 0)
+      if (strcmp(*argv, "-c") == 0)
+        copyout = 1;
+      else if (strcmp(*argv, "-d") == 0)
         uncompr = 1;
       else if (strcmp(*argv, "-f") == 0)
         outmode[3] = 'f';
@@ -374,11 +398,36 @@
             gz_compress(stdin, file);
         }
     } else {
+        if (copyout) {
+            SET_BINARY_MODE(stdout);
+        }
         do {
             if (uncompr) {
-                file_uncompress(*argv);
+                if (copyout) {
+                    file = gzopen(*argv, "rb");
+                    if (file == NULL)
+                        fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
+                    else
+                        gz_uncompress(file, stdout);
+                } else {
+                    file_uncompress(*argv);
+                }
             } else {
-                file_compress(*argv, outmode);
+                if (copyout) {
+                    FILE * in = fopen(*argv, "rb");
+
+                    if (in == NULL) {
+                        perror(*argv);
+                    } else {
+                        file = gzdopen(fileno(stdout), outmode);
+                        if (file == NULL) error("can't gzdopen stdout");
+
+                        gz_compress(in, file);
+                    }
+
+                } else {
+                    file_compress(*argv, outmode);
+                }
             }
         } while (argv++, --argc);
     }
diff --git a/qnx/package.qpg b/qnx/package.qpg
index fea73cc..470d2d5 100644
--- a/qnx/package.qpg
+++ b/qnx/package.qpg
@@ -25,10 +25,10 @@
       <QPG:Files>
          <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
          <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
-         <QPG:Add file="../libz.so.1.2.3.9" install="/opt/lib/" user="root:bin" permission="644"/>
-         <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.3.9"/>
-         <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.3.9"/>
-         <QPG:Add file="../libz.so.1.2.3.9" install="/opt/lib/" component="slib"/>
+         <QPG:Add file="../libz.so.1.2.4" install="/opt/lib/" user="root:bin" permission="644"/>
+         <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.4"/>
+         <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.4"/>
+         <QPG:Add file="../libz.so.1.2.4" install="/opt/lib/" component="slib"/>
       </QPG:Files>
 
       <QPG:PackageFilter>
@@ -63,7 +63,7 @@
             </QPM:ProductDescription>
 
             <QPM:ReleaseDescription>
-               <QPM:ReleaseVersion>1.2.3.9</QPM:ReleaseVersion>
+               <QPM:ReleaseVersion>1.2.4</QPM:ReleaseVersion>
                <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
                <QPM:ReleaseStability>Stable</QPM:ReleaseStability>
                <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
diff --git a/treebuild.xml b/treebuild.xml
index f81b449..91ee891 100644
--- a/treebuild.xml
+++ b/treebuild.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" ?>
-<package name="zlib" version="1.2.3">
-    <library name="zlib" dlversion="1.2.3" dlname="z">
+<package name="zlib" version="1.2.4">
+    <library name="zlib" dlversion="1.2.4" dlname="z">
 	<property name="description"> zip compression library </property>
 	<property name="include-target-dir" value="$(@PACKAGE/install-includedir)" />
 
diff --git a/trees.c b/trees.c
index aa599a5..1a6e997 100644
--- a/trees.c
+++ b/trees.c
@@ -867,13 +867,13 @@
 /* ===========================================================================
  * Send a stored block
  */
-void _tr_stored_block(s, buf, stored_len, eof)
+void _tr_stored_block(s, buf, stored_len, last)
     deflate_state *s;
     charf *buf;       /* input block */
     ulg stored_len;   /* length of input block */
-    int eof;          /* true if this is the last block for a file */
+    int last;         /* one if this is the last block for a file */
 {
-    send_bits(s, (STORED_BLOCK<<1)+eof, 3);  /* send block type */
+    send_bits(s, (STORED_BLOCK<<1)+last, 3);    /* send block type */
 #ifdef DEBUG
     s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
     s->compressed_len += (stored_len + 4) << 3;
@@ -921,11 +921,11 @@
  * Determine the best encoding for the current block: dynamic trees, static
  * trees or store, and output the encoded block to the zip file.
  */
-void _tr_flush_block(s, buf, stored_len, eof)
+void _tr_flush_block(s, buf, stored_len, last)
     deflate_state *s;
     charf *buf;       /* input block, or NULL if too old */
     ulg stored_len;   /* length of input block */
-    int eof;          /* true if this is the last block for a file */
+    int last;         /* one if this is the last block for a file */
 {
     ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
     int max_blindex = 0;  /* index of last bit length code of non zero freq */
@@ -981,20 +981,20 @@
          * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
          * transform a block into a stored block.
          */
-        _tr_stored_block(s, buf, stored_len, eof);
+        _tr_stored_block(s, buf, stored_len, last);
 
 #ifdef FORCE_STATIC
     } else if (static_lenb >= 0) { /* force static trees */
 #else
     } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
 #endif
-        send_bits(s, (STATIC_TREES<<1)+eof, 3);
+        send_bits(s, (STATIC_TREES<<1)+last, 3);
         compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
 #ifdef DEBUG
         s->compressed_len += 3 + s->static_len;
 #endif
     } else {
-        send_bits(s, (DYN_TREES<<1)+eof, 3);
+        send_bits(s, (DYN_TREES<<1)+last, 3);
         send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
                        max_blindex+1);
         compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
@@ -1008,14 +1008,14 @@
      */
     init_block(s);
 
-    if (eof) {
+    if (last) {
         bi_windup(s);
 #ifdef DEBUG
         s->compressed_len += 7;  /* align on byte boundary */
 #endif
     }
     Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
-           s->compressed_len-7*eof));
+           s->compressed_len-7*last));
 }
 
 /* ===========================================================================
diff --git a/win32/Makefile.gcc b/win32/Makefile.gcc
index 97571c2..abe3d5a 100644
--- a/win32/Makefile.gcc
+++ b/win32/Makefile.gcc
@@ -25,7 +25,7 @@
 
 STATICLIB = libz.a
 SHAREDLIB = zlib1.dll
-IMPLIB    = libz.dll.a
+IMPLIB    = libzdll.a
 
 #LOC = -DASMV
 #LOC = -DDEBUG -g
diff --git a/win32/Makefile.msc b/win32/Makefile.msc
index 3722b23..a731c0c 100644
--- a/win32/Makefile.msc
+++ b/win32/Makefile.msc
@@ -21,10 +21,10 @@
 LD = link
 AR = lib
 RC = rc
-CFLAGS  = -nologo -MD -O2 -Oy- $(LOC)
+CFLAGS  = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC)
 WFLAGS  = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
-ASFLAGS = -coff
-LDFLAGS = -nologo -debug -release
+ASFLAGS = -coff -Zi
+LDFLAGS = -nologo -debug -incremental:no -opt:ref
 ARFLAGS = -nologo
 RCFLAGS = /dWIN32 /r
 
@@ -44,7 +44,7 @@
 
 $(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlib1.res
 	$(LD) $(LDFLAGS) -def:win32/zlib.def -dll -implib:$(IMPLIB) \
-	  -out:$@ $(OBJS) $(OBJA) zlib1.res
+	  -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res
 	if exist $@.manifest \
 	  mt -nologo -manifest $@.manifest -outputresource:$@;2
 
diff --git a/zconf.h b/zconf.h
new file mode 100644
index 0000000..5888024
--- /dev/null
+++ b/zconf.h
@@ -0,0 +1,416 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2010 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+
+/* all linked symbols */
+#  define _dist_code            z__dist_code
+#  define _length_code          z__length_code
+#  define _tr_align             z__tr_align
+#  define _tr_flush_block       z__tr_flush_block
+#  define _tr_init              z__tr_init
+#  define _tr_stored_block      z__tr_stored_block
+#  define _tr_tally             z__tr_tally
+#  define adler32               z_adler32
+#  define adler32_combine       z_adler32_combine
+#  define adler32_combine64     z_adler32_combine64
+#  define compress              z_compress
+#  define compress2             z_compress2
+#  define compressBound         z_compressBound
+#  define crc32                 z_crc32
+#  define crc32_combine         z_crc32_combine
+#  define crc32_combine64       z_crc32_combine64
+#  define deflate               z_deflate
+#  define deflateBound          z_deflateBound
+#  define deflateCopy           z_deflateCopy
+#  define deflateEnd            z_deflateEnd
+#  define deflateInit2_         z_deflateInit2_
+#  define deflateInit_          z_deflateInit_
+#  define deflateParams         z_deflateParams
+#  define deflatePrime          z_deflatePrime
+#  define deflateReset          z_deflateReset
+#  define deflateSetDictionary  z_deflateSetDictionary
+#  define deflateSetHeader      z_deflateSetHeader
+#  define deflateTune           z_deflateTune
+#  define deflate_copyright     z_deflate_copyright
+#  define get_crc_table         z_get_crc_table
+#  define gz_error              z_gz_error
+#  define gz_intmax             z_gz_intmax
+#  define gz_strwinerror        z_gz_strwinerror
+#  define gzbuffer              z_gzbuffer
+#  define gzclearerr            z_gzclearerr
+#  define gzclose               z_gzclose
+#  define gzclose_r             z_gzclose_r
+#  define gzclose_w             z_gzclose_w
+#  define gzdirect              z_gzdirect
+#  define gzdopen               z_gzdopen
+#  define gzeof                 z_gzeof
+#  define gzerror               z_gzerror
+#  define gzflush               z_gzflush
+#  define gzgetc                z_gzgetc
+#  define gzgets                z_gzgets
+#  define gzoffset              z_gzoffset
+#  define gzoffset64            z_gzoffset64
+#  define gzopen                z_gzopen
+#  define gzopen64              z_gzopen64
+#  define gzprintf              z_gzprintf
+#  define gzputc                z_gzputc
+#  define gzputs                z_gzputs
+#  define gzread                z_gzread
+#  define gzrewind              z_gzrewind
+#  define gzseek                z_gzseek
+#  define gzseek64              z_gzseek64
+#  define gzsetparams           z_gzsetparams
+#  define gztell                z_gztell
+#  define gztell64              z_gztell64
+#  define gzungetc              z_gzungetc
+#  define gzwrite               z_gzwrite
+#  define inflate               z_inflate
+#  define inflateBack           z_inflateBack
+#  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCopy           z_inflateCopy
+#  define inflateEnd            z_inflateEnd
+#  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit2_         z_inflateInit2_
+#  define inflateInit_          z_inflateInit_
+#  define inflateMark           z_inflateMark
+#  define inflatePrime          z_inflatePrime
+#  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
+#  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateSync           z_inflateSync
+#  define inflateSyncPoint      z_inflateSyncPoint
+#  define inflateUndermine      z_inflateUndermine
+#  define inflate_copyright     z_inflate_copyright
+#  define inflate_fast          z_inflate_fast
+#  define inflate_table         z_inflate_table
+#  define uncompress            z_uncompress
+#  define zError                z_zError
+#  define zcalloc               z_zcalloc
+#  define zcfree                z_zcfree
+#  define zlibCompileFlags      z_zlibCompileFlags
+#  define zlibVersion           z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#  define Byte                  z_Byte
+#  define Bytef                 z_Bytef
+#  define alloc_func            z_alloc_func
+#  define charf                 z_charf
+#  define free_func             z_free_func
+#  define gzFile                z_gzFile
+#  define gz_header             z_gz_header
+#  define gz_headerp            z_gz_headerp
+#  define in_func               z_in_func
+#  define intf                  z_intf
+#  define out_func              z_out_func
+#  define uInt                  z_uInt
+#  define uIntf                 z_uIntf
+#  define uLong                 z_uLong
+#  define uLongf                z_uLongf
+#  define voidp                 z_voidp
+#  define voidpc                z_voidpc
+#  define voidpf                z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#  define gz_header_s           z_gz_header_s
+#  define internal_state        z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+#  define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#  define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#  define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#  ifndef WIN32
+#    define WIN32
+#  endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#    ifndef SYS16BIT
+#      define SYS16BIT
+#    endif
+#  endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+#  define MAXSEG_64K
+#endif
+#ifdef MSDOS
+#  define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+#  ifndef STDC
+#    define STDC
+#  endif
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#  define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+#  define STDC
+#endif
+
+#ifndef STDC
+#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+#    define const       /* note: need a more gentle solution here */
+#  endif
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+#  define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  ifdef MAXSEG_64K
+#    define MAX_MEM_LEVEL 8
+#  else
+#    define MAX_MEM_LEVEL 9
+#  endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+                        /* Type declarations */
+
+#ifndef OF /* function prototypes */
+#  ifdef STDC
+#    define OF(args)  args
+#  else
+#    define OF(args)  ()
+#  endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+#  if defined(M_I86SM) || defined(M_I86MM)
+     /* MSC small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef _MSC_VER
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#  if (defined(__SMALL__) || defined(__MEDIUM__))
+     /* Turbo C small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef __BORLANDC__
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+   /* If building or using zlib as a DLL, define ZLIB_DLL.
+    * This is not mandatory, but it offers a little performance increase.
+    */
+#  ifdef ZLIB_DLL
+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#      ifdef ZLIB_INTERNAL
+#        define ZEXTERN extern __declspec(dllexport)
+#      else
+#        define ZEXTERN extern __declspec(dllimport)
+#      endif
+#    endif
+#  endif  /* ZLIB_DLL */
+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+    * define ZLIB_WINAPI.
+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+    */
+#  ifdef ZLIB_WINAPI
+#    ifdef FAR
+#      undef FAR
+#    endif
+#    include <windows.h>
+     /* No need for _export, use ZLIB.DEF instead. */
+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#    define ZEXPORT WINAPI
+#    ifdef WIN32
+#      define ZEXPORTVA WINAPIV
+#    else
+#      define ZEXPORTVA FAR CDECL
+#    endif
+#  endif
+#endif
+
+#if defined (__BEOS__)
+#  ifdef ZLIB_DLL
+#    ifdef ZLIB_INTERNAL
+#      define ZEXPORT   __declspec(dllexport)
+#      define ZEXPORTVA __declspec(dllexport)
+#    else
+#      define ZEXPORT   __declspec(dllimport)
+#      define ZEXPORTVA __declspec(dllimport)
+#    endif
+#  endif
+#endif
+
+#ifdef HAVE_VISIBILITY_PRAGMA
+#  define ZEXTERN __attribute__((visibility ("default"))) extern
+#endif
+
+#ifndef ZEXTERN
+#  define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA
+#endif
+
+#ifndef FAR
+#  define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char  Byte;  /* 8 bits */
+#endif
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+#  define Bytef Byte FAR
+#else
+   typedef Byte  FAR Bytef;
+#endif
+typedef char  FAR charf;
+typedef int   FAR intf;
+typedef uInt  FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+   typedef void const *voidpc;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
+#else
+   typedef Byte const *voidpc;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
+#endif
+
+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef Z_HAVE_UNISTD_H
+#  include <sys/types.h>    /* for off_t */
+#  include <unistd.h>       /* for SEEK_* and off_t */
+#  ifdef VMS
+#    include <unixio.h>     /* for off_t */
+#  endif
+#  ifndef z_off_t
+#    define z_off_t off_t
+#  endif
+#endif
+
+#ifdef _LARGEFILE64_SOURCE
+#  include <sys/types.h>
+#endif
+
+#ifndef SEEK_SET
+#  define SEEK_SET        0       /* Seek from beginning of file.  */
+#  define SEEK_CUR        1       /* Seek from current position.  */
+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+#endif
+#ifndef z_off_t
+#  define z_off_t long
+#endif
+
+#if defined(__OS400__)
+#  define NO_vsnprintf
+#endif
+
+#if defined(__MVS__)
+#  define NO_vsnprintf
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+  #pragma map(deflateInit_,"DEIN")
+  #pragma map(deflateInit2_,"DEIN2")
+  #pragma map(deflateEnd,"DEEND")
+  #pragma map(deflateBound,"DEBND")
+  #pragma map(inflateInit_,"ININ")
+  #pragma map(inflateInit2_,"ININ2")
+  #pragma map(inflateEnd,"INEND")
+  #pragma map(inflateSync,"INSY")
+  #pragma map(inflateSetDictionary,"INSEDI")
+  #pragma map(compressBound,"CMBND")
+  #pragma map(inflate_table,"INTABL")
+  #pragma map(inflate_fast,"INFA")
+  #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/zconf.h.cmakein b/zconf.h.cmakein
new file mode 100644
index 0000000..eec8ab0
--- /dev/null
+++ b/zconf.h.cmakein
@@ -0,0 +1,418 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2010 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+#cmakedefine Z_PREFIX
+#cmakedefine Z_HAVE_UNISTD_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+
+/* all linked symbols */
+#  define _dist_code            z__dist_code
+#  define _length_code          z__length_code
+#  define _tr_align             z__tr_align
+#  define _tr_flush_block       z__tr_flush_block
+#  define _tr_init              z__tr_init
+#  define _tr_stored_block      z__tr_stored_block
+#  define _tr_tally             z__tr_tally
+#  define adler32               z_adler32
+#  define adler32_combine       z_adler32_combine
+#  define adler32_combine64     z_adler32_combine64
+#  define compress              z_compress
+#  define compress2             z_compress2
+#  define compressBound         z_compressBound
+#  define crc32                 z_crc32
+#  define crc32_combine         z_crc32_combine
+#  define crc32_combine64       z_crc32_combine64
+#  define deflate               z_deflate
+#  define deflateBound          z_deflateBound
+#  define deflateCopy           z_deflateCopy
+#  define deflateEnd            z_deflateEnd
+#  define deflateInit2_         z_deflateInit2_
+#  define deflateInit_          z_deflateInit_
+#  define deflateParams         z_deflateParams
+#  define deflatePrime          z_deflatePrime
+#  define deflateReset          z_deflateReset
+#  define deflateSetDictionary  z_deflateSetDictionary
+#  define deflateSetHeader      z_deflateSetHeader
+#  define deflateTune           z_deflateTune
+#  define deflate_copyright     z_deflate_copyright
+#  define get_crc_table         z_get_crc_table
+#  define gz_error              z_gz_error
+#  define gz_intmax             z_gz_intmax
+#  define gz_strwinerror        z_gz_strwinerror
+#  define gzbuffer              z_gzbuffer
+#  define gzclearerr            z_gzclearerr
+#  define gzclose               z_gzclose
+#  define gzclose_r             z_gzclose_r
+#  define gzclose_w             z_gzclose_w
+#  define gzdirect              z_gzdirect
+#  define gzdopen               z_gzdopen
+#  define gzeof                 z_gzeof
+#  define gzerror               z_gzerror
+#  define gzflush               z_gzflush
+#  define gzgetc                z_gzgetc
+#  define gzgets                z_gzgets
+#  define gzoffset              z_gzoffset
+#  define gzoffset64            z_gzoffset64
+#  define gzopen                z_gzopen
+#  define gzopen64              z_gzopen64
+#  define gzprintf              z_gzprintf
+#  define gzputc                z_gzputc
+#  define gzputs                z_gzputs
+#  define gzread                z_gzread
+#  define gzrewind              z_gzrewind
+#  define gzseek                z_gzseek
+#  define gzseek64              z_gzseek64
+#  define gzsetparams           z_gzsetparams
+#  define gztell                z_gztell
+#  define gztell64              z_gztell64
+#  define gzungetc              z_gzungetc
+#  define gzwrite               z_gzwrite
+#  define inflate               z_inflate
+#  define inflateBack           z_inflateBack
+#  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCopy           z_inflateCopy
+#  define inflateEnd            z_inflateEnd
+#  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit2_         z_inflateInit2_
+#  define inflateInit_          z_inflateInit_
+#  define inflateMark           z_inflateMark
+#  define inflatePrime          z_inflatePrime
+#  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
+#  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateSync           z_inflateSync
+#  define inflateSyncPoint      z_inflateSyncPoint
+#  define inflateUndermine      z_inflateUndermine
+#  define inflate_copyright     z_inflate_copyright
+#  define inflate_fast          z_inflate_fast
+#  define inflate_table         z_inflate_table
+#  define uncompress            z_uncompress
+#  define zError                z_zError
+#  define zcalloc               z_zcalloc
+#  define zcfree                z_zcfree
+#  define zlibCompileFlags      z_zlibCompileFlags
+#  define zlibVersion           z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#  define Byte                  z_Byte
+#  define Bytef                 z_Bytef
+#  define alloc_func            z_alloc_func
+#  define charf                 z_charf
+#  define free_func             z_free_func
+#  define gzFile                z_gzFile
+#  define gz_header             z_gz_header
+#  define gz_headerp            z_gz_headerp
+#  define in_func               z_in_func
+#  define intf                  z_intf
+#  define out_func              z_out_func
+#  define uInt                  z_uInt
+#  define uIntf                 z_uIntf
+#  define uLong                 z_uLong
+#  define uLongf                z_uLongf
+#  define voidp                 z_voidp
+#  define voidpc                z_voidpc
+#  define voidpf                z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#  define gz_header_s           z_gz_header_s
+#  define internal_state        z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+#  define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#  define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#  define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#  ifndef WIN32
+#    define WIN32
+#  endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#    ifndef SYS16BIT
+#      define SYS16BIT
+#    endif
+#  endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+#  define MAXSEG_64K
+#endif
+#ifdef MSDOS
+#  define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+#  ifndef STDC
+#    define STDC
+#  endif
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#  define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+#  define STDC
+#endif
+
+#ifndef STDC
+#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+#    define const       /* note: need a more gentle solution here */
+#  endif
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+#  define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  ifdef MAXSEG_64K
+#    define MAX_MEM_LEVEL 8
+#  else
+#    define MAX_MEM_LEVEL 9
+#  endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+                        /* Type declarations */
+
+#ifndef OF /* function prototypes */
+#  ifdef STDC
+#    define OF(args)  args
+#  else
+#    define OF(args)  ()
+#  endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+#  if defined(M_I86SM) || defined(M_I86MM)
+     /* MSC small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef _MSC_VER
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#  if (defined(__SMALL__) || defined(__MEDIUM__))
+     /* Turbo C small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef __BORLANDC__
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+   /* If building or using zlib as a DLL, define ZLIB_DLL.
+    * This is not mandatory, but it offers a little performance increase.
+    */
+#  ifdef ZLIB_DLL
+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#      ifdef ZLIB_INTERNAL
+#        define ZEXTERN extern __declspec(dllexport)
+#      else
+#        define ZEXTERN extern __declspec(dllimport)
+#      endif
+#    endif
+#  endif  /* ZLIB_DLL */
+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+    * define ZLIB_WINAPI.
+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+    */
+#  ifdef ZLIB_WINAPI
+#    ifdef FAR
+#      undef FAR
+#    endif
+#    include <windows.h>
+     /* No need for _export, use ZLIB.DEF instead. */
+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#    define ZEXPORT WINAPI
+#    ifdef WIN32
+#      define ZEXPORTVA WINAPIV
+#    else
+#      define ZEXPORTVA FAR CDECL
+#    endif
+#  endif
+#endif
+
+#if defined (__BEOS__)
+#  ifdef ZLIB_DLL
+#    ifdef ZLIB_INTERNAL
+#      define ZEXPORT   __declspec(dllexport)
+#      define ZEXPORTVA __declspec(dllexport)
+#    else
+#      define ZEXPORT   __declspec(dllimport)
+#      define ZEXPORTVA __declspec(dllimport)
+#    endif
+#  endif
+#endif
+
+#ifdef HAVE_VISIBILITY_PRAGMA
+#  define ZEXTERN __attribute__((visibility ("default"))) extern
+#endif
+
+#ifndef ZEXTERN
+#  define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA
+#endif
+
+#ifndef FAR
+#  define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char  Byte;  /* 8 bits */
+#endif
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+#  define Bytef Byte FAR
+#else
+   typedef Byte  FAR Bytef;
+#endif
+typedef char  FAR charf;
+typedef int   FAR intf;
+typedef uInt  FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+   typedef void const *voidpc;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
+#else
+   typedef Byte const *voidpc;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
+#endif
+
+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef Z_HAVE_UNISTD_H
+#  include <sys/types.h>    /* for off_t */
+#  include <unistd.h>       /* for SEEK_* and off_t */
+#  ifdef VMS
+#    include <unixio.h>     /* for off_t */
+#  endif
+#  ifndef z_off_t
+#    define z_off_t off_t
+#  endif
+#endif
+
+#ifdef _LARGEFILE64_SOURCE
+#  include <sys/types.h>
+#endif
+
+#ifndef SEEK_SET
+#  define SEEK_SET        0       /* Seek from beginning of file.  */
+#  define SEEK_CUR        1       /* Seek from current position.  */
+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+#endif
+#ifndef z_off_t
+#  define z_off_t long
+#endif
+
+#if defined(__OS400__)
+#  define NO_vsnprintf
+#endif
+
+#if defined(__MVS__)
+#  define NO_vsnprintf
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+  #pragma map(deflateInit_,"DEIN")
+  #pragma map(deflateInit2_,"DEIN2")
+  #pragma map(deflateEnd,"DEEND")
+  #pragma map(deflateBound,"DEBND")
+  #pragma map(inflateInit_,"ININ")
+  #pragma map(inflateInit2_,"ININ2")
+  #pragma map(inflateEnd,"INEND")
+  #pragma map(inflateSync,"INSY")
+  #pragma map(inflateSetDictionary,"INSEDI")
+  #pragma map(compressBound,"CMBND")
+  #pragma map(inflate_table,"INTABL")
+  #pragma map(inflate_fast,"INFA")
+  #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/zconf.h.in b/zconf.h.in
index eec8ab0..5888024 100644
--- a/zconf.h.in
+++ b/zconf.h.in
@@ -7,8 +7,6 @@
 
 #ifndef ZCONF_H
 #define ZCONF_H
-#cmakedefine Z_PREFIX
-#cmakedefine Z_HAVE_UNISTD_H
 
 /*
  * If you *really* need a unique prefix for all types and library functions,
diff --git a/zlib.3 b/zlib.3
index 82b9eca..57f0307 100644
--- a/zlib.3
+++ b/zlib.3
@@ -1,4 +1,4 @@
-.TH ZLIB 3 "21 February 2010"
+.TH ZLIB 3 "11 March 2010"
 .SH NAME
 zlib \- compression/decompression library
 .SH SYNOPSIS
@@ -9,12 +9,13 @@
 The
 .I zlib
 library is a general purpose data compression library.
-The code is thread safe.
+The code is thread safe, assuming that the standard library functions
+used are thread safe, such as memory allocation routines.
 It provides in-memory compression and decompression functions,
 including integrity checks of the uncompressed data.
 This version of the library supports only one compression method (deflation)
-but other algorithms will be added later
-and will have the same stream interface.
+but other algorithms may be added later
+with the same stream interface.
 .LP
 Compression can be done in a single step if the buffers are large enough
 or can be done by repeated calls of the compression function.
@@ -29,7 +30,7 @@
 .LP
 The library does not install any signal handler.
 The decoder checks the consistency of the compressed data,
-so the library should never crash even in case of corrupted input.
+so the library should never crash even in the case of corrupted input.
 .LP
 All functions of the compression library are documented in the file
 .IR zlib.h .
@@ -37,18 +38,19 @@
 in the files
 .I example.c
 and
-.IR minigzip.c .
+.IR minigzip.c,
+as well as other examples in the
+.IR examples/
+directory.
 .LP
 Changes to this version are documented in the file
 .I ChangeLog
-that accompanies the source,
-and are concerned primarily with bug fixes and portability enhancements.
+that accompanies the source.
 .LP
-A Java implementation of
 .I zlib
-is available in the Java Development Kit 1.1:
+is available in Java using the java.util.zip package:
 .IP
-http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
+http://java.sun.com/developer/technicalArticles/Programming/compression/
 .LP
 A Perl interface to
 .IR zlib ,
@@ -56,7 +58,7 @@
 is available at CPAN (Comprehensive Perl Archive Network) sites,
 including:
 .IP
-http://www.cpan.org/modules/by-module/Compress/
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/
 .LP
 A Python interface to
 .IR zlib ,
@@ -65,14 +67,11 @@
 .IP
 http://www.python.org/doc/lib/module-zlib.html
 .LP
-A
 .I zlib
-binding for
-.IR tcl (1),
-written by Andreas Kupries (a.kupries@westend.com),
-is availlable at:
+is built into
+.IR tcl:
 .IP
-http://www.westend.com/~kupries/doc/trf/man/man.html
+http://wiki.tcl.tk/4610
 .LP
 An experimental package to read and write files in .zip format,
 written on top of
@@ -80,40 +79,34 @@
 by Gilles Vollant (info@winimage.com),
 is available at:
 .IP
-http://www.winimage.com/zLibDll/unzip.html
+http://www.winimage.com/zLibDll/minizip.html
 and also in the
 .I contrib/minizip
 directory of the main
 .I zlib
-web site.
+source distribution.
 .SH "SEE ALSO"
 The
 .I zlib
-web site can be found at either of these locations:
+web site can be found at:
 .IP
-http://www.zlib.org
-.br
-http://www.gzip.org/zlib/
+http://zlib.net/
 .LP
 The data format used by the zlib library is described by RFC
 (Request for Comments) 1950 to 1952 in the files:
 .IP
-http://www.ietf.org/rfc/rfc1950.txt (concerning zlib format)
+http://www.ietf.org/rfc/rfc1950.txt (for the zlib header and trailer format)
 .br
-http://www.ietf.org/rfc/rfc1951.txt (concerning deflate format)
+http://www.ietf.org/rfc/rfc1951.txt (for the deflate compressed data format)
 .br
-http://www.ietf.org/rfc/rfc1952.txt (concerning gzip format)
+http://www.ietf.org/rfc/rfc1952.txt (for the gzip header and trailer format)
 .LP
-These documents are also available in other formats from:
-.IP
-ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
-.LP
-Mark Nelson (markn@ieee.org) wrote an article about
+Mark Nelson wrote an article about
 .I zlib
 for the Jan. 1997 issue of  Dr. Dobb's Journal;
 a copy of the article is available at:
 .IP
-http://dogma.net/markn/articles/zlibtool/zlibtool.htm
+http://marknelson.us/1997/01/01/zlib-engine/
 .SH "REPORTING PROBLEMS"
 Before reporting a problem,
 please check the
@@ -126,13 +119,13 @@
 .I zlib
 FAQ at:
 .IP
-http://www.gzip.org/zlib/zlib_faq.html
+http://zlib.net/zlib_faq.html
 .LP
 before asking for help.
 Send questions and/or comments to zlib@gzip.org,
 or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
 .SH AUTHORS
-Version 1.2.3.9
+Version 1.2.4
 Copyright (C) 1995-2010 Jean-loup Gailly (jloup@gzip.org)
 and Mark Adler (madler@alumni.caltech.edu).
 .LP
diff --git a/zlib.3.pdf b/zlib.3.pdf
new file mode 100644
index 0000000..3442d5b
--- /dev/null
+++ b/zlib.3.pdf
Binary files differ
diff --git a/zlib.h b/zlib.h
index e1cfd0e..dfc0bba 100644
--- a/zlib.h
+++ b/zlib.h
@@ -1,5 +1,5 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.2.3.9, Feb 21st, 2010
+  version 1.2.3.9, Mar 11th, 2010
 
   Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
 
@@ -37,11 +37,12 @@
 extern "C" {
 #endif
 
-#define ZLIB_VERSION "1.2.3.9"
-#define ZLIB_VERNUM 0x1239
+#define ZLIB_VERSION "1.2.4"
+#define ZLIB_VERNUM 0x1240
 #define ZLIB_VER_MAJOR 1
 #define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 3
+#define ZLIB_VER_REVISION 4
+#define ZLIB_VER_SUBREVISION 0
 
 /*
     The 'zlib' compression library provides in-memory compression and