--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: apt: random_sleep should not be executed if anacron has started the cron.daily script
- From: Teodor <mteodor@gmail.com>
- Date: Fri, 15 Oct 2010 11:25:17 +0300
- Message-id: <20101015082517.26305.41181.reportbug@frost.museglobal.ro>
Package: apt
Version: 0.8.6
Severity: wishlist
Tags: patch
Hi,
Currently a 'random_sleep' function is implemented in /etc/cron.daily/apt to avoid
a DoS on the mirrors. However, on desktop and workstation systems the script is not
executed at 6:xx in the morning but later at random times after boot by anacron.
The reason is simple, these systems are not up all the time.
Please apply this patch to avoid 'random_sleep' if the script was started by anacron.
--- apt_0.8x 2010-09-17 23:17:26.000000000 +0300
+++ /etc/cron.daily/apt 2010-10-15 11:24:38.287104775 +0300
@@ -415,7 +415,7 @@
# sleep random amount of time to avoid hitting the
# mirrors at the same time
-random_sleep
+pidof -n anacron >/dev/null || random_sleep
# update package lists
UPDATED=0
Thanks
-- Package-specific info:
-- (no /etc/apt/preferences present) --
-- (/etc/apt/sources.list present, but not submitted) --
-- System Information:
Debian Release: squeeze/sid
APT prefers testing
APT policy: (500, 'testing'), (200, 'unstable'), (100, 'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.32-5-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages apt depends on:
ii debian-archive-keyring 2010.08.28 GnuPG archive keys of the Debian a
ii gnupg 1.4.10-4 GNU privacy guard - a free PGP rep
ii libc6 2.11.2-6 Embedded GNU C Library: Shared lib
ii libgcc1 1:4.4.5-2 GCC support library
ii libstdc++6 4.4.5-2 The GNU Standard C++ Library v3
ii zlib1g 1:1.2.3.4.dfsg-3 compression library - runtime
apt recommends no packages.
Versions of packages apt suggests:
pn apt-doc <none> (no description available)
ii aptitude 0.6.3-3.1 terminal-based package manager (te
ii bzip2 1.0.5-6 high-quality block-sorting file co
ii dpkg-dev 1.15.8.5 Debian package development tools
ii lzma 4.43-14 Compression method of 7z format in
ii python-apt 0.7.98.1 Python interface to libapt-pkg
ii synaptic 0.70~pre1+b1 Graphical package manager
-- Configuration Files:
/etc/cron.daily/apt changed:
check_stamp()
{
stamp="$1"
interval="$2"
if [ $interval -eq 0 ]; then
debug_echo "check_stamp: interval=0"
# treat as no time has passed
return 1
fi
if [ ! -f $stamp ]; then
debug_echo "check_stamp: missing time stamp file: $stamp."
# treat as enough time has passed
return 0
fi
# compare midnight today to midnight the day the stamp was updated
stamp_file="$stamp"
stamp=$(date --date=$(date -r $stamp_file --iso-8601) +%s 2>/dev/null)
if [ "$?" != "0" ]; then
# Due to some timezones returning 'invalid date' for midnight on
# certain dates (eg America/Sao_Paulo), if date returns with error
# remove the stamp file and return 0. See coreutils bug:
# http://lists.gnu.org/archive/html/bug-coreutils/2007-09/msg00176.html
rm -f "$stamp_file"
return 0
fi
now=$(date --date=$(date --iso-8601) +%s 2>/dev/null)
if [ "$?" != "0" ]; then
# As above, due to some timezones returning 'invalid date' for midnight
# on certain dates (eg America/Sao_Paulo), if date returns with error
# return 0.
return 0
fi
delta=$(($now-$stamp))
# intervall is in days, convert to sec.
interval=$(($interval*60*60*24))
debug_echo "check_stamp: interval=$interval, now=$now, stamp=$stamp, delta=$delta (sec)"
# remove timestamps a day (or more) in the future and force re-check
if [ $stamp -gt $(($now+86400)) ]; then
echo "WARNING: file $stamp_file has a timestamp in the future: $stamp"
rm -f "$stamp_file"
return 0
fi
if [ $delta -ge $interval ]; then
return 0
fi
return 1
}
update_stamp()
{
stamp="$1"
touch $stamp
}
check_size_constraints()
{
MaxAge=0
eval $(apt-config shell MaxAge APT::Archives::MaxAge)
eval $(apt-config shell MaxAge APT::Periodic::MaxAge)
MinAge=2
eval $(apt-config shell MinAge APT::Archives::MinAge)
eval $(apt-config shell MinAge APT::Periodic::MinAge)
MaxSize=0
eval $(apt-config shell MaxSize APT::Archives::MaxSize)
eval $(apt-config shell MaxSize APT::Periodic::MaxSize)
Cache="/var/cache/apt/archives/"
eval $(apt-config shell Cache Dir::Cache::archives/d)
# sanity check
if [ -z "$Cache" ]; then
echo "empty Dir::Cache::archives, exiting"
exit
fi
# check age
if [ ! $MaxAge -eq 0 ] && [ ! $MinAge -eq 0 ]; then
debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge and ctime>$MinAge and mtime>$MinAge"
find $Cache -name "*.deb" \( -mtime +$MaxAge -and -ctime +$MaxAge \) -and -not \( -mtime -$MinAge -or -ctime -$MinAge \) -print0 | xargs -r -0 rm -f
elif [ ! $MaxAge -eq 0 ]; then
debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge only"
find $Cache -name "*.deb" -ctime +$MaxAge -and -mtime +$MaxAge -print0 | xargs -r -0 rm -f
else
debug_echo "skip aging since MaxAge is 0"
fi
# check size
if [ ! $MaxSize -eq 0 ]; then
# maxSize is in MB
MaxSize=$(($MaxSize*1024))
#get current time
now=$(date --date=$(date --iso-8601) +%s)
MinAge=$(($MinAge*24*60*60))
# reverse-sort by mtime
for file in $(ls -rt $Cache/*.deb 2>/dev/null); do
du=$(du -s $Cache)
size=${du%%/*}
# check if the cache is small enough
if [ $size -lt $MaxSize ]; then
debug_echo "end remove by archive size: size=$size < $MaxSize"
break
fi
# check for MinAge of the file
if [ $MinAge -ne 0 ]; then
# check both ctime and mtime
mtime=$(stat -c %Y $file)
ctime=$(stat -c %Z $file)
if [ $mtime -gt $ctime ]; then
delta=$(($now-$mtime))
else
delta=$(($now-$ctime))
fi
if [ $delta -le $MinAge ]; then
debug_echo "skip remove by archive size: $file, delta=$delta < $MinAgeSec"
break
else
# delete oldest file
debug_echo "remove by archive size: $file, delta=$delta >= $MinAgeSec (sec), size=$size >= $MaxSize"
rm -f $file
fi
fi
done
fi
}
do_cache_backup()
{
BackupArchiveInterval="$1"
if [ $BackupArchiveInterval -eq 0 ]; then
return
fi
# Set default values and normalize
CacheDir="/var/cache/apt"
eval $(apt-config shell CacheDir Dir::Cache/d)
CacheDir=${CacheDir%/}
if [ -z "$CacheDir" ]; then
debug_echo "practically empty Dir::Cache, exiting"
return 0
fi
Cache="${CacheDir}/archives/"
eval $(apt-config shell Cache Dir::Cache::Archives/d)
if [ -z "$Cache" ]; then
debug_echo "practically empty Dir::Cache::archives, exiting"
return 0
fi
BackupLevel=3
eval $(apt-config shell BackupLevel APT::Periodic::BackupLevel)
if [ $BackupLevel -le 1 ]; then
BackupLevel=2 ;
fi
Back="${CacheDir}/backup/"
eval $(apt-config shell Back Dir::Cache::Backup/d)
if [ -z "$Back" ]; then
echo "practically empty Dir::Cache::Backup, exiting" 1>&2
return
fi
CacheArchive="$(basename "${Cache}")"
test -n "${CacheArchive}" || CacheArchive="archives"
BackX="${Back}${CacheArchive}/"
for x in $(seq 0 1 $((${BackupLevel}-1))); do
eval "Back${x}=${Back}${x}/"
done
# backup after n-days if archive contents changed.
# (This uses hardlink to save disk space)
BACKUP_ARCHIVE_STAMP=/var/lib/apt/periodic/backup-archive-stamp
if check_stamp $BACKUP_ARCHIVE_STAMP $BackupArchiveInterval; then
if [ $({(cd $Cache 2>/dev/null; find . -name "*.deb"); (cd $Back0 2>/dev/null;find . -name "*.deb") ;}| sort|uniq -u|wc -l) -ne 0 ]; then
mkdir -p $Back
rm -rf $Back$((${BackupLevel}-1))
for y in $(seq $((${BackupLevel}-1)) -1 1); do
eval BackY=${Back}$y
eval BackZ=${Back}$(($y-1))
if [ -e $BackZ ]; then
mv -f $BackZ $BackY ;
fi
done
cp -la $Cache $Back ; mv -f $BackX $Back0
update_stamp $BACKUP_ARCHIVE_STAMP
debug_echo "backup with hardlinks. (success)"
else
debug_echo "skip backup since same content."
fi
else
debug_echo "skip backup since too new."
fi
}
random_sleep()
{
RandomSleep=1800
eval $(apt-config shell RandomSleep APT::Periodic::RandomSleep)
if [ $RandomSleep -eq 0 ]; then
return
fi
if [ -z "$RANDOM" ] ; then
# A fix for shells that do not have this bash feature.
RANDOM=$(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -c"1-5")
fi
TIME=$(($RANDOM % $RandomSleep))
debug_echo "sleeping for $TIME seconds"
sleep $TIME
}
debug_echo()
{
# Display message if $VERBOSE >= 1
if [ "$VERBOSE" -ge 1 ]; then
echo $1 1>&2
fi
}
if cd /var/backups ; then
if ! cmp -s apt.extended_states.0 /var/lib/apt/extended_states; then
cp -p /var/lib/apt/extended_states apt.extended_states
savelog -c 7 apt.extended_states >/dev/null
fi
fi
if ! which apt-config >/dev/null ; then
exit 0
fi
AutoAptEnable=1 # default is yes
eval $(apt-config shell AutoAptEnable APT::Periodic::Enable)
if [ $AutoAptEnable -eq 0 ]; then
exit 0
fi
VERBOSE=0
eval $(apt-config shell VERBOSE APT::Periodic::Verbose)
debug_echo "verbose level $VERBOSE"
if [ "$VERBOSE" -le 2 ]; then
# quiet for 0,1,2
XSTDOUT=">/dev/null"
XSTDERR="2>/dev/null"
XAPTOPT="-qq"
XUUPOPT=""
else
XSTDOUT=""
XSTDERR=""
XAPTOPT=""
XUUPOPT="-d"
fi
if [ "$VERBOSE" -ge 3 ]; then
# trace output
set -x
fi
if which on_ac_power >/dev/null; then
on_ac_power
POWER=$?
if [ $POWER -eq 1 ]; then
debug_echo "exit: system NOT on main power"
exit 0
elif [ $POWER -ne 0 ]; then
debug_echo "power status ($POWER) undetermined, continuing"
fi
debug_echo "system is on main power."
fi
if which apt-get >/dev/null && ! eval apt-get check -f $XAPTOPT $XSTDERR ; then
debug_echo "error encountered in cron job with \"apt-get check\"."
exit 0
fi
now=$(date +%s)
UpdateInterval=0
eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists)
DownloadUpgradeableInterval=0
eval $(apt-config shell DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
UnattendedUpgradeInterval=0
eval $(apt-config shell UnattendedUpgradeInterval APT::Periodic::Unattended-Upgrade)
AutocleanInterval=0
eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
BackupArchiveInterval=0
eval $(apt-config shell BackupArchiveInterval APT::Periodic::BackupArchiveInterval)
Debdelta=1
eval $(apt-config shell Debdelta APT::Periodic::Download-Upgradeable-Packages-Debdelta)
if [ $UpdateInterval -eq 0 ] &&
[ $DownloadUpgradeableInterval -eq 0 ] &&
[ $UnattendedUpgradeInterval -eq 0 ] &&
[ $BackupArchiveInterval -eq 0 ] &&
[ $AutocleanInterval -eq 0 ]; then
# check cache size
check_size_constraints
exit 0
fi
do_cache_backup $BackupArchiveInterval
pidof -n anacron || random_sleep
UPDATED=0
UPDATE_STAMP=/var/lib/apt/periodic/update-stamp
if check_stamp $UPDATE_STAMP $UpdateInterval; then
if eval apt-get $XAPTOPT -y update $XSTDERR; then
debug_echo "download updated metadata (success)."
if which dbus-send >/dev/null && pidof dbus-daemon >/dev/null; then
if dbus-send --system / app.apt.dbus.updated boolean:true ; then
debug_echo "send dbus signal (success)"
else
debug_echo "send dbus signal (error)"
fi
else
debug_echo "dbus signal not send (command not available)"
fi
update_stamp $UPDATE_STAMP
UPDATED=1
else
debug_echo "download updated metadata (error)"
fi
else
debug_echo "download updated metadata (not run)."
fi
DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
if [ $UPDATED -eq 1 ] && check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
if [ $Debdelta -eq 1 ]; then
debdelta-upgrade >/dev/null 2>&1 || true
fi
if eval apt-get $XAPTOPT -y -d dist-upgrade $XSTDERR; then
update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
debug_echo "download upgradable (success)"
else
debug_echo "download upgradable (error)"
fi
else
debug_echo "download upgradable (not run)"
fi
UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
if [ $UPDATED -eq 1 ] && which unattended-upgrade >/dev/null && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
if unattended-upgrade $XUUPOPT; then
update_stamp $UPGRADE_STAMP
debug_echo "unattended-upgrade (success)"
else
debug_echo "unattended-upgrade (error)"
fi
else
debug_echo "unattended-upgrade (not run)"
fi
AUTOCLEAN_STAMP=/var/lib/apt/periodic/autoclean-stamp
if check_stamp $AUTOCLEAN_STAMP $AutocleanInterval; then
if eval apt-get $XAPTOPT -y autoclean $XSTDERR; then
debug_echo "autoclean (success)."
update_stamp $AUTOCLEAN_STAMP
else
debug_echo "autoclean (error)"
fi
else
debug_echo "autoclean (not run)"
fi
check_size_constraints
-- no debconf information
--- End Message ---
--- Begin Message ---
Source: apt
Source-Version: 1.2.10
We believe that the bug you reported is fixed in the latest version of
apt, which is due to be installed in the Debian FTP archive.
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to 600262@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Michael Vogt <mvo@debian.org> (supplier of updated apt package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Format: 1.8
Date: Tue, 05 Apr 2016 20:23:47 +0200
Source: apt
Binary: apt libapt-pkg5.0 libapt-inst2.0 apt-doc libapt-pkg-dev libapt-pkg-doc apt-utils apt-transport-https
Architecture: source amd64 all
Version: 1.2.10
Distribution: unstable
Urgency: medium
Maintainer: APT Development Team <deity@lists.debian.org>
Changed-By: Michael Vogt <mvo@debian.org>
Description:
apt - commandline package manager
apt-doc - documentation for APT
apt-transport-https - https download transport for APT
apt-utils - package management related utility programs
libapt-inst2.0 - deb package format runtime library
libapt-pkg-dev - development files for APT's libapt-pkg and libapt-inst
libapt-pkg-doc - documentation for APT development
libapt-pkg5.0 - package management runtime library
Closes: 600262 663290 709675 819938
Changes:
apt (1.2.10) unstable; urgency=medium
.
[ Zhou Mo ]
* zh_CN.po: update simplified Chinese translation. (100%)
.
[ Julian Andres Klode ]
* test-apt-download-progress: Use a larger file for testing
* Allow lowering trust level of a hash via config
.
[ Michael Vogt ]
* Use systemd.timer instead of a cron job (Closes: #600262, #709675, #663290)
(LP: #246381, #727685)
.
[ David Kalnischkies ]
* use buffered writing for InRelease splitting
.
[ Takuma Yamada ]
* Japanese program translation update (Closes: 819938)
Checksums-Sha1:
00d3245d3e355f7dff276d620542738ef321e2de 2357 apt_1.2.10.dsc
700952f0cdb3729cd645961346cf62fdc02c168a 2036516 apt_1.2.10.tar.xz
24c77bec740b70283f528a096e2dd02cc81496f5 3788170 apt-dbgsym_1.2.10_amd64.deb
77ff2475406b4edf54d1ce70ce6806a8a619affe 343162 apt-doc_1.2.10_all.deb
415114d7c3ffbebec31daf8776556d6918ccdf80 215744 apt-transport-https-dbgsym_1.2.10_amd64.deb
d1262bcd010f2ddf14788c5faf96c3158d5be23b 150856 apt-transport-https_1.2.10_amd64.deb
12444c404da0668965801fca1d0edee53f1a8108 1119000 apt-utils-dbgsym_1.2.10_amd64.deb
87210f3e7228017fd44760fb3b35aaefc6c4d100 386072 apt-utils_1.2.10_amd64.deb
e0b38c2aa9d81bdd5f9c0ca18ea8dd163cab1fcb 1156980 apt_1.2.10_amd64.deb
e0e37b8429b62ede2350386c985b407fa45a3d8a 204504 libapt-inst2.0-dbgsym_1.2.10_amd64.deb
232cf2392e4cb3c754374e31bea1fcd45beeee3e 180932 libapt-inst2.0_1.2.10_amd64.deb
940730adc6ceae0939cd4f9e0b180a543801f2d2 221860 libapt-pkg-dev_1.2.10_amd64.deb
6b79ad3bc9d1ab300e1c7656b055b9c3f73cccc5 1025498 libapt-pkg-doc_1.2.10_all.deb
5b2cb2490e51a80e68af8fc61c6d552e7e6fab00 5012454 libapt-pkg5.0-dbgsym_1.2.10_amd64.deb
76d3e3942c2dc75dcecc113326844c4946588caa 817992 libapt-pkg5.0_1.2.10_amd64.deb
Checksums-Sha256:
e52d95b138ec100d1a2dc1e645022fadf6c4e1e4396409122270ba3c6d53b35f 2357 apt_1.2.10.dsc
5c08901d487ee386bbbd0c119808ddfe39a8ec90e33b3cf6763063c35418817a 2036516 apt_1.2.10.tar.xz
f8c854a375e1590692b57d7bb9d5c4fba1614db37639afda86ce1f2949bee018 3788170 apt-dbgsym_1.2.10_amd64.deb
da093f39f30d651a698843e2203ab49836922b31e4ba6e50d6a3ed839c52dfda 343162 apt-doc_1.2.10_all.deb
9e682762dade181b7a1321b7fe3c1e29d753f611ce3724c0bf9674ff753b5469 215744 apt-transport-https-dbgsym_1.2.10_amd64.deb
f169fa8cc3bdfb4bd6ef1f226039eaec4c0351189872491c17c835e85e3a5f0a 150856 apt-transport-https_1.2.10_amd64.deb
2a9b40a875fa8fcc8df460f1b9406b8174b558b19c47b7bfe0e3804e8b7fa9c3 1119000 apt-utils-dbgsym_1.2.10_amd64.deb
cd9e7dcc2ecc0128adf80b1f1648d18e1e612f6d0870d9f0442ee5e82c96b3b3 386072 apt-utils_1.2.10_amd64.deb
c96781303016d6317abebd236d0b6539eedd19a30326be708357199c1bee1db5 1156980 apt_1.2.10_amd64.deb
7594c81cf7fe7714c6a06d7712c5e833190796355f7eac2ecf9713dd396a5599 204504 libapt-inst2.0-dbgsym_1.2.10_amd64.deb
ddf505fcaeaa4e242af3b5ccec8fc3683a6ea532618b0b5c1d156e78e8605d04 180932 libapt-inst2.0_1.2.10_amd64.deb
df0a5a809add0364ae85c6bec8081ef8e210667b0075613be517d15be6718f21 221860 libapt-pkg-dev_1.2.10_amd64.deb
b0a780569d86a4be7ac899fb608db8bd91449c2879aa1ec0b56565379057aa98 1025498 libapt-pkg-doc_1.2.10_all.deb
b878c2f082cc037ceab7ee6d1ac4c8bae9e2dc71e23a8c05b426de86437b39a3 5012454 libapt-pkg5.0-dbgsym_1.2.10_amd64.deb
bae326fa189a98db9d3b911bb397c65d8ca87658934d2b51c9b9f65bbf44d460 817992 libapt-pkg5.0_1.2.10_amd64.deb
Files:
7f2b6becfb67bd5ade3aa00d108b9f1c 2357 admin important apt_1.2.10.dsc
89b118c95a1c28fafa7bfcfb5960f776 2036516 admin important apt_1.2.10.tar.xz
3437d18bddfa217ab8861cf41905db6a 3788170 debug extra apt-dbgsym_1.2.10_amd64.deb
50aedcfecde5c7a7b93de9afe683546d 343162 doc optional apt-doc_1.2.10_all.deb
54873da1c42eba0518a0f52d06337bd6 215744 debug extra apt-transport-https-dbgsym_1.2.10_amd64.deb
e988b4e6fbfb7026b35ea366ab840640 150856 admin optional apt-transport-https_1.2.10_amd64.deb
1494bd0acc557621a011d955b33bcff8 1119000 debug extra apt-utils-dbgsym_1.2.10_amd64.deb
999b261dbb37a4a4500564d3dd76f7c7 386072 admin important apt-utils_1.2.10_amd64.deb
0f39ab36fbb9129c18343426604044c9 1156980 admin important apt_1.2.10_amd64.deb
53cc874095454aa54aa2ad16ea2e2193 204504 debug extra libapt-inst2.0-dbgsym_1.2.10_amd64.deb
f46e8d140cb557f52d95a0125baa8282 180932 libs important libapt-inst2.0_1.2.10_amd64.deb
f8cd6f01207cd307f0b771f9f85ade91 221860 libdevel optional libapt-pkg-dev_1.2.10_amd64.deb
9a96df6372b20ca5afb13a83a4396be7 1025498 doc optional libapt-pkg-doc_1.2.10_all.deb
e4b6bc958ad944b13bc7f00e1a6898b7 5012454 debug extra libapt-pkg5.0-dbgsym_1.2.10_amd64.deb
2130e09fab49e33a034b2f74333d9c89 817992 libs important libapt-pkg5.0_1.2.10_amd64.deb
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAEBCAAGBQJXBAR5AAoJEJjKuzq9TKWe6S4P/08w9KGRNnLh1X4gfCi/P7Br
idKLVH3e7e9y005fQO0ETc5vh0p0X0UBDQ/8/j92qMGgaYvtcKw9ijDaK9XSDwUI
LC7PIfLkEXZ0XEuXyHfj4JS4NOzQA5pGef9SZpgtOy/ZolnVwp6Gvs0oMAK4S9oj
GtQdInI8yLu984I+Etayriv4NvIYN0W2MwJhxaGwHtDqqcasWxr4ot59L9Zf0C+q
yONGNCF58AqkLrNpSyhxAynFyMEw70VaxXsKYwZLfYpwkX4rDrgnNmoNVRJHo/bJ
CrniPTqfhX3Aw1/mH32gNueq/Vkp0iBu4PocW6ophmBt4EaLvdM+wOHwR5P5vEyH
h5W6IFsq16m0F+1ZKoLfPk/cz0y8YsYSP2/E2DlXP6n9gaoVyyUjaWF1zCEiPt42
dA7FTP7fSYISKpnh0PP1VQpDJhCe1XfxMn1Q861TatL5pjOyijeXVPiMFHdlNYjb
jrQEFxux2yDNQWtLiGTPdgOGBrYLDm03F8ec5DAS8VgCsYWnTIaQZAGwwXZJ/Dm8
ujcbbqZl5uphBldab3VhILqWaxayuHHhznT3iFS6UDqtIh+1qZjC0YRi96TnMjzU
C5kopIcDOS1MUW3rsTVq7PY3p35UGlScfyg0lj5Pg3+ib3g6mQEGNARO8XDzar49
ntNljJFKI9pcTeRsRAUG
=lneH
-----END PGP SIGNATURE-----
--- End Message ---