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

    <tr>
        <th>Summary</th>
        <td>
            Assertion failure and infinite loop after bc09ec696209b3aea74d49767b15c2f34e363933
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:codegen
      </td>
    </tr>

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

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

<pre>
    After bc09ec696209b3aea74d49767b15c2f34e363933, I notice two distinct but likely related issues when building the Linux kernel with `-fsanitize=array-bounds`.

The first issue is a crash due to an assertion failure, which I initially reported with further details at https://github.com/llvm/llvm-project/pull/70606#issuecomment-1809250417. I'll copy and paste the reproducer from `cvise` here to keep the issue contained:

```c
struct irq_data {
  struct irq_domain *domain;
} irq_domain_fix_revmap_d;
struct irq_domain {
  struct irq_domain *parent;
  int revmap_size;
  struct irq_data *revmap[] __attribute__((__counted_by__(revmap_size)));
};
long irq_domain_fix_revmap_d_0;
int irq_domain_pop_irq() {
 irq_domain_fix_revmap_d.domain->revmap[irq_domain_fix_revmap_d_0] = 0;
 return 0;
}
```

```
clang: /mnt/nvme/tmp/cvise.buvTN27aMk/src/llvm/include/llvm/IR/DataLayout.h:652: TypeSize llvm::StructLayout::getElementOffset(unsigned int) const: Assertion `Idx < NumElements && "Invalid element idx!"' failed.
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 -O2 -fsanitize=array-bounds -c -o /dev/null irqdomain.i
1.      <eof> parser at end of file
2.      irqdomain.i:10:5: LLVM IR generation of declaration 'irq_domain_pop_irq'
3.      irqdomain.i:10:5: Generating code for declaration 'irq_domain_pop_irq'
 #0 0x00005622f687d9e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x41069e8)
 #1 0x00005622f687b61e llvm::sys::RunSignalHandlers() (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x410461e)
 #2 0x00005622f6800926 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f1204079710 (/usr/lib/libc.so.6+0x3e710)
 #4 0x00007f12040c983c (/usr/lib/libc.so.6+0x8e83c)
 #5 0x00007f1204079668 gsignal (/usr/lib/libc.so.6+0x3e668)
 #6 0x00007f12040614b8 abort (/usr/lib/libc.so.6+0x264b8)
 #7 0x00007f12040613dc (/usr/lib/libc.so.6+0x263dc)
 #8 0x00007f1204071d26 (/usr/lib/libc.so.6+0x36d26)
 #9 0x00005622f6ae11bb clang::CodeGen::CGBuilderTy::CreateStructGEP(clang::CodeGen::Address, unsigned int, llvm::Twine const&) CGCall.cpp:0:0
