From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id aHO4G7xZ6GVphwAAqHPOHw:P1 (envelope-from ) for ; Wed, 06 Mar 2024 12:55:40 +0100 Received: from aspmx1.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0.migadu.com with LMTPS id aHO4G7xZ6GVphwAAqHPOHw (envelope-from ) for ; Wed, 06 Mar 2024 12:55:40 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1709726140; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post; bh=/1Q+5mWWsYZsCbMC0SAozFyKAKI/66or26y5xraxmkM=; b=cI5XJzZ9nPZkfdr2jvYGqlAjo+lMpQijLMWwzJclL/FdBOgPeWVF7KEoLbRL2Jg4n1YnKr Kq5A6JBvnB2UsZbqkBxZjd65doeXTQ9ZGMYQYYoRaBz5+XnaKZSybeks/FnSIBs86VFYbh Iw96Ipgd3eiKir6BaQJDjaY2O9QYIhrdmhnfxvbarilHiUwDIKJKggLjfAckyQmH/bqQNQ 2+bswoDsQg3DhrX95OTjxN50gZS7x09Lld0H1/bU2ZIU97YLMRdcGQ9HHG0jdVqcFrQz7q YQgj3Np09uYToqo8+KHpwusBvo00+jqZAvPXcW7P54JmdmGHIhjMcklwYRwqpQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1709726140; a=rsa-sha256; cv=none; b=ADV+x8xJD2pWNUnSfFGFYTnSMrXO8evtJmSUz/ECO+iGCS5MhsarizyOqwwPmMpxEDqwEM +TJQpoa9IzlB7rzKFRCLFcOVQ3bQ+OrtWqT89CwnbY7Rz6OJqV1JMvIh2UDzKfsvPJqosO olXcr32hYKrajQe4R3QIw7pjyfgpbnwSjHgAcvOGH/RcMHZlQqRD7omV1L2wi6CsjZFsE3 mNylO89poi274pe9nnwlhxzR6gJrCGZ0wGD+I2zkYqrt53plbI6nUhPp9/LerRHnuK7FRj oCTQoQSDBhanoSBX4kZ90i8D43UmqIGB00MkfhmL4LFAN83afWTAmj2bJSGvDw== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 1162E516B0 for ; Wed, 6 Mar 2024 12:55:40 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rhprw-0006qI-Tw; Wed, 06 Mar 2024 06:55:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rhprv-0006pu-Oj for bug-guix@gnu.org; Wed, 06 Mar 2024 06:55:31 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rhprv-00025U-Fy for bug-guix@gnu.org; Wed, 06 Mar 2024 06:55:31 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rhpsQ-0006pb-74 for bug-guix@gnu.org; Wed, 06 Mar 2024 06:56:02 -0500 X-Loop: help-debbugs@gnu.org Subject: bug#57005: [PATCH v4] gnu: petsc: scrub build machine specifics Resent-From: Lars Bilke Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Wed, 06 Mar 2024 11:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 57005 X-GNU-PR-Package: guix X-GNU-PR-Keywords: To: 57005@debbugs.gnu.org Received: via spool by 57005-submit@debbugs.gnu.org id=B57005.170972613126214 (code B ref 57005); Wed, 06 Mar 2024 11:56:02 +0000 Received: (at 57005) by debbugs.gnu.org; 6 Mar 2024 11:55:31 +0000 Received: from localhost ([127.0.0.1]:49943 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rhpru-0006ok-AQ for submit@debbugs.gnu.org; Wed, 06 Mar 2024 06:55:31 -0500 Received: from mailgate5.ufz.de ([141.65.7.212]:52014 helo=mailgate.ufz.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rhprr-0006oO-91 for 57005@debbugs.gnu.org; Wed, 06 Mar 2024 06:55:28 -0500 Received: from imap.intranet.ufz.de (dcs1.intranet.ufz.de [141.65.125.135]) by mailgate.ufz.de (Mailgate5-UFZ) with ESMTP id 009721602C4 for <57005@debbugs.gnu.org>; Wed, 6 Mar 2024 12:54:51 +0100 (CET) MIME-version: 1.0 Received: from conversion-daemon.imap.intranet.ufz.de by imap.intranet.ufz.de (Oracle Communications Messaging Server 8.0.2.6.20200227 64bit (built Feb 27 2020)) id <0S9X00L00CVLWZ00@imap.intranet.ufz.de> for 57005@debbugs.gnu.org; Wed, 06 Mar 2024 12:54:50 +0100 (CET) Received: from smtp1.ufz.de ([141.65.7.216]) by imap.intranet.ufz.de (Oracle Communications Messaging Server 8.0.2.6.20200227 64bit (built Feb 27 2020)) with ESMTPS id <0S9X00EEID3EUJF0@imap.intranet.ufz.de> for 57005@debbugs.gnu.org; Wed, 06 Mar 2024 12:54:50 +0100 (CET) Received: from [198.19.249.3] (ufz542757.intranet.ufz.de [141.65.235.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp1.ufz.de (smtp1-UFZ) with ESMTPSA id 6F4028020B for <57005@debbugs.gnu.org>; Wed, 6 Mar 2024 12:54:50 +0100 (CET) Date: Wed, 06 Mar 2024 12:54:49 +0100 From: Lars Bilke In-reply-to: <8d1edc3769b3994fc2a7be34470509e7f45aee31.1709725874.git.lars.bilke@ufz.de> Message-id: <8412A210-E386-46B9-A3E1-10D9240AA484@ufz.de> X-Mailer: MailMate (1.14r5937) Content-type: multipart/signed; boundary="=_MailMate_B4579DDC-11F1-45A6-9D24-A882A7FA9C79_="; micalg=sha-256; protocol="application/pkcs7-signature" References: <8d1edc3769b3994fc2a7be34470509e7f45aee31.1709725874.git.lars.bilke@ufz.de> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: bug-guix-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Spam-Score: -7.87 X-Spam-Score: -7.87 X-Migadu-Queue-Id: 1162E516B0 X-Migadu-Scanner: mx13.migadu.com X-TUID: i6yuLoCm4TOr This is an S/MIME signed message (RFC 5652 and 8551). --=_MailMate_B4579DDC-11F1-45A6-9D24-A882A7FA9C79_= Content-Type: multipart/alternative; boundary="=_MailMate_65FDE64D-0B39-4C62-BFE2-D4B6A89FD0A6_=" --=_MailMate_65FDE64D-0B39-4C62-BFE2-D4B6A89FD0A6_= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable v4 should (hopefully) fix all issues regarding reprocuibility of petsc: I have tested v4 on multiple machines with exact identical output (ran `g= uix hash -S nar ...` on the packages) and also tested on one machine with= `guix build --check` On 6 Mar 2024, at 12:51, Lars Bilke wrote: > 'Libraries compiled on' does not have to be removed since PETSc 3.9: > > https: //gitlab.com/petsc/petsc/-/commit/a970bd748978a4e12790be7c36b10e= 832ec0149f > > Also merged all add-after 'install phases into `clean-install. > > Change-Id: I41d82339e43187d7dc7e3fc189a338784c363c68 > > sort source files in generated makefiles for reproducibility > > Change-Id: I86e5b9cd0d7184019617bd8ae9a23eaf459891d7 > --- > gnu/packages/maths.scm | 56 ++++++++++++++++++------------------------= > 1 file changed, 24 insertions(+), 32 deletions(-) > > diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm > index 1f61ee0583..1ea5ccee74 100644 > --- a/gnu/packages/maths.scm > +++ b/gnu/packages/maths.scm > @@ -3447,38 +3447,41 @@ (define-public petsc > (let* ((prefix (assoc-ref outputs "out")) > (flags `(,(string-append "--prefix=3D" prefix) > ,@configure-flags))) > + ;; sort source files in configure (for reproducibility= ) > + (substitute* "config/gmakegen.py" > + (("join\\(srcs\\[lang\\]\\)") "join(sorted(srcs[lan= g]))")) > (format #t "build directory: ~s~%" (getcwd)) > (format #t "configure flags: ~s~%" flags) > (apply invoke "./configure" flags) > - > + ;; Prevent build directory Linux version from leaking = into > + ;; compiled code > + (substitute* (find-files "." "petscmachineinfo.h") > + (((getcwd)) out) > + ;; Scrub build machine characteristic > + (("Machine characteristics: Linux-[0-9]+\\.[0-9]+\\.= [0-9]+") > + "Machine characteristics: Linux-x.x.x")) > ;; Generate test scripts with the right shebang. > (substitute* "config/example_template.py" > (("#!/usr/bin/env bash") > (string-append "#!" (which "bash"))))))) > - (add-after 'configure 'clean-local-references > - (lambda* (#:key outputs #:allow-other-keys) > - (let ((out (assoc-ref outputs "out"))) > - (substitute* (find-files "." "^petsc(conf|machineinfo)= =2Eh$") > - ;; Prevent build directory from leaking into compile= d code > - (((getcwd)) out) > - ;; Scrub timestamp for reproducibility > - ((".*Libraries compiled on.*") "")) > - (substitute* (find-files "." "petscvariables") > - ;; Do not expose build machine characteristics, set = to defaults. > - (("MAKE_NP =3D [:digit:]+") "MAKE_NP =3D 2") > - (("NPMAX =3D [:digit:]+") "NPMAX =3D 2"))))) > (add-after 'install 'clean-install > - ;; Try to keep installed files from leaking build director= y names. > (lambda* (#:key inputs outputs #:allow-other-keys) > (let ((out (assoc-ref outputs "out"))) > - (substitute* (map (lambda (file) > - (string-append out "/lib/petsc/con= f/" file)) > - '("petscvariables")) > - (((getcwd)) out)) > - ;; Make compiler references point to the store > (substitute* (string-append out "/lib/petsc/conf/petsc= variables") > - (("=3D (gcc|g\\+\\+|gfortran)" _ compiler) > - (string-append "=3D " (which compiler)))) > + ;; Try to keep installed files from leaking build di= rectory names. > + (((getcwd)) out) > + ;; Do not expose build machine characteristics, set = to defaults. > + (("MAKE_NP =3D [[:digit:]]+") "MAKE_NP =3D 2") > + (("MAKE_TEST_NP =3D [[:digit:]]+") "MAKE_TEST_NP =3D= 2") > + (("MAKE_LOAD =3D [[:digit:]]+\\.[[:digit:]]+") "MAKE= _LOAD =3D 2.0") > + (("NPMAX =3D [[:digit:]]+") "NPMAX =3D 2") > + ;; Do not retain a reference to GCC and other build = only inputs. > + (("([[:graph:]]+)/bin/gcc") "gcc") > + (("([[:graph:]]+)/bin/g\\+\\+") "g++") > + (("([[:graph:]]+)/bin/make") "make") > + (("([[:graph:]]+)/bin/diff") "diff") > + (("([[:graph:]]+)/bin/sed") "sed") > + (("([[:graph:]]+)/bin/gfortran") "gfortran")) > ;; PETSc installs some build logs, which aren't necess= ary. > (for-each (lambda (file) > (let ((f (string-append out "/lib/petsc/co= nf/" file))) > @@ -3490,17 +3493,6 @@ (define-public petsc > "configure-hash" > ;; Once installed, should uninstall with G= uix > "uninstall.py"))))) > - (add-after 'clean-install 'clear-reference-to-compiler > - (lambda* (#:key inputs outputs #:allow-other-keys) > - ;; Do not retain a reference to GCC and other build only= inputs. > - (let ((out (assoc-ref outputs "out"))) > - (substitute* (string-append out "/lib/petsc/conf/petscva= riables") > - (("([[:graph:]]+)/bin/gcc") "gcc") > - (("([[:graph:]]+)/bin/g\\+\\+") "g++") > - (("([[:graph:]]+)/bin/make") "make") > - (("([[:graph:]]+)/bin/diff") "diff") > - (("([[:graph:]]+)/bin/sed") "sed") > - (("([[:graph:]]+)/bin/gfortran") "gfortran"))))) > (add-after 'install 'move-examples > (lambda* (#:key outputs #:allow-other-keys) > (let* ((out (assoc-ref outputs "out")) > > base-commit: 75bad75367fcf2c289fae3b40dbcc850f92177be > -- = > 2.43.0 --=_MailMate_65FDE64D-0B39-4C62-BFE2-D4B6A89FD0A6_= Content-Type: text/html Content-Transfer-Encoding: quoted-printable

