From ab3f35759913fe1ca66153ffc792a099c79bb74b Mon Sep 17 00:00:00 2001 From: James Maes Date: Thu, 5 Nov 2026 06:34:48 -0600 Subject: [PATCH 1/4] build: publish the vendored OpenHTML module at the family version and flatten the reactor root The qrun publisher declares one version per reactor and the capture step looks for target/-.jar, so the vendored OpenHTML module (own version 1.1.105-qqq-p1) could not be published with the family. Keep the GAV group and artifact (com.kingsrook.thirdparty:openhtmltopdf-pdfbox), make its version the family ${revision} (default 0.1.0-SNAPSHOT, like the other modules), flatten its consumer POM, and point renderer at ${revision}. Java sources and renderer behaviour are unchanged. The module keeps its explicit LGPL-2.1-or-later license and records upstream provenance (tag 1.1.105, commit 54b31598, patch level p1, upstream project URL and scm) in properties, url and scm; it does not inherit the Apache license of the reactor. The hash-pinned complete-source archive is regenerated with the same module/pom.xml (inputs.sha256 updated; module/pom.xml is again identical to the module pom) and build-openhtml.sh derives the artifact names from the module revision. The reactor root is itself a pom-packaging module the publisher checks, so it gets the flatten plugin (otherwise ${revision} stays unresolved). Co-Authored-By: Claude Sonnet 5.5 --- README.md | 2 +- pom.xml | 11 +++++++++++ renderer/README.md | 2 +- renderer/THIRD-PARTY.md | 4 ++-- renderer/pom.xml | 2 +- .../QQQ-MODIFICATIONS.txt | 2 +- .../vendor/openhtml-1.1.105-qqq-p1/README.md | 4 ++-- .../openhtml-1.1.105-qqq-p1/build-openhtml.sh | 5 +++-- .../openhtml-1.1.105-qqq-p1/inputs.sha256 | 2 +- ...-pdfbox-1.1.105-qqq-p1-complete-source.zip | Bin 297004 -> 297448 bytes .../vendor/openhtml-1.1.105-qqq-p1/pom.xml | 10 +++++++--- 11 files changed, 30 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e3b8fa9..e9b5ed2 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Production gates still include volume/retained-storage restore; isolated compile | Directory | Artifact | Notes | | --- | --- | --- | | `foundation` | `com.kingsrook.qbits:qbit-document-generation` | Metadata, services, ports and schema. Depends on QQQ core only (RDBMS optional). | -| `renderer/vendor/openhtml-1.1.105-qqq-p1` | `com.kingsrook.thirdparty:openhtmltopdf-pdfbox:1.1.105-qqq-p1` | LGPL-2.1-or-later patched OpenHTML (one file differs from upstream 1.1.105), built from the tracked source with its notices; the renderer depends on it. | +| `renderer/vendor/openhtml-1.1.105-qqq-p1` | `com.kingsrook.thirdparty:openhtmltopdf-pdfbox: (upstream 1.1.105 + QQQ patch p1)` | LGPL-2.1-or-later patched OpenHTML (one file differs from upstream 1.1.105), built from the tracked source with its notices; the renderer depends on it. | | `renderer` | `com.kingsrook.qbits:qbit-document-renderer` | Standalone isolated renderer CLI/image source; no QQQ dependency. | | `bridges/renderer` | `qbit-document-generation-renderer` | `IsolatedRenderer` port implementation for the renderer. | | `bridges/remote-renderer` | `remote-renderer-parent` -> `qqq-remote-renderer-transport`, `qbit-document-generation-remote-renderer` | Remote renderer service and adapter. | diff --git a/pom.xml b/pom.xml index 5dade11..29dfa32 100644 --- a/pom.xml +++ b/pom.xml @@ -20,4 +20,15 @@ bridges/printing bridges/scripting + + + + org.codehaus.mojoflatten-maven-plugin1.7.3 + trueossrh + + flattenprocess-resourcesflatten + flatten.cleancleanclean + + + diff --git a/renderer/README.md b/renderer/README.md index 9dc146e..ec32bf7 100644 --- a/renderer/README.md +++ b/renderer/README.md @@ -7,7 +7,7 @@ This standalone Java CLI renders user-authored PDF layouts and typed ZPL label s ## Source build The PDF output dependency is a separately built, narrowly patched OpenHTML -module under `com.kingsrook.thirdparty:openhtmltopdf-pdfbox:1.1.105-qqq-p1`. +module under `com.kingsrook.thirdparty:openhtmltopdf-pdfbox: (upstream 1.1.105 + QQQ patch p1)`. Build it from the retained source into an isolated Maven repository before a local renderer build; use that same repository with `-Dmaven.repo.local=...`. See [the source build instructions](vendor/openhtml-1.1.105-qqq-p1/README.md). diff --git a/renderer/THIRD-PARTY.md b/renderer/THIRD-PARTY.md index fc5aa75..36d2467 100644 --- a/renderer/THIRD-PARTY.md +++ b/renderer/THIRD-PARTY.md @@ -4,7 +4,7 @@ Runtime libraries are separate JARs, not shaded into an opaque binary. Their lic | Component | Pinned version | License / source | | --- | --- | --- | -| OpenHTMLtoPDF PDFBox output / core | 1.1.105-qqq-p1 / 1.1.105 | LGPL-2.1-or-later; [complete local source and patch](vendor/openhtml-1.1.105-qqq-p1/README.md), [official source tag](https://github.com/openhtmltopdf/openhtmltopdf/tree/1.1.105), [published upstream POM](https://repo.maven.apache.org/maven2/io/github/openhtmltopdf/openhtmltopdf-pdfbox/1.1.105/openhtmltopdf-pdfbox-1.1.105.pom) | +| OpenHTMLtoPDF PDFBox output / core | family revision (upstream 1.1.105 + QQQ patch p1) / 1.1.105 | LGPL-2.1-or-later; [complete local source and patch](vendor/openhtml-1.1.105-qqq-p1/README.md), [official source tag](https://github.com/openhtmltopdf/openhtmltopdf/tree/1.1.105), [published upstream POM](https://repo.maven.apache.org/maven2/io/github/openhtmltopdf/openhtmltopdf-pdfbox/1.1.105/openhtmltopdf-pdfbox-1.1.105.pom) | | PDFBox, FontBox, PDFBox IO, XMPBox | 3.0.8 | Apache-2.0; [project](https://pdfbox.apache.org/), [security advisories](https://pdfbox.apache.org/security.html) | | FreeMarker | 2.3.35 | Apache-2.0; [release notes](https://freemarker.apache.org/docs/versions_2_3_35.html), [security model](https://github.com/apache/freemarker/security) | | Jsoup | 1.23.2 | MIT; [project license](https://github.com/jhy/jsoup/blob/master/LICENSE) | @@ -14,7 +14,7 @@ Runtime libraries are separate JARs, not shaded into an opaque binary. Their lic | graphics2d | 3.0.1 | Apache-2.0; [project](https://github.com/rototor/pdfbox-graphics2d) | | Commons Logging | 1.4.0 | Apache-2.0; [project](https://commons.apache.org/proper/commons-logging/) | -The maintained upstream OpenHTMLtoPDF group is `io.github.openhtmltopdf`. The PDFBox output module is now source-built under the distinct `com.kingsrook.thirdparty:openhtmltopdf-pdfbox:1.1.105-qqq-p1` identity; the official core remains unchanged at 1.1.105. One upstream Java file is modified to preserve the complete image stream dictionary when disabling interpolation, including PNG predictor and JPEG filter metadata. The full source archive, exact patch, original LGPL notices, dated modification notice and reproducible build recipe are retained under `vendor/openhtml-1.1.105-qqq-p1` and shipped at `/usr/share/doc/qqq-openhtml` in the image. The library remains a separate replaceable JAR. Do not substitute this fork under the upstream GAV or distribute it without corresponding source/notices. Private vendor regression evidence does not replace the renderer consumer and exact-image gates. +The maintained upstream OpenHTMLtoPDF group is `io.github.openhtmltopdf`. The PDFBox output module is now source-built under the distinct `com.kingsrook.thirdparty:openhtmltopdf-pdfbox: (upstream 1.1.105 + QQQ patch p1)` identity; the official core remains unchanged at 1.1.105. One upstream Java file is modified to preserve the complete image stream dictionary when disabling interpolation, including PNG predictor and JPEG filter metadata. The full source archive, exact patch, original LGPL notices, dated modification notice and reproducible build recipe are retained under `vendor/openhtml-1.1.105-qqq-p1` and shipped at `/usr/share/doc/qqq-openhtml` in the image. The library remains a separate replaceable JAR. Do not substitute this fork under the upstream GAV or distribute it without corresponding source/notices. Private vendor regression evidence does not replace the renderer consumer and exact-image gates. The upstream POM already depends on PDFBox 3.0.8. This renderer does not reuse the trusted proof's old OpenHTMLtoPDF 1.0.10/PDFBox 2 baseline. PDFBox's 2026 path-traversal advisories concern its examples module, which is not shipped here; moving to the current branch is not a claim that the proof exercised those vulnerable examples. diff --git a/renderer/pom.xml b/renderer/pom.xml index 3c44537..2214eb6 100644 --- a/renderer/pom.xml +++ b/renderer/pom.xml @@ -5,7 +5,7 @@ QQQ isolated document renderer 0.1.0-SNAPSHOT21UTF-8 - com.kingsrook.thirdpartyopenhtmltopdf-pdfbox1.1.105-qqq-p1 + com.kingsrook.thirdpartyopenhtmltopdf-pdfbox${revision} org.apache.pdfboxpdfbox3.0.8 org.freemarkerfreemarker2.3.35 org.jsoupjsoup1.23.2 diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/QQQ-MODIFICATIONS.txt b/renderer/vendor/openhtml-1.1.105-qqq-p1/QQQ-MODIFICATIONS.txt index c9d9e6d..80b9af5 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/QQQ-MODIFICATIONS.txt +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/QQQ-MODIFICATIONS.txt @@ -14,7 +14,7 @@ bytes, preserve actual copied stream Length, force Interpolate=false on the clone, and close raw input even when copying fails. Original upstream notices and LGPL licenses remain in META-INF. -Artifact: com.kingsrook.thirdparty:openhtmltopdf-pdfbox:1.1.105-qqq-p1 +Artifact: com.kingsrook.thirdparty:openhtmltopdf-pdfbox: (upstream 1.1.105 + QQQ patch p1) Corresponding modified sources: same GAV with classifier sources. The full-source bundle also contains the standalone Maven POM, trusted regression tests, exact patch and reproduction instructions. Distribute it diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md b/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md index a762ad5..da08b5e 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md @@ -2,7 +2,7 @@ This directory contains the complete corresponding LGPL-2.1-or-later sources, original notices, dated modification notice and exact patch for: -`com.kingsrook.thirdparty:openhtmltopdf-pdfbox:1.1.105-qqq-p1`. +`com.kingsrook.thirdparty:openhtmltopdf-pdfbox: (upstream 1.1.105 + QQQ patch p1)`. Upstream: actual tag 1.1.105, commit 54b31598f14ea77139ec435106810ba67bd68656. Source JAR: https://repo.maven.apache.org/maven2/io/github/openhtmltopdf/openhtmltopdf-pdfbox/1.1.105/openhtmltopdf-pdfbox-1.1.105-sources.jar @@ -45,5 +45,5 @@ known supported PNG/JPEG background path; it is not a universal PDF sanitizer. This directory is also a standard Maven module: `pom.xml` and `src/` are the `module/` tree of the complete-source archive, byte for byte (`sh verify-module-source.sh` checks the archive hash and compares). The repository reactor builds it, with its 15 regression tests, before the -renderer, producing `com.kingsrook.thirdparty:openhtmltopdf-pdfbox:1.1.105-qqq-p1` and its `-sources` jar. `build-openhtml.sh` (used by the +renderer, producing `com.kingsrook.thirdparty:openhtmltopdf-pdfbox: (upstream 1.1.105 + QQQ patch p1)` and its `-sources` jar. `build-openhtml.sh` (used by the renderer Dockerfile into a private builder repository) is unchanged and still validates the same hashes. diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh b/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh index 23dd4bb..85bc10c 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh @@ -11,6 +11,7 @@ test ! -e "$work" mkdir -p "$work" "$repository" (cd "$work" && jar xf "$vendor/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip") printf '%s %s\n' 34f4f40a95c7ed607fb76f9ecfd1c8f47c185c2c9258822c7f96d8e9fbee3ecb "$work/provenance/upstream-sources.jar" | sha256sum -c - +rev=$(sed -n 's:.*\(.*\).*:\1:p' "$work/module/pom.xml" | head -n 1) # verify includes the fifteen real upstream-clone/background regressions. mvn -B -f "$work/module/pom.xml" "-Dmaven.repo.local=$repository" verify # Install only the verified artifact into this discarded builder's private repo. @@ -18,7 +19,7 @@ mvn -B -f "$work/module/pom.xml" "-Dmaven.repo.local=$repository" -DskipTests in mkdir "$work/corresponding-source" cp "$vendor"/* "$work/corresponding-source/" cp "$work/module/pom.xml" "$work/corresponding-source/build-pom.xml" -cp "$work/module/target/openhtmltopdf-pdfbox-1.1.105-qqq-p1-sources.jar" "$work/corresponding-source/" +cp "$work/module/target/openhtmltopdf-pdfbox-$rev-sources.jar" "$work/corresponding-source/" cp "$work/module/target/surefire-reports/com.kingsrook.thirdparty.RasterMetadataTest.txt" "$work/corresponding-source/vendor-test-results.txt" (java -version; mvn -version) > "$work/corresponding-source/build-toolchain.txt" 2>&1 -(cd "$work/module/target" && sha256sum openhtmltopdf-pdfbox-1.1.105-qqq-p1.jar openhtmltopdf-pdfbox-1.1.105-qqq-p1-sources.jar) > "$work/corresponding-source/built-artifacts.sha256" +(cd "$work/module/target" && sha256sum openhtmltopdf-pdfbox-$rev.jar openhtmltopdf-pdfbox-$rev-sources.jar) > "$work/corresponding-source/built-artifacts.sha256" diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 b/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 index 4118e48..7548854 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 @@ -1,2 +1,2 @@ -83daf8fd1e5ec3d27933028bb8d484674b7c40ab7f492dce0093aa344c73a441 openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip +fc02ae260ba36552bd413db5ee35555aee31c25e57da3638d98113c793a9d7b0 openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip 8dab8e86c45393a6bfea32d755f1e130b3ebeef8f77a46e6593af223080c5d25 openhtml-image-dictionary.patch diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip b/renderer/vendor/openhtml-1.1.105-qqq-p1/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip index 71ed6f878a6f20fd326d978404f876e860418f7e..c4398426815ea09bc484d593b07042204ab0c5ba 100644 GIT binary patch delta 29905 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

