Your message dated Tue, 19 Feb 2013 07:18:33 +0000
with message-id <e1u7htf-0000s2...@franck.debian.org>
and subject line Bug#694971: fixed in webkit 1.8.1-3.4
has caused the Debian Bug report #694971,
regarding ia64 (Itanium) Epiphany browser crashes within
JSC::JSArray::increaseVectorLength()
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)
--
694971: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=694971
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: libwebkitgtk-3.0-0
Version: 1.8.1-3.3
Severity: grave
Tags: patch
Machine: Dell PowerEdge 3250
Processor: 2x Itanium Madison 1.5GHz 6M
Memory: 16G
I realized this bug while working on bug#642750.
The Epiphany browser crashed with a SIGSEGV in
JSC::JSArray::increaseVectorLength()
I built the libwebkitgtk-3.0-0 package which was configured with
--enable-debug.
Furthermore, I modified the Source/JavaScriptCore/wtf/Assertions.h in
order to be able to continue subsequent to a failed assertion; I
defined CRASH() to expand to nothing.
bool JSArray::increaseVectorLength(JSGlobalData& globalData, unsigned
newLength)
{
// This function leaves the array in an internally inconsistent
state, because it does not move any values from sparse value map
// to the vector. Callers have to account for that, because they
can do it more efficiently.
if (newLength > MAX_STORAGE_VECTOR_LENGTH)
return false;
ArrayStorage* storage = m_storage;
unsigned vectorLength = m_vectorLength;
ASSERT(newLength > vectorLength);
unsigned newVectorLength = getNewVectorLength(newLength);
// Fast case - there is no precapacity. In these cases a realloc
makes sense.
if (LIKELY(!m_indexBias)) {
void* newStorage = storage->m_allocBase;
if (!globalData.heap.tryReallocateStorage(&newStorage,
storageSize(vectorLength), storageSize(newVectorLength)))
return false;
storage = m_storage =
reinterpret_cast_ptr<ArrayStorage*>(static_cast<char*>(newStorage));
m_storage->m_allocBase = newStorage;
ASSERT(m_storage->m_allocBase);
WriteBarrier<Unknown>* vector = storage->m_vector;
for (unsigned i = vectorLength; i < newVectorLength; ++i)
vector[i].clear(); <=================== here the
crash occurs
m_vectorLength = newVectorLength;
return true;
}
It turned out that tryReallocateStorage() allocated a memory block
that is smaller than requested with the last parameter of the function.
When it occured, the requested size was quite large and the code of
the following function was executed
(Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h):
inline CheckedBoolean CopiedSpace::tryAllocateOversize(size_t bytes,
void** outPtr)
{
ASSERT(isOversize(bytes));
size_t blockSize =
WTF::roundUpToMultipleOf<s_pageSize>(sizeof(CopiedBlock) + bytes);
PageAllocationAligned allocation =
PageAllocationAligned::allocate(blockSize, s_pageSize,
OSAllocator::JSGCHeapPages);
if (!static_cast<bool>(allocation)) {
*outPtr = 0;
return false;
}
....
}
WTF::roundUpToMultipleOf<s_pageSize>() rounded up the requested size
to a multiple of 4K. s_pageSize is a constant which is defined in the
CopiedSpace class (Source/JavaScriptCore/heap/CopiedSpace.h)
static const size_t s_pageSize = 4 * KB;
At next PageAllocationAligned::allocate() is called
(Source/JavaScriptCore/wtf/PageAllocationAligned.cpp):
PageAllocationAligned PageAllocationAligned::allocate(size_t size,
size_t alignment, OSAllocator::Usage usage, bool writable, bool
executable)
{
ASSERT(isPageAligned(size));
ASSERT(isPageAligned(alignment));
ASSERT(isPowerOfTwo(alignment));
ASSERT(size >= alignment);
size_t alignmentMask = alignment - 1;
#if OS(DARWIN)
....
#else
size_t alignmentDelta = alignment - pageSize();
// Resererve with suffcient additional VM to correctly align.
size_t reservationSize = size + alignmentDelta;
void* reservationBase =
OSAllocator::reserveUncommitted(reservationSize, usage, writable,
executable);
// Select an aligned region within the reservation and commit.
void* alignedBase = reinterpret_cast<uintptr_t>(reservationBase)
& alignmentMask
?
reinterpret_cast<void*>((reinterpret_cast<uintptr_t>(reservationBase)
& ~alignmentMask) + alignment)
: reservationBase;
OSAllocator::commit(alignedBase, size, writable, executable);
return PageAllocationAligned(alignedBase, size, reservationBase,
reservationSize);
#endif
}
The first two assertions failed:
ASSERT(isPageAligned(size));
ASSERT(isPageAligned(alignment));
The alignmentDelta variable is a 64-bits unsigned integer and
evaluated to a value of 18446744073709539328 (which is 2^64 - 12288 )
because at the line
size_t alignmentDelta = alignment - pageSize();
the 'alignment' arg is 4096 and 'pageSize()' returned 16384 - we'll
take a closer look on the latter one below.
The subsequent line
size_t reservationSize = size + alignmentDelta;
evaluated the reservationSize var to an integer value less than size
because the 64-bits integer arithmetics overflowed and wrapped around.
This is the reason why the allocated memory block was too small.
The mentioned pageSize() function returned the actual page size of
16K, which is correct.
Linux on ia64 can have 4K, 8K, 16K, or 64K page dependant on the
configuration the Kernel was compiled with. Debian uses 16K on ia64.
The mentioned pageSize() function is in
Source/JavaScriptCore/wtf/PageBlock.cpp:
static size_t s_pageSize;
#if OS(UNIX)
inline size_t systemPageSize()
{
return getpagesize();
}
#elif OS(WINDOWS)
inline size_t systemPageSize()
{
static size_t size = 0;
SYSTEM_INFO system_info;
GetSystemInfo(&system_info);
size = system_info.dwPageSize;
return size;
}
#endif
size_t pageSize()
{
if (!s_pageSize)
s_pageSize = systemPageSize();
ASSERT(isPowerOfTwo(s_pageSize));
return s_pageSize;
}
So pageSize() returns the actual memory page size that the operating
system reports.
(Don't confuse the (constant) static s_pageSize member of the the
CopiedSpace class and the static s_pageSize var of PageBlock.cpp.)
The problem is that webkit uses a mixture of hard-coded page size
values and of the actual page size value that the OS reports. If they
are different, webkit will crash.
Since you don't know the page size upon the compile time (of webkit)
on some archs, for example, ia64, the proposed patch removes any
hard-coded page size assumptions on the considered code. The patched
CopiedSpace class uses the page size which the OS reports.
I built the libwebkitgtk-3.0-0 with the patch of this bug report and
the one of bug#642750); the Epiphany browser does no longer crash
within JSC::JSArray::increaseVectorLength().
The patch is for the most recent libwebkitgtk-3.0-0 package of Wheezy.
The patches also fix bug#582774 (seed FTBFS on ia64).
The bug affects any arch that uses a page size larger than 4K. If the
next page adjacent to the (re)allocated memory was already mapped (for
another data), JSArray::increaseVectorLength() might not crash but
overwrite some other data; this bug can cause SIGSEGVs on other code
locations with completely different stack traces. I think it is worth
to check whether this patch solves some other bug reports, for
example, on MIPS.
Stephan
large-mem-page.patch
Description: large-mem-page.patch
--- End Message ---
--- Begin Message ---
Source: webkit
Source-Version: 1.8.1-3.4
We believe that the bug you reported is fixed in the latest version of
webkit, 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 694...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Michael Gilbert <mgilb...@debian.org> (supplier of updated webkit 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 ftpmas...@debian.org)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Format: 1.8
Date: Sat, 16 Feb 2013 21:46:48 +0000
Source: webkit
Binary: libjavascriptcoregtk-1.0-0 libjavascriptcoregtk-1.0-dev
libjavascriptcoregtk-1.0-0-dbg gir1.2-javascriptcoregtk-1.0 libwebkitgtk-1.0-0
libwebkit-dev libwebkitgtk-dev libwebkitgtk-1.0-common libwebkitgtk-1.0-0-dbg
gir1.2-webkit-1.0 libjavascriptcoregtk-3.0-0 libjavascriptcoregtk-3.0-dev
libjavascriptcoregtk-3.0-0-dbg gir1.2-javascriptcoregtk-3.0 libwebkitgtk-3.0-0
libwebkitgtk-3.0-dev libwebkitgtk-3.0-common libwebkitgtk-3.0-0-dbg
gir1.2-webkit-3.0
Architecture: source all amd64
Version: 1.8.1-3.4
Distribution: unstable
Urgency: medium
Maintainer: Debian WebKit Maintainers
<pkg-webkit-maintain...@lists.alioth.debian.org>
Changed-By: Michael Gilbert <mgilb...@debian.org>
Description:
gir1.2-javascriptcoregtk-1.0 - GObject introspection data for the GTK+-based
JavaScriptCore libr
gir1.2-javascriptcoregtk-3.0 - GObject introspection data for the GTK+-based
JavaScriptCore libr
gir1.2-webkit-1.0 - GObject introspection data for the WebKit library
gir1.2-webkit-3.0 - GObject introspection data for the WebKit library
libjavascriptcoregtk-1.0-0 - Javascript engine library for GTK+
libjavascriptcoregtk-1.0-0-dbg - Javascript engine library for GTK+
libjavascriptcoregtk-1.0-dev - Javascript engine library for GTK+
libjavascriptcoregtk-3.0-0 - Javascript engine library for GTK+
libjavascriptcoregtk-3.0-0-dbg - Javascript engine library for GTK+
libjavascriptcoregtk-3.0-dev - Javascript engine library for GTK+
libwebkit-dev - Transitional package for the development files of WebKitGTK+
libwebkitgtk-1.0-0 - Web content engine library for GTK+
libwebkitgtk-1.0-0-dbg - Web content engine library for GTK+ - Debugging
symbols
libwebkitgtk-1.0-common - Web content engine library for GTK+ - data files
libwebkitgtk-3.0-0 - Web content engine library for GTK+
libwebkitgtk-3.0-0-dbg - Web content engine library for GTK+ - Debugging
symbols
libwebkitgtk-3.0-common - Web content engine library for GTK+ - data files
libwebkitgtk-3.0-dev - Web content engine library for GTK+ - Development files
libwebkitgtk-dev - Web content engine library for GTK+ - Development files
Closes: 642750 651636 694971 697172
Changes:
webkit (1.8.1-3.4) unstable; urgency=medium
.
* Non-maintainer upload.
* Fix wide pointer issues on ia64 (closes: #642750).
* Make favicon database thread-safe (closes: #697172).
* Support architectures with large page sizes (closes: #694971).
* Compile with --disable-jit on armel, mipsel, and powerpc (closes: #651636).
Checksums-Sha1:
ac9ab7f514c2ba8ce77e3a130c35355f40e965db 4434 webkit_1.8.1-3.4.dsc
4f93124e52dc69994fcaf4e7b477f950600f2d1b 62514 webkit_1.8.1-3.4.debian.tar.gz
d0f28fa4a304175703d55eb80474652f2e93a02a 745304
libwebkitgtk-1.0-common_1.8.1-3.4_all.deb
44c0d4a1c4f29c4f4d3cfa75f81880a52cfe10dd 745178
libwebkitgtk-3.0-common_1.8.1-3.4_all.deb
659ff59f54bcedcb896c5d0ba25d08259f332f41 1004960
libjavascriptcoregtk-1.0-0_1.8.1-3.4_amd64.deb
1ecaf3171f23f76c0407f14a6aa2d35a4f0754fb 32968
libjavascriptcoregtk-1.0-dev_1.8.1-3.4_amd64.deb
3c044c4945037f880e87ea40d5d6b101adeb3594 19323784
libjavascriptcoregtk-1.0-0-dbg_1.8.1-3.4_amd64.deb
7ae023e8fb599e2d34befbef0f2fbab3b8c51dec 20244
gir1.2-javascriptcoregtk-1.0_1.8.1-3.4_amd64.deb
e4ea61b50e9502cad89e6b44ce1b97b847d1dc23 4757960
libwebkitgtk-1.0-0_1.8.1-3.4_amd64.deb
6062a45990a6ecf51673fbc9ebb6914dcead653d 19908
libwebkit-dev_1.8.1-3.4_amd64.deb
bdaaab35acbb29ec5b47c27d9d3b939a1ffe0ac3 210838
libwebkitgtk-dev_1.8.1-3.4_amd64.deb
3a7acd5c17e384a501f1c62f6c7ce218004ee103 247632752
libwebkitgtk-1.0-0-dbg_1.8.1-3.4_amd64.deb
1e7618101551cfbbb42439719eec7c7c87f427af 61806
gir1.2-webkit-1.0_1.8.1-3.4_amd64.deb
adc918d54564ee7d5e5cceb6b5ea529d2b2386c7 1005020
libjavascriptcoregtk-3.0-0_1.8.1-3.4_amd64.deb
8554c9f744aa5f980de99a2e148fecf2648e7efc 32944
libjavascriptcoregtk-3.0-dev_1.8.1-3.4_amd64.deb
c1be176a7a693f16edf13ae1da1d6f870af79b57 19333542
libjavascriptcoregtk-3.0-0-dbg_1.8.1-3.4_amd64.deb
0c6c0ec27d337977c8f2e9ad2ec1a7bdde467994 20254
gir1.2-javascriptcoregtk-3.0_1.8.1-3.4_amd64.deb
1a7b46d2a010e00b2494c07912d2e8f684a55145 4754942
libwebkitgtk-3.0-0_1.8.1-3.4_amd64.deb
85f72f4a979758b0bd5a45884fffe37b2e97f4c9 210676
libwebkitgtk-3.0-dev_1.8.1-3.4_amd64.deb
094d6535f1adfaee1a4dcd1924fe0f629552d718 247559620
libwebkitgtk-3.0-0-dbg_1.8.1-3.4_amd64.deb
c890338bc3631b23c3afadb7456020051d23bd00 61854
gir1.2-webkit-3.0_1.8.1-3.4_amd64.deb
Checksums-Sha256:
be535c4951934c606d595cc3f7b86c36bd5d5b6442af22d2a7e63cdc417732e0 4434
webkit_1.8.1-3.4.dsc
2cb73b8d67ed0c9e9a9aebb68d43a7812eb0cc7bea2ea30ad9fc0b78487cc349 62514
webkit_1.8.1-3.4.debian.tar.gz
6ed7b3d221cbe2e85e6acc5f666a0f0fc4ed4efe41c2ba177dc106490c877bd5 745304
libwebkitgtk-1.0-common_1.8.1-3.4_all.deb
26f11a57ff8fac9d29386dd15d077cd93acbbf27678629c54eb0a010e5ffa994 745178
libwebkitgtk-3.0-common_1.8.1-3.4_all.deb
67dfa0eb208b21f7936bde310fb5089106077ab862493a8597304880c061a884 1004960
libjavascriptcoregtk-1.0-0_1.8.1-3.4_amd64.deb
c0af8c589b2bdf53bbea4a23578a576040e9b26bf16b9d45168d86dc1dc63ca4 32968
libjavascriptcoregtk-1.0-dev_1.8.1-3.4_amd64.deb
0e4df4f459f0f1e6e927d9a130129dc80286f3435cf5886052a884551b52d987 19323784
libjavascriptcoregtk-1.0-0-dbg_1.8.1-3.4_amd64.deb
46c28587fbef4cb8084858fab5062516d8b74fefd14e1ce5abcc6e2726b6fa50 20244
gir1.2-javascriptcoregtk-1.0_1.8.1-3.4_amd64.deb
a8c0edb5f2c5e074370e69f2b4338ca813496a9d14e36f32902185ffa20aeee1 4757960
libwebkitgtk-1.0-0_1.8.1-3.4_amd64.deb
95c9ebb31e828e954380d4353f7efe0944239f947dba56d00f5c712dc1ae3a77 19908
libwebkit-dev_1.8.1-3.4_amd64.deb
06966385450c60bdce99f1bde1705ea014ffdcb7f35e1be867a1a8dea532acc0 210838
libwebkitgtk-dev_1.8.1-3.4_amd64.deb
645ebbab5be7b8efbe4a47514e8059bbbd02118cc280eeb9566ccaaa91a81c18 247632752
libwebkitgtk-1.0-0-dbg_1.8.1-3.4_amd64.deb
4c2efb2987a3fa63bd3ced42e7227d1f677cdc73b1d18ad61c2bf82cfbefa670 61806
gir1.2-webkit-1.0_1.8.1-3.4_amd64.deb
900daea70cc7235d765331fd42d4242566936465d53081a7226486b466549ecd 1005020
libjavascriptcoregtk-3.0-0_1.8.1-3.4_amd64.deb
9f3197d65983c37d4804f867dceff538b31a4091ffddd087cda512a261a00902 32944
libjavascriptcoregtk-3.0-dev_1.8.1-3.4_amd64.deb
d92e11f7b75eb3ed6781d8745417d7afe7dfed2e2472931a29244419214dba7f 19333542
libjavascriptcoregtk-3.0-0-dbg_1.8.1-3.4_amd64.deb
dbbaedb0e07265fe57abf19a2c9c284fc9c88720bbe8a60a240fddccfdc789d1 20254
gir1.2-javascriptcoregtk-3.0_1.8.1-3.4_amd64.deb
c3665bae192e137ecf2741c53e93acc92d1c98a8ae25a2281b69928ed3d98ea9 4754942
libwebkitgtk-3.0-0_1.8.1-3.4_amd64.deb
a2050fa34ef81c4cfe4934c5e2473960bcf89759bf12ab115eb1349d58ffd22b 210676
libwebkitgtk-3.0-dev_1.8.1-3.4_amd64.deb
830651f60f38b9a25dd46644fd62434352a08f651276761776462e44def84feb 247559620
libwebkitgtk-3.0-0-dbg_1.8.1-3.4_amd64.deb
9bd706c51d8cff41124b0e011929b04771fe59c4ce5f1abce43372d2f5780cf9 61854
gir1.2-webkit-3.0_1.8.1-3.4_amd64.deb
Files:
aea486efc065781e3684a75815722ecb 4434 web optional webkit_1.8.1-3.4.dsc
97523d4030e19b8ba200bd8ba2ab7e7a 62514 web optional
webkit_1.8.1-3.4.debian.tar.gz
674b179c636be8923813f2ade75c611e 745304 libs optional
libwebkitgtk-1.0-common_1.8.1-3.4_all.deb
1f3884b72a3544fd9b700351559e381e 745178 libs optional
libwebkitgtk-3.0-common_1.8.1-3.4_all.deb
85a4e7ecc7cc8477b802e1bbb683927a 1004960 libs optional
libjavascriptcoregtk-1.0-0_1.8.1-3.4_amd64.deb
72e34fae0a00d385d9138d84ebdf8c94 32968 libdevel extra
libjavascriptcoregtk-1.0-dev_1.8.1-3.4_amd64.deb
952aaa0cf6fbabc6d6eaac378001e56d 19323784 debug extra
libjavascriptcoregtk-1.0-0-dbg_1.8.1-3.4_amd64.deb
51d627df66baddf42c0eea6d68d5bcef 20244 introspection optional
gir1.2-javascriptcoregtk-1.0_1.8.1-3.4_amd64.deb
e19b5615aad11073f1152f50a272c616 4757960 libs optional
libwebkitgtk-1.0-0_1.8.1-3.4_amd64.deb
eeccb3987ee6450624314bb30464a093 19908 oldlibs extra
libwebkit-dev_1.8.1-3.4_amd64.deb
67a90b05da9431082a3fe68d53e26c32 210838 libdevel extra
libwebkitgtk-dev_1.8.1-3.4_amd64.deb
983f75ef85d1d1b1759aadeb5f6a7ca1 247632752 debug extra
libwebkitgtk-1.0-0-dbg_1.8.1-3.4_amd64.deb
5b2109ec5b9d6faad51c586a1fe75252 61806 introspection optional
gir1.2-webkit-1.0_1.8.1-3.4_amd64.deb
9f477d544f88fd61b114df274dc5f8f1 1005020 libs optional
libjavascriptcoregtk-3.0-0_1.8.1-3.4_amd64.deb
70f963c779981b64e57bdbb07402bfc1 32944 libdevel extra
libjavascriptcoregtk-3.0-dev_1.8.1-3.4_amd64.deb
3161c26ee8e7ff87402b5c460759d3d7 19333542 debug extra
libjavascriptcoregtk-3.0-0-dbg_1.8.1-3.4_amd64.deb
65a88c6ac77f38a8f5daddda91a190ce 20254 introspection optional
gir1.2-javascriptcoregtk-3.0_1.8.1-3.4_amd64.deb
a1f720272118e073e4b47e29cd0f5087 4754942 libs optional
libwebkitgtk-3.0-0_1.8.1-3.4_amd64.deb
f6b55528788043f2dbac9f202d9f60ee 210676 libdevel extra
libwebkitgtk-3.0-dev_1.8.1-3.4_amd64.deb
6cec8d74fd66d48778de88db26f86ca0 247559620 debug extra
libwebkitgtk-3.0-0-dbg_1.8.1-3.4_amd64.deb
ad0671e9df702f78a95bcf747c24d65c 61854 introspection optional
gir1.2-webkit-3.0_1.8.1-3.4_amd64.deb
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iQQcBAEBCAAGBQJRIxGEAAoJELjWss0C1vRz/wkgAIlj5qYPrev3rkrWL10+3v5+
p/1j3hFuxAj4qX5/ew6iTLY8MtrPbhkLFpbn1mFg6IQW0P4LcBJWSQF8TPYHPH6+
CRm+XTpQV5Yo+swbvP2U1gGTudJXwjsFS0DumxbTB2L1YEaPB4qgtqtjGeT6n40v
UzJYuDXGmdZiQrEoTU4MfRAuVOGmc3msV3dqxgfPohxAJtV5to9osLcORgTUJbcL
TBzhCyxJfQoUzM6e7Q8g8tdj7NQTMrLej7rjPj07uXs+lNTBdnedNrIyhm196Zbh
q09ZD+MLnZDgtNQSC9Q8v5zdTDtnZPURDsm6HDq7ayyMP2x950Vv2fuW+h21tmN1
9uogKBPrd8C7107a0+atz318j003An3+/Jiktr4Sx9UOXXi0MK2UFger0VoTqZYv
Usw9qKvrqRXAT2jH+eUyVjgxxNLNLtGwjwUa1gA98jU4Q7GQJ/RlsiCKHoOMJZ+Q
6USrLIkXjrJ8LOiss7odBv+rO1VD6imGp+nhJcCimKjgBrL4+Fxw21kdB+Kfnu5g
LE3YlSU2nvUQIOfU75f73YzSX4UTNGeP9BN3TbytGtXbTGtRg7EnVtnJnffgRItT
Grunu4f2ECrT0yW/cZNRMD1XI6KJlu04r4yxa6FXjjARdxTEyPnkcTrz+0ZugeGt
fG5WsDY2pj50cGs3vIPUCx8VnpVZfzIyt1KQZ4KKkwqBhOecG2DtXJHao4xOcU43
aw3IPzUiADS1SkNBKSQy/rDzImrJxThwwsCFtB+DTuyVvsXhj05EOqgeJ85ESrJg
zdpSjeVqdnn3Oft0Nd2fIA0D3fi3q5CooQddC2QXvFLYu+EA0Rbis+cxUgBY7pAh
hcL9IBNd8UAY4dbdBBjioxSni0E6SsmdtRDyFzRJk/O5DbcI9XXlnF4N9uRDmcTP
enZk+uEw0C7lNAxjYAupihhf1Q05yvdePrjYJE5P6UGRSCD67k3XqTaSXUcaGotC
ZEsrbnb+BpilRLZRMIYgO+jHousqlkUoml43hCXxS9rGpz3ldgRAXs8Dv7Q+8EGK
hW5cuO/yq9ihEU2jSschCNUYeaKeMXZbwssKgUB3ZFlvXeTnil3rqz6AlveUl/NQ
PIFn4ezVx+Xa+5NGIoRDIHZoAcM5H3re1KIruutJK302H9alUFwXPLcaO40Og3U3
HyChR58jP9FRYlDwHlSU/R43i8Mu6O0WKGZriv50ONB3MTgIDfyCq6GdCyGLXwPk
BMe7fR3D09000UksvWxvuVUV6Nrj99T1DT4FJ2M0iOSNHbdxMALXzSJANLBoC7Dw
QzSvMhk6Lcp0V6rmTaj1QYcuqdkcgT5duEuhsEkGMxXG0qnOszFs01CmRpGONO0=
=oCdZ
-----END PGP SIGNATURE-----
--- End Message ---