<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/123487>123487</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [BOLT] Crash: "Cannot encode high byte register in REX-prefixed instruction" during basic block reordering of libvulkan_radeon.so
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            BOLT
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ms178
      </td>
    </tr>
</table>

<pre>
    **Description:**

Bolt crashes during optimization of the `libvulkan_radeon.so` library (part of the Mesa Radeon Vulkan driver) when using the `--lite=false` flag. The crash occurs during the basic block reordering phase (`ExtTSPReorderAlgorithm`) and is caused by an error in the x86 code emitter: "Cannot encode high byte register in REX-prefixed instruction".

**Environment:**

* **Operating System:** CachyOS
*   **LLVM/BOLT Version:** Recent snapshot of LLVM-git (3def49cb64ec1298290724081bd37dbdeb2ea5f8)
*   **Host Compiler:** GCC 14.2.1
*   **Target Architecture:** x86-64
*   **Binary:** `libvulkan_radeon.so` (from Mesa Radeon Vulkan driver)
*   **BOLT command:** `llvm-bolt "$file" --data "${srcdir}/bolt_profile/vkcube.perf.data" --dyno-stats --lite=false --cu-processing-batch-size=64 --eliminate-unreachable --frame-opt=all --icf=all --jump-tables=aggressive --min-branch-clusters --stoke --sctc-mode=always --plt=all --hot-data --hot-text --frame-opt-rm-stores --peepholes=all --infer-stale-profile=1 --x86-strip-redundant-address-size --indirect-call-promotion=all --reg-reassign --use-aggr-reg-reassign --reorder-blocks=ext-tsp --reorder-functions=cdsort --split-all-cold --split-eh --split-functions --split-strategy=cdsplit --skip-funcs=.text/1 -o "_build64/bolt/$(basename "$file")"` (part of a larger build script)

**Steps to Reproduce:**

1.  Build Mesa with the Radeon Vulkan driver enabled.
2. Collect profiling data using `perf` while running a Vulkan application (e.g., `vkcube`).
3.  Attempt to optimize `libvulkan_radeon.so` using llvm-bolt with the command line arguments specified above, particularly including `--lite=false`.

**Expected Behavior:**

llvm-bolt should successfully optimize `libvulkan_radeon.so` without crashing. This does work in lite mode.

**Actual Behavior:**

llvm-bolt crashes with the following error message:

```
LLVM ERROR: Cannot encode high byte register in REX-prefixed instruction
```

**Stack Trace:**

