Bug#1146376: trixie-pu: package tomcat-native/1.3.8-1~deb13u1

Santiago Ruano Rincón santiagorr at riseup.net
Mon Aug 31 23:53:59 BST 2026


Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: tomcat-native at packages.debian.org, debian-java at lists.debian.org
Control: affects -1 + src:tomcat-native
User: release.debian.org at packages.debian.org
Usertags: pu

[ Reason ]
tomcat10 and tomcat11 no longer loads the Tomcat native library (using
the Apache Portable Runtime), provided by libtcnative-1, since the
version in trixie (1.3.1) is incompatible.

See the related bug reports:
- https://bugs.debian.org/1034492 (for libtomcat-1 / src:tomcat-native)
- https://bugs.debian.org/1038204 (for tomcat10)
- https://bugs.debian.org/1143583 (for tomcat11)

Please note that, while #1038204 was filed when the resulting message in
the tomcat10 logs was a warning, the current status is that both tomcat
versions refrain from loading the library, producing an error instead
(with SEVERE category).

[ Impact ]
Users of tomcat systems where libtcnative-1 is installed are not
actually using the features provided by the library. This has an impact
on performance, especially related to TLS connections and cryptographic
operations.

[ Tests ]
- Manually tested on trixie VMs with both tomcat10 and tomcat11.
  Verified that the error is no longer produced in the logs.
- Added dep-8 tests, whose results can be seen in:
  - With current trixie version:
  https://debusine.debian.net/debian/developers/work-request/1206911/
  - With the proposed trixie upload:
  https://debusine.debian.net/debian/developers/work-request/1201326/

[ Risks ]
IMO, the risk is low.  Backporting code to 1.3.1 to make it compatible
with both tomcat versions doesn't make too much sense. Tomcat is also
maintained in (old)stable by backporting full upstream versions.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in (old)stable
  [ ] the issue is verified as fixed in unstable: #1034492 currently
  happens in unstable, but fixing it requires an update of
  libtcnative-2 instead (to 2.0.15).

[ Changes ]
From d/changelog:

  * d/watch: limit the versions scanned to the 1.3.x:
    to make it possible to download the correct newer upstream versions
    with uscan.
  * New upstream version 1.3.8
    - Fix error by incompatible APR library for tomcat10 and tomcat11
      (Closes: #1034492)
    (Hopefully self explanatory)
  * Add dep-8 tests to check compatibility with tomcat 10 and 11:
    To have a reproducible way to test the changes and identify
    incompatibilities with future updates of tomcat{10,11}

[ Other info ]
N/A

Thanks,

 -- Santiago
-------------- next part --------------
diff -Nru tomcat-native-1.3.1/build.properties.default tomcat-native-1.3.8/build.properties.default
--- tomcat-native-1.3.1/build.properties.default	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/build.properties.default	2026-06-11 17:01:29.000000000 -0300
@@ -18,7 +18,7 @@
 # ----- Version Control Flags -----
 version.major=1
 version.minor=3
-version.build=1
+version.build=8
 version.patch=0
 version.suffix=
 
diff -Nru tomcat-native-1.3.1/CHANGELOG.txt tomcat-native-1.3.8/CHANGELOG.txt
--- tomcat-native-1.3.1/CHANGELOG.txt	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/CHANGELOG.txt	2026-06-12 05:13:55.000000000 -0300
@@ -3,7 +3,90 @@
    This is the Changelog for Tomcat Native 1.3.x. The Tomcat Native 1.3.x
    branch started from the 1.2.39 tag.
 
-  Changes in 1.3.1
+  1.3.8
+
+     * Fix: Fix a memory leak when parsing certificates. Pull request #44
+       provided by chenjp. (markt)
+     * Fix: Fix two potential memory leaks on error paths identified by
+       Copilot. (markt)
+     * Fix: 69988: Fix post handshake authentication when Tomcat is
+       configured with a trust store using JSSE style configuration. (markt)
+     * Fix: 70102: Correct expected size of tickets when calling
+       SSLContext.setSessionTicketKeys. (markt)
+
+  2026-03-10 1.3.7
+
+     * Code: Refactor access to ASN1_OCTET_STRING to use setters to fix
+       errors when building against the latest OpenSSL 4.0.x code. (markt)
+     * Fix: Fix the handling of OCSP requests with multiple responder URIs.
+       (jfclere)
+     * Fix: Fix the handling of TRY_AGAIN responses to OCSP requests when
+       soft fail is disabled. (jfclere)
+
+  2026-02-11 1.3.6
+
+     * Code: Refactor the SSL_CONF_CTX clean-up to align it with SSL and
+       SSL_CTX clean-up. (markt)
+     * Fix: Fix unnecessarily large buffer allocation when filtering out NULL
+       and export ciphers. Pull requests #35 and #37 provided by chenjp.
+       (markt)
+     * Fix: Fix a potential memory leak if an invalid OpenSSLConf is
+       provided. Pull request #36 provided by chenjp. (markt)
+     * Fix: Refactor setting of OCSP configuration defaults as they were only
+       applied if the SSL_CONF_CTX was used. While one was always used with
+       Tomcat versions aware of the OCSP configuration options, one was not
+       always used with Tomcat versions unaware of the OCSP configuration
+       options leading to OCSP verification being enabled by default when the
+       expected behaviour was disabled by default. (markt)
+     * Code: Improve performance for the rare case of handling large OCSP
+       responses. (markt)
+
+  2026-01-19 1.3.5
+
+     * Fix: Remove group write permissions from the files in the tar.gz
+       source archive. (markt)
+     * Fix: Clear an additional error in OCSP processing that was preventing
+       OCSP soft fail working with Tomcat's APR/native connector. (markt)
+
+  2026-01-12 1.3.4
+
+     * Fix: Correct logic error that prevented the configuration of TLS 1.3
+       cipher suites. (markt)
+
+  not released 1.3.3
+
+     * Fix: Refactor the addition of TLS 1.3 cipher suite configuration to
+       avoid a regression when running a version of Tomcat that pre-dates
+       this change. (markt)
+
+  not released 1.3.2
+
+     * Update: Rename configure.in to modern autotools style configure.ac.
+       (rjung)
+     * Update: Fix incomplete updates for autotools generated files during
+       "buildconf" execution. (rjung)
+     * Update: Improve quoting in tcnative.m4. (rjung)
+     * Update: Update the minimum version of autoconf for releasing to 2.68.
+       (rjung)
+     * Fix: Fix the autoconf warnings when creating a release. (markt)
+     * Update: The Windows binaries are now built with OCSP support enabled
+       by default. (markt)
+     * Add: Include a nonce with OCSP requests and check the nonce, if any,
+       in the OCSP response. (markt)
+     * Add: Expand verification of OCSP responses. (markt)
+     * Add: Add the ability to configure the OCSP checks to soft-fail - i.e.
+       if the responder cannot be contacted or fails to respond in a timely
+       manner the OCSP check will not fail. (markt)
+     * Add: Add a configurable timeout to the writing of OCSP requests and
+       reading of OCSP responses. (markt)
+     * Add: Add the ability to control the OCSP verification flags. (markt)
+     * Add: Configure TLS 1.3 connections from the provided ciphers list as
+       well as connections using TLS 1.2 and earlier. Pull request provided
+       by gastush. (markt)
+     * Update: Update the Windows build environment to use Visual Studio
+       2022. (markt)
+
+  2024-07-24 1.3.1
 
      * Fix: Fix a crash on Windows when SSLContext.setCACertificate() is
        invoked with a null value for caCertificateFile and a non-null value
@@ -16,7 +99,7 @@
      * Update: Update the recommended minimum version of OpenSSL to 3.0.14.
        (markt)
 
-  Changes in 1.3.0
+  2024-02-12 1.3.0
 
      * Update: Drop useless compile.optimize option. (michaelo)
      * Update: Align Java source compile configuration with Tomcat.
@@ -42,4 +125,4 @@
 
    Please see the 1.1.x changelog.
 
-   Copyright ? 2008-2024, The Apache Software Foundation
+   Copyright ? 2008-2026, The Apache Software Foundation
diff -Nru tomcat-native-1.3.1/debian/changelog tomcat-native-1.3.8/debian/changelog
--- tomcat-native-1.3.1/debian/changelog	2024-10-23 11:35:55.000000000 -0300
+++ tomcat-native-1.3.8/debian/changelog	2026-08-31 15:56:29.000000000 -0300
@@ -1,3 +1,21 @@
+tomcat-native (1.3.8-1~deb13u1) trixie; urgency=medium
+
+  * Team upload
+  * d/watch: limit the versions scanned to the 1.3.x
+  * New upstream version 1.3.8
+    - Fix error by incompatible APR library for tomcat10 and tomcat11
+      (Closes: #1034492)
+  * Add dep-8 tests to check compatibility with tomcat 10 and 11
+
+ -- Santiago Ruano Rinc?n <santiagorr at riseup.net>  Mon, 31 Aug 2026 15:56:29 -0300
+
+tomcat-native (1.3.7-1) unstable; urgency=medium
+
+  * Team upload.
+  * New upstream release
+
+ -- Emmanuel Bourg <ebourg at apache.org>  Mon, 16 Mar 2026 22:45:48 +0100
+
 tomcat-native (1.3.1-1) unstable; urgency=medium
 
   * Team upload.
diff -Nru tomcat-native-1.3.1/debian/tests/control tomcat-native-1.3.8/debian/tests/control
--- tomcat-native-1.3.1/debian/tests/control	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/debian/tests/control	2026-08-31 15:54:46.000000000 -0300
@@ -0,0 +1,7 @@
+Tests: tomcat11-loads-apr
+Restrictions: needs-root
+Depends: @, tomcat11
+
+Tests: tomcat10-loads-apr
+Restrictions: needs-root
+Depends: @, tomcat10
diff -Nru tomcat-native-1.3.1/debian/tests/tomcat10-loads-apr tomcat-native-1.3.8/debian/tests/tomcat10-loads-apr
--- tomcat-native-1.3.1/debian/tests/tomcat10-loads-apr	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/debian/tests/tomcat10-loads-apr	2026-08-31 15:56:29.000000000 -0300
@@ -0,0 +1,15 @@
+#!/usr/bin/sh
+
+# See https://bugs.debian.org/1143583
+
+systemctl start tomcat10.service
+sleep 5
+systemctl status tomcat10.service
+
+echo "checking for incompatibility messages"
+
+ret=$(grep "SEVERE.*An incompatible version.*of the Apache Tomcat Native library is installed" /var/log/tomcat10/catalina* || true)
+if [ "$ret" ]; then
+    printf >&2 "Error: $ret"
+    false
+fi
diff -Nru tomcat-native-1.3.1/debian/tests/tomcat11-loads-apr tomcat-native-1.3.8/debian/tests/tomcat11-loads-apr
--- tomcat-native-1.3.1/debian/tests/tomcat11-loads-apr	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/debian/tests/tomcat11-loads-apr	2026-08-31 15:56:29.000000000 -0300
@@ -0,0 +1,15 @@
+#!/usr/bin/sh
+
+# See https://bugs.debian.org/1143583
+
+systemctl start tomcat11.service
+sleep 5
+systemctl status tomcat11.service
+
+echo "checking for incompatibility messages"
+
+ret=$(grep "SEVERE.*An incompatible version.*of the Apache Tomcat Native library is installed" /var/log/tomcat11/catalina* || true)
+if [ "$ret" ]; then
+    printf >&2 "Error: $ret"
+    false
+fi
diff -Nru tomcat-native-1.3.1/debian/watch tomcat-native-1.3.8/debian/watch
--- tomcat-native-1.3.1/debian/watch	2024-10-23 11:16:30.000000000 -0300
+++ tomcat-native-1.3.8/debian/watch	2026-08-31 15:54:46.000000000 -0300
@@ -1,3 +1,3 @@
 version=4
 opts="repack,compression=xz" \
-https://archive.apache.org/dist/tomcat/tomcat-connectors/native/([\d\.]+)/source/tomcat-native-([\d\.]+)-src\.tar\.gz debian uupdate
+https://archive.apache.org/dist/tomcat/tomcat-connectors/native/(1.3.[\d\.]+)/source/tomcat-native-([\d\.]+)-src\.tar\.gz debian uupdate
diff -Nru tomcat-native-1.3.1/docs/images/asf-logo.svg tomcat-native-1.3.8/docs/images/asf-logo.svg
--- tomcat-native-1.3.1/docs/images/asf-logo.svg	2024-07-18 06:40:34.000000000 -0300
+++ tomcat-native-1.3.8/docs/images/asf-logo.svg	2026-06-12 05:13:55.000000000 -0300
@@ -1,226 +1,43 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 525">
+  <defs>
+    <style>
+      .cls-1 {
+        fill: #7c297d;
+      }
 
-      http://www.apache.org/licenses/LICENSE-2.0
+      .cls-2 {
+        fill: #f79a23;
+      }
 
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 7127.6 2890" enable-background="new 0 0 7127.6 2890" xml:space="preserve">
-<path fill="#6D6E71" d="M7104.7,847.8c15.3,15.3,22.9,33.7,22.9,55.2c0,21.5-7.6,39.9-22.9,55.4c-15.3,15.4-33.8,23.1-55.6,23.1
-	c-21.8,0-40.2-7.6-55.4-22.9c-15.1-15.3-22.7-33.7-22.7-55.2c0-21.5,7.6-39.9,22.9-55.4c15.3-15.4,33.7-23.1,55.4-23.1
-	C7070.9,824.9,7089.4,832.5,7104.7,847.8z M7098.1,951.9c13.3-13.6,20-29.8,20-48.7s-6.6-35-19.8-48.5
-	c-13.2-13.4-29.4-20.1-48.6-20.1c-19.2,0-35.4,6.7-48.7,20.2c-13.3,13.5-19.9,29.7-19.9,48.7c0,19,6.6,35.2,19.7,48.6
-	c13.1,13.4,29.3,20.1,48.5,20.1S7084.7,965.4,7098.1,951.9z M7087.1,888.1c0,14-6.1,22.8-18.4,26.4l22.5,30.5h-18.2l-20.3-28.3
-	h-18.6v28.3h-14.7v-84.6h31.8c12.8,0,22,2.2,27.6,6.6C7084.4,871.4,7087.1,878.4,7087.1,888.1z M7068.2,900c3-2.4,4.4-6.5,4.4-12
-	c0-5.5-1.5-9.4-4.5-11.6c-3-2.2-8.4-3.2-16-3.2h-18v30.5h17.5C7059.7,903.6,7065.3,902.4,7068.2,900z"/>
-<path fill="#6D6E71" d="M1803.6,499.8v155.4h-20V499.8h-56.8v-19.2h133.9v19.2H1803.6z"/>
-<path fill="#6D6E71" d="M2082.2,655.2v-76.9h-105.2v76.9h-20V480.5h20v78.9h105.2v-78.9h20v174.7H2082.2z"/>
-<path fill="#6D6E71" d="M2241.4,499.8v57.4h88.1v19.2h-88.1v59.8h101.8v19h-121.8V480.5H2340v19.2H2241.4z"/>
-<path fill="#D22128" d="M1574.5,1852.4l417.3-997.6h80.1l417.3,997.6h-105.4l-129.3-311.9h-448.2l-127.9,311.9H1574.5z M2032.6,970
-	l-205.1,493.2h404.7L2032.6,970z"/>
-<path fill="#D22128" d="M2596.9,1852.4V854.8H3010c171.4,0,295.1,158.8,295.1,313.3c0,163-115.2,316.1-286.6,316.1h-324.6v368.1
-	H2596.9z M2693.9,1397.1h318.9c118,0,193.9-108.2,193.9-229c0-125.1-92.7-226.2-202.3-226.2h-310.5V1397.1z"/>
-<path fill="#D22128" d="M3250.5,1852.4l417.3-997.6h80.1l417.3,997.6h-105.4l-129.3-311.9h-448.2l-127.9,311.9H3250.5z M3708.6,970
-	l-205.1,493.2h404.7L3708.6,970z"/>
-<path fill="#D22128" d="M4637.3,849.1c177,0,306.3,89.9,368.1,217.8l-78.7,47.8c-63.2-132.1-186.9-177-295.1-177
-	c-238.9,0-369.5,213.6-369.5,414.5c0,220.6,161.6,420.1,373.7,420.1c112.4,0,244.5-56.2,307.7-185.5l81.5,42.1
-	c-64.6,148.9-241.7,231.8-394.8,231.8c-274,0-466.5-261.3-466.5-514.2C4163.8,1106.3,4336.6,849.1,4637.3,849.1z"/>
-<path fill="#D22128" d="M5949.1,854.8v997.6h-98.4v-466.5h-591.5v466.5h-96.9V854.8h96.9v444h591.5v-444H5949.1z"/>
-<path fill="#D22128" d="M6844.6,1765.2v87.1h-670.2V854.8H6832v87.1h-560.6v359.7h489v82.9h-489v380.8H6844.6z"/>
-<path fill="#6D6E71" d="M1667.6,2063.6c11.8,3.5,22.2,8.3,31,14.2l-10.3,22.6c-9-6-18.6-10.4-28.9-13.4c-10.2-2.9-20-4.4-29.2-4.4
-	c-13.6,0-24.5,2.4-32.6,7.3c-8.1,4.9-12.2,11.8-12.2,20.7c0,7.6,2.3,14,6.8,19c4.5,5,10.2,8.9,17,11.7c6.8,2.8,16.1,6,28,9.6
-	c14.4,4.6,26,8.9,34.7,12.9c8.8,4,16.3,9.9,22.5,17.8c6.2,7.8,9.3,18.2,9.3,31c0,11.7-3.2,21.8-9.5,30.6
-	c-6.3,8.7-15.3,15.5-26.8,20.3c-11.6,4.8-24.9,7.2-40,7.2c-15.1,0-29.7-2.9-43.9-8.7c-14.2-5.8-26.4-13.6-36.6-23.4l10.7-21.6
-	c9.6,9.4,20.7,16.7,33.3,21.9c12.6,5.2,24.8,7.8,36.8,7.8c15.3,0,27.3-3,36.1-8.9c8.8-5.9,13.2-13.9,13.2-23.9
-	c0-7.8-2.3-14.3-6.9-19.4c-4.6-5.1-10.3-9-17.1-11.9c-6.8-2.8-16.1-6-28-9.6c-14.2-4.2-25.7-8.3-34.6-12.2
-	c-8.9-3.9-16.4-9.7-22.5-17.5c-6.1-7.7-9.2-17.9-9.2-30.6c0-10.9,3-20.4,9-28.6c6-8.2,14.6-14.6,25.6-19.1
-	c11.1-4.5,23.8-6.8,38.2-6.8C1643.8,2058.3,1655.7,2060.1,1667.6,2063.6z"/>
-<path fill="#6D6E71" d="M1980.1,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
-	c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
-	c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
-	C1944.8,2058.6,1963.2,2063.3,1980.1,2072.8z M1881.9,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
-	c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
-	c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
-	c-13-7.4-27.2-11.2-42.6-11.2C1909.4,2081.5,1895.1,2085.2,1881.9,2092.7z"/>
-<path fill="#6D6E71" d="M2186.5,2082.4v74h98.4v23.2h-98.4v90.2h-24.1v-210.6h133.8v23.2H2186.5z"/>
-<path fill="#6D6E71" d="M2491.6,2082.4v187.4h-24.1v-187.4h-68.4v-23.2h161.4v23.2H2491.6z"/>
-<path fill="#6D6E71" d="M2871.8,2269.8l-56.8-177.4l-57.6,177.4h-24.5l-70.5-210.6h25.9l57.9,182.7l57.1-182.4l24.1-0.3l57.7,182.7
-	l57.1-182.7h25l-70.6,210.6H2871.8z"/>
-<path fill="#6D6E71" d="M3087.3,2216.6l-23.5,53.2h-25.6l94.4-210.6h25l94.1,210.6h-26.1l-23.5-53.2H3087.3z M3144.5,2086.6
-	l-46.9,106.8h94.4L3144.5,2086.6z"/>
-<path fill="#6D6E71" d="M3461.1,2202.7c-6,0.4-10.7,0.6-14.1,0.6h-56v66.5H3367v-210.6h80c26.2,0,46.6,6.2,61.2,18.5
-	c14.5,12.3,21.8,29.8,21.8,52.3c0,17.2-4.1,31.7-12.2,43.3c-8.1,11.6-19.8,20-35,25l49.2,71.5h-27.3L3461.1,2202.7z M3491.3,2167.6
-	c10.3-8.4,15.5-20.8,15.5-37c0-15.9-5.2-27.9-15.5-36c-10.3-8.1-25.1-12.2-44.3-12.2h-56v97.8h56
-	C3466.2,2180.2,3481,2176,3491.3,2167.6z"/>
-<path fill="#6D6E71" d="M3688.3,2082.4v69.2h106.2v23.2h-106.2v72.1h122.8v22.9h-146.9v-210.6h142.9v23.2H3688.3z"/>
-<path fill="#6D6E71" d="M4147,2082.4v74h98.4v23.2H4147v90.2h-24.1v-210.6h133.8v23.2H4147z"/>
-<path fill="#6D6E71" d="M4523.3,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
-	c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
-	c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
-	C4488.1,2058.6,4506.5,2063.3,4523.3,2072.8z M4425.2,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
-	c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
-	c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
-	c-13-7.4-27.2-11.2-42.6-11.2C4452.6,2081.5,4438.3,2085.2,4425.2,2092.7z"/>
-<path fill="#6D6E71" d="M4854.7,2247.7c-15.7,15.5-37.3,23.3-64.8,23.3c-27.7,0-49.4-7.8-65.1-23.3c-15.7-15.5-23.6-37-23.6-64.6
-	v-124h24.1v124c0,20.3,5.8,36.1,17.3,47.5c11.6,11.4,27.3,17.1,47.3,17.1c20.1,0,35.8-5.7,47.1-17c11.4-11.3,17-27.2,17-47.7v-124
-	h24.1v124C4878.2,2210.7,4870.4,2232.2,4854.7,2247.7z"/>
-<path fill="#6D6E71" d="M5169.5,2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3,169.3v-169.3h23.8v210.6H5169.5z"/>
-<path fill="#6D6E71" d="M5478.4,2073.1c16.4,9.3,29.4,21.9,38.9,37.9c9.6,16,14.3,33.9,14.3,53.5s-4.8,37.6-14.3,53.6
-	c-9.5,16.1-22.6,28.7-39.3,37.9c-16.6,9.2-35.2,13.8-55.5,13.8h-84.3v-210.6h85.2C5443.7,2059.2,5462,2063.8,5478.4,2073.1z
-	 M5362.3,2246.9h61.4c15.5,0,29.6-3.5,42.3-10.6c12.7-7.1,22.8-16.9,30.2-29.5c7.4-12.5,11.1-26.5,11.1-42
-	c0-15.5-3.8-29.4-11.3-41.9c-7.5-12.5-17.7-22.3-30.6-29.6c-12.8-7.2-27-10.9-42.6-10.9h-60.5V2246.9z"/>
-<path fill="#6D6E71" d="M5668.6,2216.6l-23.5,53.2h-25.6l94.4-210.6h25l94.1,210.6H5807l-23.5-53.2H5668.6z M5725.8,2086.6
-	l-46.9,106.8h94.4L5725.8,2086.6z"/>
-<path fill="#6D6E71" d="M5991,2082.4v187.4H5967v-187.4h-68.4v-23.2h161.4v23.2H5991z"/>
-<path fill="#6D6E71" d="M6175.9,2269.8v-210.6h24.1v210.6H6175.9z"/>
-<path fill="#6D6E71" d="M6493.7,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
-	c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
-	c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
-	C6458.5,2058.6,6476.9,2063.3,6493.7,2072.8z M6395.6,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
-	c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
-	c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
-	c-13-7.4-27.2-11.2-42.6-11.2C6423,2081.5,6408.8,2085.2,6395.6,2092.7z"/>
-<path fill="#6D6E71" d="M6826.5,2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3,169.3v-169.3h23.8v210.6H6826.5z"/>
-<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4516.6152" y1="-2338.7222" x2="-4108.4111" y2="-1861.3982" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0" style="stop-color:#F69923"/>
-	<stop  offset="0.3123" style="stop-color:#F79A23"/>
-	<stop  offset="0.8383" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_1_)" d="M1230.1,13.7c-45.3,26.8-120.6,102.5-210.5,212.3l82.6,155.9c58-82.9,116.9-157.5,176.3-221.2
-	c4.6-5.1,7-7.5,7-7.5c-2.3,2.5-4.6,5-7,7.5c-19.2,21.2-77.5,89.2-165.5,224.4c84.7-4.2,214.9-21.6,321.1-39.7
-	c31.6-177-31-258-31-258S1323.4-41.4,1230.1,13.7z"/>
-<path fill="none" d="M1090.2,903.1c0.6-0.1,1.2-0.2,1.8-0.3l-11.9,1.3c-0.7,0.3-1.4,0.7-2.1,1
-	C1082.1,904.4,1086.2,903.7,1090.2,903.1z"/>
-<path fill="none" d="M1005.9,1182.3c-6.7,1.5-13.7,2.7-20.7,3.7C992.3,1185,999.2,1183.8,1005.9,1182.3z"/>
-<path fill="none" d="M432.9,1808.8c0.9-2.3,1.8-4.7,2.6-7c18.2-48,36.2-94.7,54-140.1c20-51,39.8-100.4,59.3-148.3
-	c20.6-50.4,40.9-99.2,60.9-146.3c21-49.4,41.7-97,62-142.8c16.5-37.3,32.8-73.4,48.9-108.3c5.4-11.7,10.7-23.2,16-34.6
-	c10.5-22.7,21-44.8,31.3-66.5c9.5-20,19-39.6,28.3-58.8c3.1-6.4,6.2-12.8,9.3-19.1c0.5-1,1-2,1.5-3.1l-10.2,1.1l-8-15.9
-	c-0.8,1.6-1.6,3.1-2.4,4.6c-14.5,28.8-28.9,57.9-43.1,87.2c-8.2,16.9-16.4,34-24.6,51c-22.6,47.4-44.8,95.2-66.6,143.3
-	c-22.1,48.6-43.7,97.5-64.9,146.5c-20.8,48.1-41.3,96.2-61.2,144.2c-20,48-39.5,95.7-58.5,143.2c-19.9,49.5-39.2,98.7-58,147.2
-	c-4.2,10.9-8.5,21.9-12.7,32.8c-15,39.2-29.7,77.8-44,116l12.7,25.1l11.4-1.2c0.4-1.1,0.8-2.3,1.3-3.4
-	C396.7,1905.4,414.9,1856.4,432.9,1808.8z"/>
-<path fill="none" d="M980,1186.8L980,1186.8c0.1,0,0.1,0,0.1-0.1C980.1,1186.8,980.1,1186.8,980,1186.8z"/>
-<path fill="#BE202E" d="M952.6,1323c-10.6,1.9-21.4,3.8-32.5,5.7c-0.1,0-0.1,0.1-0.2,0.1c5.6-0.8,11.2-1.7,16.6-2.6
-	C942,1325.2,947.3,1324.1,952.6,1323z"/>
-<path opacity="0.35" fill="#BE202E" d="M952.6,1323c-10.6,1.9-21.4,3.8-32.5,5.7c-0.1,0-0.1,0.1-0.2,0.1c5.6-0.8,11.2-1.7,16.6-2.6
-	C942,1325.2,947.3,1324.1,952.6,1323z"/>
-<path fill="#BE202E" d="M980.3,1186.7C980.2,1186.7,980.2,1186.7,980.3,1186.7c-0.1,0.1-0.2,0.1-0.2,0.1c1.8-0.2,3.5-0.5,5.2-0.8
-	c7-1,13.9-2.2,20.7-3.7C997.5,1183.8,989,1185.2,980.3,1186.7L980.3,1186.7L980.3,1186.7z"/>
-<path opacity="0.35" fill="#BE202E" d="M980.3,1186.7C980.2,1186.7,980.2,1186.7,980.3,1186.7c-0.1,0.1-0.2,0.1-0.2,0.1
-	c1.8-0.2,3.5-0.5,5.2-0.8c7-1,13.9-2.2,20.7-3.7C997.5,1183.8,989,1185.2,980.3,1186.7L980.3,1186.7L980.3,1186.7z"/>
-<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-7537.7339" y1="-2391.4075" x2="-4625.4141" y2="-2391.4075" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_2_)" d="M858.6,784.7c25.1-46.9,50.5-92.8,76.2-137.4c26.7-46.4,53.7-91.3,80.9-134.7
-	c1.6-2.6,3.2-5.2,4.8-7.7c27-42.7,54.2-83.7,81.6-122.9L1019.5,226c-6.2,7.6-12.5,15.3-18.8,23.2c-23.8,29.7-48.6,61.6-73.9,95.5
-	c-28.6,38.2-58,78.9-87.8,121.7c-27.6,39.5-55.5,80.9-83.5,123.7c-23.8,36.5-47.7,74-71.4,112.5c-0.9,1.4-1.8,2.9-2.6,4.3
-	l107.5,212.3C811.8,873.6,835.1,828.7,858.6,784.7z"/>
-<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-7186.1777" y1="-2099.3059" x2="-5450.7183" y2="-2099.3059" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0" style="stop-color:#282662"/>
-	<stop  offset="9.548390e-02" style="stop-color:#662E8D"/>
-	<stop  offset="0.7882" style="stop-color:#9F2064"/>
-	<stop  offset="0.9487" style="stop-color:#CD2032"/>
-</linearGradient>
-<path fill="url(#SVGID_3_)" d="M369,1981c-14.2,39.1-28.5,78.9-42.9,119.6c-0.2,0.6-0.4,1.2-0.6,1.8c-2,5.7-4.1,11.5-6.1,17.2
-	c-9.7,27.4-18,52.1-37.3,108.2c31.7,14.5,57.1,52.5,81.1,95.6c-2.6-44.7-21-86.6-56.2-119.1c156.1,7,290.6-32.4,360.1-146.6
-	c6.2-10.2,11.9-20.9,17-32.2c-31.6,40.1-70.8,57.1-144.5,53c-0.2,0.1-0.3,0.1-0.5,0.2c0.2-0.1,0.3-0.1,0.5-0.2
-	c108.6-48.6,163.1-95.3,211.2-172.6c11.4-18.3,22.5-38.4,33.8-60.6c-94.9,97.5-205,125.3-320.9,104.2l-86.9,9.5
-	C374.4,1966.3,371.7,1973.6,369,1981z"/>
-<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2418.5454" x2="-4461.8428" y2="-2418.5454" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_4_)" d="M409.6,1786.3c18.8-48.5,38.1-97.7,58-147.2c19-47.4,38.5-95.2,58.5-143.2
-	c20-48,40.4-96.1,61.2-144.2c21.2-49,42.9-97.8,64.9-146.5c21.8-48.1,44-95.9,66.6-143.3c8.1-17.1,16.3-34.1,24.6-51
-	c14.2-29.3,28.6-58.4,43.1-87.2c0.8-1.6,1.6-3.1,2.4-4.6L681.4,706.8c-1.8,2.9-3.5,5.8-5.3,8.6c-25.1,40.9-50,82.7-74.4,125.4
-	c-24.7,43.1-49,87.1-72.7,131.7c-20,37.6-39.6,75.6-58.6,113.9c-3.8,7.8-7.6,15.5-11.3,23.2c-23.4,48.2-44.6,94.8-63.7,139.5
-	c-21.7,50.7-40.7,99.2-57.5,145.1c-11,30.2-21,59.4-30.1,87.4c-7.5,24-14.7,47.9-21.5,71.8c-16,56.3-29.9,112.4-41.2,168.3
-	L353,1935.1c14.3-38.1,28.9-76.8,44-116C401.1,1808.2,405.4,1797.3,409.6,1786.3z"/>
-<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-7161.7642" y1="-2379.1431" x2="-5631.2524" y2="-2379.1431" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0" style="stop-color:#282662"/>
-	<stop  offset="9.548390e-02" style="stop-color:#662E8D"/>
-	<stop  offset="0.7882" style="stop-color:#9F2064"/>
-	<stop  offset="0.9487" style="stop-color:#CD2032"/>
-</linearGradient>
-<path fill="url(#SVGID_5_)" d="M243.5,1729.4c-13.6,68.2-23.2,136.2-28,203.8c-0.2,2.4-0.4,4.7-0.5,7.1
-	c-33.7-54-124-106.8-123.8-106.2c64.6,93.7,113.7,186.7,120.9,278c-34.6,7.1-82-3.2-136.8-23.3c57.1,52.5,100,67,116.7,70.9
-	c-52.5,3.3-107.1,39.3-162.1,80.8c80.5-32.8,145.5-45.8,192.1-35.3C148.1,2414.2,74.1,2645,0,2890c22.7-6.7,36.2-21.9,43.9-42.6
-	c13.2-44.4,100.8-335.6,238-718.2c3.9-10.9,7.8-21.8,11.8-32.9c1.1-3,2.2-6.1,3.3-9.2c14.5-40.1,29.5-81.1,45.1-122.9
-	c3.5-9.5,7.1-19,10.7-28.6c0.1-0.2,0.1-0.4,0.2-0.6l-107.9-213.2C244.6,1724.4,244,1726.9,243.5,1729.4z"/>
-<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2117.1309" x2="-4461.8428" y2="-2117.1309" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_6_)" d="M805.6,937c-3.1,6.3-6.2,12.7-9.3,19.1c-9.3,19.2-18.8,38.8-28.3,58.8
-	c-10.3,21.7-20.7,43.9-31.3,66.5c-5.3,11.4-10.6,22.9-16,34.6c-16.1,35-32.4,71.1-48.9,108.3c-20.3,45.8-41,93.4-62,142.8
-	c-20,47.1-40.3,95.9-60.9,146.3c-19.5,47.9-39.3,97.3-59.3,148.3c-17.8,45.4-35.9,92.1-54,140.1c-0.9,2.3-1.8,4.7-2.6,7
-	c-18,47.6-36.2,96.6-54.6,146.8c-0.4,1.1-0.8,2.3-1.3,3.4l86.9-9.5c-1.7-0.3-3.5-0.5-5.2-0.9c103.9-13,242.1-90.6,331.4-186.5
-	c41.1-44.2,78.5-96.3,113-157.3c25.7-45.4,49.8-95.8,72.8-151.5c20.1-48.7,39.4-101.4,58-158.6c-23.9,12.6-51.2,21.8-81.4,28.2
-	c-5.3,1.1-10.7,2.2-16.1,3.1c-5.5,1-11,1.8-16.6,2.6l0,0l0,0c0.1,0,0.1-0.1,0.2-0.1c96.9-37.3,158-109.2,202.4-197.4
-	c-25.5,17.4-66.9,40.1-116.6,51.1c-6.7,1.5-13.7,2.7-20.7,3.7c-1.7,0.3-3.5,0.6-5.2,0.8l0,0l0,0c0.1,0,0.1,0,0.1-0.1
-	c0,0,0.1,0,0.1,0l0,0c33.6-14.1,62-29.8,86.6-48.4c5.3-4,10.4-8.1,15.3-12.3c7.5-6.5,14.7-13.3,21.5-20.5c4.4-4.6,8.6-9.3,12.7-14.2
-	c9.6-11.5,18.7-23.9,27.1-37.3c2.6-4.1,5.1-8.3,7.6-12.6c3.2-6.2,6.3-12.3,9.3-18.3c13.5-27.2,24.4-51.5,33-72.8
-	c4.3-10.6,8.1-20.5,11.3-29.7c1.3-3.7,2.5-7.2,3.7-10.6c3.4-10.2,6.2-19.3,8.4-27.3c3.3-12,5.3-21.5,6.4-28.4l0,0l0,0
-	c-3.3,2.6-7.1,5.2-11.3,7.7c-29.3,17.5-79.5,33.4-119.9,40.8l79.8-8.8l-79.8,8.8c-0.6,0.1-1.2,0.2-1.8,0.3c-4,0.7-8.1,1.3-12.2,2
-	c0.7-0.3,1.4-0.7,2.1-1l-273,29.9C806.6,935,806.1,936,805.6,937z"/>
-<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-7554.8232" y1="-2132.0981" x2="-4642.5034" y2="-2132.0981" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_7_)" d="M1112.9,385.1c-24.3,37.3-50.8,79.6-79.4,127.5c-1.5,2.5-3,5.1-4.5,7.6
-	c-24.6,41.5-50.8,87.1-78.3,137c-23.8,43.1-48.5,89.3-74.3,139c-22.4,43.3-45.6,89.2-69.4,137.8l273-29.9
-	c79.5-36.6,115.1-69.7,149.6-117.6c9.2-13.2,18.4-27,27.5-41.3c28-43.8,55.6-92,80.1-139.9c23.7-46.3,44.7-92.2,60.7-133.5
-	c10.2-26.3,18.4-50.8,24.1-72.3c5-19,8.9-36.9,11.9-54.1C1327.9,363.5,1197.6,380.9,1112.9,385.1z"/>
-<path fill="#BE202E" d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
-<path opacity="0.35" fill="#BE202E" d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
-<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2027.484" x2="-4461.8433" y2="-2027.484" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_8_)" d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
-<path fill="#BE202E" d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
-<path opacity="0.35" fill="#BE202E" d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
-<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2037.7417" x2="-4461.8433" y2="-2037.7417" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_9_)" d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
-<path fill="#BE202E" d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7L980.2,1186.7
-	C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
-<path opacity="0.35" fill="#BE202E" d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7
-	L980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
-<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-5738.0635" y1="-2039.799" x2="-5094.3457" y2="-2039.799" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_10_)" d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7L980.2,1186.7
-	C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
-</svg>
+      .cls-3 {
+        fill: #dd552c;
+      }
+
+      .cls-4 {
+        fill: #d22128;
+      }
+    </style>
+  </defs>
+  <g>
+    <g>
+      <path class="cls-1" d="M458.8041825,181.7454822h49.0451573l87.4128103,220.0939304h-53.4548455l-14.7775045-38.0445002h-87.4060779l-15.0939249,38.0445002h-53.1384251l87.4128103-220.0939304ZM514.4537735,324.4914631l-31.1236462-80.4919562-30.8139581,80.4919562h61.9376043Z"/>
+      <path class="cls-1" d="M622.7166664,331.7220052h48.7354693c.3164204,21.0655178,16.0364536,33.3318564,40.2459781,33.3318564,20.7490974,0,33.9579648-8.4894912,33.9579648-23.2669957,0-15.4103452-14.1513961-24.5259448-45.2750423-31.4467989-51.5697879-10.6909691-76.0957328-32.0661749-76.0957328-68.2256176,0-39.9295577,31.7564869-64.7719229,82.3837461-64.7719229,52.189164,0,85.5210204,28.2960599,85.5210204,72.6285734h-48.1093609c0-19.8065687-13.8349757-31.7564869-36.7855511-31.7564869-21.0655178,0-33.9579648,8.8059116-33.9579648,23.2669957,0,13.5252877,11.6334979,22.0147789,45.2750423,29.8714294,54.7137946,12.892447,77.6643699,33.6415444,77.6643699,68.542038,0,41.5049272-32.0729073,66.3472924-84.2620713,66.3472924-55.339903,0-89.2978678-28.9289006-89.2978678-74.5203633Z"/>
+      <path class="cls-1" d="M852.9091193,181.7454822h137.7169167v45.2750423h-87.7224983v55.0234826h79.8591155v44.0228255h-79.8591155v75.7725801h-49.9944184v-220.0939304Z"/>
+    </g>
+    <g>
+      <path class="cls-3" d="M141.1077177,209.8881008c13.1869872-32.608129,27.9005344-65.1523006,43.6878912-93.9970469-23.5665852-17.5041056-46.1956909-55.2490163-55.4930639-71.9721694-3.3392448,3.7936783-5.5070609,8.1629723-6.4899838,11.7176522-8.7587851,31.6252061,22.4204029,69.8144518-2.6929393,55.86166-20.9241385-11.6267655-68.040478-37.0885068-86.0124818-11.7816095,20.1280383,25.862316,72.7733189,90.9304622,107.0005776,110.1715137Z"/>
+      <path class="cls-2" d="M184.7956089,115.8910539c15.2975784-27.9493439,31.5999598-52.4281623,48.5015202-70.0635487,0,0-16.8578001,24.4013964-40.9360438,73.180626,14.5822664,4.0158458,56.1124399,12.2562401,113.9601427-2.686207,1.4222086-10.5125619-5.645074-22.0753701-40.8636711-25.9464703-22.9926525-2.5246306,27.5975787-54.9023003-9.0516423-79.6739759-1.1832102-.8011494-2.3462234-1.508046-3.4856733-2.1408868-1.2286536-.4409688-2.5263137-.8449097-3.9114944-1.2050903-42.8025874-11.1689658-48.7354693,61.409115-65.8154369,45.8068978-27.6009449-25.2126444-45.0225792-19.3218396-53.890765-9.2435142,9.297373,16.7231532,31.9264787,54.4680639,55.4930639,71.9721694Z"/>
+      <path class="cls-4" d="M106.6818547,303.8380213c9.6626029-28.9457315,21.2860022-61.4663399,34.425863-93.9499204-34.2272587-19.2410514-86.8725393-84.3091977-107.0005776-110.1715137-3.5933909,5.0559936-6.0490149,12.1081284-6.8669953,21.7522173-4.3894911,51.802054,49.0518897,90.152876,38.3979485,97.1578844-14.0924881,9.2670774-42.1411341-22.2605096-53.19565-2.2284073,16.0229889,20.5841549,48.6614135,57.7770131,94.2394114,87.4397396Z"/>
+      <path class="cls-3" d="M254.7564893,192.1180675c-27.0589909-9.6508213,28.2758628-35.5333343,46.2445004-62.9912168,2.2990969-3.5109196,4.6756159-8.0485224,5.3202382-12.8049265-57.8477027,14.942447-99.3778763,6.7020527-113.9601427,2.686207-12.4649429,25.2564046-26.8587035,57.0835812-41.8701571,95.4579665,15.6341958,6.6852219,79.4703224,31.3794754,169.6366631,31.50739,15.1595653-39.4852227-39.6905594-44.6994265-65.3711019-53.8554202Z"/>
+      <path class="cls-4" d="M117.1371916,309.0488589c15.9001236,4.9550083,68.5841152,19.7560761,124.5366618,17.5276688,7.5166669-20.3518889-20.585838-22.3379316-22.8748364-38.6605101-1.7722907-12.6298854,73.9565291,10.6135471,98.3225807-35.3111668,1.2320197-2.3226602,2.1930625-4.5140395,3.0059935-6.6313631-90.1663407-.1279146-154.0024672-24.8221682-169.6366631-31.50739-10.9703615,28.0435968-22.2554604,59.5173251-33.3537365,94.5827612Z"/>
+      <path class="cls-1" d="M117.1371916,309.0488589c-7.1447046,22.5701977-14.1934733,46.6821031-21.0352222,72.1640414-2.4270116,9.0348114-4.8254106,18.2379315-7.190148,27.6430221,53.1064464,17.531035,102.0085414.0403941,103.6663821-21.6377674.0134647-.1716749-.018514-.2995895-.0084154-.464532,1.2639984-22.9606739-33.150083-10.2331694-32.3354689-24.0378496.8179803-13.9056654,60.0811593-.0807882,78.4082944-29.8949926,1.4053777-2.2856322,2.3209771-4.3154353,3.0312398-6.244253-55.9525467,2.2284073-108.6365383-12.5726604-124.5366618-17.5276688Z"/>
+      <path class="cls-1" d="M12.4424433,216.3982816c-.7742201,1.4036946-1.4727012,3.0261906-2.068514,4.9651069-10.2920775,33.4496725,62.4846076,78.3847312,52.5830064,88.180298-8.9254108,8.8261086-20.5572255-11.3440069-34.9004936-3.0127259-1.5720033.9155994-3.1675699,2.0701971-4.8052136,3.749918-16.2215932,16.6188018-.2541461,64.4958967,45.7698699,90.0518908-10.7397786,36.0618236-21.4324308,76.351562-31.8995493,118.4859638,3.7970444-1.3296388,8.3413795-2.6626438,9.4724141-6.244253,1.6982349-6.9814452,12.1939658-49.4625629,29.2352225-107.0948305,0,0,3.1103449-11.8051727,8.8042285-31.254927,5.2646964-17.9854685,12.7460184-42.5147795,22.0484407-70.3867014-45.577998-29.6627266-78.2164225-66.8555847-94.2394114-87.4397396Z"/>
+    </g>
+  </g>
+  <g>
+    <polygon class="cls-1" points="404.1671788 144.7351535 413.43089 144.7351535 413.43089 82.5349876 436.7786739 82.5349876 436.7786739 73.4732468 380.8193949 73.4732468 380.8193949 82.5349876 404.1671788 82.5349876 404.1671788 144.7351535"/>
+    <polygon class="cls-1" points="464.8525663 112.9584696 501.321697 112.9584696 501.321697 144.7351535 510.6796611 144.7351535 510.6796611 73.4732468 501.321697 73.4732468 501.321697 103.8899964 464.8525663 103.8899964 464.8525663 73.4732468 455.5955874 73.4732468 455.5955874 144.7351535 464.8525663 144.7351535 464.8525663 112.9584696"/>
+    <polygon class="cls-1" points="581.40298 135.9629037 546.2331925 135.9629037 546.2331925 112.8574844 577.8213707 112.8574844 577.8213707 104.0852345 546.2331925 104.0852345 546.2331925 82.1512438 580.3392689 82.1512438 580.3392689 73.4732468 536.9762136 73.4732468 536.9762136 144.7351535 581.40298 144.7351535 581.40298 135.9629037"/>
+  </g>
+</svg>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/docs/index.html tomcat-native-1.3.8/docs/index.html
--- tomcat-native-1.3.1/docs/index.html	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/docs/index.html	2026-06-12 05:13:55.000000000 -0300
@@ -1,5 +1,5 @@
 <!DOCTYPE html SYSTEM "about:legacy-compat">
-<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="./images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - Documentation Index</title><meta name="author" content="Jean-Frederic Clere"></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="miscellaneous/changelog.html">Changelog</a></li><li><a href="miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Documentation Index</h2><h3 id="Introduction">Introduction</h3><div class="text">
+<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="./images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - Documentation Index</title><meta name="author" content="Jean-Frederic Clere"></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="miscellaneous/changelog.html">Changelog</a></li><li><a href="miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="news/2026.html">2026</a></li><li><a href="news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Documentation Index</h2><h3 id="Introduction">Introduction</h3><div class="text">
 
   <p>
     The Apache Tomcat Native Library is an optional component for use with
@@ -28,10 +28,10 @@
 </div><h3 id="Headlines">Headlines</h3><div class="text">
 <ul>
 
-<li><a href="news/2024.html#20240208">12 February 2024 - <b>TC-Native-1.3.0
+<li><a href="news/2026.html#20260310">10 March 2026 - <b>Tomcat-Native-1.3.7
 released</b></a>
 <p>The Apache Tomcat team is proud to announce the immediate availability of
-Tomcat Native 1.3.0 Stable.</p>
+Tomcat Native 1.3.7 Stable.</p>
 <p>
 The sources and the binaries for selected platforms are available from the
 <a href="../download-native.cgi">Download page</a>.
@@ -40,6 +40,10 @@
 Please see the <a href="miscellaneous/changelog.html">Changelog</a> for a full
 list of changes.
 </p>
+<p>
+Note: End of support for Tomcat Native 1.3.x has been announced as 31 March
+2027.
+</p>
 </li>
 </ul>
 </div><h3 id="Building">Building</h3><div class="text">
@@ -189,5 +193,5 @@
 </div></div>
 
 </div></div></div></div></div><footer><div id="footer">
-    Copyright © 2008-2024, The Apache Software Foundation
+    Copyright © 2008-2026, The Apache Software Foundation
   </div></footer></div></body></html>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/docs/miscellaneous/changelog.html tomcat-native-1.3.8/docs/miscellaneous/changelog.html
--- tomcat-native-1.3.1/docs/miscellaneous/changelog.html	2024-07-18 06:40:34.000000000 -0300
+++ tomcat-native-1.3.8/docs/miscellaneous/changelog.html	2026-06-12 05:13:55.000000000 -0300
@@ -1,10 +1,146 @@
 <!DOCTYPE html SYSTEM "about:legacy-compat">
-<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="../images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation - </title></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="../index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="../miscellaneous/changelog.html">Changelog</a></li><li><a href="../miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="../news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2></h2><h3 id="Preface">Preface</h3><div class="text">
+<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="../images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation - </title></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="../index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="../miscellaneous/changelog.html">Changelog</a></li><li><a href="../miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="../news/2026.html">2026</a></li><li><a href="../news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2></h2><h3 id="Preface">Preface</h3><div class="text">
   <p>
   This is the Changelog for Tomcat Native 1.3.x. The Tomcat Native 1.3.x branch
   started from the 1.2.39 tag.
   </p>
-</div><h3 id="Changes_in_1.3.1">Changes in 1.3.1</h3><div class="text">
+</div><h3 id="1.3.8"><span style="float: right;"></span> 1.3.8</h3><div class="text">
+  <ul class="changelog">
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Fix a memory leak when parsing certificates. Pull request <a href="https://github.com/apache/tomcat-native/pull/44">#44</a>
+      provided by chenjp. (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Fix two potential memory leaks on error paths identified by Copilot.
+      (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=69988">69988</a>: Fix post handshake authentication when Tomcat is
+      configured with a trust store using JSSE style configuration. (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=70102">70102</a>: Correct expected size of tickets when calling
+      <code>SSLContext.setSessionTicketKeys</code>. (markt)
+    </li>
+  </ul>
+</div><h3 id="1.3.7"><span style="float: right;">2026-03-10</span> 1.3.7</h3><div class="text">
+  <ul class="changelog">
+    <li><img alt="Code: " class="icon" src="../images/code.gif">
+      Refactor access to ASN1_OCTET_STRING to use setters to fix errors when
+      building against the latest OpenSSL 4.0.x code. (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Fix the handling of OCSP requests with multiple responder URIs. (jfclere)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Fix the handling of <code>TRY_AGAIN</code> responses to OCSP requests when
+      soft fail is disabled. (jfclere)
+    </li>
+  </ul>
+</div><h3 id="1.3.6"><span style="float: right;">2026-02-11</span> 1.3.6</h3><div class="text">
+  <ul class="changelog">
+    <li><img alt="Code: " class="icon" src="../images/code.gif">
+      Refactor the SSL_CONF_CTX clean-up to align it with SSL and SSL_CTX
+      clean-up. (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Fix unnecessarily large buffer allocation when filtering out NULL and
+      export ciphers. Pull requests <a href="https://github.com/apache/tomcat-native/pull/35">#35</a> and <a href="https://github.com/apache/tomcat-native/pull/37">#37</a> provided by
+      chenjp. (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Fix a potential memory leak if an invalid <code>OpenSSLConf</code> is
+      provided. Pull request <a href="https://github.com/apache/tomcat-native/pull/36">#36</a> provided by chenjp. (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Refactor setting of OCSP configuration defaults as they were only applied
+      if the SSL_CONF_CTX was used. While one was always used with Tomcat
+      versions aware of the OCSP configuration options, one was not always used
+      with Tomcat versions unaware of the OCSP configuration options leading to
+      OCSP verification being enabled by default when the expected behaviour was
+      disabled by default. (markt)
+    </li>
+    <li><img alt="Code: " class="icon" src="../images/code.gif">
+      Improve performance for the rare case of handling large OCSP responses.
+      (markt)
+    </li>
+  </ul>
+</div><h3 id="1.3.5"><span style="float: right;">2026-01-19</span> 1.3.5</h3><div class="text">
+  <ul class="changelog">
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Remove group write permissions from the files in the tar.gz source
+      archive. (markt)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Clear an additional error in OCSP processing that was preventing OCSP soft
+      fail working with Tomcat's APR/native connector. (markt)
+    </li>
+  </ul>
+</div><h3 id="1.3.4"><span style="float: right;">2026-01-12</span> 1.3.4</h3><div class="text">
+  <ul class="changelog">
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Correct logic error that prevented the configuration of TLS 1.3 cipher
+      suites. (markt)
+    </li>
+  </ul>
+</div><h3 id="1.3.3"><span style="float: right;">not released</span> 1.3.3</h3><div class="text">
+  <ul class="changelog">
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Refactor the addition of TLS 1.3 cipher suite configuration to avoid a
+      regression when running a version of Tomcat that pre-dates this change.
+      (markt)
+    </li>
+  </ul>
+</div><h3 id="1.3.2"><span style="float: right;">not released</span> 1.3.2</h3><div class="text">
+  <ul class="changelog">
+    <li><img alt="Update: " class="icon" src="../images/update.gif">
+      Rename configure.in to modern autotools style configure.ac. (rjung)
+    </li>
+    <li><img alt="Update: " class="icon" src="../images/update.gif">
+      Fix incomplete updates for autotools generated files during "buildconf" execution. (rjung)
+    </li>
+    <li><img alt="Update: " class="icon" src="../images/update.gif">
+      Improve quoting in tcnative.m4. (rjung)
+    </li>
+    <li><img alt="Update: " class="icon" src="../images/update.gif">
+      Update the minimum version of autoconf for releasing to 2.68. (rjung)
+    </li>
+    <li><img alt="Fix: " class="icon" src="../images/fix.gif">
+      Fix the autoconf warnings when creating a release. (markt)
+    </li>
+    <li><img alt="Update: " class="icon" src="../images/update.gif">
+      The Windows binaries are now built with OCSP support enabled by default.
+      (markt)
+    </li>
+    <li><img alt="Add: " class="icon" src="../images/add.gif">
+      Include a nonce with OCSP requests and check the nonce, if any, in the
+      OCSP response. (markt)
+    </li>
+    <li><img alt="Add: " class="icon" src="../images/add.gif">
+      Expand verification of OCSP responses. (markt)
+    </li>
+    <li><img alt="Add: " class="icon" src="../images/add.gif">
+      Add the ability to configure the OCSP checks to soft-fail - i.e. if the
+      responder cannot be contacted or fails to respond in a timely manner the
+      OCSP check will not fail. (markt)
+    </li>
+    <li><img alt="Add: " class="icon" src="../images/add.gif">
+      Add a configurable timeout to the writing of OCSP requests and reading of
+      OCSP responses. (markt)
+    </li>
+    <li><img alt="Add: " class="icon" src="../images/add.gif">
+      Add the ability to control the OCSP verification flags. (markt)
+    </li>
+    <li><img alt="Add: " class="icon" src="../images/add.gif">
+      Configure TLS 1.3 connections from the provided ciphers list as well as
+      connections using TLS 1.2 and earlier. Pull request provided by gastush.
+      (markt)
+    </li>
+    <li><img alt="Update: " class="icon" src="../images/update.gif">
+      Update the Windows build environment to use Visual Studio 2022. (markt)
+    </li>
+  </ul>
+</div><h3 id="1.3.1"><span style="float: right;">2024-07-24</span> 1.3.1</h3><div class="text">
   <ul class="changelog">
     <li><img alt="Fix: " class="icon" src="../images/fix.gif">
       Fix a crash on Windows when <code>SSLContext.setCACertificate()</code>
@@ -25,7 +161,7 @@
       Update the recommended minimum version of OpenSSL to 3.0.14. (markt)
     </li>
   </ul>
-</div><h3 id="Changes_in_1.3.0">Changes in 1.3.0</h3><div class="text">
+</div><h3 id="1.3.0"><span style="float: right;">2024-02-12</span> 1.3.0</h3><div class="text">
   <ul class="changelog">
     <li><img alt="Update: " class="icon" src="../images/update.gif">
       Drop useless <code>compile.optimize</code> option. (michaelo)
@@ -63,5 +199,5 @@
 <p>Please see the <a href="../../native-1.1-doc/miscellaneous/changelog.html">1.1.x
    changelog</a>.</p>
 </div></div></div></div></div><footer><div id="footer">
-    Copyright © 2008-2024, The Apache Software Foundation
+    Copyright © 2008-2026, The Apache Software Foundation
   </div></footer></div></body></html>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/docs/miscellaneous/tls-renegotiation.html tomcat-native-1.3.8/docs/miscellaneous/tls-renegotiation.html
--- tomcat-native-1.3.1/docs/miscellaneous/tls-renegotiation.html	2024-07-18 06:40:34.000000000 -0300
+++ tomcat-native-1.3.8/docs/miscellaneous/tls-renegotiation.html	2026-06-12 05:13:55.000000000 -0300
@@ -1,5 +1,5 @@
 <!DOCTYPE html SYSTEM "about:legacy-compat">
-<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="../images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation - </title></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="../index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="../miscellaneous/changelog.html">Changelog</a></li><li><a href="../miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="../news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2></h2><h3 id="Introduction">Introduction</h3><div class="text">
+<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="../images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation - </title></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3 - Miscellaneous Documentation</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="../index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="../miscellaneous/changelog.html">Changelog</a></li><li><a href="../miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="../news/2026.html">2026</a></li><li><a href="../news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2></h2><h3 id="Introduction">Introduction</h3><div class="text">
   <p>
   Historically there have been security issues associated with TLS
   renegotiation. This page describes the renegotiation behaviour of the Tomcat
@@ -18,5 +18,5 @@
   <code>SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION</code> is set.
   </p>
 </div></div></div></div></div><footer><div id="footer">
-    Copyright © 2008-2024, The Apache Software Foundation
+    Copyright © 2008-2026, The Apache Software Foundation
   </div></footer></div></body></html>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/docs/news/2024.html tomcat-native-1.3.8/docs/news/2024.html
--- tomcat-native-1.3.1/docs/news/2024.html	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/docs/news/2024.html	2026-06-12 05:13:55.000000000 -0300
@@ -1,11 +1,11 @@
 <!DOCTYPE html SYSTEM "about:legacy-compat">
-<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="../images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - News - 2024 News and Status</title></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3 - News</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="../index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="../miscellaneous/changelog.html">Changelog</a></li><li><a href="../miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="../news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>2024 News and Status</h2><h3 id="2024_News_&_Status">2024 News & Status</h3><div class="text">
+<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="../images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - News - 2024 News and Status</title></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3 - News</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="../index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="../miscellaneous/changelog.html">Changelog</a></li><li><a href="../miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="../news/2026.html">2026</a></li><li><a href="../news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>2024 News and Status</h2><h3 id="2024_News_&_Status">2024 News & Status</h3><div class="text">
     
-      <div class="subsection"><h4 id="20240208">12 February 2024 - TC-Native-1.3.0 released</h4><div class="text">
+      <div class="subsection"><h4 id="20240724">24 July 2024 - TC-Native-1.3.1 released</h4><div class="text">
         <p>The Apache Tomcat team is proud to announce the immediate
-        availability of Tomcat Native 1.3.0.</p>
+        availability of Tomcat Native 1.3.1.</p>
       </div></div>
       
     </div></div></div></div></div><footer><div id="footer">
-    Copyright © 2008-2024, The Apache Software Foundation
+    Copyright © 2008-2026, The Apache Software Foundation
   </div></footer></div></body></html>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/docs/news/2026.html tomcat-native-1.3.8/docs/news/2026.html
--- tomcat-native-1.3.1/docs/news/2026.html	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/docs/news/2026.html	2026-06-12 05:13:55.000000000 -0300
@@ -0,0 +1,26 @@
+<!DOCTYPE html SYSTEM "about:legacy-compat">
+<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><link href="../images/style.css" rel="stylesheet" type="text/css"><title>The Apache Tomcat Native Library 1.3 - News - 2026 News and Status</title></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>The Apache Tomcat Native Library 1.3 - News</h1><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2><strong>Links</strong></h2><ul><li><a href="../index.html">Docs Home</a></li></ul></div><div><h2><strong>Miscellaneous Documentation</strong></h2><ul><li><a href="../miscellaneous/changelog.html">Changelog</a></li><li><a href="../miscellaneous/tls-renegotiation.html">TLS renegotiation</a></li></ul></div><div><h2><strong>News</strong></h2><ul><li><a href="../news/2026.html">2026</a></li><li><a href="../news/2024.html">2024</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>2026 News and Status</h2><h3 id="2026_News_&_Status">2026 News & Status</h3><div class="text">
+    
+      <div class="subsection"><h4 id="20260310">10 March 2026 - Tomcat-Native-1.3.7 released</h4><div class="text">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.7.</p>
+      </div></div>
+      
+      <div class="subsection"><h4 id="20260211">11 February 2026 - Tomcat-Native-1.3.6 released</h4><div class="text">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.6.</p>
+      </div></div>
+      
+      <div class="subsection"><h4 id="20260119">19 January 2026 - Tomcat-Native-1.3.5 released</h4><div class="text">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.5.</p>
+      </div></div>
+      
+      <div class="subsection"><h4 id="20260112">12 January 2026 - Tomcat-Native-1.3.4 released</h4><div class="text">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.4.</p>
+      </div></div>
+      
+    </div></div></div></div></div><footer><div id="footer">
+    Copyright © 2008-2026, The Apache Software Foundation
+  </div></footer></div></body></html>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/.gitignore tomcat-native-1.3.8/.gitignore
--- tomcat-native-1.3.1/.gitignore	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/.gitignore	2026-06-11 17:01:29.000000000 -0300
@@ -11,7 +11,9 @@
 /native/build-outputs.mk
 /native/build/apr_common.m4
 /native/build/config.guess
+/native/build/config.guess~
 /native/build/config.sub
+/native/build/config.sub~
 /native/build/find_apr.m4
 /native/build/install.sh
 /native/build/install-sh
@@ -29,6 +31,13 @@
 /native/tcnative.pc
 /native/tcnative.spec
 
+/native/srclib/apr/*
+!/native/srclib/apr/NMAKEmakefile
+
+/native/srclib/openssl/*
+!/native/srclib/openssl/.gitkeep
+
+/native/*RELEASE
 /tomcat-native-*
 /tomcat-native-*/
 
@@ -36,3 +45,4 @@
 **/*.o
 
 build.properties
+/bin/
diff -Nru tomcat-native-1.3.1/HOWTO-RELEASE.txt tomcat-native-1.3.8/HOWTO-RELEASE.txt
--- tomcat-native-1.3.1/HOWTO-RELEASE.txt	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/HOWTO-RELEASE.txt	2026-06-11 17:01:29.000000000 -0300
@@ -21,9 +21,9 @@
 Requirements
 ------------
 
-Java 8
+Java 8 or later
 Apache Ant 1.9 or later
-Apache APR 1.6.3 or later source (1.7.4 or later recommended)
+Apache APR 1.6.3 or later source (1.7.6 or later recommended)
 
 
 Preparation
@@ -58,6 +58,7 @@
 # Edit files to remove / disable dev build flags
 # - build.properties.default
 # - tcn_version.h
+# - changelog.xml (clear rtext) 
 
 # Confirm the previous edits
 git diff
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Address.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Address.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Address.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Address.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,44 +17,46 @@
 package org.apache.tomcat.jni;
 
 /**
- * Address
+ * Address.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Address {
 
     public static final String APR_ANYADDR = "0.0.0.0";
+
     /**
      * Fill the Sockaddr class from apr_sockaddr_t
+     *
      * @param info Sockaddr class to fill
-     * @param sa Structure pointer
+     * @param sa   Structure pointer
+     *
      * @return <code>true</code> if the operation was successful
      */
     public static native boolean fill(Sockaddr info, long sa);
 
     /**
      * Create the Sockaddr object from apr_sockaddr_t
+     *
      * @param sa Structure pointer
+     *
      * @return the socket address
      */
     public static native Sockaddr getInfo(long sa);
 
     /**
      * Create apr_sockaddr_t from hostname, address family, and port.
-     * @param hostname The hostname or numeric address string to resolve/parse, the
-     *                 path of the Unix Domain Socket, or NULL to build an address
-     *                 that corresponds to 0.0.0.0 or ::
-     * @param family The address family to use, or APR_UNSPEC if the system should
-     *               decide.
-     * @param port The port number.
-     * @param flags Special processing flags:
-     * <PRE>
+     *
+     * @param hostname The hostname or numeric address string to resolve/parse, the path of the Unix Domain Socket, or
+     *                     NULL to build an address that corresponds to 0.0.0.0 or ::
+     * @param family   The address family to use, or APR_UNSPEC if the system should decide.
+     * @param port     The port number.
+     * @param flags    Special processing flags:
+     *
+     *                     <PRE>
      *       APR_IPV4_ADDR_OK          first query for IPv4 addresses; only look
      *                                 for IPv6 addresses if the first query failed;
      *                                 only valid if family is APR_UNSPEC and hostname
@@ -65,56 +67,65 @@
      *                                 only valid if family is APR_UNSPEC and hostname
      *                                 isn't NULL and APR_HAVE_IPV6; mutually exclusive
      *                                 with APR_IPV4_ADDR_OK
-     * </PRE>
-     * @param p The pool for the apr_sockaddr_t and associated storage.
+     *                     </PRE>
+     *
+     * @param p        The pool for the apr_sockaddr_t and associated storage.
+     *
      * @return The new apr_sockaddr_t.
+     *
      * @throws Exception Operation failed
      */
-    public static native long info(String hostname, int family,
-                                   int port, int flags, long p)
-        throws Exception;
+    public static native long info(String hostname, int family, int port, int flags, long p) throws Exception;
+
     /**
      * Look up the host name from an apr_sockaddr_t.
-     * @param sa The apr_sockaddr_t.
+     *
+     * @param sa    The apr_sockaddr_t.
      * @param flags Special processing flags.
+     *
      * @return The hostname.
      */
     public static native String getnameinfo(long sa, int flags);
 
     /**
-     * Return the IP address (in numeric address string format) in
-     * an APR socket address.  APR will allocate storage for the IP address
-     * string from the pool of the apr_sockaddr_t.
+     * Return the IP address (in numeric address string format) in an APR socket address. APR will allocate storage for
+     * the IP address string from the pool of the apr_sockaddr_t.
+     *
      * @param sa The socket address to reference.
+     *
      * @return The IP address.
      */
     public static native String getip(long sa);
 
     /**
      * Given an apr_sockaddr_t and a service name, set the port for the service
+     *
      * @param sockaddr The apr_sockaddr_t that will have its port set
      * @param servname The name of the service you wish to use
+     *
      * @return APR status code.
      */
     public static native int getservbyname(long sockaddr, String servname);
 
     /**
      * Return an apr_sockaddr_t from an apr_socket_t
+     *
      * @param which Which interface do we want the apr_sockaddr_t for?
-     * @param sock The socket to use
+     * @param sock  The socket to use
+     *
      * @return The returned apr_sockaddr_t.
+     *
      * @throws Exception An error occurred
      */
-    public static native long get(int which, long sock)
-        throws Exception;
+    public static native long get(int which, long sock) throws Exception;
 
     /**
-     * See if the IP addresses in two APR socket addresses are
-     * equivalent.  Appropriate logic is present for comparing
+     * See if the IP addresses in two APR socket addresses are equivalent. Appropriate logic is present for comparing
      * IPv4-mapped IPv6 addresses with IPv4 addresses.
      *
      * @param a One of the APR socket addresses.
      * @param b The other APR socket address.
+     *
      * @return <code>true</code> if the addresses are equal
      */
     public static native boolean equal(long a, long b);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/AprStatus.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/AprStatus.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/AprStatus.java	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/AprStatus.java	2026-06-11 17:01:29.000000000 -0300
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomcat.jni;
+
+/**
+ * Holds APR status without the need to load other classes.
+ */
+public class AprStatus {
+    private static volatile boolean aprInitialized = false;
+    private static volatile boolean aprAvailable = false;
+    private static volatile boolean useAprConnector = false;
+    private static volatile boolean useOpenSSL = true;
+    private static volatile boolean instanceCreated = false;
+    private static volatile int openSSLVersion = 0;
+
+    /**
+     * Prevents instantiation.
+     */
+    private AprStatus() {
+    }
+
+    /**
+     * Returns whether APR has been initialized.
+     *
+     * @return {@code true} if APR has been initialized
+     */
+    public static boolean isAprInitialized() {
+        return aprInitialized;
+    }
+
+    /**
+     * Returns whether APR is available.
+     *
+     * @return {@code true} if APR is available
+     */
+    public static boolean isAprAvailable() {
+        return aprAvailable;
+    }
+
+    public static boolean getUseAprConnector() {
+        return useAprConnector;
+    }
+
+    /**
+     * Returns whether OpenSSL is in use.
+     *
+     * @return {@code true} if OpenSSL is in use
+     */
+    public static boolean getUseOpenSSL() {
+        return useOpenSSL;
+    }
+
+    /**
+     * Returns whether an APR instance has been created.
+     *
+     * @return {@code true} if an APR instance has been created
+     */
+    public static boolean isInstanceCreated() {
+        return instanceCreated;
+    }
+
+    /**
+     * Sets the APR initialized status.
+     *
+     * @param aprInitialized the APR initialized status to set
+     */
+    public static void setAprInitialized(boolean aprInitialized) {
+        AprStatus.aprInitialized = aprInitialized;
+    }
+
+    /**
+     * Sets the APR available status.
+     *
+     * @param aprAvailable the APR available status to set
+     */
+    public static void setAprAvailable(boolean aprAvailable) {
+        AprStatus.aprAvailable = aprAvailable;
+    }
+
+    public static void setUseAprConnector(boolean useAprConnector) {
+        AprStatus.useAprConnector = useAprConnector;
+    }
+
+    /**
+     * Sets whether to use OpenSSL.
+     *
+     * @param useOpenSSL the use OpenSSL status to set
+     */
+    public static void setUseOpenSSL(boolean useOpenSSL) {
+        AprStatus.useOpenSSL = useOpenSSL;
+    }
+
+    /**
+     * Sets the instance created status.
+     *
+     * @param instanceCreated the instance created status to set
+     */
+    public static void setInstanceCreated(boolean instanceCreated) {
+        AprStatus.instanceCreated = instanceCreated;
+    }
+
+    /**
+     * Returns the OpenSSL version.
+     *
+     * @return the openSSLVersion
+     */
+    public static int getOpenSSLVersion() {
+        return openSSLVersion;
+    }
+
+    /**
+     * Sets the OpenSSL version.
+     *
+     * @param openSSLVersion the openSSLVersion to set
+     */
+    public static void setOpenSSLVersion(int openSSLVersion) {
+        AprStatus.openSSLVersion = openSSLVersion;
+    }
+
+}
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/BIOCallback.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/BIOCallback.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/BIOCallback.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/BIOCallback.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,39 +17,45 @@
 package org.apache.tomcat.jni;
 
 /**
- * Open SSL BIO Callback Interface
+ * Open SSL BIO Callback Interface.
  *
- * @author Mladen Turk
- *
- * @deprecated Unused. Will be removed in Tomcat 10.1
+ * @deprecated Unused. Will be removed in Tomcat 9.1 an has been removed in Tomcat 10.1.
  */
 @Deprecated
 public interface BIOCallback {
 
     /**
      * Write data
+     *
      * @param buf containing the bytes to write.
+     *
      * @return Number of characters written.
      */
-    int write(byte [] buf);
+    int write(byte[] buf);
 
     /**
      * Read data
+     *
      * @param buf buffer to store the read bytes.
+     *
      * @return number of bytes read.
      */
-    int read(byte [] buf);
+    int read(byte[] buf);
 
     /**
      * Puts string
+     *
      * @param data String to write
+     *
      * @return Number of characters written
      */
     int puts(String data);
 
     /**
      * Read string up to the len or CLRLF
+     *
      * @param len Maximum number of characters to read
+     *
      * @return String with up to len bytes read
      */
     String gets(int len);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Buffer.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Buffer.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Buffer.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Buffer.java	2026-06-11 17:01:29.000000000 -0300
@@ -19,14 +19,18 @@
 import java.nio.ByteBuffer;
 
 /**
- * Provides utilities related to the use of directly allocated
- * {@link ByteBuffer} instances with native code.
+ * Provides utilities related to the use of directly allocated {@link ByteBuffer} instances with native code.
  */
 public class Buffer {
 
+    /** Utility class - do not instantiate. */
+    private Buffer() { }
+
     /**
      * Allocate a new ByteBuffer from memory
+     *
      * @param size The amount of memory to allocate
+     *
      * @return The ByteBuffer with allocated memory
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -36,8 +40,10 @@
 
     /**
      * Allocate a new ByteBuffer from memory and set all of the memory to 0
-     * @param num Number of elements.
+     *
+     * @param num  Number of elements.
      * @param size Length in bytes of each element.
+     *
      * @return The ByteBuffer with allocated memory
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -47,8 +53,10 @@
 
     /**
      * Allocate a new ByteBuffer from a pool
-     * @param p The pool to allocate from
+     *
+     * @param p    The pool to allocate from
      * @param size The amount of memory to allocate
+     *
      * @return The ByteBuffer with allocated memory
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -58,8 +66,10 @@
 
     /**
      * Allocate a new ByteBuffer from a pool and set all of the memory to 0
-     * @param p The pool to allocate from
+     *
+     * @param p    The pool to allocate from
      * @param size The amount of memory to allocate
+     *
      * @return The ByteBuffer with allocated memory
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -68,11 +78,12 @@
     public static native ByteBuffer pcalloc(long p, int size);
 
     /**
-     * Allocate a new ByteBuffer from already allocated memory.
-     * <br>Allocated memory must be provided from call to the
-     * Stdlib.alloc or Stdlib.calloc methods.
-     * @param mem The memory to use
+     * Allocate a new ByteBuffer from already allocated memory. <br>
+     * Allocated memory must be provided from call to the Stdlib.alloc or Stdlib.calloc methods.
+     *
+     * @param mem  The memory to use
      * @param size The amount of memory to use
+     *
      * @return The ByteBuffer with attached memory
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -81,9 +92,9 @@
     public static native ByteBuffer create(long mem, int size);
 
     /**
-     * Deallocates or frees a memory block used by ByteBuffer
-     * <br><b>Warning :</b> Call this method only on ByteBuffers
-     * that were created by calling Buffer.alloc or Buffer.calloc.
+     * Deallocates or frees a memory block used by ByteBuffer <br>
+     * <b>Warning :</b> Call this method only on ByteBuffers that were created by calling Buffer.alloc or Buffer.calloc.
+     *
      * @param buf Previously allocated ByteBuffer to be freed.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -102,7 +113,9 @@
 
     /**
      * Returns the allocated memory size of the ByteBuffer.
+     *
      * @param buf Previously allocated ByteBuffer.
+     *
      * @return the size
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/CertificateVerifier.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/CertificateVerifier.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/CertificateVerifier.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/CertificateVerifier.java	2026-06-11 17:01:29.000000000 -0300
@@ -22,13 +22,14 @@
 public interface CertificateVerifier {
 
     /**
-     * Returns {@code true} if the passed in certificate chain could be verified and so the handshake
-     * should be successful, {@code false} otherwise.
+     * Returns {@code true} if the passed in certificate chain could be verified and so the handshake should be
+     * successful, {@code false} otherwise.
      *
-     * @param ssl               the SSL instance
-     * @param x509              the {@code X509} certificate chain
-     * @param authAlgorithm     the auth algorithm
-     * @return verified         {@code true} if verified successful, {@code false} otherwise
+     * @param ssl           the SSL instance
+     * @param x509          the {@code X509} certificate chain
+     * @param authAlgorithm the auth algorithm
+     *
+     * @return verified {@code true} if verified successful, {@code false} otherwise
      */
     boolean verify(long ssl, byte[][] x509, String authAlgorithm);
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Directory.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Directory.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Directory.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Directory.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,79 +17,85 @@
 package org.apache.tomcat.jni;
 
 /**
- * Directory
+ * Directory.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Directory {
 
     /**
      * Create a new directory on the file system.
+     *
      * @param path the path for the directory to be created. (use / on all systems)
      * @param perm Permissions for the new directory.
      * @param pool the pool to use.
+     *
      * @return the operation result
      */
     public static native int make(String path, int perm, long pool);
 
     /**
-     * Creates a new directory on the file system, but behaves like
-     * 'mkdir -p'. Creates intermediate directories as required. No error
-     * will be reported if PATH already exists.
+     * Creates a new directory on the file system, but behaves like 'mkdir -p'. Creates intermediate directories as
+     * required. No error will be reported if PATH already exists.
+     *
      * @param path the path for the directory to be created. (use / on all systems)
      * @param perm Permissions for the new directory.
      * @param pool the pool to use.
+     *
      * @return the operation result
      */
     public static native int makeRecursive(String path, int perm, long pool);
 
     /**
      * Remove directory from the file system.
+     *
      * @param path the path for the directory to be removed. (use / on all systems)
      * @param pool the pool to use.
+     *
      * @return the operation result
      */
     public static native int remove(String path, long pool);
 
     /**
      * Find an existing directory suitable as a temporary storage location.
+     *
      * @param pool The pool to use for any necessary allocations.
-     * @return The temp directory.
      *
-     * This function uses an algorithm to search for a directory that an
-     * an application can use for temporary storage.  Once such a
-     * directory is found, that location is cached by the library.  Thus,
-     * callers only pay the cost of this algorithm once if that one time
-     * is successful.
+     * @return The temp directory. This function uses an algorithm to search for a directory that an an application can
+     *             use for temporary storage. Once such a directory is found, that location is cached by the library.
+     *             Thus, callers only pay the cost of this algorithm once if that one time is successful.
      */
     public static native String tempGet(long pool);
 
     /**
      * Open the specified directory.
+     *
      * @param dirname The full path to the directory (use / on all systems)
-     * @param pool The pool to use.
+     * @param pool    The pool to use.
+     *
      * @return The opened directory descriptor.
+     *
      * @throws Error An error occurred
      */
-    public static native long open(String dirname, long pool)
-        throws Error;
+    public static native long open(String dirname, long pool) throws Error;
 
     /**
      * close the specified directory.
+     *
      * @param thedir the directory descriptor to close.
+     *
      * @return the operation result
      */
     public static native int close(long thedir);
 
     /**
      * Rewind the directory to the first entry.
+     *
      * @param thedir the directory descriptor to rewind.
+     *
      * @return the operation result
      */
     public static native int rewind(long thedir);
@@ -97,10 +103,11 @@
 
     /**
      * Read the next entry from the specified directory.
-     * @param finfo the file info structure and filled in by apr_dir_read
+     *
+     * @param finfo  the file info structure and filled in by apr_dir_read
      * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
-     * @param thedir the directory descriptor returned from apr_dir_open
-     * No ordering is guaranteed for the entries read.
+     * @param thedir the directory descriptor returned from apr_dir_open No ordering is guaranteed for the entries read.
+     *
      * @return the operation result
      */
     public static native int read(FileInfo finfo, int wanted, long thedir);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Error.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Error.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Error.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Error.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,11 +17,9 @@
 package org.apache.tomcat.jni;
 
 /**
- * Error
+ * Error.
  *
- * @author Mladen Turk
- *
- * @deprecated Unused. Will be removed in Tomcat 10.1
+ * @deprecated Unused. Will be removed in Tomcat 9.1 an has been removed in Tomcat 10.1.
  */
 @Deprecated
 public class Error extends Exception {
@@ -41,11 +39,10 @@
     /**
      * Construct an APRException.
      *
-     * @param error one of the value in Error
+     * @param error       one of the value in Error
      * @param description error message
      */
-    private Error(int error, String description)
-    {
+    private Error(int error, String description) {
         super(error + ": " + description);
         this.error = error;
         this.description = description;
@@ -56,8 +53,7 @@
      *
      * @return error of the Exception
      */
-    public int getError()
-    {
+    public int getError() {
         return error;
     }
 
@@ -66,34 +62,35 @@
      *
      * @return description of the Exception
      */
-    public String getDescription()
-    {
+    public String getDescription() {
         return description;
     }
 
     /**
      * Get the last platform error.
-     * @return apr_status_t the last platform error, folded into apr_status_t, on most platforms
-     * This retrieves errno, or calls a GetLastError() style function, and
-     *      folds it with APR_FROM_OS_ERROR.  Some platforms (such as OS2) have no
-     *      such mechanism, so this call may be unsupported.  Do NOT use this
-     *      call for socket errors from socket, send, recv etc!
+     *
+     * @return apr_status_t the last platform error, folded into apr_status_t, on most platforms This retrieves errno,
+     *             or calls a GetLastError() style function, and folds it with APR_FROM_OS_ERROR. Some platforms (such
+     *             as OS2) have no such mechanism, so this call may be unsupported. Do NOT use this call for socket
+     *             errors from socket, send, recv etc!
      */
     public static native int osError();
 
     /**
      * Get the last platform socket error.
-     * @return the last socket error, folded into apr_status_t, on all platforms
-     * This retrieves errno or calls a GetLastSocketError() style function,
-     *      and folds it with APR_FROM_OS_ERROR.
+     *
+     * @return the last socket error, folded into apr_status_t, on all platforms This retrieves errno or calls a
+     *             GetLastSocketError() style function, and folds it with APR_FROM_OS_ERROR.
      */
     public static native int netosError();
 
     /**
      * Return a human readable string describing the specified error.
+     *
      * @param statcode The error code the get a string for.
+     *
      * @return The error string.
-    */
+     */
     public static native String strerror(int statcode);
 
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/FileInfo.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/FileInfo.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/FileInfo.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/FileInfo.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,14 +17,11 @@
 package org.apache.tomcat.jni;
 
 /**
- * Fileinfo
+ * Fileinfo.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class FileInfo {
@@ -32,16 +29,15 @@
     /** Allocates memory and closes lingering handles in the specified pool */
     public long pool;
     /**
-     * The bitmask describing valid fields of this apr_finfo_t structure
-     *  including all available 'wanted' fields and potentially more.
+     * The bitmask describing valid fields of this apr_finfo_t structure including all available 'wanted' fields and
+     * potentially more.
      */
     public int valid;
-    /** The access permissions of the file.  Mimics Unix access rights. */
+    /** The access permissions of the file. Mimics Unix access rights. */
     public int protection;
     /**
-     * The type of file.  One of APR_REG, APR_DIR, APR_CHR, APR_BLK, APR_PIPE,
-     * APR_LNK or APR_SOCK.  If the type is undetermined, the value is APR_NOFILE.
-     * If the type cannot be determined, the value is APR_UNKFILE.
+     * The type of file. One of APR_REG, APR_DIR, APR_CHR, APR_BLK, APR_PIPE, APR_LNK or APR_SOCK. If the type is
+     * undetermined, the value is APR_NOFILE. If the type cannot be determined, the value is APR_UNKFILE.
      */
     public int filetype;
     /** The user id that owns the file */
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/File.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/File.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/File.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/File.java	2026-06-11 17:01:29.000000000 -0300
@@ -15,71 +15,62 @@
  *  limitations under the License.
  */
 package org.apache.tomcat.jni;
+
 /* Import needed classes */
 import java.nio.ByteBuffer;
 
 /**
- * File
- *
- * @author Mladen Turk
+ * File.
  *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class File {
 
     /** Open the file for reading */
-    public static final int APR_FOPEN_READ       = 0x00001;
+    public static final int APR_FOPEN_READ = 0x00001;
     /** Open the file for writing */
-    public static final int APR_FOPEN_WRITE      = 0x00002;
+    public static final int APR_FOPEN_WRITE = 0x00002;
     /** Create the file if not there */
-    public static final int APR_FOPEN_CREATE     = 0x00004;
+    public static final int APR_FOPEN_CREATE = 0x00004;
     /** Append to the end of the file */
-    public static final int APR_FOPEN_APPEND     = 0x00008;
+    public static final int APR_FOPEN_APPEND = 0x00008;
     /** Open the file and truncate to 0 length */
-    public static final int APR_FOPEN_TRUNCATE   = 0x00010;
+    public static final int APR_FOPEN_TRUNCATE = 0x00010;
     /** Open the file in binary mode */
-    public static final int APR_FOPEN_BINARY     = 0x00020;
+    public static final int APR_FOPEN_BINARY = 0x00020;
     /** Open should fail if APR_CREATE and file exists. */
-    public static final int APR_FOPEN_EXCL       = 0x00040;
+    public static final int APR_FOPEN_EXCL = 0x00040;
     /** Open the file for buffered I/O */
-    public static final int APR_FOPEN_BUFFERED   = 0x00080;
+    public static final int APR_FOPEN_BUFFERED = 0x00080;
     /** Delete the file after close */
     public static final int APR_FOPEN_DELONCLOSE = 0x00100;
     /**
-     * Platform dependent tag to open the file for
-     * use across multiple threads
+     * Platform dependent tag to open the file for use across multiple threads
      */
-    public static final int APR_FOPEN_XTHREAD     = 0x00200;
+    public static final int APR_FOPEN_XTHREAD = 0x00200;
     /**
-     * Platform dependent support for higher level locked read/write
-     * access to support writes across process/machines
+     * Platform dependent support for higher level locked read/write access to support writes across process/machines
      */
-    public static final int APR_FOPEN_SHARELOCK   = 0x00400;
+    public static final int APR_FOPEN_SHARELOCK = 0x00400;
     /** Do not register a cleanup when the file is opened */
-    public static final int APR_FOPEN_NOCLEANUP   = 0x00800;
+    public static final int APR_FOPEN_NOCLEANUP = 0x00800;
     /**
-     * Advisory flag that this file should support
-     * apr_socket_sendfile operation
+     * Advisory flag that this file should support apr_socket_sendfile operation
      */
     public static final int APR_FOPEN_SENDFILE_ENABLED = 0x01000;
     /**
-     * Platform dependent flag to enable large file support;
-     * <br><b>Warning :</b> The APR_LARGEFILE flag only has effect on some platforms
-     * where sizeof(apr_off_t) == 4.  Where implemented, it allows opening
-     * and writing to a file which exceeds the size which can be
-     * represented by apr_off_t (2 gigabytes).  When a file's size does
-     * exceed 2Gb, apr_file_info_get() will fail with an error on the
-     * descriptor, likewise apr_stat()/apr_lstat() will fail on the
-     * filename.  apr_dir_read() will fail with APR_INCOMPLETE on a
-     * directory entry for a large file depending on the particular
-     * APR_FINFO_* flags.  Generally, it is not recommended to use this
-     * flag.
+     * Platform dependent flag to enable large file support; <br>
+     * <b>Warning :</b> The APR_LARGEFILE flag only has effect on some platforms where sizeof(apr_off_t) == 4. Where
+     * implemented, it allows opening and writing to a file which exceeds the size which can be represented by apr_off_t
+     * (2 gigabytes). When a file's size does exceed 2Gb, apr_file_info_get() will fail with an error on the descriptor,
+     * likewise apr_stat()/apr_lstat() will fail on the filename. apr_dir_read() will fail with APR_INCOMPLETE on a
+     * directory entry for a large file depending on the particular APR_FINFO_* flags. Generally, it is not recommended
+     * to use this flag.
      */
-    public static final int APR_FOPEN_LARGEFILE      = 0x04000;
+    public static final int APR_FOPEN_LARGEFILE = 0x04000;
 
     /** Set the file position */
     public static final int APR_SET = 0;
@@ -91,59 +82,55 @@
     /* flags for apr_file_attrs_set */
 
     /** File is read-only */
-    public static final int APR_FILE_ATTR_READONLY   = 0x01;
+    public static final int APR_FILE_ATTR_READONLY = 0x01;
     /** File is executable */
     public static final int APR_FILE_ATTR_EXECUTABLE = 0x02;
     /** File is hidden */
-    public static final int APR_FILE_ATTR_HIDDEN     = 0x04;
+    public static final int APR_FILE_ATTR_HIDDEN = 0x04;
 
 
     /* File lock types/flags */
 
     /**
-     * Shared lock. More than one process or thread can hold a shared lock
-     * at any given time. Essentially, this is a "read lock", preventing
-     * writers from establishing an exclusive lock.
+     * Shared lock. More than one process or thread can hold a shared lock at any given time. Essentially, this is a
+     * "read lock", preventing writers from establishing an exclusive lock.
      */
-    public static final int APR_FLOCK_SHARED    = 1;
+    public static final int APR_FLOCK_SHARED = 1;
 
     /**
-     * Exclusive lock. Only one process may hold an exclusive lock at any
-     * given time. This is analogous to a "write lock".
+     * Exclusive lock. Only one process may hold an exclusive lock at any given time. This is analogous to a "write
+     * lock".
      */
     public static final int APR_FLOCK_EXCLUSIVE = 2;
     /** mask to extract lock type */
-    public static final int APR_FLOCK_TYPEMASK  = 0x000F;
+    public static final int APR_FLOCK_TYPEMASK = 0x000F;
     /** do not block while acquiring the file lock */
-    public static final int APR_FLOCK_NONBLOCK  = 0x0010;
+    public static final int APR_FLOCK_NONBLOCK = 0x0010;
 
-    /* apr_filetype_e values for the filetype member of the
-     * apr_file_info_t structure
-     * <br><b>Warning :</b>: Not all of the filetypes below can be determined.
-     * For example, a given platform might not correctly report
-     * a socket descriptor as APR_SOCK if that type isn't
-     * well-identified on that platform.  In such cases where
-     * a filetype exists but cannot be described by the recognized
-     * flags below, the filetype will be APR_UNKFILE.  If the
-     * filetype member is not determined, the type will be APR_NOFILE.
+    /*
+     * apr_filetype_e values for the filetype member of the apr_file_info_t structure <br><b>Warning :</b>: Not all of
+     * the filetypes below can be determined. For example, a given platform might not correctly report a socket
+     * descriptor as APR_SOCK if that type isn't well-identified on that platform. In such cases where a filetype exists
+     * but cannot be described by the recognized flags below, the filetype will be APR_UNKFILE. If the filetype member
+     * is not determined, the type will be APR_NOFILE.
      */
 
     /** no file type determined */
-    public static final int APR_NOFILE  = 0;
+    public static final int APR_NOFILE = 0;
     /** a regular file */
-    public static final int APR_REG     = 1;
+    public static final int APR_REG = 1;
     /** a directory */
-    public static final int APR_DIR     = 2;
+    public static final int APR_DIR = 2;
     /** a character device */
-    public static final int APR_CHR     = 3;
+    public static final int APR_CHR = 3;
     /** a block device */
-    public static final int APR_BLK     = 4;
+    public static final int APR_BLK = 4;
     /** a FIFO / pipe */
-    public static final int APR_PIPE    = 5;
+    public static final int APR_PIPE = 5;
     /** a symbolic link */
-    public static final int APR_LNK     = 6;
+    public static final int APR_LNK = 6;
     /** a [unix domain] socket */
-    public static final int APR_SOCK    = 7;
+    public static final int APR_SOCK = 7;
     /** a file of some other unknown type */
     public static final int APR_UNKFILE = 127;
 
@@ -152,91 +139,91 @@
      * apr_file_permissions File Permissions flags
      */
     /** Set user id */
-    public static final int APR_FPROT_USETID     = 0x8000;
+    public static final int APR_FPROT_USETID = 0x8000;
     /** Read by user */
-    public static final int APR_FPROT_UREAD      = 0x0400;
+    public static final int APR_FPROT_UREAD = 0x0400;
     /** Write by user */
-    public static final int APR_FPROT_UWRITE     = 0x0200;
+    public static final int APR_FPROT_UWRITE = 0x0200;
     /** Execute by user */
-    public static final int APR_FPROT_UEXECUTE   = 0x0100;
+    public static final int APR_FPROT_UEXECUTE = 0x0100;
 
     /** Set group id */
-    public static final int APR_FPROT_GSETID     = 0x4000;
+    public static final int APR_FPROT_GSETID = 0x4000;
     /** Read by group */
-    public static final int APR_FPROT_GREAD      = 0x0040;
+    public static final int APR_FPROT_GREAD = 0x0040;
     /** Write by group */
-    public static final int APR_FPROT_GWRITE     = 0x0020;
+    public static final int APR_FPROT_GWRITE = 0x0020;
     /** Execute by group */
-    public static final int APR_FPROT_GEXECUTE   = 0x0010;
+    public static final int APR_FPROT_GEXECUTE = 0x0010;
 
     /** Sticky bit */
-    public static final int APR_FPROT_WSTICKY    = 0x2000;
+    public static final int APR_FPROT_WSTICKY = 0x2000;
     /** Read by others */
-    public static final int APR_FPROT_WREAD      = 0x0004;
+    public static final int APR_FPROT_WREAD = 0x0004;
     /** Write by others */
-    public static final int APR_FPROT_WWRITE     = 0x0002;
+    public static final int APR_FPROT_WWRITE = 0x0002;
     /** Execute by others */
-    public static final int APR_FPROT_WEXECUTE   = 0x0001;
+    public static final int APR_FPROT_WEXECUTE = 0x0001;
     /** use OS's default permissions */
     public static final int APR_FPROT_OS_DEFAULT = 0x0FFF;
 
 
     /** Stat the link not the file itself if it is a link */
-    public static final int APR_FINFO_LINK   = 0x00000001;
+    public static final int APR_FINFO_LINK = 0x00000001;
     /** Modification Time */
-    public static final int APR_FINFO_MTIME  = 0x00000010;
+    public static final int APR_FINFO_MTIME = 0x00000010;
     /** Creation or inode-changed time */
-    public static final int APR_FINFO_CTIME  = 0x00000020;
+    public static final int APR_FINFO_CTIME = 0x00000020;
     /** Access Time */
-    public static final int APR_FINFO_ATIME  = 0x00000040;
+    public static final int APR_FINFO_ATIME = 0x00000040;
     /** Size of the file */
-    public static final int APR_FINFO_SIZE   = 0x00000100;
+    public static final int APR_FINFO_SIZE = 0x00000100;
     /** Storage size consumed by the file */
-    public static final int APR_FINFO_CSIZE  = 0x00000200;
+    public static final int APR_FINFO_CSIZE = 0x00000200;
     /** Device */
-    public static final int APR_FINFO_DEV    = 0x00001000;
+    public static final int APR_FINFO_DEV = 0x00001000;
     /** Inode */
-    public static final int APR_FINFO_INODE  = 0x00002000;
+    public static final int APR_FINFO_INODE = 0x00002000;
     /** Number of links */
-    public static final int APR_FINFO_NLINK  = 0x00004000;
+    public static final int APR_FINFO_NLINK = 0x00004000;
     /** Type */
-    public static final int APR_FINFO_TYPE   = 0x00008000;
+    public static final int APR_FINFO_TYPE = 0x00008000;
     /** User */
-    public static final int APR_FINFO_USER   = 0x00010000;
+    public static final int APR_FINFO_USER = 0x00010000;
     /** Group */
-    public static final int APR_FINFO_GROUP  = 0x00020000;
+    public static final int APR_FINFO_GROUP = 0x00020000;
     /** User protection bits */
-    public static final int APR_FINFO_UPROT  = 0x00100000;
+    public static final int APR_FINFO_UPROT = 0x00100000;
     /** Group protection bits */
-    public static final int APR_FINFO_GPROT  = 0x00200000;
+    public static final int APR_FINFO_GPROT = 0x00200000;
     /** World protection bits */
-    public static final int APR_FINFO_WPROT  = 0x00400000;
+    public static final int APR_FINFO_WPROT = 0x00400000;
     /** if dev is case insensitive */
-    public static final int APR_FINFO_ICASE  = 0x01000000;
+    public static final int APR_FINFO_ICASE = 0x01000000;
     /** ->name in proper case */
-    public static final int APR_FINFO_NAME   = 0x02000000;
+    public static final int APR_FINFO_NAME = 0x02000000;
 
     /** type, mtime, ctime, atime, size */
-    public static final int APR_FINFO_MIN    = 0x00008170;
+    public static final int APR_FINFO_MIN = 0x00008170;
     /** dev and inode */
-    public static final int APR_FINFO_IDENT  = 0x00003000;
+    public static final int APR_FINFO_IDENT = 0x00003000;
     /** user and group */
-    public static final int APR_FINFO_OWNER  = 0x00030000;
-    /**  all protections */
-    public static final int APR_FINFO_PROT   = 0x00700000;
-    /**  an atomic unix apr_stat() */
-    public static final int APR_FINFO_NORM   = 0x0073b170;
-    /**  an atomic unix apr_dir_read() */
+    public static final int APR_FINFO_OWNER = 0x00030000;
+    /** all protections */
+    public static final int APR_FINFO_PROT = 0x00700000;
+    /** an atomic unix apr_stat() */
+    public static final int APR_FINFO_NORM = 0x0073b170;
+    /** an atomic unix apr_dir_read() */
     public static final int APR_FINFO_DIRENT = 0x02000000;
 
 
-
-
     /**
      * Open the specified file.
+     *
      * @param fname The full path to the file (using / on all systems)
-     * @param flag Or'ed value of:
-     * <PRE>
+     * @param flag  Or'ed value of:
+     *
+     *                  <PRE>
      * APR_FOPEN_READ              open for reading
      * APR_FOPEN_WRITE             open for writing
      * APR_FOPEN_CREATE            create the file if not there
@@ -259,525 +246,522 @@
      * APR_FOPEN_SENDFILE_ENABLED  Open with appropriate platform semantics
      *                             for sendfile operations.  Advisory only,
      *                             apr_socket_sendfile does not check this flag.
-     * </PRE>
-     * @param perm Access permissions for file.
-     * @param pool The pool to use.
-     * If perm is APR_OS_DEFAULT and the file is being created,
-     * appropriate default permissions will be used.
+     *                  </PRE>
+     *
+     * @param perm  Access permissions for file.
+     * @param pool  The pool to use. If perm is APR_OS_DEFAULT and the file is being created, appropriate default
+     *                  permissions will be used.
+     *
      * @return The opened file descriptor.
+     *
      * @throws Error An error occurred
      */
-    public static native long open(String fname, int flag, int perm, long pool)
-        throws Error;
+    public static native long open(String fname, int flag, int perm, long pool) throws Error;
 
     /**
      * Close the specified file.
+     *
      * @param file The file descriptor to close.
+     *
      * @return the operation status
      */
     public static native int close(long file);
 
     /**
      * Flush the file's buffer.
+     *
      * @param thefile The file descriptor to flush
+     *
      * @return the operation status
      */
     public static native int flush(long thefile);
 
     /**
      * Open a temporary file
+     *
      * @param templ The template to use when creating a temp file.
-     * @param flags The flags to open the file with. If this is zero,
-     *              the file is opened with
-     *              APR_CREATE | APR_READ | APR_WRITE | APR_EXCL | APR_DELONCLOSE
-     * @param pool The pool to allocate the file out of.
-     * @return The apr file to use as a temporary file.
-     *
-     * This function  generates  a unique temporary file name from template.
-     * The last six characters of template must be XXXXXX and these are replaced
-     * with a string that makes the filename unique. Since it will  be  modified,
-     * template must not be a string constant, but should be declared as a character
-     * array.
+     * @param flags The flags to open the file with. If this is zero, the file is opened with APR_CREATE | APR_READ |
+     *                  APR_WRITE | APR_EXCL | APR_DELONCLOSE
+     * @param pool  The pool to allocate the file out of.
+     *
+     * @return The apr file to use as a temporary file. This function generates a unique temporary file name from
+     *             template. The last six characters of template must be XXXXXX and these are replaced with a string
+     *             that makes the filename unique. Since it will be modified, template must not be a string constant,
+     *             but should be declared as a character array.
+     *
      * @throws Error An error occurred
      */
-    public static native long mktemp(String templ, int flags, long pool)
-        throws Error;
+    public static native long mktemp(String templ, int flags, long pool) throws Error;
 
     /**
      * Delete the specified file.
+     *
      * @param path The full path to the file (using / on all systems)
-     * @param pool The pool to use.
-     * If the file is open, it won't be removed until all
-     * instances are closed.
+     * @param pool The pool to use. If the file is open, it won't be removed until all instances are closed.
+     *
      * @return the operation status
      */
     public static native int remove(String path, long pool);
 
     /**
-     * Rename the specified file.
-     * <br><b>Warning :</b> If a file exists at the new location, then it will be
-     * overwritten.  Moving files or directories across devices may not be
-     * possible.
+     * Rename the specified file. <br>
+     * <b>Warning :</b> If a file exists at the new location, then it will be overwritten. Moving files or directories
+     * across devices may not be possible.
+     *
      * @param fromPath The full path to the original file (using / on all systems)
-     * @param toPath The full path to the new file (using / on all systems)
-     * @param pool The pool to use.
+     * @param toPath   The full path to the new file (using / on all systems)
+     * @param pool     The pool to use.
+     *
      * @return the operation status
      */
     public static native int rename(String fromPath, String toPath, long pool);
 
     /**
-     * Copy the specified file to another file.
-     * The new file does not need to exist, it will be created if required.
-     * <br><b>Warning :</b> If the new file already exists, its contents will be overwritten.
+     * Copy the specified file to another file. The new file does not need to exist, it will be created if required.
+     * <br>
+     * <b>Warning :</b> If the new file already exists, its contents will be overwritten.
+     *
      * @param fromPath The full path to the original file (using / on all systems)
-     * @param toPath The full path to the new file (using / on all systems)
-     * @param perms Access permissions for the new file if it is created.
-     *     In place of the usual or'd combination of file permissions, the
-     *     value APR_FILE_SOURCE_PERMS may be given, in which case the source
-     *     file's permissions are copied.
-     * @param pool The pool to use.
+     * @param toPath   The full path to the new file (using / on all systems)
+     * @param perms    Access permissions for the new file if it is created. In place of the usual or'd combination of
+     *                     file permissions, the value APR_FILE_SOURCE_PERMS may be given, in which case the source
+     *                     file's permissions are copied.
+     * @param pool     The pool to use.
+     *
      * @return the operation status
      */
     public static native int copy(String fromPath, String toPath, int perms, long pool);
 
     /**
-     * Append the specified file to another file.
-     * The new file does not need to exist, it will be created if required.
+     * Append the specified file to another file. The new file does not need to exist, it will be created if required.
+     *
      * @param fromPath The full path to the source file (use / on all systems)
-     * @param toPath The full path to the destination file (use / on all systems)
-     * @param perms Access permissions for the destination file if it is created.
-     *     In place of the usual or'd combination of file permissions, the
-     *     value APR_FILE_SOURCE_PERMS may be given, in which case the source
-     *     file's permissions are copied.
-     * @param pool The pool to use.
+     * @param toPath   The full path to the destination file (use / on all systems)
+     * @param perms    Access permissions for the destination file if it is created. In place of the usual or'd
+     *                     combination of file permissions, the value APR_FILE_SOURCE_PERMS may be given, in which case
+     *                     the source file's permissions are copied.
+     * @param pool     The pool to use.
+     *
      * @return the operation status
      */
     public static native int append(String fromPath, String toPath, int perms, long pool);
 
     /**
      * Write the string into the specified file.
-     * @param str The string to write. Must be NUL terminated!
+     *
+     * @param str     The string to write. Must be NUL terminated!
      * @param thefile The file descriptor to write to
+     *
      * @return the operation status
      */
-    public static native int puts(byte [] str, long thefile);
+    public static native int puts(byte[] str, long thefile);
 
     /**
      * Move the read/write file offset to a specified byte within a file.
+     *
      * @param thefile The file descriptor
-     * @param where How to move the pointer, one of:
-     * <PRE>
+     * @param where   How to move the pointer, one of:
+     *
+     *                    <PRE>
      * APR_SET  --  set the offset to offset
      * APR_CUR  --  add the offset to the current position
      * APR_END  --  add the offset to the current file size
-     * </PRE>
-     * @param offset The offset to move the pointer to.
+     *                    </PRE>
+     *
+     * @param offset  The offset to move the pointer to.
+     *
      * @return Offset the pointer was actually moved to.
+     *
      * @throws Error If an error occurs reading the file
      */
-    public static native long seek(long thefile, int where, long offset)
-        throws Error;
+    public static native long seek(long thefile, int where, long offset) throws Error;
 
     /**
      * Write a character into the specified file.
-     * @param ch The character to write.
+     *
+     * @param ch      The character to write.
      * @param thefile The file descriptor to write to
+     *
      * @return the operation status
      */
     public static native int putc(byte ch, long thefile);
 
     /**
      * Put a character back onto a specified stream.
-     * @param ch The character to write.
+     *
+     * @param ch      The character to write.
      * @param thefile The file descriptor to write to
+     *
      * @return the operation status
      */
     public static native int ungetc(byte ch, long thefile);
 
     /**
-     * Write data to the specified file.
-     *
-     * Write will write up to the specified number of
-     * bytes, but never more.  If the OS cannot write that many bytes, it
-     * will write as many as it can.  The third argument is modified to
-     * reflect the * number of bytes written.
+     * Write data to the specified file. Write will write up to the specified number of bytes, but never more. If the OS
+     * cannot write that many bytes, it will write as many as it can. The third argument is modified to reflect the *
+     * number of bytes written. It is possible for both bytes to be written and an error to be returned. APR_EINTR is
+     * never returned.
      *
-     * It is possible for both bytes to be written and an error to
-     * be returned.  APR_EINTR is never returned.
      * @param thefile The file descriptor to write to.
-     * @param buf The buffer which contains the data.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to write
+     * @param buf     The buffer which contains the data.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to write
+     *
      * @return The number of bytes written.
      */
     public static native int write(long thefile, byte[] buf, int offset, int nbytes);
 
     /**
-     * Write data to the specified file.
-     *
-     * Write will write up to the specified number of
-     * bytes, but never more.  If the OS cannot write that many bytes, it
-     * will write as many as it can.  The third argument is modified to
-     * reflect the * number of bytes written.
+     * Write data to the specified file. Write will write up to the specified number of bytes, but never more. If the OS
+     * cannot write that many bytes, it will write as many as it can. The third argument is modified to reflect the *
+     * number of bytes written. It is possible for both bytes to be written and an error to be returned. APR_EINTR is
+     * never returned.
      *
-     * It is possible for both bytes to be written and an error to
-     * be returned.  APR_EINTR is never returned.
      * @param thefile The file descriptor to write to.
-     * @param buf The direct Byte buffer which contains the data.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to write
+     * @param buf     The direct Byte buffer which contains the data.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to write
+     *
      * @return The number of bytes written.
      */
     public static native int writeb(long thefile, ByteBuffer buf, int offset, int nbytes);
 
     /**
-     * Write data to the specified file, ensuring that all of the data is
-     * written before returning.
+     * Write data to the specified file, ensuring that all of the data is written before returning. Write will write up
+     * to the specified number of bytes, but never more. If the OS cannot write that many bytes, the process/thread will
+     * block until they can be written. Exceptional error such as "out of space" or "pipe closed" will terminate with an
+     * error. It is possible for both bytes to be written and an error to be returned. And if *bytes_written is less
+     * than nbytes, an accompanying error is _always_ returned. APR_EINTR is never returned.
      *
-     * Write will write up to the specified number of
-     * bytes, but never more.  If the OS cannot write that many bytes, the
-     * process/thread will block until they can be written. Exceptional
-     * error such as "out of space" or "pipe closed" will terminate with
-     * an error.
-     *
-     * It is possible for both bytes to be written and an error to
-     * be returned.  And if *bytes_written is less than nbytes, an
-     * accompanying error is _always_ returned.
-     *
-     * APR_EINTR is never returned.
      * @param thefile The file descriptor to write to.
-     * @param buf The buffer which contains the data.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to write
+     * @param buf     The buffer which contains the data.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to write
+     *
      * @return The number of bytes written.
      */
     public static native int writeFull(long thefile, byte[] buf, int offset, int nbytes);
 
     /**
-     * Write data to the specified file, ensuring that all of the data is
-     * written before returning.
+     * Write data to the specified file, ensuring that all of the data is written before returning. Write will write up
+     * to the specified number of bytes, but never more. If the OS cannot write that many bytes, the process/thread will
+     * block until they can be written. Exceptional error such as "out of space" or "pipe closed" will terminate with an
+     * error. It is possible for both bytes to be written and an error to be returned. And if *bytes_written is less
+     * than nbytes, an accompanying error is _always_ returned. APR_EINTR is never returned.
      *
-     * Write will write up to the specified number of
-     * bytes, but never more.  If the OS cannot write that many bytes, the
-     * process/thread will block until they can be written. Exceptional
-     * error such as "out of space" or "pipe closed" will terminate with
-     * an error.
-     *
-     * It is possible for both bytes to be written and an error to
-     * be returned.  And if *bytes_written is less than nbytes, an
-     * accompanying error is _always_ returned.
-     *
-     * APR_EINTR is never returned.
      * @param thefile The file descriptor to write to.
-     * @param buf The direct ByteBuffer which contains the data.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to write.
+     * @param buf     The direct ByteBuffer which contains the data.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to write.
+     *
      * @return The number of bytes written.
      */
     public static native int writeFullb(long thefile, ByteBuffer buf, int offset, int nbytes);
 
     /**
-     * Write data from array of byte arrays to the specified file.
+     * Write data from array of byte arrays to the specified file. It is possible for both bytes to be written and an
+     * error to be returned. APR_EINTR is never returned. apr_file_writev is available even if the underlying operating
+     * system doesn't provide writev().
      *
-     * It is possible for both bytes to be written and an error to
-     * be returned.  APR_EINTR is never returned.
-     *
-     * apr_file_writev is available even if the underlying
-     * operating system doesn't provide writev().
      * @param thefile The file descriptor to write to.
-     * @param vec The array from which to get the data to write to the file.
+     * @param vec     The array from which to get the data to write to the file.
+     *
      * @return The number of bytes written.
      */
     public static native int writev(long thefile, byte[][] vec);
 
     /**
-     * Write data from array of byte arrays to the specified file,
-     * ensuring that all of the data is written before returning.
+     * Write data from array of byte arrays to the specified file, ensuring that all of the data is written before
+     * returning. writevFull is available even if the underlying operating system doesn't provide writev().
      *
-     * writevFull is available even if the underlying
-     * operating system doesn't provide writev().
      * @param thefile The file descriptor to write to.
-     * @param vec The array from which to get the data to write to the file.
+     * @param vec     The array from which to get the data to write to the file.
+     *
      * @return The number of bytes written.
      */
     public static native int writevFull(long thefile, byte[][] vec);
 
     /**
-     * Read data from the specified file.
+     * Read data from the specified file. apr_file_read will read up to the specified number of bytes, but never more.
+     * If there isn't enough data to fill that number of bytes, all of the available data is read. The third argument is
+     * modified to reflect the number of bytes read. If a char was put back into the stream via ungetc, it will be the
+     * first character returned. It is not possible for both bytes to be read and an APR_EOF or other error to be
+     * returned. APR_EINTR is never returned.
      *
-     * apr_file_read will read up to the specified number of
-     * bytes, but never more.  If there isn't enough data to fill that
-     * number of bytes, all of the available data is read.  The third
-     * argument is modified to reflect the number of bytes read.  If a
-     * char was put back into the stream via ungetc, it will be the first
-     * character returned.
-     *
-     * It is not possible for both bytes to be read and an APR_EOF
-     * or other error to be returned.  APR_EINTR is never returned.
      * @param thefile The file descriptor to read from.
-     * @param buf The buffer to store the data to.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to read
+     * @param buf     The buffer to store the data to.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to read
+     *
      * @return the number of bytes read.
      */
-    public static native int read(long thefile, byte[] buf,  int offset, int nbytes);
+    public static native int read(long thefile, byte[] buf, int offset, int nbytes);
 
     /**
-     * Read data from the specified file.
-     *
-     * apr_file_read will read up to the specified number of
-     * bytes, but never more.  If there isn't enough data to fill that
-     * number of bytes, all of the available data is read.  The third
-     * argument is modified to reflect the number of bytes read.  If a
-     * char was put back into the stream via ungetc, it will be the first
-     * character returned.
+     * Read data from the specified file. apr_file_read will read up to the specified number of bytes, but never more.
+     * If there isn't enough data to fill that number of bytes, all of the available data is read. The third argument is
+     * modified to reflect the number of bytes read. If a char was put back into the stream via ungetc, it will be the
+     * first character returned. It is not possible for both bytes to be read and an APR_EOF or other error to be
+     * returned. APR_EINTR is never returned.
      *
-     * It is not possible for both bytes to be read and an APR_EOF
-     * or other error to be returned.  APR_EINTR is never returned.
      * @param thefile The file descriptor to read from.
-     * @param buf The direct Byte buffer to store the data to.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to read.
+     * @param buf     The direct Byte buffer to store the data to.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to read.
+     *
      * @return the number of bytes read.
      */
-    public static native int readb(long thefile, ByteBuffer buf,  int offset, int nbytes);
+    public static native int readb(long thefile, ByteBuffer buf, int offset, int nbytes);
 
     /**
-     * Read data from the specified file, ensuring that the buffer is filled
-     * before returning.
-     *
-     * Read will read up to the specified number of
-     * bytes, but never more.  If there isn't enough data to fill that
-     * number of bytes, then the process/thread will block until it is
-     * available or EOF is reached.  If a char was put back into the
-     * stream via ungetc, it will be the first character returned.
-     *
-     * It is possible for both bytes to be read and an error to be
-     * returned.  And if *bytes_read is less than nbytes, an accompanying
-     * error is _always_ returned.
+     * Read data from the specified file, ensuring that the buffer is filled before returning. Read will read up to the
+     * specified number of bytes, but never more. If there isn't enough data to fill that number of bytes, then the
+     * process/thread will block until it is available or EOF is reached. If a char was put back into the stream via
+     * ungetc, it will be the first character returned. It is possible for both bytes to be read and an error to be
+     * returned. And if *bytes_read is less than nbytes, an accompanying error is _always_ returned. APR_EINTR is never
+     * returned.
      *
-     * APR_EINTR is never returned.
      * @param thefile The file descriptor to read from.
-     * @param buf The buffer to store the data to.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to read
+     * @param buf     The buffer to store the data to.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to read
+     *
      * @return the number of bytes read.
      */
-    public static native int readFull(long thefile, byte[] buf,  int offset, int nbytes);
+    public static native int readFull(long thefile, byte[] buf, int offset, int nbytes);
 
     /**
-     * Read data from the specified file, ensuring that the buffer is filled
-     * before returning.
-     *
-     * Read will read up to the specified number of
-     * bytes, but never more.  If there isn't enough data to fill that
-     * number of bytes, then the process/thread will block until it is
-     * available or EOF is reached.  If a char was put back into the
-     * stream via ungetc, it will be the first character returned.
+     * Read data from the specified file, ensuring that the buffer is filled before returning. Read will read up to the
+     * specified number of bytes, but never more. If there isn't enough data to fill that number of bytes, then the
+     * process/thread will block until it is available or EOF is reached. If a char was put back into the stream via
+     * ungetc, it will be the first character returned. It is possible for both bytes to be read and an error to be
+     * returned. And if *bytes_read is less than nbytes, an accompanying error is _always_ returned. APR_EINTR is never
+     * returned.
      *
-     * It is possible for both bytes to be read and an error to be
-     * returned.  And if *bytes_read is less than nbytes, an accompanying
-     * error is _always_ returned.
-     *
-     * APR_EINTR is never returned.
      * @param thefile The file descriptor to read from.
-     * @param buf The direct ByteBuffer to store the data to.
-     * @param offset Start offset in buf
-     * @param nbytes The number of bytes to read.
+     * @param buf     The direct ByteBuffer to store the data to.
+     * @param offset  Start offset in buf
+     * @param nbytes  The number of bytes to read.
+     *
      * @return the number of bytes read.
      */
-    public static native int readFullb(long thefile, ByteBuffer buf,  int offset, int nbytes);
+    public static native int readFullb(long thefile, ByteBuffer buf, int offset, int nbytes);
 
     /**
-     * Read a string from the specified file.
-     * The buffer will be NUL-terminated if any characters are stored.
-     * @param buf The buffer to store the string in.
-     * @param offset Start offset in buf
+     * Read a string from the specified file. The buffer will be NUL-terminated if any characters are stored.
+     *
+     * @param buf     The buffer to store the string in.
+     * @param offset  Start offset in buf
      * @param thefile The file descriptor to read from
+     *
      * @return the number of bytes read.
      */
-    public static native int gets(byte[] buf,  int offset, long thefile);
+    public static native int gets(byte[] buf, int offset, long thefile);
 
 
     /**
      * Read a character from the specified file.
+     *
      * @param thefile The file descriptor to read from
+     *
      * @return The read character
+     *
      * @throws Error If an error occurs reading the file
      */
-    public static native int getc(long thefile)
-        throws Error;
+    public static native int getc(long thefile) throws Error;
 
     /**
      * Are we at the end of the file
+     *
      * @param fptr The apr file we are testing.
+     *
      * @return Returns APR_EOF if we are at the end of file, APR_SUCCESS otherwise.
      */
     public static native int eof(long fptr);
 
     /**
      * Return the file name of the current file.
+     *
      * @param thefile The currently open file.
+     *
      * @return the name
      */
     public static native String nameGet(long thefile);
 
     /**
-     * Set the specified file's permission bits.
-     * <br><b>Warning :</b> Some platforms may not be able to apply all of the
-     * available permission bits; APR_INCOMPLETE will be returned if some
-     * permissions are specified which could not be set.
-     * <br><b>Warning :</b> Platforms which do not implement this feature will return
-     * APR_ENOTIMPL.
+     * Set the specified file's permission bits. <br>
+     * <b>Warning :</b> Some platforms may not be able to apply all of the available permission bits; APR_INCOMPLETE
+     * will be returned if some permissions are specified which could not be set. <br>
+     * <b>Warning :</b> Platforms which do not implement this feature will return APR_ENOTIMPL.
+     *
      * @param fname The file (name) to apply the permissions to.
      * @param perms The permission bits to apply to the file.
+     *
      * @return the operation status
      */
     public static native int permsSet(String fname, int perms);
 
     /**
-     * Set attributes of the specified file.
-     * This function should be used in preference to explicit manipulation
-     *      of the file permissions, because the operations to provide these
-     *      attributes are platform specific and may involve more than simply
-     *      setting permission bits.
-     * <br><b>Warning :</b> Platforms which do not implement this feature will return
-     *      APR_ENOTIMPL.
-     * @param fname The full path to the file (using / on all systems)
+     * Set attributes of the specified file. This function should be used in preference to explicit manipulation of the
+     * file permissions, because the operations to provide these attributes are platform specific and may involve more
+     * than simply setting permission bits. <br>
+     * <b>Warning :</b> Platforms which do not implement this feature will return APR_ENOTIMPL.
+     *
+     * @param fname      The full path to the file (using / on all systems)
      * @param attributes Or'd combination of
-     * <PRE>
+     *
+     *                       <PRE>
      *            APR_FILE_ATTR_READONLY   - make the file readonly
      *            APR_FILE_ATTR_EXECUTABLE - make the file executable
      *            APR_FILE_ATTR_HIDDEN     - make the file hidden
-     * </PRE>
-     * @param mask Mask of valid bits in attributes.
-     * @param pool the pool to use.
+     *                       </PRE>
+     *
+     * @param mask       Mask of valid bits in attributes.
+     * @param pool       the pool to use.
+     *
      * @return the operation status
      */
-    public static native int  attrsSet(String fname, int attributes, int mask, long pool);
+    public static native int attrsSet(String fname, int attributes, int mask, long pool);
 
     /**
-     * Set the mtime of the specified file.
-     * <br><b>Warning :</b> Platforms which do not implement this feature will return
-     *      APR_ENOTIMPL.
+     * Set the mtime of the specified file. <br>
+     * <b>Warning :</b> Platforms which do not implement this feature will return APR_ENOTIMPL.
+     *
      * @param fname The full path to the file (using / on all systems)
      * @param mtime The mtime to apply to the file in microseconds
-     * @param pool The pool to use.
+     * @param pool  The pool to use.
+     *
      * @return the operation status
      */
-    public static native int  mtimeSet(String fname, long mtime, long pool);
+    public static native int mtimeSet(String fname, long mtime, long pool);
 
     /**
-     * Establish a lock on the specified, open file. The lock may be advisory
-     * or mandatory, at the discretion of the platform. The lock applies to
-     * the file as a whole, rather than a specific range. Locks are established
-     * on a per-thread/process basis; a second lock by the same thread will not
-     * block.
+     * Establish a lock on the specified, open file. The lock may be advisory or mandatory, at the discretion of the
+     * platform. The lock applies to the file as a whole, rather than a specific range. Locks are established on a
+     * per-thread/process basis; a second lock by the same thread will not block.
+     *
      * @param thefile The file to lock.
-     * @param type The type of lock to establish on the file.
+     * @param type    The type of lock to establish on the file.
+     *
      * @return the operation status
      */
     public static native int lock(long thefile, int type);
 
     /**
      * Remove any outstanding locks on the file.
+     *
      * @param thefile The file to unlock.
+     *
      * @return the operation status
      */
     public static native int unlock(long thefile);
 
     /**
-     * Retrieve the flags that were passed into apr_file_open()
-     * when the file was opened.
+     * Retrieve the flags that were passed into apr_file_open() when the file was opened.
+     *
      * @param file The file to retrieve flags.
+     *
      * @return the flags
      */
     public static native int flagsGet(long file);
 
     /**
      * Truncate the file's length to the specified offset
-     * @param fp The file to truncate
+     *
+     * @param fp     The file to truncate
      * @param offset The offset to truncate to.
+     *
      * @return the operation status
      */
     public static native int trunc(long fp, long offset);
 
     /**
      * Create an anonymous pipe.
-     * @param io io[0] The file descriptors to use as input to the pipe.
-     *           io[1] The file descriptor to use as output from the pipe.
+     *
+     * @param io   io[0] The file descriptors to use as input to the pipe. io[1] The file descriptor to use as output
+     *                 from the pipe.
      * @param pool The pool to operate on.
+     *
      * @return the operation status
      */
-    public static native int pipeCreate(long [] io, long pool);
+    public static native int pipeCreate(long[] io, long pool);
 
     /**
      * Get the timeout value for a pipe or manipulate the blocking state.
+     *
      * @param thepipe The pipe we are getting a timeout for.
+     *
      * @return The current timeout value in microseconds.
+     *
      * @throws Error If an error occurs
      */
-    public static native long pipeTimeoutGet(long thepipe)
-        throws Error;
+    public static native long pipeTimeoutGet(long thepipe) throws Error;
 
     /**
      * Set the timeout value for a pipe or manipulate the blocking state.
+     *
      * @param thepipe The pipe we are setting a timeout on.
-     * @param timeout The timeout value in microseconds.  Values < 0 mean
-     *        wait forever, 0 means do not wait at all.
+     * @param timeout The timeout value in microseconds. Values < 0 mean wait forever, 0 means do not wait at all.
+     *
      * @return the operation status
      */
     public static native int pipeTimeoutSet(long thepipe, long timeout);
 
     /**
      * Duplicate the specified file descriptor.
-     * @param newFile The file to duplicate.
-     * newFile must point to a valid apr_file_t, or point to NULL.
+     *
+     * @param newFile The file to duplicate. newFile must point to a valid apr_file_t, or point to NULL.
      * @param oldFile The file to duplicate.
-     * @param pool The pool to use for the new file.
+     * @param pool    The pool to use for the new file.
+     *
      * @return Duplicated file structure.
+     *
      * @throws Error If an error occurs reading the file descriptor
      */
-    public static native long dup(long newFile, long oldFile, long pool)
-        throws Error;
+    public static native long dup(long newFile, long oldFile, long pool) throws Error;
 
     /**
      * Duplicate the specified file descriptor and close the original.
-     * @param newFile The old file that is to be closed and reused.
-     * newFile MUST point at a valid apr_file_t. It cannot be NULL.
+     *
+     * @param newFile The old file that is to be closed and reused. newFile MUST point at a valid apr_file_t. It cannot
+     *                    be NULL.
      * @param oldFile The file to duplicate.
-     * @param pool The pool to use for the new file.
+     * @param pool    The pool to use for the new file.
+     *
      * @return the operation status
      */
     public static native int dup2(long newFile, long oldFile, long pool);
 
     /**
-     * Get the specified file's stats.  The file is specified by filename,
-     * instead of using a pre-opened file.
-     * @param finfo Where to store the information about the file, which is
-     * never touched if the call fails.
-     * @param fname The name of the file to stat.
+     * Get the specified file's stats. The file is specified by filename, instead of using a pre-opened file.
+     *
+     * @param finfo  Where to store the information about the file, which is never touched if the call fails.
+     * @param fname  The name of the file to stat.
      * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
-     * @param pool the pool to use to allocate the new file.
+     * @param pool   the pool to use to allocate the new file.
+     *
      * @return the operation status
      */
     public static native int stat(FileInfo finfo, String fname, int wanted, long pool);
 
     /**
-     * Get the specified file's stats.  The file is specified by filename,
-     * instead of using a pre-opened file.
-     * @param fname The name of the file to stat.
+     * Get the specified file's stats. The file is specified by filename, instead of using a pre-opened file.
+     *
+     * @param fname  The name of the file to stat.
      * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
-     * @param pool the pool to use to allocate the new file.
+     * @param pool   the pool to use to allocate the new file.
+     *
      * @return FileInfo object.
      */
     public static native FileInfo getStat(String fname, int wanted, long pool);
 
     /**
      * Get the specified file's stats.
-     * @param finfo Where to store the information about the file.
-     * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
+     *
+     * @param finfo   Where to store the information about the file.
+     * @param wanted  The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
      * @param thefile The file to get information about.
+     *
      * @return the operation status
      */
     public static native int infoGet(FileInfo finfo, int wanted, long thefile);
@@ -785,8 +769,10 @@
 
     /**
      * Get the specified file's stats.
-     * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
+     *
+     * @param wanted  The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
      * @param thefile The file to get information about.
+     *
      * @return FileInfo object.
      */
     public static native FileInfo getInfo(int wanted, long thefile);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Global.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Global.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Global.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Global.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,88 +17,93 @@
 package org.apache.tomcat.jni;
 
 /**
- * Global
+ * Global.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Global {
 
     /**
-     * Create and initialize a mutex that can be used to synchronize both
-     * processes and threads. Note: There is considerable overhead in using
-     * this API if only cross-process or cross-thread mutual exclusion is
-     * required. See apr_proc_mutex.h and apr_thread_mutex.h for more
-     * specialized lock routines.
-     * <br><b>Warning :</b> Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
-     *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
-     * @param fname A file name to use if the lock mechanism requires one.  This
-     *        argument should always be provided.  The lock code itself will
-     *        determine if it should be used.
-     * @param mech The mechanism to use for the interprocess lock, if any; one of
-     * <PRE>
+     * Create and initialize a mutex that can be used to synchronize both processes and threads. Note: There is
+     * considerable overhead in using this API if only cross-process or cross-thread mutual exclusion is required. See
+     * apr_proc_mutex.h and apr_thread_mutex.h for more specialized lock routines. <br>
+     * <b>Warning :</b> Check APR_HAS_foo_SERIALIZE defines to see if the platform supports APR_LOCK_foo. Only
+     * APR_LOCK_DEFAULT is portable.
+     *
+     * @param fname A file name to use if the lock mechanism requires one. This argument should always be provided. The
+     *                  lock code itself will determine if it should be used.
+     * @param mech  The mechanism to use for the interprocess lock, if any; one of
+     *
+     *                  <PRE>
      *            APR_LOCK_FCNTL
      *            APR_LOCK_FLOCK
      *            APR_LOCK_SYSVSEM
      *            APR_LOCK_POSIXSEM
      *            APR_LOCK_PROC_PTHREAD
      *            APR_LOCK_DEFAULT     pick the default mechanism for the platform
-     * </PRE>
-     * @param pool the pool from which to allocate the mutex.
+     *                  </PRE>
+     *
+     * @param pool  the pool from which to allocate the mutex.
+     *
      * @return Newly created mutex.
+     *
      * @throws Error If an error occurred
      */
-    public static native long create(String fname, int mech, long pool)
-        throws Error;
+    public static native long create(String fname, int mech, long pool) throws Error;
 
     /**
      * Re-open a mutex in a child process.
-     * @param fname A file name to use if the mutex mechanism requires one.  This
-     *              argument should always be provided.  The mutex code itself will
-     *              determine if it should be used.  This filename should be the
-     *              same one that was passed to apr_proc_mutex_create().
-     * @param pool The pool to operate on.
-     * This function must be called to maintain portability, even
-     *         if the underlying lock mechanism does not require it.
+     *
+     * @param fname A file name to use if the mutex mechanism requires one. This argument should always be provided. The
+     *                  mutex code itself will determine if it should be used. This filename should be the same one that
+     *                  was passed to apr_proc_mutex_create().
+     * @param pool  The pool to operate on. This function must be called to maintain portability, even if the underlying
+     *                  lock mechanism does not require it.
+     *
      * @return Newly opened mutex.
+     *
      * @throws Error If an error occurred
      */
-    public static native long childInit(String fname, long pool)
-        throws Error;
+    public static native long childInit(String fname, long pool) throws Error;
 
     /**
-     * Acquire the lock for the given mutex. If the mutex is already locked,
-     * the current thread will be put to sleep until the lock becomes available.
+     * Acquire the lock for the given mutex. If the mutex is already locked, the current thread will be put to sleep
+     * until the lock becomes available.
+     *
      * @param mutex the mutex on which to acquire the lock.
+     *
      * @return the operation status
      */
     public static native int lock(long mutex);
 
     /**
-     * Attempt to acquire the lock for the given mutex. If the mutex has already
-     * been acquired, the call returns immediately with APR_EBUSY. Note: it
-     * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
-     * if the return value was APR_EBUSY, for portability reasons.
+     * Attempt to acquire the lock for the given mutex. If the mutex has already been acquired, the call returns
+     * immediately with APR_EBUSY. Note: it is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine if
+     * the return value was APR_EBUSY, for portability reasons.
+     *
      * @param mutex the mutex on which to attempt the lock acquiring.
+     *
      * @return the operation status
      */
     public static native int trylock(long mutex);
 
     /**
      * Release the lock for the given mutex.
+     *
      * @param mutex the mutex from which to release the lock.
+     *
      * @return the operation status
      */
     public static native int unlock(long mutex);
 
     /**
      * Destroy the mutex and free the memory associated with the lock.
+     *
      * @param mutex the mutex to destroy.
+     *
      * @return the operation status
      */
     public static native int destroy(long mutex);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Library.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Library.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Library.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Library.java	2026-06-11 17:01:29.000000000 -0300
@@ -22,13 +22,16 @@
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+/**
+ * Manages loading of the Tomcat Native (tcnative) library.
+ */
 public final class Library {
 
     /*
      * Default library names - use 1.x in preference to 2.x if both are available as only 1.x supports the APR/Native
      * connector.
      */
-    private static final String [] NAMES = {"tcnative-1", "libtcnative-1", "tcnative-2", "libtcnative-2"};
+    private static final String[] NAMES = { "tcnative-1", "libtcnative-1", "tcnative-2", "libtcnative-2" };
     /* System property used to define CATALINA_HOME */
     private static final String CATALINA_HOME_PROP = "catalina.home";
     /*
@@ -66,7 +69,7 @@
         }
         if (!loaded) {
             String path = System.getProperty("java.library.path");
-            String [] paths = path.split(File.pathSeparator);
+            String[] paths = path.split(File.pathSeparator);
             for (String value : NAMES) {
                 try {
                     System.loadLibrary(value);
@@ -98,12 +101,11 @@
                 names.append(name);
                 names.append(", ");
             }
-            throw new LibraryNotFoundError(names.substring(0, names.length() -2), err.toString());
+            throw new LibraryNotFoundError(names.substring(0, names.length() - 2), err.toString());
         }
     }
 
-    private Library(String libraryName)
-    {
+    private Library(String libraryName) {
         System.loadLibrary(libraryName);
     }
 
@@ -111,6 +113,7 @@
      * Create Tomcat Native's global APR pool. This has to be the first call to TCN library.
      */
     private static native boolean initialize();
+
     /**
      * Allows for thread safe termination when other threads may be attempting clean-up concurrently with the current
      * thread. Waits for any threads currently holding the clean-up lock to release the lock and then calls
@@ -125,6 +128,7 @@
             cleanUpLock.writeLock().unlock();
         }
     }
+
     /**
      * Destroys Tomcat Native's global APR pool. This has to be the last call to TCN library. This will destroy any APR
      * root pools that have not been explicitly destroyed.
@@ -133,96 +137,129 @@
      * library.
      */
     public static native void terminate();
+
     /* Internal function for loading APR Features */
     private static native boolean has(int what);
+
     /* Internal function for loading APR Features */
     private static native int version(int what);
+
     /* Internal function for loading APR sizes */
     private static native int size(int what);
 
-    /* TCN_MAJOR_VERSION */
-    public static int TCN_MAJOR_VERSION  = 0;
-    /* TCN_MINOR_VERSION */
-    public static int TCN_MINOR_VERSION  = 0;
-    /* TCN_PATCH_VERSION */
-    public static int TCN_PATCH_VERSION  = 0;
-    /* TCN_IS_DEV_VERSION */
+    /**
+     * TCN major version.
+     */
+    public static int TCN_MAJOR_VERSION = 0;
+    /**
+     * TCN minor version.
+     */
+    public static int TCN_MINOR_VERSION = 0;
+    /**
+     * TCN patch version.
+     */
+    public static int TCN_PATCH_VERSION = 0;
+    /**
+     * TCN is development version flag.
+     */
     public static int TCN_IS_DEV_VERSION = 0;
-    /* APR_MAJOR_VERSION */
-    public static int APR_MAJOR_VERSION  = 0;
-    /* APR_MINOR_VERSION */
-    public static int APR_MINOR_VERSION  = 0;
-    /* APR_PATCH_VERSION */
-    public static int APR_PATCH_VERSION  = 0;
-    /* APR_IS_DEV_VERSION */
+    /**
+     * APR major version.
+     */
+    public static int APR_MAJOR_VERSION = 0;
+    /**
+     * APR minor version.
+     */
+    public static int APR_MINOR_VERSION = 0;
+    /**
+     * APR patch version.
+     */
+    public static int APR_PATCH_VERSION = 0;
+    /**
+     * APR is development version flag.
+     */
     public static int APR_IS_DEV_VERSION = 0;
 
-    /* TCN_VERSION_STRING */
+    /**
+     * Returns the TCN version string.
+     *
+     * @return the TCN version string
+     */
     public static native String versionString();
-    /* APR_VERSION_STRING */
+
+    /**
+     * Returns the APR version string.
+     *
+     * @return the APR version string
+     */
     public static native String aprVersionString();
 
-    /*  APR Feature Macros */
+    /* APR Feature Macros */
     @Deprecated
-    public static boolean APR_HAVE_IPV6           = false;
+    public static boolean APR_HAVE_IPV6 = false;
     @Deprecated
-    public static boolean APR_HAS_SHARED_MEMORY   = false;
+    public static boolean APR_HAS_SHARED_MEMORY = false;
     @Deprecated
-    public static boolean APR_HAS_THREADS         = false;
+    public static boolean APR_HAS_THREADS = false;
     @Deprecated
-    public static boolean APR_HAS_SENDFILE        = false;
+    public static boolean APR_HAS_SENDFILE = false;
     @Deprecated
-    public static boolean APR_HAS_MMAP            = false;
+    public static boolean APR_HAS_MMAP = false;
     @Deprecated
-    public static boolean APR_HAS_FORK            = false;
+    public static boolean APR_HAS_FORK = false;
     @Deprecated
-    public static boolean APR_HAS_RANDOM          = false;
+    public static boolean APR_HAS_RANDOM = false;
     @Deprecated
-    public static boolean APR_HAS_OTHER_CHILD     = false;
+    public static boolean APR_HAS_OTHER_CHILD = false;
     @Deprecated
-    public static boolean APR_HAS_DSO             = false;
+    public static boolean APR_HAS_DSO = false;
     @Deprecated
     public static boolean APR_HAS_SO_ACCEPTFILTER = false;
     @Deprecated
-    public static boolean APR_HAS_UNICODE_FS      = false;
+    public static boolean APR_HAS_UNICODE_FS = false;
     @Deprecated
-    public static boolean APR_HAS_PROC_INVOKED    = false;
+    public static boolean APR_HAS_PROC_INVOKED = false;
     @Deprecated
-    public static boolean APR_HAS_USER            = false;
+    public static boolean APR_HAS_USER = false;
     @Deprecated
-    public static boolean APR_HAS_LARGE_FILES     = false;
+    public static boolean APR_HAS_LARGE_FILES = false;
     @Deprecated
-    public static boolean APR_HAS_XTHREAD_FILES   = false;
+    public static boolean APR_HAS_XTHREAD_FILES = false;
     @Deprecated
-    public static boolean APR_HAS_OS_UUID         = false;
+    public static boolean APR_HAS_OS_UUID = false;
     /* Are we big endian? */
     @Deprecated
-    public static boolean APR_IS_BIGENDIAN        = false;
-    /* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
-     * to poll on files/pipes.
+    public static boolean APR_IS_BIGENDIAN = false;
+    /*
+     * APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible to poll on files/pipes.
      */
     @Deprecated
-    public static boolean APR_FILES_AS_SOCKETS    = false;
-    /* This macro indicates whether or not EBCDIC is the native character set.
+    public static boolean APR_FILES_AS_SOCKETS = false;
+    /*
+     * This macro indicates whether or not EBCDIC is the native character set.
      */
     @Deprecated
-    public static boolean APR_CHARSET_EBCDIC      = false;
-    /* Is the TCP_NODELAY socket option inherited from listening sockets?
+    public static boolean APR_CHARSET_EBCDIC = false;
+    /*
+     * Is the TCP_NODELAY socket option inherited from listening sockets?
      */
     @Deprecated
     public static boolean APR_TCP_NODELAY_INHERITED = false;
-    /* Is the O_NONBLOCK flag inherited from listening sockets?
+    /*
+     * Is the O_NONBLOCK flag inherited from listening sockets?
      */
     @Deprecated
-    public static boolean APR_O_NONBLOCK_INHERITED  = false;
-    /* Poll operations are interruptable by apr_pollset_wakeup().
+    public static boolean APR_O_NONBLOCK_INHERITED = false;
+    /*
+     * Poll operations are interruptable by apr_pollset_wakeup().
      */
     @Deprecated
-    public static boolean APR_POLLSET_WAKEABLE      = false;
-    /* Support for Unix Domain Sockets.
+    public static boolean APR_POLLSET_WAKEABLE = false;
+    /*
+     * Support for Unix Domain Sockets.
      */
     @Deprecated
-    public static boolean APR_HAVE_UNIX             = false;
+    public static boolean APR_HAVE_UNIX = false;
 
 
     @Deprecated
@@ -245,12 +282,11 @@
     public static native long globalPool();
 
     /**
-     * Setup any APR internal data structures.  This MUST be the first function
-     * called for any APR library.
+     * Setup any APR internal data structures. This MUST be the first function called for any APR library.
+     *
      * @param libraryName the name of the library to load
      *
-     * @return {@code true} if the native code was initialized successfully
-     *         otherwise {@code false}
+     * @return {@code true} if the native code was initialized successfully otherwise {@code false}
      *
      * @throws Exception if a problem occurred during initialization
      */
@@ -261,49 +297,48 @@
             } else {
                 _instance = new Library(libraryName);
             }
-            TCN_MAJOR_VERSION  = version(0x01);
-            TCN_MINOR_VERSION  = version(0x02);
-            TCN_PATCH_VERSION  = version(0x03);
+            TCN_MAJOR_VERSION = version(0x01);
+            TCN_MINOR_VERSION = version(0x02);
+            TCN_PATCH_VERSION = version(0x03);
             TCN_IS_DEV_VERSION = version(0x04);
-            APR_MAJOR_VERSION  = version(0x11);
-            APR_MINOR_VERSION  = version(0x12);
-            APR_PATCH_VERSION  = version(0x13);
+            APR_MAJOR_VERSION = version(0x11);
+            APR_MINOR_VERSION = version(0x12);
+            APR_PATCH_VERSION = version(0x13);
             APR_IS_DEV_VERSION = version(0x14);
 
-            APR_SIZEOF_VOIDP        = size(1);
-            APR_PATH_MAX            = size(2);
-            APRMAXHOSTLEN           = size(3);
-            APR_MAX_IOVEC_SIZE      = size(4);
-            APR_MAX_SECS_TO_LINGER  = size(5);
-            APR_MMAP_THRESHOLD      = size(6);
-            APR_MMAP_LIMIT          = size(7);
-
-            APR_HAVE_IPV6           = has(0);
-            APR_HAS_SHARED_MEMORY   = has(1);
-            APR_HAS_THREADS         = has(2);
-            APR_HAS_SENDFILE        = has(3);
-            APR_HAS_MMAP            = has(4);
-            APR_HAS_FORK            = has(5);
-            APR_HAS_RANDOM          = has(6);
-            APR_HAS_OTHER_CHILD     = has(7);
-            APR_HAS_DSO             = has(8);
+            APR_SIZEOF_VOIDP = size(1);
+            APR_PATH_MAX = size(2);
+            APRMAXHOSTLEN = size(3);
+            APR_MAX_IOVEC_SIZE = size(4);
+            APR_MAX_SECS_TO_LINGER = size(5);
+            APR_MMAP_THRESHOLD = size(6);
+            APR_MMAP_LIMIT = size(7);
+
+            APR_HAVE_IPV6 = has(0);
+            APR_HAS_SHARED_MEMORY = has(1);
+            APR_HAS_THREADS = has(2);
+            APR_HAS_SENDFILE = has(3);
+            APR_HAS_MMAP = has(4);
+            APR_HAS_FORK = has(5);
+            APR_HAS_RANDOM = has(6);
+            APR_HAS_OTHER_CHILD = has(7);
+            APR_HAS_DSO = has(8);
             APR_HAS_SO_ACCEPTFILTER = has(9);
-            APR_HAS_UNICODE_FS      = has(10);
-            APR_HAS_PROC_INVOKED    = has(11);
-            APR_HAS_USER            = has(12);
-            APR_HAS_LARGE_FILES     = has(13);
-            APR_HAS_XTHREAD_FILES   = has(14);
-            APR_HAS_OS_UUID         = has(15);
-            APR_IS_BIGENDIAN        = has(16);
-            APR_FILES_AS_SOCKETS    = has(17);
-            APR_CHARSET_EBCDIC      = has(18);
+            APR_HAS_UNICODE_FS = has(10);
+            APR_HAS_PROC_INVOKED = has(11);
+            APR_HAS_USER = has(12);
+            APR_HAS_LARGE_FILES = has(13);
+            APR_HAS_XTHREAD_FILES = has(14);
+            APR_HAS_OS_UUID = has(15);
+            APR_IS_BIGENDIAN = has(16);
+            APR_FILES_AS_SOCKETS = has(17);
+            APR_CHARSET_EBCDIC = has(18);
             APR_TCP_NODELAY_INHERITED = has(19);
-            APR_O_NONBLOCK_INHERITED  = has(20);
-            APR_POLLSET_WAKEABLE      = has(21);
-            APR_HAVE_UNIX             = has(22);
+            APR_O_NONBLOCK_INHERITED = has(20);
+            APR_POLLSET_WAKEABLE = has(21);
+            APR_HAVE_UNIX = has(22);
             if (APR_MAJOR_VERSION < 1) {
-                throw new UnsatisfiedLinkError("Unsupported APR Version (" +
-                                               aprVersionString() + ")");
+                throw new UnsatisfiedLinkError("Unsupported APR Version (" + aprVersionString() + ")");
             }
             if (!APR_HAS_THREADS) {
                 throw new UnsatisfiedLinkError("Missing threading support from APR");
@@ -316,10 +351,12 @@
     public static boolean tryCleanUpLock(long cleanupGeneration) {
         try {
             boolean result = cleanUpLock.readLock().tryLock(0, TimeUnit.SECONDS);
-            if (result &&  generation.get() == cleanupGeneration) {
-                return true;
+            if (result) {
+                if (generation.get() == cleanupGeneration) {
+                    return true;
+                }
+                cleanUpLock.readLock().unlock();
             }
-            cleanUpLock.readLock().unlock();
         } catch (InterruptedException e) {
             // Treated the same way as not getting the lock
         }
@@ -335,44 +372,34 @@
     }
 
     /**
-     * Calls System.load(filename). System.load() associates the
-     * loaded library with the class loader of the class that called
-     * the System method. A native library may not be loaded by more
-     * than one class loader, so calling the System method from a class that
-     * was loaded by a Webapp class loader will make it impossible for
-     * other Webapps to load it.
-     *
-     * Using this method will load the native library via a shared class
-     * loader (typically the Common class loader, but may vary in some
-     * configurations), so that it can be loaded by multiple Webapps.
+     * Calls System.load(filename). System.load() associates the loaded library with the class loader of the class that
+     * called the System method. A native library may not be loaded by more than one class loader, so calling the System
+     * method from a class that was loaded by a Webapp class loader will make it impossible for other Webapps to load
+     * it. Using this method will load the native library via a shared class loader (typically the Common class loader,
+     * but may vary in some configurations), so that it can be loaded by multiple Webapps.
      *
      * @param filename - absolute path of the native library
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1.x
      */
     @Deprecated
-    public static void load(String filename){
+    public static void load(String filename) {
         System.load(filename);
     }
 
     /**
-     * Calls System.loadLibrary(libname). System.loadLibrary() associates the
-     * loaded library with the class loader of the class that called
-     * the System method. A native library may not be loaded by more
-     * than one class loader, so calling the System method from a class that
-     * was loaded by a Webapp class loader will make it impossible for
-     * other Webapps to load it.
-     *
-     * Using this method will load the native library via a shared class
-     * loader (typically the Common class loader, but may vary in some
-     * configurations), so that it can be loaded by multiple Webapps.
+     * Calls System.loadLibrary(libname). System.loadLibrary() associates the loaded library with the class loader of
+     * the class that called the System method. A native library may not be loaded by more than one class loader, so
+     * calling the System method from a class that was loaded by a Webapp class loader will make it impossible for other
+     * Webapps to load it. Using this method will load the native library via a shared class loader (typically the
+     * Common class loader, but may vary in some configurations), so that it can be loaded by multiple Webapps.
      *
      * @param libname - the name of the native library
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1.x
      */
     @Deprecated
-    public static void loadLibrary(String libname){
+    public static void loadLibrary(String libname) {
         System.loadLibrary(libname);
     }
 
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/LibraryNotFoundError.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/LibraryNotFoundError.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/LibraryNotFoundError.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/LibraryNotFoundError.java	2026-06-11 17:01:29.000000000 -0300
@@ -16,24 +16,35 @@
  */
 package org.apache.tomcat.jni;
 
+/**
+ * Exception thrown when a required native library cannot be found.
+ */
 public class LibraryNotFoundError extends UnsatisfiedLinkError {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * The names of the libraries that failed to load.
+     */
     private final String libraryNames;
 
     /**
-     * @param libraryNames A list of the file names of the native libraries that
-     *                     failed to load
-     * @param errors A list of the error messages received when trying to load
-     *               each of the libraries
+     * Constructs an instance with the given library names and error messages.
+     *
+     * @param libraryNames A list of the file names of the native libraries that failed to load
+     * @param errors A list of the error messages received when trying to load each of the libraries
      */
-    public LibraryNotFoundError(String libraryNames, String errors){
+    public LibraryNotFoundError(String libraryNames, String errors) {
         super(errors);
         this.libraryNames = libraryNames;
     }
 
-    public String getLibraryNames(){
+    /**
+     * Returns the names of the libraries that failed to load.
+     *
+     * @return the library names
+     */
+    public String getLibraryNames() {
         return libraryNames;
     }
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Local.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Local.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Local.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Local.java	2026-06-11 17:01:29.000000000 -0300
@@ -19,63 +19,65 @@
 /**
  * Local socket.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Local {
 
     /**
      * Create a socket.
+     *
      * @param path The address of the new socket.
      * @param cont The parent pool to use
+     *
      * @return The new socket that has been set up.
+     *
      * @throws Exception If socket creation failed
      */
-    public static native long create(String path, long cont)
-        throws Exception;
+    public static native long create(String path, long cont) throws Exception;
 
     /**
      * Bind the socket to its associated port
+     *
      * @param sock The socket to bind
-     * @param sa The socket address to bind to
-     * This may be where we will find out if there is any other process
-     *      using the selected port.
+     * @param sa   The socket address to bind to This may be where we will find out if there is any other process using
+     *                 the selected port.
+     *
      * @return the operation status
      */
     public static native int bind(long sock, long sa);
 
     /**
      * Listen to a bound socket for connections.
-     * @param sock The socket to listen on
-     * @param backlog The number of outstanding connections allowed in the sockets
-     *                listen queue.  If this value is less than zero, for NT pipes
-     *                the number of instances is unlimited.
+     *
+     * @param sock    The socket to listen on
+     * @param backlog The number of outstanding connections allowed in the sockets listen queue. If this value is less
+     *                    than zero, for NT pipes the number of instances is unlimited.
+     *
      * @return the operation status
      */
     public static native int listen(long sock, int backlog);
 
     /**
      * Accept a new connection request
+     *
      * @param sock The socket we are listening on.
-     * @return  A copy of the socket that is connected to the socket that
-     *          made the connection request.  This is the socket which should
-     *          be used for all future communication.
+     *
+     * @return A copy of the socket that is connected to the socket that made the connection request. This is the socket
+     *             which should be used for all future communication.
+     *
      * @throws Exception If accept failed
      */
-    public static native long accept(long sock)
-        throws Exception;
+    public static native long accept(long sock) throws Exception;
 
     /**
-     * Issue a connection request to a socket either on the same machine
-     * or a different one.
+     * Issue a connection request to a socket either on the same machine or a different one.
+     *
      * @param sock The socket we wish to use for our side of the connection
-     * @param sa The address of the machine we wish to connect to.
-     *           Unused for NT Pipes.
+     * @param sa   The address of the machine we wish to connect to. Unused for NT Pipes.
+     *
      * @return the operation status
      */
     public static native int connect(long sock, long sa);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Lock.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Lock.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Lock.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Lock.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,125 +17,135 @@
 package org.apache.tomcat.jni;
 
 /**
- * Lock
+ * Lock.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Lock {
 
     /*
-     * Enumerated potential types for APR process locking methods
-     * <br><b>Warning :</b> Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
-     *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
+     * Enumerated potential types for APR process locking methods <br><b>Warning :</b> Check APR_HAS_foo_SERIALIZE
+     * defines to see if the platform supports APR_LOCK_foo. Only APR_LOCK_DEFAULT is portable.
      */
 
     /** fcntl() */
-    public static final int APR_LOCK_FCNTL        = 0;
+    public static final int APR_LOCK_FCNTL = 0;
     /** flock() */
-    public static final int APR_LOCK_FLOCK        = 1;
+    public static final int APR_LOCK_FLOCK = 1;
     /** System V Semaphores */
-    public static final int APR_LOCK_SYSVSEM      = 2;
+    public static final int APR_LOCK_SYSVSEM = 2;
     /** POSIX pthread process-based locking */
     public static final int APR_LOCK_PROC_PTHREAD = 3;
     /** POSIX semaphore process-based locking */
-    public static final int APR_LOCK_POSIXSEM     = 4;
+    public static final int APR_LOCK_POSIXSEM = 4;
     /** Use the default process lock */
-    public static final int APR_LOCK_DEFAULT      = 5;
+    public static final int APR_LOCK_DEFAULT = 5;
 
     /**
-     * Create and initialize a mutex that can be used to synchronize processes.
-     * <br><b>Warning :</b> Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
-     *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
-     * @param fname A file name to use if the lock mechanism requires one.  This
-     *        argument should always be provided.  The lock code itself will
-     *        determine if it should be used.
-     * @param mech The mechanism to use for the interprocess lock, if any; one of
-     * <PRE>
+     * Create and initialize a mutex that can be used to synchronize processes. <br>
+     * <b>Warning :</b> Check APR_HAS_foo_SERIALIZE defines to see if the platform supports APR_LOCK_foo. Only
+     * APR_LOCK_DEFAULT is portable.
+     *
+     * @param fname A file name to use if the lock mechanism requires one. This argument should always be provided. The
+     *                  lock code itself will determine if it should be used.
+     * @param mech  The mechanism to use for the interprocess lock, if any; one of
+     *
+     *                  <PRE>
      *            APR_LOCK_FCNTL
      *            APR_LOCK_FLOCK
      *            APR_LOCK_SYSVSEM
      *            APR_LOCK_POSIXSEM
      *            APR_LOCK_PROC_PTHREAD
      *            APR_LOCK_DEFAULT     pick the default mechanism for the platform
-     * </PRE>
-     * @param pool the pool from which to allocate the mutex.
+     *                  </PRE>
+     *
+     * @param pool  the pool from which to allocate the mutex.
+     *
      * @return Newly created mutex.
+     *
      * @throws Error An error occurred
      */
-    public static native long create(String fname, int mech, long pool)
-        throws Error;
+    public static native long create(String fname, int mech, long pool) throws Error;
 
     /**
-     * Re-open a mutex in a child process.
-     * This function must be called to maintain portability, even
-     * if the underlying lock mechanism does not require it.
-     * @param fname A file name to use if the mutex mechanism requires one.  This
-     *              argument should always be provided.  The mutex code itself will
-     *              determine if it should be used.  This filename should be the
-     *              same one that was passed to apr_proc_mutex_create().
-     * @param pool The pool to operate on.
+     * Re-open a mutex in a child process. This function must be called to maintain portability, even if the underlying
+     * lock mechanism does not require it.
+     *
+     * @param fname A file name to use if the mutex mechanism requires one. This argument should always be provided. The
+     *                  mutex code itself will determine if it should be used. This filename should be the same one that
+     *                  was passed to apr_proc_mutex_create().
+     * @param pool  The pool to operate on.
+     *
      * @return Newly opened mutex.
+     *
      * @throws Error An error occurred
      */
-    public static native long childInit(String fname, long pool)
-        throws Error;
+    public static native long childInit(String fname, long pool) throws Error;
 
     /**
-     * Acquire the lock for the given mutex. If the mutex is already locked,
-     * the current thread will be put to sleep until the lock becomes available.
+     * Acquire the lock for the given mutex. If the mutex is already locked, the current thread will be put to sleep
+     * until the lock becomes available.
+     *
      * @param mutex the mutex on which to acquire the lock.
+     *
      * @return the operation status
      */
     public static native int lock(long mutex);
 
     /**
-     * Attempt to acquire the lock for the given mutex. If the mutex has already
-     * been acquired, the call returns immediately with APR_EBUSY. Note: it
-     * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
-     * if the return value was APR_EBUSY, for portability reasons.
+     * Attempt to acquire the lock for the given mutex. If the mutex has already been acquired, the call returns
+     * immediately with APR_EBUSY. Note: it is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine if
+     * the return value was APR_EBUSY, for portability reasons.
+     *
      * @param mutex the mutex on which to attempt the lock acquiring.
+     *
      * @return the operation status
      */
     public static native int trylock(long mutex);
 
     /**
      * Release the lock for the given mutex.
+     *
      * @param mutex the mutex from which to release the lock.
+     *
      * @return the operation status
      */
     public static native int unlock(long mutex);
 
     /**
      * Destroy the mutex and free the memory associated with the lock.
+     *
      * @param mutex the mutex to destroy.
+     *
      * @return the operation status
      */
     public static native int destroy(long mutex);
 
     /**
-     * Return the name of the lockfile for the mutex, or NULL
-     * if the mutex doesn't use a lock file
+     * Return the name of the lockfile for the mutex, or NULL if the mutex doesn't use a lock file
+     *
      * @param mutex the name of the mutex
+     *
      * @return the name of the lock file
      */
     public static native String lockfile(long mutex);
 
     /**
-     * Display the name of the mutex, as it relates to the actual method used.
-     * This matches the valid options for Apache's AcceptMutex directive
+     * Display the name of the mutex, as it relates to the actual method used. This matches the valid options for
+     * Apache's AcceptMutex directive
+     *
      * @param mutex the name of the mutex
+     *
      * @return the name of the mutex
      */
     public static native String name(long mutex);
 
     /**
      * Display the name of the default mutex: APR_LOCK_DEFAULT
+     *
      * @return the default name
      */
     public static native String defname();
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Mmap.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Mmap.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Mmap.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Mmap.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,65 +17,72 @@
 package org.apache.tomcat.jni;
 
 /**
- * Mmap
+ * Mmap.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Mmap {
     /** MMap opened for reading */
-    public static final int APR_MMAP_READ  = 1;
+    public static final int APR_MMAP_READ = 1;
     /** MMap opened for writing */
     public static final int APR_MMAP_WRITE = 2;
 
 
     /**
      * Create a new mmap'ed file out of an existing APR file.
-     * @param file The file turn into an mmap.
+     *
+     * @param file   The file turn into an mmap.
      * @param offset The offset into the file to start the data pointer at.
-     * @param size The size of the file
-     * @param flag bit-wise or of:
-     * <PRE>
+     * @param size   The size of the file
+     * @param flag   bit-wise or of:
+     *
+     *                   <PRE>
      * APR_MMAP_READ       MMap opened for reading
      * APR_MMAP_WRITE      MMap opened for writing
-     * </PRE>
-     * @param pool The pool to use when creating the mmap.
+     *                   </PRE>
+     *
+     * @param pool   The pool to use when creating the mmap.
+     *
      * @return The newly created mmap'ed file.
+     *
      * @throws Error Error creating memory mapping
      */
-    public static native long create(long file, long offset, long size, int flag, long pool)
-        throws Error;
+    public static native long create(long file, long offset, long size, int flag, long pool) throws Error;
 
     /**
      * Duplicate the specified MMAP.
+     *
      * @param mmap The mmap to duplicate.
      * @param pool The pool to use for new_mmap.
+     *
      * @return Duplicated mmap'ed file.
+     *
      * @throws Error Error duplicating memory mapping
      */
-    public static native long dup(long mmap, long pool)
-        throws Error;
+    public static native long dup(long mmap, long pool) throws Error;
 
     /**
      * Remove a mmap'ed.
+     *
      * @param mm The mmap'ed file.
+     *
      * @return the operation status
      */
     public static native int delete(long mm);
 
     /**
      * Move the pointer into the mmap'ed file to the specified offset.
-     * @param mm The mmap'ed file.
+     *
+     * @param mm     The mmap'ed file.
      * @param offset The offset to move to.
+     *
      * @return The pointer to the offset specified.
+     *
      * @throws Error Error reading file
      */
-    public static native long offset(long mm, long offset)
-        throws Error;
+    public static native long offset(long mm, long offset) throws Error;
 
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Multicast.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Multicast.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Multicast.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Multicast.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,60 +17,59 @@
 package org.apache.tomcat.jni;
 
 /**
- * Multicast
+ * Multicast.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Multicast {
 
     /**
      * Join a Multicast Group
-     * @param sock The socket to join a multicast group
-     * @param join The address of the multicast group to join
-     * @param iface Address of the interface to use.  If NULL is passed, the
-     *              default multicast interface will be used. (OS Dependent)
-     * @param source Source Address to accept transmissions from (non-NULL
-     *               implies Source-Specific Multicast)
+     *
+     * @param sock   The socket to join a multicast group
+     * @param join   The address of the multicast group to join
+     * @param iface  Address of the interface to use. If NULL is passed, the default multicast interface will be used.
+     *                   (OS Dependent)
+     * @param source Source Address to accept transmissions from (non-NULL implies Source-Specific Multicast)
+     *
      * @return the operation status
      */
-    public static native int join(long sock, long join,
-                                  long iface, long source);
+    public static native int join(long sock, long join, long iface, long source);
 
     /**
-     * Leave a Multicast Group.  All arguments must be the same as
-     * apr_mcast_join.
-     * @param sock The socket to leave a multicast group
-     * @param addr The address of the multicast group to leave
-     * @param iface Address of the interface to use.  If NULL is passed, the
-     *              default multicast interface will be used. (OS Dependent)
-     * @param source Source Address to accept transmissions from (non-NULL
-     *               implies Source-Specific Multicast)
+     * Leave a Multicast Group. All arguments must be the same as apr_mcast_join.
+     *
+     * @param sock   The socket to leave a multicast group
+     * @param addr   The address of the multicast group to leave
+     * @param iface  Address of the interface to use. If NULL is passed, the default multicast interface will be used.
+     *                   (OS Dependent)
+     * @param source Source Address to accept transmissions from (non-NULL implies Source-Specific Multicast)
+     *
      * @return the operation status
      */
-    public static native int leave(long sock, long addr,
-                                   long iface, long source);
+    public static native int leave(long sock, long addr, long iface, long source);
 
     /**
      * Set the Multicast Time to Live (ttl) for a multicast transmission.
+     *
      * @param sock The socket to set the multicast ttl
-     * @param ttl Time to live to Assign. 0-255, default=1
-     * <br><b>Remark :</b> If the TTL is 0, packets will only be seen
-     * by sockets on the local machine,
-     * and only when multicast loopback is enabled.
+     * @param ttl  Time to live to Assign. 0-255, default=1 <br>
+     *                 <b>Remark :</b> If the TTL is 0, packets will only be seen by sockets on the local machine, and
+     *                 only when multicast loopback is enabled.
+     *
      * @return the operation status
      */
     public static native int hops(long sock, int ttl);
 
     /**
      * Toggle IP Multicast Loopback
+     *
      * @param sock The socket to set multicast loopback
-     * @param opt false=disable, true=enable
+     * @param opt  false=disable, true=enable
+     *
      * @return the operation status
      */
     public static native int loopback(long sock, boolean opt);
@@ -78,8 +77,10 @@
 
     /**
      * Set the Interface to be used for outgoing Multicast Transmissions.
-     * @param sock The socket to set the multicast interface on
+     *
+     * @param sock  The socket to set the multicast interface on
      * @param iface Address of the interface to use for Multicast
+     *
      * @return the operation status
      */
     public static native int ointerface(long sock, long iface);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/OS.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/OS.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/OS.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/OS.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,81 +17,84 @@
 package org.apache.tomcat.jni;
 
 /**
- * OS
+ * OS.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class OS {
 
     /* OS Enums */
-    private static final int UNIX      = 1;
-    private static final int WIN32     = 3;
-    private static final int WIN64     = 4;
-    private static final int LINUX     = 5;
-    private static final int SOLARIS   = 6;
-    private static final int BSD       = 7;
-    private static final int MACOSX    = 8;
+    private static final int UNIX = 1;
+    private static final int WIN32 = 3;
+    private static final int WIN64 = 4;
+    private static final int LINUX = 5;
+    private static final int SOLARIS = 6;
+    private static final int BSD = 7;
+    private static final int MACOSX = 8;
 
-    public static final int LOG_EMERG  = 1;
-    public static final int LOG_ERROR  = 2;
+    public static final int LOG_EMERG = 1;
+    public static final int LOG_ERROR = 2;
     public static final int LOG_NOTICE = 3;
-    public static final int LOG_WARN   = 4;
-    public static final int LOG_INFO   = 5;
-    public static final int LOG_DEBUG  = 6;
+    public static final int LOG_WARN = 4;
+    public static final int LOG_INFO = 5;
+    public static final int LOG_DEBUG = 6;
 
     /**
      * Check for OS type.
+     *
      * @param type OS type to test.
      */
     private static native boolean is(int type);
 
-    public static final boolean IS_UNIX    = is(UNIX);
+    public static final boolean IS_UNIX = is(UNIX);
     /**
-     * @deprecated Hard-coded to false since there has not been a supported
-     *             Netware platform for many years.
-     *             This will be removed in Tomcat 10 onwards
+     * @deprecated Hard-coded to false since there has not been a supported Netware platform for many years. This will
+     *                 be removed in Tomcat 10 onwards
      */
     @Deprecated
     public static final boolean IS_NETWARE = false;
-    public static final boolean IS_WIN32   = is(WIN32);
-    public static final boolean IS_WIN64   = is(WIN64);
-    public static final boolean IS_LINUX   = is(LINUX);
+    public static final boolean IS_WIN32 = is(WIN32);
+    public static final boolean IS_WIN64 = is(WIN64);
+    public static final boolean IS_LINUX = is(LINUX);
     public static final boolean IS_SOLARIS = is(SOLARIS);
-    public static final boolean IS_BSD     = is(BSD);
-    public static final boolean IS_MACOSX  = is(MACOSX);
+    public static final boolean IS_BSD = is(BSD);
+    public static final boolean IS_MACOSX = is(MACOSX);
 
     /**
      * Get the name of the system default character set.
+     *
      * @param pool the pool to allocate the name from, if needed
+     *
      * @return the encoding
      */
     public static native String defaultEncoding(long pool);
 
     /**
-     * Get the name of the current locale character set.
-     * Defers to apr_os_default_encoding if the current locale's
-     * data can't be retrieved on this system.
+     * Get the name of the current locale character set. Defers to apr_os_default_encoding if the current locale's data
+     * can't be retrieved on this system.
+     *
      * @param pool the pool to allocate the name from, if needed
+     *
      * @return the encoding
      */
     public static native String localeEncoding(long pool);
 
     /**
      * Generate random bytes.
+     *
      * @param buf Buffer to fill with random bytes
      * @param len Length of buffer in bytes
+     *
      * @return the operation status
      */
-    public static native int random(byte [] buf, int len);
+    public static native int random(byte[] buf, int len);
 
     /**
      * Gather system info.
+     *
      * <PRE>
      * On exit the inf array will be filled with:
      * inf[0]  - Total usable main memory size
@@ -114,28 +117,33 @@
      * inf[14] - Peak working set size.
      * inf[15] - Number of page faults.
      * </PRE>
-     * @param inf array that will be filled with system information.
-     *            Array length must be at least 16.
+     *
+     * @param inf array that will be filled with system information. Array length must be at least 16.
+     *
      * @return the operation status
      */
-    public static native int info(long [] inf);
+    public static native int info(long[] inf);
 
     /**
      * Expand environment variables.
+     *
      * @param str String to expand
+     *
      * @return Expanded string with replaced environment variables.
      */
     public static native String expand(String str);
 
     /**
      * Initialize system logging.
+     *
      * @param domain String that will be prepended to every message
      */
     public static native void sysloginit(String domain);
 
     /**
      * Log message.
-     * @param level Log message severity. See LOG_XXX enums.
+     *
+     * @param level   Log message severity. See LOG_XXX enums.
      * @param message Message to log
      */
     public static native void syslog(int level, String message);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/PasswordCallback.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/PasswordCallback.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/PasswordCallback.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/PasswordCallback.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,18 +17,18 @@
 package org.apache.tomcat.jni;
 
 /**
- * PasswordCallback Interface
+ * PasswordCallback Interface.
  *
- * @author Mladen Turk
- *
- * @deprecated Unused. Will be removed in Tomcat 10.1
+ * @deprecated Unused. Will be removed in Tomcat 9.1 an has been removed in Tomcat 10.1.
  */
 @Deprecated
 public interface PasswordCallback {
 
     /**
      * Called when the password is required
+     *
      * @param prompt Password prompt
+     *
      * @return Valid password or null
      */
     String callback(String prompt);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Poll.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Poll.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Poll.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Poll.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,14 +17,11 @@
 package org.apache.tomcat.jni;
 
 /**
- * Poll
+ * Poll.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Poll {
@@ -33,15 +30,15 @@
      * Poll return values
      */
     /** Can read without blocking */
-    public static final int APR_POLLIN   = 0x001;
+    public static final int APR_POLLIN = 0x001;
     /** Priority data available */
-    public static final int APR_POLLPRI  = 0x002;
+    public static final int APR_POLLPRI = 0x002;
     /** Can write without blocking */
-    public static final int APR_POLLOUT  = 0x004;
+    public static final int APR_POLLOUT = 0x004;
     /** Pending error */
-    public static final int APR_POLLERR  = 0x010;
+    public static final int APR_POLLERR = 0x010;
     /** Hangup occurred */
-    public static final int APR_POLLHUP  = 0x020;
+    public static final int APR_POLLHUP = 0x020;
     /** Descriptor invalid */
     public static final int APR_POLLNVAL = 0x040;
 
@@ -52,139 +49,152 @@
     public static final int APR_POLLSET_THREADSAFE = 0x001;
 
 
-    /* Used in apr_pollfd_t to determine what the apr_descriptor is
-     * apr_datatype_e enum
+    /*
+     * Used in apr_pollfd_t to determine what the apr_descriptor is apr_datatype_e enum
      */
     /** nothing here */
-    public static final int APR_NO_DESC       = 0;
+    public static final int APR_NO_DESC = 0;
     /** descriptor refers to a socket */
-    public static final int APR_POLL_SOCKET   = 1;
+    public static final int APR_POLL_SOCKET = 1;
     /** descriptor refers to a file */
-    public static final int APR_POLL_FILE     = 2;
+    public static final int APR_POLL_FILE = 2;
     /** descriptor is the last one in the list */
     public static final int APR_POLL_LASTDESC = 3;
 
     /**
-     * Setup a pollset object.
-     * If flags equals APR_POLLSET_THREADSAFE, then a pollset is
-     * created on which it is safe to make concurrent calls to
-     * apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll() from
-     * separate threads.  This feature is only supported on some
-     * platforms; the apr_pollset_create() call will fail with
-     * APR_ENOTIMPL on platforms where it is not supported.
-     * @param size The maximum number of descriptors that this pollset can hold
-     * @param p The pool from which to allocate the pollset
+     * Setup a pollset object. If flags equals APR_POLLSET_THREADSAFE, then a pollset is created on which it is safe to
+     * make concurrent calls to apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll() from separate threads.
+     * This feature is only supported on some platforms; the apr_pollset_create() call will fail with APR_ENOTIMPL on
+     * platforms where it is not supported.
+     *
+     * @param size  The maximum number of descriptors that this pollset can hold
+     * @param p     The pool from which to allocate the pollset
      * @param flags Optional flags to modify the operation of the pollset.
-     * @param ttl Maximum time to live for a particular socket.
-     * @return  The pointer in which to return the newly created object
+     * @param ttl   Maximum time to live for a particular socket.
+     *
+     * @return The pointer in which to return the newly created object
+     *
      * @throws Error Pollset creation failed
      */
-    public static native long create(int size, long p, int flags, long ttl)
-        throws Error;
+    public static native long create(int size, long p, int flags, long ttl) throws Error;
+
     /**
      * Destroy a pollset object
+     *
      * @param pollset The pollset to destroy
+     *
      * @return the operation status
      */
     public static native int destroy(long pollset);
 
     /**
      * Add a socket to a pollset with the default timeout.
-     * @param pollset The pollset to which to add the socket
-     * @param sock The sockets to add
+     *
+     * @param pollset   The pollset to which to add the socket
+     * @param sock      The sockets to add
      * @param reqevents requested events
+     *
      * @return the operation status
      */
-    public static native int add(long pollset, long sock,
-                                 int reqevents);
+    public static native int add(long pollset, long sock, int reqevents);
 
     /**
      * Add a socket to a pollset with a specific timeout.
-     * @param pollset The pollset to which to add the socket
-     * @param sock The sockets to add
+     *
+     * @param pollset   The pollset to which to add the socket
+     * @param sock      The sockets to add
      * @param reqevents requested events
-     * @param timeout requested timeout in microseconds (-1 for infinite)
+     * @param timeout   requested timeout in microseconds (-1 for infinite)
+     *
      * @return the operation status
      */
-    public static native int addWithTimeout(long pollset, long sock,
-                                            int reqevents, long timeout);
+    public static native int addWithTimeout(long pollset, long sock, int reqevents, long timeout);
 
     /**
      * Remove a descriptor from a pollset
+     *
      * @param pollset The pollset from which to remove the descriptor
-     * @param sock The socket to remove
+     * @param sock    The socket to remove
+     *
      * @return the operation status
      */
     public static native int remove(long pollset, long sock);
 
     /**
      * Block for activity on the descriptor(s) in a pollset
-     * @param pollset The pollset to use
-     * @param timeout Timeout in microseconds
-     * @param descriptors Array of signaled descriptors (output parameter)
-     *        The descriptor array must be two times the size of pollset.
-     *        and are populated as follows:
-     * <PRE>
+     *
+     * @param pollset     The pollset to use
+     * @param timeout     Timeout in microseconds
+     * @param descriptors Array of signaled descriptors (output parameter) The descriptor array must be two times the
+     *                        size of pollset. and are populated as follows:
+     *
+     *                        <PRE>
      * descriptors[2n + 0] -> returned events
      * descriptors[2n + 1] -> socket
-     * </PRE>
-     * @param remove Remove signaled descriptors from pollset
-     * @return Number of signaled descriptors (output parameter)
-     *         or negative APR error code.
+     *                        </PRE>
+     *
+     * @param remove      Remove signaled descriptors from pollset
+     *
+     * @return Number of signaled descriptors (output parameter) or negative APR error code.
      */
-    public static native int poll(long pollset, long timeout,
-                                  long [] descriptors, boolean remove);
+    public static native int poll(long pollset, long timeout, long[] descriptors, boolean remove);
 
     /**
      * Maintain on the descriptor(s) in a pollset
-     * @param pollset The pollset to use
-     * @param descriptors Array of signaled descriptors (output parameter)
-     *        The descriptor array must be the size of pollset.
-     *        and are populated as follows:
-     * <PRE>
+     *
+     * @param pollset     The pollset to use
+     * @param descriptors Array of signaled descriptors (output parameter) The descriptor array must be the size of
+     *                        pollset. and are populated as follows:
+     *
+     *                        <PRE>
      * descriptors[n] -> socket
-     * </PRE>
-     * @param remove Remove signaled descriptors from pollset
-     * @return Number of signaled descriptors (output parameter)
-     *         or negative APR error code.
+     *                        </PRE>
+     *
+     * @param remove      Remove signaled descriptors from pollset
+     *
+     * @return Number of signaled descriptors (output parameter) or negative APR error code.
      */
-    public static native int maintain(long pollset, long [] descriptors,
-                                      boolean remove);
+    public static native int maintain(long pollset, long[] descriptors, boolean remove);
 
     /**
      * Set the socket time to live.
+     *
      * @param pollset The pollset to use
-     * @param ttl Timeout in microseconds
+     * @param ttl     Timeout in microseconds
      */
     public static native void setTtl(long pollset, long ttl);
 
     /**
      * Get the socket time to live.
+     *
      * @param pollset The pollset to use
+     *
      * @return Timeout in microseconds
      */
     public static native long getTtl(long pollset);
 
     /**
      * Return all descriptor(s) in a pollset
-     * @param pollset The pollset to use
-     * @param descriptors Array of descriptors (output parameter)
-     *        The descriptor array must be two times the size of pollset.
-     *        and are populated as follows:
-     * <PRE>
+     *
+     * @param pollset     The pollset to use
+     * @param descriptors Array of descriptors (output parameter) The descriptor array must be two times the size of
+     *                        pollset. and are populated as follows:
+     *
+     *                        <PRE>
      * descriptors[2n + 0] -> returned events
      * descriptors[2n + 1] -> socket
-     * </PRE>
-     * @return Number of descriptors (output parameter) in the Poll
-     *         or negative APR error code.
+     *                        </PRE>
+     *
+     * @return Number of descriptors (output parameter) in the Poll or negative APR error code.
      */
-    public static native int pollset(long pollset, long [] descriptors);
+    public static native int pollset(long pollset, long[] descriptors);
 
     /**
      * Make poll() return.
      *
-     * @param   pollset The pollset to use
-     * @return  Negative APR error code
+     * @param pollset The pollset to use
+     *
+     * @return Negative APR error code
      */
     public static native int interrupt(long pollset);
 
@@ -192,8 +202,8 @@
      * Check if interrupt() is allowed.
      *
      * @param pollset The pollset to use
-     * @return  <code>true</code> if {@link #interrupt(long)} is allowed, else
-     *          <code>false</code>
+     *
+     * @return <code>true</code> if {@link #interrupt(long)} is allowed, else <code>false</code>
      */
     public static native boolean wakeable(long pollset);
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/PoolCallback.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/PoolCallback.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/PoolCallback.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/PoolCallback.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,20 +17,18 @@
 package org.apache.tomcat.jni;
 
 /**
- * PoolCallback Interface
+ * PoolCallback Interface.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public interface PoolCallback {
 
     /**
      * Called when the pool is destroyed or cleared
+     *
      * @return Function must return APR_SUCCESS
      */
     int callback();
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Pool.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Pool.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Pool.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Pool.java	2026-06-11 17:01:29.000000000 -0300
@@ -19,29 +19,31 @@
 import java.nio.ByteBuffer;
 
 /**
- * Provides access to APR memory pools which are used to manage memory
- * allocations for natively created instances.
- */
+  * Provides access to APR memory pools which are used to manage memory allocations for natively created instances.
+  */
 public class Pool {
 
     /**
+     * Default constructor required by JNI.
+     */
+    public Pool() {
+    }
+
+    /**
      * Create a new pool.
      *
-     * @param parent The parent pool. If this is 0, the new pool is a root pool.
-     *               If it is non-zero, the new pool will inherit all of its
-     *               parent pool's attributes, except the apr_pool_t will be a
-     *               sub-pool.
+     * @param parent The parent pool. If this is 0, the new pool is a root pool. If it is non-zero, the new pool will
+     *                   inherit all of its parent pool's attributes, except the apr_pool_t will be a sub-pool.
      *
      * @return The pool we have just created.
-    */
+     */
     public static native long create(long parent);
 
     /**
-     * Clear all memory in the pool and run all the cleanups. This also destroys all
-     * subpools.
-     * @param pool The pool to clear
-     * This does not actually free the memory, it just allows the pool
-     *         to re-use this memory for the next allocation.
+     * Clear all memory in the pool and run all the cleanups. This also destroys all subpools.
+     *
+     * @param pool The pool to clear This does not actually free the memory, it just allows the pool to re-use this
+     *                 memory for the next allocation.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
@@ -49,8 +51,8 @@
     public static native void clear(long pool);
 
     /**
-     * Destroy the pool. This takes similar action as apr_pool_clear() and then
-     * frees all the memory. This will actually free the memory.
+     * Destroy the pool. This takes similar action as apr_pool_clear() and then frees all the memory. This will actually
+     * free the memory.
      *
      * @param pool The pool to destroy
      */
@@ -58,7 +60,9 @@
 
     /**
      * Get the parent pool of the specified pool.
+     *
      * @param pool The pool for retrieving the parent pool.
+     *
      * @return The parent of the given pool.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -68,10 +72,11 @@
 
     /**
      * Determine if pool a is an ancestor of pool b
+     *
      * @param a The pool to search
      * @param b The pool to search for
-     * @return True if a is an ancestor of b, NULL is considered an ancestor
-     * of all pools.
+     *
+     * @return True if a is an ancestor of b, NULL is considered an ancestor of all pools.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
@@ -82,20 +87,19 @@
     /*
      * Cleanup
      *
-     * Cleanups are performed in the reverse order they were registered.  That is:
-     * Last In, First Out.  A cleanup function can safely allocate memory from
-     * the pool that is being cleaned up. It can also safely register additional
-     * cleanups which will be run LIFO, directly after the current cleanup
-     * terminates.  Cleanups have to take caution in calling functions that
-     * create subpools. Subpools, created during cleanup will NOT automatically
-     * be cleaned up.  In other words, cleanups are to clean up after themselves.
+     * Cleanups are performed in the reverse order they were registered. That is: Last In, First Out. A cleanup function
+     * can safely allocate memory from the pool that is being cleaned up. It can also safely register additional
+     * cleanups which will be run LIFO, directly after the current cleanup terminates. Cleanups have to take caution in
+     * calling functions that create subpools. Subpools, created during cleanup will NOT automatically be cleaned up. In
+     * other words, cleanups are to clean up after themselves.
      */
 
     /**
      * Register a function to be called when a pool is cleared or destroyed
+     *
      * @param pool The pool register the cleanup with
-     * @param o The object to call when the pool is cleared
-     *                      or destroyed
+     * @param o    The object to call when the pool is cleared or destroyed
+     *
      * @return The cleanup handler.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -105,6 +109,7 @@
 
     /**
      * Remove a previously registered cleanup function
+     *
      * @param pool The pool remove the cleanup from
      * @param data The cleanup handler to remove from cleanup
      *
@@ -115,16 +120,18 @@
 
     /**
      * Register a process to be killed when a pool dies.
-     * @param a The pool to use to define the processes lifetime
+     *
+     * @param a    The pool to use to define the processes lifetime
      * @param proc The process to register
-     * @param how How to kill the process, one of:
-     * <PRE>
+     * @param how  How to kill the process, one of:
+     *
+     *                 <PRE>
      * APR_KILL_NEVER         -- process is never sent any signals
      * APR_KILL_ALWAYS        -- process is sent SIGKILL on apr_pool_t cleanup
      * APR_KILL_AFTER_TIMEOUT -- SIGTERM, wait 3 seconds, SIGKILL
      * APR_JUST_WAIT          -- wait forever for the process to complete
      * APR_KILL_ONLY_ONCE     -- send SIGTERM and then wait
-     * </PRE>
+     *                 </PRE>
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
@@ -133,8 +140,10 @@
 
     /**
      * Allocate a block of memory from a pool
-     * @param p The pool to allocate from
+     *
+     * @param p    The pool to allocate from
      * @param size The amount of memory to allocate
+     *
      * @return The ByteBuffer with allocated memory
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -144,8 +153,10 @@
 
     /**
      * Allocate a block of memory from a pool and set all of the memory to 0
-     * @param p The pool to allocate from
+     *
+     * @param p    The pool to allocate from
      * @param size The amount of memory to allocate
+     *
      * @return The ByteBuffer with allocated memory
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -159,35 +170,37 @@
 
     /**
      * Set the data associated with the current pool
+     *
      * @param data The user data associated with the pool.
-     * @param key The key to use for association
-     * @param pool The current pool
-     * <br><b>Warning :</b>
-     * The data to be attached to the pool should have a life span
-     * at least as long as the pool it is being attached to.
-     * Object attached to the pool will be globally referenced
-     * until the pool is cleared or dataSet is called with the null data.
+     * @param key  The key to use for association
+     * @param pool The current pool <br>
+     *                 <b>Warning :</b> The data to be attached to the pool should have a life span at least as long as
+     *                 the pool it is being attached to. Object attached to the pool will be globally referenced until
+     *                 the pool is cleared or dataSet is called with the null data.
+     *
      * @return APR Status code.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
     @Deprecated
-     public static native int dataSet(long pool, String key, Object data);
+    public static native int dataSet(long pool, String key, Object data);
 
     /**
      * Return the data associated with the current pool.
-     * @param key The key for the data to retrieve
+     *
+     * @param key  The key for the data to retrieve
      * @param pool The current pool.
+     *
      * @return the data
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
     @Deprecated
-     public static native Object dataGet(long pool, String key);
+    public static native Object dataGet(long pool, String key);
 
     /**
-     * Run all of the child_cleanups, so that any unnecessary files are
-     * closed because we are about to exec a new program
+     * Run all of the child_cleanups, so that any unnecessary files are closed because we are about to exec a new
+     * program
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Procattr.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Procattr.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Procattr.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Procattr.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,170 +17,173 @@
 package org.apache.tomcat.jni;
 
 /**
- * Procattr
+ * Procattr.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Procattr {
 
     /**
      * Create and initialize a new procattr variable
+     *
      * @param cont The pool to use
+     *
      * @return The newly created procattr.
+     *
      * @throws Error An error occurred
      */
-    public static native long create(long cont)
-        throws Error;
+    public static native long create(long cont) throws Error;
 
     /**
-     * Determine if any of stdin, stdout, or stderr should be linked to pipes
-     * when starting a child process.
+     * Determine if any of stdin, stdout, or stderr should be linked to pipes when starting a child process.
+     *
      * @param attr The procattr we care about.
-     * @param in Should stdin be a pipe back to the parent?
-     * @param out Should stdout be a pipe back to the parent?
-     * @param err Should stderr be a pipe back to the parent?
+     * @param in   Should stdin be a pipe back to the parent?
+     * @param out  Should stdout be a pipe back to the parent?
+     * @param err  Should stderr be a pipe back to the parent?
+     *
      * @return the operation status
      */
     public static native int ioSet(long attr, int in, int out, int err);
 
     /**
-     * Set the child_in and/or parent_in values to existing apr_file_t values.
-     * <br>
-     * This is NOT a required initializer function. This is
-     * useful if you have already opened a pipe (or multiple files)
-     * that you wish to use, perhaps persistently across multiple
-     * process invocations - such as a log file. You can save some
-     * extra function calls by not creating your own pipe since this
-     * creates one in the process space for you.
-     * @param attr The procattr we care about.
-     * @param in apr_file_t value to use as child_in. Must be a valid file.
+     * Set the child_in and/or parent_in values to existing apr_file_t values. <br>
+     * This is NOT a required initializer function. This is useful if you have already opened a pipe (or multiple files)
+     * that you wish to use, perhaps persistently across multiple process invocations - such as a log file. You can save
+     * some extra function calls by not creating your own pipe since this creates one in the process space for you.
+     *
+     * @param attr   The procattr we care about.
+     * @param in     apr_file_t value to use as child_in. Must be a valid file.
      * @param parent apr_file_t value to use as parent_in. Must be a valid file.
+     *
      * @return the operation status
      */
     public static native int childInSet(long attr, long in, long parent);
 
     /**
-     * Set the child_out and parent_out values to existing apr_file_t values.
-     * <br>
-     * This is NOT a required initializer function. This is
-     * useful if you have already opened a pipe (or multiple files)
-     * that you wish to use, perhaps persistently across multiple
-     * process invocations - such as a log file.
-     * @param attr The procattr we care about.
-     * @param out apr_file_t value to use as child_out. Must be a valid file.
+     * Set the child_out and parent_out values to existing apr_file_t values. <br>
+     * This is NOT a required initializer function. This is useful if you have already opened a pipe (or multiple files)
+     * that you wish to use, perhaps persistently across multiple process invocations - such as a log file.
+     *
+     * @param attr   The procattr we care about.
+     * @param out    apr_file_t value to use as child_out. Must be a valid file.
      * @param parent apr_file_t value to use as parent_out. Must be a valid file.
+     *
      * @return the operation status
      */
     public static native int childOutSet(long attr, long out, long parent);
 
     /**
-     * Set the child_err and parent_err values to existing apr_file_t values.
-     * <br>
-     * This is NOT a required initializer function. This is
-     * useful if you have already opened a pipe (or multiple files)
-     * that you wish to use, perhaps persistently across multiple
-     * process invocations - such as a log file.
-     * @param attr The procattr we care about.
-     * @param err apr_file_t value to use as child_err. Must be a valid file.
+     * Set the child_err and parent_err values to existing apr_file_t values. <br>
+     * This is NOT a required initializer function. This is useful if you have already opened a pipe (or multiple files)
+     * that you wish to use, perhaps persistently across multiple process invocations - such as a log file.
+     *
+     * @param attr   The procattr we care about.
+     * @param err    apr_file_t value to use as child_err. Must be a valid file.
      * @param parent apr_file_t value to use as parent_err. Must be a valid file.
+     *
      * @return the operation status
      */
     public static native int childErrSet(long attr, long err, long parent);
 
     /**
      * Set which directory the child process should start executing in.
+     *
      * @param attr The procattr we care about.
-     * @param dir Which dir to start in.  By default, this is the same dir as
-     *            the parent currently resides in, when the createprocess call
-     *            is made.
+     * @param dir  Which dir to start in. By default, this is the same dir as the parent currently resides in, when the
+     *                 createprocess call is made.
+     *
      * @return the operation status
      */
     public static native int dirSet(long attr, String dir);
 
     /**
      * Set what type of command the child process will call.
+     *
      * @param attr The procattr we care about.
-     * @param cmd The type of command.  One of:
-     * <PRE>
+     * @param cmd  The type of command. One of:
+     *
+     *                 <PRE>
      * APR_SHELLCMD     --  Anything that the shell can handle
      * APR_PROGRAM      --  Executable program   (default)
      * APR_PROGRAM_ENV  --  Executable program, copy environment
      * APR_PROGRAM_PATH --  Executable program on PATH, copy env
-     * </PRE>
+     *                 </PRE>
+     *
      * @return the operation status
      */
     public static native int cmdtypeSet(long attr, int cmd);
 
     /**
      * Determine if the child should start in detached state.
-     * @param attr The procattr we care about.
-     * @param detach Should the child start in detached state?  Default is no.
+     *
+     * @param attr   The procattr we care about.
+     * @param detach Should the child start in detached state? Default is no.
+     *
      * @return the operation status
      */
     public static native int detachSet(long attr, int detach);
 
     /**
-     * Specify that apr_proc_create() should do whatever it can to report
-     * failures to the caller of apr_proc_create(), rather than find out in
-     * the child.
+     * Specify that apr_proc_create() should do whatever it can to report failures to the caller of apr_proc_create(),
+     * rather than find out in the child.
+     *
      * @param attr The procattr describing the child process to be created.
-     * @param chk Flag to indicate whether or not extra work should be done
-     *            to try to report failures to the caller.
-     * <br>
-     * This flag only affects apr_proc_create() on platforms where
-     * fork() is used.  This leads to extra overhead in the calling
-     * process, but that may help the application handle such
-     * errors more gracefully.
+     * @param chk  Flag to indicate whether or not extra work should be done to try to report failures to the caller.
+     *                 <br>
+     *                 This flag only affects apr_proc_create() on platforms where fork() is used. This leads to extra
+     *                 overhead in the calling process, but that may help the application handle such errors more
+     *                 gracefully.
+     *
      * @return the operation status
      */
     public static native int errorCheckSet(long attr, int chk);
 
     /**
-     * Determine if the child should start in its own address space or using the
-     * current one from its parent
-     * @param attr The procattr we care about.
-     * @param addrspace Should the child start in its own address space?
-     *                  Default is yes.
+     * Determine if the child should start in its own address space or using the current one from its parent
+     *
+     * @param attr      The procattr we care about.
+     * @param addrspace Should the child start in its own address space? Default is yes.
+     *
      * @return the operation status
      */
     public static native int addrspaceSet(long attr, int addrspace);
 
     /**
-     * Specify an error function to be called in the child process if APR
-     * encounters an error in the child prior to running the specified program.
+     * Specify an error function to be called in the child process if APR encounters an error in the child prior to
+     * running the specified program.
+     *
      * @param attr The procattr describing the child process to be created.
      * @param pool The the pool to use.
-     * @param o The Object to call in the child process.
-     * <br>
-     * At the present time, it will only be called from apr_proc_create()
-     * on platforms where fork() is used.  It will never be called on other
-     * platforms, on those platforms apr_proc_create() will return the error
-     * in the parent process rather than invoke the callback in the now-forked
-     * child process.
+     * @param o    The Object to call in the child process. <br>
+     *                 At the present time, it will only be called from apr_proc_create() on platforms where fork() is
+     *                 used. It will never be called on other platforms, on those platforms apr_proc_create() will
+     *                 return the error in the parent process rather than invoke the callback in the now-forked child
+     *                 process.
      */
     public static native void errfnSet(long attr, long pool, Object o);
 
     /**
      * Set the username used for running process
-     * @param attr The procattr we care about.
+     *
+     * @param attr     The procattr we care about.
      * @param username The username used
-     * @param password User password if needed. Password is needed on WIN32
-     *                 or any other platform having
-     *                 APR_PROCATTR_USER_SET_REQUIRES_PASSWORD set.
+     * @param password User password if needed. Password is needed on WIN32 or any other platform having
+     *                     APR_PROCATTR_USER_SET_REQUIRES_PASSWORD set.
+     *
      * @return the operation status
      */
     public static native int userSet(long attr, String username, String password);
 
     /**
      * Set the group used for running process
-     * @param attr The procattr we care about.
-     * @param groupname The group name  used
+     *
+     * @param attr      The procattr we care about.
+     * @param groupname The group name used
+     *
      * @return the operation status
      */
     public static native int groupSet(long attr, String groupname);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/ProcErrorCallback.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/ProcErrorCallback.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/ProcErrorCallback.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/ProcErrorCallback.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,25 +17,21 @@
 package org.apache.tomcat.jni;
 
 /**
- * ProcErrorCallback Interface
+ * ProcErrorCallback Interface.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public interface ProcErrorCallback {
 
     /**
-     * Called in the child process if APR encounters an error
-     * in the child prior to running the specified program.
-     * @param pool Pool associated with the apr_proc_t.  If your child
-     *             error function needs user data, associate it with this
-     *             pool.
-     * @param err APR error code describing the error
+     * Called in the child process if APR encounters an error in the child prior to running the specified program.
+     *
+     * @param pool        Pool associated with the apr_proc_t. If your child error function needs user data, associate
+     *                        it with this pool.
+     * @param err         APR error code describing the error
      * @param description Text description of type of processing which failed
      */
     void callback(long pool, int err, String description);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Proc.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Proc.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Proc.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Proc.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,14 +17,11 @@
 package org.apache.tomcat.jni;
 
 /**
- * Proc
+ * Proc.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Proc {
@@ -33,11 +30,11 @@
      * apr_cmdtype_e enum
      */
     /** use the shell to invoke the program */
-    public static final int APR_SHELLCM      = 0;
+    public static final int APR_SHELLCM = 0;
     /** invoke the program directly, no copied env */
-    public static final int APR_PROGRAM      = 1;
+    public static final int APR_PROGRAM = 1;
     /** invoke the program, replicating our environment */
-    public static final int APR_PROGRAM_ENV  = 2;
+    public static final int APR_PROGRAM_ENV = 2;
     /** find program on PATH, use our environment */
     public static final int APR_PROGRAM_PATH = 3;
     /** use the shell to invoke the program, replicating our environment */
@@ -47,7 +44,7 @@
      * apr_wait_how_e enum
      */
     /** wait for the specified process to finish */
-    public static final int APR_WAIT   = 0;
+    public static final int APR_WAIT = 0;
     /** do not wait -- just see if it has finished */
     public static final int APR_NOWAIT = 1;
 
@@ -55,174 +52,178 @@
      * apr_exit_why_e enum
      */
     /** process exited normally */
-    public static final int APR_PROC_EXIT        = 1;
+    public static final int APR_PROC_EXIT = 1;
     /** process exited due to a signal */
-    public static final int APR_PROC_SIGNAL      = 2;
+    public static final int APR_PROC_SIGNAL = 2;
     /** process exited and dumped a core file */
     public static final int APR_PROC_SIGNAL_CORE = 4;
 
-    public static final int APR_NO_PIPE       = 0;
-    public static final int APR_FULL_BLOCK    = 1;
+    public static final int APR_NO_PIPE = 0;
+    public static final int APR_FULL_BLOCK = 1;
     public static final int APR_FULL_NONBLOCK = 2;
-    public static final int APR_PARENT_BLOCK  = 3;
-    public static final int APR_CHILD_BLOCK   = 4;
+    public static final int APR_PARENT_BLOCK = 3;
+    public static final int APR_CHILD_BLOCK = 4;
 
-    public static final int APR_LIMIT_CPU     = 0;
-    public static final int APR_LIMIT_MEM     = 1;
-    public static final int APR_LIMIT_NPROC   = 2;
-    public static final int APR_LIMIT_NOFILE  = 3;
+    public static final int APR_LIMIT_CPU = 0;
+    public static final int APR_LIMIT_MEM = 1;
+    public static final int APR_LIMIT_NPROC = 2;
+    public static final int APR_LIMIT_NOFILE = 3;
 
 
     /** child has died, caller must call unregister still */
-    public static final int APR_OC_REASON_DEATH      = 0;
+    public static final int APR_OC_REASON_DEATH = 0;
     /** write_fd is unwritable */
     public static final int APR_OC_REASON_UNWRITABLE = 1;
     /**
-     * a restart is occurring, perform any necessary cleanup (including
-     * sending a special signal to child)
+     * a restart is occurring, perform any necessary cleanup (including sending a special signal to child)
      */
-    public static final int APR_OC_REASON_RESTART    = 2;
+    public static final int APR_OC_REASON_RESTART = 2;
     /**
-     * unregister has been called, do whatever is necessary (including
-     * kill the child)
+     * unregister has been called, do whatever is necessary (including kill the child)
      */
     public static final int APR_OC_REASON_UNREGISTER = 3;
     /** somehow the child exited without us knowing ... buggy os? */
-    public static final int APR_OC_REASON_LOST       = 4;
+    public static final int APR_OC_REASON_LOST = 4;
     /**
-     * a health check is occurring, for most maintenance functions
-     * this is a no-op.
+     * a health check is occurring, for most maintenance functions this is a no-op.
      */
-    public static final int APR_OC_REASON_RUNNING    = 5;
+    public static final int APR_OC_REASON_RUNNING = 5;
 
     /* apr_kill_conditions_e enumeration */
     /** process is never sent any signals */
-    public static final int APR_KILL_NEVER         = 0;
+    public static final int APR_KILL_NEVER = 0;
     /** process is sent SIGKILL on apr_pool_t cleanup */
-    public static final int APR_KILL_ALWAYS        = 1;
+    public static final int APR_KILL_ALWAYS = 1;
     /** SIGTERM, wait 3 seconds, SIGKILL */
     public static final int APR_KILL_AFTER_TIMEOUT = 2;
     /** wait forever for the process to complete */
-    public static final int APR_JUST_WAIT          = 3;
+    public static final int APR_JUST_WAIT = 3;
     /** send SIGTERM and then wait */
-    public static final int APR_KILL_ONLY_ONCE     = 4;
+    public static final int APR_KILL_ONLY_ONCE = 4;
 
-    public static final int APR_PROC_DETACH_FOREGROUND = 0; /** Do not detach */
-    public static final int APR_PROC_DETACH_DAEMONIZE  = 1; /** Detach */
+    public static final int APR_PROC_DETACH_FOREGROUND = 0;
+    /** Do not detach */
+    public static final int APR_PROC_DETACH_DAEMONIZE = 1;
+    /** Detach */
 
     /* Maximum number of arguments for create process call */
-    public static final int MAX_ARGS_SIZE          = 1024;
+    public static final int MAX_ARGS_SIZE = 1024;
     /* Maximum number of environment variables for create process call */
-    public static final int MAX_ENV_SIZE           = 1024;
+    public static final int MAX_ENV_SIZE = 1024;
 
     /**
-     * Allocate apr_proc_t structure from pool
-     * This is not an apr function.
+     * Allocate apr_proc_t structure from pool This is not an apr function.
+     *
      * @param cont The pool to use.
+     *
      * @return the pointer
      */
     public static native long alloc(long cont);
 
     /**
-     * This is currently the only non-portable call in APR.  This executes
-     * a standard unix fork.
+     * This is currently the only non-portable call in APR. This executes a standard unix fork.
+     *
      * @param proc The resulting process handle.
      * @param cont The pool to use.
-     * @return APR_INCHILD for the child, and APR_INPARENT for the parent
-     * or an error.
+     *
+     * @return APR_INCHILD for the child, and APR_INPARENT for the parent or an error.
      */
-    public static native int fork(long [] proc, long cont);
+    public static native int fork(long[] proc, long cont);
 
     /**
-     * Create a new process and execute a new program within that process.
-     * This function returns without waiting for the new process to terminate;
-     * use apr_proc_wait for that.
-     * @param proc The process handle
+     * Create a new process and execute a new program within that process. This function returns without waiting for the
+     * new process to terminate; use apr_proc_wait for that.
+     *
+     * @param proc     The process handle
      * @param progname The program to run
-     * @param args The arguments to pass to the new program.  The first
-     *             one should be the program name.
-     * @param env The new environment table for the new process.  This
-     *            should be a list of NULL-terminated strings. This argument
-     *            is ignored for APR_PROGRAM_ENV, APR_PROGRAM_PATH, and
-     *            APR_SHELLCMD_ENV types of commands.
-     * @param attr The procattr we should use to determine how to create the new
-     * process
-     * @param pool The pool to use.
+     * @param args     The arguments to pass to the new program. The first one should be the program name.
+     * @param env      The new environment table for the new process. This should be a list of NULL-terminated strings.
+     *                     This argument is ignored for APR_PROGRAM_ENV, APR_PROGRAM_PATH, and APR_SHELLCMD_ENV types of
+     *                     commands.
+     * @param attr     The procattr we should use to determine how to create the new process
+     * @param pool     The pool to use.
+     *
      * @return The resulting process handle.
      */
-    public static native int create(long proc, String progname,
-                                    String [] args, String [] env,
-                                    long attr, long pool);
+    public static native int create(long proc, String progname, String[] args, String[] env, long attr, long pool);
 
     /**
      * Wait for a child process to die
-     * @param proc The process handle that corresponds to the desired child process
-     * @param exit exit[0] The returned exit status of the child, if a child process
-     *                dies, or the signal that caused the child to die.
-     *                On platforms that don't support obtaining this information,
-     *                the status parameter will be returned as APR_ENOTIMPL.
-     * exit[1] Why the child died, the bitwise or of:
-     * <PRE>
+     *
+     * @param proc    The process handle that corresponds to the desired child process
+     * @param exit    exit[0] The returned exit status of the child, if a child process dies, or the signal that caused
+     *                    the child to die. On platforms that don't support obtaining this information, the status
+     *                    parameter will be returned as APR_ENOTIMPL. exit[1] Why the child died, the bitwise or of:
+     *
+     *                    <PRE>
      * APR_PROC_EXIT         -- process terminated normally
      * APR_PROC_SIGNAL       -- process was killed by a signal
      * APR_PROC_SIGNAL_CORE  -- process was killed by a signal, and
      *                          generated a core dump.
-     * </PRE>
-     * @param waithow How should we wait.  One of:
-     * <PRE>
+     *                    </PRE>
+     *
+     * @param waithow How should we wait. One of:
+     *
+     *                    <PRE>
      * APR_WAIT   -- block until the child process dies.
      * APR_NOWAIT -- return immediately regardless of if the
      *               child is dead or not.
-     * </PRE>
-     * @return The childs status is in the return code to this process.  It is one of:
-     * <PRE>
+     *                    </PRE>
+     *
+     * @return The childs status is in the return code to this process. It is one of:
+     *
+     *             <PRE>
      * APR_CHILD_DONE     -- child is no longer running.
      * APR_CHILD_NOTDONE  -- child is still running.
-     * </PRE>
+     *             </PRE>
      */
-    public static native int wait(long proc, int [] exit, int waithow);
+    public static native int wait(long proc, int[] exit, int waithow);
 
     /**
-     * Wait for any current child process to die and return information
-     * about that child.
-     * @param proc Pointer to NULL on entry, will be filled out with child's
-     *             information
-     * @param exit exit[0] The returned exit status of the child, if a child process
-     *                dies, or the signal that caused the child to die.
-     *                On platforms that don't support obtaining this information,
-     *                the status parameter will be returned as APR_ENOTIMPL.
-     * exit[1] Why the child died, the bitwise or of:
-     * <PRE>
+     * Wait for any current child process to die and return information about that child.
+     *
+     * @param proc    Pointer to NULL on entry, will be filled out with child's information
+     * @param exit    exit[0] The returned exit status of the child, if a child process dies, or the signal that caused
+     *                    the child to die. On platforms that don't support obtaining this information, the status
+     *                    parameter will be returned as APR_ENOTIMPL. exit[1] Why the child died, the bitwise or of:
+     *
+     *                    <PRE>
      * APR_PROC_EXIT         -- process terminated normally
      * APR_PROC_SIGNAL       -- process was killed by a signal
      * APR_PROC_SIGNAL_CORE  -- process was killed by a signal, and
      *                          generated a core dump.
-     * </PRE>
-     * @param waithow How should we wait.  One of:
-     * <PRE>
+     *                    </PRE>
+     *
+     * @param waithow How should we wait. One of:
+     *
+     *                    <PRE>
      * APR_WAIT   -- block until the child process dies.
      * APR_NOWAIT -- return immediately regardless of if the
      *               child is dead or not.
-     * </PRE>
-     * @param pool Pool to allocate child information out of.
+     *                    </PRE>
+     *
+     * @param pool    Pool to allocate child information out of.
+     *
      * @return the operation status
      */
-    public static native int waitAllProcs(long proc, int [] exit,
-                                          int waithow, long pool);
+    public static native int waitAllProcs(long proc, int[] exit, int waithow, long pool);
 
-     /**
+    /**
      * Detach the process from the controlling terminal.
-     * @param daemonize set to non-zero if the process should daemonize
-     *                  and become a background process, else it will
-     *                  stay in the foreground.
+     *
+     * @param daemonize set to non-zero if the process should daemonize and become a background process, else it will
+     *                      stay in the foreground.
+     *
      * @return the operation status
      */
     public static native int detach(int daemonize);
 
     /**
      * Terminate a process.
+     *
      * @param proc The process to terminate.
-     * @param sig How to kill the process.
+     * @param sig  How to kill the process.
+     *
      * @return the operation status
      */
     public static native int kill(long proc, int sig);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Registry.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Registry.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Registry.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Registry.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,233 +17,268 @@
 package org.apache.tomcat.jni;
 
 /**
- * Windows Registry support
+ * Windows Registry support.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Registry {
 
     /* Registry Enums */
-    public static final int HKEY_CLASSES_ROOT       = 1;
-    public static final int HKEY_CURRENT_CONFIG     = 2;
-    public static final int HKEY_CURRENT_USER       = 3;
-    public static final int HKEY_LOCAL_MACHINE      = 4;
-    public static final int HKEY_USERS              = 5;
-
-    public static final int KEY_ALL_ACCESS          = 0x0001;
-    public static final int KEY_CREATE_LINK         = 0x0002;
-    public static final int KEY_CREATE_SUB_KEY      = 0x0004;
-    public static final int KEY_ENUMERATE_SUB_KEYS  = 0x0008;
-    public static final int KEY_EXECUTE             = 0x0010;
-    public static final int KEY_NOTIFY              = 0x0020;
-    public static final int KEY_QUERY_VALUE         = 0x0040;
-    public static final int KEY_READ                = 0x0080;
-    public static final int KEY_SET_VALUE           = 0x0100;
-    public static final int KEY_WOW64_64KEY         = 0x0200;
-    public static final int KEY_WOW64_32KEY         = 0x0400;
-    public static final int KEY_WRITE               = 0x0800;
-
-    public static final int REG_BINARY              = 1;
-    public static final int REG_DWORD               = 2;
-    public static final int REG_EXPAND_SZ           = 3;
-    public static final int REG_MULTI_SZ            = 4;
-    public static final int REG_QWORD               = 5;
-    public static final int REG_SZ                  = 6;
+    public static final int HKEY_CLASSES_ROOT = 1;
+    public static final int HKEY_CURRENT_CONFIG = 2;
+    public static final int HKEY_CURRENT_USER = 3;
+    public static final int HKEY_LOCAL_MACHINE = 4;
+    public static final int HKEY_USERS = 5;
+
+    public static final int KEY_ALL_ACCESS = 0x0001;
+    public static final int KEY_CREATE_LINK = 0x0002;
+    public static final int KEY_CREATE_SUB_KEY = 0x0004;
+    public static final int KEY_ENUMERATE_SUB_KEYS = 0x0008;
+    public static final int KEY_EXECUTE = 0x0010;
+    public static final int KEY_NOTIFY = 0x0020;
+    public static final int KEY_QUERY_VALUE = 0x0040;
+    public static final int KEY_READ = 0x0080;
+    public static final int KEY_SET_VALUE = 0x0100;
+    public static final int KEY_WOW64_64KEY = 0x0200;
+    public static final int KEY_WOW64_32KEY = 0x0400;
+    public static final int KEY_WRITE = 0x0800;
+
+    public static final int REG_BINARY = 1;
+    public static final int REG_DWORD = 2;
+    public static final int REG_EXPAND_SZ = 3;
+    public static final int REG_MULTI_SZ = 4;
+    public static final int REG_QWORD = 5;
+    public static final int REG_SZ = 6;
 
-     /**
+    /**
      * Create or open a Registry Key.
+     *
      * @param name Registry Subkey to open
      * @param root Root key, one of HKEY_*
-     * @param sam Access mask that specifies the access rights for the key.
+     * @param sam  Access mask that specifies the access rights for the key.
      * @param pool Pool used for native memory allocation
+     *
      * @return Opened Registry key
+     *
      * @throws Error An error occurred
      */
-    public static native long create(int root, String name, int sam, long pool)
-        throws Error;
+    public static native long create(int root, String name, int sam, long pool) throws Error;
 
-     /**
+    /**
      * Opens the specified Registry Key.
+     *
      * @param name Registry Subkey to open
      * @param root Root key, one of HKEY_*
-     * @param sam Access mask that specifies the access rights for the key.
+     * @param sam  Access mask that specifies the access rights for the key.
      * @param pool Pool used for native memory allocation
+     *
      * @return Opened Registry key
+     *
      * @throws Error An error occurred
      */
-    public static native long open(int root, String name, int sam, long pool)
-        throws Error;
+    public static native long open(int root, String name, int sam, long pool) throws Error;
 
     /**
      * Close the specified Registry key.
+     *
      * @param key The Registry key descriptor to close.
+     *
      * @return the operation status
      */
     public static native int close(long key);
 
     /**
      * Get the Registry key type.
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to query
+     *
      * @return Value type or negative error value
      */
     public static native int getType(long key, String name);
 
     /**
      * Get the Registry value for REG_DWORD
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to query
+     *
      * @return Registry key value
+     *
      * @throws Error An error occurred
      */
-    public static native int getValueI(long key, String name)
-        throws Error;
+    public static native int getValueI(long key, String name) throws Error;
 
     /**
      * Get the Registry value for REG_QWORD or REG_DWORD
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to query
+     *
      * @return Registry key value
+     *
      * @throws Error An error occurred
      */
-    public static native long getValueJ(long key, String name)
-        throws Error;
+    public static native long getValueJ(long key, String name) throws Error;
 
     /**
      * Get the Registry key length.
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to query
+     *
      * @return Value size or negative error value
      */
     public static native int getSize(long key, String name);
 
     /**
      * Get the Registry value for REG_SZ or REG_EXPAND_SZ
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to query
+     *
      * @return Registry key value
+     *
      * @throws Error An error occurred
      */
-    public static native String getValueS(long key, String name)
-        throws Error;
+    public static native String getValueS(long key, String name) throws Error;
 
     /**
      * Get the Registry value for REG_MULTI_SZ
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to query
+     *
      * @return Registry key value
+     *
      * @throws Error An error occurred
      */
-    public static native String[] getValueA(long key, String name)
-        throws Error;
+    public static native String[] getValueA(long key, String name) throws Error;
 
     /**
      * Get the Registry value for REG_BINARY
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to query
+     *
      * @return Registry key value
+     *
      * @throws Error An error occurred
      */
-    public static native byte[] getValueB(long key, String name)
-        throws Error;
+    public static native byte[] getValueB(long key, String name) throws Error;
 
 
     /**
      * Set the Registry value for REG_DWORD
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to set
-     * @param val The the value to set
+     * @param val  The the value to set
+     *
      * @return If the function succeeds, the return value is 0
      */
     public static native int setValueI(long key, String name, int val);
 
     /**
      * Set the Registry value for REG_QWORD
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to set
-     * @param val The the value to set
+     * @param val  The the value to set
+     *
      * @return If the function succeeds, the return value is 0
      */
     public static native int setValueJ(long key, String name, long val);
 
     /**
      * Set the Registry value for REG_SZ
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to set
-     * @param val The the value to set
+     * @param val  The the value to set
+     *
      * @return If the function succeeds, the return value is 0
      */
     public static native int setValueS(long key, String name, String val);
 
     /**
      * Set the Registry value for REG_EXPAND_SZ
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to set
-     * @param val The the value to set
+     * @param val  The the value to set
+     *
      * @return If the function succeeds, the return value is 0
      */
     public static native int setValueE(long key, String name, String val);
 
-     /**
+    /**
      * Set the Registry value for REG_MULTI_SZ
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to set
-     * @param val The the value to set
+     * @param val  The the value to set
+     *
      * @return If the function succeeds, the return value is 0
      */
     public static native int setValueA(long key, String name, String[] val);
 
-     /**
+    /**
      * Set the Registry value for REG_BINARY
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to set
-     * @param val The the value to set
+     * @param val  The the value to set
+     *
      * @return If the function succeeds, the return value is 0
      */
     public static native int setValueB(long key, String name, byte[] val);
 
     /**
      * Enumerate the Registry subkeys
+     *
      * @param key The Registry key descriptor to use.
+     *
      * @return Array of all subkey names
+     *
      * @throws Error An error occurred
      */
-    public static native String[] enumKeys(long key)
-        throws Error;
+    public static native String[] enumKeys(long key) throws Error;
 
     /**
      * Enumerate the Registry values
+     *
      * @param key The Registry key descriptor to use.
+     *
      * @return Array of all value names
+     *
      * @throws Error An error occurred
      */
-    public static native String[] enumValues(long key)
-        throws Error;
+    public static native String[] enumValues(long key) throws Error;
 
-     /**
+    /**
      * Delete the Registry value
-     * @param key The Registry key descriptor to use.
+     *
+     * @param key  The Registry key descriptor to use.
      * @param name The name of the value to delete
+     *
      * @return If the function succeeds, the return value is 0
      */
     public static native int deleteValue(long key, String name);
 
-     /**
+    /**
      * Delete the Registry subkey
-     * @param root Root key, one of HKEY_*
-     * @param name Subkey to delete
-     * @param onlyIfEmpty If true will not delete a key if
-     *                    it contains any subkeys or values
+     *
+     * @param root        Root key, one of HKEY_*
+     * @param name        Subkey to delete
+     * @param onlyIfEmpty If true will not delete a key if it contains any subkeys or values
+     *
      * @return If the function succeeds, the return value is 0
      */
-    public static native int deleteKey(int root, String name,
-                                       boolean onlyIfEmpty);
+    public static native int deleteKey(int root, String name, boolean onlyIfEmpty);
 
 
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Shm.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Shm.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Shm.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Shm.java	2026-06-11 17:01:29.000000000 -0300
@@ -19,113 +19,106 @@
 import java.nio.ByteBuffer;
 
 /**
- * Shm
+ * Shm.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Shm {
 
     /**
-     * Create and make accessible a shared memory segment.
-     * <br>
+     * Create and make accessible a shared memory segment. <br>
      * A note about Anonymous vs. Named shared memory segments:<br>
-     *         Not all platforms support anonymous shared memory segments, but in
-     *         some cases it is preferred over other types of shared memory
-     *         implementations. Passing a NULL 'file' parameter to this function
-     *         will cause the subsystem to use anonymous shared memory segments.
-     *         If such a system is not available, APR_ENOTIMPL is returned.
-     * <br>
+     * Not all platforms support anonymous shared memory segments, but in some cases it is preferred over other types of
+     * shared memory implementations. Passing a NULL 'file' parameter to this function will cause the subsystem to use
+     * anonymous shared memory segments. If such a system is not available, APR_ENOTIMPL is returned. <br>
      * A note about allocation sizes:<br>
-     *         On some platforms it is necessary to store some metainformation
-     *         about the segment within the actual segment. In order to supply
-     *         the caller with the requested size it may be necessary for the
-     *         implementation to request a slightly greater segment length
-     *         from the subsystem. In all cases, the apr_shm_baseaddr_get()
-     *         function will return the first usable byte of memory.
-     * @param reqsize The desired size of the segment.
-     * @param filename The file to use for shared memory on platforms that
-     *        require it.
-     * @param pool the pool from which to allocate the shared memory
-     *        structure.
+     * On some platforms it is necessary to store some metainformation about the segment within the actual segment. In
+     * order to supply the caller with the requested size it may be necessary for the implementation to request a
+     * slightly greater segment length from the subsystem. In all cases, the apr_shm_baseaddr_get() function will return
+     * the first usable byte of memory.
+     *
+     * @param reqsize  The desired size of the segment.
+     * @param filename The file to use for shared memory on platforms that require it.
+     * @param pool     the pool from which to allocate the shared memory structure.
+     *
      * @return The created shared memory structure.
+     *
      * @throws Error An error occurred
      */
-    public static native long create(long reqsize, String filename, long pool)
-        throws Error;
+    public static native long create(long reqsize, String filename, long pool) throws Error;
 
     /**
-     * Remove shared memory segment associated with a filename.
-     * <br>
-     * This function is only supported on platforms which support
-     * name-based shared memory segments, and will return APR_ENOTIMPL on
-     * platforms without such support.
-     * @param filename The filename associated with shared-memory segment which
-     *        needs to be removed
-     * @param pool The pool used for file operations
+     * Remove shared memory segment associated with a filename. <br>
+     * This function is only supported on platforms which support name-based shared memory segments, and will return
+     * APR_ENOTIMPL on platforms without such support.
+     *
+     * @param filename The filename associated with shared-memory segment which needs to be removed
+     * @param pool     The pool used for file operations
+     *
      * @return the operation status
      */
     public static native int remove(String filename, long pool);
 
     /**
      * Destroy a shared memory segment and associated memory.
+     *
      * @param m The shared memory segment structure to destroy.
+     *
      * @return the operation status
      */
     public static native int destroy(long m);
 
     /**
-     * Attach to a shared memory segment that was created
-     * by another process.
-     * @param filename The file used to create the original segment.
-     *        (This MUST match the original filename.)
-     * @param pool the pool from which to allocate the shared memory
-     *        structure for this process.
+     * Attach to a shared memory segment that was created by another process.
+     *
+     * @param filename The file used to create the original segment. (This MUST match the original filename.)
+     * @param pool     the pool from which to allocate the shared memory structure for this process.
+     *
      * @return The created shared memory structure.
+     *
      * @throws Error An error occurred
      */
-    public static native long attach(String filename, long pool)
-        throws Error;
+    public static native long attach(String filename, long pool) throws Error;
 
     /**
      * Detach from a shared memory segment without destroying it.
-     * @param m The shared memory structure representing the segment
-     *        to detach from.
+     *
+     * @param m The shared memory structure representing the segment to detach from.
+     *
      * @return the operation status
      */
     public static native int detach(long m);
 
     /**
-     * Retrieve the base address of the shared memory segment.
-     * NOTE: This address is only usable within the callers address
-     * space, since this API does not guarantee that other attaching
-     * processes will maintain the same address mapping.
-     * @param m The shared memory segment from which to retrieve
-     *        the base address.
+     * Retrieve the base address of the shared memory segment. NOTE: This address is only usable within the callers
+     * address space, since this API does not guarantee that other attaching processes will maintain the same address
+     * mapping.
+     *
+     * @param m The shared memory segment from which to retrieve the base address.
+     *
      * @return address, aligned by APR_ALIGN_DEFAULT.
      */
     public static native long baseaddr(long m);
 
     /**
      * Retrieve the length of a shared memory segment in bytes.
-     * @param m The shared memory segment from which to retrieve
-     *        the segment length.
+     *
+     * @param m The shared memory segment from which to retrieve the segment length.
+     *
      * @return the length of the segment
      */
     public static native long size(long m);
 
     /**
-     * Retrieve new ByteBuffer base address of the shared memory segment.
-     * NOTE: This address is only usable within the callers address
-     * space, since this API does not guarantee that other attaching
-     * processes will maintain the same address mapping.
-     * @param m The shared memory segment from which to retrieve
-     *        the base address.
+     * Retrieve new ByteBuffer base address of the shared memory segment. NOTE: This address is only usable within the
+     * callers address space, since this API does not guarantee that other attaching processes will maintain the same
+     * address mapping.
+     *
+     * @param m The shared memory segment from which to retrieve the base address.
+     *
      * @return address, aligned by APR_ALIGN_DEFAULT.
      */
     public static native ByteBuffer buffer(long m);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Sockaddr.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Sockaddr.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Sockaddr.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Sockaddr.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,19 +17,16 @@
 package org.apache.tomcat.jni;
 
 /**
- * Sockaddr
+ * Sockaddr.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Sockaddr {
 
-   /** The pool to use... */
+    /** The pool to use... */
     public long pool;
     /** The hostname */
     public String hostname;
@@ -40,8 +37,8 @@
     /** The family */
     public int family;
     /**
-     * If multiple addresses were found by apr_sockaddr_info_get(), this
-     * points to a representation of the next address. */
+     * If multiple addresses were found by apr_sockaddr_info_get(), this points to a representation of the next address.
+     */
     public long next;
 
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Socket.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Socket.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Socket.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Socket.java	2026-06-11 17:01:29.000000000 -0300
@@ -20,73 +20,67 @@
 import java.nio.ByteBuffer;
 
 /**
- * Socket
+ * Socket.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Socket {
 
     /* Standard socket defines */
     public static final int SOCK_STREAM = 0;
-    public static final int SOCK_DGRAM  = 1;
+    public static final int SOCK_DGRAM = 1;
     /*
      * apr_sockopt Socket option definitions
      */
     /** Linger */
-    public static final int APR_SO_LINGER       = 1;
+    public static final int APR_SO_LINGER = 1;
     /** Keepalive */
-    public static final int APR_SO_KEEPALIVE    = 2;
+    public static final int APR_SO_KEEPALIVE = 2;
     /** Debug */
-    public static final int APR_SO_DEBUG        = 4;
+    public static final int APR_SO_DEBUG = 4;
     /** Non-blocking IO */
-    public static final int APR_SO_NONBLOCK     = 8;
+    public static final int APR_SO_NONBLOCK = 8;
     /** Reuse addresses */
-    public static final int APR_SO_REUSEADDR    = 16;
+    public static final int APR_SO_REUSEADDR = 16;
     /** Send buffer */
-    public static final int APR_SO_SNDBUF       = 64;
+    public static final int APR_SO_SNDBUF = 64;
     /** Receive buffer */
-    public static final int APR_SO_RCVBUF       = 128;
+    public static final int APR_SO_RCVBUF = 128;
     /** Disconnected */
     public static final int APR_SO_DISCONNECTED = 256;
     /** For SCTP sockets, this is mapped to STCP_NODELAY internally. */
-    public static final int APR_TCP_NODELAY     = 512;
+    public static final int APR_TCP_NODELAY = 512;
     /** No push */
-    public static final int APR_TCP_NOPUSH      = 1024;
+    public static final int APR_TCP_NOPUSH = 1024;
+    /**
+     * This flag is ONLY set internally when we set APR_TCP_NOPUSH with APR_TCP_NODELAY set to tell us that
+     * APR_TCP_NODELAY should be turned on again when NOPUSH is turned off
+     */
+    public static final int APR_RESET_NODELAY = 2048;
     /**
-     * This flag is ONLY set internally when we set APR_TCP_NOPUSH with
-     * APR_TCP_NODELAY set to tell us that APR_TCP_NODELAY should be turned on
-     * again when NOPUSH is turned off
-     */
-    public static final int APR_RESET_NODELAY   = 2048;
-    /**
-     * Set on non-blocking sockets (timeout != 0) on which the
-     * previous read() did not fill a buffer completely.  the next
-     * apr_socket_recv()  will first call select()/poll() rather than
-     * going straight into read().  (Can also be set by an application to
-     * force a select()/poll() call before the next read, in cases where
-     * the app expects that an immediate read would fail.)
+     * Set on non-blocking sockets (timeout != 0) on which the previous read() did not fill a buffer completely. the
+     * next apr_socket_recv() will first call select()/poll() rather than going straight into read(). (Can also be set
+     * by an application to force a select()/poll() call before the next read, in cases where the app expects that an
+     * immediate read would fail.)
      */
     public static final int APR_INCOMPLETE_READ = 4096;
     /** like APR_INCOMPLETE_READ, but for write */
     public static final int APR_INCOMPLETE_WRITE = 8192;
     /** Don't accept IPv4 connections on an IPv6 listening socket. */
-    public static final int APR_IPV6_V6ONLY      = 16384;
+    public static final int APR_IPV6_V6ONLY = 16384;
     /** Delay accepting of new connections until data is available. */
     public static final int APR_TCP_DEFER_ACCEPT = 32768;
 
-    /* Define what type of socket shutdown should occur.
-     * apr_shutdown_how_e enum
+    /*
+     * Define what type of socket shutdown should occur. apr_shutdown_how_e enum
      */
     /** no longer allow read request */
-    public static final int APR_SHUTDOWN_READ      = 0;
+    public static final int APR_SHUTDOWN_READ = 0;
     /** no longer allow write requests */
-    public static final int APR_SHUTDOWN_WRITE     = 1;
+    public static final int APR_SHUTDOWN_WRITE = 1;
     /** no longer allow read or write requests */
     public static final int APR_SHUTDOWN_READWRITE = 2;
 
@@ -94,22 +88,21 @@
     public static final int APR_IPV6_ADDR_OK = 0x02;
 
     public static final int APR_UNSPEC = 0;
-    public static final int APR_INET   = 1;
-    public static final int APR_INET6  = 2;
-    public static final int APR_UNIX   = 3;
-
-    /** TCP  */
-    public static final int APR_PROTO_TCP  =   6;
-    /** UDP  */
-    public static final int APR_PROTO_UDP  =  17;
+    public static final int APR_INET = 1;
+    public static final int APR_INET6 = 2;
+    public static final int APR_UNIX = 3;
+
+    /** TCP */
+    public static final int APR_PROTO_TCP = 6;
+    /** UDP */
+    public static final int APR_PROTO_UDP = 17;
     /** SCTP */
     public static final int APR_PROTO_SCTP = 132;
 
     /**
-     * Enum to tell us if we're interested in remote or local socket
-     * apr_interface_e
+     * Enum to tell us if we're interested in remote or local socket apr_interface_e
      */
-    public static final int APR_LOCAL  = 0;
+    public static final int APR_LOCAL = 0;
     public static final int APR_REMOTE = 1;
 
     /* Socket.get types */
@@ -120,119 +113,132 @@
 
     /**
      * Create a socket.
-     * @param family The address family of the socket (e.g., APR_INET).
-     * @param type The type of the socket (e.g., SOCK_STREAM).
+     *
+     * @param family   The address family of the socket (e.g., APR_INET).
+     * @param type     The type of the socket (e.g., SOCK_STREAM).
      * @param protocol The protocol of the socket (e.g., APR_PROTO_TCP).
-     * @param cont The parent pool to use
+     * @param cont     The parent pool to use
+     *
      * @return The new socket that has been set up.
+     *
      * @throws Exception Error creating socket
      */
-    public static native long create(int family, int type,
-                                     int protocol, long cont)
-        throws Exception;
+    public static native long create(int family, int type, int protocol, long cont) throws Exception;
 
 
     /**
-     * Shutdown either reading, writing, or both sides of a socket.
-     * <br>
-     * This does not actually close the socket descriptor, it just
-     *      controls which calls are still valid on the socket.
+     * Shutdown either reading, writing, or both sides of a socket. <br>
+     * This does not actually close the socket descriptor, it just controls which calls are still valid on the socket.
+     *
      * @param thesocket The socket to close
-     * @param how How to shutdown the socket.  One of:
-     * <PRE>
+     * @param how       How to shutdown the socket. One of:
+     *
+     *                      <PRE>
      * APR_SHUTDOWN_READ         no longer allow read requests
      * APR_SHUTDOWN_WRITE        no longer allow write requests
      * APR_SHUTDOWN_READWRITE    no longer allow read or write requests
-     * </PRE>
+     *                      </PRE>
+     *
      * @return the operation status
      */
     public static native int shutdown(long thesocket, int how);
 
     /**
      * Close a socket.
+     *
      * @param thesocket The socket to close
+     *
      * @return the operation status
      */
     public static native int close(long thesocket);
 
     /**
      * Destroy a pool associated with socket
+     *
      * @param thesocket The destroy
      */
     public static native void destroy(long thesocket);
 
     /**
      * Bind the socket to its associated port
+     *
      * @param sock The socket to bind
-     * @param sa The socket address to bind to
-     * This may be where we will find out if there is any other process
-     *      using the selected port.
+     * @param sa   The socket address to bind to This may be where we will find out if there is any other process using
+     *                 the selected port.
+     *
      * @return the operation status
      */
     public static native int bind(long sock, long sa);
 
     /**
      * Listen to a bound socket for connections.
-     * @param sock The socket to listen on
-     * @param backlog The number of outstanding connections allowed in the sockets
-     *                listen queue.  If this value is less than zero, the listen
-     *                queue size is set to zero.
+     *
+     * @param sock    The socket to listen on
+     * @param backlog The number of outstanding connections allowed in the sockets listen queue. If this value is less
+     *                    than zero, the listen queue size is set to zero.
+     *
      * @return the operation status
      */
     public static native int listen(long sock, int backlog);
 
     /**
      * Accept a new connection request
+     *
      * @param sock The socket we are listening on.
      * @param pool The pool for the new socket.
-     * @return  A copy of the socket that is connected to the socket that
-     *          made the connection request.  This is the socket which should
-     *          be used for all future communication.
+     *
+     * @return A copy of the socket that is connected to the socket that made the connection request. This is the socket
+     *             which should be used for all future communication.
+     *
      * @throws Exception Socket accept error
      */
-    public static native long acceptx(long sock, long pool)
-        throws Exception;
+    public static native long acceptx(long sock, long pool) throws Exception;
 
     /**
      * Accept a new connection request
+     *
      * @param sock The socket we are listening on.
-     * @return  A copy of the socket that is connected to the socket that
-     *          made the connection request.  This is the socket which should
-     *          be used for all future communication.
+     *
+     * @return A copy of the socket that is connected to the socket that made the connection request. This is the socket
+     *             which should be used for all future communication.
+     *
      * @throws Exception Socket accept error
      */
-    public static native long accept(long sock)
-        throws Exception;
+    public static native long accept(long sock) throws Exception;
 
     /**
      * Set an OS level accept filter.
+     *
      * @param sock The socket to put the accept filter on.
      * @param name The accept filter
-     * @param args Any extra args to the accept filter.  Passing NULL here removes
-     *             the accept filter.
+     * @param args Any extra args to the accept filter. Passing NULL here removes the accept filter.
+     *
      * @return the operation status
      */
     public static native int acceptfilter(long sock, String name, String args);
 
     /**
      * Query the specified socket if at the OOB/Urgent data mark
+     *
      * @param sock The socket to query
-     * @return <code>true</code> if socket is at the OOB/urgent mark,
-     *         otherwise <code>false</code>.
+     *
+     * @return <code>true</code> if socket is at the OOB/urgent mark, otherwise <code>false</code>.
      */
     public static native boolean atmark(long sock);
 
     /**
-     * Issue a connection request to a socket either on the same machine
-     * or a different one.
+     * Issue a connection request to a socket either on the same machine or a different one.
+     *
      * @param sock The socket we wish to use for our side of the connection
-     * @param sa The address of the machine we wish to connect to.
+     * @param sa   The address of the machine we wish to connect to.
+     *
      * @return the operation status
      */
     public static native int connect(long sock, long sa);
 
     /**
      * Send data over a network.
+     *
      * <PRE>
      * This functions acts like a blocking write by default.  To change
      * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
@@ -242,16 +248,19 @@
      *
      * APR_EINTR is never returned.
      * </PRE>
-     * @param sock The socket to send the data over.
-     * @param buf The buffer which contains the data to be sent.
+     *
+     * @param sock   The socket to send the data over.
+     * @param buf    The buffer which contains the data to be sent.
      * @param offset Offset in the byte buffer.
-     * @param len The number of bytes to write; (-1) for full array.
+     * @param len    The number of bytes to write; (-1) for full array.
+     *
      * @return The number of bytes sent
      */
     public static native int send(long sock, byte[] buf, int offset, int len);
 
     /**
      * Send data over a network.
+     *
      * <PRE>
      * This functions acts like a blocking write by default.  To change
      * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
@@ -261,69 +270,69 @@
      *
      * APR_EINTR is never returned.
      * </PRE>
-     * @param sock The socket to send the data over.
-     * @param buf The Byte buffer which contains the data to be sent.
-     * @param offset The offset within the buffer array of the first buffer from
-     *               which bytes are to be retrieved; must be non-negative
-     *               and no larger than buf.length
-     * @param len The maximum number of buffers to be accessed; must be non-negative
-     *            and no larger than buf.length - offset
+     *
+     * @param sock   The socket to send the data over.
+     * @param buf    The Byte buffer which contains the data to be sent.
+     * @param offset The offset within the buffer array of the first buffer from which bytes are to be retrieved; must
+     *                   be non-negative and no larger than buf.length
+     * @param len    The maximum number of buffers to be accessed; must be non-negative and no larger than buf.length -
+     *                   offset
+     *
      * @return The number of bytes sent
      */
-    public static native int sendb(long sock, ByteBuffer buf,
-                                   int offset, int len);
+    public static native int sendb(long sock, ByteBuffer buf, int offset, int len);
 
     /**
      * Send data over a network without retry
+     *
      * <PRE>
      * This functions acts like a blocking write by default.  To change
      * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
      * socket option.
      *
      * It is possible for both bytes to be sent and an error to be returned.
-     *
      * </PRE>
-     * @param sock The socket to send the data over.
-     * @param buf The Byte buffer which contains the data to be sent.
-     * @param offset The offset within the buffer array of the first buffer from
-     *               which bytes are to be retrieved; must be non-negative
-     *               and no larger than buf.length
-     * @param len The maximum number of buffers to be accessed; must be non-negative
-     *            and no larger than buf.length - offset
+     *
+     * @param sock   The socket to send the data over.
+     * @param buf    The Byte buffer which contains the data to be sent.
+     * @param offset The offset within the buffer array of the first buffer from which bytes are to be retrieved; must
+     *                   be non-negative and no larger than buf.length
+     * @param len    The maximum number of buffers to be accessed; must be non-negative and no larger than buf.length -
+     *                   offset
+     *
      * @return The number of bytes sent
      */
-    public static native int sendib(long sock, ByteBuffer buf,
-                                    int offset, int len);
+    public static native int sendib(long sock, ByteBuffer buf, int offset, int len);
 
     /**
      * Send data over a network using internally set ByteBuffer
-     * @param sock The socket to send the data over.
-     * @param offset The offset within the buffer array of the first buffer from
-     *               which bytes are to be retrieved; must be non-negative
-     *               and no larger than buf.length
-     * @param len The maximum number of buffers to be accessed; must be non-negative
-     *            and no larger than buf.length - offset
+     *
+     * @param sock   The socket to send the data over.
+     * @param offset The offset within the buffer array of the first buffer from which bytes are to be retrieved; must
+     *                   be non-negative and no larger than buf.length
+     * @param len    The maximum number of buffers to be accessed; must be non-negative and no larger than buf.length -
+     *                   offset
+     *
      * @return The number of bytes sent
      */
-    public static native int sendbb(long sock,
-                                   int offset, int len);
+    public static native int sendbb(long sock, int offset, int len);
 
     /**
-     * Send data over a network using internally set ByteBuffer
-     * without internal retry.
-     * @param sock The socket to send the data over.
-     * @param offset The offset within the buffer array of the first buffer from
-     *               which bytes are to be retrieved; must be non-negative
-     *               and no larger than buf.length
-     * @param len The maximum number of buffers to be accessed; must be non-negative
-     *            and no larger than buf.length - offset
+     * Send data over a network using internally set ByteBuffer without internal retry.
+     *
+     * @param sock   The socket to send the data over.
+     * @param offset The offset within the buffer array of the first buffer from which bytes are to be retrieved; must
+     *                   be non-negative and no larger than buf.length
+     * @param len    The maximum number of buffers to be accessed; must be non-negative and no larger than buf.length -
+     *                   offset
+     *
      * @return The number of bytes sent
      */
-    public static native int sendibb(long sock,
-                                     int offset, int len);
+    public static native int sendibb(long sock, int offset, int len);
 
     /**
      * Send multiple packets of data over a network.
+     *
      * <PRE>
      * This functions acts like a blocking write by default.  To change
      * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
@@ -334,23 +343,25 @@
      *
      * APR_EINTR is never returned.
      * </PRE>
+     *
      * @param sock The socket to send the data over.
-     * @param vec The array from which to get the data to send.
+     * @param vec  The array from which to get the data to send.
+     *
      * @return The number of bytes sent
      */
     public static native int sendv(long sock, byte[][] vec);
 
     /**
-     * @param sock The socket to send from
-     * @param where The apr_sockaddr_t describing where to send the data
-     * @param flags The flags to use
-     * @param buf  The data to send
+     * @param sock   The socket to send from
+     * @param where  The apr_sockaddr_t describing where to send the data
+     * @param flags  The flags to use
+     * @param buf    The data to send
      * @param offset Offset in the byte buffer.
-     * @param len  The length of the data to send
+     * @param len    The length of the data to send
+     *
      * @return The number of bytes sent
      */
-    public static native int sendto(long sock, long where, int flags,
-                                    byte[] buf, int offset, int len);
+    public static native int sendto(long sock, long where, int flags, byte[] buf, int offset, int len);
 
     /**
      * Read data from a network.
@@ -366,10 +377,12 @@
      *
      * APR_EINTR is never returned.
      * </PRE>
-     * @param sock The socket to read the data from.
-     * @param buf The buffer to store the data in.
+     *
+     * @param sock   The socket to read the data from.
+     * @param buf    The buffer to store the data in.
      * @param offset Offset in the byte buffer.
      * @param nbytes The number of bytes to read (-1) for full array.
+     *
      * @return the number of bytes received.
      */
     public static native int recv(long sock, byte[] buf, int offset, int nbytes);
@@ -388,15 +401,16 @@
      *
      * APR_EINTR is never returned.
      * </PRE>
-     * @param sock The socket to read the data from.
-     * @param buf The buffer to store the data in.
-     * @param offset Offset in the byte buffer.
-     * @param nbytes The number of bytes to read (-1) for full array.
+     *
+     * @param sock    The socket to read the data from.
+     * @param buf     The buffer to store the data in.
+     * @param offset  Offset in the byte buffer.
+     * @param nbytes  The number of bytes to read (-1) for full array.
      * @param timeout The socket timeout in microseconds.
+     *
      * @return the number of bytes received.
      */
-    public static native int recvt(long sock, byte[] buf, int offset,
-                                   int nbytes, long timeout);
+    public static native int recvt(long sock, byte[] buf, int offset, int nbytes, long timeout);
 
     /**
      * Read data from a network.
@@ -412,30 +426,30 @@
      *
      * APR_EINTR is never returned.
      * </PRE>
-     * @param sock The socket to read the data from.
-     * @param buf The buffer to store the data in.
+     *
+     * @param sock   The socket to read the data from.
+     * @param buf    The buffer to store the data in.
      * @param offset Offset in the byte buffer.
      * @param nbytes The number of bytes to read (-1) for full array.
-     * @return If ≥ 0, the return value is the number of bytes read. Note a
-     *         non-blocking read with no data current available will return
-     *         {@link Status#EAGAIN} and EOF will return {@link Status#APR_EOF}.
+     *
+     * @return If ≥ 0, the return value is the number of bytes read. Note a non-blocking read with no data current
+     *             available will return {@link Status#EAGAIN} and EOF will return {@link Status#APR_EOF}.
      */
-    public static native int recvb(long sock, ByteBuffer buf,
-                                   int offset, int nbytes);
+    public static native int recvb(long sock, ByteBuffer buf, int offset, int nbytes);
 
     /**
      * Read data from a network using internally set ByteBuffer.
      *
-     * @param sock The socket to read the data from.
+     * @param sock   The socket to read the data from.
      * @param offset Offset in the byte buffer.
      * @param nbytes The number of bytes to read (-1) for full array.
-     * @return If > 0, the return value is the number of bytes read. If == 0,
-     *         the return value indicates EOF and if < 0 the return value is the
-     *         error code. Note a non-blocking read with no data current
-     *         available will return {@link Status#EAGAIN} not zero.
+     *
+     * @return If > 0, the return value is the number of bytes read. If == 0, the return value indicates EOF and if
+     *             < 0 the return value is the error code. Note a non-blocking read with no data current available
+     *             will return {@link Status#EAGAIN} not zero.
      */
-    public static native int recvbb(long sock,
-                                    int offset, int nbytes);
+    public static native int recvbb(long sock, int offset, int nbytes);
+
     /**
      * Read data from a network with timeout.
      *
@@ -450,43 +464,48 @@
      *
      * APR_EINTR is never returned.
      * </PRE>
-     * @param sock The socket to read the data from.
-     * @param buf The buffer to store the data in.
-     * @param offset Offset in the byte buffer.
-     * @param nbytes The number of bytes to read (-1) for full array.
+     *
+     * @param sock    The socket to read the data from.
+     * @param buf     The buffer to store the data in.
+     * @param offset  Offset in the byte buffer.
+     * @param nbytes  The number of bytes to read (-1) for full array.
      * @param timeout The socket timeout in microseconds.
+     *
      * @return the number of bytes received.
      */
-    public static native int recvbt(long sock, ByteBuffer buf,
-                                    int offset, int nbytes, long timeout);
+    public static native int recvbt(long sock, ByteBuffer buf, int offset, int nbytes, long timeout);
+
     /**
      * Read data from a network with timeout using internally set ByteBuffer
-     * @param sock The socket to read the data from.
-     * @param offset Offset in the byte buffer.
-     * @param nbytes The number of bytes to read (-1) for full array.
+     *
+     * @param sock    The socket to read the data from.
+     * @param offset  Offset in the byte buffer.
+     * @param nbytes  The number of bytes to read (-1) for full array.
      * @param timeout The socket timeout in microseconds.
+     *
      * @return the number of bytes received.
      */
-    public static native int recvbbt(long sock,
-                                     int offset, int nbytes, long timeout);
+    public static native int recvbbt(long sock, int offset, int nbytes, long timeout);
 
     /**
-     * @param from The apr_sockaddr_t to fill in the recipient info
-     * @param sock The socket to use
-     * @param flags The flags to use
-     * @param buf  The buffer to use
+     * @param from   The apr_sockaddr_t to fill in the recipient info
+     * @param sock   The socket to use
+     * @param flags  The flags to use
+     * @param buf    The buffer to use
      * @param offset Offset in the byte buffer.
      * @param nbytes The number of bytes to read (-1) for full array.
+     *
      * @return the number of bytes received.
      */
-    public static native int recvfrom(long from, long sock, int flags,
-                                      byte[] buf, int offset, int nbytes);
+    public static native int recvfrom(long from, long sock, int flags, byte[] buf, int offset, int nbytes);
 
     /**
      * Setup socket options for the specified socket
+     *
      * @param sock The socket to set up.
-     * @param opt The option we would like to configure.  One of:
-     * <PRE>
+     * @param opt  The option we would like to configure. One of:
+     *
+     *                 <PRE>
      * APR_SO_DEBUG      --  turn on debugging information
      * APR_SO_KEEPALIVE  --  keep connections active
      * APR_SO_LINGER     --  lingers on close if data is present
@@ -501,17 +520,21 @@
      *                       of local addresses.
      * APR_SO_SNDBUF     --  Set the SendBufferSize
      * APR_SO_RCVBUF     --  Set the ReceiveBufferSize
-     * </PRE>
-     * @param on Value for the option.
+     *                 </PRE>
+     *
+     * @param on   Value for the option.
+     *
      * @return the operation status
      */
     public static native int optSet(long sock, int opt, int on);
 
     /**
      * Query socket options for the specified socket
+     *
      * @param sock The socket to query
-     * @param opt The option we would like to query.  One of:
-     * <PRE>
+     * @param opt  The option we would like to query. One of:
+     *
+     *                 <PRE>
      * APR_SO_DEBUG      --  turn on debugging information
      * APR_SO_KEEPALIVE  --  keep connections active
      * APR_SO_LINGER     --  lingers on close if data is present
@@ -523,128 +546,139 @@
      * APR_SO_RCVBUF     --  Set the ReceiveBufferSize
      * APR_SO_DISCONNECTED -- Query the disconnected state of the socket.
      *                       (Currently only used on Windows)
-     * </PRE>
+     *                 </PRE>
+     *
      * @return Socket option returned on the call.
+     *
      * @throws Exception An error occurred
      */
-    public static native int optGet(long sock, int opt)
-        throws Exception;
+    public static native int optGet(long sock, int opt) throws Exception;
 
     /**
      * Setup socket timeout for the specified socket
+     *
      * @param sock The socket to set up.
-     * @param t Value for the timeout in microseconds.
-     * <PRE>
+     * @param t    Value for the timeout in microseconds.
+     *
+     *                 <PRE>
      * t > 0  -- read and write calls return APR_TIMEUP if specified time
      *           elapses with no data read or written
      * t == 0 -- read and write calls never block
      * t < 0  -- read and write calls block
-     * </PRE>
+     *                 </PRE>
+     *
      * @return the operation status
      */
     public static native int timeoutSet(long sock, long t);
 
     /**
      * Query socket timeout for the specified socket
+     *
      * @param sock The socket to query
+     *
      * @return Socket timeout returned from the query.
+     *
      * @throws Exception An error occurred
      */
-    public static native long timeoutGet(long sock)
-        throws Exception;
+    public static native long timeoutGet(long sock) throws Exception;
 
     /**
-     * Send a file from an open file descriptor to a socket, along with
-     * optional headers and trailers.
-     * <br>
-     * This functions acts like a blocking write by default.  To change
-     *         this behavior, use apr_socket_timeout_set() or the
-     *         APR_SO_NONBLOCK socket option.
-     * The number of bytes actually sent is stored in the len parameter.
-     * The offset parameter is passed by reference for no reason; its
-     * value will never be modified by the apr_socket_sendfile() function.
-     * @param sock The socket to which we're writing
-     * @param file The open file from which to read
-     * @param headers Array containing the headers to send
+     * Send a file from an open file descriptor to a socket, along with optional headers and trailers. <br>
+     * This functions acts like a blocking write by default. To change this behavior, use apr_socket_timeout_set() or
+     * the APR_SO_NONBLOCK socket option. The number of bytes actually sent is stored in the len parameter. The offset
+     * parameter is passed by reference for no reason; its value will never be modified by the apr_socket_sendfile()
+     * function.
+     *
+     * @param sock     The socket to which we're writing
+     * @param file     The open file from which to read
+     * @param headers  Array containing the headers to send
      * @param trailers Array containing the trailers to send
-     * @param offset Offset into the file where we should begin writing
-     * @param len Number of bytes to send from the file
-     * @param flags APR flags that are mapped to OS specific flags
-     * @return Number of bytes actually sent, including headers,
-     *         file, and trailers
-     */
-    public static native long sendfile(long sock, long file, byte [][] headers,
-                                       byte[][] trailers, long offset,
-                                       long len, int flags);
+     * @param offset   Offset into the file where we should begin writing
+     * @param len      Number of bytes to send from the file
+     * @param flags    APR flags that are mapped to OS specific flags
+     *
+     * @return Number of bytes actually sent, including headers, file, and trailers
+     */
+    public static native long sendfile(long sock, long file, byte[][] headers, byte[][] trailers, long offset, long len,
+            int flags);
 
     /**
      * Send a file without header and trailer arrays.
-     * @param sock The socket to which we're writing
-     * @param file The open file from which to read
+     *
+     * @param sock   The socket to which we're writing
+     * @param file   The open file from which to read
      * @param offset Offset into the file where we should begin writing
-     * @param len Number of bytes to send from the file
-     * @param flags APR flags that are mapped to OS specific flags
+     * @param len    Number of bytes to send from the file
+     * @param flags  APR flags that are mapped to OS specific flags
+     *
      * @return Number of bytes actually sent
      */
-    public static native long sendfilen(long sock, long file, long offset,
-                                        long len, int flags);
+    public static native long sendfilen(long sock, long file, long offset, long len, int flags);
 
     /**
      * Create a child pool from associated socket pool.
+     *
      * @param thesocket The socket to use
+     *
      * @return a pointer to the pool
+     *
      * @throws Exception An error occurred
      */
-    public static native long pool(long thesocket)
-        throws Exception;
+    public static native long pool(long thesocket) throws Exception;
 
     /**
      * Private method for getting the socket struct members
+     *
      * @param socket The socket to use
-     * @param what Struct member to obtain
-     * <PRE>
+     * @param what   Struct member to obtain
+     *
+     *                   <PRE>
      * SOCKET_GET_POOL  - The socket pool
      * SOCKET_GET_IMPL  - The socket implementation object
      * SOCKET_GET_APRS  - APR socket
      * SOCKET_GET_TYPE  - Socket type
-     * </PRE>
+     *                   </PRE>
+     *
      * @return The structure member address
      */
     private static native long get(long socket, int what);
 
     /**
-     * Set internal send ByteBuffer.
-     * This function will preset internal Java ByteBuffer for
-     * consecutive sendbb calls.
+     * Set internal send ByteBuffer. This function will preset internal Java ByteBuffer for consecutive sendbb calls.
+     *
      * @param sock The socket to use
-     * @param buf The ByteBuffer
+     * @param buf  The ByteBuffer
      */
     public static native void setsbb(long sock, ByteBuffer buf);
 
     /**
-     * Set internal receive ByteBuffer.
-     * This function will preset internal Java ByteBuffer for
-     * consecutive revcvbb/recvbbt calls.
+     * Set internal receive ByteBuffer. This function will preset internal Java ByteBuffer for consecutive
+     * revcvbb/recvbbt calls.
+     *
      * @param sock The socket to use
-     * @param buf The ByteBuffer
+     * @param buf  The ByteBuffer
      */
     public static native void setrbb(long sock, ByteBuffer buf);
 
     /**
      * Set the data associated with the current socket.
+     *
      * @param sock The currently open socket.
      * @param data The user data to associate with the socket.
-     * @param key The key to associate with the data.
+     * @param key  The key to associate with the data.
+     *
      * @return the operation status
      */
-      public static native int dataSet(long sock, String key, Object data);
+    public static native int dataSet(long sock, String key, Object data);
 
     /**
      * Return the data associated with the current socket
+     *
      * @param sock The currently open socket.
-     * @param key The key to associate with the user data.
+     * @param key  The key to associate with the user data.
+     *
      * @return Data or null in case of error.
      */
-     public static native Object dataGet(long sock, String key);
+    public static native Object dataGet(long sock, String key);
 
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSLConf.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSLConf.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSLConf.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSLConf.java	2026-06-11 17:01:29.000000000 -0300
@@ -16,15 +16,25 @@
  */
 package org.apache.tomcat.jni;
 
+/**
+ * JNI bindings for OpenSSL SSL_CONF operations.
+ */
 public final class SSLConf {
 
     /**
+     * Default constructor. This class provides only static methods.
+     */
+    public SSLConf() {
+        super();
+    }
+
+    /**
      * Create a new SSL_CONF context.
      *
-     * @param pool The pool to use.
-     * @param flags The SSL_CONF flags to use. It can be any combination of
-     * the following:
-     * <PRE>
+     * @param pool  The pool to use.
+     * @param flags The SSL_CONF flags to use. It can be any combination of the following:
+     *
+     *                  <PRE>
      * {@link SSL#SSL_CONF_FLAG_CMDLINE}
      * {@link SSL#SSL_CONF_FLAG_FILE}
      * {@link SSL#SSL_CONF_FLAG_CLIENT}
@@ -33,13 +43,13 @@
      * {@link SSL#SSL_CONF_FLAG_CERTIFICATE}
      * </PRE>
      *
-     * @return The Java representation of a pointer to the newly created
-     *         SSL_CONF Context
+     * @return The Java representation of a pointer to the newly created SSL_CONF Context
      *
      * @throws Exception If the SSL_CONF context could not be created
      *
      * @see <a href="https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_CTX_new.html">OpenSSL SSL_CONF_CTX_new</a>
-     * @see <a href="https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_CTX_set_flags.html">OpenSSL SSL_CONF_CTX_set_flags</a>
+     * @see <a href="https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_CTX_set_flags.html">OpenSSL
+     *          SSL_CONF_CTX_set_flags</a>
      */
     public static native long make(long pool, int flags) throws Exception;
 
@@ -53,15 +63,18 @@
     public static native void free(long cctx);
 
     /**
-     * Check a command with an SSL_CONF context.
+     * Optionally used to check a command with an SSL_CONF context.
+     * <p>
+     * This call is also used to pass Tomcat specific settings to Tomcat Native. It must be called for for each Tomcat
+     * specific setting (e.g. {@link org.apache.tomcat.util.net.openssl.OpenSSLConfCmd#NO_OCSP_CHECK}) before {@link
+     * #assign(long, long)} is called.
      *
-     * @param cctx SSL_CONF context to use.
-     * @param name command name.
+     * @param cctx  SSL_CONF context to use.
+     * @param name  command name.
      * @param value command value.
      *
-     * @return The result of the check based on the {@code SSL_CONF_cmd_value_type}
-     * call. Unknown types will result in an exception, as well as
-     * file and directory types with invalid file or directory names.
+     * @return The result of the check based on the {@code SSL_CONF_cmd_value_type} call. Unknown types will result in
+     *             an exception, as well as file and directory types with invalid file or directory names.
      *
      * @throws Exception If the check fails.
      *
@@ -70,22 +83,28 @@
     public static native int check(long cctx, String name, String value) throws Exception;
 
     /**
-     * Assign an SSL context to an SSL_CONF context.
-     * All following calls to {@link #apply(long, String, String)} will be
+     * Assign an SSL context to an SSL_CONF context. All following calls to {@link #apply(long, String, String)} will be
      * applied to this SSL context.
+     * <p>
+     * For Tomcat specific settings this call applies previous settings set via calls to {@link
+     * #check(long, String, String)}. Further calls to {@link #check(long, String, String)} after a call to this method
+     * will have no effect.
      *
      * @param cctx SSL_CONF context to use.
-     * @param ctx SSL context to assign to the given SSL_CONF context.
+     * @param ctx  SSL context to assign to the given SSL_CONF context.
      *
-     * @see <a href="https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_CTX_set_ssl_ctx.html">OpenSSL SSL_CONF_CTX_set_ssl_ctx</a>
+     * @see <a href="https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_CTX_set_ssl_ctx.html">OpenSSL
+     *          SSL_CONF_CTX_set_ssl_ctx</a>
      */
     public static native void assign(long cctx, long ctx);
 
     /**
      * Apply a command to an SSL_CONF context.
+     * <p>
+     * This call has no effect for Tomcat specific settings.
      *
-     * @param cctx SSL_CONF context to use.
-     * @param name command name.
+     * @param cctx  SSL_CONF context to use.
+     * @param name  command name.
      * @param value command value.
      *
      * @return The result of the native {@code SSL_CONF_cmd} call
@@ -98,12 +117,15 @@
 
     /**
      * Finish commands for an SSL_CONF context.
+     * <p>
+     * This call has no effect for Tomcat specific settings.
      *
      * @param cctx SSL_CONF context to use.
      *
      * @return The result of the native {@code SSL_CONF_CTX_finish} call
      *
-     * @see <a href="https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_CTX_set_flags.html">OpenSSL SSL_CONF_CTX_finish</a>
+     * @see <a href="https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_CTX_set_flags.html">OpenSSL
+     *          SSL_CONF_CTX_finish</a>
      */
     public static native int finish(long cctx);
 
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSLContext.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSLContext.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSLContext.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSLContext.java	2026-06-11 17:01:29.000000000 -0300
@@ -20,18 +20,30 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+/**
+ * JNI bindings for OpenSSL SSL_CTX operations.
+ */
 public final class SSLContext {
 
-    public static final byte[] DEFAULT_SESSION_ID_CONTEXT =
-            new byte[] { 'd', 'e', 'f', 'a', 'u', 'l', 't' };
+    /**
+     * Default constructor. This class provides only static methods.
+     */
+    public SSLContext() {
+        super();
+    }
+
+    /**
+     * Default session ID context value.
+     */
+    public static final byte[] DEFAULT_SESSION_ID_CONTEXT = new byte[] { 'd', 'e', 'f', 'a', 'u', 'l', 't' };
 
     /**
      * Create a new SSL context.
      *
-     * @param pool The pool to use.
-     * @param protocol The SSL protocol to use. It can be any combination of
-     * the following:
-     * <PRE>
+     * @param pool     The pool to use.
+     * @param protocol The SSL protocol to use. It can be any combination of the following:
+     *
+     *                     <PRE>
      * {@link SSL#SSL_PROTOCOL_SSLV2}
      * {@link SSL#SSL_PROTOCOL_SSLV3}
      * {@link SSL#SSL_PROTOCOL_TLSV1}
@@ -40,15 +52,16 @@
      * {@link SSL#SSL_PROTOCOL_TLSV1_3}
      * {@link SSL#SSL_PROTOCOL_ALL} ( == all TLS versions, no SSL)
      * </PRE>
-     * @param mode SSL mode to use
-     * <PRE>
+     *
+     * @param mode     SSL mode to use
+     *
+     *                     <PRE>
      * SSL_MODE_CLIENT
      * SSL_MODE_SERVER
      * SSL_MODE_COMBINED
-     * </PRE>
+     *                     </PRE>
      *
-     * @return The Java representation of a pointer to the newly created SSL
-     *         Context
+     * @return The Java representation of a pointer to the newly created SSL Context
      *
      * @throws Exception If the SSL Context could not be created
      */
@@ -56,13 +69,16 @@
 
     /**
      * Free the resources used by the Context
+     *
      * @param ctx Server or Client context to free.
+     *
      * @return APR Status code.
      */
     public static native int free(long ctx);
 
     /**
      * Set Session context id. Usually host:port combination.
+     *
      * @param ctx Context to use.
      * @param id  String that uniquely identifies this context.
      *
@@ -72,20 +88,19 @@
     public static native void setContextId(long ctx, String id);
 
     /**
-     * Associate BIOCallback for input or output data capture.
-     * <br>
-     * First word in the output string will contain error
-     * level in the form:
+     * Associate BIOCallback for input or output data capture. <br>
+     * First word in the output string will contain error level in the form:
+     *
      * <PRE>
      * [ERROR]  -- Critical error messages
      * [WARN]   -- Warning messages
      * [INFO]   -- Informational messages
      * [DEBUG]  -- Debugging messaged
      * </PRE>
-     * Callback can use that word to determine application logging level
-     * by intercepting <b>write</b> call.
-     * If the <b>bio</b> is set to 0 no error messages will be displayed.
-     * Default is to use the stderr output stream.
+     *
+     * Callback can use that word to determine application logging level by intercepting <b>write</b> call. If the
+     * <b>bio</b> is set to 0 no error messages will be displayed. Default is to use the stderr output stream.
+     *
      * @param ctx Server or Client context to use.
      * @param bio BIO handle to use, created with SSL.newBIO
      * @param dir BIO direction (1 for input 0 for output).
@@ -97,49 +112,50 @@
 
     /**
      * Set OpenSSL Option.
-     * @param ctx Server or Client context to use.
-     * @param options  See SSL.SSL_OP_* for option flags.
+     *
+     * @param ctx     Server or Client context to use.
+     * @param options See SSL.SSL_OP_* for option flags.
      */
     public static native void setOptions(long ctx, int options);
 
     /**
      * Get OpenSSL Option.
+     *
      * @param ctx Server or Client context to use.
-     * @return options  See SSL.SSL_OP_* for option flags.
+     *
+     * @return options See SSL.SSL_OP_* for option flags.
      */
     public static native int getOptions(long ctx);
 
     /**
      * Clears OpenSSL Options.
-     * @param ctx Server or Client context to use.
-     * @param options  See SSL.SSL_OP_* for option flags.
+     *
+     * @param ctx     Server or Client context to use.
+     * @param options See SSL.SSL_OP_* for option flags.
      */
     public static native void clearOptions(long ctx, int options);
 
     /**
      * Returns all cipher suites that are enabled for negotiation in an SSL handshake.
+     *
      * @param ctx Server or Client context to use.
+     *
      * @return ciphers
      */
     public static native String[] getCiphers(long ctx);
 
     /**
-     * Sets the "quiet shutdown" flag for <b>ctx</b> to be
-     * <b>mode</b>. SSL objects created from <b>ctx</b> inherit the
-     * <b>mode</b> valid at the time and may be 0 or 1.
-     * <br>
-     * Normally when an SSL connection is finished, the parties must send out
-     * "close notify" alert messages using L<SSL_shutdown(3)|SSL_shutdown(3)>
-     * for a clean shutdown.
-     * <br>
-     * When setting the "quiet shutdown" flag to 1, <b>SSL.shutdown</b>
-     * will set the internal flags to SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN.
-     * (<b>SSL_shutdown</b> then behaves like called with
-     * SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN.)
-     * The session is thus considered to be shutdown, but no "close notify" alert
-     * is sent to the peer. This behaviour violates the TLS standard.
-     * The default is normal shutdown behaviour as described by the TLS standard.
-     * @param ctx Server or Client context to use.
+     * Sets the "quiet shutdown" flag for <b>ctx</b> to be <b>mode</b>. SSL objects created from <b>ctx</b> inherit the
+     * <b>mode</b> valid at the time and may be 0 or 1. <br>
+     * Normally when an SSL connection is finished, the parties must send out "close notify" alert messages using
+     * L<SSL_shutdown(3)|SSL_shutdown(3)> for a clean shutdown. <br>
+     * When setting the "quiet shutdown" flag to 1, <b>SSL.shutdown</b> will set the internal flags to
+     * SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN. (<b>SSL_shutdown</b> then behaves like called with
+     * SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN.) The session is thus considered to be shutdown, but no "close notify"
+     * alert is sent to the peer. This behaviour violates the TLS standard. The default is normal shutdown behaviour as
+     * described by the TLS standard.
+     *
+     * @param ctx  Server or Client context to use.
      * @param mode True to set the quiet shutdown.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -148,115 +164,110 @@
     public static native void setQuietShutdown(long ctx, boolean mode);
 
     /**
-     * Cipher Suite available for negotiation in SSL handshake.
-     * <br>
-     * This complex directive uses a colon-separated cipher-spec string consisting
-     * of OpenSSL cipher specifications to configure the Cipher Suite the client
-     * is permitted to negotiate in the SSL handshake phase. Notice that this
-     * directive can be used both in per-server and per-directory context.
-     * In per-server context it applies to the standard SSL handshake when a
-     * connection is established. In per-directory context it forces an SSL
-     * renegotiation with the reconfigured Cipher Suite after the HTTP request
-     * was read but before the HTTP response is sent.
-     * @param ctx Server or Client context to use.
-     * @param ciphers An OpenSSL cipher specification.
+     * Set the TLSv1.2 and below ciphers available for negotiation the in TLS handshake.
+     * <p>
+     * This complex directive uses a colon-separated cipher-spec string consisting of OpenSSL cipher specifications to
+     * configure the ciphers the client is permitted to negotiate in the TLS handshake phase.
+     *
+     * @param ctx        Server or Client context to use.
+     * @param cipherList An OpenSSL cipher specification.
+     *
      * @return <code>true</code> if the operation was successful
+     *
      * @throws Exception An error occurred
      */
-    public static native boolean setCipherSuite(long ctx, String ciphers)
-        throws Exception;
+    public static native boolean setCipherSuite(long ctx, String cipherList) throws Exception;
 
     /**
-     * Set File of concatenated PEM-encoded CA CRLs or
-     * directory of PEM-encoded CA Certificates for Client Auth
-     * <br>
-     * This directive sets the all-in-one file where you can assemble the
-     * Certificate Revocation Lists (CRL) of Certification Authorities (CA)
-     * whose clients you deal with. These are used for Client Authentication.
-     * Such a file is simply the concatenation of the various PEM-encoded CRL
-     * files, in order of preference.
-     * <br>
-     * The files in this directory have to be PEM-encoded and are accessed through
-     * hash filenames. So usually you can't just place the Certificate files there:
-     * you also have to create symbolic links named hash-value.N. And you should
-     * always make sure this directory contains the appropriate symbolic links.
-     * Use the Makefile which comes with mod_ssl to accomplish this task.
-     * @param ctx Server or Client context to use.
+     * Set the TLSv1.3 cipher suites available for negotiation the in TLS handshake.
+     * <p>
+     * This uses a colon-separated list of TLSv1.3 cipher suite names in preference order.
+     *
+     * @param ctx          Server or Client context to use.
+     * @param cipherSuites An OpenSSL cipher suite list.
+     *
+     * @return <code>true</code> if the operation was successful
+     *
+     * @throws Exception An error occurred
+     */
+    public static native boolean setCipherSuitesEx(long ctx, String cipherSuites) throws Exception;
+
+    /**
+     * Set File of concatenated PEM-encoded CA CRLs or directory of PEM-encoded CA Certificates for Client Auth <br>
+     * This directive sets the all-in-one file where you can assemble the Certificate Revocation Lists (CRL) of
+     * Certification Authorities (CA) whose clients you deal with. These are used for Client Authentication. Such a file
+     * is simply the concatenation of the various PEM-encoded CRL files, in order of preference. <br>
+     * The files in this directory have to be PEM-encoded and are accessed through hash filenames. So usually you can't
+     * just place the Certificate files there: you also have to create symbolic links named hash-value.N. And you should
+     * always make sure this directory contains the appropriate symbolic links. Use the Makefile which comes with
+     * mod_ssl to accomplish this task.
+     *
+     * @param ctx  Server or Client context to use.
      * @param file File of concatenated PEM-encoded CA CRLs for Client Auth.
      * @param path Directory of PEM-encoded CA Certificates for Client Auth.
+     *
      * @return <code>true</code> if the operation was successful
+     *
      * @throws Exception An error occurred
      */
-    public static native boolean setCARevocation(long ctx, String file,
-                                                 String path)
-        throws Exception;
+    public static native boolean setCARevocation(long ctx, String file, String path) throws Exception;
 
     /**
-     * Set File of PEM-encoded Server CA Certificates
-     * <br>
-     * This directive sets the optional all-in-one file where you can assemble the
-     * certificates of Certification Authorities (CA) which form the certificate
-     * chain of the server certificate. This starts with the issuing CA certificate
-     * of of the server certificate and can range up to the root CA certificate.
-     * Such a file is simply the concatenation of the various PEM-encoded CA
-     * Certificate files, usually in certificate chain order.
-     * <br>
-     * But be careful: Providing the certificate chain works only if you are using
-     * a single (either RSA or DSA) based server certificate. If you are using a
-     * coupled RSA+DSA certificate pair, this will work only if actually both
-     * certificates use the same certificate chain. Else the browsers will be
-     * confused in this situation.
-     * @param ctx Server or Client context to use.
-     * @param file File of PEM-encoded Server CA Certificates.
-     * @param skipfirst Skip first certificate if chain file is inside
-     *                  certificate file.
+     * Set File of PEM-encoded Server CA Certificates <br>
+     * This directive sets the optional all-in-one file where you can assemble the certificates of Certification
+     * Authorities (CA) which form the certificate chain of the server certificate. This starts with the issuing CA
+     * certificate of the server certificate and can range up to the root CA certificate. Such a file is simply the
+     * concatenation of the various PEM-encoded CA Certificate files, usually in certificate chain order. <br>
+     * But be careful: Providing the certificate chain works only if you are using a single (either RSA or DSA) based
+     * server certificate. If you are using a coupled RSA+DSA certificate pair, this will work only if actually both
+     * certificates use the same certificate chain. Else the browsers will be confused in this situation.
+     *
+     * @param ctx       Server or Client context to use.
+     * @param file      File of PEM-encoded Server CA Certificates.
+     * @param skipfirst Skip first certificate if chain file is inside certificate file.
+     *
      * @return <code>true</code> if the operation was successful
      */
-    public static native boolean setCertificateChainFile(long ctx, String file,
-                                                         boolean skipfirst);
+    public static native boolean setCertificateChainFile(long ctx, String file, boolean skipfirst);
 
     /**
-     * Set Certificate
-     * <br>
-     * Point setCertificateFile at a PEM encoded certificate.  If
-     * the certificate is encrypted, then you will be prompted for a
-     * pass phrase.  Note that a kill -HUP will prompt again. A test
-     * certificate can be generated with 'make certificate' under
-     * built time. Keep in mind that if you've both a RSA and a DSA
-     * certificate you can configure both in parallel (to also allow
-     * the use of DSA ciphers, etc.)
-     * <br>
-     * If the key is not combined with the certificate, use key param
-     * to point at the key file.  Keep in mind that if
-     * you've both a RSA and a DSA private key you can configure
-     * both in parallel (to also allow the use of DSA ciphers, etc.)
-     * @param ctx Server or Client context to use.
-     * @param cert Certificate file.
-     * @param key Private Key file to use if not in cert.
-     * @param password Certificate password. If null and certificate
-     *                 is encrypted, password prompt will be displayed.
-     * @param idx Certificate index SSL_AIDX_RSA or SSL_AIDX_DSA.
+     * Set Certificate <br>
+     * Point setCertificateFile at a PEM encoded certificate. If the certificate is encrypted, then you will be prompted
+     * for a pass phrase. Note that a kill -HUP will prompt again. A test certificate can be generated with 'make
+     * certificate' under built time. Keep in mind that if you've both a RSA and a DSA certificate you can configure
+     * both in parallel (to also allow the use of DSA ciphers, etc.) <br>
+     * If the key is not combined with the certificate, use key param to point at the key file. Keep in mind that if
+     * you've both a RSA and a DSA private key you can configure both in parallel (to also allow the use of DSA ciphers,
+     * etc.)
+     *
+     * @param ctx      Server or Client context to use.
+     * @param cert     Certificate file.
+     * @param key      Private Key file to use if not in cert.
+     * @param password Certificate password. If null and certificate is encrypted, password prompt will be displayed.
+     * @param idx      Certificate index SSL_AIDX_RSA or SSL_AIDX_DSA.
+     *
      * @return <code>true</code> if the operation was successful
+     *
      * @throws Exception An error occurred
      */
-    public static native boolean setCertificate(long ctx, String cert,
-                                                String key, String password,
-                                                int idx)
-        throws Exception;
+    public static native boolean setCertificate(long ctx, String cert, String key, String password, int idx)
+            throws Exception;
 
     /**
-     * Set the size of the internal session cache.
-     * http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html
-     * @param ctx Server or Client context to use.
+     * Set the size of the internal session cache. http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html
+     *
+     * @param ctx  Server or Client context to use.
      * @param size The cache size
+     *
      * @return the value set
      */
     public static native long setSessionCacheSize(long ctx, long size);
 
     /**
-     * Get the size of the internal session cache.
-     * http://www.openssl.org/docs/ssl/SSL_CTX_sess_get_cache_size.html
+     * Get the size of the internal session cache. http://www.openssl.org/docs/ssl/SSL_CTX_sess_get_cache_size.html
+     *
      * @param ctx Server or Client context to use.
+     *
      * @return the size
      */
     public static native long getSessionCacheSize(long ctx);
@@ -264,8 +275,10 @@
     /**
      * Set the timeout for the internal session cache in seconds.
      * http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx            Server or Client context to use.
      * @param timeoutSeconds Timeout value
+     *
      * @return the value set
      */
     public static native long setSessionCacheTimeout(long ctx, long timeoutSeconds);
@@ -273,80 +286,178 @@
     /**
      * Get the timeout for the internal session cache in seconds.
      * http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html
+     *
      * @param ctx Server or Client context to use.
+     *
      * @return the timeout
      */
     public static native long getSessionCacheTimeout(long ctx);
 
     /**
      * Set the mode of the internal session cache and return the previous used mode.
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx  Server or Client context to use.
      * @param mode The mode to set
+     *
      * @return the value set
      */
     public static native long setSessionCacheMode(long ctx, long mode);
 
     /**
      * Get the mode of the current used internal session cache.
+     *
      * @param ctx Server or Client context to use.
+     *
      * @return the value set
      */
     public static native long getSessionCacheMode(long ctx);
 
     /*
-     * Session resumption statistics methods.
-     * http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html
+     * Session resumption statistics methods. http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html
+     */
+
+    /**
+     * Returns the total number of session attempts accepted by the server.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of accepted sessions
      */
     public static native long sessionAccept(long ctx);
+
+    /**
+     * Returns the number of sessions actually reused on the server side.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of good session accepts
+     */
     public static native long sessionAcceptGood(long ctx);
+
+    /**
+     * Returns the number of session renegotiations on the server side.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of session renegotiations accepted
+     */
     public static native long sessionAcceptRenegotiate(long ctx);
+
+    /**
+     * Returns the number of times the session cache grew to the maximum allowed size and therefore further entries
+     * could not be inserted.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of times the session cache was full
+     */
     public static native long sessionCacheFull(long ctx);
+
+    /**
+     * Returns the number of sessions that were resumed by the callback.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of session callback hits
+     */
     public static native long sessionCbHits(long ctx);
+
+    /**
+     * Returns the total number of session connection attempts by the client.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of session connects
+     */
     public static native long sessionConnect(long ctx);
+
+    /**
+     * Returns the number of sessions that were actually reused on the client side.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of good session connects
+     */
     public static native long sessionConnectGood(long ctx);
+
+    /**
+     * Returns the number of session renegotiations on the client side.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of session renegotiations connected
+     */
     public static native long sessionConnectRenegotiate(long ctx);
+
+    /**
+     * Returns the number of sessions that were actually reused (hits).
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of session hits
+     */
     public static native long sessionHits(long ctx);
+
+    /**
+     * Returns the number of sessions that were not found in the cache (misses).
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of session misses
+     */
     public static native long sessionMisses(long ctx);
+
+    /**
+     * Returns the total number of sessions currently in the cache.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The total number of sessions
+     */
     public static native long sessionNumber(long ctx);
+
+    /**
+     * Returns the number of sessions that have timed out.
+     *
+     * @param ctx Server or Client context to use.
+     *
+     * @return The number of session timeouts
+     */
     public static native long sessionTimeouts(long ctx);
 
     /**
      * Set TLS session keys. This allows us to share keys across TFEs.
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx  Server or Client context to use.
      * @param keys Some session keys
      */
     public static native void setSessionTicketKeys(long ctx, byte[] keys);
 
     /**
-     * Set File and Directory of concatenated PEM-encoded CA Certificates
-     * for Client Auth
-     * <br>
-     * This directive sets the all-in-one file where you can assemble the
-     * Certificates of Certification Authorities (CA) whose clients you deal with.
-     * These are used for Client Authentication. Such a file is simply the
-     * concatenation of the various PEM-encoded Certificate files, in order of
-     * preference. This can be used alternatively and/or additionally to
-     * path.
-     * <br>
-     * The files in this directory have to be PEM-encoded and are accessed through
-     * hash filenames. So usually you can't just place the Certificate files there:
-     * you also have to create symbolic links named hash-value.N. And you should
-     * always make sure this directory contains the appropriate symbolic links.
-     * Use the Makefile which comes with mod_ssl to accomplish this task.
-     * @param ctx Server or Client context to use.
-     * @param file File of concatenated PEM-encoded CA Certificates for
-     *             Client Auth.
+     * Set File and Directory of concatenated PEM-encoded CA Certificates for Client Auth <br>
+     * This directive sets the all-in-one file where you can assemble the Certificates of Certification Authorities (CA)
+     * whose clients you deal with. These are used for Client Authentication. Such a file is simply the concatenation of
+     * the various PEM-encoded Certificate files, in order of preference. This can be used alternatively and/or
+     * additionally to path. <br>
+     * The files in this directory have to be PEM-encoded and are accessed through hash filenames. So usually you can't
+     * just place the Certificate files there: you also have to create symbolic links named hash-value.N. And you should
+     * always make sure this directory contains the appropriate symbolic links. Use the Makefile which comes with
+     * mod_ssl to accomplish this task.
+     *
+     * @param ctx  Server or Client context to use.
+     * @param file File of concatenated PEM-encoded CA Certificates for Client Auth.
      * @param path Directory of PEM-encoded CA Certificates for Client Auth.
+     *
      * @return <code>true</code> if the operation was successful
+     *
      * @throws Exception An error occurred
      */
-    public static native boolean setCACertificate(long ctx, String file,
-                                                  String path)
-        throws Exception;
+    public static native boolean setCACertificate(long ctx, String file, String path) throws Exception;
 
     /**
      * Set file for randomness
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx  Server or Client context to use.
      * @param file random file.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -355,15 +466,16 @@
     public static native void setRandom(long ctx, String file);
 
     /**
-     * Set SSL connection shutdown type
-     * <br>
+     * Set SSL connection shutdown type <br>
      * The following levels are available for level:
+     *
      * <PRE>
      * SSL_SHUTDOWN_TYPE_STANDARD
      * SSL_SHUTDOWN_TYPE_UNCLEAN
      * SSL_SHUTDOWN_TYPE_ACCURATE
      * </PRE>
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx  Server or Client context to use.
      * @param type Shutdown type to use.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -372,18 +484,15 @@
     public static native void setShutdownType(long ctx, int type);
 
     /**
-     * Set Type of Client Certificate verification and Maximum depth of CA Certificates
-     * in Client Certificate verification.
-     * <br>
-     * This directive sets the Certificate verification level for the Client
-     * Authentication. Notice that this directive can be used both in per-server
-     * and per-directory context. In per-server context it applies to the client
-     * authentication process used in the standard SSL handshake when a connection
-     * is established. In per-directory context it forces an SSL renegotiation with
-     * the reconfigured client verification level after the HTTP request was read
-     * but before the HTTP response is sent.
-     * <br>
+     * Set Type of Client Certificate verification and Maximum depth of CA Certificates in Client Certificate
+     * verification. <br>
+     * This directive sets the Certificate verification level for the Client Authentication. Notice that this directive
+     * can be used both in per-server and per-directory context. In per-server context it applies to the client
+     * authentication process used in the standard SSL handshake when a connection is established. In per-directory
+     * context it forces an SSL renegotiation with the reconfigured client verification level after the HTTP request was
+     * read but before the HTTP response is sent. <br>
      * The following levels are available for level:
+     *
      * <PRE>
      * SSL_CVERIFY_NONE           - No client Certificate is required at all
      * SSL_CVERIFY_OPTIONAL       - The client may present a valid Certificate
@@ -391,18 +500,17 @@
      * SSL_CVERIFY_OPTIONAL_NO_CA - The client may present a valid Certificate
      *                              but it need not to be (successfully) verifiable
      * </PRE>
+     *
      * <br>
-     * The depth actually is the maximum number of intermediate certificate issuers,
-     * i.e. the number of CA certificates which are max allowed to be followed while
-     * verifying the client certificate. A depth of 0 means that self-signed client
-     * certificates are accepted only, the default depth of 1 means the client
-     * certificate can be self-signed or has to be signed by a CA which is directly
-     * known to the server (i.e. the CA's certificate is under
+     * The depth actually is the maximum number of intermediate certificate issuers, i.e. the number of CA certificates
+     * which are max allowed to be followed while verifying the client certificate. A depth of 0 means that self-signed
+     * client certificates are accepted only, the default depth of 1 means the client certificate can be self-signed or
+     * has to be signed by a CA which is directly known to the server (i.e. the CA's certificate is under
      * <code>setCACertificatePath</code>), etc.
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx   Server or Client context to use.
      * @param level Type of Client Certificate verification.
-     * @param depth Maximum depth of CA Certificates in Client Certificate
-     *              verification.
+     * @param depth Maximum depth of CA Certificates in Client Certificate verification.
      */
     public static native void setVerify(long ctx, int level, int depth);
 
@@ -410,19 +518,19 @@
     public static native int setALPN(long ctx, byte[] proto, int len);
 
     /**
-     * When tc-native encounters a SNI extension in the TLS handshake it will
-     * call this method to determine which OpenSSL SSLContext to use for the
-     * connection.
-     *
-     * @param currentCtx   The OpenSSL SSLContext that the handshake started to
-     *                     use. This will be the default OpenSSL SSLContext for
-     *                     the endpoint associated with the socket.
-     * @param sniHostName  The host name requested by the client
-     *
-     * @return The Java representation of the pointer to the OpenSSL SSLContext
-     *         to use for the given host or zero if no SSLContext could be
-     *         identified
+     * When tc-native encounters a SNI extension in the TLS handshake it will call this method to determine which
+     * OpenSSL SSLContext to use for the connection.
+     *
+     * @param currentCtx  The OpenSSL SSLContext that the handshake started to use. This will be the default OpenSSL
+     *                        SSLContext for the endpoint associated with the socket.
+     * @param sniHostName The host name requested by the client
+     *
+     * @return The Java representation of the pointer to the OpenSSL SSLContext to use for the given host or zero if no
+     *             SSLContext could be identified
+     *
+     * @deprecated Unused. Will be removed in Tomcat 12
      */
+    @Deprecated
     public static long sniCallBack(long currentCtx, String sniHostName) {
         SNICallBack sniCallBack = sniCallBacks.get(Long.valueOf(currentCtx));
         if (sniCallBack == null) {
@@ -435,42 +543,36 @@
     }
 
     /**
-     * A map of default SSL Contexts to SNICallBack instances (in Tomcat these
-     * are instances of AprEndpoint) that will be used to determine the SSL
-     * Context to use bases on the SNI host name. It is structured this way
-     * since a Tomcat instance may have several TLS enabled endpoints that each
-     * have different SSL Context mappings for the same host name.
+     * A map of default SSL Contexts to SNICallBack instances (in Tomcat these are instances of AprEndpoint) that will
+     * be used to determine the SSL Context to use bases on the SNI host name. It is structured this way since a Tomcat
+     * instance may have several TLS enabled endpoints that each have different SSL Context mappings for the same host
+     * name.
      */
     private static final Map<Long,SNICallBack> sniCallBacks = new ConcurrentHashMap<>();
 
     /**
-     * Register an OpenSSL SSLContext that will be used to initiate TLS
-     * connections that may use the SNI extension with the component that will
-     * be used to map the requested hostname to the correct OpenSSL SSLContext
-     * for the remainder of the connection.
-     *
-     * @param defaultSSLContext The Java representation of a pointer to the
-     *                          OpenSSL SSLContext that will be used to
-     *                          initiate TLS connections
-     * @param sniCallBack The component that will map SNI hosts names received
-     *                    via connections initiated using
-     *                    <code>defaultSSLContext</code> to the correct  OpenSSL
-     *                    SSLContext
+     * Register an OpenSSL SSLContext that will be used to initiate TLS connections that may use the SNI extension with
+     * the component that will be used to map the requested hostname to the correct OpenSSL SSLContext for the remainder
+     * of the connection.
+     *
+     * @param defaultSSLContext The Java representation of a pointer to the OpenSSL SSLContext that will be used to
+     *                              initiate TLS connections
+     * @param sniCallBack       The component that will map SNI hosts names received via connections initiated using
+     *                              <code>defaultSSLContext</code> to the correct OpenSSL SSLContext
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
     @Deprecated
-    public static void registerDefault(Long defaultSSLContext,
-            SNICallBack sniCallBack) {
+    public static void registerDefault(Long defaultSSLContext, SNICallBack sniCallBack) {
         sniCallBacks.put(defaultSSLContext, sniCallBack);
     }
 
     /**
-     * Unregister an OpenSSL SSLContext that will no longer be used to initiate
-     * TLS connections that may use the SNI extension.
+     * Unregister an OpenSSL SSLContext that will no longer be used to initiate TLS connections that may use the SNI
+     * extension.
      *
-     * @param defaultSSLContext The Java representation of a pointer to the
-     *                          OpenSSL SSLContext that will no longer be used
+     * @param defaultSSLContext The Java representation of a pointer to the OpenSSL SSLContext that will no longer be
+     *                              used
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
@@ -481,38 +583,39 @@
 
 
     /**
-     * Interface implemented by components that will receive the call back to
-     * select an OpenSSL SSLContext based on the host name requested by the
-     * client.
+     * Interface implemented by components that will receive the call back to select an OpenSSL SSLContext based on the
+     * host name requested by the client.
+     *
+     * @deprecated Unused. Will be removed in Tomcat 12
      */
+    @Deprecated
     public interface SNICallBack {
 
         /**
-         * This callback is made during the TLS handshake when the client uses
-         * the SNI extension to request a specific TLS host.
+         * This callback is made during the TLS handshake when the client uses the SNI extension to request a specific
+         * TLS host.
          *
-         * @param sniHostName The host name requested by the client - must be in
-         *                    lower case
+         * @param sniHostName The host name requested by the client - must be in lower case
          *
-         * @return The Java representation of the pointer to the OpenSSL
-         *         SSLContext to use for the given host or zero if no SSLContext
-         *         could be identified
+         * @return The Java representation of the pointer to the OpenSSL SSLContext to use for the given host or zero if
+         *             no SSLContext could be identified
          */
         long getSslContext(String sniHostName);
     }
 
     /**
-     * Allow to hook {@link CertificateVerifier} into the handshake processing.
-     * This will call {@code SSL_CTX_set_cert_verify_callback} and so replace the default verification
-     * callback used by openssl
-     * @param ctx Server or Client context to use.
+     * Allow to hook {@link CertificateVerifier} into the handshake processing. This will call
+     * {@code SSL_CTX_set_cert_verify_callback} and so replace the default verification callback used by openssl
+     *
+     * @param ctx      Server or Client context to use.
      * @param verifier the verifier to call during handshake.
      */
     public static native void setCertVerifyCallback(long ctx, CertificateVerifier verifier);
 
     /**
      * Set next protocol for next protocol negotiation extension
-     * @param ctx Server context to use.
+     *
+     * @param ctx        Server context to use.
      * @param nextProtos comma delimited list of protocols in priority order
      *
      * @deprecated use {@link #setNpnProtos(long, String[], int)}
@@ -524,10 +627,11 @@
 
     /**
      * Set next protocol for next protocol negotiation extension
-     * @param ctx Server context to use.
-     * @param nextProtos protocols in priority order
-     * @param selectorFailureBehavior see {@link SSL#SSL_SELECTOR_FAILURE_NO_ADVERTISE}
-     *                                and {@link SSL#SSL_SELECTOR_FAILURE_CHOOSE_MY_LAST_PROTOCOL}
+     *
+     * @param ctx                     Server context to use.
+     * @param nextProtos              protocols in priority order
+     * @param selectorFailureBehavior see {@link SSL#SSL_SELECTOR_FAILURE_NO_ADVERTISE} and
+     *                                    {@link SSL#SSL_SELECTOR_FAILURE_CHOOSE_MY_LAST_PROTOCOL}
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1.x
      */
@@ -536,79 +640,85 @@
 
     /**
      * Set application layer protocol for application layer protocol negotiation extension
-     * @param ctx Server context to use.
-     * @param alpnProtos protocols in priority order
-     * @param selectorFailureBehavior see {@link SSL#SSL_SELECTOR_FAILURE_NO_ADVERTISE}
-     *                                and {@link SSL#SSL_SELECTOR_FAILURE_CHOOSE_MY_LAST_PROTOCOL}
+     *
+     * @param ctx                     Server context to use.
+     * @param alpnProtos              protocols in priority order
+     * @param selectorFailureBehavior see {@link SSL#SSL_SELECTOR_FAILURE_NO_ADVERTISE} and
+     *                                    {@link SSL#SSL_SELECTOR_FAILURE_CHOOSE_MY_LAST_PROTOCOL}
      */
     public static native void setAlpnProtos(long ctx, String[] alpnProtos, int selectorFailureBehavior);
 
     /**
      * Set DH parameters
-     * @param ctx Server context to use.
-     * @param cert DH param file (can be generated from e.g. {@code openssl dhparam -rand - 2048 > dhparam.pem} -
-     *             see the <a href="https://www.openssl.org/docs/apps/dhparam.html">OpenSSL documentation</a>).
+     *
+     * @param ctx  Server context to use.
+     * @param cert DH param file (can be generated from e.g. {@code openssl dhparam -rand - 2048 > dhparam.pem} - see
+     *                 the <a href="https://www.openssl.org/docs/apps/dhparam.html">OpenSSL documentation</a>).
+     *
      * @throws Exception An error occurred
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
     @Deprecated
-    public static native void setTmpDH(long ctx, String cert)
-            throws Exception;
+    public static native void setTmpDH(long ctx, String cert) throws Exception;
 
     /**
      * Set ECDH elliptic curve by name
-     * @param ctx Server context to use.
-     * @param curveName the name of the elliptic curve to use
-     *             (available names can be obtained from {@code openssl ecparam -list_curves}).
+     *
+     * @param ctx       Server context to use.
+     * @param curveName the name of the elliptic curve to use (available names can be obtained from
+     *                      {@code openssl ecparam -list_curves}).
+     *
      * @throws Exception An error occurred
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
     @Deprecated
-    public static native void setTmpECDHByCurveName(long ctx, String curveName)
-            throws Exception;
+    public static native void setTmpECDHByCurveName(long ctx, String curveName) throws Exception;
 
     /**
      * Set the context within which session be reused (server side only)
      * http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html
      *
-     * @param ctx Server context to use.
-     * @param sidCtx can be any kind of binary data, it is therefore possible to use e.g. the name
-     *               of the application and/or the hostname and/or service name
+     * @param ctx    Server context to use.
+     * @param sidCtx can be any kind of binary data, it is therefore possible to use e.g. the name of the application
+     *                   and/or the hostname and/or service name
+     *
      * @return {@code true} if success, {@code false} otherwise.
      */
     public static native boolean setSessionIdContext(long ctx, byte[] sidCtx);
 
     /**
-     * Set CertificateRaw
-     * <br>
+     * Set CertificateRaw <br>
      * Use keystore a certificate and key to fill the BIOP
-     * @param ctx Server or Client context to use.
-     * @param cert Byte array with the certificate in DER encoding.
-     * @param key Byte array with the Private Key file in PEM format.
+     *
+     * @param ctx        Server or Client context to use.
+     * @param cert       Byte array with the certificate in DER encoding.
+     * @param key        Byte array with the Private Key file in PEM format.
      * @param sslAidxRsa Certificate index SSL_AIDX_RSA or SSL_AIDX_DSA.
+     *
      * @return {@code true} if success, {@code false} otherwise.
      */
     public static native boolean setCertificateRaw(long ctx, byte[] cert, byte[] key, int sslAidxRsa);
 
     /**
-     * Add a certificate to the certificate chain. Certs should be added in
-     * order starting with the issuer of the host certs and working up the
-     * certificate chain to the CA.
-     *
-     * <br>
+     * Add a certificate to the certificate chain. Certs should be added in order starting with the issuer of the host
+     * certs and working up the certificate chain to the CA. <br>
      * Use keystore a certificate chain to fill the BIOP
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx  Server or Client context to use.
      * @param cert Byte array with the certificate in DER encoding.
+     *
      * @return {@code true} if success, {@code false} otherwise.
      */
     public static native boolean addChainCertificateRaw(long ctx, byte[] cert);
 
     /**
      * Add a CA certificate we accept as issuer for peer certs
-     * @param ctx Server or Client context to use.
+     *
+     * @param ctx  Server or Client context to use.
      * @param cert Byte array with the certificate in DER encoding.
+     *
      * @return {@code true} if success, {@code false} otherwise.
      */
     public static native boolean addClientCACertificateRaw(long ctx, byte[] cert);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSL.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSL.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSL.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSL.java	2026-06-11 17:01:29.000000000 -0300
@@ -16,66 +16,175 @@
  */
 package org.apache.tomcat.jni;
 
+/**
+ * JNI bindings for OpenSSL SSL functionality.
+ */
 public final class SSL {
 
+    /**
+     * Private constructor to prevent instantiation.
+     */
+    private SSL() {
+    }
+
     /*
      * Type definitions mostly from mod_ssl
      */
-    public static final int UNSET            = -1;
+    /**
+     * Unset value.
+     */
+    public static final int UNSET = -1;
     /*
      * Define the certificate algorithm types
      */
+    /**
+     * Unknown algorithm type.
+     */
     public static final int SSL_ALGO_UNKNOWN = 0;
-    public static final int SSL_ALGO_RSA     = (1<<0);
-    public static final int SSL_ALGO_DSA     = (1<<1);
-    public static final int SSL_ALGO_ALL     = (SSL_ALGO_RSA|SSL_ALGO_DSA);
-
-    public static final int SSL_AIDX_RSA     = 0;
-    public static final int SSL_AIDX_DSA     = 1;
-    public static final int SSL_AIDX_ECC     = 3;
-    public static final int SSL_AIDX_MAX     = 4;
+    /**
+     * RSA algorithm type.
+     */
+    public static final int SSL_ALGO_RSA = (1 << 0);
+    /**
+     * DSA algorithm type.
+     */
+    public static final int SSL_ALGO_DSA = (1 << 1);
+    /**
+     * All algorithm types.
+     */
+    public static final int SSL_ALGO_ALL = (SSL_ALGO_RSA | SSL_ALGO_DSA);
+
+    /**
+     * RSA algorithm index.
+     */
+    public static final int SSL_AIDX_RSA = 0;
+    /**
+     * DSA algorithm index.
+     */
+    public static final int SSL_AIDX_DSA = 1;
+    /**
+     * ECC algorithm index.
+     */
+    public static final int SSL_AIDX_ECC = 3;
+    /**
+     * Maximum algorithm index.
+     */
+    public static final int SSL_AIDX_MAX = 4;
     /*
      * Define IDs for the temporary RSA keys and DH params
      */
 
-    public static final int SSL_TMP_KEY_RSA_512  = 0;
+    /**
+     * 512-bit temporary RSA key.
+     */
+    public static final int SSL_TMP_KEY_RSA_512 = 0;
+    /**
+     * 1024-bit temporary RSA key.
+     */
     public static final int SSL_TMP_KEY_RSA_1024 = 1;
+    /**
+     * 2048-bit temporary RSA key.
+     */
     public static final int SSL_TMP_KEY_RSA_2048 = 2;
+    /**
+     * 4096-bit temporary RSA key.
+     */
     public static final int SSL_TMP_KEY_RSA_4096 = 3;
-    public static final int SSL_TMP_KEY_DH_512   = 4;
-    public static final int SSL_TMP_KEY_DH_1024  = 5;
-    public static final int SSL_TMP_KEY_DH_2048  = 6;
-    public static final int SSL_TMP_KEY_DH_4096  = 7;
-    public static final int SSL_TMP_KEY_MAX      = 8;
+    /**
+     * 512-bit temporary DH key.
+     */
+    public static final int SSL_TMP_KEY_DH_512 = 4;
+    /**
+     * 1024-bit temporary DH key.
+     */
+    public static final int SSL_TMP_KEY_DH_1024 = 5;
+    /**
+     * 2048-bit temporary DH key.
+     */
+    public static final int SSL_TMP_KEY_DH_2048 = 6;
+    /**
+     * 4096-bit temporary DH key.
+     */
+    public static final int SSL_TMP_KEY_DH_4096 = 7;
+    /**
+     * Maximum temporary key ID.
+     */
+    public static final int SSL_TMP_KEY_MAX = 8;
 
     /*
      * Define the SSL options
      */
-    public static final int SSL_OPT_NONE           = 0;
-    public static final int SSL_OPT_RELSET         = (1<<0);
-    public static final int SSL_OPT_STDENVVARS     = (1<<1);
-    public static final int SSL_OPT_EXPORTCERTDATA = (1<<3);
-    public static final int SSL_OPT_FAKEBASICAUTH  = (1<<4);
-    public static final int SSL_OPT_STRICTREQUIRE  = (1<<5);
-    public static final int SSL_OPT_OPTRENEGOTIATE = (1<<6);
-    public static final int SSL_OPT_ALL            = (SSL_OPT_STDENVVARS|SSL_OPT_EXPORTCERTDATA|SSL_OPT_FAKEBASICAUTH|SSL_OPT_STRICTREQUIRE|SSL_OPT_OPTRENEGOTIATE);
+    /**
+     * No SSL options.
+     */
+    public static final int SSL_OPT_NONE = 0;
+    /**
+     * SSL option for relative settings.
+     */
+    public static final int SSL_OPT_RELSET = (1 << 0);
+    /**
+     * SSL option for standard environment variables.
+     */
+    public static final int SSL_OPT_STDENVVARS = (1 << 1);
+    /**
+     * SSL option for exporting certificate data.
+     */
+    public static final int SSL_OPT_EXPORTCERTDATA = (1 << 3);
+    /**
+     * SSL option for fake basic authentication.
+     */
+    public static final int SSL_OPT_FAKEBASICAUTH = (1 << 4);
+    /**
+     * SSL option for strict require.
+     */
+    public static final int SSL_OPT_STRICTREQUIRE = (1 << 5);
+    /**
+     * SSL option for optional renegotiation.
+     */
+    public static final int SSL_OPT_OPTRENEGOTIATE = (1 << 6);
+    /**
+     * All SSL options combined.
+     */
+    public static final int SSL_OPT_ALL = (SSL_OPT_STDENVVARS | SSL_OPT_EXPORTCERTDATA | SSL_OPT_FAKEBASICAUTH |
+            SSL_OPT_STRICTREQUIRE | SSL_OPT_OPTRENEGOTIATE);
 
     /*
      * Define the SSL Protocol options
      */
-    public static final int SSL_PROTOCOL_NONE  = 0;
-    public static final int SSL_PROTOCOL_SSLV2 = (1<<0);
-    public static final int SSL_PROTOCOL_SSLV3 = (1<<1);
-    public static final int SSL_PROTOCOL_TLSV1 = (1<<2);
-    public static final int SSL_PROTOCOL_TLSV1_1 = (1<<3);
-    public static final int SSL_PROTOCOL_TLSV1_2 = (1<<4);
-    public static final int SSL_PROTOCOL_TLSV1_3 = (1<<5);
+    /**
+     * No protocol options.
+     */
+    public static final int SSL_PROTOCOL_NONE = 0;
+    /**
+     * SSLv2 protocol.
+     */
+    public static final int SSL_PROTOCOL_SSLV2 = (1 << 0);
+    /**
+     * SSLv3 protocol.
+     */
+    public static final int SSL_PROTOCOL_SSLV3 = (1 << 1);
+    /**
+     * TLSv1.0 protocol.
+     */
+    public static final int SSL_PROTOCOL_TLSV1 = (1 << 2);
+    /**
+     * TLSv1.1 protocol.
+     */
+    public static final int SSL_PROTOCOL_TLSV1_1 = (1 << 3);
+    /**
+     * TLSv1.2 protocol.
+     */
+    public static final int SSL_PROTOCOL_TLSV1_2 = (1 << 4);
+    /**
+     * TLSv1.3 protocol.
+     */
+    public static final int SSL_PROTOCOL_TLSV1_3 = (1 << 5);
     public static final int SSL_PROTOCOL_ALL;
 
     static {
         if (version() >= 0x1010100f) {
-            SSL_PROTOCOL_ALL = (SSL_PROTOCOL_TLSV1 | SSL_PROTOCOL_TLSV1_1 | SSL_PROTOCOL_TLSV1_2 |
-                    SSL_PROTOCOL_TLSV1_3);
+            SSL_PROTOCOL_ALL =
+                    (SSL_PROTOCOL_TLSV1 | SSL_PROTOCOL_TLSV1_1 | SSL_PROTOCOL_TLSV1_2 | SSL_PROTOCOL_TLSV1_3);
         } else {
             SSL_PROTOCOL_ALL = (SSL_PROTOCOL_TLSV1 | SSL_PROTOCOL_TLSV1_1 | SSL_PROTOCOL_TLSV1_2);
         }
@@ -85,70 +194,180 @@
     /*
      * Define the SSL verify levels
      */
-    public static final int SSL_CVERIFY_UNSET          = UNSET;
-    public static final int SSL_CVERIFY_NONE           = 0;
-    public static final int SSL_CVERIFY_OPTIONAL       = 1;
-    public static final int SSL_CVERIFY_REQUIRE        = 2;
+    /**
+     * Client verification unset.
+     */
+    public static final int SSL_CVERIFY_UNSET = UNSET;
+    /**
+     * No client certificate verification.
+     */
+    public static final int SSL_CVERIFY_NONE = 0;
+    /**
+     * Optional client certificate verification.
+     */
+    public static final int SSL_CVERIFY_OPTIONAL = 1;
+    /**
+     * Required client certificate verification.
+     */
+    public static final int SSL_CVERIFY_REQUIRE = 2;
+    /**
+     * Optional client certificate verification without CA requirement.
+     */
     public static final int SSL_CVERIFY_OPTIONAL_NO_CA = 3;
 
-    /* Use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options
-     * are 'ored' with SSL_VERIFY_PEER if they are desired
+    /*
+     * Use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are 'ored' with SSL_VERIFY_PEER if they are
+     * desired
+     */
+    /**
+     * No peer verification.
+     */
+    public static final int SSL_VERIFY_NONE = 0;
+    /**
+     * Verify peer certificate.
+     */
+    public static final int SSL_VERIFY_PEER = 1;
+    /**
+     * Fail if no peer certificate is presented.
      */
-    public static final int SSL_VERIFY_NONE                 = 0;
-    public static final int SSL_VERIFY_PEER                 = 1;
     public static final int SSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2;
-    public static final int SSL_VERIFY_CLIENT_ONCE          = 4;
-    public static final int SSL_VERIFY_PEER_STRICT          = (SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
+    /**
+     * Only verify client certificate once per session.
+     */
+    public static final int SSL_VERIFY_CLIENT_ONCE = 4;
+    /**
+     * Strict peer verification including certificate requirement.
+     */
+    public static final int SSL_VERIFY_PEER_STRICT = (SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
 
-    public static final int SSL_OP_MICROSOFT_SESS_ID_BUG            = 0x00000001;
-    public static final int SSL_OP_NETSCAPE_CHALLENGE_BUG           = 0x00000002;
+    /**
+     * Workaround for Microsoft session ID bug.
+     */
+    public static final int SSL_OP_MICROSOFT_SESS_ID_BUG = 0x00000001;
+    /**
+     * Workaround for Netscape challenge bug.
+     */
+    public static final int SSL_OP_NETSCAPE_CHALLENGE_BUG = 0x00000002;
+    /**
+     * Workaround for Netscape cipher change bug.
+     */
     public static final int SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG = 0x00000008;
-    public static final int SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG      = 0x00000010;
-    public static final int SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER       = 0x00000020;
-    public static final int SSL_OP_MSIE_SSLV2_RSA_PADDING           = 0x00000040;
-    public static final int SSL_OP_SSLEAY_080_CLIENT_DH_BUG         = 0x00000080;
-    public static final int SSL_OP_TLS_D5_BUG                       = 0x00000100;
-    public static final int SSL_OP_TLS_BLOCK_PADDING_BUG            = 0x00000200;
-
-    /* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added
-     * in OpenSSL 0.9.6d.  Usually (depending on the application protocol)
-     * the workaround is not needed.  Unfortunately some broken SSL/TLS
-     * implementations cannot handle it at all, which is why we include
-     * it in SSL_OP_ALL. */
-    public static final int SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS      = 0x00000800;
-
-    /* SSL_OP_ALL: various bug workarounds that should be rather harmless.
-     *             This used to be 0x000FFFFFL before 0.9.7. */
-    public static final int SSL_OP_ALL                              = 0x00000FFF;
-    /* As server, disallow session resumption on renegotiation */
+    /**
+     * Workaround for SSLREF2 certificate type reuse bug.
+     */
+    public static final int SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 0x00000010;
+    /**
+     * Workaround for Microsoft SSLv3 buffer bug.
+     */
+    public static final int SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 0x00000020;
+    /**
+     * Workaround for MSIE SSLv2 RSA padding bug.
+     */
+    public static final int SSL_OP_MSIE_SSLV2_RSA_PADDING = 0x00000040;
+    /**
+     * Workaround for SSLeay 0.8.0 client DH bug.
+     */
+    public static final int SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 0x00000080;
+    /**
+     * Workaround for TLS D5 bug.
+     */
+    public static final int SSL_OP_TLS_D5_BUG = 0x00000100;
+    /**
+     * Workaround for TLS block padding bug.
+     */
+    public static final int SSL_OP_TLS_BLOCK_PADDING_BUG = 0x00000200;
+
+    /*
+     * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in OpenSSL 0.9.6d. Usually (depending on the
+     * application protocol) the workaround is not needed. Unfortunately some broken SSL/TLS implementations cannot
+     * handle it at all, which is why we include it in SSL_OP_ALL.
+     */
+    /**
+     * Disable empty fragment insertion for CBC vulnerability workaround.
+     */
+    public static final int SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 0x00000800;
+
+    /*
+     * SSL_OP_ALL: various bug workarounds that should be rather harmless. This used to be 0x000FFFFFL before 0.9.7.
+     */
+    /**
+     * All bug workaround options combined.
+     */
+    public static final int SSL_OP_ALL = 0x00000FFF;
+/* As server, disallow session resumption on renegotiation */
+    /**
+     * Disallow session resumption on renegotiation.
+     */
     public static final int SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION = 0x00010000;
     /* Don't use compression even if supported */
-    public static final int SSL_OP_NO_COMPRESSION                         = 0x00020000;
+    /**
+     * Disable compression.
+     */
+    public static final int SSL_OP_NO_COMPRESSION = 0x00020000;
     /* Permit unsafe legacy renegotiation */
-    public static final int SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION      = 0x00040000;
+    /**
+     * Allow unsafe legacy renegotiation.
+     */
+    public static final int SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION = 0x00040000;
     /* If set, always create a new key when using tmp_eddh parameters */
-    public static final int SSL_OP_SINGLE_ECDH_USE                  = 0x00080000;
+    /**
+     * Always create a new key when using ECDH parameters.
+     */
+    public static final int SSL_OP_SINGLE_ECDH_USE = 0x00080000;
     /* If set, always create a new key when using tmp_dh parameters */
-    public static final int SSL_OP_SINGLE_DH_USE                    = 0x00100000;
-    /* Set to always use the tmp_rsa key when doing RSA operations,
-     * even when this violates protocol specs */
-    public static final int SSL_OP_EPHEMERAL_RSA                    = 0x00200000;
-    /* Set on servers to choose the cipher according to the server's
-     * preferences */
-    public static final int SSL_OP_CIPHER_SERVER_PREFERENCE         = 0x00400000;
-    /* If set, a server will allow a client to issue an SSLv3.0 version number
-     * as latest version supported in the premaster secret, even when TLSv1.0
-     * (version 3.1) was announced in the client hello. Normally this is
-     * forbidden to prevent version rollback attacks. */
-    public static final int SSL_OP_TLS_ROLLBACK_BUG                 = 0x00800000;
-
-    public static final int SSL_OP_NO_SSLv2                         = 0x01000000;
-    public static final int SSL_OP_NO_SSLv3                         = 0x02000000;
-    public static final int SSL_OP_NO_TLSv1                         = 0x04000000;
-    public static final int SSL_OP_NO_TLSv1_2                       = 0x08000000;
-    public static final int SSL_OP_NO_TLSv1_1                       = 0x10000000;
+    /**
+     * Always create a new key when using DH parameters.
+     */
+    public static final int SSL_OP_SINGLE_DH_USE = 0x00100000;
+    /*
+     * Set to always use the tmp_rsa key when doing RSA operations, even when this violates protocol specs
+     */
+    /**
+     * Always use ephemeral RSA key for RSA operations.
+     */
+    public static final int SSL_OP_EPHEMERAL_RSA = 0x00200000;
+    /*
+     * Set on servers to choose the cipher according to the server's preferences
+     */
+    /**
+     * Server prefers its own cipher order.
+     */
+    public static final int SSL_OP_CIPHER_SERVER_PREFERENCE = 0x00400000;
+    /*
+     * If set, a server will allow a client to issue an SSLv3.0 version number as latest version supported in the
+     * premaster secret, even when TLSv1.0 (version 3.1) was announced in the client hello. Normally this is forbidden
+     * to prevent version rollback attacks.
+     */
+    /**
+     * Allow TLS rollback bug workaround.
+     */
+    public static final int SSL_OP_TLS_ROLLBACK_BUG = 0x00800000;
+
+    /**
+     * Disable SSLv2 protocol.
+     */
+    public static final int SSL_OP_NO_SSLv2 = 0x01000000;
+    /**
+     * Disable SSLv3 protocol.
+     */
+    public static final int SSL_OP_NO_SSLv3 = 0x02000000;
+    /**
+     * Disable TLSv1.0 protocol.
+     */
+    public static final int SSL_OP_NO_TLSv1 = 0x04000000;
+    /**
+     * Disable TLSv1.2 protocol.
+     */
+    public static final int SSL_OP_NO_TLSv1_2 = 0x08000000;
+    /**
+     * Disable TLSv1.1 protocol.
+     */
+    public static final int SSL_OP_NO_TLSv1_1 = 0x10000000;
 
-    public static final int SSL_OP_NO_TICKET                        = 0x00004000;
+    /**
+     * Disable TLS session tickets.
+     */
+    public static final int SSL_OP_NO_TICKET = 0x00004000;
 
     // SSL_OP_PKCS1_CHECK_1 and SSL_OP_PKCS1_CHECK_2 flags are unsupported
     // in the current version of OpenSSL library. See ssl.h changes in commit
@@ -157,116 +376,337 @@
      * @deprecated Unsupported in the current version of OpenSSL
      */
     @Deprecated
-    public static final int SSL_OP_PKCS1_CHECK_1                    = 0x08000000;
+    public static final int SSL_OP_PKCS1_CHECK_1 = 0x08000000;
     /**
      * @deprecated Unsupported in the current version of OpenSSL
      */
     @Deprecated
-    public static final int SSL_OP_PKCS1_CHECK_2                    = 0x10000000;
-    public static final int SSL_OP_NETSCAPE_CA_DN_BUG               = 0x20000000;
-    public static final int SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG  = 0x40000000;
-
-    public static final int SSL_CRT_FORMAT_UNDEF    = 0;
-    public static final int SSL_CRT_FORMAT_ASN1     = 1;
-    public static final int SSL_CRT_FORMAT_TEXT     = 2;
-    public static final int SSL_CRT_FORMAT_PEM      = 3;
+    public static final int SSL_OP_PKCS1_CHECK_2 = 0x10000000;
+    /**
+     * Workaround for Netscape CA DN bug.
+     */
+    public static final int SSL_OP_NETSCAPE_CA_DN_BUG = 0x20000000;
+    /**
+     * Workaround for Netscape demo cipher change bug.
+     */
+    public static final int SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 0x40000000;
+
+    /**
+     * Undefined certificate format.
+     */
+    public static final int SSL_CRT_FORMAT_UNDEF = 0;
+    /**
+     * ASN.1 certificate format.
+     */
+    public static final int SSL_CRT_FORMAT_ASN1 = 1;
+    /**
+     * Text certificate format.
+     */
+    public static final int SSL_CRT_FORMAT_TEXT = 2;
+    /**
+     * PEM certificate format.
+     */
+    public static final int SSL_CRT_FORMAT_PEM = 3;
+    /**
+     * Netscape certificate format.
+     */
     public static final int SSL_CRT_FORMAT_NETSCAPE = 4;
-    public static final int SSL_CRT_FORMAT_PKCS12   = 5;
-    public static final int SSL_CRT_FORMAT_SMIME    = 6;
-    public static final int SSL_CRT_FORMAT_ENGINE   = 7;
-
-    public static final int SSL_MODE_CLIENT         = 0;
-    public static final int SSL_MODE_SERVER         = 1;
-    public static final int SSL_MODE_COMBINED       = 2;
-
-    public static final int SSL_CONF_FLAG_CMDLINE       = 0x0001;
-    public static final int SSL_CONF_FLAG_FILE          = 0x0002;
-    public static final int SSL_CONF_FLAG_CLIENT        = 0x0004;
-    public static final int SSL_CONF_FLAG_SERVER        = 0x0008;
-    public static final int SSL_CONF_FLAG_SHOW_ERRORS   = 0x0010;
-    public static final int SSL_CONF_FLAG_CERTIFICATE   = 0x0020;
-
-    public static final int SSL_CONF_TYPE_UNKNOWN   = 0x0000;
-    public static final int SSL_CONF_TYPE_STRING    = 0x0001;
-    public static final int SSL_CONF_TYPE_FILE      = 0x0002;
-    public static final int SSL_CONF_TYPE_DIR       = 0x0003;
+    /**
+     * PKCS12 certificate format.
+     */
+    public static final int SSL_CRT_FORMAT_PKCS12 = 5;
+    /**
+     * S/MIME certificate format.
+     */
+    public static final int SSL_CRT_FORMAT_SMIME = 6;
+    /**
+     * Engine certificate format.
+     */
+    public static final int SSL_CRT_FORMAT_ENGINE = 7;
+
+    /**
+     * Client SSL mode.
+     */
+    public static final int SSL_MODE_CLIENT = 0;
+    /**
+     * Server SSL mode.
+     */
+    public static final int SSL_MODE_SERVER = 1;
+    /**
+     * Combined client and server SSL mode.
+     */
+    public static final int SSL_MODE_COMBINED = 2;
+
+    /**
+     * Configuration flag for command line.
+     */
+    public static final int SSL_CONF_FLAG_CMDLINE = 0x0001;
+    /**
+     * Configuration flag for file.
+     */
+    public static final int SSL_CONF_FLAG_FILE = 0x0002;
+    /**
+     * Configuration flag for client.
+     */
+    public static final int SSL_CONF_FLAG_CLIENT = 0x0004;
+    /**
+     * Configuration flag for server.
+     */
+    public static final int SSL_CONF_FLAG_SERVER = 0x0008;
+    /**
+     * Configuration flag to show errors.
+     */
+    public static final int SSL_CONF_FLAG_SHOW_ERRORS = 0x0010;
+    /**
+     * Configuration flag for certificate context.
+     */
+    public static final int SSL_CONF_FLAG_CERTIFICATE = 0x0020;
+
+    /**
+     * Unknown configuration type.
+     */
+    public static final int SSL_CONF_TYPE_UNKNOWN = 0x0000;
+    /**
+     * String configuration type.
+     */
+    public static final int SSL_CONF_TYPE_STRING = 0x0001;
+    /**
+     * File configuration type.
+     */
+    public static final int SSL_CONF_TYPE_FILE = 0x0002;
+    /**
+     * Directory configuration type.
+     */
+    public static final int SSL_CONF_TYPE_DIR = 0x0003;
 
-    public static final int SSL_SHUTDOWN_TYPE_UNSET    = 0;
+    /**
+     * Shutdown type unset.
+     */
+    public static final int SSL_SHUTDOWN_TYPE_UNSET = 0;
+    /**
+     * Standard shutdown type.
+     */
     public static final int SSL_SHUTDOWN_TYPE_STANDARD = 1;
-    public static final int SSL_SHUTDOWN_TYPE_UNCLEAN  = 2;
+    /**
+     * Unclean shutdown type.
+     */
+    public static final int SSL_SHUTDOWN_TYPE_UNCLEAN = 2;
+    /**
+     * Accurate shutdown type.
+     */
     public static final int SSL_SHUTDOWN_TYPE_ACCURATE = 3;
 
-    public static final int SSL_INFO_SESSION_ID                = 0x0001;
-    public static final int SSL_INFO_CIPHER                    = 0x0002;
-    public static final int SSL_INFO_CIPHER_USEKEYSIZE         = 0x0003;
-    public static final int SSL_INFO_CIPHER_ALGKEYSIZE         = 0x0004;
-    public static final int SSL_INFO_CIPHER_VERSION            = 0x0005;
-    public static final int SSL_INFO_CIPHER_DESCRIPTION        = 0x0006;
-    public static final int SSL_INFO_PROTOCOL                  = 0x0007;
-
-    /* To obtain the CountryName of the Client Certificate Issuer
-     * use the SSL_INFO_CLIENT_I_DN + SSL_INFO_DN_COUNTRYNAME
-     */
-    public static final int SSL_INFO_CLIENT_S_DN               = 0x0010;
-    public static final int SSL_INFO_CLIENT_I_DN               = 0x0020;
-    public static final int SSL_INFO_SERVER_S_DN               = 0x0040;
-    public static final int SSL_INFO_SERVER_I_DN               = 0x0080;
-
-    public static final int SSL_INFO_DN_COUNTRYNAME            = 0x0001;
-    public static final int SSL_INFO_DN_STATEORPROVINCENAME    = 0x0002;
-    public static final int SSL_INFO_DN_LOCALITYNAME           = 0x0003;
-    public static final int SSL_INFO_DN_ORGANIZATIONNAME       = 0x0004;
+    /**
+     * Info flag for session ID.
+     */
+    public static final int SSL_INFO_SESSION_ID = 0x0001;
+    /**
+     * Info flag for cipher name.
+     */
+    public static final int SSL_INFO_CIPHER = 0x0002;
+    /**
+     * Info flag for cipher effective key size.
+     */
+    public static final int SSL_INFO_CIPHER_USEKEYSIZE = 0x0003;
+    /**
+     * Info flag for cipher algorithm key size.
+     */
+    public static final int SSL_INFO_CIPHER_ALGKEYSIZE = 0x0004;
+    /**
+     * Info flag for cipher version.
+     */
+    public static final int SSL_INFO_CIPHER_VERSION = 0x0005;
+    /**
+     * Info flag for cipher description.
+     */
+    public static final int SSL_INFO_CIPHER_DESCRIPTION = 0x0006;
+    /**
+     * Info flag for protocol version.
+     */
+    public static final int SSL_INFO_PROTOCOL = 0x0007;
+
+    /*
+     * To obtain the CountryName of the Client Certificate Issuer use the SSL_INFO_CLIENT_I_DN + SSL_INFO_DN_COUNTRYNAME
+     */
+    /**
+     * Info flag for client subject distinguished name.
+     */
+    public static final int SSL_INFO_CLIENT_S_DN = 0x0010;
+    /**
+     * Info flag for client issuer distinguished name.
+     */
+    public static final int SSL_INFO_CLIENT_I_DN = 0x0020;
+    /**
+     * Info flag for server subject distinguished name.
+     */
+    public static final int SSL_INFO_SERVER_S_DN = 0x0040;
+    /**
+     * Info flag for server issuer distinguished name.
+     */
+    public static final int SSL_INFO_SERVER_I_DN = 0x0080;
+
+    /**
+     * DN field for country name.
+     */
+    public static final int SSL_INFO_DN_COUNTRYNAME = 0x0001;
+    /**
+     * DN field for state or province name.
+     */
+    public static final int SSL_INFO_DN_STATEORPROVINCENAME = 0x0002;
+    /**
+     * DN field for locality name.
+     */
+    public static final int SSL_INFO_DN_LOCALITYNAME = 0x0003;
+    /**
+     * DN field for organization name.
+     */
+    public static final int SSL_INFO_DN_ORGANIZATIONNAME = 0x0004;
+    /**
+     * DN field for organizational unit name.
+     */
     public static final int SSL_INFO_DN_ORGANIZATIONALUNITNAME = 0x0005;
-    public static final int SSL_INFO_DN_COMMONNAME             = 0x0006;
-    public static final int SSL_INFO_DN_TITLE                  = 0x0007;
-    public static final int SSL_INFO_DN_INITIALS               = 0x0008;
-    public static final int SSL_INFO_DN_GIVENNAME              = 0x0009;
-    public static final int SSL_INFO_DN_SURNAME                = 0x000A;
-    public static final int SSL_INFO_DN_DESCRIPTION            = 0x000B;
-    public static final int SSL_INFO_DN_UNIQUEIDENTIFIER       = 0x000C;
-    public static final int SSL_INFO_DN_EMAILADDRESS           = 0x000D;
-
-    public static final int SSL_INFO_CLIENT_M_VERSION          = 0x0101;
-    public static final int SSL_INFO_CLIENT_M_SERIAL           = 0x0102;
-    public static final int SSL_INFO_CLIENT_V_START            = 0x0103;
-    public static final int SSL_INFO_CLIENT_V_END              = 0x0104;
-    public static final int SSL_INFO_CLIENT_A_SIG              = 0x0105;
-    public static final int SSL_INFO_CLIENT_A_KEY              = 0x0106;
-    public static final int SSL_INFO_CLIENT_CERT               = 0x0107;
-    public static final int SSL_INFO_CLIENT_V_REMAIN           = 0x0108;
-
-    public static final int SSL_INFO_SERVER_M_VERSION          = 0x0201;
-    public static final int SSL_INFO_SERVER_M_SERIAL           = 0x0202;
-    public static final int SSL_INFO_SERVER_V_START            = 0x0203;
-    public static final int SSL_INFO_SERVER_V_END              = 0x0204;
-    public static final int SSL_INFO_SERVER_A_SIG              = 0x0205;
-    public static final int SSL_INFO_SERVER_A_KEY              = 0x0206;
-    public static final int SSL_INFO_SERVER_CERT               = 0x0207;
-    /* Return client certificate chain.
-     * Add certificate chain number to that flag (0 ... verify depth)
+    /**
+     * DN field for common name.
+     */
+    public static final int SSL_INFO_DN_COMMONNAME = 0x0006;
+    /**
+     * DN field for title.
+     */
+    public static final int SSL_INFO_DN_TITLE = 0x0007;
+    /**
+     * DN field for initials.
+     */
+    public static final int SSL_INFO_DN_INITIALS = 0x0008;
+    /**
+     * DN field for given name.
+     */
+    public static final int SSL_INFO_DN_GIVENNAME = 0x0009;
+    /**
+     * DN field for surname.
+     */
+    public static final int SSL_INFO_DN_SURNAME = 0x000A;
+    /**
+     * DN field for description.
+     */
+    public static final int SSL_INFO_DN_DESCRIPTION = 0x000B;
+    /**
+     * DN field for unique identifier.
+     */
+    public static final int SSL_INFO_DN_UNIQUEIDENTIFIER = 0x000C;
+    /**
+     * DN field for email address.
+     */
+    public static final int SSL_INFO_DN_EMAILADDRESS = 0x000D;
+
+    /**
+     * Info flag for client certificate version.
+     */
+    public static final int SSL_INFO_CLIENT_M_VERSION = 0x0101;
+    /**
+     * Info flag for client certificate serial number.
+     */
+    public static final int SSL_INFO_CLIENT_M_SERIAL = 0x0102;
+    /**
+     * Info flag for client certificate validity start.
+     */
+    public static final int SSL_INFO_CLIENT_V_START = 0x0103;
+    /**
+     * Info flag for client certificate validity end.
+     */
+    public static final int SSL_INFO_CLIENT_V_END = 0x0104;
+    /**
+     * Info flag for client certificate signature algorithm.
+     */
+    public static final int SSL_INFO_CLIENT_A_SIG = 0x0105;
+    /**
+     * Info flag for client certificate public key algorithm.
+     */
+    public static final int SSL_INFO_CLIENT_A_KEY = 0x0106;
+    /**
+     * Info flag for client certificate data.
      */
-    public static final int SSL_INFO_CLIENT_CERT_CHAIN         = 0x0400;
+    public static final int SSL_INFO_CLIENT_CERT = 0x0107;
+    /**
+     * Info flag for client certificate validity remaining.
+     */
+    public static final int SSL_INFO_CLIENT_V_REMAIN = 0x0108;
+
+    /**
+     * Info flag for server certificate version.
+     */
+    public static final int SSL_INFO_SERVER_M_VERSION = 0x0201;
+    /**
+     * Info flag for server certificate serial number.
+     */
+    public static final int SSL_INFO_SERVER_M_SERIAL = 0x0202;
+    /**
+     * Info flag for server certificate validity start.
+     */
+    public static final int SSL_INFO_SERVER_V_START = 0x0203;
+    /**
+     * Info flag for server certificate validity end.
+     */
+    public static final int SSL_INFO_SERVER_V_END = 0x0204;
+    /**
+     * Info flag for server certificate signature algorithm.
+     */
+    public static final int SSL_INFO_SERVER_A_SIG = 0x0205;
+    /**
+     * Info flag for server certificate public key algorithm.
+     */
+    public static final int SSL_INFO_SERVER_A_KEY = 0x0206;
+    /**
+     * Info flag for server certificate data.
+     */
+    public static final int SSL_INFO_SERVER_CERT = 0x0207;
+    /*
+     * Return client certificate chain. Add certificate chain number to that flag (0 ... verify depth)
+     */
+    /**
+     * Info flag for client certificate chain.
+     */
+    public static final int SSL_INFO_CLIENT_CERT_CHAIN = 0x0400;
 
     /* Only support OFF and SERVER for now */
+    /**
+     * Session cache disabled.
+     */
     public static final long SSL_SESS_CACHE_OFF = 0x0000;
+    /**
+     * Session cache enabled for server.
+     */
     public static final long SSL_SESS_CACHE_SERVER = 0x0002;
 
+    /**
+     * Do not advertise protocol on selector failure.
+     */
     public static final int SSL_SELECTOR_FAILURE_NO_ADVERTISE = 0;
+    /**
+     * Choose last protocol on selector failure.
+     */
     public static final int SSL_SELECTOR_FAILURE_CHOOSE_MY_LAST_PROTOCOL = 1;
 
-    /* Return OpenSSL version number (compile time version, if version < 1.1.0) */
+    /**
+     * Return OpenSSL version number (compile time version, if version < 1.1.0).
+     *
+     * @return OpenSSL version number
+     */
     public static native int version();
 
-    /* Return OpenSSL version string (run time version) */
+    /**
+     * Return OpenSSL version string (run time version).
+     *
+     * @return OpenSSL version string
+     */
     public static native String versionString();
 
     /**
-     * Initialize OpenSSL support.
-     * This function needs to be called once for the
-     * lifetime of JVM. Library.init() has to be called before.
-     * @param engine Support for external a Crypto Device ("engine"),
-     *                usually
-     * a hardware accelerator card for crypto operations.
+     * Initialize OpenSSL support. This function needs to be called once for the lifetime of JVM. Library.init() has to
+     * be called before.
+     *
+     * @param engine Support for external a Crypto Device ("engine"), usually a hardware accelerator card for crypto
+     *                   operations.
+     *
      * @return APR status code
      */
     public static native int initialize(String engine);
@@ -274,9 +714,11 @@
     /**
      * Get the status of FIPS Mode.
      *
-     * @return FIPS_mode return code. It is <code>0</code> if OpenSSL is not
-     *  in FIPS mode, <code>1</code> if OpenSSL is in FIPS Mode.
+     * @return FIPS_mode return code. It is <code>0</code> if OpenSSL is not in FIPS mode, <code>1</code> if OpenSSL is
+     *             in FIPS Mode.
+     *
      * @throws Exception If tcnative was not compiled with FIPS Mode available.
+     *
      * @see <a href="http://wiki.openssl.org/index.php/FIPS_mode%28%29">OpenSSL method FIPS_mode()</a>
      */
     public static native int fipsModeGet() throws Exception;
@@ -287,20 +729,21 @@
      * @param mode 1 - enable, 0 - disable
      *
      * @return FIPS_mode_set return code
-     * @throws Exception If tcnative was not compiled with FIPS Mode available,
-     *  or if {@code FIPS_mode_set()} call returned an error value.
+     *
+     * @throws Exception If tcnative was not compiled with FIPS Mode available, or if {@code FIPS_mode_set()} call
+     *                       returned an error value.
+     *
      * @see <a href="http://wiki.openssl.org/index.php/FIPS_mode_set%28%29">OpenSSL method FIPS_mode_set()</a>
      */
     public static native int fipsModeSet(int mode) throws Exception;
 
     /**
      * Add content of the file to the PRNG
-     * @param filename Filename containing random data.
-     *        If null the default file will be tested.
-     *        The seed file is $RANDFILE if that environment variable is
-     *        set, $HOME/.rnd otherwise.
-     *        In case both files are unavailable builtin
-     *        random seed generator is used.
+     *
+     * @param filename Filename containing random data. If null the default file will be tested. The seed file is
+     *                     $RANDFILE if that environment variable is set, $HOME/.rnd otherwise. In case both files are
+     *                     unavailable builtin random seed generator is used.
+     *
      * @return <code>true</code> if the operation was successful
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -309,10 +752,11 @@
     public static native boolean randLoad(String filename);
 
     /**
-     * Writes a number of random bytes (currently 1024) to
-     * file <code>filename</code> which can be used to initialize the PRNG
-     * by calling randLoad in a later session.
+     * Writes a number of random bytes (currently 1024) to file <code>filename</code> which can be used to initialize
+     * the PRNG by calling randLoad in a later session.
+     *
      * @param filename Filename to save the data
+     *
      * @return <code>true</code> if the operation was successful
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -322,42 +766,46 @@
 
     /**
      * Creates random data to filename
+     *
      * @param filename Filename to save the data
-     * @param len The length of random sequence in bytes
-     * @param base64 Output the data in Base64 encoded format
+     * @param len      The length of random sequence in bytes
+     * @param base64   Output the data in Base64 encoded format
+     *
      * @return <code>true</code> if the operation was successful
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
     @Deprecated
-    public static native boolean randMake(String filename, int len,
-                                          boolean base64);
+    public static native boolean randMake(String filename, int len, boolean base64);
 
     /**
      * Sets global random filename.
      *
-     * @param filename Filename to use.
-     *        If set it will be used for SSL initialization
-     *        and all contexts where explicitly not set.
+     * @param filename Filename to use. If set it will be used for SSL initialization and all contexts where explicitly
+     *                     not set.
      */
     public static native void randSet(String filename);
 
     /**
      * Initialize new BIO
-     * @param pool The pool to use.
+     *
+     * @param pool     The pool to use.
      * @param callback BIOCallback to use
+     *
      * @return New BIO handle
+     *
      * @throws Exception An error occurred
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
      */
     @Deprecated
-    public static native long newBIO(long pool, BIOCallback callback)
-            throws Exception;
+    public static native long newBIO(long pool, BIOCallback callback) throws Exception;
 
     /**
      * Close BIO and dereference callback object
+     *
      * @param bio BIO to close and destroy.
+     *
      * @return APR Status code
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -367,6 +815,7 @@
 
     /**
      * Set global Password callback for obtaining passwords.
+     *
      * @param callback PasswordCallback implementation to use.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -376,6 +825,7 @@
 
     /**
      * Set global Password for decrypting certificates and keys.
+     *
      * @param password Password to use.
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -385,6 +835,7 @@
 
     /**
      * Return last SSL error string
+     *
      * @return the error string
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -393,12 +844,9 @@
     public static native String getLastError();
 
     /**
-     * Return true if all the requested SSL_OP_* are supported by OpenSSL.
-     *
-     * <i>Note that for versions of tcnative < 1.1.25, this method will
-     * return <code>true</code> if and only if <code>op</code>=
-     * {@link #SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION} and tcnative
-     * supports that flag.</i>
+     * Return true if all the requested SSL_OP_* are supported by OpenSSL. <i>Note that for versions of tcnative <
+     * 1.1.25, this method will return <code>true</code> if and only if <code>op</code>=
+     * {@link #SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION} and tcnative supports that flag.</i>
      *
      * @param op Bitwise-OR of all SSL_OP_* to test.
      *
@@ -411,7 +859,9 @@
 
     /**
      * Return the handshake completed count.
+     *
      * @param ssl SSL pointer
+     *
      * @return the count
      */
     public static native int getHandshakeCount(long ssl);
@@ -420,31 +870,67 @@
      * Begin Twitter API additions
      */
 
+    /**
+     * Shutdown has been sent.
+     */
     public static final int SSL_SENT_SHUTDOWN = 1;
+    /**
+     * Shutdown has been received.
+     */
     public static final int SSL_RECEIVED_SHUTDOWN = 2;
 
-    public static final int SSL_ERROR_NONE             = 0;
-    public static final int SSL_ERROR_SSL              = 1;
-    public static final int SSL_ERROR_WANT_READ        = 2;
-    public static final int SSL_ERROR_WANT_WRITE       = 3;
+    /**
+     * No SSL error.
+     */
+    public static final int SSL_ERROR_NONE = 0;
+    /**
+     * SSL library error.
+     */
+    public static final int SSL_ERROR_SSL = 1;
+    /**
+     * SSL operation would block reading.
+     */
+    public static final int SSL_ERROR_WANT_READ = 2;
+    /**
+     * SSL operation would block writing.
+     */
+    public static final int SSL_ERROR_WANT_WRITE = 3;
+    /**
+     * SSL operation wants X.509 lookup.
+     */
     public static final int SSL_ERROR_WANT_X509_LOOKUP = 4;
-    public static final int SSL_ERROR_SYSCALL          = 5; /* look at error stack/return value/errno */
-    public static final int SSL_ERROR_ZERO_RETURN      = 6;
-    public static final int SSL_ERROR_WANT_CONNECT     = 7;
-    public static final int SSL_ERROR_WANT_ACCEPT      = 8;
+    /**
+     * SSL syscall error.
+     */
+    public static final int SSL_ERROR_SYSCALL = 5; /* look at error stack/return value/errno */
+    /**
+     * SSL connection closed cleanly (zero return).
+     */
+    public static final int SSL_ERROR_ZERO_RETURN = 6;
+    /**
+     * SSL operation wants connect.
+     */
+    public static final int SSL_ERROR_WANT_CONNECT = 7;
+    /**
+     * SSL operation wants accept.
+     */
+    public static final int SSL_ERROR_WANT_ACCEPT = 8;
 
     /**
      * SSL_new
-     * @param ctx Server or Client context to use.
-     * @param server if true configure SSL instance to use accept handshake routines
-     *               if false configure SSL instance to use connect handshake routines
+     *
+     * @param ctx    Server or Client context to use.
+     * @param server if true configure SSL instance to use accept handshake routines if false configure SSL instance to
+     *                   use connect handshake routines
+     *
      * @return pointer to SSL instance (SSL *)
      */
     public static native long newSSL(long ctx, boolean server);
 
     /**
      * SSL_set_bio
-     * @param ssl SSL pointer (SSL *)
+     *
+     * @param ssl  SSL pointer (SSL *)
      * @param rbio read BIO pointer (BIO *)
      * @param wbio write BIO pointer (BIO *)
      *
@@ -455,8 +941,10 @@
 
     /**
      * SSL_get_error
+     *
      * @param ssl SSL pointer (SSL *)
      * @param ret TLS/SSL I/O return value
+     *
      * @return the error status
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -466,64 +954,79 @@
 
     /**
      * BIO_ctrl_pending.
+     *
      * @param bio BIO pointer (BIO *)
+     *
      * @return the pending bytes count
      */
     public static native int pendingWrittenBytesInBIO(long bio);
 
     /**
      * SSL_pending.
+     *
      * @param ssl SSL pointer (SSL *)
+     *
      * @return the pending bytes count
      */
     public static native int pendingReadableBytesInSSL(long ssl);
 
     /**
      * BIO_write.
-     * @param bio BIO pointer
+     *
+     * @param bio  BIO pointer
      * @param wbuf Buffer pointer
      * @param wlen Write length
+     *
      * @return the bytes count written
      */
     public static native int writeToBIO(long bio, long wbuf, int wlen);
 
     /**
      * BIO_read.
-     * @param bio BIO pointer
+     *
+     * @param bio  BIO pointer
      * @param rbuf Buffer pointer
      * @param rlen Read length
+     *
      * @return the bytes count read
      */
     public static native int readFromBIO(long bio, long rbuf, int rlen);
 
     /**
      * SSL_write.
-     * @param ssl the SSL instance (SSL *)
+     *
+     * @param ssl  the SSL instance (SSL *)
      * @param wbuf Buffer pointer
      * @param wlen Write length
+     *
      * @return the bytes count written
      */
     public static native int writeToSSL(long ssl, long wbuf, int wlen);
 
     /**
      * SSL_read
-     * @param ssl the SSL instance (SSL *)
+     *
+     * @param ssl  the SSL instance (SSL *)
      * @param rbuf Buffer pointer
      * @param rlen Read length
+     *
      * @return the bytes count read
      */
     public static native int readFromSSL(long ssl, long rbuf, int rlen);
 
     /**
      * SSL_get_shutdown
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the operation status
      */
     public static native int getShutdown(long ssl);
 
     /**
      * SSL_set_shutdown
-     * @param ssl the SSL instance (SSL *)
+     *
+     * @param ssl  the SSL instance (SSL *)
      * @param mode Shutdown mode
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1
@@ -533,102 +1036,127 @@
 
     /**
      * SSL_free
+     *
      * @param ssl the SSL instance (SSL *)
      */
     public static native void freeSSL(long ssl);
 
     /**
      * Wire up internal and network BIOs for the given SSL instance.
-     *
+     * <p>
      * <b>Warning: you must explicitly free this resource by calling freeBIO</b>
-     *
-     * While the SSL's internal/application data BIO will be freed when freeSSL is called on
-     * the provided SSL instance, you must call freeBIO on the returned network BIO.
+     * <p>
+     * While the SSL's internal/application data BIO will be freed when freeSSL is called on the provided SSL instance,
+     * you must call freeBIO on the returned network BIO.
      *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return pointer to the Network BIO (BIO *)
      */
     public static native long makeNetworkBIO(long ssl);
 
     /**
      * BIO_free
+     *
      * @param bio BIO pointer
      */
     public static native void freeBIO(long bio);
 
     /**
      * SSL_shutdown
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the operation status
      */
     public static native int shutdownSSL(long ssl);
 
     /**
-     * Get the error number representing the last error OpenSSL encountered on
-     * this thread.
+     * Get the error number representing the last error OpenSSL encountered on this thread.
+     *
      * @return the last error number
      */
     public static native int getLastErrorNumber();
 
     /**
      * SSL_get_cipher.
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the cipher name
      */
     public static native String getCipherForSSL(long ssl);
 
     /**
      * SSL_get_version
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the SSL version in use
      */
     public static native String getVersion(long ssl);
 
     /**
      * SSL_do_handshake
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the handshake status
      */
     public static native int doHandshake(long ssl);
 
     /**
      * SSL_renegotiate
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the operation status
      */
     public static native int renegotiate(long ssl);
 
     /**
      * SSL_renegotiate_pending
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the operation status
      */
     public static native int renegotiatePending(long ssl);
 
     /**
      * SSL_verify_client_post_handshake
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the operation status
      */
     public static native int verifyClientPostHandshake(long ssl);
 
     /**
      * Is post handshake authentication in progress on this connection?
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the operation status
      */
     public static native int getPostHandshakeAuthInProgress(long ssl);
 
+    public static native void markPostHandshakeAuthComplete(long ssl);
+
     /**
      * SSL_in_init.
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the status
      */
     public static native int isInInit(long ssl);
 
     /**
      * SSL_get0_next_proto_negotiated
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the NPN protocol negotiated
      *
      * @deprecated Unused. Will be removed in Tomcat 10.1.x
@@ -642,52 +1170,59 @@
 
     /**
      * SSL_get0_alpn_selected
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the ALPN protocol negotiated
      */
     public static native String getAlpnSelected(long ssl);
 
     /**
-     * Get the peer certificate chain or {@code null} if non was send.
+     * Get the peer certificate chain or {@code null} if none was sent.
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the certificate chain bytes
      */
     public static native byte[][] getPeerCertChain(long ssl);
 
     /**
-     * Get the peer certificate or {@code null} if non was send.
+     * Get the peer certificate or {@code null} if none was sent.
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the certificate bytes
      */
     public static native byte[] getPeerCertificate(long ssl);
 
     /**
      * Get the error number representing for the given {@code errorNumber}.
+     *
      * @param errorNumber The error code
+     *
      * @return an error message
      */
     public static native String getErrorString(long errorNumber);
 
     /**
      * SSL_get_time
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return returns the time at which the session ssl was established. The time is given in seconds since the Epoch
      */
     public static native long getTime(long ssl);
 
     /**
-     * Set Type of Client Certificate verification and Maximum depth of CA Certificates
-     * in Client Certificate verification.
-     * <br>
-     * This directive sets the Certificate verification level for the Client
-     * Authentication. Notice that this directive can be used both in per-server
-     * and per-directory context. In per-server context it applies to the client
-     * authentication process used in the standard SSL handshake when a connection
-     * is established. In per-directory context it forces an SSL renegotiation with
-     * the reconfigured client verification level after the HTTP request was read
-     * but before the HTTP response is sent.
-     * <br>
+     * Set Type of Client Certificate verification and Maximum depth of CA Certificates in Client Certificate
+     * verification. <br>
+     * This directive sets the Certificate verification level for the Client Authentication. Notice that this directive
+     * can be used both in per-server and per-directory context. In per-server context it applies to the client
+     * authentication process used in the standard SSL handshake when a connection is established. In per-directory
+     * context it forces an SSL renegotiation with the reconfigured client verification level after the HTTP request was
+     * read but before the HTTP response is sent. <br>
      * The following levels are available for level:
+     *
      * <pre>
      * SSL_CVERIFY_NONE           - No client Certificate is required at all
      * SSL_CVERIFY_OPTIONAL       - The client may present a valid Certificate
@@ -695,66 +1230,80 @@
      * SSL_CVERIFY_OPTIONAL_NO_CA - The client may present a valid Certificate
      *                              but it need not to be (successfully) verifiable
      * </pre>
+     *
      * <br>
-     * The depth actually is the maximum number of intermediate certificate issuers,
-     * i.e. the number of CA certificates which are max allowed to be followed while
-     * verifying the client certificate. A depth of 0 means that self-signed client
-     * certificates are accepted only, the default depth of 1 means the client
-     * certificate can be self-signed or has to be signed by a CA which is directly
-     * known to the server (i.e. the CA's certificate is under
-     * {@code setCACertificatePath}, etc.
+     * The depth actually is the maximum number of intermediate certificate issuers, i.e. the number of CA certificates
+     * which are max allowed to be followed while verifying the client certificate. A depth of 0 means that self-signed
+     * client certificates are accepted only, the default depth of 1 means the client certificate can be self-signed or
+     * has to be signed by a CA which is directly known to the server (i.e. the CA's certificate is under
+     * {@code setCACertificatePath}, etc).
      *
-     * @param ssl the SSL instance (SSL *)
+     * @param ssl   the SSL instance (SSL *)
      * @param level Type of Client Certificate verification.
-     * @param depth Maximum depth of CA Certificates in Client Certificate
-     *              verification.
+     * @param depth Maximum depth of CA Certificates in Client Certificate verification.
      */
     public static native void setVerify(long ssl, int level, int depth);
 
     /**
      * Set OpenSSL Option.
-     * @param ssl the SSL instance (SSL *)
-     * @param options  See SSL.SSL_OP_* for option flags.
+     *
+     * @param ssl     the SSL instance (SSL *)
+     * @param options See SSL.SSL_OP_* for option flags.
      */
     public static native void setOptions(long ssl, int options);
 
     /**
      * Get OpenSSL Option.
+     *
      * @param ssl the SSL instance (SSL *)
-     * @return options  See SSL.SSL_OP_* for option flags.
+     *
+     * @return options See SSL.SSL_OP_* for option flags.
      */
     public static native int getOptions(long ssl);
 
     /**
      * Returns all cipher suites that are enabled for negotiation in an SSL handshake.
+     *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return ciphers
      */
     public static native String[] getCiphers(long ssl);
 
     /**
-     * Returns the cipher suites available for negotiation in SSL handshake.
-     * <br>
-     * This complex directive uses a colon-separated cipher-spec string consisting
-     * of OpenSSL cipher specifications to configure the Cipher Suite the client
-     * is permitted to negotiate in the SSL handshake phase. Notice that this
-     * directive can be used both in per-server and per-directory context.
-     * In per-server context it applies to the standard SSL handshake when a
-     * connection is established. In per-directory context it forces an SSL
-     * renegotiation with the reconfigured Cipher Suite after the HTTP request
-     * was read but before the HTTP response is sent.
-     * @param ssl the SSL instance (SSL *)
-     * @param ciphers an SSL cipher specification
+     * Set the TLSv1.2 and below ciphers available for negotiation the in TLS handshake.
+     * <p>
+     * This complex directive uses a colon-separated cipher-spec string consisting of OpenSSL cipher specifications to
+     * configure the ciphers the client is permitted to negotiate in the TLS handshake phase.
+     *
+     * @param ssl        The SSL instance (SSL *)
+     * @param cipherList An OpenSSL cipher specification.
+     *
+     * @return <code>true</code> if the operation was successful
+     *
+     * @throws Exception An error occurred
+     */
+    public static native boolean setCipherSuites(long ssl, String cipherList) throws Exception;
+
+    /**
+     * Set the TLSv1.3 cipher suites available for negotiation the in TLS handshake.
+     * <p>
+     * This uses a colon-separated list of TLSv1.3 cipher suite names in preference order.
+     *
+     * @param ssl          The SSL instance (SSL *)
+     * @param cipherSuites An OpenSSL cipher suite list.
+     *
      * @return <code>true</code> if the operation was successful
+     *
      * @throws Exception An error occurred
      */
-    public static native boolean setCipherSuites(long ssl, String ciphers)
-            throws Exception;
+    public static native boolean setCipherSuitesEx(long ssl, String cipherSuites) throws Exception;
 
     /**
      * Returns the ID of the session as byte array representation.
      *
      * @param ssl the SSL instance (SSL *)
+     *
      * @return the session as byte array representation obtained via SSL_SESSION_get_id.
      */
     public static native byte[] getSessionId(long ssl);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSLSocket.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSLSocket.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/SSLSocket.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/SSLSocket.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,60 +17,56 @@
 package org.apache.tomcat.jni;
 
 /**
- * SSL Socket
+ * SSL Socket.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class SSLSocket {
 
     /**
      * Attach APR socket on an SSL connection.
-     * @param ctx SSLContext to use.
+     *
+     * @param ctx  SSLContext to use.
      * @param sock APR Socket that already did physical connect or accept.
+     *
      * @return APR_STATUS code.
+     *
      * @throws Exception An error occurred
      */
-    public static native int attach(long ctx, long sock)
-        throws Exception;
+    public static native int attach(long ctx, long sock) throws Exception;
 
     /**
      * Do an SSL handshake.
+     *
      * @param thesocket The socket to use
+     *
      * @return the handshake status
      */
     public static native int handshake(long thesocket);
 
     /**
-     * Do an SSL renegotiation.
-     * SSL supports per-directory re-configuration of SSL parameters.
-     * This is implemented by performing an SSL renegotiation of the
-     * re-configured parameters after the request is read, but before the
-     * response is sent. In more detail: the renegotiation happens after the
-     * request line and MIME headers were read, but _before_ the attached
-     * request body is read. The reason simply is that in the HTTP protocol
-     * usually there is no acknowledgment step between the headers and the
-     * body (there is the 100-continue feature and the chunking facility
-     * only), so Apache has no API hook for this step.
+     * Do an SSL renegotiation. SSL supports per-directory re-configuration of SSL parameters. This is implemented by
+     * performing an SSL renegotiation of the re-configured parameters after the request is read, but before the
+     * response is sent. In more detail: the renegotiation happens after the request line and MIME headers were read,
+     * but _before_ the attached request body is read. The reason simply is that in the HTTP protocol usually there is
+     * no acknowledgment step between the headers and the body (there is the 100-continue feature and the chunking
+     * facility only), so Apache has no API hook for this step.
      *
      * @param thesocket The socket to use
+     *
      * @return the operation status
      */
     public static native int renegotiate(long thesocket);
 
     /**
-     * Set Type of Client Certificate verification and Maximum depth of CA
-     * Certificates in Client Certificate verification.
-     * <br>
-     * This is used to change the verification level for a connection prior to
-     * starting a re-negotiation.
-     * <br>
+     * Set Type of Client Certificate verification and Maximum depth of CA Certificates in Client Certificate
+     * verification. <br>
+     * This is used to change the verification level for a connection prior to starting a re-negotiation. <br>
      * The following levels are available for level:
+     *
      * <PRE>
      * SSL_CVERIFY_NONE           - No client Certificate is required at all
      * SSL_CVERIFY_OPTIONAL       - The client may present a valid Certificate
@@ -80,12 +76,13 @@
      *                              but it need not to be (successfully)
      *                              verifiable
      * </PRE>
+     *
      * <br>
+     *
      * @param sock  The socket to change.
      * @param level Type of Client Certificate verification.
-     * @param depth Maximum number of certificates to permit in chain from
-     *              client to trusted CA. Use a value of 0 or less to leave the
-     *              current value unchanged
+     * @param depth Maximum number of certificates to permit in chain from client to trusted CA. Use a value of 0 or
+     *                  less to leave the current value unchanged
      */
     public static native void setVerify(long sock, int level, int depth);
 
@@ -93,42 +90,44 @@
      * Return SSL Info parameter as byte array.
      *
      * @param sock The socket to read the data from.
-     * @param id Parameter id.
+     * @param id   Parameter id.
+     *
      * @return Byte array containing info id value.
+     *
      * @throws Exception An error occurred
      */
-    public static native byte[] getInfoB(long sock, int id)
-        throws Exception;
+    public static native byte[] getInfoB(long sock, int id) throws Exception;
 
     /**
      * Return SSL Info parameter as String.
      *
      * @param sock The socket to read the data from.
-     * @param id Parameter id.
+     * @param id   Parameter id.
+     *
      * @return String containing info id value.
+     *
      * @throws Exception An error occurred
      */
-    public static native String getInfoS(long sock, int id)
-        throws Exception;
+    public static native String getInfoS(long sock, int id) throws Exception;
 
     /**
      * Return SSL Info parameter as integer.
      *
      * @param sock The socket to read the data from.
-     * @param id Parameter id.
+     * @param id   Parameter id.
+     *
      * @return Integer containing info id value or -1 on error.
+     *
      * @throws Exception An error occurred
      */
-    public static native int getInfoI(long sock, int id)
-        throws Exception;
+    public static native int getInfoI(long sock, int id) throws Exception;
 
 
     /**
-     * Obtain the name of the protocol negotiated via ALPN. Only valid after the
-     * TLS handshake has completed.
+     * Obtain the name of the protocol negotiated via ALPN. Only valid after the TLS handshake has completed.
      *
-     * @param sock                  Socket
-     * @param negotiatedProtocol    Byte array in which to store agreed protocol
+     * @param sock               Socket
+     * @param negotiatedProtocol Byte array in which to store agreed protocol
      *
      * @return Length of agreed protocol. Zero means no protocol agreed.
      */
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Status.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Status.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Status.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Status.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,14 +17,11 @@
 package org.apache.tomcat.jni;
 
 /**
- * Status
+ * Status.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Status {
@@ -32,53 +29,48 @@
     /**
      * APR_OS_START_ERROR is where the APR specific error values start.
      */
-     public static final int APR_OS_START_ERROR   = 20000;
+    public static final int APR_OS_START_ERROR = 20000;
     /**
-     * APR_OS_ERRSPACE_SIZE is the maximum number of errors you can fit
-     *    into one of the error/status ranges below -- except for
-     *    APR_OS_START_USERERR, which see.
+     * APR_OS_ERRSPACE_SIZE is the maximum number of errors you can fit into one of the error/status ranges below --
+     * except for APR_OS_START_USERERR, which see.
      */
-     public static final int APR_OS_ERRSPACE_SIZE = 50000;
+    public static final int APR_OS_ERRSPACE_SIZE = 50000;
     /**
      * APR_OS_START_STATUS is where the APR specific status codes start.
      */
-     public static final int APR_OS_START_STATUS  = (APR_OS_START_ERROR + APR_OS_ERRSPACE_SIZE);
+    public static final int APR_OS_START_STATUS = (APR_OS_START_ERROR + APR_OS_ERRSPACE_SIZE);
 
     /**
-     * APR_OS_START_USERERR are reserved for applications that use APR that
-     *     layer their own error codes along with APR's.  Note that the
-     *     error immediately following this one is set ten times farther
-     *     away than usual, so that users of apr have a lot of room in
-     *     which to declare custom error codes.
+     * APR_OS_START_USERERR are reserved for applications that use APR that layer their own error codes along with
+     * APR's. Note that the error immediately following this one is set ten times farther away than usual, so that users
+     * of apr have a lot of room in which to declare custom error codes.
      */
-    public static final int APR_OS_START_USERERR  = (APR_OS_START_STATUS + APR_OS_ERRSPACE_SIZE);
+    public static final int APR_OS_START_USERERR = (APR_OS_START_STATUS + APR_OS_ERRSPACE_SIZE);
     /**
-     * APR_OS_START_USEERR is obsolete, defined for compatibility only.
-     * Use APR_OS_START_USERERR instead.
+     * APR_OS_START_USEERR is obsolete, defined for compatibility only. Use APR_OS_START_USERERR instead.
      */
-    public static final int APR_OS_START_USEERR    = APR_OS_START_USERERR;
+    public static final int APR_OS_START_USEERR = APR_OS_START_USERERR;
     /**
-     * APR_OS_START_CANONERR is where APR versions of errno values are defined
-     *     on systems which don't have the corresponding errno.
+     * APR_OS_START_CANONERR is where APR versions of errno values are defined on systems which don't have the
+     * corresponding errno.
      */
-    public static final int APR_OS_START_CANONERR  = (APR_OS_START_USERERR + (APR_OS_ERRSPACE_SIZE * 10));
+    public static final int APR_OS_START_CANONERR = (APR_OS_START_USERERR + (APR_OS_ERRSPACE_SIZE * 10));
 
     /**
-     * APR_OS_START_EAIERR folds EAI_ error codes from getaddrinfo() into
-     *     apr_status_t values.
+     * APR_OS_START_EAIERR folds EAI_ error codes from getaddrinfo() into apr_status_t values.
      */
-    public static final int APR_OS_START_EAIERR  = (APR_OS_START_CANONERR + APR_OS_ERRSPACE_SIZE);
+    public static final int APR_OS_START_EAIERR = (APR_OS_START_CANONERR + APR_OS_ERRSPACE_SIZE);
     /**
-     * APR_OS_START_SYSERR folds platform-specific system error values into
-     *     apr_status_t values.
+     * APR_OS_START_SYSERR folds platform-specific system error values into apr_status_t values.
      */
-    public static final int APR_OS_START_SYSERR  = (APR_OS_START_EAIERR + APR_OS_ERRSPACE_SIZE);
+    public static final int APR_OS_START_SYSERR = (APR_OS_START_EAIERR + APR_OS_ERRSPACE_SIZE);
 
     /** no error. */
     public static final int APR_SUCCESS = 0;
 
     /**
      * APR Error Values
+     *
      * <PRE>
      * <b>APR ERROR VALUES</b>
      * APR_ENOSTAT      APR was unable to perform a stat on the file
@@ -101,37 +93,37 @@
      * APR_EBADMASK     The specified netmask is invalid
      * APR_ESYMNOTFOUND Could not find the requested symbol
      * </PRE>
-     *
      */
-    public static final int APR_ENOSTAT       = (APR_OS_START_ERROR + 1);
-    public static final int APR_ENOPOOL       = (APR_OS_START_ERROR + 2);
-    public static final int APR_EBADDATE      = (APR_OS_START_ERROR + 4);
-    public static final int APR_EINVALSOCK    = (APR_OS_START_ERROR + 5);
-    public static final int APR_ENOPROC       = (APR_OS_START_ERROR + 6);
-    public static final int APR_ENOTIME       = (APR_OS_START_ERROR + 7);
-    public static final int APR_ENODIR        = (APR_OS_START_ERROR + 8);
-    public static final int APR_ENOLOCK       = (APR_OS_START_ERROR + 9);
-    public static final int APR_ENOPOLL       = (APR_OS_START_ERROR + 10);
-    public static final int APR_ENOSOCKET     = (APR_OS_START_ERROR + 11);
-    public static final int APR_ENOTHREAD     = (APR_OS_START_ERROR + 12);
-    public static final int APR_ENOTHDKEY     = (APR_OS_START_ERROR + 13);
-    public static final int APR_EGENERAL      = (APR_OS_START_ERROR + 14);
-    public static final int APR_ENOSHMAVAIL   = (APR_OS_START_ERROR + 15);
-    public static final int APR_EBADIP        = (APR_OS_START_ERROR + 16);
-    public static final int APR_EBADMASK      = (APR_OS_START_ERROR + 17);
-    public static final int APR_EDSOOPEN      = (APR_OS_START_ERROR + 19);
-    public static final int APR_EABSOLUTE     = (APR_OS_START_ERROR + 20);
-    public static final int APR_ERELATIVE     = (APR_OS_START_ERROR + 21);
-    public static final int APR_EINCOMPLETE   = (APR_OS_START_ERROR + 22);
-    public static final int APR_EABOVEROOT    = (APR_OS_START_ERROR + 23);
-    public static final int APR_EBADPATH      = (APR_OS_START_ERROR + 24);
-    public static final int APR_EPATHWILD     = (APR_OS_START_ERROR + 25);
-    public static final int APR_ESYMNOTFOUND  = (APR_OS_START_ERROR + 26);
+    public static final int APR_ENOSTAT = (APR_OS_START_ERROR + 1);
+    public static final int APR_ENOPOOL = (APR_OS_START_ERROR + 2);
+    public static final int APR_EBADDATE = (APR_OS_START_ERROR + 4);
+    public static final int APR_EINVALSOCK = (APR_OS_START_ERROR + 5);
+    public static final int APR_ENOPROC = (APR_OS_START_ERROR + 6);
+    public static final int APR_ENOTIME = (APR_OS_START_ERROR + 7);
+    public static final int APR_ENODIR = (APR_OS_START_ERROR + 8);
+    public static final int APR_ENOLOCK = (APR_OS_START_ERROR + 9);
+    public static final int APR_ENOPOLL = (APR_OS_START_ERROR + 10);
+    public static final int APR_ENOSOCKET = (APR_OS_START_ERROR + 11);
+    public static final int APR_ENOTHREAD = (APR_OS_START_ERROR + 12);
+    public static final int APR_ENOTHDKEY = (APR_OS_START_ERROR + 13);
+    public static final int APR_EGENERAL = (APR_OS_START_ERROR + 14);
+    public static final int APR_ENOSHMAVAIL = (APR_OS_START_ERROR + 15);
+    public static final int APR_EBADIP = (APR_OS_START_ERROR + 16);
+    public static final int APR_EBADMASK = (APR_OS_START_ERROR + 17);
+    public static final int APR_EDSOOPEN = (APR_OS_START_ERROR + 19);
+    public static final int APR_EABSOLUTE = (APR_OS_START_ERROR + 20);
+    public static final int APR_ERELATIVE = (APR_OS_START_ERROR + 21);
+    public static final int APR_EINCOMPLETE = (APR_OS_START_ERROR + 22);
+    public static final int APR_EABOVEROOT = (APR_OS_START_ERROR + 23);
+    public static final int APR_EBADPATH = (APR_OS_START_ERROR + 24);
+    public static final int APR_EPATHWILD = (APR_OS_START_ERROR + 25);
+    public static final int APR_ESYMNOTFOUND = (APR_OS_START_ERROR + 26);
     public static final int APR_EPROC_UNKNOWN = (APR_OS_START_ERROR + 27);
     public static final int APR_ENOTENOUGHENTROPY = (APR_OS_START_ERROR + 28);
 
     /**
      * APR Status Values
+     *
      * <PRE>
      * <b>APR STATUS VALUES</b>
      * APR_INCHILD        Program is currently executing in the child
@@ -159,112 +151,265 @@
      * APR_EMISMATCH      Two passwords do not match.
      * APR_EBUSY          The given lock was busy.
      * </PRE>
-     *
      */
-    public static final int APR_INCHILD       = (APR_OS_START_STATUS + 1);
-    public static final int APR_INPARENT      = (APR_OS_START_STATUS + 2);
-    public static final int APR_DETACH        = (APR_OS_START_STATUS + 3);
-    public static final int APR_NOTDETACH     = (APR_OS_START_STATUS + 4);
-    public static final int APR_CHILD_DONE    = (APR_OS_START_STATUS + 5);
+    public static final int APR_INCHILD = (APR_OS_START_STATUS + 1);
+    public static final int APR_INPARENT = (APR_OS_START_STATUS + 2);
+    public static final int APR_DETACH = (APR_OS_START_STATUS + 3);
+    public static final int APR_NOTDETACH = (APR_OS_START_STATUS + 4);
+    public static final int APR_CHILD_DONE = (APR_OS_START_STATUS + 5);
     public static final int APR_CHILD_NOTDONE = (APR_OS_START_STATUS + 6);
-    public static final int APR_TIMEUP        = (APR_OS_START_STATUS + 7);
-    public static final int APR_INCOMPLETE    = (APR_OS_START_STATUS + 8);
-    public static final int APR_BADCH         = (APR_OS_START_STATUS + 12);
-    public static final int APR_BADARG        = (APR_OS_START_STATUS + 13);
-    public static final int APR_EOF           = (APR_OS_START_STATUS + 14);
-    public static final int APR_NOTFOUND      = (APR_OS_START_STATUS + 15);
-    public static final int APR_ANONYMOUS     = (APR_OS_START_STATUS + 19);
-    public static final int APR_FILEBASED     = (APR_OS_START_STATUS + 20);
-    public static final int APR_KEYBASED      = (APR_OS_START_STATUS + 21);
-    public static final int APR_EINIT         = (APR_OS_START_STATUS + 22);
-    public static final int APR_ENOTIMPL      = (APR_OS_START_STATUS + 23);
-    public static final int APR_EMISMATCH     = (APR_OS_START_STATUS + 24);
-    public static final int APR_EBUSY         = (APR_OS_START_STATUS + 25);
-
-    public static final int TIMEUP            = (APR_OS_START_USERERR + 1);
-    public static final int EAGAIN            = (APR_OS_START_USERERR + 2);
-    public static final int EINTR             = (APR_OS_START_USERERR + 3);
-    public static final int EINPROGRESS       = (APR_OS_START_USERERR + 4);
-    public static final int ETIMEDOUT         = (APR_OS_START_USERERR + 5);
+    public static final int APR_TIMEUP = (APR_OS_START_STATUS + 7);
+    public static final int APR_INCOMPLETE = (APR_OS_START_STATUS + 8);
+    public static final int APR_BADCH = (APR_OS_START_STATUS + 12);
+    public static final int APR_BADARG = (APR_OS_START_STATUS + 13);
+    public static final int APR_EOF = (APR_OS_START_STATUS + 14);
+    public static final int APR_NOTFOUND = (APR_OS_START_STATUS + 15);
+    public static final int APR_ANONYMOUS = (APR_OS_START_STATUS + 19);
+    public static final int APR_FILEBASED = (APR_OS_START_STATUS + 20);
+    public static final int APR_KEYBASED = (APR_OS_START_STATUS + 21);
+    public static final int APR_EINIT = (APR_OS_START_STATUS + 22);
+    public static final int APR_ENOTIMPL = (APR_OS_START_STATUS + 23);
+    public static final int APR_EMISMATCH = (APR_OS_START_STATUS + 24);
+    public static final int APR_EBUSY = (APR_OS_START_STATUS + 25);
+
+    public static final int TIMEUP = (APR_OS_START_USERERR + 1);
+    public static final int EAGAIN = (APR_OS_START_USERERR + 2);
+    public static final int EINTR = (APR_OS_START_USERERR + 3);
+    public static final int EINPROGRESS = (APR_OS_START_USERERR + 4);
+    public static final int ETIMEDOUT = (APR_OS_START_USERERR + 5);
 
     private static native boolean is(int err, int idx);
+
     /*
-     * APR_STATUS_IS Status Value Tests
-     * <br><b>Warning :</b> For any particular error condition, more than one of these tests
-     *      may match. This is because platform-specific error codes may not
-     *      always match the semantics of the POSIX codes these tests (and the
-     *      corresponding APR error codes) are named after. A notable example
-     *      are the APR_STATUS_IS_ENOENT and APR_STATUS_IS_ENOTDIR tests on
-     *      Win32 platforms. The programmer should always be aware of this and
-     *      adjust the order of the tests accordingly.
+     * APR_STATUS_IS Status Value Tests <br><b>Warning :</b> For any particular error condition, more than one of these
+     * tests may match. This is because platform-specific error codes may not always match the semantics of the POSIX
+     * codes these tests (and the corresponding APR error codes) are named after. A notable example are the
+     * APR_STATUS_IS_ENOENT and APR_STATUS_IS_ENOTDIR tests on Win32 platforms. The programmer should always be aware of
+     * this and adjust the order of the tests accordingly.
      *
      */
-    public static final boolean APR_STATUS_IS_ENOSTAT(int s)    { return is(s, 1); }
-    public static final boolean APR_STATUS_IS_ENOPOOL(int s)    { return is(s, 2); }
+    public static final boolean APR_STATUS_IS_ENOSTAT(int s) {
+        return is(s, 1);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOPOOL(int s) {
+        return is(s, 2);
+    }
+
     /* empty slot: +3 */
-    public static final boolean APR_STATUS_IS_EBADDATE(int s)   { return is(s, 4); }
-    public static final boolean APR_STATUS_IS_EINVALSOCK(int s) { return is(s, 5); }
-    public static final boolean APR_STATUS_IS_ENOPROC(int s)    { return is(s, 6); }
-    public static final boolean APR_STATUS_IS_ENOTIME(int s)    { return is(s, 7); }
-    public static final boolean APR_STATUS_IS_ENODIR(int s)     { return is(s, 8); }
-    public static final boolean APR_STATUS_IS_ENOLOCK(int s)    { return is(s, 9); }
-    public static final boolean APR_STATUS_IS_ENOPOLL(int s)    { return is(s, 10); }
-    public static final boolean APR_STATUS_IS_ENOSOCKET(int s)  { return is(s, 11); }
-    public static final boolean APR_STATUS_IS_ENOTHREAD(int s)  { return is(s, 12); }
-    public static final boolean APR_STATUS_IS_ENOTHDKEY(int s)  { return is(s, 13); }
-    public static final boolean APR_STATUS_IS_EGENERAL(int s)   { return is(s, 14); }
-    public static final boolean APR_STATUS_IS_ENOSHMAVAIL(int s){ return is(s, 15); }
-    public static final boolean APR_STATUS_IS_EBADIP(int s)     { return is(s, 16); }
-    public static final boolean APR_STATUS_IS_EBADMASK(int s)   { return is(s, 17); }
+    public static final boolean APR_STATUS_IS_EBADDATE(int s) {
+        return is(s, 4);
+    }
+
+    public static final boolean APR_STATUS_IS_EINVALSOCK(int s) {
+        return is(s, 5);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOPROC(int s) {
+        return is(s, 6);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOTIME(int s) {
+        return is(s, 7);
+    }
+
+    public static final boolean APR_STATUS_IS_ENODIR(int s) {
+        return is(s, 8);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOLOCK(int s) {
+        return is(s, 9);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOPOLL(int s) {
+        return is(s, 10);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOSOCKET(int s) {
+        return is(s, 11);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOTHREAD(int s) {
+        return is(s, 12);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOTHDKEY(int s) {
+        return is(s, 13);
+    }
+
+    public static final boolean APR_STATUS_IS_EGENERAL(int s) {
+        return is(s, 14);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOSHMAVAIL(int s) {
+        return is(s, 15);
+    }
+
+    public static final boolean APR_STATUS_IS_EBADIP(int s) {
+        return is(s, 16);
+    }
+
+    public static final boolean APR_STATUS_IS_EBADMASK(int s) {
+        return is(s, 17);
+    }
+
     /* empty slot: +18 */
-    public static final boolean APR_STATUS_IS_EDSOPEN(int s)    { return is(s, 19); }
-    public static final boolean APR_STATUS_IS_EABSOLUTE(int s)  { return is(s, 20); }
-    public static final boolean APR_STATUS_IS_ERELATIVE(int s)  { return is(s, 21); }
-    public static final boolean APR_STATUS_IS_EINCOMPLETE(int s){ return is(s, 22); }
-    public static final boolean APR_STATUS_IS_EABOVEROOT(int s) { return is(s, 23); }
-    public static final boolean APR_STATUS_IS_EBADPATH(int s)   { return is(s, 24); }
-    public static final boolean APR_STATUS_IS_EPATHWILD(int s)  { return is(s, 25); }
-    public static final boolean APR_STATUS_IS_ESYMNOTFOUND(int s)      { return is(s, 26); }
-    public static final boolean APR_STATUS_IS_EPROC_UNKNOWN(int s)     { return is(s, 27); }
-    public static final boolean APR_STATUS_IS_ENOTENOUGHENTROPY(int s) { return is(s, 28); }
+    public static final boolean APR_STATUS_IS_EDSOPEN(int s) {
+        return is(s, 19);
+    }
+
+    public static final boolean APR_STATUS_IS_EABSOLUTE(int s) {
+        return is(s, 20);
+    }
+
+    public static final boolean APR_STATUS_IS_ERELATIVE(int s) {
+        return is(s, 21);
+    }
+
+    public static final boolean APR_STATUS_IS_EINCOMPLETE(int s) {
+        return is(s, 22);
+    }
+
+    public static final boolean APR_STATUS_IS_EABOVEROOT(int s) {
+        return is(s, 23);
+    }
+
+    public static final boolean APR_STATUS_IS_EBADPATH(int s) {
+        return is(s, 24);
+    }
+
+    public static final boolean APR_STATUS_IS_EPATHWILD(int s) {
+        return is(s, 25);
+    }
+
+    public static final boolean APR_STATUS_IS_ESYMNOTFOUND(int s) {
+        return is(s, 26);
+    }
+
+    public static final boolean APR_STATUS_IS_EPROC_UNKNOWN(int s) {
+        return is(s, 27);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOTENOUGHENTROPY(int s) {
+        return is(s, 28);
+    }
 
     /*
      * APR_Error
      */
-    public static final boolean APR_STATUS_IS_INCHILD(int s)    { return is(s, 51); }
-    public static final boolean APR_STATUS_IS_INPARENT(int s)   { return is(s, 52); }
-    public static final boolean APR_STATUS_IS_DETACH(int s)     { return is(s, 53); }
-    public static final boolean APR_STATUS_IS_NOTDETACH(int s)  { return is(s, 54); }
-    public static final boolean APR_STATUS_IS_CHILD_DONE(int s) { return is(s, 55); }
-    public static final boolean APR_STATUS_IS_CHILD_NOTDONE(int s)  { return is(s, 56); }
-    public static final boolean APR_STATUS_IS_TIMEUP(int s)     { return is(s, 57); }
-    public static final boolean APR_STATUS_IS_INCOMPLETE(int s) { return is(s, 58); }
+    public static final boolean APR_STATUS_IS_INCHILD(int s) {
+        return is(s, 51);
+    }
+
+    public static final boolean APR_STATUS_IS_INPARENT(int s) {
+        return is(s, 52);
+    }
+
+    public static final boolean APR_STATUS_IS_DETACH(int s) {
+        return is(s, 53);
+    }
+
+    public static final boolean APR_STATUS_IS_NOTDETACH(int s) {
+        return is(s, 54);
+    }
+
+    public static final boolean APR_STATUS_IS_CHILD_DONE(int s) {
+        return is(s, 55);
+    }
+
+    public static final boolean APR_STATUS_IS_CHILD_NOTDONE(int s) {
+        return is(s, 56);
+    }
+
+    public static final boolean APR_STATUS_IS_TIMEUP(int s) {
+        return is(s, 57);
+    }
+
+    public static final boolean APR_STATUS_IS_INCOMPLETE(int s) {
+        return is(s, 58);
+    }
+
     /* empty slot: +9 */
     /* empty slot: +10 */
     /* empty slot: +11 */
-    public static final boolean APR_STATUS_IS_BADCH(int s)      { return is(s, 62); }
-    public static final boolean APR_STATUS_IS_BADARG(int s)     { return is(s, 63); }
-    public static final boolean APR_STATUS_IS_EOF(int s)        { return is(s, 64); }
-    public static final boolean APR_STATUS_IS_NOTFOUND(int s)   { return is(s, 65); }
+    public static final boolean APR_STATUS_IS_BADCH(int s) {
+        return is(s, 62);
+    }
+
+    public static final boolean APR_STATUS_IS_BADARG(int s) {
+        return is(s, 63);
+    }
+
+    public static final boolean APR_STATUS_IS_EOF(int s) {
+        return is(s, 64);
+    }
+
+    public static final boolean APR_STATUS_IS_NOTFOUND(int s) {
+        return is(s, 65);
+    }
+
     /* empty slot: +16 */
     /* empty slot: +17 */
     /* empty slot: +18 */
-    public static final boolean APR_STATUS_IS_ANONYMOUS(int s)  { return is(s, 69); }
-    public static final boolean APR_STATUS_IS_FILEBASED(int s)  { return is(s, 70); }
-    public static final boolean APR_STATUS_IS_KEYBASED(int s)   { return is(s, 71); }
-    public static final boolean APR_STATUS_IS_EINIT(int s)      { return is(s, 72); }
-    public static final boolean APR_STATUS_IS_ENOTIMPL(int s)   { return is(s, 73); }
-    public static final boolean APR_STATUS_IS_EMISMATCH(int s)  { return is(s, 74); }
-    public static final boolean APR_STATUS_IS_EBUSY(int s)      { return is(s, 75); }
+    public static final boolean APR_STATUS_IS_ANONYMOUS(int s) {
+        return is(s, 69);
+    }
+
+    public static final boolean APR_STATUS_IS_FILEBASED(int s) {
+        return is(s, 70);
+    }
+
+    public static final boolean APR_STATUS_IS_KEYBASED(int s) {
+        return is(s, 71);
+    }
+
+    public static final boolean APR_STATUS_IS_EINIT(int s) {
+        return is(s, 72);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOTIMPL(int s) {
+        return is(s, 73);
+    }
+
+    public static final boolean APR_STATUS_IS_EMISMATCH(int s) {
+        return is(s, 74);
+    }
+
+    public static final boolean APR_STATUS_IS_EBUSY(int s) {
+        return is(s, 75);
+    }
 
     /* Socket errors */
-    public static final boolean APR_STATUS_IS_EAGAIN(int s)     { return is(s, 90); }
-    public static final boolean APR_STATUS_IS_ETIMEDOUT(int s)  { return is(s, 91); }
-    public static final boolean APR_STATUS_IS_ECONNABORTED(int s) { return is(s, 92); }
-    public static final boolean APR_STATUS_IS_ECONNRESET(int s)   { return is(s, 93); }
-    public static final boolean APR_STATUS_IS_EINPROGRESS(int s)  { return is(s, 94); }
-    public static final boolean APR_STATUS_IS_EINTR(int s)      { return is(s, 95); }
-    public static final boolean APR_STATUS_IS_ENOTSOCK(int s)   { return is(s, 96); }
-    public static final boolean APR_STATUS_IS_EINVAL(int s)     { return is(s, 97); }
+    public static final boolean APR_STATUS_IS_EAGAIN(int s) {
+        return is(s, 90);
+    }
+
+    public static final boolean APR_STATUS_IS_ETIMEDOUT(int s) {
+        return is(s, 91);
+    }
+
+    public static final boolean APR_STATUS_IS_ECONNABORTED(int s) {
+        return is(s, 92);
+    }
+
+    public static final boolean APR_STATUS_IS_ECONNRESET(int s) {
+        return is(s, 93);
+    }
+
+    public static final boolean APR_STATUS_IS_EINPROGRESS(int s) {
+        return is(s, 94);
+    }
+
+    public static final boolean APR_STATUS_IS_EINTR(int s) {
+        return is(s, 95);
+    }
+
+    public static final boolean APR_STATUS_IS_ENOTSOCK(int s) {
+        return is(s, 96);
+    }
+
+    public static final boolean APR_STATUS_IS_EINVAL(int s) {
+        return is(s, 97);
+    }
 
 }
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Stdlib.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Stdlib.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Stdlib.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Stdlib.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,82 +17,94 @@
 package org.apache.tomcat.jni;
 
 /**
- * Stdlib
+ * Stdlib.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Stdlib {
 
     /**
      * Read from plain memory
+     *
      * @param dst Destination byte array
      * @param src Source memory address
-     * @param sz Number of bytes to copy.
+     * @param sz  Number of bytes to copy.
+     *
      * @return <code>true</code> if the operation was successful
      */
-    public static native boolean memread(byte [] dst, long src, int sz);
+    public static native boolean memread(byte[] dst, long src, int sz);
 
     /**
      * Write to plain memory
+     *
      * @param dst Destination memory address
      * @param src Source byte array
-     * @param sz Number of bytes to copy.
+     * @param sz  Number of bytes to copy.
+     *
      * @return <code>true</code> if the operation was successful
      */
-    public static native boolean memwrite(long dst, byte [] src, int sz);
+    public static native boolean memwrite(long dst, byte[] src, int sz);
 
     /**
      * Sets buffers to a specified character
+     *
      * @param dst Destination memory address
-     * @param c Character to set.
-     * @param sz Number of characters.
+     * @param c   Character to set.
+     * @param sz  Number of characters.
+     *
      * @return <code>true</code> if the operation was successful
      */
     public static native boolean memset(long dst, int c, int sz);
 
     /**
      * Allocates memory blocks.
+     *
      * @param sz Bytes to allocate.
+     *
      * @return a pointer
      */
     public static native long malloc(int sz);
 
     /**
      * Reallocate memory blocks.
+     *
      * @param mem Pointer to previously allocated memory block.
-     * @param sz New size in bytes.
+     * @param sz  New size in bytes.
+     *
      * @return a pointer
      */
     public static native long realloc(long mem, int sz);
 
     /**
      * Allocates an array in memory with elements initialized to 0.
+     *
      * @param num Number of elements.
-     * @param sz Length in bytes of each element.
+     * @param sz  Length in bytes of each element.
+     *
      * @return a pointer
      */
     public static native long calloc(int num, int sz);
 
     /**
      * Deallocates or frees a memory block.
+     *
      * @param mem Previously allocated memory block to be freed.
      */
     public static native void free(long mem);
 
     /**
      * Get current process pid.
+     *
      * @return current pid or < 1 in case of error.
      */
     public static native int getpid();
 
     /**
      * Get current process parent pid.
+     *
      * @return parent pid or < 1 in case of error.
      */
     public static native int getppid();
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Thread.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Thread.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Thread.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Thread.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,14 +17,11 @@
 package org.apache.tomcat.jni;
 
 /**
- * Thread
+ * Thread.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Thread {
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/Time.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/Time.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/Time.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/Time.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,68 +17,68 @@
 package org.apache.tomcat.jni;
 
 /**
- * Time
+ * Time.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class Time {
 
     /** number of microseconds per second */
-    public static final long APR_USEC_PER_SEC  = 1000000L;
+    public static final long APR_USEC_PER_SEC = 1000000L;
     /** number of milliseconds per microsecond */
     public static final long APR_MSEC_PER_USEC = 1000L;
 
     /**
      * @param t The time
+     *
      * @return apr_time_t as a second
      */
-    public static long sec(long t)
-    {
+    public static long sec(long t) {
         return t / APR_USEC_PER_SEC;
     }
 
     /**
      * @param t The time
+     *
      * @return apr_time_t as a msec
      */
-    public static long msec(long t)
-    {
+    public static long msec(long t) {
         return t / APR_MSEC_PER_USEC;
     }
 
     /**
      * number of microseconds since 00:00:00 January 1, 1970 UTC
+     *
      * @return the current time
      */
     public static native long now();
 
     /**
-     * Formats dates in the RFC822
-     * format in an efficient manner.
+     * Formats dates in the RFC822 format in an efficient manner.
+     *
      * @param t the time to convert
+     *
      * @return the formatted date
      */
     public static native String rfc822(long t);
 
     /**
-     * Formats dates in the ctime() format
-     * in an efficient manner.
-     * Unlike ANSI/ISO C ctime(), apr_ctime() does not include
-     * a \n at the end of the string.
+     * Formats dates in the ctime() format in an efficient manner. Unlike ANSI/ISO C ctime(), apr_ctime() does not
+     * include a \n at the end of the string.
+     *
      * @param t the time to convert
+     *
      * @return the formatted date
      */
     public static native String ctime(long t);
 
     /**
-     * Sleep for the specified number of micro-seconds.
-     * <br><b>Warning :</b> May sleep for longer than the specified time.
+     * Sleep for the specified number of micro-seconds. <br>
+     * <b>Warning :</b> May sleep for longer than the specified time.
+     *
      * @param t desired amount of time to sleep.
      */
     public static native void sleep(long t);
diff -Nru tomcat-native-1.3.1/java/org/apache/tomcat/jni/User.java tomcat-native-1.3.8/java/org/apache/tomcat/jni/User.java
--- tomcat-native-1.3.1/java/org/apache/tomcat/jni/User.java	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/java/org/apache/tomcat/jni/User.java	2026-06-11 17:01:29.000000000 -0300
@@ -17,123 +17,130 @@
 package org.apache.tomcat.jni;
 
 /**
- * User
+ * User.
  *
- * @author Mladen Turk
- *
- * @deprecated  The scope of the APR/Native Library will be reduced in Tomcat
- *              10.1.x / Tomcat Native 2.x onwards to only include those
- *              components required to provide OpenSSL integration with the NIO
- *              and NIO2 connectors.
+ * @deprecated The scope of the APR/Native Library will be reduced in Tomcat 9.1.x / Tomcat Native 2.x and has been
+ *                 reduced in Tomcat 10.1.x / Tomcat Native 2.x onwards to only include those components required to
+ *                 provide OpenSSL integration with the NIO and NIO2 connectors.
  */
 @Deprecated
 public class User {
 
     /**
-     * Get the userid (and groupid) of the calling process
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the userid (and groupid) of the calling process This function is available only if APR_HAS_USER is defined.
+     *
      * @param p The pool from which to allocate working space
+     *
      * @return Returns the user id
+     *
      * @throws Error If an error occurred
      */
-     public static native long uidCurrent(long p)
-        throws Error;
+    public static native long uidCurrent(long p) throws Error;
 
     /**
-     * Get the groupid of the calling process
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the groupid of the calling process This function is available only if APR_HAS_USER is defined.
+     *
      * @param p The pool from which to allocate working space
+     *
      * @return Returns the group id
+     *
      * @throws Error If an error occurred
      */
-     public static native long gidCurrent(long p)
-        throws Error;
+    public static native long gidCurrent(long p) throws Error;
 
 
     /**
-     * Get the userid for the specified username
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the userid for the specified username This function is available only if APR_HAS_USER is defined.
+     *
      * @param username The username to lookup
-     * @param p The pool from which to allocate working space
+     * @param p        The pool from which to allocate working space
+     *
      * @return Returns the user id
+     *
      * @throws Error If an error occurred
      */
-     public static native long uid(String username, long p)
-        throws Error;
+    public static native long uid(String username, long p) throws Error;
 
     /**
-     * Get the groupid for the specified username
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the groupid for the specified username This function is available only if APR_HAS_USER is defined.
+     *
      * @param username The username to lookup
-     * @param p The pool from which to allocate working space
-     * @return  Returns the user's group id
+     * @param p        The pool from which to allocate working space
+     *
+     * @return Returns the user's group id
+     *
      * @throws Error If an error occurred
      */
-     public static native long usergid(String username, long p)
-        throws Error;
+    public static native long usergid(String username, long p) throws Error;
 
     /**
-     * Get the groupid for a specified group name
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the groupid for a specified group name This function is available only if APR_HAS_USER is defined.
+     *
      * @param groupname The group name to look up
-     * @param p The pool from which to allocate working space
-     * @return  Returns the user's group id
+     * @param p         The pool from which to allocate working space
+     *
+     * @return Returns the user's group id
+     *
      * @throws Error If an error occurred
      */
-     public static native long gid(String groupname, long p)
-        throws Error;
+    public static native long gid(String groupname, long p) throws Error;
 
     /**
-     * Get the user name for a specified userid
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the user name for a specified userid This function is available only if APR_HAS_USER is defined.
+     *
      * @param userid The userid
-     * @param p The pool from which to allocate the string
+     * @param p      The pool from which to allocate the string
+     *
      * @return New string containing user name
+     *
      * @throws Error If an error occurred
      */
-     public static native String username(long userid, long p)
-        throws Error;
+    public static native String username(long userid, long p) throws Error;
 
     /**
-     * Get the group name for a specified groupid
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the group name for a specified groupid This function is available only if APR_HAS_USER is defined.
+     *
      * @param groupid The groupid
-     * @param p The pool from which to allocate the string
+     * @param p       The pool from which to allocate the string
+     *
      * @return New string containing group name
+     *
      * @throws Error If an error occurred
      */
-     public static native String groupname(long groupid, long p)
-        throws Error;
+    public static native String groupname(long groupid, long p) throws Error;
 
     /**
-     * Compare two user identifiers for equality.
-     * This function is available only if APR_HAS_USER is defined.
-     * @param left One uid to test
+     * Compare two user identifiers for equality. This function is available only if APR_HAS_USER is defined.
+     *
+     * @param left  One uid to test
      * @param right Another uid to test
-     * @return APR_SUCCESS if the apr_uid_t structures identify the same user,
-     * APR_EMISMATCH if not, APR_BADARG if an apr_uid_t is invalid.
+     *
+     * @return APR_SUCCESS if the apr_uid_t structures identify the same user, APR_EMISMATCH if not, APR_BADARG if an
+     *             apr_uid_t is invalid.
      */
-     public static native int uidcompare(long left, long right);
+    public static native int uidcompare(long left, long right);
 
     /**
-     * Compare two group identifiers for equality.
-     * This function is available only if APR_HAS_USER is defined.
-     * @param left One gid to test
+     * Compare two group identifiers for equality. This function is available only if APR_HAS_USER is defined.
+     *
+     * @param left  One gid to test
      * @param right Another gid to test
-     * @return APR_SUCCESS if the apr_gid_t structures identify the same group,
-     * APR_EMISMATCH if not, APR_BADARG if an apr_gid_t is invalid.
+     *
+     * @return APR_SUCCESS if the apr_gid_t structures identify the same group, APR_EMISMATCH if not, APR_BADARG if an
+     *             apr_gid_t is invalid.
      */
-     public static native int gidcompare(long left, long right);
+    public static native int gidcompare(long left, long right);
 
     /**
-     * Get the home directory for the named user
-     * This function is available only if APR_HAS_USER is defined.
+     * Get the home directory for the named user This function is available only if APR_HAS_USER is defined.
+     *
      * @param username The named user
-     * @param p The pool from which to allocate the string
+     * @param p        The pool from which to allocate the string
+     *
      * @return New string containing directory name
+     *
      * @throws Error If an error occurred
      */
-     public static native String homepath(String username, long p)
-        throws Error;
+    public static native String homepath(String username, long p) throws Error;
 
 }
diff -Nru tomcat-native-1.3.1/jnirelease.sh tomcat-native-1.3.8/jnirelease.sh
--- tomcat-native-1.3.1/jnirelease.sh	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/jnirelease.sh	2026-06-11 17:01:29.000000000 -0300
@@ -256,6 +256,9 @@
 ./buildconf --with-apr=$apr_src_dir || exit 1
 
 cd "$top"
+# Remove write permissions from all but the owner
+chmod -R go-w ${JKJNIDIST}
+
 # Create source distribution
 tar -cf - ${JKJNIDIST} | gzip -c9 > ${JKJNIDIST}.tar.gz || exit 1
 
@@ -294,6 +297,5 @@
     $PERL ${JKWINDIST}/native/build/lineends.pl --cr ${JKWINDIST}/${i}
 done
 $PERL ${JKWINDIST}/native/build/lineends.pl --cr ${JKWINDIST}/CHANGELOG.txt
-$PERL ${JKWINDIST}/native/build/lineends.pl --nocr ${JKWINDIST}/native/srclib/openssl/openssl-msvcrt-3.0.x.patch
 
 zip -9rqyo ${JKWINDIST}.zip ${JKWINDIST}
diff -Nru tomcat-native-1.3.1/native/build/apr_common.m4 tomcat-native-1.3.8/native/build/apr_common.m4
--- tomcat-native-1.3.1/native/build/apr_common.m4	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/native/build/apr_common.m4	2026-06-12 05:13:55.000000000 -0300
@@ -920,7 +920,7 @@
 dnl <sys/types.h> should be available everywhere!
   cat > conftest.c <<EOF
 #include <sys/types.h>
-  int main() { return 0; }
+  int main(int argc, const char *argv[]) { return 0; }
 EOF
   MKDEP="true"
   for i in "$CC -MM" "$CC -M" "$CPP -MM" "$CPP -M" "cpp -M"; do
diff -Nru tomcat-native-1.3.1/native/build/buildcheck.sh tomcat-native-1.3.8/native/build/buildcheck.sh
--- tomcat-native-1.3.1/native/build/buildcheck.sh	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/build/buildcheck.sh	2026-06-11 17:01:29.000000000 -0300
@@ -30,18 +30,18 @@
 echo "buildconf: python version $py_version (ok)"
 fi
 
-# autoconf 2.50 or newer
+# autoconf 2.68 or newer
 ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|sed -e 's/^[^0-9]*//;s/[a-z]* *$//;q'`
 if test -z "$ac_version"; then
 echo "buildconf: autoconf not found."
-echo "           You need autoconf version 2.50 or newer installed"
+echo "           You need autoconf version 2.68 or newer installed"
 echo "           to build Tomcat Native from SVN."
 exit 1
 fi
 IFS=.; set $ac_version; IFS=' '
-if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
+if test "$1" = "2" -a "$2" -lt "68" || test "$1" -lt "2"; then
 echo "buildconf: autoconf version $ac_version found."
-echo "           You need autoconf version 2.50 or newer installed"
+echo "           You need autoconf version 2.68 or newer installed"
 echo "           to build Tomcat Native from SVN."
 exit 1
 else
diff -Nru tomcat-native-1.3.1/native/build/config.guess tomcat-native-1.3.8/native/build/config.guess
--- tomcat-native-1.3.1/native/build/config.guess	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/native/build/config.guess	2026-06-12 05:13:55.000000000 -0300
@@ -1,14 +1,14 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2021 Free Software Foundation, Inc.
+#   Copyright 1992-2024 Free Software Foundation, Inc.
 
 # shellcheck disable=SC2006,SC2268 # see below for rationale
 
-timestamp='2021-06-03'
+timestamp='2024-07-27'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -47,7 +47,7 @@
 usage="\
 Usage: $0 [OPTION]
 
-Output the configuration name of the system \`$me' is run on.
+Output the configuration name of the system '$me' is run on.
 
 Options:
   -h, --help         print this help, then exit
@@ -60,13 +60,13 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright 1992-2024 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 
 help="
-Try \`$me --help' for more information."
+Try '$me --help' for more information."
 
 # Parse command line
 while test $# -gt 0 ; do
@@ -102,8 +102,8 @@
 # temporary files to be created and, as you can see below, it is a
 # headache to deal with in a portable fashion.
 
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
+# Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still
+# use 'HOST_CC' if defined, but it is deprecated.
 
 # Portable tmp directory creation inspired by the Autoconf team.
 
@@ -123,7 +123,7 @@
     dummy=$tmp/dummy
     case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
 	,,)    echo "int x;" > "$dummy.c"
-	       for driver in cc gcc c89 c99 ; do
+	       for driver in cc gcc c17 c99 c89 ; do
 		   if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
 		       CC_FOR_BUILD=$driver
 		       break
@@ -155,6 +155,9 @@
 
 	set_cc_for_build
 	cat <<-EOF > "$dummy.c"
+	#if defined(__ANDROID__)
+	LIBC=android
+	#else
 	#include <features.h>
 	#if defined(__UCLIBC__)
 	LIBC=uclibc
@@ -162,6 +165,8 @@
 	LIBC=dietlibc
 	#elif defined(__GLIBC__)
 	LIBC=gnu
+	#elif defined(__LLVM_LIBC__)
+	LIBC=llvm
 	#else
 	#include <stdarg.h>
 	/* First heuristic to detect musl libc.  */
@@ -169,6 +174,7 @@
 	LIBC=musl
 	#endif
 	#endif
+	#endif
 	EOF
 	cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
 	eval "$cc_set_libc"
@@ -437,7 +443,7 @@
 	# This test works for both compilers.
 	if test "$CC_FOR_BUILD" != no_compiler_found; then
 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		(CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
 	    then
 		SUN_ARCH=x86_64
@@ -459,7 +465,7 @@
 		UNAME_RELEASE=`uname -v`
 		;;
 	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
+	# Japanese Language versions have a version number like '4.1.3-JL'.
 	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
 	GUESS=sparc-sun-sunos$SUN_REL
 	;;
@@ -628,7 +634,8 @@
 		sed 's/^		//' << EOF > "$dummy.c"
 		#include <sys/systemcfg.h>
 
-		main()
+		int
+		main ()
 			{
 			if (!__power_pc())
 				exit(1);
@@ -712,7 +719,8 @@
 		#include <stdlib.h>
 		#include <unistd.h>
 
-		int main ()
+		int
+		main ()
 		{
 		#if defined(_SC_KERNEL_BITS)
 		    long bits = sysconf(_SC_KERNEL_BITS);
@@ -904,7 +912,7 @@
 	fi
 	;;
     *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	UNAME_PROCESSOR=`uname -p`
 	case $UNAME_PROCESSOR in
 	    amd64)
 		UNAME_PROCESSOR=x86_64 ;;
@@ -929,6 +937,9 @@
     i*:PW*:*)
 	GUESS=$UNAME_MACHINE-pc-pw32
 	;;
+    *:SerenityOS:*:*)
+        GUESS=$UNAME_MACHINE-pc-serenity
+        ;;
     *:Interix*:*)
 	case $UNAME_MACHINE in
 	    x86)
@@ -963,11 +974,37 @@
 	GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
 	GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
 	;;
+    x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
+	GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
+	;;
+    *:[Mm]anagarm:*:*)
+	GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
+	;;
     *:Minix:*:*)
 	GUESS=$UNAME_MACHINE-unknown-minix
 	;;
     aarch64:Linux:*:*)
-	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	set_cc_for_build
+	CPU=$UNAME_MACHINE
+	LIBCABI=$LIBC
+	if test "$CC_FOR_BUILD" != no_compiler_found; then
+	    ABI=64
+	    sed 's/^	    //' << EOF > "$dummy.c"
+	    #ifdef __ARM_EABI__
+	    #ifdef __ARM_PCS_VFP
+	    ABI=eabihf
+	    #else
+	    ABI=eabi
+	    #endif
+	    #endif
+EOF
+	    cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+	    eval "$cc_set_abi"
+	    case $ABI in
+		eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;;
+	    esac
+	fi
+	GUESS=$CPU-unknown-linux-$LIBCABI
 	;;
     aarch64_be:Linux:*:*)
 	UNAME_MACHINE=aarch64_be
@@ -1033,7 +1070,16 @@
     k1om:Linux:*:*)
 	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
 	;;
-    loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+    kvx:Linux:*:*)
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
+    kvx:cos:*:*)
+	GUESS=$UNAME_MACHINE-unknown-cos
+	;;
+    kvx:mbr:*:*)
+	GUESS=$UNAME_MACHINE-unknown-mbr
+	;;
+    loongarch32:Linux:*:* | loongarch64:Linux:*:*)
 	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
 	;;
     m32r*:Linux:*:*)
@@ -1148,16 +1194,27 @@
 	;;
     x86_64:Linux:*:*)
 	set_cc_for_build
+	CPU=$UNAME_MACHINE
 	LIBCABI=$LIBC
 	if test "$CC_FOR_BUILD" != no_compiler_found; then
-	    if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
-		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_X32 >/dev/null
-	    then
-		LIBCABI=${LIBC}x32
-	    fi
+	    ABI=64
+	    sed 's/^	    //' << EOF > "$dummy.c"
+	    #ifdef __i386__
+	    ABI=x86
+	    #else
+	    #ifdef __ILP32__
+	    ABI=x32
+	    #endif
+	    #endif
+EOF
+	    cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+	    eval "$cc_set_abi"
+	    case $ABI in
+		x86) CPU=i686 ;;
+		x32) LIBCABI=${LIBC}x32 ;;
+	    esac
 	fi
-	GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+	GUESS=$CPU-pc-linux-$LIBCABI
 	;;
     xtensa*:Linux:*:*)
 	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
@@ -1177,7 +1234,7 @@
 	GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
 	;;
     i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
+	# If we were able to find 'uname', then EMX Unix compatibility
 	# is probably installed.
 	GUESS=$UNAME_MACHINE-pc-os2-emx
 	;;
@@ -1318,7 +1375,7 @@
 		GUESS=ns32k-sni-sysv
 	fi
 	;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+    PENTIUM:*:4.0*:*)	# Unisys 'ClearPath HMP IX 4000' SVR4/MP effort
 			# says <Richard.M.Bartel at ccMail.Census.GOV>
 	GUESS=i586-unisys-sysv4
 	;;
@@ -1364,8 +1421,11 @@
     BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
 	GUESS=i586-pc-haiku
 	;;
-    x86_64:Haiku:*:*)
-	GUESS=x86_64-unknown-haiku
+    ppc:Haiku:*:*)	# Haiku running on Apple PowerPC
+	GUESS=powerpc-apple-haiku
+	;;
+    *:Haiku:*:*)	# Haiku modern gcc (not bound by BeOS compat)
+	GUESS=$UNAME_MACHINE-unknown-haiku
 	;;
     SX-4:SUPER-UX:*:*)
 	GUESS=sx4-nec-superux$UNAME_RELEASE
@@ -1522,6 +1582,9 @@
     i*86:rdos:*:*)
 	GUESS=$UNAME_MACHINE-pc-rdos
 	;;
+    i*86:Fiwix:*:*)
+	GUESS=$UNAME_MACHINE-pc-fiwix
+	;;
     *:AROS:*:*)
 	GUESS=$UNAME_MACHINE-unknown-aros
 	;;
@@ -1534,6 +1597,9 @@
     *:Unleashed:*:*)
 	GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
 	;;
+    *:Ironclad:*:*)
+	GUESS=$UNAME_MACHINE-unknown-ironclad
+	;;
 esac
 
 # Do we have a guess based on uname results?
@@ -1557,6 +1623,7 @@
 #endif
 #endif
 #endif
+int
 main ()
 {
 #if defined (sony)
diff -Nru tomcat-native-1.3.1/native/build/config.sub tomcat-native-1.3.8/native/build/config.sub
--- tomcat-native-1.3.1/native/build/config.sub	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/native/build/config.sub	2026-06-12 05:13:55.000000000 -0300
@@ -1,14 +1,14 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2021 Free Software Foundation, Inc.
+#   Copyright 1992-2024 Free Software Foundation, Inc.
 
-# shellcheck disable=SC2006,SC2268 # see below for rationale
+# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
 
-timestamp='2021-08-14'
+timestamp='2024-05-27'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -76,13 +76,13 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright 1992-2024 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 
 help="
-Try \`$me --help' for more information."
+Try '$me --help' for more information."
 
 # Parse command line
 while test $# -gt 0 ; do
@@ -120,7 +120,6 @@
 esac
 
 # Split fields of configuration type
-# shellcheck disable=SC2162
 saved_IFS=$IFS
 IFS="-" read field1 field2 field3 field4 <<EOF
 $1
@@ -130,7 +129,7 @@
 # Separate into logical components for further validation
 case $1 in
 	*-*-*-*-*)
-		echo Invalid configuration \`"$1"\': more than four components >&2
+		echo "Invalid configuration '$1': more than four components" >&2
 		exit 1
 		;;
 	*-*-*-*)
@@ -142,10 +141,21 @@
 		# parts
 		maybe_os=$field2-$field3
 		case $maybe_os in
-			nto-qnx* | linux-* | uclinux-uclibc* \
-			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
-			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
-			| storm-chaos* | os2-emx* | rtmk-nova*)
+			  cloudabi*-eabi* \
+			| kfreebsd*-gnu* \
+			| knetbsd*-gnu* \
+			| kopensolaris*-gnu* \
+			| linux-* \
+			| managarm-* \
+			| netbsd*-eabi* \
+			| netbsd*-gnu* \
+			| nto-qnx* \
+			| os2-emx* \
+			| rtmk-nova* \
+			| storm-chaos* \
+			| uclinux-gnu* \
+			| uclinux-uclibc* \
+			| windows-* )
 				basic_machine=$field1
 				basic_os=$maybe_os
 				;;
@@ -160,8 +170,12 @@
 		esac
 		;;
 	*-*)
-		# A lone config we happen to match not fitting any pattern
 		case $field1-$field2 in
+			# Shorthands that happen to contain a single dash
+			convex-c[12] | convex-c3[248])
+				basic_machine=$field2-convex
+				basic_os=
+				;;
 			decstation-3100)
 				basic_machine=mips-dec
 				basic_os=
@@ -169,28 +183,88 @@
 			*-*)
 				# Second component is usually, but not always the OS
 				case $field2 in
-					# Prevent following clause from handling this valid os
+					# Do not treat sunos as a manufacturer
 					sun*os*)
 						basic_machine=$field1
 						basic_os=$field2
 						;;
-					zephyr*)
-						basic_machine=$field1-unknown
-						basic_os=$field2
-						;;
 					# Manufacturers
-					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
-					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
-					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
-					| convergent* | ncr* | news | 32* | 3600* | 3100* \
-					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
-					| ultra | tti* | harris | dolphin | highlevel | gould \
-					| cbm | ns | masscomp | apple | axis | knuth | cray \
-					| microblaze* | sim | cisco \
-					| oki | wec | wrs | winbond)
+					  3100* \
+					| 32* \
+					| 3300* \
+					| 3600* \
+					| 7300* \
+					| acorn \
+					| altos* \
+					| apollo \
+					| apple \
+					| atari \
+					| att* \
+					| axis \
+					| be \
+					| bull \
+					| cbm \
+					| ccur \
+					| cisco \
+					| commodore \
+					| convergent* \
+					| convex* \
+					| cray \
+					| crds \
+					| dec* \
+					| delta* \
+					| dg \
+					| digital \
+					| dolphin \
+					| encore* \
+					| gould \
+					| harris \
+					| highlevel \
+					| hitachi* \
+					| hp \
+					| ibm* \
+					| intergraph \
+					| isi* \
+					| knuth \
+					| masscomp \
+					| microblaze* \
+					| mips* \
+					| motorola* \
+					| ncr* \
+					| news \
+					| next \
+					| ns \
+					| oki \
+					| omron* \
+					| pc533* \
+					| rebel \
+					| rom68k \
+					| rombug \
+					| semi \
+					| sequent* \
+					| siemens \
+					| sgi* \
+					| siemens \
+					| sim \
+					| sni \
+					| sony* \
+					| stratus \
+					| sun \
+					| sun[234]* \
+					| tektronix \
+					| tti* \
+					| ultra \
+					| unicom* \
+					| wec \
+					| winbond \
+					| wrs)
 						basic_machine=$field1-$field2
 						basic_os=
 						;;
+					zephyr*)
+						basic_machine=$field1-unknown
+						basic_os=$field2
+						;;
 					*)
 						basic_machine=$field1
 						basic_os=$field2
@@ -271,26 +345,6 @@
 				basic_machine=arm-unknown
 				basic_os=cegcc
 				;;
-			convex-c1)
-				basic_machine=c1-convex
-				basic_os=bsd
-				;;
-			convex-c2)
-				basic_machine=c2-convex
-				basic_os=bsd
-				;;
-			convex-c32)
-				basic_machine=c32-convex
-				basic_os=bsd
-				;;
-			convex-c34)
-				basic_machine=c34-convex
-				basic_os=bsd
-				;;
-			convex-c38)
-				basic_machine=c38-convex
-				basic_os=bsd
-				;;
 			cray)
 				basic_machine=j90-cray
 				basic_os=unicos
@@ -713,15 +767,26 @@
 		vendor=dec
 		basic_os=tops20
 		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
+	delta | 3300 | delta-motorola | 3300-motorola | motorola-delta | motorola-3300)
 		cpu=m68k
 		vendor=motorola
 		;;
-	dpx2*)
+	# This used to be dpx2*, but that gets the RS6000-based
+	# DPX/20 and the x86-based DPX/2-100 wrong.  See
+	# https://oldskool.silicium.org/stations/bull_dpx20.htm
+	# https://www.feb-patrimoine.com/english/bull_dpx2.htm
+	# https://www.feb-patrimoine.com/english/unix_and_bull.htm
+	dpx2 | dpx2[23]00 | dpx2[23]xx)
 		cpu=m68k
 		vendor=bull
-		basic_os=sysv3
+		;;
+	dpx2100 | dpx21xx)
+		cpu=i386
+		vendor=bull
+		;;
+	dpx20)
+		cpu=rs6000
+		vendor=bull
 		;;
 	encore | umax | mmax)
 		cpu=ns32k
@@ -836,18 +901,6 @@
 	next | m*-next)
 		cpu=m68k
 		vendor=next
-		case $basic_os in
-		    openstep*)
-		        ;;
-		    nextstep*)
-			;;
-		    ns2*)
-		      basic_os=nextstep2
-			;;
-		    *)
-		      basic_os=nextstep3
-			;;
-		esac
 		;;
 	np1)
 		cpu=np1
@@ -936,14 +989,13 @@
 		;;
 
 	*-*)
-		# shellcheck disable=SC2162
 		saved_IFS=$IFS
 		IFS="-" read cpu vendor <<EOF
 $basic_machine
 EOF
 		IFS=$saved_IFS
 		;;
-	# We use `pc' rather than `unknown'
+	# We use 'pc' rather than 'unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
 	i*86 | x86_64)
@@ -971,15 +1023,19 @@
 
 # Decode basic machines in the full and proper CPU-Company form.
 case $cpu-$vendor in
-	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
-	# some cases the only manufacturer, in others, it is the most popular.
+	# Here we handle the default manufacturer of certain CPU types in canonical form.
+	# It is in some cases the only manufacturer, in others, it is the most popular.
+	c[12]-convex | c[12]-unknown | c3[248]-convex | c3[248]-unknown)
+		vendor=convex
+		basic_os=${basic_os:-bsd}
+		;;
 	craynv-unknown)
 		vendor=cray
 		basic_os=${basic_os:-unicosmp}
 		;;
 	c90-unknown | c90-cray)
 		vendor=cray
-		basic_os=${Basic_os:-unicos}
+		basic_os=${basic_os:-unicos}
 		;;
 	fx80-unknown)
 		vendor=alliant
@@ -1020,11 +1076,34 @@
 		;;
 
 	# Here we normalize CPU types with a missing or matching vendor
-	dpx20-unknown | dpx20-bull)
-		cpu=rs6000
-		vendor=bull
+	armh-unknown | armh-alt)
+		cpu=armv7l
+		vendor=alt
+		basic_os=${basic_os:-linux-gnueabihf}
+		;;
+
+	# Normalized CPU+vendor pairs that imply an OS, if not otherwise specified
+	m68k-isi)
+		basic_os=${basic_os:-sysv}
+		;;
+	m68k-sony)
+		basic_os=${basic_os:-newsos}
+		;;
+	m68k-tektronix)
+		basic_os=${basic_os:-bsd}
+		;;
+	m88k-harris)
+		basic_os=${basic_os:-sysv3}
+		;;
+	i386-bull | m68k-bull)
+		basic_os=${basic_os:-sysv3}
+		;;
+	rs6000-bull)
 		basic_os=${basic_os:-bosx}
 		;;
+	mips-sni)
+		basic_os=${basic_os:-sysv4}
+		;;
 
 	# Here we normalize CPU types irrespective of the vendor
 	amd64-*)
@@ -1032,7 +1111,7 @@
 		;;
 	blackfin-*)
 		cpu=bfin
-		basic_os=linux
+		basic_os=${basic_os:-linux}
 		;;
 	c54x-*)
 		cpu=tic54x
@@ -1055,7 +1134,7 @@
 		;;
 	m68knommu-*)
 		cpu=m68k
-		basic_os=linux
+		basic_os=${basic_os:-linux}
 		;;
 	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
 		cpu=s12z
@@ -1065,12 +1144,12 @@
 		;;
 	parisc-*)
 		cpu=hppa
-		basic_os=linux
+		basic_os=${basic_os:-linux}
 		;;
 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
 		cpu=i586
 		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
 		cpu=i686
 		;;
 	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
@@ -1079,9 +1158,6 @@
 	pentium4-*)
 		cpu=i786
 		;;
-	pc98-*)
-		cpu=i386
-		;;
 	ppc-* | ppcbe-*)
 		cpu=powerpc
 		;;
@@ -1115,13 +1191,10 @@
 	tx39el-*)
 		cpu=mipstx39el
 		;;
-	x64-*)
-		cpu=x86_64
-		;;
 	xscale-* | xscalee[bl]-*)
 		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
 		;;
-	arm64-*)
+	arm64-* | aarch64le-*)
 		cpu=aarch64
 		;;
 
@@ -1173,114 +1246,231 @@
 		# Recognize the canonical CPU types that are allowed with any
 		# company name.
 		case $cpu in
-			1750a | 580 \
+			  1750a \
+			| 580 \
+			| [cjt]90 \
 			| a29k \
-			| aarch64 | aarch64_be \
+			| aarch64 \
+			| aarch64_be \
+			| aarch64c \
 			| abacus \
-			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
-			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
-			| alphapca5[67] | alpha64pca5[67] \
+			| alpha \
+			| alpha64 \
+			| alpha64ev56 \
+			| alpha64ev6[78] \
+			| alpha64ev[4-8] \
+			| alpha64pca5[67] \
+			| alphaev56 \
+			| alphaev6[78] \
+			| alphaev[4-8] \
+			| alphapca5[67] \
 			| am33_2.0 \
 			| amdgcn \
-			| arc | arceb | arc32 | arc64 \
-			| arm | arm[lb]e | arme[lb] | armv* \
-			| avr | avr32 \
+			| arc \
+			| arc32 \
+			| arc64 \
+			| arceb \
+			| arm \
+			| arm64e \
+			| arm64ec \
+			| arm[lb]e \
+			| arme[lb] \
+			| armv* \
 			| asmjs \
+			| avr \
+			| avr32 \
 			| ba \
-			| be32 | be64 \
-			| bfin | bpf | bs2000 \
-			| c[123]* | c30 | [cjt]90 | c4x \
-			| c8051 | clipper | craynv | csky | cydra \
-			| d10v | d30v | dlx | dsp16xx \
-			| e2k | elxsi | epiphany \
-			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
-			| h8300 | h8500 \
-			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+			| be32 \
+			| be64 \
+			| bfin \
+			| bpf \
+			| bs2000 \
+			| c30 \
+			| c4x \
+			| c8051 \
+			| c[123]* \
+			| clipper \
+			| craynv \
+			| csky \
+			| cydra \
+			| d10v \
+			| d30v \
+			| dlx \
+			| dsp16xx \
+			| e2k \
+			| elxsi \
+			| epiphany \
+			| f30[01] \
+			| f700 \
+			| fido \
+			| fr30 \
+			| frv \
+			| ft32 \
+			| fx80 \
+			| h8300 \
+			| h8500 \
 			| hexagon \
-			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
-			| ip2k | iq2000 \
+			| hppa \
+			| hppa1.[01] \
+			| hppa2.0 \
+			| hppa2.0[nw] \
+			| hppa64 \
+			| i*86 \
+			| i370 \
+			| i860 \
+			| i960 \
+			| ia16 \
+			| ia64 \
+			| ip2k \
+			| iq2000 \
+			| javascript \
 			| k1om \
-			| le32 | le64 \
+			| kvx \
+			| le32 \
+			| le64 \
 			| lm32 \
-			| loongarch32 | loongarch64 | loongarchx32 \
-			| m32c | m32r | m32rle \
-			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
-			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
-			| m88110 | m88k | maxq | mb | mcore | mep | metag \
-			| microblaze | microblazeel \
-			| mips | mipsbe | mipseb | mipsel | mipsle \
-			| mips16 \
-			| mips64 | mips64eb | mips64el \
-			| mips64octeon | mips64octeonel \
-			| mips64orion | mips64orionel \
-			| mips64r5900 | mips64r5900el \
-			| mips64vr | mips64vrel \
-			| mips64vr4100 | mips64vr4100el \
-			| mips64vr4300 | mips64vr4300el \
-			| mips64vr5000 | mips64vr5000el \
-			| mips64vr5900 | mips64vr5900el \
-			| mipsisa32 | mipsisa32el \
-			| mipsisa32r2 | mipsisa32r2el \
-			| mipsisa32r3 | mipsisa32r3el \
-			| mipsisa32r5 | mipsisa32r5el \
-			| mipsisa32r6 | mipsisa32r6el \
-			| mipsisa64 | mipsisa64el \
-			| mipsisa64r2 | mipsisa64r2el \
-			| mipsisa64r3 | mipsisa64r3el \
-			| mipsisa64r5 | mipsisa64r5el \
-			| mipsisa64r6 | mipsisa64r6el \
-			| mipsisa64sb1 | mipsisa64sb1el \
-			| mipsisa64sr71k | mipsisa64sr71kel \
-			| mipsr5900 | mipsr5900el \
-			| mipstx39 | mipstx39el \
+			| loongarch32 \
+			| loongarch64 \
+			| m32c \
+			| m32r \
+			| m32rle \
+			| m5200 \
+			| m68000 \
+			| m680[012346]0 \
+			| m6811 \
+			| m6812 \
+			| m68360 \
+			| m683?2 \
+			| m68hc11 \
+			| m68hc12 \
+			| m68hcs12x \
+			| m68k \
+			| m88110 \
+			| m88k \
+			| maxq \
+			| mb \
+			| mcore \
+			| mep \
+			| metag \
+			| microblaze \
+			| microblazeel \
+			| mips* \
 			| mmix \
-			| mn10200 | mn10300 \
+			| mn10200 \
+			| mn10300 \
 			| moxie \
-			| mt \
 			| msp430 \
-			| nds32 | nds32le | nds32be \
+			| mt \
+			| nanomips* \
+			| nds32 \
+			| nds32be \
+			| nds32le \
 			| nfp \
-			| nios | nios2 | nios2eb | nios2el \
-			| none | np1 | ns16k | ns32k | nvptx \
+			| nios \
+			| nios2 \
+			| nios2eb \
+			| nios2el \
+			| none \
+			| np1 \
+			| ns16k \
+			| ns32k \
+			| nvptx \
 			| open8 \
 			| or1k* \
 			| or32 \
 			| orion \
+			| pdp10 \
+			| pdp11 \
 			| picochip \
-			| pdp10 | pdp11 | pj | pjl | pn | power \
-			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+			| pj \
+			| pjl \
+			| pn \
+			| power \
+			| powerpc \
+			| powerpc64 \
+			| powerpc64le \
+			| powerpcle \
+			| powerpcspe \
 			| pru \
 			| pyramid \
-			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
-			| rl78 | romp | rs6000 | rx \
-			| s390 | s390x \
+			| riscv \
+			| riscv32 \
+			| riscv32be \
+			| riscv64 \
+			| riscv64be \
+			| rl78 \
+			| romp \
+			| rs6000 \
+			| rx \
+			| s390 \
+			| s390x \
 			| score \
-			| sh | shl \
-			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
-			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
-			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+			| sh \
+			| sh64 \
+			| sh64le \
+			| sh[12345][lb]e \
+			| sh[1234] \
+			| sh[1234]e[lb] \
+			| sh[23]e \
+			| sh[23]ele \
+			| sh[24]a \
+			| sh[24]ae[lb] \
+			| sh[lb]e \
+			| she[lb] \
+			| shl \
+			| sparc \
+			| sparc64 \
+			| sparc64b \
+			| sparc64v \
+			| sparc86x \
+			| sparclet \
 			| sparclite \
-			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+			| sparcv8 \
+			| sparcv9 \
+			| sparcv9b \
+			| sparcv9v \
 			| spu \
+			| sv1 \
+			| sx* \
 			| tahoe \
 			| thumbv7* \
-			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+			| tic30 \
+			| tic4x \
+			| tic54x \
+			| tic55x \
+			| tic6x \
+			| tic80 \
 			| tron \
 			| ubicom32 \
-			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+			| v70 \
+			| v810 \
+			| v850 \
+			| v850e \
+			| v850e1 \
+			| v850e2 \
+			| v850e2v3 \
+			| v850es \
 			| vax \
+			| vc4 \
 			| visium \
 			| w65 \
-			| wasm32 | wasm64 \
+			| wasm32 \
+			| wasm64 \
 			| we32k \
-			| x86 | x86_64 | xc16x | xgate | xps100 \
-			| xstormy16 | xtensa* \
+			| x86 \
+			| x86_64 \
+			| xc16x \
+			| xgate \
+			| xps100 \
+			| xstormy16 \
+			| xtensa* \
 			| ymp \
-			| z8k | z80)
+			| z80 \
+			| z8k)
 				;;
 
 			*)
-				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+				echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
 				exit 1
 				;;
 		esac
@@ -1301,11 +1491,12 @@
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if test x$basic_os != x
+if test x"$basic_os" != x
 then
 
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
 # set os.
+obj=
 case $basic_os in
 	gnu/linux*)
 		kernel=linux
@@ -1320,7 +1511,6 @@
 		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
 		;;
 	*-*)
-		# shellcheck disable=SC2162
 		saved_IFS=$IFS
 		IFS="-" read kernel os <<EOF
 $basic_os
@@ -1336,6 +1526,10 @@
 		kernel=linux
 		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
 		;;
+	managarm*)
+		kernel=managarm
+		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
+		;;
 	*)
 		kernel=
 		os=$basic_os
@@ -1363,6 +1557,23 @@
 	unixware*)
 		os=sysv4.2uw
 		;;
+	# The marketing names for NeXT's operating systems were
+	# NeXTSTEP, NeXTSTEP 2, OpenSTEP 3, OpenSTEP 4.  'openstep' is
+	# mapped to 'openstep3', but 'openstep1' and 'openstep2' are
+	# mapped to 'nextstep' and 'nextstep2', consistent with the
+	# treatment of SunOS/Solaris.
+	ns | ns1 | nextstep | nextstep1 | openstep1)
+		os=nextstep
+		;;
+	ns2 | nextstep2 | openstep2)
+		os=nextstep2
+		;;
+	ns3 | nextstep3 | openstep | openstep3)
+		os=openstep3
+		;;
+	ns4 | nextstep4 | openstep4)
+		os=openstep4
+		;;
 	# es1800 is here to avoid being matched by es* (a different OS)
 	es1800*)
 		os=ose
@@ -1433,6 +1644,7 @@
 		;;
 	utek*)
 		os=bsd
+		vendor=`echo "$vendor" | sed -e 's|^unknown$|tektronix|'`
 		;;
 	dynix*)
 		os=bsd
@@ -1449,21 +1661,25 @@
 	386bsd)
 		os=bsd
 		;;
-	ctix* | uts*)
+	ctix*)
 		os=sysv
+		vendor=`echo "$vendor" | sed -e 's|^unknown$|convergent|'`
 		;;
-	nova*)
-		os=rtmk-nova
+	uts*)
+		os=sysv
 		;;
-	ns2)
-		os=nextstep2
+	nova*)
+		kernel=rtmk
+		os=nova
 		;;
 	# Preserve the version number of sinix5.
 	sinix5.*)
 		os=`echo "$os" | sed -e 's|sinix|sysv|'`
+		vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
 		;;
 	sinix*)
 		os=sysv4
+		vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
 		;;
 	tpf*)
 		os=tpf
@@ -1501,10 +1717,16 @@
 			os=eabi
 			;;
 		    *)
-			os=elf
+			os=
+			obj=elf
 			;;
 		esac
 		;;
+	aout* | coff* | elf* | pe*)
+		# These are machine code file formats, not OSes
+		obj=$os
+		os=
+		;;
 	*)
 		# No normalization, but not necessarily accepted, that comes below.
 		;;
@@ -1523,12 +1745,15 @@
 # system, and we'll never get to this point.
 
 kernel=
+obj=
 case $cpu-$vendor in
 	score-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	spu-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	*-acorn)
 		os=riscix1.2
@@ -1538,28 +1763,35 @@
 		os=gnu
 		;;
 	arm*-semi)
-		os=aout
+		os=
+		obj=aout
 		;;
 	c4x-* | tic4x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	c8051-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	clipper-intergraph)
 		os=clix
 		;;
 	hexagon-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	tic54x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	tic55x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	tic6x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
@@ -1581,28 +1813,43 @@
 		os=sunos3
 		;;
 	m68*-cisco)
-		os=aout
+		os=
+		obj=aout
 		;;
 	mep-*)
-		os=elf
+		os=
+		obj=elf
+		;;
+	# The -sgi and -siemens entries must be before the mips- entry
+	# or we get the wrong os.
+	*-sgi)
+		os=irix
+		;;
+	*-siemens)
+		os=sysv4
 		;;
 	mips*-cisco)
-		os=elf
+		os=
+		obj=elf
 		;;
-	mips*-*)
-		os=elf
+	mips*-*|nanomips*-*)
+		os=
+		obj=elf
 		;;
 	or32-*)
-		os=coff
+		os=
+		obj=coff
 		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
+	# This must be before the sparc-* entry or we get the wrong os.
+	*-tti)
 		os=sysv3
 		;;
 	sparc-* | *-sun)
 		os=sunos4.1.1
 		;;
 	pru-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	*-be)
 		os=beos
@@ -1626,7 +1873,7 @@
 		os=hpux
 		;;
 	*-hitachi)
-		os=hiux
+		os=hiuxwe2
 		;;
 	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
 		os=sysv
@@ -1670,12 +1917,6 @@
 	*-encore)
 		os=bsd
 		;;
-	*-sgi)
-		os=irix
-		;;
-	*-siemens)
-		os=sysv4
-		;;
 	*-masscomp)
 		os=rtu
 		;;
@@ -1683,10 +1924,12 @@
 		os=uxpv
 		;;
 	*-rom68k)
-		os=coff
+		os=
+		obj=coff
 		;;
 	*-*bug)
-		os=coff
+		os=
+		obj=coff
 		;;
 	*-apple)
 		os=macos
@@ -1704,10 +1947,11 @@
 
 fi
 
-# Now, validate our (potentially fixed-up) OS.
+# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
+
 case $os in
 	# Sometimes we do "kernel-libc", so those need to count as OSes.
-	musl* | newlib* | relibc* | uclibc*)
+	llvm* | musl* | newlib* | relibc* | uclibc*)
 		;;
 	# Likewise for "kernel-abi"
 	eabi* | gnueabi*)
@@ -1715,82 +1959,308 @@
 	# VxWorks passes extra cpu info in the 4th filed.
 	simlinux | simwindows | spe)
 		;;
+	# See `case $cpu-$os` validation below
+	ghcjs)
+		;;
 	# Now accept the basic system types.
-	# The portable systems comes first.
 	# Each alternative MUST end in a * to match a version number.
-	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
-	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
-	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
-	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
-	     | hiux* | abug | nacl* | netware* | windows* \
-	     | os9* | macos* | osx* | ios* \
-	     | mpw* | magic* | mmixware* | mon960* | lnews* \
-	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
-	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
-	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
-	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
-	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
-	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
-	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
-	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
-	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
-	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
-	     | chorusrdb* | cegcc* | glidix* | serenity* \
-	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
-	     | midipix* | mingw32* | mingw64* | mint* \
-	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
-	     | interix* | uwin* | mks* | rhapsody* | darwin* \
-	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
-	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
-	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
-	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
-	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
-	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
-	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
-	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
-	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr*)
+	  abug \
+	| aix* \
+	| amdhsa* \
+	| amigados* \
+	| amigaos* \
+	| android* \
+	| aof* \
+	| aos* \
+	| aros* \
+	| atheos* \
+	| auroraux* \
+	| aux* \
+	| beos* \
+	| bitrig* \
+	| bme* \
+	| bosx* \
+	| bsd* \
+	| cegcc* \
+	| chorusos* \
+	| chorusrdb* \
+	| clix* \
+	| cloudabi* \
+	| cnk* \
+	| conix* \
+	| cos* \
+	| cxux* \
+	| cygwin* \
+	| darwin* \
+	| dgux* \
+	| dicos* \
+	| dnix* \
+	| domain* \
+	| dragonfly* \
+	| drops* \
+	| ebmon* \
+	| ecoff* \
+	| ekkobsd* \
+	| emscripten* \
+	| emx* \
+	| es* \
+	| fiwix* \
+	| freebsd* \
+	| fuchsia* \
+	| genix* \
+	| genode* \
+	| glidix* \
+	| gnu* \
+	| go32* \
+	| haiku* \
+	| hcos* \
+	| hiux* \
+	| hms* \
+	| hpux* \
+	| ieee* \
+	| interix* \
+	| ios* \
+	| iris* \
+	| irix* \
+	| ironclad* \
+	| isc* \
+	| its* \
+	| l4re* \
+	| libertybsd* \
+	| lites* \
+	| lnews* \
+	| luna* \
+	| lynxos* \
+	| mach* \
+	| macos* \
+	| magic* \
+	| mbr* \
+	| midipix* \
+	| midnightbsd* \
+	| mingw32* \
+	| mingw64* \
+	| minix* \
+	| mint* \
+	| mirbsd* \
+	| mks* \
+	| mlibc* \
+	| mmixware* \
+	| mon960* \
+	| morphos* \
+	| moss* \
+	| moxiebox* \
+	| mpeix* \
+	| mpw* \
+	| msdos* \
+	| msys* \
+	| mvs* \
+	| nacl* \
+	| netbsd* \
+	| netware* \
+	| newsos* \
+	| nextstep* \
+	| nindy* \
+	| nonstopux* \
+	| nova* \
+	| nsk* \
+	| nucleus* \
+	| nx6 \
+	| nx7 \
+	| oabi* \
+	| ohos* \
+	| onefs* \
+	| openbsd* \
+	| openedition* \
+	| openstep* \
+	| os108* \
+	| os2* \
+	| os400* \
+	| os68k* \
+	| os9* \
+	| ose* \
+	| osf* \
+	| oskit* \
+	| osx* \
+	| palmos* \
+	| phoenix* \
+	| plan9* \
+	| powermax* \
+	| powerunix* \
+	| proelf* \
+	| psos* \
+	| psp* \
+	| ptx* \
+	| pw32* \
+	| qnx* \
+	| rdos* \
+	| redox* \
+	| rhapsody* \
+	| riscix* \
+	| riscos* \
+	| rtems* \
+	| rtmk* \
+	| rtu* \
+	| scout* \
+	| secbsd* \
+	| sei* \
+	| serenity* \
+	| sim* \
+	| skyos* \
+	| solaris* \
+	| solidbsd* \
+	| sortix* \
+	| storm-chaos* \
+	| sunos \
+	| sunos[34]* \
+	| superux* \
+	| syllable* \
+	| sym* \
+	| sysv* \
+	| tenex* \
+	| tirtos* \
+	| toppers* \
+	| tops10* \
+	| tops20* \
+	| tpf* \
+	| tvos* \
+	| twizzler* \
+	| uclinux* \
+	| udi* \
+	| udk* \
+	| ultrix* \
+	| unicos* \
+	| uniplus* \
+	| unleashed* \
+	| unos* \
+	| uwin* \
+	| uxpv* \
+	| v88r* \
+	|*vms* \
+	| vos* \
+	| vsta* \
+	| vxsim* \
+	| vxworks* \
+	| wasi* \
+	| watchos* \
+	| wince* \
+	| windiss* \
+	| windows* \
+	| winnt* \
+	| xenix* \
+	| xray* \
+	| zephyr* \
+	| zvmoe* )
 		;;
 	# This one is extra strict with allowed versions
 	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
 		# Don't forget version if it is 3.2v4 or newer.
 		;;
+	# This refers to builds using the UEFI calling convention
+	# (which depends on the architecture) and PE file format.
+	# Note that this is both a different calling convention and
+	# different file format than that of GNU-EFI
+	# (x86_64-w64-mingw32).
+	uefi)
+		;;
 	none)
 		;;
+	kernel* | msvc* )
+		# Restricted further below
+		;;
+	'')
+		if test x"$obj" = x
+		then
+			echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
+		fi
+		;;
 	*)
-		echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+		echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
+		exit 1
+		;;
+esac
+
+case $obj in
+	aout* | coff* | elf* | pe*)
+		;;
+	'')
+		# empty is fine
+		;;
+	*)
+		echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
+		exit 1
+		;;
+esac
+
+# Here we handle the constraint that a (synthetic) cpu and os are
+# valid only in combination with each other and nowhere else.
+case $cpu-$os in
+	# The "javascript-unknown-ghcjs" triple is used by GHC; we
+	# accept it here in order to tolerate that, but reject any
+	# variations.
+	javascript-ghcjs)
+		;;
+	javascript-* | *-ghcjs)
+		echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
 		exit 1
 		;;
 esac
 
 # As a final step for OS-related things, validate the OS-kernel combination
 # (given a valid OS), if there is a kernel.
-case $kernel-$os in
-	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
-		   | linux-musl* | linux-relibc* | linux-uclibc* )
+case $kernel-$os-$obj in
+	linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
+		    | linux-mlibc*- | linux-musl*- | linux-newlib*- \
+		    | linux-relibc*- | linux-uclibc*- | linux-ohos*- )
+		;;
+	uclinux-uclibc*- | uclinux-gnu*- )
+		;;
+	managarm-mlibc*- | managarm-kernel*- )
 		;;
-	uclinux-uclibc* )
+	windows*-msvc*-)
 		;;
-	-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
+	-dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \
+		    | -uclibc*- )
 		# These are just libc implementations, not actual OSes, and thus
 		# require a kernel.
-		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+		echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
 		exit 1
 		;;
-	kfreebsd*-gnu* | kopensolaris*-gnu*)
+	-kernel*- )
+		echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
+		exit 1
 		;;
-	vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+	*-kernel*- )
+		echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
+		exit 1
 		;;
-	nto-qnx*)
+	*-msvc*- )
+		echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
+		exit 1
 		;;
-	os2-emx)
+	kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-)
+		;;
+	vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
+		;;
+	nto-qnx*-)
 		;;
-	*-eabi* | *-gnueabi*)
+	os2-emx-)
 		;;
-	-*)
+	rtmk-nova-)
+		;;
+	*-eabi*- | *-gnueabi*-)
+		;;
+	none--*)
+		# None (no kernel, i.e. freestanding / bare metal),
+		# can be paired with an machine code file format
+		;;
+	-*-)
 		# Blank kernel with real OS is always fine.
 		;;
-	*-*)
-		echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+	--*)
+		# Blank kernel and OS with real machine code file format is always fine.
+		;;
+	*-*-*)
+		echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
 		exit 1
 		;;
 esac
@@ -1803,7 +2273,7 @@
 			*-riscix*)
 				vendor=acorn
 				;;
-			*-sunos*)
+			*-sunos* | *-solaris*)
 				vendor=sun
 				;;
 			*-cnk* | *-aix*)
@@ -1873,7 +2343,7 @@
 		;;
 esac
 
-echo "$cpu-$vendor-${kernel:+$kernel-}$os"
+echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
 exit
 
 # Local variables:
diff -Nru tomcat-native-1.3.1/native/build/install-sh tomcat-native-1.3.8/native/build/install-sh
--- tomcat-native-1.3.1/native/build/install-sh	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/native/build/install-sh	2026-06-12 05:13:57.000000000 -0300
@@ -0,0 +1,541 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2020-11-14.01; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab='	'
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -p            pass -p to $cpprog.
+  -s            $stripprog installed files.
+  -S SUFFIX     attempt to back up existing files, with suffix SUFFIX.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Email bug reports to bug-automake at gnu.org.
+Automake home page: https://www.gnu.org/software/automake/
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
+
+    -o) chowncmd="$chownprog $2"
+        shift;;
+
+    -p) cpprog="$cpprog -p";;
+
+    -s) stripcmd=$stripprog;;
+
+    -S) backupsuffix="$2"
+        shift;;
+
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
+
+    -T) is_target_a_directory=never;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --) shift
+        break;;
+
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+        u_plus_rw=
+      else
+        u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+        u_plus_rw=
+      else
+        u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+    # Don't chown directories that already exist.
+    if test $dstdir_status = 0; then
+      chowncmd=""
+    fi
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename.
+    if test -d "$dst"; then
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
+      fi
+      dstdir=$dst
+      dstbase=`basename "$src"`
+      case $dst in
+	*/) dst=$dst$dstbase;;
+	*)  dst=$dst/$dstbase;;
+      esac
+      dstdir_status=0
+    else
+      dstdir=`dirname "$dst"`
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  case $dstdir in
+    */) dstdirslash=$dstdir;;
+    *)  dstdirslash=$dstdir/;;
+  esac
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
+
+        posix_mkdir=false
+	# The $RANDOM variable is not portable (e.g., dash).  Use it
+	# here however when possible just to lower collision chance.
+	tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+	trap '
+	  ret=$?
+	  rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+	  exit $ret
+	' 0
+
+	# Because "mkdir -p" follows existing symlinks and we likely work
+	# directly in world-writeable /tmp, make sure that the '$tmpdir'
+	# directory is successfully created first before we actually test
+	# 'mkdir -p'.
+	if (umask $mkdir_umask &&
+	    $mkdirprog $mkdir_mode "$tmpdir" &&
+	    exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+	then
+	  if test -z "$dir_arg" || {
+	       # Check for POSIX incompatibilities with -m.
+	       # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+	       # other-writable bit of parent directory when it shouldn't.
+	       # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+	       test_tmpdir="$tmpdir/a"
+	       ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+	       case $ls_ld_tmpdir in
+		 d????-?r-*) different_mode=700;;
+		 d????-?--*) different_mode=755;;
+		 *) false;;
+	       esac &&
+	       $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+		 ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+		 test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+	       }
+	     }
+	  then posix_mkdir=:
+	  fi
+	  rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+	else
+	  # Remove any dirs left behind by ancient mkdir implementations.
+	  rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+	fi
+	trap '' 0;;
+    esac
+
+    if
+      $posix_mkdir && (
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
+      esac
+
+      oIFS=$IFS
+      IFS=/
+      set -f
+      set fnord $dstdir
+      shift
+      set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+        test X"$d" = X && continue
+
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask $mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=${dstdirslash}_inst.$$_
+    rmtmp=${dstdirslash}_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask &&
+     { test -z "$stripcmd" || {
+	 # Create $dsttmp read-write so that cp doesn't create it read-only,
+	 # which would cause strip to fail.
+	 if test -z "$doit"; then
+	   : >"$dsttmp" # No need to fork-exec 'touch'.
+	 else
+	   $doit touch "$dsttmp"
+	 fi
+       }
+     } &&
+     $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       set +f &&
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # If $backupsuffix is set, and the file being installed
+      # already exists, attempt a backup.  Don't worry if it fails,
+      # e.g., if mv doesn't support -f.
+      if test -n "$backupsuffix" && test -f "$dst"; then
+        $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+      fi
+
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
+
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff -Nru tomcat-native-1.3.1/native/build/tcnative.m4 tomcat-native-1.3.8/native/build/tcnative.m4
--- tomcat-native-1.3.1/native/build/tcnative.m4	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/build/tcnative.m4	2026-06-11 17:01:29.000000000 -0300
@@ -18,7 +18,7 @@
 dnl
 dnl TCN_FIND_APR: figure out where APR is located
 dnl
-AC_DEFUN(TCN_FIND_APR,[
+AC_DEFUN([TCN_FIND_APR],[
 
   dnl use the find_apr.m4 script to locate APR. sets apr_found and apr_config
   APR_FIND_APR(,,1,[1])
@@ -141,20 +141,13 @@
   ])
 ])
 
-dnl TCN_HELP_STRING(LHS, RHS)
-dnl Autoconf 2.50 can not handle substr correctly.  It does have
-dnl AC_HELP_STRING, so let's try to call it if we can.
-dnl Note: this define must be on one line so that it can be properly returned
-dnl as the help string.
-AC_DEFUN(TCN_HELP_STRING,[ifelse(regexp(AC_ACVERSION, 2\.1), -1, AC_HELP_STRING($1,$2),[  ]$1 substr([                       ],len($1))$2)])dnl
-
 dnl
 dnl TCN_CHECK_SSL_TOOLKIT
 dnl
 dnl Configure for the detected openssl toolkit installation, giving
 dnl preference to "--with-ssl=<path>" if it was specified.
 dnl
-AC_DEFUN(TCN_CHECK_SSL_TOOLKIT,[
+AC_DEFUN([TCN_CHECK_SSL_TOOLKIT],[
 AC_MSG_CHECKING(for OpenSSL library)
 AC_ARG_WITH(ssl,
 [  --with-ssl[=PATH]   Build with OpenSSL [yes|no|path]],
@@ -236,12 +229,12 @@
         LIBS="$LIBS $TCN_OPENSSL_LIBS"
 
 AC_ARG_ENABLE(openssl-version-check,
-[AC_HELP_STRING([--disable-openssl-version-check],
+[AS_HELP_STRING([--disable-openssl-version-check],
         [disable the OpenSSL version check])])
 case "$enable_openssl_version_check" in
 yes|'')
         AC_MSG_CHECKING(OpenSSL library version >= 1.1.1)
-        AC_TRY_RUN([
+        AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #include <openssl/opensslv.h>
 int main() {
@@ -252,14 +245,11 @@
     printf("Require OPENSSL_VERSION_NUMBER 0x1010100f or greater (1.1.1)\n\n");
         return (1);
 }
-        ],
-        [AC_MSG_RESULT(ok)],
-        [AC_MSG_ERROR(Your version of OpenSSL is not compatible with this version of tcnative)],
-        [AC_MSG_RESULT(assuming target platform has compatible version)])
-;;
+    ]])],[AC_MSG_RESULT(ok)],[AC_MSG_ERROR(Your version of OpenSSL is not compatible with this version of tcnative)],[AC_MSG_RESULT(assuming target platform has compatible version)])
+    ;;
 no)
     AC_MSG_RESULT(Skipped OpenSSL version check)
-;;
+    ;;
 esac
 
         AC_MSG_CHECKING(for OpenSSL DSA support)
@@ -285,7 +275,7 @@
 dnl
 dnl TCN_FIND_APR_FEATURE: figure out if APR feature is suipported
 dnl
-AC_DEFUN(TCN_FIND_APR_FEATURE,[
+AC_DEFUN([TCN_FIND_APR_FEATURE],[
   saved_cflags="$CFLAGS"
   saved_libs="$LIBS"
   CFLAGS="$CFLAGS $APR_INCLUDES"
diff -Nru tomcat-native-1.3.1/native/buildconf tomcat-native-1.3.8/native/buildconf
--- tomcat-native-1.3.1/native/buildconf	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/buildconf	2026-06-11 17:01:29.000000000 -0300
@@ -70,7 +70,7 @@
 
 echo "Creating configure ..."
 ### do some work to toss config.cache?
-${AUTOCONF:-autoconf}
+${AUTORECONF:-autoreconf} --install --force
 if [ $? -gt 0 ]; then
   echo "autoconf failed"
   exit 1
diff -Nru tomcat-native-1.3.1/native/BUILDING tomcat-native-1.3.8/native/BUILDING
--- tomcat-native-1.3.1/native/BUILDING	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/BUILDING	2026-06-11 17:01:29.000000000 -0300
@@ -83,70 +83,119 @@
 
 1. Prerequisites
 
-   These steps assume a suitable build environment has been set up.
-   https://cwiki.apache.org/confluence/display/TOMCAT/Common+Native+Build+Environment
+   Currently supported Windows OS (release builds use a Windows 2022 VM running
+     on VMware)
+   Currently support JDK installed (release builds use Temurin 21.0.9)
+   git (if you wish to build from source)
+   Perl - see OpenSSL build instructions for Windows (release builds use
+     Strawberry Perl 5.42.0.1)
+   NASM - see OpenSSL build instructions for Windows (release builds use 2.16.01
+     included in Strawberry Perl 5.42.0.1)
+   Microsoft Visual C compiler (release builds use Visual Studio 2022 17.14.23)
    
 2. Obtain tc-native source
 
    Download and expand the source package or use an git checkout
 
-3. Build APR
+3. Build APR (1.7.6 or later)
 
    Unpack the APR source distribution into native\srclib\apr
-   Apply apr-enable-ipv6.patch
    
-   > c:\cmsc\setenv.bat x86 
-   > nmake -f NMAKEmakefile BUILD_CPU=x86 APR_DECLARE_STATIC=1
-   > mkdir WINXP_X86_LIB_RELEASE\include
-   > mkdir WINXP_X86_LIB_RELEASE\lib
-   > xcopy /E include WINXP_X86_LIB_RELEASE\include\
-   > copy WINXP_X86_LIB_RELEASE\apr-1.lib WINXP_X86_LIB_RELEASE\lib
-   
-   > c:\cmsc\setenv.bat x64
-   > nmake -f NMAKEmakefile BUILD_CPU=x64 APR_DECLARE_STATIC=1
-   > mkdir WINXP_X64_LIB_RELEASE\include
-   > mkdir WINXP_X64_LIB_RELEASE\lib
-   > xcopy /E include WINXP_X64_LIB_RELEASE\include\
-   > copy WINXP_X64_LIB_RELEASE\apr-1.lib WINXP_X64_LIB_RELEASE\lib
-   
-4. Build OpenSSL
+   > "c:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
+   > nmake -f NMAKEmakefile CPU=X86 APR_DECLARE_STATIC=1
 
-   Unpack the OpenSSL source distribution into native\srclib\openssl
-   Apply openssl-msvcrt-3.0.x.patch
-   
-   > c:\cmsc\setenv.bat x86
-   > perl Configure VC-WIN32
-   > ms\do_nasm
-   > nmake -f ms\nt.mak
-   > mkdir release-x86
-   > mkdir release-x86\include
-   > mkdir release-x86\lib
-   > xcopy /E inc32 release-x86\include\
-   > copy out32\*.lib release-x86\lib\
- 
-   > c:\cmsc\setenv.bat x64
-   > perl Configure VC-WIN64A
-   > ms\do_win64a
-   > nmake -f ms\nt.mak clean
-   > nmake -f ms\nt.mak
-   > mkdir release-x64
-   > mkdir release-x64\include
-   > mkdir release-x64\lib
-   > xcopy /E inc32 release-x64\include\
-   > copy out32\*.lib release-x64\lib\
+   > "c:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
+   > nmake -f NMAKEmakefile CPU=X64 APR_DECLARE_STATIC=1
 
-5. Build tc-native
+4. Build OpenSSL (3.0.18 or later)
 
-   > SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_71
+   > cd ..\openssl
+
+   Unpack the OpenSSL 3.0.x source distribution in this directory
+
+   > "c:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
+   > perl Configure no-shared VC-WIN32
+   > nmake
+   > mkdir out32-x86
+   > copy libssl.lib out32-x86\
+   > copy libcrypto.lib out32-x86\
+   > copy ossl_static.pdb out32-x86\
+   > copy apps\openssl.exe out32-x86\
+
+   > nmake clean
+
+   > "c:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
+   > perl Configure no-shared VC-WIN64A
+   > nmake
+   > mkdir out32-x64
+   > copy libssl.lib out32-x64\
+   > copy libcrypto.lib out32-x64\
+   > copy ossl_static.pdb out32-x64\
+   > copy apps\openssl.exe out32-x64\
+
+5. Copy APR and OpenSSL to versioned directories
+
+   Keeping the various libraries in versioned directories saves having to
+   rebuild them next time if the version remains unchanged.
+
+   > cd ..
+   > set OPENSSL_VER=3.0.18
+   > set APR_VER=1.7.6
+
+   > mkdir \deps-x86\apr-%APR_VER%\include
+   > mkdir \deps-x86\apr-%APR_VER%\lib
+   > mkdir \deps-x86\openssl-%OPENSSL_VER%\include
+   > mkdir \deps-x86\openssl-%OPENSSL_VER%\lib
+   > xcopy /E \deps-x86\apr-%APR_VER% \deps-x64\apr-%APR_VER%\
+   > xcopy /E \deps-x86\openssl-%OPENSSL_VER% \deps-x64\openssl-%OPENSSL_VER%\
 
-   > c:\cmsc\setenv.bat x86
-   > nmake -f NMAKEMakefile WITH_APR=srclib\apr\WINXP_X86_LIB_RELEASE WITH_OPENSSL=srclib\openssl\release-x86 APR_DECLARE_STATIC=1
- 
-   > c:\cmsc\setenv.bat x64
-   > nmake -f NMAKEMakefile WITH_APR=srclib\apr\WINXP_X64_LIB_RELEASE WITH_OPENSSL=srclib\openssl\release-x64 APR_DECLARE_STATIC=1
- 
-   Note: Use ENABLE_OCSP=1 to create OCSP enabled builds
+   > xcopy /E apr\include \deps-x86\apr-%APR_VER%\include\
+   > xcopy /E apr\include \deps-x64\apr-%APR_VER%\include\
 
+   > copy apr\WIN7_X86_LIB_RELEASE\apr-1.lib \deps-x86\apr-%APR_VER%\lib
+   > copy apr\WIN7_X64_LIB_RELEASE\apr-1.lib \deps-x64\apr-%APR_VER%\lib
+   
+   > xcopy /E openssl\include\openssl \deps-x86\openssl-%OPENSSL_VER%\include\openssl\
+   > xcopy /E openssl\include\openssl \deps-x64\openssl-%OPENSSL_VER%\include\openssl\
+   > copy openssl\out32-x86\*.lib \deps-x86\openssl-%OPENSSL_VER%\lib\
+   > copy openssl\out32-x64\*.lib \deps-x64\openssl-%OPENSSL_VER%\lib\
+   > copy openssl\out32-x86\*.pdb \deps-x86\openssl-%OPENSSL_VER%\lib\
+   > copy openssl\out32-x64\*.pdb \deps-x64\openssl-%OPENSSL_VER%\lib\
+   > copy openssl\out32-x86\openssl.exe \deps-x86\openssl-%OPENSSL_VER%\
+   > copy openssl\out32-x64\openssl.exe \deps-x64\openssl-%OPENSSL_VER%\
+
+6. Build Tomcat Native
+
+   > cd ..
+   >set JAVA_HOME=C:\java\21.0.9-tem
+
+   > "c:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
+   > nmake -f NMAKEMakefile WITH_APR=C:\deps-x86\apr-%APR_VER% WITH_OPENSSL=C:\deps-x86\openssl-%OPENSSL_VER% CPU=X86 APR_DECLARE_STATIC=1 STATIC_CRT=Hybrid
+
+   > "c:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
+   > nmake -f NMAKEMakefile WITH_APR=C:\deps-x64\apr-%APR_VER% WITH_OPENSSL=C:\deps-x64\openssl-%OPENSSL_VER% CPU=X64 APR_DECLARE_STATIC=1 STATIC_CRT=Hybrid
+
+   Tomcat Native Connector DLLs may then be found in native\WIN7_*_DLL_RELEASE
+
+7. Construct the binary distributions ? ?
+
+   > set VER=1.3.2
+   >?mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin
+   >?copy LICENSE.bin.win tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\LICENSE
+   > copy NOTICE.bin.win tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\NOTICE
+   > copy ..\README.txt tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\
+   > copy srclib\VERSIONS tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\
+   >?mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
+   >?mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin\x64
+   >?copy C:\deps-x86\openssl-%OPENSSL_VER%\openssl.exe tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
+   > copy WIN7_X86_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
+   > copy WIN7_X86_DLL_RELEASE\tcnative-1.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
+   > copy WIN7_X64_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin\x64
+   > copy WIN7_X64_DLL_RELEASE\tcnative-1.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin\x64
+ 
+   >?set PATH=%PATH%;%JAVA_HOME%\bin
+   >?cd tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin
+   >?jar -cMf ..\tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin.zip *
 
 FIPS
 ====
diff -Nru tomcat-native-1.3.1/native/configure tomcat-native-1.3.8/native/configure
--- tomcat-native-1.3.1/native/configure	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/native/configure	2026-06-12 05:13:57.000000000 -0300
@@ -612,7 +612,7 @@
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
-ac_unique_file="configure.in"
+ac_unique_file="configure.ac"
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
 INCLUDE_OUTPUTS
@@ -2460,7 +2460,6 @@
 
 
 
-
   rm -f config.nice
   cat >config.nice<<EOF
 #! /bin/sh
@@ -2653,7 +2652,6 @@
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
 
-
   # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -4497,11 +4495,11 @@
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-;;
+    ;;
 no)
     { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Skipped OpenSSL version check" >&5
 printf "%s\n" "Skipped OpenSSL version check" >&6; }
-;;
+    ;;
 esac
 
         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL DSA support" >&5
@@ -6033,4 +6031,3 @@
 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
-
diff -Nru tomcat-native-1.3.1/native/configure.ac tomcat-native-1.3.8/native/configure.ac
--- tomcat-native-1.3.1/native/configure.ac	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/native/configure.ac	2026-06-11 17:01:29.000000000 -0300
@@ -0,0 +1,283 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+dnl
+dnl Process this file with autoconf to produce a configure script
+dnl
+
+AC_PREREQ(2.68)
+AC_INIT(configure.ac)
+
+AC_CONFIG_AUX_DIR(build)
+
+sinclude(build/apr_common.m4)
+sinclude(build/tcnative.m4)
+sinclude(build/find_apr.m4)
+
+dnl Generate ./config.nice for reproducing runs of configure
+dnl
+APR_CONFIG_NICE(config.nice)
+
+dnl # Some initial steps for configuration.  We setup the default directory
+dnl # and which files are to be configured.
+
+dnl Absolute source/build directory
+abs_srcdir=`(cd $srcdir && pwd)`
+abs_builddir=`pwd`
+
+if test "$abs_builddir" != "$abs_srcdir"; then
+  USE_VPATH=1
+  TCN_CONFIG_LOCATION=build
+else
+  TCN_CONFIG_LOCATION=source
+fi
+
+AC_SUBST(TCN_CONFIG_LOCATION)
+AC_CANONICAL_TARGET
+AC_PROG_INSTALL
+
+dnl
+dnl compute the top directory of the build
+dnl note: this is needed for LIBTOOL and exporting the bundled Expat
+dnl
+top_builddir="$abs_builddir"
+AC_SUBST(top_builddir)
+AC_SUBST(abs_srcdir)
+AC_SUBST(abs_builddir)
+
+dnl Initialize mkdir -p functionality.
+APR_MKDIR_P_CHECK($abs_srcdir/build/mkdir.sh)
+
+dnl get our version information
+get_version="$abs_srcdir/build/get-version.sh"
+version_hdr="$abs_srcdir/include/tcn_version.h"
+TCNATIVE_MAJOR_VERSION="`$get_version major $version_hdr TCN`"
+TCNATIVE_DOTTED_VERSION="`$get_version all $version_hdr TCN`"
+TCNATIVE_LIBTOOL_VERSION="`$get_version libtool $version_hdr TCN`"
+
+AC_SUBST(TCNATIVE_DOTTED_VERSION)
+AC_SUBST(TCNATIVE_MAJOR_VERSION)
+AC_SUBST(TCNATIVE_LIBTOOL_VERSION)
+
+echo "Tomcat Native Version: ${TCNATIVE_DOTTED_VERSION}"
+
+dnl Enable the layout handling code, then reparse the prefix-style
+dnl arguments due to autoconf being a PITA.
+APR_ENABLE_LAYOUT(tcnative)
+APR_PARSE_ARGUMENTS
+
+dnl
+dnl set up the compilation flags and stuff
+dnl
+
+TCNATIVE_INCLUDES=""
+TCNATIVE_PRIV_INCLUDES="-I$srcdir/include"
+
+dnl
+dnl Find the APR includes directory and (possibly) the source (base) dir.
+dnl
+TCN_FIND_APR
+
+dnl
+dnl even though we use apr_rules.mk for building apr-util, we need
+dnl to grab CC and CPP ahead of time so that apr-util config tests
+dnl use the same compiler as APR; we need the same compiler options
+dnl and feature test macros as well
+dnl
+APR_SETIFNULL(CC, `$apr_config --cc`)
+APR_SETIFNULL(CPP, `$apr_config --cpp`)
+
+AC_PROG_INSTALL
+
+dnl
+dnl  Find the JVM related information
+dnl
+NEED_JNI_MD=yes
+TCN_FIND_JAVA
+
+dnl MAC OS X does not used include but Headers
+if test -d ${JAVA_HOME}/Headers; then
+  JAVA_INC=Headers
+else
+  JAVA_INC=include
+fi
+APR_ADDTO(TCNATIVE_PRIV_INCLUDES,[-I$JAVA_HOME/$JAVA_INC])
+
+dnl sableVM does not have/need $JAVA_OS/jni_md.h
+if test "$NEED_JNI_MD" = "yes"; then
+  TCN_FIND_JDK_OS
+  if test -z "${JAVA_OS}"; then
+    AC_MSG_RESULT([jni_md.h found in $JAVA_HOME/$JAVA_INC])
+  else
+    APR_ADDTO(TCNATIVE_PRIV_INCLUDES,[-I$JAVA_HOME/$JAVA_INC/$JAVA_OS])
+  fi
+fi
+
+AC_SUBST(JAVA_HOME)
+AC_SUBST(JAVA_OS)
+
+
+dnl
+dnl Detect openssl toolkit installation
+dnl
+
+use_openssl=true;
+
+AC_ARG_ENABLE(openssl,
+[AS_HELP_STRING([--disable-openssl],[avoid using OpenSSL toolkit])],
+[
+  case "${enableval}" in
+    no )
+       use_openssl=false;
+       AC_MSG_RESULT([Disabling SSL support...])
+       ;;
+  esac
+])
+
+AC_ARG_ENABLE(insecure-export-ciphers,
+[AS_HELP_STRING([--enable-insecure-export-ciphers],[allow including insecure export and null ciphers in the cipher string (default is disabled=not allowed)])],
+[
+  case "${enableval}" in
+    yes )
+       APR_ADDTO(CFLAGS, [-DHAVE_EXPORT_CIPHERS])
+       AC_MSG_WARN([Enabling insecure export and null cipher support])
+       ;;
+  esac
+])
+
+if $use_openssl ; then
+  TCN_CHECK_SSL_TOOLKIT
+fi
+
+so_ext=$APR_SO_EXT
+lib_target=$APR_LIB_TARGET
+AC_SUBST(so_ext)
+AC_SUBST(lib_target)
+
+TCNATIVE_LIBNAME="tcnative${libsuffix}"
+AC_SUBST(TCNATIVE_LIBNAME)
+
+EXTRA_OS_LINK=""
+host_alias=`uname -s`
+case "$host_alias" in
+    dnl ### BeOS requires that ALL symbols resolve at LINK time!
+    dnl ###
+    dnl ### So, if we're building on BeOS then we need to add in the
+    dnl ### apr and expat libraries to the build or it'll die a truly horrible
+    dnl ### death. We now use the apr-config tool to determine the correct
+    dnl ### library to link against :)
+*AIX*|*Darwin*|*BeOS*)
+    dnl need such stuff as -liconv to be specified when building libaprutil.la
+    EXTRA_OS_LINK='$(TCNATIVE_LDFLAGS) $(TCNATIVE_LIBS)'
+    ;;
+*)
+    ;;
+esac
+
+AC_SUBST(EXTRA_OS_LINK)
+
+dnl CFLAGS for maintainer mode
+dnl it also allows the CFLAGS environment variable.
+CFLAGS="${CFLAGS}"
+AC_ARG_ENABLE(maintainer-mode,
+[AS_HELP_STRING([--enable-maintainer-mode],[Turn on debugging and compile time warnings])],
+[
+  case "${enableval}" in
+    yes )
+       if test "$GCC" = "yes"; then
+         CFLAGS="${CFLAGS} -DDEBUG -Wall"
+       else
+         CFLAGS="${CFLAGS} -DDEBUG"
+       fi
+       AC_MSG_RESULT([...Enabling Maintainer mode...])
+       ;;
+  esac
+])
+
+dnl
+dnl Prep all the flags and stuff for compilation and export to other builds
+dnl
+APR_ADDTO(TCNATIVE_LIBS, [$LIBS])
+APR_ADDTO(TCNATIVE_LIBS, [$APR_LIBTOOL_LIBS])
+APR_ADDTO(TCNATIVE_LDFLAGS, [$LDFLAGS])
+
+# Link libkstat for Solaris
+case $host in
+    *-solaris2*)
+        APR_ADDTO(TCNATIVE_LIBS, -lkstat)
+        ;;
+    *linux*)
+        APR_ADDTO(CFLAGS, -DTCNATIVE_LINUX)
+        ;;
+    *)
+        ;;
+esac
+
+TCN_FIND_APR_FEATURE([apr_pollset_wakeup],[POLLSET_WAKEUP])
+
+AC_SUBST(TCNATIVE_EXPORT_LIBS)
+AC_SUBST(TCNATIVE_PRIV_INCLUDES)
+AC_SUBST(TCNATIVE_INCLUDES)
+AC_SUBST(TCNATIVE_LDFLAGS)
+AC_SUBST(TCNATIVE_LIBS)
+AC_SUBST(CFLAGS)
+AC_SUBST(CPPFLAGS)
+
+dnl copy apr's rules.mk into our build directory.
+if test ! -d ./build; then
+   $mkdir_p build
+fi
+cp $APR_BUILD_DIR/apr_rules.mk $abs_builddir/build/rules.mk
+
+
+dnl
+dnl BSD/OS (BSDi) needs to use a different include syntax in the Makefiles
+dnl
+case "$host_alias" in
+*bsdi* | BSD/OS)
+    # Check whether they've installed GNU make
+    if make --version > /dev/null 2>&1; then
+        INCLUDE_RULES="include $abs_builddir/build/rules.mk"
+        INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk"
+    else
+        INCLUDE_RULES=".include \"$abs_builddir/build/rules.mk\""
+        INCLUDE_OUTPUTS=".include \"$abs_srcdir/build-outputs.mk\""
+    fi
+    ;;
+*)
+    INCLUDE_RULES="include $abs_builddir/build/rules.mk"
+    INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk"
+    ;;
+esac
+
+AC_SUBST(INCLUDE_RULES)
+AC_SUBST(INCLUDE_OUTPUTS)
+
+if test -d $srcdir/test; then
+    test_Makefile="test/Makefile"
+fi
+
+dnl
+dnl everything is done.
+MAKEFILES="Makefile"
+AC_CONFIG_FILES([
+    $MAKEFILES
+	])
+AC_CONFIG_COMMANDS([default],[
+TCNATIVE_MAJOR_VERSION=$TCNATIVE_MAJOR_VERSION
+],[])
+AC_OUTPUT
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/native/configure.in tomcat-native-1.3.8/native/configure.in
--- tomcat-native-1.3.1/native/configure.in	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/configure.in	1969-12-31 21:00:00.000000000 -0300
@@ -1,281 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-dnl
-dnl Process this file with autoconf to produce a configure script
-dnl
-
-AC_PREREQ(2.50)
-AC_INIT(configure.in)
-
-AC_CONFIG_AUX_DIR(build)
-
-sinclude(build/apr_common.m4)
-sinclude(build/tcnative.m4)
-sinclude(build/find_apr.m4)
-
-dnl Generate ./config.nice for reproducing runs of configure
-dnl
-APR_CONFIG_NICE(config.nice)
-
-dnl # Some initial steps for configuration.  We setup the default directory
-dnl # and which files are to be configured.
-
-dnl Absolute source/build directory
-abs_srcdir=`(cd $srcdir && pwd)`
-abs_builddir=`pwd`
-
-if test "$abs_builddir" != "$abs_srcdir"; then
-  USE_VPATH=1
-  TCN_CONFIG_LOCATION=build
-else
-  TCN_CONFIG_LOCATION=source
-fi
-
-AC_SUBST(TCN_CONFIG_LOCATION)
-AC_CANONICAL_SYSTEM
-AC_PROG_INSTALL
-
-dnl
-dnl compute the top directory of the build
-dnl note: this is needed for LIBTOOL and exporting the bundled Expat
-dnl
-top_builddir="$abs_builddir"
-AC_SUBST(top_builddir)
-AC_SUBST(abs_srcdir)
-AC_SUBST(abs_builddir)
-
-dnl Initialize mkdir -p functionality.
-APR_MKDIR_P_CHECK($abs_srcdir/build/mkdir.sh)
-
-dnl get our version information
-get_version="$abs_srcdir/build/get-version.sh"
-version_hdr="$abs_srcdir/include/tcn_version.h"
-TCNATIVE_MAJOR_VERSION="`$get_version major $version_hdr TCN`"
-TCNATIVE_DOTTED_VERSION="`$get_version all $version_hdr TCN`"
-TCNATIVE_LIBTOOL_VERSION="`$get_version libtool $version_hdr TCN`"
-
-AC_SUBST(TCNATIVE_DOTTED_VERSION)
-AC_SUBST(TCNATIVE_MAJOR_VERSION)
-AC_SUBST(TCNATIVE_LIBTOOL_VERSION)
-
-echo "Tomcat Native Version: ${TCNATIVE_DOTTED_VERSION}"
-
-dnl Enable the layout handling code, then reparse the prefix-style
-dnl arguments due to autoconf being a PITA.
-APR_ENABLE_LAYOUT(tcnative)
-APR_PARSE_ARGUMENTS
-
-dnl
-dnl set up the compilation flags and stuff
-dnl
-
-TCNATIVE_INCLUDES=""
-TCNATIVE_PRIV_INCLUDES="-I$srcdir/include"
-
-dnl
-dnl Find the APR includes directory and (possibly) the source (base) dir.
-dnl
-TCN_FIND_APR
-
-dnl
-dnl even though we use apr_rules.mk for building apr-util, we need
-dnl to grab CC and CPP ahead of time so that apr-util config tests
-dnl use the same compiler as APR; we need the same compiler options
-dnl and feature test macros as well
-dnl
-APR_SETIFNULL(CC, `$apr_config --cc`)
-APR_SETIFNULL(CPP, `$apr_config --cpp`)
-
-AC_PROG_INSTALL
-
-dnl
-dnl  Find the JVM related information
-dnl
-NEED_JNI_MD=yes
-TCN_FIND_JAVA
-
-dnl MAC OS X does not used include but Headers
-if test -d ${JAVA_HOME}/Headers; then
-  JAVA_INC=Headers
-else
-  JAVA_INC=include
-fi
-APR_ADDTO(TCNATIVE_PRIV_INCLUDES,[-I$JAVA_HOME/$JAVA_INC])
-
-dnl sableVM does not have/need $JAVA_OS/jni_md.h
-if test "$NEED_JNI_MD" = "yes"; then
-  TCN_FIND_JDK_OS
-  if test -z "${JAVA_OS}"; then
-    AC_MSG_RESULT([jni_md.h found in $JAVA_HOME/$JAVA_INC])
-  else
-    APR_ADDTO(TCNATIVE_PRIV_INCLUDES,[-I$JAVA_HOME/$JAVA_INC/$JAVA_OS])
-  fi
-fi
-
-AC_SUBST(JAVA_HOME)
-AC_SUBST(JAVA_OS)
-
-
-dnl
-dnl Detect openssl toolkit installation
-dnl
-
-use_openssl=true;
-
-AC_ARG_ENABLE(openssl,
-[AS_HELP_STRING([--disable-openssl],[avoid using OpenSSL toolkit])],
-[
-  case "${enableval}" in
-    no )
-       use_openssl=false;
-       AC_MSG_RESULT([Disabling SSL support...])
-       ;;
-  esac
-])
-
-AC_ARG_ENABLE(insecure-export-ciphers,
-[AS_HELP_STRING([--enable-insecure-export-ciphers],[allow including insecure export and null ciphers in the cipher string (default is disabled=not allowed)])],
-[
-  case "${enableval}" in
-    yes )
-       APR_ADDTO(CFLAGS, [-DHAVE_EXPORT_CIPHERS])
-       AC_MSG_WARN([Enabling insecure export and null cipher support])
-       ;;
-  esac
-])
-
-if $use_openssl ; then
-  TCN_CHECK_SSL_TOOLKIT
-fi
-
-so_ext=$APR_SO_EXT
-lib_target=$APR_LIB_TARGET
-AC_SUBST(so_ext)
-AC_SUBST(lib_target)
-
-TCNATIVE_LIBNAME="tcnative${libsuffix}"
-AC_SUBST(TCNATIVE_LIBNAME)
-
-EXTRA_OS_LINK=""
-host_alias=`uname -s`
-case "$host_alias" in
-    dnl ### BeOS requires that ALL symbols resolve at LINK time!
-    dnl ###
-    dnl ### So, if we're building on BeOS then we need to add in the
-    dnl ### apr and expat libraries to the build or it'll die a truly horrible
-    dnl ### death. We now use the apr-config tool to determine the correct
-    dnl ### library to link against :)
-*AIX*|*Darwin*|*BeOS*)
-    dnl need such stuff as -liconv to be specified when building libaprutil.la
-    EXTRA_OS_LINK='$(TCNATIVE_LDFLAGS) $(TCNATIVE_LIBS)'
-    ;;
-*)
-    ;;
-esac
-
-AC_SUBST(EXTRA_OS_LINK)
-
-dnl CFLAGS for maintainer mode
-dnl it also allows the CFLAGS environment variable.
-CFLAGS="${CFLAGS}"
-AC_ARG_ENABLE(maintainer-mode,
-[AS_HELP_STRING([--enable-maintainer-mode],[Turn on debugging and compile time warnings])],
-[
-  case "${enableval}" in
-    yes )
-       if test "$GCC" = "yes"; then
-         CFLAGS="${CFLAGS} -DDEBUG -Wall"
-       else
-         CFLAGS="${CFLAGS} -DDEBUG"
-       fi
-       AC_MSG_RESULT([...Enabling Maintainer mode...])
-       ;;
-  esac
-])
-
-dnl
-dnl Prep all the flags and stuff for compilation and export to other builds
-dnl
-APR_ADDTO(TCNATIVE_LIBS, [$LIBS])
-APR_ADDTO(TCNATIVE_LIBS, [$APR_LIBTOOL_LIBS])
-APR_ADDTO(TCNATIVE_LDFLAGS, [$LDFLAGS])
-
-# Link libkstat for Solaris
-case $host in
-    *-solaris2*)
-        APR_ADDTO(TCNATIVE_LIBS, -lkstat)
-        ;;
-    *linux*)
-        APR_ADDTO(CFLAGS, -DTCNATIVE_LINUX)
-        ;;
-    *)
-        ;;
-esac
-
-TCN_FIND_APR_FEATURE([apr_pollset_wakeup],[POLLSET_WAKEUP])
-
-AC_SUBST(TCNATIVE_EXPORT_LIBS)
-AC_SUBST(TCNATIVE_PRIV_INCLUDES)
-AC_SUBST(TCNATIVE_INCLUDES)
-AC_SUBST(TCNATIVE_LDFLAGS)
-AC_SUBST(TCNATIVE_LIBS)
-AC_SUBST(CFLAGS)
-AC_SUBST(CPPFLAGS)
-
-dnl copy apr's rules.mk into our build directory.
-if test ! -d ./build; then
-   $mkdir_p build
-fi
-cp $APR_BUILD_DIR/apr_rules.mk $abs_builddir/build/rules.mk
-
-
-dnl
-dnl BSD/OS (BSDi) needs to use a different include syntax in the Makefiles
-dnl
-case "$host_alias" in
-*bsdi* | BSD/OS)
-    # Check whether they've installed GNU make
-    if make --version > /dev/null 2>&1; then
-        INCLUDE_RULES="include $abs_builddir/build/rules.mk"
-        INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk"
-    else
-        INCLUDE_RULES=".include \"$abs_builddir/build/rules.mk\""
-        INCLUDE_OUTPUTS=".include \"$abs_srcdir/build-outputs.mk\""
-    fi
-    ;;
-*)
-    INCLUDE_RULES="include $abs_builddir/build/rules.mk"
-    INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk"
-    ;;
-esac
-
-AC_SUBST(INCLUDE_RULES)
-AC_SUBST(INCLUDE_OUTPUTS)
-
-if test -d $srcdir/test; then
-    test_Makefile="test/Makefile"
-fi
-
-dnl
-dnl everything is done.
-MAKEFILES="Makefile"
-AC_OUTPUT([
-    $MAKEFILES
-	],[
-TCNATIVE_MAJOR_VERSION=$TCNATIVE_MAJOR_VERSION
-])
diff -Nru tomcat-native-1.3.1/native/include/ssl_private.h tomcat-native-1.3.8/native/include/ssl_private.h
--- tomcat-native-1.3.1/native/include/ssl_private.h	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/include/ssl_private.h	2026-06-11 17:01:29.000000000 -0300
@@ -212,12 +212,32 @@
 #define HAVE_ECC
 #endif
 
-/* OCSP stapling */
+/* OCSP */
 #if !defined(OPENSSL_NO_OCSP) && defined(SSL_CTX_set_tlsext_status_cb)
 #define HAVE_OCSP
-#define OCSP_STATUS_OK        0
-#define OCSP_STATUS_REVOKED   1
-#define OCSP_STATUS_UNKNOWN   2
+#define OCSP_STATUS_OK              0
+#define OCSP_STATUS_REVOKED         1
+#define OCSP_STATUS_UNKNOWN         2
+#define OCSP_NO_CHECK_DEFAULT       1
+#define OCSP_SOFT_FAIL_DEFAULT      1
+#define OCSP_VERIFY_FLAGS_DEFAULT   0
+/* 15 minutes - aligns with JSSE */
+#define OCSP_MAX_SKEW             900
+/* 15 seconds - aligns with JSSE*/
+#define OCSP_TIMEOUT_DEFAULT 15000000
+/* Older versions of OpenSSL have a smaller range of OCSP error codes*/
+#if !defined(X509_V_ERR_OCSP_RESP_INVALID)
+#define X509_V_ERR_OCSP_RESP_INVALID      96
+#endif
+#if !defined(X509_V_ERR_OCSP_SIGNATURE_FAILURE)
+#define X509_V_ERR_OCSP_SIGNATURE_FAILURE 97
+#endif
+#if !defined(X509_V_ERR_OCSP_NOT_YET_VALID)
+#define X509_V_ERR_OCSP_NOT_YET_VALID     98
+#endif
+#if !defined(X509_V_ERR_OCSP_HAS_EXPIRED)
+#define X509_V_ERR_OCSP_HAS_EXPIRED       99
+#endif
 #endif
 
 #endif /* !defined(OPENSSL_NO_TLSEXT) && defined(SSL_set_tlsext_host_name) */
@@ -296,6 +316,9 @@
     int             alpn_selector_failure_behavior;
     /* End add from netty-tcnative */
     int             no_ocsp_check;
+    int             ocsp_soft_fail;
+    int             ocsp_timeout;
+    int             ocsp_verify_flags;
 };
 
 #ifdef HAVE_SSL_CONF_CMD
@@ -304,7 +327,10 @@
 struct tcn_ssl_conf_ctxt_t {
     apr_pool_t      *pool;
     SSL_CONF_CTX    *cctx;
-    int     no_ocsp_check;
+    int             no_ocsp_check;
+    int             ocsp_soft_fail;
+    int             ocsp_timeout;
+    int             ocsp_verify_flags;
 };
 #endif
 
diff -Nru tomcat-native-1.3.1/native/include/tcn_version.h tomcat-native-1.3.8/native/include/tcn_version.h
--- tomcat-native-1.3.1/native/include/tcn_version.h	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/include/tcn_version.h	2026-06-11 17:01:29.000000000 -0300
@@ -63,7 +63,7 @@
 #define TCN_MINOR_VERSION       3
 
 /** patch level */
-#define TCN_PATCH_VERSION       1
+#define TCN_PATCH_VERSION       8
 
 /**
  *  This symbol is defined for internal, "development" copies of TCN. This
diff -Nru tomcat-native-1.3.1/native/NMAKEmakefile tomcat-native-1.3.8/native/NMAKEmakefile
--- tomcat-native-1.3.1/native/NMAKEmakefile	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/NMAKEmakefile	2026-06-11 17:01:29.000000000 -0300
@@ -18,9 +18,9 @@
 # NMAKEmakefile   Tomcat Native makefile.
 # Usage:
 #                 APR_DECLARE_STATIC=1  Use static version of the APR
-#                 ENABLE_OCSP=1  	    Enable OpenSSL OCSP code
-#                 OPENSSL_NEW_LIBS=1    Use new OpenSSL lib file names
-#                 DEBUG=1   		    Build DEBUG version of TCN
+#                 DISABLE_OCSP=1        Disable OpenSSL OCSP code
+#                 DEBUG=1               Build DEBUG version of TCN
+#                 STATIC_CRT=Hybrid     Build using the 'Hybrid CRT' technique
 #
 # Originally contributed by Mladen Turk <mturk redhat.com>
 #
@@ -42,7 +42,7 @@
 CFLAGS = $(CFLAGS) -DAPR_DECLARE_STATIC
 APR_LIB = apr-1.lib
 !ENDIF
-!IF !DEFINED(ENABLE_OCSP)
+!IF DEFINED(DISABLE_OCSP)
 CFLAGS = $(CFLAGS) -DOPENSSL_NO_OCSP
 !ENDIF
 
@@ -70,17 +70,8 @@
 !ENDIF
 
 LFLAGS = $(LFLAGS) /version:1.3
-LFLAGS = $(LFLAGS) user32.lib psapi.lib gdi32.lib shlwapi.lib wldap32.lib ole32.lib
-LFLAGS = $(LFLAGS) $(APR_LIB)
-!IF DEFINED(WITH_FIPS)
-LFLAGS = $(LFLAGS) libeayfips32.lib libeaycompat32.lib ssleay32.lib /NODEFAULTLIB:LIBCMT
-!ELSE
-!IF DEFINED(OPENSSL_NEW_LIBS)
-LFLAGS = $(LFLAGS) libssl.lib libcrypto.lib crypt32.lib
-!ELSE
-LFLAGS = $(LFLAGS) libeay32.lib ssleay32.lib
-!ENDIF
-!ENDIF
+LIBS = $(LIBS) user32.lib gdi32.lib psapi.lib shlwapi.lib $(APR_LIB)
+LIBS = $(LIBS) libssl.lib libcrypto.lib crypt32.lib
 
 CFLAGS = $(CFLAGS) -DZLIB_WINAPI -DNO_IDEA -DNO_RC5 -DNO_MDC2 -DOPENSSL_NO_IDEA \
 	-DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DHAVE_OPENSSL -DHAVE_SSL_SET_STATE=1
@@ -117,16 +108,8 @@
 	$(WORKDIR)\ntpipe.obj \
 	$(WORKDIR)\registry.obj \
 	$(WORKDIR)\system.obj
-!IF DEFINED(WITH_FIPS)
-OBJECTS = $(OBJECTS) srclib\openssl\tmp32\fips_premain.obj
-!ENDIF
 
-!IF DEFINED(WITH_FIPS)
-FIPS_OPTS = /map
-LINK_WRAPPER = perl $(FIPSDIR)\bin\fipslink.pl
-!ELSE
 LINK_WRAPPER = $(LINK)
-!ENDIF
 
 HEADERS = \
 	$(SRCDIR)\include\tcn.h \
@@ -164,7 +147,7 @@
   SET FIPS_LINK=$(LINK)
   SET FIPS_CC=$(CC)
   SET FIPS_CC_ARGS=/Fosrclib\openssl\tmp32\fips_premain.obj /MD -c
-  SET PREMAIN_DSO_EXE=srclib\openssl\\out32\fips_premain_dso.exe
+  SET PREMAIN_DSO_EXE=srclib\openssl\out32\fips_premain_dso.exe
   SET FIPS_TARGET=$(BUILDBIN)
   SET FIPS_SHA1_EXE=$(FIPSDIR)\bin\fips_standalone_sha1.exe
   SET FIPSLIB_D=$(FIPSDIR)\lib
diff -Nru tomcat-native-1.3.1/native/NMAKEmakefile.inc tomcat-native-1.3.8/native/NMAKEmakefile.inc
--- tomcat-native-1.3.1/native/NMAKEmakefile.inc	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/NMAKEmakefile.inc	2026-06-11 17:01:29.000000000 -0300
@@ -256,7 +256,7 @@
 !ENDIF
 
 # Linker section
-LIBS = kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib
+LIBS = kernel32.lib advapi32.lib ws2_32.lib ole32.lib shell32.lib rpcrt4.lib
 # Extra libs from command line or env
 !IF DEFINED(EXTRA_LIBS)
 LIBS = $(LIBS) $(EXTRA_LIBS)
@@ -276,6 +276,9 @@
 OPT_LFLAGS = /INCREMENTAL:NO /DEBUG
 !IF "$(BUILD)" == "RELEASE"
 OPT_LFLAGS = /OPT:REF
+!IF DEFINED(STATIC_CRT) && "$(STATIC_CRT)" == "Hybrid"
+OPT_LFLAGS = $(OPT_LFLAGS) /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib
+!ENDIF
 !ENDIF
 
 !IF "$(TARGET)" == "EXE"
diff -Nru tomcat-native-1.3.1/native/NOTICE.bin.win tomcat-native-1.3.8/native/NOTICE.bin.win
--- tomcat-native-1.3.1/native/NOTICE.bin.win	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/NOTICE.bin.win	2026-06-11 17:01:29.000000000 -0300
@@ -1,5 +1,5 @@
 Apache Tomcat Native Library
-Copyright 2002-2024 The Apache Software Foundation
+Copyright 2002-2026 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
@@ -17,4 +17,4 @@
 Eric Young (eay at cryptsoft.com)
 
 This product includes software written by
-Tim Hudson (tjh at cryptsoft.com)
\ Nenhum caractere de nova linha no final do arquivo
+Tim Hudson (tjh at cryptsoft.com)
diff -Nru tomcat-native-1.3.1/native/os/win32/libtcnative.rc tomcat-native-1.3.8/native/os/win32/libtcnative.rc
--- tomcat-native-1.3.1/native/os/win32/libtcnative.rc	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/os/win32/libtcnative.rc	2026-06-11 17:01:29.000000000 -0300
@@ -1,7 +1,6 @@
 #include <windows.h>
 
 LANGUAGE 0x9,0x1
-1 11 logmessages.bin
 
 #define TCN_COPYRIGHT "Licensed to the Apache Software Foundation (ASF) under " \
                       "one or more contributor license agreements.  See the " \
@@ -20,7 +19,7 @@
                      "See the License for the specific language governing " \
                      "permissions and limitations under the License."
 
-#define TCN_VERSION "1.3.1"
+#define TCN_VERSION "1.3.8"
 1000 ICON "apache.ico"
 
 1001 DIALOGEX 0, 0, 252, 51
@@ -36,8 +35,8 @@
 END
 
 1 VERSIONINFO
- FILEVERSION 1,3,1,0
- PRODUCTVERSION 1,3,1,0
+ FILEVERSION 1,3,8,0
+ PRODUCTVERSION 1,3,8,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
diff -Nru tomcat-native-1.3.1/native/src/info.c tomcat-native-1.3.8/native/src/info.c
--- tomcat-native-1.3.1/native/src/info.c	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/src/info.c	2026-06-11 17:01:29.000000000 -0300
@@ -346,6 +346,8 @@
     UNREFERENCED(o);
 
     /* Create the APR Error object */
+    if (ainfo_class == NULL)
+        return NULL;
     sockaddrObj = (*e)->NewObject(e, ainfo_class, ainfo_class_init);
     if (sockaddrObj == NULL)
         return NULL;
diff -Nru tomcat-native-1.3.1/native/src/jnilib.c tomcat-native-1.3.8/native/src/jnilib.c
--- tomcat-native-1.3.1/native/src/jnilib.c	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/src/jnilib.c	2026-06-11 17:01:29.000000000 -0300
@@ -490,7 +490,7 @@
     return 0;
 }
 
-apr_pool_t *tcn_get_global_pool()
+apr_pool_t *tcn_get_global_pool(void)
 {
     if (!tcn_global_pool) {
         if (apr_pool_create(&tcn_global_pool, NULL) != APR_SUCCESS) {
@@ -501,12 +501,12 @@
     return tcn_global_pool;
 }
 
-jclass tcn_get_string_class()
+jclass tcn_get_string_class(void)
 {
     return jString_class;
 }
 
-JavaVM * tcn_get_java_vm()
+JavaVM * tcn_get_java_vm(void)
 {
     return tcn_global_vm;
 }
diff -Nru tomcat-native-1.3.1/native/src/ssl.c tomcat-native-1.3.8/native/src/ssl.c
--- tomcat-native-1.3.1/native/src/ssl.c	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/src/ssl.c	2026-06-11 17:01:29.000000000 -0300
@@ -1390,6 +1390,25 @@
 
 /*** End Twitter API Additions ***/
 
+TCN_IMPLEMENT_CALL(void, SSL, markPostHandshakeAuthComplete)(TCN_STDARGS,
+                                                             jlong ssl /* SSL * */) {
+#if defined(SSL_OP_NO_TLSv1_3)
+    SSL *ssl_ = J2P(ssl, SSL *);
+    tcn_ssl_conn_t *con;
+
+    if (ssl_ == NULL) {
+        tcn_ThrowException(e, "ssl is null");
+        return;
+    }
+
+    UNREFERENCED(o);
+
+    con = (tcn_ssl_conn_t *)SSL_get_app_data(ssl_);
+
+    con->pha_state = PHA_COMPLETE;
+#endif
+}
+
 /*** Apple API Additions ***/
 
 TCN_IMPLEMENT_CALL(jstring, SSL, getAlpnSelected)(TCN_STDARGS,
@@ -1639,6 +1658,12 @@
         return NULL;
     }
 
+    /* Ensure stringClass is initialized (lazy initialization) */
+    if (stringClass == NULL) {
+        jclass sClazz = (*e)->FindClass(e, "java/lang/String");
+        stringClass = (jclass) (*e)->NewGlobalRef(e, sClazz);
+    }
+
     /* Create the byte[][]?array that holds all the certs */
     array = (*e)->NewObjectArray(e, len, stringClass, NULL);
 
@@ -1653,32 +1678,87 @@
 }
 
 TCN_IMPLEMENT_CALL(jboolean, SSL, setCipherSuites)(TCN_STDARGS, jlong ssl,
-                                                         jstring ciphers)
+                                                         jstring cipherList)
 {
-    jboolean rv = JNI_TRUE;
     SSL *ssl_ = J2P(ssl, SSL *);
-    TCN_ALLOC_CSTRING(ciphers);
-
-    UNREFERENCED_STDARGS;
+    TCN_ALLOC_CSTRING(cipherList);
+    jboolean rv = JNI_TRUE;
+    #ifndef HAVE_EXPORT_CIPHERS
+        size_t len;
+        char *buf;
+    #endif
+    UNREFERENCED(o);
 
     if (ssl_ == NULL) {
-        TCN_FREE_CSTRING(ciphers);
+        TCN_FREE_CSTRING(cipherList);
         tcn_ThrowException(e, "ssl is null");
         return JNI_FALSE;
     }
 
+    if (!J2S(cipherList)) {
+        rv = JNI_FALSE;
+        goto free_cipherList;
+    }
+
+#ifndef HAVE_EXPORT_CIPHERS
+    /*
+     *  Always disable NULL and export ciphers,
+     *  no matter what was given in the config.
+     */
+    len = strlen(J2S(cipherList)) + strlen(SSL_CIPHERS_ALWAYS_DISABLED) + 1;
+    buf = malloc(len * sizeof(char));
+    if (buf == NULL) {
+        rv = JNI_FALSE;
+        goto free_cipherList;
+    }
+    memcpy(buf, SSL_CIPHERS_ALWAYS_DISABLED, strlen(SSL_CIPHERS_ALWAYS_DISABLED));
+    memcpy(buf + strlen(SSL_CIPHERS_ALWAYS_DISABLED), J2S(cipherList), strlen(J2S(cipherList)));
+    buf[len - 1] = '\0';
+    if (!SSL_set_cipher_list(ssl_, buf)) {
+#else
+    if (!SSL_set_cipher_list(ssl_, J2S(cipherList))) {
+#endif
+        char err[TCN_OPENSSL_ERROR_STRING_LENGTH];
+        ERR_error_string_n(SSL_ERR_get(), err, TCN_OPENSSL_ERROR_STRING_LENGTH);
+        tcn_Throw(e, "Unable to configure permitted SSL ciphers (%s)", err);
+        rv = JNI_FALSE;
+    }
+#ifndef HAVE_EXPORT_CIPHERS
+    free(buf);
+#endif
+free_cipherList:
+    TCN_FREE_CSTRING(cipherList);
+    return rv;
+}
+
+TCN_IMPLEMENT_CALL(jboolean, SSL, setCipherSuitesEx)(TCN_STDARGS, jlong ssl,
+                                                         jstring cipherSuites)
+{
+    SSL *ssl_ = J2P(ssl, SSL *);
+    TCN_ALLOC_CSTRING(cipherSuites);
+    jboolean rv = JNI_TRUE;
     UNREFERENCED(o);
-    if (!J2S(ciphers)) {
-        TCN_FREE_CSTRING(ciphers);
+
+    if (ssl_ == NULL) {
+        TCN_FREE_CSTRING(cipherSuites);
+        tcn_ThrowException(e, "ssl is null");
         return JNI_FALSE;
     }
-    if (!SSL_set_cipher_list(ssl_, J2S(ciphers))) {
+
+    if (!J2S(cipherSuites)) {
+        rv = JNI_FALSE;
+        goto free_cipherSuites;
+    }
+
+    if (!SSL_set_ciphersuites(ssl_, J2S(cipherSuites))) {
         char err[TCN_OPENSSL_ERROR_STRING_LENGTH];
         ERR_error_string_n(SSL_ERR_get(), err, TCN_OPENSSL_ERROR_STRING_LENGTH);
-        tcn_Throw(e, "Unable to configure permitted SSL ciphers (%s)", err);
+        tcn_Throw(e, "Unable to configure permitted SSL cipher suites (%s)", err);
         rv = JNI_FALSE;
     }
-    TCN_FREE_CSTRING(ciphers);
+
+free_cipherSuites:
+    TCN_FREE_CSTRING(cipherSuites);
     return rv;
 }
 
@@ -2023,6 +2103,12 @@
 
 /*** End Twitter 1:1 API addition ***/
 
+TCN_IMPLEMENT_CALL(jint, SSL, markPostHandshakeAuthComplete)(TCN_STDARGS, jlong ssl) {
+  UNREFERENCED(o);
+  UNREFERENCED(ssl);
+  tcn_ThrowException(e, "Not implemented");
+}
+
 /*** Begin Apple 1:1 API addition ***/
 
 TCN_IMPLEMENT_CALL(jstring, SSL, getAlpnSelected)(TCN_STDARGS, jlong ssl) {
diff -Nru tomcat-native-1.3.1/native/src/sslconf.c tomcat-native-1.3.8/native/src/sslconf.c
--- tomcat-native-1.3.1/native/src/sslconf.c	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/src/sslconf.c	2026-06-11 17:01:29.000000000 -0300
@@ -116,6 +116,29 @@
     c->pool = p;
 
     /*
+     * Some Tomcat Native specific settings are also set via this representation
+     * of the SSL_CONF_CTX. This process is a little bit hacky. The expected
+     * call sequence is:
+     * - SSLConf.make() - create SSL_CONF_CTX and the associated Tomcat Native
+     *   object
+     * - SSLConf.check() - MUST be called for each Tomcat specific setting that
+     *   needs to be configured. May be called for OpenSSL settings in which
+     *   case the setting will be validated.
+     * - SSLConf.assign() - this actually *applies* the Tomcat Native specific
+     *   configuration to Tomcat Native as well as linking the SSL_CONF_CTX
+     *   object with the SSL_CTX object.
+     * - SSLConf.apply() - called for each OpenSSL setting. Any Tomcat specific
+     *   settings used here will be ignored.
+     * - SSLConf.finish() - MUST be called to complete the OpenSSL setting
+     *   process.
+     */
+    /* Initialise Tomcat Native specific OCSP defaults */
+    c->no_ocsp_check     = OCSP_NO_CHECK_DEFAULT;
+    c->ocsp_soft_fail    = OCSP_SOFT_FAIL_DEFAULT;
+    c->ocsp_timeout      = OCSP_TIMEOUT_DEFAULT;
+    c->ocsp_verify_flags = OCSP_VERIFY_FLAGS_DEFAULT;
+    
+    /*
      * Let us cleanup the SSL_CONF context when the pool is destroyed
      */
     apr_pool_cleanup_register(p, (const void *)c,
@@ -131,11 +154,7 @@
     tcn_ssl_conf_ctxt_t *c = J2P(cctx, tcn_ssl_conf_ctxt_t *);
     UNREFERENCED_STDARGS;
     TCN_ASSERT(c != 0);
-    if (c->cctx != NULL) {
-        SSL_CONF_CTX_free(c->cctx);
-        c->cctx = NULL;
-        c->pool = NULL;
-    }
+    apr_pool_cleanup_run(c->pool, c, ssl_ctx_config_cleanup);
 }
 
 /* Check a command for an SSL_CONF context */
@@ -153,16 +172,52 @@
     TCN_ASSERT(c->cctx != 0);
     if (!J2S(cmd)) {
         tcn_Throw(e, "Can not check null SSL_CONF command");
-        return SSL_THROW_RETURN;
+        rc = SSL_THROW_RETURN;
+        goto cleanup;
     }
+    /*
+     * Although this is the check method, this sets the Tomcat specific
+     * settings.
+     */
     if (!strcmp(J2S(cmd), "NO_OCSP_CHECK")) {
         if (!strcasecmp(J2S(value), "false"))
             c->no_ocsp_check = 0;
         else
             c->no_ocsp_check = 1;
-        TCN_FREE_CSTRING(cmd);
-        TCN_FREE_CSTRING(value);
-        return 1;
+        rc = 1;
+        goto cleanup;
+    }
+
+    if (!strcmp(J2S(cmd), "OCSP_SOFT_FAIL")) {
+        if (!strcasecmp(J2S(value), "false"))
+            c->ocsp_soft_fail = 0;
+        else
+            c->ocsp_soft_fail = 1;
+        rc = 1;
+        goto cleanup;
+    }
+
+    if (!strcmp(J2S(cmd), "OCSP_TIMEOUT")) {
+        int i;
+        errno = 0;
+        i = (int) strtol(J2S(value), NULL, 10);
+        if (!errno) {
+            // Tomcat configures timeout is millisecond. APR uses microseconds.
+            c->ocsp_timeout = i * 1000;
+        }
+        rc = 1;
+        goto cleanup;
+    }
+
+    if (!strcmp(J2S(cmd), "OCSP_VERIFY_FLAGS")) {
+        int i;
+        errno = 0;
+        i = (int) strtol(J2S(value), NULL, 10);
+        if (!errno) {
+            c->ocsp_verify_flags = i;
+        }
+        rc = 1;
+        goto cleanup;
     }
 
     SSL_ERR_clear();
@@ -172,35 +227,42 @@
         char err[TCN_OPENSSL_ERROR_STRING_LENGTH];
         ERR_error_string_n(ec, err, TCN_OPENSSL_ERROR_STRING_LENGTH);
         tcn_Throw(e, "Could not determine SSL_CONF command type for '%s' (%s)", J2S(cmd), err);
-        return 0;
+        rc = SSL_THROW_RETURN;
+        goto cleanup;
     }
 
     if (value_type == SSL_CONF_TYPE_UNKNOWN) {
         tcn_Throw(e, "Invalid SSL_CONF command '%s', type unknown", J2S(cmd));
-        return SSL_THROW_RETURN;
+        rc = SSL_THROW_RETURN;
+        goto cleanup;
     }
 
     if (value_type == SSL_CONF_TYPE_FILE) {
         if (!J2S(value)) {
             tcn_Throw(e, "SSL_CONF command '%s' needs a non-empty file argument", J2S(cmd));
-            return SSL_THROW_RETURN;
+            rc = SSL_THROW_RETURN;
+            goto cleanup;
         }
         if (check_file(c->pool, J2S(value))) {
             tcn_Throw(e, "SSL_CONF command '%s' file '%s' does not exist or is empty", J2S(cmd), J2S(value));
-            return SSL_THROW_RETURN;
+            rc = SSL_THROW_RETURN;
+            goto cleanup;
         }
     }
     else if (value_type == SSL_CONF_TYPE_DIR) {
         if (!J2S(value)) {
             tcn_Throw(e, "SSL_CONF command '%s' needs a non-empty directory argument", J2S(cmd));
-            return SSL_THROW_RETURN;
+            rc = SSL_THROW_RETURN;
+            goto cleanup;
         }
         if (check_dir(c->pool, J2S(value))) {
             tcn_Throw(e, "SSL_CONF command '%s' directory '%s' does not exist", J2S(cmd), J2S(value));
-            return SSL_THROW_RETURN;
+            rc = SSL_THROW_RETURN;
+            goto cleanup;
         }
     }
 
+cleanup:
     TCN_FREE_CSTRING(cmd);
     TCN_FREE_CSTRING(value);
     return rc;
@@ -219,6 +281,9 @@
     // sc->ctx == 0 is allowed!
     SSL_CONF_CTX_set_ssl_ctx(c->cctx, sc->ctx);
     sc->no_ocsp_check = c->no_ocsp_check;
+    sc->ocsp_soft_fail = c->ocsp_soft_fail;
+    sc->ocsp_timeout = c->ocsp_timeout;
+    sc->ocsp_verify_flags = c->ocsp_verify_flags;
 }
 
 /* Apply a command to an SSL_CONF context */
@@ -239,7 +304,8 @@
     TCN_ASSERT(c->cctx != 0);
     if (!J2S(cmd)) {
         tcn_Throw(e, "Can not apply null SSL_CONF command");
-        return SSL_THROW_RETURN;
+        rc = SSL_THROW_RETURN;
+        goto cleanup;
     }
 #ifndef HAVE_EXPORT_CIPHERS
     if (!strcmp(J2S(cmd), "CipherString")) {
@@ -248,10 +314,11 @@
          *  no matter what was given in the config.
          */
         len = strlen(J2S(value)) + strlen(SSL_CIPHERS_ALWAYS_DISABLED) + 1;
-        buf = malloc(len * sizeof(char *));
+        buf = malloc(len * sizeof(char));
         if (buf == NULL) {
             tcn_Throw(e, "Could not allocate memory to adjust cipher string");
-            return SSL_THROW_RETURN;
+            rc = SSL_THROW_RETURN;
+            goto cleanup;
         }
         memcpy(buf, SSL_CIPHERS_ALWAYS_DISABLED, strlen(SSL_CIPHERS_ALWAYS_DISABLED));
         memcpy(buf + strlen(SSL_CIPHERS_ALWAYS_DISABLED), J2S(value), strlen(J2S(value)));
@@ -259,13 +326,36 @@
     }
 #endif
     if (!strcmp(J2S(cmd), "NO_OCSP_CHECK")) {
-        if (!strcasecmp(J2S(value), "false"))
-            c->no_ocsp_check = 0;
-        else
-            c->no_ocsp_check = 1;
-        TCN_FREE_CSTRING(cmd);
-        TCN_FREE_CSTRING(value);
-        return 1;
+        /*
+         * Skip as this is a Tomcat specific setting that will have been set
+         * when check() was called.
+         */
+        rc = 1;
+        goto cleanup;
+    }
+    if (!strcmp(J2S(cmd), "OCSP_SOFT_FAIL")) {
+        /*
+         * Skip as this is a Tomcat specific setting that will have been set
+         * when check() was called.
+         */
+        rc = 1;
+        goto cleanup;
+    }
+    if (!strcmp(J2S(cmd), "OCSP_TIMEOUT")) {
+        /*
+         * Skip as this is a Tomcat specific setting that will have been set
+         * when check() was called.
+         */
+        rc = 1;
+        goto cleanup;
+    }
+    if (!strcmp(J2S(cmd), "OCSP_VERIFY_FLAGS")) {
+        /*
+         * Skip as this is a Tomcat specific setting that will have been set
+         * when check() was called.
+         */
+        rc = 1;
+        goto cleanup;
     }
     SSL_ERR_clear();
     rc = SSL_CONF_cmd(c->cctx, J2S(cmd), buf != NULL ? buf : J2S(value));
@@ -278,8 +368,11 @@
         } else {
             tcn_Throw(e, "Could not apply SSL_CONF command '%s' with value '%s'", J2S(cmd), buf != NULL ? buf : J2S(value));
         }
-        return SSL_THROW_RETURN;
+        rc = SSL_THROW_RETURN;
+        goto cleanup;
     }
+
+cleanup:
 #ifndef HAVE_EXPORT_CIPHERS
     if (buf != NULL) {
         free(buf);
@@ -300,6 +393,7 @@
     UNREFERENCED_STDARGS;
     TCN_ASSERT(c != 0);
     TCN_ASSERT(c->cctx != 0);
+    SSL_ERR_clear();
     rc = SSL_CONF_CTX_finish(c->cctx);
     ec = SSL_ERR_get();
     if (rc <= 0 || ec != 0) {
diff -Nru tomcat-native-1.3.1/native/src/sslcontext.c tomcat-native-1.3.8/native/src/sslcontext.c
--- tomcat-native-1.3.1/native/src/sslcontext.c	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/src/sslcontext.c	2026-06-11 17:01:29.000000000 -0300
@@ -415,6 +415,12 @@
         stringClass = (jclass) (*e)->NewGlobalRef(e, sClazz);
     }
 
+    /* Configure OCSP defaults here in case there is no SSL_CONF_CTX used. */
+    c->no_ocsp_check     = OCSP_NO_CHECK_DEFAULT;
+    c->ocsp_soft_fail    = OCSP_SOFT_FAIL_DEFAULT;
+    c->ocsp_timeout      = OCSP_TIMEOUT_DEFAULT;
+    c->ocsp_verify_flags = OCSP_VERIFY_FLAGS_DEFAULT;
+
     return P2J(c);
 init_failed:
     return 0;
@@ -514,36 +520,45 @@
 }
 
 TCN_IMPLEMENT_CALL(jboolean, SSLContext, setCipherSuite)(TCN_STDARGS, jlong ctx,
-                                                         jstring ciphers)
+                                                         jstring cipherList)
 {
     tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
-    TCN_ALLOC_CSTRING(ciphers);
+    TCN_ALLOC_CSTRING(cipherList);
     jboolean rv = JNI_TRUE;
 #ifndef HAVE_EXPORT_CIPHERS
     size_t len;
     char *buf;
 #endif
-
     UNREFERENCED(o);
-    TCN_ASSERT(ctx != 0);
-    if (!J2S(ciphers))
+
+    if (c == NULL) {
+        TCN_FREE_CSTRING(cipherList);
+        tcn_ThrowException(e, "ssl context is null");
         return JNI_FALSE;
+    }
+
+    if (!J2S(cipherList)) {
+        rv = JNI_FALSE;
+        goto free_cipherList;
+    }
 
 #ifndef HAVE_EXPORT_CIPHERS
     /*
      *  Always disable NULL and export ciphers,
      *  no matter what was given in the config.
      */
-    len = strlen(J2S(ciphers)) + strlen(SSL_CIPHERS_ALWAYS_DISABLED) + 1;
-    buf = malloc(len * sizeof(char *));
-    if (buf == NULL)
-        return JNI_FALSE;
+    len = strlen(J2S(cipherList)) + strlen(SSL_CIPHERS_ALWAYS_DISABLED) + 1;
+    buf = malloc(len * sizeof(char));
+    if (buf == NULL) {
+        rv = JNI_FALSE;
+        goto free_cipherList;
+    }
     memcpy(buf, SSL_CIPHERS_ALWAYS_DISABLED, strlen(SSL_CIPHERS_ALWAYS_DISABLED));
-    memcpy(buf + strlen(SSL_CIPHERS_ALWAYS_DISABLED), J2S(ciphers), strlen(J2S(ciphers)));
+    memcpy(buf + strlen(SSL_CIPHERS_ALWAYS_DISABLED), J2S(cipherList), strlen(J2S(cipherList)));
     buf[len - 1] = '\0';
     if (!SSL_CTX_set_cipher_list(c->ctx, buf)) {
 #else
-    if (!SSL_CTX_set_cipher_list(c->ctx, J2S(ciphers))) {
+    if (!SSL_CTX_set_cipher_list(c->ctx, J2S(cipherList))) {
 #endif
         char err[TCN_OPENSSL_ERROR_STRING_LENGTH];
         ERR_error_string_n(SSL_ERR_get(), err, TCN_OPENSSL_ERROR_STRING_LENGTH);
@@ -553,7 +568,39 @@
 #ifndef HAVE_EXPORT_CIPHERS
     free(buf);
 #endif
-    TCN_FREE_CSTRING(ciphers);
+free_cipherList:
+    TCN_FREE_CSTRING(cipherList);
+    return rv;
+}
+
+TCN_IMPLEMENT_CALL(jboolean, SSLContext, setCipherSuitesEx)(TCN_STDARGS, jlong ctx,
+                                                         jstring cipherSuites)
+{
+    tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
+    TCN_ALLOC_CSTRING(cipherSuites);
+    jboolean rv = JNI_TRUE;
+    UNREFERENCED(o);
+
+    if (c == NULL) {
+        TCN_FREE_CSTRING(cipherSuites);
+        tcn_ThrowException(e, "ssl context is null");
+        return JNI_FALSE;
+    }
+
+    if (!J2S(cipherSuites)) {
+        rv = JNI_FALSE;
+        goto free_cipherSuites;
+    }
+
+    if (!SSL_CTX_set_ciphersuites(c->ctx, J2S(cipherSuites))) {
+        char err[TCN_OPENSSL_ERROR_STRING_LENGTH];
+        ERR_error_string_n(SSL_ERR_get(), err, TCN_OPENSSL_ERROR_STRING_LENGTH);
+        tcn_Throw(e, "Unable to configure permitted SSL cipher suites (%s)", err);
+        rv = JNI_FALSE;
+    }
+
+free_cipherSuites:
+    TCN_FREE_CSTRING(cipherSuites);
     return rv;
 }
 
@@ -1250,6 +1297,7 @@
     } else if (SSL_CTX_add0_chain_cert(c->ctx, certs) <= 0) {
         ERR_error_string_n(SSL_ERR_get(), err, TCN_OPENSSL_ERROR_STRING_LENGTH);
         tcn_Throw(e, "Error adding certificate to chain (%s)", err);
+        X509_free(certs);
         rv = JNI_FALSE;
     }
 
@@ -1291,6 +1339,9 @@
         rv = JNI_FALSE;
     }
 
+    if (cert != NULL) {
+        X509_free(cert);
+    }
     free(charCert);
     return rv;
 }
@@ -1485,14 +1536,21 @@
             // delimited by ','.
             p_data_len += 1 + proto_chars_len;
             if (p_data_len > p_data_size) {
+                // Find start of buffer
+                unsigned char *p_data_start = p_data - (p_data_len - (1 + proto_chars_len));
+                unsigned char *p_data_tmp;
                 // double size
                 p_data_size <<= 1;
-                p_data = realloc(p_data, p_data_size);
-                if (p_data == NULL) {
-                    // Not enough memory?
+                p_data_tmp = realloc(p_data_start, p_data_size);
+                if (p_data_tmp == NULL) {
+                    // Not enough memory? Free the original buffer.
+                    free(p_data_start);
+                    p_data = NULL;
                     (*e)->ReleaseStringUTFChars(e, proto_string, proto_chars);
                     break;
                 }
+                // Set position in buffer as realloc may have moved the buffer
+                p_data = p_data_tmp + (p_data_len - (1 + proto_chars_len));
             }
             // Write the length of the protocol and then increment before memcpy the protocol itself.
             *p_data = proto_chars_len;
@@ -1672,7 +1730,7 @@
     return rv;
 }
 
-#define TICKET_KEYS_SIZE 48
+#define TICKET_KEYS_SIZE 80
 TCN_IMPLEMENT_CALL(void, SSLContext, setSessionTicketKeys)(TCN_STDARGS, jlong ctx, jbyteArray keys)
 {
     tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
@@ -1861,7 +1919,7 @@
         }
         // Delete the reference to the previous specified verifier if needed.
         if (c->verifier != NULL) {
-            (*e)->DeleteLocalRef(e, c->verifier);
+            (*e)->DeleteGlobalRef(e, c->verifier);
         }
         c->verifier = (*e)->NewGlobalRef(e, verifier);
         c->verifier_method = method;
diff -Nru tomcat-native-1.3.1/native/src/sslutils.c tomcat-native-1.3.8/native/src/sslutils.c
--- tomcat-native-1.3.1/native/src/sslutils.c	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/src/sslutils.c	2026-06-11 17:01:29.000000000 -0300
@@ -34,8 +34,8 @@
 #define ASN1_SEQUENCE 0x30
 #define ASN1_OID      0x06
 #define ASN1_STRING   0x86
-static int ssl_verify_OCSP(X509_STORE_CTX *ctx);
-static int ssl_ocsp_request(X509 *cert, X509 *issuer, X509_STORE_CTX *ctx);
+static int ssl_verify_OCSP(X509_STORE_CTX *ctx, int timeout, int verifyFlags);
+static int ssl_ocsp_request(X509 *cert, X509 *issuer, X509_STORE_CTX *ctx, int timeout, int verifyFlags);
 #endif
 
 /*  _________________________________________________________________
@@ -319,11 +319,14 @@
                                           SSL_get_ex_data_X509_STORE_CTX_idx());
     tcn_ssl_conn_t *con = (tcn_ssl_conn_t *)SSL_get_app_data(ssl);
     /* Get verify ingredients */
-    int errnum   = X509_STORE_CTX_get_error(ctx);
-    int errdepth = X509_STORE_CTX_get_error_depth(ctx);
-    int verify   = con->ctx->verify_mode;
-    int depth    = con->ctx->verify_depth;
-    int ocsp_check_type = con->ctx->no_ocsp_check;
+    int errnum            = X509_STORE_CTX_get_error(ctx);
+    int errdepth          = X509_STORE_CTX_get_error_depth(ctx);
+    int verify            = con->ctx->verify_mode;
+    int depth             = con->ctx->verify_depth;
+    int ocsp_check_type   = con->ctx->no_ocsp_check;
+    int ocsp_soft_fail    = con->ctx->ocsp_soft_fail;
+    int ocsp_timeout      = con->ctx->ocsp_timeout;
+    int ocsp_verify_flags = con->ctx->ocsp_verify_flags;
 
 #if defined(SSL_OP_NO_TLSv1_3)
     con->pha_state = PHA_COMPLETE;
@@ -333,7 +336,7 @@
         return 1;
     }
 
-    if (SSL_VERIFY_ERROR_IS_OPTIONAL(errnum) && (verify == SSL_CVERIFY_OPTIONAL_NO_CA)) {
+    if ((SSL_VERIFY_ERROR_IS_OPTIONAL(errnum) || errnum == X509_V_OK) && (verify == SSL_CVERIFY_OPTIONAL_NO_CA)) {
         SSL_set_verify_result(ssl, X509_V_OK);
         // Skip OCSP checks since the CA is optional
         return 1;
@@ -369,15 +372,19 @@
                 ok = 0;
             }
             else {
-                int ocsp_response = ssl_verify_OCSP(ctx);
+                int ocsp_response = ssl_verify_OCSP(ctx, ocsp_timeout, ocsp_verify_flags);
                 if (ocsp_response == OCSP_STATUS_REVOKED) {
                     ok = 0 ;
                     errnum = X509_STORE_CTX_get_error(ctx);
                 }
                 else if (ocsp_response == OCSP_STATUS_UNKNOWN) {
                     errnum = X509_STORE_CTX_get_error(ctx);
-                    if (errnum)
-                        ok = 0 ;
+                    if (errnum != 0 && !(ocsp_soft_fail && errnum == X509_V_ERR_UNABLE_TO_GET_CRL)) {
+                        ok = 0;
+                    } else {
+                        // Clear the store error else the handshake will fail with the APR connector
+                        X509_STORE_CTX_set_error(ctx, 0);
+                    }
                 }
             }
         }
@@ -512,7 +519,7 @@
 #ifdef HAVE_OCSP
 
 /* Function that is used to do the OCSP verification */
-static int ssl_verify_OCSP(X509_STORE_CTX *ctx)
+static int ssl_verify_OCSP(X509_STORE_CTX *ctx, int timeout, int verifyFlags)
 {
     X509 *cert, *issuer;
     int r = OCSP_STATUS_UNKNOWN;
@@ -537,7 +544,7 @@
     /* if we can't get the issuer, we cannot perform OCSP verification */
     issuer = X509_STORE_CTX_get0_current_issuer(ctx);
     if (issuer != NULL) {
-        r = ssl_ocsp_request(cert, issuer, ctx);
+        r = ssl_ocsp_request(cert, issuer, ctx, timeout, verifyFlags);
         switch (r) {
         case OCSP_STATUS_OK:
             X509_STORE_CTX_set_error(ctx, X509_V_OK);
@@ -630,7 +637,7 @@
 
         if (!err) {
             new_nocsp_urls = *nocsp_urls+1;
-            if ((new_ocsp_urls = apr_xrealloc(*ocsp_urls,*nocsp_urls, new_nocsp_urls, p)) == NULL)
+            if ((new_ocsp_urls = apr_xrealloc(*ocsp_urls, *nocsp_urls * sizeof(char *), new_nocsp_urls * sizeof(char *), p)) == NULL)
                 err = 1;
         }
         if (!err) {
@@ -702,23 +709,25 @@
 /* the main function that gets the ASN1 encoding string and returns
    a pointer to a NULL terminated "array" of char *, that contains
    the ocsp_urls */
-static char **decode_OCSP_url(ASN1_OCTET_STRING *os, apr_pool_t *p)
+static char **decode_OCSP_url(ASN1_OCTET_STRING *os, int *numofresponses, apr_pool_t *p)
 {
     char **response = NULL;
     unsigned char *ocsp_urls;
-    int len, numofresponses = 0 ;
+    int len;
+
+    *numofresponses = 0 ;
 
     len = ASN1_STRING_length(os);
 
-    ocsp_urls = apr_palloc(p,  len + 1);
-    memcpy(ocsp_urls,os->data, len);
+    ocsp_urls = apr_palloc(p, len + 1);
+    memcpy(ocsp_urls, ASN1_STRING_get0_data(os), len);
     ocsp_urls[len] = '\0';
 
     if ((response = apr_pcalloc(p, sizeof(char *))) == NULL) {
         return NULL;
     }
-    if (parse_ASN1_Sequence(ocsp_urls, &response, &numofresponses, p) ||
-            numofresponses ==0) {
+    if (parse_ASN1_Sequence(ocsp_urls, &response, numofresponses, p) ||
+            *numofresponses ==0) {
         response = NULL;
     }
     return response;
@@ -905,19 +914,20 @@
 
 /* Reads the response from the APR socket to a buffer, and parses the buffer to
    return the OCSP response  */
-#define ADDLEN 512
+#define BUFFER_SIZE 512
+#define OCSP_MAX_RESPONSE_SIZE 65536
 static OCSP_RESPONSE *ocsp_get_resp(apr_pool_t *mp, apr_socket_t *sock)
 {
     int buflen;
     apr_size_t totalread = 0;
     apr_size_t readlen;
-    char *buf, tmpbuf[ADDLEN];
+    char *buf, tmpbuf[BUFFER_SIZE];
     apr_status_t rv = APR_SUCCESS;
     apr_pool_t *p;
     OCSP_RESPONSE *resp;
 
     apr_pool_create(&p, mp);
-    buflen = ADDLEN;
+    buflen = BUFFER_SIZE;
     buf = apr_palloc(p, buflen);
     if (buf == NULL) {
         apr_pool_destroy(p);
@@ -928,13 +938,16 @@
         readlen = sizeof(tmpbuf);
         rv = apr_socket_recv(sock, tmpbuf, &readlen);
         if (rv == APR_SUCCESS) { /* if we have read something .. we can put it in the buffer*/
-            if ((totalread + readlen) >= buflen) {
-                buf = apr_xrealloc(buf, buflen, buflen + ADDLEN, p);
+            if ((totalread + readlen) > OCSP_MAX_RESPONSE_SIZE) {
+                apr_pool_destroy(p);
+                return NULL;
+            } else if ((totalread + readlen) >= buflen) {
+                buf = apr_xrealloc(buf, buflen, buflen * 2, p);
                 if (buf == NULL) {
                     apr_pool_destroy(p);
                     return NULL;
                 }
-                buflen += ADDLEN; /* if needed we enlarge the buffer */
+                buflen *= 2; /* if needed we enlarge the buffer */
             }
             memcpy(buf + totalread, tmpbuf, readlen); /* the copy to the buffer */
             totalread += readlen; /* update the total bytes read */
@@ -950,16 +963,36 @@
         }
     }
 
-    resp = parse_ocsp_resp(buf, buflen);
+    resp = parse_ocsp_resp(buf, totalread);
     apr_pool_destroy(p);
     return resp;
 }
 
-/* Creates and OCSP request and returns the OCSP_RESPONSE */
-static OCSP_RESPONSE *get_ocsp_response(apr_pool_t *p, X509 *cert, X509 *issuer, char *url)
+/* Creates an OCSP request */
+static OCSP_REQUEST *get_ocsp_request(X509 *cert, X509 *issuer)
 {
-    OCSP_RESPONSE *ocsp_resp = NULL;
     OCSP_REQUEST *ocsp_req = NULL;
+
+    ocsp_req = OCSP_REQUEST_new();
+    if (ocsp_req == NULL)
+        return NULL;
+
+    // Populate the request
+    if (add_ocsp_cert(ocsp_req, cert, issuer) == 0) {
+        OCSP_REQUEST_free(ocsp_req);
+        return NULL;
+    }
+
+    // Add a nonce to protect against replay attacks
+    OCSP_request_add1_nonce(ocsp_req, NULL, -1);
+
+    return ocsp_req;
+}
+
+/* Submits an OCSP request and returns the OCSP_RESPONSE */
+static OCSP_RESPONSE *get_ocsp_response(apr_pool_t *p, char *url, OCSP_REQUEST *ocsp_req, int timeout)
+{
+    OCSP_RESPONSE *ocsp_resp = NULL;
     BIO *bio_req;
     char *hostname, *path, *c_port;
     int port, use_ssl;
@@ -976,18 +1009,10 @@
     if (sscanf(c_port, "%d", &port) != 1)
         goto end;
 
-    /* Create the OCSP request */
-    ocsp_req = OCSP_REQUEST_new();
-    if (ocsp_req == NULL)
-        goto end;
-
-    if (add_ocsp_cert(ocsp_req,cert,issuer) == 0 )
-        goto free_req;
-
     /* create the BIO with the request to send */
     bio_req = serialize_request(ocsp_req, hostname, port, path);
     if (bio_req == NULL) {
-        goto free_req;
+        goto end;
     }
 
     apr_pool_create(&mp, p);
@@ -996,6 +1021,8 @@
         goto free_bio;
     }
 
+    apr_socket_timeout_set(apr_sock, timeout);
+
     ok = ocsp_send_req(apr_sock, bio_req);
     if (ok) {
         ocsp_resp = ocsp_get_resp(mp, apr_sock);
@@ -1006,9 +1033,6 @@
     BIO_free(bio_req);
     apr_pool_destroy(mp);
 
-free_req:
-    OCSP_REQUEST_free(ocsp_req);
-
 end:
     OPENSSL_free(hostname);
     OPENSSL_free(c_port);
@@ -1018,30 +1042,60 @@
 }
 
 /* Process the OCSP_RESPONSE and returns the corresponding
-   answert according to the status.
+   answer according to the status.
 */
-static int process_ocsp_response(OCSP_RESPONSE *ocsp_resp, X509 *cert, X509 *issuer)
+static int process_ocsp_response(OCSP_REQUEST *ocsp_req, OCSP_RESPONSE *ocsp_resp, X509 *cert, X509 *issuer,
+        X509_STORE_CTX *ctx, int verifyFlags)
 {
     int r, o = V_OCSP_CERTSTATUS_UNKNOWN, i;
     OCSP_BASICRESP *bs;
     OCSP_SINGLERESP *ss;
     OCSP_CERTID *certid;
+    ASN1_GENERALIZEDTIME *thisupd;
+    ASN1_GENERALIZEDTIME *nextupd;
+    const STACK_OF(X509) *certStack;
 
     r = OCSP_response_status(ocsp_resp);
 
     if (r != OCSP_RESPONSE_STATUS_SUCCESSFUL) {
         return OCSP_STATUS_UNKNOWN;
     }
+
     bs = OCSP_response_get1_basic(ocsp_resp);
+    if (OCSP_check_nonce(ocsp_req, bs) == 0) {
+        X509_STORE_CTX_set_error(ctx, X509_V_ERR_OCSP_RESP_INVALID);
+        o = OCSP_STATUS_UNKNOWN;
+        goto clean_bs;
+    }
+
+    certStack = OCSP_resp_get0_certs(bs);
+    // Cast to non-const pointer is OK here since OCSP_basic_verify does not modify the provided certs
+    if (OCSP_basic_verify(bs, (STACK_OF(X509) *)certStack, X509_STORE_CTX_get0_store(ctx), verifyFlags) <= 0) {
+        X509_STORE_CTX_set_error(ctx, X509_V_ERR_OCSP_SIGNATURE_FAILURE);
+        o = OCSP_STATUS_UNKNOWN;
+        goto clean_bs;
+    }
 
     certid = OCSP_cert_to_id(NULL, cert, issuer);
     if (certid == NULL) {
-        return OCSP_STATUS_UNKNOWN;
+        X509_STORE_CTX_set_error(ctx, X509_V_ERR_OCSP_RESP_INVALID);
+        o = OCSP_STATUS_UNKNOWN;
+        goto clean_bs;
     }
-    ss = OCSP_resp_get0(bs, OCSP_resp_find(bs, certid, -1)); /* find by serial number and get the matching response */
 
+    ss = OCSP_resp_get0(bs, OCSP_resp_find(bs, certid, -1)); /* find by serial number and get the matching response */
+    i = OCSP_single_get0_status(ss, NULL, NULL, &thisupd, &nextupd);
+    if (OCSP_check_validity(thisupd, nextupd, OCSP_MAX_SKEW, -1) <= 0) {
+        X509_STORE_CTX_set_error(ctx, X509_V_ERR_OCSP_NOT_YET_VALID);
+        o = OCSP_STATUS_UNKNOWN;
+        goto clean_certid;
+    }
+    if (OCSP_check_validity(thisupd, nextupd, OCSP_MAX_SKEW, OCSP_MAX_SKEW) <= 0) {
+        X509_STORE_CTX_set_error(ctx, X509_V_ERR_OCSP_HAS_EXPIRED);
+        o = OCSP_STATUS_UNKNOWN;
+        goto clean_certid;
+    }
 
-    i = OCSP_single_get0_status(ss, NULL, NULL, NULL, NULL);
     if (i == V_OCSP_CERTSTATUS_GOOD)
         o =  OCSP_STATUS_OK;
     else if (i == V_OCSP_CERTSTATUS_REVOKED)
@@ -1049,16 +1103,18 @@
     else if (i == V_OCSP_CERTSTATUS_UNKNOWN)
         o = OCSP_STATUS_UNKNOWN;
 
-    /* we clean up */
+clean_certid:
     OCSP_CERTID_free(certid);
+clean_bs:
     OCSP_BASICRESP_free(bs);
     return o;
 }
 
-static int ssl_ocsp_request(X509 *cert, X509 *issuer, X509_STORE_CTX *ctx)
+static int ssl_ocsp_request(X509 *cert, X509 *issuer, X509_STORE_CTX *ctx, int timeout, int verifyFlags)
 {
     char **ocsp_urls = NULL;
-    int nid;
+    int nid, numofresponses;
+    int rv = OCSP_STATUS_UNKNOWN;
     X509_EXTENSION *ext;
     ASN1_OCTET_STRING *os;
     apr_pool_t *p;
@@ -1071,32 +1127,51 @@
         ext = X509_get_ext(cert,nid);
         os = X509_EXTENSION_get_data(ext);
 
-        ocsp_urls = decode_OCSP_url(os, p);
+        ocsp_urls = decode_OCSP_url(os, &numofresponses, p);
     }
-
     /* if we find the extensions and we can parse it check
        the ocsp status. Otherwise, return OCSP_STATUS_UNKNOWN */
-    if (ocsp_urls != NULL) {
-        OCSP_RESPONSE *resp;
-        int rv = OCSP_STATUS_UNKNOWN;
-        /* for the time being just check for the fist response .. a better
-           approach is to iterate for all the possible ocsp urls */
-        resp = get_ocsp_response(p, cert, issuer, ocsp_urls[0]);
-        if (resp != NULL) {
-            rv = process_ocsp_response(resp, cert, issuer);
-        } else {
+    if (ocsp_urls != NULL && numofresponses > 0) {
+        OCSP_REQUEST *req;
+        OCSP_RESPONSE *resp = NULL;
+        int i;
+
+        req = get_ocsp_request(cert, issuer);
+        if (req == NULL) {
             /* correct error code for application errors? */
             X509_STORE_CTX_set_error(ctx, X509_V_ERR_APPLICATION_VERIFICATION);
-        }
+        } else {
+            /* Iterate through all the possible OCSP URLs until we get a definitive response */
+            for (i = 0; i < numofresponses; i++) {
+                if (ocsp_urls[i] == NULL) {
+                    continue;
+                }
 
-        if (resp != NULL) {
-            OCSP_RESPONSE_free(resp);
-            apr_pool_destroy(p);
-            return rv;
+                resp = get_ocsp_response(p, ocsp_urls[i], req, timeout);
+                if (resp != NULL) {
+                    rv = process_ocsp_response(req, resp, cert, issuer, ctx, verifyFlags);
+                    OCSP_RESPONSE_free(resp);
+                    resp = NULL;
+
+                    /* If we got a definitive answer (OK or REVOKED), stop trying */
+                    if (rv == OCSP_STATUS_OK || rv == OCSP_STATUS_REVOKED) {
+                        break;
+                    }
+                    /* Otherwise (UNKNOWN), try the next URL */
+                }
+            }
+
+            /* If all URLs failed to respond or returned UNKNOWN */
+            if (rv == OCSP_STATUS_UNKNOWN) {
+                /* Unable to send request / receive response from any URL. */
+                X509_STORE_CTX_set_error(ctx, X509_V_ERR_UNABLE_TO_GET_CRL);
+            }
+
+            OCSP_REQUEST_free(req);
         }
     }
     apr_pool_destroy(p);
-    return OCSP_STATUS_UNKNOWN;
+    return rv;
 }
 
 #endif /* HAVE_OCSP */
diff -Nru tomcat-native-1.3.1/native/srclib/apr/apr-enable-ipv6.patch tomcat-native-1.3.8/native/srclib/apr/apr-enable-ipv6.patch
--- tomcat-native-1.3.1/native/srclib/apr/apr-enable-ipv6.patch	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/srclib/apr/apr-enable-ipv6.patch	1969-12-31 21:00:00.000000000 -0300
@@ -1,11 +0,0 @@
---- /include/apr.hw
-+++ /include/apr.hw
-@@ -367,7 +367,7 @@
- /* If we have a TCP implementation that can be "corked", what flag
-  * do we use?
-  */
--#define APR_TCP_NOPUSH_FLAG       @apr_tcp_nopush_flag@
-+#define APR_TCP_NOPUSH_FLAG       0
- 
- /* Is the TCP_NODELAY socket option inherited from listening sockets?
-  */
diff -Nru tomcat-native-1.3.1/native/srclib/apr/win-ipv6.patch tomcat-native-1.3.8/native/srclib/apr/win-ipv6.patch
--- tomcat-native-1.3.1/native/srclib/apr/win-ipv6.patch	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/srclib/apr/win-ipv6.patch	1969-12-31 21:00:00.000000000 -0300
@@ -1,125 +0,0 @@
-Index: apr/apr/branches/1.7.x/include/arch/win32/apr_arch_misc.h
-===================================================================
---- apr/apr/branches/1.7.x/include/arch/win32/apr_arch_misc.h	(revision 1890229)
-+++ apr/apr/branches/1.7.x/include/arch/win32/apr_arch_misc.h	(revision 1890230)
-@@ -110,7 +110,11 @@
-     APR_WIN_XP_SP2 =   62,
-     APR_WIN_2003 =     70,
-     APR_WIN_VISTA =    80,
--    APR_WIN_7 =        90
-+    APR_WIN_7 =        90,
-+    APR_WIN_7_SP1 =    91,
-+    APR_WIN_8  =       100,
-+    APR_WIN_8_1 =      110,
-+    APR_WIN_10 =       120
- } apr_oslevel_e;
- 
- extern APR_DECLARE_DATA apr_oslevel_e apr_os_level;
-Index: apr/apr/branches/1.7.x/misc/win32/misc.c
-===================================================================
---- apr/apr/branches/1.7.x/misc/win32/misc.c	(revision 1890229)
-+++ apr/apr/branches/1.7.x/misc/win32/misc.c	(revision 1890230)
-@@ -27,25 +27,15 @@
- {
-     if (apr_os_level == APR_WIN_UNK) 
-     {
--        static OSVERSIONINFO oslev;
--        oslev.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
--        GetVersionEx(&oslev);
-+        OSVERSIONINFOEXW oslev;
-+        oslev.dwOSVersionInfoSize = sizeof(oslev);
-+        if (!GetVersionExW((OSVERSIONINFOW*) &oslev)) {
-+            return apr_get_os_error();
-+        }
- 
-         if (oslev.dwPlatformId == VER_PLATFORM_WIN32_NT) 
-         {
--            static unsigned int servpack = 0;
--            TCHAR *pservpack;
--            if ((pservpack = oslev.szCSDVersion)) {
--                while (*pservpack && !apr_isdigit(*pservpack)) {
--                    pservpack++;
--                }
--                if (*pservpack)
--#ifdef _UNICODE
--                    servpack = _wtoi(pservpack);
--#else
--                    servpack = atoi(pservpack);
--#endif
--            }
-+            unsigned int servpack = oslev.wServicePackMajor;
- 
-             if (oslev.dwMajorVersion < 3) {
-                 apr_os_level = APR_WIN_UNSUP;
-@@ -99,11 +89,19 @@
-             else if (oslev.dwMajorVersion == 6) {
-                 if (oslev.dwMinorVersion == 0)
-                     apr_os_level = APR_WIN_VISTA;
-+                else if (oslev.dwMinorVersion == 1) {
-+                    if (servpack < 1)
-+                        apr_os_level = APR_WIN_7;
-+                    else
-+                        apr_os_level = APR_WIN_7_SP1;
-+                }
-+                else if (oslev.dwMinorVersion == 2)
-+                    apr_os_level = APR_WIN_8;
-                 else
--                    apr_os_level = APR_WIN_7;
-+                    apr_os_level = APR_WIN_8_1;
-             }
-             else {
--                apr_os_level = APR_WIN_XP;
-+                apr_os_level = APR_WIN_10;
-             }
-         }
- #ifndef WINNT
-@@ -151,7 +149,7 @@
- 
-     *level = apr_os_level;
- 
--    if (apr_os_level < APR_WIN_UNSUP) {
-+    if (apr_os_level <= APR_WIN_UNSUP) {
-         return APR_EGENERAL;
-     }
- 
-Index: apr/apr/branches/1.7.x/network_io/win32/sockets.c
-===================================================================
---- apr/apr/branches/1.7.x/network_io/win32/sockets.c	(revision 1890229)
-+++ apr/apr/branches/1.7.x/network_io/win32/sockets.c	(revision 1890230)
-@@ -24,6 +24,13 @@
- #include "apr_arch_inherit.h"
- #include "apr_arch_misc.h"
- 
-+/* Borrow the definition of SOMAXCONN_HINT() from Windows SDK 8,
-+ * in case the SDK we are building against doesn't have it.
-+ */
-+#ifndef SOMAXCONN_HINT
-+#define SOMAXCONN_HINT(b) (-(b))
-+#endif
-+
- static char generic_inaddr_any[16] = {0}; /* big enough for IPv4 or IPv6 */
- 
- static apr_status_t socket_cleanup(void *sock)
-@@ -223,7 +230,21 @@
- APR_DECLARE(apr_status_t) apr_socket_listen(apr_socket_t *sock,
-                                             apr_int32_t backlog)
- {
--    if (listen(sock->socketdes, backlog) == SOCKET_ERROR)
-+    int backlog_val;
-+
-+    if (apr_os_level >= APR_WIN_8) {
-+        /* Starting from Windows 8, listen() accepts a special SOMAXCONN_HINT()
-+         * arg that allows setting the listen backlog value to a larger
-+         * value than the predefined Winsock 2 limit (several hundred).
-+         * https://blogs.msdn.microsoft.com/winsdk/2015/06/01/winsocks-listen-backlog-offers-more-flexibility-in-windows-8/
-+         */
-+        backlog_val = SOMAXCONN_HINT(backlog);
-+    }
-+    else {
-+        backlog_val = backlog;
-+    }
-+
-+    if (listen(sock->socketdes, backlog_val) == SOCKET_ERROR)
-         return apr_get_netos_error();
-     else
-         return APR_SUCCESS;
diff -Nru tomcat-native-1.3.1/native/srclib/openssl/openssl-msvcrt-3.0.x.patch tomcat-native-1.3.8/native/srclib/openssl/openssl-msvcrt-3.0.x.patch
--- tomcat-native-1.3.1/native/srclib/openssl/openssl-msvcrt-3.0.x.patch	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/srclib/openssl/openssl-msvcrt-3.0.x.patch	1969-12-31 21:00:00.000000000 -0300
@@ -1,87 +0,0 @@
-diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
-index 66bc81dfb4..52345e4f33 100644
---- a/Configurations/10-main.conf
-+++ b/Configurations/10-main.conf
-@@ -1379,7 +1379,7 @@ my %targets = (
-         # prefer [non-debug] openssl.exe to be free from Micorosoft RTL
-         # redistributable.
-         bin_cflags       => add(picker(debug   => "/MDd",
--                                       release => sub { $disabled{shared} ? "/MT" : () },
-+                                       release => "/MD",
-                                       )),
-         bin_lflags       => add("/subsystem:console /opt:ref"),
-         ex_libs          => add(sub {
-diff --git a/apps/lib/s_socket.c b/apps/lib/s_socket.c
-index 059afe47b9..cbece5fcb3 100644
---- a/apps/lib/s_socket.c
-+++ b/apps/lib/s_socket.c
-@@ -31,7 +31,7 @@ typedef unsigned int u_int;
- 
- /* MSVC renamed some POSIX functions to have an underscore prefix. */
- # ifdef _MSC_VER
--#  define getpid _getpid
-+#  define getpid GetCurrentProcessId
- # endif
- #endif
- 
-diff --git a/crypto/cmp/cmp_util.c b/crypto/cmp/cmp_util.c
-index ed611d64dd..09238bfb7d 100644
---- a/crypto/cmp/cmp_util.c
-+++ b/crypto/cmp/cmp_util.c
-@@ -9,6 +9,7 @@
-  * https://www.openssl.org/source/license.html
-  */
- 
-+#include "e_os.h"
- #include <string.h>
- #include <openssl/cmp_util.h>
- #include "cmp_local.h" /* just for decls of internal functions defined here */
-diff --git a/crypto/engine/eng_openssl.c b/crypto/engine/eng_openssl.c
-index 91656e6b80..e0692e5618 100644
---- a/crypto/engine/eng_openssl.c
-+++ b/crypto/engine/eng_openssl.c
-@@ -18,6 +18,7 @@
- #include "internal/deprecated.h"
- 
- #include <stdio.h>
-+#include "e_os.h"
- #include <openssl/crypto.h>
- #include "internal/cryptlib.h"
- #include "crypto/engine.h"
-diff --git a/engines/e_capi.c b/engines/e_capi.c
-index 6f223a6922..045d1368fd 100644
---- a/engines/e_capi.c
-+++ b/engines/e_capi.c
-@@ -18,6 +18,7 @@
- # include <wincrypt.h>
- 
- # include <stdio.h>
-+# include "e_os.h"
- # include <string.h>
- # include <stdlib.h>
- # include <malloc.h>
-diff --git a/test/testutil/basic_output.c b/test/testutil/basic_output.c
-index 92f3de9300..e84301946e 100644
---- a/test/testutil/basic_output.c
-+++ b/test/testutil/basic_output.c
-@@ -7,6 +7,7 @@
-  * https://www.openssl.org/source/license.html
-  */
- 
-+#include "e_os.h"
- #include "../testutil.h"
- #include "output.h"
- #include "tu_local.h"
-diff --git a/test/testutil/provider.c b/test/testutil/provider.c
-index d073d732da..8a96f9a151 100644
---- a/test/testutil/provider.c
-+++ b/test/testutil/provider.c
-@@ -7,6 +7,7 @@
-  * https://www.openssl.org/source/license.html
-  */
- 
-+#include "e_os.h"
- #include "../testutil.h"
- #include <ctype.h>
- #include <openssl/provider.h>
- 
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/native/srclib/VERSIONS tomcat-native-1.3.8/native/srclib/VERSIONS
--- tomcat-native-1.3.1/native/srclib/VERSIONS	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/native/srclib/VERSIONS	2026-06-11 17:01:29.000000000 -0300
@@ -4,33 +4,31 @@
 
 The following version of the libraries are recommended:
 
-- APR 1.7.4 or later, http://apr.apache.org
-- OpenSSL 3.0.14 or later, http://www.openssl.org
+- APR 1.7.6 or later, http://apr.apache.org
+- OpenSSL 3.0.19 or later, http://www.openssl.org
 
 Older versions should also work but are not as thoroughly tested by the Tomcat
 Native team
 
 
 The minimum version of OpenSSL is driven by the version of OpenSSL used by
-downstream distributions.
+downstream distributions. EOL dates exclude paid support offerings. 
 
 The current state of OpenSSL in Debian is:
-- OpenSSL 1.1.1n in Debian 10 (EOL end June 2024)
-- OpenSSL 1.1.1n in Debian 11 (EOL end June 2026)
+- OpenSSL 1.1.1w in Debian 11 LTS (EOL end August 2026)
+- OpenSSL 3.0.17 in Debian 12 LTS (EOL end June 2028)
 
 And in Ubuntu:
-- OpenSSL 1.1.1  in Ubuntu 18.04 LTS (EOL in April 2028)
-- OpenSSL 1.1.1f in Ubuntu 20.04 LTS (EOL in April 2030)
-- OpenSSL 3.0.2  in Ubuntu 22.04 LTS (EOL in April 2032)
+- OpenSSL 3.0.2  in Ubuntu 22.04 LTS (EOL in April 2027)
+- OpenSSL 3.0.13 in Ubuntu 24.04 LTS (EOL in April 2029)
 
 The minimum version of APR is driven by the version of APR used by
 downstream distributions.
 
 The current state of APR in Debian is:
-- APR 1.6.5 in Debian 10 (EOL end June 2024)
-- APR 1.7.0 in Debian 11 (EOL end June 2026)
+- APR 1.7.0 in Debian 11 (EOL end August 2026)
+- APR 1.7.2 in Debian 12 (EOL end June 2028)
 
 And in Ubuntu:
-- APR 1.6.3 in Ubuntu 18.04 LTS (EOL in April 2028)
-- APR 1.6.5 in Ubuntu 20.04 LTS (EOL in April 2030)
-- APR 1.7.0 in Ubuntu 22.04 LTS (EOL in April 2032)
+- APR 1.7.0 in Ubuntu 22.04 LTS (EOL in April 2027)
+- APR 1.7.2 in Ubuntu 24.04 LTS (EOL in April 2029)
diff -Nru tomcat-native-1.3.1/native/tcnative.spec tomcat-native-1.3.8/native/tcnative.spec
--- tomcat-native-1.3.1/native/tcnative.spec	2024-07-18 06:40:35.000000000 -0300
+++ tomcat-native-1.3.8/native/tcnative.spec	2026-06-12 05:13:57.000000000 -0300
@@ -21,7 +21,7 @@
 
 Summary: Tomcat Native Java library
 Name: tcnative
-Version: 1.3.1
+Version: 1.3.8
 Release: 1
 License: Apache Software License
 Group: System Environment/Libraries
diff -Nru tomcat-native-1.3.1/NOTICE tomcat-native-1.3.8/NOTICE
--- tomcat-native-1.3.1/NOTICE	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/NOTICE	2026-06-11 17:01:29.000000000 -0300
@@ -1,5 +1,5 @@
 Apache Tomcat Native Library
-Copyright 2002-2024 The Apache Software Foundation
+Copyright 2002-2026 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff -Nru tomcat-native-1.3.1/xdocs/images/asf-logo.svg tomcat-native-1.3.8/xdocs/images/asf-logo.svg
--- tomcat-native-1.3.1/xdocs/images/asf-logo.svg	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/images/asf-logo.svg	2026-06-11 17:01:29.000000000 -0300
@@ -1,226 +1,43 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 525">
+  <defs>
+    <style>
+      .cls-1 {
+        fill: #7c297d;
+      }
 
-      http://www.apache.org/licenses/LICENSE-2.0
+      .cls-2 {
+        fill: #f79a23;
+      }
 
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 7127.6 2890" enable-background="new 0 0 7127.6 2890" xml:space="preserve">
-<path fill="#6D6E71" d="M7104.7,847.8c15.3,15.3,22.9,33.7,22.9,55.2c0,21.5-7.6,39.9-22.9,55.4c-15.3,15.4-33.8,23.1-55.6,23.1
-	c-21.8,0-40.2-7.6-55.4-22.9c-15.1-15.3-22.7-33.7-22.7-55.2c0-21.5,7.6-39.9,22.9-55.4c15.3-15.4,33.7-23.1,55.4-23.1
-	C7070.9,824.9,7089.4,832.5,7104.7,847.8z M7098.1,951.9c13.3-13.6,20-29.8,20-48.7s-6.6-35-19.8-48.5
-	c-13.2-13.4-29.4-20.1-48.6-20.1c-19.2,0-35.4,6.7-48.7,20.2c-13.3,13.5-19.9,29.7-19.9,48.7c0,19,6.6,35.2,19.7,48.6
-	c13.1,13.4,29.3,20.1,48.5,20.1S7084.7,965.4,7098.1,951.9z M7087.1,888.1c0,14-6.1,22.8-18.4,26.4l22.5,30.5h-18.2l-20.3-28.3
-	h-18.6v28.3h-14.7v-84.6h31.8c12.8,0,22,2.2,27.6,6.6C7084.4,871.4,7087.1,878.4,7087.1,888.1z M7068.2,900c3-2.4,4.4-6.5,4.4-12
-	c0-5.5-1.5-9.4-4.5-11.6c-3-2.2-8.4-3.2-16-3.2h-18v30.5h17.5C7059.7,903.6,7065.3,902.4,7068.2,900z"/>
-<path fill="#6D6E71" d="M1803.6,499.8v155.4h-20V499.8h-56.8v-19.2h133.9v19.2H1803.6z"/>
-<path fill="#6D6E71" d="M2082.2,655.2v-76.9h-105.2v76.9h-20V480.5h20v78.9h105.2v-78.9h20v174.7H2082.2z"/>
-<path fill="#6D6E71" d="M2241.4,499.8v57.4h88.1v19.2h-88.1v59.8h101.8v19h-121.8V480.5H2340v19.2H2241.4z"/>
-<path fill="#D22128" d="M1574.5,1852.4l417.3-997.6h80.1l417.3,997.6h-105.4l-129.3-311.9h-448.2l-127.9,311.9H1574.5z M2032.6,970
-	l-205.1,493.2h404.7L2032.6,970z"/>
-<path fill="#D22128" d="M2596.9,1852.4V854.8H3010c171.4,0,295.1,158.8,295.1,313.3c0,163-115.2,316.1-286.6,316.1h-324.6v368.1
-	H2596.9z M2693.9,1397.1h318.9c118,0,193.9-108.2,193.9-229c0-125.1-92.7-226.2-202.3-226.2h-310.5V1397.1z"/>
-<path fill="#D22128" d="M3250.5,1852.4l417.3-997.6h80.1l417.3,997.6h-105.4l-129.3-311.9h-448.2l-127.9,311.9H3250.5z M3708.6,970
-	l-205.1,493.2h404.7L3708.6,970z"/>
-<path fill="#D22128" d="M4637.3,849.1c177,0,306.3,89.9,368.1,217.8l-78.7,47.8c-63.2-132.1-186.9-177-295.1-177
-	c-238.9,0-369.5,213.6-369.5,414.5c0,220.6,161.6,420.1,373.7,420.1c112.4,0,244.5-56.2,307.7-185.5l81.5,42.1
-	c-64.6,148.9-241.7,231.8-394.8,231.8c-274,0-466.5-261.3-466.5-514.2C4163.8,1106.3,4336.6,849.1,4637.3,849.1z"/>
-<path fill="#D22128" d="M5949.1,854.8v997.6h-98.4v-466.5h-591.5v466.5h-96.9V854.8h96.9v444h591.5v-444H5949.1z"/>
-<path fill="#D22128" d="M6844.6,1765.2v87.1h-670.2V854.8H6832v87.1h-560.6v359.7h489v82.9h-489v380.8H6844.6z"/>
-<path fill="#6D6E71" d="M1667.6,2063.6c11.8,3.5,22.2,8.3,31,14.2l-10.3,22.6c-9-6-18.6-10.4-28.9-13.4c-10.2-2.9-20-4.4-29.2-4.4
-	c-13.6,0-24.5,2.4-32.6,7.3c-8.1,4.9-12.2,11.8-12.2,20.7c0,7.6,2.3,14,6.8,19c4.5,5,10.2,8.9,17,11.7c6.8,2.8,16.1,6,28,9.6
-	c14.4,4.6,26,8.9,34.7,12.9c8.8,4,16.3,9.9,22.5,17.8c6.2,7.8,9.3,18.2,9.3,31c0,11.7-3.2,21.8-9.5,30.6
-	c-6.3,8.7-15.3,15.5-26.8,20.3c-11.6,4.8-24.9,7.2-40,7.2c-15.1,0-29.7-2.9-43.9-8.7c-14.2-5.8-26.4-13.6-36.6-23.4l10.7-21.6
-	c9.6,9.4,20.7,16.7,33.3,21.9c12.6,5.2,24.8,7.8,36.8,7.8c15.3,0,27.3-3,36.1-8.9c8.8-5.9,13.2-13.9,13.2-23.9
-	c0-7.8-2.3-14.3-6.9-19.4c-4.6-5.1-10.3-9-17.1-11.9c-6.8-2.8-16.1-6-28-9.6c-14.2-4.2-25.7-8.3-34.6-12.2
-	c-8.9-3.9-16.4-9.7-22.5-17.5c-6.1-7.7-9.2-17.9-9.2-30.6c0-10.9,3-20.4,9-28.6c6-8.2,14.6-14.6,25.6-19.1
-	c11.1-4.5,23.8-6.8,38.2-6.8C1643.8,2058.3,1655.7,2060.1,1667.6,2063.6z"/>
-<path fill="#6D6E71" d="M1980.1,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
-	c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
-	c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
-	C1944.8,2058.6,1963.2,2063.3,1980.1,2072.8z M1881.9,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
-	c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
-	c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
-	c-13-7.4-27.2-11.2-42.6-11.2C1909.4,2081.5,1895.1,2085.2,1881.9,2092.7z"/>
-<path fill="#6D6E71" d="M2186.5,2082.4v74h98.4v23.2h-98.4v90.2h-24.1v-210.6h133.8v23.2H2186.5z"/>
-<path fill="#6D6E71" d="M2491.6,2082.4v187.4h-24.1v-187.4h-68.4v-23.2h161.4v23.2H2491.6z"/>
-<path fill="#6D6E71" d="M2871.8,2269.8l-56.8-177.4l-57.6,177.4h-24.5l-70.5-210.6h25.9l57.9,182.7l57.1-182.4l24.1-0.3l57.7,182.7
-	l57.1-182.7h25l-70.6,210.6H2871.8z"/>
-<path fill="#6D6E71" d="M3087.3,2216.6l-23.5,53.2h-25.6l94.4-210.6h25l94.1,210.6h-26.1l-23.5-53.2H3087.3z M3144.5,2086.6
-	l-46.9,106.8h94.4L3144.5,2086.6z"/>
-<path fill="#6D6E71" d="M3461.1,2202.7c-6,0.4-10.7,0.6-14.1,0.6h-56v66.5H3367v-210.6h80c26.2,0,46.6,6.2,61.2,18.5
-	c14.5,12.3,21.8,29.8,21.8,52.3c0,17.2-4.1,31.7-12.2,43.3c-8.1,11.6-19.8,20-35,25l49.2,71.5h-27.3L3461.1,2202.7z M3491.3,2167.6
-	c10.3-8.4,15.5-20.8,15.5-37c0-15.9-5.2-27.9-15.5-36c-10.3-8.1-25.1-12.2-44.3-12.2h-56v97.8h56
-	C3466.2,2180.2,3481,2176,3491.3,2167.6z"/>
-<path fill="#6D6E71" d="M3688.3,2082.4v69.2h106.2v23.2h-106.2v72.1h122.8v22.9h-146.9v-210.6h142.9v23.2H3688.3z"/>
-<path fill="#6D6E71" d="M4147,2082.4v74h98.4v23.2H4147v90.2h-24.1v-210.6h133.8v23.2H4147z"/>
-<path fill="#6D6E71" d="M4523.3,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
-	c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
-	c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
-	C4488.1,2058.6,4506.5,2063.3,4523.3,2072.8z M4425.2,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
-	c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
-	c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
-	c-13-7.4-27.2-11.2-42.6-11.2C4452.6,2081.5,4438.3,2085.2,4425.2,2092.7z"/>
-<path fill="#6D6E71" d="M4854.7,2247.7c-15.7,15.5-37.3,23.3-64.8,23.3c-27.7,0-49.4-7.8-65.1-23.3c-15.7-15.5-23.6-37-23.6-64.6
-	v-124h24.1v124c0,20.3,5.8,36.1,17.3,47.5c11.6,11.4,27.3,17.1,47.3,17.1c20.1,0,35.8-5.7,47.1-17c11.4-11.3,17-27.2,17-47.7v-124
-	h24.1v124C4878.2,2210.7,4870.4,2232.2,4854.7,2247.7z"/>
-<path fill="#6D6E71" d="M5169.5,2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3,169.3v-169.3h23.8v210.6H5169.5z"/>
-<path fill="#6D6E71" d="M5478.4,2073.1c16.4,9.3,29.4,21.9,38.9,37.9c9.6,16,14.3,33.9,14.3,53.5s-4.8,37.6-14.3,53.6
-	c-9.5,16.1-22.6,28.7-39.3,37.9c-16.6,9.2-35.2,13.8-55.5,13.8h-84.3v-210.6h85.2C5443.7,2059.2,5462,2063.8,5478.4,2073.1z
-	 M5362.3,2246.9h61.4c15.5,0,29.6-3.5,42.3-10.6c12.7-7.1,22.8-16.9,30.2-29.5c7.4-12.5,11.1-26.5,11.1-42
-	c0-15.5-3.8-29.4-11.3-41.9c-7.5-12.5-17.7-22.3-30.6-29.6c-12.8-7.2-27-10.9-42.6-10.9h-60.5V2246.9z"/>
-<path fill="#6D6E71" d="M5668.6,2216.6l-23.5,53.2h-25.6l94.4-210.6h25l94.1,210.6H5807l-23.5-53.2H5668.6z M5725.8,2086.6
-	l-46.9,106.8h94.4L5725.8,2086.6z"/>
-<path fill="#6D6E71" d="M5991,2082.4v187.4H5967v-187.4h-68.4v-23.2h161.4v23.2H5991z"/>
-<path fill="#6D6E71" d="M6175.9,2269.8v-210.6h24.1v210.6H6175.9z"/>
-<path fill="#6D6E71" d="M6493.7,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
-	c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
-	c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
-	C6458.5,2058.6,6476.9,2063.3,6493.7,2072.8z M6395.6,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
-	c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
-	c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
-	c-13-7.4-27.2-11.2-42.6-11.2C6423,2081.5,6408.8,2085.2,6395.6,2092.7z"/>
-<path fill="#6D6E71" d="M6826.5,2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3,169.3v-169.3h23.8v210.6H6826.5z"/>
-<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4516.6152" y1="-2338.7222" x2="-4108.4111" y2="-1861.3982" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0" style="stop-color:#F69923"/>
-	<stop  offset="0.3123" style="stop-color:#F79A23"/>
-	<stop  offset="0.8383" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_1_)" d="M1230.1,13.7c-45.3,26.8-120.6,102.5-210.5,212.3l82.6,155.9c58-82.9,116.9-157.5,176.3-221.2
-	c4.6-5.1,7-7.5,7-7.5c-2.3,2.5-4.6,5-7,7.5c-19.2,21.2-77.5,89.2-165.5,224.4c84.7-4.2,214.9-21.6,321.1-39.7
-	c31.6-177-31-258-31-258S1323.4-41.4,1230.1,13.7z"/>
-<path fill="none" d="M1090.2,903.1c0.6-0.1,1.2-0.2,1.8-0.3l-11.9,1.3c-0.7,0.3-1.4,0.7-2.1,1
-	C1082.1,904.4,1086.2,903.7,1090.2,903.1z"/>
-<path fill="none" d="M1005.9,1182.3c-6.7,1.5-13.7,2.7-20.7,3.7C992.3,1185,999.2,1183.8,1005.9,1182.3z"/>
-<path fill="none" d="M432.9,1808.8c0.9-2.3,1.8-4.7,2.6-7c18.2-48,36.2-94.7,54-140.1c20-51,39.8-100.4,59.3-148.3
-	c20.6-50.4,40.9-99.2,60.9-146.3c21-49.4,41.7-97,62-142.8c16.5-37.3,32.8-73.4,48.9-108.3c5.4-11.7,10.7-23.2,16-34.6
-	c10.5-22.7,21-44.8,31.3-66.5c9.5-20,19-39.6,28.3-58.8c3.1-6.4,6.2-12.8,9.3-19.1c0.5-1,1-2,1.5-3.1l-10.2,1.1l-8-15.9
-	c-0.8,1.6-1.6,3.1-2.4,4.6c-14.5,28.8-28.9,57.9-43.1,87.2c-8.2,16.9-16.4,34-24.6,51c-22.6,47.4-44.8,95.2-66.6,143.3
-	c-22.1,48.6-43.7,97.5-64.9,146.5c-20.8,48.1-41.3,96.2-61.2,144.2c-20,48-39.5,95.7-58.5,143.2c-19.9,49.5-39.2,98.7-58,147.2
-	c-4.2,10.9-8.5,21.9-12.7,32.8c-15,39.2-29.7,77.8-44,116l12.7,25.1l11.4-1.2c0.4-1.1,0.8-2.3,1.3-3.4
-	C396.7,1905.4,414.9,1856.4,432.9,1808.8z"/>
-<path fill="none" d="M980,1186.8L980,1186.8c0.1,0,0.1,0,0.1-0.1C980.1,1186.8,980.1,1186.8,980,1186.8z"/>
-<path fill="#BE202E" d="M952.6,1323c-10.6,1.9-21.4,3.8-32.5,5.7c-0.1,0-0.1,0.1-0.2,0.1c5.6-0.8,11.2-1.7,16.6-2.6
-	C942,1325.2,947.3,1324.1,952.6,1323z"/>
-<path opacity="0.35" fill="#BE202E" d="M952.6,1323c-10.6,1.9-21.4,3.8-32.5,5.7c-0.1,0-0.1,0.1-0.2,0.1c5.6-0.8,11.2-1.7,16.6-2.6
-	C942,1325.2,947.3,1324.1,952.6,1323z"/>
-<path fill="#BE202E" d="M980.3,1186.7C980.2,1186.7,980.2,1186.7,980.3,1186.7c-0.1,0.1-0.2,0.1-0.2,0.1c1.8-0.2,3.5-0.5,5.2-0.8
-	c7-1,13.9-2.2,20.7-3.7C997.5,1183.8,989,1185.2,980.3,1186.7L980.3,1186.7L980.3,1186.7z"/>
-<path opacity="0.35" fill="#BE202E" d="M980.3,1186.7C980.2,1186.7,980.2,1186.7,980.3,1186.7c-0.1,0.1-0.2,0.1-0.2,0.1
-	c1.8-0.2,3.5-0.5,5.2-0.8c7-1,13.9-2.2,20.7-3.7C997.5,1183.8,989,1185.2,980.3,1186.7L980.3,1186.7L980.3,1186.7z"/>
-<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-7537.7339" y1="-2391.4075" x2="-4625.4141" y2="-2391.4075" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_2_)" d="M858.6,784.7c25.1-46.9,50.5-92.8,76.2-137.4c26.7-46.4,53.7-91.3,80.9-134.7
-	c1.6-2.6,3.2-5.2,4.8-7.7c27-42.7,54.2-83.7,81.6-122.9L1019.5,226c-6.2,7.6-12.5,15.3-18.8,23.2c-23.8,29.7-48.6,61.6-73.9,95.5
-	c-28.6,38.2-58,78.9-87.8,121.7c-27.6,39.5-55.5,80.9-83.5,123.7c-23.8,36.5-47.7,74-71.4,112.5c-0.9,1.4-1.8,2.9-2.6,4.3
-	l107.5,212.3C811.8,873.6,835.1,828.7,858.6,784.7z"/>
-<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-7186.1777" y1="-2099.3059" x2="-5450.7183" y2="-2099.3059" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0" style="stop-color:#282662"/>
-	<stop  offset="9.548390e-02" style="stop-color:#662E8D"/>
-	<stop  offset="0.7882" style="stop-color:#9F2064"/>
-	<stop  offset="0.9487" style="stop-color:#CD2032"/>
-</linearGradient>
-<path fill="url(#SVGID_3_)" d="M369,1981c-14.2,39.1-28.5,78.9-42.9,119.6c-0.2,0.6-0.4,1.2-0.6,1.8c-2,5.7-4.1,11.5-6.1,17.2
-	c-9.7,27.4-18,52.1-37.3,108.2c31.7,14.5,57.1,52.5,81.1,95.6c-2.6-44.7-21-86.6-56.2-119.1c156.1,7,290.6-32.4,360.1-146.6
-	c6.2-10.2,11.9-20.9,17-32.2c-31.6,40.1-70.8,57.1-144.5,53c-0.2,0.1-0.3,0.1-0.5,0.2c0.2-0.1,0.3-0.1,0.5-0.2
-	c108.6-48.6,163.1-95.3,211.2-172.6c11.4-18.3,22.5-38.4,33.8-60.6c-94.9,97.5-205,125.3-320.9,104.2l-86.9,9.5
-	C374.4,1966.3,371.7,1973.6,369,1981z"/>
-<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2418.5454" x2="-4461.8428" y2="-2418.5454" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_4_)" d="M409.6,1786.3c18.8-48.5,38.1-97.7,58-147.2c19-47.4,38.5-95.2,58.5-143.2
-	c20-48,40.4-96.1,61.2-144.2c21.2-49,42.9-97.8,64.9-146.5c21.8-48.1,44-95.9,66.6-143.3c8.1-17.1,16.3-34.1,24.6-51
-	c14.2-29.3,28.6-58.4,43.1-87.2c0.8-1.6,1.6-3.1,2.4-4.6L681.4,706.8c-1.8,2.9-3.5,5.8-5.3,8.6c-25.1,40.9-50,82.7-74.4,125.4
-	c-24.7,43.1-49,87.1-72.7,131.7c-20,37.6-39.6,75.6-58.6,113.9c-3.8,7.8-7.6,15.5-11.3,23.2c-23.4,48.2-44.6,94.8-63.7,139.5
-	c-21.7,50.7-40.7,99.2-57.5,145.1c-11,30.2-21,59.4-30.1,87.4c-7.5,24-14.7,47.9-21.5,71.8c-16,56.3-29.9,112.4-41.2,168.3
-	L353,1935.1c14.3-38.1,28.9-76.8,44-116C401.1,1808.2,405.4,1797.3,409.6,1786.3z"/>
-<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-7161.7642" y1="-2379.1431" x2="-5631.2524" y2="-2379.1431" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0" style="stop-color:#282662"/>
-	<stop  offset="9.548390e-02" style="stop-color:#662E8D"/>
-	<stop  offset="0.7882" style="stop-color:#9F2064"/>
-	<stop  offset="0.9487" style="stop-color:#CD2032"/>
-</linearGradient>
-<path fill="url(#SVGID_5_)" d="M243.5,1729.4c-13.6,68.2-23.2,136.2-28,203.8c-0.2,2.4-0.4,4.7-0.5,7.1
-	c-33.7-54-124-106.8-123.8-106.2c64.6,93.7,113.7,186.7,120.9,278c-34.6,7.1-82-3.2-136.8-23.3c57.1,52.5,100,67,116.7,70.9
-	c-52.5,3.3-107.1,39.3-162.1,80.8c80.5-32.8,145.5-45.8,192.1-35.3C148.1,2414.2,74.1,2645,0,2890c22.7-6.7,36.2-21.9,43.9-42.6
-	c13.2-44.4,100.8-335.6,238-718.2c3.9-10.9,7.8-21.8,11.8-32.9c1.1-3,2.2-6.1,3.3-9.2c14.5-40.1,29.5-81.1,45.1-122.9
-	c3.5-9.5,7.1-19,10.7-28.6c0.1-0.2,0.1-0.4,0.2-0.6l-107.9-213.2C244.6,1724.4,244,1726.9,243.5,1729.4z"/>
-<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2117.1309" x2="-4461.8428" y2="-2117.1309" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_6_)" d="M805.6,937c-3.1,6.3-6.2,12.7-9.3,19.1c-9.3,19.2-18.8,38.8-28.3,58.8
-	c-10.3,21.7-20.7,43.9-31.3,66.5c-5.3,11.4-10.6,22.9-16,34.6c-16.1,35-32.4,71.1-48.9,108.3c-20.3,45.8-41,93.4-62,142.8
-	c-20,47.1-40.3,95.9-60.9,146.3c-19.5,47.9-39.3,97.3-59.3,148.3c-17.8,45.4-35.9,92.1-54,140.1c-0.9,2.3-1.8,4.7-2.6,7
-	c-18,47.6-36.2,96.6-54.6,146.8c-0.4,1.1-0.8,2.3-1.3,3.4l86.9-9.5c-1.7-0.3-3.5-0.5-5.2-0.9c103.9-13,242.1-90.6,331.4-186.5
-	c41.1-44.2,78.5-96.3,113-157.3c25.7-45.4,49.8-95.8,72.8-151.5c20.1-48.7,39.4-101.4,58-158.6c-23.9,12.6-51.2,21.8-81.4,28.2
-	c-5.3,1.1-10.7,2.2-16.1,3.1c-5.5,1-11,1.8-16.6,2.6l0,0l0,0c0.1,0,0.1-0.1,0.2-0.1c96.9-37.3,158-109.2,202.4-197.4
-	c-25.5,17.4-66.9,40.1-116.6,51.1c-6.7,1.5-13.7,2.7-20.7,3.7c-1.7,0.3-3.5,0.6-5.2,0.8l0,0l0,0c0.1,0,0.1,0,0.1-0.1
-	c0,0,0.1,0,0.1,0l0,0c33.6-14.1,62-29.8,86.6-48.4c5.3-4,10.4-8.1,15.3-12.3c7.5-6.5,14.7-13.3,21.5-20.5c4.4-4.6,8.6-9.3,12.7-14.2
-	c9.6-11.5,18.7-23.9,27.1-37.3c2.6-4.1,5.1-8.3,7.6-12.6c3.2-6.2,6.3-12.3,9.3-18.3c13.5-27.2,24.4-51.5,33-72.8
-	c4.3-10.6,8.1-20.5,11.3-29.7c1.3-3.7,2.5-7.2,3.7-10.6c3.4-10.2,6.2-19.3,8.4-27.3c3.3-12,5.3-21.5,6.4-28.4l0,0l0,0
-	c-3.3,2.6-7.1,5.2-11.3,7.7c-29.3,17.5-79.5,33.4-119.9,40.8l79.8-8.8l-79.8,8.8c-0.6,0.1-1.2,0.2-1.8,0.3c-4,0.7-8.1,1.3-12.2,2
-	c0.7-0.3,1.4-0.7,2.1-1l-273,29.9C806.6,935,806.1,936,805.6,937z"/>
-<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-7554.8232" y1="-2132.0981" x2="-4642.5034" y2="-2132.0981" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_7_)" d="M1112.9,385.1c-24.3,37.3-50.8,79.6-79.4,127.5c-1.5,2.5-3,5.1-4.5,7.6
-	c-24.6,41.5-50.8,87.1-78.3,137c-23.8,43.1-48.5,89.3-74.3,139c-22.4,43.3-45.6,89.2-69.4,137.8l273-29.9
-	c79.5-36.6,115.1-69.7,149.6-117.6c9.2-13.2,18.4-27,27.5-41.3c28-43.8,55.6-92,80.1-139.9c23.7-46.3,44.7-92.2,60.7-133.5
-	c10.2-26.3,18.4-50.8,24.1-72.3c5-19,8.9-36.9,11.9-54.1C1327.9,363.5,1197.6,380.9,1112.9,385.1z"/>
-<path fill="#BE202E" d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
-<path opacity="0.35" fill="#BE202E" d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
-<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2027.484" x2="-4461.8433" y2="-2027.484" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_8_)" d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
-<path fill="#BE202E" d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
-<path opacity="0.35" fill="#BE202E" d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
-<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2037.7417" x2="-4461.8433" y2="-2037.7417" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_9_)" d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
-<path fill="#BE202E" d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7L980.2,1186.7
-	C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
-<path opacity="0.35" fill="#BE202E" d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7
-	L980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
-<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-5738.0635" y1="-2039.799" x2="-5094.3457" y2="-2039.799" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
-	<stop  offset="0.3233" style="stop-color:#9E2064"/>
-	<stop  offset="0.6302" style="stop-color:#C92037"/>
-	<stop  offset="0.7514" style="stop-color:#CD2335"/>
-	<stop  offset="1" style="stop-color:#E97826"/>
-</linearGradient>
-<path fill="url(#SVGID_10_)" d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7L980.2,1186.7
-	C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
-</svg>
+      .cls-3 {
+        fill: #dd552c;
+      }
+
+      .cls-4 {
+        fill: #d22128;
+      }
+    </style>
+  </defs>
+  <g>
+    <g>
+      <path class="cls-1" d="M458.8041825,181.7454822h49.0451573l87.4128103,220.0939304h-53.4548455l-14.7775045-38.0445002h-87.4060779l-15.0939249,38.0445002h-53.1384251l87.4128103-220.0939304ZM514.4537735,324.4914631l-31.1236462-80.4919562-30.8139581,80.4919562h61.9376043Z"/>
+      <path class="cls-1" d="M622.7166664,331.7220052h48.7354693c.3164204,21.0655178,16.0364536,33.3318564,40.2459781,33.3318564,20.7490974,0,33.9579648-8.4894912,33.9579648-23.2669957,0-15.4103452-14.1513961-24.5259448-45.2750423-31.4467989-51.5697879-10.6909691-76.0957328-32.0661749-76.0957328-68.2256176,0-39.9295577,31.7564869-64.7719229,82.3837461-64.7719229,52.189164,0,85.5210204,28.2960599,85.5210204,72.6285734h-48.1093609c0-19.8065687-13.8349757-31.7564869-36.7855511-31.7564869-21.0655178,0-33.9579648,8.8059116-33.9579648,23.2669957,0,13.5252877,11.6334979,22.0147789,45.2750423,29.8714294,54.7137946,12.892447,77.6643699,33.6415444,77.6643699,68.542038,0,41.5049272-32.0729073,66.3472924-84.2620713,66.3472924-55.339903,0-89.2978678-28.9289006-89.2978678-74.5203633Z"/>
+      <path class="cls-1" d="M852.9091193,181.7454822h137.7169167v45.2750423h-87.7224983v55.0234826h79.8591155v44.0228255h-79.8591155v75.7725801h-49.9944184v-220.0939304Z"/>
+    </g>
+    <g>
+      <path class="cls-3" d="M141.1077177,209.8881008c13.1869872-32.608129,27.9005344-65.1523006,43.6878912-93.9970469-23.5665852-17.5041056-46.1956909-55.2490163-55.4930639-71.9721694-3.3392448,3.7936783-5.5070609,8.1629723-6.4899838,11.7176522-8.7587851,31.6252061,22.4204029,69.8144518-2.6929393,55.86166-20.9241385-11.6267655-68.040478-37.0885068-86.0124818-11.7816095,20.1280383,25.862316,72.7733189,90.9304622,107.0005776,110.1715137Z"/>
+      <path class="cls-2" d="M184.7956089,115.8910539c15.2975784-27.9493439,31.5999598-52.4281623,48.5015202-70.0635487,0,0-16.8578001,24.4013964-40.9360438,73.180626,14.5822664,4.0158458,56.1124399,12.2562401,113.9601427-2.686207,1.4222086-10.5125619-5.645074-22.0753701-40.8636711-25.9464703-22.9926525-2.5246306,27.5975787-54.9023003-9.0516423-79.6739759-1.1832102-.8011494-2.3462234-1.508046-3.4856733-2.1408868-1.2286536-.4409688-2.5263137-.8449097-3.9114944-1.2050903-42.8025874-11.1689658-48.7354693,61.409115-65.8154369,45.8068978-27.6009449-25.2126444-45.0225792-19.3218396-53.890765-9.2435142,9.297373,16.7231532,31.9264787,54.4680639,55.4930639,71.9721694Z"/>
+      <path class="cls-4" d="M106.6818547,303.8380213c9.6626029-28.9457315,21.2860022-61.4663399,34.425863-93.9499204-34.2272587-19.2410514-86.8725393-84.3091977-107.0005776-110.1715137-3.5933909,5.0559936-6.0490149,12.1081284-6.8669953,21.7522173-4.3894911,51.802054,49.0518897,90.152876,38.3979485,97.1578844-14.0924881,9.2670774-42.1411341-22.2605096-53.19565-2.2284073,16.0229889,20.5841549,48.6614135,57.7770131,94.2394114,87.4397396Z"/>
+      <path class="cls-3" d="M254.7564893,192.1180675c-27.0589909-9.6508213,28.2758628-35.5333343,46.2445004-62.9912168,2.2990969-3.5109196,4.6756159-8.0485224,5.3202382-12.8049265-57.8477027,14.942447-99.3778763,6.7020527-113.9601427,2.686207-12.4649429,25.2564046-26.8587035,57.0835812-41.8701571,95.4579665,15.6341958,6.6852219,79.4703224,31.3794754,169.6366631,31.50739,15.1595653-39.4852227-39.6905594-44.6994265-65.3711019-53.8554202Z"/>
+      <path class="cls-4" d="M117.1371916,309.0488589c15.9001236,4.9550083,68.5841152,19.7560761,124.5366618,17.5276688,7.5166669-20.3518889-20.585838-22.3379316-22.8748364-38.6605101-1.7722907-12.6298854,73.9565291,10.6135471,98.3225807-35.3111668,1.2320197-2.3226602,2.1930625-4.5140395,3.0059935-6.6313631-90.1663407-.1279146-154.0024672-24.8221682-169.6366631-31.50739-10.9703615,28.0435968-22.2554604,59.5173251-33.3537365,94.5827612Z"/>
+      <path class="cls-1" d="M117.1371916,309.0488589c-7.1447046,22.5701977-14.1934733,46.6821031-21.0352222,72.1640414-2.4270116,9.0348114-4.8254106,18.2379315-7.190148,27.6430221,53.1064464,17.531035,102.0085414.0403941,103.6663821-21.6377674.0134647-.1716749-.018514-.2995895-.0084154-.464532,1.2639984-22.9606739-33.150083-10.2331694-32.3354689-24.0378496.8179803-13.9056654,60.0811593-.0807882,78.4082944-29.8949926,1.4053777-2.2856322,2.3209771-4.3154353,3.0312398-6.244253-55.9525467,2.2284073-108.6365383-12.5726604-124.5366618-17.5276688Z"/>
+      <path class="cls-1" d="M12.4424433,216.3982816c-.7742201,1.4036946-1.4727012,3.0261906-2.068514,4.9651069-10.2920775,33.4496725,62.4846076,78.3847312,52.5830064,88.180298-8.9254108,8.8261086-20.5572255-11.3440069-34.9004936-3.0127259-1.5720033.9155994-3.1675699,2.0701971-4.8052136,3.749918-16.2215932,16.6188018-.2541461,64.4958967,45.7698699,90.0518908-10.7397786,36.0618236-21.4324308,76.351562-31.8995493,118.4859638,3.7970444-1.3296388,8.3413795-2.6626438,9.4724141-6.244253,1.6982349-6.9814452,12.1939658-49.4625629,29.2352225-107.0948305,0,0,3.1103449-11.8051727,8.8042285-31.254927,5.2646964-17.9854685,12.7460184-42.5147795,22.0484407-70.3867014-45.577998-29.6627266-78.2164225-66.8555847-94.2394114-87.4397396Z"/>
+    </g>
+  </g>
+  <g>
+    <polygon class="cls-1" points="404.1671788 144.7351535 413.43089 144.7351535 413.43089 82.5349876 436.7786739 82.5349876 436.7786739 73.4732468 380.8193949 73.4732468 380.8193949 82.5349876 404.1671788 82.5349876 404.1671788 144.7351535"/>
+    <polygon class="cls-1" points="464.8525663 112.9584696 501.321697 112.9584696 501.321697 144.7351535 510.6796611 144.7351535 510.6796611 73.4732468 501.321697 73.4732468 501.321697 103.8899964 464.8525663 103.8899964 464.8525663 73.4732468 455.5955874 73.4732468 455.5955874 144.7351535 464.8525663 144.7351535 464.8525663 112.9584696"/>
+    <polygon class="cls-1" points="581.40298 135.9629037 546.2331925 135.9629037 546.2331925 112.8574844 577.8213707 112.8574844 577.8213707 104.0852345 546.2331925 104.0852345 546.2331925 82.1512438 580.3392689 82.1512438 580.3392689 73.4732468 536.9762136 73.4732468 536.9762136 144.7351535 581.40298 144.7351535 581.40298 135.9629037"/>
+  </g>
+</svg>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/xdocs/index.xml tomcat-native-1.3.8/xdocs/index.xml
--- tomcat-native-1.3.1/xdocs/index.xml	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/index.xml	2026-06-11 17:01:29.000000000 -0300
@@ -60,10 +60,10 @@
 <section name="Headlines">
 <ul>
 
-<li><a href="news/2024.html#20240208">12 February 2024 - <b>TC-Native-1.3.0
+<li><a href="news/2026.html#20260310">10 March 2026 - <b>Tomcat-Native-1.3.7
 released</b></a>
 <p>The Apache Tomcat team is proud to announce the immediate availability of
-Tomcat Native 1.3.0 Stable.</p>
+Tomcat Native 1.3.7 Stable.</p>
 <p>
 The sources and the binaries for selected platforms are available from the
 <a href="../download-native.cgi">Download page</a>.
@@ -72,6 +72,10 @@
 Please see the <a href="miscellaneous/changelog.html">Changelog</a> for a full
 list of changes.
 </p>
+<p>
+Note: End of support for Tomcat Native 1.3.x has been announced as 31 March
+2027.
+</p>
 </li>
 </ul>
 </section>
diff -Nru tomcat-native-1.3.1/xdocs/miscellaneous/changelog.xml tomcat-native-1.3.8/xdocs/miscellaneous/changelog.xml
--- tomcat-native-1.3.1/xdocs/miscellaneous/changelog.xml	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/miscellaneous/changelog.xml	2026-06-11 17:01:29.000000000 -0300
@@ -31,7 +31,150 @@
   started from the 1.2.39 tag.
   </p>
 </section>
-<section name="Changes in 1.3.1">
+<section name="1.3.8" rtext="">
+  <changelog>
+    <fix>
+      Fix a memory leak when parsing certificates. Pull request <pr>44</pr>
+      provided by chenjp. (markt)
+    </fix>
+    <fix>
+      Fix two potential memory leaks on error paths identified by Copilot.
+      (markt)
+    </fix>
+    <fix>
+      <bug>69988</bug>: Fix post handshake authentication when Tomcat is
+      configured with a trust store using JSSE style configuration. (markt)
+    </fix>
+    <fix>
+      <bug>70102</bug>: Correct expected size of tickets when calling
+      <code>SSLContext.setSessionTicketKeys</code>. (markt)
+    </fix>
+  </changelog>
+</section>
+<section name="1.3.7" rtext="2026-03-10">
+  <changelog>
+    <scode>
+      Refactor access to ASN1_OCTET_STRING to use setters to fix errors when
+      building against the latest OpenSSL 4.0.x code. (markt)
+    </scode>
+    <fix>
+      Fix the handling of OCSP requests with multiple responder URIs. (jfclere)
+    </fix>
+    <fix>
+      Fix the handling of <code>TRY_AGAIN</code> responses to OCSP requests when
+      soft fail is disabled. (jfclere)
+    </fix>
+  </changelog>
+</section>
+<section name="1.3.6" rtext="2026-02-11">
+  <changelog>
+    <scode>
+      Refactor the SSL_CONF_CTX clean-up to align it with SSL and SSL_CTX
+      clean-up. (markt)
+    </scode>
+    <fix>
+      Fix unnecessarily large buffer allocation when filtering out NULL and
+      export ciphers. Pull requests <pr>35</pr> and <pr>37</pr> provided by
+      chenjp. (markt)
+    </fix>
+    <fix>
+      Fix a potential memory leak if an invalid <code>OpenSSLConf</code> is
+      provided. Pull request <pr>36</pr> provided by chenjp. (markt)
+    </fix>
+    <fix>
+      Refactor setting of OCSP configuration defaults as they were only applied
+      if the SSL_CONF_CTX was used. While one was always used with Tomcat
+      versions aware of the OCSP configuration options, one was not always used
+      with Tomcat versions unaware of the OCSP configuration options leading to
+      OCSP verification being enabled by default when the expected behaviour was
+      disabled by default. (markt)
+    </fix>
+    <scode>
+      Improve performance for the rare case of handling large OCSP responses.
+      (markt)
+    </scode>
+  </changelog>
+</section>
+<section name="1.3.5" rtext="2026-01-19">
+  <changelog>
+    <fix>
+      Remove group write permissions from the files in the tar.gz source
+      archive. (markt)
+    </fix>
+    <fix>
+      Clear an additional error in OCSP processing that was preventing OCSP soft
+      fail working with Tomcat's APR/native connector. (markt)
+    </fix>
+  </changelog>
+</section>
+<section name="1.3.4" rtext="2026-01-12">
+  <changelog>
+    <fix>
+      Correct logic error that prevented the configuration of TLS 1.3 cipher
+      suites. (markt)
+    </fix>
+  </changelog>
+</section>
+<section name="1.3.3" rtext="not released">
+  <changelog>
+    <fix>
+      Refactor the addition of TLS 1.3 cipher suite configuration to avoid a
+      regression when running a version of Tomcat that pre-dates this change.
+      (markt)
+    </fix>
+  </changelog>
+</section>
+<section name="1.3.2" rtext="not released">
+  <changelog>
+    <update>
+      Rename configure.in to modern autotools style configure.ac. (rjung)
+    </update>
+    <update>
+      Fix incomplete updates for autotools generated files during "buildconf" execution. (rjung)
+    </update>
+    <update>
+      Improve quoting in tcnative.m4. (rjung)
+    </update>
+    <update>
+      Update the minimum version of autoconf for releasing to 2.68. (rjung)
+    </update>
+    <fix>
+      Fix the autoconf warnings when creating a release. (markt)
+    </fix>
+    <update>
+      The Windows binaries are now built with OCSP support enabled by default.
+      (markt)
+    </update>
+    <add>
+      Include a nonce with OCSP requests and check the nonce, if any, in the
+      OCSP response. (markt)
+    </add>
+    <add>
+      Expand verification of OCSP responses. (markt)
+    </add>
+    <add>
+      Add the ability to configure the OCSP checks to soft-fail - i.e. if the
+      responder cannot be contacted or fails to respond in a timely manner the
+      OCSP check will not fail. (markt)
+    </add>
+    <add>
+      Add a configurable timeout to the writing of OCSP requests and reading of
+      OCSP responses. (markt)
+    </add>
+    <add>
+      Add the ability to control the OCSP verification flags. (markt)
+    </add>
+    <add>
+      Configure TLS 1.3 connections from the provided ciphers list as well as
+      connections using TLS 1.2 and earlier. Pull request provided by gastush.
+      (markt)
+    </add>
+    <update>
+      Update the Windows build environment to use Visual Studio 2022. (markt)
+    </update>
+  </changelog>
+</section>
+<section name="1.3.1" rtext="2024-07-24">
   <changelog>
     <fix>
       Fix a crash on Windows when <code>SSLContext.setCACertificate()</code>
@@ -53,7 +196,7 @@
     </update>
   </changelog>
 </section>
-<section name="Changes in 1.3.0">
+<section name="1.3.0" rtext="2024-02-12">
   <changelog>
     <update>
       Drop useless <code>compile.optimize</code> option. (michaelo)
diff -Nru tomcat-native-1.3.1/xdocs/miscellaneous/project.xml tomcat-native-1.3.8/xdocs/miscellaneous/project.xml
--- tomcat-native-1.3.1/xdocs/miscellaneous/project.xml	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/miscellaneous/project.xml	2026-06-11 17:01:29.000000000 -0300
@@ -35,6 +35,7 @@
     </menu>
 
     <menu name="News">
+      <item name="2026" href="../news/2026.html"/>
       <item name="2024" href="../news/2024.html"/>
     </menu>
 
diff -Nru tomcat-native-1.3.1/xdocs/news/2024.xml tomcat-native-1.3.8/xdocs/news/2024.xml
--- tomcat-native-1.3.1/xdocs/news/2024.xml	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/news/2024.xml	2026-06-11 17:01:29.000000000 -0300
@@ -30,9 +30,9 @@
 
     <section name="2024 News & Status">
     
-      <subsection anchor="20240208" name="12 February 2024 - TC-Native-1.3.0 released">
+      <subsection anchor="20240724" name="24 July 2024 - TC-Native-1.3.1 released">
         <p>The Apache Tomcat team is proud to announce the immediate
-        availability of Tomcat Native 1.3.0.</p>
+        availability of Tomcat Native 1.3.1.</p>
       </subsection>
       
     </section>
diff -Nru tomcat-native-1.3.1/xdocs/news/2026.xml tomcat-native-1.3.8/xdocs/news/2026.xml
--- tomcat-native-1.3.1/xdocs/news/2026.xml	1969-12-31 21:00:00.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/news/2026.xml	2026-06-11 17:01:29.000000000 -0300
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!DOCTYPE document [
+  <!ENTITY project SYSTEM "project.xml">
+]>
+<document url="2026.html">
+
+  &project;
+
+  <properties>
+    <title>2026 News and Status</title>
+  </properties>
+
+  <body>
+
+    <section name="2026 News & Status">
+    
+      <subsection anchor="20260310" name="10 March 2026 - Tomcat-Native-1.3.7 released">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.7.</p>
+      </subsection>
+      
+      <subsection anchor="20260211" name="11 February 2026 - Tomcat-Native-1.3.6 released">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.6.</p>
+      </subsection>
+      
+      <subsection anchor="20260119" name="19 January 2026 - Tomcat-Native-1.3.5 released">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.5.</p>
+      </subsection>
+      
+      <subsection anchor="20260112" name="12 January 2026 - Tomcat-Native-1.3.4 released">
+        <p>The Apache Tomcat team is proud to announce the immediate
+        availability of Tomcat Native 1.3.4.</p>
+      </subsection>
+      
+    </section>
+    
+  </body>
+
+</document>
\ Nenhum caractere de nova linha no final do arquivo
diff -Nru tomcat-native-1.3.1/xdocs/news/project.xml tomcat-native-1.3.8/xdocs/news/project.xml
--- tomcat-native-1.3.1/xdocs/news/project.xml	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/news/project.xml	2026-06-11 17:01:29.000000000 -0300
@@ -35,6 +35,7 @@
     </menu>
 
     <menu name="News">
+      <item name="2026" href="../news/2026.html"/>
       <item name="2024" href="../news/2024.html"/>
     </menu>
 
diff -Nru tomcat-native-1.3.1/xdocs/project.xml tomcat-native-1.3.8/xdocs/project.xml
--- tomcat-native-1.3.1/xdocs/project.xml	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/project.xml	2026-06-11 17:01:29.000000000 -0300
@@ -35,6 +35,7 @@
     </menu>
 
     <menu name="News">
+      <item name="2026" href="news/2026.html"/>
       <item name="2024" href="news/2024.html"/>
     </menu>
 
diff -Nru tomcat-native-1.3.1/xdocs/style.xsl tomcat-native-1.3.8/xdocs/style.xsl
--- tomcat-native-1.3.1/xdocs/style.xsl	2024-07-18 06:11:03.000000000 -0300
+++ tomcat-native-1.3.8/xdocs/style.xsl	2026-06-11 17:01:29.000000000 -0300
@@ -126,7 +126,7 @@
 
   <!-- Footer -->
   <footer><div id="footer">
-    Copyright ? 2008-2024, The Apache Software Foundation
+    Copyright ? 2008-2026, The Apache Software Foundation
   </div></footer>
 </div>
 </body>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-maintainers/attachments/20260831/bab5b493/attachment-0001.sig>


More information about the pkg-java-maintainers mailing list