From f763afe7eec0454af93f8a6063fde1013a1f533e367938ff3be849da3e8d11f0 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Wed, 4 Dec 2024 17:13:45 +0000 Subject: [PATCH 1/4] [info=8800b2b09cf647b9cea744d23141cbca73e6897cda26094650047f982a54ea65] OBS-URL: https://build.opensuse.org/package/show/devel:languages:nodejs/nodejs22?expand=0&rev=21 --- CVE-2024-21538.patch | 46 ++++++++++++++++++++++++ SHASUMS256.txt | 82 +++++++++++++++++++++--------------------- SHASUMS256.txt.sig | Bin 566 -> 566 bytes _scmsync.obsinfo | 4 +-- fix_ci_tests.patch | 61 +++++++++++++------------------ icu76.1.patch | 13 ------- linker_lto_jobs.patch | 12 +++---- node-v22.11.0.tar.xz | 3 -- node-v22.12.0.tar.xz | 3 ++ nodejs-libpath.patch | 26 +++++++------- nodejs22.changes | 12 +++++++ nodejs22.spec | 37 +++++++++---------- 12 files changed, 166 insertions(+), 133 deletions(-) create mode 100644 CVE-2024-21538.patch delete mode 100644 icu76.1.patch delete mode 100644 node-v22.11.0.tar.xz create mode 100644 node-v22.12.0.tar.xz diff --git a/CVE-2024-21538.patch b/CVE-2024-21538.patch new file mode 100644 index 0000000..2e1b0de --- /dev/null +++ b/CVE-2024-21538.patch @@ -0,0 +1,46 @@ +Applied following patches, + +From 5ff3a07d9add449021d806e45c4168203aa833ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Cruz?= +Date: Wed, 6 Nov 2024 22:02:49 +0000 +Subject: [PATCH] fix: disable regexp backtracking (#160) + +--- + lib/util/escape.js | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + + +From 640d391fde65388548601d95abedccc12943374f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Cruz?= +Date: Thu, 7 Nov 2024 12:50:38 +0000 +Subject: [PATCH] fix: fix escaping bug introduced by backtracking + +--- + lib/util/escape.js | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + + +Index: node-v18.20.5/deps/npm/node_modules/cross-spawn/lib/util/escape.js +=================================================================== +--- node-v18.20.5.orig/deps/npm/node_modules/cross-spawn/lib/util/escape.js ++++ node-v18.20.5/deps/npm/node_modules/cross-spawn/lib/util/escape.js +@@ -15,15 +15,17 @@ function escapeArgument(arg, doubleEscap + arg = `${arg}`; + + // Algorithm below is based on https://qntm.org/cmd ++ // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input ++ // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information + + // Sequence of backslashes followed by a double quote: + // double up all the backslashes and escape the double quote +- arg = arg.replace(/(\\*)"/g, '$1$1\\"'); ++ arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"'); + + // Sequence of backslashes followed by the end of the string + // (which will become a double quote later): + // double up all the backslashes +- arg = arg.replace(/(\\*)$/, '$1$1'); ++ arg = arg.replace(/(?=(\\+?)?)\1$/, '$1$1'); + + // All other backslashes occur literally + diff --git a/SHASUMS256.txt b/SHASUMS256.txt index 5196a6f..845590b 100644 --- a/SHASUMS256.txt +++ b/SHASUMS256.txt @@ -1,41 +1,41 @@ -1bbf7e632ea55eabf920e8e27bb3e73ca4923eca78a300e5767635e9b2c0c603 node-v22.11.0-aix-ppc64.tar.gz -de6cd4db461b6dc3b3eab31a36b58e30d8af074183bcb13ceca6fd162a579ba6 node-v22.11.0-arm64.msi -2e89afe6f4e3aa6c7e21c560d8a0453d84807e97850bbb819b998531a22bdfde node-v22.11.0-darwin-arm64.tar.gz -c379a90c6aa605b74042a233ddcda4247b347ba5732007d280e44422cc8f9ecb node-v22.11.0-darwin-arm64.tar.xz -668d30b9512137b5f5baeef6c1bb4c46efff9a761ba990a034fb6b28b9da2465 node-v22.11.0-darwin-x64.tar.gz -ab28d1784625d151e3f608a9412a009118f376118ed842ae643f8c2efdfb0af6 node-v22.11.0-darwin-x64.tar.xz -0d42dc3b3377f49e495976dc0e4f5c3a7ffb1d714050d2f247afdbbc0898dae5 node-v22.11.0-headers.tar.gz -7eddf759cd3d1a0113c1a0ac7c080e5c0e458bca34a064c62dc8ce613ff5efdd node-v22.11.0-headers.tar.xz -27453f7a0dd6b9e6738f1f6ea6a09b102ec7aa484de1e39d6a1c3608ad47aa6a node-v22.11.0-linux-arm64.tar.gz -6031d04b98f59ff0f7cb98566f65b115ecd893d3b7870821171708cdbaf7ae6e node-v22.11.0-linux-arm64.tar.xz -f85ced095b17e2535859fd2a5641370c3fca12dd72147f93d2696e2909fe1e9d node-v22.11.0-linux-armv7l.tar.gz -9de0fdcfb1cccbe03f72f939e4e6f03867aef3da8223f90606cd93757704dae0 node-v22.11.0-linux-armv7l.tar.xz -0532965a717d3996302a111703c007dac2763e01795730d488dadbc2fcfac2fa node-v22.11.0-linux-ppc64le.tar.gz -d1d49d7d611b104b6d616e18ac439479d8296aa20e3741432de0e85f4735a81e node-v22.11.0-linux-ppc64le.tar.xz -64f691400ffe3a84be930e0cb03607d0b95bef122a679f7893d8e2972e90c521 node-v22.11.0-linux-s390x.tar.gz -f474ed77d6b13d66d07589aee1c2b9175be4c1b165483e608ac1674643064a99 node-v22.11.0-linux-s390x.tar.xz -4f862bab52039835efbe613b532238b6e4dde98d139a34e6923193e073438b13 node-v22.11.0-linux-x64.tar.gz -83bf07dd343002a26211cf1fcd46a9d9534219aad42ee02847816940bf610a72 node-v22.11.0-linux-x64.tar.xz -8d658eda7699d580ccc268ca8a40ced5aeecef5bb4d19c4187e92eebac5d68ec node-v22.11.0.pkg -24e5130fa7bc1eaab218a0c9cb05e03168fa381bb9e3babddc6a11f655799222 node-v22.11.0.tar.gz -bbf0297761d53aefda9d7855c57c7d2c272b83a7b5bad4fea9cb29006d8e1d35 node-v22.11.0.tar.xz -55b491f3d73fdacf8cf43a2199e824abadda2c43a94780310baa526dc1d679e2 node-v22.11.0-win-arm64.7z -b9ff5a6b6ffb68a0ffec82cc5664ed48247dabbd25ee6d129facd2f65a8ca80d node-v22.11.0-win-arm64.zip -d2a4fadb1f5e4abc634b6ac16c44cae7c73ffc3dbfe8b92b011d85f2df90f6c1 node-v22.11.0-win-x64.7z -905373a059aecaf7f48c1ce10ffbd5334457ca00f678747f19db5ea7d256c236 node-v22.11.0-win-x64.zip -ca0a274f1edc90005b1dc7ec22ec55dad1acc21320bc0be853065d69db2a5152 node-v22.11.0-win-x86.7z -700e0b1bcaca8b1a04c929ce29b0f07e099b4a34a7facab74fda71764d16f71c node-v22.11.0-win-x86.zip -9eea480bd30c98ae11a97cb89a9278235cbbbd03c171ee5e5198bd86b7965b4b node-v22.11.0-x64.msi -ab19f02c4b0d9f578928b67d2a652496aa31729a8cc9771ffc9cc6d3b8afe7e3 node-v22.11.0-x86.msi -b4e5e2821aeb518c0c55f02d4fcd9182c57f97bcce50341998333dba38e34ea4 win-arm64/node.exe -ad65afe5b192644fec9d599c77f0e38a8421d0d7ad2389679882a288c8df444b win-arm64/node.lib -0861cf0f1ff6135a21eb26279fc6a6f7dc9d9c0ac926a17553f387c32945eea5 win-arm64/node_pdb.7z -f35c2d1a967080b0a1e288b891cb9300a04d0b90042bac8c965c9ebcfc3749bf win-arm64/node_pdb.zip -7447c4ece014aa41fb2ff866c993c708e5a8213a00913cc2ac5049ea3ffc230d win-x64/node.exe -3581a06b68c4584d146372113eaa8c4d102127222e5041195ba38f185eef419c win-x64/node.lib -171d80aeedbe43bd70b3539de6f845a359d8dd97a684df2cbb4f49d8946f4991 win-x64/node_pdb.7z -7c3fa0149b17d9ff4b5af2f3e19e768b6ab684a9dd8dcf35ea204a90d3f56903 win-x64/node_pdb.zip -e54a4559dafd56562a45b50000831d28ee2f7f1ac4ff98b38165871f31f64ab8 win-x86/node.exe -45399070d1d247cf223d12e80d3e638635af24d2f7a4714bc8e38a6a918f162a win-x86/node.lib -a78040dbb0e7296eebe90c235091ee46a8a01587a226bf4e5a01f5b399e153d7 win-x86/node_pdb.7z -9fb300178536e8243ad55207ee85990731e77299c9e670cec0b54e10dc971713 win-x86/node_pdb.zip +b4cb7707b22218154cdcf8cbc9bbb5c941dab09961a544cc7aba6ab50da99926 node-v22.12.0-aix-ppc64.tar.gz +587e4f0fc2c27106e4e758a29db5726b337e660483dd554ea1610a4246fbf71b node-v22.12.0-arm64.msi +293dcc6c2408da21562d135b0412525e381bb6fe150d688edb58fe850d0f3e13 node-v22.12.0-darwin-arm64.tar.gz +0047be0cfda922eb73876f9ef41de361c36b7654c884d13d9b783b0efd1db9aa node-v22.12.0-darwin-arm64.tar.xz +52bc25dd026db7247c3c00439afdb83e95087248267f02d6c1a7250d1f896173 node-v22.12.0-darwin-x64.tar.gz +d68ef0c4c19b3b3b88c0e7408668d0a539607c136a14668e079feed0c6ec8bec node-v22.12.0-darwin-x64.tar.xz +c0760383af3c23637f46959a53113490fefb84cb388ac71a08d28761527e7b1b node-v22.12.0-headers.tar.gz +3cde28bb5820cf0f7593c7817c7a9ab1f15016dd85a6e5c240bbdf2a9c59130d node-v22.12.0-headers.tar.xz +9e7905fdee722f9650a03ae644b51c4c6effd3b98ac93c588700072ab35c9ddb node-v22.12.0-linux-arm64.tar.gz +8cfd5a8b9afae5a2e0bd86b0148ca31d2589c0ea669c2d0b11c132e35d90ed68 node-v22.12.0-linux-arm64.tar.xz +f6f3dc6493befa7844e2f65024f857dc8fbbc0d86089b09f6e73d5eb7e2ce9ad node-v22.12.0-linux-armv7l.tar.gz +afedb2695faacb22805adde9534f2a360f2b39cab622ebdfe5e7383a2b58ebb9 node-v22.12.0-linux-armv7l.tar.xz +a01148778eb1e9c56413e6a69cfe8d4563524c914dc3f9c667948a0d7a1a151a node-v22.12.0-linux-ppc64le.tar.gz +199a606ba1ee86cce6d6b369c71f9d00873d2836a6662592afc3b6a5923e2004 node-v22.12.0-linux-ppc64le.tar.xz +63dd2e20cb50e2145c06f8f55b5682753691965b20fa08797a969a15b751ac8e node-v22.12.0-linux-s390x.tar.gz +9b517f8006eb4b451d40c461cbe64f93c6455566dbe2613387ab02412bc06d35 node-v22.12.0-linux-s390x.tar.xz +e05a4d65232ae2b27b3d77da2e368522fb46b923335b8e0d5f77624c32484044 node-v22.12.0-linux-x64.tar.gz +22982235e1b71fa8850f82edd09cdae7e3f32df1764a9ec298c72d25ef2c164f node-v22.12.0-linux-x64.tar.xz +94068d6877faa376f0b00aa775b490d59ea9accc8dbc5616efaff400f670fee1 node-v22.12.0.pkg +3157e7c002b6e964bdbefb331ec38db1e2dceb064ab11c038275155461b22ce3 node-v22.12.0.tar.gz +fe1bc4be004dc12721ea2cb671b08a21de01c6976960ef8a1248798589679e16 node-v22.12.0.tar.xz +9c8e8fc0e409dc0cf32f159f9ccf11e95f1be5bb26e1a9b34f40bb9a6da3f0e2 node-v22.12.0-win-arm64.7z +17401720af48976e3f67c41e8968a135fb49ca1f88103a92e0e8c70605763854 node-v22.12.0-win-arm64.zip +922285593360adbe1fcd16d4e0049a13552dcad085fa53768c21c8d17089a134 node-v22.12.0-win-x64.7z +2b8f2256382f97ad51e29ff71f702961af466c4616393f767455501e6aece9b8 node-v22.12.0-win-x64.zip +6fa5480413f3bacc170f94e7aa332e5e8d8c3f9a03f05f802c6cbf6b1a265eef node-v22.12.0-win-x86.7z +b52129972529f22f1c8a726655842ca1fc13e0b4c37cd4d397270ba772032d43 node-v22.12.0-win-x86.zip +5fa43604523be95f8e73c4c98337a5c2bf02450a6525ad25ec2926e464e6bcef node-v22.12.0-x64.msi +97fd52500c6947d5886c616ce37c93d40f5b0b811a1f87f89783c25e0de345e3 node-v22.12.0-x86.msi +cfd2e0d9a708cf37acfecfd11ff237bb141893dc057080b4edb23af6a45d3f55 win-arm64/node.exe +423502a56ef7f7dd087df41b518f53104ce321ef2ab3031fe4ca22b965382d86 win-arm64/node.lib +739c03416daf8d2f2efc0bf48a8c2e53e0c14438b8a5889cc2995c5012ae7824 win-arm64/node_pdb.7z +70f9745e3380cf452d3a8fd156d5ed7ead92a30fdead78ea703afe5331f77e35 win-arm64/node_pdb.zip +b3b117a08ee61efee09e6fd523ab33c0c018da1b570bde08e4fd914dc1170ed6 win-x64/node.exe +7980a34112c38a9b269226bcd3a9148bf101411d794750f18dc15c5026b92b30 win-x64/node.lib +e9fc26cea58f8e1520a5a930c7fc40ac99f22c8470f5617d3e3f09dcd1feb7ef win-x64/node_pdb.7z +6a9417c99259f5d15a3c11dbe7a011a1484532b33bb84e5e8f8e3c733af74064 win-x64/node_pdb.zip +ab2390e667e9abfa16b97a27adf84cd9f08a4788816db54f56bc25893f76e9d1 win-x86/node.exe +289e832c5ff6ebb6be1644bf06d7078638447947cc6e314122e7f17b30ba268a win-x86/node.lib +525560e7fe53036a1caaf63ec3d4e508ea59079111c0f18b4de2bbf1069537ff win-x86/node_pdb.7z +82150928ab3f6bc3f50b4cc540b987b3c41ea7f3f93f790e4acf58553572faea win-x86/node_pdb.zip diff --git a/SHASUMS256.txt.sig b/SHASUMS256.txt.sig index f3533ab6215bb724fbc00d68b672fd070082a85c40b562b3435804db8a480cee..dc4b07407e9f9f27b203972007f1642d72de4417b650985a2f99dc6bffc12610 100644 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j)>k5aUawR^D4Lz^j=uoM}+lK2V*0%uQb2LK8Q5SOqN z8NHJD3ejy3|8WF-+OWtYYFLw(=q4=_9Ys0hmbkk@UqIfs2~)DT;U|%+1=xjPV4VTA zkQ$jUobf`JIhy8V|CRa0L?GnoX*!tN^m6molgyLysvHrg})Sfr6GfGod%# zu!IZWYtS2<*ui;=aR%}6dlved479jn#W9)!fdgNq-W!X E{u%5Uq5uE@ literal 566 zcmV-60?GY}0y6{v0SEvc79j-4FQcv;zT9i%Ym;EaJnTimdbvCW0%suW6#xne5X3y} zMZtQxJg| zlG*-3e>FZ@8{I;=a{L_SzqZeKV#BB63Si&N1UiGL7mu@;xtH>q+c|{860X(IE%W^+ z`+QBIJ7rlTxy?jTW$f*rM=|b^#dC+Iu(Dq4a-g#S8d_m=G~c{NKAwHK|NT5mo6^RV zxeyu3uzg9Vj|&a%@3;wMNAMXg*jcBUlGrSjOpKPengfF)@GWt>p<^3D+EafNhJOAj z%2~Og?md;lpk&XyocACTa;2*+wbhou|M*Tgy?aSe^AHFhOw*aQi*F*c6@+2_l(NEv zfE}eACF~C-7_@%Z=xj5btec)lR=itEmVXs|8 zh(`0(9&ya%{+Z?V5` Date: Dec 20 09:18:49 UTC 2017 Summary: Fix CI unit tests framework for OBS building -Index: node-v22.10.0/test/parallel/test-node-output-v8-warning.mjs +Index: node-v22.12.0/test/parallel/test-module-loading-globalpaths.js =================================================================== ---- node-v22.10.0.orig/test/parallel/test-node-output-v8-warning.mjs -+++ node-v22.10.0/test/parallel/test-node-output-v8-warning.mjs -@@ -15,7 +15,7 @@ describe('v8 output', { concurrency: !pr - .replaceAll('*test*', '*') - .replaceAll(/.*?\*fixtures\*v8\*/g, '(node:*) V8: *') // Replace entire path before fixtures/v8 - .replaceAll('*fixtures*v8*', '*') -- .replaceAll('node --', '* --'); -+ .replace(/node\d+ --/, '* --'); - } - const common = snapshot - .transform(snapshot.replaceWindowsLineEndings, snapshot.replaceWindowsPaths, replaceNodeVersion); -Index: node-v22.10.0/test/parallel/test-module-loading-globalpaths.js -=================================================================== ---- node-v22.10.0.orig/test/parallel/test-module-loading-globalpaths.js -+++ node-v22.10.0/test/parallel/test-module-loading-globalpaths.js +--- node-v22.12.0.orig/test/parallel/test-module-loading-globalpaths.js ++++ node-v22.12.0/test/parallel/test-module-loading-globalpaths.js @@ -11,6 +11,9 @@ const { addLibraryPath } = require('../c addLibraryPath(process.env); @@ -29,10 +16,10 @@ Index: node-v22.10.0/test/parallel/test-module-loading-globalpaths.js if (process.argv[2] === 'child') { console.log(require(pkgName).string); } else { -Index: node-v22.10.0/test/parallel/test-tls-passphrase.js +Index: node-v22.12.0/test/parallel/test-tls-passphrase.js =================================================================== ---- node-v22.10.0.orig/test/parallel/test-tls-passphrase.js -+++ node-v22.10.0/test/parallel/test-tls-passphrase.js +--- node-v22.12.0.orig/test/parallel/test-tls-passphrase.js ++++ node-v22.12.0/test/parallel/test-tls-passphrase.js @@ -223,7 +223,7 @@ server.listen(0, common.mustCall(functio }, onSecureConnect()); })).unref(); @@ -42,10 +29,10 @@ Index: node-v22.10.0/test/parallel/test-tls-passphrase.js // Missing passphrase assert.throws(function() { -Index: node-v22.10.0/test/parallel/test-repl-envvars.js +Index: node-v22.12.0/test/parallel/test-repl-envvars.js =================================================================== ---- node-v22.10.0.orig/test/parallel/test-repl-envvars.js -+++ node-v22.10.0/test/parallel/test-repl-envvars.js +--- node-v22.12.0.orig/test/parallel/test-repl-envvars.js ++++ node-v22.12.0/test/parallel/test-repl-envvars.js @@ -2,7 +2,9 @@ // Flags: --expose-internals @@ -57,11 +44,11 @@ Index: node-v22.10.0/test/parallel/test-repl-envvars.js const stream = require('stream'); const { describe, test } = require('node:test'); const REPL = require('internal/repl'); -Index: node-v22.10.0/Makefile +Index: node-v22.12.0/Makefile =================================================================== ---- node-v22.10.0.orig/Makefile -+++ node-v22.10.0/Makefile -@@ -399,7 +399,6 @@ ADDONS_HEADERS_PREREQS := tools/install. +--- node-v22.12.0.orig/Makefile ++++ node-v22.12.0/Makefile +@@ -397,7 +397,6 @@ ADDONS_HEADERS_PREREQS := tools/install. $(wildcard deps/uv/include/*/*.h) \ $(wildcard deps/v8/include/*.h) \ $(wildcard deps/v8/include/*/*.h) \ @@ -69,7 +56,7 @@ Index: node-v22.10.0/Makefile src/node.h src/node_api.h src/js_native_api.h src/js_native_api_types.h \ src/node_api_types.h src/node_buffer.h src/node_object_wrap.h \ src/node_version.h -@@ -572,6 +571,7 @@ test-ci-js: | clear-stalled ## Build and +@@ -570,6 +569,7 @@ test-ci-js: | clear-stalled ## Build and # Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned test-ci: LOGLEVEL := info ## Build and test everything (CI). test-ci: | clear-stalled bench-addons-build build-addons build-js-native-api-tests build-node-api-tests doc-only @@ -77,7 +64,7 @@ Index: node-v22.10.0/Makefile out/Release/cctest --gtest_output=xml:out/junit/cctest.xml $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \ --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \ -@@ -752,7 +752,8 @@ apidocs_json = $(addprefix out/,$(apidoc +@@ -750,7 +750,8 @@ apidocs_json = $(addprefix out/,$(apidoc apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*))) tools/doc/node_modules: tools/doc/package.json @@ -87,10 +74,10 @@ Index: node-v22.10.0/Makefile echo "Skipping tools/doc/node_modules (no crypto)"; \ else \ cd tools/doc && $(call available-node,$(run-npm-ci)) \ -Index: node-v22.10.0/tools/test.py +Index: node-v22.12.0/tools/test.py =================================================================== ---- node-v22.10.0.orig/tools/test.py -+++ node-v22.10.0/tools/test.py +--- node-v22.12.0.orig/tools/test.py ++++ node-v22.12.0/tools/test.py @@ -1386,7 +1386,7 @@ def BuildOptions(): result.add_option("-s", "--suite", help="A test suite", default=[], action="append") @@ -100,10 +87,10 @@ Index: node-v22.10.0/tools/test.py result.add_option("--arch", help='The architecture to run tests for', default='none') result.add_option("--snapshot", help="Run the tests with snapshot turned on", -Index: node-v22.10.0/test/parallel/test-crypto-dh.js +Index: node-v22.12.0/test/parallel/test-crypto-dh.js =================================================================== ---- node-v22.10.0.orig/test/parallel/test-crypto-dh.js -+++ node-v22.10.0/test/parallel/test-crypto-dh.js +--- node-v22.12.0.orig/test/parallel/test-crypto-dh.js ++++ node-v22.12.0/test/parallel/test-crypto-dh.js @@ -93,7 +93,7 @@ const crypto = require('crypto'); dh3.computeSecret(''); }, { message: common.hasOpenSSL3 && !hasOpenSSL3WithNewErrorMessage ? @@ -113,10 +100,10 @@ Index: node-v22.10.0/test/parallel/test-crypto-dh.js } } -Index: node-v22.10.0/test/parallel/test-dns.js +Index: node-v22.12.0/test/parallel/test-dns.js =================================================================== ---- node-v22.10.0.orig/test/parallel/test-dns.js -+++ node-v22.10.0/test/parallel/test-dns.js +--- node-v22.12.0.orig/test/parallel/test-dns.js ++++ node-v22.12.0/test/parallel/test-dns.js @@ -403,7 +403,7 @@ assert.throws(() => { const server = dgram.createSocket('udp4'); diff --git a/icu76.1.patch b/icu76.1.patch deleted file mode 100644 index 8ec79d3..0000000 --- a/icu76.1.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: node-v22.11.0/configure.py -=================================================================== ---- node-v22.11.0.orig/configure.py -+++ node-v22.11.0/configure.py -@@ -1876,7 +1876,7 @@ def configure_intl(o): - elif with_intl == 'system-icu': - # ICU from pkg-config. - o['variables']['v8_enable_i18n_support'] = 1 -- pkgicu = pkg_config('icu-i18n') -+ pkgicu = pkg_config('icu-i18n icu-uc') - if not pkgicu[0]: - error('''Could not load pkg-config data for "icu-i18n". - See above errors or the README.md.''') diff --git a/linker_lto_jobs.patch b/linker_lto_jobs.patch index 6bcb4ae..22ceffe 100644 --- a/linker_lto_jobs.patch +++ b/linker_lto_jobs.patch @@ -3,11 +3,11 @@ is run serially over these binaries instead of in parallel. OBS workers run out of memory as each executable seems to require upward of 5G RAM -Index: node-v22.10.0/node.gyp +Index: node-v22.12.0/node.gyp =================================================================== ---- node-v22.10.0.orig/node.gyp -+++ node-v22.10.0/node.gyp -@@ -1193,6 +1193,7 @@ +--- node-v22.12.0.orig/node.gyp ++++ node-v22.12.0/node.gyp +@@ -1186,6 +1186,7 @@ 'deps/simdutf/simdutf.gyp:simdutf', 'deps/ada/ada.gyp:ada', 'deps/nbytes/nbytes.gyp:nbytes', @@ -15,8 +15,8 @@ Index: node-v22.10.0/node.gyp ], 'includes': [ -@@ -1273,6 +1274,7 @@ - 'deps/sqlite/sqlite.gyp:sqlite', +@@ -1264,6 +1265,7 @@ + 'deps/histogram/histogram.gyp:histogram', 'deps/ada/ada.gyp:ada', 'deps/nbytes/nbytes.gyp:nbytes', + 'cctest' diff --git a/node-v22.11.0.tar.xz b/node-v22.11.0.tar.xz deleted file mode 100644 index 93767f0..0000000 --- a/node-v22.11.0.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bbf0297761d53aefda9d7855c57c7d2c272b83a7b5bad4fea9cb29006d8e1d35 -size 47006780 diff --git a/node-v22.12.0.tar.xz b/node-v22.12.0.tar.xz new file mode 100644 index 0000000..c65497d --- /dev/null +++ b/node-v22.12.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe1bc4be004dc12721ea2cb671b08a21de01c6976960ef8a1248798589679e16 +size 47625776 diff --git a/nodejs-libpath.patch b/nodejs-libpath.patch index 7416139..40de55f 100644 --- a/nodejs-libpath.patch +++ b/nodejs-libpath.patch @@ -1,16 +1,16 @@ -Index: node-v20.12.0/tools/install.py +Index: node-v22.12.0/tools/install.py =================================================================== ---- node-v20.12.0.orig/tools/install.py -+++ node-v20.12.0/tools/install.py -@@ -6,6 +6,7 @@ import errno - import os +--- node-v22.12.0.orig/tools/install.py ++++ node-v22.12.0/tools/install.py +@@ -7,6 +7,7 @@ import os + import platform import shutil import sys +from distutils import sysconfig import re - def abspath(*args): -@@ -66,6 +67,10 @@ def try_copy(options, path, dest): + current_system = platform.system() +@@ -72,6 +73,10 @@ def try_copy(options, path, dest): try_unlink(target_path) # prevent ETXTBSY errors return shutil.copy2(source_path, target_path) @@ -21,7 +21,7 @@ Index: node-v20.12.0/tools/install.py def try_remove(options, path, dest): source_path, target_path = mkpaths(options, path, dest) if not options.silent: -@@ -82,7 +87,7 @@ def uninstall(options, paths, dest): +@@ -88,7 +93,7 @@ def uninstall(options, paths, dest): try_remove(options, path, dest) def package_files(options, action, name, bins): @@ -30,7 +30,7 @@ Index: node-v20.12.0/tools/install.py # don't install npm if the target path is a symlink, it probably means # that a dev version of npm is installed there -@@ -103,7 +108,7 @@ def package_files(options, action, name, +@@ -109,7 +114,7 @@ def package_files(options, action, name, if action == uninstall: action(options, [link_path], os.path.join('bin', bin_name)) elif action == install: @@ -39,11 +39,11 @@ Index: node-v20.12.0/tools/install.py else: assert 0 # unhandled action type -Index: node-v20.12.0/lib/internal/modules/cjs/loader.js +Index: node-v22.12.0/lib/internal/modules/cjs/loader.js =================================================================== ---- node-v20.12.0.orig/lib/internal/modules/cjs/loader.js -+++ node-v20.12.0/lib/internal/modules/cjs/loader.js -@@ -1529,7 +1529,7 @@ Module._initPaths = function() { +--- node-v22.12.0.orig/lib/internal/modules/cjs/loader.js ++++ node-v22.12.0/lib/internal/modules/cjs/loader.js +@@ -1798,7 +1798,7 @@ Module._initPaths = function() { path.resolve(process.execPath, '..') : path.resolve(process.execPath, '..', '..'); diff --git a/nodejs22.changes b/nodejs22.changes index 7a8df76..7381ffd 100644 --- a/nodejs22.changes +++ b/nodejs22.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Wed Dec 4 16:59:08 UTC 2024 - Adam Majer + +- Update to 22.12.0: + * require(esm) is now enabled by default + * Added resizable ArrayBuffer support in Buffer + +- CVE-2024-21538.patch: fixes regular expression denial of service + (bsc#1233856, CVE-2024-21538) +- icu76.1.patch: upstreamed, dropped +- linker_lto_jobs.patch, nodejs-libpath.patch, fix_ci_tests.patch: refreshed + ------------------------------------------------------------------- Wed Nov 20 10:04:23 UTC 2024 - Adam Majer diff --git a/nodejs22.spec b/nodejs22.spec index c896c33..b11dda8 100644 --- a/nodejs22.spec +++ b/nodejs22.spec @@ -31,7 +31,7 @@ %endif Name: nodejs22 -Version: 22.11.0 +Version: 22.12.0 Release: 0 # Double DWZ memory limits @@ -147,6 +147,7 @@ Patch7: manual_configure.patch Patch13: openssl_binary_detection.patch +Patch82: CVE-2024-21538.patch ## Patches specific to SUSE and openSUSE Patch100: linker_lto_jobs.patch @@ -172,7 +173,6 @@ Patch200: versioned.patch Patch305: qemu_timeouts_arches.patch Patch307: v8-i586.patch Patch309: gcc13.patch -Patch311: icu76.1.patch BuildRequires: pkg-config BuildRequires: fdupes @@ -195,10 +195,10 @@ BuildRequires: config(netcfg) %if 0%{?suse_version} == 1110 # GCC 5 is only available in the SUSE:SLE-11:SP4:Update repository (SDK). %if %node_version_number >= 8 -BuildRequires: gcc5-c++ +BuildRequires: gcc5-c++ %define forced_gcc_version 5 %else -BuildRequires: gcc48-c++ +BuildRequires: gcc48-c++ %define forced_gcc_version 4.8 %endif %endif @@ -208,15 +208,15 @@ BuildRequires: gcc48-c++ # for SLE-12:Update targets %if 0%{?suse_version} == 1315 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %else %if %node_version_number >= 14 -BuildRequires: gcc9-c++ +BuildRequires: gcc9-c++ %define forced_gcc_version 9 %else %if %node_version_number >= 8 -BuildRequires: gcc7-c++ +BuildRequires: gcc7-c++ %define forced_gcc_version 7 %endif %endif @@ -225,7 +225,7 @@ BuildRequires: gcc7-c++ %if 0%{?suse_version} == 1500 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %endif %endif @@ -251,6 +251,7 @@ BuildRequires: python311 %endif %if %{?suse_version} > 1500 BuildRequires: python3 +BuildRequires: python3-setuptools %endif %endif @@ -311,7 +312,7 @@ BuildRequires: bundled_openssl_should_not_be_required %if ! 0%{with intree_cares} BuildRequires: pkgconfig(libcares) >= 1.17.0 %else -Provides: bundled(libcares2) = 1.33.1 +Provides: bundled(libcares2) = 1.34.3 %endif %if %node_version_number >= 22 @@ -321,13 +322,13 @@ BuildRequires: sqlite3-devel %if ! 0%{with intree_icu} BuildRequires: pkgconfig(icu-i18n) >= 71 %else -Provides: bundled(icu) = 75.1 +Provides: bundled(icu) = 76.1 %endif %if ! 0%{with intree_nghttp2} BuildRequires: libnghttp2-devel >= 1.41.0 %else -Provides: bundled(nghttp2) = 1.63.0 +Provides: bundled(nghttp2) = 1.64.0 %endif %if 0%{with valgrind_tests} @@ -377,7 +378,7 @@ ExclusiveArch: not_buildable %endif Provides: bundled(uvwasi) = 0.0.21 -Provides: bundled(libuv) = 1.48.0 +Provides: bundled(libuv) = 1.49.1 Provides: bundled(v8) = 12.4.254.21 %if %{with intree_brotli} Provides: bundled(brotli) = 1.1.0 @@ -389,18 +390,18 @@ BuildRequires: pkgconfig(libbrotlidec) Provides: bundled(llhttp) = 9.2.1 Provides: bundled(ngtcp2) = 1.3.0 -Provides: bundled(simdutf) = 5.5.0 +Provides: bundled(simdutf) = 5.6.1 Provides: bundled(simdjson) = 3.10.0 # bundled url-ada parser, not ada -Provides: bundled(ada) = 2.9.0 +Provides: bundled(ada) = 2.9.2 -Provides: bundled(node-acorn) = 8.12.1 +Provides: bundled(node-acorn) = 8.14.0 Provides: bundled(node-acorn-walk) = 8.3.4 -Provides: bundled(node-amaro) = 0.1.8 +Provides: bundled(node-amaro) = 0.2.0 Provides: bundled(node-cjs-module-lexer) = 1.4.1 Provides: bundled(node-corepack) = 0.29.4 Provides: bundled(node-minimatch) = 10.0.1 -Provides: bundled(node-undici) = 6.20.0 +Provides: bundled(node-undici) = 6.21.0 %description Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js @@ -690,6 +691,7 @@ popd %if 0%{with valgrind_tests} %endif %patch -P 13 -p1 +%patch -P 82 -p1 %patch -P 100 -p1 %patch -P 101 -p1 %if 0%{?suse_version} >= 1500 || 0%{?suse_version} == 0 @@ -709,7 +711,6 @@ popd %patch -P 305 -p1 %patch -P 307 -p1 %patch -P 309 -p1 -%patch -P 311 -p1 %if %{node_version_number} == 12 From 51bb1ad5e2584ee15c4150233cbc1fc877576aaef6ce5290833e536e6b1afa87 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Thu, 5 Dec 2024 12:59:10 +0000 Subject: [PATCH 2/4] [info=6dbcf743eb35bc4224b956f23d9ad0e7e6c97950351cf855f1e5024e8267da2c] OBS-URL: https://build.opensuse.org/package/show/devel:languages:nodejs/nodejs22?expand=0&rev=22 --- _scmsync.obsinfo | 4 +- nodejs.keyring | Bin 63719 -> 17430 bytes nodejs22.changes | 2 + nodejs22.spec | 3 +- old_cares.patch | 155 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 old_cares.patch diff --git a/_scmsync.obsinfo b/_scmsync.obsinfo index a4cc2b4..dec58da 100644 --- a/_scmsync.obsinfo +++ b/_scmsync.obsinfo @@ -1,3 +1,3 @@ -mtime: 1733332357 -commit: 8800b2b09cf647b9cea744d23141cbca73e6897cda26094650047f982a54ea65 +mtime: 1733403526 +commit: 6dbcf743eb35bc4224b956f23d9ad0e7e6c97950351cf855f1e5024e8267da2c url: https://src.opensuse.org/nodejs/nodejs22.git diff --git a/nodejs.keyring b/nodejs.keyring index dc3233448fd5562e466d7dc20a3ac64b0b5bdd535d873a124caa5dd7295f4543..2d1e055498751f95f0b53eb50dfa90b017bb17892125a3aaf4d506cfcf77877f 100644 GIT binary patch delta 2395 zcmajfdpHvc0|s!$FgE76tIQnCZ8L00h~_evhz!Xs_xo*gJu<1B>5wuJ*`cl6%5|fb z7)35e2&pD=nOh~~k{of)cfRL5-=E)~@B6%ezRz!IL!gMl&%~3LMVWI2^`g{AG#Had zGX+pJD&S0y3KswqeBVxx$$fc)pISJq#_Sz_!_TaIKWa^1zj zcoANHAyMvqhv>bZG+o~JlTs2~QH46E>m09LK1Q;qPT4RX*TC&8g=W8rkE4C^D_XY1yJ9Pfv>YF!Oi6-XJ9 zY1EH-dLpcZ?xaNYt^OSOnn|hDKXEnGU(9Os$2>8@nKR9;AMf&%YLo%zl;H*0Q$MRo zyg&NhwcMV1OcHEnQ=xEelO;;IYNdOtfJBf(LH2zR_3Mux$92;KP$_rNMiE=cFh{a@ zI3eF6I~{|?8x_71CA9L6KQjrRa;QYTJ!mr;U&+Ikw#CE3PDdvcSI@v96c*| zA=&2b*?4oMz?;m| z(M9NF!=2Jmo@BZ4RUmHjhotq2LID_EvKv`O^*7&`o=}2KmZT7OdPHn!#uZOO8*iva zKRT^em0xny%7oGq>Rot+?N`}wPT1Xa_|;6a6YOQ9cjbO|-ChX$Xrgde>Z}0kolAbz zGKZ|TVs5%#(@!dpA^6U_IUSn;RtQ@(I}eu!aJmn5WI}iP3vfLTu3&L{tMs-9Ly$S; z_GvAd@YvNv7n(7>5wC^Kmqd6m0LQ)c{7`xbxVQC8v5Apstha`UbA`w3=3wL!4&+(Y zWwz~S#;q=J(Pzs1qc$^++a4qi$s_v8_0&t~<5aC`gOxI!PZPi@&3eMhogSavkC9oP z(}LG?`qVwkvJ&FPwa$h{D(QV9XP!$^wQGR!F(3bsspY)rVgJvhITIvS*GZ!R=}f#? zTYANC=;!h0!j`eoh|yMqw2wM%(!K4uMnt@nF-=OZxuI!*ByGA8*Sdg-U{wd_S%yzX ze}4X$%Py7@i6^(;XS>_Z^>TmXLFa13$Cj>P7E`l&;@maJhEHa0T8xBBF3I}(^8)rA z7us(CJbx3?fhA;}I=ewg`893^X9xp1sOCz-=N7+5`z{XzfwcGP+m4qG z+^ zUe%lPS{8)YOx(@KG!xfHvI4>25gkY&qk(8|1q8>W6LTdbWjU<) zQA(DPQYZNa#XWC+x1KHKgUCSS-yBoucsf(8gY$(g20PUZD90~q81yHrZx)@`3-cmP zl9x=H4qoJsIFlgSgQZiI?8yp_h7d;>apL*&8WtD#k4ZTIQ$hK^ol*Zk&Vc{x44)_n z`Y$WK%Myp4xAhs|&)os(9-O1OaG_u!!G$#&Ce7b&*@8y~^VBlx^Fl7UewwPWWjyp= zC_*c99|69Nz9Ri`#Buxb(~(L9@?O0c6TeIGFZrjDAD|OW!ys#mS#1G1>x%NX ziaE7|wdbyrTLwNyxUDI+ewHx(HE2KF#*48oqQRW^`)TJ zy=zZYBxItSub9#k==-q8SIi|WX4Y#PRkyV+U9|n@?S4zX&LK{ffvo+)7Z#%*Y<%m5 z?qvEQBd=LH_DVuLblP`d+AN~f5=XIJzR!{oW2tvpD(>lt0nb0m!q*uDR9TL}uJP)P^hi*kCIxmN6EU+(|A9+#H Jq_gdP{4a>aY})_; delta 48466 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 CpgCFq diff --git a/nodejs22.changes b/nodejs22.changes index 7381ffd..7a27088 100644 --- a/nodejs22.changes +++ b/nodejs22.changes @@ -9,6 +9,8 @@ Wed Dec 4 16:59:08 UTC 2024 - Adam Majer (bsc#1233856, CVE-2024-21538) - icu76.1.patch: upstreamed, dropped - linker_lto_jobs.patch, nodejs-libpath.patch, fix_ci_tests.patch: refreshed +- nodejs.keyring: updated with upstream releaser list +- old_cares.patch: fix with older c-ares ------------------------------------------------------------------- Wed Nov 20 10:04:23 UTC 2024 - Adam Majer diff --git a/nodejs22.spec b/nodejs22.spec index b11dda8..98f1430 100644 --- a/nodejs22.spec +++ b/nodejs22.spec @@ -173,6 +173,7 @@ Patch200: versioned.patch Patch305: qemu_timeouts_arches.patch Patch307: v8-i586.patch Patch309: gcc13.patch +Patch311: old_cares.patch BuildRequires: pkg-config BuildRequires: fdupes @@ -711,7 +712,7 @@ popd %patch -P 305 -p1 %patch -P 307 -p1 %patch -P 309 -p1 - +%patch -P 311 -p1 %if %{node_version_number} == 12 # minimist security update - patch50 diff --git a/old_cares.patch b/old_cares.patch new file mode 100644 index 0000000..e6f906a --- /dev/null +++ b/old_cares.patch @@ -0,0 +1,155 @@ +temporary revert changes until we can upgrade c-ares in SLE-15:Update + +commit bf68733e7f61bf4ff51a456e27123f44a526aebc +Author: Aviv Keller +Date: Wed Oct 30 10:10:28 2024 -0400 + + dns: stop using deprecated `ares_query` + + PR-URL: https://github.com/nodejs/node/pull/55430 + Refs: https://github.com/nodejs/node/issues/52464 + Reviewed-By: Luigi Pinca + Reviewed-By: Matteo Collina + + +Index: node-v22.12.0/src/cares_wrap.cc +=================================================================== +--- node-v22.12.0.orig/src/cares_wrap.cc ++++ node-v22.12.0/src/cares_wrap.cc +@@ -825,62 +825,62 @@ void ChannelWrap::EnsureServers() { + } + + int AnyTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_ANY); ++ wrap->AresQuery(name, ns_c_in, ns_t_any); + return ARES_SUCCESS; + } + + int ATraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_A); ++ wrap->AresQuery(name, ns_c_in, ns_t_a); + return ARES_SUCCESS; + } + + int AaaaTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_AAAA); ++ wrap->AresQuery(name, ns_c_in, ns_t_aaaa); + return ARES_SUCCESS; + } + + int CaaTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_CAA); ++ wrap->AresQuery(name, ns_c_in, T_CAA); + return ARES_SUCCESS; + } + + int CnameTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_CNAME); ++ wrap->AresQuery(name, ns_c_in, ns_t_cname); + return ARES_SUCCESS; + } + + int MxTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_MX); ++ wrap->AresQuery(name, ns_c_in, ns_t_mx); + return ARES_SUCCESS; + } + + int NsTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_NS); ++ wrap->AresQuery(name, ns_c_in, ns_t_ns); + return ARES_SUCCESS; + } + + int TxtTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_TXT); ++ wrap->AresQuery(name, ns_c_in, ns_t_txt); + return ARES_SUCCESS; + } + + int SrvTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_SRV); ++ wrap->AresQuery(name, ns_c_in, ns_t_srv); + return ARES_SUCCESS; + } + + int PtrTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_PTR); ++ wrap->AresQuery(name, ns_c_in, ns_t_ptr); + return ARES_SUCCESS; + } + + int NaptrTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_NAPTR); ++ wrap->AresQuery(name, ns_c_in, ns_t_naptr); + return ARES_SUCCESS; + } + + int SoaTraits::Send(QueryWrap* wrap, const char* name) { +- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_SOA); ++ wrap->AresQuery(name, ns_c_in, ns_t_soa); + return ARES_SUCCESS; + } + +Index: node-v22.12.0/src/cares_wrap.h +=================================================================== +--- node-v22.12.0.orig/src/cares_wrap.h ++++ node-v22.12.0/src/cares_wrap.h +@@ -246,20 +246,18 @@ class QueryWrap final : public AsyncWrap + return Traits::Send(this, name); + } + +- void AresQuery(const char* name, +- ares_dns_class_t dnsclass, +- ares_dns_rec_type_t type) { ++ void AresQuery(const char* name, int dnsclass, int type) { + channel_->EnsureServers(); + TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( + TRACING_CATEGORY_NODE2(dns, native), trace_name_, this, + "name", TRACE_STR_COPY(name)); +- ares_query_dnsrec(channel_->cares_channel(), +- name, +- dnsclass, +- type, +- Callback, +- MakeCallbackPointer(), +- nullptr); ++ ares_query( ++ channel_->cares_channel(), ++ name, ++ dnsclass, ++ type, ++ Callback, ++ MakeCallbackPointer()); + } + + void ParseError(int status) { +@@ -306,20 +304,19 @@ class QueryWrap final : public AsyncWrap + return wrap; + } + +- static void Callback(void* arg, +- ares_status_t status, +- size_t timeouts, +- const ares_dns_record_t* dnsrec) { ++ static void Callback( ++ void* arg, ++ int status, ++ int timeouts, ++ unsigned char* answer_buf, ++ int answer_len) { + QueryWrap* wrap = FromCallbackPointer(arg); + if (wrap == nullptr) return; + + unsigned char* buf_copy = nullptr; +- size_t answer_len = 0; + if (status == ARES_SUCCESS) { +- // No need to explicitly call ares_free_string here, +- // as it is a wrapper around free, which is already +- // invoked when MallocedBuffer is destructed. +- ares_dns_write(dnsrec, &buf_copy, &answer_len); ++ buf_copy = node::Malloc(answer_len); ++ memcpy(buf_copy, answer_buf, answer_len); + } + + wrap->response_data_ = std::make_unique(); From 2c55c04ed9fc8bd3d9af06827df94ed7fecf60b2a197bb1485e2f0647bee483d Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Thu, 5 Dec 2024 13:45:14 +0000 Subject: [PATCH 3/4] [info=6f7127ad4924a93508fb1987e85f2a104f8eabe566e3cdaeb88af73312e90f9e] OBS-URL: https://build.opensuse.org/package/show/devel:languages:nodejs/nodejs22?expand=0&rev=23 --- CVE-2024-21538.patch | 46 ------------- SHASUMS256.txt | 82 +++++++++++----------- SHASUMS256.txt.sig | Bin 566 -> 566 bytes _scmsync.obsinfo | 4 +- fix_ci_tests.patch | 61 ++++++++++------- icu76.1.patch | 13 ++++ linker_lto_jobs.patch | 12 ++-- node-v22.11.0.tar.xz | 3 + node-v22.12.0.tar.xz | 3 - nodejs-libpath.patch | 26 +++---- nodejs.keyring | Bin 17430 -> 63719 bytes nodejs22.changes | 14 ---- nodejs22.spec | 38 +++++------ old_cares.patch | 155 ------------------------------------------ 14 files changed, 133 insertions(+), 324 deletions(-) delete mode 100644 CVE-2024-21538.patch create mode 100644 icu76.1.patch create mode 100644 node-v22.11.0.tar.xz delete mode 100644 node-v22.12.0.tar.xz delete mode 100644 old_cares.patch diff --git a/CVE-2024-21538.patch b/CVE-2024-21538.patch deleted file mode 100644 index 2e1b0de..0000000 --- a/CVE-2024-21538.patch +++ /dev/null @@ -1,46 +0,0 @@ -Applied following patches, - -From 5ff3a07d9add449021d806e45c4168203aa833ff Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andr=C3=A9=20Cruz?= -Date: Wed, 6 Nov 2024 22:02:49 +0000 -Subject: [PATCH] fix: disable regexp backtracking (#160) - ---- - lib/util/escape.js | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - - -From 640d391fde65388548601d95abedccc12943374f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andr=C3=A9=20Cruz?= -Date: Thu, 7 Nov 2024 12:50:38 +0000 -Subject: [PATCH] fix: fix escaping bug introduced by backtracking - ---- - lib/util/escape.js | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - - -Index: node-v18.20.5/deps/npm/node_modules/cross-spawn/lib/util/escape.js -=================================================================== ---- node-v18.20.5.orig/deps/npm/node_modules/cross-spawn/lib/util/escape.js -+++ node-v18.20.5/deps/npm/node_modules/cross-spawn/lib/util/escape.js -@@ -15,15 +15,17 @@ function escapeArgument(arg, doubleEscap - arg = `${arg}`; - - // Algorithm below is based on https://qntm.org/cmd -+ // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input -+ // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information - - // Sequence of backslashes followed by a double quote: - // double up all the backslashes and escape the double quote -- arg = arg.replace(/(\\*)"/g, '$1$1\\"'); -+ arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"'); - - // Sequence of backslashes followed by the end of the string - // (which will become a double quote later): - // double up all the backslashes -- arg = arg.replace(/(\\*)$/, '$1$1'); -+ arg = arg.replace(/(?=(\\+?)?)\1$/, '$1$1'); - - // All other backslashes occur literally - diff --git a/SHASUMS256.txt b/SHASUMS256.txt index 845590b..5196a6f 100644 --- a/SHASUMS256.txt +++ b/SHASUMS256.txt @@ -1,41 +1,41 @@ -b4cb7707b22218154cdcf8cbc9bbb5c941dab09961a544cc7aba6ab50da99926 node-v22.12.0-aix-ppc64.tar.gz -587e4f0fc2c27106e4e758a29db5726b337e660483dd554ea1610a4246fbf71b node-v22.12.0-arm64.msi -293dcc6c2408da21562d135b0412525e381bb6fe150d688edb58fe850d0f3e13 node-v22.12.0-darwin-arm64.tar.gz -0047be0cfda922eb73876f9ef41de361c36b7654c884d13d9b783b0efd1db9aa node-v22.12.0-darwin-arm64.tar.xz -52bc25dd026db7247c3c00439afdb83e95087248267f02d6c1a7250d1f896173 node-v22.12.0-darwin-x64.tar.gz -d68ef0c4c19b3b3b88c0e7408668d0a539607c136a14668e079feed0c6ec8bec node-v22.12.0-darwin-x64.tar.xz -c0760383af3c23637f46959a53113490fefb84cb388ac71a08d28761527e7b1b node-v22.12.0-headers.tar.gz -3cde28bb5820cf0f7593c7817c7a9ab1f15016dd85a6e5c240bbdf2a9c59130d node-v22.12.0-headers.tar.xz -9e7905fdee722f9650a03ae644b51c4c6effd3b98ac93c588700072ab35c9ddb node-v22.12.0-linux-arm64.tar.gz -8cfd5a8b9afae5a2e0bd86b0148ca31d2589c0ea669c2d0b11c132e35d90ed68 node-v22.12.0-linux-arm64.tar.xz -f6f3dc6493befa7844e2f65024f857dc8fbbc0d86089b09f6e73d5eb7e2ce9ad node-v22.12.0-linux-armv7l.tar.gz -afedb2695faacb22805adde9534f2a360f2b39cab622ebdfe5e7383a2b58ebb9 node-v22.12.0-linux-armv7l.tar.xz -a01148778eb1e9c56413e6a69cfe8d4563524c914dc3f9c667948a0d7a1a151a node-v22.12.0-linux-ppc64le.tar.gz -199a606ba1ee86cce6d6b369c71f9d00873d2836a6662592afc3b6a5923e2004 node-v22.12.0-linux-ppc64le.tar.xz -63dd2e20cb50e2145c06f8f55b5682753691965b20fa08797a969a15b751ac8e node-v22.12.0-linux-s390x.tar.gz -9b517f8006eb4b451d40c461cbe64f93c6455566dbe2613387ab02412bc06d35 node-v22.12.0-linux-s390x.tar.xz -e05a4d65232ae2b27b3d77da2e368522fb46b923335b8e0d5f77624c32484044 node-v22.12.0-linux-x64.tar.gz -22982235e1b71fa8850f82edd09cdae7e3f32df1764a9ec298c72d25ef2c164f node-v22.12.0-linux-x64.tar.xz -94068d6877faa376f0b00aa775b490d59ea9accc8dbc5616efaff400f670fee1 node-v22.12.0.pkg -3157e7c002b6e964bdbefb331ec38db1e2dceb064ab11c038275155461b22ce3 node-v22.12.0.tar.gz -fe1bc4be004dc12721ea2cb671b08a21de01c6976960ef8a1248798589679e16 node-v22.12.0.tar.xz -9c8e8fc0e409dc0cf32f159f9ccf11e95f1be5bb26e1a9b34f40bb9a6da3f0e2 node-v22.12.0-win-arm64.7z -17401720af48976e3f67c41e8968a135fb49ca1f88103a92e0e8c70605763854 node-v22.12.0-win-arm64.zip -922285593360adbe1fcd16d4e0049a13552dcad085fa53768c21c8d17089a134 node-v22.12.0-win-x64.7z -2b8f2256382f97ad51e29ff71f702961af466c4616393f767455501e6aece9b8 node-v22.12.0-win-x64.zip -6fa5480413f3bacc170f94e7aa332e5e8d8c3f9a03f05f802c6cbf6b1a265eef node-v22.12.0-win-x86.7z -b52129972529f22f1c8a726655842ca1fc13e0b4c37cd4d397270ba772032d43 node-v22.12.0-win-x86.zip -5fa43604523be95f8e73c4c98337a5c2bf02450a6525ad25ec2926e464e6bcef node-v22.12.0-x64.msi -97fd52500c6947d5886c616ce37c93d40f5b0b811a1f87f89783c25e0de345e3 node-v22.12.0-x86.msi -cfd2e0d9a708cf37acfecfd11ff237bb141893dc057080b4edb23af6a45d3f55 win-arm64/node.exe -423502a56ef7f7dd087df41b518f53104ce321ef2ab3031fe4ca22b965382d86 win-arm64/node.lib -739c03416daf8d2f2efc0bf48a8c2e53e0c14438b8a5889cc2995c5012ae7824 win-arm64/node_pdb.7z -70f9745e3380cf452d3a8fd156d5ed7ead92a30fdead78ea703afe5331f77e35 win-arm64/node_pdb.zip -b3b117a08ee61efee09e6fd523ab33c0c018da1b570bde08e4fd914dc1170ed6 win-x64/node.exe -7980a34112c38a9b269226bcd3a9148bf101411d794750f18dc15c5026b92b30 win-x64/node.lib -e9fc26cea58f8e1520a5a930c7fc40ac99f22c8470f5617d3e3f09dcd1feb7ef win-x64/node_pdb.7z -6a9417c99259f5d15a3c11dbe7a011a1484532b33bb84e5e8f8e3c733af74064 win-x64/node_pdb.zip -ab2390e667e9abfa16b97a27adf84cd9f08a4788816db54f56bc25893f76e9d1 win-x86/node.exe -289e832c5ff6ebb6be1644bf06d7078638447947cc6e314122e7f17b30ba268a win-x86/node.lib -525560e7fe53036a1caaf63ec3d4e508ea59079111c0f18b4de2bbf1069537ff win-x86/node_pdb.7z -82150928ab3f6bc3f50b4cc540b987b3c41ea7f3f93f790e4acf58553572faea win-x86/node_pdb.zip +1bbf7e632ea55eabf920e8e27bb3e73ca4923eca78a300e5767635e9b2c0c603 node-v22.11.0-aix-ppc64.tar.gz +de6cd4db461b6dc3b3eab31a36b58e30d8af074183bcb13ceca6fd162a579ba6 node-v22.11.0-arm64.msi +2e89afe6f4e3aa6c7e21c560d8a0453d84807e97850bbb819b998531a22bdfde node-v22.11.0-darwin-arm64.tar.gz +c379a90c6aa605b74042a233ddcda4247b347ba5732007d280e44422cc8f9ecb node-v22.11.0-darwin-arm64.tar.xz +668d30b9512137b5f5baeef6c1bb4c46efff9a761ba990a034fb6b28b9da2465 node-v22.11.0-darwin-x64.tar.gz +ab28d1784625d151e3f608a9412a009118f376118ed842ae643f8c2efdfb0af6 node-v22.11.0-darwin-x64.tar.xz +0d42dc3b3377f49e495976dc0e4f5c3a7ffb1d714050d2f247afdbbc0898dae5 node-v22.11.0-headers.tar.gz +7eddf759cd3d1a0113c1a0ac7c080e5c0e458bca34a064c62dc8ce613ff5efdd node-v22.11.0-headers.tar.xz +27453f7a0dd6b9e6738f1f6ea6a09b102ec7aa484de1e39d6a1c3608ad47aa6a node-v22.11.0-linux-arm64.tar.gz +6031d04b98f59ff0f7cb98566f65b115ecd893d3b7870821171708cdbaf7ae6e node-v22.11.0-linux-arm64.tar.xz +f85ced095b17e2535859fd2a5641370c3fca12dd72147f93d2696e2909fe1e9d node-v22.11.0-linux-armv7l.tar.gz +9de0fdcfb1cccbe03f72f939e4e6f03867aef3da8223f90606cd93757704dae0 node-v22.11.0-linux-armv7l.tar.xz +0532965a717d3996302a111703c007dac2763e01795730d488dadbc2fcfac2fa node-v22.11.0-linux-ppc64le.tar.gz +d1d49d7d611b104b6d616e18ac439479d8296aa20e3741432de0e85f4735a81e node-v22.11.0-linux-ppc64le.tar.xz +64f691400ffe3a84be930e0cb03607d0b95bef122a679f7893d8e2972e90c521 node-v22.11.0-linux-s390x.tar.gz +f474ed77d6b13d66d07589aee1c2b9175be4c1b165483e608ac1674643064a99 node-v22.11.0-linux-s390x.tar.xz +4f862bab52039835efbe613b532238b6e4dde98d139a34e6923193e073438b13 node-v22.11.0-linux-x64.tar.gz +83bf07dd343002a26211cf1fcd46a9d9534219aad42ee02847816940bf610a72 node-v22.11.0-linux-x64.tar.xz +8d658eda7699d580ccc268ca8a40ced5aeecef5bb4d19c4187e92eebac5d68ec node-v22.11.0.pkg +24e5130fa7bc1eaab218a0c9cb05e03168fa381bb9e3babddc6a11f655799222 node-v22.11.0.tar.gz +bbf0297761d53aefda9d7855c57c7d2c272b83a7b5bad4fea9cb29006d8e1d35 node-v22.11.0.tar.xz +55b491f3d73fdacf8cf43a2199e824abadda2c43a94780310baa526dc1d679e2 node-v22.11.0-win-arm64.7z +b9ff5a6b6ffb68a0ffec82cc5664ed48247dabbd25ee6d129facd2f65a8ca80d node-v22.11.0-win-arm64.zip +d2a4fadb1f5e4abc634b6ac16c44cae7c73ffc3dbfe8b92b011d85f2df90f6c1 node-v22.11.0-win-x64.7z +905373a059aecaf7f48c1ce10ffbd5334457ca00f678747f19db5ea7d256c236 node-v22.11.0-win-x64.zip +ca0a274f1edc90005b1dc7ec22ec55dad1acc21320bc0be853065d69db2a5152 node-v22.11.0-win-x86.7z +700e0b1bcaca8b1a04c929ce29b0f07e099b4a34a7facab74fda71764d16f71c node-v22.11.0-win-x86.zip +9eea480bd30c98ae11a97cb89a9278235cbbbd03c171ee5e5198bd86b7965b4b node-v22.11.0-x64.msi +ab19f02c4b0d9f578928b67d2a652496aa31729a8cc9771ffc9cc6d3b8afe7e3 node-v22.11.0-x86.msi +b4e5e2821aeb518c0c55f02d4fcd9182c57f97bcce50341998333dba38e34ea4 win-arm64/node.exe +ad65afe5b192644fec9d599c77f0e38a8421d0d7ad2389679882a288c8df444b win-arm64/node.lib +0861cf0f1ff6135a21eb26279fc6a6f7dc9d9c0ac926a17553f387c32945eea5 win-arm64/node_pdb.7z +f35c2d1a967080b0a1e288b891cb9300a04d0b90042bac8c965c9ebcfc3749bf win-arm64/node_pdb.zip +7447c4ece014aa41fb2ff866c993c708e5a8213a00913cc2ac5049ea3ffc230d win-x64/node.exe +3581a06b68c4584d146372113eaa8c4d102127222e5041195ba38f185eef419c win-x64/node.lib +171d80aeedbe43bd70b3539de6f845a359d8dd97a684df2cbb4f49d8946f4991 win-x64/node_pdb.7z +7c3fa0149b17d9ff4b5af2f3e19e768b6ab684a9dd8dcf35ea204a90d3f56903 win-x64/node_pdb.zip +e54a4559dafd56562a45b50000831d28ee2f7f1ac4ff98b38165871f31f64ab8 win-x86/node.exe +45399070d1d247cf223d12e80d3e638635af24d2f7a4714bc8e38a6a918f162a win-x86/node.lib +a78040dbb0e7296eebe90c235091ee46a8a01587a226bf4e5a01f5b399e153d7 win-x86/node_pdb.7z +9fb300178536e8243ad55207ee85990731e77299c9e670cec0b54e10dc971713 win-x86/node_pdb.zip diff --git a/SHASUMS256.txt.sig b/SHASUMS256.txt.sig index dc4b07407e9f9f27b203972007f1642d72de4417b650985a2f99dc6bffc12610..f3533ab6215bb724fbc00d68b672fd070082a85c40b562b3435804db8a480cee 100644 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j-4FQcv;zT9i%Ym;EaJnTimdbvCW0%suW6#xne5X3y} zMZtQxJg| zlG*-3e>FZ@8{I;=a{L_SzqZeKV#BB63Si&N1UiGL7mu@;xtH>q+c|{860X(IE%W^+ z`+QBIJ7rlTxy?jTW$f*rM=|b^#dC+Iu(Dq4a-g#S8d_m=G~c{NKAwHK|NT5mo6^RV zxeyu3uzg9Vj|&a%@3;wMNAMXg*jcBUlGrSjOpKPengfF)@GWt>p<^3D+EafNhJOAj z%2~Og?md;lpk&XyocACTa;2*+wbhou|M*Tgy?aSe^AHFhOw*aQi*F*c6@+2_l(NEv zfE}eACF~C-7_@%Z=xj5btec)lR=itEmVXs|8 zh(`0(9&ya%{+Z?V5`k5aUawR^D4Lz^j=uoM}+lK2V*0%uQb2LK8Q5SOqN z8NHJD3ejy3|8WF-+OWtYYFLw(=q4=_9Ys0hmbkk@UqIfs2~)DT;U|%+1=xjPV4VTA zkQ$jUobf`JIhy8V|CRa0L?GnoX*!tN^m6molgyLysvHrg})Sfr6GfGod%# zu!IZWYtS2<*ui;=aR%}6dlved479jn#W9)!fdgNq-W!X E{u%5Uq5uE@ diff --git a/_scmsync.obsinfo b/_scmsync.obsinfo index dec58da..09b5abd 100644 --- a/_scmsync.obsinfo +++ b/_scmsync.obsinfo @@ -1,3 +1,3 @@ -mtime: 1733403526 -commit: 6dbcf743eb35bc4224b956f23d9ad0e7e6c97950351cf855f1e5024e8267da2c +mtime: 1732119982 +commit: 6f7127ad4924a93508fb1987e85f2a104f8eabe566e3cdaeb88af73312e90f9e url: https://src.opensuse.org/nodejs/nodejs22.git diff --git a/fix_ci_tests.patch b/fix_ci_tests.patch index c9bd3ce..4adbca7 100644 --- a/fix_ci_tests.patch +++ b/fix_ci_tests.patch @@ -2,10 +2,23 @@ Author: Adam Majer Date: Dec 20 09:18:49 UTC 2017 Summary: Fix CI unit tests framework for OBS building -Index: node-v22.12.0/test/parallel/test-module-loading-globalpaths.js +Index: node-v22.10.0/test/parallel/test-node-output-v8-warning.mjs =================================================================== ---- node-v22.12.0.orig/test/parallel/test-module-loading-globalpaths.js -+++ node-v22.12.0/test/parallel/test-module-loading-globalpaths.js +--- node-v22.10.0.orig/test/parallel/test-node-output-v8-warning.mjs ++++ node-v22.10.0/test/parallel/test-node-output-v8-warning.mjs +@@ -15,7 +15,7 @@ describe('v8 output', { concurrency: !pr + .replaceAll('*test*', '*') + .replaceAll(/.*?\*fixtures\*v8\*/g, '(node:*) V8: *') // Replace entire path before fixtures/v8 + .replaceAll('*fixtures*v8*', '*') +- .replaceAll('node --', '* --'); ++ .replace(/node\d+ --/, '* --'); + } + const common = snapshot + .transform(snapshot.replaceWindowsLineEndings, snapshot.replaceWindowsPaths, replaceNodeVersion); +Index: node-v22.10.0/test/parallel/test-module-loading-globalpaths.js +=================================================================== +--- node-v22.10.0.orig/test/parallel/test-module-loading-globalpaths.js ++++ node-v22.10.0/test/parallel/test-module-loading-globalpaths.js @@ -11,6 +11,9 @@ const { addLibraryPath } = require('../c addLibraryPath(process.env); @@ -16,10 +29,10 @@ Index: node-v22.12.0/test/parallel/test-module-loading-globalpaths.js if (process.argv[2] === 'child') { console.log(require(pkgName).string); } else { -Index: node-v22.12.0/test/parallel/test-tls-passphrase.js +Index: node-v22.10.0/test/parallel/test-tls-passphrase.js =================================================================== ---- node-v22.12.0.orig/test/parallel/test-tls-passphrase.js -+++ node-v22.12.0/test/parallel/test-tls-passphrase.js +--- node-v22.10.0.orig/test/parallel/test-tls-passphrase.js ++++ node-v22.10.0/test/parallel/test-tls-passphrase.js @@ -223,7 +223,7 @@ server.listen(0, common.mustCall(functio }, onSecureConnect()); })).unref(); @@ -29,10 +42,10 @@ Index: node-v22.12.0/test/parallel/test-tls-passphrase.js // Missing passphrase assert.throws(function() { -Index: node-v22.12.0/test/parallel/test-repl-envvars.js +Index: node-v22.10.0/test/parallel/test-repl-envvars.js =================================================================== ---- node-v22.12.0.orig/test/parallel/test-repl-envvars.js -+++ node-v22.12.0/test/parallel/test-repl-envvars.js +--- node-v22.10.0.orig/test/parallel/test-repl-envvars.js ++++ node-v22.10.0/test/parallel/test-repl-envvars.js @@ -2,7 +2,9 @@ // Flags: --expose-internals @@ -44,11 +57,11 @@ Index: node-v22.12.0/test/parallel/test-repl-envvars.js const stream = require('stream'); const { describe, test } = require('node:test'); const REPL = require('internal/repl'); -Index: node-v22.12.0/Makefile +Index: node-v22.10.0/Makefile =================================================================== ---- node-v22.12.0.orig/Makefile -+++ node-v22.12.0/Makefile -@@ -397,7 +397,6 @@ ADDONS_HEADERS_PREREQS := tools/install. +--- node-v22.10.0.orig/Makefile ++++ node-v22.10.0/Makefile +@@ -399,7 +399,6 @@ ADDONS_HEADERS_PREREQS := tools/install. $(wildcard deps/uv/include/*/*.h) \ $(wildcard deps/v8/include/*.h) \ $(wildcard deps/v8/include/*/*.h) \ @@ -56,7 +69,7 @@ Index: node-v22.12.0/Makefile src/node.h src/node_api.h src/js_native_api.h src/js_native_api_types.h \ src/node_api_types.h src/node_buffer.h src/node_object_wrap.h \ src/node_version.h -@@ -570,6 +569,7 @@ test-ci-js: | clear-stalled ## Build and +@@ -572,6 +571,7 @@ test-ci-js: | clear-stalled ## Build and # Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned test-ci: LOGLEVEL := info ## Build and test everything (CI). test-ci: | clear-stalled bench-addons-build build-addons build-js-native-api-tests build-node-api-tests doc-only @@ -64,7 +77,7 @@ Index: node-v22.12.0/Makefile out/Release/cctest --gtest_output=xml:out/junit/cctest.xml $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \ --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \ -@@ -750,7 +750,8 @@ apidocs_json = $(addprefix out/,$(apidoc +@@ -752,7 +752,8 @@ apidocs_json = $(addprefix out/,$(apidoc apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*))) tools/doc/node_modules: tools/doc/package.json @@ -74,10 +87,10 @@ Index: node-v22.12.0/Makefile echo "Skipping tools/doc/node_modules (no crypto)"; \ else \ cd tools/doc && $(call available-node,$(run-npm-ci)) \ -Index: node-v22.12.0/tools/test.py +Index: node-v22.10.0/tools/test.py =================================================================== ---- node-v22.12.0.orig/tools/test.py -+++ node-v22.12.0/tools/test.py +--- node-v22.10.0.orig/tools/test.py ++++ node-v22.10.0/tools/test.py @@ -1386,7 +1386,7 @@ def BuildOptions(): result.add_option("-s", "--suite", help="A test suite", default=[], action="append") @@ -87,10 +100,10 @@ Index: node-v22.12.0/tools/test.py result.add_option("--arch", help='The architecture to run tests for', default='none') result.add_option("--snapshot", help="Run the tests with snapshot turned on", -Index: node-v22.12.0/test/parallel/test-crypto-dh.js +Index: node-v22.10.0/test/parallel/test-crypto-dh.js =================================================================== ---- node-v22.12.0.orig/test/parallel/test-crypto-dh.js -+++ node-v22.12.0/test/parallel/test-crypto-dh.js +--- node-v22.10.0.orig/test/parallel/test-crypto-dh.js ++++ node-v22.10.0/test/parallel/test-crypto-dh.js @@ -93,7 +93,7 @@ const crypto = require('crypto'); dh3.computeSecret(''); }, { message: common.hasOpenSSL3 && !hasOpenSSL3WithNewErrorMessage ? @@ -100,10 +113,10 @@ Index: node-v22.12.0/test/parallel/test-crypto-dh.js } } -Index: node-v22.12.0/test/parallel/test-dns.js +Index: node-v22.10.0/test/parallel/test-dns.js =================================================================== ---- node-v22.12.0.orig/test/parallel/test-dns.js -+++ node-v22.12.0/test/parallel/test-dns.js +--- node-v22.10.0.orig/test/parallel/test-dns.js ++++ node-v22.10.0/test/parallel/test-dns.js @@ -403,7 +403,7 @@ assert.throws(() => { const server = dgram.createSocket('udp4'); diff --git a/icu76.1.patch b/icu76.1.patch new file mode 100644 index 0000000..8ec79d3 --- /dev/null +++ b/icu76.1.patch @@ -0,0 +1,13 @@ +Index: node-v22.11.0/configure.py +=================================================================== +--- node-v22.11.0.orig/configure.py ++++ node-v22.11.0/configure.py +@@ -1876,7 +1876,7 @@ def configure_intl(o): + elif with_intl == 'system-icu': + # ICU from pkg-config. + o['variables']['v8_enable_i18n_support'] = 1 +- pkgicu = pkg_config('icu-i18n') ++ pkgicu = pkg_config('icu-i18n icu-uc') + if not pkgicu[0]: + error('''Could not load pkg-config data for "icu-i18n". + See above errors or the README.md.''') diff --git a/linker_lto_jobs.patch b/linker_lto_jobs.patch index 22ceffe..6bcb4ae 100644 --- a/linker_lto_jobs.patch +++ b/linker_lto_jobs.patch @@ -3,11 +3,11 @@ is run serially over these binaries instead of in parallel. OBS workers run out of memory as each executable seems to require upward of 5G RAM -Index: node-v22.12.0/node.gyp +Index: node-v22.10.0/node.gyp =================================================================== ---- node-v22.12.0.orig/node.gyp -+++ node-v22.12.0/node.gyp -@@ -1186,6 +1186,7 @@ +--- node-v22.10.0.orig/node.gyp ++++ node-v22.10.0/node.gyp +@@ -1193,6 +1193,7 @@ 'deps/simdutf/simdutf.gyp:simdutf', 'deps/ada/ada.gyp:ada', 'deps/nbytes/nbytes.gyp:nbytes', @@ -15,8 +15,8 @@ Index: node-v22.12.0/node.gyp ], 'includes': [ -@@ -1264,6 +1265,7 @@ - 'deps/histogram/histogram.gyp:histogram', +@@ -1273,6 +1274,7 @@ + 'deps/sqlite/sqlite.gyp:sqlite', 'deps/ada/ada.gyp:ada', 'deps/nbytes/nbytes.gyp:nbytes', + 'cctest' diff --git a/node-v22.11.0.tar.xz b/node-v22.11.0.tar.xz new file mode 100644 index 0000000..93767f0 --- /dev/null +++ b/node-v22.11.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbf0297761d53aefda9d7855c57c7d2c272b83a7b5bad4fea9cb29006d8e1d35 +size 47006780 diff --git a/node-v22.12.0.tar.xz b/node-v22.12.0.tar.xz deleted file mode 100644 index c65497d..0000000 --- a/node-v22.12.0.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe1bc4be004dc12721ea2cb671b08a21de01c6976960ef8a1248798589679e16 -size 47625776 diff --git a/nodejs-libpath.patch b/nodejs-libpath.patch index 40de55f..7416139 100644 --- a/nodejs-libpath.patch +++ b/nodejs-libpath.patch @@ -1,16 +1,16 @@ -Index: node-v22.12.0/tools/install.py +Index: node-v20.12.0/tools/install.py =================================================================== ---- node-v22.12.0.orig/tools/install.py -+++ node-v22.12.0/tools/install.py -@@ -7,6 +7,7 @@ import os - import platform +--- node-v20.12.0.orig/tools/install.py ++++ node-v20.12.0/tools/install.py +@@ -6,6 +6,7 @@ import errno + import os import shutil import sys +from distutils import sysconfig import re - current_system = platform.system() -@@ -72,6 +73,10 @@ def try_copy(options, path, dest): + def abspath(*args): +@@ -66,6 +67,10 @@ def try_copy(options, path, dest): try_unlink(target_path) # prevent ETXTBSY errors return shutil.copy2(source_path, target_path) @@ -21,7 +21,7 @@ Index: node-v22.12.0/tools/install.py def try_remove(options, path, dest): source_path, target_path = mkpaths(options, path, dest) if not options.silent: -@@ -88,7 +93,7 @@ def uninstall(options, paths, dest): +@@ -82,7 +87,7 @@ def uninstall(options, paths, dest): try_remove(options, path, dest) def package_files(options, action, name, bins): @@ -30,7 +30,7 @@ Index: node-v22.12.0/tools/install.py # don't install npm if the target path is a symlink, it probably means # that a dev version of npm is installed there -@@ -109,7 +114,7 @@ def package_files(options, action, name, +@@ -103,7 +108,7 @@ def package_files(options, action, name, if action == uninstall: action(options, [link_path], os.path.join('bin', bin_name)) elif action == install: @@ -39,11 +39,11 @@ Index: node-v22.12.0/tools/install.py else: assert 0 # unhandled action type -Index: node-v22.12.0/lib/internal/modules/cjs/loader.js +Index: node-v20.12.0/lib/internal/modules/cjs/loader.js =================================================================== ---- node-v22.12.0.orig/lib/internal/modules/cjs/loader.js -+++ node-v22.12.0/lib/internal/modules/cjs/loader.js -@@ -1798,7 +1798,7 @@ Module._initPaths = function() { +--- node-v20.12.0.orig/lib/internal/modules/cjs/loader.js ++++ node-v20.12.0/lib/internal/modules/cjs/loader.js +@@ -1529,7 +1529,7 @@ Module._initPaths = function() { path.resolve(process.execPath, '..') : path.resolve(process.execPath, '..', '..'); diff --git a/nodejs.keyring b/nodejs.keyring index 2d1e055498751f95f0b53eb50dfa90b017bb17892125a3aaf4d506cfcf77877f..dc3233448fd5562e466d7dc20a3ac64b0b5bdd535d873a124caa5dd7295f4543 100644 GIT binary patch delta 48466 zcma&NWpG^Ek}ND{X0({mVrB-5nVFe!i_v0cW@aXfnVBt%nI+qjKA&^vyty;)&BWKg zc64`iM6bxI%&e@H8UcEI3l3y}B0?xf70iLcfP6=9_iTDl0r+VO&Y*J4! zw$(kkg0cMLWldk^w@9zyIZh`v8{LE(a40{1R<1XXn?b8h9r-fHyCmp_ zw2IbKhQ;(?DetSn-Nc|bKPnpQ+%@4S(rYndS8mE9>QE4?nr@Z)Mpn1z>GqZ%yn)DA zj=q>+wzlX62BgaAPDWVfsTSj8sPw8L0{!NFfdxl|HxaTl(z!(Gu0X@xPFvQVs`MAB zx_U31m5r8D*vjjt1Fwaut@&U616(AV zG8W8lv<&YbRx2N_*dOfdp7OS%Rzm$r;H%}&o`hHZWO=h@M_=)b6(|9Vgxe%G^RCJI zr6VK#7zc{%is(%{j2IbzmXf|XyNF@ocz2=7Z%g%9Pds`Y9&_rHpG>*SrLltK&VNb& zX#65K6EdJ=%KFA(#+0kK6>6fFjt8GQ{gHerQ+mu7e!7|n$sQ_KSO0Qx&#YY`G?qV^ zgN{1{PlEAD-9fd(pfns{%|19w#&L=vM0r%zG>!x#{c}PvAPA6P8i=wJkipPlL;)ah zuqem8Bf?Xt4`VKf$nQKxdYnsgH>SN^;YT9UR(Ox({zYn|YBmS-CfQQQf!TuH@cIv; zeuzdY5P|dz*yA{JGo~k2V#Pr*?MJj6=^F8?$BS~+UjtT6}!QJhSSO~;z7 zPtth9sUZ0V3gI;`Wh*52Y2$rl{ZfyQFd*9zCR0qw876cpEI(o>D} zTee6@BFnIbxy?Y^jPCm?QX8m93J;f@l_eviO|)9*OQu`~4#p==vl=?V(frZLu4a6G zO~xt}UzVV6Hu>{8!f#M5Hpm5A9fn?ieZREi|>s*Ok>fcyMdBVh8EfmY;+3hU4Rg@%eyU!3=z#pHcb;*sBcieS*nGgb5{|o}ylTrc_Nm6G%UK{6 z<%PBbrdR36OhhkCb&VBn&f z5w=JB6J#22OiO)Q3RchZmZ)1g^m{dzpOX3ZvY(Yy!8nTkfDnVwU4WR}oLykvF_Tzu zpl~9X#IHk>7s=m@{cq*vVEU)PEG!ruoc~*m6~+IT8Y>up0f{d*=#g<-=Yduld^BKl zPhReINM|{7uNdiMEWB)_g!p~EYU-+Gp%y8=rGi%wP2B+^VqEj4+&xF_<%=Da-!Ez1 zmy}`yvYt0pbtD>!;7szl2dcs4tc$T~qa9v{;!lvmAr z^GhgXbYsS69%4Sj)^@ev0<9pkM5H?06|E{*>1>A$ih^%oNy1>{0RQH{S5&nFS9+ zUTbleKY`b0cvb+oRi4%TJ^oBP5uPgoL?d+PIMBzgY=9e?Zlr>DaMWkiH2&`RPa2<3 zw%`5uu&4Kee=J%v1U2@K?jnQlGlB6lZ+?~i3XkDvDX?0$*bgg3rta?dxJElG*E0~v zuHlqGgtmg5X*j#xAWmS&J)u^>72M2qeL~;c5Y(aRiFu6|D}h#uOzxvzegJpXXhfPk8h-bhL|ebTAZ5C zd`&%6oY+-K<(fN>5703T)#|i9X1fr*(u6EX9{zv~bao9ok$9tNPv!MI^7=(|{WpzA zf)YXC{Gn{ve^E9VKEhvh^ABlj+`@pgShF8f-`e(va!7!QeK}&sgM?=5qgHW0Jqj!+ z_!j5LI>$6IX)Z(}f0v$sM{tI=a12d63k)cu$i3!|Rzn)5NyjVSW2`K^P&sujDrqgJ z6SLk=OSgvHF}p1FgVtS3c)1~X?R zyHP%2;-Q>F6z4>#3udjd{D#gGc98*w2%%Q{^$REpNVf@u1I)-ix=_lT{?ax*-E+At z|JkypxH(p+ZCIVQlLz1Efvin{34nv|kAtPO_9a^qi5#^NI(_X!SD3?B9|8aF@nCgF z5}i3|sMcBx->K`QgeJpDLx8k!(P+fu%vo|-=X+cPDoRga_HDRnapXFITx&S*(Y9RR zmIty5CD-jalwsi4T_?DE&{2EHzGP@vZ}=ZaGvle_FS!tHr}OJqc1-CFT7V<}qc-Ja zMLFNwEl*bjJU$E8TcAbK)%sf&HTol~iG`k+r z?qET7sfg*2G{GLbswPC->oI|m&B8%MkOkZgPcMTW$P7y)bsrx>#i~nQ>Yq-wZq`?X z)ekj#tU$P6YIED0l13!Jr2%LvFpt#PXei3h;@j<%RH9=(97=a8lC}N%YDQ<^9kf-2#YH7=TlH9UnJa&6^U}&I|v*azcKt9auJYyCrV5s*G4&D zWxPjo$p=&$mItHb(93nIelK51B6R0v8z2c2Q{1f+)NFBM5a<&mTlW8s78xDX1wxjx z!Qi4FOjH&t(85ow57Av9|de;ZS~iK zkcFL*l`W%*17P<@3==@0{HZJ`NHDc}vGsp1tL`@F56$uf0oF^svzLXVdZAvVPX%&X zyD4%cU1F|U#m?v$vjwIJw;9SUaWxP-^F|G3r_^Fk)^KsO2NU%Y5vsycgb*-pl-}lG zs4CMwP6?L71X?xYfoL{6C^BsxjuVE!&$v7b>qOW%V2w)t(TNb2Xf!L`GL)hW;s>A; zc45&|!PeS6R9{%5l+LBr!W(7_!in3kM)ZteBxJIA`> z1t@?nrLGSKzw9weJ<*I3^@(wnur>-rgiti-?Ct!G97-&kw2^DNux-GzwT<`3bNJ z+wj37zxW1(x0B2FAyR78S-iW%d+nwUT}6m5{E9W|w)`x*IX6@ZKDer!)@!)B#Z z%Hs@sKYM;YlGvq#27m%nQ12-;9YXppXs$#|@y0sbJ%;z~w~)GO&Kaz->;<}MekoEU zWf`TLOn5huV5)yi6C8*D7(O^8 zJS+?}I3y+I2{nZmIsl1{i#`C7)4(&>zfZ#2*Qmx5gRkc7Wi zZ7rSvCu`kPC+`MsH1s^~mL)?1f}*cFC-7|J?F~ke@A==m!pk@M96UNWEjK@MzR|D4 zu!q@VEh1^hx3Gqx-)J+i5KXjr@0=HM%+2T(Z#nYt zhS*=t1s@dQM&_}hUw`io$%Q4okVMSwSl-J7+~~7BMPqn}?rb&o+u+h!ic{#aIT-IM zC&=ri%?AueO)@Dha1J3>LGu6XW^Vf#bDMI@9lT-_QF#c#PZ)4J4> z@V_9LkFO@_`&2Goeb(cLnbcfqg)7)9&L3?-qO?-^cpSV;sF~* zb9pD{G6HNho7Y@LG3vOx(@1BCPI7oagiKh6Bp97+gy{aP(lkzP+wGaRRQnNp+@95; z(y-jOwc!ZAgaX2|<3G85gal-WWD@0o1~imFIW+cET#Q3XnDUeVPp_p_n=+)fF;gyB zcQZB9j8>KfXIyoVj2x`+jbhf;LNDE>p|EWv7fpRW&JI@J~4jv`tWq@6yX9>`bBX?;*;LZYHEvD$LALv+b`v_Erc%+R zVsTh7C6QEHFn+(DekT-cV|&%e#TV|5^1upCkDfy%fWUsxyk;d<|6u%(E5C|a07}%H_a1tedLjzc5R3EBN*E(CxK>EpCH|P#>8)Oqc39=} z)@0KC??gX8cZpP)#eAg8>__90454`|-ILgpkvm*6I9qfuT}+T5A-m8oTYd^)hCL$p^_{urd`9s=Kdr5{%B%I*nj3U|MU+qD&%+SQ`cm$^BgAR z-TI*j|z zQopDIgM2SfQTcQKX@Rz^=1wN|!ib4k9s5bI+}m3zJEl-^*Ty>2`YB+A>)IusnXrmG zz;g4$ali8uOk`RoP2T?A3LneO^!Xs&H0Gd3(wFfYyi)BVZW8^X1N;>k<_hkgBg7?z z6yk{lWT8aKhI*y+ClI7I5mD!;;e{RSXTRjQ_jUB_1bWQ%7GM0fkM((rO!0B3sG1D3 zHd8IQAIkf}{gXj<-X?*G(opw=rVPGpNsc5M+EIgPo3bF><}0e_#dRhxb^LnzE|M6s z>h0V%S$DG`1PdjtHb;aDHHk+0ZuOt*8|tSL{R4HD;fzo#^~~Rd3I;w+Q=%vGjpL&p zeygGl2r{sma$eqQl&jjloS9UEM(^}*Ll?aO@p7vcLc*JkHQNRNr1fb>dmKbZYi(Wu z5Yx6?nqJ1S!AbpwBzhmHggvTyFNIHmwr#e&*HED|?{m`}JJ{qD6`61c3I?!SE;W}j zLyP4_gufmA-~4`&MY$3!Be^JsE3Jc+sjle|jJ>3P(_*^RlkBmM1mpV~E0ljw@^2gj z{6#|lVC8QP8vC1ry#JkpT=Y>u3b@S3(DsgC)rl1K!~Ht-#oDd~kL5^jb`l{;1iysq zzY^@7pF4j2z(6v~4xayfHOtq@O6fE@pGach$IwoI9A`URJ8x(rc)eM&H;-n2NG1a% zzbCQ?0DIpI*dUIoIc58v^wNU@Q=$E_RpSI!ouTp$0*d`F5rcy^bmGiEPzzc&&XDEQ zqXvrZUlC!UD~KONiI=b{5-jFUR6062brvOM%r!kS+rSzc`6K<+IcG->LnPq^d9T#w zm!Pm)C@$)W6@yAmkLPHnX>i6~$7N^IL|UMM6M!e!)2(9A>ps%YFBPAV3IFAhHE@)` z@rzgg`2FlgHY5H}3%Bev5;8DVw72mtC@mwn~<{+VSwEHe7-bEqE+0Liz`*OS44rvsBDE}M*_t&$a-8_a$b*bMiuBLKCYHDaf6_>@m%mgs1eyHfFI!|(d=dMsKF$=KJ2Y73?Ccb0%w<7EX=bLy z{Y~zLzgPt31XBkQ<;zz!lfEw{bCl64`j)_F6)Dx16`#<5s&J0*H^1nFL;>8!+!@$3 zZ5;gOERq>Tcr9496GEah$a>M*NFDs2_l{9}E%a@=%}Yqp{EntyucN)|wT=_!K5uD_ znlX8-;lCjv4L5=XUZ8-m*U-tgHS;sXc(9_joH`VmQ7P=KUqteJv~ z;k()@zvQCUM1Q0aSQEBV5(8~G3BlSa>+UNa?9$L80ZW5u$(pa{1lQvW>vs7FL6DTo zM*KAr)pyd?qvr;|Wb;(^i3szvbdIEUMrrHG8Xj@{Eugl)@`VlG{u-mdF_Yw}qqpX| z!irE(M>rLl4VD>$IQ{3v$&5UwMohuIgPj%Dp{L#F9DQ3nT3S0~3*f>;-DaG$)}x4F z#Hs?-J+f75G+e8|QdVG}@au^QQ^o-CQ+8^9$^};2fcA@16EY&StP4`EtfrO1b$ipU zjgn%~lpaj;V=I+T&=5i<;pS+i-{fffNMkCRScSJ2?-I(0;G7rc+!7a#Gu4zFbu&^F zSd*80`^no>pZ`XxB5-`)!vgKk2KnW#-C`*OeWNWhWpBU)Gnsb7prv6!5cJFSYkfP3 z=iX#U)gpMWmOS-O8&@gRh7r^`@PGMB5*Z^qGZ$icVikKcTU%m2Ya^Gx9{!KR{9`cx zOO|l=U;GpBcbHIQhWyU_Od_;u(fpaFAYq=2lfzPC_U-A2I~JK*lj2T&g`K zU&p>qV{*R9m@Pbi&kQ!n`(O;jM~P*P>*eGVu*E(QAeSG@9wifeBnjIGcsYM=bdw{v zFg)IGkRC|-9n!KqQNpX!>D3%HR7%M=2!K}lQOcfwcXN{N-d_2xr-Gysq{XgG50j2W zA}!-l#c7|=^yJpzsy<&HP^ipigOPY?jVk-;46JC_7p#!}kyhPjp21(yGSY6t&O}^r zU)O)nrUVZm$Pf}k#rdW(`gPH-8!ksOG{)6vvQVpc6}Z4<-|q0_Y)UBc)(DAy-P383~s z+t`dI;`(sWkG*bah#A|1zol5&qtX#n3Rn2(w@nKFn&x zNib5cV@J_YXj5vbcvCU-O^#*;p#L^IIG-7FkQ1e;VfzT{eXuiHP}M{%@5OrOL~~AI z@A|$dA&77h6deZ<8P-Ep3D)x=Tz4N&pCibq0C-l~(k!acD zVa?}dc~Fmrxo6B|(!I+?a)Uz)c#S$!1fl%pdxaZ)L~_z{8H0wbWr8lLfa&p?e9L+)23y?ZL<-%iY2k2)d%WPJ%7ZnADm^W8WAe(WF;Dp|~%a_Mt z42ryF8Fr1OZ}nx64d8;OWap-H1AEcGJMivR?qWvTS_KV2ye=ENBf$v%&Mf~7vNZP5 z2>yb|TE}B;ZOD&Vz5wKR){@@hLhkZPHSZc;gJQm8NhBIpH30YdiZsFn*5hPWi=Ifm z(^-c|cOHoi9o0UP@;dmP=828d7FM)=V>cYEOMwX8lkhMlm>71BCg%7#oy9A+Ww-7( z>!ABev*ve1U5j@bemC&L@hXwN=FMm;qJ?9P87UVRuh%oEJlFadf`_SRo3zGV6MQ#t zhNbA?&>g+a0symkRun<6P9Vtw!=Dpv`jt=H7Gpqs*nPPpXQ#2(6afT-+7`F} z8Cmi$b-!+t)|8ekas;D^wW=}K>zAjwz)`SSg&V2Z@x)_*vgiafzSW&=L}=EswL5Ga z%5gC#`M^89hN#0~Tgu2Fo$?bbb#L>;CZ;3hG6x@qHBd?FRJl1pKapmcS|a|D#~qY7 zwQ+L4X_d?6Fjy=im2EG0lA>yJYqDJZi!u@M2TquK<=pq-Jg!@YfKZb~ilS6jiQRo? zhf~mmuh?IH4dUnsVWouVbo9*M;kn>j{GLfzC|p*e#B;M+?dn8gGh*(9$uS!}r4*C5 zsn^-q4FznpzJi2(HIC23q|0>)MjET(p<@qn-OG$pcq|dHeQZQYm$)%PyK7-sSfc$s zzE&olN@N9zr?h^eR%-P*V>{(m5_#ZT04Cbp@qxd{xYx@Q^wssY9BrcCNBi zgP`~&q~r@$VpT+=*jr`2;$yl%v%<(@P#vaSl5k{1eWCLM=ntq;ev zdq#~I0DJUX&K@)~gIY3W#T0Bn?^QKM|1EYr(fVSc3CT2MQ;=jz%5?!SANUraW*le! znsK<4yWKc|tihp(C{d&L-q@#Lu0TnSb1oM+o`vsZy1JJmCPovZg02=u7Noxzcn{Co z-4rjSzBD7Mza4O(E6Gn6G*-?qnO(9HWRtxIRAMd?y2>-R7&Mk`hS()N3RLGeVUo8r zRpFIFbrz-H8JGq@i=I(E|D4QT|9R|gr*Vo{R5zok&FjRS`d{g)^ZzGZxsD@$C<^-e z+>ZR-Gy!&)tK; zSaFT!cXy7=8}&l6twMQu0zjKeiiT-*8JEK3Fv+1!;{usBaN3pH zCfIz7$C!RU1@puZ)3X9+xj4@}$LiN49l>*gYZGDK^VJKLhzQp9+M=fm69g?Ml0(vl zE<|V&P0{ss`7y+~k2$%WioA-oGOz4_4_p@6ejcNhYyt-U5tUOfOBm|$3$oeX2z8n^ z6+ljrPbobmaG`Ri=2!k@k&aTO`*RICxsx(ghAX6tSw4RaJ)&6aPfkUd%nHU_5$ShP znuGAorSpz!H&1Qk2(`AS1q+x~J(Jz37n#u8`DD;i9o$0c}p*mR2tp zCF`a;_pg$BN3yC8RU_s8ZNJbgs!k-z_JFs$uv7EjrW_qkIEIGFf0&)YX3f@TWCacv zN4Gh9_{=|N5;_&PNiH_mWuEH7ufLdMe&dugqKpnZ@+gVITen7@gI;_&feQXS`8Qnwe|BvC zAAH4T^amrwq3#C6D47O$&2x&({@=7T35nF)m6*YA_$~B1TsGO&wVw zQ^gD#2tr(_RMA+URS3f?QWfmI@v9OwfG)yjsv(kManWfUeOEZ9*nT~M6^u>Di}l+Z z@xY=KXofURQvcWkE5~73p8F66isFYL<1A^}V$)xyNjxm&1es-CaZ~p{nzN8gT0XU# zF2$MLY(RuuW$V@3icvy)V?jqsaBL z_a+xrH?i$Ye$&+Z*^8p0cq}S>$dX(2MOykmRwx2DEz(==T}Z-V2psjDEwo^RpmUTM zprg)__w!pUi8E)+SQYxcvkvTYM`k}ib<={>vtj-_R<5Dk4=9Sh0`k}yU~A9krZ*jP zby=_20-qddlG`E{d?64Hvl!3t zVK|*@ZlTe=itrdEEIaWv^%KbBc86Oe(AMT7UZ6X25+mX{BCoex+#n0f-K^&yNj=z` zj@H~vWn<=LY~*6bXyw54A5`_97VAGh`}Yt}{R*1mFYWVBHZEug{b3SeF7bAspVtm{v>N7s1LEEtKM zmS|$xt{bpQ*dIJ&)?55yiZ|=Y47fo-;Crol3=y)9R3{}C;E3$c}Bbf zmztdTFp1vS0Z&C@Cv@{m4t-a|j@jEPetdPu?(JYFgakEwv3sQpLNQ*m@pQaW6fqMg zp!p4gU|Km;1Ik;_ZnbzrEB#F{*_Q0hYJ+8uTE|hS4XlV_b_!;k@VRZmZ29)-TD4(x zXb!QmXutbHRvb?> z3J%s_%4q$W`R4_LiD2X^jInCVelMz*Z;@ z!=^r5Ejy*^l3kzB|2C`mTl)>Np@1wVYMfc!gC_=V`XV^H!Vjs%cYZP|X+bc}L8?HH z+p_4Y**A)Wl@TS9w!cqr^|Npg(gsaI$Vfqc@YMg&?0ahxxQ#7R>$v0^lL%-C3CnGG z_%jb2XLn~dEGQnsO@$!^{NCgagO3@gH-{~b=lcQ4A=z9S zK~-qksn&=o#Juhb`(zRAypr3Zam%ot=m+{D#JaBJN>cByI16D&Dx!{MG}E<(X;p|C z8(B=Z2UB$JvatzDTVpk(GAmeED?YS5ulsY6cBo8K$1`-m{FD&UHehukaquIzPnY&OKzD46fC*nG06MGSLCWD3FXohT zN7F^a75Q^V!pMMI+@-K?$GQK-Y%a1Q{{*k`va4V} zFG_Cv+!uEbMOdh=x2kw|ty~?M*>z)?{Kv13)<$Y@7&1e;nBF|Wvw36BSC`spqO|yQT*RX7$$+Gi-f?*Dt zpetYEcAgHJMjUQF?{_PHK%6i3*3M>C^ik?Wn9(wy1p&wnfEhkbyS2=pTK>k=HB?tp z*`B0?r^{;-w~_N~%nX(&A*ojhjIvm=;qE=wb-1>1s6y2qHw8Xzb>H%R%y5Jq9vW1) zF%0eJlFlTef+(Ov)$DcnW`K6=fxnjc{vMaZfV6LyQ@66mtxg%W+#`)Ih%xIB9Jadg zvdIB#@Btog!?s;bH?A=Ogn7U#DlyKhJ+C+uNZY{>UrG?Y?WWMJ`C+Fya{JJ16`n(o z8U~z`a^`8vpM6$z=T}R&gqfR-`Tox4;MXBz`wiIlOg;=dPZ734V0ztBk}kGW`O26V zzBe4%*8_utHWns^IQ&zb%qnuH`IHR@_yKIrhHNfc+J{s`R_d#U*f$+LSS{{<1(x7q{{)tQ9SkHaG60(m0)`I;O7oxN zyna1m2;4tR{YMu6^`*aP+C{iQ7aGQ+I&KsOBolUh=GCty0Ir&iUEN^o&2jlcV}zaG zMp-`u#t>nBqRrAk!K!_hve+&o_@;&(hmiCBzE9n}MG6!un^=GOWR+HVUTzXqXY}J(%b(!yheI@ku zmmyY>Wq}~=_QyZI;Iu3LF!W5V&31NQ^oFAVE)S1h8aqeZZwfkJ6ZjnWVrSh@bwtAq z*}W_?W~Xg?gNC5qDk4`Ie-mzxgVs^~;?jajfICFv2m&-wgJi&P>o8yh=2@Q`O<&_)x(E@`Y_7K18+F6vRUVDmuWhBB z_2f%G=fk{Z)7$(cx)q~r;7w@LuIxA zJQZ{G%26T`*77;aDo7+u^QMbv8lJKr5DR*dU0c$1>9dTCg_YTaB1J}O@GS66zi5B? z-la{Akzm@v0}e4 z?xOUPnaiu~#3B8OGTuQ78d^6qZxK$K&pin`tY0z1&v$$f{E9;i)hoG2I3bq3fUmxM zu55F`i3rFs(zW)=QmfP-{9yGYNkUx*x8!bPCci$eXGQU6(YV^MuSE&wF}=nRlCNby zX_>sBF75&5=@qT7(RpQa-B9j#L}qPe$FNJ7jtxx4B0A!=XG|8Y>Xa{Y(q<>Ve`ciu zTnHY3GpN1LvaW;Au@u#d=V4YHkh$HX8N)!_X^FV2V<)AYOwom8y70_;M+gZ*dO1cvmN*Sc|GP>MP$B~ujQ9k@4kVd(equQQkloop=?=r1czBNxIi96 zlyvH^yFZnnq_Nf*KS=PAhZoTIYW%wlBF&H>{NUJ5{Bpn0aYLDV1GE#T5ux7F?#w@P zBexw}l{-_Y0Hniyoz+fNg@F)~IPT&j&Hj;<05ag}m{f8F(o{J;9k-|YqAe{L_p-~A=htuxvP zWTb%ufc|iQ-uF9{W&YVM7?DqdBTihMSdOgT0+x&&{VA68*1|49_jqi&GDY#(EGQYS;4vWIZ=z~*c_W8@W!4b zQwYBMgP9*USha`<6gZbahRHXJaor!S-2J|d$x7BiXrJ8GiY8$kE8bl8E#h?wi*u4| zUC>I&S1Z4SmBRhV)nuYFgb3GZa*I?fs5D22@2d;z zX$6;IpsXL&I-dwWM`a*hqg&I#G&Sxa%CcC~EUdnB_=gl{RHoNh;mOY)F(=J!{$v#q zAqm!;5=7tF0l;isx?vBEwRw%DGcbHT%DGkK=GQc`siE3a7(9XD#rewCIbSS)!Pfak z8gxNn81UAEK;OZ^Bd(@0ieGQW>IiZSGTT~3NPc~}goj8B&oI)zP&p}nCsHN+p(cUB z%;C&k1x;3?53?G~Y!$y$Q`J{a;iL_FP_Mrxo6&ehtb;Y052UCwq+?e#&x==`z)c+in3ouM z3BmN2fR4pPSc~%%;HRv68)v)LJ;TXzyCTJqcvFxXMu_OWD*3jo6GLn?01AmUGunkZnG#_aXV4 zJYtL-qw)Lb(40tYGYS|UGHQm4MGbS`c>?`15Uk zKcK<$`{=Q`SR_)>HfdZ}LPOS|~PGpH+DK@H*4h&1}^ zC*S9uA8Rg@o4rv?*SoP=<({@UzwnL%=B)1)x9OA~1Aqo#ZDn^svt023#h3psC>KN#SGbXtm- z;E~0LVTRt#?$TcbTmK5Aw_WkZhz4{jty;H#mpG%Gi(J{Qlcrix&Db`7iZ3ldPI(L7 z5Y25oYLA!=Z70YKu&$sFkDi$Wl2}N4mMNJ zV`FV5k@vFwvlt-a;A~~@Ld<7p{P%;OwBJ7$4r%*PKsLLU)}#9=RAI;;`0a-#qj94aLJvv|?xkr|DaZO{XL70O*Ait+ zvz2vMMcAAOjvqG?JaIa&g)=!c2rTh-Q$>`2eh0=BPD)j0X}t%osP`@b0j2pU9r5Nm z*k8yi*~52Wwdwn|vBtXXQL3|G>u~(`pI0r$nh6`A@5E>@y9*9OeS*>`DqBJ#V>`$L zxZ8fjGx1_Shl9ED6reY!QdfD*QYJ6PMcP{cY9M zE92yXC+V-9c=f2&@ri;SfH4c+P$n{k2&@=D9ODwO*EL5o=I+Pw=M!zoTup}}veg$Z zNR@)ss#~kwF<{s0;r*2`VFq?#OhBX7H1Qqt37rM)nLE&BN~2$u^)e%1zZ(d zIHVYh|5bAGm1(%xM%Z8Lho?Mwl{jVxKkWUlvS)Eo2r1{s+kZx!zzW@CRf64zd5d>+okx$_oMq{O6qX zA_Dpi|GqodBP!!H3K^agj8Qlxr)~XQ>|Hh?~=;((~?Alfc>&C2vZ7}v_ zV)9DR68&19h3U?Ho9E;`>gNEbncEAo4C^Nh_#P)o`a&h?b*XdA-0nS^F!xUBlCOD} z_R?$Ksd{UaY$blXw>>&);sf1;YnTk^#d9xQYH_iuzB98jSqOMTIh+ zVNZ$aj$Mp1m*G9fpPr_fVY5rHQ=^y4(k*VW92aCaO{8(h7I8kqjHcv2kqLIRHK^=? z%OoFEK?&s&3tL8n9th4dNdLL>Q6>w^wv$RUcIr!7T&1SXWyTxdIx}LX+fdX;<>mrJ zp9$<)^cSY}C;TYvq=QShU(2|!c)>F{y8&mJre~~=>lpVPPa71CXak6%iM>^|3S90c=db%ppNIh&}-0@_E z$S6G~EgSHq!=Fox9HK8WTG9~2Q0^Vzl&81fFTlVNPQWdY%u(SFuUq3+T}0xoQfU^a z0Acsfyp)hd>@Qr!^@73x1K*_N7J!wGwQt4Q6ikJ~==lCa8|01dGxX*?cR8_JPHcmF zuhA41hIwHPZa0j0O2mdaS-DNOKvKSOAkmu2Lq)BzLlJhhb_8i0HZdQ9vMtD7;S==! zAIS*1kn(A;DuiuCOa@F+c5~6_pfyHdp07%;w(uqpt5RD(#G3Ptil4}9?;i~PPZVI` z;9y~E_IK9)-^vq=`|k}7vcDOCD~Sq`1o#JB>EI|JSw9*=%_CUT3JW{E*ajm^IFP<| zTz#+}N)+`(IKFUieLSDo&$aCQ_>8AQ$`AyjZF9u3?@;UIe~;7HOjcSrsNWfq>?j}t z|7(f68hHubmnq&#&lFCpW8|JaO=ySX8zO_62XM>NHc1dMNJGplQvz+Qaz&^2?} z!<#i@sdv3ixGzhh9X#)$xL^N1=k~-aZ`^scykd8jB>Fg6XWmyxj_A@O6IHHcOwda6m!(7W$;%4 z3qSCQ>$+K;r4Kw#NX7e@#GZ)O2Hc}Z)Np>05I6Gp4{?&4d-FBN1~p$R!XM4Eno|%z zo7c3nF`Jm#2!0Pz?q_n5tof>F8N4^1qXf*)6O7*OFzO6_&@bO}SAfsA{9(m4Ml2W%9<7t1X5JC=$AyPw zSm7s?E28J!cg9K&spMQf${tsmqpL0@*qo68@F?3N_^;SBa7!SOMc8#HHR!Rvb6H@f zTzLY;s4V#c#iqp0IO=)a4|;7_)G%2&>05abr2B|4;k>p8=-$H^6xQK#TA{ zn%KXKj9>OBAj#^BI7)lI>>MJ8R|K9P;PcOmW#V-`~?dLcj4D+l5$PMCi^&7O3`FH-*wtiwFl^ zo02YD>UDQK77P_DvS$I9`>=3M4MeHSkTjP_msDyB-~*}yznAzljMkC#KfRlkJFn)( zL%JCJf5g3ISYF$bE{eNLaCdii2<|Sy-Q8{C!QI^1SP~3hjI*Bb| z`@h#|rBkT|XkZr%rrEP@M#6pfN`fv*7a3HHAL6dt9-|JL{`%Y%QEo}$^`(Z}yrThPwjV{j}%xv!uF*Hhez`hK|*p-(#6c0kw_o%HFXqJTov37vqkD% zm5B(lDlOF-9Tk_h!VHt&7pB}g@2EFM%&O6SQl7BwLJYiSuE7+=fI`s9yU#YRg9w%P z2go&R;*6wvcDc$`F@FeXv7U@-hlx@CL&=2xDafE!aBwAdb1^d|HZpfLb0(HCvUf9b z_9A9wX5pgwuR`3vhaX^^e?+*%uO0YbzHYuKL?@|&p#eN>{}SsSG@yXwZtM)pod#J* z_hS46ppwB5`rx>8sW&G02Rw`+O3rdlIh4sHy`r?F_qF@bpZzn1ac;uHknT;y5Qm$X z<7W7uzdwax*gTQJPvG=yfjhEvm zA_>0of9nXe9BrK#98O^|5kG%oEqPQhV?j7S7r@z~AI}+6%?6VP^ZxdAmn(q40&X^$ zH^$uY2amHRdPg^0!!z>4KoWpnMhx#{AqP)9&p(_plV8;olbw2G1$*}Jct0vu zuhoY|>~6|PI0q;*o93+E%zqo`NLs zFit+JE-HT)4L0f)IEn(yvura?{DM}U_O?7qRYAY#1h?Y2uEhkZ|3eM`JFK&EwRAK7 zCua(3LbKEY5&@?02i9@_L)mbHIE8ayemhi1F#XMTreDEaJTd-1+-$h!>%1Yk1$~j1 zo_ii%dQAne#MJHxLfo;bgA2xI#bK^abGGx7bJWfI9NXweI#inRU~L<@#hqYrpIg(2 z^@2}wCAd=i<@vKpD;gTX8r`*CP$l~DURlt|H;R!!E5j;y6~bnf?DX%7OYfO}cB;>c zzm}6$wSXy5^0o|xNXq4+ok0~$pI(>m$4x!evc)Q)(VKb^}nQWx}Y6c{ZQE4SFs&9B*e-U;807 z!Wj1m7Y7DY=gDm@D;~hFshxAhyz8a!!{bF)P z$aR+;A5CIujWZYu*2>W_o`+(r<5o#;j%RZUHa;~k+h>rhU;ns^tLWH^PC#18kqno~ z$_7B0u~YF$XOBLNNRc0y-!aX1t@L5NUl*9npYF50?oj#Ks-X9BN<#Kz&%;gA+ub?7 z8JY6dl&prb*;n~Y@=Mb9l=7Ow-059hB~~EqM61SY@ybdNnsS}+et7j&^}t`R<{-b4 z%zq?-U_d_gvhTy^?Yc7*Wk=G4jyiz%uT)r1c?yPEe$Mx$x?bd;dudo5Ghdytopg6{ z;}IhH2x@;%5mOa0hg8H_=fvJz<&KKXNgLGB3T^*}KW)<~a!T1$lqeg)3mp+4MM;dT zKdqM(I@=6AJ<|0YMb9e`^TvW4kwprL zbPX!?@w4av?K|uKt5)ywOE^LGE8UvSv$y8+RPY^#yzlB(t)P+CKFB=I6W6H=$2(#7 z369}0G}z7pzOK8nvVk{Sd&8)JIBpM?GonaH7BT)>XNKw7@oZ^R0nWP^5ijS*QaGz8 z41CzHDgRo;`X!jxBG!K-nSa~X-)dOD&io27HVRCf(u7$`w%B1n60PC|t2vXu@;P&v z>MSf_$vOeXUb_OlByq#J&D5Wa2ZIx?b?Y^GNR-AZ5XT!!nw<|-Bo~PR55-iZC0lHQab&n1?&6XowH#t$aYKLtXX?f~dU5XnL!)uBL7UhT#i1wq;;PW!h zsnwX??-5ZGJ2}eCzSok=C^3C{@YDoweEa2Q8)<-Obcv#}wYTx;oV*7b6XFPXJ?!_I z9o$h>9+udSvDRhWJvxHwytfdlO{eq3-XXFZKrBh3mYMiedEIAa1VSG+zQy)QZ&#_%LV&2Q~@pqNY18O!~k z72g#{>az4v7+=5**B(4VK$iNpr=sn;`9ReJoIx;^ew+%;<@{Ffs-f-@b*d9dZ=-bE z#=`b`$Fc|BW*l?ete{0f5a6|g_kdTy7I!ve$c%s_H{|ebO$VAQD)E1qsVz1Sk6v?M z-vmke!NOyQ3&n?|9}R0~D?Bmu&B&5Xh2^S($9``detwG>jM=BfE&2yJlTul2o{Pv& z0RB>%UxZq3$L(OO%Fx6!2(RRDtShp8_oB4!E~X?YAi9gU#k1`mdi^KShMD|hI((FO z0@7-u;C_sr+2?mMUmCuptRh@Hy1N{jI~aq~vM|ik(ge@uxjY87mS7Ub*CnfCP%bJ)-TR&STy@%rd90aQWE z(;o3;oqHyLcitIpNvv(Iy*L6*2`)0j5$s3`2FHpMEuO`1E8s9&qT z#II2~F0gt%^e-Wi)KBD}Z;}~30v<%Gb7{U-7uApICH0DMg+nAzSImjFf85kW3{SI0 z$V8#R?cz;qd&{?>qJzOS?tg7KcU(G)|J@?FN(N@=24J%v^CkUAF1IkjuIF=oLz{_d z*?%7&Z7&0DThlYfkcxa2>ICSM(rGe5~pWy4ta20p^;E(T5+4L=GoOYwH6z z`9%EGskEi7T_mr^1$sc!3?|zy7k3V#Q{U5uF$%%9DaaofNnd3oSi0swxz?@rvw@FW zRwFF9yqL2es|sy=IUe_!JSCzjns9OAacXxu!#a%U8p9Tdjn=0XmjpURb97Z;D~CHZ znGE_n`PYv&&<^4rHaN46&%%2tOITPaMeY8k%%|=9Zvsq(*?(Pa;W+ zlFcfK?kM0SW+U@I4vD=D14X8IP-FRdXkKD;Sw?Ao2KwVU;bVZLWyk&Cz@D zD8P=DQ_Ru}=g&)8eGAO?xgbWnWNKt28H75fU_cXr!|EQ!j_Pe+P#f&}#|*1af$rcf ze?h^d!!a1DO5xmXdhPpiA>)~9chijBa(;|(X?hMfMkcNZvv;uRsg5JQjT1eCp~Rsf z#VsVVIMEHKnLX)|bNr%_^-+U2&TUOOU;FOqhk+#uKKwoFmq5niF_rP_Lwq9$H`u-mPU*La& zzW)9|5@F(XGcGfDY*xLnfZe+ec$%*o6<6kAvDH z5?ErWaap99p?GUGI84ISC)DA0i+8=1I-<^H3CC*rPDY(Y;2L?NkV(~ToX(#z4v|0~ z$bLydJ?GPD1daP_G|r-B_Yk?uKQ+)A_?*(NeG%HqlCmQ-u%tEi9Iir}+NdSRsRa!fGrx?17=BS%(jEI72c?5&=;zf!%CEXK*kqE!msU4jQ?DJ~daN zy&U^__@)bwuIWqCj7x|Q7txBSpgP4u*&H|BqGuGAiKzZA|ljz^Z;374W|s)BJ~3O}@?}XUX1= zHx#4P478!j&PdXeDl5~xiJ(DyUl%Z0$4z5?|51Gz>@Ap;@VUS%ononqQ4N*;#iCK( zGzsQgNm)9FmR@J3xbyH%JtKe`iw)blL!D*6+-f{M=?txK`W79Lv7w8h+OAEVlaw{$xJ6{gmA=JT@PknAksFbm_E7k?4$IrH#P=s%|{`g_^n*IWmMyOsR?$A+R z2Pv5IV(>GbnAt0FKcb&h2iCRNU+EuETEflbf<7fn3Lu!tE;BVS=1$K>pKK$L z^}|3B2$a4PrsG+k2CuviPFTk!2tO%5c9dp#in89Y@?ll`PNpUwVS=j=SR=~Gj*pT) zCZqJec6ATKGZkHa64w<_-$@2To98$^IGbQGp0MRZj}qF#j$=zTLO=XcRtedIX(7E? zi@@)+)cEbgJU5YtH+IW+ssyO(xWy&#nL*yklh^v6?o5>A6d$RweJ_r_{Y|vSD(3vR z3Agh}PV(Z7dudlU8)YaBXlXVL6-yJR>RKCE&nWJugR8^}!a`pl9xPxv?ZBnV1wxRQ zQ5+9R7ibwV%@r7+7KN6~tYbiUo~MoL4u=uFx2?F}wC`X*qH4@+(v0Zmz5i`hf4f9= z9Khdd`Qr_(bM#%+wo!SXYB{T2+17RI^|(3y$j=M+nV+si_mMC84FAOeZjFhm9~#hQ z5_5!dwc4wL{0T1m9y7{T&7$8+jX_b)$wHt&xJ^wZ5yGVOT?HX-4pyVg_!{cRmL}GFQ)27+s|QzdSd_G zC5rS{r_R4zqJUqWfWL21NqnF;@VXx)cCn#ftoKw_LIg&%@vml&-+Nd5h*zuQHss7X z*M-4%7Sx|j@U9876)PbS)vJ6K?@mQX1C(Y>+^Bf+_B8oTht#lpAkEqDEeacLAoq-$NgaKHpOVOIaOCi!FrPH@ZNU$7ii^AzMIOL(xl~EZ0`$Z>8jKR zcxgQ!Oc4S?_6jsSAP%CU9JQiUrNzrX(Hq z@R(^L)@37B@(s~!R1-O~5F9q_7J+=iQ5G?K{7M6O;)&X&g}(p9rZ!^6l6&?z>2IQ# z-x|p#j|2@ozNYO8@?~(n7cyK!)OKuvXwT}m_kQk-qWFyWS=d1&eDN&B;$P*;)iZgo!(Yn&=m;;|rO7Kprp^*$ut#Y-bS0q!Fsn_Q|aEJ^5{rn~I zco7)c{rD`_zG@DsFm?8G!}^B$Vi*YIxb^Xx6-pelNR9d^quJV&p;}d|QJZlhMmv?@ z=&SKd@&eJCp|i%D=?D6^L+Ch1KC<|f&}5-Kz294~)@D=Eg(Oj95yqe_*xPsZ#Odwl zQxe6!xesX`{&TqRN<5;qj*DG~U#=lvC$7&ipMXCjBq7ekRVIi;%FWB=b%G#@POi ztpWcxjqTsq8t{M9*#3>J0e>0WmKySl@ZRTPP3-d`bI@X{B{=U4ZDbVu5oNxF(cZ8b zN|dF8`ksExYXagQ(O?J>M(K67gJ$W`abmH#<&c8x!S|CQ> zD945RH7e5E59DRNi#})~V-!xG9#7WahC0R?P`I>Prpv*60;12-f>fF%3T@F3dsEl1 zmQ`ws<(DqeuPDmd1Lf|JJ~D|V4ypzkj*08mwto0#m0I6hb=)poamkN{ZSQn`RKU{u z#fatIYA)hoLwg@aC7m6)I5n}}UZDFLNPZGii7(q@s$lMjAj3$$Pn+G*_^0;0g?UL~ zfwz}1`qE6+3;^Pd0$X@kOOSSC5_kOfFl!~;6}}w`k>qJTa{+M4OJ7H%7^2rBt`NT7|s>K4od7Z9(-;A|3|N4ZL zC|5Oh$DY?@z!p#*2^N^bp-js}c<^d$|HzEKTY>wEbt?*1~!F8!Hs;u z2GdhdY2b4hyr?(Gto|^V%xZju%auT+Sjx|#DLuww?NK!_?d-TW9>Q)pq}yXHxkq|N zuqvURoV1c?Dwr5#4I}uFdxwi}^gUXED^YR6QY{$U+M37_stMGuC-Tnx0z8h0L3fhN z9PexMn4BW#slR$lG!zkaOWo=E@$yW?Z1PNnY7U>41v~4kbMTf(!;`; z&F`r`{`?@ZJGC*8Hr=k%qGYwMxR_?e14$x zT}Dq&5-a{rjJejhnLdO1S7$olDM7ELxCb05z)?UoaMRoqp?O1B1O(hc!+Zv8TETsfHX-6;2_MtPT<}bs3k?7uDovGVXWMPDxVw=DVm{xCkqBzur^IGXh>h6+_66CTSg8j6-7;{&IjA$!jvVH$?89Z%ODLk%5v4flfhR5 zw3kjF%CAg)`XKXk*=dd|U8YEkSAZxDNEpLc&e*jJCm?uIKIaCtfNxd7uJ)0VVar}E zbnG8a>$leY$xQZVUG!f|Rj*F#2oe^4UHk0s<$91oGrm3e@eVRiO{iu^Pq0jHPU=Abzhq5~&}}#>sR| zDvXNYUQf8kvk*|nJn{`;1G+XnFt>3VFUkO&eBlT3sG4M<_et6vSrmUp0@%#yOVM$K zJMz$=QrY@eTF!Q!{^NqAc;1-=8_H%_j>N~RJ*GEd*HIZlcJi5Swg_YbbRGBb%!fuR z_>b6t@!K(!5)sro6x(QexX&Um)$Dw4j~&Bd#wpgX8a5+Kv3l|;HVUHM8<3N|6Up+j zGs{_!VX#2)6=$m=v=xmx<(gGB*W01WQx$d7!B@{eG;U`c{*+ue`hjT}FDB%zoE`0j z1J5Slb;%g@6*la=e8~Ut8PW(tIn-(ey@rnzz$hf8n&N1cTh>#Qj0?LYQjI!Tkkzmz z2f_d5Yto+#@un2A(ZOJ+sXMt%FAO(IP?Y|Mr$yd8ob6A!3Ob%gni33O1SmRUrppLH zL18sy%nH1DN;EV4z-pS(^^gsrzQ+8dJ{OWP*hnp@-;kW~TCCD(*`j}ipL3(Ehc-#uMCgmZC0}phwi9u*j?ct@2?aY9pCzO^@liIEovvq z%+T3%!jd8NZtSc=E*PjL2a*AE3DL^L#65>O95(tRIIu6#km5Yqo7HH$#RubAIbC$7 zr{I3e2n?;V_6oZg0^bc|1vel3ydJAGg@;vFZJ; z<0Wm=jLI)1nx)~*A-pa&F^%VPP3SLU`(+!3_6~K&9va11U~xQt0wklGUz2|Ma0*x! zRX}%e-m8b7p&q5y`-I=}@knSqp#5&5-ofWs*aOSW!}uJj&ccE;TMHX=g9zbiW#cD8llo0^fo6!3M{zHaCKdgxPiG4Sp#dByK;}v) zK*szA0*XAq`HjN^^&KJ)XIp{bX(IDRDwusYaleoiMJ^cyT{wvcl{HKzow)UpyS^Nr z6%V_|#5$kGp_SgW?UhHCq;SVa53ShAiN-2i^igl-^c3F+bydj~-&S>p#zOF_4@L}4^>gCJf)4edvnV7Rr@_K#-K1q3N zftRmMsNp}NbYi)6ymkZ`5rhQp66XOqTtdaur|cI=txIg8u3;aQfLI+-Tb4f4$BVeh zjPRYUvU`%Gv;MLK*k43R?vKKW&FHX-Tk87eJQ`?T^iIZ3Y2051|=zP7R9ZA`dJ8P zD0wo4`=S;NC{)&kTBD9F;pxqK4)M>{lF%{;yBnBXf`t_y{nNey1k2AqN|RC2)^N(u z5pvMJ!OfY;In)nWEx@k6@cT1F{3}F2!Xjn2@Bf!FHQtDA`MXk&D#L)Jk9*>$I%5oy z1;c~goWF6Ty3J#C_Wc9V--~`g|U*NfjUk$H@<;e{#7Az!R<0fUO8TkudL1u z%d9>*L7-gXr%p!>vKYfY0Ocwny13%@MuwN8$KLEF<-xgmY$n&VNrBmUXQOP z2CLLoXQ33*3LezMQakH_Q3Um>RMmK`w2uB;Cq|7EB-KS-6r(UTk&t_hh<_1Z&MAD3+u9a^#3cps$7Aw7!8^hy7PoKN) z0qjXA#@J+h**LjbKZAb>E(}|Cjf%=` zb57>BIV9TE57z?@B=Ivsym>PyhikeC3KP2}?crovDygf}?A@$T*1OQ20(m9mTAC=7;5Y1> zJ}-S7$Sg8MzTA7Ct=5ihpTd4+-Fc;RKD1t0#q#?z{7U=(6^{1a1m@!_=y4Ev6~JcT zF`XrpN_R(yX<}Y@+tJYUCn)Z^-Ej@ItxfxdH?ui&lRB|nR_OyqW{{_`MaY6t){!7Qq6E7$M+SGK^OHyY7QDU?I=ERJ>m5} z58T9zQ?+gM?Mkgs4^xYB-ZER6Td111`7}^PN7uy`*;mJBb>y`4-eNPjM~SH2TgD%`dF5RS^dD*+CN=h3sYD)GO52WV4 z`ogSrrpO@?I=J*p$GX)Uo9#v#$Q~R&(!VzlBL)HTx&ne{a zJl9ss*t)(c%CK*s{f;+Ba+A-X78Ze^3_Ttc^qZ{8J7`w=LvoZ<2c*0^EUvN~udOdi zR&w8DnxN`owb}Z-K8x3ch0qtGt~H%a5M#o6Ll{xe+M1&^%X}>SNGkVJ&BPrLljLba z@2))xU2~fw)3~Rf_Oowz)vaF*#jnQtmn8qZHUC%Plz-%}aB6zv?^wz55eB5Ts(Ey8 zM!uxoGrUW0Jp2p%OA?p!EpD!i^b`s^Mk}&Ny`nHMysgabV3t+(W%w`#&Mr@G7-6?e z>IyuiTcRvxn_Hq*PV*KEP9Wh3)5N}G3R7rOYS`=j22ubg%=lrQXjYl00^u1WHbyRT z6t~qxvg?5Tom~^e_6_+|_VN_^suTD6RL6ImQm7*juB_-_;Wvf5cQ>SdW5)RWq=!S< z!4uuU$V)Y@AUm8fS6ADxHhYLe#YgPtjw92I&f2>>NeD2_%!qPC#Yfah4Cfq{bvW}i z2fc@tht=3}f2Yws;>YWe1L2DOeH}dCXkeusM52xA8!_cp83=kjXkpl3#s9M)fxiW& z|K5kc%)@{ro5HZ=vwwWfXtR8Bu!;>8q)C4umRG*@B&Ow*_5?>Vp9^B$K;ZyeLO_4? z_eoTfb!DpbgQ3S0g*y+DzU-{Fuca9(>qBYpL$%!OY+?G`^@z@QQ=eMPJPY*n8Ym{F zBiEFWfU&-O@P3nlJfbQTE39#Fwu7k+sJ4B3MrC6QKMUwT=~YeZNqjfBV0##ABR;*M z&r5C~N5v6Y#0H7LU7BLE%!jYmJ)Wy|Ya=9S&1GNt%n*W$kiOUr#dMPl5$RI4ijYfC zfe18HRQkXe6$E-orGAqibO4k;rzN3Fb3?wXm`@U{fk2mssoEs8lMARXL@p{qhf=rb zJs7WK27bfc|CUOc!pD7sghj-BGx&Fv6r_cI(dPMZPY)7apC`IcD_O`d#IUONFkNWnW1bYK( zcaw!3G`OB7au1skcXtyV9f7&uy_);il}50|m2iaKPZorD$Yf`wabt+9c*)^fr|(t+ zI)-(7p5|tw<<2_;@LM8zOFZ9vObKW`q!_~ZEy!Pk*V^7Q0MhH^bpigjqJc;ZP^q0j z)^JoD-`40@IYd~d9W z8~vsb9TgLwctGCfFn?%QA_0-6#hTHa35q$$&JDNlsLO!0ZxNi8g;y1zYU`2o>jF~A zQq`5b@`kbCEj5zU^;+U(MFL*oQHQI=BYJS+kG2@%?-qfZSU`4UD&fB_d`ig&sEwi`-{Thk)rtC ztS#T8cTry}eh3svEOIGH7+g~R@W|)nRNWYIC5?yE4$#_`Pk5#6P~v#TeQkb+HRi*g z{W9r(T6cw{qqqw57T0lU;w4;K8bwG8tn&)&#eKk2XSrKgQfCYK#eO&Ene#gu#T#Q% zNibQ04FVzcCioDY=sh<1!a7H{Mti|&;Y+P`Hkx`_wMSXDuhpq}*g<{$J1RTtdR>N` zXDfbswLnCRzv>bI-3MkEnj)n&Af;; z94wuQsa?!W+?=gky@;(`i0zE59h`|@r?6j#P+a~z#pwQe>Yqs1|3R(&s#-|DZ!iC5 zL(wn0yy8hJQwK84__GR;U#u#7fYm{2Zh+hMY$T~CBxpr)Hz6Im9Lo{OQW~!2yLT%( zT_){Q)6?L^=Cwr~TeBFB>x)y*vUU#Wk7HC$=!DB-1- zI}+;#~I~YhX3+ z@UwkJ(*%^)TT5!T&<%)(pNMhs1rpw~Og18%wQfPqck@}ypA9tt!HVa1WKtna@0w+(yULbxW`oA#wGa*bqgX&8k;p;AHuEB+g#6U_`rW6 zc1r`b^O2*ZwYdZ8g;hH;r*9Tch}HkOE`6ljoeMZgH@@oi=2!bNn^SUD#jpEiXr%{d z*ODLVq&ihu!la9#LN}}vdxLUA&Yf>PE`=ZbA|OHbBZZeze)+oH%xprAXPd(13pR{NeVQLPKKc z8=S43S4On%@H(qRTjcxiMng6t=)^AlEX%>#AOsL}$7L|Phl*Avz26*Gs#WLNH`OWAjczcU+wm!0Y>@+a99#qo z`#R2lDq}iu;E8w7QTh-eM^#!YZcmTH4b3SjHEW-6|p6P zvj`QTTY?Uxe%pkV?G6Sn@>jX<*GkSmC^i3tls{H-{sA4Y$Wh#a{7mOLiw6~~CKj3F zzdtIc?jVSW)~C3(Sy>e5aW`lpA7j_fVP@R2G1ru-mCEeGWj1*c$Mkc@eZ&Up4IM)z zfcr9x$&&mcg>n6`0~R1MF{+0XooYI3#F5vJ5{2=oR^i(3QxgexKNk_Z1Ih4E9FdPeQiY`EH~`^4-A`;4c4mur|5gFH~!R0jqV)Zpp z%Q0_w;w&P@%xzV@tH-RA*g1Lj+Yu*nH&l^pSveKxm=lVqlsQrr>p{W`1d@hAaaE;Y zR*V&@p2e;b_1-kT#b~dhSzMs$3^p#-nN-m$!ndP}-PEPvJJ3T;(lyrP!)~JdCKSoN zQ2m1piT~3BW&PBrs9}%s)r>wq@y@$@TP(fEU~VYt1~<|)&`3zc?6XVE3#aqZVj6v8 zHyCLp@dLyWwWg2-!KvdbR8TMR)aSKu*+^(X;dRo_`Ws&yK2Oyh!2w#*-Z-zwF>WwY z$+uiZH~MkHDHFmWv{pprplWO&zN3In!ps2I4mho9MdT!DcZ*+zhiz0TnFBr)eJNndHMZBJsI)l zSr3%+k*GhAaFBUwqi^a#psnqsb6R4U#SQ*oX~XmQVg3=(5;2riufA1U>4X-}WeUn% z4tLGUyxfE5)T3Fw^ozk>g9Q(#&6-;ZgN%o@bXd#4U_PPVeWqkyUlc#C6^u}shj)=x zo8xC%0>}v|RY85wQ zGkaoDXDd?+GY_L*v$Xuqzg`I&|HmsvQ?u9IF#><2Td7_d0ahD!!SKjl6WZpW0e|cT z0fWMXfrW#At%JYrSNxNo;#ctU)it&8lpo7Dj_Z}jNR(R1hLgGdqT**t5@lC3a7Pw3xpS-?02mETYNU%zz^fP-lamqOH z$uayl;mFTfdc}La63Qm(1uIVY`3KWn&AjYu3hDSaU3L$7-20+Vy#_^90V&=8hrn zf3PM#%Zvj%q@?|pF$vt05PeJiu<6N|_WIFlsZce7RpJaj<=jrnS0}IZ`}t#A3Dsnc zy5(azB}6ut6EJn*W*BXW1V{Hi6=5&`w&qn5F>G2N{mC6 zYG>1Iguhf z0vwV`*Bt=$K#Jx0LcHTK=476O=&@DpBeX@4gg~=xU<6kIA8aFW2rF*&wp#%=*mTi} z>{c}`B=R8$yFkK#x{bt-hR5^FBiO=KI((ny<*|gIL-(-pY%y2L_QLqtH}X?qeMyX0 zSTAfS|5ow5^(yQ8XINy3VZ1K>oQ5T&eAf|$xK`jbc=-#0`b?WuY)zX@dPJF4Z)HK& zK^-?Gn zfu*2zHdEaoebj|c{HLidvF=q4kC*NA#DSovDzgGIkPkDC59zZ>Vw9X+yR)f}z|{HaD4dRH63{6V7rCyq52e3PjjyPAbcCd%;H^NCO}wrhr~e zFQ1ve-J<^o0^-WSSl~%3_&v8X3d|YGpz3&UjK97KCbG>7iD#eEi?b)F7Q7P^;2Y9b zOW{_3MeT#OT!EA75Vz`JK=>%?zDr{kcjKCyswlFW>wL#L0|L_4NLU zjjQU%C=}iqdG`KLb!Z)NK{Eh*`~*W+I)+1c22E3XQzo|XEpLm~e-7Id_d~W$htT|^|zJlPZ;%7Ipk+#IrG5)ai&|4`WXK09G zyg8$1F@2tn%Qs|PH|Vr5biCy{1?1AFA}>?ylv8>lk;pXi23AUa_;gr-+@<^zBi*9$ zSg(*h6mm&aXoj@;520>nlI9LJ39283pBBhxFUCnXeZEH^@8?f$Kj<^`G`KY@j2(wJ z2KV`>9f0SVlwyiyuVfsW2dQ z*kvz>mczu!>3`mIg02<$o3|Lsy{jFMx>4$TvoEQ(UXqj0`}Oo-y=Ko*EjKgKto(=J ze)v6GpP@P12L#Aqk|-k4*VVEv6KTZ3FmLnuP^5ZB`j4TJ7Z#_m$amnRh2W8tdc!2W z_Oi!Bv?~iGI!t)Sg89kIxdUuroYG+HFVF6_?;dPUdjd`8RxJVIaGO<@6HRRBBXCMk zG$t{-#yz+OII22|zo^elIPAM|eo>#jGM}+>>=u&{BlB&A{!A^mfU zMB_(H{?{S$zcRN;S6C!i|9s%jQGGZN?j&D)qDEe98Zgw~rz60W|DcTEd;JRsFr5DM zg@Axq?6ot);+2KM%+Ar)!Rys|vNE$WGq5l-Fthy9-!J@U;yvE2{CVui&m==8UBm@g zgAXvGa2+@Ir_@}ObtTt5=s+2|oh{D4uwc1Zno+RMWONIVcUfQqL3;3U>|2__cxL84uy51wo^_q~B~*FhdiC(eaI zDY@QYw7D>;n~|L-A2+VwpgD&zewfHP-*(e&p#Pk};;f)mvEnE2JB#dvGih~7JiJgg z<<$G*?ZfleIE&^IOS1J1kJ4Z z(VO$qK){(1I>YLGc=%W#v8^}zzC9rHdqwqqC!`?G=Mu{3$F&`g=5ynqsB#V0&wOy$ zRidQYiCoqQdk*3b#jw_D5fjy38O>J~n!fPwnhf-wtN47-Vj)Ga>B_z=RM{2xew5~j zO^+5XwF*}GDkTYz0(pK2fPtIumwdB-fpHCKX^Y?#wUvK^Wp=r(e_J{`8zyx_oYGDB z7BCo@uZKV<_+~uqJeuD3{m}zoph6CpUP6Y;=DcG@>$9VcZ1AC*g7&hY$IK_INZ6b6 zOeut?D>M~f+HK_^8pJn8Bc9L*V!JD5>S>THSPj-G>Nqh$|o1fN?UjeD^QQcDj* z*DA1LPzUHXS26^H8SrT9O720iBMbdqE7TfukPYD+glXX_%Ti(ksp>#}=M@`GaHS!B zrECAFApB~UdZ(40^$LPH2>TJn2Fo4*!lw_!8$#vz8)s=6(+|XoXwR&&$1>Bs8@WIG z*$%Ny$vlQ|vD}cTc`2JE23ZGAZOXE#_(IYERro%$}v6H~k+IEn?s0EuX zEr1JdQ?VG8(SHN}n8S$i1y6Wym{e+PqlOgG?{@k4-N$U(r)aQx9i93ZBuk`ZwWfMu zYAY)bD^Zd!d16^zTg{7J2lr^l-ScF5JS=0fXKel=4tGm?*|i+soM~>4m7co19DJXh zc*!ZG-fc}*HrYA!wSfMaVxxX*WN-B=$wn+1KKuhbIY9r0bk>1R3^ZS5#T7is&{cuOD%770gt`ezEba zh7P!m^^1YE{>wKwE)&K5Q`ZK;s|I^w4RCW%4|Iiln)&aJw#SeN+gy4ns))if%!2r! zI_k|O#jCJpBpb~(AOV=VCv2ZiQxU_k$RRbjrC$gzPA+_AMQ)mCev9^(oL|NL`;qaF zXJJb-X9pX%KX-EdPXuoGp9M}n3jNI6WctD%Y&{6CI#Qg3%UMb%(-V>aN6F%BtPTGp zueB8rZ^^nJWF8pwT}0sKo94m-D@E#2JbkAPQc{lWc-D+qz&(M2oLP#P(eWqXD=rh5 zWx1s2j?kzEYvvx`{%Cj&IE!Xv9CG5R=64oO&(tvF>OQ=U%=I8xltjC{lks#dups%^1L&3x}E%3Z!8 zcA>1p-mJ6S694#LjeTWQ9O>3IjT0T3Z^Jg|S6ldQ+zy&UTC8Ym)`dvCF%E_JZ_}NY~dRKn@L6aA_P7O zMn#8t;CM?AD2u5>gxh8w+L6|yTmF<05Hxs`8-UQ9?(x>Jo_U=JqA-}R3@oAT@%^H~ zxtv#Op;U+je&iluaBpC5TGEj71yg-U_QmGwQw?m0o1T7(hN70FsuzC^a!=fTT zNLKuc0V|uIs9e0;q5-6;4q8p%+_jjwN32%Z3%yeGf=2$Io@fZ*(;qbOmm<^u{s8~_ zz24a2KcC)SYbfBW6JUdVaxd$#w$e?se#xWTt-_4w*44$vG3Br-z0`;Vga=-iK!y%fONX7@%cf3@ALWjQ4iKTpw* zupc(IG2&YeH)0{Uc}7*C$-$Fkq7dTzx~<}+tkQw$n9}WWxJYZ?HZW!3#I$rnu8q^B z1+32~yFBMvAoi9C=Dj&R@bCzVNn;_6!12>ZdhV#;#81zb;7~L4zAJhj09&#B#$8)Z zKKo1<2<8Kctr~u%sdSE{EZ!nJyIGv0yKkQv`ab)}WZ()ml8rXRwT}6=El*%Y0Ibli z^U0z;rZP|#j*0t=Y9{+&hHd(^s|ZRWjr;x)zchup$Q6HNMI-B%-f_;4(2VN9;c|IQ zWtAFaY!9;$0cCqAbE-X(PY^acH1B3`=(O(K@PTnp1vo!wIE*u~zkdvLt!bX+)%N5e z>x^j(01r~!$H_}p%yz%N=BL`u59Y&q;QXBDz|zon@v)hFI=}3xuhdPtAsxi|;AXDE zjUl!BeYk254ru*|^HwqVz=yiIa3EE=eaSeKqS{q!qU#p4#COTb`{{KrkSE2G(F%Rq za}1z2OH!CTvAj)V3K*DyD?QsCH1Y?v)1q;G@~c7*GU_DgDQ)iX8O!Wu2sgc_ko9$AL?T*o+pgUA-Gog03oeC5EGaH zYu&lQ_?O=9Kqqt-QGKpbOFfsB7cR^;Pnbxf1)Lw>URdT3`UT?$*RU6g@2ds8e7KBh zgxi#8JToj5?1BhF=|lP!WLD}6J`2HCZ?%Gr=TAx9$5wEttgT`gbhV!;vyG}VF}VP_ z^xTKR7cfSAP^e*9q&v*UJO0>0|JDb7lb~w+&*jGd=gsyvR|e=Bz-GP4TKy`(gM$Y7 zqXO@3-aSs+@0wD_3sTUAi=IQ2hdlS`uZbvzoce&b9r&2){I4>l-;0g-??F;n6a_m7 zStW~PRTtXewCZvdTy-bd&WC-vv56;_GOG9?3I>T zMc3Xn*cS2xLHY|Fn%Mds7s+?h5CGrhRC8VCUc`j@r&F@OBovn4RBlkha$deq)Yp3X zQS|wM(jo$7K1n0#!w7l`1ri#JF3uwzn!S&-jg1;=f_||8t{eNuZJ&TxjhG_J%>ss> z;|>X)DP`jzv?#C-+#71t5RFD#AY6R7@EBJXa4UHd-f19##hEHUI`AhJQ|N$p<9;B< zUWTPA0w3f*G3V|yr{Ln@&cXDC2U*)QrNEl4&TkGiQ?PM!Enq|SGA^pkbgbGDHlI}T zL+6R>HzwyENC;Hdv%oMio7XSrMJvrRuTPvd?|3qJM7QTRC4Z{((oFQ2{O*cu?Q5lS zvS2RXM*vFrJP1SP;hRVU+BgY3F2}2m$>>e;yC`Rt!9O5OwIAgCxmSSBNrB#&LOikZ z7=-zAk%V=8%=Qxt4;0e=(Y#SO-m-KNGp9l^+Q(5)UJ6XzZwhb`;b@CCsaCE6fI#zLW-bKl|SQ zG_+5v2v)kV>ee}J)BMmg4q_{S@JT|MTwDK)F5l%HE=N+a2W}}I!Mt(LZ(>|W`QM4( zzh@%<-5UQYZT?l!^l$9%NH+CXy7jlI;sAe}VPZDo3tdVA<6>jOg?QiSSm!E&FlunQ zw5s4TvJ%JU?PFvGJG2Zn;AnE-8Eg-CpkSA`s6xffF(LcdGtDM_k*l7Eu2dxWfFp~- z9`lG-myBXLFkOIGLpqM^sIn;54BEt0-yvj1d)(MuyF;p@w~V9oDF)IN$RQA_ODIFK zXSAP#wZoi{jy0$b)IJsk`(y|Qx-b)}sM}nYnLtI+Cn|pgpw&4mRVD38`U(EB0;yiyH;`lw^ONOcGs8NJ1yt@AVa#TGrGvM?9 zOgTBxeiN?OKxM?dYFB~)h>>oMAR5vqARl$s!u?~HZ5YZK*U%D#B(ND8ark5Xi66oa zKx#r57BSbG{`Ti7u?4?=_cQ$?PT(goZbNpKxo@eX zuIFGg{2b;sRrd4kGa%hhI}O`9uMQWZ7L(w}Q$Ei}-B+oE{K3GT1uPKe9%Fe9d#!m& zDm5w-tM$`-t`C$r%Ps31*DK(OY>|#>bpPr2<9gpN>hmJX7_+*{#}?IfjQNPH9jKx3 z3CABT00Ka>+3pB4jHk6{0hz3giAQhhMD1LD>PDb6_$LnuCQ!X6T^zrg3d-V{hvf7kvH~>UKz&O)oo)Ge#vF77Uxei)%<1)1kps8 z%*B_yYBW5floC{--ymL;#N)qF4~{3FQ$1hvsu(vjxB#m?)hcy#_-KFmp&O`ORKAGM z@r^vhlJbgl%!-m5p=0Ts8P`_oxC(pUs#PJt5N*nDt**Zx9-Kb3DGicBL(RVSWUFqq z#BP5NIYePj-|*hRz+Dw^o7GLLXn6l}GQzFEJUobOX@x(lJb_rnE1R}^`n&3X#`-R5Jbj&vZLF{^wT^Vv; ziTPE^m(=tyt9Br#6u}NstL8EF0i7jLB(O)T!c+@1lX>cA#B}TZA)m)d$Rh)k?y$IB z67q$>r!{?@EKftADJxII+;?(b$93@7GGuz}eG}sB& z(ifm+`OW##Xt?Wwpq7X01Frj+R+uIw zFAq?e^)eiqJ;yeUXlIlajwX2tYGq9eTy(#K0E68KOz(R;n>xI|MYw)lB>U(r+lXh8 zxFk{#TYPi?I5GgWqv~A_o(@^bVV67WTN7N7S@X7FIwFB?UMd(L!;E#PgtOLWtkN>$ zySfV~DiJyn*IhHj5{|G4lbP-EAqwDYGjDZxQ)!SN7GVS*_L%X>nQWF}hv;^I zzJ(dU(~$HPzRyy5cz<24k$kpY1lG`EPDeAC>YJ-#V5mKbj|-Vlc(6YgZ6$S?F%C^d zMM&EQJb`O;wxF&G_j7~I_LAlU|E@u5MitGSN)d(S(Bn{phyCG2E;cFTrwmsw33?!& zfUF6K5B!JHi!>HhV0TM0^EhWFh))34vH3a}6*XFDbLGiX!sGlpC zM`E!U`zhYcx^wDWAhaDo>?<^_DNg~}16>%~Khh3eK%pM~(Xrko&7z!@&hn$3m9B~L zgagSZAb^nK-Pp}p)Ie#OQc&FOEf;gUu(KiOr;0-IcICqeJB1jj zh<)WG$z;8Qu#CdH7!^gQ%&5qDN;uyuvL~gx1Ot@ly>K(^3!I&MlSHip2YQxOfg`eN zQRfs9;S$=%)`}d4QvX|o=W^)r)r)&Th{%)$(6o~T0iim~No=-8M7b29KxJxP3W8pm zxc4*ZlRNU-*4lE+f?LZ6lp-)E%UXu(CF_mRO=xI0cq>J~uzx;L@!jp4jXVY7(d^_$%fJAr-RAX zkVGr+dnn-*JW!l*rK=O^g44o1_M=&+ImcDQDE|sFZ2%<4!GLLmRWW4%JDC(Uc#?o{PK**9`Wjj|3y9Lf9E8c!6HPg}%5GQZmEL zTuo(&j$y1Bl4{m=DBV}F*l`_9g|TmXx8XLQ%?<+QGb`QFBeWVK`eh!wEPl-I zS-Mu7z0fK?iX?c&Qtkm78<0j?*mmT@Fg&CY+a)~=J)as_fw1xcp-n+$QyhZYf8xF_9@8)hmYpA9BwymIWYVVSwS(*{8E@QIXgzhnplhl7ToJ!Ck9EqfFi zTw6+BjL^DFo&*ea|ps1r!yevltV8vL}m);5uIL%XWx=))jV zKR5qUT*GldN$_<5KGNTSxOmSQ4@e2??mjV*x?*M?^38y5S!m0CqW6Ma#4r#Mmy2Q< ze92j}x{#CM_+1iAA(uE*2%Mn)+W1E{Dw14z`_uaKPl*0-v~W!-I2*m>M3X=8eW-2% zuv3^kJs3Oi>*0TX`r0BJNFY22$g3)^k0SGNCsaXVfQ^j(OnnG;TOJJ&>I7sEwDq;Q zN_&1a4ZIitWj@432hn;W!=y5aoxcqr^hp3Gqawl4ky8WLN4)%;?6!(YVa;YdF~I%_ z_hSVZpD(!)=suTvQu*!CX&z1AbT>y3o95P37-B@%yP{>2h-@c^%5Ji7R=TdEUH;Io z2OkEZ-?Qjh_znf*p=Y6vYor)KQJxrmZ6 zJ|%;XaQGJQ>rE*fEQ6NdEI@YK?$47G z?%0;8fl!d|Uip=4r^Ft_@v(uhIf*m*HVWu@98IP=hB+o=Ngc^kvV!Cg%6M~0)nsK8 zGWn06Q`*8MS;&^r$8fOy3Hcs>7=~$1SS{@B!kZ@)NMEC9j7oEY$zj8Mhm(460^;^; zw=hB5CBMHJGP%1#FbSmH^jrXvtjauYmnAqASAGk*?x`<}hco{s#L9twl)%(q^%yE7 zk&^*B^s$a@byukUGSu8O+c=4D zwqrZlbxr`04le8*4cO{5WLLJQx@(QyLl=;yJX_Lv;H>R(WLUk{v;*9$BMub#DYA_Kc*g z&ECvP4D_Pw-YzyWLP|^D&h49K?hqL|7L5&WoMUH(Q3ZH{`z}EX-=;%m8GRSdK!2qP z2k1KI2Q9wMinc(`oP7Ay=#f>pv3hZe^{UF>e1;gMO-_w(4#}Rb8-c!*4aX%A*0<)0 zI{$*1SK@s(q)>PD$%EV)#XVyh=s*?{I@G0H44hM}!inI%5S1*jvgR=knv;<%!|0C6 z256~k(1Dn~72Ko?+mi|jV!0US=`tht+QYIE8hFuPFBRrDfhlo)ZSYds&GFHYYI~9I zZ8v)U{uO`Sdd*&-0tk*rL=7)ZnOV(L%caRawS|O3z1#F_Tg0#CYPe*GkW-ZV=TnAA?eMdWg2d+XfXJ zHH+TiA#?nYJ^NXN?p>WB76U`MgN0CLfot`2lJ)>*yNPbl6;X^5eJ3Hnn907pjc$$* zsDBDf~l}aF=$^RwR3Hy&>XmPD1w5)$ej(){P|B~l_%lW@;b$U;xxR0^fZWpH7 zE=jx;O7SPcA#cs_Z}#>UIQm1L|M%)j{da*xkizs1Z%OXJXChL% zUK!Eco8qLFh|apgK3|PnkHg2BZGV zs!E_|aY1|6_o-PTUM%V-$3Rph8q;nP8uv;;r8}(eDBU=#9Ot~)zt88#E2nKd&M_#;|(rlP+*n7$Zv5m2zrH83EcFJOf(3vUxIp2sdc`8^xM7&b>Vfp^C zkUd@j#J!Eq|?#Hbx6nxg~KEu?H1t-C8)KdNA^y0>7vmd z5^-)?l2LdH8AKu1)=4>{5gNnrb}%m+a6Pz%DjcLMUFnif0xhr!B6@fZQ4WwX;i(Ejh|4p`!6T`S5EUyO8x(XEPv!Qe*=p*0P)o= z0Fx1Ac3jN|?wwoX!Gd5Kq}+m7wYCD0FA%)*!so~{FQWMj29L~>mA!r^K{TpitMsQg z%sVNJxm?CM^loPo0!x+z2OLQv7TN-2e(O${F%&~0?6Oep014xZEm-(_I`=3p`J%aDvw3ZLn5>hIUDRp66Ppp@HV$ECj_JDiv zlF}`FWC*P`{28XMVA-6ZSvNZWHaGa zv+=@AcDpQjymm}7XZq(MIQ$Md1ps+9(okj~wXp}gVanlo7 z)6(!x!v4Vfi33@3i|7!uxbw4=FLo!xraFV*005>L1;vQy{^7>%*6C-bN-l7G?~~DV zeW}n*PZCV&%j*V(lCA~T(3*0}v(%X0k0Wf}{kq|C9!zo%4w)?s_(A6F`R3?6qnIJz z4XVPe_F2xTKKW#v^g7N<_5Phq2O-MK6nJa5ol_P`CbM^#6dfEG_e98$-BIw*zkwwM z5CN|5zp?{>18GE}uKkAR2cZ0CaCimjF2uS`eg8OqEO|2fmJm6Om+#lk3wQL_{ z!2a$W{l%{I4zAhW*wwOVIY_v~va;xLs~anhm1z2C|CD$@gr{~E^H~hx1cwe|T|Jo3 zvkWh1a4Ptb&$b~;`5?2$BS?2kfq-*h6h4p?X3V zhGJ+d-ds)hJE`yV3<^>oARR6l+coGWVnIS8^KCohUO{Pnnq&i;Lw$q@W*tmqXG>L@ zIdc{ImBwl?3ZW@UpXDqk8g$oFC@7dEvF`yfp57NpM|?L$k@1||2JJxnN*_HKXA2ge zOhfDefVpM_YiK-^sd49E#Ua-v>+weDzHd=NER}35>>d{P+~iMO&4By^Yc&)?Z}sBA zikjQ7IyG4$KYAZ(JaZQo(Acva*|fnpY}5xAit{+$jWz2Ku=70u0%nVmW)p;Q-{QEH znI>yqo71lIBO$_(kP@J5=b>yGoQRT=eEo!fo42(Esn`Bg$vF&8p$GN%Wu|6(p%&V& ziZttswgYt}c<%?+2MTi7kb2@Z%6J9E&X(wm(c)`tj73tw4DGY0$U17GYmyxG@tC>! zb|#7%;IkmA;`(MaL~H%J9POD@CI#RAr|hZrZD{l-EdG^qgnJ-xEZkCj9n;T8*=%Lx z+tKTw+;{w4gOoqn)j!HD)&G6D<(t%ny_=pjfsnO{rI~{%0hj)-!?!kqw^yS-*Zzl! zi~3*Wi|9}Gg^CZQrs2W+;z*ww=Ln&|x$Ehr0s;EV9)Gj1->W5WGiV3Z+7?UkYgS?f ze!e0PGF{RXZD~4d?9w6n-BSLv8BFM2jam)e>Pp7*B)y8OM(E;imC`T|jxq(M*Ok*g z)lOYw$CDb70$U=t%0}tM_|i#vT(Q5#s1*F{>q{h*VXxEEQMAAKb*?S-bz{#+Pq+f^ zxz#6c>y&p+dO92spW*x1LkFmJMvTZ&mTGM!Z zzkI&4-0dWHq8RMC{BS>712AiRaBcdD2r?0dAFGnw3ViQ2r@i=LC~;KY-VJ+aYi^Xi z%~H`inf{Pz`KV+zGJ0#Y!w4y`h(>52&;X{YoCE_i8>{nS(lCJACO@>eSLD?Z>pPa0T!bgb8b>=q1 zS;2?E`3i4-$S*u?#afEALYY#VBC-MzxnI75-V4=L-NHQ5jylc#MzLS)OYh(o?+v$# z1!7F0X!eRHegVRJciChv=fYGH_ov^{ zKizxp_%o!ej#7Uk)w&vZ)!*Y81tbhzEilr*lj@7xz2H-6aAz~gbk@}w@X2(0NSq2~ z`tH`#=(M>ny#xUt1tf<=whQ8xLk+_$zL;rUzcwF>4+yS!%u_VYs#1B?}fuEijDq=-jGrIh6;53%-^n1E#qb_@YG^oPKM@(!p=* zZHI3C`bjaPp@Ir9Xyag8kzKQy6iG7-v$-gm`f`riLY`JijwwEQqg%(=gTjjG3X&hy zR}`K{zzlBXY_03w=9j=T>vIH!Hw+qfO0JbCqwDf{oV;``4^@?ObzFx1(7%TuUK8W> zXa@8+hYSt67Z`Ipx90~nVYI6G$e~qcd4e9t>AhMhiN{O!@%{`@P7P4N;kO~5cy~zJ|LrO zK8E?6i>Kkmprrr?K;W;hKCu zVUypflvhpRTS>YN&J!a53&^8HzDEm$Y&!slTaol<@DH04*ZJ zX1M2vD)I#F07#)~p+V(16yFQ1J+ry+t@qIC&uHqwXXzpoyNq~wxl^t5XgH^*jh2tEGMgwF@p zt}^fbVKJKr^qLgb69x{Lt0?_ZaxjZ!m=4!0>F#@9#Wm~^JW2PJd@8l@hX=O42bhL% zVo4p9ezFP8^ZwA4MG9Hvn$gD%c5rH1QiU%6`f-F2rkqmZ9g6~T> z`7B&P7GkMTCqFUcnNjk0fA?prsggo#5^7T)<}Xz8?tq!I)J5-PMmcn4dRT$}+-lK) zrpq*SHnc`ug-B-JGJ*dJEPoK9?RQ{6wQnc(1fH7LZZ&sNTQQ0uMqj1c?!ZH&Ey4@T z)V}=a2lxGwemEtd5-eM79Dz(5!%@=~L;-B5lNi7z9{7L{qdW&SOpt~4!4mUemmUwk zY{EEoi@Nv-l)FBJn3}J8I z^cKkNll|)OJ#D8=VsytspvxK0XV#D_e+J!YIh=-jX6TZlxEl2S!wat211EfBjQ?)P z^PbJVpc$2w7%90rZ;1KiEu~XK>H{W{H)-w*uCy{zv)5-6-bm6$;YSeZ=|;i2MpZ%y z!_N#R=stjt+y!n5a4h2ch{wD4z{iPHy@){(BK6 z3U(@#!0+(TuE{H5>;WH+_@8$bF(VwwX4Fy~AGiy5&3hle3Eu@Np7yz4pE=;qKAzh@ zaDW;~v!$pr(Je#d+L>*Q8(IL^_jSJ>`}&CSnHuE9U$-m(6=F0|p+9~p>KmP$MjY_D zk!@LKsJk47^baNw47wX>`NOaKjV$uZh_6nK>r`#p;{b{Q4SdCjv3_7K z4Ng?HQyPA^)waL>`QZMdUb;1{I57=37NJT?AHK9EmD8QW=TXZjKyJ;*)lXmw8`w8f z0}DA@=abwg3=!^)2!qIsA(#NM$(GC53puz zrwPAjc?TM-tPPCbrSBg>ik;Iy_2g$aG??IT35jl>2)B*G>-57I#wK)FZ+k!tWkiE$ z{WX+7v_Q?>%LZ4c2a4g(Y{>EI_^PQm&7h`*Vfb#)&|dS-Ifd;~ zFVwptaBuyBkMT)|mLX9V3v3&oO_gvWr+I|CNheVIgw`sl5UtI`Qxg%0!2mX0i^qMA zj$!O;x*YE(h4Z)CwkF(px9u^${ zy~Z$I0sFKBAOQpJqPmvE{Jpit%=GdFE7%#C4HwF(-Wl}{<`{_YLX6$ez916e21N$= zW5~}n5yqTSuOXtNPahdp$nQMaVp{IS${KjAqv^wbBTHN`3Cq76xi{Un{QvC8y#+4+ z<;eXy9VG6EB;jvAE)Gaq_xC|96WM#ve_h-NrhWQ9UtExa9_#O@=&#e?i1~jlVyaD| zVEUtV>QAq6h$;~BU$>KC{O9dV@Y`zt^X+t)8UFQMew_|d8_lfxkINr?5(EGH^8XKk CpgCFq delta 2395 zcmajfdpHvc0|s!$FgE76tIQnCZ8L00h~_evhz!Xs_xo*gJu<1B>5wuJ*`cl6%5|fb z7)35e2&pD=nOh~~k{of)cfRL5-=E)~@B6%ezRz!IL!gMl&%~3LMVWI2^`g{AG#Had zGX+pJD&S0y3KswqeBVxx$$fc)pISJq#_Sz_!_TaIKWa^1zj zcoANHAyMvqhv>bZG+o~JlTs2~QH46E>m09LK1Q;qPT4RX*TC&8g=W8rkE4C^D_XY1yJ9Pfv>YF!Oi6-XJ9 zY1EH-dLpcZ?xaNYt^OSOnn|hDKXEnGU(9Os$2>8@nKR9;AMf&%YLo%zl;H*0Q$MRo zyg&NhwcMV1OcHEnQ=xEelO;;IYNdOtfJBf(LH2zR_3Mux$92;KP$_rNMiE=cFh{a@ zI3eF6I~{|?8x_71CA9L6KQjrRa;QYTJ!mr;U&+Ikw#CE3PDdvcSI@v96c*| zA=&2b*?4oMz?;m| z(M9NF!=2Jmo@BZ4RUmHjhotq2LID_EvKv`O^*7&`o=}2KmZT7OdPHn!#uZOO8*iva zKRT^em0xny%7oGq>Rot+?N`}wPT1Xa_|;6a6YOQ9cjbO|-ChX$Xrgde>Z}0kolAbz zGKZ|TVs5%#(@!dpA^6U_IUSn;RtQ@(I}eu!aJmn5WI}iP3vfLTu3&L{tMs-9Ly$S; z_GvAd@YvNv7n(7>5wC^Kmqd6m0LQ)c{7`xbxVQC8v5Apstha`UbA`w3=3wL!4&+(Y zWwz~S#;q=J(Pzs1qc$^++a4qi$s_v8_0&t~<5aC`gOxI!PZPi@&3eMhogSavkC9oP z(}LG?`qVwkvJ&FPwa$h{D(QV9XP!$^wQGR!F(3bsspY)rVgJvhITIvS*GZ!R=}f#? zTYANC=;!h0!j`eoh|yMqw2wM%(!K4uMnt@nF-=OZxuI!*ByGA8*Sdg-U{wd_S%yzX ze}4X$%Py7@i6^(;XS>_Z^>TmXLFa13$Cj>P7E`l&;@maJhEHa0T8xBBF3I}(^8)rA z7us(CJbx3?fhA;}I=ewg`893^X9xp1sOCz-=N7+5`z{XzfwcGP+m4qG z+^ zUe%lPS{8)YOx(@KG!xfHvI4>25gkY&qk(8|1q8>W6LTdbWjU<) zQA(DPQYZNa#XWC+x1KHKgUCSS-yBoucsf(8gY$(g20PUZD90~q81yHrZx)@`3-cmP zl9x=H4qoJsIFlgSgQZiI?8yp_h7d;>apL*&8WtD#k4ZTIQ$hK^ol*Zk&Vc{x44)_n z`Y$WK%Myp4xAhs|&)os(9-O1OaG_u!!G$#&Ce7b&*@8y~^VBlx^Fl7UewwPWWjyp= zC_*c99|69Nz9Ri`#Buxb(~(L9@?O0c6TeIGFZrjDAD|OW!ys#mS#1G1>x%NX ziaE7|wdbyrTLwNyxUDI+ewHx(HE2KF#*48oqQRW^`)TJ zy=zZYBxItSub9#k==-q8SIi|WX4Y#PRkyV+U9|n@?S4zX&LK{ffvo+)7Z#%*Y<%m5 z?qvEQBd=LH_DVuLblP`d+AN~f5=XIJzR!{oW2tvpD(>lt0nb0m!q*uDR9TL}uJP)P^hi*kCIxmN6EU+(|A9+#H Jq_gdP{4a>aY})_; diff --git a/nodejs22.changes b/nodejs22.changes index 7a27088..7a8df76 100644 --- a/nodejs22.changes +++ b/nodejs22.changes @@ -1,17 +1,3 @@ -------------------------------------------------------------------- -Wed Dec 4 16:59:08 UTC 2024 - Adam Majer - -- Update to 22.12.0: - * require(esm) is now enabled by default - * Added resizable ArrayBuffer support in Buffer - -- CVE-2024-21538.patch: fixes regular expression denial of service - (bsc#1233856, CVE-2024-21538) -- icu76.1.patch: upstreamed, dropped -- linker_lto_jobs.patch, nodejs-libpath.patch, fix_ci_tests.patch: refreshed -- nodejs.keyring: updated with upstream releaser list -- old_cares.patch: fix with older c-ares - ------------------------------------------------------------------- Wed Nov 20 10:04:23 UTC 2024 - Adam Majer diff --git a/nodejs22.spec b/nodejs22.spec index 98f1430..c896c33 100644 --- a/nodejs22.spec +++ b/nodejs22.spec @@ -31,7 +31,7 @@ %endif Name: nodejs22 -Version: 22.12.0 +Version: 22.11.0 Release: 0 # Double DWZ memory limits @@ -147,7 +147,6 @@ Patch7: manual_configure.patch Patch13: openssl_binary_detection.patch -Patch82: CVE-2024-21538.patch ## Patches specific to SUSE and openSUSE Patch100: linker_lto_jobs.patch @@ -173,7 +172,7 @@ Patch200: versioned.patch Patch305: qemu_timeouts_arches.patch Patch307: v8-i586.patch Patch309: gcc13.patch -Patch311: old_cares.patch +Patch311: icu76.1.patch BuildRequires: pkg-config BuildRequires: fdupes @@ -196,10 +195,10 @@ BuildRequires: config(netcfg) %if 0%{?suse_version} == 1110 # GCC 5 is only available in the SUSE:SLE-11:SP4:Update repository (SDK). %if %node_version_number >= 8 -BuildRequires: gcc5-c++ +BuildRequires: gcc5-c++ %define forced_gcc_version 5 %else -BuildRequires: gcc48-c++ +BuildRequires: gcc48-c++ %define forced_gcc_version 4.8 %endif %endif @@ -209,15 +208,15 @@ BuildRequires: gcc48-c++ # for SLE-12:Update targets %if 0%{?suse_version} == 1315 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %else %if %node_version_number >= 14 -BuildRequires: gcc9-c++ +BuildRequires: gcc9-c++ %define forced_gcc_version 9 %else %if %node_version_number >= 8 -BuildRequires: gcc7-c++ +BuildRequires: gcc7-c++ %define forced_gcc_version 7 %endif %endif @@ -226,7 +225,7 @@ BuildRequires: gcc7-c++ %if 0%{?suse_version} == 1500 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %endif %endif @@ -252,7 +251,6 @@ BuildRequires: python311 %endif %if %{?suse_version} > 1500 BuildRequires: python3 -BuildRequires: python3-setuptools %endif %endif @@ -313,7 +311,7 @@ BuildRequires: bundled_openssl_should_not_be_required %if ! 0%{with intree_cares} BuildRequires: pkgconfig(libcares) >= 1.17.0 %else -Provides: bundled(libcares2) = 1.34.3 +Provides: bundled(libcares2) = 1.33.1 %endif %if %node_version_number >= 22 @@ -323,13 +321,13 @@ BuildRequires: sqlite3-devel %if ! 0%{with intree_icu} BuildRequires: pkgconfig(icu-i18n) >= 71 %else -Provides: bundled(icu) = 76.1 +Provides: bundled(icu) = 75.1 %endif %if ! 0%{with intree_nghttp2} BuildRequires: libnghttp2-devel >= 1.41.0 %else -Provides: bundled(nghttp2) = 1.64.0 +Provides: bundled(nghttp2) = 1.63.0 %endif %if 0%{with valgrind_tests} @@ -379,7 +377,7 @@ ExclusiveArch: not_buildable %endif Provides: bundled(uvwasi) = 0.0.21 -Provides: bundled(libuv) = 1.49.1 +Provides: bundled(libuv) = 1.48.0 Provides: bundled(v8) = 12.4.254.21 %if %{with intree_brotli} Provides: bundled(brotli) = 1.1.0 @@ -391,18 +389,18 @@ BuildRequires: pkgconfig(libbrotlidec) Provides: bundled(llhttp) = 9.2.1 Provides: bundled(ngtcp2) = 1.3.0 -Provides: bundled(simdutf) = 5.6.1 +Provides: bundled(simdutf) = 5.5.0 Provides: bundled(simdjson) = 3.10.0 # bundled url-ada parser, not ada -Provides: bundled(ada) = 2.9.2 +Provides: bundled(ada) = 2.9.0 -Provides: bundled(node-acorn) = 8.14.0 +Provides: bundled(node-acorn) = 8.12.1 Provides: bundled(node-acorn-walk) = 8.3.4 -Provides: bundled(node-amaro) = 0.2.0 +Provides: bundled(node-amaro) = 0.1.8 Provides: bundled(node-cjs-module-lexer) = 1.4.1 Provides: bundled(node-corepack) = 0.29.4 Provides: bundled(node-minimatch) = 10.0.1 -Provides: bundled(node-undici) = 6.21.0 +Provides: bundled(node-undici) = 6.20.0 %description Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js @@ -692,7 +690,6 @@ popd %if 0%{with valgrind_tests} %endif %patch -P 13 -p1 -%patch -P 82 -p1 %patch -P 100 -p1 %patch -P 101 -p1 %if 0%{?suse_version} >= 1500 || 0%{?suse_version} == 0 @@ -714,6 +711,7 @@ popd %patch -P 309 -p1 %patch -P 311 -p1 + %if %{node_version_number} == 12 # minimist security update - patch50 rm -r deps/npm/node_modules/mkdirp/node_modules/minimist diff --git a/old_cares.patch b/old_cares.patch deleted file mode 100644 index e6f906a..0000000 --- a/old_cares.patch +++ /dev/null @@ -1,155 +0,0 @@ -temporary revert changes until we can upgrade c-ares in SLE-15:Update - -commit bf68733e7f61bf4ff51a456e27123f44a526aebc -Author: Aviv Keller -Date: Wed Oct 30 10:10:28 2024 -0400 - - dns: stop using deprecated `ares_query` - - PR-URL: https://github.com/nodejs/node/pull/55430 - Refs: https://github.com/nodejs/node/issues/52464 - Reviewed-By: Luigi Pinca - Reviewed-By: Matteo Collina - - -Index: node-v22.12.0/src/cares_wrap.cc -=================================================================== ---- node-v22.12.0.orig/src/cares_wrap.cc -+++ node-v22.12.0/src/cares_wrap.cc -@@ -825,62 +825,62 @@ void ChannelWrap::EnsureServers() { - } - - int AnyTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_ANY); -+ wrap->AresQuery(name, ns_c_in, ns_t_any); - return ARES_SUCCESS; - } - - int ATraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_A); -+ wrap->AresQuery(name, ns_c_in, ns_t_a); - return ARES_SUCCESS; - } - - int AaaaTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_AAAA); -+ wrap->AresQuery(name, ns_c_in, ns_t_aaaa); - return ARES_SUCCESS; - } - - int CaaTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_CAA); -+ wrap->AresQuery(name, ns_c_in, T_CAA); - return ARES_SUCCESS; - } - - int CnameTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_CNAME); -+ wrap->AresQuery(name, ns_c_in, ns_t_cname); - return ARES_SUCCESS; - } - - int MxTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_MX); -+ wrap->AresQuery(name, ns_c_in, ns_t_mx); - return ARES_SUCCESS; - } - - int NsTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_NS); -+ wrap->AresQuery(name, ns_c_in, ns_t_ns); - return ARES_SUCCESS; - } - - int TxtTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_TXT); -+ wrap->AresQuery(name, ns_c_in, ns_t_txt); - return ARES_SUCCESS; - } - - int SrvTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_SRV); -+ wrap->AresQuery(name, ns_c_in, ns_t_srv); - return ARES_SUCCESS; - } - - int PtrTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_PTR); -+ wrap->AresQuery(name, ns_c_in, ns_t_ptr); - return ARES_SUCCESS; - } - - int NaptrTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_NAPTR); -+ wrap->AresQuery(name, ns_c_in, ns_t_naptr); - return ARES_SUCCESS; - } - - int SoaTraits::Send(QueryWrap* wrap, const char* name) { -- wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_SOA); -+ wrap->AresQuery(name, ns_c_in, ns_t_soa); - return ARES_SUCCESS; - } - -Index: node-v22.12.0/src/cares_wrap.h -=================================================================== ---- node-v22.12.0.orig/src/cares_wrap.h -+++ node-v22.12.0/src/cares_wrap.h -@@ -246,20 +246,18 @@ class QueryWrap final : public AsyncWrap - return Traits::Send(this, name); - } - -- void AresQuery(const char* name, -- ares_dns_class_t dnsclass, -- ares_dns_rec_type_t type) { -+ void AresQuery(const char* name, int dnsclass, int type) { - channel_->EnsureServers(); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - TRACING_CATEGORY_NODE2(dns, native), trace_name_, this, - "name", TRACE_STR_COPY(name)); -- ares_query_dnsrec(channel_->cares_channel(), -- name, -- dnsclass, -- type, -- Callback, -- MakeCallbackPointer(), -- nullptr); -+ ares_query( -+ channel_->cares_channel(), -+ name, -+ dnsclass, -+ type, -+ Callback, -+ MakeCallbackPointer()); - } - - void ParseError(int status) { -@@ -306,20 +304,19 @@ class QueryWrap final : public AsyncWrap - return wrap; - } - -- static void Callback(void* arg, -- ares_status_t status, -- size_t timeouts, -- const ares_dns_record_t* dnsrec) { -+ static void Callback( -+ void* arg, -+ int status, -+ int timeouts, -+ unsigned char* answer_buf, -+ int answer_len) { - QueryWrap* wrap = FromCallbackPointer(arg); - if (wrap == nullptr) return; - - unsigned char* buf_copy = nullptr; -- size_t answer_len = 0; - if (status == ARES_SUCCESS) { -- // No need to explicitly call ares_free_string here, -- // as it is a wrapper around free, which is already -- // invoked when MallocedBuffer is destructed. -- ares_dns_write(dnsrec, &buf_copy, &answer_len); -+ buf_copy = node::Malloc(answer_len); -+ memcpy(buf_copy, answer_buf, answer_len); - } - - wrap->response_data_ = std::make_unique(); From 0db9914accf5cc9396105619561eaf3194ba850f649ceeb68279b0e3ed62caec Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Thu, 5 Dec 2024 13:58:50 +0000 Subject: [PATCH 4/4] [info=8adf0e193bee05d4b98375e22f117e975a43814a6a60980d4f82f41898fc9c8e] OBS-URL: https://build.opensuse.org/package/show/devel:languages:nodejs/nodejs22?expand=0&rev=24 --- _scmsync.obsinfo | 4 ++-- nodejs22.changes | 5 +++++ nodejs22.spec | 13 +++++++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/_scmsync.obsinfo b/_scmsync.obsinfo index 09b5abd..a7d88db 100644 --- a/_scmsync.obsinfo +++ b/_scmsync.obsinfo @@ -1,3 +1,3 @@ -mtime: 1732119982 -commit: 6f7127ad4924a93508fb1987e85f2a104f8eabe566e3cdaeb88af73312e90f9e +mtime: 1733407111 +commit: 8adf0e193bee05d4b98375e22f117e975a43814a6a60980d4f82f41898fc9c8e url: https://src.opensuse.org/nodejs/nodejs22.git diff --git a/nodejs22.changes b/nodejs22.changes index 7a8df76..954d588 100644 --- a/nodejs22.changes +++ b/nodejs22.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Thu Dec 5 13:53:22 UTC 2024 - Adam Majer + +- add python3-setuptools requirements (needed for python 3.13+) + ------------------------------------------------------------------- Wed Nov 20 10:04:23 UTC 2024 - Adam Majer diff --git a/nodejs22.spec b/nodejs22.spec index c896c33..14479d4 100644 --- a/nodejs22.spec +++ b/nodejs22.spec @@ -195,10 +195,10 @@ BuildRequires: config(netcfg) %if 0%{?suse_version} == 1110 # GCC 5 is only available in the SUSE:SLE-11:SP4:Update repository (SDK). %if %node_version_number >= 8 -BuildRequires: gcc5-c++ +BuildRequires: gcc5-c++ %define forced_gcc_version 5 %else -BuildRequires: gcc48-c++ +BuildRequires: gcc48-c++ %define forced_gcc_version 4.8 %endif %endif @@ -208,15 +208,15 @@ BuildRequires: gcc48-c++ # for SLE-12:Update targets %if 0%{?suse_version} == 1315 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %else %if %node_version_number >= 14 -BuildRequires: gcc9-c++ +BuildRequires: gcc9-c++ %define forced_gcc_version 9 %else %if %node_version_number >= 8 -BuildRequires: gcc7-c++ +BuildRequires: gcc7-c++ %define forced_gcc_version 7 %endif %endif @@ -225,7 +225,7 @@ BuildRequires: gcc7-c++ %if 0%{?suse_version} == 1500 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %endif %endif @@ -251,6 +251,7 @@ BuildRequires: python311 %endif %if %{?suse_version} > 1500 BuildRequires: python3 +BuildRequires: python3-setuptools %endif %endif