#10 0x00005622f6bcd204 emitAddrOfFieldStorage(clang::CodeGen::CodeGenFunction&, clang::CodeGen::Address, clang::FieldDecl const*) CGExpr.cpp:0:0
#11 0x00005622f6bb0082 clang::CodeGen::CodeGenFunction::EmitLValueForField(clang::CodeGen::LValue, clang::FieldDecl const*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4439082)
#12 0x00005622f6bbef07 clang::CodeGen::CodeGenFunction::EmitMemberExpr(clang::MemberExpr const*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4447f07)
#13 0x00005622f6bb7c9f clang::CodeGen::CodeGenFunction::EmitLValueHelper(clang::Expr const*, clang::CodeGen::KnownNonNull_t) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4440c9f)
#14 0x00005622f6bb62ad clang::CodeGen::CodeGenFunction::EmitCheckedLValue(clang::Expr const*, clang::CodeGen::CodeGenFunction::TypeCheckKind) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x443f2ad)
#15 0x00005622f6be69ed (anonymous namespace)::ScalarExprEmitter::VisitMemberExpr(clang::MemberExpr*) CGExprScalar.cpp:0:0
#16 0x00005622f6bd2fad clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x445bfad)
#17 0x00005622f6baba93 clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4434a93)
#18 0x00005622f6bac39d clang::CodeGen::CodeGenFunction::EmitAnyExprToTemp(clang::Expr const*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x443539d)
#19 0x00005622f6bb481f clang::CodeGen::CodeGenFunction::EmitBoundsCheck(clang::Expr const*, clang::Expr const*, llvm::Value*, clang::QualType, bool) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x443d81f)
#20 0x00005622f6bcb0e3 clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(clang::ArraySubscriptExpr const*, bool)::$_0::operator()(bool) const CGExpr.cpp:0:0
#21 0x00005622f6bb7286 clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(clang::ArraySubscriptExpr const*, bool) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4440286)
#22 0x00005622f6bb629b clang::CodeGen::CodeGenFunction::EmitCheckedLValue(clang::Expr const*, clang::CodeGen::CodeGenFunction::TypeCheckKind) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x443f29b)
#23 0x00005622f6bdf6cb (anonymous namespace)::ScalarExprEmitter::VisitBinAssign(clang::BinaryOperator const*) CGExprScalar.cpp:0:0
#24 0x00005622f6bd2fad clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x445bfad)
#25 0x00005622f6baba93 clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4434a93)
#26 0x00005622f6baba1c clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4434a1c)
#27 0x00005622f6c914db clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x451a4db)
#28 0x00005622f6c9ef40 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4527f40)
#29 0x00005622f6b98fe5 clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4421fe5)
#30 0x00005622f6b99cb6 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4422cb6)
#31 0x00005622f6a77d7c clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4300d7c)
#32 0x00005622f6a70043 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x42f9043)
#33 0x00005622f6a74952 clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x42fd952)
#34 0x00005622f6a6ec91 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x42f7c91)
#35 0x00005622f703715c (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0
#36 0x00005622f702dc56 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x48b6c56)
#37 0x00005622f82db83a clang::ParseAST(clang::Sema&, bool, bool) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x5b6483a)
#38 0x00005622f742bd8f clang::FrontendAction::Execute() (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4cb4d8f)
#39 0x00005622f739d7bd clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4c267bd)
#40 0x00005622f74f5178 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4d7e178)
#41 0x00005622f51e8af2 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x2a71af2)
#42 0x00005622f51e4f3d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#43 0x00005622f71fde09 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::$_0>(long) Job.cpp:0:0
#44 0x00005622f68006a6 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x40896a6)
#45 0x00005622f71fd512 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4a86512)
#46 0x00005622f71b86c7 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4a416c7)
#47 0x00005622f71b8c07 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4a41c07)
#48 0x00005622f71d8bc9 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x4a61bc9)
#49 0x00005622f51e43f6 clang_main(int, char**, llvm::ToolContext const&) (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x2a6d3f6)
#50 0x00005622f51f5241 main (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x2a7e241)
#51 0x00007f1204062cd0 (/usr/lib/libc.so.6+0x27cd0)
#52 0x00007f1204062d8a __libc_start_main (/usr/lib/libc.so.6+0x27d8a)
#53 0x00005622f51e14e5 _start (/mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin/clang-18+0x2a6a4e5)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
ClangBuiltLinux clang version 18.0.0 (https://github.com/llvm/llvm-project bc09ec696209b3aea74d49767b15c2f34e363933)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /mnt/nvme/tmp/cvise.buvTN27aMk/install/llvm-bad/bin
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
````

The second issue is no visible crash but a hang during LLVM IR generation. A C reproducer for that issue from `cvise`:

```c
struct {
  int num_entries;
  int entries[] __attribute__((__counted_by__(num_entries)));
} ksz9477_flower_parse_action_rule;
struct ksz9477_acl_entries {
  int entries[6];
} ksz9477_flower_parse_action_dev_0_0_0;
int ksz9477_flower_parse_action_act, ksz9477_flower_parse_action_entry,
 ksz9477_flower_parse_action_entry_idx;
void ksz9477_flower_parse_action() {
  struct ksz9477_acl_entries acl = ksz9477_flower_parse_action_dev_0_0_0;
  for (;; ksz9477_flower_parse_action_act =
 (&ksz9477_flower_parse_action_rule)->entries[0])
 ksz9477_flower_parse_action_entry =
 acl.entries[ksz9477_flower_parse_action_entry_idx];
}
```

At 11f52f783a64acef671a2b1648a40ba683ad4717:

```
$ clang --version | head -1
clang version 18.0.0 (https://github.com/llvm/llvm-project 11f52f783a64acef671a2b1648a40ba683ad4717)

$ timeout 15s clang -Xclang -disable-llvm-passes -fsanitize=array-bounds -S -emit-llvm -o /dev/null ksz9477_tc_flower.i

$ echo $?
0
```

At bc09ec696209b3aea74d49767b15c2f34e363933:

```
$ clang --version | head -1
clang version 18.0.0 (https://github.com/llvm/llvm-project bc09ec696209b3aea74d49767b15c2f34e363933)

$ timeout 15s clang -Xclang -disable-llvm-passes -fsanitize=array-bounds -S -emit-llvm -o /dev/null ksz9477_tc_flower.i

$ echo $?
124
```

cc @bwendling
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzse9ty4ziS9tPQNwgpSPB84QtZtmvcU91df9nR_94pQCApYU0BGgD0oZ9-AyAlEbQkHybUOzu7UWVbAsFEfl8mMpMgQLTmSwFwGaRXQXp9QVqzkupSELMigtofuKgke72c1QYUqmhYAs3KDIdlFRMgecKSMs_yKkopruME4iwu4zjAc3SHhDScAjLPEjGuDRfUoKo1qOGP0LwiBQ0xwBDXugWNnlcgUNXyhnGxRGYF6DsX7Qt6BCWgQc_crFCQhZNaE8EN_xOC-JooRV4nlWwF00EWToPwOghn3e-HFaCaK226ARDXiCCqiF4h1gIyEhGBiNagDJcC1YQ3rQKr-fOK0xW6Q9yOQxqn6kYqq6vTom6VWYFCDAzhjUbEoJUxGx3EswDfBvh2yc2qraZUrgN82zRP2z-TjZL_CdQE-HbTNk2Ab_MwC7MAx05FKtdrEGYSFWGJ0zCJ8im6C3DeNIjKzSsigqEN0QYcOwo2SrKWgkK1kmvLDX3iGoIsRCtQDuEjwMZ17iigUhjCBTCr6YCqIAu7_7T7ro1qqUFc_WPBiCEoyK-6CwgNL8k14QIFeNZ9CuK-V5BfDzosav6yUPC0JpsF2_U5IOedQTZEgTA7AQhxYVAvVzt3OHi_0x_Puo6dl6PFghijeNUaWCwCXAS4WCyobIUBtqheXdtQMi77_wOEu8-NFMtjcBfhrpvVdtBrIzcLrv7hBi8H2I8ImnZtkyC-2SE5PmZ6jYL4Gu0HRwpMq8SgxSLwbX_QIbqvtCFiGcQzFODbtbDuK57WEOBbs94E-Na53bRqnx5-wzn59THAt1rRvetzQZuWwb7h7meAb6-JId_Jq2zNdBXEsyzFdoSH1w3c8z8Bua7xLIhn986aXdeuZQnmpgE7V36vaw0mwEUrXCBj1isso1QKbXuj2W6GB1l4x15QEM_Rb-26F6BRgLMAZyjA-E48kYYzBN0lxNlLgKMA4wDnLj4A6yPMj-83s_sbpNtqzQ0iqGqXfYyws-7TwaCLgAG-dVO8p8vN2y5eVYQ-GkWoi04bN_EpaA0MadmqrtneSbSWlLugqlqBNFV8Y3qV7w2hj4i1681u8tt4Wf5QcqnIGhG1bB0hljRncDT5HaOj4RZNKJpI6xEMnqxHtE1jvbfzyCnvhojsEEE8B1kH8Q3aEKVB2YAJgiFZo5o30PXEtufw_ngWhUE8S60-37__8Su6-4mWIEARZ01ZIwa0If3XAOeHZlfeCY9PCf_WCxVLRCUDVEv1CdEowHGIwpcwDMM0w7jOipyVUAwcWL_q7sMPxYVxhnjorFnsOynyvJDaKCBr55HzrSe7EPHBaceFNsQlFudhFWEBvq24sL2tSSdREeCr8CWJwqwEG3r2IKIRiCqL4BCIn62450tBmr8RwRpQehvDzqNnkkXg6Yl9PcOwxBma23nyE6h8AvXqqRfgoifS6zOXwsCLmdKNnQ-h-9kNEfdD5HWEwyTMyzwKe3ytVlZrXnW_6VTLaeZ0jSGPQk_TxBdDyyKm74opoIipJyYda5NlBVpqB_IDWmWZb-fMF5dFSVUgUtnY9Z4wnCWVLywfC4vZ-xBxFjMfYjGCGDEXkd-BljE7UQZiSs81CERRVaFt8gri2Vwy-Aai__LtyhaboB5e-wYFxECXbb7d_AhwcezWGWMKtLaT1M8788GEeXjmAvo85PRE829z0jRvXc5OPj-EVJThMEGw5saO9Xt9y6Fh90YqsoQTivVfbltBbejqA8kHYAy6uKGugTZb3Wed7jcvG3VYdz9yVFUYFvg47SMVXePNmpvvf5CmhVupnAInQHYdP6T1WWJSEpdhgXeOZxnAIwagDvPPM_ArrCtQlmcf_b79LwCX5HWYe-DiEbiclvVXzfs3aDYwgjcCdtxf_y7ks_hNit_aplmcLzcmNlTXHgXJiIIME_Z5CuYroI_Atv77JQ4OCrdFsxP-dy7YGf2-xvbigJfU5wWyEpgdnAgpXtey1UiQNeiNK3bKvpynpCHOmy0nBlTX_AfXH5kBXjjqRB0OSpmvGsP1V0y2V_Yde1VSNudjPq3qEfO5D49UpIw_D28mXj-A7Wj-WC6dK9830pyfgzghZexxUIw4oHH5BRP3HDzIB7BKnmDibMjSuPStW47iTVJEXwi5V-5BzQWGj1v4zbV9RdPHrfEd_68ljY1Af4ELsCLyAjMel01VCF-ZBva59r6tugfmtzPi7fVDc7_rG-BkEXYf5cY-V0rVPSAFuNiy424-VVLhcUmV4yL778J1tiyLi8wz5riKynB5onz_N86yZeXxMirAWJ3R6p_JsldczNy6v8_OFRdEvf7eO-2B6v9EusXJv3W6xen_pVucveEgop_n4G4ppAL2Lg9nxBVRD5dfStEyStgXws69WRsfkG05kkld4P0JdRDPh-HYmAED8c3ZSEgjkjA_xhQjEqBOwi_EXrne2KLDQv__3Kxka-6p3LxZstj3GiyQbD36ozPgXOTgvE5Cj5xROVYWNaSfJ2fbciXZ60lPOZfr46iGdAhstHBdlSWtPllm9IvnYC_6oL41siLNNdDG9_394tTpFPxt2_FO1NJbRzsTO5hWXj0yWhEnec7ydwPer5K1DeyN3rGwhXINtXupLMXHuOra93X3mbDHYchyLyiOVtlJHobJuwnvMPZ_Ucy4LsPES3BxPMKclOm765iHMR9HejY0rEy9NcnYr8hIBrSMPovmQW6-wxP0ug8xdS3nNE9Oy8gD5NVgeRjnUUrfK4N7XF1Je7feNF1z927oNLpvSrYbm6NxiTpe-vcFBwvgOPO1w4ymXii9IvQRBJtLodv1thz_rB5nobqoMpr6kc8riQrMqiImQzA_iNIwu38YpTFYk1EmP2eNmlZZUsTEU9wrY_IEV6zwFk5ulRQGBJsNc_ML0NbAOV9j0iphhbdy4b-ryuOS5dXogWm94Q2oOzuGoODp2qvvsT-CdsZUSXGWV97zURL6vNdplBf-qpLTew_qSVLyFsMb0GeMMCyHKC88FF7CTyMoSI0RpdHCbW8avq0fFvArMqra58hvw3P0JDk7IxhM8ojUXvxP8AhMUscMbe0wjx7czBxAul-TpvkD6C5QHkCWjV5xStn0L9K9Ao0p_nQkTiZeks2jmkFYOnoGcuu-XFoox7C72i-ixTddF0qapiL0cVEL_yGqG7t3p3k0l-s1EWw80w9aUhu2XbizoxPLgbcNiYul63nTm3l3w2JBX16iqPtSEc3pQrvuPYteZ9uwMIpwo7eXR-JI09jpIdXguu0yWPqYDTc57Zcdbyw2KZb26i-yOmyCZLyDIiPZgP1D-yS6Kz9bcU9qaF49Bk9b61zTNyzKjHhZK0nHrpVGXv32v841zsM8KbI08mONX_xEVZHR_CjzLsaTN_l3aw4vIYxutB28FYOPdZ15Vcl5yUmijHrvz5N8TA4NP03OL7LSx5n5RVbfufbXUk4F9p03bQi3jtTvXfkomb3L_YWUUn9LQuKXeRErKloeU_968NkrQw7UH8dM8RdSeqZwSbKooqVHYjkuEOK6f2LZ1jtbEC5Mzd6sYh5L_-epcDIW1168T0MfQJ3iJEL9dvGz1FiAE--RNI1G298wZe9vFMQ5Zd76YorHYlhB0GJhb1toQ5RZDFCdEswK73EojUcmjhJIUSfyXFYiyWCNcbdxHJSyKWu7s7jun1UQ7SdCt7u6O14BL9x0O3GjOLFqthrQ5AkZiTQA4oNnh36YuRVqn85Nd2SkG-QJlOZSoKiYhlNnls9tzP7EaZdejweiluB2nb8U2SJLJhs6aaxGk6Vot6dSFBCG1pJBYztupOYv3aW7jmRg11x9arP9Uev4NhDS2KdIxDhZCqkNp2it3ZUba53d5mqxPLzHvNB2ck-QkIPrpGqsSTat0dPx2QH_TMHDCpAGKgXbH8gREj1xza2Mfqd7axBBK2s-1toq6cDW7ymaobl3_EUqZFZke9BnfBom-NBhl8HxEy4MEu16AcIoDnp05GTb-vGjJENZh46SoEf9Z5nk-aJu5DOohdslvyB9Ue0W5PxTM9v-hDZbwWP991pmQXr94dEYPC1C-887t3LqDkJdjjjVxeryGuB5r9-7XRecvezGd48TJ255c4IGnSCJ0MadjPkcBch5mB0ovgriq_fosCPs9iQXAc7eNS8uJ0F8szdZaE2229j8Ll-DAQltpns5H2Pad48Tp4JmBkU2y9Z5EZMsIRTqLI8IrqIsKUgSViQrYsKSPMqPzbltakq2R0wm2ygd5HO0sqFxEg3i1j8fxD-s8S5v7lQ0fA2yNShK9Vbd_-j_Mu4i36QbimgN-tRRmXs0gTU3rvvbUzNbMxnaW2p7emavCtCVvSsJ4tv-7M5pO304df3L2OnTyfZ_hp0inJywFKUoSMLqGQRruFhesMuYlXFJLuAyysMwK9Ikxxery5jhPMYFSbMkryNaJqwO0zQq8qQkaVmxC36JQxxHEcY4jPMUT8OS1WGYEGCQRmWKgySENeHN1EKbSrW8cMnyMo-jrLhoSAWNdoeAMd4WDLYEW4IIMA7S6wt12RUX7VIHSdhwbfReluGmgcvZ-DBtf5zNvf8D1Ei5QeRT54gvWtVcfv04nQP3XwEAAP__fXCGcA">