Preventing file access time modification
John Scott via Duplicity-talk <[email protected]> Sun, 02 Aug 2026 21:43:54 +0000
| Newsgroups | gmane.comp.sysutils.backup.duplicity.general |
|---|---|
| Message-ID | <[email protected]> |
--===============6961519653248067931== Content-Type: multipart/signed; micalg="sha-256"; protocol="application/pkcs7-signature"; boundary="=-BzQpblKQWlcqPu3ZCd50" --=-BzQpblKQWlcqPu3ZCd50 Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-1+we+xOiCj3nmAR9hjs0" --=-1+we+xOiCj3nmAR9hjs0 Content-Type: multipart/mixed; boundary="=-Ipu/G5dutJ1P5N5rub2w" --=-Ipu/G5dutJ1P5N5rub2w Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, It appears the last discussion on this was almost 20 years ago, so only bec= ause it's been so long, I would like to affirm interest in using Duplicity,= such that it does not update the file access timestamps when reading from = the filesystem to back it up. For completeness I'll partly be re-hashing so= me of the discussion points herein. Virtually all UNIX-like systems keep a timestamp of when a file was last ac= cessed, although it's common for there to be limitations on when the timest= amp is updated, such as with filesystem mount options (like relatime). Whet= her this is still a useful feature may be up for debate, but it certainly c= an be useful in some circumstances: for system auditing, perhaps, or to fin= d cruft that isn't used anymore. If Duplicity updates the access timestamp = of virtually every file on a source filesystem in the course of backing it = up, that effectively "poisons the well" and makes the timestamps useless fo= r almost all purposes. In the previous thread about this, there was talk about determining the acc= ess timestamp for a file, copying it, and "restoring" the timestamp. This w= ould still be hideous today, but at least it'd be portable: the futimens() = and utimensat() functions were standardized in POSIX.1-2008 [1] and can pro= bably be used from Python. A more sensible way to do this, at least on Linux, is with the O_NOATIME op= en() option. The constant is available to Python programs [2] and is not de= fined on operating systems that don't have such a concept. Also, a short di= scussion on whether backup programs should try using O_NOATIME at all, and = a comparison of existing practices, is available at [3]. It should be strai= ghtforward to resolve the concerns there by making this functionality confi= gurable with a command-line option. In the short-term, I'm going to try a couple hacks and see if they can get = me by: =E2=80=A2 make an LD_PRELOAD-able shared library that provides a wrapper a= round open() to forcefully pass O_NOATIME, and hope the Python interpreter = picks up on it =E2=80=A2 Linux's overlayfs allegedly does not update the access time for = lower-layer filesystems [4], although this is perceived as a defect. If I m= ake a disposable overlayfs on-the-fly, this might yield a new source filesy= stem I can use. I'll give the former a try and plan to report back soon. [1] https://pubs.opengroup.org/onlinepubs/9799919799/functions/futimens.htm= l [2] https://github.com/python/cpython/issues/45086 and https://docs.python.= org/3/library/os.html#os.O_NOATIME [3] https://github.com/syncthing/syncthing/pull/6809#issuecomment-653032388 [4] https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html#non-s= tandard-behavior --=-Ipu/G5dutJ1P5N5rub2w Content-Type: message/rfc822; name="Preventing access time modification.eml" Content-Description: [Duplicity-talk] Preventing access time modification? Content-Disposition: inline; filename="Preventing access time modification.eml" Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1Hy13L-0007mc-4v for [email protected]; Tue, 12 Jun 2007 03:44:35 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Hy13K-0007lR-4U for [email protected]; Tue, 12 Jun 2007 03:44:34 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Hy13I-0007jv-WD for [email protected]; Tue, 12 Jun 2007 03:44:33 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Hy13I-0007jj-T0 for [email protected]; Tue, 12 Jun 2007 03:44:32 -0400 Received: from symlink.to.noone.org ([85.10.207.172] helo=sym.noone.org) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from <[email protected]>) id 1Hy13I-0006Uw-6X for [email protected]; Tue, 12 Jun 2007 03:44:32 -0400 Received: by sym.noone.org (Postfix, from userid 1000) id F17238943DE; Tue, 12 Jun 2007 09:44:27 +0200 (CEST) Date: Tue, 12 Jun 2007 09:44:27 +0200 From: Axel Beckert <[email protected]> To: Duplicity Discussion <[email protected]> Message-ID: <[email protected]> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Organization: DeuxChevaux.org -- The =?iso-8859-1?Q?Citr?= =?iso-8859-1?B?b+tu?= 2CV Database X-Operating-System: Linux 2.6.8-11-amd64-k8 X-Machine: sym x86_64 X-Editor: GNU Emacs 21.4.1 User-Agent: Mutt/1.5.9i X-detected-kernel: Linux 2.4-2.6 Subject: [Duplicity-talk] Preventing access time modification? X-BeenThere: [email protected] X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Discussion of the backup program duplicity <[email protected]> List-Id: Discussion of the backup program duplicity <duplicity-talk.nongnu.org> List-Unsubscribe: <http://lists.nongnu.org/mailman/listinfo/duplicity-talk>, <mailto:[email protected]?subject=unsubscribe> List-Archive: <http://lists.gnu.org/pipermail/duplicity-talk> List-Post: <mailto:[email protected]> List-Help: <mailto:[email protected]?subject=help> List-Subscribe: <http://lists.nongnu.org/mailman/listinfo/duplicity-talk>, <mailto:[email protected]?subject=subscribe> X-List-Received-Date: Tue, 12 Jun 2007 07:44:34 -0000 Content-Transfer-Encoding: quoted-printable Hi, I guess this is something for the wishlist, but it shouldn't be too hard to implement: I'm using duplicity to backup a classical unix mailserver where mailboxes are not only read using IMAP or POP but also logged in users locally on the filesystem. And there's one big annoyance: Many classical unix text-mode MUAs recognize mailboxes with new, unread mail by comparing modification time with (read) access time. If the last one is older, there must be new unread mail in mailbox. But if duplicity runs in the nightly backup run, it changes the access time and therefore, the MUAs think, there's no new mail in that mailbox. This is especially annoying if you automatically sort your incoming mails into a lots of folder and then read the mails in those folders with new mail, because you will miss all folders where new mail came in before but not after the backup job. Short said: duplicity marks mail folders it backupped as read. Since this feature will have a (probably only slight, but still recognizable) performance loss when reading and comparing files and there are probably uses where this such a feature is not wanted, it should be only optional, i.e. activated by a switch like e.g. "--no-access-time-modification". (Unfortunately I'm much more the Perl guy than the Python guy, so I can't offer a patch.) Regards, Axel --=20 /~\ | Axel Beckert \ / Plain Text Ribbon Campaign | [email protected] X Say No to HTML in E-Mail and News | [email protected] / \ | http://noone.org/abe/ --=-Ipu/G5dutJ1P5N5rub2w-- --=-1+we+xOiCj3nmAR9hjs0 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- iPsEABYKAKMWIQSiPzylvTnZ6xisfzWz9N0oYfTNugUCam+6DXIYaHR0cHM6Ly9q b2huc2NvdHQubWUvLndlbGwta25vd24vbmkvc2hhLTI1Ni9zWUF3OTN6QUVrRkIy RDREM1hOemRSeHEyMFBjNnByZGdtbEVWeXo0QUZRP2N0PWFwcGxpY2F0aW9uJTJG cGdwLWtleXMSHGpzY290dEBwb3N0ZW8ubmV0AAoJELP03Shh9M26tYwBAO/m7YYm 9a95y8gbwe38dJlcdFf2u6S3yeN91g91cbK9AQDcV4BIxXyLzCuMO1K1wPTWS43Z zczmBwxJ2cwKJr5BAQ== =G69U -----END PGP SIGNATURE----- --=-1+we+xOiCj3nmAR9hjs0-- --=-BzQpblKQWlcqPu3ZCd50 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Disposition: attachment; filename="smime.p7s" Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCFKkw ggajMIIEi6ADAgECAhBeWQSjcMYmnmBZPA/x5yy9MA0GCSqGSIb3DQEBDQUAMIGAMQswCQYDVQQG EwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVt IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3Jr IENBIDIwHhcNMjYwMzA1MDgyODU3WhcNMzYwMjIxMDgyODU3WjBTMQswCQYDVQQGEwJQTDEhMB8G A1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSEwHwYDVQQDDBhDZXJ0dW0gU01JTUUgRzEg UjM2IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDHrSfSl9si6Wek+uwLiN0e TgxQTAXTz1HaGbv+STlJIJ6/JE6UKURV3UxTEtAk1FLVZ1NdwLiYdQnGFOyIJ85iZYm7oVKxkpoo owyg8/I0VEcKkocjS0xOi4HIlW2sjlGDTGpkC2yM1dfRiLXobXJIH+mxO5PMbrpo2n3Fa7D3R4MJ m6t6LXuVWGV1LZJKht7fr4oHm69D4RRWrHEBetqGU1WeZ+Cv98XGs6qH4CPHJPhDG7wNVC2phcbO EVOp74snpow/o5rUXsCuo0S7C7WpWGd6WKJ5rap4eLNK0hhpUKFpnqnUuYBOEmxO+Hic3S/axD3Y B31krq+Ww+KXyH8L60aO6s86ds1BpSUBt93EA4WZLHhWVcWnUd6kSyBc8Jgzmw4NIBRWH6n7+yUo 9Q8g6ort7su0qcLHQFSGtecLdjMSI78rlUjzcqaVEutETN+XXfB0plGnrbi+sHI7lIrUR1jSkr9z P7z+prSmEn5szIUcb/0SfpVAGx3KQ8NqgQWe26Mk7bdfYlBKXAGkYVNjjwedSelRIphMtuEBxmXu HQZTq4OUpvBSBFvrrdrq9NUA4Vj08zPFbaa8a5rlGGFLll8ZSHsBo41oWIQzjH7B+ZnHJKNjGO+i E8LzDXIJikIquSGgM+Mne2Cc9NGYx4gYfYCR+oESnfGw00c8VeYV0QIDAQABo4IBQzCCAT8wcgYI KwYBBQUHAQEEZjBkMDgGCCsGAQUFBzAChixodHRwOi8vc3ViY2EucmVwb3NpdG9yeS5jZXJ0dW0u cGwvY3RuY2EyLmNlcjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAf BgNVHSMEGDAWgBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAPBgNVHRMBAf8EBTADAQH/MDYGA1UdHwQv MC0wK6ApoCeGJWh0dHA6Ly9zdWJjYS5jcmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwHQYDVR0lBBYw FAYIKwYBBQUHAwQGCCsGAQUFBwMCMA4GA1UdDwEB/wQEAwIBBjARBgNVHSAECjAIMAYGBFUdIAAw HQYDVR0OBBYEFCXkawV+8UIByJC9aCTAONF1upo0MA0GCSqGSIb3DQEBDQUAA4ICAQBmrvqNAS45 nYjDe9BCythBvajfK9HQxI0hgwxNnw+QqqPBsLEQ16BfeIjWe/YsrzkCztmXa2GGjpMYmMcQSEI0 HXeHcOOnyzO0sHzkLcdzbqsAb1RiahaN2GykAqevkKqT5KHrMaeOA7hPH4emMSvBi9VVtWGelnM7 RUfpfQ2S2VNT9l8lPAsO/kwpmLRvQ/HU68LGLOAYrDpEBsYQja5Nv+imSbSJsdsJzIfgJ6gIT5BS 0agTyYSJNMPdACVG42q8+wQ6Z6ErAkOnRXcQQZ3d65SeUBM5WwAvMJtitfA8Agh8LqNRD2fCnmEM IAXc5Y7U0P9pongwle0bZ9KvinE9cGZuGYSg6JauT/hOczXC2JJwal0y6pUKjzYnuqpEfgz2USY6 CJGEpxX+6PRSUxMXo57ly+bbDXKOOPkz50dfICDhzYqnD2csgHzHOThYMWp+PXNXqJQX+6QkwvbO yZB+XWYAN7O8mnOKNsZ1t79OcWtJ6SFo9RVjfYrVTy7oI/oi4BQmPbjLLV4RrveCjen9PWUrhmd2 wtf5IflJH1wNkjG+OISk+5oIXgRxJbiDbTr8iVfSiXd3ThCidf3xw8AQSGa1zRIGTLbbl4aYsqqa qONwRAZTJ+8O5Vcu8gTF6xBhFU4T65T4RiSdy9O7aKjy/h1kBQiTb/LiD6Vn5SU1/zCCBv0wggTl oAMCAQICEGz9G05+Z6J4mWehEe6879EwDQYJKoZIhvcNAQELBQAwUzELMAkGA1UEBhMCUEwxITAf BgNVBAoMGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEhMB8GA1UEAwwYQ2VydHVtIFNNSU1FIEcx IFIzNiBDQSAyMB4XDTI2MDYyOTAyNDQ1OFoXDTI3MDYyOTAyNDAyMlowPjEaMBgGA1UEAwwRanNj b3R0QHBvc3Rlby5uZXQxIDAeBgkqhkiG9w0BCQEWEWpzY290dEBwb3N0ZW8ubmV0MIICIjANBgkq hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArWUwTWatki/WO6Z8HexVDPEHyb/dRNfNIiOIcytqmAaG rcwGZPFbfHkP9SvNjholyCkjXdDBq62c9tdudIFiJ5kdcndLnw2OKgrjUbOA4xjQA5ysBxbI6AJy 3JY65EWC3JnXH/aA5okyCXu+ZNwI+d9AefgX/VVaaqmZhwgfl9I3WuNxNYxGIowHjT+qLgkZgLzV PHx5gg5D8rxHrMjpTIhrY34Tv5aPHFA8vxnV0yE8/AIXuMpZt7RYn4JvLHD94r7e8okTbS93V1Vo jHPO5Lp9SvTM9MsLaenFN0GuQjsmAuE/CLv3E1f/socySK7wQbfQ3qjMi+TMFe/GgGegW8Fslp6Q DaXpxdWKpXkJGAn7llJTkle2JhP8nODQGrLsqBPzzvdW3sOrqpNVoKXu2ud4DMiN563i7mhJcaV5 Z6UZX5clExAlRvUSAJM7cbBWBqpftvldW7tvwq47Ry3m8d8qhOBuhlLkRczP3fpctIQoReI8IpZX SdF81flbJ2e51DdwqKX4+Mcams+6lLNFt/qCpuliMzzgr73Cct7DMYtK4M+Er9fTLtFGmSyXCaXf 9PdxWaWbuferG+n4Dra4pj1ckXMOIlR+Gen8hdyux64SxYMO1WgUhCOLIeOTJw5O9t32ODACOorw wT1++l1yBV7cIi8Smbw3mxUoaCD3BCECAwEAAaOCAeAwggHcMAwGA1UdEwEB/wQCMAAwUQYDVR0f BEowSDBGoESgQoZAaHR0cDovL2NlcnR1bXNtaW1lZzFyMzZjYTIuY3JsLmNlcnR1bS5wbC9jZXJ0 dW1zbWltZWcxcjM2Y2EyLmNybDCBnQYIKwYBBQUHAQEEgZAwgY0wNgYIKwYBBQUHMAGGKmh0dHA6 Ly9jZXJ0dW1zbWltZWcxcjM2Y2EyLm9jc3AtY2VydHVtLmNvbTBTBggrBgEFBQcwAoZHaHR0cDov L2NlcnR1bXNtaW1lZzFyMzZjYTIucmVwb3NpdG9yeS5jZXJ0dW0ucGwvY2VydHVtc21pbWVnMXIz NmNhMi5jZXIwHwYDVR0jBBgwFoAUJeRrBX7xQgHIkL1oJMA40XW6mjQwHQYDVR0OBBYEFIPk5h8F iBPyS27MymMlx5QUChv8MEwGA1UdIARFMEMwCQYHZ4EMAQUBAjA2BgsqhGgBhvZ3AmQCATAnMCUG CCsGAQUFBwIBFhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMB0GA1UdJQQWMBQGCCsGAQUFBwME BggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBPAwHAYDVR0RBBUwE4ERanNjb3R0QHBvc3Rlby5uZXQw DQYJKoZIhvcNAQELBQADggIBAIgwW6upjUUYU41IF1bYaXadInqWEjuhtki8l6ddqW0iF6miwecH x3EOOV4hzbo4DBLRt+u/EbQx7C4XguwVVP02qoNlSReZCJM3sxLMaIFQUcCYv0DEr1lZVhXYrFnd IAiCoqT2k+/2xXf1eYxIH8DVmQtKAJ+MWxbv+lndQZtAtcz9YIykRPX4d0b3GIFObZFQWOtZp+Mt rzqpMtLzSPPwDmLFoBbuaTVHR9AvP/xKbJFH9D54oLewb2tfr7GScW6E+R4MtGM05+dHDGew7din KE5E1RsBLzwDwbiS7FnuUnDiQjpt6g1bTqdTGVHFtFSeJ2Nysa5Oc3Us6J+xHB912iEeDUKyizQU YeEa2afv9R1IfRPZh4YTGMJ/DTDqIv9x69e4zcu2rgMX1x86ECUL2XYnEJzyWg6DFGQioWnJK9B1 uxv5XubMmYSWKEI8m2dilRDtPoNWBTlnPYxTgoVIxAsqeeoE1NBMMUccZLFeH/N+0K9ECeXuRqSJ yGXDYrZWaEUH8/Oudc8mfjH8YWhJPOIydCRk3D8GDaodHhfmA31mVS1uAVeS289tuZGBu0gMBaIh mRmVGkEYR9VCNtZSaai3Qnlx3ROCc7biSCWx16WBJvqTR3dQ/tw4M7gYUqq9g7d9dJ1rUxH0Dzw3 7NoywmRvRh8nGjvfls4YaIUIMIIG/TCCBOWgAwIBAgIQbP0bTn5noniZZ6ER7rzv0TANBgkqhkiG 9w0BAQsFADBTMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu MSEwHwYDVQQDDBhDZXJ0dW0gU01JTUUgRzEgUjM2IENBIDIwHhcNMjYwNjI5MDI0NDU4WhcNMjcw NjI5MDI0MDIyWjA+MRowGAYDVQQDDBFqc2NvdHRAcG9zdGVvLm5ldDEgMB4GCSqGSIb3DQEJARYR anNjb3R0QHBvc3Rlby5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCtZTBNZq2S L9Y7pnwd7FUM8QfJv91E180iI4hzK2qYBoatzAZk8Vt8eQ/1K82OGiXIKSNd0MGrrZz21250gWIn mR1yd0ufDY4qCuNRs4DjGNADnKwHFsjoAnLcljrkRYLcmdcf9oDmiTIJe75k3Aj530B5+Bf9VVpq qZmHCB+X0jda43E1jEYijAeNP6ouCRmAvNU8fHmCDkPyvEesyOlMiGtjfhO/lo8cUDy/GdXTITz8 Ahe4ylm3tFifgm8scP3ivt7yiRNtL3dXVWiMc87kun1K9Mz0ywtp6cU3Qa5COyYC4T8Iu/cTV/+y hzJIrvBBt9DeqMyL5MwV78aAZ6BbwWyWnpANpenF1YqleQkYCfuWUlOSV7YmE/yc4NAasuyoE/PO 91bew6uqk1Wgpe7a53gMyI3nreLuaElxpXlnpRlflyUTECVG9RIAkztxsFYGql+2+V1bu2/CrjtH Lebx3yqE4G6GUuRFzM/d+ly0hChF4jwilldJ0XzV+VsnZ7nUN3Copfj4xxqaz7qUs0W3+oKm6WIz POCvvcJy3sMxi0rgz4Sv19Mu0UaZLJcJpd/093FZpZu596sb6fgOtrimPVyRcw4iVH4Z6fyF3K7H rhLFgw7VaBSEI4sh45MnDk723fY4MAI6ivDBPX76XXIFXtwiLxKZvDebFShoIPcEIQIDAQABo4IB 4DCCAdwwDAYDVR0TAQH/BAIwADBRBgNVHR8ESjBIMEagRKBChkBodHRwOi8vY2VydHVtc21pbWVn MXIzNmNhMi5jcmwuY2VydHVtLnBsL2NlcnR1bXNtaW1lZzFyMzZjYTIuY3JsMIGdBggrBgEFBQcB AQSBkDCBjTA2BggrBgEFBQcwAYYqaHR0cDovL2NlcnR1bXNtaW1lZzFyMzZjYTIub2NzcC1jZXJ0 dW0uY29tMFMGCCsGAQUFBzAChkdodHRwOi8vY2VydHVtc21pbWVnMXIzNmNhMi5yZXBvc2l0b3J5 LmNlcnR1bS5wbC9jZXJ0dW1zbWltZWcxcjM2Y2EyLmNlcjAfBgNVHSMEGDAWgBQl5GsFfvFCAciQ vWgkwDjRdbqaNDAdBgNVHQ4EFgQUg+TmHwWIE/JLbszKYyXHlBQKG/wwTAYDVR0gBEUwQzAJBgdn gQwBBQECMDYGCyqEaAGG9ncCZAIBMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w bC9DUFMwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMA4GA1UdDwEB/wQEAwIE8DAcBgNV HREEFTATgRFqc2NvdHRAcG9zdGVvLm5ldDANBgkqhkiG9w0BAQsFAAOCAgEAiDBbq6mNRRhTjUgX Vthpdp0iepYSO6G2SLyXp12pbSIXqaLB5wfHcQ45XiHNujgMEtG3678RtDHsLheC7BVU/Taqg2VJ F5kIkzezEsxogVBRwJi/QMSvWVlWFdisWd0gCIKipPaT7/bFd/V5jEgfwNWZC0oAn4xbFu/6Wd1B m0C1zP1gjKRE9fh3RvcYgU5tkVBY61mn4y2vOqky0vNI8/AOYsWgFu5pNUdH0C8//EpskUf0Pnig t7Bva1+vsZJxboT5Hgy0YzTn50cMZ7Dt2KcoTkTVGwEvPAPBuJLsWe5ScOJCOm3qDVtOp1MZUcW0 VJ4nY3Kxrk5zdSzon7EcH3XaIR4NQrKLNBRh4RrZp+/1HUh9E9mHhhMYwn8NMOoi/3Hr17jNy7au AxfXHzoQJQvZdicQnPJaDoMUZCKhackr0HW7G/le5syZhJYoQjybZ2KVEO0+g1YFOWc9jFOChUjE Cyp56gTU0EwxRxxksV4f837Qr0QJ5e5GpInIZcNitlZoRQfz8651zyZ+MfxhaEk84jJ0JGTcPwYN qh0eF+YDfWZVLW4BV5Lbz225kYG7SAwFoiGZGZUaQRhH1UI21lJpqLdCeXHdE4JztuJIJbHXpYEm +pNHd1D+3DgzuBhSqr2Dt310nWtTEfQPPDfs2jLCZG9GHycaO9+WzhhohQgxggPxMIID7QIBATBn MFMxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xITAfBgNV BAMMGENlcnR1bSBTTUlNRSBHMSBSMzYgQ0EgMgIQbP0bTn5noniZZ6ER7rzv0TANBglghkgBZQME AgEFAKCCAVswGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjYwODAy MjE0MzUwWjAvBgkqhkiG9w0BCQQxIgQgn6ZtoSSyALPZ2PRe/s1QP+W0OkahFkTvxYlU0CfeOncw dgYJKwYBBAGCNxAEMWkwZzBTMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lz dGVtcyBTLkEuMSEwHwYDVQQDDBhDZXJ0dW0gU01JTUUgRzEgUjM2IENBIDICEGz9G05+Z6J4mWeh Ee6879EweAYLKoZIhvcNAQkQAgsxaaBnMFMxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhBc3NlY28g RGF0YSBTeXN0ZW1zIFMuQS4xITAfBgNVBAMMGENlcnR1bSBTTUlNRSBHMSBSMzYgQ0EgMgIQbP0b Tn5noniZZ6ER7rzv0TANBgkqhkiG9w0BAQEFAASCAgArvjlZJK8Ucat59nLlNk2DQbH/0mc6Zwju 6JDLAd4C9pyKATnTR1fPcbvltvV/4HFf4sYZ1+a4nNkv/QqX8r2m0ilwUAw0bomqIPlwDChXhlI3 KqgdbIQsFj2ic395nIEOj3PMBQctAliYJbYDSD6eJQl02sK83Qr3QOCK895eoFHvlvTP99VGze0/ qypxD3yxAc5bdIVQA9sZiXKWrzRpVZspmJfXfabjrvELCtKog8GTKfkhATZHVkGhxRC83Avh+S0+ lHULyvZGeZHYmkDF+3T9qYthLLmRyEpnabG8QMsFKJb6pw4RoCVzp3VC1ESr19opms/f7fwkhFQd KtPaR/t8NXhGlJ5jHPhUflYjZ1/eVMB+xgcb5ONk7ITlpg1MneqzQS99LxlDqLC01SPnWnqxOZAG x9QXc0toI+2/faGsjhTIZC6Ow0Dq3PUsf+1yJnZMjJnDfNuuOZ+mUxBrCo3+d4M9jPtdNVKD3GGa leQOtTTk5rFABE2E50oFX+Wg7oVIs11fdzdDNYmdU/PcDWxOj4dyNuu/rwStWB8EGAvDYyNfJIYy ccxHtM0A7yHvpQQVw5aBU+/FXHweU2AnxrMJcTUJJLxTs2DCzlJ59Zv46i66T5xYlNW7/Oy9FKmh JT64uXyvZdGWwAFawxt50SI5ZrENckMXBcgQdbcRXwAAAAAAAA== --=-BzQpblKQWlcqPu3ZCd50-- --===============6961519653248067931== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRHVwbGljaXR5 LXRhbGsgbWFpbGluZyBsaXN0CkR1cGxpY2l0eS10YWxrQG5vbmdudS5vcmcKaHR0cHM6Ly9saXN0 cy5ub25nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZHVwbGljaXR5LXRhbGsK --===============6961519653248067931==--