```
LLVM ERROR: Cannot encode high byte register in REX-prefixed instruction
 #0 0x0000640fccb7a9c5 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) Signals.cpp:0:0
 #1 0x0000640fccb7adbc SignalHandler(int) Signals.cpp:0:0
 #2 0x0000766b28647530 (/usr/lib/libc.so.6+0x47530)
 #3 0x0000766b286b6ccd pthread_kill (/usr/lib/libc.so.6+0xb6ccd)
 #4 0x0000766b28647472 raise (/usr/lib/libc.so.6+0x47472)
 #5 0x0000766b286244a3 abort (/usr/lib/libc.so.6+0x244a3)
 #6 0x0000640fccb56622 llvm::report_fatal_error(llvm::Twine const&, bool) (/home/marcus/llvm20/bin/llvm-bolt+0x3756622)
 #7 0x0000640fcb64ae45 (/home/marcus/llvm20/bin/llvm-bolt+0x224ae45)
 #8 0x0000640fcbb100d8 (anonymous namespace)::X86MCCodeEmitter::emitPrefixImpl(unsigned int&, llvm::MCInst const&, llvm::MCSubtargetInfo const&, llvm::SmallVectorImpl<char>&) const X86MCCodeEmitter.cpp:0:0
 #9 0x0000640fcbb0c323 (anonymous namespace)::X86MCCodeEmitter::encodeInstruction(llvm::MCInst const&, llvm::SmallVectorImpl<char>&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const (.4c1216ec09f139b7b42615b3f5e2d4e3) X86MCCodeEmitter.cpp:0:0
#10 0x0000640fcd0ef6ed llvm::bolt::BinaryBasicBlock::estimateSize(llvm::MCCodeEmitter const*) const (/home/marcus/llvm20/bin/llvm-bolt+0x3cef6ed)
#11 0x0000640fcd0695e6 llvm::bolt::ExtTSPReorderAlgorithm::reorderBasicBlocks(llvm::bolt::BinaryFunction&, llvm::SmallVector<llvm::bolt::BinaryBasicBlock*, 0u>&) const (/home/marcus/llvm20/bin/llvm-bolt+0x3c695e6)
#12 0x0000640fccfe07fe std::_Function_handler<void (llvm::bolt::BinaryFunction&), llvm::bolt::ReorderBasicBlocks::runOnFunctions(llvm::bolt::BinaryContext&)::$_0>::_M_invoke(std::_Any_data const&, llvm::bolt::BinaryFunction&) BinaryPasses.cpp:0:0
#13 0x0000640fcd1905ca std::_Function_handler<void (), std::_Bind<llvm::bolt::ParallelUtilities::runOnEachFunction(llvm::bolt::BinaryContext&, llvm::bolt::ParallelUtilities::SchedulingPolicy, std::function<void (llvm::bolt::BinaryFunction&)>, std::function<bool (llvm::bolt::BinaryFunction const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, unsigned int)::$_0 (std::_Rb_tree_iterator<std::pair<unsigned long const, llvm::bolt::BinaryFunction>>, std::_Rb_tree_iterator<std::pair<unsigned long const, llvm::bolt::BinaryFunction>>)>>::_M_invoke(std::_Any_data const&) ParallelUtilities.cpp:0:0
#14 0x0000640fccca6578 std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>>::_M_invoke(std::_Any_data const&) DWARFRewriter.cpp:0:0
#15 0x0000640fccc03da1 std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) JITLinkLinker.cpp:0:0
#16 0x0000766b286ba3f7 (/usr/lib/libc.so.6+0xba3f7)
#17 0x0000766b286ba479 __pthread_once (/usr/lib/libc.so.6+0xba479)
#18 0x0000640fcbedba60 void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) JITLinkLinker.cpp:0:0
#19 0x0000640fcbedb9b1 std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) JITLinkLinker.cpp:0:0
#20 0x0000640fcbedb93a std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() DWARFRewriter.cpp:0:0
#21 0x0000640fcbec8e6d std::__future_base::_State_baseV2::wait() DWARFRewriter.cpp:0:0
#22 0x0000640fcbedbd76 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) ThreadPool.cpp:0:0
#23 0x0000640fcbedbb03 void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) ThreadPool.cpp:0:0
#24 0x0000766b286b4c7d (/usr/lib/libc.so.6+0xb4c7d)
#25 0x0000766b28760898 (/usr/lib/libc.so.6+0x160898)
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.

```

**Additional Information:**

The following output from llvm-bolt provides further context about the optimization process and the characteristics of the profiled binary:

