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

    <tr>
        <th>Summary</th>
        <td>
            [mlir][bufferization] Assertion `memref::CastOp::areCastCompatible(buffer.getType(), memRefType) && "CallOp::bufferize: cast incompatible"' failed
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    test.mlir
```
func.func @generic(%arg0: tensor<16515072xf16>, %arg1: tensor<16515072xf16>) -> tensor<16515072xf16> {
    return %arg1 : tensor<16515072xf16>
}

func.func @forward(%arg0: tensor<2880x7168xf16>) -> (tensor<7168x2x24x2x24xf16>) {
  %expanded_2120 = tensor.expand_shape %arg0 [[0, 1], [2]] output_shape [5,576,7168] : tensor<2880x7168xf16> into tensor<5x576x7168xf16>
  %extracted_slice_2122 = tensor.extract_slice %expanded_2120[1, 0, 0] [4, 576, 7168] [1, 1, 1] : tensor<5x576x7168xf16> to tensor<4x576x7168xf16>
  %expanded_2123 = tensor.expand_shape %extracted_slice_2122 [[0, 1], [2, 3], [4]] output_shape [2,2,24,24,7168] : tensor<4x576x7168xf16> into tensor<2x2x24x24x7168xf16>
 %2248 = tensor.empty() : tensor<7168x2x24x2x24xf16>
  %collapsed_2124 = tensor.collapse_shape %expanded_2123 [[0, 1, 2, 3, 4]] : tensor<2x2x24x24x7168xf16> into tensor<16515072xf16>
  %collapsed_2125 = tensor.collapse_shape %2248 [[0, 1, 2, 3, 4]] : tensor<7168x2x24x2x24xf16> into tensor<16515072xf16>
  %2249 = call @generic(%collapsed_2124, %collapsed_2125) : (tensor<16515072xf16>, tensor<16515072xf16>) -> tensor<16515072xf16>
  %expanded_2126 = tensor.expand_shape %2249 [[0, 1, 2, 3, 4]] output_shape [7168,2,24,2,24] : tensor<16515072xf16> into tensor<7168x2x24x2x24xf16>
  return %expanded_2126 : tensor<7168x2x24x2x24xf16>
}
```
%mlir-opt -one-shot-bufferize="bufferize-function-boundaries function-boundary-type-conversion=identity-layout-map" test.mlir
```
mlir-opt: /home/mls/community/llvm-project/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp:269: llvm::LogicalResult mlir::bufferization::func_ext::CallOpInterface::bufferize(mlir::Operation*, mlir::RewriterBase&, const mlir::bufferization::BufferizationOptions&) const: Assertion `memref::CastOp::areCastCompatible(buffer.getType(), memRefType) && "CallOp::bufferize: cast incompatible"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ../build-llvm/bin/mlir-opt "-one-shot-bufferize=bufferize-function-boundaries function-boundary-type-conversion=identity-layout-map" buffer.mlir
 #0 0x0000558d58056d3a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/mls/community/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
 #1 0x0000558d5805715b PrintStackTraceSignalHandler(void*) /home/mls/community/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x0000558d580545ab llvm::sys::RunSignalHandlers() /home/mls/community/llvm-project/llvm/lib/Support/Signals.cpp:105:20
 #3 0x0000558d580565d2 SignalHandler(int) /home/mls/community/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007fd340ba0520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x00007fd340bf49fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x00007fd340bf49fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #7 0x00007fd340bf49fc pthread_kill ./nptl/pthread_kill.c:89:10
 #8 0x00007fd340ba0476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #9 0x00007fd340b867f3 abort ./stdlib/abort.c:81:7
#10 0x00007fd340b8671b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#11 0x00007fd340b97e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#12 0x0000558d58ad1fe3 mlir::bufferization::func_ext::CallOpInterface::bufferize(mlir::Operation*, mlir::RewriterBase&, mlir::bufferization::BufferizationOptions const&) const /home/mls/community/llvm-project/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp:272:59
#13 0x0000558d58ade8b0 mlir::bufferization::detail::BufferizableOpInterfaceInterfaceTraits::FallbackModel<mlir::bufferization::func_ext::CallOpInterface>::bufferize(mlir::bufferization::detail::BufferizableOpInterfaceInterfaceTraits::Concept const*, mlir::Operation*, mlir::RewriterBase&, mlir::bufferization::BufferizationOptions const&) /home/mls/community/build-llvm/tools/mlir/include/mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h.inc:1053:1
#14 0x0000558d589ec990 mlir::bufferization::BufferizableOpInterface::bufferize(mlir::RewriterBase&, mlir::bufferization::BufferizationOptions const&) /home/mls/community/build-llvm/tools/mlir/include/mlir/Dialect/Bufferization/IR/BufferizableOpInterface.cpp.inc:310:3
#15 0x0000558d58a86517 mlir::bufferization::bufferizeOp(mlir::Operation*, mlir::bufferization::BufferizationOptions const&, mlir::bufferization::BufferizationStatistics*) /home/mls/community/llvm-project/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp:477:15
#16 0x0000558d58afd5cc mlir::bufferization::bufferizeModuleOp(mlir::ModuleOp, mlir::bufferization::OneShotBufferizationOptions const&, mlir::bufferization::BufferizationStatistics*) /home/mls/community/llvm-project/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp:454:17
#17 0x0000558d58afdb13 mlir::bufferization::runOneShotModuleBufferize(mlir::ModuleOp, mlir::bufferization::OneShotBufferizationOptions const&, mlir::bufferization::BufferizationStatistics*) /home/mls/community/llvm-project/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp:509:13
#18 0x0000558d58a859a8 (anonymous namespace)::OneShotBufferizePass::runOnOperation() /home/mls/community/llvm-project/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp:296:17
#19 0x0000558d5d8960ad mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::'lambda0'()::operator()() const /home/mls/community/llvm-project/mlir/lib/Pass/Pass.cpp:524:57
#20 0x0000558d5d899d76 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::'lambda0'()>(long) /home/mls/community/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:40
#21 0x0000558d58079f34 llvm::function_ref<void ()>::operator()() const /home/mls/community/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:62
#22 0x0000558d5d8a125d void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /home/mls/community/llvm-project/mlir/include/mlir/IR/MLIRContext.h:276:3
#23 0x0000558d5d8964cf mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/mls/community/llvm-project/mlir/lib/Pass/Pass.cpp:533:23
#24 0x0000558d5d8967aa mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/mls/community/llvm-project/mlir/lib/Pass/Pass.cpp:593:15
#25 0x0000558d5d8986bc mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /home/mls/community/llvm-project/mlir/lib/Pass/Pass.cpp:904:40
#26 0x0000558d5d898514 mlir::PassManager::run(mlir::Operation*) /home/mls/community/llvm-project/mlir/lib/Pass/Pass.cpp:884:69
#27 0x0000558d5d888cfe performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /home/mls/community/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:413:13
#28 0x0000558d5d8893e4 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPoolInterface*) /home/mls/community/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:478:26
#29 0x0000558d5d88999b mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::'lambda'(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 /home/mls/community/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:561:25
#30 0x0000558d5d88ab1d 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&)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /home/mls/community/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:52
#31 0x0000558d5da26e65 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 /home/mls/community/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#32 0x0000558d5da266f6 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) /home/mls/community/llvm-project/mlir/lib/Support/ToolUtilities.cpp:27:30
#33 0x0000558d5d889b34 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /home/mls/community/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:564:31
#34 0x0000558d5d889e2d mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /home/mls/community/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:605:13
#35 0x0000558d5d88a024 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /home/mls/community/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:621:21
#36 0x0000558d57fb1a4e main /home/mls/community/llvm-project/mlir/tools/mlir-opt/mlir-opt.cpp:317:0
#37 0x00007fd340b87d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#38 0x00007fd340b87e40 call_init ./csu/../csu/libc-start.c:128:20
#39 0x00007fd340b87e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#40 0x0000558d57fb14e5 _start (../build-llvm/bin/mlir-opt+0x1e174e5)
Aborted (core dumped)
```
https://github.com/llvm/llvm-project/blob/e439fdf4ea0dbc6f001428f4d4956700bf26bb97/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp#L261-L273

