<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/85596>85596</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Flang][OpenMP] Compilation error when statement in atomic construct is MAX intrinsic function whose argument is a character variable
</td>
</tr>
<tr>
<th>Labels</th>
<td>
openmp,
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ohno-fj
</td>
</tr>
</table>
<pre>
```
Version of flang-new : 19.0.0(00efb343529cce025055ca8284a61b22b48924c9)/AArch64
```
When `statement` in `atomic` construct is `MAX` intrinsic function whose argument is a `character` variable, the compilation terminates abnormally.
Compilation terminates normally in the following cases:
- Change variable from `character` to `integer` or `real` , or
- `atomic` construct removed
The following are the test program, Flang-new, Gfortran and ifort compilation/execution result.
omp_atomic_015_2.f90:
```fortran
program main
character::char,x
char="a"
x="b"
!$omp parallel
!$omp atomic
char=MAX(char,x)
!$omp end parallel
end program main
```
```
$ flang-new -fopenmp omp_atomic_015_2.f90
error: loc("/work/home/ohno/CT/test/fort/tp/reproducer/fomp_omp30/omp_atomic_015_2.f90":4:3): character buffer should be in CharBoxValue
LLVM ERROR: aborting
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /lustre/home/ohno/LLVM_20240307/release/bin/flang-new -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -fopenmp -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +outline-atomics -target-feature +v8a -target-feature +fp-armv8 -target-feature +neon -mframe-pointer=non-leaf -o /tmp/omp_atomic_015_2-dc6014.o -x f95-cpp-input omp_atomic_015_2.f90
#0 0x00000000040dc3d8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x40dc3d8)
#1 0x00000000040da2e0 llvm::sys::RunSignalHandlers() (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x40da2e0)
#2 0x00000000040da464 SignalHandler(int) Signals.cpp:0:0
#3 0x000040003e9807a0 (linux-vdso.so.1+0x7a0)
#4 0x000040003ee26274 raise (/lib64/libc.so.6+0x36274)
#5 0x000040003ee10a2c abort (/lib64/libc.so.6+0x20a2c)
#6 0x00000000040656d0 llvm::report_fatal_error(llvm::StringRef, bool) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x40656d0)
#7 0x0000000004065720 llvm::install_bad_alloc_error_handler(void (*)(void*, char const*, bool), void*) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x4065720)
#8 0x000000000475f7dc (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x475f7dc)
#9 0x0000000004a2dae4 fir::ExtendedValue::ExtendedValue<mlir::BlockArgument, void>(mlir::BlockArgument&&) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x4a2dae4)
#10 0x0000000004a45e08 void Fortran::lower::genOmpAccAtomicUpdateStatement<Fortran::parser::OmpAtomicClauseList>(Fortran::lower::AbstractConverter&, mlir::Value, mlir::Type, Fortran::parser::Variable const&, Fortran::parser::Expr const&, Fortran::parser::OmpAtomicClauseList const*, Fortran::parser::OmpAtomicClauseList const*, mlir::Location, mlir::Operation*) (.isra.35771) OpenMP.cpp:0:0
#11 0x0000000004a46f60 void Fortran::lower::genOmpAtomic<Fortran::parser::OmpAtomic, Fortran::parser::OmpAtomicClauseList>(Fortran::lower::AbstractConverter&, Fortran::parser::OmpAtomic const&, mlir::Location) (.constprop.36625) OpenMP.cpp:0:0
#12 0x0000000004a29174 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(Fortran::common::visitors<genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda'(Fortran::parser::OpenMPStandaloneConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda0'(Fortran::parser::OpenMPSectionsConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda1'(Fortran::parser::OpenMPSectionConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda2'(Fortran::parser::OpenMPLoopConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda3'(Fortran::parser::OpenMPDeclarativeAllocate const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda4'(Fortran::parser::OpenMPExecutableAllocate const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda5'(Fortran::parser::OpenMPAllocatorsConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda6'(Fortran::parser::OpenMPBlockConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda7'(Fortran::parser::OpenMPAtomicConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda8'(Fortran::parser::OpenMPCriticalConstruct const&)>&&, std::variant<Fortran::parser::OpenMPStandaloneConstruct, Fortran::parser::OpenMPSectionsConstruct, Fortran::parser::OpenMPSectionConstruct, Fortran::parser::OpenMPLoopConstruct, Fortran::parser::OpenMPBlockConstruct, Fortran::parser::OpenMPAtomicConstruct, Fortran::parser::OpenMPDeclarativeAllocate, Fortran::parser::OpenMPExecutableAllocate, Fortran::parser::OpenMPAllocatorsConstruct, Fortran::parser::OpenMPCriticalConstruct> const&)>, std::tuple<std::variant<Fortran::parser::OpenMPStandaloneConstruct, Fortran::parser::OpenMPSectionsConstruct, Fortran::parser::OpenMPSectionConstruct, Fortran::parser::OpenMPLoopConstruct, Fortran::parser::OpenMPBlockConstruct, Fortran::parser::OpenMPAtomicConstruct, Fortran::parser::OpenMPDeclarativeAllocate, Fortran::parser::OpenMPExecutableAllocate, Fortran::parser::OpenMPAllocatorsConstruct, Fortran::parser::OpenMPCriticalConstruct> const&>, std::integer_sequence<unsigned long, 5ul>>::__visit_invoke(Fortran::common::visitors<genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda'(Fortran::parser::OpenMPStandaloneConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda0'(Fortran::parser::OpenMPSectionsConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda1'(Fortran::parser::OpenMPSectionConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda2'(Fortran::parser::OpenMPLoopConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda3'(Fortran::parser::OpenMPDeclarativeAllocate const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda4'(Fortran::parser::OpenMPExecutableAllocate const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda5'(Fortran::parser::OpenMPAllocatorsConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda6'(Fortran::parser::OpenMPBlockConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda7'(Fortran::parser::OpenMPAtomicConstruct const&), genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::'lambda8'(Fortran::parser::OpenMPCriticalConstruct const&)>&&, std::variant<Fortran::parser::OpenMPStandaloneConstruct, Fortran::parser::OpenMPSectionsConstruct, Fortran::parser::OpenMPSectionConstruct, Fortran::parser::OpenMPLoopConstruct, Fortran::parser::OpenMPBlockConstruct, Fortran::parser::OpenMPAtomicConstruct, Fortran::parser::OpenMPDeclarativeAllocate, Fortran::parser::OpenMPExecutableAllocate, Fortran::parser::OpenMPAllocatorsConstruct, Fortran::parser::OpenMPCriticalConstruct> const&) OpenMP.cpp:0:0
- omitted -
#22 0x0000000004791210 (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#23 0x0000000004784604 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x4784604)
#24 0x000000000472c29c Fortran::frontend::CodeGenAction::beginSourceFileAction() (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x472c29c)
#25 0x0000000004110e68 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x4110e68)
#26 0x0000000004105b00 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x4105b00)
#27 0x0000000004115f78 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x4115f78)
#28 0x0000000003d2e4a8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x3d2e4a8)
#29 0x0000000003cb6890 main (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x3cb6890)
#30 0x000040003ee14384 __libc_start_main (/lib64/libc.so.6+0x24384)
#31 0x0000000003d2d32c _start (/lustre/home/ohno/LLVM_20240307/release/bin/flang-new+0x3d2d32c)
flang-new: error: unable to execute command: Aborted (core dumped)
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 19.0.0git (https://github.com/llvm/llvm-project.git 00efb343529cce025055ca8284a61b22b48924c9)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /lustre/home/ohno/LLVM_20240307/release/bin
flang-new: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-new: note: diagnostic msg: /tmp/omp_atomic_015_2-9f909d
flang-new: note: diagnostic msg: /tmp/omp_atomic_015_2-9f909d.sh
flang-new: note: diagnostic msg:
********************
$
```
```
$ cat /tmp/omp_atomic_015_2-9f909d
#line "./omp_atomic_015_2.f90" 1
program main
character::char,x
char="a"
x="b"
!$omp parallel
!$omp atomic
char=MAX(char,x)
!$omp end parallel
#line 20
end program main
$
```
```
$ cat /tmp/omp_atomic_015_2-9f909d.sh
# Crash reproducer for clang version 19.0.0git (https://github.com/llvm/llvm-project.git 00efb343529cce025055ca8284a61b22b48924c9)
# Driver args: "-fopenmp" "-L/lustre/home/ohno/LLVM_20240307/release/lib" "omp_atomic_015_2.f90"
# Original command: "/lustre/home/ohno/LLVM_20240307/release/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-fopenmp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-feature" "+fp-armv8" "-target-feature" "+neon" "-mframe-pointer=non-leaf" "-o" "/tmp/omp_atomic_015_2-dc6014.o" "-x" "f95-cpp-input" "omp_atomic_015_2.f90"
"/lustre/home/ohno/LLVM_20240307/release/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-fopenmp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-feature" "+fp-armv8" "-target-feature" "+neon" "-mframe-pointer=non-leaf" "-x" "f95-cpp-input" "omp_atomic_015_2-9f909d"
$
```
```
$ gfortran -fopenmp omp_atomic_015_2.f90
omp_atomic_015_2.f90:7:18:
7 | char=MAX(char,x)
| 1
Error: !$OMP ATOMIC statement must set a scalar variable of intrinsic type at (1)
$
```
```
$ export OMP_NUM_THREADS=2; ifort -qopenmp -diag-disable=10448 omp_atomic_015_2.f90; ./a.out
$
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFtT47jy_zTiReWUIzu3Bx5CIDNTBQcKmDn7lpLldqIdWfJKcoBv_y_Jl8QhhDDD1n_3VFKZIW63Wq1ft1qXUosaw5cS4BwNLtDg8oyWdqX0uVpJFWR_niUqfTlHw7D-hpconP4AbbiSWGU4E1QuAwlPGEVT3J_0wl6IyDgMIUuiOBqQCWMQkkE4GDA6JuOYDvsJIUk8npCYTRCZIDKfTjVbDeNK-E5d1f__XYHEaBgaSy3kIC0ahph7ErUq58w9MyWN1SWzmBv35mb6R8VmNZeGM5yVklmn-NNKGcBUL0sny7FTV4CtqKbMgnbF1lRzmghAZIbtCjBTecEF9eUt6JxLasFgmkilcyrES29b4dl-7obX6e6EZkoI9cTlEjNqwKCoLh7g2YrKJbRa4Eyr_JWOVjkSlxaWFUFpR9BAhXtyqivdSHwDKw25WkO6rfxjRzOqwetqwVhcaLXUNHeS543p3cOXTGmrqcRUppi7h23AEJnDM7DSw6HBlMJ20FJ5sah0W4T9wYL0sknYYtE6RF1FRa0VwTnlNQVvoImmKJq6R0Rmz_Vb_xpFl4gQighpqM8VKWlJiPQRiVVe4IJqKgSIXXqNYlesczYybuskk91SINNdif5_T3_VmL29YJdI4q3-F2SqAJkXeC-YVVVaKwcOFoohMnZNJvMnpX8iMl-pHBCZu26PyHz2iMjcGRyRuYPdPRWIzDUUWqUlA-1f5MVC5UUUuoL7aiUERdMYRdPIARJtmQgnZZaBxmalSpHiBFyPmK2ovlDPP6goodL4-vrHDb66v7-9d6VporTlclm9u7u-mj5cYVMmObeY4qRcYg2Fcz2r8MrawvcnMkdkvuR2VSY9pnJE5kKsmz9BodWfwFz7uDElGETmlQtLJsq0cnymqVnhhLKfVlMGtec-WMp-4rTMi9ZTwx72n7vanE2AcXpgV2NprIZXYLtGLkhI4jAKRx5kAdQ4hoS7rrNtY9bHgdW8EIAp9VEzKOVPqZ5kILgsn4OlLHEAObeBSv7cOEWQaxCK-d4Y5CoFgQvOcFBwFghYg8CkeuAmKDjgwFK9BBuwosRLkKAdc03LgNpSA0bkQpVWcAlBZXmzj2U9pvvIWRFQna_H-95JUBIHeaZpDkGhXHxzXUwqGQigGQ6UQ9PmxR6_C1I2DPtxT-HgGWeTQcCKIuCyKO2BjoERiUIcPofNJw5TFqVj7F3FRxPzYqofd5pL643_6LwBkfGGSdOnhXI2dhFy6OIilxaRCfa97bftj8hF-Fyr1kYYp3t_R3dKINyn-30pH_hSUvGVylSANl6vz1bP1d5Rj-yqFw9j3FEEkXGNVEU2PVa4fhX6f62gqBYUh2EYwWQcjqgb5caV669To3pG9fpekRHtKhF3ygIZklGMNeUGmubzZBhXf5kTM_RiIsfXETToCuqHlLAqNB0URBxfR9CwC8twMEy3rVbFskVGLRWLKnRv-9qDm9Us7yFzbpYoJT7dkF6hjsajXY1HZFtjLo2lQiwSmi6oEIpVai9WrZHXiqeVklM_9fME_zDzY0M1L6kJdaPcz5bt05s4It0mjjtNHA2yUco-tc5KZKfOSadOSlIKMc54PY-5erYgU0irYXEfaZaLhvlCKPZzWo87LXLRFSLjN5mG_vu5yFaN2JoGRf1ugKXxAMKxVw_P64mdV06op2YGtwR5mxdTxqY-an8vUmrhoV0CRLNOwYJq05R0xXyZmaClgWtubAXCW1VNE-MGdztTcg3ajTdV_N6AVmHdIT2-FJ7ypho_mtl77dbDg9xXz4U-jnNP8zo955cLbtp2XU8WutTbAnRNbjpjjxtNe9FgNOo7ym0B8ubudfh2HtDf8YBh5tZZR3hANeE-xt4fbf2vecX7NXTsuA_VCjvPVWhV9KLhkAzeA5DsBIpJfxRjY9NK-GKRgqVcNE9-7ej6SfW4BLlYW-eOC54XAkWzI0velMLyBdWavqBo9iqEd8BgKs9V_XvNDbdKGxTNnB1v7n4X6S3-h5f8hhb7mAzkVFrO6inPQ_M4U9LC896utSW3yOpWX62pKGtbvWNzb7BZu6DeWH5SMSAyEjRPUorIaBeC14IeLJUpFUrCfpFkhk9oOjTD4-AEv-VjTmAeBLP_ETBPWB7EkhyF5bVSxQnIg0BGRwF5CUxQNytZw1T4PQ44wbkPzvgoOK_8Rq2bJpzQPITm4Cg0awyVPg1Ah-EcHgWnX7mekDyI5Og4x6wWQicoD0E5PgrKmeaWMyrekHjV7LDMNku1doF1YEn71mrgiLa9mvQeX-YjRTpTmCP4u733iAI7TnpEiT2TgSNKvR7zjlHudWg_xu12nQVFV6_8ZctTbFkI2F6rn1zn5Dr7XGfHb-pDAQsDf5UgmXOhUvqTHikWSi4d86AUrpj7Tqt9H264XXC5Vj_htLNz2tk57ez8-8E87eycdnb-cUCednZOOzv_WDRPOzunnZ1_JJKnnZ3Tzs5pef7vXJ4fOtlRH9BXObcWUhx0znyTiHSPfYwmfdL3xx6pVPIlV6XBkuZgCn8ctfb0OdebDrzpWvNSsgN9v-1z8zpV4pr_hO-SN0240Dxdwt7DKSTqajmOh2H8Zue-dj-5XFYCt18f6JTNueo3z0i9E3A61vjUM32-sdun3UjcRYMwMmFdZTPttJJ13JipFL6AnHrUK1ICSy4fVKkZzLmA-tXnn9itlOtoP-ho3--HMBwf0n5ePx1Qf9ewu83PCy5Af5PGUun8-LV191f5TRaldRX8bdatmt_Bp3t0tx8OkjA8bN2d5nlqlROzMezxAP8NjfRt6DRytOMEg2x00Anq5mzaum5Pu33M9J9-zrfSvdO4zjnfKCUQ0zHOWH_hc3C2D1pPtaYv95ChaNY9olztuO4cW_5UxWu9Oop3DgtHLBmOJ6FPHPrUiiu52xW3CRLNufc4Gsd4sRA8YQtjqbaLbS32n4F3ZTpC-ztmSCPCcCXuk4F0ktuqN2-jKW7TokrpD-tahWtXxkzlOfWOiqeJ0m50RmTMlAaf-QPpOxI9FTf-3ojDGeUCUpyWvjLjUx6c4NIADtaeBoD5VgfarQWv6xzMKuVyyT1cH0t66rlSH8nUrJIDfbqOT8d6KwGpySLUQFPsk40ce6EMr5PxvlWJApBe-oOxv5wb9Rp5qawLrjjldCmVsZzh3CxRm0tIfuO7NSurc8-mj4_T2Vf8-PUKz2-vr2__--0_X_D82_XVA3689eSL71_w_dXd7f1jq8OdT6JjYAyk2PjxEZGxcaHD-QY1RjFOnavpUmLDNC9sy6ABV9PYFFPbijwOggNJU5NsEk7STxXWM6tfsM9nWYkcyibek0fJqD0SHkQiwSVgREjv7bxH3K_TO_bkqfrPO8mqDcurhNXfzlfdkvwrOat160m4Le-NHNa_wwitWyES4ZnPzNwkpeJMacx8zP1_i49Or0vN16Ax1cs69ZM0iZjONdzj9a-EPMGTuvxb2batBreaL7kbVbZGsCrf9_fH06oFGes3P6uE1Prp7VGh5m6SU1tBXWReJarWLwrOGpY2abUmkO0XVQJrq1qbxlpT6mTWnfd18mlNfZ3Y-h77ekzfY2kSXt_jk-DG-xqLt1JgGwbVlnsvHbYp8Vz_6KTGHuNVJ_f533OfjzhDMwhuoswHo_uyuSLiiJsK3rgQYoSiaX-8M1vAI4xGs3dHtWqkqjh3PvVYfdXM2qsB8PbmDk8fb2--zXB77QjOS2OxAYspNowKqjc3dKhs66oR-1IA9sPZuL81NMT4Y5jBs7_P4PbmbvGf7zeLx6_3V9PLBxRdEhRd1PdsBH81Of5uUhWk3PhrS6LLfhjH4_0gRxfYTV5oT5X2sDnP0vMonUQTegbn_VE_HEVhNIjOVud0mKUpDCbxJAqTARCgzK0MJ32YMBZFgzN-XsWD_jgkAxJFvWQyYeNwwmI2CEdJTFEcQk656LlBt6f08szfwXA-HgwmwzNBExDG30pDSNvHEZk5f3XRxD0NLs_0uR-zk3JpUBwKbqzZCLTcCn-zjb-sBA0u0eCi2oZFg0u8fUmLX7LhpxXILWtzWU-eunfL3Ez_OPZWmc2FF42fnJVanP_67RQenP8LAAD__9MHGTw">