```
DRIVER | LAYER: Using "AMD Radeon RX Vega (RADV VEGA10)" with driver: "/tmp/makepkg/mesa-tkg-git/src/_build64/src/amd/vulkan/libvulkan_radeon.so"
Profiling completed for vkcube.
[ perf record: Woken up 324 times to write data ]
[ perf record: Captured and wrote 83,448 MB perf.data (121700 samples) ]
Perf data saved to /tmp/makepkg/mesa-tkg-git/src/bolt_profile/vkcube.perf.data
Optimizing /tmp/makepkg/mesa-tkg-git/src/_build64/src/amd/vulkan/libvulkan_radeon.so with BOLT...
BOLT-INFO: shared object or position-independent executable detected
PERF2BOLT: Starting data aggregation job for /tmp/makepkg/mesa-tkg-git/src/bolt_profile/vkcube.perf.data
PERF2BOLT: spawning perf job to read branch events
PERF2BOLT: spawning perf job to read mem events
PERF2BOLT: spawning perf job to read process events
PERF2BOLT: spawning perf job to read task events
BOLT-INFO: Target architecture: x86_64
BOLT-INFO: BOLT version: 3def49cb64ec1298290724081bd37dbdeb2ea5f8
BOLT-INFO: first alloc address is 0x0
BOLT-INFO: creating new program header table at address 0x1600000, offset 0x1600000
BOLT-INFO: enabling relocation mode
BOLT-WARNING: ignoring symbol __ehdr_start at 0x0, which lies outside .note.gnu.property
BOLT-WARNING: ignoring symbol __executable_start at 0x0, which lies outside .note.gnu.property
BOLT-WARNING: Failed to analyze 32 relocations
BOLT-INFO: pre-processing profile using perf data aggregator
BOLT-INFO: binary build-id is: 8e5ea2cf1ae37e0205ba1ecfbe7e250686d83aa8
PERF2BOLT: spawning perf job to read buildid list
PERF2BOLT: matched build-id and file name
PERF2BOLT: waiting for perf mmap events collection to finish...
PERF2BOLT: parsing perf-script mmap events output
PERF2BOLT: waiting for perf task events collection to finish...
PERF2BOLT: parsing perf-script task events output
PERF2BOLT: input binary is associated with 1 PID(s)
PERF2BOLT: waiting for perf events collection to finish...
PERF2BOLT: parse branch events...
PERF2BOLT: read 121700 samples and 3360724 LBR entries
PERF2BOLT: 0 samples (0.0%) were ignored
PERF2BOLT: traces mismatching disassembled function contents: 2055 (0.1%)
PERF2BOLT: out of range traces involving unknown regions: 1665720 (51.4%)
PERF2BOLT: waiting for perf mem events collection to finish...
PERF2BOLT: processing branch events...
BOLT-INFO: 1062 out of 6973 functions in the binary (15.2%) have non-empty execution profile
BOLT-INFO: 31 functions with profile could not be optimized
BOLT-INFO: among the hottest 1000 functions top 5% function CFG discontinuity is 100.00%
BOLT-INFO: validate-mem-refs updated 1 object references
BOLT-INFO: 145840 instructions were shortened
BOLT-INFO: removed 20771 empty blocks
BOLT-INFO: merged 4 duplicate CFG edges
BOLT-INFO: ICF folded 314 out of 7631 functions in 5 passes. 0 functions had jump tables.
BOLT-INFO: Removing all identical functions will save 46.51 KB of code space. Folded functions were called 76 times based on profile.
BOLT-INFO: ICP Total indirect calls = 70948, 33 callsites cover 99% of all indirect calls
BOLT-INFO: ICP total indirect callsites with profile = 37
BOLT-INFO: ICP total jump table callsites = 5
BOLT-INFO: ICP total number of calls = 144434
BOLT-INFO: ICP percentage of calls that are indirect = 48.7%
BOLT-INFO: ICP percentage of indirect calls that can be optimized = 100.0%
BOLT-INFO: ICP percentage of indirect callsites that are optimized = 89.2%
BOLT-INFO: ICP number of method load elimination candidates = 0
BOLT-INFO: ICP percentage of method calls candidates that have loads eliminated = 0.0%
BOLT-INFO: ICP percentage of indirect branches that are optimized = 0.0%
BOLT-INFO: ICP percentage of jump table callsites that are optimized = 0.0%
BOLT-INFO: ICP number of jump table callsites that can use hot indices = 0
BOLT-INFO: ICP percentage of jump table callsites that use hot indices = 0.0%
BOLT-INFO: Reg Reassignment Pass Stats:
 162 functions affected.
           3631 static bytes saved.
 380470 dynamic bytes saved.
BOLT-INFO: 13835 PLT calls in the binary were optimized.
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzce1tz4zaW8K9hv6CoIkGKkh76QZatjL-ve9ple3qyTyoQPBQRkwAXAGUrv37rANSFktqXTrKV2S47kUGc-xXEETNGrCXA52B8FYyvP7HOVkp_bkw8mX7KVbH9HNB5QOfXYLgWrRVKBsncrwUR_lyp2hKumanAkKLTQq6Jaq1oxO8MtxNVElsBCbKoFvmmq5-YXGlWgJIjo4IsIrXINdNbEtBpy7TdAXwFw8i920i-OzBSaLEBHdAZea5Aks4gsR55GNbCQpBcl6w2gHjLmq1H5LECzx5RnHd6zyOC5cwITvJa8SeiQekC3KO2YgaQnSCLbl7s48PdvX84r9dKC1s1QRYhF0wWRBjCWWegIPmWMElAa6WJkI7AyzQjXBVAoBHWgg6SOQkoXTAplSUg3bNKrCuSby0QDWthLDjw-5tfw1ZDKV6gIEIaqzvu1E_pyGveW-FGboRWsgFpTywTUCSG__vWgmYWRXvYGgvNfiNZMF5tvz30u0m__8uX718Durz69uWRfAdtjq1O7oGDtMRI1ppKOXPh_nAtLOosKaBMZzzPUuAxnU3pLJrQNJrGeZFMiryAnAIbl9OAzk6o_kMZSxaqaUXtNNXT-2WxIHE6oqP4ZP8j02uwZK55JSxw22k4QL1MszBLTyCuhGR6e9j0Y58M6LTUqnnVCU-Ro7a4ahomiyGJetOEOYZJQGlA01LUEFBKwrBglvWLweTKaF4IHUyuA7rE7atWK793uXniXQ6jFnQ5QqAefCtVaCyzhgy9n4Qh78JWKw4GYyTMmeVVaMTvuCVLSRhCLRohmYWwkxoYr1heI1ypWQOham2QXLO6JmEoeLn__FvXtKHFrQbX1muNBDYI2AgZ5ppJXoW87tCLkStj1RM-NdzysFEFOFTPbIsP2_pApVLWq8N_tPBij7kJdYO4NDg4gLZSPQ-eR1mCRlXUEO60llzHJAzRD4zVog01FJ0smLQhKwrk2-nDARdCA7chZ3WN4I3yea5HrmEdavCZkoRhZyBEyU_X-wQSunSCrMGLDa1pjx6VnXQxjE95YZRGGU1bCxsiaa7qYr8A1f7jHmy_YqxmFtZbjweX8NGTaN1eRD9CDQZ0GZNQoYut8k7URZb2vhXQJTodnebMgGQNDH0TvZvSPhB2SZmRGiNOE4eK-ILQx8EuGz1YaA2xitxDq1XRcThJSvGIkCsH70LrWdjKZcpLMUZAoqsVmO_oiCxUXQO3xBsYs5lzGF8FgizC6ECWnytRA9GdlPiA7XCytq0F9zUpoFMYrUcBXSCgjy6f05FWMiJkbi00rUVR-mr2WgnzPBwCfS9Wnw9ILSQQptcd5mlDTAtclAIKwnK1AeQDtSx4VzNdb4mQvO6KXq6zyjbM_y8tcAsFuYKKbYTSJwo_MGUq1aHdOo5poezqevse2VAW1fU1XkhXUoUhhQJDnpV-wmKFDBIM7wFrc247Vr_N2K572GutVHWtnlF8X00bMIatnSt59FnU_0SuVpGb-_tv91hc_1BlHSI-8mnGn8ijZmfO_JfxQQKaRCR6iaIoytKo5DyfsBkfOxdDJpK52Rr_4U4LaR2PnkU6PWzS7HmljNXAmoBm6GZCYsiSB7GWrDYj3rZBMo_crycbn5Itct5v_weTBZZmOn0TC-2xTLIsp9MsnYwTl0sCuuyMDuiyFrn_Lx8ZNcoCehW9uF0-oSCOZIgjzzgvSGsrDaxYPYm6fhOhAzkgTE-ZSieUaCb6Zu911tIJPWAaDzHRNGUJhrK2b2Jyew-YsqG6x1lG6ZGVNbRK21XJLKtXLhgG9n18xrzClTS2t2-uVI2m8WxUqsH2oWGadwZZqTcNjbAGCNn_GfpycBW9JBNH_cDb5Ji3PEsZpOOfQUypAz0gng4Q53EUFVNEzKSS20Z1hmBJMq1z55kX9ddp9nWxUAXc7FvpIJljX33nYui2aeuATjvpDjSFd3SnkoO6vi5upbEDfR0_fOhy63rKW1mqH-x6aFhdfwdulXYUkwWvmA6SG7dz5qHIKbMXImQ21EHEE5r8pA5ckrk9PiJM3ynz69K8vvOYxFK8dO0lsB8rdaeqgE5HKY9pnAGPZmWczPJJntIsHudJOQZapIDh8pZKMXMNMmYRQZlBccSL80f3yZ8DrvD0d4XdWq9HY0XDLDxgmzxU4RHdnQjzgQgfjjXuuNudIpI4HvKezcaQXeT9BwfSPlu41YNgZiDHqQKWfV_5mrEHhn5Fg6iPBYm600j4Kd046Q-6oYMcWUI0KYEYW3hWVjsxVlVfn5LFRomCvF_22VD8w977c4V6RXfym1zuu_nXCC2U9K14tg_jgKarCBXl-f-6EnKjntDnDkLN5Xbl2tvLgfu6OMQv3jFj4LQ6o0KTgbPFs2jM2fsU2uvqsPdK4Gn3oo_cMc3qGup_WVELK-BYdzeMVwee36m-ywr4AZkHXkHR4THhTtWCbwds705UP-Mq6OCXUWHtfR-q4zx4inC14i8vcdwjQM9b4QFWrnfZ-XgzLqysZsKa4-R9tIPVteLMR_Luud_iW4UFGZbMYx8lA5e8z1dWA6yEBd0j3D9smcC_96hqJdc7Id_lt3uu_nfpzfoPH4vEGTlzugtRlg7SFmfZeDJ9Pcr2Dzsp_ruDVWsHq6tV2dlOwwoP7Tslgelq61eGXvT6Xr9yDTW4PuLmYnBfwPHIzNPKgO8-fp7hPvDOff9jXA-A_cmg33PrDDngxnZtDccLF7LAkUc45Dsmf8JFrv89v1_ew7MWl7uV8dA9oqRg8euaeLDM-oXvdM9OodAcx-wcifU3cCjU4_yQblzb9P9uH78I-YS_F1WTnZz8WFJO3j7s4a5D0zA5xZFOZmS12p0fleRvn_oc0AHl8NgCRc6yyHnIUT5mde1wH_nUB23qdfQfZdA38Q6k9ND_KdLhwsEUaNpVWbN135D8ERtnu97z_7Sls15Tf28Zs8Hrk4Nx3kxVs9OcMMt_JosbsCvtK-Pf2h0OL5jeUAyNzhSTsNd5uIYStIZiZVBDg8r9V1b23gJcNS1KvGJmK7kHeKuG03goJJ9CVnzU-s9M2HeSo6c6LSbHLwkebPHoNHWHNvJ9sr8DxK5teEw9bMRnv2jVtX1xPjy5wEFyykEeJV6VdH7EybHBenxavWwv2exV9tdaPe9fNx8dTHZmnPak3-T75NVvnvJJ8Xb5x1378k-HL30nWTSdTd_EEbttHsndl5v5ww0xXd4ISxjJuzXxL3iJVaSytnVnV7oM6HItbNXlI66a_v3I7jVJq9VvwG1Al8KYDkxAl34OwV0Zgb91cvMOOeNPVjO-v5S5dLkxLwqBkcJqcitLpRt2YcbjcXAnozrbdpa4-_HDJU6r1UYUYEjZaVv592TuFpflqrOOrcFYSO-ZjnfHc8U04xa0MFZws5sC6W9zC5Lv7-7PhLm-v_1-c0-CyYJ8mf_XjbuA-Ze_FaR0_vV6d7l4_yv5DmuGNrufX38n329-mceRv-v0l0_93b6f0gjo0jate231BO3TGj-BYaF9WodrjNml0Tygy6OrVb_AmiKgS3-X5h3i7F6NUvSH_UXmLvkUpFSa9Lf9KOX4irSgS6KBK42RQ_6tnkCSriXo1FY04K5bXcrw96HB-Poy5IK1mI0Kp_JnrSyQaRLQRZpOyVe_e9RPJExjGk-iiBiGfBl3oeDQ3iFKt8mwDRRI-r1qemukIZp_8_7hDfeX6d5b-urbl8fRCHWMn8Lbfy6_oY5MxVBDKscYI0qTVhkXH6GQBbQgC5CWwAvwzo1BkAKsu35F3dzcLyliQ0QPlmm7v6N2kxJr7_i_qdxZ-c_T24Cwadmzu_h21kdiVhHMjMRPZxDYgLTm_WANNB-G2QX3R-EsM08HoIFl-mkfNpz2IS_TbOXmfAab3SzOZj-5RN49lHSCpxTaWOJeoZF-aoQIg3XgdCfX4CesJDyj-GvNGlIBK0AT7ynM7lG4soD_sBFRZWnAHq2dYHZDEIhZg3uThz7kJmn6ff-e3__z9p-_4FaxlspNsJltk6uarFZQFRr7KW2RPvJNF-S5ErwitQCDudyIAshIKgujtexGrVYtaLt9H_p9IPxpRJbMpXurCJOs3v4OJKFHop_5RavhaNJpVy_6iYx2n652Eaj0KQJfWPxQSygKIrAIkymMgVFexgySCUQ0GucsBl7mMAE6jrJpVkwTxqYfCD8kIApSC2NPoRpmeQXFgQlM0U4OyRo43Y0dI5LALOLINA1r-7Ah3E_JoJdYRUohhal8ohvgaJneayj0ozwDNL7Iv0n5KGD_COVjNJcpC4k9R28rYQgzRnHBsGS6fB6Tu9trPDv1rdarXH-cYRhmzwu7nI2HZdNZMUkyzDXky9U9AWm1gLN8eAAI6DQaRQEduxlX0OBj7ry8uL7OkEYY5zqu0AjDjIEmx_Apjy4arEunyZzQaDz2JGJP4hQrNmqqJJrJNexICLlR9QYJdPJJqmfpZljcDNucxFk2nlB3TzCOR-llrOfuuq8o7zbBIcAv2GEQznGU0Z0g2WySkMP0XD-U2zsRdjnjEe2VXbENEKlkCE1rt32F7_tUV3lPyCTxEWLngbvMw92UlVSW5PuW1xlwAM8a1Q8hV8paMJbEURQd4bSqJeOAjg-mXCx_QSOjRYXshHVxEEfRKHIec0Jgw2pRMAthA02ooTSkawsXL_GuvdF44AbJ4Sypxul4mkbHQ0nGu6OplLYgz-XR0ChsCGk0mcTEK7GfhDzZ2YBeQ0FSUnR-IA-cZFCsz_m4XSzx4FFAQZI43Zl1kg20LyQZk9bfdZJjFVasIL91TesLsDlzlXvk2c0I1jUR2NkJzuqBXevaNbokzUbjmPz_KyTvRrrcYMaILD1zRyCoJc5qDMJJ1jfoeNwvyMGZzji5XdyRR2VZTXbDqA6HIUFyTSbRLJ1iSU0SvyosYORsQJPZDF1ElV6EAewlGvYCDYdt4MFINJn8GP6g0yMMCHTmhAcY2TU5aKe-vWBxmqbJWe-GMC1oDtKyNRwgbIUdFKbEHfuII52OJhe8_xzJiWIdNs7kIEg9V1Gfgj-I0mlhz-QQ53TmE80FlAfFNGArVZBasYLsxrNdCmeycKHstXbWIJ4z1mPykh6BO-5cpkMiZk-l5_LDcvtc_GOx34vwokN9GOdBkz_GhxbvjEu6Tgz-fqX-GOlFhBfZvIc1ue9Hxhs8Sd4xY_Cs6Ap0EGFFpUfZhJWlO11iwiCHfwkmQGOZFdyNlRp_Gne7kmmUTiJSbCVrzh8Ps3wyTcbk7stj7ynD-ugy2V73o-N3Lp-Kz0kxS2bsE3yOJ8mEpnQ8nX2qPo9pzCbjtCjirMzGSc5YQWdlkWdxno4Zjz6JzzSi4yiOpzShSTQbMSjLdErL2Swvs3yWBGkEDRP1qK43zUjp9Sf3mutzTJN0OvlUsxxq476tRH13QGkwvv6kP_s3Ud3aBGmELbY5YLDC1u4bTg5gfE0Wmpnqz_kuzu7rRD_4KpEqyYVXEJ86XX_--fd9vS42n-n_BAAA__8rZ_n7">