<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57958>57958</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ICE deducing constrained components of member pointer type
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JohelEGP
</td>
</tr>
</table>
<pre>
See https://godbolt.org/z/oacKbYb48.
```C++
#include <concepts>
#include <cstdint>
#include <functional>
#include <type_traits>
struct ratio {
std::intmax_t numerator;
std::intmax_t denominator{1};
};
template<auto F> concept constant_invocable = requires { typename std::integral_constant<int, (F(), 0)>; };
template<auto P> requires std::is_member_object_pointer_v<decltype(P)>
inline constexpr bool default_initialization_leaves_uninitialized =
[]<std::default_initializable T, std::copy_constructible M>(M T::*) {
return not constant_invocable<[]() {
T v;
(void)M{std::invoke(P, v)};
}>;
}(P);
static_assert(default_initialization_leaves_uninitialized<&ratio::numerator>);
static_assert(not default_initialization_leaves_uninitialized<&ratio::denominator>);
```
Output:
```
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++2b -stdlib=libc++ -pedantic -Wall -Wextra -Wconversion <source>
1. <source>:23:77: current parser token ')'
2. <source>:15:23: instantiating variable definition 'default_initialization_leaves_uninitialized<&ratio::numerator>'
#0 0x00005608bb286a54 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x00005608bb2848bc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3a748bc)
#2 0x00005608bb1c2758 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007fbfe0014420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00005608be655bbd clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#5 0x00005608be65c126 Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#6 0x00005608be6765ee EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0
#7 0x00005608be6a74d0 clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&, clang::ASTContext const&, clang::Expr::ConstantExprKind) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6e974d0)
#8 0x00005608bd9379bd clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)&&) SemaConcept.cpp:0:0
#9 0x00005608bd937ee0 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#10 0x00005608bd938373 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6128373)
#11 0x00005608bd9387b9 clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x61287b9)
#12 0x00005608be0c3e8d clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x68b3e8d)
#13 0x00005608be0c4d1e void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::'lambda1'()>(long) SemaTemplateDeduction.cpp:0:0
#14 0x00005608bd7e1185 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5fd1185)
#15 0x00005608be0ce5d3 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x68be5d3)
#16 0x00005608bdef2af7 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (.constprop.0) SemaOverload.cpp:0:0
#17 0x00005608bdef2fa1 clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x66e2fa1)
#18 0x00005608bdf0e4fc clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x66fe4fc)
#19 0x00005608bdbe0ce5 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x63d0ce5)
#20 0x00005608bdbe5dab clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x63d5dab)
#21 0x00005608be10a193 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#22 0x00005608be101496 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#23 0x00005608be101ef5 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) SemaTemplateInstantiate.cpp:0:0
#24 0x00005608be1038be clang::Sema::SubstInitializer(clang::Expr*, clang::MultiLevelTemplateArgumentList const&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x68f38be)
#25 0x00005608be13eef6 clang::Sema::InstantiateVariableInitializer(clang::VarDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x692eef6)
#26 0x00005608be13f1b1 clang::Sema::CompleteVarTemplateSpecializationDecl(clang::VarTemplateSpecializationDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x692f1b1)
#27 0x00005608be17dc9e clang::Sema::InstantiateVariableDefinition(clang::SourceLocation, clang::VarDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x696dc9e)
#28 0x00005608bd7e1185 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5fd1185)
#29 0x00005608bdbafa6c DoMarkVarDeclReferenced(clang::Sema&, clang::SourceLocation, clang::VarDecl*, clang::Expr*, llvm::DenseMap<clang::VarDecl const*, int, llvm::DenseMapInfo<clang::VarDecl const*, void>, llvm::detail::DenseMapPair<clang::VarDecl const*, int>>&) SemaExpr.cpp:0:0
#30 0x00005608bdbb02ac clang::Sema::MarkDeclRefReferenced(clang::DeclRefExpr*, clang::Expr const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x63a02ac)
#31 0x00005608bdbb0790 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x63a0790)
#32 0x00005608bdbb1378 clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgumentListInfo const*, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x63a1378)
#33 0x00005608bdfdadf3 clang::Sema::BuildTemplateIdExpr(clang::CXXScopeSpec const&, clang::SourceLocation, clang::LookupResult&, bool, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x67cadf3)
#34 0x00005608bdbc7f31 clang::Sema::ActOnIdExpression(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::UnqualifiedId&, bool, bool, clang::CorrectionCandidateCallback*, bool, clang::Token*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x63b7f31)
#35 0x00005608bd714dcc clang::Parser::tryParseCXXIdExpression(clang::CXXScopeSpec&, bool, clang::Token&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5f04dcc)
#36 0x00005608bd715006 clang::Parser::ParseCXXIdExpression(bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5f05006)
#37 0x00005608bd6f5749 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ee5749)
#38 0x00005608bd6f6030 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ee6030)
#39 0x00005608bd703b4d clang::Parser::ParseConstantExpressionInExprEvalContext(clang::Parser::TypeCastState) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ef3b4d)
#40 0x00005608bd6dbdb6 clang::Parser::ParseStaticAssertDeclaration(clang::SourceLocation&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5ecbdb6)
#41 0x00005608bd6ca09f clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5eba09f)
#42 0x00005608bd69b5bb clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5e8b5bb)
#43 0x00005608bd69d38a clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5e8d38a)
#44 0x00005608bd68cc7a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5e7cc7a)
#45 0x00005608bc4f6155 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4ce6155)
#46 0x00005608bbdff2a1 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x45ef2a1)
#47 0x00005608bbd84f03 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4574f03)
#48 0x00005608bbee26cb clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x46d26cb)
#49 0x00005608b8aa5994 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x1295994)
#50 0x00005608b8a9ef4b ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#51 0x00005608bbbeff79 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#52 0x00005608bb1c2ec7 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x39b2ec7)
#53 0x00005608bbbf01ac clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#54 0x00005608bbbbb619 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x43ab619)
#55 0x00005608bbbbc00d 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+++0x43ac00d)
#56 0x00005608bbbc676c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x43b676c)
#57 0x00005608b8aa36b9 clang_main(int, char**) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x12936b9)
#58 0x00007fbfdfac2083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#59 0x00005608b8a9eb5e _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0x128eb5e)
clang-16: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Compiler returned: 139
```
The following works:
```diff
- []<std::default_initializable T, std::copy_constructible M>(M T::*) {
+ []<class T, class M>(M T::*) {
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztXFt327gR_jX2C458eBf54AdFdrZuk9qN3N3tkw4IgBJriuSCpNfeX98ZkJQIipTllMnZnjRHkSUQl5lvLhgMAIUZf71eCUG2ZZkXF_biwvoIr03GwywprzK5gW9_wP-Msr-F_wod_-rCuLkwFs27Z9Sv5YX1AV91qWXHKUsqLsiFvWRZykReQue3g4-LksdpOfI0qlJWxllKk5EK5Wsu1qWkcXcA9V6UsmIlkRTak4t5QxshMB7yaS9g1B19WZckrXYCqmXywj5Ri4s028Wpqjf_YF7Mb_bVtc_qvRS7PKGlAAppVWbkIxBHGiTwb1HStFzH6XPGaJggJzdEit-qWIoCiSXIV0p3QiNEbCRN1m1z6BuBs5bkwvJBav6FFeA3A_8CFvYH8jZhD0jYfuTDYMV6J3ahkOss_Ldg5TrPcHy5foaGXLAE6YMhH5qxVN9xmsSpqNkTL7kkYZYlgFtEqwSZjcuYJvEfKJB0nQj6LIp1le7LBUcYWgFcuB8uXKB-uafpuCNE7hFZ3tdhWf5aA4TCj7HCZ6TP8j9DTVXlwoJX0NUIAgCUlUxJmg0JB2hoiFEQ6y0JeSTPHb3Bf1DvOYs51P0MdTsCfM6eGtCW0AiQ64hHNcTvt50iLGhB_qArN6DI1rQohAQV8N8BMrJjecosaro66n_bHak_BqLz34zTNSB9pL0b6bJ4X5V5VWLToToPn24Xq1tSVOEuLgklYbUBKeaZLAlodc-bxeW2Cq9YtoMvSfLc_pnlMkPlhq9xUVSigA-Eppy0_qXcgjZLWmxJSNkTeBkmUHQ5DCQzJgAYToqsknUxtgSwMhaDfXEiq5QUTMZ52bjMVQmdEF7t8j1TBjwKHmQGdr0jVG5AEik6sgVBl5sjZUB1HidCzsCikkwKiWUJTTczUPH0Cb6FcdqW1V6YzDb8dyqjmQOfyCzDzmieY5cK06uCzHYIAJnNXnxvRovdrHhNS_oC9odmnpDZCp5tGJuVYMJsS2EIMM1TNGHlIqV5sQU1mUUsgwczHtNNmhWgRjBklGYzhaZerOzjhtWkW6EqSOIQyuCdtRzlgoNRxozMfqEJ0PeLeAF5wF-w12chC9BCnA4aabQeyUR8tWJ7YdnwNp8jyKySEgAnOZWg46A4TwJ6sebKkc7rLqyBLky37QdURXkLEHmcbsgzlbHySmAnyhQy1d901tkQBZ3aBjFeDPjneoYfhpbvUdchDxLkpxTtEbV1FW9g6vwLaGaCQmrckvJ_9aPiiuWojob6v-_b7PXt-CEjynIUTcVrUX9YAgtpld-ndW8wQpUW8BHUP8lQHQOinObX6zK8jBebzpECFMueREsj0WTW3PXJEtXri2AZqMRrn3k1WQZ6nWUG6v5SDqNgN0PMozAShmE6jmWQ9RomShCHWIOrqZlDbbU-giWtPWcGU2D1MtukVf0gL7dSUH5VZFeG4kX1onHidDkRnuuGISc1BArkVbkrf46LGAb9QAucjg6S2NEnUc9367yUTSxA0yx93WVVQTCCKHLltoK6wV1a3sLUfPtMk0ppFTTBabpWbHipkaCTHgH1vNjoDvawbObJYejcHk_MtDzSDCr03hcPP0MxFHpnkI9d3KVR1tTudIM0vZNITydy7rkQCLdE3qUPiRp5KlrfqP1J9dxy8AZ3jczO4nKucwmmxI1-1weCkfVF0faonmkI6LW_iAL82jG5i9VjY1mnGGp8SGesv8Uphk11o0lchycCZFgzOL-LCA_seaAb3EItORreYIXSo7oWAAwrVFBPE1ZhRK34gIUI-F_w3kVEVS_Y_o0auq2JHT1G6--gLvwGwm5NB7rN1Oz0CQLWukvt4WfgI_4knkXy2ET_iybU-BQXJyU0NtwYJ95enWGqSugu5FRNp30N6hpqHZ6_CcFXkrN8U0A_OvzYylMRAfC-rJeow54k6NuNEAZZbgV7mhrawwS3kJK-fhHRsR0eGqACddusdhAi_gyBfSbvAPBhE8ZGfWK-TlK18L_Ad_EOOZ2GG2Mwowe3b89t0ge0HudcGfy4aE8yl5gWymA_l6CQzL6Q5mFwQkh3--WC4B-b3FbL_YH-omc5p7xL2wtK9Ux59uFuRPq9oQSkNCi1iF4YzBY-H4byIyyYim2fjRvBqwGd78M8CNRJJVYdCz4Im1LP_aKnycedEk9fn4s9VwcCGz46weOZlB4gupfxJoblzxJqA8FN-rEXPnb7bTOtsLxBdVGpuyanqJI104jdD1GqmtjtntgdbgqCC9Vx4tTTA3F15g8YxSzNOkrHMKnl2Bdjcba6nDAh9Fi1uM72qAdfOr26nC3etwj9R0WTR0z1Ngm72-MIw6xDjH0k1y78EfcjGodnOm0FzOfCNH132PJBu36Jy-2qiqKYxaLJdazyo5Xasc88V5smUnU34siGpupuT9WFy0dm9P-r6iSqOpXTQkFpktRSB1xEFo3mw5JccP5ZlNtsP30sacpjfpQGOU-YWLpgmHp-oLHsz9q__op5Lcm_ShGGoBxdsye0KGIwwQHreqca3T8LmWSU72FZibKnGu3fU60eqKS7e8lRqkrsV2q6y2WWY-Ktdkdtq2EvNO_LNKLmGzIdkeVJKf3JwH0XqP-9LXkCYdVsSU_HRIZwIjaM-4cqTjhGNI_ZvdqWvI8UWDWcmvtnGRb1FbuTvzlzrvhclZjQfyfu_R6nAi9CbDTw9DV5Pam8Ad5xUu9PhtYYEbo_mAhTmyNkXUwto4epy2k44ghABdP_YUwnwxAh0jDU1sXCNKgZaKHOoxTiUdK0iDK5U5teJ7Pj7dx1WD_XG2JNX00_w5I4lC76cWlnOT44J1hWjw3TCbxvzsZI1v0ryLf75IvI_ebk3-13M8e4OJjwu7hxetzY8D5sl6sqxNjmbTq-Lh01qQPyI-RDMx59nWDaQkTeMKMdzH5u9p5H2YYKw4Hh6IOzIZkIisBCTjUovB4UkRmOBGVLGDURCoeW2lUu2GG_veaxh8ipqn9inBAGDSd9l8-ccxaM2MaAytzsTyu8I_Goo9GP1Sc1kcBDdjR-_R8jZWD14jsaUY-Rm-wzlU-NACAmEFKkTPBz9lveIdJhj3nA5EakhfhMcz0iafrQso1NWvS4qVp-vtlcnVrpbztwUdI40btTq62zqMFJ67azEYMMDk46di8YDA2LjqxOUCaNQMZk0jwenoCOTjBME5tRpLirU_rpHmRpHhgn1gwa0br7TKqRPMWJRa5qVW_0H6U2qDr4lOI2FarG2B7Q30VRCo61lNuOYiFBo8d2Ft-5XTuWJvkmogHkNdFYPdGY9tx_QzQdzAZi319_VQsRxGkMzfcAP47piUdnIDr1oo4icBqytp5l4JRHI7lXhew-KOVfB-pJFfuUZU9Vrh2eGUjHfD9FnDNEQ4NLT8mHbB7ZY8kwXAPXMImiOI4hhtfBXQzfid4_09_Au6DV8zv-dqpwmUkp1OS9z2stm72iXuzSxR6Pgk5q6yEiqEHs6iGM6XCmzSwP6lRq_bmUr-orwDYO9QCm46xNFo26kYGUa6x5PdZcw_DGWBvha0p_ACQiBRqJerbXi9y5E5wmkRblGPLdylhPfW_nOF03-6rebYozJjaHCLUUx00n00ZXCGRXw8Pv4eEZtvED4YHsanjogffcsEOHn8ajc46xxuQubY_aNochx0HqcToVWxFS3WXL0cNZj4NvP22ZK3ULZKEugXQihdNLp-mci2BIocaCHr56jBpBdJKFUbLbB5ncC-jkNDSoq3xRljIOqxLvj7y_Rn-MCZU6RGQ06PTw0gtCNwxPQnf7UgqZ0mQUwvMgiNMN9lBPTBNy6CMDGod2j0Nu-_Qkh49ZrjI3x9mh-5z-VomHUvZPA7HkJ5lh_BYNnmvrrAgzXiXibofXkhrLntAyfORNY14P2jyfsfkx84vV42ii4Ftkb1wxRzo0QrXQhzmRZ7quHrNx8ZNIF80R6nrpKBgo2KI94TUVeQ4TOLpGnha-wGIhsvSd4I8S3UXKB-ibkjIXzxVoMaMz1ynznciwdeDqseokH95XGsJunJXp9NOBCAOI06jXYoxQCMtjmvtp6Dww8bx3i_4pJqdzKY7HkSiNai0S8Cl1g8AhjJnrHV6LGzuYsqVHZ2b1sjaxNR3xphUgbV3iXUMnPhCRE5IW56X5qAzdP3m88IgTpSNcxs9iOGfm6tfHQhFF82DKI3312I0yLE3Qhx0s7fp2OCiXQ-F93l4s7xSuYB5LN41nr6W2v7-7XrOXF9Osv4S0iNm6UNUbkLTKWLC_l14_7nUHzKF2Z7LzHKssegFuDb1q0jvVf3Tk7q9ZOCyQo8tygs07shi6Elc_-VKlKxqJ5FXD87tkw-0gRDI1bbZ1xYoMU0_G_niKoY465VSW9SmnUQ1wdOTC0DODUeSUxOjR3NbCqTnjXkOsMJYTO1F10dtZne4CmGNT5FVTI7cHBjMM_l4wAOliHAl4erRrfMrJ7oWf11sYxwfJT4J32M74RhAiQhqEeogUMm_ujVriTeezNsUPzO1j0H9HCCeKJOwQMdFAm_ciCdtrL4u0sURLtPIai2ljAxxNI6cNx_B-M48oswzfJus1XrsHBwY-RVF1xiVnhtebPTWO5UAn2ihBPwIJXUHq_ifizMcu92PWbUwPhEyElOhGFzXIJGqCXZB6Lf2Iwoic_B6XWyJeYrRXLohpK8yrQpDZM_6cRCEEiTvBaDNSG4c2Px-Cl_cX2PjEj1o8bgWJMnDwv-PPBfyeySd1k15vwOMoqotm3_F3UADMzmgMz1XWndYf32zeUn8prk3PcwzHNyz7kl_bPLADelnGZSKu75a3hOMpcGSftbeMhJJInqV4xp1kEal_e4Y0PzqjfgznspLJ9df_roc7D1z_cnsdOT5zzZD6thFZUWgz1zaEMIzQYsyPDOsyoaFIiusaiMv42jIsywgsxwxs27GvuLCtyDA8xoTpBcy7cAxYPsfJFQ6Mv5d0Ka8VDWG1KeBhArNAcXiIJ3s3qRBt_7Qqt5m8_mu2FcntTw-Xit5rRex_AL2Ov-4">