<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/66324>66324</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] ICE in immediate-escalating functions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang,
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
frederick-vs-ja
</td>
</tr>
</table>
<pre>
The following program results in ICE when compiling with clang with option `-std=c++23 -pedantic-errors` ([Godbolt link](https://godbolt.org/z/W94n65jMo)):
```C++
#include <cstddef>
#include <memory>
#include <vector>
namespace fvs {
template<class T>
struct imm_allocator {
using value_type = T;
using size_type = std::size_t;
using difference_type = std::ptrdiff_t;
consteval T* allocate(size_type n)
{
return std::allocator<T>{}.allocate(n);
}
#if __cpp_lib_allocate_at_least >= 202302L
consteval std::allocation_result<T*> allocate_at_least(size_type n)
{
return std::allocator<T>{}.allocate_at_least(n);
}
#endif // __cpp_lib_allocate_at_least >= 202302L
consteval void deallocate(T* p, size_type n)
{
return std::allocator<T>{}.deallocate(p, n);
}
};
template<class T>
using imm_vector = std::vector<T, imm_allocator<T>>;
}
constexpr bool vec_cal() // This should be an immediate-escalating function.
{
fvs::imm_vector<int> v [[maybe_unused]] (42);
return true;
}
int main()
{
static_assert(vec_cal());
}
```
Error message:
```
<source>:36:26: error: call to immediate function 'std::vector<int, fvs::imm_allocator<int>>::vector' is not a constant expression
36 | fvs::imm_vector<int> v [[maybe_unused]] (42);
| ^
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: /opt/compiler-explorer/clang-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++23 -pedantic-errors <source>
1. <source>:40:1: current parser token 'int'
2. <source>:35:1: parsing function body 'vec_cal'
#0 0x00000000033c7468 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x33c7468)
#1 0x00000000033c5594 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x33c5594)
#2 0x00000000033145f8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f9ab5250420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x0000000006846726 clang::FormatASTNodeDiagnosticArgument(clang::DiagnosticsEngine::ArgumentKind, long, llvm::StringRef, llvm::StringRef, llvm::ArrayRef<std::pair<clang::DiagnosticsEngine::ArgumentKind, long>>, llvm::SmallVectorImpl<char>&, void*, llvm::ArrayRef<long>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6846726)
#5 0x00000000035c3cf7 clang::Diagnostic::FormatDiagnostic(char const*, char const*, llvm::SmallVectorImpl<char>&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35c3cf7)
#6 0x00000000035c4795 clang::Diagnostic::FormatDiagnostic(char const*, char const*, llvm::SmallVectorImpl<char>&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35c4795)
#7 0x0000000003ebc66d clang::TextDiagnosticPrinter::HandleDiagnostic(clang::DiagnosticsEngine::Level, clang::Diagnostic const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3ebc66d)
#8 0x00000000035c916c clang::DiagnosticIDs::ProcessDiag(clang::DiagnosticsEngine&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35c916c)
#9 0x00000000035bf75b clang::DiagnosticsEngine::EmitCurrentDiagnostic(bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35bf75b)
#10 0x0000000005b1a1cf clang::Sema::EmitCurrentDiagnostic(unsigned int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b1a1cf)
#11 0x0000000005b1abf1 clang::Sema::ImmediateDiagBuilder::~ImmediateDiagBuilder() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b1abf1)
#12 0x0000000005b1b36f clang::Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b1b36f)
#13 0x0000000005dcc2fe clang::Sema::DiagnoseImmediateEscalatingReason(clang::FunctionDecl*)::ImmediateEscalatingExpressionsVisitor::Diag(clang::Expr const*, clang::FunctionDecl const*, bool) SemaDeclCXX.cpp:0:0
#14 0x0000000005e04bf2 clang::RecursiveASTVisitor<clang::Sema::DiagnoseImmediateEscalatingReason(clang::FunctionDecl*)::ImmediateEscalatingExpressionsVisitor>::TraverseCXXConstructExpr(clang::CXXConstructExpr*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) SemaDeclCXX.cpp:0:0
#15 0x0000000005e02752 clang::RecursiveASTVisitor<clang::Sema::DiagnoseImmediateEscalatingReason(clang::FunctionDecl*)::ImmediateEscalatingExpressionsVisitor>::dataTraverseNode(clang::Stmt*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) SemaDeclCXX.cpp:0:0
#16 0x0000000005e04448 clang::RecursiveASTVisitor<clang::Sema::DiagnoseImmediateEscalatingReason(clang::FunctionDecl*)::ImmediateEscalatingExpressionsVisitor>::TraverseStmt(clang::Stmt*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) (.part.0) SemaDeclCXX.cpp:0:0
#17 0x0000000005e1b27d clang::RecursiveASTVisitor<clang::Sema::DiagnoseImmediateEscalatingReason(clang::FunctionDecl*)::ImmediateEscalatingExpressionsVisitor>::TraverseFunctionHelper(clang::FunctionDecl*) SemaDeclCXX.cpp:0:0
#18 0x0000000005dfe971 clang::RecursiveASTVisitor<clang::Sema::DiagnoseImmediateEscalatingReason(clang::FunctionDecl*)::ImmediateEscalatingExpressionsVisitor>::TraverseDecl(clang::Decl*) SemaDeclCXX.cpp:0:0
#19 0x0000000005dff695 clang::Sema::DiagnoseImmediateEscalatingReason(clang::FunctionDecl*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5dff695)
#20 0x0000000005ed3072 EvaluateAndDiagnoseImmediateInvocation(clang::Sema&, llvm::PointerIntPair<clang::ConstantExpr*, 1u, unsigned int, llvm::PointerLikeTypeTraits<clang::ConstantExpr*>, llvm::PointerIntPairInfo<clang::ConstantExpr*, 1u, llvm::PointerLikeTypeTraits<clang::ConstantExpr*>>>) SemaExpr.cpp:0:0
#21 0x0000000005f3528e clang::Sema::PopExpressionEvaluationContext() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5f3528e)
#22 0x0000000005d05a38 clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5d05a38)
#23 0x0000000005aa18ef clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5aa18ef)
#24 0x00000000059bd158 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x59bd158)
#25 0x00000000059f0939 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x59f0939)
#26 0x00000000059b7a79 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x59b7a79)
#27 0x00000000059b88af clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0) Parser.cpp:0:0
#28 0x00000000059c0102 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x59c0102)
#29 0x00000000059c1507 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x59c1507)
#30 0x00000000059b0eda clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x59b0eda)
#31 0x00000000045b38dd clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x45b38dd)
#32 0x0000000003e5f171 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3e5f171)
#33 0x0000000003ddedeb clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3ddedeb)
#34 0x0000000003f3d5b3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3f3d5b3)
#35 0x0000000000be7a15 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xbe7a15)
#36 0x0000000000be066d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#37 0x0000000003c30409 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) Job.cpp:0:0
#38 0x0000000003314a23 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3314a23)
#39 0x0000000003c30629 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#40 0x0000000003bf8937 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bf8937)
#41 0x0000000003bf92ed clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bf92ed)
#42 0x0000000003c0305c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3c0305c)
#43 0x0000000000be5001 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xbe5001)
#44 0x0000000000ae2cf1 main (/opt/compiler-explorer/clang-trunk/bin/clang+++0xae2cf1)
#45 0x00007f9ab4cf4083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#46 0x0000000000bdfe6e _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0xbdfe6e)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Compiler returned: 139
```
Related commits: 467688527017efb611b09c0cbf92f2d3ecdd1724 and 8698262a4365bf22b5b0c96e77bfecd3dcf084a7 which implement [P2564R3](https://wg21.link/p2654r3).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW19z4zaS_zT0C0oqEvz_4AdZsrPOzV5cY9de3lQg2JSQoQgeAGrsfbjPfgWAlAhKsj1Z7dblNiplIhMg-tc_dDe6CZBIyTYNwK0X33nx6oZ0asvFbSWgBMHot9lezn4jNwUv325ftoAqXtf8O2s2qBV8I8gOCZBdrSRiDXpc3qPvW2gQ5buW1brXd6a2iNZk-MlbxXiDvMSfSVV64Yp6-M7DdzhEsxZK0ihGZyAEF9JLfOThzIvvfuJlwWuFatZ88-KVh7OtUq30woWHHzz8sLHtcy42Hn74u4cf_iuPmiT-7a_cw7n-hgvPX3n-wkt8-11asf1VHLKG1l0JyAuXVKqyhMoL78-17mDHxduFxj1QxcWx0fzbkB3IllBA1V4iL-2FIoSQgl1bEwVaak2kRC-He3WzVKKjCrHdbk3qmlOiuHAH0J9OaqL3pO5grd5aDWSlBzrbTbK_j3qZKVh44cJevnBPyaoKBDT03J2tErp9dLM7BOWNVLAnNXrx8AL1eoCHsyOURk-Rc9eJkvojQHWiOYo-cOKFS0Nceuelq_lIhBl4qpSXrsZA9QxWaL2mbbuuWTEwDWui1jUQqZAeOlwh7OPQx18uqTeFxXiztr5h4OGFF96jk8E_zcMPKj8W4LJwVB-H0JSsQtaJfpiCfrwjA3vOSlTCiH8z5a2Hl-iqSjoyzPDvT_Twx8RCP_A-a_za-axbu3Y_uLqe2qXrogNY_R0kujZnOXttBSo4r9Ee6JqSWgc7nA_T8bJlEskt7-oSFYBIo4VAyYiCGUhKaqI0vqprqLa1-SBoREK1lxbsUQkvXLJGaVPcIxPy73bkrYB113QSSh1c45WOuhGeMtrPjRIdXFKLNQrtCGusIlNAUhHF6JpICUKbpaP1WNpx1CFaj4Xc68UB7UBKsoHTwN7_GS4l7wQFMwmLMPHCBdb_ILO26B-U1DVS_MjqgUrk4fR0njVteOlyOp5yS6uVd7wPp4hJ1HCFiPUU0iikZx6kZLw50BsmyEuX6LqzNox49uPFva0_fblfPN8j2RU7pmEW3QYJaLlQmp7JSsvUtivmlO88_FDX--F_s1bw34AqDz8wKTuQ2oJJU6JhcVRbQFQQuUUFod-UIBQ0m62AVnAKUkKJ-hnDS3MnkZJTPS8lEl2DJBWsVb2VPytCv6Gy27UHA_Dnnp8_9TkJEZtuB43SwLU_8VYjs1kJiBm8tjUXIPQ1nZrMlOiabx5-KLTt2ms2P0CzTfmdiGoWodkGzbgejLStHrJTbafmEs12mgA0m71myYzI3Uy-NYq8euGKNQpqNHtGs9mG0pnivKZb7R7h6l1MurNsSCu3XKFZRXnNxaxkZNNwqRiVaFY1fGbYdC9_lFEhxy0MbYGmbeItke-Fi8D4SCcENAq1REgQSPFvYLzD-EJqR8BnRgjjYQR95zhMIZ1J6iEO3p8OxopDH_mv_vAJQ5pGSYaMldkk5a13jCfBGmVs4MUaUnbsJMj3NZdKANl5ODGxWYPNTSr5D1iCh-_81x7TcQXzcBhMQMdxHp0DvayBNF37S_PMNo0Je11jcu8S1VxLuRpEjcCBiF2IQRRXGVpq-_kKlO9BvFlMfyFNWWtJWc-Z02fJGwWvak5b7XW--e8gIuxFpFVOihjHfoR9tNYJkOIC1kL1ytWs8PDDa5ask2hWs6Z7nW2azja0aiuAlHPJ577RJYgi7DuaRGNNkixKUpzY8sKS_MDFjqjF88t_8hJWB99Y9PHAw9mo87Fd3jcb1oC9PHT-D9aU2n7s7CxHc_qsBGs2X6H61OWFEORNXw2Xx6yZMGHTjt8Dxi4zruwdqeu_mcXicdfWeuwtMZWIdQKdm-kc9BKyYdwrWWE_Nc7cxY4VxjSkVYrOMjCey9FVnGmd7DLa63Jy4bOM5Pau67ic1cVRNpkoG6V5_P9FWa2Lo2zqKAsFTZJyrOwLvI5UM9EbhG2yIcfV-0On-AJ7qA0j57oOFCVXC6lWI0flbDK_eZDQ83AeV4dVyyQ6uuUjLf8Jk6YBOhrkrgZFlcbFeQ0c7u93TC1tWuDMmi5krka4RXOsIXAYOLlBXAQkoNUY7jPsyPsID8vtFROCHoiDNJgiLargPNLHofTQOO86VpeDW_zP2aahPrwO7qIKHNx4grsIkwsM619Hal3g59uuilwDc5CHDvKSUlzBeeQ9MjjQe3-opL8CkbxxPfOhz1pXQGsTc_PJxB1vvz_UdPJvTDJTtA0S3UF1Tzeunxfo9Bncy9ALtF7--utpIqa5cDKkGPyoqPBYwlegnZBsD4vnlwPQ5f8Bsvq6-UWQPQgJy19_XWr9RUeV7u7KOm39cEE8tj1xswA9NurpJA17VruB8qA7Ej8eur_9C_sGL28tvAjCdKF5bpRpluZKfmwq_oH03yv18DXz8LHVxBOrwWn8h7KakigyWI5O_V0ZI1r_tJDfaSHJNK5EUfZHspDBOiwFf1rHD1mHh7N5S4TSdfknbCV1bSUocFr-EW1lGO0vULcgPpL0MS-Zm6dUkKfBH5EXO4pTwvwAC_mEhSpxS-MrKnmdjNNCHGec2K1GoAz9FKP7Pak7omDRlCfIH5t9vyk4CT5aWfuI5nMBZtlvIoyyHuvqbnnzg64_HfVHA89FVP8oij4KWbPS18_aFHZrriqMcXahAnji7dHC-xljvOkfbl6zULEoHLNxS6zSj0mYnYe5oOqX5oE1TG4Hs77j5dsFr3NqiNEicM2ivIfr6OMWXoQEGTgl45PZNxj9HnR5VkTBDhr1WaVORnqmvIUrPuTp0TvqubVUXpRBnH1KvRVUrGGn3v5kd0O0ikSYfUPr-u-NWb7029Ta60bPti7e9YUosHculBJfWF9DXokmy4JDk1s85JWfh_m7Kmn9fxK8ay-y89wCPdXyyNvBXU9ZMFqzolMgT0d4NptUXw6h-D0ze-DiK2k28Niw6zJoCHIYTCaGlpL0YwZ_ESNze9Sx1W4r_RAhn-vx7qwsKAUpdRurmKbhapamaXB4Sic8ZRl5P94MFsN449B10TuvztbUws6zNcqurQ7nlzk3gcypH_j4Xf3vX61ZjHj41-h8LRswKjo2kE84CGI_fZeDF96aDYPTrPWXlvx3B09quhU3hKev9hTgaRQ5LNN_5WVXw-Ou5UKZNe2aK5LVbay8u0Me54UPJTlRfvH8cjHJHMrRq2YGFocD1EnIorgIs9IpAZe8hJ-gWRiHHJ6LAu0U9Jeul4j10h147o44xFXgVmIPQi8wTXkG3xWR9YIdZE5KFZYllFC4xFlZjyZVpnCeu8uqXHFbzIJz0DsZU1iFZVyEyHn2bXAelThfFZ0oeb2Q0oNyUDsJjF9ASoIYURqs-8NsZ3fM3d1YWzCd7NAett2vA95Cc7AnE-x-kpRooHkZvBg_zz7aKXYVmZSjeow-4XL2VkvB9hdWqsmWMA39yM_tAdHjuMOZoLUwhJrW_jTg8MSBkrouCP22rho3RlvZvbUsgyXf7UhTTh31_UMY9iw6cR_uHQ9xHE5ZHG5Yr-nraxDYPwoiGV1L033Ybx931hfW6lDlDtvxy_OnW4f2_pHbEKAXh31ge4uH05rsCh1s0yNVOBtOEP3Mi_PzkU2PABEcjqbi3EGf_plU1zyTCuo3h873p-5qR5kMTMfc86ldJdjJlP_t7GKSPV4ygMg9W1dUWR6mF4kzE0ZOlr6BTSdWT27UHS5Vqe90XTj5yVXPPlhdx1YUBRMycgzlj5LxMy_kZSZ-5oWuvB0m3gvC05Nh_UO8z5LXW8g_j0LNkEOhm0FRP_RjegnuavTbyQDOLP2XqP8XUnil6GU5cUgLJ4t17Pt92jmkGgNoEzUWJ9tSl5bi6yQXGo6D10nnfAKYVoE54X8VgXY8R2A8PkYa0SrysxCt1zUrdEglQq1H0t87S0rnks8TIwbrQRwpk5yprCABZMe_DpNmxIPIcbPzBoK-jqo-P0e0t8iKsBpK-7ocvDI90SWgIDSz3ElAsz1SHEkAxEb5cy9sSJ379zVA-4S--Z03Kr5CbY7ZawDMnpmPkjTJshinfpBCVSRBUPg59akOBBUuQ6BlGaQ4Mif1syTPcIJJFCZxUWFcxIVP8wTStKiAlmFJKz-LSIq-bxndIrZra_PsF3nx3ROOk-hreO6tvu8bHMzNK3_4ocVJHAk9i_Ob8jYs8zAnN3AbJHmUJFGUZjfb28SPAVNC06CgAa5ISUmeAC1zAn4MJdywW_P-Uh5EfuSncTZPg9KnUZREKQQRxdSLfNgRVs-1w8252NyYlxlukyTE0U1NCqileVES435OsYeXHsYNfEemq74Sr27ErXkpoug20ov8mkklj2MqpmrzvqUdI16Z9ybZB-_3yJtO1Le__20Mo8P_BgAA___daq8A">