5x-FXW4jO#q?00*npW=Jf<(?N# zo_K!*>Fgscl>&d}B1b?%V}@mLg-$jx6bk!eY`4FK6pm773BG2!g~d@#HxzdimYt)Y zpHaHe!dDZUpJ&ZYSnfJ=q2ZJ&-?bK#7NWZ3MKe%QYYr=6tGL2zOWoC30zJXH*J|E% zZw==a-fvJm#fH^$hVoQ#!Q9BwKNbmKZ~_mHfx**ku3mpgqq$fd1N-i~N^NF|&807c zWyN@Cs>0m{;#>A^D~DHDT!OCW@SMT%TeG@CWAF4|`RC{XOfF9^pFr=YS8{qvD<2(| zjIB}w>Kl!Gj=olb?R4JI&SSrQ_x2t5|IE&Z<&*eje>@rUXnr_EavZ+gM^#`w!Qa;r zd-446x;KA*eE4$zW2dg~&6d75uD)XtREN$UHW@vKaI+mk35WBSlpUVafTc?{zV$%& z>|KnVgWFwiwsb9zI!=oOw;pU8)#`e)rK@Yy61j`dnv7kd_GSPj3|>-}PzuALl4;z1tpM$t*0HTD&EB^C2i>_jRIHL13 zB(cJy^0oPJ`NH*Lk;Cs4Pi-(0yd;9R+aa|ur>qqX^#_E+?KYmv}c#x5$ zz1@U%N>tlYec&d)ImJ>Qt~AZ;K|c6rShjwCJ}!r34!~Gv>++f9&AdeK3>RH}1y~$G zvn}rK?(PJ);O+!>cXwZ07T3jsySqz(00Dw~kl-5JHIF~Md+)n%zm++sPE~bx?YBE$ z&rA<{+d6qw17CN_vyttWmYbgm^yrT|Oi&N&fd_o3p}}MT^6PuVd0G=ORQ`CnPDlXY z0Zr&?DsD7h`{j1rIQV8cB9!mP6*b(9v$c@l$nt^tUX5B?Y{hRK@0-o?Ea3dXn0&^u z_}*2ofR1m7m3_Jm9iE|3#H=(X>JyWaM7d*misMsq2Bnp^(Q0z_WirPa8;~A;Wy%|@ zC(l4SIC2R9q8p|{TGBz3(b9gC89<|+FUGlDdGhq2v{DElf%g7^)}UQEj30-^CZ%bJ=uZDs|~S*y{)RIpa-I5$?DvCUvD-5<7A zLb`M}od(yK1{rBeJe5lQn!%d3I5a-c%B?k`L>#0sW+HKh4e`{7l3^=V1=(|oLO5si zxr%skErD&KR(iQg_*Xf;a$V)-zP1B3EX^GKaSiRccEt+SZ&r>yy&+dxz%W(DHuJ54 zOX3s2kgCV0^w96>V0XQ@i$pJYa??_T5slfIOGmzF?cy5DS8XrrH2vG8&Ub%!!NPqp z>F(!B?>fcY<3_}spOQ?}>$QAX0-c}M=@M-nYnhw4EqPKWCtWEzZ>=)SJ6Na%P|OFv z)x3!@>hSz1LOY*Gq%}{0Vnxj2OZ{}LOQ=}^2u~-lUmjL0TQjtF=`3SsJ~j_;->4U} z3&!d1RV?oZs^iu8&dswda6XJ`&9n>;PpRkV9ogR~W)@r@0PCuR+A1*hvhCNBhEm2f zT5@>4xP@X0$sQcBJR^W>K~^?wutYOeCFL*>YqnIIHCY zensp%Lr8v>vNxw~*{Wx;;1E_dJ;&u7v&G)M?Q)M;dYX22h>q+Yu$!dt;ZYHd_p>3I zgIoVZ-$jqWT0dk#E4k2 zt7k`T{B@JTeq%$vn{OaDKC-WwMwiaF>V`Gy+tNmrYaq88!EkI3f|TkC6@J6A*?iUy zfN+y_x7#XTT~?XmtWhiQA}wP`th>OXh9K~TT-T;3Zf!!)u`PBYZu_7ma>!W{uxMNH zk|AJNAyL6i=g`1eEjVgwRPz9|1g+sQ@$k9Di@P<3$<1wEVj9ekQ6Mnpvh}R=Q6-6B zJR)LD%v=<_&qF$AgI-zs7sP+Y^Rjj(ls!_^NgUHL+a7EP zG?p3`XsfexHCKhUMU!4<7F$nNMkdxLESWeKs^)Wlll}7X{K`Leq@$jyZ{nFjz2@Qh z70JEGhTv7NsYHeLZ&$4QOxYfPQtfnv5w02ZSQB?;o= zYffcpnfV|621uL8`(yWZIW4=R?%Jymx$FKb6k=pLNP1Q?X1smm5=9F+B$g)-;g1XL zBvB>&zep^GhvR>xKnHV|w+jo-&fJX{%FjT%i?JGplq0;-AbZa)1QJq)XWV^lRj!gC z$#|xjKMP#Bxz8xVFGR#90GQ`o%cZQbziNehm>|M>;CQ5#3dS&8_w1^-RJWQ)r!x%NS%t3`Qj&ae2 znJ#bQhPbe*iV|Ydxe!Q&9fj8!mh6(@2uB0qOMB+SmuTRIDNS{jyGkvy6>p!={|1Ya z7&svSYA%wc2Tc1qMT#sT(sV#Hu4Ctv=1UT}RoY3s1<_pDI)Rj*V;5B0)Cfdr-u@iv zMGFgFs3Ki&N$)6R07wKikJCp_V>1SX`UOWA_S?t}92L+HbEKuF5NwzT1NG&(4qTTU z)eG_j%2pIRxT;i9s=u3L2-l_deq&4Ma5T0AJDu`=czbgT(-2foa>0T z4l~x>IBrlk!YPD14Tq^(1kDR|)WCv$vRT+>Xr z^r0rU7^^RyQ<~coF}UuT4f@_e6qAEdCHkA{7Z=`wz2D@oN||5CXeu61XsaAFKIOP2 zN0#mET%Y&xS;CL&X?eq49InrBKjaj%j}B6L_7NXqOvy5SOL|Ety*5in0JySp&uhbH zh4l!IoG^-}I0RYQ2P*N7xP6Lh>qp^8ZtZ`Zn!(S;6=BMYmF3q`NGV0|oR8QqEkM>x*hQ>_yA&l-H7cvJl8xB#T^r7!HG@n%rKpoE++SG< zp~vwkX9^{qUVnnDOWV%kgn^V&g^b=?pz!BuZ>8@k&KCInd`gtA-QU1OUB{r~ycy{O z!JZC=d2smpQ7v|2_r@iEmX&23HZneClw3l`jPgysfB~3jN)#WXoLr*L zC3tD=@$W1-vXW)vzo1O?U5aCy{(br$p3fwxi%4-W>rCC4R(`W4f*kSs9AzF~o!z(( zq_;3>2D2j{X!vFmdyPjGjM;A>Q$a6$?JvLVuQcc5E#)Y?O+Pi7vla=`hD$EXb!8bv zNYF`6l&R0@^SPwZQv_fV6wvkO6ped(em^r=%>Ns32|*rqcQ6`E;7j2MPo>M}V4udHPOYzmG7q|Wvsb@U&TNesY-q?bAqniNMmLh3fP zsC$H(m?_3{VuRN#q0PxDa>|t}DmgLg>tqlr3qV!u! zDw!ZAl{Bv`8YW^g2+u`HCA}%ix%X>f8}u7Lc^$Ld=ftmiA^Qqo@ElpgjTQ}LbR+B* z)}0t3CDiDq!O(!L7=0uD;CMtdwhh~Glu4K&%SaP+vZnFY41QpbyLyN9Zs(3(e7}(836(#nP+*cO=@haVsnIZ=xqQ$@+Xnzc_upPoC;BLUR^pk ztSv0+*!6r3OSBLwbKXcDG86p}lUm$PF*WP?Fl1;Ja4cCUC)=UQx@llOZ<1r?{*<8o zejeRf+i%@rrD+sgfigc(*#4YaTUcA%zZQ z&M-HQQZe9Igokq<&Pr#pF~?Li*+ZMsc}!c(8Az9R2!l-+$R%EuRy(N7yn!N(ospbE z>6uVkPgdSqx{!avu1Z5Z0fW|3oXF;Cvjtm~p-LqedR(Vs5S(8Q@0!lWWd3{(|CKcs z*z#1_fp)mzc^c@EEqme{b-0+d+LDPV%*HW5-vyA4WU-6+R33xEsLw1Hvp-XiAP=n{ zhT@RRyNqqoi9CqSN>#s$Cb^XZXAEx*0eNjF+3kPbVjAktp@p2BYiRs?zHk)Pa#!QT z-;a(G%3>{Wq}d+TRDxKS1XA zpdCQHJAIBTPLcRgHLuaDQqmvY-raDT2AVh$t8u?C1QVwl*X~TTrfFrfbUK1m2BE=2 zU7sUM&HUwEF&yik~&rcec1JJm^ zJ6JB20?O>nIzWMMmpPntWDOU#EfIR2x_j^8_rRcLjmHNkyd1S{3q zF$87r=%*x6;~>wD^)(118k(pnAM=SGYL(gZo69)<9Lnf8L8>Qra}m|wMh&z6>**^1 zFWB-7I(6!fhJ6sDLznuS#^-^Az2Wc`IjEq@7)$K!KuM~t?{fh|&wy8Jed?nVh#l{A z74$<3!-qK_cvEmBwkB?&l*vjc%1l3@#LQA8^Z*1B8tp1w92;I)nOIkh8doJJ*~Zp%;rc=^99i4mkuYhhxV_w%@Hp0GhG=r4f~0hC z`1~Ozh?N`4=rEw%p-*qWD?`-#!SF1XWEt;#3sgsq0?+sBFO*`k-t{pXniKjuHweVuKV~F~6`E}xENUzOy;-gmk0FZ4 z=Zk_6Rrj2FdMR&{B8e=0OJ;A&M`i*B>~N81_kxAiDBImg(QFg7IUO)GL{XThr& zBh@I8$l-jX`Hplav$F00yz#O~zA!fs@vf!Y4g4@ArZe>i7tSs9vV_amZF@KCl_Hx5 zSH*I$7ekGVt`_Q$2m}$Um577hI=|Y!U26A`)R=A+#1$V;_(2_A=C~Z3Y5wg|eIg7u zIwP2fo(}4={ah8OxxQZ$@){2p){j=;6W;_K$7_l|+F;zV3oc~|V8kp=+zSMsx3fF# z=>HD6Tp)#YC=P)TN*UBCWgc22K7XVg0rS8Bj+Qn;KrvuhE-0sBVXG5z^@!zF2~M&q_joB&4?(&kDOg6blOdc zMDN65PKvbxRk3644T|*99;KLVvkQ8+WHF?sK`O=iP3{E~!%Dd~>PEpCD1qzXwKP=W z8!6n-7%u~J0BN4MQNJbVV36leCxcMCPe4wqPD% z8|ZjY2#Z%;&ijKKo;Yw$!pap<;nh9-2ynn!0Muc+{OYOsEtK3c9Y3^OOu|4 zK@VExp?5Rpmh|qCthDA4TG4a~H_#g0zgnE5Jwjm5vW9r7u^p0A@-#W`E2=_jlVI2f zUW*rX$T1qR{J9 zfi?hsl~YF|R~e+}fl88Q11ddl4w+Q zi^?*^efVgc4=;mlPBtUo%s&Zd{sicytSGGJz_rWfr_YcFf8$2wCyDC_-VRhiWNuqS zB*R{USqx}A1enB}ade*B5T)GQb9JH>H%!{$Qfm1FvQ`%4bO@?|?A9P{Sa5m(O@Z-Y z{2tF%>tpAJpn(Iuu2UKZe8FyhB_D8GExjtm-YEAo|6w7d9%XCda|A)CGh9+yj8Hj(S25 z*mvh0S>>u1T6zYtM}kA9X(?8>+eEF7cZXo$H`gJF?e5~7tB9!vKn?)hTr(x^#ldcVu7uhft@_&(VK%LP>+(A-3d&Dwz33Y9R_(Ln zTSgaX6ArE_$`@WqgGgeu$2`ABy%%Js_f9+kB{pQn=;_zTs4#J?BkADC&9BQR(_dwO9hm*e` z9`9!wV0{!0fUbT?qWD*YK2K&20!mU3o)yHb=x|eE;Is`vg%WN@40vSp5FNAze1k-F zvhhIi6rGnwl`< zX=Ce795jwNS(cV`B^nrEm8&{Z)mUh$NdBx&6C#>2z|wTi0-uv9j|_8Z$+RAch~E>C z!Z)0ZRFfQwv7p5C@B0F6rbE*2zpalpJw##66qb_6*0=o_Q24<4xV6-^WFlq}-8mR? z!WuPEP%#!=-?Vk@Ab>42NUR@0X(isCp2XF@SteD>Uc-cpeL-@vwuuX95*Fx&Rzz>V z1;axEaOQ;9y(Lnd%@c+u&(d9;bByokQ9|34@bZp>p-YB9tg^?ep~rz^OD1YHG#hJz zs*_iSd7*ejOlnL_(%;^aVe5*_{)qFVn!6lB>Ilw0)7sw(c-mqDG~q$n^W&$y7*yr7W^OSB=p`FmHq<0%W!JR9 zM$RSV5@|!bc(V1MfSjm$7%!c=RE=5S<|+6Q+JM{8w`7Hn@F3olEVO{PJMzd(ZsYk1 zjgU|4UUYb9r#~~Vc&~-b5kcU}ZXNlqzE_aDzH$}>`P9ASQKjrXC6@@a*0Sku#er$nrc3&kNyzRPX)1b%696_`@d*!Qt?G{ z-KT@w=(GB?>oKJvX)7ilx4zbBlK1-2b~4^rc_4S+#C$2x_GL=>wQ%OPifDY3wk@;3 z^>+PW0aT6 z@hX@c8>^qjY#)zDm=4TT91p7K@lPIHGxRXl-XknjH4Sy-HVG2V2Npm|Mz3 zFj``+>FmJJHUOzq2rvfRKw+&Fs6T9d6P*xRZS2_c(LtLqrvF1f-E{0u)D9q=d|HV+ z<};Q}>8i54uJjjB>5JFc($q23o1lM)F%P3=_9mz<^ zPhmexf`3?975_z%Wxt&|sAMlxbKRuB-a&xMvJp(`C3Fn%TOb`D=f4_I3P;Dbr1GAG z96@~U?RTH;%h2<-S)R2_tf_6e!=LDhF9wlFUw+4_0?Y+@opz9`C?OD zgsr#<29?Lps&+V~acbX}9$mjBa43^ky18&%?><|WjZ$;0a-?uzQ3r6J4^%KW`b-nj zDo747PtH*6uA}%3qze?GC!bTv)dz+WH#gY@!aCmrEmY_EUJB+eAsB>v!`6=eaQ^x| zLf^UMA?d~6-N{Se=rdsOeQRO2lP5D4Mp`T7?N;)<`*%xZnauu5crRipv)1cItRE0l zN|bf@^~8zAnFYq>*#ppazfdS=jz4Tb=@{k3dr;5aV*z!E%|mActFUQ;l9e49v8Kvs z>C-e&nK>E6xi(#5(~7~cMZNOJxWBS!=Qrntdb(4s#~)hc_KpJZc}PpJa;}lEnruGZsAQk zcN(*TRpf3JSs(ut7GfhG6)2|QBGVUioCGegG+ep`I6SQSW7v3NSldIDR=$YgSY~z1 zyUg0>eZtATKULbSdh@l|E#dIN?7636bz;}ob?P(aL`f=lVz;X6MAGPlP&rAd#x8DH zRp1NyZk5cGD;2c3Qz-Prz^KzH$mFluGZi9gRgFPGsq}<3a^(6<)e8wT_ ziZCtymPFaph}|9(l$!ei3LcKx0~T%mIv~H-T%R2}p6^Ah%U@?0kE889kisX{AQ=iy zZhR*-3+jmQ9g*mMJ;z+kx%)ijmzs* zRG3(84RFErg6Gl0t|C>Og3-8dzBxs=4T0|KeGqP2!USg*)hbMe@^TM2n8ViQ%{LnE zG~=Oa@*SK-j~8wuUua{z>5;};hd$gg>i*(zGI3jZKZngQw1W`79*0xLswo^K z`}f=DZh_K^9CTR^Pn7t)``r6C)HWjx@FO0W?>Jy!XhxtJPH>^Nm^g4*6hOMq9KtLB z|8MQVs;sJ!D_jpBWuCUOfFhxO;p4`ri+6YUe6W zGK^kbqVnv_tvpo!Oh?VnbOHG248lKJ+MlV896Bkbt;8EmCmHS(H@9O&P%n5&w&+K_ z?+>9lVF;P1j>^c)Eyue>4J1@}?DObZ%OR|FbgUs2y{$o=u=5!f+b&Fkz0A%n(E`{r zC(mf-o-g+%{z!XucBface%{wAT*PVFk}wi17gujB`&8gbTxB}A8wa@D`^9J^pMie0 ztp;|d1P%qy%o2@GR^X@iWYn~wf&LQ{DU?e|rX)S#))pT@RW^dkX zHX?7@Vej#=)yCqP`}=I>Is>V5w^-~~KI-I1jT*rkzcpBXE}Ju_A@!cLM2rH3`&7p< z_CoAyK6C|1#C@}sdOm=SGOaU?`p=_+U9sB+Wb1y6)^D{e>mhXxrW@1d4J?%V(lll_ zA}*$~kcsR@!;Gj-^Q{os!|3VhcRRnTT+cp5?2$zVGp?9`^#$22c5>7zygZ%wj(kHw z>3sQQa2wsYi#{5JdAL?lq}b$MxI}D2`^~s7r-JZTH#t~8>gN09Uz5mQ=zS+NkB~Q< z>2Ld)F(G2*oeZOH8%IoV06ns4_;sSf;kt z!Z*@W$Eb>^xvx5f)Z_hrrYXD3?i_V`sPI&bEX8Mu<-@(>!6ILhT&QJeWP#Q4TUvAv z)Ra2(2^ib<{}rzWIG%ay^{GdtobZkWk`kng;i5J{UC2n9ic1{6zKmp0CvZh>^C-MU zA0rm`yvdVhbi@G9Q}QJ&B?StJ9|=QIUS~kTM|=_hY~hUO0JIGGaPL0ltb2~#T8uwC zez@Pq^qoSeNubitUU}#4wLR=29C!R;>H^UA-`o@|MAei4VdE8JUn|xUj{A_<((-0i+kxo`ftfhvEBG~wm|H8I}}WW%iHX>CgAsb_?;8O*3xwo#`P zwW2j|1%DI8q8&=FeZsS9OtMJVJZr~!UdrwvAvDeHdLF7SnD)4R$;=y^+x#i~R+qZr z)~U!M?xZ5EU5W&~CkLkivbv(FczF@IhO`66&fWh8VAQGtlH8`$lGm$Jxc)vb1^M)% zTq=MrG6zknY^)vlZ0;BC8d=3?kGS5b+Zk~iUo_SEv^wXe4mk{TTXs~ng>YJ34aPbo zUPk!!5YScQX7Kxaw57|lX>``cy!*n^7eehU(D9U0Cwgy$`*SloBW~V)gexR$xaXprOm5wkg+0@h8`C zYMh`$%(akFCueV9U&dnRuaOqp75%p)B8pxKR2-vx(||2hjgpvj$yFzrXyA=#KFj@B zVeo0pSe2I}p_r-7Gv{3#X-(ZR&+8HAmrv(d0P+X5W=oqD;Ncg~QBxN$`3NyqAR^EEn?EbG3c&{wHLzlrNB+7HNV)?%ltpeP$ zA^_1udS|W~a-}{q5NZsJt-X%-IqRv|OLYQ6tUp|Z)Lr2ngnxqCi1fdh~p>O+HAZWXBtT?H3s-2U;)eRH&Rby#X zv3y@AeXGB|uo7$;5pEgyHLd=3w%LncRu))5tm+_`2$oW|NjfOdba_(Ws_NYcodPr) z?|&tN5yZZUzEs$5Z`-GkU+^rat~-<|3c2)piSIN}A$_D0d6oaeePYfL(W_H9k?rEe zXp*L+kfOU9#wAg{2SNu~@QxJsa_MOmAx}y7WilKbIAQ~<&gTpECbZjdi0upL_3kB{ zp9PvQ_w~O@8|IPBU;?zRiT*Gs>BSPTBeJB zrCl_7$3Gk=+}2_p6WSnlh@`Auf8l+ZpP|{a=RcVqgGTQYE6Q9h8LYmmX<&S$ujLuh zkXctGJ9dC#QDe*yhcN1@3w1-Y7zE+|AThNh$nF$!eO_5&;5HFr8!!(E`P-2jS*|UA{?^G z@Vds%SWjU(_!H#n6n{N$7@+vuws&huq`Lb8SuV2S#M6l}mqi;*cTHx@FFR7bg$pB` zwb~=*wYyr-b88-rKPcP3Z}PV53_h*nJ^u)Z7=~ z;pJjdDSC#Ya1di+2SPKtdxLE=DF)9D2KQ`xrG@}U0Q|^_%ZXv*Ev>`Uqp3I_X+oPR zlOxc@lz41v`2sr|3}lS|mg?x?33de^QSeYJo|}QcX@{{Z3Djl;kJ6@CQBbpy z`O;pT`5o&=(7?01Uw|rvOXYV+&Bhol7GO>rj#uB!J}LXqE`6%aXJk6Hmn-D(o}%F) z4}kOiiS@(n?o!v*(s)(V*6#=_$zkO>c6-|1cD}ck{AO1E=43;|^#GyaHs?xr03!PA z{B((qu4AlALvn0PwZpXhoY4Pgg4p7=RTc#_5c7CN9`zOVLa~JUWP~uNKFcvxZaI1t`6b| z*%_~YUVJ#aoqZ<{j|VPKv2vGK1=C;GyJ?Q=vhO@F4q9_%onW=Q4Ds2uzDX21h^;l~4q(?9UA9%GmV zOzOJrnJZrRaQas42PZpEe(QSC8@U4N#ci4G&B+Y9l>kl~oAtQmj%JozP6oWmO|ji(k7M{V7WAw+OT zu>3)-?h~lQm#JOQFWnGK2~|IB7S!-lH$zR>9@-)(;&JBZ4uz=uS8=SHLuVKjL4JNJ z(S)4%8V!NS=hiLf-=0N>(n_#>^(lcQXPA&9UY5hfoo#)r$*?3bbV1a4W$b^<3i>kE zjb#ysSQ8tLRq*#IS%XH)gu5Sk{@ovdB?5||ZJPrE4-UM)?O6cA2Nqx*9YsFWamR5< z=J_p$-TwE*J>8&PY^Y(Zo={89p44|V_!UjM)*FVq2+!YEms=Q< zmcKPZf);Z__!Ec^hi;Lk?st3CFW@1&b&`^O$sSzi4-f_{$CFOvy8Rg%dHyyBGF5Jv z7X=Gn^xe~(PYtJxulfP}9_ZkQ0*W{7qg|03x)|MYSIhk)8>P$76Ei~9I9Ym4=t;;D z12oX|m%M-lJyjQF%hS>TY=}_Of&54nlCd?5ask)^X)v3<5IL-Ldg@;!te+T#K|kQk ziMt*qOVFCR9nA8LP^u3Io`lozT3xu%dir_*JYrt-djkO;gGm5q(rMl*b)T`o@ati* z%MCgL+RdWp)Z?cjoUg!~A-chc;wmm4`f6S(H2xyAq9a#DH9a1SU`~anP+?wXY}*t$ zY@$8#gZZ4r;xB-UG0n<=<^{~q*Tg|Dls(*;=h~N6X4kydj`6P(f(y6Gr=ilfL5GJ< z|8tIEyPX3RKU5GnAuNcU8k{2~ z9~uv2?F)qlf^vkyd*}J!Klol)EYRsYPZWFnN%+5SO!Z%J-amuD5s*Km35ZA_E-xsw z6a;iMr2kR`fq%#NFw3JOfrOl(=-z{KVt-J%R0yC_CnyH+6wr(l6z01HjPQRf)Xq?! z-zf-+|DlSVp~T*)F3SI=QWPnW|78V9xcqB44$Xhrh(L8N|I!68|D!-Cu26#S-n-l% z3VSZhk1iLx{_|uI{*Ya}Ldm?#M8*FDIa9_&(LNHSxc!qIO8w(OJ8n=^c!hjmU=uXp zV9Nj1-+v?0EBhY_Uy6bZ9?04KUmGSuKPdeWEYQ&hMH2Uq0x5a?Yu01=ha##B8?@%} z&q;9egBssJ16et~7r}(F!+i`F4D7%a3{2*Kr5xD)2-fNeMU5v-00x#A1qLSaza&>r z9}*@nDE9aMfv`dE>mk^`Z&~4kX1t)>-nSTu|HJWtz7c{WfMUG=HDaCogS+sC;(M1Y z(0o8!YVeP8gQ%Fm|KEBqGJgo{-s%5z6%BOn^KanrSw9T5%-}>Hh8Xt$FbD=falLnmC-?)_2K*}oMA&~rR1kL{6z99-I_86m0)C`KBXVe( zjs2LG`Tt9C7yqGspQu3x$p*Zql>q!pOIG?}$OJ%fzsGd0`+!J6|LW1+2oeo~@_IMq zb^gb|3AzY^5`Kray&v$o8yo}V6a24h*x&xcaf4Qa|20`@=D#5-$T$S*)4N;F+pIiCr2PY5;CGajeT>pSIp-{5WLE!x-;2_dta7GYK7!=(*=0E$tI4}%~ z>m4g#LVVcYF%0M^42t=k947w1q%si%JV-hGpJzGMKavWR9}Y#2=ZOpk#=#5*Ci%a< zjuo_^t#Bx(_Yfgm5TGp%2r`gI#J^Ua@q!8>pm_26;lRN7X~DqA{+C~=5a==j>iujv y@Di#2=x{)Uk`Ra>U|9dle};X%S=$3k+Mc0#0kJX))}Lrp_`QieyMCmND$V52PeVah#;ZQow*u z$B(>^clVt{-?gNZjYHOwa#dIBl zJtw5*cc3x1T&w{bSCPf1D{_kScuGQ^w_fhi+wB%_PZDmH=LPxeYW`WQq2`&?K5#8y zidrwveR9r?;31KEF&K&ne+<(4vU6q$h+AJy*#yzrl%T$Lw`OUHk_WyCqLnj^{ZKMt zYJ4Mg<()A%IIN{Be=T=mN6CPo+y%MfB77*Bv7pzXR>9bEmDzH&G%Y0~0PT~_3S8hK zf0Nzb-e$I-WbjWA)w~Aw$%6jl`f83AzrFv}w8(KEz@ZufFL~fd80SF56j72kOb{)> z3ny)Kvd^Y*0|;e^xx&HeMc7gJTU!>{CI0@72YUxF~rRb8v!bf^EXJticCfTQS+WiFQ`0T#RV=L|B z{Lip$ZC^F4G`Nys-7N6~HGhlXg>mq#+`p4b3D}une}Zw(W}tH1uBGs^^64y$Mht~k zs3w|zWWP$e$>_Ly+kbn#H;tA7ZyGDpXgC%(L9#vM*oEI7T-Xa^fkkmr(%A=uMvuKP zl6)Aos;Q*zq|w<&^VE%j9(@+;tzZ2O{lm7s- z8wUXf0b#Qp4T}S4dEp=8$3iRk!SAh!=3sw+fv}GcBr?*7a~ZnU>bh^tWdtTcG8D=< zm5>)t(YvSIy;icgmn@|K!y*Q=@TVkV#zn3v@GcIXXg|)?nNWs|?UvsB-VL{j(^gT? zq6^SUwSIlGGkJBdlMfLaf4k|c&h|`O!HXALDP9NI&_=8r9riNjW@a;4lzmEeD|K$I46J}la9vSUv_&jlYkXUTbcjNMDCjBu732edqnZq%BpuX$)`OT zt0j$I2GtnKd8_E&zEQ9F^!H`Y?d+|>SyzHb@UEY^o@Bz#lsiH=z z$f9>uJ(p@qXin1^y1d77MU0t{TUFrgI>*M(@s1i-QZ$+DY`vxaR>>5#4x$h2_&$+5 zo68J2d3$jo(_)TsryXG%19^L~Da5$6jq1REt5iCD^rTvoR0?gVFq&LvD9q247Y$DO zD!4KzGIDiuZk=DQb{5^)@J*5DoT1tx%jw!e{$@rMX6I5ET$wH6vM_mJGF-3}$qadp zirCV;LoN9N)sODc76Z*L^KIB6#6TsRypXHVpL2eJI#sOPdV6^><}8JjQ?22Oaz3Vi z=?CY^ZfRiioTG({hI%u@pL+lRxnc`y5GG7e4tATIbj+WD;|4edflH`2?#Wp)INoHU zkM%QnpEld~R=PNLwb|eu-e)q6iPVTXxiN}~=@3HToWXmW#49w4rP@6|-t$&`<$5(s z+-h~TpaMF)8@2?4NHdwX*B%Nn&n97ifP=C__A)c3iA^0&p)NqP(9I1_yT-i6{a&kb zOcrsZ9Da>xnnqzBWK^3FI zgvoj1&eN4OzlKwHLu_pBL4^u?*`V#}FV1No>K}xnfmJ~ zE&_%Y|5ftv)hURAbNHdvUwiqpi%@M%C6&SejvzR^2+nik0N+il^jYWDrx{DQ3shyc zxAIz;#MeJegiRm`i*(wt{OD0D@}N4kq`ME>WUtW(E>|=)FsCM+!9=RE`9MVm+NzM2 zfNH2|PVG=w|mfl6;L+0SZ}6 zXH|kO;~}6+-(~6_Me{v`Z$3xP9~H9fL^>{7aiWe!`rW5T8mS&LGpwN@q}m~n?>{Aw zZS2-I*dv?a)?FVKdNcyBvM=b|P18A5OiKYwLrOL7GoevvX4nEDM+Ih+-yR8n`^#=< z4KHzl91fe~VKf5m$pOA4PmW+_OsD>FD;|DAju3oyGfyqp$6ceMd0s z{gi4Zrh}%g7Cc{dQXx!VTHZ+p-3`(eoT5n%1_b{oDA(6hAr+oejX^U8T>zF%d=iCm zDutm;gr+(!hw!lNrw;(H+IkOvz(N~pSPEk)IZ^?U*jjktOxNchEbLhlhGz+|f|Q0M zC*2L-RzUZQ>1}m|gG7w718=zC^J)Jog(sBj&LQsyoA^Yh{F&m=xNXu&%_@5MPq?H8 zG`qux1_8Zo0_dGrnpm6308UQfNu1;aVg^RSoPI!{kji{*Z?#k=$}7%)Y>0{WX&)(# ziHxPrN_fJC$GP>LC^SQ8-a$!84`S+cVgIZ*YWdNsDQZ={vSd}A2BF(BDTOB1?1f|* z&@8iV+HGy#i%x_R}5gYQc}4y&^>P zcd5UVvzvct_XpEgO3tm9E1F^?SzFS+f!+&52)PPRrLr&j;N#%ee((Jsbsvkm-7)j& zsQqG4H+uZoi$8|vSq9Wa4ohZcK!MY{HE>BY%u4i?vZGCieM#?s)=9vVUdw;|s3(98 z#o0!K+o>-?cmE*Uxm><{%)!6Ob>$q{BD;1Ihw;{hy>$b6zvb1ElP3!6VkXf^(T_|t z%e+GHM&twDIxlZlZq3cls&4f5O=>^kB?B-sC6^k4KLffGa{qH6G#>-uDE4Wvn{JIU zqt;F!X>@v_yFT}SZIYBDRmmKjS{d%|F-NzS%G$GmZF|h8rs&`!F=q04VNhKG zF9s_yzOdxjqnZ1?`@O#aP)h>@m;G@B8nYlGbQDk~!0NBa_{RLG9T+IQQKwpmW5mhH z$;ne1FO>f81^CFwH{{YBesy4Orl=ip|TE7YB#R79d%}Q15o=c4&ZVZm87c7cNNIDjaJ4h=8a|3l# zwSgysVgtJ>shp$BESGJ&FXr#E(#R=k6+5B!vnuNr<^w%T(Y}4zplsKFg->y@mcD@F zmcF)3X2vwWIVG=cYt&nBH*x4w$KW=IPqxIiskJ~X*H*)uVdCsTm;}?`OEt~Mvq*!f7;)&>Sd6N)AmN%&|hMf#H2{bLBXM-41 z+&K&~t=yHPSlnf{51g!j^?`SeXbv-#YqiheTHIB_T%CHd#}C&R!FCf?M=b6@^=-1$ z^Qj4yHClh|m)sx}wGa2#B@=@$L?#;W3y&ufzl#f8gTl6pyc>~guFF?L>-T)MjUQ!8 zoeZv-mr_jAsSCZGn+9e%gi#Myd$>HO*Qy-!nWemnj8|Ez)5xiRoqSG7%hCw}KcQu_ zGQ?L(ri;wc^fAg&&`1-Uv;Bz7C z^$PT@;3@nC?zk#&Ezjr-fULCx3M`J3BhI}Ouk{=hRj%bEoLDYHG_%JI-wC_x%4n$y z(n6Y1nWma19HX>=I>}PJ9!D=24wYAehpKDJKJW7m zVjy4aOB&yQLT+YyB7w3+rkuW1pOmaaKG@;}sUO1xyt& z&i%9D44!I>{Dv}ySIGMgV3Q9yw}gDmj=qLw@UlM|=+266RC<>V z|C%jX%%I*+%$6BPXK&In4tOu5i`nuKPeWBGD(U}!&7b~W0}jcfRR*wy|KPLc@=))? z%-;QY2KkDam$HJ)vp>W3!!Cwxbk!eUPI|M^`NdF10_bxFbvsN(GM-ZocSiaN>#_i~ zP4xWBzZBCo7!k4`_$^dClJ&{4DiaXH3Kc9xgUY8;orC4oMjJr!p?WXkb8(NgiDiC@ zk{JVk$a?mJ%egvhfLysM$<3iAx2~uCh@K51m|(&-ZlF~Y*R*@&c8RDNOo4)*2gK>C zAWy*H5GMZe6D@En#<>8#UxTw|EFGxl0x{%s%u^`x41W)Vw}lD!X-WatC32Mkn3PnS zMF5_i%T!~Pgh~@qq4`IetS@QwPV!0}#bKR)kyr%ml12)WZdHjgRL#24HfkA|is`0l z>sUm68Z~S^4E-yp5!->3xoLe{@XTo3Sk|bSu4%*?PG!7Jp-ZFF0YtcAAXznPyj@)p{yP65Sy zqjO()=52SWIiR_1X~+pAP#r#8Z9zo?4UO7gKa!*2)$yk(Xj0&(@@#N>3{FCUEH|5D zJEfJ|uqhv_9-N27ITZ>;8=rD+QvW(x0LOdK`EmEgl2_8x&7PMg?Ys8j3$=dnq-B5_aBy#6Ci) zP1T+v_YoLq2{vPZ6U(L+5eIhBCgK`@zsWbiCVbk4m9c$>O4_LtE!j#GE@1!ucsdGG zwqh~tMvIrl60@ys66LjK8~YP`P;MXNspe2BQq6RB{i#2jPkPtGtJxHVrP|r-2fbvb zN=$?7w5)xFI*!#-t3@nA;a7EkbO!F&4sf46FSo~Gx=C?xOCQ+||6f)E%;<_zopW0S z7qft+L>3F$R5fF}1Z1led-dsZ+RQD-v93D}kJ8MHC~sUNdqs}>B>kwfL;j4_Ev zFsQl30Y_u^h;#fofVYZ^bqZOtc#9$asDnbcF31V=GDzPp;+L!Rt(LNXzD-DgI%Fx1 ziP%}cPeU%0@k7z=ohN*Drt0>+JHdbD<@;pSN}iClxU1Ij!xTUoG)j*!D=iar9A`y^LqT*wVMjqg8T|$IaUtd_S!11E zxU@2-QmJyEhMSf2B=0$Y47yI!D0y>ovf}A_yXbmib0Q)ZuG3ABipXD<{)ILBl9Si3 zUKPdNqTV4_V_ND`s$k@@WZSgJlalw27V!bW!`YuO2_x%Rq3UMdL5-yvy2F`swL_EO zXLIV7p0?TB)jQe@ZWQ)*Z?3KAdU%P9DW?6y(!yr#l)D14ScCbYr$lK6_Q5&_(KmKSyggm8&h zROaqDeof+Sz{tOL|JeQh_%*r1g1UKSPN*d*VaVhlGUFO(|F}m34K`*JZHuyD3nqYn zwmV2V`qL?iC@;@{CYuyE#2~qWY|;7PGBFyv_ku0>cTx;ZeSi|-%pg-a@dDUj8>*ur zGB(;S!Z=MmS;^WW`e)gA8>DI|B8lq=@m1j-ToETEHELBTGghMD+d{6j>8ENqCuQDqm)b{0A^2n3c7_hjd85DCSGWUK$YCq(S&Hy0&uR z3&ofY$}5lqHUWc?e*a^>g48t{P$UwL3WcuZbSOOc3F(8GGNviWbukU0%`HzKWT|j9 zcN%k@BjY>Zfpa4F*SO3<342R68rpm^{&en1u?`BSqoU@!g zF%Cth_{p=eme~;feK+C%3A)U8sr zHW!X$4SNy^L^6QiRnyT*sfohx7DBYC0+*zJ)dB!7apcS*G@p#8BTPB?etdB;{ye(+ zfH?Ka#T_WA@wgPVSb7!fhnidu`@=!gp==|$MB`UZOf|RlH+%m2#JQ|D!tB34?R^OoN+*Y$H@)0tv#D>F|$*xc@fE z^1}y0+`t2idE!Iz_kRb?CwWKDeuE=qNh)&H#x)L$Is$dR85j}E9pFn;M=Zhnxb}?} z@v3|GgV*)NrmLB(pX@MxJ1ou?{jLccW8S}n(YaTFy z#LIQiFkSrJKu+7@U%n(qG*d6OT9!6#$sQE-j5UbmhEd13szt+pa^)&s#LE3`h>OE8 zk-8>wa>2tJL-(c8hu!l8iw!`rf_NK-fRb9XFHtSS!m(7!V`&n!a&=TZnncWhDsarK zmZsEOV}U50Tn#Pd2GC@?NZ8-D((!l&{BX>+iGqp~MEzS9t${tTj_k zYE14}4__`3t)wMPpT`zpCc!Zq48%r5JUw*)&Cl#Dx>5(AS$qIbexMd`0%*!n_ZwY` zc~Wv^E%H6rrSpQzDbW5Y)r&EIJC+CJlZeIY$Pxigv_NieG?P^H$0LMDS};vZ(Lr#K z;9hO6yboXEGh?i}=+CA4Ij*UFpHJ0j6$!f7**;N;iJHB(H7V12*+bXoLG!=0fqbwk z&yo7In3vLG5!64G`D5ukl7-AkaIPsT6Abn#gDIa2_!s5p(osMvquWn^KsL6K9vA8x zm|tX`rVO*d5^B0CDqPjx^E#;r&7wE;4t^ zX^sD=5gcc^RoN{{3Ky(!qwuPt5n;iIFG5D3cHIL>`Np`tK#AnC&Q*~o{p`XlkVZK# zQQpsSkFo|BZl(6w@Cdbko^k_CNXE|~AA?T4K*+N#hkxIpG_5y#LsO*qRc@u0F@d!e zcjN%djd@BGB9$(xVj1+WHC%&gQsHdeblrH5Rp;8!xNL&PNL5?v?x$Ywpv|2KQPy}6 zjUNlLtgUZ0KOmsh2IeHKXl3L+lAw$ZddUVMvp}e}#|W5HG7s5*eR^34)Y2`KBZ^#k zAw0qEl#ZY<=pMp z*AkFk#y!~tQO6>GS2%)^RY0>uLVKHH&TweqI861U@qA}LW#RVU4+vxgCZ}ZLFVDsO zdzz#$`AZs7@XnH}nxW@?FJ`n_zhv&E_Z>;GaQu&quhwaY%uzE7VSOEJBd_}kgDd93 zRG??`%wkA0XQynQ)p2DC>^4pxU|;g^=T^JZq}?w~+I{AKe!6bbP%aqRo2CRpuGn^t z_2i+1Jr+;O0_HfVml`Z5SF)K&B-91V<|DgQ8`RJz)nae@lnq^j()nVmX&~xJSY@f2 zglRZCqNK_m(5S-xvBm(9J4f#kcv^4YbeT3~+>;7(RY05Rz${C%>%sO~1)2nH(D)3^reR{hjF_s_-R`j4mz45X`k&2^}0=0du*BnYlDjz0%-D zYt*!EOnUEZDC*E)2zx16&5K(;6hqHJsMTg zIuv>gMVH!MSk~j}xDCTp2*rL{7aP5B~beXD0KM*2nn;^AV z5%BOv_Lt&Nt{Ty^{MK-$Ld$wr3Sqj-r_?cA)1|hs;_iZ?UfSHj{uX#Hesw zZ7Ia#3_v_j$X_&){Y4dZ&l!l56OfwKG699rHBU05{x%A@2e$+De;86CdE%3w@)_lh zE8m>v*qouMiMYkX+!IT)OLkh}e&ADId#>((zElkw*-$l>3*Bb#`t7>oUNP3rU9nx) zf;%WlA0j46dWqYw-EDoLq@-Kfp@vSmMaSI5F0b4S`l6esIj}qC!sp}!?^>4fBCE`M z2Mz^6kR`s5n?xuIUiSKMPyt2dkU*`G^iV|&tuMlFQ|S*XAQ=v5z?A|W8N#&^E)3a! zf~B5)m?xBRo<`oWg3S)Uk-TSqS}N<8%h7CKf$9+9>JUNeAfcx`(uU ztASm`PqV%?1lL4N-5y~-#THi}l;SFX>gvIjnl?&7;Pf-BKtIgcu<4vE=ONwm_OhVZ ziMX7C&KAv+kq>j}Po;=67)>V^yb#@(i!%AFjurChkJFIuB9q{#fhP za`0@f$DbQcC97L!bGNi&=@U#3>Rar)S>Sou;Lg-v8f$%OV<#M;1v^rOo2j3FY}UU# zce=&+Cx1K~bG6zf7sG6Fbi&eYREgfNXQZtB7o53WZmLK^7TI0FEnReDcV!>-1F{At zgX-20s2-WgXLs6AGiO&FYwxb3Xsrd+r0}S-&WIB|b4L8}w9|2!A6F~#S!W3!ReaLH zqN$PFPf@PYpls!b)VA^+3JTbN47ZSX_i zE?7`ZP56b7=&NnBGioW|^)XA$P%z-#05)|mo4xMzyx8EfEEm2%h@v=uOwRemcIgx9 z_q4#96uFWzU!iXPj-K< z5b;xW#FXl+1x8Av${7YxY0V54bGn@6h2&#mD=9Ntjgvx@Cu|klzVPS2q-X)s+WV_k*r{R1y{%LrnRbue9o_^zZkc^`17pX z|Ai6BD7z#njdMCSapRQV;BW*hx*f%u3$ygbjnv80ZIitjXGIPDud{*m@kquCN^e(Z% z4OxOIvtR|8O|Ud)J@3q?4Tn3eiD)deEGK8P-{p84W}J$Rl-psLp7Zt$6Xf58WcVW12Kx$7g>Xi+`7lM^yv zDKHxuMGX^w?w7sX6T|ph4oGNasfqsYfBkFs^}ksVav{h(w1v2Q zK-E&1R-5>OCE>RzVH=*3(bdK1YFJKVR)h~;8i@`C^5v4`8WKWfqz2H1lg!;%-V2DL zfOsM4Zxmaq5V$WT(wSd>C5|hr26A14`T&4JC`A^3!3f02j;MJ&1@_)y{ew?Uc$qtF z!?N)+wuwYcV-9{i0eI%1Pn#x0=a+rE0bk!x7W&2eSwEa~H!s%gPyu=9p->YtZ|@-S#1Oq}=Bplt3R7e6@mrI}NP#Rec(n$^ zcwa}n_u>>e;Qub>}pdFK=|Og z;{i=6vivNDd?>A=Hy|4A@`hIL6g_+f#IDpeKe{bI{}4PxYdM5b9MIy_lYNZNfIf$R z_C+mkxw8}hnjG6+gtXS?veU3rhuzH|lf3j){d=+l$t~y#uZ#;%t$BQ5DK%cDJ*~un z)Srs2lrgqE)R~O||Eu|#RrX{T;Eey%*_V+QgH#UXWX&BJJQ0F#HVuqC$~!=J@un%T z8?X~#F6AsmG)3=NpF^l2%(P9SSom9i7@WF5pCE{L?@k~rg@k8kT#o z#W3s%gQ^rRxG-h87m)7)x)Z4f%XxgDUX1$W7a*mr zS%Mj0+aN5aOQwvG4C=MB=@>QJ$eWzQ5dFieAwj(RXlMx6x$7a%f^Vgs@P)FW# zX?4)<4n*8S)^{i&nyzVxrazg?1?#V(c>r&%h>?`&0Bn9)Ac^jlX3=P5PCM$o(W+ne0)#lV#aV7WF4wbIK z>}1ePgQZ>k%$gPzSQg8FoG&!H-0gO2M=jc2oH@KeR5(7aUqIPD)EHP@uBxKrQEiSY zOVb06p`vfJ89p-&KZ-Iam;0GeBs0FrxNelRikG;Fx*xJtv16z=qkRfA@8dQpSPlP8 zd4$GPphVW4cMc89=;LFQRPTTzQT~oGy6O2e0-nuFI^>!`Ffb2)SJ>h{CFo6rE;_{Y zCh9GhJY+NNQj`ZunkNO+wLAAfE#w)sj&Gvy)rt+@<5s>bybf zORrh$(-xK6S!2_Gi7baI%cbF;&I#+Bb9ov!>GdFs@pg*vB0v8J{FEWLqnd6-74J@0 zC&w`V@`Ge2Fz&E|vNWJfeS@AL;5(II zf{>eSR9tw2VwGk&$O(+AGp5$`EN_t&kWqFLUOHp9nshD^Y$FqCkry!>q)Rn7^FoJ?I^AEUYcNCr~L=&3@PPxtu;P*hEhFgGwk*B&oLJfz;bwSdMBjKoqC+mwx#y+wj{uMSy!4;?DyPTFQP!^pp{Rw{tc zygZN$!?ulW^()ScYmUM!@R!LP_iF5t4OwY_6iOY&F~t0`SWg&l=@DiD&~?psjjRAX z(a505ZaQ)aP;myG+(Qd^SxcO-p(Mm4Dz$n3mo!KW>BkIG&OlgMu?o_?d|8~5PSfvz zQ=g$<%`T0%)yY{~?mh)G^r%zXJ=arXIUyx^GapB@7hf=IFYLMRWw!|xS6y+NDAvV) z$kRgT>B-r(n{QreUGB62J9fxs46$qy#I-F6Re4HyA`1trAUI&4uv%vQ#2TJskfHC z?Kuz+RMLeEg=O(B3mYkwFx6?&I8!-)$WcI(ql3dER9hw@^o&g8a-(n>o`|4Y7~!EZ zC#%}a#X+PLX<4WVQq~;E$J}g#lt)mHnQtIPolbSdKmpD%nH`1WSb%hd>M+;|6QUeY z8{4wsaU3eGd2$gf2wYnS8h0fTD=PrT`UDS#BL%Gl=KwL(nHQzvuCP*&M^r0+t!h(= z-~m1kAtQS7-B9~lJVD2tF*hYD<+P|xd+PG@9ySYge ztH3D`d8rQ(qczk7h_lhcKU|3{!btjExQeDhzfTDoMoz2GI!d)g6NC(;%{%Qy{t8gO zvD2gWzOWn*D=@hw_M*5F2P(^h)!|lBgzHF62RK<0*IOBZr z=HMY~tC+-+Eu0V@ux%Fk8R8+o!WZ9+@w^hYcSRzvTyuG9YA0%^hF1K&W@h|Tm7_Z* zuXoK>KVHAR_^kHUT}87vmOxxV4|1O z0etxI0p^qhG=}dXWIl}&iqCs|xr*6rE}-r2!K1^&|AAL5@p+W62zoq?1&mgSpo<-l zaK>|gmcTORvzRP^B`}RCg@jMVJ&EZNtau7Oi6Eu{OGM0WQ$c|VAW?9@V+63^0h_My zSsEcWVopKOc#!~~${)`!u3cNT&1@m^I?#qO%hn*!(>haxLwJPXNby3 zqXK6W^PsUXP)B@fu!rhr{m0`1KLo zGco6>0D4CiD7ILJj0SK|;+RBY1$>GS&QFKE7u}0-_gR0?AHT*Kob|^Sr=t;^T@Imt z3s>FYxZk@Tbcb+tJ-oUcoqDYiMXV$hHyI~_c0R`1h1|#cFz~O1O3SNI`Fsug)v<$ zLkd?R@hR-XC`AZA{&?7dXFL(u^t=myhmRgUe7OJc$HTvO;Cj@>xxvSeA9vuv!OoKS z@5qdT&letF(r7Lgq2SA4>MeumEq~8bakR6;7E2xrMVc$25osHhBV>f-P+b6S@BeO zqdAFb(BqMy@5P$tJQd4S1oV#i)SJ_ANn`JvMQlMr9PorDe$1rWSpy_vKJO}+4k>C- z8b3=}7|<9Wb$dLT@_0capEd%2Gv$#;1dplLy-h?+d?8m2pKRIxjD+DW@!x%Ne;$cz z!NM)Oof8%{88Vi{^3F!scul)hu+SUu**Q%TGNb)qQ`>(G2Yi<60v^vivP905NZ#`I zo)A-S9H(@=TGAd5L+Te++3KMt=q-Z<4`}FJot$t#T~G_*`o=h#cXd*Km|mmShVyvb zydO^GPz`1J{FB@fk8!UT@`RFGORbnUXRPL7L>Bang~Ady^SXa|`rfBSvB=&<%T$a+ zOv$47POi%X$Fq>nW-OX{1A0fpqn(|D2e~o#Ly{ygCs7d61V|VH&J|**2v{_ewh%4Q z)yWymq%}jV&}tm)NN2=<*D$Vv=`;S`)*{k?Q(VXd?B^ZGs0AN(06=*)KF}y#$d=Dz zo-Xw}{G50D7oF_a)$nxk?7BY~Px=>=v+iKFiy9QARMi)m^t3P`)UQ zC3_wmz^gfxP9ZMx{yQ2+ESfzAk_ry^E9pQ&DLAxjnotDwQg!hPnA~z6QWC)=pi`2D z!fL2T*6Ukkk#@n3Kw|&u*b5YJzXO?_d@>R-i)PsqX%3&lGMJuI5i>uLPdiYu4cNf` z-N{g22GeVz-|Sg`jEAn7hs*)Th=QI@{-(eXa10T>FY-*gG$lEY5}tb%ur)lR2dJ$1 zwu2lTKvzq80vI;L^j|59X@KtLEd{!`r9q&4`m2+(gDygp>wpZx;hsXkqrV6sL0|(# zJs}x(pG69K2i;lUS^<`1gL$P%+pG@9&@L?&93Pk0)4RBTyf}sLzlZON>-Q66pv?#A zRuM1H5IG~{9z1T?^>ncmE30E=4Xa}KnagMCv7ayRXdJVE+R~+ryjI;(T1(QUoBdZ z-*+TtBoa1%eT~p+{RPLWW%lzJ@=(INxE!8$2k_f(m33_wdVN>wr5MYh(rip(D$+Pd z9F*PU#*zmTw9RE=@Lm9%L$9E~$(kpZGkW zPpc~Z$$@;)QNeV?1S28HAf*E=G4QYp4LraI`NPkDA&cHQ^#7lV`oFE0VDFvMw7G4i}7T1{cLnP?$`)_^e)e@2B+gw*`PdW<>qLjE?Bri6Ox8u z5vv>;sUp()C9kmuh*uyIllLe-sCRg3z=yY;^JsMB0hL<<}lha9m zcRU%Kc1Pn$cVZzn>0X>nM#G+rEY#!P>1234I4$AXm`BQlRI5`@$ZYi#A!k&SSP8Lu zb=rUa0=Z?2fwfrGjca&e-LRwa>k1)CqdJtGM*{f;)k0kq&%k zM9dofV~t7pIiSm!`lw3aI?0UMpEMeOCoHDE;PI+$f(R|fojmm1`&iWfCmFAm%Z@PrwTBt@WtDl0Zyn3qKD7;-Xf!2+$4Cuo?ee=jCS%)9Qf%U2C?t znvaE&98D2#{UkB<0aN1(vykE}tz|{Noq8mi;Ms0Twe*4Y!#@}@S(_CzRm8}cGEefH@_?^pMC^Ih?4F5dV zzLaC$nr+(Hpd*{14w3qQuLFO7Jv{7GopPJCbM7gtm*O`kwgT=Pyl*^dW#2q6Zwt}g#=`EK*Z><;cjZ&=>u^Z&M z)oQ7BYlK-tS}Vr7O;Lb<_Yk~OL|d(`WfMEKzKBGA8`9NkeUjxs6Q*oMZX`a_J{UXt z$2A0>$TpJJmImKad;k8L+o`p`EsecK2pVc?-C+x5Eq%f5)%2F3S7}5gV$HNNZ2Wvp zrCsD~H^YQy4Uf5UAFv5-5htdD8Hor|0^us^69^Sp!aFG$?C-{M2lC1OZ);C{R4xG72sc zL}X=eRfG#=Z+Z4WHF_%7tyIH>d_FPLL@IBnQ`>2^9CRv)OR;!L^NZFrx)J8itx;Q* zYA3zkdA7V|1XYc#(g!PDt@jN%dF`)=*5(+^ zcp4U8c`(lQ6s4=NNE3msMDB0Ml`+sTr#9V_-U%LmmU(}pC!w{ z$=147C&hy^3fz}V5NGKI6JKujdp;`#y=87AW75Xr-Au9@2z4WQF8fEhq;4a5Ux&Nb z@^n!b4}f#Ro-+u2lO?u++kS+PPVtNWgYoCr{b-xfLUb?KM&NEVXsvp0RYq%0 z0CeM+tYovN?H@}AGc!+C}GYZOnh zVfCD$JXKsUH?s7PMFJQc!{HGyc#_S3)eC7f6Z0crKm1Us%`CCG^kuND7!OTVxZ6N{ z!`^P>@Cu7d(DfXiGdO;0R##~3o&GET96W&W<;mq^=>76iPETp&gM*T>Rcb(eqmj?i z*DA1`&Kuf!>^E=UyaoTC+4-=15+8O);}MT$`vWA${)=5y1=bV%eI2pq&-Sl>d!tAD zFLpn6>iXVn=zHVpI}$;4=Nv`BF4!KP8It~VRHx<)OLyZEfh*d=PO2T;P`1!W0k=PcTP^`jc!exf`7(sz$u z=zO!OvvcH^3$;Ni9Gs(_~7LK#NZ`j*6hi{MS`Z!uYbhkEEuhja{+w#GKj4bWVCbUzc+J@=_ zH~Gyemhy0=X=V@d!N0(=<>%)tNag^Hb+#^_S>DV`^v-Y*bK4!V8k@sAx&Ng$RZGwO zm=ckn#X^8T>~@~bg$!xqC4>S!$b7QzceOWV)56ng9XxK6AtDe z%hw=8!=d%;9b=!9rMFDoGNyiK;n9PGYO-9PD=%TH50%UN?qul+p0Qb^pa zJUC-pRI3KH*!YQ=TU%%3=xZkx=cY1UBrOg5fNc%RiYcywb`(s=UHVaN4_%2MTRCtj*6~bOau)N2 z(zm99_^Ykj35I z-3hKCxVyW%y9E~4kU)^d-QC^Y-Q7J92(FJL@Bd$YZ>zTUo}Sa)bGv7%W~aLEoy73{ z{+8CZ?zU(`KZU!7U^^o=qBW4!hS1BF9RTVO9}tZ}aC9PYom0<4z4cv$A7P zy^eg=UBEXsCq4Rp;O>KC(8n9Xo4hCY1lg_7;Ti=2dom7$+wyXK=yYczgZKAH#`K+}-2k?+mB3DWV_K{Hq~ zy(4i9xAT$AR_?>m-OlN3hurMcGDYl&L;?$9_1 z9WXLwiJqv>&J$mXgA{MCDSvT~8BCo}+hS$A7k^d32oCztRu(6oR45s59kc(9z~P!r z)wr)GXs?sj|^Wi49++wjfH!VXT%dF{8rM#B3@}q={yP3^I=wr| z&tLlKNE*l1jOmMN`ifScG&izy!Ocka&B`Eq+Y0K6Wg}kum-q2l`ISv$R0afJq7EOg zI=A;9OkI85IF2%r%KK(3cJSJqOGiw3LupA;*DC@C!$w|1c+^$pXboe@W!Qb(q6-f@ zdXWX8p@B)=9fiyF1y`N%mIZNEzY=C{ubL;ZS8POg$;L&LE+V)Q1pb>7zA1|yKUFQ24041V%=60Et{*f`wajMV#5X9yd?f3`Zt+n=6kOkBJcUc~sv)M*f1)`{jO_ z8y#2x{XL<@%$bk8z)^u^vij?Tog}u63V`=8cDhy=Z#0y6UU|HEtsY)-~6CU{e2`aw%17vQ?`#qbUP`{ zII0~5ET3DoYD!t2sIE+Aon(Yq^-|&E^^t+tc8igEaV$&699#{BHlmFItd(cZi>FRw zKbT;nYJqVi9%`4JG$SzZ0&4rP-HO?&xdiFgEp)bFla{yNq0&%8ZkWkVbZKpVlPOs6 zw6{KQDlCP9`_b*}T^5%Jh7IOpd)_>+wALY(!@oh08f1RwBldVD{?k;6@xJy73>YdH zn1LQk{vHv+#?s9ot0pHi$@4mCzOHw zSeOC5yT%jC{L*&hd|A59>oSmuEfF4BvCj*qIvzd^j)>^{AhxH}MqLPT9|h*-wrPF2 zbf}B`)i2jCUtV9h1{sXJPT`QjiQ4&Apfcmwsk}V<&Kp1I?eJJZa{qXncJ&)m76P94 zhvLx-#Z`e0J$)%HYY=~Z9iN0f^puCX=4H3To8^wZK8-E3or92IXBVLQS74FzDLf)hE zS;Ds2)T+CZZA9!zdrFnUkyk3wC06qJnE@CnP{fSc|8VOqJNrPl=rLOIA`CyFCR z*lodxB5EKms(c^qC`dtsOifq4?Ekae>n(^HyPoHR>45dJ!mER4I76f1J#x%GB}e4geTbIaeNi1TJ{dZk356P#QwnkygFLq zOGc#2beO|n#@-EEaTV5Kr;+RjF25q-GlR?~l=u({8=*a2yb93nv>f{u84j?ilUBUQlS7PB{QEq~aZkU{;DxT{ zR3<33wm-_Cp}{8p=3>@2Ewus)lVeaOxwzs^ep?b4!@KTe)+Y&`+8|0{fJvdYjf^89 z=ZUP}SQYCs?SsVH0?&h(jo+(LPMp=b=gp;+XP=SzfgcTfKUkwZMs^=G+W8If8<+g7 ztTRUcUZQv&YWvPp1VEUog!A?z49K|dh{(4vd3~j zIY7CMB78zoT2j`SSb1v1KxEN5F|9^b*EpqIz%0#h}<=E+cg6!FVaM*V^Y!u#DXZYe>RHr&MKkQTmfbY{`{t-e78@Vo=X8 z&ORrHjX(c3ytfKL=gp;1=SF}k${AYl#TzqiR8I6`lI)0=?Ih=uQXVU&q4o#CiJsR6 zi>p%D1kWxF^hBrv36DYt2(}qUwGverBx{gt0P?spF!HGT=<8X=y_M!ibu(`F#r><> zMGz{^&VA?87+8S$g*v?WPgEm$xyxWVi5O_&OpMQlm~4@vR*El}CG;p596}Rlp&_FaoMj@qQR@3~v z*G|R$QB&FD=+Lb>vW-SfJ0XBXf*hJObZ`c6IYUFg@^Fwthq`Ty!$FDA%q;v_sy6#W z_t!S-bO+@8(9${_RcqH$#)mKo5s^hX84jEva6<1PrX-VD^_7GyD=aZpNwz&qGeaAc$86L zc{VIno{JJYjJY3soNNy~Na4vg$zTQwVVnq{r)<^AFd}m*R-ZR4GHGQqvtg6EDN*6E za{1tx(v_d`4Zsr9Jf`C#LQI$tpwb40zRYUB)e1-e%S^fI@A8iUIi6dtRs+r$s)xC; zzbhk&L&g;Jy@D+JY|m0Q8|;--QO9l`CK@&rcOsxm!{%QY;Rq&blB(pC7Q{`4g7BS7#Y9f zl)Wh@VjT=KK*+TR#IPY!!$v5{=cr8_GfFKiTtTZ}PmoEC-zEJD&#PW@sjj+&)S>(s zOwK;TN&;S&Bu0|zM-i*21S>Gfr6~{T1ngF3lShL^t~=|t&cfc8ZQ;8s`D#?twy zk-rQWna7idt$I)wMIh)eUiFRca1MRLa!>c%;?Q>f)b8FdkY^=(9#)%WtnV%aaW}pB zx0$5C&dNptSUyqqH6B>1QoU1B>iFy;_n?AElrD0huQyJU)UGv9qjx45*>P z#9>fXyuF?xVR(~qK!HZ1tr#xlnHnmT@M-7Ft;iVLh3s3{ZgzZE*L?^P=R=l=eBb97 zv#iE%J);{%z>mi{%OWvc!@tk!uRsFxC2-xCBkpy6Y}~jWlp-+kHI=L-Nh=tT7MSmb<}Y)!eN$q!r~?>UCdQu;IE5SZTI?4B9Os$zP5hS z$t4ZU{WYqW%Y%yNs4;FaKUuQcrdG9y8o+`>#y;uPkcBG2K+c230OIc&vIUw2V$`fL z`+M7!3veZQg7M9TL-DEcqiO>XCF!aE}Ru1URJpjM|60}HX8tJw_%OboknZ~K_VFOa}&$@f^KD3z}o7KPC zpoHv=?lUqGkN83Bln~{Sgf@I-Z2@q;ZD&+>J&qZ zPcf}m+hH3=#*UX2QD?wil?knqAeppXv-=9*H1W+u1+#*DrO)C^?W@z2^2?$+qdhUEirD+*L(iNb} zCHmM_m26fe#a#))RQSGSb6P@87poGfN^~jv&npds;25(Uv>{;phl@M5cv;C{#Ysfr z6mP~Ldn_iAG?hyEl5I;#FJN*+Jy6T?Qg3HHvS9)|DChSo7nn`gNSZKns)#72;&8h) zOqq0dsYdE`eD~2jxqHmZmjoEz#Hobx5VEQaqZE(PpLESShUEl?Vl!&!S@c|5MlUr{ zePk9M1X>opw)sG3F9>VMEO=twmX}8xFiE>+cfBWA6&r|lm+bac=bd2=BI=$KT`*E} z{GnXBmoTX|%=o0nB1M(z)KgVAzU!(6xhY1~*69PNW)M6S2wXj(TpV7qpAPL5??ZSC z;L{q(8wu9_fKiYu-?;!ci#l+?I31<_m^7foUZEEvs{t6SC=(WmR_ERaMT`9)T@fo} zbKy2czlZh)=Qi~zWsD)@{MUZ)*e^QN{n(DINR3u3rfT_LU3#_mq4ha(&R4UM2cO*3 zrZ{Fu#G5kb@V;rKlyNnL?i!_(WoB~-i3xME&&wFvK)D-kN3k#X)m4HHJe&LGZKmCe$9g2AdheFKrkv6v1ZAy1^Auo7+h1i1WiqbQhj|;?-lFAl{niQ&zi4Pv(fRTHHE$P*{YVX|p5KY>2 zM6YZrgI$s(Q>_vaNeZym%ma~J!H7>w2}&YS8^Z&SnMfkFo$sTBI4+SwvYharlrw+s zYTIa2zZv>?3n|v^1Tx0DJiq=9XDlpR>bCnu1ji)@G);d%aTpKuL|CHHZ)v zoEErd-91G(>d<5N+pT>WyfNRhU2TFQ_(xF50ZpWgRz=JB)7AB~5H{fwUUi6TMI$^l zOy3**^fLy)^9xGW&$?S2t?Wij-qxc|o7ldSh9K-qCgnx9v&_xU)k*l8JZq9_dWelQ z_%icDr8Ye2qblGnHRRq0BXuo86}z^*&&I$6igNx;%8oZ(!c1`Dd{RHPP_)YzT&c{) zX@$$|+nNo27L;8%OKIzGIrYqI1E~5Ic`6NQMiUpB9kh?`#X=eHPjzJa4%geQrcW7q zHM`TlinyAIZhWX;l$zBzJ6hTZzELd}_D(gvm-yw~g6t-}J# z-}O`k-!6qz+|JZ1Z<guM$%Y;jIhIj+cfM^;0e_Vt9upO?R5)oF zDnX*QNyAm|V9dE8-fAq6H5oVO+*c=;$qIpbO1eq$YL=sO0US^3u>cVdC(xW-aRn-R z$D5o;Z7q_BXJQ;Myu%q@N5Ek`vtQ23bsU}2%6S}3C%N`<$s1gR&ZB9c>_S4AH_+Lc zEWH+5ulpObJnEtEb=9zshD|D4yMC&VS83)w zb9ftFq|Mu#ppWzx7-nf77vvq-8AV`@!mHHzAU{wl?>+J0?)OOg)0X>ig(t-pocr^W zB{5-E5cBk@FT0jK_-0Vm(9`h4^4k^y;aRUz3L^&ucQE>A-a@_pFkyUPn{c`w`$JQ{ zA5aIm?+ zfC?)YLzS`*ty($|Hg2RhPdt8bag10aZZ@d%ZZ^E1f>St$EL;8U_I7H1@A`L8C-Duc zQdQO*n7YM`Gz=7CXn_s*$JwMkWt(GD<6j>r-yTu>H4R;ha*OeS14ho?h~rx6zp31V z=8U!B+V{ch3M*-HG+?fbFomnpwCQdy6rSkRzp(S)fif3Hg(T^X)#v=xi5Y}qvL)At z`-c^=`dZTqyw(tqYrqWq1j+)Fv_;#e-0(?kPeDRiF);`V?v>+=g3{xA8|o{OzFV_+B@!oOT=ZVO-@t1JgA`L&<3^?t`oTUq?2&xN1Xq{LsX=I#8O{o z(NqNv27oSw}90LWgy&(U15`%k&-v}^~M^yqtnZG$@!=e|L%t z1)+;7C&jGfM@H4BxD9GO$xm=NryXYK>_H(MHtRBT(2YR@ZMBxM^5+q^w)gYkG5Dz# zZX^J;9P39GKiFI?U*n4_s^E- zEcnv&8FTuWYGj0O=b?sB0y5=k99Eq?O_Q$fHmZJ=p&Kc$8uYT>PCFI~W1f`#+CIM5 zW-9z1`qoASROk>q)p)28XsxL)sp#@dB#YKmg=6KrYeKiNu@$lZ()DvQ9|l6W`+=-i+5=Hd$f$o|v#uhKzyr9mKt3zt6xt?= z=xovkaK{${ES#obkhq=ZEp$^_{C^@KPz|^@h%Qx;~E!QIC+8))ilSAMmdo$^^wN13)6dv&knyGs?STk ztwaWd>By0AmFZ?X`;p9bARbJskGrFj9N4u#aUReaMV1U&IZ@?3g1w!=PJ@1@4VN`h zA=Y;!kpaKM(-Pw-3!&Pwnt$3h?o+pDj$S%qQtuJ$Jsu=OP4~O%CgyT=UKL{GYEM@= z)~Z0P@8q33c$})$CG~#f$Z^+*(AK5)o=M1o)~7GAha0L7{x&zNk!wg*+BbtRBi)Pk z0d2O%HPPQ}0YBsx5UZ7U0rS|jlk-Ch3+n?}c_dJG(DsTriXXgIVpV(rY&r9o;il8T zK4fJhs`gfW*0Bf5D!$BEc{#4wU=C;sF=m%6L~nYumSEqrX&$xOvt`@nLFzy|kEr-l zOTah1_?O%IOi3zzz`Pr5LQCz8gu>@;Lg^4`SjAutsTO9r^VdYMva&1wlZ?&GtZhX z?J>z;Y0%$@@1qu1ZCahJMBBj^qsDW}6(50!>1~&a;}(3F$GuF4_6Sdpy+_no*6O)s8RsWKHu&CpKEs6+p6KX#&SCN#dO6okP2Vpa zxugqcG$rU$y1-#Rx#{OkWtOfi`!S*$^?FRjev<1hoi{qpQ{W=hp3k01o*31CU-uE1 zG}Q4$7GUQk3@8#&l{~IV@n^2b2v8O-$mVaxfabHbSbRp>I>#K%DRQ|NDcprr_4@+b zJiBaF*ZEz=wemFb+||>~N!j#waBFyP>9CsvD=y-<3aXdWs12`98)Svpv08XvY+0R( z$9CL14C=3e`d^46=#r=x_SxN zxsVZ?bJfSL%tO@J(!s5ovSns%DOG!9YL>eL)g%Txt+t98Hg!*z6!08fL_QFFKY<0> zfLSkI&qZ+N58vFEP(00l)5iA5Ebn|pdb@(Rw(V~D{k+xkv$*!0>n*hWXmo4?xV^F} zVv+=B?L@b^89#}XVrv`F0y2YvoJ~Y|2~OIH@dKYH|KMH`E!X=tHLbDSZo1g6>mx;{ zR8F}jKRM@AW#D(YU}Za&DQA^?#3yw~G<`XE>!Z?`I()O2;VYgZLu*IkmAjWh9+&E) zC?H!p#0;bHa!)>_5t}jI*Sh=z_{yFJ!iR~Ds@Rd!4>dmcl)=ylvxmjqcF~q44ApC# zJnK}fucW_&(6EF)0@*@pgVy`Ra3$BIt#e-e{i@&8)lx9CjQ@_Ru{{){$vk)E**a2R^Hfy4Z0srNWQ{Xq)c&D{>F!bB_kfapxP(C!U#`X+`tk`5 zTxv74s_^3ROEN-sW4UA;^&?|nZX@tkjCxLzBT~$ZMJvL9E>{*YFO;9 zK23TU$Oi2%@0I;vAbxXX`;;C%Ib!<&mVyfefjH7)90m@E+`hgZs3!lsha^1ake7~< zG164F(@-4^(fq=Wa7i_dj+O8=m_7O@cNooclD36kZAd|0S9&0q1PT370 zjzLBHRedlnDKitKAyBOG49gHPfaCrD+bUG+HGMnoO|Pwifu~scw&mu*@TV_DvqmQ= zXp#`=OG(F1wC&CQDiPTr#@)I?SP1o}5lJ(t60iDWF&M$0oy;)auTUKz z%3+AXjSNvN0(ZbfI`0a*47K-qtUCn4?PzjK_BcKS$}`voFneds z5&N>${)gaa1(RckjAj}d)8SkbY|~pq&C0MSTpY4iH1bd(B=#^IL}krJx}c+GcPGL| zIxcI<*v+pq3mih6`KBM?BqQyg_GyYXSB3l}4tFkn7Z}omv96Ys6r!BoPd%pW> z#vCzOC68Hy*9)&NHU#t%XR47x;|K?1iV>4*FMD1T`5{@2ad9`5m8IsW^Z4OAyHoT9 zBO;XiiuHN#&EyGnG)>!q%>rbAaklT)*z?04$F#DeH^nJv(z;tI_GV`>JzS?s1`2d|kRk!1#RISXE$9ab|F4 zpL$w$sDbVh{n3nEVRh%rB#0@xa+A5BzT(!YT$>XFqzDUVo(}5AF48o(7g0OTF`K@{ zSI!~xMJXC>udy_I%DFm8Uk#1XT=^93yDM>8`X~qF9giR51B$_PU@%4xM?zuA5K~xJ z_4FiDQV_&g1l$M8z~-?C<0azqiGDyH@C<-q!`lzt8;+YfU$UmCHkgL6^5`%Nn!;d{ z32gW(6UxCdtB|`3X_xOj$yBB>(>0~Kz8y@Lw)ZCF8RlE~k-sy{B@!;%r z1j-TDo)&R>0nmtSFtL@O;D?odoqzmDWO?PPfCZOX|IMlVC49|VNtE;AdB4n$gRKv2 zo@dDCZ`u2M+M!_Np;;$n=Y-GA(u-}O zTnt*ra%4dOb?tTHESN{*Fm|y}g58pEL6>=6+zqJb<8wNJFoVrXIT&FaI8d4~V1ywQ zHCGa|$ft2#dRFZb+VKq z$uaHp7}0H_*|Mj*tBe3$Uuebvgt=H@F#d_GKQ@Vx9-IrUS1pFHGC}s%*!029c#8hW zDd`Ok(#?9it8DShDc%wmx@*>0*KI8l0}_ywwu(E$?wAx)k0ab7NTc?ZS5t1e9M-|+ zAm?^vP@Ur$1lefg4d2*)y5I4$5O#B)YO~VirJ}XBdwO;%Hgq*D%pVya9-_PnJWg;w zpv(p5r}OW8PyRE=blouE$4re4JM9nl`{;0GE8S<32bKl}0XJV>Rw+{KC7#kt`I?A` zD*d4K>dje`Hw@PGbd#)OT0hJ_7%#0*_JP{pz#HEiO;ZEFJsR7nA;95)G%8%qOg&pk z9rCuxc^$-)!lIdUR;F@ujW->w3?&?>``E!ulw^ihoZrMW+XEFpATH z3Cp6T7+DN(=>*E@OB`8%DQ!A#pF4Cj)_t#$+x&d)2DkV72U~x>P=h=g4J3L~D+?Dh zB^EV$OZnbJf)={k$Ue2dy862C@qQwFG@D)iRS7EWO^u4fVp!UDT9LEg4GHN1E8}07 zf6j0#2I&VWF;v8>29f!Zp1L^H^o8@NHegQuY`yUIk*I9jqbqX+(sMV8D}f?7o03i= zR*jEBSSUENSth5<7h@V;*loY|3{Gab#oo;2H0{919;;hGlVlp=L|*XjMI?iFPzmYh zh1a9`hg1F-r$`8850Occk_|whX;Wxi#HK_kl;$_2Z1vpF8S=7mx|4BuMOBf_5Kcar z^(X6R-c(%Tv)0uGLVI+63pG&iYsdF%Z{x*(wewUreZI!)b>E3f-8F!he##M{Ki;2T zUo`mwUnqUoh(aodsF#wzKY)WxKio950@cpWX!fX-aEiQ3+`j#W?Wo{Ej9bH35b4@kBAjKA#{flr{6Z>NsZo+8wKhy9A< zETi#W0o1KDi=25?5zCVknG(J5g@<1&m`#-g-TmuN z6Hr|sWhqvu=6vg}te~_-ROeWd`c~06Lv^W8XCb2Q5CTLTYTdu6TvWj}Nw{nOT-Z?Y z(#bI=yd# z;b!D&X^If}+@F|UrJ>)DIQQxtwQ1X6WU+qZP~IBP4CGlNtxx2Dsr+87AE=2)m)el= z(s0S>I7PMse=1I|RYFzRE~+}YhNwVRku$&QAO^+m*0N` ze-RSC_?!n*D8q?J^-Hlv@~E-^mTrcC3^Q0EbcOWssHQoiY%y^|AnWJeXUhYpSdx|r zQaEo{Zlw=IgoHn`B;*GdO456MR~?%iT9vNJ3xf=nqy&-gA_8{#*i4kyS2wYTKYSO% z==w1^i*s8&WiV!6l^3#uJ*4SYgz!5SyK8Tjc;gxW@8$s~VF0|wEDi`981UZ4W&sE< zXyB`)C<5(7eP#r7buX#~!YbFZz{oGW-7M@~bp=L?X4H?O!Zrz^LbavCDKbwDtXRv< zjO~%_+3R;&Uz&nzdH86BKHDe=r4J&FsoWq;POAA7Z=pkZ){;@)eEzjxG?`$Y$|zAm ze|c3rwDCOqSY6~D7Y+5=^|q1PCWx=VPcV022XPbLPI6{=& zA!3XqJ>7I4n(yiV`BqKHQE!tr^tPfW(^!P~MGXeQ47H0tV>27<94>g2NIrIsf!Nq6R9}j;wj|i0L z@%_A8ro2!4ggJo^-|v%andblfT&3jnyS6KxGgdAF{*Q`& z$3xDr93#JO)u|TA(WyDchoz~wXvfLFbkpk;-%hJ5Al!-|ZSuq$h+ec_tu_q#t{gCV zaQ;?Z6s$)kn*WfK+X?|09Qw(H@DEnH0wmv|x6mKR4q|o#aKA%Rv41er4M2gD%L4{BP6ZC8@Sk(O zllVj70b#fUKEG=~2mXa|WWg99A`buxsNVhW6f~ni)9wJbcLrPGpOFA4%mcvl4&68Y zKwi+R2Y?*s-y#xVV3PlF@x1ky5{I*k0-_3jkKljmO8-M;eE4VW*b~6=ZhR3P^brW) z0i9uj!~azUx#5DNApAd-LhOHpHe7Ht(302R2-)EOllc>Z!+|8c|3!`De`S!MYVW_X z#-#iwqoW2#05SRe<-M19{B=mr1dj4={?yF>aj3=kk6_OXPVn!HWZ3>g@csCY5b@=2 zLYmqCK_uV5(VFM`2TugRu|a;o_xP6j{*AA<$ln8regL8Od1uT0LA)TKAAtWI8mRq& ze4s}^0NXqC0RDl0av>b}XCw)_0{)#5TjU?e1Cspuf2|YP)y{nV_x9!gPYP%BKkobc zm_KPW%KHb^0sx%vu)6#o90~w@e1{KJe;_9at`-~@BpdiQR9j7dWbB}emUm}=(hBnI z_)jEC+x`(+I^J{hmmn7OcdqIkAfq6F^Sj;elYd5Hpvvj@RN?x)+bEg+kB#-|KQ`Dv zr?cSbprqixj*plB$?k&x-T}00|DaU}KQ3o{$d6YG7$s}2tEuz^DaCl`zxdX>4pJlaXb*;FLy>TFtPu4!M%@8 zC_(9A0Ec(ueQY3<@V{PJxIlX00B)RK7%(tiYA`U8|7aZXfy%=H((f9_qM)aL8tFzL f$%wz{G_eK&BLE!lM-gq`7s>+AL4n!51F-)CuS*om diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/pom.xml b/renderer/vendor/openhtml-1.1.105-qqq-p1/pom.xml index 0b0a23a..b8be98a 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/pom.xml +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/pom.xml @@ -1,11 +1,14 @@ 4.0.0 - com.kingsrook.thirdpartyopenhtmltopdf-pdfbox1.1.105-qqq-p1 + com.kingsrook.thirdpartyopenhtmltopdf-pdfbox${revision} OpenHTML PDFBox raster metadata correction - Source-built OpenHTML1.1.105 with a narrow image-copy correction; LGPL2.1-or-later. + Source-built OpenHTML1.1.105 with a narrow image-copy correction; LGPL2.1-or-later. Not an original upstream release: its Maven version is the QBit Document Generation family version; the upstream version and the QQQ patch level are in the openhtml.* properties. + https://github.com/danfickle/openhtmltopdf + + scm:git:https://github.com/danfickle/openhtmltopdf.githttps://github.com/danfickle/openhtmltopdf/tree/1.1.1051.1.105 GNU Lesser General Public License2.1 or laterhttps://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - 821UTF-82026-10-31T00:00:00Z + 0.1.0-SNAPSHOT1.1.10554b31598f14ea77139ec435106810ba67bd68656p1821UTF-82026-10-31T00:00:00Z org.apache.pdfboxpdfbox3.0.8 org.apache.pdfboxxmpbox3.0.8 @@ -19,5 +22,6 @@ org.apache.maven.pluginsmaven-surefire-plugin3.5.4true${project.build.directory} org.apache.maven.pluginsmaven-jar-plugin3.4.2 org.apache.maven.pluginsmaven-source-plugin3.3.1jar-no-fork + org.codehaus.mojoflatten-maven-plugin1.7.3trueossrhflattenprocess-resourcesflattenflatten.cleancleanclean -- 2.54.0 From 4078f39688f1fe11571ed8bd415d186105fcdd41 Mon Sep 17 00:00:00 2001 From: James Maes Date: Thu, 5 Nov 2026 07:01:35 -0600 Subject: [PATCH 2/4] docs: describe the vendored OpenHTML artifact at the family version in its modification notice QQQ-MODIFICATIONS.txt (shipped in the jar's META-INF) still named the artifact 1.1.105-qqq-p1. The module is now published at the QBit Document Generation family version, so the notice states that the modified library is upstream 1.1.105 with QQQ patch level 1 (originally distributed as 1.1.105-qqq-p1) and points at the openhtml.* POM properties. The LGPL modification statement is otherwise unchanged. The hash-pinned complete-source archive carries the same file bytes and inputs.sha256 is updated. Co-Authored-By: Claude Sonnet 5.5 --- .../openhtml-1.1.105-qqq-p1/inputs.sha256 | 2 +- ...-pdfbox-1.1.105-qqq-p1-complete-source.zip | Bin 297448 -> 297565 bytes .../resources/META-INF/QQQ-MODIFICATIONS.txt | 5 ++++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 b/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 index 7548854..3a0b54d 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 @@ -1,2 +1,2 @@ -fc02ae260ba36552bd413db5ee35555aee31c25e57da3638d98113c793a9d7b0 openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip +1064e5322ee59855364355384abc9afb845c29a8984105c68e69fe2d70972c44 openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip 8dab8e86c45393a6bfea32d755f1e130b3ebeef8f77a46e6593af223080c5d25 openhtml-image-dictionary.patch diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip b/renderer/vendor/openhtml-1.1.105-qqq-p1/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip index c4398426815ea09bc484d593b07042204ab0c5ba..e69b16dd04cf6372b9f0803bb80b0a1fd13224e1 100644 GIT binary patch delta 933 zcmV;W16us(lM>yO5`csOv;wvy3h3cvQ6K{V04oKTz$5}cf0W5`+c*%0?|6znCRHLw z)GnvyppA|v(#TGn+?zmCL4{FkqBY{-6nJ?!Cmo3Gt_mS$-- zoWje?3pB{G%7l2WbO0RyA-L8{N{Ut+hT17zYEp0^AGEXJO5loM|Mw9}(JaY^$vA`J3g5In1@GMN0qpmi zREVGbLB>~(zD zf`3-u;m6n2XgYfk<4HcrC&Sfpx|#2`v*A2n&u95^f49lE*=CVX=9_FW-HbNN(R8sG zjW+XqIomFF%Y41tjdz>15JzjS@T|(Ud(ScOvE`=aEnT#vRC#=Rs_{ghN;H8!LqQc@ zwDU1$S)o0VdJvu%wT-qKLrf5`rbIc})?^uUJP%4s*3P2W6adQ@w{*=_+Y`_`N(Qph zDN>@ie=>yuG@b(a3js=Q(ZtQM!dsksvL~(vP`a4MlV$RaizWWu=>%tE!$KNoX#i*y zNaF&5$2ZWnX&LB37TzkdcNryW6aE+Wy>#nX%c$C_ju|jok_{BVQyqv{wy!zCO5yY{j)Pa_Op>$xci()7Z|O=$PgSb^74E<41j$bn3V8z@)SC)Oo7AT2J%O=QNE|f zJJojJgSLVF$9G6!druiOi};UI(29WLB@-5?L6026YYa-l!gNFb1(b_4LTHP?n&avI zt%IN6_t0rg#eavXCjy75Cj+;sCj@d|3h3cvQ6K{V04oKTC5Hrd0v;%roreT*0r!^= zhy+XmV>y>yhy+do8$Oq3}x%zr$9@tz40&u_I%xa>d1b1J|5t4S8m-~ zmS$--p2O4A6LiS3&4hSvbpRazA-LX4N~&HPhO<+;)}-Jqc8N(0747;Tb#`!a%7w-rk&yCwY>MlW7Lk6~1ZP1n=Ch z5gZOhD#VZbB4cw`{5MEs>;Opi){P$%undfUUot3k4Hr}k}#bUq9$BS~if5^+#z9@HDu`FkcB3sUjNwJ#D zm&?hdSd^=Lx7@GF?S4Pq7h54t)?DFH)m!&gV&GHHUC%qZXi2H^`1)|hhW@P41o{gq zYVo3-kCvC@on#i(XRztRrsex~sMg&>Kny zveGG1f1f7!6>RGoCHuH4)DmXGA+sz97Z?8hSm*GJayiwelQrc4eZ~)Lkc?`*z2li zF9OXX{-X(65pb+(pbkAU#Rm*Z!paQc{s)wc)FJd$V9jy+-f8&p{Q!g3^bheHhaM;b zhaM;cw;m`2a$gEQ1{*4?0ssIM1ecnJ1a8S%?HG0fLu=hy+Xm?l_ll zi3Apx=!gV30;WBeaESyKmrXtb443wZ1Q3@fM* Date: Thu, 5 Nov 2026 11:00:58 -0600 Subject: [PATCH 3/4] build: make the reactor root the single version source of every module The release pipeline rewrites only in the ROOT pom.xml (the pinned legacy calculate_version.sh) and nothing passes -Drevision (java-verify runs plain `mvn verify`), but every module declared its own 0.1.0-SNAPSHOT and did not inherit the root. After an RC rewrite the root would say the RC while the modules still built as the SNAPSHOT, so capture (target/-.jar) would find no JAR and the publisher (one version per reactor) would reject the reactor. The root now inherits qbit-build-parent 2.1.1 (foundation's existing parent) and every module inherits the root with the per-module removed (relativePath ../pom.xml, ../../pom.xml, ../../../pom.xml; remote-renderer transport and adapter keep inheriting remote-renderer-parent). GAVs, module list, dependencies, sources and tests are unchanged. Audited with `help:effective-pom` (Maven 3.9.11, before/after for all 11 projects): - licenses: root, foundation (Apache-2.0) unchanged; bridges/scripting previously inherited AGPL-3.0 from build-parent 2.0.0 and now states it explicitly (build parent 2.0.0 -> 2.1.1 for this module); the vendored OpenHTML module keeps its explicit LGPL-2.1+ entry (a child's replaces the parent's); the seven modules that had no license (renderer, bridges/renderer, record-files, printing, remote-renderer parent/transport/adapter) now inherit the root's Apache-2.0, matching the repository LICENSE. - compiler: build-parent adds 2121 to the compiler plugin; identical to the modules' maven.compiler.release 21; the Java 8 vendor module pins 88 explicitly next to maven.compiler.release 8 (testRelease 21 unchanged). - dependency management: build-parent imports qqq-bom-pom 4.0.0 (jackson 2.21.5, qqq 4.0.0, ...) which the parentless modules never had. record-files and printing now import qqq-bom-pom ${qqq.version} (as foundation and bridges/scripting already do), so their managed versions equal what qqq-backend-core RC.21 declares; renderer, bridges/renderer and remote-renderer-parent import jackson-bom 2.22.4 so jackson-core/annotations stay aligned with their explicit jackson-databind 2.22.4. - guardrails: build-parent 2.1.1 adds the qbit-guardrails test dependency, surefire dependenciesToScan and enforcer executions. foundation keeps them (enforcer.skip false); the other modules keep the previous behavior (enforcer.skip true, dependenciesToScan reset); the extra test-scope qbit-guardrails dependency and the snapshots-only central-portal-snapshots repository are inherited metadata. - url/scm: the root states build-parent's url/scm so the modules' derived metadata stays the same. The vendor's complete-source ZIP now ships parent/pom.xml (a copy of the reactor POM; module/pom.xml differs from the repository POM only in its relativePath, ../parent/pom.xml inside the archive), inputs.sha256 and the verify/build scripts follow, the README documents it, and renderer/Dockerfile copies the reactor POM from a named BuildKit context. Not built or tested: model introspection only. Co-Authored-By: Claude Sonnet 5.5 --- bridges/printing/pom.xml | 9 +++++---- bridges/record-files/pom.xml | 7 ++++--- bridges/remote-renderer/pom.xml | 6 ++++-- bridges/renderer/pom.xml | 6 ++++-- bridges/scripting/pom.xml | 7 ++++--- foundation/pom.xml | 4 ++-- pom.xml | 10 ++++++++-- renderer/Dockerfile | 3 +++ renderer/pom.xml | 6 ++++-- .../vendor/openhtml-1.1.105-qqq-p1/README.md | 5 +++-- .../openhtml-1.1.105-qqq-p1/build-openhtml.sh | 3 ++- .../openhtml-1.1.105-qqq-p1/inputs.sha256 | 2 +- ...-pdfbox-1.1.105-qqq-p1-complete-source.zip | Bin 297565 -> 299448 bytes .../vendor/openhtml-1.1.105-qqq-p1/pom.xml | 7 ++++--- .../verify-module-source.sh | 7 ++++++- 15 files changed, 54 insertions(+), 28 deletions(-) diff --git a/bridges/printing/pom.xml b/bridges/printing/pom.xml index fd8876e..957621b 100644 --- a/bridges/printing/pom.xml +++ b/bridges/printing/pom.xml @@ -1,12 +1,13 @@ 4.0.0 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../../pom.xml com.kingsrook.qbitsqbit-document-generation-printing${revision} Document Generation Printing Bridge - 4.1.0-RC.210.1.0-SNAPSHOT0.1.0-SNAPSHOT21noneUTF-8 + 4.1.0-RC.210.1.0-SNAPSHOT21noneUTF-8 - 1.0.0 - + 1.0.0true + com.kingsrook.qqqqqq-bom-pom${qqq.version}pomimport com.kingsrook.qqqqqq-backend-core${qqq.version} com.kingsrook.qqqqqq-backend-module-rdbms${qqq.version} @@ -34,7 +35,7 @@ org.apache.maven.pluginsmaven-compiler-plugin3.14.1truetrue-Xlint:deprecation-Xlint:unchecked-Werror - org.apache.maven.pluginsmaven-surefire-plugin3.5.4 + org.apache.maven.pluginsmaven-surefire-plugin3.5.4 org.apache.maven.pluginsmaven-checkstyle-plugin3.3.1com.puppycrawl.toolscheckstyle10.12.6${project.basedir}/checkstyle/config.xmlcheckstyle.reactor.root=${project.basedir}truetruewarningtruevalidatecheck diff --git a/bridges/record-files/pom.xml b/bridges/record-files/pom.xml index f2ebe1a..873f8c6 100644 --- a/bridges/record-files/pom.xml +++ b/bridges/record-files/pom.xml @@ -1,10 +1,11 @@ 4.0.0 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../../pom.xml com.kingsrook.qbitsqbit-document-generation-record-files${revision} Document Generation Record Files Bridge - 4.1.0-RC.210.1.0-SNAPSHOT0.1.0-SNAPSHOT21noneUTF-8 - + 4.1.0-RC.210.1.0-SNAPSHOT21noneUTF-8true + com.kingsrook.qqqqqq-bom-pom${qqq.version}pomimport com.kingsrook.qqqqqq-backend-core${qqq.version} com.kingsrook.qqqqqq-backend-module-rdbms${qqq.version} @@ -32,7 +33,7 @@ org.apache.maven.pluginsmaven-compiler-plugin3.14.1truetrue-Xlint:deprecation-Xlint:unchecked-Werror - org.apache.maven.pluginsmaven-surefire-plugin3.5.4 + org.apache.maven.pluginsmaven-surefire-plugin3.5.4 org.apache.maven.pluginsmaven-checkstyle-plugin3.3.1com.puppycrawl.toolscheckstyle10.12.6${project.basedir}/checkstyle/config.xmlcheckstyle.reactor.root=${project.basedir}truetruewarningtruevalidatecheck diff --git a/bridges/remote-renderer/pom.xml b/bridges/remote-renderer/pom.xml index c74af55..a37d047 100644 --- a/bridges/remote-renderer/pom.xml +++ b/bridges/remote-renderer/pom.xml @@ -1,8 +1,10 @@ 4.0.0 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../../pom.xml com.kingsrook.qbitsremote-renderer-parent${revision}pom ../renderertransportadapter - 0.1.0-SNAPSHOT21UTF-8 + 21UTF-8true2.22.4 + com.fasterxml.jacksonjackson-bom${jackson-bom.version}pomimport org.apache.maven.pluginsmaven-resources-plugin3.3.1 own-license-noticeprocess-resourcescopy-resources @@ -10,7 +12,7 @@ org.apache.maven.pluginsmaven-compiler-plugin3.14.1 - org.apache.maven.pluginsmaven-surefire-plugin3.5.4 + org.apache.maven.pluginsmaven-surefire-plugin3.5.4 org.apache.maven.pluginsmaven-checkstyle-plugin3.3.1 com.puppycrawl.toolscheckstyle10.12.6 ${project.basedir}/../../renderer/checkstyle/config.xmlcheckstyle.reactor.root=${project.basedir}/../../renderertruetruewarningtrue diff --git a/bridges/renderer/pom.xml b/bridges/renderer/pom.xml index f0b9870..d5a7aba 100644 --- a/bridges/renderer/pom.xml +++ b/bridges/renderer/pom.xml @@ -1,9 +1,11 @@ 4.0.0 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../../pom.xml com.kingsrook.qbitsqbit-document-generation-renderer${revision} Document Generation Isolated Renderer Bridge - 0.1.0-SNAPSHOT21noneUTF-8 + 21noneUTF-8true2.22.4 + com.fasterxml.jacksonjackson-bom${jackson-bom.version}pomimport com.kingsrook.qbitsqbit-document-generation${revision} com.openhtmltopdfopenhtmltopdf-pdfbox @@ -32,7 +34,7 @@ org.apache.maven.pluginsmaven-compiler-plugin3.14.1truetrue-Xlint:all-Werror - org.apache.maven.pluginsmaven-surefire-plugin3.5.4 + org.apache.maven.pluginsmaven-surefire-plugin3.5.4 org.apache.maven.pluginsmaven-dependency-plugin3.8.1runtime-distributionpackagecopy-dependenciesruntime${project.build.directory}/lib org.apache.maven.pluginsmaven-checkstyle-plugin3.3.1com.puppycrawl.toolscheckstyle10.12.6${project.basedir}/checkstyle/config.xmlcheckstyle.reactor.root=${project.basedir}truetruewarningtruevalidatecheck diff --git a/bridges/scripting/pom.xml b/bridges/scripting/pom.xml index 50bdde6..feb5bb2 100644 --- a/bridges/scripting/pom.xml +++ b/bridges/scripting/pom.xml @@ -1,10 +1,11 @@ 4.0.0 - com.kingsrookqbit-build-parent2.0.0 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../../pom.xml com.kingsrook.qbitsqbit-document-generation-scripting${revision} Document Generation Scripting Bridge - 4.1.0-RC.210.1.0-SNAPSHOT0.1.0-SNAPSHOT21noneUTF-8 + GNU Affero General Public License v3.0https://www.gnu.org/licenses/agpl-3.0-standalone.htmlrepo + 4.1.0-RC.210.1.0-SNAPSHOT21noneUTF-8true com.kingsrook.qqqqqq-backend-core${qqq.version} com.kingsrook.qqqqqq-backend-module-rdbms${qqq.version} @@ -31,7 +32,7 @@ org.apache.maven.pluginsmaven-compiler-plugin3.14.1 - org.apache.maven.pluginsmaven-surefire-plugin3.5.4 + org.apache.maven.pluginsmaven-surefire-plugin3.5.4 org.apache.maven.pluginsmaven-checkstyle-plugin3.3.1 com.puppycrawl.toolscheckstyle10.12.6 ${project.basedir}/checkstyle/config.xmlcheckstyle.reactor.root=${project.basedir}truewarningtrue diff --git a/foundation/pom.xml b/foundation/pom.xml index db66f96..92cb84f 100644 --- a/foundation/pom.xml +++ b/foundation/pom.xml @@ -1,13 +1,13 @@ 4.0.0 - com.kingsrookqbit-build-parent2.1.1 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../pom.xml com.kingsrook.qbits qbit-document-generation ${revision} QBit Document Generation User-defined document templates and generation coordination for QQQ - 4.1.0-RC.210.1.0-SNAPSHOT2121noneUTF-8 + 4.1.0-RC.212121noneUTF-8false Apache License, Version 2.0https://www.apache.org/licenses/LICENSE-2.0repo com.kingsrook.qqqqqq-bom-pom${qqq.version}pomimport diff --git a/pom.xml b/pom.xml index 29dfa32..7f3eb59 100644 --- a/pom.xml +++ b/pom.xml @@ -1,14 +1,20 @@ 4.0.0 - + + com.kingsrookqbit-build-parent2.1.1 com.kingsrook.qbits qbit-document-generation-reactor ${revision} pom QBit Document Generation (reactor) + https://github.com/Kingsrook/qbit-bom + scm:git:https://github.com/Kingsrook/qbit-bom.gitscm:git:ssh://git@github.com/Kingsrook/qbit-bom.githttps://github.com/Kingsrook/qbit-bomHEAD Apache License, Version 2.0https://www.apache.org/licenses/LICENSE-2.0repo - 0.1.0-SNAPSHOTUTF-8 + 0.1.0-SNAPSHOTUTF-8true diff --git a/renderer/Dockerfile b/renderer/Dockerfile index 43d400c..578ffba 100644 --- a/renderer/Dockerfile +++ b/renderer/Dockerfile @@ -10,7 +10,10 @@ COPY Dockerfile ./ RUN apt-get update && apt-get install -y --no-install-recommends gcc g++ libc6-dev make cmake patch \ && sh ./build-zint.sh +# The renderer's version comes from its parent, the repository reactor POM (../pom.xml). Build from this directory with that file as a named BuildKit context: +# docker build --build-context reactor= ... (the reactor POM is copied to /pom.xml, where ../pom.xml resolves for /renderer/pom.xml) FROM ${BUILD_IMAGE} AS build +COPY --from=reactor pom.xml /pom.xml WORKDIR /renderer COPY vendor/openhtml-1.1.105-qqq-p1 ./vendor/openhtml-1.1.105-qqq-p1 RUN sh ./vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh /renderer/openhtml-build /renderer/.m2 diff --git a/renderer/pom.xml b/renderer/pom.xml index 2214eb6..2085e25 100644 --- a/renderer/pom.xml +++ b/renderer/pom.xml @@ -1,9 +1,11 @@ 4.0.0 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../pom.xml com.kingsrook.qbitsqbit-document-renderer${revision} QQQ isolated document renderer - 0.1.0-SNAPSHOT21UTF-8 + 21UTF-8true2.22.4 + com.fasterxml.jacksonjackson-bom${jackson-bom.version}pomimport com.kingsrook.thirdpartyopenhtmltopdf-pdfbox${revision} org.apache.pdfboxpdfbox3.0.8 @@ -30,7 +32,7 @@ org.apache.maven.pluginsmaven-compiler-plugin3.14.1truetrue-XDcompilePolicy=simple--should-stop=ifError=FLOW-XDaddTypeAnnotationsToSymbol=true-Xplugin:ErrorProne -Xep:UnnecessaryParentheses:OFF -Xep:NotJavadoc:OFF-Xlint:all-Werrorcom.google.errorproneerror_prone_core2.49.0 - org.apache.maven.pluginsmaven-surefire-plugin3.5.4true${project.build.directory} + org.apache.maven.pluginsmaven-surefire-plugin3.5.4true${project.build.directory} org.apache.maven.pluginsmaven-dependency-plugin3.9.0runtime-librariespackagecopy-dependenciesruntime${project.build.directory}/lib org.apache.maven.pluginsmaven-jar-plugin3.4.2com.kingsrook.qbits.renderer.RendererMaintruelib/ org.apache.maven.pluginsmaven-checkstyle-plugin3.3.1com.puppycrawl.toolscheckstyle10.12.6${project.basedir}/checkstyle/config.xmlcheckstyle.reactor.root=${project.basedir}truetruewarningtruevalidatecheck diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md b/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md index da08b5e..b43a197 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/README.md @@ -43,7 +43,8 @@ known supported PNG/JPEG background path; it is not a universal PDF sanitizer. ## Maven reactor module -This directory is also a standard Maven module: `pom.xml` and `src/` are the `module/` tree of the complete-source archive, byte for byte -(`sh verify-module-source.sh` checks the archive hash and compares). The repository reactor builds it, with its 15 regression tests, before the +This directory is also a standard Maven module: `src/` is the `module/src` tree of the complete-source archive and `pom.xml` is its `module/pom.xml` except for the parent's relativePath +(`../../../pom.xml` here, `../parent/pom.xml` inside the archive, which also ships `parent/pom.xml`, a copy of the reactor POM; `sh verify-module-source.sh` checks the archive hash and compares both). +The module's version comes from the reactor parent's single ``; its explicit LGPL-2.1-or-later license entry is unchanged and is not overridden by the parent's Apache-2.0. The repository reactor builds it, with its 15 regression tests, before the renderer, producing `com.kingsrook.thirdparty:openhtmltopdf-pdfbox: (upstream 1.1.105 + QQQ patch p1)` and its `-sources` jar. `build-openhtml.sh` (used by the renderer Dockerfile into a private builder repository) is unchanged and still validates the same hashes. diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh b/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh index 85bc10c..b0cbd53 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh @@ -11,7 +11,7 @@ test ! -e "$work" mkdir -p "$work" "$repository" (cd "$work" && jar xf "$vendor/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip") printf '%s %s\n' 34f4f40a95c7ed607fb76f9ecfd1c8f47c185c2c9258822c7f96d8e9fbee3ecb "$work/provenance/upstream-sources.jar" | sha256sum -c - -rev=$(sed -n 's:.*\(.*\).*:\1:p' "$work/module/pom.xml" | head -n 1) +rev=$(sed -n 's:.*\(.*\).*:\1:p' "$work/parent/pom.xml" | head -n 1) # verify includes the fifteen real upstream-clone/background regressions. mvn -B -f "$work/module/pom.xml" "-Dmaven.repo.local=$repository" verify # Install only the verified artifact into this discarded builder's private repo. @@ -19,6 +19,7 @@ mvn -B -f "$work/module/pom.xml" "-Dmaven.repo.local=$repository" -DskipTests in mkdir "$work/corresponding-source" cp "$vendor"/* "$work/corresponding-source/" cp "$work/module/pom.xml" "$work/corresponding-source/build-pom.xml" +cp "$work/parent/pom.xml" "$work/corresponding-source/build-parent-pom.xml" cp "$work/module/target/openhtmltopdf-pdfbox-$rev-sources.jar" "$work/corresponding-source/" cp "$work/module/target/surefire-reports/com.kingsrook.thirdparty.RasterMetadataTest.txt" "$work/corresponding-source/vendor-test-results.txt" (java -version; mvn -version) > "$work/corresponding-source/build-toolchain.txt" 2>&1 diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 b/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 index 3a0b54d..dec5321 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/inputs.sha256 @@ -1,2 +1,2 @@ -1064e5322ee59855364355384abc9afb845c29a8984105c68e69fe2d70972c44 openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip +9cfe3426e7f198a3aa97c99d073738e5050c8047c360e11167743e147c384920 openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip 8dab8e86c45393a6bfea32d755f1e130b3ebeef8f77a46e6593af223080c5d25 openhtml-image-dictionary.patch diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip b/renderer/vendor/openhtml-1.1.105-qqq-p1/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip index e69b16dd04cf6372b9f0803bb80b0a1fd13224e1..59136780027b31bca307e21b2801a540d8438c3e 100644 GIT binary patch delta 6580 zcmZXY2Q*yY_Qy?86O5YZqDPJ1>qH$jqD7FRCEDl)F?vZbWN?WdqJ^j-1VN%jCtCC% zhNuZfqWvd7@BiL<|NqRoYu5L3_TFdjbMC!!)}BkDeOEwR)d50Jj}Z5y5fc${(hw0* z5fKr&dD#29I*1`X+(ZN1T;H0zdCbVb&bIA5CI8%K;T-j{&6E%{cHN@jace5-tn!fZ zO-ncCf!|6@czOOL&z4obI+Mf&1W{qb_z$&UTke`uFyfk}{`h1)@4ae#35&4FN>sIJ zHB9UltEH(Oyqk|Et13@9EMAs?25CI%yi!8ma5qIKUI^ED?A>IoJm3bz#w}HE(M1a;YyvruZTeM?F z>6x~!`%RmCD%~((GT>LIq>HFk^~W~6^x z#MP%K-sCyhv>Y3vxM8dZSZ{YcR`hvj0_5Lnp9;>I3RaQq<8NaFjWu^{wrHMCuKs4a zd$RW@)hc`$t&$f(0U1Iqa>jcLJkY=DCK?~Qii^U^NYrAA{J>Z%5wlQRE4^FK4XGB* zqiN-wx3e0Ft@gll_ctHs9S~==G|FW@ml78>QOe`q9fU42$77?u+*Nmbg6t7OmLvr! zftZxCx*x0`g9>Aexq<_DAtxie^z-F(6yCPFZ#O#8c2XTKEiJTfewp{hP~Strcm?j} zfwy6W?umb@unX-94@ZdOa&9QZ_mWv|-JSpfufeT`Vs9`EH0B^YE0Wv`F(U%1;6udo zwqo{F4-J+9VdL%`NWnNoNWzWgl6%pDTH_zz;{ll7dV9XKEy=R^hitV)VxKrpq!riV zsNi+9y)ze;9>o{-u%Ui%nDuL(K(eCo+ZoN~M_~KV**sD=u#U}3thlt$jr^OFKRAb8=2l9b%duc$e#RAO6u7sHc#QeZaFkHzEi z;+lH?`Q~G&6HdA5O*sACFOs~(S#P~epND%6qf=Za8ClepkA!{Z`rpozNedcHaFkUE zW;{>1iDMhK-B0{EfV2jzx+caa0nzni)Yg)FvPeTzsUTBL#Obtc;OfDrW-I%t;;O8yY~iDv{-TIW{;m^)A@>D^7!*c*ef|1z z=tS(XEcnl^zrTzD$6Xe7{EwthO#|c*htq<3|jUq}TDn7m{A11Y(c2&q= z=UeBQMu_oavET7KPZIDuH@_-^ zd{^-UWb}zMwU#~c+4UYIpS^gWvh?>VFkBmvmgDXS%#}z#RV_26`Ow*uYS$Tspj&H;w3=*xOeRN|gf3gOp7y=8_{!tG{D#R*Zp-d6Zt*kQR!okYuYNi! z!ZzquhEVNXLF2b;d4_j}T32uBCHBm3|EzEugxIEUyuCfeFvo}StsgW<%-EYxRgI^z zqTX=S9$sOVE|3`Pl4y-Amjt(b$aIabCuLE$wVP#ItVoMB?vdT}jTez=!WI`-adX$Q z9TyxRgjh~VBUngdSV%#H3rx5m4J@S4_Pgk_YRXr5aw4K0IwB&%578}6^_vEoqHgx7 zmNQ`S&l znqSJtbOnOSdovkX)>HGkR@G4b>zjA{V*yTEPiXFVm0b~aHFCogQD#%sTlmhuZmP)~ zbEp22f0uQ!4xN_nE!cOfPX+0}dN_H~IS8-mPr22(8^} zdiK_n!1^F$KvM&{5#9K~+s~^?p-E14R=z1X$R_~hRo$dy_a;#ck1_9CMn{ZqZ`k7( zj{^MteSJ_~0U^PjUcV2&J=l40P~THiDPow3a0%yJR(EbeU;aqnt60rA)_bXnBnKBDvxQW!ac(bY&e?x02Z6;mOa6 zxs=Q|m79*0Q`Zx(49kr)@SMK+M%o9SKXn&i{kd?tB~)c4ew(YPs)%v{Np=bg^;nF+ z1>!y_2a<_s1XOWqz-lx*K|ixijf`K>kQ5B>b@b=g8Rm!It4OQh#G=F5;PJhlQ=J;9 z&8TIWWgf-Nw@Ctm37Tmw0ifJuYjcO`9rmRN%Ytbk!>6kfZy2k~-y;J2 `gI%M# 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 bCHn6JmN9~uKj;*tz@b delta 4669 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 4.0.0 + com.kingsrook.qbitsqbit-document-generation-reactor${revision}../../../pom.xml com.kingsrook.thirdpartyopenhtmltopdf-pdfbox${revision} OpenHTML PDFBox raster metadata correction Source-built OpenHTML1.1.105 with a narrow image-copy correction; LGPL2.1-or-later. Not an original upstream release: its Maven version is the QBit Document Generation family version; the upstream version and the QQQ patch level are in the openhtml.* properties. @@ -8,7 +9,7 @@ scm:git:https://github.com/danfickle/openhtmltopdf.githttps://github.com/danfickle/openhtmltopdf/tree/1.1.1051.1.105 GNU Lesser General Public License2.1 or laterhttps://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - 0.1.0-SNAPSHOT1.1.10554b31598f14ea77139ec435106810ba67bd68656p1821UTF-82026-10-31T00:00:00Z + 1.1.10554b31598f14ea77139ec435106810ba67bd68656p1821UTF-82026-10-31T00:00:00Ztrue org.apache.pdfboxpdfbox3.0.8 org.apache.pdfboxxmpbox3.0.8 @@ -18,8 +19,8 @@ org.apache.maven.pluginsmaven-resources-plugin3.3.1 - org.apache.maven.pluginsmaven-compiler-plugin3.14.1 - org.apache.maven.pluginsmaven-surefire-plugin3.5.4true${project.build.directory} + org.apache.maven.pluginsmaven-compiler-plugin3.14.188 + org.apache.maven.pluginsmaven-surefire-plugin3.5.4true${project.build.directory} org.apache.maven.pluginsmaven-jar-plugin3.4.2 org.apache.maven.pluginsmaven-source-plugin3.3.1jar-no-fork org.codehaus.mojoflatten-maven-plugin1.7.3trueossrhflattenprocess-resourcesflattenflatten.cleancleanclean diff --git a/renderer/vendor/openhtml-1.1.105-qqq-p1/verify-module-source.sh b/renderer/vendor/openhtml-1.1.105-qqq-p1/verify-module-source.sh index d69a7d1..fa82fc3 100644 --- a/renderer/vendor/openhtml-1.1.105-qqq-p1/verify-module-source.sh +++ b/renderer/vendor/openhtml-1.1.105-qqq-p1/verify-module-source.sh @@ -7,5 +7,10 @@ work=$(mktemp -d) trap 'rm -rf "$work"' EXIT (cd "$work" && jar xf "$vendor/openhtmltopdf-pdfbox-1.1.105-qqq-p1-complete-source.zip") diff -r "$work/module/src" "$vendor/src" -cmp "$work/module/pom.xml" "$vendor/pom.xml" +# the archive's module POM differs from the repository module POM only in the parent's relativePath (inside the archive: ../parent/pom.xml) +strip() { sed 's#[^<]*##' "$1"; } +strip "$work/module/pom.xml" > "$work/module-pom.normalized" +strip "$vendor/pom.xml" > "$work/repository-pom.normalized" +cmp "$work/module-pom.normalized" "$work/repository-pom.normalized" +cmp "$work/parent/pom.xml" "$vendor/../../../pom.xml" echo "module source identical to archive" -- 2.54.0 From d7199d385e997408e6f8e2bb9a2c8ffd2116acc6 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 6 Nov 2026 08:21:46 -0600 Subject: [PATCH 4/4] fix: keep the literal revision tag out of the root POM comment The shared Maven workflow reads the version with grep -m1 on the revision element, so a comment mentioning the element made it parse prose as the version and fail every publish run. Co-Authored-By: Claude Sonnet 5.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7f3eb59..ba36843 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - -- 2.54.0