https://github.com/python/cpython/commit/63a638c43f821e9c8b3256e7122c06e539dc585d
commit: 63a638c43f821e9c8b3256e7122c06e539dc585d
branch: main
author: Steve Dower <steve.do...@python.org>
committer: zooba <steve.do...@microsoft.com>
date: 2025-03-19T19:03:25Z
summary:

gh-91349: Replace zlib with zlib-ng in Windows build (GH-131438)

files:
A Misc/NEWS.d/next/Windows/2025-03-19-01-11-56.gh-issue-91349.pmtp-J.rst
A PC/zbuild.h
A PC/zconf-ng.h
A PC/zconf.h
A PCbuild/zlib-ng.vcxproj
A PCbuild/zlib-ng.vcxproj.filters
M Doc/library/zlib.rst
M Doc/whatsnew/3.14.rst
M Lib/test/pythoninfo.py
M Misc/externals.spdx.json
M Modules/zlibmodule.c
M PCbuild/get_externals.bat
M PCbuild/pcbuild.proj
M PCbuild/pcbuild.sln
M PCbuild/pyproject.props
M PCbuild/python.props
M PCbuild/pythoncore.vcxproj
M PCbuild/readme.txt

diff --git a/Doc/library/zlib.rst b/Doc/library/zlib.rst
index 965b82a3daffb9..db0537f8ccc0a6 100644
--- a/Doc/library/zlib.rst
+++ b/Doc/library/zlib.rst
@@ -330,6 +330,18 @@ the following constants:
    .. versionadded:: 3.3
 
 
+.. data:: ZLIBNG_VERSION
+
+   The version string of the zlib-ng library that was used for building the
+   module if zlib-ng was used. When present, the :data:`ZLIB_VERSION` and
+   :data:`ZLIB_RUNTIME_VERSION` constants reflect the version of the zlib API
+   provided by zlib-ng.
+
+   If zlib-ng was not used to build the module, this constant will be absent.
+
+   .. versionadded:: 3.14
+
+
 .. seealso::
 
    Module :mod:`gzip`
diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst
index 79b219dd72651c..303d7922d1708d 100644
--- a/Doc/whatsnew/3.14.rst
+++ b/Doc/whatsnew/3.14.rst
@@ -1026,6 +1026,7 @@ zipinfo
   to produce reproducible output.
   (Contributed by Jiahao Li in :gh:`91279`.)
 
+
 .. Add improved modules above alphabetically, not here at the end.
 
 Optimizations
@@ -1078,6 +1079,18 @@ uuid
   (Contributed by Bénédikt Tran in :gh:`128150`.)
 
 
+zlib
+----
+
+* On Windows, ``zlib-ng`` is now used as the implementation of the
+  :mod:`zlib` module. This should produce compatible and comparable
+  results with better performance, though it is worth noting that
+  ``zlib.Z_BEST_SPEED`` (1) may result in significantly less
+  compression than the previous implementation (while also significantly
+  reducing the time taken to compress).
+  (Contributed by Steve Dower in :gh:`91349`.)
+
+
 Deprecated
 ==========
 
diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py
index 38236d82376f37..195551e7422896 100644
--- a/Lib/test/pythoninfo.py
+++ b/Lib/test/pythoninfo.py
@@ -651,7 +651,7 @@ def collect_zlib(info_add):
     except ImportError:
         return
 
-    attributes = ('ZLIB_VERSION', 'ZLIB_RUNTIME_VERSION')
+    attributes = ('ZLIB_VERSION', 'ZLIB_RUNTIME_VERSION', 'ZLIBNG_VERSION')
     copy_attributes(info_add, zlib, 'zlib.%s', attributes)
 
 
diff --git 
a/Misc/NEWS.d/next/Windows/2025-03-19-01-11-56.gh-issue-91349.pmtp-J.rst 
b/Misc/NEWS.d/next/Windows/2025-03-19-01-11-56.gh-issue-91349.pmtp-J.rst
new file mode 100644
index 00000000000000..4e33b8c57896cc
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2025-03-19-01-11-56.gh-issue-91349.pmtp-J.rst
@@ -0,0 +1,2 @@
+Replaces our copy of ``zlib`` with ``zlib-ng``, for performance improvements
+in :mod:`zlib`.
diff --git a/Misc/externals.spdx.json b/Misc/externals.spdx.json
index d54b1fbe251378..5bd5177b613924 100644
--- a/Misc/externals.spdx.json
+++ b/Misc/externals.spdx.json
@@ -171,25 +171,25 @@
       "versionInfo": "5.2.5"
     },
     {
-      "SPDXID": "SPDXRef-PACKAGE-zlib",
+      "SPDXID": "SPDXRef-PACKAGE-zlib-ng",
       "checksums": [
         {
           "algorithm": "SHA256",
-          "checksumValue": 
"e3f3fb32564952006eb18b091ca8464740e5eca29d328cfb0b2da22768e0b638"
+          "checksumValue": 
"00bbd88709bc416cb96160ab61d3e1c8f76e106799af7328d0fe434dc7dd5004"
         }
       ],
-      "downloadLocation": 
"https://github.com/python/cpython-source-deps/archive/refs/tags/zlib-1.3.1.tar.gz";,
+      "downloadLocation": 
"https://github.com/python/cpython-source-deps/archive/refs/tags/zlib-ng-2.2.4.tar.gz";,
       "externalRefs": [
         {
           "referenceCategory": "SECURITY",
-          "referenceLocator": "cpe:2.3:a:zlib:zlib:1.3.1:*:*:*:*:*:*:*",
+          "referenceLocator": "cpe:2.3:a:zlib-ng:zlib-ng:2.2.4:*:*:*:*:*:*:*",
           "referenceType": "cpe23Type"
         }
       ],
       "licenseConcluded": "NOASSERTION",
-      "name": "zlib",
+      "name": "zlib-ng",
       "primaryPackagePurpose": "SOURCE",
-      "versionInfo": "1.3.1"
+      "versionInfo": "2.2.4"
     }
   ],
   "spdxVersion": "SPDX-2.3"
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index b90665ae7ef64a..94575025b16941 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -2101,6 +2101,12 @@ zlib_exec(PyObject *mod)
                      PyUnicode_FromString(zlibVersion())) < 0) {
         return -1;
     }
+#ifdef ZLIBNG_VERSION
+    if (PyModule_Add(mod, "ZLIBNG_VERSION",
+                     PyUnicode_FromString(ZLIBNG_VERSION)) < 0) {
+        return -1;
+    }
+#endif
     if (PyModule_AddStringConstant(mod, "__version__", "1.0") < 0) {
         return -1;
     }
