<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/156882>156882</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Scalable vectors should not be legalized by scalarizing
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:RISC-V,
crash-on-valid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hvdijk
</td>
</tr>
</table>
<pre>
```llvm
define void @xor(ptr %p1, ptr %p2) {
entry:
%v1 = load <vscale x 2 x i1>, ptr %p1
%v2 = load <vscale x 2 x i1>, ptr %p2
%w1 = bitcast <vscale x 2 x i1> %v1 to <vscale x 1 x i2>
%w2 = bitcast <vscale x 2 x i1> %v2 to <vscale x 1 x i2>
%x = xor <vscale x 1 x i2> %w1, %w2
%y = bitcast <vscale x 1 x i2> %x to <vscale x 2 x i1>
store <vscale x 2 x i1> %y, ptr %p1
ret void
}
```
With `clang --target=riscv64-linux-gnu -march=rv64gcv -S -o - test.ll -O0`, this succeeds:
```asm
.attribute 4, 16
.attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zmmul1p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
.file "test.ll"
.text
.globl xor # -- Begin function xor
.p2align 1
.type xor,@function
xor: # @xor
.cfi_startproc
# %bb.0: # %entry
# implicit-def: $v8
vsetvli a2, zero, e8, mf4, ta, ma
vlm.v v8, (a0)
# implicit-def: $v9
vlm.v v9, (a1)
vmxor.mm v8, v8, v9
vsm.v v8, (a0)
ret
.Lfunc_end0:
.size xor, .Lfunc_end0-xor
.cfi_endproc
# -- End function
.section ".note.GNU-stack","",@progbits
.addrsig
```
With `clang --target=riscv64-linux-gnu -march=rv64gcv -S -o - test.ll -O1`, this fails:
```
warning: overriding the module target triple with riscv64-unknown-linux-gnu [-Woverride-module]
.attribute 4, 16
.attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zmmul1p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
.file "test.ll"
fatal error: error in backend: Cannot scalarize scalable vector loads
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang --target=riscv64-linux-gnu -march=rv64gcv -S -o - test.ll -O1
1. Code generation
2. Running pass 'Function Pass Manager' on module 'test.ll'.
3. Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@xor'
#0 0x0000ffff7a3d6020 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/harald/llvm-project/main/llvm/lib/Support/Unix/Signals.inc:834:22
#1 0x0000ffff7a3d6448 PrintStackTraceSignalHandler(void*) /home/harald/llvm-project/main/llvm/lib/Support/Unix/Signals.inc:918:1
#2 0x0000ffff7a3d3d4c llvm::sys::RunSignalHandlers() /home/harald/llvm-project/main/llvm/lib/Support/Signals.cpp:104:20
#3 0x0000ffff7a3d583c llvm::sys::CleanupOnSignal(unsigned long) /home/harald/llvm-project/main/llvm/lib/Support/Unix/Signals.inc:373:31
#4 0x0000ffff7a270c84 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/harald/llvm-project/main/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
#5 0x0000ffff7a271434 llvm::CrashRecoveryContext::HandleExit(int) /home/harald/llvm-project/main/llvm/lib/Support/CrashRecoveryContext.cpp:446:3
#6 0x0000ffff7a3ce01c llvm::sys::Process::Exit(int, bool) /home/harald/llvm-project/main/llvm/lib/Support/Process.cpp:114:3
#7 0x0000aaaae1e12410 (clang+0x22410)
#8 0x0000ffff7a2985bc llvm::report_fatal_error(llvm::Twine const&, bool) /home/harald/llvm-project/main/llvm/lib/Support/ErrorHandling.cpp:117:36
#9 0x0000ffff7a298504 llvm::report_fatal_error(llvm::StringRef, bool) /home/harald/llvm-project/main/llvm/lib/Support/ErrorHandling.cpp:99:68
#10 0x0000ffff79127034 llvm::TargetLowering::scalarizeVectorLoad(llvm::LoadSDNode*, llvm::SelectionDAG&) const /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:10162:48
#11 0x0000ffff78f0a8d0 (anonymous namespace)::VectorLegalizer::ExpandLoad(llvm::SDNode*) /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp:912:41
#12 0x0000ffff78f0a990 (anonymous namespace)::VectorLegalizer::Expand(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&) /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp:925:22
#13 0x0000ffff78f08bcc (anonymous namespace)::VectorLegalizer::LegalizeOp(llvm::SDValue) /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp:587:5
#14 0x0000ffff78f01df4 (anonymous namespace)::VectorLegalizer::Run() /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp:235:64
#15 0x0000ffff78f11da0 llvm::SelectionDAG::LegalizeVectors() /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp:2410:36
#16 0x0000ffff790a14c8 llvm::SelectionDAGISel::CodeGenAndEmitDAG() /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1012:38
#17 0x0000ffff790a07b4 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:869:1
#18 0x0000ffff790a5774 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1893:33
#19 0x0000ffff7909f2cc llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:607:7
#20 0x0000ffff877bb670 llvm::RISCVDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/harald/llvm-project/main/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h:36:0
#21 0x0000ffff7909e294 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /home/harald/llvm-project/main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:372:40
#22 0x0000ffff8148905c llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/harald/llvm-project/main/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:30
#23 0x0000ffff7aad4554 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/harald/llvm-project/main/llvm/lib/IR/LegacyPassManager.cpp:1398:40
#24 0x0000ffff7aad4784 llvm::FPPassManager::runOnModule(llvm::Module&) /home/harald/llvm-project/main/llvm/lib/IR/LegacyPassManager.cpp:1444:29
#25 0x0000ffff7aad4b70 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/harald/llvm-project/main/llvm/lib/IR/LegacyPassManager.cpp:1513:38
#26 0x0000ffff7aad09f4 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/harald/llvm-project/main/llvm/lib/IR/LegacyPassManager.cpp:531:55
#27 0x0000ffff7aad5318 llvm::legacy::PassManager::run(llvm::Module&) /home/harald/llvm-project/main/llvm/lib/IR/LegacyPassManager.cpp:1640:17
#28 0x0000ffff82613154 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) /home/harald/llvm-project/main/clang/lib/CodeGen/BackendUtil.cpp:1254:9
#29 0x0000ffff826132f8 (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/harald/llvm-project/main/clang/lib/CodeGen/BackendUtil.cpp:1279:7
#30 0x0000ffff82613fc8 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/harald/llvm-project/main/clang/lib/CodeGen/BackendUtil.cpp:1442:25
#31 0x0000ffff82d12de8 clang::CodeGenAction::ExecuteAction() /home/harald/llvm-project/main/clang/lib/CodeGen/CodeGenAction.cpp:1189:20
#32 0x0000ffff7f388844 clang::FrontendAction::Execute() /home/harald/llvm-project/main/clang/lib/Frontend/FrontendAction.cpp:1314:38
#33 0x0000ffff7f29bec0 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/harald/llvm-project/main/clang/lib/Frontend/CompilerInstance.cpp:1066:42
#34 0x0000ffff8526446c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/harald/llvm-project/main/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:302:38
#35 0x0000aaaae1e13228 (clang+0x23228)
#36 0x0000aaaae1e04f60 (clang+0x14f60)
#37 0x0000aaaae1e050f8 (clang+0x150f8)
#38 0x0000aaaae1e06500 (clang+0x16500)
#39 0x0000ffff7ec8fa34 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const /home/harald/llvm-project/main/llvm/include/llvm/ADT/STLFunctionalExtras.h:70:3
#40 0x0000ffff7ec8df40 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()::operator()() const /home/harald/llvm-project/main/clang/lib/Driver/Job.cpp:436:32
#41 0x0000ffff7ec8e2b8 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) /home/harald/llvm-project/main/llvm/include/llvm/ADT/STLFunctionalExtras.h:47:40
#42 0x0000ffff7a259aa4 llvm::function_ref<void ()>::operator()() const /home/harald/llvm-project/main/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:62
#43 0x0000ffff7a2713cc llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/harald/llvm-project/main/llvm/lib/Support/CrashRecoveryContext.cpp:427:10
#44 0x0000ffff7ec8e094 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/harald/llvm-project/main/clang/lib/Driver/Job.cpp:436:21
#45 0x0000ffff7ec0b318 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/harald/llvm-project/main/clang/lib/Driver/Compilation.cpp:196:22
#46 0x0000ffff7ec0b64c clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/harald/llvm-project/main/clang/lib/Driver/Compilation.cpp:246:62
#47 0x0000ffff7ec24618 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/harald/llvm-project/main/clang/lib/Driver/Driver.cpp:2244:28
#48 0x0000aaaae1e06074 (clang+0x16074)
#49 0x0000aaaae1e38444 (clang+0x48444)
#50 0x0000ffff79d0229c (/lib/aarch64-linux-gnu/libc.so.6+0x2229c)
#51 0x0000ffff79d0237c __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x2237c)
#52 0x0000aaaae1e04570 (clang+0x14570)
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 22.0.0git (https://github.com/llvm/llvm-project ce5a1158b8a2bca214ad37cd206f6c8eb659ea3c)
Target: riscv64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/harald/llvm-project/main/build/aarch64-linux/bin
Build config: +unoptimized, +assertions
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```
What's happening here is that LLVM is picking up on the fact that a load in type A, immediately followed by a bitcast to type B, can be optimised to a load of type B, but the type legalization cannot handle type B. We're trying to legalize the load of `<vscale x 1 x i2>` by scalarizing, but that is never going to work and we should not be trying that.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW1tz4yj2_zTKC2UXQveHPDhO0ttbPduppGfm0YUkZLMtgf6AHKc__b-4SJYUe9JJd3p3azeVsjFw4HcuHA43LCXdMkIuvejKi64vcKd2XFzu9iX959eLnJdPl14M7X9d7xsPrkpSUUbAntMSeCE8cOGhtFUCeChqfQ-tQf8DeSgDXnLlwRVhSjx5wcqDK6DL9j7wgmtQc1wCL1jvZYFrAg4AgQOgvhfcjNvxByr0CirUUz3avnKqCizVaUKHSfFJsa-LkW63bwp9Z1PoxaYOpqUDF6erWeCaH9NtT_V0tv8J5WHe_VFCuiGpuCDn0T89F74gymjcgysvudafvVV4cPUnVTvgxbCoMduCxUJhsSXKC64FlcU-Dhc1Zd1hsWUdWDRYFDtdtI_DbbEHiwew4GABFJFqWddg8dk0itZA7agEsisKQkppTWfoFEttiR7MllgpQfNOEQ9moSbz4xMlkRUk0r1S1PqbBrVwg3WqQi3alPqj0Hl7v4Wbb7SQAplERVhBqEk3TVebUowbbhO1kIVJFdh-leZrTwJUDamDS8VhOaSqIeVKax-luUsGqE_FoU55CDmeKlprdjyEnLyORYoclEtua57XHsyMcaEALBbgimwpA1XHCkU502bn6rYI13TLPJj5fUNPLbHEHlp7IeyJPLjSecHKtOlGviUpKrqRCgvVCl7oPF0BRXm-hLr-C3-utnUR8MXqYzLatDUtqFqUpLLIwn1qQe0lUfuaejDDSGv_GxFcf5NUfzaVMRaFzQ_sSOpmudffqTWXFEMPZRrSub6yGWHWE_qWUOc1By6WTTO06z77YnmmTw9mgmiNLj9pDWwIK6EbBTBbSvrtqCQwqrKYaoWw0umkt4QbVoKRSk1jxP3ShrVkXJHlh3_8vpAKF1-1gaG1-UTWHlrBtzlVsh9mZSkk3b6rS_DHLqHCtJ77Aw-uHrFglG21ZvieCEFLyrZA7QhoeNnVBFgIQAna1gQ8aoA9mI59ZfyRjUB50dXiT9cOWdgWvOj6f07n6HQqrHANiBDWKZgEoAzkuPhKWKnz1pgxroCeZLCg34hN5TUBe1IoLsxMrg3p7tPN6uEGyC5vqAIY5N0WCNJyofREtlOqNRpHtx663VK16_JlwRsP3ZqYxH4tWsH_SQrloVsqZUekh24BZiWgrKi7khhbKASWOwNRCVwQM9EJoocIkZKUQPJO2GxNiaXkBcWKlEB0DMhC0FYtPbh60EMDlF3TWkOESw9md4JvBW4AFtuuIUxpyOBnDQC48nUfa14SsCWMCOwGMNLZ9x3Txg9aLCXwUHLbO_o7nfEbZnhLhIcSwFk_HDyUDOpMNE_BqYbuPz6sF3-A69WHhRfcXK8-gDusFBEMfGRSic728kBq50JsF8M846GkDxET54MggAcIIayqqkpwUMYQQWDUGKy8YCWfpE3cCcqUkfMXq6n0WEngxw2XShDceCjW2qJMmWAT3e54Q_QXFrgun5tGgykb2Q3NPXT70LXa1Dx0-zujB51BtwzXcklZ4QWrNAi9YGVsXjPgzxkIwxTM0NoG_oZZWWu5pyZ0Qqt3g5j5qResfIcQzRAGZVicEvF9xyZApYfSnwGxx1a0enj40IgPOnDBDFyUBifBrWuCWdd-dhA9lHbMrFVKUHO2fTdRBkmgP3tZhhO4KIFFGpppmnH21PBOAoYbIltjopmDrp3MPSn0_PG05kyHZh-btralVtimjodSY7hr8NN5O4XBKcQwGDn-ohl_fhiEI3WcambMxs2Bqp6LdwUdhrFWi0MdT42oINA_aUR31rHbH2Osa5BzXv8MzK6L3tj9cAQzcTAxxpj4xEehD7XxmEnBQ1fwgHTWMchMp9rI0igf82WnxI2ZeTd25h27xS-PemFecCaVc4s_i8kb3ZfROGXbgdVEsxo76Nkz6DD8fugPSlC2vSfVe6PO9BiNU7tI8SeTUeajBE6s_4uZtD_xRyJsaKltqw9m_jAhzCeOywknOuPh-h-8JMbhr0fNDdPk9eqDUVBmlfVGRnUs8IHo7GnDt1PYgxv2Y6QHUs_7ZB5LK4jTEr7k2RzPZItr-o2Ifly1mJXPBDESwltVeZbDHoHF87nth1_mGxZ9xyKas5hlP8LiOfYmOm5wXds2rMtfj0n-wHVHzD5V_CulgqI-gNFSCWZSSfOieJNU-p-f25lkLJu_jsEoTdyUpvkLZ_z5ZfXilH2Sv_uO_VBE9Go-UKAVFYeOkWjKiO-XGJ5zJxOF2HZ_LJx7PXg9k7kJQaOfzNEZxH5YpGfQf3wgLjhyva5YedNQZTp8Dx7mnR99pPYfQe8ikxkLMMnDF1mwuVdY0uKq5sXXydigNZVqQ5Vev3GxedyYnZSxk7A1SqIwdQ0yXpINb3VH06qjJZjZHRGdWblWuJYmYVcdx4Ij5Qid3TQfaExdm_efidoGD-_hXs8YTRpnbu2lTSadmUyUJN9rMqu6PnIoJ2YzrOePwd0vGxNpZhZEgWMwmzKYVagoXmRQdOwz-w0XO8pIz8uEwWdlv5DDGOrZI7H8oXFImCZJnsfJ2Onef3xY_3G9-vCF_-sYtPGdh24NmP5bg-mBLXfWEwcr6NjyZ2ojKPsru9ROvnj6D1BekJiIr2dzHPGlfphmMBpb5wzpHe7XhobHk8z9ZK5OIBgmn1Tz03My3SfBZRhFY4Xd3mnSfmfvV_Dw8d5N_sXTqOsefJClYz2Ec_RJ-j3of7Mb7RPjclnvhjwMzf5U5pBHc-R58uKa4bd_I3YiPxiFMCiesQOzaqyIejTOR40dd6tEx34p_ijw9aeL5VEygx_pGfZF-P8a6H4c6gDY72eScSiQotgP_OjFdYiOeldSkiavn_5G6na0FNE-ZEvYHW1JTRkZtpFcaGQOXVZDWCVVaUs6Rv-vI5tWiUkUJvDjpn0UVJFNv5E-IipJhbtaB3Q1UeQFwuCmX9G-3O0XzuvPnWo7dUtr8r19zqiOHb5Cj27P7ZlDdpL7XdEh4kGR9gi9Q8jmakRV-lY1klH-v50C1-A5njVnsmuIeO02zmuknWTH8GtyPGSkXRXpGJeWoGvEWsRUjGvetLQmQi8yMCuIM8tJDYPls1uZ2PIzG5HPfcfqtJiOahuvc5ToJN2Te1Ktmbqb6W9fudBDm_TDk1SkcVr4r9F8GOrYDTlfPzlYS1Hpo5KkJzTnZO325UjRKdKL_3VbBeeQTvoZNrvTrD_F0lgnO4tVkKZpGI6x3grO1NEwxmB_DGbf8Cg5BRrYEwg3_0-P2yqU5aSA4K8GzEm5nufsh7zwiJk5jiEojvUqJnR7l5PjuDRCcRjGxZgdB_zY2p4X-DkTz93Ejxh5z8YXs_VwexZDv2SB402m4QSuPyQKEEpnh0Q6y-sj1OHwyxHAsIpnp0q-zjoSzI6hYASrWQ--zjoSpDOCOILzHnTWkWCyKUCKtMKTc5T-PsBGkMoL1pQpMN0xfrZpXuyw6Dc7VsNsb_yVJuCt3YqyY-lNbb3x6MVdJjlmrK6_6NXpl0_9IgvXNwclsDRr8AS640APBSGcSamswslYLAXd95HCeu2vedNgVs6dx5HVlRD46d6IdHD_dscNzw4ehkltcPgDwWZTHA6-b3_kWNJCTw7muMtIblJZZ2yUwHb7zxTPmsN1ra2di1G5rrI67s2tBulbEg8lNW7yEnsocQo9reQ3aG06UK-tgNHt33nenyubXZLA-ZfQn6mIoDy1V53PWrO9CO1wO_sscF3nuPi6qZiWw_9UfELFN5rRN952eOUoDJPR3kQ4vR6Dogzjv3BWp9T7MyzzbZyYvea4t9ZgfnkjmOzFnr-8cd-xB1wRswj5Xs7f-X4HSsx07zgL5-MQZuF_tav86S4PuROLMJqKGuaBn54VtYlp8LOYtpf_JMiaEeoKk8sp31d1NbvK8nOkMWKkjzSzeHRIHsZzqcRh8Vqp_J3n8rxI_s7zT1SqiUj-KowZ7KbFVNgo6jVSHO_SvLcskbmsNbipZCpLFMbnLex6lJ4E0iei-HM6-IWyfPOaYZCeTfSCQ3Yz2q0NwmeBOEzCeSAOk3AIxMNsShCkYTgjCHXWQBBNb0CVEKGssE7fAcVYFLvxfWVbUiwlX8buDhvKimOL_rzFICnAZqNp7CORjRbIq_sIklEfaL4EipJnS6AocQuUXqvHu-r2Unbllm2gcPqtMK1JaZ8GkAPVQ7MkwLbcSQIWe6A4kIQAOlpXDl2APRGScgYQWsIl3FKzynnd5XVQkAj7fpTmKUZ5gZEf4jJIihLBuIqLlORxlBEcOFm4k8Bgdf4pg661EwSXoOGlOa4ELZf04EFzEo_rmpTX1L3r-U5TzjtqSid60_mUeXB1pUv1YKno1jZ71TE92Tb0Gynto4grLCURdgtupCHGFdHfJcVbxqWiBWikKTF3-Yab72x7-tp-KvWQXADGR-XmwQFlbafkcv5MZYeVhxIJdrhtibn5viOCACqB2mEFPn364zf9o6XFV13YtYAz85CgwoWydbB9j0gZUE8tAWb2pk1DSooVqZ9AxeuaP5IS5E8AD0_3FLfVr4zfwQzkBFgZaX4U75vl1ahe3inTucmp7T0cbO8F2JcWO3Mp11EswZ_EQ4kgQIkn8xiG90T2MUTfgZbFyaeKMdSg-xuPOtAZQGCl5cLIngiw5a71Ry6-mocTjwTIHe_qUmtUs9Yj2GG1vCgvgzILMnxBLv0kirPMT7LkYndZwjSoShjmSVwRQtKijOIYxQglfhKGWXVBLxFEEcxg6Ad-HMTLKsURKVNUJFEekzzzQkgaTOulttslF9sL8xTk0o_iNEUXNc5JLc1bV4SO71TsI4fhpZN5I7LgbLHHNS11dnR9IS7NUMi7rfRCWFOp5LETRVVNLh-mj1vkTAS96MuZTC86UV--_YmLY21_if4_AAD___JZoHQ">