the buffer.getType() is `memref<16515072xf16, strided<[1], offset: 4128768>>` while the memrefType is `memref<16515072xf16>`. CastOp can't convert between the two type.

Maybe we can use:
```
%alloc = memref.alloc() : memref<16515072xf16>
memref.copy %collapse_shape, %alloc : memref<16515072xf16, strided<[1], offset: 4128768>> to memref<16515072xf16>
```
How should I modify the code to do this? @matthias-springer 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW1tz46iz_zTkhbJLQkKXhzw4Tlz_VE0qqUz22YUkZHMGgQ6gSXw-_SmQHF1iO85MZnd2_7u148iAmu5fX2hwQ7RmG0HpJcBXAF9fkMZspbpcyicmvlF1kclid2moNvOKMwW8a-AtQOR1_7uvZSPyuf2AIPQ2VFDFcoASgDBRGw8EC2io0FKBYOlH2MdejF5KPwLBDUBL2A7zTw9L4QwEN0cHQBBftbxACKGiplFiTxiepNzKE193D2_lKaV6Jqo4Ig9KEu8l9qNkyilAyesg149eUNh-9CMHXAOE6UtNREGLNfKRB0Fw3U0zbzvWektq2knlQaeuK88i6AN87ZDEV8g-4msoG1M3Zv8KvsIALXEcAeSYsSNOigGZMLLvxi84jkZiDrk2iuSGFmvNWU4t82jMvOtve9-ICfCVb1n32g_LF74K7ZeWW_jKbjfQ3ws8FuANh3DIf3iS_56d4BTqhwU9ogW0hEH_PTyiFTvO_Qv3Hwe184b9iXpQZ1zhAREBwgiFyUiwqjY7Z8_peJ7DdtpDlUvOSa1brMIhyX3PEK0RrEOY0BJ2AKEl3EMzNsdDAk2EPujIb9nEp9lssfkYdwdhOps7hMLU8ZQTzt8EzDHEXXgcC7RX2zDCHAirPxxLj_hGdMo3WqHehXFq_87ahy7QPkwBnwb7MdQnrbZfCqaynGf3_cowXvIAwnY5nMnawJkUdKa30syypiypYv9HQXANEHr9OrOLiWFSzDLZiIIoRjWctu1mZlfTWS7Fd6o0kwIE16ygwjCzm3Gyk42ZVaQGCMHTy_GesdZIVltZUYBWFdcArXJZVY1g1v9XnH-vZrWS_0Nz4wYwZVtZBtDqmhHeNl91QhDLK0CrJ0WELqWqLLlVI_LXARmn9_WtMFSVJKe3Vc3neV2DYIGi1PJi5wPBAgSLL3LDcsIfqW64gW5i156N5nJNFqU1fTHttyXhfDDH-C0KUNLTuq-p6nheWBvsex7ps2KGqiuiKUBulcml0O8wMsLhvraf2r2dtm9bCRdaU2V7IIi8ilaKlnu-tbmv22eiqP26lFVNDMu4Zbudb76h5mlX0zY2O6Zp9UjLti2FbroIAoRaHKbiBwuYE20gE_mAOAIohiVhnBbz1kAevtwsvt5A3WQVM5DArNlARWupjF01t8bU2pJGK4BWG2a2TTbPZdVZzFvDYVo31FoDJKKwk_OmoNBsKcwV0VuYkfybXTppN_1XQ_JvsGgqJ4Br8ubQ_feg5EaRChK1aSoqjOUDzucArbKG8WLWMZAx0Rmsc0CA0GEf_GUO2Omrd0EIUOBB78XzPA_jpMCJh6MiIAOj1zvdPjwoJowD4cmiAlDSD1LkeS21UZRUnWkyYVrdn-3Iey05R_7a1FaxAK3-EOzFNrCNIFzPmchBsIhRYB0U9VL4EyliH2dwwnJL4z9EFJwqgJLvkhXOzX4dn2kCgoXfs4kmbIaYZIfAfmzEiFu9T3x-ms89g22M8z1sgfR6DoOpOeACwSlyv1a7oR-MUQs7nuKyCEIvIx62Ow2LSEfwJYnWUTjjTDQvs41o2o58ruU8AujKewkRRp6NTq808ZhmGaZlDtfr2mwVJcX6G-N8zaqaU-vQLnpC69CiNhyg1XDY3PEcWnVHPf3oHPp2RRCEn6QcOxMaaCg-RHn42klySTohl0zBDeMIbrTTiKPUPgK0chFN73RBa6vtWmqnPEWYpo42ikGwGGCQjkknUVwGkGQ2YjtSpmjV55pa7uyGOt4nK4HvvaHgZ3At-JpLUqwLWRHW6oUJJ65trvQmJy05348tS2lP0B8TTGOaRh8zpSClafRqSpbm2KlJ4Zc0-B3Sgw8nBl1KMEgPfpNMLEYgWOAB5MEEcppk3ml5C2oI4xPZJzPuH54UYaaLxCvCuU0F7mRBOQiWP6PXm1Oq_USel1LktDZ7dU4s5U-0oVPWM0qNjJRuQGdDXTbWNxw3p9vHYeMYnPm2W1F8Dw-WFGtA4ciAUpqn6TsGdGSOUyr9x-GZ13WHaOB79rMHFI89MomwH5-W9hWz-_rMGPdxyD7y9le7zGvDcv3xpPBHYt--k3ZRLnRrlY97TKMxpmWB8_xMTO9k0fApsn3jO7jcC_p1K83fGNxOglbiN0hjm635gzwjniKd-e8s4aoRh-f4F_EDiGPPpZ2DeJFM4gVOSWITMSKk2FWy0VCQiurabTXTgyDRB6L1QBuDwPHRzdJn-C9Ko4lVpUMZiySNPFIMNDhc3u_rJ3lfW4EWBamNVK9yjezJSXz-gr4QhO8003dEkI3duS1hJiW3fxvhfkArup16Ox6gmJMqK4gHUNyd57gO6aaQan_Gk_x8htiK4v7sjQRZt8Q9gMibAJgWcQTttn2wZ96fh6zdsdXS9e5Z7xKuvMvh1qUYZXB_EwXcAJRwKTY_tuXu1_6uYXH9ZLfcT19WHXKE37wYRfR8a2OjNeLQ63UwOVmJ0zIIPwb_5xjPj4kT2d1zhHpx0NikiI9w0ZrUIGp_uX1cSmFeM3n6QvPG0EXextrl2B5uXC-TousfWUBrMFGnxTNhQ8sBwgulyO7RDevJ3j7-IZjpxr6d7Yei35ss0eWCAzAcoiiORpkfCqZRLszL3zTKfWawCtwR5ACHcIpDTMiHcXhgNeVMTHf9duireNGnAzM1oVuhjXJH2dZrF6cGDNKPPe8PRFFhbkUpBzvQT8U-DcaZMsIT7JMoyycs70F4RZpoTfWZO483SH6mOKkXTmJuNBUH--E74pwQ5DN5TRLLa9QfxaB4zGuS5CWFNVU2TWoDon7ntwJtiu74e0sULda1USBY9m98lY3K6d1GgeDmSDI8jNhT3d1xpu5rc0eYWEpRss3ZW-pT0DwNdtjuZ0u0Gky032i0J9mDIJFM0EoDGsJayZxq3SaU54LVCPa_DX0D1h2tpNrtSQ3GF7QkDTfrgnJq6PF37Kp9cz6Cw3Fd4vxIN0wbtev6-3me3Fn0g5S8Pz75OQM9TwvuCB1FvRbSqRbSNDss72-ojcMon2nvkzSzzTL_PCmOY3lso_Fb8PaTW52zrBRHvrXSflELJrufhGR-cbQc4WhqeeyF3wXbd3dp_3rjX6SV_a7zzwT2lBP--r0vdqcQvQeO9r4FQRGN8D_A0_4pQfYnjgT8gZbRVMtRGQ08WNecmYUoHiZZ2l8B2t_Q4k6OGPZ9NYqJzSMtjzb_eJ7YV5zYtfgPwzgzjOrX35dBsAj6_VcQTPPDLAj_O_LDX53jhO63wx7pcIo0RcVRpLuzinxL2lOJxUcN6D2YfrH4kau2GmwHAzxN8Tx03NA-Iv5fKydyqexAzaMDjbjMfBJS6Ip3Ps6IecvC_rGbP_CtQw_8eVIylcRF6sH1mrMsX2tDlFnb5HP9Wk2U6-ZtvVNXUXXoJbeuYLeu9LvMaWVVEtPQc_XzayaYmU7UPlrqM0e9LWBCyaA-zxKd1lQ5oiNRDklxkHgQ2wS033CE3lRLIcWwpWqXlPcqWl15lE_9OKT4tUBqkUllqDvczqWiroCWFn391LgI_MNVvBmX1ixpGKRlUYaUeEWWR6Xn-SFKyrAIUxzFnpeVKMqyNP6FZUoo-IIif_YFxcHwVpbZUnioThoyPSy3Ht8WcCuBYgUtQLB0d4jaSzmyLDV1Nduhj5LYZjIu_kcefN4y3pYvtyTtTCfncK_NYVvjDXMiAIpdydB3qgzMqHmmVDiC5llCs6v3hdDt5x3ZZRQ-U_smbLSrgzly5YBwLnN3D6PlZO4aBld5jjLYXgxoX8plvRteK2nvY-yv4nVTHKP1QUChke8wNZHyP_IZ6q1seAFvYSULVu7aUnJZUEuskNBsmQbBCoLQq4gxW0b0TNc2ZFMFL4rLoEiDlFzQSz9GYRhFaepfbC99D0U4z9OoQCgjqAhogDOUYpQhP8MeumCXyEOhl6DQQ0EU-HOc5CjwUi9EoRfSEoPQoxVhfG49Zy7V5sJVvl_6Hk796IKTjHLtrlEi1PoGAvj6Ql06T8uajQahx5k2uqdgmOHu6qV7AV8DfDUuR8DXv_2tgotG8csfvzXQwff9Ev1_AAAA__9Sbixf">