v4 should (hopefully) fix all issues regarding reprocuibi= lity of petsc:

I have tested v4 on multiple machines with exact identica= l output (ran guix hash -S nar ... on the pa= ckages) and also tested on one machine with guix bu= ild --check

On 6 Mar 2024, at 12:51, Lars Bilke wrote:

'Libraries compiled on' does not ha= ve to be removed since PETSc 3.9:

https: //gitlab.com/petsc/petsc/-/commit/a970bd748978a4e1= 2790be7c36b10e832ec0149f

Also merged all add-after 'install phases into `clean-ins= tall.

Change-Id: I41d82339e43187d7dc7e3fc189a338784c363c68

sort source files in generated makefiles for reproducibil= ity

Change-Id: I86e5b9cd0d7184019617bd8ae9a23eaf459891d7
---
gnu/packages/maths.scm | 56 ++++++++++++++++++------------------------
1 file changed, 24 insertions(+), 32 deletions(-)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.= scm
index 1f61ee0583..1ea5ccee74 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -3447,38 +3447,41 @@ (define-public petsc
(let* ((prefix (assoc-ref outputs "out"))
(flags `(,(string-append "--prefix=3D" prefix)
,@configure-flags)))
+ ;; sort source files in configure (for reproducibility)
+ (substitute* "config/gmakegen.py"
+ (("join\\(srcs\\[lang\\]\\)") "join(sorted(srcs[lang]= ))"))
(format #t "build directory: ~s~%" (getcwd))
(format #t "configure flags: ~s~%" flags)
(apply invoke "./configure" flags)
-
+ ;; Prevent build directory Linux version from leaking in= to
+ ;; compiled code
+ (substitute* (find-files "." "petscmachineinfo.h")
+ (((getcwd)) out)
+ ;; Scrub build machine characteristic
+ (("Machine characteristics: Linux-[0-9]+\\.[0-9]+\\.[0= -9]+")
+ "Machine characteristics: Linux-x.x.x"))
;; Generate test scripts with the right shebang.
(substitute* "config/example_template.py"
(("#!/usr/bin/env bash")
(string-append "#!" (which "bash")))))))
- (add-after 'configure 'clean-local-references
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (substitute* (find-files "." "^petsc(conf|machineinfo).h= $")
- ;; Prevent build directory from leaking into compiled = code
- (((getcwd)) out)
- ;; Scrub timestamp for reproducibility
- ((".*Libraries compiled on.*") ""))
- (substitute* (find-files "." "petscvariables")
- ;; Do not expose build machine characteristics, set to= defaults.
- (("MAKE_NP =3D [:digit:]+") "MAKE_NP =3D 2")
- (("NPMAX =3D [:digit:]+") "NPMAX =3D 2")))))
(add-after 'install 'clean-install
- ;; Try to keep installed files from leaking build directory = names.
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
- (substitute* (map (lambda (file)
- (string-append out "/lib/petsc/conf/= " file))
- '("petscvariables"))
- (((getcwd)) out))
- ;; Make compiler references point to the store
(substitute* (string-append out "/lib/petsc/conf/petscva= riables")
- (("=3D (gcc|g\\+\\+|gfortran)" _ compiler)
- (string-append "=3D " (which compiler))))
+ ;; Try to keep installed files from leaking build dire= ctory names.
+ (((getcwd)) out)
+ ;; Do not expose build machine characteristics, set to= defaults.
+ (("MAKE_NP =3D [[:digit:]]+") "MAKE_NP =3D 2")
+ (("MAKE_TEST_NP =3D [[:digit:]]+") "MAKE_TEST_NP =3D 2= ")
+ (("MAKE_LOAD =3D [[:digit:]]+\\.[[:digit:]]+") "MAKE_L= OAD =3D 2.0")
+ (("NPMAX =3D [[:digit:]]+") "NPMAX =3D 2")
+ ;; Do not retain a reference to GCC and other build on= ly inputs.
+ (("([[:graph:]]+)/bin/gcc") "gcc")
+ (("([[:graph:]]+)/bin/g\\+\\+") "g++")
+ (("([[:graph:]]+)/bin/make") "make")
+ (("([[:graph:]]+)/bin/diff") "diff")
+ (("([[:graph:]]+)/bin/sed") "sed")
+ (("([[:graph:]]+)/bin/gfortran") "gfortran"))
;; PETSc installs some build logs, which aren't necessar= y.
(for-each (lambda (file)
(let ((f (string-append out "/lib/petsc/conf= /" file)))
@@ -3490,17 +3493,6 @@ (define-public petsc
"configure-hash"
;; Once installed, should uninstall with Gui= x
"uninstall.py")))))
- (add-after 'clean-install 'clear-reference-to-compiler
- (lambda* (#:key inputs outputs #:allow-other-keys)
- ;; Do not retain a reference to GCC and other build only i= nputs.
- (let ((out (assoc-ref outputs "out")))
- (substitute* (string-append out "/lib/petsc/conf/petscvari= ables")
- (("([[:graph:]]+)/bin/gcc") "gcc")
- (("([[:graph:]]+)/bin/g\\+\\+") "g++")
- (("([[:graph:]]+)/bin/make") "make")
- (("([[:graph:]]+)/bin/diff") "diff")
- (("([[:graph:]]+)/bin/sed") "sed")
- (("([[:graph:]]+)/bin/gfortran") "gfortran")))))
(add-after 'install 'move-examples
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))

base-commit: 75bad75367fcf2c289fae3b40dbcc850f92177be
--

2.43.0

--=_MailMate_65FDE64D-0B39-4C62-BFE2-D4B6A89FD0A6_=-- --=_MailMate_B4579DDC-11F1-45A6-9D24-A882A7FA9C79_= Content-Description: S/MIME digital signature Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCEacw ggUSMIID+qADAgECAgkA4wvV+K8l2YEwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAkRFMSsw KQYDVQQKDCJULVN5c3RlbXMgRW50ZXJwcmlzZSBTZXJ2aWNlcyBHbWJIMR8wHQYDVQQLDBZULVN5 c3RlbXMgVHJ1c3QgQ2VudGVyMSUwIwYDVQQDDBxULVRlbGVTZWMgR2xvYmFsUm9vdCBDbGFzcyAy MB4XDTE2MDIyMjEzMzgyMloXDTMxMDIyMjIzNTk1OVowgZUxCzAJBgNVBAYTAkRFMUUwQwYDVQQK EzxWZXJlaW4genVyIEZvZXJkZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMg ZS4gVi4xEDAOBgNVBAsTB0RGTi1QS0kxLTArBgNVBAMTJERGTi1WZXJlaW4gQ2VydGlmaWNhdGlv biBBdXRob3JpdHkgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMtg1/9moUHN0vqH l4pzq5lN6mc5WqFggEcVToyVsuXPztNXS43O+FZsFVV2B+pG/cgDRWM+cNSrVICxI5y+NyipCf8F XRgPxJiZN7Mg9mZ4F4fCnQ7MSjLnFp2uDo0peQcAIFTcFV9Kltd4tjTTwXS1nem/wHdN6r1ZB+Ba L2w8pQDcNb1lDY9/Mm3yWmpLYgHurDg0WUU2SQXaeMpqbVvAgWsRzNI8qIv4cRrKO+KA3Ra0Z3qL NupOkSk9s1FcragMvp0049ENF4N1xDkesJQLEvHVaY4l9Lg9K7/AjsMeO6W/VRCrKq4Xl14zzsjz 9AkH4wKGMUZrAcUQDBHHWekCAwEAAaOCAXQwggFwMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU k+PYMiba1fFKpZFK4OpL4qIMz+EwHwYDVR0jBBgwFoAUv1kgNgB5oKAia4zV8mHSuCzLgkowEgYD VR0TAQH/BAgwBgEB/wIBAjAzBgNVHSAELDAqMA8GDSsGAQQBga0hgiwBAQQwDQYLKwYBBAGBrSGC LB4wCAYGZ4EMAQICMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kwMzM2LnRlbGVzZWMuZGUv cmwvVGVsZVNlY19HbG9iYWxSb290X0NsYXNzXzIuY3JsMIGGBggrBgEFBQcBAQR6MHgwLAYIKwYB BQUHMAGGIGh0dHA6Ly9vY3NwMDMzNi50ZWxlc2VjLmRlL29jc3ByMEgGCCsGAQUFBzAChjxodHRw Oi8vcGtpMDMzNi50ZWxlc2VjLmRlL2NydC9UZWxlU2VjX0dsb2JhbFJvb3RfQ2xhc3NfMi5jZXIw DQYJKoZIhvcNAQELBQADggEBAIcL/z4Cm2XIVi3WO5qYi3FP2ropqiH5Ri71sqQPrhE4eTizDnS6 dl2e6BiClmLbTDPo3flq3zK9LExHYFV/53RrtCyD2HlrtrdNUAtmB7Xts5et6u5/MOaZ/SLick0+ hFvu+c+Z6n/XUjkurJgARH5pO7917tALOxrN5fcPImxHhPalR6D90Bo0fa3SPXez7vTXTf/D6OWS T1k+kEcQSrCFWMBvf/iu7QhCnh7U3xQuTY+8npTD5+32GPg8SecmqKc22CzeIs2LgtjZeOJVEqM7 h0S2EQvVDFKvaYwPBt/QolOLV5h7z/0HJPT8vcP9SpIClxvyt7bPZYoaorVyGTkwggWsMIIElKAD AgECAgcbY7rQHiw9MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYDVQQGEwJERTFFMEMGA1UEChM8VmVy ZWluIHp1ciBGb2VyZGVydW5nIGVpbmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYu MRAwDgYDVQQLEwdERk4tUEtJMS0wKwYDVQQDEyRERk4tVmVyZWluIENlcnRpZmljYXRpb24gQXV0 aG9yaXR5IDIwHhcNMTYwNTI0MTEzODQwWhcNMzEwMjIyMjM1OTU5WjCBjTELMAkGA1UEBhMCREUx RTBDBgNVBAoMPFZlcmVpbiB6dXIgRm9lcmRlcnVuZyBlaW5lcyBEZXV0c2NoZW4gRm9yc2NodW5n c25ldHplcyBlLiBWLjEQMA4GA1UECwwHREZOLVBLSTElMCMGA1UEAwwcREZOLVZlcmVpbiBHbG9i YWwgSXNzdWluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ07eRxH3h+Gy8Zp 1xCeOdfZojDbchwFfylfS2jxrRnWTOFrG7ELf6Gr4HuLi9gtzm6IOhDuV+UefwRRNuu6cG1joL6W LkDh0YNMZj0cZGnlm6Stcq5oOVGHecwX064vXWNxSzl660Knl5BpBb+Q/6RAcL0D57+eGIgfn5mI TQ5HjUhfZZkQ0tkqSe3BuS0dnxLLFdM/fx5ULzquk1enfnjK1UriGuXtQX1TX8izKvWKMKztFwUk P7agCwf9TRqaA1KgNpzeJIdl5Of6x5ZzJBTN0OgbaJ4YWa52fvfRCng8h0uwN89Tyjo4EPPLR22M ZD08WkVKusqAfLjz56dMTM0CAwEAAaOCAgUwggIBMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0P AQH/BAQDAgEGMCkGA1UdIAQiMCAwDQYLKwYBBAGBrSGCLB4wDwYNKwYBBAGBrSGCLAEBBDAdBgNV HQ4EFgQUazqYi/nyU4na4K2yMh4JH+iqO3QwHwYDVR0jBBgwFoAUk+PYMiba1fFKpZFK4OpL4qIM z+EwgY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDovL2NkcDEucGNhLmRmbi5kZS9nbG9iYWwtcm9v dC1nMi1jYS9wdWIvY3JsL2NhY3JsLmNybDBAoD6gPIY6aHR0cDovL2NkcDIucGNhLmRmbi5kZS9n bG9iYWwtcm9vdC1nMi1jYS9wdWIvY3JsL2NhY3JsLmNybDCB3QYIKwYBBQUHAQEEgdAwgc0wMwYI KwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnBjYS5kZm4uZGUvT0NTUC1TZXJ2ZXIvT0NTUDBKBggrBgEF BQcwAoY+aHR0cDovL2NkcDEucGNhLmRmbi5kZS9nbG9iYWwtcm9vdC1nMi1jYS9wdWIvY2FjZXJ0 L2NhY2VydC5jcnQwSgYIKwYBBQUHMAKGPmh0dHA6Ly9jZHAyLnBjYS5kZm4uZGUvZ2xvYmFsLXJv b3QtZzItY2EvcHViL2NhY2VydC9jYWNlcnQuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQCBeEWkTqR/ DlXwCbFqPnjMaDWpHPOVnj/z+N9rOHeJLI21rT7H8pTNoAauusyosa0zCLYkhmI2THhuUPDVbmCN T1IxQ5dGdfBi5G5mUcFCMWdQ5UnnOR7Ln8qGSN4IFP8VSytmm6A4nwDO/afr0X9XLchMX9wQEZc+ lgQCXISoKTlslPwQkgZ7nu7YRrQbtQMMONncsKk/cQYLsgMHM8KNSGMlJTx6e1du94oFOO+4oK4v 9NsH1VuEGMGpuEvObJAaguS5Pfp38dIfMwK/U+d2+dwmJUFvL6Yb+qQTkPp8ftkLYF3sv8pBoGH7 EUkp2KgtdRXYShjqFu9VNCIaE40GMIIG3TCCBcWgAwIBAgIMKFSK/2W4nJQKz9POMA0GCSqGSIb3 DQEBCwUAMIGNMQswCQYDVQQGEwJERTFFMEMGA1UECgw8VmVyZWluIHp1ciBGb2VyZGVydW5nIGVp bmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLDAdERk4tUEtJMSUw IwYDVQQDDBxERk4tVmVyZWluIEdsb2JhbCBJc3N1aW5nIENBMB4XDTIzMDQxMTA3MzQxNFoXDTI2 MDQxMDA3MzQxNFowfTELMAkGA1UEBhMCREUxOjA4BgNVBAoMMUhlbG1ob2x0ei1aZW50cnVtIGZ1 ZXIgVW13ZWx0Zm9yc2NodW5nIEdtYkggLSBVRloxDjAMBgNVBAQMBUJpbGtlMQ0wCwYDVQQqDARM YXJzMRMwEQYDVQQDDApMYXJzIEJpbGtlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA m3zCUR9nxgsrHJ+Cqnw0FiOm3FGHHmUoiJj4oLp0k0cdX7Ai1R9whcJLZObcsYwrGkm201RZt5Bb UU5D9xCpv84RH3nL6zUTVkEQofseVWXD1Ydncl3Hskv8qvh/C2FpEIVbqXviGDBjESkK+QA5UHu1 CDdc8nQi0fJWh9yKG7hGn4MahXjz6bgPAxImjab8taqnxbwLoNTi+ogZjFbt7Xe+fHWN3L6a35P4 PaLzlEA9t4P10qYa/FYPEAML8VinVPasaLw/p4tj9K+a9LXxQns3KuVnvY4vOM4fPNSk+5yOipqq oXyevjx8dnMjCTrdEOIsPmqZaU0p1dxBnarnNk6Rfq8i/kFzu8ySJ6LcwNBZVWVXqiBOxTgUqriG PPnTcT/KKayY/dpsFmbn5z0H27/ItxCxX4IwhBJvvpBTrM3cUJPCv28tz4654sVq6Ygyndv5vnn/ iooa+peMGDMgfazVxDGdW+Js/HNp1En8h4KttE5wIwzgW0HRBTD/yrXBCoX3xMEL7sm4JNcYfT2w dDttdU9LDa6Nu1mKVIIE+YZyEmAsZMpg3JqV9B7hIYU14l/1zL2GPgWgGp3LiF4uvwmr+jUfBj6k IW/Tg8dtklLor7tqPklA3iNVZCKH0jyPQ3szsic2EHs9x4HpGbwm7T23N0e1Iz7irLASEEAdflEC AwEAAaOCAkowggJGMD4GA1UdIAQ3MDUwDwYNKwYBBAGBrSGCLAEBBDAQBg4rBgEEAYGtIYIsAQEE CzAQBg4rBgEEAYGtIYIsAgEECzAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNVHSUEFjAU BggrBgEFBQcDAgYIKwYBBQUHAwQwHQYDVR0OBBYEFMSCVRA6ggxoP0SCkmTDebzHfWaxMB8GA1Ud IwQYMBaAFGs6mIv58lOJ2uCtsjIeCR/oqjt0MBwGA1UdEQQVMBOBEWxhcnMuYmlsa2VAdWZ6LmRl MIGNBgNVHR8EgYUwgYIwP6A9oDuGOWh0dHA6Ly9jZHAxLnBjYS5kZm4uZGUvZGZuLWNhLWdsb2Jh bC1nMi9wdWIvY3JsL2NhY3JsLmNybDA/oD2gO4Y5aHR0cDovL2NkcDIucGNhLmRmbi5kZS9kZm4t Y2EtZ2xvYmFsLWcyL3B1Yi9jcmwvY2FjcmwuY3JsMIHbBggrBgEFBQcBAQSBzjCByzAzBggrBgEF BQcwAYYnaHR0cDovL29jc3AucGNhLmRmbi5kZS9PQ1NQLVNlcnZlci9PQ1NQMEkGCCsGAQUFBzAC hj1odHRwOi8vY2RwMS5wY2EuZGZuLmRlL2Rmbi1jYS1nbG9iYWwtZzIvcHViL2NhY2VydC9jYWNl cnQuY3J0MEkGCCsGAQUFBzAChj1odHRwOi8vY2RwMi5wY2EuZGZuLmRlL2Rmbi1jYS1nbG9iYWwt ZzIvcHViL2NhY2VydC9jYWNlcnQuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQCKNXGlF7TWJ77tYZZ2 jCGaDb5+Eh/edygbcm8WCDfMVEYRVmOTUOcoHUHkW2gJ1TMuUlDYsA3m7wvFcbWfMXDHtO/LrEUO GFoSGuiCnzpQeX2iKRMSh7yYhLS9XGl1XE0W/C3GeaEEDKEuDYdSLy4Zd65ChxULwRgPIA8n1ixx L1KmLrjCND2Dqp/zhvyKGY3zBNAh4oOc3zqHFNHDveObV021QyXRVKQH89gEkpU4KEB6TCFDIdI2 /vSOfrgKd1Yv9m2HU1k+43Wtj7wvx7tGKXzhx4OMRiGNruD9fApVQKu1IbvRYRh8F6P2/HOD9TbC XFysJxpJpiWCojircP7+MYIDUjCCA04CAQEwgZ4wgY0xCzAJBgNVBAYTAkRFMUUwQwYDVQQKDDxW ZXJlaW4genVyIEZvZXJkZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMgZS4g Vi4xEDAOBgNVBAsMB0RGTi1QS0kxJTAjBgNVBAMMHERGTi1WZXJlaW4gR2xvYmFsIElzc3Vpbmcg Q0ECDChUiv9luJyUCs/TzjANBglghkgBZQMEAgEFAKCBhTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcN AQcBMC8GCSqGSIb3DQEJBDEiBCBawk16W5LlaVxcgRN5vM2jhvCghnQHc8ixCTtq0H+8azA4Bgkq hkiG9w0BCQ8xKzApMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYJ KoZIhvcNAQELBQAEggIAO1jld5sWs1lvsKeAOQ558EGjuHfPhyrwDrgC+MNw2K9x7uIhCu80Y8Qd ZeE58TVmHO64VoTT5xQTe8eo02oJSFz/9Ak6ng8NDOZ+N9375WXWkjYJpNnvaBC+7LaXZlPZ8+l5 QokA1/9d0bLJq1B6H9gjab2VuZZW4pu7pMEguD2TWyHaLicew74cTaRc9na+LFXNfm+SU0JIfKMp rGHDYXdzFSi+s3vlLtg+Y1dEeJyoF1Yh3WiYS1GmtDtZDYpPh4SfkS7TsXz7ivrWoLTPfbMvqHPn HMZDnoC1aQLQp3q2eVkqQuxL9Gkp1ZvoFz4BYw2ITjwYYQ21UaZEbVf7jtJSJx94NQKSh8Le8sCz BcazDwlNNPsAdhRHqqbfs8RyT1E9XqOYuxGhww+ODYKHa3GYeHf1WEybE5f0Es+kGe+Mbt/7NGVf HODmHrY3q/8AjEMSjRRg4JdhzBbTbBXiML9YvCUCYffxcbigWXjLk4pZuAkw3TFWLGH1UYag7dpL p3HqIelAzJRYy08IrYFtqG7jIsawOg75IANADbKurOGlPJ7fiB/uoFCb5pvdF3vfj0kBcq7D2D43 wR2tkBXNe8P7ne7XlMbUyWcbeIuZXoGRXNWlzFts10wlR5vyoIROLVDZbPtzIXUzVaqEu0ZUr9kA fxKYO11xGZvVUxXgki4AAAAAAAA= --=_MailMate_B4579DDC-11F1-45A6-9D24-A882A7FA9C79_=--