diff --git a/PC/zbuild.h b/PC/zbuild.h
new file mode 100644
index 00000000000000..157ab6ffedc1ae
--- /dev/null
+++ b/PC/zbuild.h
@@ -0,0 +1,343 @@
+#ifndef _ZBUILD_H
+#define _ZBUILD_H
+
+#define _POSIX_SOURCE 1  /* fileno */
+#ifndef _POSIX_C_SOURCE
+#  define _POSIX_C_SOURCE 200809L /* snprintf, posix_memalign, strdup */
+#endif
+#ifndef _ISOC11_SOURCE
+#  define _ISOC11_SOURCE 1 /* aligned_alloc */
+#endif
+#ifdef __OpenBSD__
+#  define _BSD_SOURCE 1
+#endif
+
+#include <stddef.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+/* Determine compiler version of C Standard */
+#ifdef __STDC_VERSION__
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#  if __STDC_VERSION__ >= 201112L
+#    ifndef STDC11
+#      define STDC11
+#    endif
+#  endif
+#endif
+
+#ifndef Z_HAS_ATTRIBUTE
+#  if defined(__has_attribute)
+#    define Z_HAS_ATTRIBUTE(a) __has_attribute(a)
+#  else
+#    define Z_HAS_ATTRIBUTE(a) 0
+#  endif
+#endif
+
+#ifndef Z_FALLTHROUGH
+#  if Z_HAS_ATTRIBUTE(__fallthrough__) || (defined(__GNUC__) && (__GNUC__ >= 
7))
+#    define Z_FALLTHROUGH __attribute__((__fallthrough__))
+#  else
+#    define Z_FALLTHROUGH do {} while(0) /* fallthrough */
+#  endif
+#endif
+
+#ifndef Z_TARGET
+#  if Z_HAS_ATTRIBUTE(__target__)
+#    define Z_TARGET(x) __attribute__((__target__(x)))
+#  else
+#    define Z_TARGET(x)
+#  endif
+#endif
+
+/* This has to be first include that defines any types */
+#if defined(_MSC_VER)
+#  if defined(_WIN64)
+    typedef __int64 ssize_t;
+#  else
+    typedef long ssize_t;
+#  endif
+
+#  if defined(_WIN64)
+    #define SSIZE_MAX _I64_MAX
+#  else
+    #define SSIZE_MAX LONG_MAX
+#  endif
+#endif
+
+/* MS Visual Studio does not allow inline in C, only C++.
+   But it provides __inline instead, so use that. */
+#if defined(_MSC_VER) && !defined(inline) && !defined(__cplusplus)
+#  define inline __inline
+#endif
+
+#if defined(ZLIB_COMPAT)
+#  define PREFIX(x) x
+#  define PREFIX2(x) ZLIB_ ## x
+#  define PREFIX3(x) z_ ## x
+#  define PREFIX4(x) x ## 64
+#  define zVersion zlibVersion
+#else
+#  define PREFIX(x) zng_ ## x
+#  define PREFIX2(x) ZLIBNG_ ## x
+#  define PREFIX3(x) zng_ ## x
+#  define PREFIX4(x) zng_ ## x
+#  define zVersion zlibng_version
+#  define z_size_t size_t
+#endif
+
+/* In zlib-compat some functions and types use unsigned long, but zlib-ng use 
size_t */
+#if defined(ZLIB_COMPAT)
+#  define z_uintmax_t unsigned long
+#else
+#  define z_uintmax_t size_t
+#endif
+
+/* Minimum of a and b. */
+#define MIN(a, b) ((a) > (b) ? (b) : (a))
+/* Maximum of a and b. */
+#define MAX(a, b) ((a) < (b) ? (b) : (a))
+/* Ignore unused variable warning */
+#define Z_UNUSED(var) (void)(var)
+
+#if defined(HAVE_VISIBILITY_INTERNAL)
+#  define Z_INTERNAL __attribute__((visibility ("internal")))
+#elif defined(HAVE_VISIBILITY_HIDDEN)
+#  define Z_INTERNAL __attribute__((visibility ("hidden")))
+#else
+#  define Z_INTERNAL
+#endif
+
+/* Symbol versioning helpers, allowing multiple versions of a function to 
exist.
+ * Functions using this must also be added to zlib-ng.map for each version.
+ * Double @@ means this is the default for newly compiled applications to link 
against.
+ * Single @ means this is kept for backwards compatibility.
+ * This is only used for Zlib-ng native API, and only on platforms supporting 
this.
+ */
+#if defined(HAVE_SYMVER)
+#  define ZSYMVER(func,alias,ver) __asm__(".symver " func ", " alias 
"@ZLIB_NG_" ver);
+#  define ZSYMVER_DEF(func,alias,ver) __asm__(".symver " func ", " alias 
"@@ZLIB_NG_" ver);
+#else
+#  define ZSYMVER(func,alias,ver)
+#  define ZSYMVER_DEF(func,alias,ver)
+#endif
+
+#ifndef __cplusplus
+#  define Z_REGISTER register
+#else
+#  define Z_REGISTER
+#endif
+
+/* Reverse the bytes in a value. Use compiler intrinsics when
+   possible to take advantage of hardware implementations. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1300)
+#  include <stdlib.h>
+#  pragma intrinsic(_byteswap_ulong)
+#  define ZSWAP16(q) _byteswap_ushort(q)
+#  define ZSWAP32(q) _byteswap_ulong(q)
+#  define ZSWAP64(q) _byteswap_uint64(q)
+
+#elif defined(__clang__) || (defined(__GNUC__) && \
+        (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))
+#  define ZSWAP16(q) __builtin_bswap16(q)
+#  define ZSWAP32(q) __builtin_bswap32(q)
+#  define ZSWAP64(q) __builtin_bswap64(q)
+
+#elif defined(__GNUC__) && (__GNUC__ >= 2) && defined(__linux__)
+#  include <byteswap.h>
+#  define ZSWAP16(q) bswap_16(q)
+#  define ZSWAP32(q) bswap_32(q)
+#  define ZSWAP64(q) bswap_64(q)
+
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
+#  include <sys/endian.h>
+#  define ZSWAP16(q) bswap16(q)
+#  define ZSWAP32(q) bswap32(q)
+#  define ZSWAP64(q) bswap64(q)
+#elif defined(__OpenBSD__)
+#  include <sys/endian.h>
+#  define ZSWAP16(q) swap16(q)
+#  define ZSWAP32(q) swap32(q)
+#  define ZSWAP64(q) swap64(q)
+#elif defined(__INTEL_COMPILER)
+/* ICC does not provide a two byte swap. */
+#  define ZSWAP16(q) ((((q) & 0xff) << 8) | (((q) & 0xff00) >> 8))
+#  define ZSWAP32(q) _bswap(q)
+#  define ZSWAP64(q) _bswap64(q)
+
+#else
+#  define ZSWAP16(q) ((((q) & 0xff) << 8) | (((q) & 0xff00) >> 8))
+#  define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
+                     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+#  define ZSWAP64(q)                           \
+         (((q & 0xFF00000000000000u) >> 56u) | \
+          ((q & 0x00FF000000000000u) >> 40u) | \
+          ((q & 0x0000FF0000000000u) >> 24u) | \
+          ((q & 0x000000FF00000000u) >> 8u)  | \
+          ((q & 0x00000000FF000000u) << 8u)  | \
+          ((q & 0x0000000000FF0000u) << 24u) | \
+          ((q & 0x000000000000FF00u) << 40u) | \
+          ((q & 0x00000000000000FFu) << 56u))
+#endif
+
+/* Only enable likely/unlikely if the compiler is known to support it */
+#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__INTEL_COMPILER) || 
defined(__clang__)
+#  define LIKELY_NULL(x)        __builtin_expect((x) != 0, 0)
+#  define LIKELY(x)             __builtin_expect(!!(x), 1)
+#  define UNLIKELY(x)           __builtin_expect(!!(x), 0)
+#else
+#  define LIKELY_NULL(x)        x
+#  define LIKELY(x)             x
+#  define UNLIKELY(x)           x
+#endif /* (un)likely */
+
+#if defined(HAVE_ATTRIBUTE_ALIGNED)
+#  define ALIGNED_(x) __attribute__ ((aligned(x)))
+#elif defined(_MSC_VER)
+#  define ALIGNED_(x) __declspec(align(x))
+#else
+/* TODO: Define ALIGNED_ for your compiler */
+#  define ALIGNED_(x)
+#endif
+
+#ifdef HAVE_BUILTIN_ASSUME_ALIGNED
+#  define HINT_ALIGNED(p,n) __builtin_assume_aligned((void *)(p),(n))
+#else
+#  define HINT_ALIGNED(p,n) (p)
+#endif
+#define HINT_ALIGNED_16(p) HINT_ALIGNED((p),16)
+#define HINT_ALIGNED_64(p) HINT_ALIGNED((p),64)
+#define HINT_ALIGNED_4096(p) HINT_ALIGNED((p),4096)
+
+/* PADSZ returns needed bytes to pad bpos to pad size
+ * PAD_NN calculates pad size and adds it to bpos, returning the result.
+ * All take an integer or a pointer as bpos input.
+ */
+#define PADSZ(bpos, pad) (((pad) - ((uintptr_t)(bpos) % (pad))) % (pad))
+#define PAD_16(bpos) ((bpos) + PADSZ((bpos),16))
+#define PAD_64(bpos) ((bpos) + PADSZ((bpos),64))
+#define PAD_4096(bpos) ((bpos) + PADSZ((bpos),4096))
+
+/* Diagnostic functions */
+#ifdef ZLIB_DEBUG
+#  include <stdio.h>
+   extern int Z_INTERNAL z_verbose;
+   extern void Z_INTERNAL z_error(const char *m);
+#  define Assert(cond, msg) {int _cond = (cond); if (!_cond) z_error(msg);}
+#  define Trace(x) {if (z_verbose >= 0) fprintf x;}
+#  define Tracev(x) {if (z_verbose > 0) fprintf x;}
+#  define Tracevv(x) {if (z_verbose > 1) fprintf x;}
+#  define Tracec(c, x) {if (z_verbose > 0 && (c)) fprintf x;}
+#  define Tracecv(c, x) {if (z_verbose > 1 && (c)) fprintf x;}
+#else
+#  define Assert(cond, msg)
+#  define Trace(x)
+#  define Tracev(x)
+#  define Tracevv(x)
+#  define Tracec(c, x)
+#  define Tracecv(c, x)
+#endif
+
+/* OPTIMAL_CMP values determine the comparison width:
+ * 64: Best for 64-bit architectures with unaligned access
+ * 32: Best for 32-bit architectures with unaligned access
+ * 16: Safe default for unknown architectures
+ * 8:  Safe fallback for architectures without unaligned access
+ * Note: The unaligned access mentioned is cpu-support, this allows compiler or
+ *       separate unaligned intrinsics to utilize safe unaligned access, 
without
+ *       utilizing unaligned C pointers that are known to have undefined 
behavior.
+ */
+#if !defined(OPTIMAL_CMP)
+#  if defined(__x86_64__) || defined(_M_X64) || defined(__amd64__) || 
defined(_M_AMD64)
+#    define OPTIMAL_CMP 64
+#  elif defined(__i386__) || defined(__i486__) || defined(__i586__) || \
+        defined(__i686__) || defined(_X86_) || defined(_M_IX86)
+#    define OPTIMAL_CMP 32
+#  elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
+#    if defined(__ARM_FEATURE_UNALIGNED) || defined(_WIN32)
+#      define OPTIMAL_CMP 64
+#    else
+#      define OPTIMAL_CMP 8
+#    endif
+#  elif defined(__arm__) || defined(_M_ARM)
+#    if defined(__ARM_FEATURE_UNALIGNED) || defined(_WIN32)
+#      define OPTIMAL_CMP 32
+#    else
+#      define OPTIMAL_CMP 8
+#    endif
+#  elif defined(__powerpc64__) || defined(__ppc64__)
+#    define OPTIMAL_CMP 64
+#  elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)
+#    define OPTIMAL_CMP 32
+#  endif
+#endif
+#if !defined(OPTIMAL_CMP)
+#  define OPTIMAL_CMP 16
+#endif
+
+#if defined(__has_feature)
+#  if __has_feature(address_sanitizer)
+#    define Z_ADDRESS_SANITIZER 1
+#  endif
+#elif defined(__SANITIZE_ADDRESS__)
+#  define Z_ADDRESS_SANITIZER 1
+#endif
+
+/*
+ * __asan_loadN() and __asan_storeN() calls are inserted by compilers in order 
to check memory accesses.
+ * They can be called manually too, with the following caveats:
+ * gcc says: "warning: implicit declaration of function '...'"
+ * g++ says: "error: new declaration '...' ambiguates built-in declaration 
'...'"
+ * Accommodate both.
+ */
+#ifdef Z_ADDRESS_SANITIZER
+#ifndef __cplusplus
+void __asan_loadN(void *, long);
+void __asan_storeN(void *, long);
+#endif
+#else
+#  define __asan_loadN(a, size) do { Z_UNUSED(a); Z_UNUSED(size); } while (0)
+#  define __asan_storeN(a, size) do { Z_UNUSED(a); Z_UNUSED(size); } while (0)
+#endif
+
+#if defined(__has_feature)
+#  if __has_feature(memory_sanitizer)
+#    define Z_MEMORY_SANITIZER 1
+#    include <sanitizer/msan_interface.h>
+#  endif
+#endif
+
+#ifndef Z_MEMORY_SANITIZER
+#  define __msan_check_mem_is_initialized(a, size) do { Z_UNUSED(a); 
Z_UNUSED(size); } while (0)
+#  define __msan_unpoison(a, size) do { Z_UNUSED(a); Z_UNUSED(size); } while 
(0)
+#endif
+
+/* Notify sanitizer runtime about an upcoming read access. */
+#define instrument_read(a, size) do {             \
+    void *__a = (void *)(a);                      \
+    long __size = size;                           \
+    __asan_loadN(__a, __size);                    \
+    __msan_check_mem_is_initialized(__a, __size); \
+} while (0)
+
+/* Notify sanitizer runtime about an upcoming write access. */
+#define instrument_write(a, size) do { \
+   void *__a = (void *)(a);            \
+   long __size = size;                 \
+   __asan_storeN(__a, __size);         \
+} while (0)
+
+/* Notify sanitizer runtime about an upcoming read/write access. */
+#define instrument_read_write(a, size) do {       \
+    void *__a = (void *)(a);                      \
+    long __size = size;                           \
+    __asan_storeN(__a, __size);                   \
+    __msan_check_mem_is_initialized(__a, __size); \
+} while (0)
+
+#endif
diff --git a/PC/zconf-ng.h b/PC/zconf-ng.h
new file mode 100644
index 00000000000000..dc62edbef7bbc5
--- /dev/null
+++ b/PC/zconf-ng.h
@@ -0,0 +1,174 @@
+/* zconf-ng.h -- configuration of the zlib-ng compression library
+ * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifndef ZCONFNG_H
+#define ZCONFNG_H
+
+#if !defined(_WIN32) && defined(__WIN32__)
+#  define _WIN32
+#endif
+
+/* Clang macro for detecting declspec support
+ * https://clang.llvm.org/docs/LanguageExtensions.html#has-declspec-attribute
+ */
+#ifndef __has_declspec_attribute
+#  define __has_declspec_attribute(x) 0
+#endif
+
+/* Always define z_const as const */
+#define z_const const
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  define MAX_MEM_LEVEL 9
+#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 MIN_WBITS
+#  define MIN_WBITS   8  /* 256 LZ77 window */
+#endif
+#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 about 7 kilobytes
+ for small objects.
+*/
+
+/* Type declarations */
+
+#ifdef ZLIB_INTERNAL
+#  define Z_INTERNAL ZLIB_INTERNAL
+#endif
+
+/* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+#if defined(ZLIB_DLL) && (defined(_WIN32) || 
(__has_declspec_attribute(dllexport) && __has_declspec_attribute(dllimport)))
+#  ifdef Z_INTERNAL
+#    define Z_EXTERN extern __declspec(dllexport)
+#  else
+#    define Z_EXTERN extern __declspec(dllimport)
+#  endif
+#endif
+
+/* 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.
+ */
+#if defined(ZLIB_WINAPI) && defined(_WIN32)
+#  include <windows.h>
+   /* No need for _export, use ZLIB.DEF instead. */
+   /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#  define Z_EXPORT WINAPI
+#  define Z_EXPORTVA WINAPIV
+#endif
+
+#ifndef Z_EXTERN
+#  define Z_EXTERN extern
+#endif
+#ifndef Z_EXPORT
+#  define Z_EXPORT
+#endif
+#ifndef Z_EXPORTVA
+#  define Z_EXPORTVA
+#endif
+
+/* Conditional exports */
+#define ZNG_CONDEXPORT Z_EXPORT
+
+/* Fallback for something that includes us. */
+typedef unsigned char Byte;
+typedef Byte Bytef;
+
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+typedef char  charf;
+typedef int   intf;
+typedef uInt  uIntf;
+typedef uLong uLongf;
+
+typedef void const *voidpc;
+typedef void       *voidpf;
+typedef void       *voidp;
+
+#if 0    /* was set to #if 0 by configure/cmake/etc */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef NEED_PTRDIFF_T    /* may be set to #if 1 by configure/cmake/etc */
+typedef PTRDIFF_TYPE ptrdiff_t;
+#endif
+
+#include <sys/types.h>      /* for off_t */
+
+#include <stddef.h>         /* for wchar_t and NULL */
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#  include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#  ifndef z_off_t
+#    define z_off_t off_t
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && defined(WITH_GZFILEOP)
+#  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(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(__MSYS__)
+#    define z_off64_t _off64_t
+#  elif defined(_WIN32) && !defined(__GNUC__)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
+#endif
+
+#endif /* ZCONFNG_H */
diff --git a/PC/zconf.h b/PC/zconf.h
new file mode 100644
index 00000000000000..cd1307a334f298
--- /dev/null
+++ b/PC/zconf.h
@@ -0,0 +1,204 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+#if !defined(_WIN32) && defined(__WIN32__)
+#  define _WIN32
+#endif
+
+/* Clang macro for detecting declspec support
+ * https://clang.llvm.org/docs/LanguageExtensions.html#has-declspec-attribute
+ */
+#ifndef __has_declspec_attribute
+#  define __has_declspec_attribute(x) 0
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  define MAX_MEM_LEVEL 9
+#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 MIN_WBITS
+#  define MIN_WBITS   8  /* 256 LZ77 window */
+#endif
+#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 about 7 kilobytes
+ for small objects.
+*/
+
+/* Type declarations */
+
+
+#ifndef OF /* function prototypes */
+#  define OF(args)  args
+#endif
+
+#ifdef ZLIB_INTERNAL
+#  define Z_INTERNAL ZLIB_INTERNAL
+#endif
+
+/* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+#if defined(ZLIB_DLL) && (defined(_WIN32) || 
(__has_declspec_attribute(dllexport) && __has_declspec_attribute(dllimport)))
+#  ifdef Z_INTERNAL
+#    define Z_EXTERN extern __declspec(dllexport)
+#  else
+#    define Z_EXTERN extern __declspec(dllimport)
+#  endif
+#endif
+
+/* 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.
+ */
+#if defined(ZLIB_WINAPI) && defined(_WIN32)
+#  ifndef WIN32_LEAN_AND_MEAN
+#    define WIN32_LEAN_AND_MEAN
+#  endif
+#  include <windows.h>
+   /* No need for _export, use ZLIB.DEF instead. */
+   /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#  define Z_EXPORT WINAPI
+#  define Z_EXPORTVA WINAPIV
+#endif
+
+#ifndef Z_EXTERN
+#  define Z_EXTERN extern
+#endif
+#ifndef Z_EXPORT
+#  define Z_EXPORT
+#endif
+#ifndef Z_EXPORTVA
+#  define Z_EXPORTVA
+#endif
+
+/* Conditional exports */
+#define ZNG_CONDEXPORT Z_INTERNAL
+
+/* For backwards compatibility */
+
+#ifndef ZEXTERN
+#  define ZEXTERN Z_EXTERN
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT Z_EXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA Z_EXPORTVA
+#endif
+#ifndef FAR
+#  define FAR
+#endif
+
+/* Legacy zlib typedefs for backwards compatibility. Don't assume stdint.h is 
defined. */
+typedef unsigned char Byte;
+typedef Byte Bytef;
+
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+typedef char  charf;
+typedef int   intf;
+typedef uInt  uIntf;
+typedef uLong uLongf;
+
+typedef void const *voidpc;
+typedef void       *voidpf;
+typedef void       *voidp;
+
+typedef unsigned int z_crc_t;
+
+#if 0    /* was set to #if 0 by configure/cmake/etc */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef NEED_PTRDIFF_T    /* may be set to #if 1 by configure/cmake/etc */
+typedef PTRDIFF_TYPE ptrdiff_t;
+#endif
+
+#include <sys/types.h>      /* for off_t */
+
+#include <stddef.h>         /* for wchar_t and NULL */
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#  include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#  ifndef z_off_t
+#    define z_off_t off_t
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(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(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(__MSYS__)
+#    define z_off64_t _off64_t
+#  elif defined(_WIN32) && !defined(__GNUC__)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
+#endif
+
+typedef size_t z_size_t;
+
+#endif /* ZCONF_H */
diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat
index dfacd1d1e788d4..d7cb3f0a4fedbd 100644
--- a/PCbuild/get_externals.bat
+++ b/PCbuild/get_externals.bat
@@ -59,7 +59,7 @@ set libraries=%libraries%                                     
  sqlite-3.45.3.0
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% 
tcl-core-8.6.15.0
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.15.0
 set libraries=%libraries%                                       xz-5.2.5
-set libraries=%libraries%                                       zlib-1.3.1
+set libraries=%libraries%                                       zlib-ng-2.2.4
 
 for %%e in (%libraries%) do (
     if exist "%EXTERNALS_DIR%\%%e" (
diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj
index c7ddc1d23b301c..0ae87a0f21f039 100644
--- a/PCbuild/pcbuild.proj
+++ b/PCbuild/pcbuild.proj
@@ -47,6 +47,8 @@
     </Projects2>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <!-- Static libraries for use later in the build -->
+    <Projects Include="zlib-ng.vcxproj" Condition="$(zlibNgDir) != '' and 
Exists('$(zlibNgDir)\zlib-ng.h.in')" />
     <!-- pythonXY.dll -->
     <!--
     Parallel build is explicitly disabled for this project because it
diff --git a/PCbuild/pcbuild.sln b/PCbuild/pcbuild.sln
index f2a48a7cb63666..f3bab33cf60ebe 100644
--- a/PCbuild/pcbuild.sln
+++ b/PCbuild/pcbuild.sln
@@ -161,6 +161,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = 
"_testclinic_limited", "_tes
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testlimitedcapi", 
"_testlimitedcapi.vcxproj", "{7467D86C-1CEB-4CB9-B65E-E9A54ABDC933}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib-ng", 
"zlib-ng.vcxproj", "{FB91C8B2-6FBC-3A01-B644-1637111F902D}"
+EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|ARM = Debug|ARM
@@ -1682,6 +1684,38 @@ Global
                {7467D86C-1CEB-4CB9-B65E-E9A54ABDC933}.Release|Win32.Build.0 = 
Release|Win32
                {7467D86C-1CEB-4CB9-B65E-E9A54ABDC933}.Release|x64.ActiveCfg = 
Release|x64
                {7467D86C-1CEB-4CB9-B65E-E9A54ABDC933}.Release|x64.Build.0 = 
Release|x64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|ARM.ActiveCfg = 
Debug|ARM
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|ARM.Build.0 = 
Debug|ARM
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|ARM64.ActiveCfg = 
Debug|ARM64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|ARM64.Build.0 = 
Debug|ARM64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|Win32.ActiveCfg = 
Debug|Win32
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|Win32.Build.0 = 
Debug|Win32
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|x64.ActiveCfg = 
Debug|x64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Debug|x64.Build.0 = 
Debug|x64
+               
{FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|ARM.ActiveCfg = 
PGInstrument|ARM
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|ARM.Build.0 
= PGInstrument|ARM
+               
{FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|ARM64.ActiveCfg = 
PGInstrument|ARM64
+               
{FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|ARM64.Build.0 = 
PGInstrument|ARM64
+               
{FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|Win32.ActiveCfg = 
PGInstrument|Win32
+               
{FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|Win32.Build.0 = 
PGInstrument|Win32
+               
{FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|x64.ActiveCfg = 
PGInstrument|x64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGInstrument|x64.Build.0 
= PGInstrument|x64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|ARM.ActiveCfg = 
PGUpdate|ARM
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|ARM.Build.0 = 
PGUpdate|ARM
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|ARM64.ActiveCfg 
= PGUpdate|ARM64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|ARM64.Build.0 = 
PGUpdate|ARM64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|Win32.ActiveCfg 
= PGUpdate|Win32
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|Win32.Build.0 = 
PGUpdate|Win32
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|x64.ActiveCfg = 
PGUpdate|x64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.PGUpdate|x64.Build.0 = 
PGUpdate|x64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|ARM.ActiveCfg = 
Release|ARM
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|ARM.Build.0 = 
Release|ARM
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|ARM64.ActiveCfg 
= Release|ARM64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|ARM64.Build.0 = 
Release|ARM64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|Win32.ActiveCfg 
= Release|Win32
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|Win32.Build.0 = 
Release|Win32
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|x64.ActiveCfg = 
Release|x64
+               {FB91C8B2-6FBC-3A01-B644-1637111F902D}.Release|x64.Build.0 = 
Release|x64
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props
index 2681e2d42e8996..b5a236ee3e37d5 100644
--- a/PCbuild/pyproject.props
+++ b/PCbuild/pyproject.props
@@ -13,6 +13,7 @@
     <!-- pyconfig.h is updated by pythoncore.vcxproj, so it's always in 
pythoncore's IntDir -->
     
<GeneratedPyConfigDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)$(ArchName)_$(Configuration)\pythoncore\</GeneratedPyConfigDir>
     
<GeneratedFrozenModulesDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)_frozen\</GeneratedFrozenModulesDir>
+    
<GeneratedZlibNgDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)$(ArchName)_$(Configuration)\zlib-ng\</GeneratedZlibNgDir>
     <TargetName Condition="'$(TargetName)' == ''">$(ProjectName)</TargetName>
     <TargetName>$(TargetName)$(PyDebugExt)</TargetName>
     <GenerateManifest>false</GenerateManifest>
@@ -107,6 +108,7 @@
       <AdditionalOptions Condition="$(MSVCHasBrokenARM64Clamping) == 'true' 
and $(Platform) == 'ARM64'">-d2:-pattern-opt-disable:-932189325 
%(AdditionalOptions)</AdditionalOptions>
     </Link>
     <Lib>
+      <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>
       <LinkTimeCodeGeneration Condition="$(Configuration) == 
'Release'">true</LinkTimeCodeGeneration>
       <LinkTimeCodeGeneration Condition="$(SupportPGO) and $(Configuration) == 
'PGInstrument'">true</LinkTimeCodeGeneration>
       <LinkTimeCodeGeneration Condition="$(SupportPGO) and $(Configuration) == 
'PGUpdate'">true</LinkTimeCodeGeneration>
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 6e90178f4ea8ab..5a3fae0e2f69fe 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -76,6 +76,7 @@
     <opensslIncludeDir Condition="$(opensslIncludeDir) == 
''">$(opensslOutDir)include</opensslIncludeDir>
     <nasmDir Condition="$(nasmDir) == 
''">$(ExternalsDir)\nasm-2.11.06\</nasmDir>
     <zlibDir Condition="$(zlibDir) == ''">$(ExternalsDir)\zlib-1.3.1\</zlibDir>
+    <zlibNgDir Condition="$(zlibNgDir) == 
''">$(ExternalsDir)\zlib-ng-2.2.4\</zlibNgDir>
   </PropertyGroup>
 
   <PropertyGroup>
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index d2c9664b08a755..8561fe95503156 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -82,7 +82,7 @@
   <PropertyGroup>
     <KillPython>true</KillPython>
     <RequireProfileData>true</RequireProfileData>
-    <IncludeExternals Condition="$(IncludeExternals) == '' and 
Exists('$(zlibDir)\zlib.h')">true</IncludeExternals>
+    <IncludeExternals Condition="$(IncludeExternals) == '' and 
Exists('$(zlibNgDir)\zlib-ng.h.in')">true</IncludeExternals>
     <IncludeExternals Condition="$(IncludeExternals) == 
''">false</IncludeExternals>
   </PropertyGroup>
   <ImportGroup Label="PropertySheets">
@@ -101,8 +101,8 @@
     <ClCompile>
       <AdditionalOptions>/Zm200  %(AdditionalOptions)</AdditionalOptions>
       
<AdditionalIncludeDirectories>$(PySourcePath)Modules\_hacl;$(PySourcePath)Modules\_hacl\include;$(PySourcePath)Python;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <AdditionalIncludeDirectories 
Condition="$(IncludeExternals)">$(zlibDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      
<PreprocessorDefinitions>_USRDLL;Py_BUILD_CORE;Py_BUILD_CORE_BUILTIN;Py_ENABLE_SHARED;MS_DLL_ID="$(SysWinVer)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories 
Condition="$(IncludeExternals)">$(zlibNgDir);$(GeneratedZlibNgDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      
<PreprocessorDefinitions>_USRDLL;Py_BUILD_CORE;Py_BUILD_CORE_BUILTIN;Py_ENABLE_SHARED;MS_DLL_ID="$(SysWinVer)";ZLIB_COMPAT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions 
Condition="$(IncludeExternals)">_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(UseJIT)' == 
'true'">_Py_JIT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(UseTIER2)' != '' and 
'$(UseTIER2)' != 
'0'">_Py_TIER2=$(UseTIER2);%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -111,6 +111,7 @@
     </ClCompile>
     <Link>
       
<AdditionalDependencies>version.lib;ws2_32.lib;pathcch.lib;bcrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies 
Condition="$(IncludeExternals)">zlib-ng$(PyDebugExt).lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
@@ -408,19 +409,6 @@
     <ClInclude Include="..\Python\stdlib_module_names.h" />
     <ClInclude Include="..\Python\thread_nt.h" />
   </ItemGroup>
-  <ItemGroup Condition="$(IncludeExternals)">
-    <ClInclude Include="$(zlibDir)\crc32.h" />
-    <ClInclude Include="$(zlibDir)\deflate.h" />
-    <ClInclude Include="$(zlibDir)\inffast.h" />
-    <ClInclude Include="$(zlibDir)\inffixed.h" />
-    <ClInclude Include="$(zlibDir)\inflate.h" />
-    <ClInclude Include="$(zlibDir)\inftrees.h" />
-    <ClInclude Include="$(zlibDir)\trees.h" />
-    <ClInclude Include="$(zlibDir)\zconf.h" />
-    <ClInclude Include="$(zlibDir)\zconf.h.in" />
-    <ClInclude Include="$(zlibDir)\zlib.h" />
-    <ClInclude Include="$(zlibDir)\zutil.h" />
-  </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_abc.c" />
     <ClCompile Include="..\Modules\_bisectmodule.c" />
@@ -669,19 +657,6 @@
   </ItemGroup>
   <ItemGroup Condition="$(IncludeExternals)">
     <ClCompile Include="..\Modules\zlibmodule.c" />
-    <ClCompile Include="$(zlibDir)\adler32.c" />
-    <ClCompile Include="$(zlibDir)\compress.c" />
-    <ClCompile Include="$(zlibDir)\crc32.c" />
-    <ClCompile Include="$(zlibDir)\deflate.c">
-      <DisableSpecificWarnings>4244</DisableSpecificWarnings>
-    </ClCompile>
-    <ClCompile Include="$(zlibDir)\infback.c" />
-    <ClCompile Include="$(zlibDir)\inffast.c" />
-    <ClCompile Include="$(zlibDir)\inflate.c" />
-    <ClCompile Include="$(zlibDir)\inftrees.c" />
-    <ClCompile Include="$(zlibDir)\trees.c" />
-    <ClCompile Include="$(zlibDir)\uncompr.c" />
-    <ClCompile Include="$(zlibDir)\zutil.c" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\PC\dl_nt.c" />
@@ -689,6 +664,12 @@
   <ItemGroup>
     <ResourceCompile Include="..\PC\python_nt.rc" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="zlib-ng.vcxproj" 
Condition="$(IncludeExternals)">
+      <Project>{fb91c8b2-6fbc-3a01-b644-1637111f902d}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
     <Import Project="regen.targets" />
@@ -750,7 +731,7 @@
     <Warning Text="Toolset $(PlatformToolset) is not used for official builds. 
Your build may have errors or incompatibilities." />
   </Target>
   <Target Name="_WarnAboutZlib" BeforeTargets="PrepareForBuild" 
Condition="!$(IncludeExternals)">
-    <Warning Text="Not including zlib is not a supported configuration." />
+    <Warning Text="Not including zlib or zlib-ng is not a supported 
configuration." />
   </Target>
 
   <Target Name="_CopyVCRuntime" AfterTargets="Build" Inputs="@(VCRuntimeDLL)" 
Outputs="$(OutDir)%(Filename)%(Extension)" DependsOnTargets="FindVCRuntime">
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index 8e82d4ea840fe1..cbbee8bcea06d3 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -252,6 +252,16 @@ _tkinter
     Win32 and "tcltk64" on x64.  They also copy the Tcl and Tk DLLs
     into the current output directory, which should ensure that Tkinter
     is able to load Tcl/Tk without having to change your PATH.
+zlib-ng
+    Compiles zlib-ng as a static library, which is later included by
+    pythoncore.vcxproj. This was generated using CMake against zlib-ng
+    version 2.2.4, and should be minimally updated as needed to adapt
+    to changes in their source layout. The zbuild.h, zconf.h and
+    zconf-ng.h file in the PC directory were likewise generated and
+    vendored.
+
+    Sources for zlib-ng are imported unmodified into our source
+    repository at https://github.com/python/cpython-source-deps.
 
 
 Getting External Sources
diff --git a/PCbuild/zlib-ng.vcxproj b/PCbuild/zlib-ng.vcxproj
new file mode 100644
index 00000000000000..12a87d890d92ae
--- /dev/null
+++ b/PCbuild/zlib-ng.vcxproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="17.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM64">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|ARM">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|ARM64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|Win32">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|x64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|ARM">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|ARM64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|Win32">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|x64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM64">
+      <Configuration>Release</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{FB91C8B2-6FBC-3A01-B644-1637111F902D}</ProjectGuid>
+    <RootNamespace>zlib-ng</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="python.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalOptions>%(AdditionalOptions) /utf-8 
/w34242</AdditionalOptions>
+      <DisableSpecificWarnings>4206;4054;4324</DisableSpecificWarnings>
+      <LanguageStandard_C>stdc11</LanguageStandard_C>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      
<AdditionalIncludeDirectories>$(zlibNgDir);$(PySourceDir)PC;$(GeneratedZlibNgDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      
<PreprocessorDefinitions>%(PreprocessorDefinitions);ZLIB_COMPAT;WITH_GZFILEOP;NO_FSEEKO;HAVE_BUILTIN_ASSUME_ALIGNED;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="$(Platform) == 'Win32' or 
$(Platform) == 
'x64'">%(PreprocessorDefinitions);X86_FEATURES;X86_HAVE_XSAVE_INTRIN;X86_SSE2;X86_SSSE3;X86_SSE42;X86_PCLMULQDQ_CRC;X86_AVX2;X86_AVX512;X86_AVX512VNNI;X86_VPCLMULQDQ_CRC</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="$(Configuration) == 
'Debug'">%(PreprocessorDefinitions);ZLIB_DEBUG</PreprocessorDefinitions>
+      <EnableEnhancedInstructionSet Condition="$(Platform) == 'Win32' or 
$(Platform) == 'x64'">AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\adler32_c.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\generic\adler32_fold_c.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\generic\chunkset_c.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\generic\compare256_c.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\generic\crc32_braid_c.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\generic\crc32_fold_c.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\generic\slide_hash_c.c" />
+    <ClCompile Include="$(zlibNgDir)\adler32.c" />
+    <ClCompile Include="$(zlibNgDir)\compress.c" />
+    <ClCompile Include="$(zlibNgDir)\crc32.c" />
+    <ClCompile Include="$(zlibNgDir)\crc32_braid_comb.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate_fast.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate_huff.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate_medium.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate_quick.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate_rle.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate_slow.c" />
+    <ClCompile Include="$(zlibNgDir)\deflate_stored.c" />
+    <ClCompile Include="$(zlibNgDir)\functable.c" />
+    <ClCompile Include="$(zlibNgDir)\infback.c" />
+    <ClCompile Include="$(zlibNgDir)\inflate.c" />
+    <ClCompile Include="$(zlibNgDir)\inftrees.c" />
+    <ClCompile Include="$(zlibNgDir)\insert_string.c" />
+    <ClCompile Include="$(zlibNgDir)\insert_string_roll.c" />
+    <ClCompile Include="$(zlibNgDir)\trees.c" />
+    <ClCompile Include="$(zlibNgDir)\uncompr.c" />
+    <ClCompile Include="$(zlibNgDir)\zutil.c" />
+    <ClCompile Include="$(zlibNgDir)\cpu_features.c" />
+    <ClInclude Include="$(zlibNgDir)\arch\generic\generic_functions.h" />
+    <ClInclude Include="$(zlibNgDir)\fallback_builtins.h" />
+  </ItemGroup>
+  <ItemGroup Condition="$(Platform) == 'Win32' or $(Platform) == 'x64'">
+    <ClInclude Include="$(zlibNgDir)\arch\x86\x86_functions.h" />
+    <ClInclude Include="$(zlibNgDir)\arch\x86\x86_features.h" />
+    <ClInclude Include="$(zlibNgDir)\arch\x86\adler32_avx512_p.h" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\x86_features.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_sse2.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\compare256_sse2.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\slide_hash_sse2.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_ssse3.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_ssse3.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_sse42.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\crc32_pclmulqdq.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\slide_hash_avx2.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_avx2.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\compare256_avx2.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_avx2.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_avx512.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_avx512.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_avx512_vnni.c" />
+    <ClCompile Include="$(zlibNgDir)\arch\x86\crc32_vpclmulqdq.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\PC\zconf.h" />
+    <ClInclude Include="..\PC\zlib.h" />
+    <ClInclude Include="$(zlibNgDir)\arch\generic\chunk_permute_table.h" />
+    <ClInclude Include="$(zlibNgDir)\arch\generic\compare256_p.h" />
+    <ClInclude Include="$(zlibNgDir)\adler32_p.h" />
+    <ClInclude Include="$(zlibNgDir)\chunkset_tpl.h" />
+    <ClInclude Include="$(zlibNgDir)\compare256_rle.h" />
+    <ClInclude Include="$(zlibNgDir)\arch_functions.h" />
+    <ClInclude Include="$(zlibNgDir)\crc32_braid_p.h" />
+    <ClInclude Include="$(zlibNgDir)\crc32_braid_comb_p.h" />
+    <ClInclude Include="$(zlibNgDir)\crc32_braid_tbl.h" />
+    <ClInclude Include="$(zlibNgDir)\deflate.h" />
+    <ClInclude Include="$(zlibNgDir)\deflate_p.h" />
+    <ClInclude Include="$(zlibNgDir)\functable.h" />
+    <ClInclude Include="$(zlibNgDir)\inffast_tpl.h" />
+    <ClInclude Include="$(zlibNgDir)\inffixed_tbl.h" />
+    <ClInclude Include="$(zlibNgDir)\inflate.h" />
+    <ClInclude Include="$(zlibNgDir)\inflate_p.h" />
+    <ClInclude Include="$(zlibNgDir)\inftrees.h" />
+    <ClInclude Include="$(zlibNgDir)\insert_string_tpl.h" />
+    <ClInclude Include="$(zlibNgDir)\match_tpl.h" />
+    <ClInclude Include="$(zlibNgDir)\trees.h" />
+    <ClInclude Include="$(zlibNgDir)\trees_emit.h" />
+    <ClInclude Include="$(zlibNgDir)\trees_tbl.h" />
+    <ClInclude Include="$(zlibNgDir)\zbuild.h" />
+    <ClInclude Include="$(zlibNgDir)\zendian.h" />
+    <ClInclude Include="$(zlibNgDir)\zutil.h" />
+    <ClInclude Include="$(zlibNgDir)\cpu_features.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+
+  <Target Name="_EnsureZlibH" Inputs="$(zlibNgDir)\zlib.h.in" 
Outputs="$(IntDir)zlib.h">
+    <PropertyGroup>
+      
<Text>$([System.IO.File]::ReadAllText('$(zlibNgDir)\zlib.h.in').Replace('@ZLIB_SYMBOL_PREFIX@',
 ''))</Text>
+    </PropertyGroup>
+    <WriteLinesToFile File="$(IntDir)zlib.h" Lines="$(Text)" />
+  </Target>
+  <Target Name="_EnsureZlibNgH" Inputs="$(zlibNgDir)\zlib-ng.h.in" 
Outputs="$(IntDir)zlib-ng.h">
+    <PropertyGroup>
+      
<Text>$([System.IO.File]::ReadAllText('$(zlibNgDir)\zlib-ng.h.in').Replace('@ZLIB_SYMBOL_PREFIX@',
 ''))</Text>
+    </PropertyGroup>
+    <WriteLinesToFile File="$(IntDir)zlib-ng.h" Lines="$(Text)" />
+  </Target>
+
+  <Target Name="_EnsureZlibNgHeaders" BeforeTargets="PrepareForBuild"
+          DependsOnTargets="_EnsureZlibH;_EnsureZlibNgH" />
+</Project>
diff --git a/PCbuild/zlib-ng.vcxproj.filters b/PCbuild/zlib-ng.vcxproj.filters
new file mode 100644
index 00000000000000..addbd45f880b5b
--- /dev/null
+++ b/PCbuild/zlib-ng.vcxproj.filters
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup>
+    <ClCompile Include="$(zlibNgDir)\adler32.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_avx2.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_avx512.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_avx512_vnni.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\adler32_c.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\adler32_fold_c.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_sse42.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\adler32_ssse3.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_avx2.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_avx512.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\chunkset_c.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_sse2.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\chunkset_ssse3.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\compare256_avx2.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\compare256_c.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\compare256_sse2.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\compress.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\cpu_features.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\crc32.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\crc32_braid_c.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\crc32_braid_comb.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\crc32_fold_c.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\crc32_pclmulqdq.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\crc32_vpclmulqdq.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate_fast.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate_huff.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate_medium.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate_quick.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate_rle.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate_slow.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\deflate_stored.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\functable.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\infback.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\inflate.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\inftrees.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\insert_string.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\insert_string_roll.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\slide_hash_avx2.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\generic\slide_hash_c.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\slide_hash_sse2.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\trees.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\uncompr.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\arch\x86\x86_features.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(zlibNgDir)\zutil.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="$(zlibNgDir)\arch\x86\adler32_avx512_p.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\adler32_p.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\arch_functions.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\arch\generic\chunk_permute_table.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\chunkset_tpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\arch\generic\compare256_p.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\compare256_rle.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\cpu_features.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\crc32_braid_comb_p.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\crc32_braid_p.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\crc32_braid_tbl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\deflate.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\deflate_p.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\fallback_builtins.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\functable.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\arch\generic\generic_functions.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\inffast_tpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\inffixed_tbl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\inflate.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\inflate_p.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\inftrees.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\insert_string_tpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\match_tpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\trees.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\trees_emit.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\trees_tbl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\arch\x86\x86_features.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\arch\x86\x86_functions.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\zbuild.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\PC\zconf.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\zendian.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\PC\zlib.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibNgDir)\zutil.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="Source Files">
+      
<UniqueIdentifier>{967252c0-03f1-4991-897f-db8f4cd7dc44}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files">
+      
<UniqueIdentifier>{4c0539fb-5187-41a1-abe5-bf7cd416d7bd}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to