<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/103703>103703</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] [transform] -transform-interpreter crashes in transform::impl::InterpreterPass with assertion failure "expected positive loop bounds and step"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Emilyaxe
</td>
</tr>
</table>
<pre>
git version: [b68df](https://github.com/llvm/llvm-project/commit/b68df879c6)
system: `Ubuntu 18.04.6 LTS`
reproduce with: `mlir-opt -transform-interpreter a.mlir`
a.mlir:
```
func.func @loop_unroll_and_jam_op() {
%c0 = arith.constant 0 : index
scf.for %arg0 = %c0 to %c0 step %c0 {
%0 = arith.addi %arg0, %arg0 : index
}
return
}
module attributes {transform.with_named_sequence} {
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
%0 = transform.structured.match ops{["arith.addi"]} in %arg0 : (!transform.any_op) -> !transform.any_op
%1 = transform.get_parent_op %0 {op_name = "scf.for"} : (!transform.any_op) -> !transform.op<"scf.for">
transform.loop.unroll_and_jam %1 {factor = 3 : i64} : !transform.op<"scf.for">
transform.yield
}
}
```
stack trace:
```
mlir-opt: /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/SCF/Utils/Utils.cpp:311: std::optional<int64_t> getConstantTripCount(scf::ForOp): Assertion `lbCst >= 0 && ubCst >= 0 && stepCst > 0 && "expected positive loop bounds and step"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /data/szy/MLIR/llvm-debug/llvm-project/build/bin/mlir-opt a.mlir -transform-interpreter
#0 0x00005634daa017c9 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
#1 0x00005634daa01c7b PrintStackTraceSignalHandler(void*) /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
#2 0x00005634da9ffeaf llvm::sys::RunSignalHandlers() /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Signals.cpp:105:5
#3 0x00005634daa0234e SignalHandler(int) /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#4 0x00007fe26eeb1420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#5 0x00007fe26e4ee00b raise /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#6 0x00007fe26e4cd859 abort /build/glibc-LcI20x/glibc-2.31/stdlib/abort.c:81:7
#7 0x00007fe26e4cd729 get_sysdep_segment_value /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:509:8
#8 0x00007fe26e4cd729 _nl_load_domain /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:970:34
#9 0x00007fe26e4defd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#10 0x00005634dd87bc66 getConstantTripCount(mlir::scf::ForOp) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/SCF/Utils/Utils.cpp:312:33
#11 0x00005634dd87c48a mlir::loopUnrollJamByFactor(mlir::scf::ForOp, unsigned long) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/SCF/Utils/Utils.cpp:525:39
#12 0x00005634dd7be648 mlir::transform::LoopUnrollAndJamOp::applyToOne(mlir::transform::TransformRewriter&, mlir::Operation*, mlir::transform::ApplyToEachResultList&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp:380:14
#13 0x00005634dd7fa37d mlir::DiagnosedSilenceableFailure mlir::transform::detail::applyTransformToEach<mlir::transform::LoopUnrollAndJamOp, llvm::iterator_range<llvm::filter_iterator_impl<mlir::Operation* const*, mlir::transform::TransformState::getPayloadOps(mlir::Value) const::'lambda'(mlir::Operation*), std::bidirectional_iterator_tag>>&>(mlir::transform::LoopUnrollAndJamOp, mlir::transform::TransformRewriter&, llvm::iterator_range<llvm::filter_iterator_impl<mlir::Operation* const*, mlir::transform::TransformState::getPayloadOps(mlir::Value) const::'lambda'(mlir::Operation*), std::bidirectional_iterator_tag>>&, llvm::SmallVectorImpl<mlir::transform::ApplyToEachResultList>&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/Dialect/Transform/Interfaces/TransformInterfaces.h:1509:13
#14 0x00005634dd7fa083 mlir::transform::TransformEachOpTrait<mlir::transform::LoopUnrollAndJamOp>::apply(mlir::transform::TransformRewriter&, mlir::transform::TransformResults&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/Dialect/Transform/Interfaces/TransformInterfaces.h:1579:40
#15 0x00005634dd7f9c31 mlir::transform::detail::TransformOpInterfaceInterfaceTraits::Model<mlir::transform::LoopUnrollAndJamOp>::apply(mlir::transform::detail::TransformOpInterfaceInterfaceTraits::Concept const*, mlir::Operation*, mlir::transform::TransformRewriter&, mlir::transform::TransformResults&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/build/tools/mlir/include/mlir/Dialect/Transform/Interfaces/TransformInterfaces.h.inc:477:56
#16 0x00005634e3cb76ee mlir::transform::TransformOpInterface::apply(mlir::transform::TransformRewriter&, mlir::transform::TransformResults&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/build/tools/mlir/include/mlir/Dialect/Transform/Interfaces/TransformInterfaces.cpp.inc:61:14
#17 0x00005634e3cb6f4f mlir::transform::TransformState::applyTransform(mlir::transform::TransformOpInterface) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Transform/Interfaces/TransformInterfaces.cpp:953:48
#18 0x00005634de7832fd applySequenceBlock(mlir::Block&, mlir::transform::FailurePropagationMode, mlir::transform::TransformState&, mlir::transform::TransformResults&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Transform/IR/TransformOps.cpp:1788:15
#19 0x00005634de785c1c mlir::transform::NamedSequenceOp::apply(mlir::transform::TransformRewriter&, mlir::transform::TransformResults&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Transform/IR/TransformOps.cpp:2155:10
#20 0x00005634de71c2a1 mlir::transform::detail::TransformOpInterfaceInterfaceTraits::Model<mlir::transform::NamedSequenceOp>::apply(mlir::transform::detail::TransformOpInterfaceInterfaceTraits::Concept const*, mlir::Operation*, mlir::transform::TransformRewriter&, mlir::transform::TransformResults&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/build/tools/mlir/include/mlir/Dialect/Transform/Interfaces/TransformInterfaces.h.inc:477:56
#21 0x00005634e3cb76ee mlir::transform::TransformOpInterface::apply(mlir::transform::TransformRewriter&, mlir::transform::TransformResults&, mlir::transform::TransformState&) /data/szy/MLIR/llvm-debug/llvm-project/build/tools/mlir/include/mlir/Dialect/Transform/Interfaces/TransformInterfaces.cpp.inc:61:14
#22 0x00005634e3cb6f4f mlir::transform::TransformState::applyTransform(mlir::transform::TransformOpInterface) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Transform/Interfaces/TransformInterfaces.cpp:953:48
#23 0x00005634e3cbd605 mlir::transform::applyTransforms(mlir::Operation*, mlir::transform::TransformOpInterface, mlir::RaggedArray<llvm::PointerUnion<mlir::Operation*, mlir::Attribute, mlir::Value>> const&, mlir::transform::TransformOptions const&, bool) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Transform/Interfaces/TransformInterfaces.cpp:2016:42
#24 0x00005634de800919 mlir::transform::applyTransformNamedSequence(mlir::RaggedArray<llvm::PointerUnion<mlir::Operation*, mlir::Attribute, mlir::Value>>, mlir::transform::TransformOpInterface, mlir::ModuleOp, mlir::transform::TransformOptions const&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Transform/Transforms/TransformInterpreterUtils.cpp:234:10
#25 0x00005634de7f81c0 (anonymous namespace)::InterpreterPass::runOnOperation() /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Transform/Transforms/InterpreterPass.cpp:147:16
#26 0x00005634dfd46b94 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_1::operator()() const /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:0:17
#27 0x00005634dfd46b35 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_1>(long) /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#28 0x00005634daa257f9 llvm::function_ref<void ()>::operator()() const /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#29 0x00005634dfd498bb void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/IR/MLIRContext.h:276:3
#30 0x00005634dfd42720 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:533:17
#31 0x00005634dfd42c37 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:593:16
#32 0x00005634dfd44558 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:904:10
#33 0x00005634dfd4448d mlir::PassManager::run(mlir::Operation*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:884:60
#34 0x00005634dfd38e1d performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:413:17
#35 0x00005634dfd38a82 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPoolInterface*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:478:12
#36 0x00005634dfd3887c mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:561:12
#37 0x00005634dfd38816 llvm::LogicalResult llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#38 0x00005634dfeb3e22 llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#39 0x00005634dfeb3435 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Support/ToolUtilities.cpp:27:12
#40 0x00005634dfd35703 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:564:10
#41 0x00005634dfd35aa5 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:605:14
#42 0x00005634dfd35c78 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:621:10
#43 0x00005634da98bc53 main /data/szy/MLIR/llvm-debug/llvm-project/mlir/tools/mlir-opt/mlir-opt.cpp:317:33
#44 0x00007fe26e4cf083 __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:342:3
#45 0x00005634da98b87e _start (/data/szy/MLIR/llvm-debug/llvm-project/build/bin/mlir-opt+0x24ad87e)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFtT47qy_jXmRUXKlnx94CEEUoddcKCA2a8u2ZKN9jiStySzyPn1pyQ78SWESQaGNTNrVq3K2LKk7v661d26gZViJaf0zAnOneDiBDf6ScizyxWr1viFnmSCrM9KpsEzlYoJ7qA5cILzLIxJ4QQXDoyftK6Vg-YOXDpwWTL91GSzXKwcuKyq580_p7UU_6G5duAyF6sVMw-2kzhK8tCBieNeOO68_VVrpenKkgrdL1nDdQO8eOb6sxBcPz44oTusLWktBWlyCv5i-qlrtaqYPBW1BqdaYq4KIVenjGsqa0k1lQDPTI1JT10hmg8LTZ32f_sKiobnM_MDHN-thKjThktRVSnmJP0PXqWidmDswAQ40XnXBgDgwCB3gYMuAJZMP81ywZXGXANTOAeME_rS11Z5MSuENK2wLNt2bQ9adA9K03rT65CQJTWkhAlhm44cuBj0uUPWiS66F0l1I_nmS18OVoI0FQVYa8myRlNlqG8xnhkVpByvKEkV_W9DeU6d6GLAYV91XMugmabbr-kKM25xbPk2WoVe3xjzdSrqMW1JMRG8Whtup_APUOkbKC2bXDeSktkK6_wJiFqZVsG5A2EPngOhMfXoAjA-Qs_yt8OUoX3qoMvXGO4YcmDgTXgpqU5rLCnXVi7LbHQuagtmp3_YmYVhyIB6JAuidtBi3Au63FGLMenZ2KQ7fqPzAufaWCW6AKi1n9DvOTmQlP2vr7pmtCKvmeD2aTIClcb5V9NBTvuhOq6yGf0tX0uCNXbgUv3f2oHLm-ur-41TIjRryl0PZb0AXFYsc-DyguGqLX5YGA_3RbNKbf6d5XXtoDnyPENKaWI4QnNRayY4rhy0YFyHfqqNMkqqF92of5SsXoiGawfGKi_aVkshb43qTFdzpag0nRhnVmULpYFBEF0YfwFDB4agebXUuIWuvC90IKQvNc01JaAWimn2TIFRNMhEw4kCmBPb0igKRqDArKJk1oJ5d305f7gEqslWTAMMsqYEktZCauOMjnb_TKmGGgAtUcbzqiEU6CcKconVE8hw_tUqtyP_YNVNmlW91bY7a43oTopS4hXAsmxWlGv1nfrOGlYR869xOctt6GjDwZ4Ish3JyAXui-u6bhAin2DselGeACu71apaq_bhTjKurTSP1nZh3FeS-K9UKC0pXlmVLQAztpF8jzQb2K31PjS10ZSxV85eTAErOa7UjPHcQfMIIgfNPa-XxptKk0cZmLDe9vE_mJOKSgfGz4IRB84_g98kNvz27MIRu0lRUFy8Bv59w0dcq02M_jB-N4y2HsFzAwfNg55RNMEVIp-CKZCfo3TfQ2MQ_Y63qKAwpDTzfOiCNJVUaSFpKnUbZrreX-IwDf3TivHm5bTkTfuh1k8m_s6UmLkOPHdfPN-H7jaxM2SCERmfUtfNgMRMUTAYhGXFsvz0Or-C7sv2Fc6QZ-CwcjhwOZuZt7UitDaupGnFVGv1bLnhjXm1Xc-MxIE3Fjgcc5KTOEgAzoSV9DBONGnRsK0skdgQiXoi0ZRIBBMTA9KW71TR0jit9BlXzcEIMK6N_JXAZKXKHLekA9cEjbinHb9GO-VVahqmRJjs6n0kk8gkZcjvaSZjmoQWJDzAcHJjMqE1GYQKMpgLQOSNfCuJoywPw31xdJO7o_lORP2kJACaX9Rz7024z_0Yg55NE4C_2ETrX3h1vl7a5OpNQRag4Xa-RkAlePlZkgXQODM00MvI7ZIoo6EfDyTbRsz29Xor6JyTf-HVbd2W47qu1o_iltOR1JPWj5vXe_qXZCb0thGyb3BbU4lNsmSD0GI_I_OW4CXOn-6paip9zZTe6W4f_QeNNbW1Px72LZFb69AeFqOSjYXFZsx5fq8HNNZDgVFEBpJcMFxyoSh5YJWZZOGsokvMqkbS_fISqjGrhhrafG-Rc9DiGE3DxSAeG_VhLWQqMS-pgxb9p4JVmsp0W4Ot6mpEaqhlYKfP31L3RHO2rKT6Dq-NM7NID8zu38YPG922fdsyB0YVXmUEOzAaVR6bXGLY2Gb_GSNM0rydAvQCaVzaZP3SmJD53W_yr8N49Aj5g_sO7iNUHla4qv5Njdu9mkp9kOfY9vlZzqObLvUFvR_ZUnLg8srMUwqc23nW9kNfOnsyfqTNGrxBwPKn7sSN0QGyGVRu60eJmT7SORi9bP3M-4LA_gZGXeqXVlRkFOW7vaKCiaKSHHmHefRBWNmS2T5YFXYzphtB6JtD4j3q_C6OFoLntNZ7fNDBScAvY0qb5FwLYVOyjzatzXQwikyOF_bWFQ6si6I8i0L6Rr7wmv5-t1H9g1WR13WnjNCbZHjRRBdh4RfHRd5xDneQOoaa_NBk91hUzEQzQMZI4x6SeOj8aBQjWBBgpXzoNhPOK5F_HUnalbxtLV1qfCdFjUvrS4wTPNbAjjXfH4bv_WResVmaimK7iBb0iCYTRIPcy_dL8b94RckG6tFc7rcY6--AFnpBYBf_ttBCdwytl0P86ZF6R2F_wvSvExv2hmno_QnTP0uYhvBPmJ6EaYgmkJDQDfZDMhZfvTHpP8SORsgMG9zjsqRkLiVej1ZB7oTd2_vC7RmXPasf467mmyMQ4-J2OcMuOGxc4IHGf2t3jdWoVSZE9bfrFrpeaJQLe-WOVgpo7LqJlxyq3FE4Gin6U7XzTku6sQdhDl2Z29Xtj9LpcAxNdNruXA9X9iHyJ_lKMM5XitjLXeDAGHPB1yvRKMDxiqq69TmtlIPO77Dq0gDZ8Fs-0M_3brceK_KEmU3S65vo6Q2i53CSSwrih1niDxQ5TH1u60dxW5ve5gTXWsithCPrtbIfnu_MOa7WiqkbzHFpYupmtA92edoN4ba-A_3Uax9F3a5ttqh22FrTejfCrRDLAXR2zyHqgYt2gEMBeBaMDFZWi4bbddhU0sJBC_u1Y3aTfOa4qjKcf02L8ZD-aYG_dGD8jl23boe-z0W6gvnFowOXD4_Xyw4zXF2-aInbtT9_cIzAgB-PjxHAICqS43D_WNv5PqnCeCxVMjGpJM6y1qQG_vb66n4huKYv3R4BfaF5o-ncdj8yIWMPl_YrE7z7PrKA1mC6XZhD0RttHdgYdW-r9d1e3X_hTO-Elg21j11Qtg0HoFhgYWQCdb-iPz6cVBAfRtD9Sb3cD3BdAUJj5zU-3mTwyFF0NB53rKYVm-xat1W3Yh68RX0wQFOTuuJKS3vuzQzm-VsVWsrth473O3vW9IoXYjBR_yE6SNA48o7PbBXE94MgnrC-AWOLOFaKHjop2EH0R4iVuJPMaXzCy4jlx-QbYr21tfkDeI5jw3M44Nkf84xi6hFQU2mSqdZxqm-cU9zuvqonLClJay1HqfuDaGROb0q5fz409OxTXd5UTN7W-gYzvhC8YOWHZtCPg3UCe14YLgcEO9S643IDJxJMUcMxBLUUOVXqvCkKe5bvINAazv7b0B3QbuhKyPWmq0F9QgvcVDoltKKa7m_zygTnLSQX4zMjJsW-pyVTWq53Ns0f7Tm_OyGqwcToQwz2MG1EdvG6n4qicKqNOMpfl_sn1MrraB9o_3166u7J7T5PpP3AftTM5CDzCNqVuYF5RDvm4YUDbq9FyXJctQuV-zPpfQ1-Foy_Oa36pwyDfpb2mZK8Zf2fO1ccmv5osljQDFEIfwMT_9283Dvm0ENtJ1Nt-2i43q7qiuk5J3eTPOXvAO8XtLw3a4wOFWrJeHlPi73F78-U-gseJih-0aximvXL9dHYMvzJIgAKIhf9MzKkz0o6JnNB35sijnGwF_Fudp8_4XYePz_WoL4F1yfBENo7T4NdUR9OYcij-ENg-Dnkhd5E7eNLXkmc5QECm7s238mQ3mVl87i9eBKNL574_uT6T-HGCKRpxbI8VRpLnR5zAShXzebKVftoP9p-7FUg5MPRoqMfTGGIIwpawt2FoI-5oWkvDUEfkzii_bWh8VXg9veEnCGSoASf0DMvgij0oiSMTp7OgijLEuL5CMVZgknokyKLvZzmBYrzHIYn7Ay60Hdjz3dDP3SjWZK4KKJJjIMYYpzHju_SFWbVzLA8E7I8sTdczzwXRS46qXBGK3XW3ilvVQqd4OJEnlkRs6ZUju9WTGnV96CZruyfZLANggvgBP09d_O-568a2Bu0VAHGBzes23HSHuuf7-7WAftnEwDeXjguugsix1waPmlkdfb9V4E7rJ7P4P8HAAD__xHd81M">