<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/90556>90556</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mips] libQt5Core.so compiled with LLD version 15.0.0 and above crashes when loaded
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
TheThreeDog
</td>
</tr>
</table>
<pre>
I compiled the Qt5 and my program for the mips64el architecture, using llvm 18.1.4.
Then it crashed directly at runtime in dl. so.1. The stack shows that libQt5Core. so crashes whenever it is loaded, whether using LD_PRELOAD, link dependency, or dlopen.
We identified that the issue was caused by a new version of LLD, so we retry it with different versions for testing. Ultimately, we found that version 14.0.6 performed normally, while version 15.0.0 had issues.
We gradually rolled back over 15000 commits between the two versions and ultimately found that this commit caused:
https://github.com/llvm/llvm-project/commit/464531193353
We rolled back this commit on LLVM version 18.1.4 and changed the code to the following:
```
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp
index e033a715b592..00dfe5aeaf87 100644
--- a/lld/ELF/InputSection.cpp
+++ b/lld/ELF/InputSection.cpp
@@ -169,6 +169,8 @@ uint64_t SectionBase::getOffset(uint64_t offset) const {
//
// Second, InputSection::copyRelocations on .eh_frame. Some pieces may be
// discarded due to GC/ICF. We should compute the output section offset.
+ if(config->isMips64EL)
+ return offset;
const EhInputSection *es = cast<EhInputSection>(this);
if (!es->content().empty())
if (InputSection *isec = es->getParent())
```
Recompiled a new LLD issue to resolve.
Perhaps this is a bug in LLD?
Or do I need to add other compilation parameters to solve this problem?
And I want to know why only libQt5Core has this issue? I have compiled many other dynamic libraries with the same LLD, using the same compilation parameters and dependency libraries, which cannot reproduce this problem.
crossbuild
- host:x86_64 ubuntu16.04
- target: mips64el-unknown-linux-gnu
- Qt version: 5.12.12
- compiler: clang18.1.4
- linker: lld (clang + -fuseld-lld)
- stdlib: libstdc++
- gcctoolchain: libstdc++ 13.2.0
- Link compilation parameters for QtCore (generated through ld. ld - v):
```
/path/to/clang-18.1.4/bin/ld.lld --sysroot=/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot -z relro --sysroot=/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot --eh-frame-hdr -m elf64ltsmip -shared -o libQt5CoreKso.so.5.12.12 /path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot/usr/lib/../lib64/crti.o /path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../lib/gcc/mips64el-unknown-linux-gnu/13.2.0/crtbeginS.o -L/loongson64/usr/lib -L/loongson64/lib -L/home/threedog/kingsoft/code/qt5/test/3rd_mips/default/mips64el-linux/lib -L/loongson64/usr/lib -L/loongson64/lib -L/home/threedog/kingsoft/code/qt5/test/3rd_mips/default/mips64el-linux/lib -L/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../lib/gcc/mips64el-unknown-linux-gnu/13.2.0 -L/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../lib/gcc/mips64el-unknown-linux-gnu/13.2.0/../../../../mips64el-unknown-linux-gnu/lib/../lib64 -L/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot/lib/../lib64 -L/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot/usr/lib/../lib64 -L/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../lib/gcc/mips64el-unknown-linux-gnu/13.2.0/../../../../mips64el-unknown-linux-gnu/lib -L/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot/lib -L/path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot/usr/lib -rpath-link /loongson64/usr/lib -rpath-link /loongson64/lib --undefined-version --disable-new-dtags -z notext --disable-new-dtags --version-script QtCore.version -soname libQt5CoreKso.so.5 .obj/minimum-linux.o .obj/qstring_compat.o .obj/qabstractanimation.o .obj/qvariantanimation.o .obj/qpropertyanimation.o .obj/qanimationgroup.o .obj/qsequentialanimationgroup.o .obj/qparallelanimationgroup.o .obj/qpauseanimation.o .obj/qendian.o .obj/qglobal.o .obj/qlibraryinfo.o .obj/qmalloc.o .obj/qnumeric.o .obj/qfloat16.o .obj/qoperatingsystemversion.o .obj/qlogging.o .obj/qrandom.o .obj/qhooks.o .obj/qversiontagging.o .obj/qrunnable.o .obj/qthread.o .obj/qthread_unix.o .obj/qatomic.o .obj/qmutex.o .obj/qmutexpool.o .obj/qreadwritelock.o .obj/qsemaphore.o .obj/qthreadpool.o .obj/qthreadstorage.o .obj/qwaitcondition_unix.o .obj/qexception.o .obj/qfutureinterface.o .obj/qfuturewatcher.o .obj/qresultstore.o .obj/qarraydata.o .obj/qbitarray.o .obj/qbytearray.o .obj/qbytearraylist.o .obj/qbytearraymatcher.o .obj/qcollator.o .obj/qcryptographichash.o .obj/qdatetime.o .obj/qeasingcurve.o .obj/qfreelist.o .obj/qhash.o .obj/qline.o .obj/qlinkedlist.o .obj/qlist.o .obj/qlocale.o .obj/qlocale_tools.o .obj/qpoint.o .obj/qmap.o .obj/qmargins.o .obj/qmessageauthenticationcode.o .obj/qcontiguouscache.o .obj/qrect.o .obj/qregexp.o .obj/qrefcount.o .obj/qringbuffer.o .obj/qshareddata.o .obj/qsharedpointer.o .obj/qsimd.o .obj/qsize.o .obj/qstring.o .obj/qstringbuilder.o .obj/qstringlist.o .obj/qstringview.o .obj/qtextboundaryfinder.o .obj/qtimeline.o .obj/qunicodetools.o .obj/qvsnprintf.o .obj/qversionnumber.o .obj/qlocale_unix.o .obj/adler32.o .obj/compress.o .obj/crc32.o .obj/deflate.o .obj/gzclose.o .obj/gzlib.o .obj/gzread.o .obj/gzwrite.o .obj/infback.o .obj/inffast.o .obj/inflate.o .obj/inftrees.o .obj/trees.o .obj/uncompr.o .obj/zutil.o .obj/qlocale_icu.o .obj/qcollator_icu.o .obj/qtimezone.o .obj/qtimezoneprivate.o .obj/qtimezoneprivate_tz.o .obj/qtimezoneprivate_icu.o .obj/qdatetimeparser.o .obj/qregularexpression.o .obj/qcommandlineoption.o .obj/qcommandlineparser.o .obj/harfbuzz-buffer.o .obj/harfbuzz-gdef.o .obj/harfbuzz-gsub.o .obj/harfbuzz-gpos.o .obj/harfbuzz-impl.o .obj/harfbuzz-open.o .obj/harfbuzz-stream.o .obj/harfbuzz-shaper-all.o .obj/qharfbuzz.o .obj/bignum.o .obj/bignum-dtoa.o .obj/cached-powers.o .obj/diy-fp.o .obj/double-conversion.o .obj/fast-dtoa.o .obj/fixed-dtoa.o .obj/strtod.o .obj/qabstractfileengine.o .obj/qbuffer.o .obj/qdataurl.o .obj/qtldurl.o .obj/qdebug.o .obj/qdir.o .obj/qdiriterator.o .obj/qfile.o .obj/qfiledevice.o .obj/qfileinfo.o .obj/qipaddress.o .obj/qiodevice.o .obj/qlockfile.o .obj/qnoncontiguousbytedevice.o .obj/qstorageinfo.o .obj/qtemporarydir.o .obj/qtemporaryfile.o .obj/qresource.o .obj/qresource_iterator.o .obj/qsavefile.o .obj/qstandardpaths.o .obj/qurl.o .obj/qurlidna.o .obj/qurlquery.o .obj/qurlrecode.o .obj/qfsfileengine.o .obj/qfsfileengine_iterator.o .obj/qfilesystementry.o .obj/qfilesystemengine.o .obj/qfileselector.o .obj/qloggingcategory.o .obj/qloggingregistry.o .obj/qfilesystemwatcher.o .obj/qfilesystemwatcher_polling.o .obj/qfilesystemwatcher_inotify.o .obj/qprocess.o .obj/qprocess_unix.o .obj/qsettings.o .obj/qfsfileengine_unix.o .obj/qfilesystemengine_unix.o .obj/qlockfile_unix.o .obj/qfilesystemiterator_unix.o .obj/forkfd_qt.o .obj/qstandardpaths_unix.o .obj/qstorageinfo_unix.o .obj/qabstractitemmodel.o .obj/qitemselectionmodel.o .obj/qabstractproxymodel.o .obj/qidentityproxymodel.o .obj/qsortfilterproxymodel.o .obj/qstringlistmodel.o .obj/qfactoryinterface.o .obj/qpluginloader.o .obj/qfactoryloader.o .obj/quuid.o .obj/qlibrary.o .obj/qelfparser_p.o .obj/qmachparser.o .obj/qlibrary_unix.o .obj/qabstracteventdispatcher.o .obj/qabstractnativeeventfilter.o .obj/qbasictimer.o .obj/qdeadlinetimer.o .obj/qelapsedtimer.o .obj/qeventloop.o .obj/qcoreapplication.o .obj/qcoreevent.o .obj/qmetaobject.o .obj/qmetatype.o .obj/qmetaobjectbuilder.o .obj/qmimedata.o .obj/qobject.o .obj/qobjectcleanuphandler.o .obj/qsignalmapper.o .obj/qsocketnotifier.o .obj/qtimer.o .obj/qtranslator.o .obj/qvariant.o .obj/qcoreglobaldata.o .obj/qsharedmemory.o .obj/qsystemsemaphore.o .obj/qpointer.o .obj/qmath.o .obj/qsystemerror.o .obj/qtestsupport_core.o .obj/qcore_unix.o .obj/qeventdispatcher_unix.o .obj/qtimerinfo_unix.o .obj/qelapsedtimer_unix.o .obj/qeventdispatcher_glib.o .obj/qsystemsemaphore_posix.o .obj/qsystemsemaphore_systemv.o .obj/qsystemsemaphore_unix.o .obj/qsharedmemory_posix.o .obj/qsharedmemory_systemv.o .obj/qsharedmemory_unix.o .obj/qutfcodec.o .obj/qlatincodec.o .obj/qsimplecodec.o .obj/qtextcodec.o .obj/qisciicodec.o .obj/qtsciicodec.o .obj/qicucodec.o .obj/qcborstream.o .obj/qcbordiagnostic.o .obj/qcborvalue.o .obj/qdatastream.o .obj/qjson.o .obj/qjsoncbor.o .obj/qjsondocument.o .obj/qjsonobject.o .obj/qjsonarray.o .obj/qjsonvalue.o .obj/qjsonwriter.o .obj/qjsonparser.o .obj/qtextstream.o .obj/qxmlstream.o .obj/qxmlutils.o .obj/qstatemachine.o .obj/qabstractstate.o .obj/qstate.o .obj/qfinalstate.o .obj/qhistorystate.o .obj/qabstracttransition.o .obj/qsignaltransition.o .obj/qeventtransition.o .obj/qmimedatabase.o .obj/qmimetype.o .obj/qmimemagicrulematcher.o .obj/qmimetypeparser.o .obj/qmimemagicrule.o .obj/qmimeglobpattern.o .obj/qmimeprovider.o .obj/qfloat16tables.o .obj/qrc_mimetypes.o .obj/moc_qmimetype.o -lpthread -lm /loongson64/usr/lib/libicui18n.so /loongson64/usr/lib/libicuuc.so /loongson64/usr/lib/libicudata.so /home/threedog/kingsoft/code/qt5/test/qt5_mips/build_mips64el/qtbase/lib/libqtpcre2.a /loongson64/usr/lib64/libgthread-2.0.so /loongson64/usr/lib64/libglib-2.0.so -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../lib/gcc/mips64el-unknown-linux-gnu/13.2.0/crtendS.o /path/to/toolchain/x64/mips64el-unknown-linux-gnu-13.2.0-2.20-2.6.32/bin/../mips64el-unknown-linux-gnu/sysroot/usr/lib/../lib64/crtn.o
```
- qt configure:
```
-opensource
-confirm-license
-release
-force-debug-info
-c++std
c++14
-platform
linux-clang-libstdc++
-no-feature-enable_new_dtags
QMAKE_LFLAGS+=-Wl,--disable-new-dtags
-dbus-runtime
-no-vulkan
-qt-libjpeg
-qt-libpng
-qt-tiff
-xplatform
linux-mips64el-clang++
-no-use-gold-linker
-force-pkg-config
-developer-build
-skip
qtwebengine
-skip
qtwinextras
-skip
qtmacextras
-skip
qtohosextras
-qt-harfbuzz
-opengl
desktop
-nomake
tests
-no-sql-odbc
-qt-zlib
-openssl-runtime
-qtnamespace
kso_qt
-qtlibinfix
Kso
-I
/path/to/3rd/default/mips64el-linux/include
-L
/path/to/3rd/default/mips64el-linux/lib
```
Crash dump:
```
Program received signal SIGSEGV, Segmentation fault.
0x000000fff7fd6e10 in ?? () from /lib64/ld.so.1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcW19v47iu_zTui2Ajcf5M-9CH2elkMThd7J_Ze_YxkCXa1laWXIlKmn76C8l2asvu7J6Lu7iDWwwy1Y8URVIUSTsqtVZUCuA-2f2Q7B5uqMNam_vfa_i9NgAPuropNL_cfyFMN62QwAnWQH7FHaGKk-ZCWqMrQxtSahNIjWjtfguSUMNqgcDQGUjyT4Q4K1RFpDw1ZH2brbNtlqwektXH32tQRCBhhtoaOOHCAEN5IRSJcQpFA0QowmVGrM7WGfm9BmKRsidia322BGuKRIriV9x90gY8Wy_MknMNCk5g_ALCEqkpB-7VOdeANZheq8eH4y-_fX78-eODp0mhngiHFhQHxS4e0oZwqVtQvdLd5x9ABAeFohTBMxSDD4S1DsiZWsKos8BJcSGUKDiTExgrtCK6JI-PYS2ryRmIATQXr-NZYE24KEswoHDgt517waJQVUb-S6JoKIIMqp2BlNqpfv1hhfU2W2V70oIptWmAE6VNQ2U_pRYS3lh32SpbkZryTnMb21gZyp2fS4yWPgYK73zt3brerVYrHxyNQEsKwDOACk7As35T3weLu2o91hdrYfv5vbeSTb9yjdhaP8oPSX6oBNauyJhukvzgo6j_L22N_hMYJvmhE5Pkh-1-u9us13ebzW4T2TK2YLy2VuTx8d8_vTklhGhQnNVUVX3kM82BoA6_l1pKfRaqumqc7Ff9vzD0-0jStBJIaNCWJ_nh86O35otqHX4FhkKrjLUtKf6CoZMoFIcXAqvNhn5Y74rdXZ5lqxUvYUeBlrcfyHq12m-3HXOapn-5bq93_kP372-qkWxXyXZF0vX-Lsk_7UmS_9D9ekt6khMK99sjkn7uD9SCd9PmYwX4c1lawCS_vXLpHrkjTCuLJPnwQ7cS6Ta_H_ifDvBytQoneaxitwTT7eU3kJpRDNGnFcmgPpaGNpCRr7oB0gpgYElDL6SAuXQuLKOG-2zkwn7_-Mk749MhI3-ATztO8pASHUKIBe2wdUhsp0ZvT3b1rhctyiS_ZVqVokqTzWdhfwqp8vNjkt9NGP2PAXRmkJNsBm903vlcj20mSf4RLEk2D4RRi8nm05SebD4n-a2Pdb_QVVSnEkny2yRfg_UqMa0QFAboLoOmxUv3-1XDXrtuXqyEsMCCGp20CvAXaq7y3qycHpLu8ze4FpguUz4-PvR5FDUxYLU8Qe_PX8DUtLXd8RWWUFK4ypcIn1I3faz8bAjX5AtR4E-uJpRzokPG7xYKoUFa6mMCwVjPExbpxLZGFxKaq7iPipMv5EwVesYnpc_kXF-IVvIyKj2kple1rINkcyBfSE1P8FY-G6ouvSL8omgjmJ9vqBG-Wvns78PJ0gaGCtFVqCv6jvo-Ub2VrDeZfbpnNWFUKY3EQGs0d2xq6CTlM6OtLZyQvE8kpNY-sD6-3O6P-y1xhVPo1vtstSUDB1JT-Uj9eO0AUqe8n1QqhXIvaaXcwPvrtUx5_l22zrN1PhB7TxlPYpKqqs_EA90X544qJfdhGJh8CiJp6SxInoYEdjdMsMilKMIEUVjkrM92PbliDLWWrKYiqDPlIutNlmer6-qPvjV4Zwt8jf4VQxwk-W0FCgzFUDeMdlVNJM-I5CQlp3AQl2tGkh9ainWSH1D7kuaNSzsXJPmhEMonaJ5529PUXqzRGpPNQzTtzaL88LL3M9_flbQzMc2z3H_ss01-XSnLvjk1yQ-9CiR9JQak0d-ZVinUacj7ac0NSRsCstxvJdpGtCS1NTXASapHZ_hfVmdWZ31Ukv9rE5L84Kzxmy6KYZ4URViaGRSZ_kdV7FatGPsrdTtBnVIFVEJ9zTRJH70IrVVltQqqXG1ZoF3RWjfgDfGPIFxXSX54Ep6t7Jo87onPuPMsYD22MfzotUvyA4eSOoljdYOa7676XWj0vezf96XNMC36-ObM-Jj8wxb9zSP8fWq1nFj-X8TA9-Hg70aRUZIzXpc0vOL4Rir8Blegp05xKIUCng5PzGnKhaWFhFTBOeVIK-u7AqURXnCZOsxNLTOixb57yq4SrVa-5Z0XZ5Lp4s9gvhKNazqrMz3AzxaNUNXRN2oURzgtLBrKkCrRhP5tRDtRI6haJLVGt2DwskS7YpXRrh3rAM8OFAoq32XxzaOU8C0GZ2FpVVBc0DFQSV1QOQK6J4CLUKUeoQ2VUrMRoFwDRoyRUmqK6_0I8cZT9AXvYhGafnvGa-mqEqoaIYYqrpsRUGv9ZMfe7oQgnc10Svk4GUG-7FI-A45OifGmU9TNxJLGIbzE41brsZu8oLMRCFKzp8nuNbStfTTGy0YCOtCiNrQaM5-pQKYVF37nYlXhhUEbbWnp0BkQCsGUlMGMcqbIajAT3a2T6Jcec1Nj6IVTpCOsEBjgMXRBeBeTwuIS3sx0YFpKinoCmUuLujK09c-d1NYjGqcIKJqxvkD9Ay5z5jSx2QBEWkSipFAwHT4Bj6bEQ83oJLI64OhT8jg4Wy0UTk5NOxmZSqgxfwPW0gqow9qf-O69k28LJ45SKCqnnWWU1TDZRoaTYQUv7QQomXYThXx2K1xZTraie5qJdr4Dg0FTZtHwyfAVZvlzBoR3AlMxAY_c3IEnAefxOYEXLLRTnJpLKdRUjA-JaD-dEt6D8dacrGqNUFjOc4lyTTGR2u_u9OxRLsFs8jfAFwkDdrQIM2zMwKGUFEe6Va9MajsBpCjGw2m-ql5DhnkDhCoLOk43QpUlHftQqGhNoUo0ACMto6FTwZA34NWhkHNvCOYWjm8E-_141ZP9GKDWiNNEs5hyxNdvEKfrDOmgpcZGqa1ykhp4CVszTZRMNw1V3MeLjpPoiBbLrKkpC_f6msYH50qoOJRLsHXFEtxquwCLppULcPjuaA5bNECbJUJNWzAplXKSATvqG1SISrkmHqcc9SgJhITD01afwYxU5uKSlqNEw7Xz_RnTalbhfXBGQkvxAjzCLBrUfKHfKoUEUNX0hM8SmE9dzkyKq-RTgEPhxnmJCzMdCfS9yqQe-cWjIYeTYDEYtUqipZxPE8Oz0LOZvm-IVlA--Q_Z3tfO2aS-XYhWRGha7Zu2qVVXOFrGgNXOsCXouOAGS08QSbBIfT7mvtkfmzn1uTNScEWnyLMDc5lCBqKSV9rFfR_DS4p6atdpgsLJImNKLNSTQAKbyuo7U0YRKj2R1VMMVMK-t8q85ZrRjq2Wclor5zxCaRTleI3WaDYNrR6JO0ULGDrv9_wXscceiulDtL4_b9iQiKPU5qnkx2d8L3xmir-F-KxR77OCQGgazWEcbB7r9lFoFROHia3RL5fZzPBNPF4WiVYbn4QQzDL52sbElJL6iLosteWtdJVQ4UqBmc-Y4c4JPmlNw_PZCAFZdjXrOO02WT0rj_3k9xwLJ1DIhW1n8TtwKIriBIGvc8s4L1MrmK_Kk9QKNFTVGAdJWwt8BnvJUut2UpsN0LaVfX8cUcKMsd2AVBd_TntjD-KlhUW-eXfaiAaifngmsgOYBKpcW_veIeqTK0VlQ9t2Cmv2BBiOtZh1spOxocrGT0j9q4bIA90j_GL_3kAzzV7dWV16SJ23-g3FejYVjNHTImPRurbVBo9sKtEPZw-w0wiLycELS0d_HC5_JbOaNNWxycdW22nCiej9y4pvcMQZa-TqufQxcUH0mBzJdVj6wjh-MyEpChWD1reOEKP-uSnGhGVCzBiXQMFcDLFCm7jtDCAXtFLaooi5T1Q6iPq0mYQ_7eRI-6GfG0FcM9dMD7qHZ6fSg_HbCY_FqngsPFzFC81SpvfjTOmXRi5h_snJTgsdgk_E055jSKaBHLNPiquiMgZr4SvkJYYHmSFviChPdslokRQOzyJlSIIFtRDBcSoVDTS0Esw4CfNXPcOMmWsn8yLcJ7WWIoKJdWqNPomodHavHpEWcvxo-2zYcVh8BDeaHcdmpLLtXsaRVDbvv9zuPgVzYn2rMqv_Bqdjf48v5O6O8z_-xvAZd8M3hqGQHYdX-4HmN2-82DO2zECe0fe1Gl7WV51T0jxbfdOKK78UxcCcytFVCO_VVFaMHW33P0kli5Dv65sjZhAU__oPf0f-v_A1vsr04m2QlDwj6e6MOQPv3RkJLxe6B78eCFNMk0rBQNkBNSCBXkelNgzS8ECd-lI9TO1222J_-acfr4dLha2kWGrTdMPO1O6WytL1GqXTEig6AymE1_pHBedj-Pqn4_j1p4__-nx8PDx-_PGrn7Z5SP-QSf5p4fuiXiQvnE37i8Fvq5ycfKKqHz-jV-bPFqoJ0KrRGEVZ9qOXJZuuuxqMi41yFtJKS57215HGLm2fqm4DhtU4nEDqFkw6vlRln0R_nfIZz1B0z2tLNKHgBQ21C7SGsndputZ2QnzGdHiBNIqbSvaXVcE-oW6vJjb0qdcmtIZvpttnmWpesDeprz6oR5FoZbQ_z6hoA7alQ4A-WX18xivVZ09VipcO-JcdYvHL4p2ojeHfvlYhFJOOD4s__s-EXG2KDtsnQ21NuGva947jL_2VeAMMxAk46co2-frlx6-ff_x3kn8iX6HyXVB3hSyo0F_AW72swk9Zlh9Kvof1ighFks0h2Ry6u5p3pDS6K29DzuaZ1dk60uWG32_43eaO3sD9-sN6u92t15vNTX1f5hzWd3dbWn7YbtaUw_4DLdYF7LfFtvjAyxtxn6_y7Wq7Wa22-W6zyfIV3W_2BZT5brstPhTJdgUNFTKT8tRk2lQ34brj_d1qt9vfSFqAtOEvCvI8XMXLk93DjbkPt7ULV9lku_KP2vZtPgqU4Y8QQgXcPYyv81v9dnsyXJB8fHyI765TxQkt9AkmF__76_43zsj7__gyeXcVPskPwar_DgAA___p2XWZ">