RFD/CFT: www/angie: use upstream versions for all modules; using intermediate variables for DISTVERSION/PORTREVISION?
Sebastian Oswald <[email protected]>
| Newsgroups | gmane.os.freebsd.devel.ports |
|---|---|
| Message-ID | <[email protected]> |
Hello All,
I recently inherited maintaniership of www/angie and its related
angie-module-* ports.
Those modules were all set up as slave ports and always inherited the
version nmuber from www/angie.
I wanted to fix this for a while now, because it made it rather tedious
for me (and essentially all users) to keep track of the actual module
versions and upstream version changes/updates. Of course, portscout also
could not determine the correct version of the modules and inform me of
updates (I subscribed to all the upstream git repos instead).
It turned out this inheritance also implicated, that setting a
PORTREVISION in one of the module/slave ports propagates to the
www/angie version and thus breaking the build (as there is no such
revision for www/angie).
This just happened and made me finally tackle this problem to prevent
such accidents in the future.
Sadly, I couldn't find another master/slave ports family that uses
distinct versions for the master and slaves, and the porters handbook
unfortunately is a bit scarce on information about master/slave ports
and their implications or nuances. (And if there is already a mechanism
in place to deal with this specific problem)
So after lots of testing I think I found a viable solution that isn't
too invasive and allows me keeping the modules as slave ports instead
of copying (and maintaining) almost the entire contents of the www/angie
Makefile 27 times...
Please have a look at the attached patch and its commit message,
explaining the changes an reasons for them in detail. The diff to
www/angie/Makefile that makes it all happen is located at the end of the
patch.
For convenience here is the important snippet of the resulting Makefile:
=====
PORTNAME?= angie
MASTER_DISTVERSION= 1.10.2
MASTER_PORTREVISION= 1
[...]
.if ${PORTNAME} == angie
DISTVERSION= ${MASTER_DISTVERSION}
PORTREVISION= ${MASTER_PORTREVISION}
LICENSE_FILE= ${WRKSRC}/LICENSE
LIB_DEPENDS= libpcre2-8.so:devel/pcre2
USE_RC_SUBR= angie
ALL_TARGET= build
SUB_FILES= angie.conf.sample \
default.conf.sample \
example.conf.sample \
pkg-message
.else
# module build; module Makefiles set the PORTVERSION
PORTEPOCH= 1
LICENSE_FILE?= ${WRKSRC_module}/LICENSE
BUILD_DEPENDS+= pcre2>=0:devel/pcre2
RUN_DEPENDS+= angie>=${MASTER_DISTVERSION}:www/angie
ALL_TARGET?= modules
CONFIGURE_ADD?= --add-dynamic-module=${WRKSRC_module}
.endif
=====
Before proposing this patch for commit, I'd like to get some feedback
about my chosen solution and especially, if it is acceptable to use
custom variables (MASTER_DISTVERSION and MASTER_PORTREVISION) as
intermediates for the DISTVERSION and PORTREVISION.
In essence, I needed a mechanism to carry on the www/angie DISTVERSION
when building a module, without some of the implications DISTVERSION
brings with it. Depending on correct overrides of DISTVERSION always
caused a lot of exceptions and edge-cases I had to handle individually
(e.g. with various additional .if blocks). It also meant I had to
define the the www/angie in an additional variable for module builds,
leading to multiple points where a version update needs to be reflected
(i.e. an accident waiting to happen).
Defining DISTVERSION for the master and PORTVERSION for the slaves or
defining one from the other and similar tricks using both also were no
option, because defining both is forbidden and fails the sanity check.
So the IMHO cleanest and safest solution was the use of those
intermediate variables to have a single point of truth for the version.
Thanks in advance for any feedback or hints on improvements/changes I
should/have to make (or if this approach is complete nonsense).
I really want this change to be safer and more future-proof than the
current state, not make it even more dangerous and opaque.
Regards,
Sebastian
--
Sebastian Oswald
GnuPG-Key-ID: 0x313F3181
www-angie_use-upstream-version-numbers-for-modules.patch
(text/x-patch, 15.3 KB)
From 6fe8f5cc26948073a02451434c9a376ee5bf0efe Mon Sep 17 00:00:00 2001 From: Charlie Root <[email protected]> Date: Fri, 17 Oct 2025 09:53:18 +0200 Subject: [PATCH] www/angie*: use upstream version numbers for modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously all angie-module-* ports inherited the version number of the angie version they were built against. This made it hard to track their actual versions and very opaque for the user. The modules are slave ports to www/angie, inheriting its Makefile during built. This led to unwanted behaviour like the PORTREVISION in a module propagating to the master port (www/angie) version number and breaking the build. (We found out the hard way™) To adopt upstream versions to the modules while ensuring slave (module) and master (angie) version numbers and modifiers (PORTREVISION) don't cross-pollinate, but still keeping the master/slave architecture, we need a small kludge. This means the www/angie-module-* Makefiles need to set the PORTVERSION instead of DISTVERSION. This also circumvents possible problems with some "special" versioning conventions chosen by some upstream maintainers that are incompatible with the way DISTVERSION works. Modules that only have a git hash still inherit the www/angie version and need to be bumped via PORTREVISION in case of updates. (Both modules in question did not receive any updates for >3 years) In www/angie/Makefile the DISTVERSION and PORTREVISION have to be set as MASTER_DISTVERSION and MASTER_PORTREVISION. The Makefile then handles defining DISTVERSION and PORTREVISION according to the type of build (angie or module). To ensure all modules being properly upgraded after this change, we have to introduce the PORTEPOCH to all module ports. We could only set PORTEPOCH for those with a lower version number than www/angie, but having all modules on the same epoch makes it much easier to spot inconsistencies. So for the sake of sanity and POLA, we bump all www/angie-module* ports to the same EPOCH. --- www/angie-module-auth-jwt/Makefile | 3 ++- www/angie-module-auth-spnego/Makefile | 3 ++- www/angie-module-auth-totp/Makefile | 3 ++- www/angie-module-brotli/Makefile | 3 ++- www/angie-module-cache-purge/Makefile | 3 ++- www/angie-module-dav-ext/Makefile | 3 ++- www/angie-module-echo/Makefile | 3 ++- www/angie-module-enhanced-memcached/Makefile | 3 ++- www/angie-module-eval/Makefile | 3 ++- www/angie-module-geoip2/Makefile | 3 ++- www/angie-module-headers-more/Makefile | 3 ++- www/angie-module-jwt/Makefile | 3 ++- www/angie-module-keyval/Makefile | 3 ++- www/angie-module-lua/Makefile | 5 +++-- www/angie-module-ndk/Makefile | 3 ++- www/angie-module-njs/Makefile | 3 ++- www/angie-module-postgres/Makefile | 3 ++- www/angie-module-redis2/Makefile | 3 ++- www/angie-module-rtmp/Makefile | 3 ++- www/angie-module-set-misc/Makefile | 3 ++- www/angie-module-subs/Makefile | 1 + www/angie-module-testcookie/Makefile | 1 + www/angie-module-upload/Makefile | 3 ++- www/angie-module-vod/Makefile | 3 ++- www/angie-module-xslt/Makefile | 1 + www/angie/Makefile | 11 +++++++---- 26 files changed, 55 insertions(+), 27 deletions(-) diff --git a/www/angie-module-auth-jwt/Makefile b/www/angie-module-auth-jwt/Makefile index 6c78be4c6638..83064a517015 100644 --- a/www/angie-module-auth-jwt/Makefile +++ b/www/angie-module-auth-jwt/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-auth-jwt -GH_TUPLE= kjdev:nginx-auth-jwt:0.9.0:module +PORTVERSION= 0.9.0 +GH_TUPLE= kjdev:nginx-auth-jwt:${PORTVERSION}:module COMMENT= Angie auth-jwt dynamic module diff --git a/www/angie-module-auth-spnego/Makefile b/www/angie-module-auth-spnego/Makefile index 41803c80b2d9..4ea5c096e3d6 100644 --- a/www/angie-module-auth-spnego/Makefile +++ b/www/angie-module-auth-spnego/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-auth-spnego -GH_TUPLE= stnoonan:spnego-http-auth-nginx-module:v1.1.3:module +PORTVERSION= v1.1.3 +GH_TUPLE= stnoonan:spnego-http-auth-nginx-module:${PORTVERSION}:module COMMENT= Angie auth-spnego dynamic module diff --git a/www/angie-module-auth-totp/Makefile b/www/angie-module-auth-totp/Makefile index 702a9ba40684..30e8c2fe9a10 100644 --- a/www/angie-module-auth-totp/Makefile +++ b/www/angie-module-auth-totp/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-auth-totp -GH_TUPLE= 61131:nginx-http-auth-totp:1.1.0:module +PORTVERSION= 1.1.0 +GH_TUPLE= 61131:nginx-http-auth-totp:${PORTVERSION}:module COMMENT= Angie auth-totp dynamic module diff --git a/www/angie-module-brotli/Makefile b/www/angie-module-brotli/Makefile index 2ec4cb655895..ad9aa681fd73 100644 --- a/www/angie-module-brotli/Makefile +++ b/www/angie-module-brotli/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-brotli -GH_TUPLE= google:ngx_brotli:v1.0.0rc:module +PORTVERSION= v1.0.0rc +GH_TUPLE= google:ngx_brotli:${PORTVERSION}:module COMMENT= Angie Brotli dynamic module diff --git a/www/angie-module-cache-purge/Makefile b/www/angie-module-cache-purge/Makefile index b7bdee160341..4c4fa1177406 100644 --- a/www/angie-module-cache-purge/Makefile +++ b/www/angie-module-cache-purge/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-cache-purge -GH_TUPLE= nginx-modules:ngx_cache_purge:2.5.4:module +PORTVERSION= 2.5.4 +GH_TUPLE= nginx-modules:ngx_cache_purge:${PORTVERSION}:module COMMENT= Angie cache_purge dynamic module diff --git a/www/angie-module-dav-ext/Makefile b/www/angie-module-dav-ext/Makefile index d403b808d478..1bb577b98d58 100644 --- a/www/angie-module-dav-ext/Makefile +++ b/www/angie-module-dav-ext/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-dav-ext -GH_TUPLE= arut:nginx-dav-ext-module:v3.0.0:module +PORTVERSION= v3.0.0 +GH_TUPLE= arut:nginx-dav-ext-module:${PORTVERSION}:module COMMENT= Angie dav-ext dynamic module diff --git a/www/angie-module-echo/Makefile b/www/angie-module-echo/Makefile index 94804caec685..bfe5e547c48e 100644 --- a/www/angie-module-echo/Makefile +++ b/www/angie-module-echo/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-echo -GH_TUPLE= openresty:echo-nginx-module:v0.63:module +PORTVERSION= v0.63 +GH_TUPLE= openresty:echo-nginx-module:${PORTVERSION}:module COMMENT= Angie echo dynamic module diff --git a/www/angie-module-enhanced-memcached/Makefile b/www/angie-module-enhanced-memcached/Makefile index 54e3891d54e4..3f04a8beab93 100644 --- a/www/angie-module-enhanced-memcached/Makefile +++ b/www/angie-module-enhanced-memcached/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-enhanced-memcached -GH_TUPLE= bpaquet:ngx_http_enhanced_memcached_module:v0.3:module +PORTVERSION= v0.3 +GH_TUPLE= bpaquet:ngx_http_enhanced_memcached_module:${PORTVERSION}:module COMMENT= Angie enhanced memcached dynamic module diff --git a/www/angie-module-eval/Makefile b/www/angie-module-eval/Makefile index 94a108b14c46..694824ce4bba 100644 --- a/www/angie-module-eval/Makefile +++ b/www/angie-module-eval/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-eval -GH_TUPLE= openresty:nginx-eval-module:2016.06.10:module +PORTVERSION= 2016.06.10 +GH_TUPLE= openresty:nginx-eval-module:${PORTVERSION}:module COMMENT= Angie eval dynamic module diff --git a/www/angie-module-geoip2/Makefile b/www/angie-module-geoip2/Makefile index 7df133590ec7..b1e5dc8ff757 100644 --- a/www/angie-module-geoip2/Makefile +++ b/www/angie-module-geoip2/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-geoip2 -GH_TUPLE= leev:ngx_http_geoip2_module:3.4:module +PORTVERSION= 3.4 +GH_TUPLE= leev:ngx_http_geoip2_module:${PORTVERSION}:module COMMENT= Angie GeoIP2 dynamic module diff --git a/www/angie-module-headers-more/Makefile b/www/angie-module-headers-more/Makefile index b2879e7f6f9f..a54f0820cd4a 100644 --- a/www/angie-module-headers-more/Makefile +++ b/www/angie-module-headers-more/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-headers-more -GH_TUPLE= openresty:headers-more-nginx-module:v0.39:module +PORTVERSION= v0.39 +GH_TUPLE= openresty:headers-more-nginx-module:${PORTVERSION}:module COMMENT= Angie headers-more dynamic module diff --git a/www/angie-module-jwt/Makefile b/www/angie-module-jwt/Makefile index 2644023a3c9c..6c46db4c1495 100644 --- a/www/angie-module-jwt/Makefile +++ b/www/angie-module-jwt/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-jwt -GH_TUPLE= max-lt:nginx-jwt-module:v3.4.3:module +PORTVERSION= v3.4.3 +GH_TUPLE= max-lt:nginx-jwt-module:${PORTVERSION}:module COMMENT= Angie JWT dynamic module diff --git a/www/angie-module-keyval/Makefile b/www/angie-module-keyval/Makefile index 432310743eb8..5ab1fc6f11ea 100644 --- a/www/angie-module-keyval/Makefile +++ b/www/angie-module-keyval/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-keyval -GH_TUPLE= kjdev:nginx-keyval:0.3.0:module +PORTVERSION= 0.3.0 +GH_TUPLE= kjdev:nginx-keyval:${PORTVERSION}:module COMMENT= Angie keyval dynamic module diff --git a/www/angie-module-lua/Makefile b/www/angie-module-lua/Makefile index 4dd019336620..a7f8095c41c6 100644 --- a/www/angie-module-lua/Makefile +++ b/www/angie-module-lua/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-lua -GH_TUPLE= openresty:lua-nginx-module:v0.10.28:lua +PORTVERSION= v0.10.28 +GH_TUPLE= openresty:lua-nginx-module:${PORTVERSION}:lua GH_TUPLE+= openresty:stream-lua-nginx-module:v0.0.16:lua_stream GH_TUPLE+= vision5:ngx_devel_kit:v0.3.4:ndk @@ -16,7 +17,7 @@ CONFIGURE_ADD= --add-dynamic-module=${WRKSRC_lua} \ CONFIGURE_ENV= LUAJIT_INC=${LUAJIT_INCDIR} \ LUAJIT_LIB=${LOCALBASE}/lib -RUN_DEPENDS= angie-module-ndk==${PKGVERSION}:www/angie-module-ndk \ +RUN_DEPENDS= angie-module-ndk==v0.3.4,2:www/angie-module-ndk \ lua-resty-core>=0.1.29:www/lua-resty-core USES= luajit:luajit-openresty diff --git a/www/angie-module-ndk/Makefile b/www/angie-module-ndk/Makefile index dc0e57861dae..0d18c38a26de 100644 --- a/www/angie-module-ndk/Makefile +++ b/www/angie-module-ndk/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-ndk -GH_TUPLE= vision5:ngx_devel_kit:v0.3.4:module +PORTVERSION= v0.3.4 +GH_TUPLE= vision5:ngx_devel_kit:${PORTVERSION}:module COMMENT= Angie NDK dynamic module diff --git a/www/angie-module-njs/Makefile b/www/angie-module-njs/Makefile index f69739a1be2f..811546e5e206 100644 --- a/www/angie-module-njs/Makefile +++ b/www/angie-module-njs/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-njs -GH_TUPLE= nginx:njs:0.9.1:module +PORTVERSION= 0.9.1 +GH_TUPLE= nginx:njs:${PORTVERSION}:module COMMENT= Angie NJS dynamic module diff --git a/www/angie-module-postgres/Makefile b/www/angie-module-postgres/Makefile index b672ce013b86..597e7419958e 100644 --- a/www/angie-module-postgres/Makefile +++ b/www/angie-module-postgres/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-postgres -GH_TUPLE= FRiCKLE:ngx_postgres:1.0rc7:module +PORTVERSION= 1.0rc7 +GH_TUPLE= FRiCKLE:ngx_postgres:${PORTVERSION}:module COMMENT= Angie postgres dynamic module diff --git a/www/angie-module-redis2/Makefile b/www/angie-module-redis2/Makefile index 2ab1a5856835..29de8fe5da4a 100644 --- a/www/angie-module-redis2/Makefile +++ b/www/angie-module-redis2/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-redis2 -GH_TUPLE= openresty:redis2-nginx-module:v0.15:module +PORTVERSION= v0.15 +GH_TUPLE= openresty:redis2-nginx-module:${PORTVERSION}:module COMMENT= Angie redis2 dynamic module diff --git a/www/angie-module-rtmp/Makefile b/www/angie-module-rtmp/Makefile index 1baca0453d21..a83fba0f30bf 100644 --- a/www/angie-module-rtmp/Makefile +++ b/www/angie-module-rtmp/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-rtmp -GH_TUPLE= arut:nginx-rtmp-module:v1.2.2:module +PORTVERSION= v1.2.2 +GH_TUPLE= arut:nginx-rtmp-module:${PORTVERSION}:module COMMENT= Angie RTMP dynamic module diff --git a/www/angie-module-set-misc/Makefile b/www/angie-module-set-misc/Makefile index 64b5078e7f96..0350797c7b34 100644 --- a/www/angie-module-set-misc/Makefile +++ b/www/angie-module-set-misc/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-set-misc -GH_TUPLE= vision5:ngx_devel_kit:v0.3.4:ndk +PORTVERSION= v0.3.4 +GH_TUPLE= vision5:ngx_devel_kit:${PORTVERSION}:ndk GH_TUPLE+= openresty:set-misc-nginx-module:v0.33:module COMMENT= Angie set-misc dynamic module diff --git a/www/angie-module-subs/Makefile b/www/angie-module-subs/Makefile index b444f72eab8a..738d1a84adbb 100644 --- a/www/angie-module-subs/Makefile +++ b/www/angie-module-subs/Makefile @@ -1,4 +1,5 @@ PORTNAME= angie-module-subs +PORTVERSION= ${MASTER_DISTVERSION} GH_TUPLE= yaoweibin:ngx_http_substitutions_filter_module:e12e965ac1837ca709709f9a26f572a54d83430e:module COMMENT= Angie substitutions filter dynamic module diff --git a/www/angie-module-testcookie/Makefile b/www/angie-module-testcookie/Makefile index f4026c99bd06..1c4e1f8acd4d 100644 --- a/www/angie-module-testcookie/Makefile +++ b/www/angie-module-testcookie/Makefile @@ -1,4 +1,5 @@ PORTNAME= angie-module-testcookie +PORTVERSION= ${MASTER_DISTVERSION} GH_TUPLE= kyprizel:testcookie-nginx-module:64137c2f7e66e8866f56fdecaaf09ac10a034da9:module COMMENT= Angie testcookie dynamic module diff --git a/www/angie-module-upload/Makefile b/www/angie-module-upload/Makefile index 11edfbe73956..2f1bbdfbe7f7 100644 --- a/www/angie-module-upload/Makefile +++ b/www/angie-module-upload/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-upload -GH_TUPLE= fdintino:nginx-upload-module:2.3.0:module +PORTVERSION= 2.3.0 +GH_TUPLE= fdintino:nginx-upload-module:${PORTVERSION}:module COMMENT= Angie upload dynamic module diff --git a/www/angie-module-vod/Makefile b/www/angie-module-vod/Makefile index 794908d2d342..6e86edce6e76 100644 --- a/www/angie-module-vod/Makefile +++ b/www/angie-module-vod/Makefile @@ -1,5 +1,6 @@ PORTNAME= angie-module-vod -GH_TUPLE= kaltura:nginx-vod-module:1.33:module +PORTVERSION= 1.33 +GH_TUPLE= kaltura:nginx-vod-module:${PORTVERSION}:module COMMENT= VOD dynamic module for Angie diff --git a/www/angie-module-xslt/Makefile b/www/angie-module-xslt/Makefile index 3264ada0959d..5ada78c1a8c3 100644 --- a/www/angie-module-xslt/Makefile +++ b/www/angie-module-xslt/Makefile @@ -1,4 +1,5 @@ PORTNAME= angie-module-xslt +PORTVERSION= ${MASTER_DISTVERSION} COMMENT= Angie XSLT dynamic module diff --git a/www/angie/Makefile b/www/angie/Makefile index 7ac5e95fde80..8faf8e9169f0 100644 --- a/www/angie/Makefile +++ b/www/angie/Makefile @@ -1,9 +1,9 @@ PORTNAME?= angie -DISTVERSION= 1.10.2 -PORTREVISION= 1 +MASTER_DISTVERSION= 1.10.2 +MASTER_PORTREVISION= 2 CATEGORIES+= www MASTER_SITES+= https://download.angie.software/files/:angie -DISTNAME= angie-${DISTVERSIONFULL} +DISTNAME= angie-${MASTER_DISTVERSION} DISTFILES+= ${DISTNAME}${EXTRACT_SUFX}:angie MAINTAINER?= [email protected] @@ -13,6 +13,8 @@ WWW?= https://angie.software/en/ LICENSE?= BSD2CLAUSE .if ${PORTNAME} == angie +DISTVERSION= ${MASTER_DISTVERSION} +PORTREVISION= ${MASTER_PORTREVISION} LICENSE_FILE= ${WRKSRC}/LICENSE LIB_DEPENDS= libpcre2-8.so:devel/pcre2 USE_RC_SUBR= angie @@ -22,9 +24,10 @@ SUB_FILES= angie.conf.sample \ example.conf.sample \ pkg-message .else +PORTEPOCH= 1 LICENSE_FILE?= ${WRKSRC_module}/LICENSE BUILD_DEPENDS+= pcre2>=0:devel/pcre2 -RUN_DEPENDS+= angie==${PKGVERSION}:www/angie +RUN_DEPENDS+= angie>=${MASTER_DISTVERSION}:www/angie ALL_TARGET?= modules CONFIGURE_ADD?= --add-dynamic-module=${WRKSRC_module} .endif -- 2.51.0
signature.asc
(application/pgp-signature, 488 B)
-----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEErQouifc5ybqTEVgvLx1vPG8zTyoFAmjyEXQACgkQLx1vPG8z TypcfQf9GxwhhFFcWaK+vE5c4G05zPEA0v6iMpZuX1ct3sz2aPnnoeRoVvG2l2WF 3DYNunpey0gr7T8tek/TRAWAuClcNAsmWrl5T0rQbPtn6Sn8cn73Xghw/cuV4NY9 4nUajNLE52wYz5X9DOxymyfeIM2OVJISRPeuPoQ44Pq57T1S9viMH4KBTBRpQwoA SN3HvOPbCbJaKXWj9B7ZdrwEmEpA2kNtRPibu3eB1rgFbGADlNds7u7R2Idrr1KA JaRh2rzK/53cxoWQUFJziKBjuz9YACHW25dPMA2KTYCMOFJRxuvCi7zJ2C9g5g/h qbLlfniT98JcY/lnKE/GMVBanZsE7A== =s7I8 -----END PGP SIGNATURE-----