From 658f6fdb55b125b6b41f13efa272abd65bdc6710 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 19 Nov 2023 19:14:17 -0500 Subject: [PATCH] MIR enums This adds basic support for enums in the MIR backend. In particular: * There is now a `mir_enum_value : MIRAdt -> String -> [MIRValue] -> MIRValue` function that constructs a value representing a specific enum variant, where the `String` indicates which variant to use. * The `mir_fresh_expanded_value` command can now create symbolic enum values. Implementation-wise, much of the complexity in this patch arises from the fact that MIR enums are represented with `VariantType`s at the Crucible level, which are a fair bit more involved than the `StructType`s used to power MIR structs. Some highlights of the implementation are: * There is now a new `EnumShape` constructor for `TypeShape`, which is in turn defined in terms of a new `VariantShape` data type that characterizes the shapes of all the fields in an enum variant. * There is a `MirSetupEnum` data type (exported by `SAWScript.Crucible.MIR.MethodSpecIR`) which categorizes the different forms of enum `MIRValue`s that one can construct. Currently, there is `MirSetupEnumVariant` (which is what `mir_enum_value` returns) and `MirSetupEnumSymbolic` (which is what `mir_fresh_expanded_value` returns when it creates a fresh enum value). * The implementation of symbolic enum values in particular is somewhat complicated. I have written `Note [Symbolic enums]` to go over the general approach and highlight some potential pitfalls in implementing them. * For now, there is no `crux-mir-comp` support for enums. We could conceivable add support, but there is not a pressing need to do so right now. I have opened https://github.com/GaloisInc/saw-script/issues/1990 as a reminder to do this later. This checks off one box in #1859. --- .../src/Mir/Compositional/Builder.hs | 11 + .../src/Mir/Compositional/Clobber.hs | 4 + .../src/Mir/Compositional/Override.hs | 2 + crux-mir-comp/src/Mir/Cryptol.hs | 2 + doc/manual/manual.md | 160 +++++- doc/manual/manual.pdf | Bin 587259 -> 593372 bytes .../Makefile | 13 + .../test.linked-mir.json | 1 + .../test.rs | 14 + .../test.saw | 43 ++ .../test.sh | 3 + intTests/test_mir_verify_enums/Makefile | 13 + .../test.linked-mir.json | 1 + intTests/test_mir_verify_enums/test.rs | 35 ++ intTests/test_mir_verify_enums/test.saw | 78 +++ intTests/test_mir_verify_enums/test.sh | 3 + saw-remote-api/CHANGELOG.md | 1 + saw-remote-api/python/CHANGELOG.md | 1 + saw-remote-api/python/saw_client/crucible.py | 29 ++ .../saw/test-files/mir_enums.linked-mir.json | 1 + .../python/tests/saw/test-files/mir_enums.rs | 35 ++ ..._fresh_expanded_value_enum.linked-mir.json | 1 + .../mir_fresh_expanded_value_enum.rs | 14 + .../python/tests/saw/test_mir_enums.py | 136 +++++ .../saw/test_mir_fresh_expanded_value_enum.py | 99 ++++ saw-remote-api/src/SAWServer.hs | 1 + .../src/SAWServer/Data/SetupValue.hs | 3 + .../src/SAWServer/JVMCrucibleSetup.hs | 2 + .../src/SAWServer/LLVMCrucibleSetup.hs | 2 + .../src/SAWServer/MIRCrucibleSetup.hs | 22 +- saw-script.cabal | 1 + src/SAWScript/Crucible/Common/MethodSpec.hs | 19 +- src/SAWScript/Crucible/Common/Setup/Value.hs | 6 + src/SAWScript/Crucible/JVM/Override.hs | 2 + .../Crucible/JVM/ResolveSetupValue.hs | 2 + src/SAWScript/Crucible/JVM/Setup/Value.hs | 1 + src/SAWScript/Crucible/LLVM/Override.hs | 4 + .../Crucible/LLVM/ResolveSetupValue.hs | 4 + src/SAWScript/Crucible/LLVM/Setup/Value.hs | 1 + src/SAWScript/Crucible/MIR/Builtins.hs | 204 +++++++- src/SAWScript/Crucible/MIR/MethodSpecIR.hs | 3 + src/SAWScript/Crucible/MIR/Override.hs | 190 +++++-- .../Crucible/MIR/ResolveSetupValue.hs | 476 ++++++++++++++++-- src/SAWScript/Crucible/MIR/Setup/Value.hs | 212 ++++++++ src/SAWScript/Crucible/MIR/TypeShape.hs | 120 ++++- src/SAWScript/Interpreter.hs | 9 + 46 files changed, 1873 insertions(+), 111 deletions(-) create mode 100644 intTests/test_mir_fresh_expanded_value_enum/Makefile create mode 100644 intTests/test_mir_fresh_expanded_value_enum/test.linked-mir.json create mode 100644 intTests/test_mir_fresh_expanded_value_enum/test.rs create mode 100644 intTests/test_mir_fresh_expanded_value_enum/test.saw create mode 100755 intTests/test_mir_fresh_expanded_value_enum/test.sh create mode 100644 intTests/test_mir_verify_enums/Makefile create mode 100644 intTests/test_mir_verify_enums/test.linked-mir.json create mode 100644 intTests/test_mir_verify_enums/test.rs create mode 100644 intTests/test_mir_verify_enums/test.saw create mode 100755 intTests/test_mir_verify_enums/test.sh create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_enums.rs create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json create mode 100644 saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs create mode 100644 saw-remote-api/python/tests/saw/test_mir_enums.py create mode 100644 saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py diff --git a/crucible-mir-comp/src/Mir/Compositional/Builder.hs b/crucible-mir-comp/src/Mir/Compositional/Builder.hs index b8271368d6..c3009850e7 100644 --- a/crucible-mir-comp/src/Mir/Compositional/Builder.hs +++ b/crucible-mir-comp/src/Mir/Compositional/Builder.hs @@ -629,6 +629,7 @@ substMethodSpec sc sm ms = do MS.SetupStruct b svs -> MS.SetupStruct b <$> mapM goSetupValue svs MS.SetupTuple b svs -> MS.SetupTuple b <$> mapM goSetupValue svs MS.SetupSlice slice -> MS.SetupSlice <$> goSetupSlice slice + MS.SetupEnum enum_ -> MS.SetupEnum <$> goSetupEnum enum_ MS.SetupArray b svs -> MS.SetupArray b <$> mapM goSetupValue svs MS.SetupElem b sv idx -> MS.SetupElem b <$> goSetupValue sv <*> pure idx MS.SetupField b sv name -> MS.SetupField b <$> goSetupValue sv <*> pure name @@ -644,6 +645,14 @@ substMethodSpec sc sm ms = do goSetupCondition (MS.SetupCond_Ghost loc gg tt) = MS.SetupCond_Ghost loc gg <$> goTypedTerm tt + goSetupEnum (MirSetupEnumVariant adt variant variantIdx svs) = + MirSetupEnumVariant adt variant variantIdx <$> + mapM goSetupValue svs + goSetupEnum (MirSetupEnumSymbolic adt discr variants) = + MirSetupEnumSymbolic adt <$> + goSetupValue discr <*> + mapM (mapM goSetupValue) variants + goSetupSlice (MirSetupSliceRaw ref len) = MirSetupSliceRaw <$> goSetupValue ref <*> goSetupValue len goSetupSlice (MirSetupSlice arr) = @@ -742,6 +751,8 @@ regToSetup bak p eval shp rv = go shp rv refSV <- go refShp refRV lenSV <- go lenShp lenRV pure $ MS.SetupSlice $ MirSetupSliceRaw refSV lenSV + go (EnumShape _ _ _ _ _) _ = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _ = error "Function pointers not currently supported in overrides" diff --git a/crucible-mir-comp/src/Mir/Compositional/Clobber.hs b/crucible-mir-comp/src/Mir/Compositional/Clobber.hs index f9bebc062d..e2288de83c 100644 --- a/crucible-mir-comp/src/Mir/Compositional/Clobber.hs +++ b/crucible-mir-comp/src/Mir/Compositional/Clobber.hs @@ -62,6 +62,8 @@ clobberSymbolic sym loc nameStr shp rv = go shp rv ", but got Any wrapping " ++ show tpr where shpTpr = StructRepr $ fmapFC fieldShapeType flds go (TransparentShape _ shp) rv = go shp rv + go (EnumShape _ _ _ _ _) _rv = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _rv = error "Function pointers not currently supported in overrides" go (RefShape _ _ _ _) _rv = error "clobberSymbolic: RefShape NYI" @@ -120,6 +122,8 @@ clobberImmutSymbolic sym loc nameStr shp rv = go shp rv ref' <- go refShp ref len' <- go lenShp len pure $ Ctx.Empty Ctx.:> RV ref' Ctx.:> RV len' + go (EnumShape _ _ _ _ _) _rv = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _rv = error "Function pointers not currently supported in overrides" diff --git a/crucible-mir-comp/src/Mir/Compositional/Override.hs b/crucible-mir-comp/src/Mir/Compositional/Override.hs index ea63c2122f..e83d18eea6 100644 --- a/crucible-mir-comp/src/Mir/Compositional/Override.hs +++ b/crucible-mir-comp/src/Mir/Compositional/Override.hs @@ -544,6 +544,8 @@ setupToReg sym sc termSub regMap allocMap shp sv = go shp sv refRV <- go refShp refSV lenRV <- go lenShp lenSV pure $ Ctx.Empty Ctx.:> RV refRV Ctx.:> RV lenRV + go (EnumShape _ _ _ _ _) _ = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _ = error "Function pointers not currently supported in overrides" go shp sv = error $ "setupToReg: type error: bad SetupValue for " ++ show (shapeType shp) ++ diff --git a/crux-mir-comp/src/Mir/Cryptol.hs b/crux-mir-comp/src/Mir/Cryptol.hs index 08bf240b29..df09f9b4dc 100644 --- a/crux-mir-comp/src/Mir/Cryptol.hs +++ b/crux-mir-comp/src/Mir/Cryptol.hs @@ -337,6 +337,8 @@ munge sym shp rv = do AnyValue tpr <$> goFields flds rvs | otherwise = error $ "munge: StructShape AnyValue with NYI TypeRepr " ++ show tpr go (TransparentShape _ shp) rv = go shp rv + go (EnumShape _ _ _ _ _) _ = + error "Enums not currently supported in overrides" go (FnPtrShape _ _ _) _ = error "Function pointers not currently supported in overrides" -- TODO: RefShape diff --git a/doc/manual/manual.md b/doc/manual/manual.md index b6e5beb656..3c7be03800 100644 --- a/doc/manual/manual.md +++ b/doc/manual/manual.md @@ -2117,12 +2117,9 @@ mir_verify : ### Running a MIR-based verification -`mir_verify` requires `enable_experimental` in order to be used. Moreover, -some parts of `mir_verify` are not currently implemented, so it is possible -that using `mir_verify` on some programs will fail. Features that are not yet -implemented include the following: - -* The ability to construct MIR `enum` values in specifications +(Note: API functions involving MIR verification require `enable_experimental` +in order to be used. As such, some parts of this API may change before being +finalized.) The `String` supplied as an argument to `mir_verify` is expected to be a function _identifier_. An identifier is expected adhere to one of the following @@ -2212,6 +2209,14 @@ internally. The second parameter is the LLVM, Java, or MIR type of the variable. The resulting `Term` can be used in various subsequent commands. +Note that the second parameter to `{llvm,jvm,mir}_fresh_var` must be a type +that has a counterpart in Cryptol. (For more information on this, refer to the +"Cryptol type correspondence" section.) If the type does not have a Cryptol +counterpart, the function will raise an error. If you do need to create a fresh +value of a type that cannot be represented in Cryptol, consider using a +function such as `llvm_fresh_expanded_val` (for LLVM verification) or +`mir_fresh_expanded_value` (for MIR verification). + LLVM types are built with this set of functions: * `llvm_int : Int -> LLVMType` @@ -2306,6 +2311,86 @@ The `llvm_term`, `jvm_term`, and `mir_term` functions create a `SetupValue`, * `jvm_term : Term -> JVMValue` * `mir_term : Term -> MIRValue` +The value that these functions return will have an LLVM, JVM, or MIR type +corresponding to the Cryptol type of the `Term` argument. (For more information +on this, refer to the "Cryptol type correspondence" section.) If the type does +not have a Cryptol counterpart, the function will raise an error. + +### Cryptol type correspondence + +The `{llvm,jvm,mir}_fresh_var` functions take an LLVM, JVM, or MIR type as an +argument and produces a `Term` variable of the corresponding Cryptol type as +output. Similarly, the `{llvm,jvm,mir}_term` functions take a Cryptol `Term` as +input and produce a value of the corresponding LLVM, JVM, or MIR type as +output. This section describes precisely which types can be converted to +Cryptol types (and vice versa) in this way. + +#### LLVM verification + +The following LLVM types correspond to Cryptol types: + +* `llvm_alias `: Corresponds to the same Cryptol type as the type used + in the definition of ``. +* `llvm_array `: Corresponds to the Cryptol sequence `[][]`, + where `` is the Cryptol type corresponding to ``. +* `llvm_int `: Corresponds to the Cryptol word `[]`. +* `llvm_struct [, ..., ]` and `llvm_packed_struct [, ..., ]`: + Corresponds to the Cryptol tuple `(, ..., )`, where `` + is the Cryptol type corresponding to `` for each `i` ranging from `1` + to `n`. + +The following LLVM types do _not_ correspond to Cryptol types: + +* `llvm_double` +* `llvm_float` +* `llvm_pointer` + +#### JVM verification + +The following Java types correspond to Cryptol types: + +* `java_array `: Corresponds to the Cryptol sequence `[][]`, + where `` is the Cryptol type corresponding to ``. +* `java_bool`: Corresponds to the Cryptol `Bit` type. +* `java_byte`: Corresponds to the Cryptol `[8]` type. +* `java_char`: Corresponds to the Cryptol `[16]` type. +* `java_int`: Corresponds to the Cryptol `[32]` type. +* `java_long`: Corresponds to the Cryptol `[64]` type. +* `java_short`: Corresponds to the Cryptol `[16]` type. + +The following Java types do _not_ correspond to Cryptol types: + +* `java_class` +* `java_double` +* `java_float` + +#### MIR verification + +The following MIR types correspond to Cryptol types: + +* `mir_array `: Corresponds to the Cryptol sequence `[][]`, + where `` is the Cryptol type corresponding to ``. +* `mir_bool`: Corresponds to the Cryptol `Bit` type. +* `mir_char`: Corresponds to the Cryptol `[32]` type. +* `mir_i8` and `mir_u8`: Corresponds to the Cryptol `[8]` type. +* `mir_i16` and `mir_u16`: Corresponds to the Cryptol `[16]` type. +* `mir_i32` and `mir_u32`: Corresponds to the Cryptol `[32]` type. +* `mir_i64` and `mir_u64`: Corresponds to the Cryptol `[64]` type. +* `mir_i128` and `mir_u128`: Corresponds to the Cryptol `[128]` type. +* `mir_isize` and `mir_usize`: Corresponds to the Cryptol `[32]` type. +* `mir_tuple [, ..., ]`: Corresponds to the Cryptol tuple + `(, ..., )`, where `` is the Cryptol type corresponding + to `` for each `i` ranging from `1` to `n`. + +The following MIR types do _not_ correspond to Cryptol types: + +* `mir_adt` +* `mir_f32` +* `mir_f64` +* `mir_ref` and `mir_ref_mut` +* `mir_slice` +* `mir_str` + ## Executing Once the initial state has been configured, the `{llvm,jvm,mir}_execute_func` @@ -2926,6 +3011,15 @@ construct compound values: * `mir_array_value : MIRType -> [MIRValue] -> MIRValue` constructs an array of the given type whose elements consist of the given values. Supplying the element type is necessary to support length-0 arrays. +* `mir_enum_value : MIRAdt -> String -> [MIRValue] -> MIRValue` constructs an + enum using a particular enum variant. The `MIRAdt` arguments determines what + enum type to create, the `String` value determines the name of the variant to + use, and the `[MIRValue]` list are the values to use as elements in the + variant. + + See the "Finding MIR algebraic data types" section (as well as the "Enums" + subsection) for more information on how to compute a `MIRAdt` value to pass + to `mir_enum_value`. * `mir_slice_value : MIRValue -> MIRValue`: see the "MIR slices" section below. * `mir_slice_range_value : MIRValue -> Int -> Int -> MIRValue`: see the "MIR slices" section below. @@ -2933,7 +3027,7 @@ construct compound values: with the given list of values as elements. The `MIRAdt` argument determines what struct type to create. - See the "Finding MIR alegraic data types" section for more information on how + See the "Finding MIR algebraic data types" section for more information on how to compute a `MIRAdt` value to pass to `mir_struct_value`. * `mir_tuple_value : [MIRValue] -> MIRValue` construct a tuple with the given list of values as elements. @@ -3040,7 +3134,7 @@ SAW's support for slices is currently limited: If either of these limitations prevent you from using SAW, please file an issue [on GitHub](https://github.com/GaloisInc/saw-script/issues). -### Finding MIR alegraic data types +### Finding MIR algebraic data types We collectively refer to MIR `struct`s and `enum`s together as _algebraic data types_, or ADTs for short. ADTs have identifiers to tell them apart, and a @@ -3102,9 +3196,53 @@ s_8_16 <- mir_find_adt m "example::S" [mir_u8, mir_u16]; s_32_64 <- mir_find_adt m "example::S" [mir_u32, mir_u64]; ~~~~ -The `mir_adt` command (for constructing a struct type) and `mir_struct_value` -(for constructing a struct value) commands in turn take a `MIRAdt` as an -argument. +The `mir_adt` command (for constructing a struct type), `mir_struct_value` (for +constructing a struct value), and `mir_enum_value` (for constructing an enum +value) commands in turn take a `MIRAdt` as an argument. + +#### Enums + +In addition to taking a `MIRAdt` as an argument, `mir_enum_value` also takes a +`String` representing the name of the variant to construct. The variant name +should be a short name such as `"None"` or `"Some"`, and not a full identifier +such as `"core::option::Option::None"` or `"core::option::Option::Some"`. This +is because the `MIRAdt` already contains the full identifiers for all of an +enum's variants, so SAW will use this information to look up a variant's +identifier from a short name. Here is an example of using `mir_enum_value` in +practice: + +~~~~ .rs +pub fn n() -> Option { + None +} + +pub fn s(x: u32) -> Option { + Some(x) +} +~~~~ +~~~~ +m <- mir_load_module "example.linked-mir.json"; + +option_u32 <- mir_find_adt m "core::option::Option" [mir_u32]; + +let n_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value option_u32 "None" []); +}; + +let s_spec = do { + x <- mir_fresh_var "x" mir_u32; + + mir_execute_func [mir_term x]; + + mir_return (mir_enum_value option_u32 "Some" [mir_term x]); +}; +~~~~ + +Note that `mir_enum_value` can only be used to construct a specific variant. If +you need to construct a symbolic enum value that can range over many potential +variants, use `mir_fresh_expanded_value` instead. ### Bitfields diff --git a/doc/manual/manual.pdf b/doc/manual/manual.pdf index 67f1cbdc2db4c2a4e2ae61618dac5f03424dbeab..0a1a4b28301866530a4b3b0041205707b86f8f24 100644 GIT binary patch delta 193144 zcmZU(Q;;T6+ofH$ZQHhO+qUheY}>YNv&*(^tE;N3>+kpd{)w5GImnEax$|I09;_?Y z+V|Hr=}rz=;}In&2N!q7BMt~PKu^~-hYKy>z2N}499EoDDB+T0l4AL$yp7Y}>Px5* zk9F(-CU^8FfSe4fJYMveOMWfZ5-!~gcz^N3jRB?J*}QZ75h&7e9Vi?Tp6~;~JqURg zLJ$HW5LhWKZn?SoGls#-mj!hE%kDwhubM{J&64xemlLO#zj&|^;kD2b5K93uyg&?G z$H;?&Yd8aV=IU#<3r*CP%iTWB;bBX>R`e zRc0PTDqB)z^RY^P_b>rcvAo~jC&sP-uee1r{692m2YdtT}FKa*#pcULUu7e9+6T?e9 z6N76MWo9531yV-wCUnI>7XblgL3D&AkPxR6Bkg8pdc+G(x~R6R;^Dlh)^b0#9y_9= zOErj!51-BoE2OT4c+4YrE{$fSqv?#FI5by@2MMfN(9-d^uHRd8GWeSz{-}w0NR`TI zJ^<^=QQz|gLM*k_zmkkuw%)9*`y{aE>Sql3gpc8ej2<(!g_$peYEk7pyk@Y-HI3l2 zY`Tl;o+P~e(rGFM{Fy{972BfsrHc7v8G=35z;B*#OCb~r;FvOETQvpziXPJo%BOSF z&a?^V?&Gpmk0U#$JD-A{J9Rs_?I;Rzf)q?)JQq*D01`tLR!1|}qY9*%T4I(ZRTk!7 z`Fe)Wm4-AB>@{B$QHCuFaKsm+J@mqbK2JHo&gbAZaFSt&;JeDps_-qAlsXfdA7P${ zwFer*V6uD$h(Y2aI*PuA^vWDRWkHUSk|~Az%0A7TTHA$7iz;GeBpsBKM-y%Gs&$MG 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�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 eKRCoCC?q1t-Gl#_pw) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(x: Option) { + f(x); +} + +pub fn gg(x: Option) { + g(x); +} diff --git a/intTests/test_mir_fresh_expanded_value_enum/test.saw b/intTests/test_mir_fresh_expanded_value_enum/test.saw new file mode 100644 index 0000000000..d3c9712f2c --- /dev/null +++ b/intTests/test_mir_fresh_expanded_value_enum/test.saw @@ -0,0 +1,43 @@ +enable_experimental; + +m <- mir_load_module "test.linked-mir.json"; + +let option_u32_adt = mir_find_adt m "core::option::Option" [mir_u32]; + +let f_none_spec = do { + let x = mir_enum_value option_u32_adt "None" []; + + mir_execute_func [x]; + + mir_return (mir_term {{ 27 : [32] }}); +}; + +let f_some_spec = do { + ret <- mir_fresh_var "ret" mir_u32; + let x = mir_enum_value option_u32_adt "Some" [mir_term ret]; + + mir_execute_func [x]; + + mir_return (mir_term ret); +}; + +let g_spec = do { + x <- mir_fresh_expanded_value "x" (mir_adt option_u32_adt); + + mir_execute_func [x]; +}; + +let gg_spec = do { + xx <- mir_fresh_expanded_value "xx" (mir_adt option_u32_adt); + + mir_execute_func [xx]; +}; + +f_none_ov <- mir_verify m "test::f" [] false f_none_spec z3; +f_some_ov <- mir_verify m "test::f" [] false f_some_spec z3; + +mir_verify m "test::g" [] false g_spec z3; +g_ov <- mir_verify m "test::g" [f_none_ov, f_some_ov] false g_spec z3; + +mir_verify m "test::gg" [] false gg_spec z3; +mir_verify m "test::gg" [g_ov] false gg_spec z3; diff --git a/intTests/test_mir_fresh_expanded_value_enum/test.sh b/intTests/test_mir_fresh_expanded_value_enum/test.sh new file mode 100755 index 0000000000..2315cc233c --- /dev/null +++ b/intTests/test_mir_fresh_expanded_value_enum/test.sh @@ -0,0 +1,3 @@ +set -e + +$SAW test.saw diff --git a/intTests/test_mir_verify_enums/Makefile b/intTests/test_mir_verify_enums/Makefile new file mode 100644 index 0000000000..bc6297ae15 --- /dev/null +++ b/intTests/test_mir_verify_enums/Makefile @@ -0,0 +1,13 @@ +all: test.linked-mir.json + +test.linked-mir.json: test.rs + saw-rustc $< + $(MAKE) remove-unused-build-artifacts + +.PHONY: remove-unused-build-artifacts +remove-unused-build-artifacts: + rm -f test libtest.mir libtest.rlib + +.PHONY: clean +clean: remove-unused-build-artifacts + rm -f test.linked-mir.json diff --git a/intTests/test_mir_verify_enums/test.linked-mir.json b/intTests/test_mir_verify_enums/test.linked-mir.json new file mode 100644 index 0000000000..0b503737b6 --- /dev/null +++ b/intTests/test_mir_verify_enums/test.linked-mir.json @@ -0,0 +1 @@ +{"fns":[{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"test.rs:17:5: 17:9"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:17:5: 17:9","variant_index":0}],"terminator":{"kind":"Return","pos":"test.rs:18:2: 18:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"test/f696fd3c::h_none","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"test.rs:30:5: 30:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}},"pos":"test.rs:30:5: 30:11","variant_index":0}],"terminator":{"kind":"Return","pos":"test.rs:31:2: 31:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}]},"name":"test/f696fd3c::i42","return_ty":"ty::Adt::7746688b48f54a60","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"pos":"test.rs:9:8: 9:9","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}},"kind":"Copy"}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"kind":"Move"},"discr_span":"test.rs:9:8: 9:9 !test.rs:9:8: 9:9","kind":"SwitchInt","pos":"test.rs:9:8: 9:9 !test.rs:9:8: 9:9","switch_ty":"ty::bool","targets":["bb2","bb1"],"values":["0"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Deinit","pos":"test.rs:10:11: 10:15"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:10:11: 10:15","variant_index":0}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::935b79106a1ed847"},"kind":"Constant"},"kind":"Call","pos":"test.rs:10:9: 10:16"}},"blockid":"bb1"},{"block":{"data":[{"kind":"Deinit","pos":"test.rs:12:11: 12:19"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:12:11: 12:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"42"},"ty":"ty::u32"},"kind":"Constant"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:12:11: 12:19","variant_index":1}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::935b79106a1ed847"},"kind":"Constant"},"kind":"Call","pos":"test.rs:12:9: 12:20"}},"blockid":"bb2"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"test.rs:14:2: 14:2"}},"blockid":"bb3"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"test/f696fd3c::g","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"test.rs:34:5: 34:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}},"pos":"test.rs:34:5: 34:11","variant_index":1}],"terminator":{"kind":"Return","pos":"test.rs:35:2: 35:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::7746688b48f54a60"}]},"name":"test/f696fd3c::i43","return_ty":"ty::Adt::7746688b48f54a60","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"pos":"test.rs:2:11: 2:12","rhs":{"kind":"Discriminant","ty":"ty::isize","val":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"kind":"Move"},"discr_span":"test.rs:3:9: 3:16","kind":"SwitchInt","pos":"test.rs:2:5: 2:12","switch_ty":"ty::isize","targets":["bb1","bb3","bb2"],"values":["0","1"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"test.rs:4:17: 4:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"27"},"ty":"ty::u32"},"kind":"Constant"}}}],"terminator":{"kind":"Goto","pos":"test.rs:4:17: 4:19","target":"bb4"}},"blockid":"bb1"},{"block":{"data":[],"terminator":{"kind":"Unreachable","pos":"test.rs:2:11: 2:12"}},"blockid":"bb2"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"pos":"test.rs:3:14: 3:15","rhs":{"kind":"Use","usevar":{"data":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}},{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"test.rs:3:20: 3:21","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"kind":"Copy"}}}],"terminator":{"kind":"Goto","pos":"test.rs:3:20: 3:21","target":"bb4"}},"blockid":"bb3"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"test.rs:6:2: 6:2"}},"blockid":"bb4"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}]},"name":"test/f696fd3c::f","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"pos":"test.rs:21:10: 21:11","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}},"kind":"Copy"}}},{"kind":"Deinit","pos":"test.rs:21:5: 21:12"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:21:5: 21:12","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"kind":"Move"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"test.rs:21:5: 21:12","variant_index":1}],"terminator":{"kind":"Return","pos":"test.rs:22:2: 22:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}]},"name":"test/f696fd3c::h_some","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}},"pos":"test.rs:25:11: 25:13","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"isize","size":8,"val":"42"},"ty":"ty::isize"},"kind":"Constant"}}}],"terminator":{"kind":"Return","pos":"test.rs:25:11: 25:13"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}]},"name":"test/f696fd3c::I::I42::{constant#0}","return_ty":"ty::isize","spread_arg":null}],"adts":[{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","orig_substs":["ty::u32"],"repr_transparent":false,"size":8,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"index":0,"kind":"Relative"},"discr_value":"0","fields":[],"inhabited":true,"name":"core/73237d41::option::Option::None"},{"ctor_kind":{"kind":"Fn"},"discr":{"index":1,"kind":"Relative"},"discr_value":"1","fields":[{"name":"core/73237d41::option::Option::Some::0","ty":"ty::u32"}],"inhabited":true,"name":"core/73237d41::option::Option::Some"}]},{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"test/f696fd3c::I::_adtb7803c2264daf0ec[0]","orig_def_id":"test/f696fd3c::I","orig_substs":[],"repr_transparent":false,"size":1,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"kind":"Explicit","name":"test/f696fd3c::I::I42::{constant#0}"},"discr_value":"42","fields":[],"inhabited":true,"name":"test/f696fd3c::I::I42"},{"ctor_kind":{"kind":"Const"},"discr":{"index":1,"kind":"Relative"},"discr_value":"43","fields":[],"inhabited":true,"name":"test/f696fd3c::I::I43"}]}],"statics":[],"vtables":[],"traits":[],"intrinsics":[{"inst":{"def_id":"test/f696fd3c::h_none","kind":"Item","substs":[]},"name":"test/f696fd3c::h_none"},{"inst":{"def_id":"test/f696fd3c::i42","kind":"Item","substs":[]},"name":"test/f696fd3c::i42"},{"inst":{"def_id":"test/f696fd3c::g","kind":"Item","substs":[]},"name":"test/f696fd3c::g"},{"inst":{"def_id":"test/f696fd3c::i43","kind":"Item","substs":[]},"name":"test/f696fd3c::i43"},{"inst":{"def_id":"test/f696fd3c::f","kind":"Item","substs":[]},"name":"test/f696fd3c::f"},{"inst":{"def_id":"test/f696fd3c::h_some","kind":"Item","substs":[]},"name":"test/f696fd3c::h_some"},{"inst":{"def_id":"test/f696fd3c::I::I42::{constant#0}","kind":"Item","substs":[]},"name":"test/f696fd3c::I::I42::{constant#0}"}],"tys":[{"name":"ty::u32","ty":{"kind":"Uint","uintkind":{"kind":"U32"}}},{"name":"ty::Adt::3fa7c2d95c7fce06","ty":{"kind":"Adt","name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","substs":["ty::u32"]}},{"name":"ty::Adt::7746688b48f54a60","ty":{"kind":"Adt","name":"test/f696fd3c::I::_adtb7803c2264daf0ec[0]","orig_def_id":"test/f696fd3c::I","substs":[]}},{"name":"ty::bool","ty":{"kind":"Bool"}},{"name":"ty::FnDef::935b79106a1ed847","ty":{"defid":"test/f696fd3c::f","kind":"FnDef"}},{"name":"ty::isize","ty":{"intkind":{"kind":"Isize"},"kind":"Int"}}],"roots":["test/f696fd3c::f","test/f696fd3c::g","test/f696fd3c::h_none","test/f696fd3c::h_some","test/f696fd3c::i42","test/f696fd3c::i43"]} \ No newline at end of file diff --git a/intTests/test_mir_verify_enums/test.rs b/intTests/test_mir_verify_enums/test.rs new file mode 100644 index 0000000000..e4f25f1e2c --- /dev/null +++ b/intTests/test_mir_verify_enums/test.rs @@ -0,0 +1,35 @@ +pub fn f(x: Option) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(b: bool) -> u32 { + if b { + f(None) + } else { + f(Some(42)) + } +} + +pub fn h_none() -> Option { + None +} + +pub fn h_some(x: u32) -> Option { + Some(x) +} + +pub enum I { + I42 = 42, + I43, +} + +pub fn i42() -> I { + I::I42 +} + +pub fn i43() -> I { + I::I43 +} diff --git a/intTests/test_mir_verify_enums/test.saw b/intTests/test_mir_verify_enums/test.saw new file mode 100644 index 0000000000..aa5b84def5 --- /dev/null +++ b/intTests/test_mir_verify_enums/test.saw @@ -0,0 +1,78 @@ +enable_experimental; + +m <- mir_load_module "test.linked-mir.json"; + +let option_u32_adt = mir_find_adt m "core::option::Option" [mir_u32]; +let i_adt = mir_find_adt m "test::I" []; + +let f_none_spec = do { + let x = mir_enum_value option_u32_adt "None" []; + + mir_execute_func [x]; + + mir_return (mir_term {{ 27 : [32] }}); +}; + +let f_some_spec = do { + let ret = mir_term {{ 42 : [32] }}; + let x = mir_enum_value option_u32_adt "Some" [ret]; + + mir_execute_func [x]; + + mir_return ret; +}; + +let g_spec = do { + b <- mir_fresh_var "b" mir_bool; + + mir_execute_func [mir_term b]; + + mir_return (mir_term {{ if b then 27 else 42 : [32] }}); +}; + +let h_none_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value option_u32_adt "None" []); +}; + +let h_some_spec = do { + x <- mir_fresh_var "x" mir_u32; + + mir_execute_func [mir_term x]; + + mir_return (mir_enum_value option_u32_adt "Some" [mir_term x]); +}; + +let i42_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value i_adt "I42" []); +}; + +let i43_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value i_adt "I43" []); +}; + +// `mir_enum_value` should error if it cannot find a variant name. +let i43_bad_spec = do { + mir_execute_func []; + + mir_return (mir_enum_value i_adt "I44" []); +}; + +f_none_ov <- mir_verify m "test::f" [] false f_none_spec z3; +f_some_ov <- mir_verify m "test::f" [] false f_some_spec z3; + +mir_verify m "test::g" [f_none_ov, f_some_ov] false g_spec z3; + +mir_verify m "test::h_none" [] false h_none_spec z3; +mir_verify m "test::h_some" [] false h_some_spec z3; + +mir_verify m "test::i42" [] false i42_spec z3; +mir_verify m "test::i43" [] false i43_spec z3; +fails ( + mir_verify m "test::i43" [] false i43_bad_spec z3 +); diff --git a/intTests/test_mir_verify_enums/test.sh b/intTests/test_mir_verify_enums/test.sh new file mode 100755 index 0000000000..2315cc233c --- /dev/null +++ b/intTests/test_mir_verify_enums/test.sh @@ -0,0 +1,3 @@ +set -e + +$SAW test.saw diff --git a/saw-remote-api/CHANGELOG.md b/saw-remote-api/CHANGELOG.md index 8aafd8075b..c404cbe6d4 100644 --- a/saw-remote-api/CHANGELOG.md +++ b/saw-remote-api/CHANGELOG.md @@ -35,6 +35,7 @@ * Add `"slice"` and `"slice range"` `setup value`s representing slices in MIR verification. Attempting to use these in LLVM or JVM verification will raise an error. +* Add `"enum"` `setup value`s representing enums in MIR verification. * The `SAW/create ghost variable` command and the associated `ghost variable value` value are now supported with JVM and MIR verification. diff --git a/saw-remote-api/python/CHANGELOG.md b/saw-remote-api/python/CHANGELOG.md index b2434fd8fc..53c757fbf8 100644 --- a/saw-remote-api/python/CHANGELOG.md +++ b/saw-remote-api/python/CHANGELOG.md @@ -38,6 +38,7 @@ variable. This function is currently only supported with LLVM and MIR verification, and using this function with JVM verification will raise an error. +* Add an `enum()` function for constructing MIR enum values. * The `create_ghost_variable()` and `ghost_value()` functions are now supported with JVM and MIR verification. diff --git a/saw-remote-api/python/saw_client/crucible.py b/saw-remote-api/python/saw_client/crucible.py index 984d79cc62..93f9827310 100644 --- a/saw-remote-api/python/saw_client/crucible.py +++ b/saw-remote-api/python/saw_client/crucible.py @@ -154,6 +154,22 @@ def to_json(self) -> JSON: 'elements': [fld.to_json() for fld in self.fields], 'MIR ADT server name': self.mir_adt.server_name if self.mir_adt is not None else None} +class EnumVal(SetupVal): + adt : MIRAdt + variant_name : str + fields : List[SetupVal] + + def __init__(self, adt : MIRAdt, variant_name : str, fields : List[SetupVal]) -> None: + self.adt = adt + self.variant_name = variant_name + self.fields = fields + + def to_json(self) -> JSON: + return {'setup value': 'enum', + 'MIR ADT server name': self.adt.server_name, + 'variant name': self.variant_name, + 'elements': [fld.to_json() for fld in self.fields]} + class TupleVal(SetupVal): fields : List[SetupVal] @@ -766,6 +782,19 @@ def elem(base: SetupVal, index: int) -> SetupVal: raise ValueError('elem expected an int, but got {index!r}') return ElemVal(base, index) +def enum(adt : MIRAdt, variant_name : str, *fields : SetupVal) -> SetupVal: + """Returns a MIR enum value (i.e., an ``EnumVal``) whose type corresponds to + the given ``adt``, whose variant corresponds to the given ``variant_name``, + and whose field values correspond to the given ``fields``. + + At present, this is only supported with MIR verification. Using this + function with LLVM or JVM verification will raise an error. + """ + for field in fields: + if not isinstance(field, SetupVal): + raise ValueError('enum expected a SetupVal, but got {field!r}') + return EnumVal(adt, variant_name, list(fields)) + def field(base : SetupVal, field_name : str) -> SetupVal: """Returns the value of struct ``base``'s field ``field_name`` (i.e., a ``FieldVal``). diff --git a/saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json b/saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json new file mode 100644 index 0000000000..d2a9e3e66c --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_enums.linked-mir.json @@ -0,0 +1 @@ +{"fns":[{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"pos":"mir_enums.rs:9:8: 9:9","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::bool"}},"kind":"Copy"}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"}},"kind":"Move"},"discr_span":"mir_enums.rs:9:8: 9:9 !mir_enums.rs:9:8: 9:9","kind":"SwitchInt","pos":"mir_enums.rs:9:8: 9:9 !mir_enums.rs:9:8: 9:9","switch_ty":"ty::bool","targets":["bb2","bb1"],"values":["0"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:10:11: 10:15"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:10:11: 10:15","variant_index":0}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::be69c9ad94113883"},"kind":"Constant"},"kind":"Call","pos":"mir_enums.rs:10:9: 10:16"}},"blockid":"bb1"},{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:12:11: 12:19"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:12:11: 12:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"42"},"ty":"ty::u32"},"kind":"Constant"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:12:11: 12:19","variant_index":1}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"bb3"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::be69c9ad94113883"},"kind":"Constant"},"kind":"Call","pos":"mir_enums.rs:12:9: 12:20"}},"blockid":"bb2"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_enums.rs:14:2: 14:2"}},"blockid":"bb3"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::bool"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_4","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_enums/284a9f79::g","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:34:5: 34:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}},"pos":"mir_enums.rs:34:5: 34:11","variant_index":1}],"terminator":{"kind":"Return","pos":"mir_enums.rs:35:2: 35:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}]},"name":"mir_enums/284a9f79::i43","return_ty":"ty::Adt::d1797ca6daa8927f","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:17:5: 17:9"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:17:5: 17:9","variant_index":0}],"terminator":{"kind":"Return","pos":"mir_enums.rs:18:2: 18:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_enums/284a9f79::h_none","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Deinit","pos":"mir_enums.rs:30:5: 30:11"},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}},"pos":"mir_enums.rs:30:5: 30:11","variant_index":0}],"terminator":{"kind":"Return","pos":"mir_enums.rs:31:2: 31:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::d1797ca6daa8927f"}]},"name":"mir_enums/284a9f79::i42","return_ty":"ty::Adt::d1797ca6daa8927f","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"pos":"mir_enums.rs:21:10: 21:11","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::u32"}},"kind":"Copy"}}},{"kind":"Deinit","pos":"mir_enums.rs:21:5: 21:12"},{"kind":"Assign","lhs":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:21:5: 21:12","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}},"kind":"Move"}}},{"kind":"SetDiscriminant","lvalue":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_enums.rs:21:5: 21:12","variant_index":1}],"terminator":{"kind":"Return","pos":"mir_enums.rs:22:2: 22:2"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Adt::3fa7c2d95c7fce06"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::u32"}]},"name":"mir_enums/284a9f79::h_some","return_ty":"ty::Adt::3fa7c2d95c7fce06","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"pos":"mir_enums.rs:2:11: 2:12","rhs":{"kind":"Discriminant","ty":"ty::isize","val":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"kind":"Move"},"discr_span":"mir_enums.rs:3:9: 3:16","kind":"SwitchInt","pos":"mir_enums.rs:2:5: 2:12","switch_ty":"ty::isize","targets":["bb1","bb3","bb2"],"values":["0","1"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_enums.rs:4:17: 4:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"27"},"ty":"ty::u32"},"kind":"Constant"}}}],"terminator":{"kind":"Goto","pos":"mir_enums.rs:4:17: 4:19","target":"bb4"}},"blockid":"bb1"},{"block":{"data":[],"terminator":{"kind":"Unreachable","pos":"mir_enums.rs:2:11: 2:12"}},"blockid":"bb2"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"pos":"mir_enums.rs:3:14: 3:15","rhs":{"kind":"Use","usevar":{"data":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}},{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_enums.rs:3:20: 3:21","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"kind":"Copy"}}}],"terminator":{"kind":"Goto","pos":"mir_enums.rs:3:20: 3:21","target":"bb4"}},"blockid":"bb3"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_enums.rs:6:2: 6:2"}},"blockid":"bb4"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}]},"name":"mir_enums/284a9f79::f","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}},"pos":"mir_enums.rs:25:11: 25:13","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"isize","size":8,"val":"42"},"ty":"ty::isize"},"kind":"Constant"}}}],"terminator":{"kind":"Return","pos":"mir_enums.rs:25:11: 25:13"}},"blockid":"bb0"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::isize"}]},"name":"mir_enums/284a9f79::I::I42::{constant#0}","return_ty":"ty::isize","spread_arg":null}],"adts":[{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"mir_enums/284a9f79::I::_adtb7803c2264daf0ec[0]","orig_def_id":"mir_enums/284a9f79::I","orig_substs":[],"repr_transparent":false,"size":1,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"kind":"Explicit","name":"mir_enums/284a9f79::I::I42::{constant#0}"},"discr_value":"42","fields":[],"inhabited":true,"name":"mir_enums/284a9f79::I::I42"},{"ctor_kind":{"kind":"Const"},"discr":{"index":1,"kind":"Relative"},"discr_value":"43","fields":[],"inhabited":true,"name":"mir_enums/284a9f79::I::I43"}]},{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","orig_substs":["ty::u32"],"repr_transparent":false,"size":8,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"index":0,"kind":"Relative"},"discr_value":"0","fields":[],"inhabited":true,"name":"core/73237d41::option::Option::None"},{"ctor_kind":{"kind":"Fn"},"discr":{"index":1,"kind":"Relative"},"discr_value":"1","fields":[{"name":"core/73237d41::option::Option::Some::0","ty":"ty::u32"}],"inhabited":true,"name":"core/73237d41::option::Option::Some"}]}],"statics":[],"vtables":[],"traits":[],"intrinsics":[{"inst":{"def_id":"mir_enums/284a9f79::g","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::g"},{"inst":{"def_id":"mir_enums/284a9f79::i43","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::i43"},{"inst":{"def_id":"mir_enums/284a9f79::h_none","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::h_none"},{"inst":{"def_id":"mir_enums/284a9f79::i42","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::i42"},{"inst":{"def_id":"mir_enums/284a9f79::h_some","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::h_some"},{"inst":{"def_id":"mir_enums/284a9f79::f","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::f"},{"inst":{"def_id":"mir_enums/284a9f79::I::I42::{constant#0}","kind":"Item","substs":[]},"name":"mir_enums/284a9f79::I::I42::{constant#0}"}],"tys":[{"name":"ty::bool","ty":{"kind":"Bool"}},{"name":"ty::u32","ty":{"kind":"Uint","uintkind":{"kind":"U32"}}},{"name":"ty::Adt::3fa7c2d95c7fce06","ty":{"kind":"Adt","name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","substs":["ty::u32"]}},{"name":"ty::FnDef::be69c9ad94113883","ty":{"defid":"mir_enums/284a9f79::f","kind":"FnDef"}},{"name":"ty::Adt::d1797ca6daa8927f","ty":{"kind":"Adt","name":"mir_enums/284a9f79::I::_adtb7803c2264daf0ec[0]","orig_def_id":"mir_enums/284a9f79::I","substs":[]}},{"name":"ty::isize","ty":{"intkind":{"kind":"Isize"},"kind":"Int"}}],"roots":["mir_enums/284a9f79::f","mir_enums/284a9f79::g","mir_enums/284a9f79::h_none","mir_enums/284a9f79::h_some","mir_enums/284a9f79::i42","mir_enums/284a9f79::i43"]} \ No newline at end of file diff --git a/saw-remote-api/python/tests/saw/test-files/mir_enums.rs b/saw-remote-api/python/tests/saw/test-files/mir_enums.rs new file mode 100644 index 0000000000..e4f25f1e2c --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_enums.rs @@ -0,0 +1,35 @@ +pub fn f(x: Option) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(b: bool) -> u32 { + if b { + f(None) + } else { + f(Some(42)) + } +} + +pub fn h_none() -> Option { + None +} + +pub fn h_some(x: u32) -> Option { + Some(x) +} + +pub enum I { + I42 = 42, + I43, +} + +pub fn i42() -> I { + I::I42 +} + +pub fn i43() -> I { + I::I43 +} diff --git a/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json new file mode 100644 index 0000000000..cbd60459f8 --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.linked-mir.json @@ -0,0 +1 @@ +{"fns":[{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_fresh_expanded_value_enum.rs:13:7: 13:8","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":true,"mut":{"kind":"Not"},"name":"_2","ty":"ty::Tuple::e93222e871854c41"}},"bb1"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::4ca1625b83958a06"},"kind":"Constant"},"kind":"Call","pos":"mir_fresh_expanded_value_enum.rs:13:5: 13:9"}},"blockid":"bb0"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_fresh_expanded_value_enum.rs:14:2: 14:2"}},"blockid":"bb1"}],"vars":[{"is_zst":true,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Tuple::e93222e871854c41"},{"is_zst":true,"mut":{"kind":"Not"},"name":"_2","ty":"ty::Tuple::e93222e871854c41"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_fresh_expanded_value_enum/b7d178bc::gg","return_ty":"ty::Tuple::e93222e871854c41","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"pos":"mir_fresh_expanded_value_enum.rs:2:11: 2:12","rhs":{"kind":"Discriminant","ty":"ty::isize","val":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}}}}],"terminator":{"discr":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"}},"kind":"Move"},"discr_span":"mir_fresh_expanded_value_enum.rs:3:9: 3:16","kind":"SwitchInt","pos":"mir_fresh_expanded_value_enum.rs:2:5: 2:12","switch_ty":"ty::isize","targets":["bb1","bb3","bb2"],"values":["0","1"]}},"blockid":"bb0"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_fresh_expanded_value_enum.rs:4:17: 4:19","rhs":{"kind":"Use","usevar":{"data":{"rendered":{"kind":"uint","size":4,"val":"27"},"ty":"ty::u32"},"kind":"Constant"}}}],"terminator":{"kind":"Goto","pos":"mir_fresh_expanded_value_enum.rs:4:17: 4:19","target":"bb4"}},"blockid":"bb1"},{"block":{"data":[],"terminator":{"kind":"Unreachable","pos":"mir_fresh_expanded_value_enum.rs:2:11: 2:12"}},"blockid":"bb2"},{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"pos":"mir_fresh_expanded_value_enum.rs:3:14: 3:15","rhs":{"kind":"Use","usevar":{"data":{"data":[{"kind":"Downcast","variant":1},{"field":0,"kind":"Field","ty":"ty::u32"}],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}},{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"}},"pos":"mir_fresh_expanded_value_enum.rs:3:20: 3:21","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}},"kind":"Copy"}}}],"terminator":{"kind":"Goto","pos":"mir_fresh_expanded_value_enum.rs:3:20: 3:21","target":"bb4"}},"blockid":"bb3"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_fresh_expanded_value_enum.rs:6:2: 6:2"}},"blockid":"bb4"}],"vars":[{"is_zst":false,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_2","ty":"ty::isize"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_3","ty":"ty::u32"}]},"name":"mir_fresh_expanded_value_enum/b7d178bc::f","return_ty":"ty::u32","spread_arg":null},{"abi":{"kind":"Rust"},"args":[{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}],"body":{"blocks":[{"block":{"data":[{"kind":"Assign","lhs":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"pos":"mir_fresh_expanded_value_enum.rs:9:7: 9:8","rhs":{"kind":"Use","usevar":{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_1","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Copy"}}}],"terminator":{"args":[{"data":{"data":[],"var":{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}},"kind":"Move"}],"cleanup":null,"destination":[{"data":[],"var":{"is_zst":false,"mut":{"kind":"Not"},"name":"_2","ty":"ty::u32"}},"bb1"],"from_hir_call":true,"func":{"data":{"rendered":{"kind":"zst"},"ty":"ty::FnDef::4c1263d320af70d4"},"kind":"Constant"},"kind":"Call","pos":"mir_fresh_expanded_value_enum.rs:9:5: 9:9"}},"blockid":"bb0"},{"block":{"data":[],"terminator":{"kind":"Return","pos":"mir_fresh_expanded_value_enum.rs:10:2: 10:2"}},"blockid":"bb1"}],"vars":[{"is_zst":true,"mut":{"kind":"Mut"},"name":"_0","ty":"ty::Tuple::e93222e871854c41"},{"is_zst":false,"mut":{"kind":"Not"},"name":"_2","ty":"ty::u32"},{"is_zst":false,"mut":{"kind":"Mut"},"name":"_3","ty":"ty::Adt::3fa7c2d95c7fce06"}]},"name":"mir_fresh_expanded_value_enum/b7d178bc::g","return_ty":"ty::Tuple::e93222e871854c41","spread_arg":null}],"adts":[{"kind":{"discr_ty":"ty::isize","kind":"Enum"},"name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","orig_substs":["ty::u32"],"repr_transparent":false,"size":8,"variants":[{"ctor_kind":{"kind":"Const"},"discr":{"index":0,"kind":"Relative"},"discr_value":"0","fields":[],"inhabited":true,"name":"core/73237d41::option::Option::None"},{"ctor_kind":{"kind":"Fn"},"discr":{"index":1,"kind":"Relative"},"discr_value":"1","fields":[{"name":"core/73237d41::option::Option::Some::0","ty":"ty::u32"}],"inhabited":true,"name":"core/73237d41::option::Option::Some"}]}],"statics":[],"vtables":[],"traits":[],"intrinsics":[{"inst":{"def_id":"mir_fresh_expanded_value_enum/b7d178bc::gg","kind":"Item","substs":[]},"name":"mir_fresh_expanded_value_enum/b7d178bc::gg"},{"inst":{"def_id":"mir_fresh_expanded_value_enum/b7d178bc::f","kind":"Item","substs":[]},"name":"mir_fresh_expanded_value_enum/b7d178bc::f"},{"inst":{"def_id":"mir_fresh_expanded_value_enum/b7d178bc::g","kind":"Item","substs":[]},"name":"mir_fresh_expanded_value_enum/b7d178bc::g"}],"tys":[{"name":"ty::u32","ty":{"kind":"Uint","uintkind":{"kind":"U32"}}},{"name":"ty::Adt::3fa7c2d95c7fce06","ty":{"kind":"Adt","name":"core/73237d41::option::Option::_adtc5e93708b8ca6e2a[0]","orig_def_id":"core/73237d41::option::Option","substs":["ty::u32"]}},{"name":"ty::Tuple::e93222e871854c41","ty":{"kind":"Tuple","tys":[]}},{"name":"ty::FnDef::4ca1625b83958a06","ty":{"defid":"mir_fresh_expanded_value_enum/b7d178bc::g","kind":"FnDef"}},{"name":"ty::isize","ty":{"intkind":{"kind":"Isize"},"kind":"Int"}},{"name":"ty::FnDef::4c1263d320af70d4","ty":{"defid":"mir_fresh_expanded_value_enum/b7d178bc::f","kind":"FnDef"}}],"roots":["mir_fresh_expanded_value_enum/b7d178bc::f","mir_fresh_expanded_value_enum/b7d178bc::g","mir_fresh_expanded_value_enum/b7d178bc::gg"]} \ No newline at end of file diff --git a/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs new file mode 100644 index 0000000000..86f7563545 --- /dev/null +++ b/saw-remote-api/python/tests/saw/test-files/mir_fresh_expanded_value_enum.rs @@ -0,0 +1,14 @@ +pub fn f(x: Option) -> u32 { + match x { + Some(x) => x, + None => 27, + } +} + +pub fn g(x: Option) { + f(x); +} + +pub fn gg(x: Option) { + g(x); +} diff --git a/saw-remote-api/python/tests/saw/test_mir_enums.py b/saw-remote-api/python/tests/saw/test_mir_enums.py new file mode 100644 index 0000000000..490832140c --- /dev/null +++ b/saw-remote-api/python/tests/saw/test_mir_enums.py @@ -0,0 +1,136 @@ +import unittest +from pathlib import Path + +from saw_client import * +from saw_client.crucible import cry_f, enum +from saw_client.mir import Contract, MIRAdt, adt_ty, bool_ty, u32 + + +class FNoneContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = enum(self.adt, 'None') + + self.execute_func(x) + + self.returns_f('27 : [32]') + + +class FSomeContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + ret = cry_f('42 : [32]') + x = enum(self.adt, 'Some', ret) + + self.execute_func(x) + + self.returns(ret) + + +class GContract(Contract): + def specification(self) -> None: + b = self.fresh_var(bool_ty, 'b') + + self.execute_func(b) + + self.returns_f('if {b} then 27 else 42 : [32]') + + +class HNoneContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + self.execute_func() + + self.returns(enum(self.adt, 'None')) + + +class HSomeContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = self.fresh_var(u32, 'x') + + self.execute_func(x) + + self.returns(enum(self.adt, 'Some', x)) + + +class I42Contract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + self.execute_func() + + self.returns(enum(self.adt, 'I42')) + + +class I43Contract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + self.execute_func() + + self.returns(enum(self.adt, 'I43')) + + +class MIRStructsTest(unittest.TestCase): + def test_mir_points_to(self): + connect(reset_server=True) + if __name__ == "__main__": view(LogResults()) + json_name = str(Path('tests', 'saw', 'test-files', 'mir_enums.linked-mir.json')) + mod = mir_load_module(json_name) + + option_adt = mir_find_adt(mod, 'core::option::Option', u32) + i_adt = mir_find_adt(mod, "mir_enums::I") + + f_none_ov = mir_verify(mod, 'mir_enums::f', FNoneContract(option_adt)) + self.assertIs(f_none_ov.is_success(), True) + + f_some_ov = mir_verify(mod, 'mir_enums::f', FSomeContract(option_adt)) + self.assertIs(f_some_ov.is_success(), True) + + g_result = mir_verify(mod, 'mir_enums::g', GContract(), lemmas=[f_none_ov, f_some_ov]) + self.assertIs(g_result.is_success(), True) + + h_none_result = mir_verify(mod, 'mir_enums::h_none', HNoneContract(option_adt)) + self.assertIs(h_none_result.is_success(), True) + + h_some_result = mir_verify(mod, 'mir_enums::h_some', HSomeContract(option_adt)) + self.assertIs(h_some_result.is_success(), True) + + i42_result = mir_verify(mod, 'mir_enums::i42', I42Contract(i_adt)) + self.assertIs(i42_result.is_success(), True) + + i43_result = mir_verify(mod, 'mir_enums::i43', I43Contract(i_adt)) + self.assertIs(i43_result.is_success(), True) + + +if __name__ == "__main__": + unittest.main() diff --git a/saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py b/saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py new file mode 100644 index 0000000000..341046ce15 --- /dev/null +++ b/saw-remote-api/python/tests/saw/test_mir_fresh_expanded_value_enum.py @@ -0,0 +1,99 @@ +import unittest +from pathlib import Path + +from saw_client import * +from saw_client.crucible import fresh_expanded +from saw_client.mir import Contract, MIRAdt, adt_ty, enum, u32, void + + +class FNoneContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = enum(self.adt, 'None') + + self.execute_func(x) + + self.returns_f('27 : [32]') + + +class FSomeContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + ret = self.fresh_var(u32, 'ret') + x = enum(self.adt, 'Some', ret) + + self.execute_func(x) + + self.returns(ret) + + +class GContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = fresh_expanded('x', adt_ty(self.adt)) + + self.execute_func(x) + + self.returns(void) + + +class GGContract(Contract): + adt: MIRAdt + + def __init__(self, adt: MIRAdt): + super().__init__() + self.adt = adt + + def specification(self) -> None: + x = fresh_expanded('x', adt_ty(self.adt)) + + self.execute_func(x) + + self.returns(void) + + +class MIRFreshExpandedValueTest(unittest.TestCase): + def test_mir_fresh_expanded_value(self): + connect(reset_server=True) + if __name__ == "__main__": view(LogResults()) + json_name = str(Path('tests', 'saw', 'test-files', 'mir_fresh_expanded_value_enum.linked-mir.json')) + mod = mir_load_module(json_name) + + option_u32_adt = mir_find_adt(mod, 'core::option::Option', u32) + + f_none_ov = mir_verify(mod, 'mir_fresh_expanded_value_enum::f', FNoneContract(option_u32_adt)) + self.assertIs(f_none_ov.is_success(), True) + + f_some_ov = mir_verify(mod, 'mir_fresh_expanded_value_enum::f', FSomeContract(option_u32_adt)) + self.assertIs(f_some_ov.is_success(), True) + + g_ov_1 = mir_verify(mod, 'mir_fresh_expanded_value_enum::g', GContract(option_u32_adt)) + self.assertIs(g_ov_1.is_success(), True) + + g_ov_2 = mir_verify(mod, 'mir_fresh_expanded_value_enum::g', GContract(option_u32_adt), lemmas=[f_none_ov, f_some_ov]) + self.assertIs(g_ov_2.is_success(), True) + + gg_ov_1 = mir_verify(mod, 'mir_fresh_expanded_value_enum::gg', GGContract(option_u32_adt)) + self.assertIs(gg_ov_1.is_success(), True) + + gg_ov_2 = mir_verify(mod, 'mir_fresh_expanded_value_enum::gg', GGContract(option_u32_adt), lemmas=[g_ov_2]) + self.assertIs(gg_ov_2.is_success(), True) + + +if __name__ == "__main__": + unittest.main() diff --git a/saw-remote-api/src/SAWServer.hs b/saw-remote-api/src/SAWServer.hs index d7b2f2942b..76a5600590 100644 --- a/saw-remote-api/src/SAWServer.hs +++ b/saw-remote-api/src/SAWServer.hs @@ -112,6 +112,7 @@ data CrucibleSetupVal ty e -- ^ The @'Maybe' 'ServerName'@ value represents a possible MIR -- ADT. This should always be 'Just' with MIR verification and -- 'Nothing' with LLVM or JVM verification. + | EnumValue ServerName String [CrucibleSetupVal ty e] | TupleValue [CrucibleSetupVal ty e] | SliceValue (CrucibleSetupVal ty e) | SliceRangeValue (CrucibleSetupVal ty e) Int Int diff --git a/saw-remote-api/src/SAWServer/Data/SetupValue.hs b/saw-remote-api/src/SAWServer/Data/SetupValue.hs index 13ae0bedbd..04cc3f0a25 100644 --- a/saw-remote-api/src/SAWServer/Data/SetupValue.hs +++ b/saw-remote-api/src/SAWServer/Data/SetupValue.hs @@ -14,6 +14,7 @@ data SetupValTag | TagCryptol | TagArrayValue | TagStructValue + | TagEnumValue | TagTupleValue | TagSliceValue | TagSliceRangeValue @@ -34,6 +35,7 @@ instance FromJSON SetupValTag where "Cryptol" -> pure TagCryptol "array" -> pure TagArrayValue "struct" -> pure TagStructValue + "enum" -> pure TagEnumValue "tuple" -> pure TagTupleValue "slice" -> pure TagSliceValue "slice range" -> pure TagSliceRangeValue @@ -57,6 +59,7 @@ instance (FromJSON ty, FromJSON cryptolExpr) => FromJSON (CrucibleSetupVal ty cr TagCryptol -> CryptolExpr <$> o .: "expression" TagArrayValue -> ArrayValue <$> o .:? "element type" <*> o .: "elements" TagStructValue -> StructValue <$> o .:? "MIR ADT server name" <*> o .: "elements" + TagEnumValue -> EnumValue <$> o .: "MIR ADT server name" <*> o .: "variant name" <*> o .: "elements" TagTupleValue -> TupleValue <$> o .: "elements" TagSliceValue -> SliceValue <$> o .: "base" TagSliceRangeValue -> SliceRangeValue <$> o .: "base" <*> o .: "start" <*> o .: "end" diff --git a/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs b/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs index 8262e46c81..e3befb64cd 100644 --- a/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs +++ b/saw-remote-api/src/SAWServer/JVMCrucibleSetup.hs @@ -190,6 +190,8 @@ compileJVMContract fileReader bic ghostEnv cenv0 c = JVMSetupM $ fail "Array setup values unsupported in JVM API." getSetupVal _ (StructValue _ _) = JVMSetupM $ fail "Struct setup values unsupported in JVM API." + getSetupVal _ (EnumValue _ _ _) = + JVMSetupM $ fail "Enum setup values unsupported in JVM API." getSetupVal _ (TupleValue _) = JVMSetupM $ fail "Tuple setup values unsupported in JVM API." getSetupVal _ (SliceValue _) = diff --git a/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs b/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs index 6b05fe1d65..c091d0f029 100644 --- a/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs +++ b/saw-remote-api/src/SAWServer/LLVMCrucibleSetup.hs @@ -190,6 +190,8 @@ compileLLVMContract fileReader bic ghostEnv cenv0 c = LLVMCrucibleSetupM $ fail "Tuple setup values unsupported in the LLVM API." getSetupVal _ (SliceValue _) = LLVMCrucibleSetupM $ fail "Slice setup values unsupported in the LLVM API." + getSetupVal _ (EnumValue _ _ _) = + LLVMCrucibleSetupM $ fail "Enum setup values unsupported in the LLVM API." getSetupVal _ (SliceRangeValue _ _ _) = LLVMCrucibleSetupM $ fail "Slice range setup values unsupported in the LLVM API." getSetupVal env (FieldLValue base fld) = diff --git a/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs b/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs index b6cf3555df..35ce5bb6e4 100644 --- a/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs +++ b/saw-remote-api/src/SAWServer/MIRCrucibleSetup.hs @@ -19,6 +19,7 @@ import Data.Map (Map) import qualified Data.Map as Map import Mir.Intrinsics (MIR) +import qualified Mir.Mir as Mir import qualified Cryptol.Parser.AST as P import Cryptol.Utils.Ident (mkIdent) @@ -30,6 +31,7 @@ import SAWScript.Crucible.MIR.Builtins mir_alloc_mut, mir_fresh_expanded_value, mir_fresh_var, + mir_enum_value, mir_execute_func, mir_ghost_value, mir_load_module, @@ -194,14 +196,14 @@ compileMIRContract fileReader bic ghostEnv cenv0 sawenv c = return $ MS.SetupArray ty' (elt':eltss') getSetupVal _ (StructValue Nothing _) = MIRSetupM $ fail "MIR struct without a corresponding ADT." - getSetupVal env (StructValue (Just adtServerName) elts) = - -- First, we look up the MIR ADT from its ServerName. If we find it, - -- proceed to handle the struct field types. Otherwise, raise an error. - case getMIRAdtEither sawenv adtServerName of - Left ex -> throw ex - Right adt -> do - elts' <- mapM (getSetupVal env) elts - pure $ MS.SetupStruct adt elts' + getSetupVal env (StructValue (Just adtServerName) elts) = do + adt <- getMirAdt adtServerName + elts' <- mapM (getSetupVal env) elts + pure $ MS.SetupStruct adt elts' + getSetupVal env (EnumValue adtServerName variantName elts) = do + adt <- getMirAdt adtServerName + elts' <- mapM (getSetupVal env) elts + MIRSetupM $ mir_enum_value adt variantName elts' getSetupVal env (TupleValue elems) = do elems' <- mapM (getSetupVal env) elems pure $ MS.SetupTuple () elems' @@ -227,6 +229,10 @@ compileMIRContract fileReader bic ghostEnv cenv0 sawenv c = getSetupVal _ (ElementLValue _ _) = MIRSetupM $ fail "Element l-values unsupported in the MIR API." + getMirAdt :: ServerName -> MIRSetupM Mir.Adt + getMirAdt adtServerName = + either throw pure $ getMIRAdtEither sawenv adtServerName + data MIRLoadModuleParams = MIRLoadModuleParams ServerName FilePath diff --git a/saw-script.cabal b/saw-script.cabal index 2b52c55716..7804376543 100644 --- a/saw-script.cabal +++ b/saw-script.cabal @@ -54,6 +54,7 @@ library , haskeline , heapster-saw , hobbits >= 1.3.1 + , indexed-traversable , galois-dwarf >= 0.2.2 , IfElse , jvm-parser diff --git a/src/SAWScript/Crucible/Common/MethodSpec.hs b/src/SAWScript/Crucible/Common/MethodSpec.hs index acba975084..6884eaf8d4 100644 --- a/src/SAWScript/Crucible/Common/MethodSpec.hs +++ b/src/SAWScript/Crucible/Common/MethodSpec.hs @@ -149,7 +149,8 @@ import SAWScript.Crucible.Common (Sym, sawCoreState) import SAWScript.Crucible.Common.Setup.Value import SAWScript.Crucible.LLVM.Setup.Value (LLVM) import SAWScript.Crucible.JVM.Setup.Value () -import SAWScript.Crucible.MIR.Setup.Value (MirSetupSlice(..)) +import SAWScript.Crucible.MIR.Setup.Value + (MirSetupEnum(..), MirSetupSlice(..)) import SAWScript.Options import SAWScript.Prover.SolverStats import SAWScript.Utils (bullets) @@ -203,6 +204,14 @@ ppSetupValue setupval = case setupval of absurd empty (MIRExt, _defId) -> ppSetupStructDefault vs + SetupEnum x -> + case (ext, x) of + (LLVMExt, empty) -> + absurd empty + (JVMExt, empty) -> + absurd empty + (MIRExt, enum_) -> + ppMirSetupEnum enum_ SetupTuple x vs -> case (ext, x) of (LLVMExt, empty) -> @@ -249,12 +258,18 @@ ppSetupValue setupval = case setupval of | packed = PP.angles (ppSetupStructDefault vs) | otherwise = ppSetupStructDefault vs - ppSetupStructDefault :: [SetupValue ext] -> PP.Doc ann + ppSetupStructDefault :: forall ext'. IsExt ext' => [SetupValue ext'] -> PP.Doc ann ppSetupStructDefault vs = PP.braces (commaList (map ppSetupValue vs)) ppSetupTuple :: [SetupValue MIR] -> PP.Doc ann ppSetupTuple vs = PP.parens (commaList (map ppSetupValue vs)) + ppMirSetupEnum :: MirSetupEnum -> PP.Doc ann + ppMirSetupEnum (MirSetupEnumVariant _defId variantName _varIdx fields) = + PP.pretty variantName PP.<+> ppSetupStructDefault fields + ppMirSetupEnum (MirSetupEnumSymbolic _defId _discr _variants) = + PP.pretty "" + ppMirSetupSlice :: MirSetupSlice -> PP.Doc ann ppMirSetupSlice (MirSetupSliceRaw ref len) = PP.pretty "SliceRaw" <> ppSetupTuple [ref, len] diff --git a/src/SAWScript/Crucible/Common/Setup/Value.hs b/src/SAWScript/Crucible/Common/Setup/Value.hs index b9fa6ebcde..1b1153104e 100644 --- a/src/SAWScript/Crucible/Common/Setup/Value.hs +++ b/src/SAWScript/Crucible/Common/Setup/Value.hs @@ -38,6 +38,7 @@ module SAWScript.Crucible.Common.Setup.Value , XSetupNull , XSetupStruct + , XSetupEnum , XSetupTuple , XSetupSlice , XSetupArray @@ -121,6 +122,7 @@ type family ResolvedState ext :: Type type family XSetupNull ext type family XSetupStruct ext +type family XSetupEnum ext type family XSetupTuple ext type family XSetupSlice ext type family XSetupArray ext @@ -151,6 +153,9 @@ data SetupValue ext where -- | A slice value. At the moment, this is only ever used for MIR -- verification. SetupSlice :: XSetupSlice ext -> SetupValue ext + -- | An enumeration value. At the moment, this is only ever used for MIR + -- verification. + SetupEnum :: XSetupEnum ext -> SetupValue ext -- | A pointer to a global variable SetupGlobal :: XSetupGlobal ext -> String -> SetupValue ext @@ -166,6 +171,7 @@ data SetupValue ext where type SetupValueHas (c :: Type -> Constraint) ext = ( c (XSetupNull ext) , c (XSetupStruct ext) + , c (XSetupEnum ext) , c (XSetupTuple ext) , c (XSetupSlice ext) , c (XSetupArray ext) diff --git a/src/SAWScript/Crucible/JVM/Override.hs b/src/SAWScript/Crucible/JVM/Override.hs index 1bf1777e67..4ab53ab60f 100644 --- a/src/SAWScript/Crucible/JVM/Override.hs +++ b/src/SAWScript/Crucible/JVM/Override.hs @@ -552,6 +552,7 @@ matchArg opts sc cc cs prepost md actual@(RVal ref) expectedTy setupval = addAssert p md (Crucible.SimError (cs ^. MS.csLoc) (Crucible.AssertFailureSimError ("null-equality " ++ MS.stateCond prepost) "")) MS.SetupGlobal empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty @@ -932,6 +933,7 @@ instantiateSetupValue sc s v = MS.SetupNull () -> return v MS.SetupGlobal empty _ -> absurd empty MS.SetupStruct empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty MS.SetupArray empty _ -> absurd empty diff --git a/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs b/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs index 9364b7716c..98f38a0d14 100644 --- a/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs +++ b/src/SAWScript/Crucible/JVM/ResolveSetupValue.hs @@ -140,6 +140,7 @@ typeOfSetupValue _cc env _nameEnv val = return (J.ClassType (J.mkClassName "java/lang/Object")) MS.SetupGlobal empty _ -> absurd empty MS.SetupStruct empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty MS.SetupArray empty _ -> absurd empty @@ -173,6 +174,7 @@ resolveSetupVal cc env _tyenv _nameEnv val = return (RVal (W4.maybePartExpr sym Nothing)) MS.SetupGlobal empty _ -> absurd empty MS.SetupStruct empty _ -> absurd empty + MS.SetupEnum empty -> absurd empty MS.SetupTuple empty _ -> absurd empty MS.SetupSlice empty -> absurd empty MS.SetupArray empty _ -> absurd empty diff --git a/src/SAWScript/Crucible/JVM/Setup/Value.hs b/src/SAWScript/Crucible/JVM/Setup/Value.hs index a69e29ec05..9bd3ec97f3 100644 --- a/src/SAWScript/Crucible/JVM/Setup/Value.hs +++ b/src/SAWScript/Crucible/JVM/Setup/Value.hs @@ -78,6 +78,7 @@ import qualified SAWScript.Crucible.Common.Setup.Value as MS type instance MS.XSetupNull CJ.JVM = () type instance MS.XSetupGlobal CJ.JVM = Void type instance MS.XSetupStruct CJ.JVM = Void +type instance MS.XSetupEnum CJ.JVM = Void type instance MS.XSetupTuple CJ.JVM = Void type instance MS.XSetupSlice CJ.JVM = Void type instance MS.XSetupArray CJ.JVM = Void diff --git a/src/SAWScript/Crucible/LLVM/Override.hs b/src/SAWScript/Crucible/LLVM/Override.hs index 8174385b8a..b31867ca9d 100644 --- a/src/SAWScript/Crucible/LLVM/Override.hs +++ b/src/SAWScript/Crucible/LLVM/Override.hs @@ -1009,6 +1009,7 @@ matchPointsTos opts sc cc spec prepost = go False [] case v of SetupVar i -> Set.singleton i SetupStruct _ xs -> foldMap setupVars xs + SetupEnum empty -> absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> absurd empty SetupArray _ xs -> foldMap setupVars xs @@ -1169,6 +1170,8 @@ matchArg opts sc cc cs prepost md actual expectedTy expected = (V.toList (Crucible.fiType <$> Crucible.siFields fields)) zs ] + (_, _, SetupEnum empty) -> + absurd empty (_, _, SetupTuple empty _) -> absurd empty (_, _, SetupSlice empty) -> @@ -2280,6 +2283,7 @@ instantiateSetupValue sc s v = SetupNull{} -> return v SetupGlobal{} -> return v SetupGlobalInitializer{} -> return v + SetupEnum empty -> absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> absurd empty where diff --git a/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs b/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs index 84b29b9784..b5fd1bdbf6 100644 --- a/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs +++ b/src/SAWScript/Crucible/LLVM/ResolveSetupValue.hs @@ -451,6 +451,8 @@ typeOfSetupValue cc env nameEnv val = let si = Crucible.mkStructInfo dl packed memTys return (Crucible.StructType si) + SetupEnum empty -> + absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> @@ -632,6 +634,8 @@ resolveSetupVal cc mem env tyenv nameEnv val = Crucible.Struct v -> v _ -> error "impossible" return $ Crucible.LLVMValStruct (V.zip flds (V.fromList vals)) + SetupEnum empty -> + absurd empty SetupTuple empty _ -> absurd empty SetupSlice empty -> diff --git a/src/SAWScript/Crucible/LLVM/Setup/Value.hs b/src/SAWScript/Crucible/LLVM/Setup/Value.hs index 9f301187f7..2f9133e03f 100644 --- a/src/SAWScript/Crucible/LLVM/Setup/Value.hs +++ b/src/SAWScript/Crucible/LLVM/Setup/Value.hs @@ -120,6 +120,7 @@ data LLVM (arch :: CL.LLVMArch) type instance Setup.XSetupNull (LLVM _) = () -- 'True' if this is an LLVM packed struct, 'False' otherwise. type instance Setup.XSetupStruct (LLVM _) = Bool +type instance Setup.XSetupEnum (LLVM _) = Void type instance Setup.XSetupTuple (LLVM _) = Void type instance Setup.XSetupSlice (LLVM _) = Void type instance Setup.XSetupArray (LLVM _) = () diff --git a/src/SAWScript/Crucible/MIR/Builtins.hs b/src/SAWScript/Crucible/MIR/Builtins.hs index c81a39546d..0030c90481 100644 --- a/src/SAWScript/Crucible/MIR/Builtins.hs +++ b/src/SAWScript/Crucible/MIR/Builtins.hs @@ -26,6 +26,8 @@ module SAWScript.Crucible.MIR.Builtins , mir_return , mir_unsafe_assume_spec , mir_verify + -- ** MIR enums + , mir_enum_value -- ** MIR slices , mir_slice_value , mir_slice_range_value @@ -56,7 +58,7 @@ module SAWScript.Crucible.MIR.Builtins ) where import Control.Lens -import Control.Monad (foldM, forM, forM_, unless, when) +import Control.Monad (foldM, forM, forM_, unless, when, zipWithM) import qualified Control.Monad.Catch as X import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Reader (runReaderT) @@ -64,8 +66,9 @@ import Control.Monad.State (MonadState(..), StateT(..), execStateT, gets) import Control.Monad.Trans.Class (MonadTrans(..)) import qualified Data.ByteString.Lazy as BSL import Data.Foldable (for_) +import qualified Data.Foldable.WithIndex as FWI import Data.IORef -import qualified Data.List as List (find) +import qualified Data.List.Extra as List (find, unsnoc) import qualified Data.List.NonEmpty as NE import Data.List.NonEmpty (NonEmpty(..)) import qualified Data.Map as Map @@ -75,6 +78,7 @@ import qualified Data.Parameterized.Context as Ctx import qualified Data.Parameterized.Map as MapF import Data.Parameterized.NatRepr (knownNat, natValue) import Data.Parameterized.Some (Some(..)) +import qualified Data.Parameterized.TraversableFC as FC import qualified Data.Parameterized.TraversableFC.WithIndex as FCI import qualified Data.Set as Set import qualified Data.Text as Text @@ -288,13 +292,9 @@ constructExpandedSetupValue cc sc = go case shp of UnitShape _ -> pure $ MS.SetupTuple () [] - PrimShape ty _ -> - case cryptolTypeOfActual ty of - Nothing -> - X.throwM $ MIRFreshExpandedValueUnsupportedType ty - Just cty -> do - fv <- Setup.freshVariable sc pfx cty - pure $ MS.SetupTerm fv + PrimShape ty _ -> do + fv <- freshPrimVariable pfx ty + pure $ MS.SetupTerm fv TupleShape _ _ fldShps -> do flds <- goFlds pfx fldShps pure $ MS.SetupTuple () flds @@ -303,7 +303,7 @@ constructExpandedSetupValue cc sc = go Mir.TyArray _ n -> do elems <- traverse - (\i -> go (pfx <> "." <> Text.pack (show i)) elemShp) + (\i -> go (pfx <> "_" <> Text.pack (show i)) elemShp) [0..n-1] pure $ MS.SetupArray elemTy elems _ -> @@ -329,17 +329,48 @@ constructExpandedSetupValue cc sc = go adt_not_found_panic "StructShape" adtName _ -> non_adt_type_panic "StructShape" ty + EnumShape ty _ variantShps _ discrShp -> + case ty of + Mir.TyAdt adtName _ _ -> + case col ^. Mir.adts . at adtName of + Just adt@(Mir.Adt _ kind _ _ _ _ _) -> + case kind of + Mir.Enum _ -> + MS.SetupEnum <$> goEnum pfx adt discrShp variantShps + Mir.Struct -> + panic "constructExpandedSetupValue" + ["Expected enum, encountered struct"] + Mir.Union -> + panic "constructExpandedSetupValue" + ["Expected enum, encountered union"] + Nothing -> + adt_not_found_panic "EnumShape" adtName + _ -> + non_adt_type_panic "EnumShape" ty TransparentShape ty shp' -> case ty of Mir.TyAdt adtName _ _ -> do case col ^. Mir.adts . at adtName of - Just adt@(Mir.Adt _ kind _ _ _ _ _) -> + Just adt@(Mir.Adt adtNm kind variants _ _ _ _) -> case kind of Mir.Struct -> do val <- go pfx shp' pure $ MS.SetupStruct adt [val] - Mir.Enum{} -> - fail "`repr(transparent)` enums not currently supported" + Mir.Enum{} + -- `repr(transparent)` enum values use MirSetupEnumVariant + -- rather than MirSetupEnumSymbolic. See the Haddocks for + -- MirSetupEnumSymbolic for an explanation. + | [variant] <- variants + -> do val <- go pfx shp' + pure $ MS.SetupEnum + $ MirSetupEnumVariant adt variant 0 [val] + + | otherwise + -> panic "constructExpandedSetupValue" + [ "`repr(transparent)` enum that doesn't have exactly one variant" + , "Enum: " ++ show adtNm + , "Number of variants: " ++ show (length variants) + ] Mir.Union -> panic "constructExpandedSetupValue" [ "Unexpected `repr(transparent)` union:" @@ -356,6 +387,73 @@ constructExpandedSetupValue cc sc = go FnPtrShape ty _ _ -> X.throwM $ MIRFreshExpandedValueUnsupportedType ty + -- Create a fresh symbolic enum value, as described in + -- Note [Symbolic enums] in SAWScript.Crucible.MIR.Setup.Value. + goEnum :: + forall discrShp variantCtx. + Text -> + Mir.Adt -> + TypeShape discrShp -> + Ctx.Assignment VariantShape variantCtx -> + CrucibleSetup MIR MirSetupEnum + goEnum pfx adt@(Mir.Adt _ _ variants _ _ _ _) discrShp variantShps = + mccWithBackend cc $ \bak -> + do -- First, create a symbolic discriminant value. + IsBVShape discrTy discrW <- pure $ testDiscriminantIsBV discrShp + let discrPfx = pfx <> "_discr" + discrVar <- freshPrimVariable discrPfx discrTy + let discrVal = MS.SetupTerm discrVar + + -- Next, add Crucible assumptions that constraint the discriminant + -- to be equal to one of the possible variants' discriminant values. + -- This assumption will be of the form: + -- + -- (discr == 0) \/ (discr == 1) \/ ... + -- + -- It's tempting to simplify this assumption to just + -- `discr < num_variants`, but this will not work in the event that + -- the enum uses explicit discriminants for some variants, e.g., + -- + -- enum E { + -- E0 = 42, + -- E1, + -- } + discrWNat <- liftIO $ scNat sc $ natValue discrW + possibleDiscrTerms <- liftIO $ + traverse (\discr -> do + discrNat <- scNat sc $ fromInteger discr + scBvNat sc discrWNat discrNat) + (map getEnumVariantDiscr variants) + scFalse <- liftIO $ scBool sc False + possibleDiscrPredTerm <- liftIO $ + foldM + (\z possibleDiscrTerm -> do + p <- scBvEq sc discrWNat (ttTerm discrVar) possibleDiscrTerm + scOr sc p z) + scFalse + possibleDiscrTerms + possibleDiscrPred <- liftIO $ resolveSAWPred cc possibleDiscrPredTerm + loc <- SS.toW4Loc "mir_fresh_expanded_value" <$> lift (lift getPosition) + liftIO $ Crucible.addAssumption bak $ + Crucible.GenericAssumption + loc "Symbolic enum discriminant constraints" possibleDiscrPred + + -- Finally, create symbolic fields for each of the possible variants. + let variantAssns :: [Some (Ctx.Assignment FieldShape)] + variantAssns = + FC.toListFC + (\(VariantShape fldShps) -> Some fldShps) + variantShps + variantVals <- + zipWithM + (\variant (Some fldShps) -> + let variantPfx = pfx <> "_" <> getEnumVariantShortName variant in + goFlds variantPfx fldShps) + variants + variantAssns + + pure $ MirSetupEnumSymbolic adt discrVal variantVals + goFlds :: forall ctx. Text -> Ctx.Assignment FieldShape ctx -> @@ -363,12 +461,25 @@ constructExpandedSetupValue cc sc = go goFlds pfx fldShps = sequenceA $ FCI.itoListFC (\idx fldShp -> - let pfx' = pfx <> "." <> Text.pack (show idx) in + let pfx' = pfx <> "_" <> Text.pack (show idx) in case fldShp of ReqField shp' -> go pfx' shp' OptField shp' -> go pfx' shp') fldShps + -- Create a fresh variable of a primitive MIR type (where \"primitive\" + -- is defined by the @cryptolTypeOfActual@ function). + freshPrimVariable :: + Text -> + Mir.Ty -> + CrucibleSetup MIR TypedTerm + freshPrimVariable pfx ty = + case cryptolTypeOfActual ty of + Nothing -> + X.throwM $ MIRFreshExpandedValueUnsupportedType ty + Just cty -> + Setup.freshVariable sc pfx cty + adt_not_found_panic :: String -> Mir.DefId -> a adt_not_found_panic shapeName adtName = panic "constructExpandedSetupValue" @@ -595,6 +706,45 @@ mir_verify rm nm lemmas checkSat setup tactic = ps <- io (MS.mkProvedSpec MS.SpecProved methodSpec stats vcstats lemmaSet diff) returnProof ps +----- +-- MIR enums +----- + +-- | Construct a specific enum variant. This does a light amount of validity +-- checking, which is the only reason that this function is monadic. +mir_enum_value :: + X.MonadThrow m => + Mir.Adt -> + String -> + [MS.SetupValue MIR] -> + m (MS.SetupValue MIR) +mir_enum_value adt variantNm vs = + case adt of + Mir.Adt adtNm (Mir.Enum _) variants _ _ _ _ -> do + (variantIdx, variant) <- + case FWI.ifind (\_ v -> variantDefIdMatches v) variants of + Just iv -> + pure iv + Nothing -> + X.throwM $ MIREnumValueVariantNotFound adtNm variantNm + pure $ MS.SetupEnum $ MirSetupEnumVariant adt variant variantIdx vs + Mir.Adt adtNm Mir.Struct _ _ _ _ _ -> + X.throwM $ MIREnumValueNonEnum adtNm "struct" + Mir.Adt adtNm Mir.Union _ _ _ _ _ -> + X.throwM $ MIREnumValueNonEnum adtNm "union" + where + variantNmText :: Text + variantNmText = Text.pack variantNm + + -- Check if the user-supplied String argument matches the name of the given + -- variant's DefId. For instance, the variant DefId might be named + -- @core::option[0]::Option[0]::Some[0]@, but the user will simply write + -- @Some@, so we must strip off the other parts of the DefId before checking + -- if the two are the same. + variantDefIdMatches :: Mir.Variant -> Bool + variantDefIdMatches variant = + getEnumVariantShortName variant == variantNmText + ----- -- MIR slices ----- @@ -1161,6 +1311,20 @@ findFn rm nm = do Just x -> return x Nothing -> fail $ "Couldn't find MIR function named: " ++ nm +-- | Given a full enum variant identifier (e.g., +-- @core::option[0]::Option[0]::Some[0]@, retrieve the part of the identifier +-- that corresponds to the variant's shorthand name (e.g., @Some@). +getEnumVariantShortName :: Mir.Variant -> Text +getEnumVariantShortName variant + | Just (_, (variantNm, _)) <- List.unsnoc (variant ^. Mir.vname . Mir.didPath) + = variantNm + + | otherwise + = panic "getEnumVariantShortName" + [ "Malformed enum variant identifier" + , show $ variant ^. Mir.vname + ] + getMIRCrucibleContext :: CrucibleSetup MIR MIRCrucibleContext getMIRCrucibleContext = view Setup.csCrucibleContext <$> get @@ -1383,6 +1547,8 @@ data MIRSetupError | MIRArgNumberWrong Int Int -- number expected, number found | MIRReturnUnexpected Mir.Ty -- found | MIRReturnTypeMismatch Mir.Ty Mir.Ty -- expected, found + | MIREnumValueVariantNotFound Mir.DefId String + | MIREnumValueNonEnum Mir.DefId String -- The String is either \"struct\" or \"union\" instance X.Exception MIRSetupError where toException = topLevelExceptionToException @@ -1420,3 +1586,13 @@ instance Show MIRSetupError where , "Expected type: " ++ show (PP.pretty expected) , "Given type: " ++ show (PP.pretty found) ] + MIREnumValueVariantNotFound adtNm variantNm -> + unlines + [ "mir_enum_value: Could not find a variant named `" ++ variantNm ++ "`" + , "in the enum " ++ show adtNm + ] + MIREnumValueNonEnum adtNm what -> + unlines + [ "mir_enum_value: Expected enum, received " ++ what + , show adtNm + ] diff --git a/src/SAWScript/Crucible/MIR/MethodSpecIR.hs b/src/SAWScript/Crucible/MIR/MethodSpecIR.hs index c52292ea43..a05c2d6ebc 100644 --- a/src/SAWScript/Crucible/MIR/MethodSpecIR.hs +++ b/src/SAWScript/Crucible/MIR/MethodSpecIR.hs @@ -48,6 +48,9 @@ module SAWScript.Crucible.MIR.MethodSpecIR -- * @MIRMethodSpec@ , MIRMethodSpec + -- * @MirSetupEnum@ + , MirSetupEnum(..) + -- * @MirSetupSlice@ , MirSetupSlice(..) diff --git a/src/SAWScript/Crucible/MIR/Override.hs b/src/SAWScript/Crucible/MIR/Override.hs index 666fcec74c..121e7ebaab 100644 --- a/src/SAWScript/Crucible/MIR/Override.hs +++ b/src/SAWScript/Crucible/MIR/Override.hs @@ -7,6 +7,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeOperators #-} @@ -67,6 +68,7 @@ import qualified Mir.TransTy as Mir import qualified What4.Expr as W4 import qualified What4.Interface as W4 import qualified What4.LabeledPred as W4 +import qualified What4.Partial as W4 import qualified What4.ProgramLoc as W4 import Verifier.SAW.SharedTerm @@ -892,6 +894,7 @@ instantiateSetupValue sc s v = MS.SetupTerm tt -> MS.SetupTerm <$> doTerm tt MS.SetupArray elemTy vs -> MS.SetupArray elemTy <$> mapM (instantiateSetupValue sc s) vs MS.SetupStruct did vs -> MS.SetupStruct did <$> mapM (instantiateSetupValue sc s) vs + MS.SetupEnum enum_ -> MS.SetupEnum <$> instantiateSetupEnum enum_ MS.SetupTuple x vs -> MS.SetupTuple x <$> mapM (instantiateSetupValue sc s) vs MS.SetupSlice slice -> MS.SetupSlice <$> instantiateSetupSlice slice MS.SetupNull empty -> absurd empty @@ -904,6 +907,14 @@ instantiateSetupValue sc s v = where doTerm (TypedTerm schema t) = TypedTerm schema <$> scInstantiateExt sc s t + instantiateSetupEnum :: MirSetupEnum -> IO MirSetupEnum + instantiateSetupEnum (MirSetupEnumVariant adt variant variantIdx vs) = + MirSetupEnumVariant adt variant variantIdx <$> + mapM (instantiateSetupValue sc s) vs + instantiateSetupEnum (MirSetupEnumSymbolic adt discr variants) = + MirSetupEnumSymbolic adt discr <$> + mapM (mapM (instantiateSetupValue sc s)) variants + instantiateSetupSlice :: MirSetupSlice -> IO MirSetupSlice instantiateSetupSlice (MirSetupSliceRaw ref len) = MirSetupSliceRaw @@ -1023,6 +1034,7 @@ learnSetupCondition opts sc cc spec prepost cond = -- | Match the value of a function argument with a symbolic 'SetupValue'. matchArg :: + forall w. Options {- ^ saw script print out opts -} -> SharedContext {- ^ context for constructing SAW terms -} -> MIRCrucibleContext {- ^ context for interacting with Crucible -} -> @@ -1073,40 +1085,120 @@ matchArg opts sc cc cs prepost md actual expectedTy expected = (MIRVal (StructShape _ _ xsFldShps) (Crucible.AnyValue tpr@(Crucible.StructRepr _) xs), Mir.TyAdt _ _ _, MS.SetupStruct adt zs) - | Ctx.sizeInt (Ctx.size xs) == length zs - , let xsTpr = Crucible.StructRepr (FC.fmapFC fieldShapeType xsFldShps) - , Just Refl <- W4.testEquality tpr xsTpr -> - case adt of - Mir.Adt _ Mir.Struct [v] _ _ _ _ -> - let ys = v ^.. Mir.vfields . each . Mir.fty in - sequence_ - [ case xFldShp of - ReqField shp -> - matchArg opts sc cc cs prepost md (MIRVal shp x) y z - OptField shp -> do - let x' = readMaybeType sym "field" (shapeType shp) x - matchArg opts sc cc cs prepost md (MIRVal shp x') y z - | (Some (Functor.Pair xFldShp (Crucible.RV x)), y, z) <- - zip3 (FC.toListFC Some (Ctx.zipWith Functor.Pair xsFldShps xs)) - ys - zs ] - Mir.Adt _ ak _ _ _ _ _ -> - panic "matchArg" ["AdtKind " ++ show ak ++ " not yet implemented"] + | let xsTpr = Crucible.StructRepr (FC.fmapFC fieldShapeType xsFldShps) + , Just Refl <- W4.testEquality tpr xsTpr -> do + let variants = adt ^. Mir.adtvariants + variant <- + case variants of + [variant] -> + pure variant + _ -> + panic "matchArg" + [ "Encountered struct Adt with " ++ + show (length variants) ++ + " variants:" + , show $ adt ^. Mir.adtname + ] + let ys = variant ^.. Mir.vfields . each . Mir.fty + matchFields sym xsFldShps xs ys zs + + -- In order to match an enum value, we first check to see if the expected + -- value is a specific enum variant or a symbolic enum... + (MIRVal (EnumShape _ _ variantShps _ discrShp) + (Crucible.AnyValue + (Mir.RustEnumRepr discrTpr variantCtx) + (Ctx.Empty + Ctx.:> Crucible.RV actualDiscr + Ctx.:> Crucible.RV variantAssn)), + _, + MS.SetupEnum enum_) + | Just Refl <- W4.testEquality (shapeType discrShp) discrTpr + , Just Refl <- W4.testEquality (FC.fmapFC variantShapeType variantShps) variantCtx -> + case enum_ of + -- ...if the expected value is a specific enum variant, then we must: + -- + -- - Ensure that the discriminant values match + -- - Ensure that the predicate in the variant's VariantBranch holds. + -- This should always succeed if the discriminant values match. + -- - Match the fields of the VariantBranch's payload point-wise. + MirSetupEnumVariant adt variant variantIdxInt zs -> do + Some variantIdx <- pure $ + variantIntIndex (adt ^. Mir.adtname) variantIdxInt (Ctx.size variantAssn) + VariantShape xsFldShps <- pure $ variantShps Ctx.! variantIdx + let Crucible.VB expectedVariant = variantAssn Ctx.! variantIdx + let ys = variant ^.. Mir.vfields . each . Mir.fty + + -- Ensure that the discriminant values match. + IsBVShape _ discrW <- pure $ testDiscriminantIsBV discrShp + let discr = getEnumVariantDiscr variant + expectedDiscr <- liftIO $ + W4.bvLit sym discrW $ BV.mkBV discrW discr + discrEq <- liftIO $ + W4.bvEq sym expectedDiscr actualDiscr + addAssert discrEq md =<< notEq + + case expectedVariant of + W4.PE xsPred xs -> do + -- Ensure that the variant is defined, i.e., that the predicate + -- in the underlying PartialExpr holds. Due to the way that we + -- construct specific enum values, this should always hold if + -- the discriminant values match, but we check it anyway to be + -- on the safe side. + addAssert xsPred md =<< notEq + -- Finally, ensure that the fields match point-wise. + matchFields sym xsFldShps xs ys zs + W4.Unassigned -> + -- If we see `Unassigned`, we immediately know that the variant + -- should not be defined. Because we know in advance that this + -- VariantBranch's predicate *should* hold, the overall match + -- will fail. + fail_ + + -- ...if the expected value is a symbolic enum (see + -- Note [Symbolic enums] in SAWScript.Crucible.MIR.Setup.Value), then + -- we employ a more general version of the `MirSetupEnumVariant` case + -- above: + -- + -- - Ensure that the discriminant values match + -- - For each possible variant, match the fields of the + -- VariantBranch's payload point-wise under the assumption that + -- the VariantBranch's predicate holds. + -- + -- The `MirSetupEnumVariant` case can be seen as a special case of + -- this approach where we already know that one specific + -- VariantBranch's predicate should hold, and the predicates in all + -- other VariantBranches should be false. + MirSetupEnumSymbolic adt expectedDiscr variantFlds -> do + -- Ensure that the discriminant values match. + let discrTp = shapeMirTy discrShp + matchArg opts sc cc cs prepost md (MIRVal discrShp actualDiscr) discrTp expectedDiscr + + sequence_ @_ @_ @() + [ case xPE of + W4.PE xsPred xs -> + -- For each variant, check that the fields of the variant + -- (xs) match point-wise under the assumption that the + -- VariantBranch's predicate (xsPred) holds. + withConditionalPred xsPred $ + matchFields sym xsFldShps xs ys zs + W4.Unassigned -> + -- If we see `Unassigned`, then we immediately know that the + -- variant should not defined. We can skip checking anything + -- in this case, since we know that the fields of the + -- variant cannot match. (Note that we do not fail outright, + -- as it is still possible that other variants might + -- match.) + pure () + | (Some (Functor.Pair (VariantShape xsFldShps) (Crucible.VB xPE)), ys, zs) <- + zip3 + (FC.toListFC Some (Ctx.zipWith Functor.Pair variantShps variantAssn)) + (map (\v -> v ^.. Mir.vfields . each . Mir.fty) (adt ^. Mir.adtvariants)) + variantFlds + ] -- match the fields of a tuple point-wise (MIRVal (TupleShape _ _ xsFldShps) xs, Mir.TyTuple ys, MS.SetupTuple () zs) -> - sequence_ - [ case xFldShp of - ReqField shp -> - matchArg opts sc cc cs prepost md (MIRVal shp x) y z - OptField shp -> do - let x' = readMaybeType sym "field" (shapeType shp) x - matchArg opts sc cc cs prepost md (MIRVal shp x') y z - | (Some (Functor.Pair xFldShp (Crucible.RV x)), y, z) <- - zip3 (FC.toListFC Some (Ctx.zipWith Functor.Pair xsFldShps xs)) - ys - zs - ] + matchFields sym xsFldShps xs ys zs -- Match the parts of a slice point-wise (MIRVal (SliceShape _ actualElemTy actualMutbl actualElemTpr) @@ -1182,8 +1274,36 @@ matchArg opts sc cc cs prepost md actual expectedTy expected = nameEnv = MS.csTypeNames cs loc = MS.conditionLoc md + + fail_ :: OverrideMatcher MIR w a fail_ = failure loc =<< mkStructuralMismatch opts cc sc cs actual expected expectedTy + + -- Match the fields (point-wise) in a tuple, a struct, or enum variant. + matchFields :: + Sym -> + Ctx.Assignment FieldShape ctx -> + Ctx.Assignment (Crucible.RegValue' Sym) ctx -> + [Mir.Ty] -> + [SetupValue] -> + OverrideMatcher MIR w () + matchFields sym xsFldShps xs ys zs = do + -- As a sanity check, first ensure that the number of fields matches + -- what is expected. + unless (Ctx.sizeInt (Ctx.size xs) == length zs) fail_ + -- Then match the fields point-wise. + sequence_ + [ case xFldShp of + ReqField shp -> + matchArg opts sc cc cs prepost md (MIRVal shp x) y z + OptField shp -> do + let x' = readMaybeType sym "field" (shapeType shp) x + matchArg opts sc cc cs prepost md (MIRVal shp x') y z + | (Some (Functor.Pair xFldShp (Crucible.RV x)), y, z) <- + zip3 (FC.toListFC Some (Ctx.zipWith Functor.Pair xsFldShps xs)) + ys + zs ] + notEq = notEqual prepost opts loc cc sc cs expected actual -- | For each points-to statement read the memory value through the @@ -1240,6 +1360,7 @@ matchPointsTos opts sc cc spec prepost = go False [] case v of MS.SetupVar i -> Set.singleton i MS.SetupStruct _ xs -> foldMap setupVars xs + MS.SetupEnum enum_ -> setupEnum enum_ MS.SetupTuple _ xs -> foldMap setupVars xs MS.SetupSlice slice -> setupSlice slice MS.SetupArray _ xs -> foldMap setupVars xs @@ -1252,6 +1373,13 @@ matchPointsTos opts sc cc spec prepost = go False [] MS.SetupUnion empty _ _ -> absurd empty MS.SetupNull empty -> absurd empty + -- Compute the set of variable identifiers in a 'MirSetupEnum' + setupEnum :: MirSetupEnum -> Set AllocIndex + setupEnum (MirSetupEnumVariant _ _ _ xs) = + foldMap setupVars xs + setupEnum (MirSetupEnumSymbolic _ _ variants) = + foldMap (foldMap setupVars) variants + -- Compute the set of variable identifiers in a 'MirSetupSlice' setupSlice :: MirSetupSlice -> Set AllocIndex setupSlice (MirSetupSliceRaw ref len) = diff --git a/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs b/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs index 4727199da3..57ce46397d 100644 --- a/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs +++ b/src/SAWScript/Crucible/MIR/ResolveSetupValue.hs @@ -29,10 +29,16 @@ module SAWScript.Crucible.MIR.ResolveSetupValue , mirAdtToTy , findDefId , findDefIdEither + -- * Static items , findStatic , findStaticInitializer , findStaticVar , staticRefMux + -- * Enum discriminants + , getEnumVariantDiscr + , testDiscriminantIsBV + , variantIntIndex + -- * Types of errors , MIRTypeOfError(..) ) where @@ -45,6 +51,7 @@ import qualified Data.BitVector.Sized as BV import qualified Data.Foldable as F import qualified Data.Functor.Product as Functor import Data.Kind (Type) +import qualified Data.List.Extra as List (firstJust) import Data.List.NonEmpty (NonEmpty(..)) import Data.Map (Map) import qualified Data.Map as Map @@ -67,8 +74,10 @@ import qualified Cryptol.TypeCheck.AST as Cryptol (Type, Schema(..)) import qualified Cryptol.Utils.PP as Cryptol (pp) import Lang.Crucible.Backend (IsSymInterface) import Lang.Crucible.Simulator - ( AnyValue(..), GlobalVar(..), RegValue, RegValue'(..), SymGlobalState ) -import Lang.Crucible.Types (MaybeType, TypeRepr(..)) + ( AnyValue(..), GlobalVar(..), RegValue, RegValue'(..), SymGlobalState + , VariantBranch(..), injectVariant + ) +import Lang.Crucible.Types (AnyType, MaybeType, TypeRepr(..)) import qualified Mir.DefId as Mir import qualified Mir.FancyMuxTree as Mir import qualified Mir.Generator as Mir @@ -115,7 +124,7 @@ ppMIRVal sym (MIRVal shp val) = PrimShape _ _ -> W4.printSymExpr val TupleShape _ _ fldShp -> - PP.parens $ prettyStructOrTuple fldShp val + PP.parens $ prettyAdtOrTuple fldShp val ArrayShape _ _ shp' -> case val of Mir.MirVector_Vector vec -> @@ -130,10 +139,22 @@ ppMIRVal sym (MIRVal shp val) = StructShape _ _ fldShp | AnyValue (StructRepr fldTpr) fldVals <- val , Just Refl <- W4.testEquality (FC.fmapFC fieldShapeType fldShp) fldTpr - -> PP.braces $ prettyStructOrTuple fldShp fldVals + -> PP.braces $ prettyAdtOrTuple fldShp fldVals | otherwise -> error "Malformed MIRVal struct" + EnumShape _ _ variantShps _ _ + | AnyValue (Mir.RustEnumRepr _ variantCtx) + (Ctx.Empty Ctx.:> RV _ Ctx.:> RV variants) <- val + , Just Refl <- W4.testEquality (FC.fmapFC variantShapeType variantShps) variantCtx + -> case firstConcreteVariant variantShps variants of + Just (Some (Functor.Pair fldShps fldVals)) -> + PP.braces $ prettyAdtOrTuple fldShps fldVals + Nothing -> + "" + + | otherwise + -> error "Malformed MIRVal enum" TransparentShape _ shp' -> ppMIRVal sym $ MIRVal shp' val RefShape _ _ _ _ -> @@ -147,12 +168,35 @@ ppMIRVal sym (MIRVal shp val) = commaList [] = PP.emptyDoc commaList (x:xs) = x PP.<> PP.hcat (map (\y -> PP.comma PP.<+> y) xs) - prettyStructOrTuple :: + -- Return Just the first VariantBranch whose predicate is concretely equal + -- to True. If none of the VariantBranches satisfy this property, then + -- return Nothing. + firstConcreteVariant :: + Ctx.Assignment VariantShape ctx -> + Ctx.Assignment (VariantBranch Sym) ctx -> + Maybe (Some (Functor.Product + (Ctx.Assignment FieldShape) + (Ctx.Assignment (RegValue' Sym)))) + firstConcreteVariant variantShapes variantBranches = + List.firstJust + (\(Some (Functor.Pair (VariantShape fldShps) (VB branch))) -> + case branch of + W4.PE fldPred fldVals + | W4.asConstantPred fldPred == Just True + -> Just $ Some $ Functor.Pair fldShps fldVals + | otherwise + -> Nothing + W4.Unassigned -> + Nothing) $ + FC.toListFC Some $ + Ctx.zipWith Functor.Pair variantShapes variantBranches + + prettyAdtOrTuple :: forall ctx. Ctx.Assignment FieldShape ctx -> Ctx.Assignment (RegValue' Sym) ctx -> PP.Doc ann - prettyStructOrTuple fldShp fldVals = + prettyAdtOrTuple fldShp fldVals = commaList $ map (\(Some (Functor.Pair shp' (RV v))) -> prettyField shp' v) $ FC.toListFC Some $ @@ -245,6 +289,12 @@ typeOfSetupValue mcc env nameEnv val = pure $ Mir.TyArray elemTy (length vs) MS.SetupStruct adt _ -> pure $ mirAdtToTy adt + MS.SetupEnum enum_ -> + case enum_ of + MirSetupEnumVariant adt _ _ _ -> + pure $ mirAdtToTy adt + MirSetupEnumSymbolic adt _ _ -> + pure $ mirAdtToTy adt MS.SetupTuple () vals -> do tys <- traverse (typeOfSetupValue mcc env nameEnv) vals pure $ Mir.TyTuple tys @@ -312,48 +362,206 @@ resolveSetupVal mcc env tyenv nameEnv val = MS.SetupStruct adt flds -> case adt of _ | adt ^. Mir.adtReprTransparent, - [fld] <- flds -> do - MIRVal shp fld' <- resolveSetupVal mcc env tyenv nameEnv fld - pure $ MIRVal (TransparentShape (mirAdtToTy adt) shp) fld' - Mir.Adt nm Mir.Struct [variant] _ _ _ _ -> do + [fld] <- flds -> + resolveTransparentSetupVal adt fld + Mir.Adt nm Mir.Struct variants _ _ _ _ -> do + -- First, retrieve the struct variant. + variant <- + case variants of + [variant] -> + pure variant + _ -> + panic "resolveSetupVal" + [ "Encountered struct Adt with " ++ + show (length variants) ++ + " variants:" + , show nm + ] + + -- Next, resolve the field values and check that they have the + -- expected types. flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds let expectedFlds = variant ^. Mir.vfields - let expectedFldsNum = length expectedFlds let actualFldTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' - let actualFldsNum = length actualFldTys - unless (expectedFldsNum == actualFldsNum) $ - fail $ unlines - [ "Mismatch in number of struct fields" - , "Struct name: " ++ show nm - , "Expected number of fields: " ++ show expectedFldsNum - , "Actual number of fields: " ++ show actualFldsNum - ] - zipWithM_ - (\expectedFld actualFldTy -> - let expectedFldTy = expectedFld ^. Mir.fty in - let expectedFldName = expectedFld ^. Mir.fName in - unless (checkCompatibleTys expectedFldTy actualFldTy) $ - fail $ unlines - [ "Struct field type mismatch" - , "Field name: " ++ show expectedFldName - , "Expected type: " ++ show (PP.pretty expectedFldTy) - , "Given type: " ++ show (PP.pretty actualFldTy) - ]) - expectedFlds - actualFldTys - Some fldAssn <- - pure $ Ctx.fromList $ - map (\(MIRVal shp v) -> - if Mir.canInitialize col (shapeMirTy shp) - then Some $ Functor.Pair (ReqField shp) (RV v) - else Some $ Functor.Pair (OptField shp) (RV (W4.justPartExpr sym v))) - flds' - let (fldShpAssn, valAssn) = Ctx.unzip fldAssn + checkFields nm "Struct" "struct fields" expectedFlds actualFldTys + + -- Finally, construct a MIRVal of the appropriate shape. + Some (Functor.Pair fldShpAssn valAssn) <- + pure $ variantFieldsToAssns sym flds' let structShp = StructShape (mirAdtToTy adt) actualFldTys fldShpAssn let structTpr = StructRepr (FC.fmapFC fieldShapeType fldShpAssn) pure $ MIRVal structShp (AnyValue structTpr valAssn) - Mir.Adt _ ak _ _ _ _ _ -> - panic "resolveSetupVal" ["AdtKind " ++ show ak ++ " not yet implemented"] + Mir.Adt nm (Mir.Enum _) _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected struct type, received enum:" + , show nm + ] + Mir.Adt nm Mir.Union _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected struct type, received union:" + , show nm + ] + MS.SetupEnum enum_ -> + case enum_ of + MirSetupEnumVariant adt variant variantIdxInt flds -> + case adt of + _ | adt ^. Mir.adtReprTransparent, + [fld] <- flds -> do + resolveTransparentSetupVal adt fld + Mir.Adt nm (Mir.Enum discrTp) variants _ _ _ _ -> do + -- Resolve the field values and check that they have the expected + -- types. + flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds + let expectedFlds = variant ^. Mir.vfields + let actualFldTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' + checkFields + nm + "Enum" + ("fields in enum variant " ++ show (variant ^. Mir.vname)) + expectedFlds + actualFldTys + + -- Ensure that the discriminant has an integral type and build + -- a symbolic bitvector from it. + Some discrTpr <- pure $ Mir.tyToRepr col discrTp + let discrShp = tyToShapeEq col discrTp discrTpr + IsBVShape _ discrW <- pure $ testDiscriminantIsBV discrShp + let discr = getEnumVariantDiscr variant + discrVal <- W4.bvLit sym discrW $ BV.mkBV discrW discr + + -- Construct an EnumShape and RustEnumRepr. This requires + -- processing /all/ variants, not just the particular variant that + -- we are building. + (enumShp, Some expectedVariantShps) <- pure $ + enumShapes adt discrTp discrShp variants + let variantTprs = + FC.fmapFC variantShapeType expectedVariantShps + let enumTpr = Mir.RustEnumRepr + discrTpr + variantTprs + + -- Construct the VariantShape of the particular variant that we + -- are building. + Some variantIdx <- pure $ + variantIntIndex nm variantIdxInt $ + Ctx.size expectedVariantShps + VariantShape expectedFldAssn <- + pure $ expectedVariantShps Ctx.! variantIdx + + -- Check that the actual field values match the expected types. + Some (Functor.Pair actualFldAssn actualValAssn) <- + pure $ variantFieldsToAssns sym flds' + Refl <- + case W4.testEquality expectedFldAssn actualFldAssn of + Just r -> pure r + Nothing -> + panic "resolveSetupVal" + [ "Enum field shape mismatch" + , "Expected: " ++ show expectedFldAssn + , "Actual: " ++ show actualFldAssn + ] + + -- Finally, construct a MIRVal. + let enumVal = + Ctx.empty + Ctx.:> RV discrVal + Ctx.:> RV (injectVariant sym variantTprs variantIdx actualValAssn) + pure $ MIRVal enumShp $ AnyValue enumTpr enumVal + Mir.Adt nm Mir.Struct _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received struct:" + , show nm + ] + Mir.Adt nm Mir.Union _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received union:" + , show nm + ] + -- See Note [Symbolic enums] in SAWScript.Crucible.MIR.Setup.Value for + -- more information on the approach used to resolve symbolic enum + -- values. + MirSetupEnumSymbolic adt discr variantFlds -> + case adt of + _ | adt ^. Mir.adtReprTransparent -> + -- `repr(transparent)` enum values use MirSetupEnumVariant rather + -- than MirSetupEnumSymbolic. See the Haddocks for + -- MirSetupEnumSymbolic for an explanation. + panic "resolveSetupVal" + [ "Symbolic enum of type " ++ show (adt ^. Mir.adtname) + , "that uses MirSetupEnumSymbolic rather than MirSetupEnumVarianr" + ] + Mir.Adt nm (Mir.Enum discrTp) variants _ _ _ _ -> do + -- Resolve the discriminant value and ensure that it has an + -- integral type. + MIRVal discrShp discrVal <- resolveSetupVal mcc env tyenv nameEnv discr + IsBVShape _ discrW <- pure $ testDiscriminantIsBV discrShp + let discrTpr = shapeType discrShp + + -- Resolve the field values in each possible variant and check + -- that they have the expected types. + variantFlds' <- + zipWithM + (\variant flds -> do + let variantDiscr = getEnumVariantDiscr variant + variantDiscrBV <- W4.bvLit sym discrW $ BV.mkBV discrW variantDiscr + branch <- W4.bvEq sym variantDiscrBV discrVal + flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds + let expectedFlds = variant ^. Mir.vfields + let actualFldTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' + checkFields + nm + "Enum" + ("fields in enum variant " ++ show (variant ^. Mir.vname)) + expectedFlds + actualFldTys + Some (Functor.Pair fldShpAssn valAssn) <- + pure $ variantFieldsToAssns sym flds' + pure $ Some + $ Functor.Pair + (VariantShape fldShpAssn) + (VB (W4.PE branch valAssn))) + variants + variantFlds + Some variantBranchAssn <- pure $ Ctx.fromList variantFlds' + let (actualVariantShps, branchAssn) = + Ctx.unzip variantBranchAssn + + -- Construct an EnumShape and RustEnumRepr. + (enumShp, Some expectedVariantShps) <- pure $ + enumShapes adt discrTp discrShp variants + let variantTprs = + FC.fmapFC variantShapeType expectedVariantShps + let enumTpr = Mir.RustEnumRepr + discrTpr + variantTprs + + -- Check that the actual variant types match the expected types. + Refl <- + case W4.testEquality expectedVariantShps actualVariantShps of + Just r -> pure r + Nothing -> + panic "resolveSetupVal" + [ "Enum variant shape mismatch" + , "Expected: " ++ show expectedVariantShps + , "Actual: " ++ show actualVariantShps + ] + + -- Finally, construct a MIRVal. + let enumVal = + Ctx.empty + Ctx.:> RV discrVal + Ctx.:> RV branchAssn + pure $ MIRVal enumShp $ AnyValue enumTpr enumVal + Mir.Adt nm Mir.Struct _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received struct:" + , show nm + ] + Mir.Adt nm Mir.Union _ _ _ _ _ -> + panic "resolveSetupVal" + [ "Expected enum type, received union:" + , show nm + ] MS.SetupTuple () flds -> do flds' <- traverse (resolveSetupVal mcc env tyenv nameEnv) flds let fldMirTys = map (\(MIRVal shp _) -> shapeMirTy shp) flds' @@ -427,6 +635,72 @@ resolveSetupVal mcc env tyenv nameEnv val = usizeBvLit :: Sym -> Int -> IO (W4.SymBV Sym Mir.SizeBits) usizeBvLit sym = W4.bvLit sym W4.knownNat . BV.mkBV W4.knownNat . toInteger + -- Perform a light amount of typechecking on the fields in a struct or enum + -- variant. This ensures that the variant receives the expected number of + -- types and that the types of each field match. + checkFields :: + Mir.DefId {- The struct or enum name. (Only used for error messages.) -} -> + String {- "Struct" or "Enum". (Only used for error messages.) -} -> + String {- What type of fields are we checking? + (Only used for error messages.) -} -> + [Mir.Field] {- The expected fields. -} -> + [Mir.Ty] {- The actual field types. -} -> + IO () + checkFields adtNm what fieldDiscr expectedFlds actualFldTys = do + let expectedFldsNum = length expectedFlds + let actualFldsNum = length actualFldTys + unless (expectedFldsNum == actualFldsNum) $ + fail $ unlines + [ "Mismatch in number of " ++ fieldDiscr + , what ++ " name: " ++ show adtNm + , "Expected number of fields: " ++ show expectedFldsNum + , "Actual number of fields: " ++ show actualFldsNum + ] + zipWithM_ + (\expectedFld actualFldTy -> + let expectedFldTy = expectedFld ^. Mir.fty in + let expectedFldName = expectedFld ^. Mir.fName in + unless (checkCompatibleTys expectedFldTy actualFldTy) $ + fail $ unlines + [ what ++ " field type mismatch" + , "Field name: " ++ show expectedFldName + , "Expected type: " ++ show (PP.pretty expectedFldTy) + , "Given type: " ++ show (PP.pretty actualFldTy) + ]) + expectedFlds + actualFldTys + + -- Construct the 'TypeShape' for an enum, along with the 'VariantShape's for + -- the enum's variants. + enumShapes :: + Mir.Adt {- The enum type -} -> + Mir.Ty {- The discriminant's MIR type -} -> + TypeShape discrShp {- The discriminant's TypeShape -} -> + [Mir.Variant] {- The enum's variants -} -> + (TypeShape AnyType, Some (Ctx.Assignment VariantShape)) + enumShapes adt discrTp discrShp variants + | let variantTys = + map (\v -> v ^.. Mir.vfields . each . Mir.fty) variants + , Some variantShps <- + Ctx.fromList $ + map (\fldTys -> + case Ctx.fromList $ + map + (\ty -> + case tyToShape col ty of + Some shp -> + if Mir.canInitialize col ty + then Some $ ReqField shp + else Some $ OptField shp) + fldTys of + Some fldAssn -> Some $ VariantShape fldAssn) + variantTys + , let enumShp = + EnumShape + (mirAdtToTy adt) variantTys + variantShps discrTp discrShp + = (enumShp, Some variantShps) + -- Resolve parts of a slice that are shared in common between -- 'MirSetupSlice' and 'MirSetupSliceRange'. resolveSetupSliceFromArray :: @@ -445,6 +719,36 @@ resolveSetupVal mcc env tyenv nameEnv val = pure $ SetupSliceFromArray elemTpr sliceShp refVal len _ -> X.throwM $ MIRSliceNonArrayReference $ shapeMirTy arrRefShp + -- Resolve a transparent struct or enum value. + resolveTransparentSetupVal :: Mir.Adt -> SetupValue -> IO MIRVal + resolveTransparentSetupVal adt fld = do + MIRVal shp fld' <- resolveSetupVal mcc env tyenv nameEnv fld + pure $ MIRVal (TransparentShape (mirAdtToTy adt) shp) fld' + + -- Given the list of fields in a struct or enum variant, construct two + -- Assignments, where the first Assignment consists of each field's type, + -- and the second assignment consists of each field's value. + variantFieldsToAssns :: + Sym -> + [MIRVal] -> + Some (Functor.Product + (Ctx.Assignment FieldShape) + (Ctx.Assignment (RegValue' Sym))) + variantFieldsToAssns sym flds + | Some fldValAssn <- someFldValAssn + , (fldAssn, valAssn) <- Ctx.unzip fldValAssn + = Some $ Functor.Pair fldAssn valAssn + where + someFldValAssn :: + Some (Ctx.Assignment (Functor.Product FieldShape (RegValue' Sym))) + someFldValAssn = + Ctx.fromList $ + map (\(MIRVal shp v) -> + if Mir.canInitialize col (shapeMirTy shp) + then Some $ Functor.Pair (ReqField shp) (RV v) + else Some $ Functor.Pair (OptField shp) (RV (W4.justPartExpr sym v))) + flds + -- | An intermediate data structure that is only used by -- 'resolveSetupSliceFromArray'. data SetupSliceFromArray where @@ -697,6 +1001,21 @@ equalValsPred cc mv1 mv2 = goFldAssn fldShp fldAssn1 fldAssn2 (_, _) -> pure $ W4.falsePred sym + goTy (EnumShape _ _ variantShp _ discrShp) any1 any2 = + case (any1, any2) of + (AnyValue (Mir.RustEnumRepr discrTpr1 variantCtx1) + (Ctx.Empty Ctx.:> RV discr1 Ctx.:> RV variant1), + AnyValue (Mir.RustEnumRepr discrTpr2 variantCtx2) + (Ctx.Empty Ctx.:> RV discr2 Ctx.:> RV variant2)) -> do + Refl <- testEquality discrTpr1 discrTpr2 + Refl <- testEquality (shapeType discrShp) discrTpr1 + Refl <- testEquality variantCtx1 variantCtx2 + Refl <- testEquality (FC.fmapFC variantShapeType variantShp) variantCtx1 + discrPred <- goTy discrShp discr1 discr2 + variantPred <- goVariantAssn variantShp variant1 variant2 + liftIO $ W4.andPred sym discrPred variantPred + (_, _) -> + pure $ W4.falsePred sym goTy (TransparentShape _ shp) v1 v2 = goTy shp v1 v2 goTy (RefShape _ _ _ _) ref1 ref2 = @@ -749,6 +1068,34 @@ equalValsPred cc mv1 mv2 = (W4.truePred sym) (Ctx.zipWith Functor.Pair fldAssn1 fldAssn2) + goVariantAssn :: Ctx.Assignment VariantShape ctx + -> Ctx.Assignment (VariantBranch Sym) ctx + -> Ctx.Assignment (VariantBranch Sym) ctx + -> MaybeT IO (W4.Pred Sym) + goVariantAssn variantShp vbAssn1 vbAssn2 = + FCI.ifoldrMFC + (\idx (Functor.Pair (VB var1) (VB var2)) z -> do + VariantShape fldShp <- pure $ variantShp Ctx.! idx + varPred <- goVariantFlds fldShp var1 var2 + liftIO $ W4.andPred sym varPred z) + (W4.truePred sym) + (Ctx.zipWith Functor.Pair vbAssn1 vbAssn2) + + goVariantFlds :: Ctx.Assignment FieldShape ctx + -> W4.PartExpr (W4.Pred Sym) (Ctx.Assignment (RegValue' Sym) ctx) + -> W4.PartExpr (W4.Pred Sym) (Ctx.Assignment (RegValue' Sym) ctx) + -> MaybeT IO (W4.Pred Sym) + goVariantFlds fldShp (W4.PE p1 fldAssn1) (W4.PE p2 fldAssn2) = do + pPred <- liftIO $ W4.eqPred sym p1 p2 + fldPred <- goFldAssn fldShp fldAssn1 fldAssn2 + liftIO $ W4.andPred sym pPred fldPred + goVariantFlds _ W4.Unassigned W4.Unassigned = + pure $ W4.truePred sym + goVariantFlds _ (W4.PE{}) W4.Unassigned = + pure $ W4.falsePred sym + goVariantFlds _ W4.Unassigned (W4.PE{}) = + pure $ W4.falsePred sym + goFld :: FieldShape tp -> RegValue Sym tp -> RegValue Sym tp @@ -1164,3 +1511,48 @@ staticTyRef static = Mir.TyRef (static ^. Mir.sTy) (staticMutability static) + +-- | Retrieve the discriminant corresponding to an enum variant. This function +-- will panic if the variant does not contain a discriminant. +getEnumVariantDiscr :: Mir.Variant -> Integer +getEnumVariantDiscr variant = + case variant ^. Mir.discrval of + Just discr -> + discr + Nothing -> + panic "getEnumVariantDiscr" + [ "discrval not set for variant:" + , show (variant ^. Mir.vname) + ] + +-- | An enum's discriminant should have an integral type such as @isize@ or +-- @i8@, which this function checks. If this is not the case, this function will +-- panic. +testDiscriminantIsBV :: TypeShape shp -> IsBVShape shp +testDiscriminantIsBV discrShp = + case testBVShape discrShp of + Just ibvs -> ibvs + Nothing -> + panic "testDiscriminantIsBV" + [ "Unexpected non-integral discriminant type:" + , show $ PP.pretty $ shapeMirTy discrShp + ] + +-- | Compute the index of a variant as an 'Ctx.Index'. If the index is out of +-- range, this function will panic. +variantIntIndex :: + Mir.DefId {-^ The enum identifier. (Only used for error messages.) -} -> + Int {-^ The index of the variant as an 'Int'. -} -> + Ctx.Size ctx {-^ The number of variants as a 'Ctx.Size'. -} -> + Some (Ctx.Index ctx) +variantIntIndex adtNm variantIdx variantsSize = + case Ctx.intIndex variantIdx variantsSize of + Just someIdx -> + someIdx + Nothing -> + panic "variantIntIndex" + [ "Enum variant index out of range" + , "Enum: " ++ show adtNm + , "Index: " ++ show variantIdx + , "Number of variants: " ++ show variantsSize + ] diff --git a/src/SAWScript/Crucible/MIR/Setup/Value.hs b/src/SAWScript/Crucible/MIR/Setup/Value.hs index bbdfbd85a9..04239058f8 100644 --- a/src/SAWScript/Crucible/MIR/Setup/Value.hs +++ b/src/SAWScript/Crucible/MIR/Setup/Value.hs @@ -12,10 +12,13 @@ module, plus additional functionality) instead. -} {-# Language DataKinds #-} +{-# Language GADTs #-} {-# Language OverloadedStrings #-} {-# Language RankNTypes #-} +{-# Language StandaloneDeriving #-} {-# Language TemplateHaskell #-} {-# Language TypeFamilies #-} +{-# Language TypeOperators #-} module SAWScript.Crucible.MIR.Setup.Value ( -- * @MIRCrucibleContext@ @@ -47,6 +50,9 @@ module SAWScript.Crucible.MIR.Setup.Value , mpMirType , mpRef + -- * @MirSetupEnum@ + , MirSetupEnum(..) + -- * @MirSetupSlice@ , MirSetupSlice(..) ) where @@ -71,6 +77,7 @@ import qualified SAWScript.Crucible.Common.Setup.Value as MS type instance MS.XSetupNull MIR = Void type instance MS.XSetupGlobal MIR = () type instance MS.XSetupStruct MIR = M.Adt +type instance MS.XSetupEnum MIR = MirSetupEnum type instance MS.XSetupTuple MIR = () type instance MS.XSetupSlice MIR = MirSetupSlice -- The 'M.Ty' represents the type of array elements. @@ -138,6 +145,77 @@ data MirPointer sym tp = MirPointer , _mpRef :: MirReferenceMux sym tp } +-- | A enum-related MIR 'SetupValue'. +data MirSetupEnum where + -- | A specific variant of an enum. + MirSetupEnumVariant :: + M.Adt + -- ^ The enum type. + -> M.Variant + -- ^ The variant to use. + -> Int + -- ^ The index of the variant within the list of all the enum's variants. + -- In most circumstances, this index will be the same as the discriminant + -- value, but the index can be different if a variant uses an explicit + -- value. For instance, in this example: + -- + -- @ + -- enum A { + -- A0, + -- A1, + -- } + -- + -- enum B { + -- B0 = 42, + -- B1, + -- } + -- @ + -- + -- The indexes for @A0@ and @B0@ are both @0@, and the indexes for @A1@ + -- and @B1@ are both @1@. The discriminant values are different, however. + -- The discriminants for @A0@ and @A1@ are @0@ and @1@, respectively, + -- while the discriminants for @B0@ and @B1@ are @42@ and @43@, + -- respectively. + -- + -- Note that the index is accessible within the 'M.Variant' argument, but + -- retrieving the information is somewhat involved. (See the + -- implementation of @mir_enum_value@.) For this reason, we store this + -- information separately in 'MirSetupEnumVariant' to make it easier to + -- look up later. + -> [MS.SetupValue MIR] + -- ^ The values of the variant's fields. + -> MirSetupEnum + + -- | A symbolic enum value, where the 'M.Adt' represents the enum type. + -- This is only used in the implementation of @mir_fresh_expanded_value@. + -- See @Note [Symbolic enums]@ for a more detailed explanation. + -- + -- Note that @repr(transparent)@ enums never use 'MirSetupEnumSymbolic'. + -- Instead, they are represented as a 'MirSetupEnumVariant' where the + -- underlying variant field is symbolic. This makes it simpler to ensure that + -- resolving a @repr(transparent@ enum value will yield a 'MIRVal' whose + -- 'TypeShape' is 'TransparentShape'. + MirSetupEnumSymbolic :: + M.Adt + -- ^ The enum type. + -> MS.SetupValue MIR + -- ^ The symbolic discriminant value. + -> [[MS.SetupValue MIR]] + -- ^ The symbolic values that are used for the fields in each variant. + -- For instance, if one created a symbolic value of this type: + -- + -- @ + -- enum E { + -- E1(u16), + -- E2(u32, u32), + -- @ + -- + -- Then the list of fields would be @[[x], [y, z]]@, where @x: u16@ + -- are the fields of @E1@, and @y: u32@ and @z: u32@ are the fields of + -- @E2@. + -> MirSetupEnum + deriving Show + -- | A slice-related MIR 'SetupValue'. data MirSetupSlice = MirSetupSliceRaw (MS.SetupValue MIR) (MS.SetupValue MIR) @@ -157,3 +235,137 @@ data MirSetupSlice makeLenses ''MIRCrucibleContext makeLenses ''MirAllocSpec makeLenses ''MirPointer + +{- +Note [Symbolic enums] +~~~~~~~~~~~~~~~~~~~~~ +Creating a symbolic MIR enum value is not quite as straightforward as creating +symbolic versions of other compound types, mostly due to the atypical Crucible +representation that enums use. To recap, if we have an enum like this: + + enum E { + E1(u16), + E2(u32, u32), + } + +Then this will be implemented using (roughly) the following Crucible `Type` +under the hood: + + (BVType 64, VariantType [StructType [BVType 16], StructType [BVType 32, BVType 32]]) + +Where: + +* The `BVType 64` is a /discriminant/, whose value indicates which variant is + in use. For instance, a discriminant value of `0` indicates that the `E1` + variant is in use, and a discriminant value of `1` indicates that the `E2` + variant is in use. +* The `VariantType ...` indicates that there are two variants in this enum, + where each variant is represented as a struct with the corresponding fields + in that variant. + +At simulation time, VariantTypes are represented as a sequence of +VariantBranches, where a VariantBranch is (roughly) a pair of: + +* A (possibly symbolic) predicate indicating if that variant is being used, and +* A payload representing the fields of the enum. If the predicate does not + hold, then the payload will likely be symbolic, since it does not matter what + the payload value is in that case. + +OK, recap over. Let's get back to the original question: how do we make a +symbolic value of this type? A naïve first attempt is to generate fresh +symbolic values for everything. That is, a symbolic discriminant, as well as a +symbolic predicate and payload for each VariantBranch. While tempting, this +approach won't work. To see why, consider what happens when one pattern matches +on a symbolic enum value. For example, the `match` expression in this function: + + fn foo(x: E) -> u32 { + match x { + E::E1(a) => bar(y), + E::E2(b, c) => baz(b, c), + } + } + +Would turn into the (roughly) following MIR: + + fn foo(x : E) -> u32 { + start_block: { + discr = Discriminant(x, isize); + switchint discr :isize [0, 1] -> [e1_block, e2_block, fallthrough_block] + } + e1_block: { + ... call bar() ... + } + e2_block: { + ... call baz() ... + } + fallthrough_block: { + unreachable; + } + ... + } + +Here, the `switchint discr` statement will check the value of `discr` (the +discriminant), and if it equals `0`, go to `e1_block`; if it equals `1`, go to +`e2_block`; and if it equals something else, go to `fallthrough_block`. In +normal circumstances, `discr` should only ever be equal to `0` or `1`, which +implies that `fallthrough_block` should never be accessible (as indicated by +its `unreachable` instruction). + +Now consider what would happen if the discriminant were an unconstrained, +symbolic value. While a symbolic discriminant could be equal to `0` or `1`, it +could also be equal to any other value! This would spell disaster if Crucible +tried to perform a symbolic branch on, say, `discr == 2`, since that would +cause execution to reach `fallthrough_block` and crash. We want a symbolic +discriminant, but we don't want it to be /that/ symbolic! + +For this reason, after we create a symbolic discriminant value, we also add a +Crucible assumption that the discriminant must be equal to one of the possible +enum variants' discriminants. In the example above, this means that we would +assume assume the following: + + (discr == 0) \/ (discr == 1) + +This way, symbolic execution will never reach `fallthrough_block`. This +Crucible assumption is created in +SAWScript.Crucible.MIR.Builtins.constructExpandedSetupValue.goEnum`. + +Similarly, we cannot make the VariantBranch predicates completely symbolic, as +whether a predicate holds or not depends on the value of the discriminant. For +this reason, we do not create fresh variables for each predicate, but instead +make each predicate the result of checking the discriminant against particular +values. For instance, the predicate for the `E1` VariantBranch is defined to be +`discr == 0`, and the predicate for the `E2` VariantBranch is defined to be +`discr == 1`. These predicates are defined in +`SAWScript.Crucible.MIR.ResolveSetupValue.resolveSetupValue`, along with the +fields in the associated payloads. + +Lastly, there are the payloads (i.e., the fields of each variant) in each +VariantBranch. These are created as completely symbolic values—the trick is to +only access the fields when the corresponding predicate holds. For example, +`SAWScript.Crucible.MIR.Override.matchArg` (in the `MirSetupEnumSymbolic` case) +must be able to match two possibly symbolic enum values together, but it must +be careful to only match the fields in a variant if that VariantBranch's +predicate holds. + +To make this a bit more specific, suppose we have two symbolic enum values +`enumA` and `enumA`, where: + +* `enumA` has the discriminant value `discrA`, and + `enumB` has the discriminant value `discrB`. +* `enumA` has the VariantBranches [(e1_pred_a, [e1_fld1_a]), (e2_pred_a, [e2_fld1_a, e2_fld2_a])], and + `enumB` has the VariantBranches [(e1_pred_b, [e1_fld1_b]), (e2_pred_b, [e2_fld1_b, e2_fld2_b])]. + +We only want to match `e1_fld1_a` against `e1_fld1_b` if both enums are using +the `E1` variant, that is, if `e1_pred_a` and `e_pred_b` hold. To this end, the +`matchArg` function checks this by generating (roughly) the following +assertion: + + (discrA == discrB) /\ + (e1_pred_a ==> (e1_fld1_a == e1_fld1_b)) + +(Note that instead of `e1_pred_a ==> ...`, we could have alternatively used +`e1_pred_b ==> ...`, `(discrA == 0) ==> ...`, or `(discrB == 0) ==> ...`. All +formulations are equivalent.) + +Phew! Enums are surprisingly tricky. +-} diff --git a/src/SAWScript/Crucible/MIR/TypeShape.hs b/src/SAWScript/Crucible/MIR/TypeShape.hs index f24d372ea8..92aa2f80c8 100644 --- a/src/SAWScript/Crucible/MIR/TypeShape.hs +++ b/src/SAWScript/Crucible/MIR/TypeShape.hs @@ -6,18 +6,23 @@ {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeOperators #-} -- | The 'TypeShape' data type and related utilities. module SAWScript.Crucible.MIR.TypeShape ( TypeShape(..) , FieldShape(..) + , VariantShape(..) , tyToShape , tyToShapeEq , shapeType , fieldShapeType + , variantShapeType , shapeMirTy , fieldShapeMirTy , shapeToTerm + , IsBVShape(..) + , testBVShape , IsRefShape(..) , testRefShape , sliceShapeParts @@ -95,6 +100,21 @@ data TypeShape (tp :: CrucibleType) where -> TypeRepr tp -- ^ The Crucible representation of @T@. -> TypeShape (MirSlice tp) + -- | A shape for an enum type. Like 'StructShape', this is indexed by + -- 'AnyType', so code that matches on 'EnumShape' may need to further match + -- on the 'VariantShape's in order to bring additional type information into + -- scope. + EnumShape :: M.Ty + -- ^ The overall enum type. + -> [[M.Ty]] + -- ^ The field types in each of the enum's variants. + -> Assignment VariantShape ctx + -- ^ The shapes of the enum type's variants. + -> M.Ty + -- ^ The discriminant type. + -> TypeShape discrTp + -- ^ The shape of the discriminant type. + -> TypeShape AnyType -- | Note that 'FnPtrShape' contains only 'TypeRepr's for the argument and -- result types, not 'TypeShape's, as none of our operations need to recurse -- inside them. @@ -121,6 +141,25 @@ instance PP.Pretty (FieldShape tp) where deriving instance Show (FieldShape tp) instance ShowF FieldShape +-- | The 'TypeShape' of an enum variant, which consists of some number of field +-- types. +-- +-- This is indexed by a 'StructType', but that is simply an artifact of the +-- particular way that @crucible-mir@ encodes enum types. Despite the use of +-- 'StructType' as a type index, we only use 'VariantShape' for enums, not +-- structs. +data VariantShape (tp :: CrucibleType) where + VariantShape :: Assignment FieldShape ctx + -- ^ The shapes of the variant's field types. + -> VariantShape (StructType ctx) + +-- TODO: Improve? +instance PP.Pretty (VariantShape tp) where + pretty = PP.viaShow + +deriving instance Show (VariantShape tp) +instance ShowF VariantShape + -- | Return the `TypeShape` of `ty`. -- -- It is guaranteed that the `tp :: CrucibleType` index of the resulting @@ -142,8 +181,16 @@ tyToShape col = go M.TyAdt nm _ _ -> case Map.lookup nm (col ^. M.adts) of Just adt | Just ty' <- reprTransparentFieldTy col adt -> mapSome (TransparentShape ty) $ go ty' - Just (M.Adt _ M.Struct [v] _ _ _ _) -> goStruct ty (v ^.. M.vfields . each . M.fty) - Just (M.Adt _ ak _ _ _ _ _) -> error $ "tyToShape: AdtKind " ++ show ak ++ " NYI" + Just (M.Adt _ kind vs _ _ _ _) -> + case kind of + M.Struct + | [v] <- vs + -> goStruct ty (variantFieldTys v) + | otherwise + -> error $ "tyToShape: Unexpected struct with multiple variants: " + ++ show (PP.pretty vs) + M.Enum discrTy -> goEnum ty discrTy vs + M.Union -> error "tyToShape: Union types NYI" Nothing -> error $ "tyToShape: bad adt: " ++ show ty M.TyRef ty' mutbl -> goRef ty ty' mutbl M.TyRawPtr ty' mutbl -> goRef ty ty' mutbl @@ -167,7 +214,38 @@ tyToShape col = go loop (ty':tys') flds | Some fld <- go ty' = loop tys' (flds :> OptField fld) goStruct :: M.Ty -> [M.Ty] -> Some TypeShape - goStruct ty tys | Some flds <- loop tys Empty = Some $ StructShape ty tys flds + goStruct ty tys | Some flds <- goFields tys = Some $ StructShape ty tys flds + + -- The first Ty is the overall enum type, and the second Ty is the + -- discriminant type. + goEnum :: M.Ty -> M.Ty -> [M.Variant] -> Some TypeShape + goEnum ty discrTy vs + | Some discrShp <- go discrTy + , Some variants <- loop vs Empty + = Some $ EnumShape ty variantTys variants discrTy discrShp + where + variantTys = map variantFieldTys vs + + loop :: + forall ctx. + [M.Variant] -> + Assignment VariantShape ctx -> + Some (Assignment VariantShape) + loop [] variants = Some variants + loop (v':vs') variants + | Some variant <- goVariant v' + = loop vs' (variants :> variant) + + -- Process a single Variant in an enum type. + goVariant :: M.Variant -> Some VariantShape + goVariant v + | Some flds <- goFields tys + = Some $ VariantShape flds + where + tys = variantFieldTys v + + goFields :: [M.Ty] -> Some (Assignment FieldShape) + goFields tys = loop tys Empty where loop :: forall ctx. [M.Ty] -> Assignment FieldShape ctx -> Some (Assignment FieldShape) loop [] flds = Some flds @@ -195,6 +273,11 @@ tyToShape col = go tyToReprCont col ret $ \retr -> Some (FnPtrShape ty argsr retr) + -- Retrieve the field types in a variant. This used for both struct and enum + -- variants. + variantFieldTys :: M.Variant -> [M.Ty] + variantFieldTys v = v ^.. M.vfields . each . M.fty + -- | Given a `Ty` and the result of `tyToRepr ty`, produce a `TypeShape` with -- the same index `tp`. Raises an `error` if the `TypeRepr` doesn't match -- `tyToRepr ty`. @@ -215,6 +298,7 @@ shapeType = go go (TupleShape _ _ flds) = StructRepr $ fmapFC fieldShapeType flds go (ArrayShape _ _ shp) = MirVectorRepr $ shapeType shp go (StructShape _ _ _flds) = AnyRepr + go (EnumShape _ _ _ _ _variants) = AnyRepr go (TransparentShape _ shp) = go shp go (RefShape _ _ _ tpr) = MirReferenceRepr tpr go (SliceShape _ _ _ tpr) = MirSliceRepr tpr @@ -224,12 +308,17 @@ fieldShapeType :: FieldShape tp -> TypeRepr tp fieldShapeType (ReqField shp) = shapeType shp fieldShapeType (OptField shp) = MaybeRepr $ shapeType shp +variantShapeType :: VariantShape tp -> TypeRepr tp +variantShapeType (VariantShape flds) = + StructRepr $ fmapFC fieldShapeType flds + shapeMirTy :: TypeShape tp -> M.Ty shapeMirTy (UnitShape ty) = ty shapeMirTy (PrimShape ty _) = ty shapeMirTy (TupleShape ty _ _) = ty shapeMirTy (ArrayShape ty _ _) = ty shapeMirTy (StructShape ty _ _) = ty +shapeMirTy (EnumShape ty _ _ _ _) = ty shapeMirTy (TransparentShape ty _) = ty shapeMirTy (RefShape ty _ _ _) = ty shapeMirTy (SliceShape ty _ _ _) = ty @@ -263,6 +352,24 @@ shapeToTerm sc = go goField (OptField shp) = go shp goField (ReqField shp) = go shp +-- | A witness that a 'TypeShape' is equal to a 'PrimShape' that characterizes +-- a bitvector. +data IsBVShape (tp :: CrucibleType) where + IsBVShape :: (1 <= w) + => M.Ty + -> NatRepr w + -> IsBVShape (BVType w) + +-- | Check that a 'TypeShape' is equal to a 'PrimShape' that characterizes a +-- bitvector. If so, return 'Just' a witness of that equality. Otherwise, return +-- 'Nothing'. +testBVShape :: TypeShape tp -> Maybe (IsBVShape tp) +testBVShape shp = + case shp of + PrimShape ty (BaseBVRepr w) + -> Just $ IsBVShape ty w + _ -> Nothing + -- | A witness that a 'TypeShape' is equal to a 'RefShape'. data IsRefShape (tp :: CrucibleType) where IsRefShape :: M.Ty @@ -313,6 +420,13 @@ instance TestEquality TypeShape where , (TypeApp (ConType [t|CtxRepr|]) AnyType, [|testEquality|]) ]) +instance TestEquality VariantShape where + testEquality = + $(structuralTypeEquality + [t|VariantShape|] + [ (TypeApp (TypeApp (ConType [t|Assignment|]) AnyType) AnyType, [|testEquality|]) + ]) + instance TestEquality FieldShape where testEquality = $(structuralTypeEquality diff --git a/src/SAWScript/Interpreter.hs b/src/SAWScript/Interpreter.hs index 34a021d769..c8e360f3e6 100644 --- a/src/SAWScript/Interpreter.hs +++ b/src/SAWScript/Interpreter.hs @@ -3936,6 +3936,15 @@ primitives = Map.fromList , "it appears (i.e., before or after `mir_execute_func`)." ] + , prim "mir_enum_value" "MIRAdt -> String -> [MIRValue] -> MIRValue" + (funVal3 mir_enum_value) + Experimental + [ "Create a MIRValue representing a variant of a MIR enum with the given" + , "list of values as elements. The MIRAdt argument determines what enum" + , "type to create; use `mir_find_adt` to retrieve a MIRAdt value. The" + , "String argument represents the variant name." + ] + , prim "mir_execute_func" "[MIRValue] -> MIRSetup ()" (pureVal mir_execute_func) Experimental

    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 delta 186987 zcmZU)V{m2B7A@Sdd1BkPZQHi3j!tarq+{E*)p61t+w9osBwycqtG;^m-k)8w=BhPo z?H_xNHO82GGn?Z5g1lj$8l0O2R5%Jo3;biC@1D(r6YyNWi&lmJW%y07%rQl=?5wSo z`@77$2us2bGZ#^c$A052lFZeS_yZ1I_B>V`3$T;!(^HwDiqT>_27pUa z03HNA3J19^+*7*ieI)P-bq5!R1wAM5I%3UVE%%;#@{LA2}?wqX!gah zdUwm&TtCOtO`9CkBGh&7vg7~k1@G}B1P(qC9=xA=n9!qc6Nz@aI#Ug-x}jO|=N)y+ zY;TswNrl%i$R9!NSU2-_ck-yV&j1q}E_~l~w*FE~9SK*-<5Q6(IN?&Y{lV@M4ZEy3 zr#f6O{rPQ>?An4k_Wsl}$cJ zqA{MJKa^;UhiF)4{JDo{F`^y zG5!5t0Y@vs<0GhNht*#f<$gudI>#cdh^|H|OBCY~#dF8eDgDSms5_XzbdQrCx%+5X zsNfWHx4LNVZvcvTo@k(3og!B!8l=y)N`T(qm7l4EQoE#$7LZsto>Ku@YO@7tc}WyM zDrB%Md1s%E3#Ym^IxdfG2&vbW7W1!HE3SJTwiUU~-f8Zz#!{hRO7Toz_~DP`V6fdT z#Sned7{L6P&JSK$iDEC65(8Gz74^gn+F|~xYORX6+9H0qY?cFCp$-eeT7qCil%Mm4 zz-xJU9ETHlE}fwGy=3!U+C=;Hw0H_Ugz%)dly>DaB1*tgvp_dI3C7_v zkG3V47g0R09Ss6HhkoQ;hjj5jT$@e$39GVMnRKG~eb1k6=ZNeUU3Y%spj@c&%Nl?R zm|fFMz5MWs-1Y4(Wr6mqV-~`D@l0(-dY`GT^**<}1nfFa3S-KnHHCE^Wyqp;?fzXnV)4S*`#lWX&& zp!T+sQci;Nwgljxozlx$VZMB_eg+Fxpy*av7rY~1eLw!CTcm%>D?<+|SLN%&{x)#| zH=}hr9C>!cA`|m%75x?XTcR(Ur^|Bg{7JCBJPi1!AlAkax4j0>06S&7J%0*usp8TC zt$Z5V?(hPrA~_VIbd*-PH9GW#`K0I(3H=gpI{y4>ro_JVQ;?4@nLm{cse1O?)lp=t z`Lz#(s;E~%$|%Fs$*+z~*B|3&zoup#=9NB<43J6>Tg(I<34f53pYU!R<~srWGhPEy zj+)=;-L&hhUHqz=i7u}smFAoMFPZC=>=+!--7jo`W9>4ygOO&1tdMWYp1ydN-#Jo+ zkH3$tux;Jc)10&oCX_pwg=$L8+^7TM_p1dauo=!>n2oO2`LF7SY&f3Td4*jJv{HAA z%JRSUw~t?oDt9%TFzwA!$(dOa=r9CfJ?xelJs7*$P0xMji+B5!3KCFb#6};9>mLwt zV~=|Vda9TbF3ZgmMIT9u>QU54n)+zE3#a;E{W3|PCahXI^@r0D$(K9`)O?HRuBq4B z7*;*NBqEwmvgaK+U_R^k>tt{4^`g^Fj7A6N}mdyy5b8QA^`Yqf{tE=w#~1u={)7B=vfSVUNM_~=Bh zuO)({;alCx8{3%J!!BP6XRv4DCo!Z=hI8sIG$6H|i35xSQ+~46l4To=NDNYD zox0LeQK{2pXDXVqc9_br9I{m56s6p(CBYtyB}L*4Ne8e-7gD@z;ZMSahL}crt8*w2 zJ^y48r&QqZiy@^0|f3Mme|u z5*>kIb}h(MYhw?Vzaoxh_fxcDNIHVpG)gRfu9^IUSK%JHCNE@NT`KK9iRs~I^7GmQ zPn4{tfA*+(Pt`}$fJOBxXG+ep9&R)g!cQ`IvEfB4;xJwWGGm_o*)1IWrl`RfhR+}!#Tyu(7jxR2kQ zE5B0gvF)&(ux+t-m#yI4V8d>UFwQK*Xe|azsrU^S7 zPSnZm5|KvHvObx=drhTII62|KQq@k1?tukn@|3# zbK>;w`*iy7{{SAwoyT9z#P;$|4cf&alIqp(1vkg{k!V9tQJSxk-*=O^ctpaOHVNwn z7KrYq^4v%-$ygAwiJ~^iw8F}9Sx{Kdaan(TXSC?Ss?(`=?TdO`{S3}c*Ac3ZATA&4 zq3V;+*9rA*%Ocz(=TaTVGws1!ySOw(YI0Goz+{ko>jC1q_TcH{)J%Zc(a7B5HjaA= zaKvkqr;MiTDmB+A&vu~-)k_dv6&R6afXnhVV18p4LA_j`O-Z}8OKN9`QH~AI_l+=j z`P+ka7*S1no*7e0SQEluHd4{wXv2fOZ|9E{qyMM?bh9ysc>+&Jf8g# zxW1J+b`ww#tYH4Bbz!}c9gsW2&X_zrok|xPxT|1~p zSk3*VMqagg@+H-Jw*BStuczcFG%#!Uy-n9BmwUgXcRv{p(2#{3_$SMJ3l>)NL09j>$tnxrsMWDk0zJKd=Agd;jRU62v3uM&? zLiWnmPWk(f{M`Kw9?LtL0VYT^0~RhtPRyUFmsS-m$S%DCiNQVe`KA$YiTHsH42d8i=5kxYZ-!r9rGCP6Z7wRxVli z*J7z+9u~FY>7!^T&>)!AXMk>D$>HxJv1F4?uoj`oZZwW}~Z`v+0<&gJ?``{85On-gST~dey&gCWg@^OkBfD zRNW`3gg`?&{uW9fNaCF9HPUDdUI&&gniz6_Fl_5mVQf!W>!`lSj!C1;54Umxg~#9d z2vSj|UIHw)flvqy7!BH?X-z^72kV-EEcxGYKuMl-KSrocRDAX#F2%qrDb&A>bSo#b<72Xo4 zEN5RRjQtvqz5%An$TV@I0U|WcSfbm-dyGyIX6H(na4}sGGzySGp$fS?XW9r6MhpU^ z=I!L3d@%%2wI7_MDC5jwyFCRLm7DjxLJScV2xi)5b52^USkB zB@ODqB`#|BVpg+;0hYAygcyMXGp0GAqD{{%xF1Wi9wNd_rvMCl7lmHS}cT5ps4r;!#&4zkwjv~%`h;wVJt1tovkqI(jV4u#(k^8o?p2I%f;7;wp zRk#KRO-2#dSUYK;)gvRQEJBFe{>zj&h}Q(<5pW#A4Jc6;ltHP`(Qoaxcqh0`R+}L& zIZ>BT85N*JPSkmQqpK-@Y9g|{tY{RGptQt)=m#^IlA3&kRJy920;fqgyO^^Bs+F9D z+5@GN|COQLQdwXAdEPKvW@OGbdW$65vwcwrKWdeAEAc)?$T=phLFW7jOi=mu&CPd6 z$Y%e~X)^Yy{1BsBb({E~47F<;Nj&2Rd)o4^YbZ+ZMRV0C%3cQ0__Gb53RAlEeow#t z_am~_;dAmse_7uZF1)3ag}aBFrKuylWooVi3>YhjvbOv9ueb%OW6$6<+d z7jC~csIYPEjKWHsGkYOs+?Pydh-rbXrZM8!X!f=?%}HZL@m0iglP@{=Om*yeDdT^K z``ny|Z`1$&9uN@d^`(jlWUgwMO!apSY?RSNx3c6U^zAe1feXBvxpM22`^AC7g@;e) zvu4O}V4_1M>C&q(Suh6Fy03xh?&>{LoKrVGP?0|9?>DU5t@NIWu>QoeT$qBH;z%LrJE#ue`V7cBg)>C_9HN1vu~}L<;R)gxN{rp7P5{p#@b2m z6Sim&NndMQvsu=9(c}r;EB*D~#I&IgY0F~>K#=8+^dNbXA3WwiQK3Hv2XxB@y;}{9 znSW7Kz){F!3UIUmagjo7<_OJ&XFe@;k3?5?24srll5CVFd?2G5;pt0{;cqva2)Vkh zUEQIbFnivvvde3z>t{%I->1+MQq<`lzbHrN3L$T|%3k`muk=4KRZ2B(hA#Ik9~;`9 zq;kmKCLi@eRR+vb_phgN=18wL5a)!)ZeZr}S*(pu5gbW@W#5LY?#_u}bbvoTtNBIe z3(!@3Rfe#1BI+3!{%7s`9|h;F;F!nIOZg zs?o`DX6=;}mzzYaCV+U$xUf`nJxu70yo2uRH5%#%&eA*Xh9D&>9>r@+;{U$TTK z!XOI|d@xlk45~0;(VLWh)IUET3*JeFA_bsJ2{B6INrlggDI|(;Rbx=B{KmmD(c;j9 z#kk!p3^#YSSY^#JK3fdG!QhXA&^Rbs3H0B%FcmsX&nb9b&oZ5ND_e6t5%+5*?s_8X z7YvZY_J52sR#mk-9Ld@VmZ=V|)>|&R+axan1}s4p-P25`WJX(UOVPdLwS_}F)AxSn z@l;Bc_UT!DS2=jH`JhA2>AIu1!6$6z@|;8ZFgh1nc1Q-ftYuZi017adkS1&%NyZ-z zh)y7?F9!rmc2|9#4oA=I&0-F>9-zX#KL*-8Qk0LOYc#-)4Sk{g)iT6Cx~nnRvO9x; z-Z7!I%)jYy{?e^vm40Wv!fT|=I)G$0qjdT%=1o`ZZGq0>rp8_!lx{$bu^8mH0u!DT zKe0|S|L3vOXYMb+_y;zp7B~XRz#Z~e=5O%6(dGCn^W*fS?~ztlps*!N>f?~ zgz^yM!1$5rqT}iid%&t1_{3`Ft%hY^ObSGTjAT)a2IN?IETPFcv|4vLm83}rvgaPr-TB7Rz>D;_OGCi|LSjuXJ?DD zihQwo`6a(zqsL>EndTW}|MZ#>awiBQJxtTRzZ@)}6Kc%4NGVEbGwckBnS@0Yf(qsW zaVq!3&7gOg!tp<9HI49_7I&2_zzswTQ9?S~IYXxkDw3W(kd{ZlHS*7*E9G2zN-}3) zNXS|wvH_f_$i|%Ng0<$4@M!ld;VVesw}STEjGJH^~a^|Uhj&~l3Jk(!QK4r9%HHb7x)uu#_TV*ARPiWMuv7b6j{W)AYj|rYCIZJ zcN?NFdW|Sdpcwg7N^Q;`N=vXtqB;&gI{Qltn79BN0hF>Ng!i3z5;Df_Wr7K`I|4>C z{9qv$nKW)bJ%q$$I%L2JP{x(&&9)su*+JCcKNY-&+}t>t(eu=j zX(8AS&k9UE=`q83Rx^7oR0)Nl7-e&tcYm@R>F|T3McXJFS5g{dL(tdFIm>!#CB-;q<9&=^gWbgIJaah1Kax32y5jFL9$_FIRT5z!|W;k*gH9K^<*@^0|0$?pe4^H7WOQ&AM=^iFBbdXuw zbzlh-SP7nlH7EBia>QRu{?vU!(S;)#nbvEMqe!0qk6~|m2J-@h3!$izK~SG`czxj; z&JZ;PIgUH)ga=I*K%0u+MCdbfa@-#bFWLdSx+6@c&24~eqh{q8mAd)<2iN1AIN5cl z+$M}7AJmsB#g+SZIi4$}Q54pU1D5kDhwrsN(4e03(8DzIr4^Ic1G(~vN%Q@@!izxq z=yI4+;z_bHlUeP=*fD5~;b+KFzoB{S!k^E&o$_Fw)C!js;FW%iKc+g^pFtuBHt59~ z{%b0~S&24ZPQx>JGbf6>I(HcH)+xL=hOhkfzx94JupV8;xgV)6n zfov*^Z>)ANOzcwJ3R8VVR2lVIZC8Gmuh^g6v0Xef-!2cLdwv=)jkFS`b)2m`wS%L? z=ey)kww4k5$6y+kI98r-M>{ry9Uj>J8AxO1x+WE4VpF~6&#Zba~JQHQFEO1o)vDc-LA#=1ov zQjhUk!a%FfSGPZI{lEK*Pm)4SG9F@NaZC&g;4Rj6f;u!B_8B>WUaq6GNSip>P~{Y?e_b^OB}7PSl`hrX z4^#@`;SU%Cm-YckIIocKS#MxQ*|)h)CvefTx^QY7 zW(Fx`+2Tuny=4v|r_F*kIi>tM0T-C)d)QI!90eZVS z6q?^@)MH95?_KEyTPrN_UdHWMEoPk*EZPhp$YZH11r}~^gdQ`v{#a=rF%{S%TyzWc z5uTw*@d6X@cT&iZM~q6J;TRo}O&za#vJyo>tX=+J$AB9gahl+9f8HX(VkK#y^sjwY z9!kZD9&6Lv{q`Nfn%E4T_~G-9jdtd8zh?q$ER+@J6>RG3*;$Zi+fBK3_RO6brqBD! zLFCLq>dcxIZbg44*7(H|6#-%RC@X_(m%bN+i_XSOw{YEY1NNWeyywz6QsC|WiZ+mG zuH8WS^C{@>%dcOtkFP)707`|xx#EKcpT55haN2szd0+QVXEC3RISs)}R-NkxWQ8*z zf%QA~Mx8*375y~M8H1!m_}-gH#rjvio`@4GR9jt zN+r7a22pTNZeJQg^}7>isP9tIH7 z9bq6Out~C3dQus#8*xe!?-Gt05W5hRhh5DKEc>utVjeB)KiL6uEMc}w`=NW6%sn|-W#_$69-N%G;PjmAb##YGI z7qO*U7IY-8_fXZsvJF#obM#`qBex@mKRDLMw+9Jkc>3^TD9qGVGW5q_5{X%|-kG1^j$+_;* zS@x>cS!UBKePeIMx7!ibvYOSyt{KGuL@(n~6j~P$DA) z%&}A>X2o_EArZ1;0}_h(u-I}auoj$EjQbQ7(Yls{;7XZmXvNG4SA~#Ua-7Buwx}~* z;Rr*Eq?Nf_h`CLXxK+RE*Q77|(Jl74|4#|a$->#p4xXKZjf92dKaqeyYRnLP^HCfZ z5{NY!7NeOtOCJf0{eRe%SH24i&dT#&>`HAgMg(W)1%WYx(}1ynvfClJfm2Qf+=yFq z+NTH{`|@eu$YZ%Y7bF)*X364{!!M9yu$r7%^wcAVA+I9;<*przU6sPt|x;#2qp&2VK$x@?dt{Vx`}-^E0L;5?NHKT=y9 z!eTS?RWWqD3QV;G+2N84F^o(isq-+`#_YW%Sk6N9cp|{6AU+0{1Iw)uBKS$z&((bV z2lR_f#3XZMH=N}S*bI}tnIS|=s47XFs~ch8-Ow@W5S1?&)BehA<8M3H*2sg#_?K-Ub21OxSU6F#5CzOBo69A}1P;uJuhPZO_gz z1nxmItkUVA373kc&}4|7Qv;t}GkET@LblVN=|9dnIlA<~JPL8m0O;ilm{C`h-;l)4_idvZe&0Cl|*3!$3TJg90#o< zy-l<49YQ;4p`lFz65HhOO_xbYkv{tF2XNnsEl+(DS`vW9Dl$wC+|DjBaZV~Sa(%ht z?MLs%f$#R7zP)qGK=O~44Q*$p<#Oq2Mc#|mC= z`hLbTdMNBD_Gn}2=KAei+<`Ej_a2bwnCKKvB?(x6$tYDcDXWZo1)d78^O_ zLjeB)Tr1rDsdDpf=`bBr_Q!TpvGYfm05xw-qMfWwJKvW3s!VhZFN2y{OWQlm{NR$G z(^o~Dy9#pbWE3=Qq@*Q*6E6duxdFbKj)v4Vd!*zEnsyQfR%zpN4sgLpYyBEpYJ~2n zVic@C*WJUF13j-8;W@%CtvI$g^^~^@$3s#Z_+Fc`y*1(`eDtBLIeVmP=kDud=RRB7 z=Eq|YN|>;-biOsZ<@Hgl^oszC(ZC>5P3N$>kUUbeN`Ns^65(W$m*G*ad;OQ8PK%47 zFZ}zG+syz9)hQQGdw;ZMR?0A$@ngSR5H@}^E{MH{P95o%GkR41oI_8cgiOf` z(ZB4TF`aS%6Hub04{pj36lV}66bbMh3F-5QDrMCF)O(Uq(Vye1`8|j?mwbtzCWn;OV^=GrMZhuOPA(RQ2xgho_BhYz*%_z*KU9Q5kSab2B$@0 zfoE2*bh7raAz|g@1-Y7o(*j3z9PJ6XQ9t|o#pao12lZ@A7UWsMs4LaQ<;8Qv^bSx! zQ)8XWeVpF*GM@qYy7{5kO)q7I6vW7~eu>A1?BtSnV?SgpiVz3WqDb+Sp~&&`Z&4`4 zg-oX-QU+q+lw6j=G8GYL!_KpD1dii~pAKVKaiD+V6zyS*eWd{W*?`ed*@{&m%v3Og z+NlUGsHG})W)Ec+H?bB~F#R|RmJ^ty`R*p@qy@1_h>PE~!7Q!)QFTc{*deS~2dOaH zR0r}Niibh6Xe_51DR8G6$w`Hk05sexzGSq&6VXWqrjVqt2uawFDcll8#$*a=PGmAF zH$-|Skg5eV6UP`x@xU_KIN1m$xE!4{x!n;4fWtoBxw&>oycu+83W+Q97QAm$Y8C1< zA~x(`4hx#C8h* ztu!*=6`|4?WD>F57^Dq$qSNR?#83r^It3}Lz1IVu-UFE)1-ziFsR~OP(VRh-UsY|y z>D3&4XJO!XZBLEH7AAL*5(b4tzfh|Tqx&LWU5*q`>{38uD#k`--%73y;9W}VEnwi9 zT1EJ+YW_eCM9)gf4`7P#2;Eby!2$S0k>bOU27lWh01u-8gKt0u!CIn;)Qs`SP4fU4 zD0p_Dg~^|?fWyOO0Zy}I6+HKoEzX~Rr{dn4DU)=z4UF=*mGcz#W7^GamK{h-koAic zd3xv^s4hri;ir~jw&@%ca8i-+i{fuW;N`cmD0Q_NXCvV8?V51+3WtVz4n3R@);2Jn zJCKf1(i}{4{U9*2t7m(83}IPw{gPE2==h%19+zQqfy6Y}Q<5h}IeZssD#%(*dGPqT zwI%M%YH8sc9y)VvKDir7F^rVC8~&bL?~d(1o^*k0^-A^D_p@OejLg=<^R*cfP9R|* zfl&@}b0K@+-}#pD4>y*`$TC5xs;8bcF9Hf?=VKz%|3`QB&YfUq3i|D9J*YY`a2@Fwu}N5%>(9m2fr*g*!DIP_ zQd-w39!)nv*HMGiGHxfwpK7PAotonG4IIOAk*+HweAtQ`% zq$``wOVM+OO9TllTLgz;)q%Z{X0L`aECitOI!~8 z={-MiTs zu)!l4Y4#hB!^?RJw`En$1&X_0wQrDED~CUy{NQ6Iklugy4;SSrwe6_uY>H8B0IvxF zJ~?YYHCQFp-#SVTm}}RR%0CVDny-JwX+DpVG91}wH>MEV3~>=gn;#|X6S*7yR<8XIM(Jvj9Cez!2ct@H+m64!P&-o7lnJ*+x#6PKQ|jRb5` zNw6g!RfYNz{7%wb)ljXF|7{wJ0ko?hmXqgsY-0%@J)=+aSfx?4^1-2po0o+sIZV{o zK&lyHLwBL!1FrD)BvY{?wT!rncuHS=)`tibYppo# zohZNHAnD-8`<6mIr;aZ2tnb1Q?wmCG~ z1X)8d#ysk{*6yPo(ZGrhm!4WqG)-l-Dj7_Qx~2MmZ?-c6}YL z*vM6cX>UI0GSrYvyVwAFE$H7|PfFE`<99ZZSJ98Uxkm&f9X{ddw?<~OU#^w-2UzuT zY`?V08Lmfl`~8zPh(8YLB6``=ygPaytc0>JpF{aYi0ZuzpXC!yJoTY_gZenx;U zWv)&5!)cR+b1P6fhcm~q>d>A>-<7I}6Z9oNg7kg4L?6>r^OBiTzmq;&NUv>^M&Bq^ zobt88l^z*sLEB>;#&zW#7X|mF#!-iHJIflN^&6&?iy;-X3SAoX+YO%!Yc6=BLDb(i zE|~sRLms~kG9TC(&j#I_X}aD(X0)L;{B2*{wm43--m`+rVMM*ypl`^8=6!a$Y(Em7NcyB7a?>LUx1w{K=z84*<$m*1-5?9KA(4VjHAwgv_pHk!5pD%ZCY4FZ)%xq1^?R&uQ-b~<3;`{5OHqT|?}k2TV1x zjgO6QVD%5CEqikLk%zJ1gSk~ANMPWJIRU!kGLY}b=bGTonl974U_K&svu*p%$D7yO zXWuIi;>nKp*3nU^upqzCow)GpD&ZW}R(q6vDYC};xgAoZHMwRzKKTrYNHed-=x!^% zHgS7(y#v_j>24kw$+{B2Umi9tiq8Q}d}V+8Y|?5q7rxQJTj(W^uT`_ziZr!WuHd+8 z(QIJu1lCHp;WjMKcU-p`!FWm8avSs+XG+&Eul4*CK9U?fHU0|?eZ+=$b zz(UfxFvaWp9{4K^Gj1>5a;zXOwZ(KHTHYx&L>zdlyKzeCl3}L*sz$nVj>WMG>ZW3_ zfh~+T0!Ny5d{Be${rw&~2c9|?nYwo{nw&p9+qH7= zYYq6*%$e^D>tN~{EA{o~>pWrZY(iJ_EqD{t3E2(jj~PFpSC0_s+Vigrm!N$LU!$NUAHl5e^{sVT`QrTzXI+!6UMl>9N{s4 znTN+X=IgJxw%x+nRtJG+Vh^Do0VZr;dwNGgWGtW6O;l%iWQ zx}KXVl%p3dZj2$i{irHS2OnM}rgZ5vg(heLlxd(97l{}@pzcN4P`xi_1r%Vj8e~D& zW(`l;Pc5otionS|3_`wFaFZxElZlW*+o2RM)nS3XAA^K~L^oH%r<~^#bJFs_@jcu( zLoS0owD89sqp4I$XO#@@8(Jtuy;OIj#hM=7M>p-%Trlfw?f5sT8RMnFSfJj(L&yg0IK-G{fEt!>MTXQ$jSHAsqBzJ8#chD)%VaV8NkERJgF%?_1Bl^gzM)-pV6hQN z={gjKW@Q?ZFB^Xv<(YDT$c*MgVC|6m`%=f$A^4y{OeqYh6O{mh&vg*K0hD0h@~^H; zE0{sGXMs~tf5mqZnq|^^MM;?0xQ2{%|DPEKKR5NQ@uo{-0@zN1n2KTKTa;P^LoHs~ zGg;!Tq&u>+U`N${12uvpPU9k28rIisynOjC0$ol*SOF192*$oUtT28}OcbIQnrnGN}=pESA$Nc;BHH&2IpndzQaZ59&`w^-i z5`CwxKT7uHi}OlGK`s5-b?xvs0`|X-?*;J&-XAs;46kprL23IZ&MxLIE02I2*4xK+R_J<5 zY>Btk$nAe8{{F5nymNkY7pgjbqAXmiec$}=b#%s2<_w>^{$bEu#`ll<#9qdm0O8>w zka#}<*X}CN6{`74vtQS+_TmPkTG$zFfNvi!eca+!AeLbr05vWtZtsA|Ghm90~y z7T6c9MugWDl_F(h9`AE8SkCbvWi`OHIc`A1FIn3HHzG7l*H^8YG@7WRznX2f6GyXe z{n=-)Ef3Gt!L6lU%RsX z|HdUW|etuU~#V2kq0%;}9uC zGZ0;|UrqMyQ;lM_8)IKF*s#$>KSeP2Q#A#}jA}C~WeOyTiLCG)cFe9;w6pgP@629- z+x5%W-QKY?^QB3r6eFn;TL-qm(~VV2XqTAjXnRp~KPTZRZdrvn69qFdRBRL9isU2_ zywsB*y9&ln(sN9TTGJ~ev3G+>Ik^vbKFd@KAU68lW7+?mQqg&JS!*i z-_L*G{i>UnsLLOlDt`D)osgkVoiJ&xOt8f?Q`dJTq)VjaPxJk<2+?-a2Nwy|nVyC~1vYAXK7 zHkt%jjmhGZ0kn`v9_+Y_-D(UL>}f3)h!WuY)2E!Zw)^UHv4>AUDY2N-YpA>2Qv8@riGoM$h^G8baKh{~cGr zX#Ypt#^Cw$GHMQvlFXmcA=IV1zaqK|!V8+2iRid&`x zE<`@=pX~N4sycz_NhRj5-29UV16p;P3JmXfeDvG^B`+23{O9*OahM13E zpB)B+Up>=aUWd%dF;~LIY-1t$ySa?OfR{HqH?fY_6iK_0&6p{kL$P6b0z5`WZ({~+ zDe#ZIPUE`$5lA5Yn@=bOwki&#S)*A4Kjmdl`;;bG2*1zduC#A|xwR4_W3Tsv0GXg{ z&yYR_YH>AA)Lh2yPmkzp(=KE?UvPU_1!Y2q)9=cRYc>j^bL6e<9TlJRMb&_6A=F=( zjt4T=J8@i3bwF$ynqdyvkYoxT*${wz4wXCJWbn-GPedR!ML7(G810@vB#Px_%gK1D ziKuplR-^}FmDtzz_D6@WLbiW=KA#UL6j4XzFFM?hQb*PFj(r0tveha$06>2|vgi|u z3M=~rdlj%?!v>+tD{oRDs`n%OST*xzbQmmZ>6O?}^<<{fvloiBRt$olU~X#a!8QLY zwa5&&Um*=XMVoj=|ylj_((A%2&5if}W-SKfE9J22UX^Om~ z>0wwX(JN*)b#6y65K_k5-Z<9mh%e>o=9tYEH;98^|7%WaO4o%@mWgUuH3-g*{ReJ= zq7)Uxa)a0;oV@Tj&3I?$jNF!L7tpFOvfn<7T*qo;v9)BJPV?os4J-T z^Q_l-rnj~>kvsE|!=r+p44Y1FSq$P_s#+`d^A>8RrlmuXEE8e58fb0u3b3c`mz(yr zU1m40{SKzb_3vP(8((Y{t1X@Jgr+dIquESER)MWxOb)$(^{)*BEzFlO(%s}uuC-%m z3TT_LQUr|EK-CyXa{a(qcV_nS(+FTwA{bW8`=MB(5uUMUiq=ai@otre|3%l=J>x>} z8`p+t!6RnV(CzTZ#;bnXoHM!kfyVIoG?RhRW98W!dPb}gkf)QT3w*mylZ8I*oyyH_ zf}#%@t^(BYOHSbhqTd;DIl9?jYqWGV=qYkavtB-FYs^Hkp!%GbhgsbwYWX>)H$f z#0WkrQ*B*@Qh$8^(R7p3ATw4UA^qPRnTIz!GbM_{nE!u&^bB zWCF-s*;vn_wrQ#KnGG+6^EeEc$v2$xMORqu+R|&?_0#AK0N;vN&`LN}m493s^EBoQ zy>n&=-U&o2&a;6*HXGqr+o=t_J&Nj_@=DEeWDFu%)@-o916uTYY z^Ac5;*O6}uA>hxM$iLyf+PxhSK=_=jh1Njna~gNC#gLhKJwJSS?G~lth`L9S83Ws6 zJK(qtc|)i!lYkpqG}dwRTgmIW9I9Cnyv5QKY^P!III}qw!I}_`4R{i;*DH zc%f7T=4ip(81SXgyH7!LlgAr_hk)5JKfY|$U*b!6#Y{@$?oquJdSnDDi5g_G@WtSq zi&;)){JEzabt?YQZ)?d>>q0}@w3CK#5H6z9bfl}rhR6^}F6sdj;tg`yxemgOX7E1< z@waRi_go$LqE{4*j%Tvd_wbv@ocd=tChhE;wa~fmf;7I790+-M7oC$G*Anko*WKN5x@SzDOF2aWI=&NrjXrZj>kWBp&XdKHqI6;kE9T7BBTE(AWhYQ8lyH z{gdsmrEU%X$S}K^!wSkoxb%PX)O{*8DErPVxK^~?URc6-1LUjS{sOM%YgbiVrjhva z(S&^=I^@|bKL3#0`%xfQCb3vr%A!X@$8}9tbE_pBobjZtTG3zYm9r2OQSns8E05~2 zhh7!LjZhUBgYZTegG_;EZ1Zo%ElppAI#mgDgvFXVpHO)5;9gxI&YN#)f8bcYYyiNR&A!ekjpau@uIjPkr?#FM&L0=L4jxki>g8e?OoySY`E& zp<*!?EVNNanXk7=?kMZ49JFI@<`$d52HL=R@~or?p;CLus~&fVWop3}dL4JM#st}O zDF%uKWN<^5f1H-}<5tqFnYJ|XB!b76x?QZl|ERIBabQ2VJp3p=0<)SEq)Hr)RMWN#98)dfXW69C57ZUuM%FF zj08??0n$ytXq=10WBlP_Y2lB0$rR+y{k`GN3zShUt*+KFG5u}}ywi|_cYv#q3eFSL z?_?i@+LOt=3JN$3%w2q6r_&EEU!li7GG%dcEb$>#wgDq)nZ55qH_ipe^Ix8ze4j+I zr5fnE%tiS~&sJiyIeC|M@sbKhGxA{GM?l=4nM{anXw`oL$nZ@!XYs{jS%CLQ_VOsI zIwkn$y4`Z2u~q*~&u4Du2@4jfnP#C206oYJh;E(2Z*&77e$_58vtm-z&`PKhML;I+iSgR#_ed%wF#-f%2AsC`tV3hNR_m zAGAANRP_0p9v;gW&N&Ycc#$+FHK(DxLu>MdmE|N#4dQ%)8YZ7<0HX}4UkI=mP&d^P z$R^z~w;4Au1DV`W?i+&{BnvkXmbppqzx}cno80*SY@K+x|I5Dd&nTCEYyFS(HT|DN z=;(j;OM7~>{kq9rQ+mX3CC5v_u~61_xqnDu5p;F+6a{rM4D9vJt<9%b31dw8UaomJL5Qn(QVbmGSDS7I&lO#2gy4=h)! z;DmqbSw|EjCr>5!;|&PR&I~Dg3di}Ru;Ie}JJyP&EcBlpDrkGZ(1!qWHAt<<4p>Yr z`-(oSWRW74LqQnAkz@@77^0UY@-br6H|%}Fy)3@;u8kQ}lTSFP}fJ#ft^7&}&5Uh#*84He(c7SlZ5xt6|` zt)KMTpLJ2yhs*kcPW=Rid7Q^haeZCDw3C;z)q~vGv~+nGVqF&yt~y2fecQ>Ovmh_; zL-Puw7G`syceo@r>8jiLP-{PRgU>6snJvhK#CID5jTh5LoEsKJovrl0 zN;-jcib8|CRo0(9nn3kwmBuQLrO^)+ZA!m`7TrIH+*MRDwcuSsw%$pZizf<g!NfH)?+I@xYJ zVr-ZpfaZ-)U=34?9PmpnW>3%vi_FnYzL&8ltA4dQT5kbaMA-pY5pi#WC>}uwNW81l z{}OF0K@D1nJsb8AWVHnwNQWs~qlG&2{4+?f$tRYCv3avU$U#w)?o0FW{57S4bY?rz&Zrvc2veiT=+!y=5mQ2~5~-IC$gZSIWhPn8*VSx>CHNI>zlpJ8$f>o~ zmc&L$PCfyQ!;7U!^dnWkmYiU~MP*d{5sC#<;%X7kc|IlwZPoBqtOpM41kr+bF}%03 zAOy{E=lEnPqS<78jd19YN$75dSMS-T6^er6{J7mW^|O7=CBDS~hxqu$K}+ml>#_VO zzb7Zla9K=;Y76mbJl=56B!llaXpst%`O`_VknDihLD1~9j+LdF`KOu&(?P}NZ9b&ugM|M;ApBJ6$>5w6#~v{@ zp9BdwquNMRxPL02=UWFett_>wbalw?tgC_0sG7_&X|QjaXr1g&C5 zYnXm;2IF*X-H>EQWs?(^gbik!#tMgG}+s6|UNdN&>@t9xW7oAln>lR+fh9rp){s;VusOua(PU;($bRq;GmvYD{do}%7F>ol z@Dcq8O`pUB*Rt}xGSwN;5?%{AwWK3LU0yuRGD5Cr8vk5N{Yv zUhqFq!QVAXRt4=W$pCl)Jo4=*j6u%GH`B5gQ#~|Gcb&^W$gmxx(e{I+%-1_pm9ExN zz7~j8T3qg0*C}O8O6y7p0d=h5$OAXo*>19&-^1)JHYkwdTInV|wTau@yfSoK*k^MG zsX_pMcFJI#L5fc-GA`Ik?PdYsZnUA6Hu5p2d;75t&YNvzdVsGINk1?^~La-qA94L0Y4@BFC z;G#WRY)>4&Y_O?Z@WPlaY?mhA?sM?V*@EHKWd^%>B;}llKg~#+#tAV{sM*t7dH&OC zNCEP#2RU`GM(-hHPyRU6^rhYTzT0sFJIpFWAwIgS#-PX_)!7q$#^v@xhFc1W>6OUq zB=(gC2bso`sQs@HlppnxbQ+{g{;x|!%NxE_PoZH4pz$1I3)u?4Bio_Z>@=2`_^*x- zj&Pq=ljoOJ#C5f~J|urzTR7~=XGYl5U(76CQ53L^ zt55}RU!YW7dK}zYdFn6;j-dpma;$DK?%<5hgbVgU<76AB;7-2deyiA0@GwSRa7 z8S%9rrqrBaU8#ficf!=|_9(=~gd6FRXgk43lyKJ2;rTHCXyp3lIKoocai#bv{$&Jc z!iLSKVE7@ypIJ|(3X7FlvgzKN(~bP8cD$*yn3=+6y^%Up*PAz59OFG?dbwKYPgmCk z39``P_lgb9sKZ5_!~=itAImQ{V48t~zm{Hrrlx(%2Y?Ir*4=Ps+`P)(BLVw~?d^d9 zr+dA5+UJ`N_6r%G8&>w2eN3IrbyQ*d4muz4td#NPOZ&p3zo?U+WMP{CxzGlXr*`5% zjOm--lVFlh06#*cOpjQ>%AWiJWo?wo!EKsZ0RmEM2YRrAE1)~q*#-WqDzs*_x4Gz_ z8NlY##sSs2iH`oCRzrj4I^8A=veaEnA++h^+-B;UaN3dg$$)UGw~k;WvBUGt)qOQ8 zM|F?)VN0VXYB*&`qskz6z)b=4HV&H%vMy_as7U3|w$VihSWzWtLM%Q>Q`o9OQqkL= z#(Q+i5d}*%j!-`1Bsm{TYi-;wM|(E_ancbem};l>zi7KyN1iGchzg+J!Jcp%>ecPn zBO0_dai$B$ zWnJ>n=DN*kgXAIKNiSYl`|TH-4QT>1&~bs0EcKQKRZaLa_fh-&zn5%AC5RI+G)|`w z+0AXct@lYx(UhLSH8+J}wN(P^S^F}6RI@rY&*Cx@F=gO-cEL8g+kCo7(&J1I&N3?g z+gpd5e-g3d|857w<=aGA}PbJT9> znx{|*&7zXhTp91Wg11qyY^`)kPSF=u2d|t?H~WG{oOWKc5;vx{-pXhl7kZtIB*D-H zc97V;#ZQ}!;CfV$R!P+3=J33Gx6?Av;dV~lMD3RPXQYgF4pKntA2v(=KSLZ!TZUr{ zG1Cc4AEy92(&Ql{Iz!y z{Li~@_s{)~mTH>{IOgl2*&~IoLMXWB2^Fa}X3K{5Pv z@Z*s;$RZLJ+*Ni*^A*9Kot=ivH?nW_5=|{Mxf%aJde8qZ9QIA7#>w@Pd>o!gm|RHp zyk@M=DPRKP3Cg~&wrL^k?iOMdPUXV+rtPInKDG|DVJI})p9UD{VtXouN^#hsL1Eu9 z6Un=_@7j8^mGd}?922hTNw!`l;3koDE`Sv?VNEujbe^105%T%!<^C7<N`i1semq36pYg8Ifj|`JPuz<{2bDsNA%uI0ljwXf?qg~^_q=u)om;1Z z4~umZJuVhFBdntN2wzO|fjrw6M0qShO5WU;iUkiz4$5dgi95@Ya5Ejn1?`kiF*@64 z!lwp$hSYT=ox3n5Zfz?6=1l}v`ERTHlzUW(_4wR9o-MumP+`dR!$89Ynh>@riNb6e z5+#|X^v6a8_U|ioUjAmbj3jdmK7jL6tR zHKp5n;Pp_dOD{O;)lygy8@2(m7{pj(k`Ac>k}s|kDmY<5p9f*Aof z{StN(s+&w#H!*~+;lgf3dCCb;twtL)qt)Ee3IzJ;3D-y2HLbLnhe3|*AL^B?OP1bS zQBaJZ4eVGMg>lGrV(H(FAqL4q3e-(GI&B?z{$-@#?k_2uHcXIDq4HF7HWne>HFXv> zH}N7atkkRs(^SCITt)iuq|y_brtvP#(eqK2!755OZ99=85Nu?!9?%6 z_r+o^5d%kLB|?S=IP{j`0Tmy9(G*q$%}EB+Ns#qsF(x#nX&I;qg5pW{_bwoU%V_Z| z(U=^L@=(=P+C?K3pE=K7zZMNH2}*%OE`Ejf{N^cJu>6?8tT&_Cw&8|DP?s!dqyN@o z7bKW-J(i<0d8^R`HeLYMP8NYHggV-Vmv=xLdewNz%c4 z+8{WOQVFVSV`?)W6)2It!tbmoFWfq*Bh;YmX>y$k2zCncE@eg*u?>7Lvxxh94rSlLJUc)>*2=T61x^ zh5(QSWDzALvf&pB)$-&J@wJYs)t-dZl0Oa9Dnl-Q3fquyta&Q>kf}e(K zvnUdGu9IK)w|YYN*bpQj=<+YJmJlEF7~Y=AuWpU051J4IMZc|eH1>^@Y*WB|kQ}yp zTpA?r7mKO*UvFCn0I{rvV9qz^{DhSX6f%NW(BRu-+HDFE1JJ;_59>z{3ChJ&lJS#w zQWU|9lK^h-Y?)ZegcJ@lnNDyRoJTeq%IbIjEGA6w;ycxtlKe=oH5K314YtdH4B^%sKezlUHEa=N&szJl@IfCwWT53!iOI z@5gHQlb`BS2as_qzG)QG`-P*JHusTLu+o#=9E^*#iIsdFy~`|GMlLtb$$ZOIHYyLo zJo;FkMX&W;U7q%8_J`0L#K~HID$D-O&untheN{}{Zuw|7uK|@Gd&{1z43!9NP=`py z5+1mpeT>%9LKf08RiSJ_O<%~?WpWk&OBes=_CJ|eZkGQtKtQnZ@NoRMFvhcU+8Vv> z3LF{uP$sG>?qI%Ra{zC5Bv^}_r_#(tjx(9_N)eBUhxeh@L44oki#H&W$;H$W4(&srL zHv%xRh1}C5_x|GM^Lb|g(4!eX)!OE;4e;2 zH2iuo<{fDr+>v_4ZZ4wsWlQOI6V zUrk>gFGgeznD=kLIbewnXR@Lt>d9oIc+UMWsKV`X62vhJ-6y$a6BCjxLmdU3gy_-A$$B@j>rr)qZ?z++`_byX+g8uJ#}uXmzMe?8f{4+`iR`nsnS>%X@JN#GOF;3F5EoWZISUM0Q?xPg^NS5@pk1_$NtCTJNX zIypXD{7Ueqk{3O>O`XtQb8kdL%1CUa`Jj+s+hw;XjHw+2-U^S#n`o;wC9_WG1G{}R zE*>{meOj1z{*Is71qMECpQp1=)K`GFnSXH(m7mn}(>=3G3c!3Jdlh{hJWQF5_dT2K zA=$b@Uoq!@IU{)C^fF(yImAPST2I`Y?=XFWH1MYEElJj=%ZhuO1H%ZEE`QYL=updb z8Dg4TvV1=Pem!1rEHnykz6vX!z#($OzMm(yHmbbjF~@v;$3M5V@UQ&frgpLiNPOOC%)K#w3~&i@iO5}~`yoMBUNVC~NbXIH-ljT=+Wuq7d&(2g z&_Z5yk3ZL*L!$c}TfQN;hF<<0vVBC&36=da;&_Dx=&&)9HXvMymBIvC!zF(By8^z_A1BH zPP3EKojCIj*}`D?_+RmUYbg2d7+hEt4%hY2fLvcy7h5v^Xc41NIzUl-D?gG2c|CH4 zOf(X^%-V?B5NN@-1$Bat?;Ai$Q0HcmOGump94iIhR$hvblc=` z&?>&nYSjz9f~n&ntNp$-EZ&EfyD^6*X`MSUF=53o7~352EkoD zCH<_dW~&gnN<~qtYpv3q?0o&LN@r^GOI?=UlmnJzDo7L;gs9*U*OtTO`;qD*A^vQK zz(bpN7w0SA-yDh!stT!^SQ6K^jHwj0+l()T9lm6q6~25tya=iGf%E-dHe5za;WBq#=nWPfrT3*m!GL=_32fp_iv_vA#TUr2wX8+m>P@`ZL51uA?DKoEk0Z91-%^-!`tjgkjr z@O1@HS303~Ql8L?D8Ux}yW|d!vc@ELxPpUUi#g3rF`<}#V^5F#U0;*l7DFu9YYH16 zhE`RPx8# z0X%L2wh3B%Gd|U2_mZlWc#KfrGIJJ2+{%>uakR_|#eC{RRQi4VLBiCj#6~YHY`#Iz zSAmCp2I@nxt%j$aG*`f5%99i4YInwmB*6veCp|9x{=+RT%|9Ys7*@cKTi7&V)(4*+ zb(!&xRi0&-xHL{S9!3Y@PHgH7>(vMbn(xv*HFt61I85e4EeI2ZUV z;AquPKC`!IAZwyv3H7Lxl<^G*8#4P~PcEL6Md9f#@@Yu4p$~xW_lMLd+vQb(_&0qD z%C6y#d1nQNyi7g}c?nCi-!j)x-A>s*JNhZ0!AhG74b>hqPJ(ibj7(XZ_pwPJ;n}tH z{RcoZ&UN`QmMS(=C1y8YvZOI@T~yc_d&AVk;1Ict#lA+dK-Jk5SB&T8Aqc+t*QD-OCB!qLnlaN3&!eaA#zij zJ;k8|IUG=Z8)WM#rnAj<7Wi#BWu$$@Fl0+;$6EYu(`Hm$(=Be+=+na3d;cvtSbM7E zFZ}b5szOk(NK(eY+t(xP{JatoZj2Z!OSnXY>~}`bsHNdi%f;G%zrq`5^O6w0Ae_F7M1-Cj z18rcBYv0`yR?OvXs$q^UmatnPQ_m-mFqMjzK|Y7}i(?Gh z_Jr^)prz{pwk^YwrC6Fx-3hm{=sLcW0oHL`6e{_zi;{Gj$WITlH54kEuL=<_TK)>F zq6dhD(91mMz0@TL%_);8EgA72gS5l*00?kA&qxDFhoG2(7;ljJA`Cfu!8GMKWcC}5 zBRtZ)(;I^)j2eObJH{l=tlb@3Qj~c!3V@5!_ z#)!ZtTZlIjrdHtCUei;;2KaDhRzLB)5LcMKMn8`8abEzx6UpEdSNXml*FTf9-KFR+&I% zCEMPf9lj+~v_gUI|JM7QM;Q+VHyJS4-OC{thGY%L+V>*{f%u zROZ`!mS6p)2Mub<^IglOn46nX#fT~Q7O-){o{oS2KUPB(yr3zhkKpTMH05qk5JBE z0mQ3{do8QDgTe&H*h85v~vd>xvt|rd566 z+tUQWtV)%1aYthm+aoxWO?xndEr-6%$I)XugxfLG^*^Y%Los~@4-o)F-1IZ8Kd(lX zJ+G-ig>*B)E(+MFZ@?d0fe z<&ggFQD&S-_1LH3~m@wzGBSnb;t{?fi-4os zaN@I*_um4dH5kxL zun+PFCu>3uqO=(m3>L(i%Z3HxFI!HXtGsBaGk{XOWd~A|#pxF@lk5j;*H6PCne7xGUXj~*Z4T^L)^NzJ5je0W%X50f!my_|+7`mLps3KZLS4;_R z8O+DRF8P2iys$gEz^C*1WDSy4KTH_>M{@cExjL}zQAYIwvAGDkInawx%oCKyLb&E* zEIP=?ABE8kJ0(fX6=JF(WCXd{%YqgvwBLZ09I8~;i&HlyI!YRk)$5$UZ;UvXg1oWi zhDeLoj1iUb21tvpQzlnWD;wQxz>xC=Y7ce@H28x$=#6JRc^oo#JiM?!<|KqMF}9RE zfn%qD3J8&4ihn-H$p=V`6tr*>=-O^V3^L%@8LcMi#p8fVZO+k4!MtCD>SZ|hRLW#C z7N;On6N9(wr?%$O4$d2SG(}4$&efs1GC>%iYuW_dnYpBDSd+SoL-6q+$5wtV5%SRe4G>s-2hO&x+l3M$) z@4DlcatT9+CukoA6w=sGN8VlTl+?(80}8a$48%A$iU?h(dZ`Llv~er%+pG>n3Ff=& zT!~g-)Va4$2im~yS(DNJY+u%(>*9bf(8KHZ!iz3~Wg(fhXA7XxFcuG6ew1n5?TI~K zx9aaImdRE&=wYqR?RWXIqMC3e+IVv%a{f|bhm7ykK3-mJwf8yk^Ve8>o8?NT<&S=_ zpCA_+m3hB1B@2Vu71NU!H2Cnx;-h>%o>~<>86YiZYfQv~!?Q7u{i7C`LPn$jyy%XE z>X1d1E{a+1xdJu`QQT1)c>1-*uhkZ;L!18Lp{00CSzc?hgWXlmI^5zp21_4x*+sgMbSd z)?fau)5f%0QeFL-H5ceH6lH2JY^KSjFz?vEWCP>(%^N8AI^NxJ{YM74xjgE-G5+Al zF_2G_#PbwdTOOMYtx(I+9NR=l%^2ohlQ0*9%1&Aly^Ffe9FuT_FIJfU=sO!WeA1fPd;RO~>gyiJMayq^3uhXJ&=B(=WUE(^XnI5{~GSQ&BAFw63O&rS2&1K(2Q~ zeS|08j<(zXNDISh%Tvy`5&!;>-`dd0iLNal78}@n`1N}r%u8Y2V{?-~;l1s`V&O1G- z2l&O<7^A}QLTSz=ekT$C#+=*4*h7BQ1D~$3L*SMbum{SxEOiN+rbJ@bA$%)+5=p_P zLu?QS25DbWMA3@TigxtVOM;hC8Vv@c3hM%ZB^gKaN4&JNZChfh*jDkAyF}FGLj*#k z22r9&3x|Xz@d@0aw25p88B(&?-{I{mhiL0i7A;pM2q!Qn?2_P<5GO*+ptMAX=^}okp{@5yT;2odSQKsi)|XZ#nqkB@qO=aF2uvw+fji-Z6Cu8M zUs$zLpX5VI<^soz3EM}(O?#cAGWr6g%ZRm()*~sJT+QfX2)pry2vv8Tz%LbnEj-)b zD&JzryhnF&9gWrscAo;{b<(Zek%`Eh;QRcU6?o zPu70&5-cQsyz_~V6CVqyG}}MjQzsDMO1c?m0%8}j)dNV65;+wmw9{+36_y=%YUo`s z6^$-myW;#d{3I}Ec075M+#vzHi-NNZ?lb0j3Gc)!khwyv4DRA zruPHVkW9>?e$Ae9D`guDmgd8)?XZYra}4nuF+1+6fCba!+1X2Y&6~lTw0OeQNA!zp zq?NIq{y0xff6~`5#!7oO+LFKF2A(-LGdLydwo(#WUqPo{mGBPQv zHHqBcsPMQP48+{LRC$2III0_BX9w%NXrkKfbM_629ajD3&>A5Y&Xl%I8oV7o13spe z^6hbr7;MkK8!NCWvgxL0bE6}nn0Z`19kDTU^N4f@lSY(sX2^-OhEG{*4he=hMm)#yazy@6 zL<_DyGc@6hhrC+#2BGqvPo;*Dz4j!r6oY|pxGHn z@PLe$XvMsat^=4gZg>uJ1)su3#SgqS|7hBg}I(Q{1kh)biS>MLx24(%V8(AfR=Gy#z zAvAYzyp9J>6@t;tkO(A_Mvn8jnn~GPvnB{ohp=u3 zLEZ9Z-{P2ylEWGwOtH!9*=4v0>-jqb&q#<17Q3-`R#$1)L+mG&PLlqU z_uW%3(LG?Chx&)~q9AaLU5n59fH zx>)^Y{@9KpxO3z5eFX{&4eaxtqSY&81?f7iDuPV9g4T@lRPAb^3xwY=0m}7 z*&Pwa1oJ=REYANB zH^8|5yT=n){%21=Y{mR%Psh0@O#s!COH83DWej25P-qj5raC7>o)}E9VsGutnpa=& z{>}7v*UxcD*-g(66@w9KPZ>jki0JQDuNX&He&u=_Hf)M*+OM2Ep5F(elua*Z2S(T~ zMR#FFP#V5RLW$v8PFfQe@s}fBH+S`QChh0O-9lS{ez&h0MH3klTkf=D+BY+goIfMn zr_-j7X7};EhPy_F_+~}_&~#C;J1tXF6nIQ6(Sn9&{B(^cbXO0)2AoO(+it7GHyU!+ zLR$ugLqJQOkn?Q5deu%(uY3~4E9lw8(OY)kzmmPdYOWu$;0JXr9*vWW>n$3M3IuAa z`i9uR_mp_`I;MK`(jq?;^ny@E=8uJ4So3~4|aRIW1J{CRoGA&u=M=>9sK=J%Hy!rVP z-075gHvcy~tH~dgvy{sV#36+z&PY zmw={gZ2eNv_xREle9K*Bb5+`E-T93ij{4??+Tx;nm}^(xP|vP7JHmC3$petEBH0o$ zw@ABX2xtI`C=hCjZKQ96;9%1{7bS|stMW5*Yz5Wf9Sn~-zujHbH0#AXdmf6kWx&d{_%Vj16ZH}A5kHh_03mhTXTwX{9evIgXp0O{6k-U>^+j#@E%@y z+3EVaI&d!{SOa5u#x^kdY;FCJqJ^1aiHgdzBM%812ZW?T{4(Md(cN}AzjzwU#-5Ff zu%>$(VH>_ub|6*xP0zKhbYxoCF2s)O>>5KsThp1?m?)DmAtVjaaTbU__w+`&jP>>R z-qRJ(m$7KE$s0v##y|e$1Sdr`TjnOT_#S?EUK1JXy6DnryXJYmgHDtBvun4`*d=Qz zo%Ljsa^5!%>QABmu2wWo3?a>YcEkp7{Kf`oH2 zEX}v1VqJR95h!@mFXpES(?p=Z-Q!V(T{pvx4!&3(s?RFZlkkY^sh2v&%j!qq`^j@Z zWQ|QN;Tku8`S@vK9&cqpW%WStqq4El&8WZ9F5Bka)l_H7Fb7ceZ0dv~Ty*%hw+^j= z*|}wT@GJN|Ua`olIbH=3j=Blzr0_KFTm^ft-1ZBV@0ZjA^vz&91yYqDY5Q&1F%!28Xx z^Fphhm$3&Fa&gqnn-_>joo3i?8{-C0vKiKQNE{6L;}Kt(+D9Rq)E0=7RMi%))JX(y z>Hj$yA;J?mCy`x3i+1E~%(f1es*PlLGDdZ7&4wS_o0|vvosx`Hw9=MSA?r(Q!kRYn z62Nb;3D$sBSdNF+M*A~JZmai)2{l+!-irOxF|!1@1@=y1DqW50RzK6pcQ{$yi)8oy zSI;#OT(xg-MIA$nS!EN-0F1Q>f zO1%540ie^T=@H1{?_+MlcQd$9#coYbsoJ zAL{_V4!WkBNO16rFZ-drCG-YSaE4|?YJYGhzX(POQk!6bCcxcvU9T*&GJmH9%uWu_ z>9{&ZOo8{q1Mp?82{Md(th$DMTo4P9&$k zllt=ax>^jXOQX8q11+_V;#d0b@7d;94_&2od3@*2_u{AN!Nb!6M7V73OCt z$goyCi$atWiRNDbG20H`z$2l44Oku~$Zp65ny?iuAp;Z@T0|bDC{%Q9tFo&yAK{ph z1zT(%Gi`OKa}YYWBqoi$HPNcVb3dB1ciyJp&mV@q<-l)wx-#Q22dMKaI!5_d7fTob zsQxFgny4R25^FLn6?M>rHY&5>GK#ko;hcYH|mke7Q!V0KqJbD?R*!emDSBq4k6@o>ME-kxzQ@BLIf`l!wW5w``I z&XwzeLtsJHt>9u>5|WZQgbjzIzdUvTlY-N#0bFTz{p!-E^Dkl2%4(nLbm)Z__C%YC zMUa^6KJ{2`8d>X806<>jbT~(jP?GoOC2ZHi=8#5CcB(z7Ews@f#U3%sC6xK|=t#Ce z!-M4h4M#$@^!5!)f-H3J4s%COo>K@p8|ysz@(33h9IDuA5uL51jy1^AJYhW`Q8@tC z{+eZM(j*}jmQ{^e%2P@id_AHwjiB4i{C6zzin5*(Wq_$f2rHvPgBQWhud&L7Nsl5= z$tP0)XJ1B$`no$*7Xhko&MT9EA@7stIr^DR=4@kcPhkT4 zv;iv2bezK&ix%_4F)c-a@`BPGarr5z`QDpmqINPwDf#fl(m|I%*gxh z<;O)QWXdZA^L7By^~aEJ`|3BQCH~}t8%sM>O@fA(OC0DKmFFZB-kR*l+%VkQP>~vZ3Yc7$cy$4(!Jc5B)=;nkyb&J zM<2_q&~W?!lc6JN3Vqg@8>gqJ3VPO=(y-?OT|Xz~2hfdb2$%zuFRS;#EuwWCQ3@>O zix(UMx*%u<&H7#ygzOBHtHcejZCt?6WSGK!Wd+rp^dI3k%clJ4ZSx|m`L$O=^*ll$ zI!-YJ$be|Q!%;M~$vXB5g8ZgGKdrsa!DbB_D`G<=K3ed1cp-F8DykyN@}pa!Y_}zU z!$b=}gfSrg9@PgF5E(Cv*g@`${9I)iOLNkDMKF>kFTkT53uXR-1ECvBHIlH0F_CSK zNpy~#-6Cz9Lqm`1&ou?liCi3_45Ps3fNlr8gOb=h`y)SY8oW`X9%7cjJy91B)ZX_~Qi=Ygjm7JR=A;&U zA6N_CLd@GIY zhQT(wm0JE8HirpcX~?9p6YrhGewFU2$veZ?%FJKMPmL8h`+--^c%IMf((OYm+V;fk+-@KpNznkf1C0t)YmP75jK>2bIfUF+wJIF znd%dP+8}}C3g}1?$`TWN>|;OM9yH~}G#8f_ zpkMM(1TUQ2%-q}$nZ-kwrevmebR;~(GBZ^f8a4+qV{49HcMqa8$%&hosO45^``EfZ z&B=}YY#2NJcBh&^?V(1{3yJs>3mL3Uv)E`CQ3aPHKqy^;wXP{3JDnV zoxfhLpdA%2lB^sneDZ3#SmfJ4`svHqbznTl8;0R6>IE7c_37H+!kRfY!`8#+%ZYk_ z3B9^O&e3c)Uy*D{Wj~oIz(V=26S!O?weVX;4tR4_c^976UvtT;z6dY{4gS1=9f2+5 zp=$1N+RBr@S)m~@gneq$(=Ty07na;T-s=XSL{)N^(;!koW@Hv(!E$aV5{gudhf(rY z8VeaY6TER}*9FGq`T>;SCP6f~4ays)F`#80B=D)V`SrR^+JChKpf+9u?JK6r%zuK| z2Lyq%ybIT(MFMmJEt#5%U0D~x$o<-Pm97+wRg$PQEUO?t0)n!M(7k{Yn^}GOplU~v zv()kF*Yb+8t+5PNl7X2*=c~eV4^AXBX)X^d;{(&zB zMQ4#CFNJ&3p(hItAd)y+X6C9LJn_zUq^PNeY$9ZNNkkTfRrvjHk56RM(I~2;_oWC; zQBKFOjXl@;{CallErK|CfVV=5hkxX*b5-DWhUb}c+3A+Sg#>3z%g+2W_kBN8{d{b` zUTC%b@hT|JyC95NsUi=@bHwkzO=_Pkx~aIlZvJBN3Yj_lfDtMsr4YWlR{r1JXg|<} z{6jf?ZMkk?Mou^|Kipn;8O)j0&{G;Hq)rTGn;@tv<>ichwihUDnXhw8if>#LPI>3$ zT?p$|@b9_q>ohE1Lf&5kuJ`_+o3+MHpO2$(y8`-S1ALa_2t@0ZE1E%V5<AklTTUScXHJ-C=nZ-g_4eZz-e(rCnnNEwYd4?z``g;Rmm0WZ z;>b~X*$$Qzdvq}7M%#>1C?aNio`a%KGI}e-eK3zc|MdyKcb8V`6giCnKOcdrC*~JO z<4)@qZje%0wPzDhsFV$jk(N(E^Tw(AlSU;R|35BSfZx9mEv%Dy{m4&*`z(1d=s3h@ za^GF%9Q#lQ$3k*W+mA^6I>fDc2>JW90y zg?}sVDwR9~&3IKfxkq=SD1QrnT0F9P@|5>UB**p|SJRF!)h!d@!1^tCBb zj=_=z!lV5S2XwBD2eHGrtK$=L!6@>{fc{laRI(1p^OU6xwdZno{@VcGT$OWt-M7|G z$eRL`btEI)k^zF+wm#shZ3AP!MY63>W`S#(}-^OeU)tavt+%_!g`kbMz>A4Y9 zz17JVU@v2$IJjwQnQ*ld@9uYepVYFhLSAFZy!?PRn+MS0AWniR|0}H*Hh;Zs` zGihIZ9^l%D(7wJl;wa{<@eygQa_TX)QCOcpL;NQ>vkGPB9R{IC{jT+gyR}H_ZvYQ3 zD*Yl46_(~SwX1NJV+rNLDt|z{r8Usp4&{-!W9%uR_x{>vU^0?=FP$tc56}g)U_jVE zqV3?4DVe01YguPL=XADAZC8}>XzCDU%W5$20t#2{UTqos2Tu#UY(6sbcgfvb)Tl#KbE zN0bD&r0gud`Mzn(0_8_7vbwdOb!f9j(PL${o^<*wW1!YES#O-A8H_k(3Xa$kIYsri zBfZwoMUy?|ZXO$6AsI&3!^%fRHzj2CqL2UnSB}2TqOG;>(mSfL8)Wd7n1IU>cvsMA znA)(s;6%(aTx%a6d@7g@9_){S+RdsjOBFQ5{R06ks3La1?dB)Eo7W_JU*%Y}U6YS8 zv-U^6Kk0L$q-5x4X|<@W&UwhAoETji5K!9}KHZN!ei;ur(vuzm5Fu%~bT)``d+z*5 zX>BIO4%H!~nsnEl`|dRJz<|eP0)-MD&p_hX3MNR?eTbPgJ35(w-^0MaTPmAUi(qO*H+Rz$=wK>K!I34+Nu+$kDP%WQvq zrcr%w$5Q(Y+C2{0_+8In%fZNuQ{vCA@RK1z+?PP713wbVr2%H$@FlIBVfw$)Qsvl< z3kmjIT&3V?Q&C52m0H7Bx2K@XqE=rWMRqOpC5R#yhK%ZcMRtl~JqF!e!s?Fxo?vZ{ z_-;GpOyoO2B^=EBts(|8fuH*gqry4)Mp$4MmoTc@%(XInD<;0-#J_3Teq*m_L=>0G{{*Vrbx!c?L8ze_ae@S!-GYN(^-3cVTJ$}7skW556fW@JD7KN=wzqo ztifEVYe-*vu**1nv{gpuO~4R1!O(;v``!V{luI0xfdf&AVfQ2DS$%Vf?zm)J3p)P& zRn0y^>rfw(NZh06It#X#lwiLUr~q>356Izh3Tr$F;fu5&DiV)R->FMBmlSv72K zfh;0}nkE2ftBr?1`G~D z=-s^spypf^-bMNOY%Jj>hH@MEkvoGN1`v2Ytp^o0sGAr;6b2=P;X6N))n+7U2Pw>} zJvmOiI$PYnvHh7&lm7(Ya`#nYAierSg=YLizKD^zx&QyE(wS2GN1(_NIoSU%KnOGQ z|0E7{s|)@QLXgrKB$^@t8Tz+IQ+Xs^1cWQPMKq1Jn|zbRRbM*L+0_S!YkIPTOe%4NiUrYqWi;o)@0C?XAGK<^)M~OLT~N00Yp) zdnjOLWa(evYqUYYg2qNh5MM|{zi|YKte+V3gTo%f?J>KqoPvM?kq9z>0ncC(tSu<~7!ryg z?ioY-?jlQ<1sdY@GxNC%fmWf#0C1Q>v+ZYaT(dxaapQe*AU8G7F+uf1Ad6#dI!wXr z!}$~Raf)k$H~o8`{?=YNLk|ukir7>)9Moz^tHjq>AH*b+%>i5rTKhHFB+PrZzQ->0 zGYKf88<-r#^F9X#6KP)^4{cu^PWg>PS%B|oJ+is=pFeCHCr3ocrOAyA0H3D|I}XGp zNT}b6m>Mo$-_w~ZnP#&&LsTl0glkrzt(4aIE(9QQh6oy@Dy(LW8)Xfq55%sHE?Ij^ zPr(;pYol!qU*E^m(^qdBla)Gq+^><7U%qZ$I`3O22>8$ZIXCn#okF4E)6b8`o_c@& zOgt|-^gQWap^^$+tMQ2L0fer%$Af&FMee_09b%_CK7_ESd=|y)P6S7`TWWpZzHYXb zwz&Ae0$D6`zn}J>kI%hZ=`mI>9u^vW+CS>(b9n%7Hyb(}cPF->Cp9mf7hl|qk!8zf znOAGqThkvKm0O*{(3~<~T^|RvlQ*_}Ns;P?1WKhZE9%Gh=p82Ofc}0X!w<%K<&qgJ zm(xg~$57zk61^Nqa{JeTTuD}_xu~jTt}8e#TG2|aEo!VaOr{eh8LCMsIIhoFHiW^r zaK1+z^69r$hjmqG*`~>$jI{~@Ol%4zmQ4*RnY+ELn#1|eEAdlkDGIFV)Ke7bIS1j~ zD$1`oEgGzHf}ODwfGlZRZRztSZOf-{qdv|Fd)zVyVMzl)`lqM4=jAvM&cy1$Y8>!G z4)Cl(zvHSwN7T7K%2Q4l39qH}hv=fEWiR**@(LL`n>h|kZKQt~$A3bac8y*!YlMJtL=>V5Fyp0p~l zq%^i>J<7Z(b>@a$%Di~;ej#!W2h!^#o3B%f>Y|PP!vGhb{`cyWPmHP^k1cYsBa)dl zV;1|AEIAxF?=$4aAW_hp1Zi3^OSs7+bUfQzo1!}R9~JEcM|JHuP2`Bhgmh`Uq~!DQ z+kHl*1JPapx~{VD1X3i9b#Aw5kL8xPJTCs?wEG9b+j8^Yvq(*gZ-7;Ct9CWdNcG|b z>8Vk(Bk+fLwe|p?Ds}2ValiyA4KkOmB_$0q7X1!RO7RSuE5Z?$vjrVY;4NQakro`r zLOx{`*0x#FM&KW987J$rT`o;Jl(~8VVLFtgYRgGwlK|IhI?f5y#|CoBNUzpI3gOV| zt$!N!lI3wuU+~X_qXvbhrTCzLZMGB3W2PMCJ89h!vd(-;{PrjOxji`l|M$4%Wd0Ak z2@Qmq_1{Q@5`d{=cffYf+dHtDI?<=OmnvfE^-{Oexn(;KUbChBLfFZGs`bY?nN}?! zu_W~SWd@Q|Dds@d{>7Q%*W95wN0wcJFk^d8*!TuBbamQTxC%<8O%^n#M%An@XJoNs z0zZV#`=Z>P--DYK=bM+$GwA2L95Vqs?CICl{^h4E8Gu|PtC%WVyNYbRjKg8A?sVAE z5%a5(mVIR*eVOar7UnYTRJc21qAZgNdrLMs($P92pkCMR{=A1)OYAEw*Yf@QVaXZd zXV}zXFfCVvh_5S0in1_vE_GoRV<#KBHt2z!4B9=Dk~)m@bcl|1YLorR6Sm1%xz$8% zxsEC7FM#FUqC!-e<%m3gnrM_Bs#T#!gK6MHCsj`cTzE(I32nBCLn(lVp_>w^P_$%b z#~kUF$SB_vWqcKjQUnwQF}?XKl;f9WJ779%NO{$PtqK$6+J`@=|F~?=XhjU-wadNYr zt(cZkR5uetUV`MVCXmOD>fLq?$0}p#Cu~O^P(bjC&@>rR{s`g{>Dfq9zW%$2m98U= z3jjKWqN<_NXPM|GDwp?2;#LPX?57s!Uo)y`|U5aQ7Pgq&+R4j?K48VJM@zb_WS5Jp&Qu80qA#~1P9vl(kh z8=ibk-o+(`Qozq z_-vKnNoE*tA;Bj}BRUbe`N!;^3Mpk#h=mhc5GskbI)?~qJz$-)zr7b`Jzy91901Dy z*BJF;j+mXRAp$H@euSjvXD~z|k7_LTHkYJB?T$dTfH==wls--zJOAg}XA_DW{Ym59 zStwsWud~ChSWa*1jhLu-R75HZ>tQt^<9VXl-_c72kBXi2NK?@^!}E^-T33!TRh^?} z9?BR|IssKc5PH$Cy*+Ga{Af>zTEH*mOn)an<*U>z+_0gMei;)(NVdH68`UnY?LF6v zm({L|h^LmpM_FvA>7UjpB7>U%5-$>U0{&qOst-TSr6;A;1Pz)Ztbu1PdiJa(*3xle zSV7ggblBze)(ykEq~Tv}xYjqm$G$6hED;~^JJWmC^&9xIF?QNPPYek7vjAe4A?LVk z)4#*rOH_`#0h;&L(%-4^KPHEOM^2|hz~=1O!+Q!L?7&&sY?_Q2_elL8$2zJaI6O_K zL-;*?6z=EBh!V$tx=}12g;$mPUFKF+fG${-b}YZJ*RaH(_2C8h2S-Q8Uyk(?WWnz{ zKl+mmEz6a_44m*Qb6W8VXF!sQx?qg*f{`mPS;MYUn884b=0x0FO(3e5tk1Wml9%Z1 zzmHsJMiF~|{|c6L>Pva55=Q2=ibI3GUK5;!jsJSv>9qO{=qum`DYW$HJBSBC;!19kje{0JEgmC_nO>6p)I8?U3H3h4 z-PM`Kk)%HHjM%J*Mt;%gzt=lvWYP4_vAu z&!ql~W8n$z7AxAwZEchUWy$DBD(}vZNMck69R}T%DWCO}-#Rp0*Qs05r+$-1;COf+N+F0iRTADU$%Uv?cLHtzMr}%cq%L~e$Ue;|I@@|T>!~t9+G2T= z4C51tK+9;!lLX^xM+qfpQHPOwb;-6VqDosI*hE=W5iZdx4PJO4;V7z1_JCj?6Ox0( zDAe@3A^{2`ea$*sH z;5VouG0f}}YdNk=iV=~rsfxBG&#*woh*a9$COJB;5V|(Via#i)YUlJoD#$HnfKQ;h z(dyeDjQs{0_Si&TxMlovUY-GOS2cOMaJj9P_MuH1NAPGNbE?b64J-<)ad- zlP#wsR?M=^GsfW-P<*|@!d*PhilG2NtU5ONGS~=ouGK5JzB2F)V;fi$I0uIaZABO5 zXQ%9oI$on>7Ujbw*0sFTd&QNN3TijE-aHj=8*N8^iHosE<$=hrVv4)VrGwB|%q|N_ zC{?QjgN6H8^tbgF0hh>vwMX!etCo%zm$!_co!*bT`VRin<<##RTlv}O(zhhQOZ2S+ z@eMiKFwAFqCBO^*k6r4Bh6Kc!y1a7*a?7{KKP}M;?~jpe_w`Qg@16?mYk}kEheR(Jz#w z{%oYyixOP)yw>En?yo|azq?leCig8*7pZ=DI#fvr$rZ)$}hJBIQ7I}vQQC7cs$B&UsrN?+hVPQAj&>{#Fr5>9`4PPmjEA0cXh>` z6%{`O(ro^K$}cMrJ)__i#0%4<)b;wJ>(b2C^FWl(i%~pQh}5r9(OVJ#{2wVk%e(oH z`^GdH;3-am>`kP1$Wy2Qy0P+*!<`AKcOa^?El@Cp#uMJ8R!+JRqV#d-NzS9zn%~7#U_=Z6=Vbn>XQU^Fj`+}t1n*Z zadQ#rSx1&B7d$OOGZR{t z8W@?vYA(OtVd+?#zAr-GKzja3IWh0EC5A61+mo2y!QUOfzt2Nq_kwQ^(^1dD+JgT| zTHC;9^RQ_QEPkQ9^eJOW$4{dp{{~1rxl0aFC4vIcULHqoig{W37xA#qWAPDHIOtpG z`!2*W%O@|7jxjE#K<70Ld+Yj+vG4H9EAY$4UEn@k^&Bur%K*>n&iJQl@k-X} z6!UE|PwAHLoOOZF2w6w0w77jcA9rN3+>lak+rm=;S%`5Pp&;`Ha@k`k8HlNxl3twV38QYJu-yi=c|NBNmcNVXbEFcK$fyV2ODRl zpLyWsQq=uMf@w^;?1BSyG5GJO!;|iVKeX?M>F9-#fnn9q7*x>Xax>1B2VfwlOXy%< zgFT>l$_ZkkCxBjeIY9+Mr$Ba$m)~R!K{s46{u2eqe=b}_mmGV0Yj|Q1pgeD1RjE6K z6!0ney4QoSGbX^c(8(TcDqY*HDmrdbd>(>7Eou82N?tp9PPdkq#&8+ouQhhWli4T< z>dDnBlC?UX)|0;)HrnrDp{1FyFKDv&KSw5Q#aD((E&!7yx+*?Pi@2Q&cbZj+G;Ds+ z&rd6&vltUGtsM=XVgSNh=Fx_Mg35Tv+(>?hak+!6cbDpK zHSvXN6^hfqffGqBOQV=V=C{siVnxmcP~ z%^D>h%MA7q8!orpge!>WHqx~VrgH|aiIUxlr4{_r+ndvI=)hJK)my>`EUmv}q#{XBD z#D4GzSvJj3i3BcxwLsCFzfSY<^?qkC0&=X{ql!5 zwdGgR`E{fOlFGzz#@I4RUwxnmT*Enh7oCbbv=X&nNp2Qb1h9EQt`)Ai-Izhuh{XgG z`h*u6vKS|oMYf6$O_=mr>Y(^gNCt@dj;b)s=wS3Hv3DH`)bEz8C*!fbKKmiAN2*@34+#NuoS_T;>N|h+R2%V802?LL7em^;ZwQVO^|!)?!H@Kk^g!GRe*aD;*tOf~ z1SxIg@zj{gPvV>cE?Rpr6QVsuw|=J3${x1IH(Kkl&nWx%xIUo3DFA+= z$VQVmx{Q=+yUPN|Op?5c+=1xB{%P~7%-_U{ddyzpDR?@qdQjB#{ zU2CwtvE#Gc z{UxYQhTny=ztH=3Sk$9fKgB#TJW`tDCKciJgEho{WkmCv(mTEa6(6vA`*44hsiqd1 zeK5b@d2nfU`;CiG{t+@T%V`9?)2kEx?FbG$XoDIB{-f;kp*y9@AbZp`ZQ2Uf1P> z4<&jLnM)^7xKl^5Z%X53!D# z>NyKc4d~Xqu-gzr{*SV0M+$g3>K^AEa*`%IO6jyRsCGunE zA3!4IP_e~`{H)(k^4iGN)m67wBRDcswC(j-XyC`55F=cZgbPW70^{O+pC3c0LRsA!X_4egNn$5YeAIL<_cQlMAVta)WElV6$fz#H#vKJ%< zxYXI6bM1h7VZYl(ey?8Jl!AyEgqzKp{Faqu)=3{|iN1sG4LJ*C_i&-%x#pWGW)e%| z%)Br~NI0t&iN}vCG+`|7VH-c0$kRE&nXjD0*KqX@BzqqP34MP?MPwl23Iai_lL76Q7 zr8=4Xi;t#|L%_o3I;km25S^07Oy$C&A({w@`rvq7mQc7#`O!ZUxrrJnWZYcbA>p4R z++2=(Fq3@noPg7?=wH!s*(K8l3ce^)MVDCOJkezGQB%=qY5uvmc7znNKIMG z(~Rh<#o{8S*+tH|Br~u*FhWKf5HarOlL(b;ZunEG-7_{csA~<2Afnf~p z8anr+6O*eC9iPlIMRg&pvT8u!J_!s%z$U1MbB}%~h_bcJ)e07t0o9jMR_$b_Wh*zO zd|3o`aNp7#nVSYClbIXGMzjZNIp*r?k^yq>_$LcIC4tSG_hCvgqnwT!K$z%WpHMEr zs&S%4I{1dOlawUUYkk^oeNT4?|;y~ z+gk-ySu@KqcZz;L!acj_Y3}$inUTY!W#R-w+e!5+gLx*U)0b)bb|}zN^B7g!K4FEn zLyDkz0yRSw_LEXfjRm4bve>ClwrO6Ax;Gz8#r&HHzHKdlHh6LXBnefj5QX{q7*12H%zROLy*DyqLC)X z8}2t&StYI4&(>A~0y5SOt(>UG(yQ^IWbJ(}%WFqBqs+LZifCV-=a%~xpis72d)-*8 zZku>B7|=9L`T7~E=91c3SF1;6?Ns~*tqjkK!^y80TC-9>n@`6F|bn0$^5*O4*8(XBYkC+}{@w|?| zqxNB&-{_s|q3v{;uytPdS^}2qAB@y}3E|N|iA>((O379}9RzA*w zCCev=1?g0B!1|0@wX}AwEcPXJ5c`5)Cx)a<(}f{L$pq&i4{IahstZwq7Ygbx!45pJ z)(xIuntMzDdk`+k+j~+!YqTy87s(xy9~E)CL&n=^b2c5dhA5P6Z$kyE9XzB6_4*>< zfuELB*X>1Mbq1T%F7o~m=&Q`{8q9A?-*ZVD7X|jK@a=j_2En$J{w((MzTHoWzEFul zXk475XZ7hIe%WptDuJp%vx%1@;8tCQ3}49SBhF<2;|59onb}hUFdD*PN|P(~ z#!m?jn_88*;ymX(;4hJ+kzL@2kqU1`8=}xYKPrY48=nK)Y|@3p zmwH%0ro`B*wZRwwpAR6B$Ashy3|HsvIsP_i_I?Ld0#*c^`wMI4)dL1qoziG8snpA#+A%ZSMAIBm-dw{y1;;Zr+uJ$eL6qJUb|8A0o_ zgP5OzTA+c-O>C9F7&UWnte?%@HSp25>>5y#s(lJo-0e^Th@^N=BDraVhY#C}2`w{HYy`*_96;dPzV+KW%1#aYDPIpp&ZwmS~|=;PqsX6d`FFG{TU zIA{tbQn|40hzekXQVz2d^9=#9b~YBxD0&`$OVR@Piq;M|i+45TSQSg%|0*AO+9%J8 zATxy=4z#VRRmH-4kj;D$1x!l&c8Z>eHk;gk+?GYwOxpd1I1Z}FAP(e*u`1uPJg$=+ zm#DV9hZ7r+fS64!H-O3odai-hT@$2*C`3`Pf|o_-VZ)XC?LY#lqlpEW-XuG`##>kk zor6lAP{8l2$kt8n#dz!<|H#^A&;}XO32YUJ3z0=P6G{+BZJygLo8zVF;!uvbVV-Mn zP`Z^;l>`Z0ZNRTpxezrMB)8BcTd=+fOJGVQQqbPyxgOnG z@570uz~X3@glReo72W{gtRo90%jz>xVfBS|)VInpm}a{L^U_v5{2>}azVW&;ZA-j> zac$tGLW_NiVTLttbo1LB!W0ss6!%t@$(xb15_7|wK#ME&7b8oTt)p}@OwQb)uNl?D z$LS<)V;tFE?og~D%yU`WAz7vCm57% zf^|wEtp;;+9faXP;$KIOcVs7o=R(vi3l`I>=~^M>_i ze0X-U3^QtrUm^o#G|P50U%>I5DJyvjgXOTLVwdlf2B828Oz+boB{M>N9fyeC$+Qs0 zpGNU9BMsD(hhw9=4i2ZgK`BFd|1vUl-28cp9mE^_MW7b89D;vg_BeT8gxF!~aGrG` za<-p3H=CkNg#?Pz_$`invGfgwF??1bRt9>u{R;htzHDx0UMZZldddJ@*WMr~3wu=p z(1S%F!6yS)SNKge`!b280O?haOvOAH_y<>oxRTF2{)u!DaUNJ-d9)WF_SRz^~A2VuKznbyoM^Q9Mz=QXF7vDp}bN}`v z$M~t3_4Nbn&2z?aQTB>SNPBbsd zHaI>F3fP~H6veg_i|3~mO%(hASmKSks>9E7DYUXap|O@fpM$lNPHi2Q&H3s4qintp zj+Dhw+x>R!pGW(djcLKRpUE+hUBg7P0qR8zoMB=kM9XLUhLGAl8*MOQ69AU=R$JL# zDgFe;4Tf8%DmVslb{jS4YfQSg&*Z2p{c-|^^upf>cS0Liqgx*r9aSCAK5DTXJ-JTF zSox1>`d+e%8p&fhR^gqtO3oTOpSZdVqV(~fYBHX|?*RDgDlE!&!6Pa{ zY}k1078XA$;kJM_bS~Pb3magKmehUg)<}?;RGZfHVx`R=gD1aIL^T$k%WIFHsLB>?SSEu7a8$mQCyhoEL41AS*QD=szn=_+D+IB*CzXOy_>i1Cx;-T zqLjrsnm;Q-r;|lGr31ocj=+rgsWIjBu)MmF%f-sy&y3gsy|o>KtosovY@ULt>@^#D zy~We}UvC(0v4D@Ojhj#A4$)g~;O-B?p;PUlb{!HjG^(Xb20Y_T1Om3=1amFl+ZZ>D zwsaZ)gJL7DSV(rtzT4k)2kPdqHC53PfvnfuOgo;VQqz>y?f}se<5G_%Ay;b5@lRT7o5a<&e3~gh(&Y5ddqXRx;o&;-R5zF^8$^*-&~mr6tg+( zO>RJ~CC|TVU#RhQd62>!e(`!B3grll0hLoR^au4fsMk);93b?Vi>sTi1tyrQ)&2dX zXzz?x)ly?&Aq3M(gzeWy2PiEJI|ct`vv_PMP8U@-fmNm=5Ty8y z5<{8~c|~EvIU$OV+TqScz*$X4D%+Srv+59U%C4VO4xEkYLYR+@iVxWEDM_OatL6;{ za@%MyWLO6!UI9+s| zqYm78wo+HH#_BG^!L?on{)QftRqlnJ4QR%j)M7!*7TfWXyyxm0MGNNc6#$3UW7j}0 z_J#xj76YhL6YdpN|3FavT=KRr8p(?j`KBY4*Xi9%GjjZqjPvsxK{eJ&Jmk^z<7K1e zCCnTza9L|ZgZywNA@lSdG_WBchCh0Qm_$7Isr}yC@x$TGfG)7FRv3^(*8$oDSB%aa z@razOHC+&6+w(7AG^^lr>9(1&$oanEmGzrh(!>f1z>vB?s$Zs|`OSB+>e>_#t2N55D6WwaClOlMv%H?ST@ z%M4(~yTd`$X3p=E7VFx~R>^K`xV5bIZ3x*~zQQZnT~To>*h#klL@hfJ3#h{;YK_${ zhA&6MX@=_QUXU47m+D^pi+#AZlep0B1^ReXA58=J3p<4{u)_4slB}ctD&r#}2J=7s z#|*e-2x`^sjF7HLlA=4J)`!k~6>$^i_5);Y!^eFO{iFL~>z>2K779CF2nplhRIwOs zkOAMBL0@4jmL1zQ4^RHJSwUbPVb?hrzQtH8j29yb*ZmC}>>z;<^IX>0BOX`p-{*p3 z+t7(-5Hl{EV<7yCpRwI&h)D5e#4k z=mb}Q;Ixwf)Q_LipoCB4i6{$&@)+ndd7#UX&30q`BSCQM&Gt3&VTA1E=|I%>bky^i zurgs-SO#2yxfH$i#WlG9d0^o3OHR=}-@yxjnZgNx*^EIy--Gp)n@35Y%*;HU{1>#> zIceB?#eg~G!eW^G>$f@ap8%56kV!ztUeB5d0Ub3dX5)sdTm!TA5axoLo^exkx5mpX zP3(3jE0#T(OT3uC;%t$H%fUwdpOL$HV< z9EY`84HD61n00-pX(WW*Vl~3#W-4{5F<5f6K@}<|%lUAu_jm0Xedg+;5Tk(iO?v;9 zx8T>!&Xk`o0)RXg%sh|0<^KYfKxw}Zj5D8T{j!==fVV=Q=p*;ARSDYHsTEm>+%Nm) z9aP<1f6Wv{ITuBJ>*0>NNI^xTGc#TXp=MXFOAto;{<8-HL(jR&LA+{AG1LmaxXYt& zv1de0kNZnEoh2fJ;B>;`BMP{lIfScNe`fRCJquEEts7LW)V~Bt9!|9c`%JV@#~g#Q zB&yDUR$pU>Qa7K(O?Y%#rXdscs4yDpf#n z@3A9dCsIXQJkZV7`2yzSgkS&6eJWPn6co9Cp=}H?krNaUjX}uf_8Ju53^#one~u8V z=B`@bORKp_#|^rDH3w~}#tOOR#$3_xk7JiR4>fNd-8AK~NqAi}U0LvyF=cA5w3D|H ze7WJ*w+xGJT98AXE+m8Ej)A)Gs<-vdjf-i0jA+joGxy!G_g(M1V**8GMGu>WH^c*E zJ7HwD{x7(h8OZi1SGgOa-RDvdfA63_JvZtB%NO+z$gv-h2L0K2UC%ofT~Dl4|8aZq zq4eps&OdHH!{qxRnfJqU>~Y^$8J`7F+n4$N?)8rkZu`dGlkzMbzUuJ+fv5q0A2)hu z>Mcy6w)5dbLD~=b0t;wYHjg{P0UX!9DeYh95b@%k;wei-rp*5X5Mw@vf64>#%-H0u zqkll*lmL!{ekt?f{JtwFbYt^JkDKjx9ji$zAWn@*4Ne3f*#t-x6dc)@+OXWgNNy4v zGK=9sA!qI?hB9BB)cLWZj1;an8$6=vJH#-u!{2+FCw&CZeK?0l1&uZC(lyw5#6Tuv zj8D=RDKN!gLE@oKN|9TuylZQp*I59&OxVoQ^mj{*rKpahhEG%h`1rsce}M0+dWR4QQ}$j! z@bF@pE59jtXC4zrAN1fiAkr9-#+*rBgl5q2OanyfNY8+ijvGuZe}ZsH2c^gMQ8;g; zYsJ&T2TOS`etzJM5e$8WaC~_fDc_tl)v4L;+2dkiA39#0C(hIcJ$ULC!=pf=xeG~b zjK>dSp|oAIr$qb_e_sq(ErkV08dK^GV3^QKD8(du$yd{jogOTpqzd+uk$JCOvF*lR zb!eyo!fC#au1mLaH)R{loi$e;Kl>@e*%cpD<7YPBWuVUbvvXH}{Ctx4-S%C_N#^%t zxYx=G_z&)=;Yw;aU~Ut7M0iQ2B~&x);qdW2T>Gzg=(__Le+kD21X(cPZTLtRO!@ql z&KG{$ktTzWzfv{}6Q_OA2Q|fclBUtCWv0AJ@nL^N;zJdmRovD6&`_^}m5x?K5kF3p z%4!ko2^lB@3#jZIvxePTywZ_PjAyQ3(8m)UoKmgbr{lKdJw9syNU>=@TJ_;hJB<7$ zh0@ZDDGjS@e-dZrKNOkSOge7ijCZ%f-hlaCq zp*(>3IVx7zJT^M|y4cob%U|idu2y5l$4f83+Wavp6jS*RVsCNfh>}sW8iBq457PC+ zJ(m&20uuu;F*1{Z!W029mvKJ>DSy3M>u=jQ691mR!XITIX2pkIJ>Y=7y=^Z=3*26F z?T7B7P;4dER+hYaH0%58Z-z6JMMp`K>;nN}iXunD;XHmbWVpClgp1c_68?t^xk%I^ z(TT`HxmfScemxUXrIKDwn)a2O!W}Ozc5?C0=IlrKbFWrFZZ)CzkIS!l3(rAmU^rAmVw|Fs2;`mWBa zLsxb*^dr7%?E5cQ%N6_<^?FMqe+r}U{dY?#W$+Q&a{2S+o3oIG;C^4clG03=T&XA( zMrvpzB8?4k`IC~NHyx&h(SKx`R3gzR3Ol^2zV1F>mqoQ%t|Ao$FX`uf(GU9%c{LRD zy!t!$_pKFz*LNH{&$bRHpASWr@;+!2fs~U)B0~}CWO2Czh7QOJh)iV)q-lTlR$9$+ zC4&;AU84;9qNSI8Ga0Lcectxv8b%FO-cnbc?+WPHAa{3!!K_4KDt}^``mA()JFNT1 zENW$>6bY!|3ZxrFnztg<1{QNpdt6@A@20pKZf-_ZD(mZ}-Q|7R)TAe*FPc>8>oSUQ zX|(bxzp7aA%G%RJ9bA?Dy0L=V6asmkN*WYCPGE&mL@WEDgn1wyt>U0TzCeGWrz@!I zdZ^dPP)Bc2oOw-c)_+`j7`kFZGj4(4L-JKoButq3Tv*-PH)Y*-pJ5xHs61MVRGq8~ zl>r&+NM(w3d3_)TNlx$zB$@=I*mm_O+iPm)G{UM7EO|{Tgk5>t+U;OsMOEwyQbQ|g zDMB@obQ}u_9hRe}eMl^+5fK=$H{E<$uZ~=&E)_U+#(y_0i~H zYkkozx~}4@{onGNvPYH5NE1yM>>BIQptWvl(n=g&mnZ{J92#w94`ZzClTr52lUEfD zAu%Qa_k$Qg%sZySA8T3~%gj?JY+7VDjR)nka*wo#OvZAr*99)zsNiy2JhTTWx(qjA zI^C)!vU~Xa^?$LRZNiNTW04u3WL`h$fs~3tkLTDRg?JVpTBfiz=@a#=JH!xQE?isyeJ0_RVFbw z))dS=dwz_YZss)7eL9A(pPv-h?hVWQaX%D1gJW;s|9=pc?^l#Wir7FH%tDc*hPLc- znJV;;TB}o|h8`Ob@ONU<@JQyXtQSKc+S6mnqi?qmoMH5q9*ca9D&d}3N7$tti5-0b zlCtqp2Hjz|1BCHh*b^Q4kx(#t(RgsBu$J6O767Sk^AU!!WXxd;LHNU=E_3_bEbYZP9H(9onZl zqcj3cV|`ob|pt0)o)aJMO&&u*S`U%_0Www<*Wbt7evY_}?+*{qXMcus_LH zuz%M&#b>4}5Wai|sZtS2Ud1G44~gOmoXfxU;r@y9dF-4 zX0C$|@2DS#SNw{3CbKta;gItGudtXqN-2>su=rTFOxmFtN+u|#RQhKuMhu4+@QL>G~~9l`2=>u5UbvEICTz^8o)O?<`B>gNARJkhI3$;)4hB&CjA`%5BBp5c(Oko z=lLdKBH+ZOh~JYD?c3(2&39~hEPr6=?_ADEkGq_7kDdtkz<4r2h_A1sJy$PlH^&wo&(6Mx!{ zs#F82Nqs`SWrd3%9kE2U5#XMyL|htC&Rk)&c@Jx>ZQ7h5{Eq^j14h=_@B;1pigsXN z8Fd!tJ4+(*6izn%79HyyGgOI)TxNI&Jn5ie&fBpprUO?-9Z>eg^-zhw!bDMdsYHdF z|A+$VJPdidy&4~P=oDVNx_{*5mV}Xdf&cUgS?6IKN>g7isEh0>Jwnj3Mzb3F5$uiS zGM(B&HRW*ZIMZN1s-w;p4=LGPELF;kIvZFB=Deb0$&puWx*ADGmLOAha7J zTXa+~og_lLJeCTaZiT?YP5ITjF^)&RP$Y$<)JYiwR$kT>N5dS#p?@ycuIe#{Ism6b z)$;`R#csIjieHCGsqkLx6#+^PjnDX#GoDcdCd@>lGN0TxQa+=wgeYfNctXl|Zq+nDNy*HekFQtqZqjxMKr={|8HYp@^f@C-B@tvy4NLo^sRm zfI4=}jdQS!phk}>S$`|YuiX<)ES`)e_{joLB-=Pg%!2_o8|{3uDImg$!Xdh_jKoY zL?cw80Kc(#9Sb*O`AHMDmV~XxprH|NKu|Bcktly}Ti9qa0)G`QMlMzmOih+};p5{n z)s8E|?6`!XZ*~Mgrwc(Q5lF6!&P!8Z!hT;J#y~fRnDo(eyF(+xpq~21G<`&3_DJa- zdAVaGM8+kaAAJ+r#$c|$yWC28^4A#U|FyfCd}j;k>#TGM_xrvV!b zh^$-*m0VqnZz`TT1px6B0K}k;>uLZ){Tq*L+M+osZ-0C4xZvSrHtA?Kd^ice>!xiB zNZ;9VVls5ah8~}I4i`$|iD;70Dz+8PiIHUF85#YYyy7FT9xwo%BHO|kokQE^R7BaV zi1;K855Q>3l{;bE76_i(5;CNv3vmIKSF|;vPQ-v%DU@|d?RK~3zP;#6|!(H&;d})!G^|i4_S6w zx>FAjO|%a8K5(pvFt3k$-|cxo&E7T(NW?GXdUGIaXHCh-~li zB+$61hW+DNiJ>%qL+`D-!>T}UBc5B$sY<9=B!&?Mpx=_Ax|i&a;gFTYos*zhP3}V6 zb5x=u5t_`er91`QC9#Oi2x$n3;*L-`VCIV^5wS|V4?Y$YN1@P}aZ~R(_W+FwqnRr? zkAI=BK*vU$^>9+W(yHJ-pxe!i@Nta=7+uU%Ji6JK5z}{ zH28;!%c3$Zq%!slEgLJ?8*@-db3BI-kWN z0~RFU4(&?KuC(=y{TPpmpIxQ+#p%l9wtr&|Z2i$YGRd8cgbmSVA<^P=JlT+Rx*^K& z1sw(H4#okzv1K1{JMb-T2mUrxeEOxJv*o#Mh_yYb^KZadP_K*~;VJ(`eFEK)@^7yG zRJwi4xgh%P;y>>C0u7jYW6m^=g-zRke)55tde`(uhV_QW8yVyrIc5&dQyr@xFMt2+ z%M-h@z4z_}NaJp;>l5_O)vR6jQxA{hRH#S+SFzA4a;LW}A&guRT}H6K$IA%#Xwh<{ zT@}){Z^|*2*8FxBJ07(v0*5Im=Xb=DT=Wk;O^t9a5QzxPDf{L_PJOe?VZyd zwrF2GKU_}kBV*Y+7BWll#_^}0!^H-=-|(sFtsS(35vX_7;{Dl=XCZKkgirA2HQiB8 z(?tqv!K=R4ws>QNG1AGIyz`4!W;!Yp%IdNmqi79A2e0$0DLXzLyr|bcrozskjl5;N@)g6PL=h-NDUPyd|{Z&AC=5U!(mu%e+R>)5>BHisQa>RKDUc{ zR()>D)n)bh=W?+D_N}tnJ1+kA;p0EIjni+q{IKetXz0i7UyII%Jc(RI<(NDds_+vh zbCGK|Ib8ymz=~5kYb)TwxSZvWl^=7J!$kZ->u8}##`kL0)$0{9FiE-(1t`=_ir|Ft zhN(wwEJ!&we_~g9W1&a!O{EuJg_p~`Yc{iPzqsGecSL!XWO@E75hoew0)*iFq;Oso z*0K<0>lO2a7MX(~Q!#A1skkT9jmb{0Xo>fvn!`H0e@kMGk~=^a+6b5HG_GteH)%#@ zVP17rv#eKDWa;Lr?3l@|JT!W}&+e|-cw*C<%UM&ET}75O$wdgoj`bNQl+!GSlZpo0 zBvngB{cXL1z%q{!hg8j#a#3A2Wj*7!dD)e5^pKnA1lSHvfDsD)fZi|G4Of=yCeBx{ zpmAAlfBU5JiajDuux1g=*30Wn7l)R6^%7TWbFeSz$ICrjOH(5y*eSW3wVIXHTMaXl z1b$t%ZLfkoEIBEhFCKKj1Gw>86k7^U1&IRkhA|u^^oxT;x4B;I3(3DwJV+r|=Rts* zO$uoRB)xm#06e_pf*8VTk)i=MlHEdO7!9C|f6)MH5DlmV<=Nilk!mc#<)?e2bgqR? zIbaYJqFZ^J;DLnj0`}&O0Gs3Pr^g-)8R#2`V&DPj86m4?H74vkZYS3XWYOd|>&Nc z-?Y^>@B>E+h>Ed=#J*XgYH@y0S2GOq4|%_IxzI9@Vvc z?^SH^4G@2`C6??{4TNpM$5QIMST7>ji19sS7X#jak#e=Q+0Dz`Z<5a+;ub9b=u;_Pc~yegyALspGkiFDh$5J&2FkH*TRe_ilh z>57Rpxv(zE=>;K^jjOu720d2uJ+bqoYe?ujar5-`Hl1rB}WN`fsmto z$S$i@)qu~DA!FAoFxl8^RW1`*e@+2g15q&orkJu`5TsEdCW)plA*vAo1Y3GSV(4Fx z!(`|o2C4G^X(2dESwte-04WVgu_NkY79?x3lUxd3eF{ z007lg7vQn0S+$2)%Wb$hWN$3)r>dPHAp15=%$OC&u(HcK&fU-1j*>1&f6*XNPYHJ) zAZOIY+~^b=THLa}NlBTj9=8xC zm>%iF$il@P9}n2oD{TzYx~vq^7SWe@5KQe8e<8)M4G3^m|CI7R;$rT|`r3;XIt+uu zeL(1ipVGa*zigneTEyTBe{MDBw)v*%Q$mFNJ|>^0Msag`L$|Ox`(d@H|9zaM1&Uy8 zP0I9nF<8F_B%bS(eVS$4XYiOGcUF}Tuv$!P?PiAV8gpiul4R3RF1X`vGJ=;pE*zu@ z5@p>p26G9q#B{mlPxHEg-8u^-e`qs`ilZE?vJWdvja^mF)%p?7r7qt&3Cq~L$MnIALJ`fWN<~9`_(5R zbP9Fo`O^!xIx1LEe-yCg2?k2vpDtOOpcU*IPGH^dk7e$&Pbau}ZtClfzhHd5h13WZ z%;!oEWhA43zV+jI_O9{^Vz=il!fGufr1cT;y6s`-coU^P=toAQuYTIpac|Q@0A)DA zQ;9NAAdHX4l0 zPYj!mJjgMfK0cBJdR&77i=x~Hwq#K|=U2K2!WI#vr#%73Nx#hqdw0?ZW**-)I&hp~ zJjGXMr(d(TfBgMm8%iuI>4XhC1lP@@My!G;VDmQSVY!K?vaeyrJE7zbGd+3=2_^X` z%&;rWx@$26EiNJeI8D33Ed~ia7`S-K#B|VOPF@wDa8ls`wvEo~ZtBH?lS{I+JxpoX z@i?E70ciUm!9s{tra#3+!>ac$Sw}EL{SIBun0g(te=zICz@D7ls4F9q(Oa*f3mj^C zz|6E1TK1%ehIP=ojfLoc=(^o6v~FJZEmxq4CQto`9XVQ=6e-KSZl=k1y^po2{SidvmKocHK?UYb% zM<|b?F71La*1cXGCfA|>5H=#TgkV{56 ze@iohT=0sJi}9ARfVbk|rnL7U7xaDH-L=PGH0&tqRgh~4^#NHri~&R95qwD#ubCb_ zM75Bfa~JLz!TDi#wFrdrwyd zKzB7!u#J#9;-8YE^@FYs!m`GU#~dEvf46fN225>d>L#7%;o()gS@IFr_PlL$j{l#k zSx@WLyt?g=ogZ*r$ke%WzxuHm#Ku1>w)%@`jih#e6c&#Lj;#08^ zoj2+D^KlMrF1%N-X9320@17}_U7V~4Jfs8OtLP8_R4==DA;G7*X8Uop!`6Ikf4gtJ z5Z|2juiH)SISIzYS8?y01#b-%<}L{8>DuCbJ3NmD8@?@<{A-NCVfEk_JHEI1c(+f7 z&22m#xS*R3x^m`|drzmo^_;ORokzzBKMu6u`itr~h+$@6nCY`}hPPbp_~g87zSLb) zHu2sg9V^EX_b#CnSffgp6-+~qe{L<`?f)^DaK=$Yvs(7@c6g_QPjGzaVBJvQPa3Aq zYJ34AjE<<*a)CcLv?}|G`kq0XNmMjF6*l?ooW65vao%Lp<0(A9!NGF3zbj<+Us@@c z#P*a##n=l3wZy5QcTUf99`idWv>kVlu>(?@g0N&>jPvgQ4ocY)F{{C3e*n3_@yJid zUZ)?k&64bIn!2k-Ij7~DoN6|>lN$I>+y%95HB41{yLr<6ugUiK;U49xLJfcEcZT2% zv$Kk&j-`pEJt%2=DV*zxmOF5w#M9zvbT0ieaR1)LE8$fi8!ir+8%(?p3w!Mu5S4^& z>yAY)Nc9yxfhC_SG~%GMf6w%UB?N79{$EIrRjl4oPNal6kY#1U8$JwuWt1fe9!oPK)F z;is2mpp^z%QHb)Xf2e*-Pp;4CxuIt_=<}JL7lW^>)Zckx6t?U=mzQ;L=0y8ggRXYbeQ{ zw@|4JnklqGSi_+y1B%L3DD-Hqfs!f84T4k%9fBHE15uViB|&Ha z3luXfQ!(o*RKQ}&Ng)V?0>h<1P!ph8pj8E$rNb71=EAlLnoHF|3p7^(*i5bk;KJrF zz{MOFvl5yc+|>fj9sX#6=H6f`7Lf5~o{(0!RWxu)ebAa9K$%v8pa54k1_7=aLI)Us z3*e0jAeAc|tTk{ZTh$;GTh#;0Ot1-(2L+2R!i`V3C^eQy>Y63KC z5=$AVMnDHh&~17NG)S_%!mA~L0zAWC@YbY)?1pBD}I0U*-)dHPAA8P$R`%c%sX zrArzJhDh(0(Rem*3#<_fB0$xW-^?Kjh1rxLn@VQOYD$o*r8NOpsu@H*lxk~#!G38; zhJ%A)d=QR1s7m2U7@z(2d*~ERKiG)Kj@8@Oub&Th?kqwr2dKva&pwH}P|2KP!B%u( zQ;Q(p10^j{Pyt-n&apS~VOxqB33(YC#{28n>&?-dlhY~W^Cgc@w%cj53VeS1R`0Ms&+m}gg)U?i5fl`Y zVbA#N*B5_Ir{}sK{Y}Wb504&i)~83)HXOsg2Zv#NI=$P54<0}L=gnk>|1k}4XtkYI z+cT8BdHFCtnacCtyzl3~ewkjrI=Q!g7mf{6$?7XV$7@bDSc`&xe1W^WTCJh# zcrM9i%avEo&xi5o?ThVv|MRQWU&DBBy?HrpX4UEW_|y1kynjsdjTr+6k5N=3SxFX- zZRRbUeKC=L6AOB!`ofkO4Ul|c z%b+(GU)V4=$DVv)!|)cl_`-%6FjnVQgH9CEym$LhZn3eCFATSlos|@43v>-1w*+p< zSxE`pV$^bBL9Gpl|JQJV;TFGz(PC%lxV6!u(Y4W{>Sv7>m)LB{*S_2JneL_*z62#i zXsI78U@O|9EcJtbB`n&a9aLRdv_;e{9~Nz~bM;{{cHs2(X{?PhnC?}b?+3N5IyoTQ ztUeA(w+-m?%f^UOvJZ{{xzOIRDbx^FuO_#*c0 z2eGlM`QiY+Vq#w$#O5v^y@Ihz$%n;pJNA7kW(U}+(Z1+^cyw~Z*w=h?G3d(9?Z}u? zTl3Mypo@90Tl3+ywr_rTz1)Wg?HRP(a_=GgMslV3%wJu;tozKLbv*6o3eY~6*-)AH z0}0dT)!qIzV|VjBup6PB*nN{v5}>9p#IAmM?3y=rZ6_o}3l182KaeX%)@I%35K5h@YMt^3GNAh9wy_>auq^K=Py^vdO~9ejin`q&=}fk z35|*4urk2Vf1s1pI-MBkj7y$D=R@*txk@dLL93~Kk9$n=8M>6(ETQYJlu^ldco^y_n8j)ZpM}qdyJfLM~W;RrA7&_)xrlYvfvh%JHYh3?#s5x`|2aULS(m%A!JGE1DE)q> zWG30{hqk{K%aye*d4c>W@}Y|w7&!>b#y;onIz=NCk5DPaqQ zEhTJ$xR}xf0?npq-vI6j?g+krBDg0QIhji07g(+TixKn&%^tLP2klW)0!Xdq8$IEZ z%<E4vwH^tJy zt9Fd(UOKf=LMcB(L~a;=XgNCHE|R`~$hm4DDKl<{X;-yZ6T!jE z>28D!FA>H#p=vlRb3V!IYW;W&VD57~cn;tV&68p8Q;C7(lUz$K#Ov}L3jTf z$f-duh4)x^5Kd;ieJoe}KAP@sIIv0GQ;thkw~bTik!DF65TDo4zSq?b zQf;=Y)B1<9b5T*jlYvcjq~<5BVgez0}{K^h$8=6il| zWHX^fLqOxeu+0!}1`Zy$jImp4FtJ_FUwKiKhX_-DO!81T28>F*nInJQ^xsIM@tVSi z8Jgp3XZ+fzGJEbxcrz4UEJWVMNv;z?7{O5wm66(bC#t&ufN|3y?ru3=fUxiMY#A5~ ztb+#B_%WP=oOx*0NQ0LgJ$rSkqyS8>1JR;09$gJCD?pvfp9hH3%jrHjmTq9z8WD8W zw&Blzsv8%Ozyef_ecZrW2?GZv3Q~y=bwp3B!E@U(?;}|`4~-fG;7vuP9516YQD-+d zQYh#7=H2ZMSr|1Oa7^n#f=w)_Y9=}COQV{+-o%g>jw+*ea>ij#5o|PiQ>z2o$(6rp zRqU3-(r8+bm9$|jO55ZOFfkgo7ziKgGVe}*RW3Ad^;tMxb=?q$H~_ZEtE&I=@IkP! z+o`NexTY7zJHFq`s#){t;F$jU`X30OxdGRcl-o8ZKEcR3?{i+%FTp3>!kZa&f5PTY zDov7p8s%(uied}37vG;5MfY0 zYEDZyz&};~L2R6X6Jq*$oyT%IMf4hfgSvIpE^_*1+wm}p4E1GQN9elTF_dHZ9%+=8 zt*GW=Cw8cXbwrIs5wI?cI&WiYi39YH0s`Cd?+5y7tEi+Jh=m_&fNJCC{NK?= z<=c`mS$C(ag1i40bu=*W691mR!swTi zfmka(BuZ&fV2eI(54(qJlWRY07lC5SiMqDr>amIMaR2+wgOnw$255;Qhr{7; z<~KtIllw_9`RPJH8BD~)$ca(LPXaNSuP^?*@P&*8f9yTdC)dSRyn3@1lkdxmpW){| z&4ApjNAJ6vi&uX?CSsEKNhG7m&2pl&^usvm2EAEK-h2P7^WuIwQ%ZTwLxvC9yDpbg z;WblfyvM1Gy%dWo<5sVWbhWMXnw$QHpGx}v@oqYU|E!olaLeC=Ft~m_6+(Ew!Lyit zxcS>fV1@ANM-hZQ=4Mi9KS>Nc7(b3Qb9X(3DTUs@vFm?ChQ0`*$xOgBLd6Z9rZb@9 zU2!|bZ{l-dE|GUs79{@*ghFD#PK%@^Z^A;>0&v4vE)I)y|tUxs))~5XKl#T4eK8TBS{1 z7KgZyCh>m*HSBtQ?)b6xp>jau62uUK7Cz*2)W!#vij!PhXA4_X@IR?AJ}lb;RCtbj z*M}I_O8F|(!%>%Ka;{-xCDBN7X|XssaHM=A%&^b>xdTVBpXd=0A2eJi-rvh6b3#d* zL#%|b;}Vs;Z1qAAq=-gD{!;T!gpI9sMlX`mkBxu&T*1I$2KBAelLn8L&K{5{G^ekEmQS8)>~`r{PCXH(S}D!P{=w-f`6i+QB^5 zS(8<@rE%BVp4PI4Jrd>e(2^(<`+*s8cG8mc=cnSxk7P2Wk{{g2Dv5oOgu^b&a|hNz z1V(>p#Qw1jAtOHsMt$zj9vQqy7>=f#R@pIy(jn+_GU~T3i;|V;m?nim0^O45H0j{x z1A&X=g)1GB85Ouy2#6O|}4o zqru?(kj}C0!D@Pu|Ji1j{L&XB@2UX_yZ3)X+!XYmT3hh?`x~yf&p%;fw|T0(wrn+} z<*DJ>!YYb*H`_2VzKIM^wPwV{tf#zjjv$Ug_HcZmeHr}#atq40kG6sXHAzNTmcqMS`%JzSn zS6GdL=l92ltQ%rV&XEMs69SkyDKraVUea0Rm*MCTAVv@G&?(FSh z91S`cjyODLpY^y?64nr$!hjY!VdBNHNm1T*lh0GO?`Rv)_C)h`)$seWtoY#p+qUbp zaD7Yuzi+d;CNB_pKTc!mL5Hyo0?(vF>vkTT)v2-+=5=X}4pO&fsRRyGR`E;PnW#0h z&x%KtD>i54M}BQLwoAdytOI{h;DKEH3Pa|r?O_W9`$w3F?a!C(IassXWnL^$yLjha z@!z{Qzq~6KEqWAuoqfyy*G)w}pkMbM+TLt8*@s~@)V^Mv8r+FKuu~ADgnye`rPHAn`i>j~qXgcJ=vVvgeAh6EJ|fu+Hqr>{Vdd#Rxs zoacyrz@4~pjQ6Htj%*877=@mpbjYIFIk34@na6z6nRtnWsfjHq6Iee^$$~ zWt+)K5;vg(oI2r0A$$^Fu(P#+*tK*2moB;JQihND3RY{yFR*`2>#T3H!9Z7432@x% zgxvWM*d-A3Tl2u_4KNstdJ$Xm%i(Mp;83ZeA*s_hN#FMyz``;dQcA1)c5MMX@*|%C zNS$?or3`SV^@$8z$C)l4;_hTTy+uhu3tAPF5UB~WR%D1vNN6S3~~z*QfMqES0A@`n)or7{#M_9HQ(2Re%iYrvaOeroPQ zK#(h%J`+0yhbD}d;9*P2@fM6mm||l>txdX;+3GJ5fWUuXmszgoRn7smi#z)k${r!e z;1{IX7KJ^hkPZ)mO`6@MHTRV^9+|Jx98Gs ziLZ?O--UmO%c@)tgr|C`6EO6jr%tTZ-@mURb`f#xh@b8#0Z6L2n^t|bk2t_TXeAln zLquv3`*dca$opnGi?ug{7bCDP0lkMZ@hW=0rRNnrm-L*{^Maml>3QAzx}fK_*9+!t zV&Q!?oe3S{8<>VCC`qrOTvNHBaz$l^O*N{nP~?9&VN>Q*7F2#jibR*jgFprO2Rll0 zif!A9yAu`T{Xx^LsVu1kS|ZfQmkGSDE%sKRsqP4jB?=q`G|#|`d(VQ(2swqt-U%^E zXhMdBXh?{Lx)^WSt1qZTVMX?9+SQORHE}?*Q6WoCljP(<$qABNBM_MWA(?g_Obq21DROJ&SLy~Ke7ZO6%}tf;)DvZYc`8S%&;2GR_~D3Me5dMher zS0j)HJZq3;5WPgCrYF+qWg=x|jKooql9XbS5-58`&$m>zR4S^MDA))EYs@jZcG4Kh z_5A#il9&dPyZq51Fbu0DM_mwHddp*8n{Z~ z8(b?9`9@g`^Jy9a5CqQLJhc;G-Nz3gl(uqD>BnALX@7*Kr5^?Q3w(|CP0+luOua(5cI&OQvg2#SvOk@t? zRr%V2veY7zy4~=%va%{<*9Y8zRik;n+*;T<7M2Wz4;!#^uqR(MAjjMZtL~jM(9m~y za?#EE((=>NAub>MTd*)(XLn;|4^Drx=;Ij#Ai)&GBLu*{t)a4_vZZqF>Wxv@Xm=w8 zZ8=`M>D%9?-Nn2;{7D7K{u`VDY9U+=rRat6umb0m=nZ!wWjoO98$QigTuKH0f-`iz+^z=bXDrJB0`9oK(7X*tXh9*oAI+? z{ZQ-`1OS;wvug9AiEq#5NP=k%Lo=k+ZD``^5xFYc)q-Ci=zi6wsm)5F^a}nj?FUY9 zRVhUmP+#Z&vMnh|#S@J!U9PyJ1Xq($UOrUbU(2pVW<#Y**OG(5w5=`CBcXqYhHo^% zr&Gi<(-A7+PzO(nPqwF!kAZ(^mw@j{91Vxd{_}N{!8s?}A7^|(&i06*-de-?w2KP2 z19F;@j9F@_ZTJBEBT3iR;TaJ0t6cM`J2u&!YuGzp)(rBh`Q6cdf6s+@$-rjhzUvkY zFPijR22_}xN_F>B>T;bu@)0zAZ`m(FWKy^681SfiT~=Frz@BZYtag8%g9CbdaLg@l06!zQ%`=?^pS<`NQCD3{FSnRpBZ{Pmd%=1SPLnW8Ii#G|&O5AgFmiv+meZa;%Bqse2SU$t zdhQ`o68SP760{B{dzxpPX3SphYSNG0T?6e-CE=k+*8`c4tz)ct3s4@O4U666{DQWg zVkv&LO?IZhR$Bw=ZXl(LMUI=v8ObigA0wo9wnN)oqUmy8g3mp`5@$o>2Q}6cJKJZ+ zt;xk(``mPv`dEJ&9;R)=;q14k-X80SB+6GoJRmZVN?z>lF&@ss8+k688%9yRoT1{J zVLU)V?3o_`JnbB{%^~mQ3`~(09gGN0N}u}jnTtw4-1M&EV=g!HMPl%>{reBWWC7Lg zy4@o+TH^&>_+L$~FMhrVV4;u@{{6()^J9=XjElG3mq~CFqiRY0V;o5TW{RP6@K@xSo9@aK+AA$mC046 zvN%t~s%)S9{3I6A3Vyk0(ks8j4Sf5e6|2AXPkw?w|7ru|HVb;+pFV&2_IWN=d7P&* zU7cR6l$Nov`Ml}rcJ(g$&scYt>y1(>nyxBr=;(ESu@=#^mRWSWmNqKzF;qP3Sywc7 zV?FZJxA>~3_aDyJ8~Cld@``8vHvo!2b-yvm>t|~rMD!NgV*UQ~A5Rh|gm0gV#4MQG zNCO?2LnDiAs+l|3B}?dOb@bgM#+E@5$I ziL>=a=p~ty$e2%(si|F1dt@?yLK+f#c>?0X=RnULJxf0>w2ET*Nes>vQsPQD7YPOW zD*6s(vr1wGGJ%2E7{vl;aGBtr1UbZB%Rgs4c+I_@do}ku{+W1iTr8M>2m4^~JXr3g zTyW0~Ry^of+QQd>pZymybSymN9sl4Vm6?T|ErhKX!qy~gLju&e3A6`l!`loxztI-I z@fHaaeTrHjqj#tok-&M;du-e2cN+SghMa(vU;)p{w^u@yEOao5bGx_AG?Q_fWvkN` zzQaHJ3H4tBn^(o;TYd}%Vd92a{E|W)|Qd%9G{D8;_GGL>+^Cuu%hgS7V(Ox$d3l#@iJk4%& z;y7QPzu;4!}Nk#C$dz?@QVPAc82Dyr2Y0H->OO(uBlUV|Zeu@)%~gJj%U zbniC@3Q8&j=N2otBd@QY$%Ym>tF78(M8jV(k%dgUAsg=ca+5Okf|s_3F` z8VbI*a}Xb$8!Btml(LxWzT-Ew*9Z{Rf{{!BC!Ue6pLkM#$gGW%B=d8?JZmT2sw02q zxatEK0TS#So+!>qdOb>#eZkZF1i2C5(-M`D0E`m3|AX`4+Ykom#g2Nhqb4>D z?WIYShGBqzUcvwszyLuoAYa0O%mILh!2pmqxD|!iQ^yuGo#o!#v}f0S-A&`!)IZ3m z<3u{wB8-5@YE}j!t2NHQ+@b;W!v~O83N5fBv~5@%ZP8j)HK0Ld(bU}WjEkXfkAi?a ziM0$j3E4h_$aYa8=ZRJ@5i(G zLjiXA;1)SD)i2(?PSrN{7-az(jTW&6e@dr85Ft}=JOjxMo9HC*cQ+oz4?>yPS`(7{ zf-k#&#C#@=1)z$6^a-9SVULaMxo}BYAPp4FxZs?R@)-yO=q1$$`&3#>y-$Kx% ztep2M3-A1vFc!?!IjV(sN6e=Yg-Zw@&h?%iH|HFL4C{j>U-&H-3`v#8sXZX?J`^Nm z2Fp*d4bX*74&SV;coC(#GvQ zjvUs+HZ#mgTebagx3-3}8we0rb%`#2k}6$-GgtWSs+q!2Bax<1T4awy2wsUGkg~u+4G3wJLSbjM9)zOy_>pBiP0#Et+NFD zw3IM-VN#AHd1nGOB$x0Tu&7wl)b9GBEtWDb z;0N4*h>9(D9LRxI-HlV_hlgs~4PCHoylat`vxx?jnT8>)Gn6#L*EWFTo)H@5ch_)G z2TxCqmp-x>EI45O>p2RY%Qyjlycdw~8Ns0hW`z9-j|b6Siqx4vO_e9m>bH&ah+HD{`P30XYN@-vLjl4?4tN zJ@N1UIIq8d^JRz8;4$(f4|gBWZ~o|Mj7Z}&Qy-tkbKW!`McxD=LaKOwD(DFqzAIz6 zD93iM+3w?ej7LFoWR(i)w_yCfjH2e4;r&ZfSI)Qe&VjsqNi*KO;sx94e1}zB?zPoa zY>TM~eU8KWv{UbwP1VrWons(~9V!~9VOKiGw9Hw^<8gJ^xvbga&Ed){PMcXUJ735O z%9$YHXGAh1^HbdTR0kYozDKA?1aRdp-E24>fK!-cuq>sA!j4S3B|7eon=A z*Nn#dVRDHymjQ?R;%=^7qOrjmHZ~pc6$y;Ldhzd1mo~@QDM)+x1ypqDPoT6b2)h&P zj~^TXbXn)_>Jiz0k&@W~0nDV*l!TES6Gng}$(3g=#eB7!_dAs;{6+lw< zAC%f3nf`x#K+5u6>i>EgNDZ;Q`3wKPeEH_pYXD={UsexbC?g@3>QwsVjZ%;#1E@7( zj2bG}ci}FrP?)s&zcIJO#gr^**vCBKxK1JnkE4zAW|VIEd0V#yv761d~vkO zCQ%Cxi2NbF4ay{%uJJ?8=xQ^kY#fy|ao4N4*V+W}HHoU*)_8yuk5(!YCCpsjw&rBR zdE{Od{8RP=e0P=@&;fFvGu$+dv&`HhfJfC}!%rfAFncl%{)K|Otw%~u6T>bt`^4=S(qToX zTN3P2DHvB=>?i}pCaQ9A4Y^b`E23T;+v44UgPZQFTJLJF=wE1VY9H;{XW9KcZ$2j; zc#)KUCU?PB`!v{sjdGUlVFLZ`x)Drl+fj;4ArXSZn*Iv}oAWN$SklHcuB<{nO29X) zHb{X!3&%}6N9w)6;t-o4%GN8eqga|5*(cA}R=Gj}K;^ky1z5PKo6%nodO%XU5qEA5 z=aVZej8%2u|NqMDf)?Jy0_%{eg)w# z;UPY1A0(ISGzHR!Tn7Q#z-scrHU#R#I}zrQD#?>91^(}y$C9@^Q}($i+$6;Tv)tG0 zymx0#1e-tv&rc*k5y-%(z-SX$A%oTS3z|5Jl_`muC0qJ z?p@;KJ)V4eCPm_(=uT52iImmTBdh9mdy!XFvzicn1o0{{QDV&$-BTv!x*0`U+!9Oe z(~+sp@t1?3WmtdJbGNL^zRaugVc;n5Cvrd*mxyXp)-|gVrLyL>yWiqDyrikh6%W4_ zDnZ5q&lFRCYoa)dnc%MI`_V2oRdbnF{C&Gf5+Je6FRP;Cp>57GCVOziaA#KoCtb6v zuecAY@(oRgH!ZMTuUwCahIZ9#oo+key{Y$Squ|=|wb1b@$C-$jSc*s|Hdx9m%9LfZ zK3`;jkoUp)U>$wVWO&DyUAG&!=yq+3l+JJ+BiHGF$o12K%DO87@d3_t16G5C-Z@Nh z_~&5*F?Cfun>9xnNs$s0iFUqOE|$iIH9^q2NoDvB8l8mSLX)UaKqJC$ND3lYs)TSn zwim<;XOdgOmzHyD?#DHfPx^)JM1hY$e1SGeG@sy+0*&i^jfCk?`h-Q=Xt!1IRuGyM zXe9uDdxATHJdOkz?PG+-5ymJHnN{hOp7-uFmC8?wVsnHj9{xL`P>+a0|Hq)vc9Q$4oy>9?AUjSQzyMb$yn!&@B zLcziMhMkgK84Ta(1An~deV*!nii*GftB!p9l6Rh42iLj0)g8 z?|a3I*z$UBf;X%OyTnEHu)|~$6(wUfgv4Vgq4Q$eo)E%>5Rw{s))+(b0qwo8>b4u>;^GAz1mlMI^1Adi3V=JbEUE zWfPN`k8qirz4a`nC0LGjL$61ZsRMuCdhOv7KlS$` zGFG)u{j^M?OeUQAy}&FCe3A2iAAG8TPVYEdEqE%gsLy#{$79nx6&Ll~^7{~Qe2}NY zWaAEV*)Y8k;ql1NL`<|mX)bx~ucupvlo>FOZ%juEQP=D$N69`Xh0aY2`01GnNnIRb zMi)7sv6=N`A~a+Yie>UQ&gh23J#&e>91is35UEz;^ph?Y~nx;`~^sgcPn4sOd@^p%NK~;x0mN7N9nQNSb8>yrEPb+_~y{vxG*ujgocgtwF;T( zNM_luE?A6azs=u{-Vl$1(4hLN%=eYo`al7sMUcU?0P1XlDz&pjn+V=+pB-Dq9mTtw zs$7-*e5oataWqz1em8{{s#aUn}ur2Cvest<{KJZ-xfb(@h8GZHApurY@5eOXMK_OYY^|tGo?V`F1JX*ppwf!q{C|ip(N|c#PZyv2!{9n}|IjkkWmm1`F0sQsc`#&4*xHttx z8~n%m)f*99!7$}wHVy7*(H2(V1zQC#PkuZR5R(v95jM~HKW?~wGq@$v7;g#8+~O#X zmml!{Z*)~%@|O|D0uuu;GccC{F9IeHIX5>7FHB`_XLM*FF*P=qabp50f8|(h zYa2%p{;prKADcq=c6MgpiU~MLod#MO;uO*ve{d9$xOF5WooV{-`^?A=wsMKKZ6Jk$ zeVUtlZr*2i_9#$u!BL383F$Ann)Nq2Vq>tQl9Uh^$sQ#avpvd=gK>)EWSr`_&3{za(u|il)_qi`O`qyn@7% zg`hN0W+^;pSPC7uPR|K;OuI!K&dqF^H!U96bQq?FF8z(lN7Lgg6p(1Mm zh6X8BOodgJn$j4RY9U2Ae+g;Y)kd*QgqEGesCCu~D2M`8oiN!`lqGAPU?=KRQwM1x z1Pv%f5%38`>!es{EASQd4jynV+f#8V;1*N@B}QdXRZBJ$mxzs5K^5aQmty1@fdrM6 zN8}P~8=%TTX|WJ)lc;Az&>>h)T%6AC-=79n@=eQ*nvZb14;-@3(9i{@CZ6_TA&jK@DxDTk z3cl1{3%J6!)(MUYzU59ZF?{1ra0nhr@50vV1Kq{C;o<6HwLZQ)n=c%1-*|d9j*Iou z#qI5P@5aZ+@5jZf^Rox5e|PRgm1GoFY4H?_&enKa zcc1H*50}doq@8T{8MS9etpR4kgVp-gVr|mG>G1vVWO#@h1nX1{fLA9%ug}Lf zS1%oCe|E7t-#l5)ht1g^-)!dV^UHBK-)ycHn|rYKc9k&SY8P@P6<_mI2iyi; zms5$+r`Cz3;B{C2G#Cw=Q}i{YKB+m0FT$N*iJm&m&9V8s*W4R0mPFl?`oKYucj^PD zhTl>#nl7DDlh(Y>e}aABn!S|Hs7Ybps55G!8w7P$ zym0ohx8xf7*^+Tzl+&d$O`QCGH{ottJOYZDCLYQN3v5|IOZ?PfD6gu;VD5ss2eAY4GqZ>cz z(J#x*e;p=xiD7bh_%b6xp$|ud-2UE(a69%TbZ)M~e_v$j_zx@=Eq=IIwD8Z*6SaQgJaK&% zaCR7&K3aDv#RChry%O2dVy*W>f)|22IJjGtgn3mJjXgvwWp(IR=){|f~q)d$olVD8Cjkph- zFavR?;DiyVhR(<(ggK_p$R!*~O6ZJSBSM%->i()o7_L(5bq>Q-?X*BJTgB8F2+`px z+zP~BzHZrkml4JS6qjIz2owY}G&VSw(enc-e;R3X_Kc1vYd&QlTB6Wo+((wG{PA&e>oqP+w(6t0`%L%;Szd3pSRjC$b ze_9s0SiIRRjMZuG%ZT*NdhuQIx4vmFPM5}*WVo!cV3XI~=2RuasdmZrsrE^Q$-d@M zU$oWsrf+&4`WCx7>VJ2Bx`e!LSC>5U`z+61e{rgmO5Q?Qo&NCVPbZmd!t<|GmQRRV zYGc#9fOTk>`oc1G&FQi%l9o~|JD>{7e`l0lP|KFe9i``#R-xTFpL}w<1Wd^X$h5(l z%aY$9DT^%4vSI|Y2a4|OoLA^_(EU^ST?RcKTtlT9>9 z!HxzCqte2vMPYJKeCXT(n(NDEg_;dYYOP9|wiz1G_G;VwRQCw~STloxQPzW5D(BEX zJdq-mgLd0FjG<#vt}m;hevh=(dm(PXJWJ5pL}H23H8+H*O)GUYVOaQ*f3p?z1H84g zR>N#qmWau^XxbJx0WBf+gZ-mih-tphj9pbj)3qtf*PF|x7i}zIInkaM+N7B=ysrL= zp|2+M(K7mkt*1{~vYgjk>8nl6rA@cz!m8UbjIM8RcD3bppsSqI1=46iQeVR&(Bf(^ z%rx>EM|SO}16L2dpb%T{fA1#p0V%M#N}cxem2S@Zt9tbqQJC(R^+jrRJ_mJZw{yIoPJQ0v(%|_2I8@jJi;hb?PehQq1kSk zg3GGsLNkN{%Pv$jTIoCol{*N%)ez{G2H`r0HDuC>LP>);TU7xUe<;BNYc+)?k1-{5 z^Tf59!lgQ&!$?_!NE3(*k|cLq+=1e4-wDxO+YkGyX&8)+=$7u)WfG@r)h7T`41IoLTE3u=_-4vaSS z0(_Nh>OBO}0aGWakC)1XaS07170y`&Wy)%Wrc@=c_2R3_d>$F(UZVqS5d zd`8o!RBC`5f3w-UW`8EsJ~p!PLtn-~vK`hu->G4c%}N95b5LU6MV6HrO&{WF=>t^+3~ zfyP9B;gFR3oDnmOGQvO?BMJyP7yX-+TFXAfo0F1FI!)@%VvIr(V3 ze|&&Z;7(<_3|vbdz=G7E$v8kLd~@n^ib?Y<`6hA{$Kq9%Fcr}YQ=v#q{TN5_ypzF^ zWxnDGOLvEX3;!H>OJ{uJN}4%4Kdm_V2&58()$AN8&41dPaR*3NA05MS!14j{2 zElYyIYt{B{JUW9j8MyWtqP80zj;OS@f2jl4I-7ON?4aa{*m;!%l3M9K2)lt|)=FX= zH-Hb@MuCO;6^EMdxK?pCJ5!01qreg+PAEC{B^LasDkKhsEtB{hO-*{ss&L3;!6t%e z^OQFa+fU${FU$Fq(UqKyJG6hIIB12Za65-QiHwR;e1Xd*F(FhA>}(6sDQJ->f04=( z)|QjQDzr{F*2y{4@i`QRMvLjP5Rqa@sHnJ#Ve-+|n=((G^Wo^#UF@qJ1$#F6^Th5m zGw#}C?^9K}J3RDb4lp`3nK?Sa+;=K7;ISf}#|MlCbYjHOAFe=#!y%{=NoRkJig|$+ zZ->E^3sS$MsHq=j=cb9sW5ARbe|U2zP>+Mjhod40hu|>fEXPH<{FQ;xOq&0fK@u95 zGAjbcG~A#<=nW=kM*J5?+gg99z~;!F@%;(d!|~G1Mk^r~V)XXHjX8_5F)GEeR;S!TWIsP4X!6oGywne=Rk-Qb-3% zt5{a_TB7NFg2pII-Vv|g_cT46DpYxN`;GuJ0zxVt%MGPOv&xd!1Vr(p$_u_GKTw-41rh9h*$E&(r6Q^XO>jFz}f;N=lyLuq{%4g=?i(F@#(e*)N0lINr$=k(aN zrH8kU$}1|rLmUOa-w7c#3*0~}>?Ep#5JzS1KIVFQDucA6w2cS|CZzjGTE{Uw%j4UU zhOl{w3d@gYK}@!{G`tRi;}t(d8hVH{BtKSK>IvK0z&2$IGzO?7Z;A4H`r@>YYX|Th z$wo`*meL!P6QUPDe|Ge8HX@uq`?ZtTwKWT8MSIOW=%{?4^1!=K8D1dBvG^n#Hj!gr%YPJu8yh$->!LOo80u88H_t8&+@Dic3maPkLN)LGQm>xY7kBl@=wu z+3~(LQ%h3uTP{m!4pI$ zS{(D+Q*T0qeH2AEa!&A~ZWww%d`_(=m+K5%vwN0el~ zu+qfuAjU3%K13t|e6B|k(pfo=6OKi=^dgpL6LGx?e}XEZi;H2%I;vTW4={v2x)(tI z?&TAgJ(b5#PP}|z(ongLpTUqS$;T;VLHSb@=d<|zgO^Vyn)ro7E}v2K@%snN-lg{VI~JijH-T-$L={+i#f6OMVW)qr;Y{l9zt4(BKZ2XC9B5UXtz4?D_35A*>gRnJ4d4GgqlfRJZ?dBnz zV;P86yb9eo<9c-S*+e2G*eY3UXgau(COYpR4*W$=GZB{Ur1vK(*DNxx@qkAMgWLyC zQ$-&lP&l3qpW+-QpW-m|b1H8`K;e~rOjJwyf8$9vJQ+JrUk-VRC5xl@CPWwRC{k}C zY3%Xmi(MUUOCe;=pJ)I0X7bS_Bs1mGf^cfl-QkKS=ne)Ax; zlI^QM9Yq|Jad-MbR!q5uPttR;XdV2Kq`&=&aI8Rl&INg6Pv{7+l^KsGB&Ej43@4jp< zmMg7wH0&G#COT=iOBoGIl|`SH%0>kio#R>0o1(hz%butHh(j%ne>`8VpmxoA$1~rH zM4UWdN-3is0hY@Tr>~BL7sAu;rAQ{kt(3`PouvR|u}uwA_jI|+1eJLjmCIG0MGce; zr$FLr>@R-^t|p_uP`@L1Gok=|fFiRNM{E{dK^fqV;A<#l67}@?C6qJ_@S0#=Zaaaw zzaV&+^tS}VYBCW~jO;H&tZW86Cb1ML^H{^IoW97B04UGKHS_2*l?<<`+*3JB=A2Qv zos2d#3iGY7(L3Zl`atD3M8!(PLhIXPBwlhI!DoLH*p2c|Xo=8|qRcF9HLz(?LZb+Mc9_(aCte0>_a7%DO@Mf}K^<;EI@P6`@ zL&AS$^c6~pbxV>=6k$>xE~#8o+2d3LdP6K$#BxbxL*+*jg(Dc&Q&J%PQY+%g`ner{ zPFS+&Ct|awvZa!=(;!`=m_%%peVB4wO_ZaX%-Irr&B{^prhdiz^b>aPV?9-*1_Dc| z6rzMpBSI5Rsv%e@=qy?~e*jkm_XIoEetX`oNZmTP{(gvjo9s8j;uRNlDfREM)XHhx0y65g~>sMa4HLub3C1Nis?k9iD zuA8j;1O`C1<=_eMm^%0KzU6NwcXm!}U3O=eZP^U{8PNT>?KVQj zR^H$q#9SB6#?#r{VEoQ)meJS!T|$2aPbiILv|;Opb=z!c|9UvfsZFErmlh-ln{43Z z*Dd;Igf?y{%BtrE>Jrw&uJk>Z}|jnq+?=Wt=C8 z!p#s6D&%0IECe*(M7`KL`PyLL?wsrW-Yt~!&icu`{=juac?n>j^uxG57CJue9rn| zHBNZKBl|xHlq)k1~x?qUlw2RiAlwaa$-z!|K#^HAAa!xqkin?eU2l_Ltnm*zi{P zf7{s3DPH;2XR+M>M6!QB_J1ati@t~R_a~wFrw8lBt1pP)hiSzZMDc@k;tQddVyg$K z#PQ32eK7<-OeMY`iXWsBkD&KtWPR9CV;Tm^MVdvMW0H_m%#N?h}m`@=MjS|k!p@GIY?RE4oSkeYs+Q9pAOGx`Aq#!f8$%#YK%z4j4v^hw?;N^cOXv7TNA+uDR?X&)66BZA5 zwe5Y>qJV7*v7pbo$TGa8eEb1~CMwp#1Pc_hv|YQeHVmIn!&Kt`iI0{WKZC>an^Qr< zHg{-ncO%Y)Jj5p<6IC8Btq(Z_QiW2wKPFxofw$}&6#s!>jrVzKgeOv+nd0B-e@rBI zTX#e{x6yyfKvEo%88$zV{PMLEX2IKg&9V})wQ7#!(ds;s1W8A1@^p^Q>wo}b+P4f% zQ(I_Ot{{DooHgojy@3##opfC~KI=TIzpj`57{dXmz(CM_5sbLcZoMB$%Bs01STGSZ zN6b^aAfefr(Fw4p#}pY?ri9w-WylGeiRPCBr*?lZt-7-tVh{JIRqk-_#I8cVF^-U=?mfq0isxDA=`@XK&{?`~rAw*j>1RJJ&pS z#q&<{}HK42}Xn1eAPhD!h6Fa4>O3 z9Gob?d=(tdr1_nlQ6h;mFxaz&AGbAA7E~%@BlH|yps4r$+h3L#KAE1cmc}-|>3t7C zqpb#b!;@U!d>uwVm%RsDKZ);^MYJor&0K#XxTk#Q4LHJsS)Qx8g_Eg<2+7PWT#Bdo zs%-atb-k*+bpWN|E3eMN#_^~Jc{mY-}J!Y!=yV>s1h9;W9A5lV$B!WKxJE( z9L1$xfh{Yp&Z6@@J-QM+%8{pXfa;kf;T+6g%E!b`j)_i3q(cx-h{fVtSFtG3M38@9 zV~L{8YP}!*SYCSQ)*=`U4=o(A9fri6cl99h8?N5F9vy~^Cr%$c`?jqrK9N42G(PA7 z%$xq%om(hltqghZkU~}XLL|8o_%wyBnyWMJ+;gkpR?n@1t1WlB$p?OHoaw7QcY4&0 zTW7N=mosGe#sorr#W8*wLr+Udk<9ON_xUqkuM#~L; zpgrNnWq3 zlWLe@p{^DuM?V~aF-;H=RxkLEIMyyK*e?8E%N7x81Aan=tb>Dn2oa~V@))wfkZLHr zF#sQ_qZdWhmK=1b=w-8>XF2nwDW6Os@bp;TEL9#A7mhI{;!gJly#ECklb^)Iml4JS z6qiw_0Tcr=H#C!BIw^m(S#6Kpwh{h*ze3-tO>TAKi$p1n12}2yx~Pk$zQP}D;~;Cb zcSN+(M$+DSugHJzyii(d_s;eOEf(OCLvlDA4(FMn;@~=ngO_Il$~X{#k%3Vr%3~3f zo3r1}A|W%uonDo?#wm_)@oFQ2zqDt+z;EnY0=uQh@5jrtix+>n2=XXTWg1+r1Epn@ zWcjq{{7Bt`{O47Se=w3z>xl7G1@oo;O9k?`_XR-(puw z{l9)(EaAUu${QZ}K2G8{&lf_7@GaEE;=|?N&SIy8ix(nJJmHoy$s?>UbsTA7Sh~$( zDdIS^_$R`STUUSF+HtGlR?n@1TWfArvk3*a`q_jXw>I7c!4u+f$d-wYS-Du6OoiX! zZUP}Ao$Fu;|4E`)=GTj5o`kQU)ZxFV{+jA7)mK#CQN5-*@Xg{pT*99Ye*o^O4BtRc z3@3nPN2R5*q4FAMXnzK;p}bWU@lePeC5hL@AjGzH4P zkK#i8)?*Ia$OKCuNdid{2$De3WJyCMD9^WngDvPJ5F*NxM6xZYNGB#(Djg-MQ|ogu zs?>ykt%~jP$D*%R*iOTrKNXv8T_N9#7b^BFDvt6j8Lyg%QZ0g1iAZH&`5Rz(xyTaS zpHg`^*ouEEMO|YBYdVe<2irCaG9@IgyLNLlY1>t|w%xe_ zJ&dhNoa6{YdtJfU?tEOL>FuiOj#q}=GKq!CK>K*nI=kMx%gdwDB5~IT|B{L<%4EhH zF59ky<(sOfIdnnk&gd3eM3 z@^J13&pl2fX%be$VRd#>Md#cec&=iL$GNMEf$R&2?uZuTeUM-qH;qkh?!`o!M6pR> zZL)vae&|pe58M3ASjjNuI4`12EJdDzTgjk;rbzSx6qNJU^0k3~z$h%7wo->U+coP23E%snSk-IlJx=1Kt zhSAEOn4S(u#mLKfKVbKa2|sY_9k+;$3_p;ke8)W9Or(JWIyg-^pQZd+ayHBOv-CJ? z8bSAX4k}-(KluAZtM;hOINVQ-MBxr`=RK)mN9Be|2UXsCnnI+2GjK?ehu=`?G-iLY zM^?g}pTPYiX1^S5Md~Pv9q5B&R_rQNXwkWEss_z%7{in?_?WEpod4@;_)|Z|9!hup zFj+lb>(RC9(Z?uuP5UheE=*#7f(S>~0s|rNQ(rc8mYvULe*%0fIw!8L5icdG>Ima^ zRF)&%7zMWgjX@?55Q@1)Fqm6H;D&$d4DyO7lIm9@-Ix?lPbl&P8Dlnu1yJIdsWkla zLw5J1RkAokX28-?c~52KvxhJ*N`#s(@;h75E!}vOFGD3jc|{c9EOg8azGP57{4wV1 zB!-o8hxu$faLdRwQN#Rv)ogtbtYqz$ZdsDO>k-8G;x zUP*K-0H%mn`G{B2#ak#d3O;`Y3)00r%%^vpZgC994@|hT6e#$sIgr9W(izl#I!NkP zcOs&LySuR^uIl*g`pWTk9Ko{feRU$ziGm^0NTp)^^fztCCd2;33p?P7tf#DN?*JVk zSdHVY!*2{4VP*8F(SuGXj+3eU;QLb;`~^XNS0ipqc98_8pKRF)%M zB=LwTnlCo_SGdea7aQ;WH$?ixFnNCP1)raSP`N+G@PoSqBmX}*G6ei*oT9x(aKv;6 zAn_lJoxJ12UY1itftc76Kw2vAsYK71^Ogl&zN1Ottsix#yk{Kwzwp}>NWexaDtitJ zo^jN`S)y~_aU}GSW;uVhYN_meMF>5D94D{$R8~}8`5#y8JP1 z7#a;6EHD2p$?~lqt-y9X+c5JT9QK}ZG{ci)k_gy-;sf+gCVdP?%^1zuL%atpFmw`z z&-jmUnqtrcjH)y{hEev}%BYk5O^P49NTVCy6il8UD?vb3c36K)oBV;bz68c1isc-P zAqk7LNJcP*)ikW*!aLhl^yai@DtcK>2_a%OQf9$mLCH7KDc8ZFAICrr8|!w5_(~I- zkyZ7e3w1(*y9KSPxs(+@F!UF7eY?2;5Q9W_b;X%oR6bD+I!~fBJ<kCpo5&poN?OE6iz8 zkxj*fg8#~Php$6aM}tCsyTR6WaPbaytanX0SPTmqC-r|(L_iEXesjS3b=6c|Q9}+* z@b8&9oC~D#+P%0y6tUi6_N+CSBLcg2(HdDfl5g-m3rKd0uMQlm=t*ro!~RlddHBLY zLW7Z`rU(mpe8kwGnI;t&@?bV!y30XC3NkfjOLnkDZSTEKieohgyU?6J29ysyrAUY~ za%sk=6n=k=8DAF)mym6WUl)gr%G)rs*i2oTwrR&_W%n}iSe_LVo_h}pwTD*&zlRpn zqiRYeStry>s$WsvQoW(l5(O~`4T-$#o>Av^21qOFYPrjy2&AhznY+X-XZGKd2VZid z_C&g+`iAOPR4+VHc?`c1;}f%!EFQxGhw_n5j+}pcO)(djw^VMtNNwvyaF)u(i`{x} zpjnV`KWyw+ZX0oWgBPX!jE`1w5Xfh$f<^S?iw-wEVs%q+hH+bg@O;MYp}fI)vJ zx!h+wtVlBmb+S48?Gr_WOesn-dCbI@!eu8JUq$+U((bNZ7SeBvvYL1I178_(ftd7d zovVNR9Ik=emMWQxG3=kX8I|ZL&5yX8^Rp~IU4{6_vYIlZhHEZy9Z$mLoQF(}PX*#f z^uJz`eR5nUxvT&a%A|I?X~!%pN!TMjpbz}+CG?1Uw_me=@HmMWXB_8==*@20UA=nX zrL~>XyD`b`i_PKH$?(C!@F}r7wrwebTt$C*?xKX}{LYV`A;^2rJ`6Cp0Lei>et-ZZ zj-M?~AV6i)HwZVPXX+gvp#K@dO=hb9Jb_;}CN*RS?8e3+wBrY7FyQ?LNgS%RwJoFB zIsAO-eeT4BI*mkb@Pp>N4{@*pGASxggF70uff1;+I(T#T%UK+m1R3GqOa26!WpGP~ zd75fGPGATzp4JXT-b;R_ym+DgQF$ckBxsC`r9gC4;me|KExp}9V)Lpw5`4aNprrx# zGzD4z#JgHtSIp^=$5Gh(e*q_d8CjPR#sU-qG%}X~F9If)9_|ATm*a2(D}T*cU2jx3 z5PjcY;m5WQzV?jmv84!!kA@<(Dk414Mm&UYRngL2v{@wj?|Wu8fdp>Yp=wciAam!Q zJ7XV@kH?!crI13-ltZcdm%^}T4w=nSLhk0Nfyg{9keEjTXY=&H%{(KNR9883LOAs> z;*P8ag=ztrL$!ch0HZ)$ze2Nsa5sMo$SsHkWC>ycxrd(2GeWNkkxL4FsHfyGiegd< zqqBN2)Z8^$X#t}fY6<2+3M(B}Q%J#!lJu<(u~hX{d{)L-<&LLnkt)IJnyMmt!?a=H zMH5X?@j|ls@SimEiE?FMAXzs8D)Q_HtP{eBF$V zXSsoMvdB$z8O+yV?IVvsY+Qgw;;t)zK~k~E1(AzI7Q~ZGYQfj-i;gHmM18uPS&5Xc z3u|8tSfeX01xCOUqgWFegeN{7X2V<1gZ@SJqV}R z4H^6SNtmAf@@wch4%Ag?EoyLaU>SYjT;sr| z_kj~fl!OnAiisUX>jO)V)Sc9Et5L{F9fN1xke>$&^dWOB;+z~RC^jc+sPd>v>jGm> z#){491B121PS&7un4f=>HHdN?IZ>4CEI81dZ^jMN z{mtvm_TtZr-i~?H|8?w|jW9JKN1+A8<7tZ`QkTbQGpzJ$&osXUBRh zk4rlzJze_M6GVvW)w`}rb7>bDkXOexJ|xu^;^jSxbNKUp?M#&QIoDIK}uL z9Ea)Y{B9TCPx$FyZ)P3%Z}SQhTJPrd?m`czs^71sC-cST?e=`W*dJKt`)Pjp>g?X; zT{zVw4bmxto+HuO7GJCC+x%}(3i14~d2*17Rc%Wpa2O03q^lk+&njkK<|a9bTBG_TvHTrGRD}BlAM&GLy6if`M}tYEwK}f?UP|9{l{v$ zx7og&x0WS6pMIDgP4`c;J?OwN+f&?nVnu9R3Zu5_6*4w(%cvEilLWZCM#)K-9&Vm) z0t(@q3w(e1YP0?>R{B;6`d0=b=(TbGsH_dTUT|<)VX11tZmZ=>#$lx@)p=502Oc^p zm$0{)piRds80)p1r$rdCsN_Dc88LFI|D~x-7Y{h@M!Z}Gyqx!%D3Q*{OCE;IBriXkg z)1&_L4t+GI?py~R(w!yjt-7-SzFl{243|Q~Z8a@k<~{;e8L=*k(?a@+zxq>|58Qej zxjKeGj1A!oN)@M^cLbTC4AluvXdT75!00hCw{duGJbKjMV0}?BgjSjl%)LVy*a;TU z=A<#08^zI`1*zAt!rsV?J=C4G##m`4=Snl03=v1IQAT%?ovVySJL<2s@4Du3l#S&!Su5q_Uvq4n1GF8r*WO6$jcmL*6}3QgmIOeaNu!{Ff3d`M zCJK)Dpn~7$!Z9c?xb=XPfqIsSP#HC61eZm$ zMMT?0!ALESqdbhV^rXD6RKa5yR-_^4P5})IRkXOmzY~Ao%vAHFqAKz=RERJV8SDe9 z5E)*7b;FjRf`84}6hqxM{M1#$*fssauz)hKskUy=w1x_dtm7Ad8~cIh=DS@>c2wj; zRl2d(+2~z8+$=WTbX9N1`r{r=kqxok)ddgVUd9P*GTH^TJ?g;IkeW0Y9Ib8W?j#0Y zMH;3uV_u)vx0ht#69K*5alr9Ab_Miq9O_+7qen}mm48nE_(VM%v-AQYiNj2%AbvWr zY==YFme>8zjm7YgOEO6q>%^^}-${|%j&)R4W-NxPsNY0NPa=1>+Twj6cm30I1h1tM zq0xpU6)W*cw^e%XiCxvfb5A^8dd{o&=2XsJoi6|-|BR=KLlGr&HD3^9OiKHZZ8^VZ zj5TOB?tfcnxYkK%B0DBxG?7h4Z{Xo0ZS~R02Yk49p%`m2<1XZ{=VX`wz0%FF>^)`Q z^_m=+qE=G-7LSx6BR|XwJK?ja`#GdK{Nvvm2{)kz2-Zh>1>VI46?>%3gPkxnKH*!4PtG8R?U8ujtk`84eK5x%p5g$m3 zx76m;?pVBN+o>e7GTYu#yQlV=S`<*kp*AC4GYYsFp@htiU-KkhoqPN7)QS%Rn>8Q| zpnoS(xNky{Mi^FxSb3fY{=Gc~;3b$j!{qTljLGBAXL22dQEKi3$%w!kaO9ao>VY>0 z;ach!)MvO=Q@`>0*2T~D+--2eYjZu{dFU^ve$U&WC26wg35<0fBrDvw&?*S=A4xAI zt4vdTpOVc&A7{me>@ad30GK_iyAV3g>wm@Z|6E$fFGwqt*?o86n+58(ZxI2W!alAU2bvPLwicf+Cfq6>hwoJTZqHV^b&lka?&jo&3G@(~~6q>VNbE zl9Nce%7O?JDOOsWP)P{Td)Vq(Gr@6)MNL2CjQi`{A!J}<-<6QFjJ zHf?87^SMO@4|48M3~ufY@(2-ZA)Psw2UtcxAds^qb55F{D-Osm0h^ooE{~b4yqOSx zKkh5b(QuOw+_Slq%erbL`Y;YIv43(r_15&V^iw9=iN}>|O3Rw4Aec zRlPa7ZF76&OHN^)%N28ba(&Vc<7>RLE_<)kS2A=yaLTupD=k=7Dr=~nJ+Cji8ntlX z$Mb3JrX8J3>gEeMH{81s=YMnVbpdS+R~YvB-Gl57vancByP*TvRbCmRugkMk#91iK zCldd#c*x1A3X^n7{jFGaEW%8fc_HIRl;_wqUggu(Gy4LIGPRQ}Xy3SVr4e6_i{b$6 zbhbPoqA)e-yg2Zk7cp`dH=wO4sx;K!Vt$ZdoQ3FKyBMERm_oRVAb%r{Xd%^HG6D3oRQkXjf+?iC{e;DYdN)dJoIP^*ILix)c1r}I>Ih3^;_yA1A@U& zOlN6Zb}YQ0%N2!k-p9E8E5;PRG?(nDqcojous;%nU{J9oAW=J9H)W*N1Tzv3NE*5? zkr6G*R!%DFcT=^*C4YdWdy5I+hM+)8LhjDiPvRs@V)2FgiO%B5auzs6dN@U#a0;~7 z)b`#?#xf(d1DwY6R?@8H$=s(W?4 z67`Y{esVkmwOCbQ+nQdK&LiQ9VtzLC%Xx}*pFXxNOt_{P7{%GY%&|mXO*VN@P4>=v zo7?&40~5e0Kvfy}7F2|YVA>iGR_s1)xessP&7a@2RQ^wr;N_4HHa>m|uL1UvU=T(K z#y&47EWyUcK}77Ee|1yY1Px?EX+&L8BC5f}*a5kB~I=_5}V{;(wN^>SoTMt31WX|2uI%|COWC(YqiRnO52KMw1YyApBC zz8(qwbAwxhS@rF1bo@u`bTRdHUs59!_B+@bNbh-obe8Avz}VZp;G!6GNIkE6Ok~Ie zl7A|QJ2P6g6m0HCnAyS%3=*a8FC>#9*NSG1mSag|?+O&15>O(z9k(|m{)t|io?DLc zvaC@SWU}ylGT+FWuN7;Qcw*HG=oFJ448A84;20;%#rtM8l{UHwCqy~F(vFx?6o%<{ zFI>cO9z;$b-GwV~ZT&CdfL!yvooNG&@PBi0iHaqHVwZQUJ<=#<4sKV(+%>7zwG~_}=_@Y&dpUGO6!zD@ z<^Nah;k)V<`NXH^PAMNy){`d*WI#q{gQNpdpq=jOpbJPxa}|oLs^`(N<^LQAw14EX z9%!TWZ14)}b;g!(cqAuZVqYKfZm5ghn0Nd~XYM1@#jWME~~}Jb$4OX%tEq1gZ~pKTN8ywZh>agT!84?vwS5>318byAz`LRJmzc zJ@Y|{E27nd-D3JZ%3L%5c;)@l4Sy?qNhmUdzh!&W1OcmBFS>4g3JVDN8{81!H#je+;{1a&!0P@iaG2Rtg_4mJC~I&H`L3-A zEP=ATXo`7IpC7%_(u9eglF{!GPvzT+cZ%g%H3#1R0q^C4Gzw*IWOHA2~2vHHRLduQvr^(KlUuiqJLNbjoIu7%gHL+#zK!^F$*(Hfrhy3Wdn&UQTY zI~;0g{N3$(18-C3JD&Mtpn|K{YaxX99kj*zr|Zuz0;h!GefdTRIbm`Ws>GKff`;~! zSTdJCh9a0Phh=|(nk*BcuOn0iO)tx1b#u3Cy8h;vl?UKlh06PgUvIIWo14Gz``WbC zyyuHAzWwsb^oKovq9{*_@T4e?DSRsx{a2Fw{96V2{C`7^%C^5vjxRs^=0oMUd=mu| zMgl)gh7%|JSc+8~$G!-{)pZ4&UGGfiaGz&2BNvgJdJcc^ht3o{ZfkxU3rD5pcE5w8 z;@0n5*Xa7Jcg?0<9IidlZaO+)r`fNtt-QW*eS1Dkx!pbt8#w~UwbC9dkv7=!8@0Qj z`IuXGM7K?QVh>cfnz*D`MZS_LD<|9bW-dVFnO{tP=xtL^_n(Y!4|R^iulTbyqb$8W zqNgzB!#aPFo{u|UzL9Drgr6!ElCj|2C*Y-GhRti-B-Y+vf9XwKkR9R}zOrgx8eTuM zweZ2Lb6W?>Pj&2Uy-q?8HLO5U*0@G056@P$vt;u_zHhuQoZS0d$d`}{YRW*TKi)V$vktq z$4#^D-JA^ze4#<7pbu9njeHqKtOVRK0r3F>yZj5nnBRJ%3HhdmnTOhfuCrm)EWkT(^;fy5>uFN4^-Jy_VP?0Ht>=sAw|=&j75 zXxgkU8pqn;I|dA=Q&GdvPa>yZa6qN~)uk@V%Zg&tHt6#<-y@S>eS`fm#fjJ7d{3c* zCN|C&wRDO)p2e5itbHG%|N&{fT0+_%O_)3L_R4$;%Ge(<=5a|sM!QMC1fHkLxrb3d(s@A{x^n;>Il<=@_cr_9R`yr4X2Ct|7jRxvRis?#tg?I! zzGG)=!yQ@cI(j&B2XKYtfwcDqy%B#?m~2^P(1eH0vl8OR;^@g#Q?@}e**Y&_m%;@g z=bNHQOr81BlOvl1v3xin&hee`WYNi!!6v3PK6B*X!N8&rjNieczOWxRWy~A+w5P;_NUopdAAozVT4r?*N<7zvHg^K`3bV*}KUXAs#$p z-n8hOxzoC|z{MTtanS$|I+|U>LNX0bLIuzU4R?Ivh&*Obcpa^VskPgmlm&~J;e;91 z=w6-lQxrn#q*KMxZ(DL|VLE?1)C71w)PfIvfPfDf@G$B`!t~RHQsEJhgHs*>gWHA> zkssXTrXH5N3FKV?AB7v=j^mx1@d>|{YM=zC8@8NC4Rb5Z8_!r>3O|(2{pDrTVTK10 zA;441W;PvnFn`GjL)81&6rdWF#;6+M9ZEOtY#IdpBpggcMWYQ-*S~-7xbN{PaQ%*< z3~5424Kc))*=>1NK1fO9bZ{=uWhzMoHLIR2Smr60#m~1NlB-Nu5DApTTF%J6VlVGJ zmpbJrmbD1y74!hwD9Ej*gWmyn#?UE-x)J@v*b>nNG+1PF?+(I zEs~&!N4{G?H8#Y-I;($-bE#PlXTCVyPBb%ek+;wK9u0oZ8~{iy`zBuB>r_vPK8H8BM4CE8GB`V!J1WPIaECdATytjXJ`hdjA&d^=3gM^kH zR=evWcC*j{CFq^$Fp%gFSr@}v+_%Mwp9mTJ9Ef#IEzVQdsjs7QCTw1`euUu@o$8=*B#KDoZcZb1+4#_~nLsO+-HZiQN z8e*>?nTA}$)|-8q<;Lfv8GQQ*cM&=8nkN>fBBi>E2I1`*jooi|uyY-FX;6^%)o$;KG_?st7ci+X9n^fcrveG) zX8hT31VKKZDDy<(Ct>RDTN$w+`U58zZ?HYG_}C|G0$%|Zh=?l{!5-0&gPsl(aXB8Q zb2l<)T_sc@G1S4%r$KVv$PI!Fi>d4U_{k#tCG`NrIz8v0G#8w!O`u z!ZvP%i8uu;u2eO6r!bEEbcj=@8_H+2l|n2H)pCE~%Pw(%GN3`uiHzk9R+kUXgFI`u z2!C-%=2ZHJm+~S3k$OSJe|BG`V7Z>JIAQswH5r82@}-R64=4&!hZ)&|&273x)aW4J zdNthZ=4LstdMe^EM(WVMp|+)VO;1Zb z$a|{jMR7o@2(Z7=kR<;Zzd}5an&icye-eL3q4X1oEVEx>KrI@o(LVt*(%bMyIbrEY z?TXqr)XpZX@|=d+q>lK+62t|kiNJ@tcD^kxOx*KG&x)Qm^xV_4p{J#1P0ya5-DGAz z%+!z_?pXnt5TQ9(5b0PwQo9kJVe&qbR;g_YMdi=mwKh8)A zzxZMJ<>(eug7s`K1Y4Rujl5`zyzqUj_HUAfaNP-pq3a82CCy^gOc!Fdv6|O#((@XYL<5lT)C4HeF(SyJs9IHD_ zmHU2=MWygAAy!=)yeSe;bO<^g-aE^`ubRSUe$(Dv-rINf^6HtNh?X+Sm;_>2$e5<_ zD5H#%QNF;}3JKxsElZmus|4a3{_Db)DjMlS5jFg3&c9hhjWC^+`XPmHniB>g{#YR+ z?`>8#wsY6)pVhfP7htyaN`@NhL^V+P8)iRHfHNf(Jtg~p00>on;FrPh0u%u_mm%B% z6ahDvL4gA*f7M!BZ`(!|e)q2s`m)p_qUS~q*=`rx?KVLdDbT{+2hOhPF}a%9!WY8$3Pj%Mq#k7uD& ziR4MINmJbxH*o&rT8{ovo&5rT-P8ogO+0#kzdSpCf1b)w8m6&|N0*C{HY$vgv_JH6 zK6(@Ut0~G4`|Ubk-8mB6n|MmTN z0(D-_mb~(Rkw+?y!#Fi?2$9&d^|Y;~i#l(By+}pD*IZq+HE96blfQEP z^5v_aE_a*!_UJ|4Za3UT@hUwyL-sFB21IcYh-LfWkzu-LnV^YJ>e;`R+qJfP7+f%j4iuxFT9UZ0O&{#Pn zgc`bW>e)P0D?WEBmZ7wENOe|~;C?N;EwBd8>T~L}g3V^P9;-A!zf6N_Rm^z!Y8=@h ztBdUYDnBKY0hy9C8lHahSQ(6tLSxb)m5%2YeR;Rx59cH=aS~dghEyJJZj-3cB=L|; ze^$;LxNe*=UXcyE`5=wbM<)mtLe;kD>jt*?=T|3h{&*oLRdb|e$Mfk9Wl;;(z z`%upf==m9*Fz`3H*d=@lwDbM8}R#>%J!6)1epUq zVJdkXg|LinfIUmplnx-ySxsg|+7#`)Qzj}3wK&lGzlo`i4Ut${2G`mhPLncqVhXF8 ztEo3AQ7PWw!doek7WNvhmflL)5pzp2uI2-pC08r1P?-SB4sD7G{+7o)fA>@WAMU5` za6cbk4 z=LKXF5JVC>94}Q$IP&|^y-h;}K*nL`s?0GuZ8!6*&8LfPIr|SWJ_7oCQU8MhzDmPL z>iYmbAiFeWgs)GFvxoUqe=i;yd^b$6#?M)KRJ85Uf%ixTJ1LIp9@M)jW>? z7N;}rB8zQNmEC5Hr8wPYzaq?Gs{LwAIafKiHw?}l9Lj56h+4ib+9j{acyLogTz06m z!|o%<7DciL2L^yk5;<_-V44=ehvJI-s^so_1O&U2*iwTv0GR1Hu{n^!L9kvSa4Ur4i7_&`T=v#h zp0OhxD)@Bver!8Gf1YLRj@m#BXqvpH!wk6C6756uQns-SPP$1~vvkX6zKd z*+6dF2@LmUwK)170;z=R?xF`>9ROe>+3n~sbN@;-@I{Rue_HNA_818|TkdSAGw5zEkgbXqh!`%|nBsLKu`B zaCKD`b4FK<5>sCx=nUJUY_*!UyyDM0;a)cn$K^9;M-kHz14AAzR(BB555<|%$WW;P z%pAPAe>m-{G={;*)4tY8ul7GR+#lk>eOQ4Im6vGj+$~>Y64O;WGj&P}Ju;-aWPI zbnw*bwmF!P+aCebQT8KlXPra9o)^g4c|+K|6L}vZRboP;9X4s&>_bji zLOaQYJ<0$?6pr3FkHBHhgTxh#F%Kf~ycLJ%e_Kv4aHct;3RvP}1c6XGJNe!#K$23<;#I|Z zf3wQh4t4g|l@F*?gupl+AX&gP4#pJSyCNaUd_H_K>@kr(?$ZW%qBj&GKxq=t4hh!<1V=j(1Iq*7!d@ zP_IT8XTO{QbdQh_RxkK}`5+5R0NdmL#4V7Zh9u6o|1Wr}_@&_dx$#$}Hla%U_ZlS> z{_X&|-ivHi6%FQNMg>2Xvv4TD;OLQ2HjDv4J1Rfp?=+CjF{Q}dCHwE~ZExI{5yk=& z12ZuC4fbh`|>DvTYtN?Im;VOK;+vdq^@a zEm1MY5~(Ap*y>IG_wENkfwt^(61Q{hbUXtsKw^RYz+(4Di`j>nn7uxc(2ALyIW=?I zrG=2Q#pdMalT@l)^23OvM`4N|c>euH&i>M#`~ZL9(Hz*#BYrQ>e@>piD&(w43#;tx zY&FwHrCDB#i=HiKZ<8PUy7_QA*IFmTWrc)E-n6SznGC1OCD*4aPfBdMir@OSDcAeH z?)lZ9@KH<8uP#pK@LM&DOMdg6$i$m(PofNLIud`pBF{7G=W|%JrIwOH$ECoa=dkGV6}X ze#?ph7K{3w&}LEcPU-1~nx}b|7szPO>kMIIyP;m!LwJHafA!L`uu{Y-45Av7rFo{O zvbIgN9lG<~7W7x0Bb$4yGEv}MJ59Xi5?ly=$tq-&4Qw3tHB?JBddXhUdVPS{&)8G? zcJ#8~N_F3SGcdV99qdp;NO%Vt{FJ^Nm14#PcI2Wo1S~h{QB{c483()0(@cAZ2aCA^ ztpqL1&xK9Ee@+E%8QW`W*9yp2qTZIXhwaIrk+p_7$B~-b$KWER7r8U)!&&RNO2ni|; zKs~{U-0q?uN=_K-a?OLjZ15>`-F6{QEIm7_LHr`ubw5cCjZZSWdbQ{A%d)>!&fs>U zf6U%jJKL@uTF$9`e*TA$LgsM_DO2es4jvB{&neGN&R^4Ty*aE z#5s(E&~C>wYsr1+et=eoxiS;p3!O7`KoxnLqSqCjIEBszK64&MoXe8mbDX`RQ|usu zWYa_Z44u*4!%-4PHRaea$G69H1`A{|e~%^SV8CZR&^5J-W2!SyZ73ZWNOE;c?RyS_ z5`v|MI_@ik$fW~);2EvLi3hqTdLWvkLPa!3g$*8mcU))*!O`g_6Pm>}6QM2K5Xw!3 zexR_PoLrF>`LqVsIYffYh8h?vdSwljmRMTB;r+%Bg#tFNUj55_u8QQ^zgqekfAywb zmmPNCq?N-^b$$jOTl%HrjgKKXJW$1I4WS0E#mR1aCC-1|l^w9{+Fi5!Oa&MP3WU`r zJi&VuUZ0ok?!#q}&PxE1t@DzVeZT9N8-oeFhJt4^g_Xy$nx00EnO&;W={c@+%< zH&6M1XK@c;fQsqWA&|m5OVl3Bf9<*3v;z~@T|M{-6c>q|=ewykZMSE7OViuB!5whT zj<2>n)ngA2VG7zol47P(UOh(rk*18Xsm^%Gx zD=eTb?qOXxHG{h_bs2L)SY>F>S6$U#o_AHbY@7A|Gq)&n3HNF~;fwHze}O~=O>W>^ z(m_Qk@(k$p;J51~)3h>C8}^qa-i{9)G6U*Wa!k!&xue8Mk5B=paZVz&m9PIu!C`_EF3T9?|tCV?Rt+($>h)7 zemk^l?i`RSI0a?MQzQpEe}{ptT-W~$Q+dt%bf*fFDr={EC|{^Ys%;cQ3mDJbl+QEX z!S!W*z{TVw3TTB{+y!NE@aT%Np*=r9#BogKXatjo94{H+wj0Wi^OO`Jld&P~re^!|VKKYc-D&&^Z zg2n=VsDsjayi3tl;kfaAI29tk{3a4ta5%xK*8539>t90Nmu2%I0HlLg4mo|>aY}Xz zp4Mh5-ZR(K~DP-8vFxl>*2*p>riR@m!%gOZVDE*M16zpDxcruSevQqS05Eq^Vof|vq#n)cG4}v46ZHsl z2UHt@*pC73KR{WGRNX|h|4gupAlMPkg7!W%OF}(KI{|xSn!*57vCr7ccnm!+%W2HY z$Zj0N4OWOKf1XDOkINEAe+MVCyJdYVLlBN2DMOGHm%qmAyN^Z`wPJKl>Qec?@usg-(mxH_&@ksEIQ8pQak5rl*V$hzm-b|!WaDN?&N3j&*8J?ls(+i^U zo;Ttiv`&D}D)V)4ozpfj;QJ*2b;f{PN5tZPe-XHILBWV7T1A(bzt?+WTpvraJ|DF8 zmbf4r>?qExCMW#6v*@3Vpz<@8YSG2!wOACU5VmV?UhA9+?>si(&H)9_9)bP3@keyd1TF$Q)el*GzkC$GzO>k$K$eBUh6 zAZcitEIl*IK_Qg|E`LXeviwjnrz|@f)j;-t0W8pfZ9m8%$fbpTt1J-kgmkQ{fOK_FMM*ny4GU8nNpun)!h!^Qv8qnMQFZdCsIDQGpt>$u;W05np)Og7pG>L)I5&b1#s{2K2Olii zHawLmsstB>g%bJGx)^45DM)1E5uB>w;*gqT!PUWy#uHsCwa@UHOEn<~u$`)8-|?3tq&oP>Y8eHSSuG>! z%xW1%Gk4X&N0FtX03W4+E3k-?mY6BPN0pca1jH3#L_+a! z&3`Jva_wQZw>KLexg+e^f<67*4KM%r6I;x8DX0)ULBG5_KR=$`zyDQmY}Gd;Vgpz9 zpw5OZ$yetHuL9M8wq;l;^(;b`;9vy*9Btd=fq9)Es6JwBXHriF{Dm<$8&w<9l}`P6~>m_H+zKCo81P7GMyd4RPn2R;SH?P_;e5vZO&~0zSbx3_ z`nW(fCC}Z6jlqXoi}^)x>D6a61RJaTOxd??TsibLPuWUa=)N{1Z5bTP5McwOfJ!rL464PK zoNQK6Wgd;z2rk8kWL#!q^0^v0rhgoKPezV$$a^YAjxjIz7I`;qIOMU+bVq&sdhd={ ztenD@4j*xZ%0%|@2?MN*Pj}t%OZdFwbNjZAKkP4;Bdi^521|)Y=gN)1As)c-vBZXikFuQG;ETI-I%x_hE1cOSL{HR!JAb@1Q;E{nIeKIh)>IzVh?&-SGJ2d^}q}UCxK~ z$v;1?=c}`e=^n!TzDR5I0W%m^^lzLuF&5wCrqP;@`Of0}=*6ji+YuSky=?E<{3BUVVb$^F$cs#xs9X8qzPfo{ig13dw_uO~$g)!CZu-vn+7=bA< z`c_51#sB_ogn_U5%73`<(>Sb`m#3%ai(!4SnEQ*@r`MR$CULd-c1|ZZfH;_``x4r2 zAZB1xz;0X)$;WNO?rk8pm#-!70A7vI$fwt41ZVa+u@Q`tXf+wZ34fD(>_#wVo?40x zjJv*e0vos`Z#G;5MxJT}gJ!w2*}$MV1S4~}DPim}GKc#M#vW^epqcVc<}kqkg!wN} z|NqX;o9EycPtqG_CyuC6%GFZ~GF9LC+1a+7owa@cZK+!OQN7iV7zazMJAhXgg@W2n z*$Bqq%{3aqghGkU2!F=lowx4CZD0)Eed|Ww0+!1S84WY$?iP&9$=xQgkvV4E6@rmD zx!=TWWKQlk+_^B7s&cl7*2AqfDHOWKr%e zez=GeX%n6dx-{iKaRbl3*(Hm=v=`sPpPyR6cB^2&KVMxue|w%Mi#*OVnJun13#Db8 z+I&3pYQ10m_kG>-((iDp zrTKT)%N0DUro7>m--}ed{A!sbN%S4`ljZBHzg`H(glEqakp{%A3=jpkkS4a7X4)>7 zE0fyjuw3Ojf2yHXQA6!OBZ~Tx+BY-;<2F$d5Rwb}Ohg-Mx71eDHb}=}CE~>B#VP@w zq>9fwA@WG95&^9u&aKBVi8GljGNWRt)5X;ew)u*9lSPgno3^Vial~=6;@Prju#*DA z`a|aihnw1cyg4-GP`3@gty|v9O*ZYoogI&_>&?C2f57dut9EVY2KTh6ts6XksMc<2 z>&cXPbdUF*W8y_i%QVhSHofJ$>i&tm(pty4w$p9e?$MLeEY6jle$uo}Sv~b^t72hi zSBRG@ol1~ln|f4+;vHl32vMoDu}tK2ufBdFMX9ne>@eNsl4LW9g-}N$k!2#za>*+k zz%uHGf37NatZ8+#uHIkrIKxUx0Q&2cR^U~&j;_Y9SthEo{$40u7GBh3!~!UzebE)W zYN)#UN0t~B`6UIvk~kf9*g8>v97`c$o7m}fnor?c$PX>DSm=DZ%Ow+ZcTmMW*;Y>`e>PQloTO&DRqQdA0mRzIiOPAw^BPR- z_I_z4Uo0IlU021{U9}!=CRSTTo1z@pD8p0|72^vdswO5yfju7%9jt4dC3m3qLopoO z2W3k#w5}W(NAsmo-jisz-`=~|J&RlEED_Sh6e#>`6vXPiU+5+a=0?B@m4cVboK_vm zf3oWPqdz$z4~(CeaWdb0mwv_@x~#kS?J`ZHVtc5(?#$LYY3YX&B&I$x432*5mVkeB zymbSkIssDxjf&68nTU-x;CaB|WzO>eswPJsL5ogIWD#5;H{{)HB&h#}`W5vX>X+2- zsDDrWJ@p6bE9%1z#-i7Q;2@3ugf3M^f1uDtfZv7}75zjINF7@+Lvx1+M<+=dy<4s_ zg=a$xCnZ29dgqKzv>NB3t*FI$Fr^F!F8L!3ui(W z@2LNV`UUkn>UY%V5j+Qm6meZL1b$E6O;f9APeprb+EWE_55_lyl!!&1Pm!{;HM2aC z%J)PXeaYd@xsR9xYw%S3=#u4OPkYgr{69lc)11YS6z|3TlKK@-|B8r$u-NHtPs0*q zLY)VWOd?neInzgn<+-U5%iS3)e|HaKndM|NGG{Zo(b5<<(gq`&U=7LOyD0fQm#O++@D=sb7rEz94IUfxh!QTsmVm%Qje zFGDcFA8e>Si~`MH7@I_|9yY8b7yx@_%@qDiW{Fo_y2I&;G{QI1T&H#1kS2V$8&8J-!A&ut>`kEGa4Mq&n9M2`py7rdZ9kuND*|WFQ*3>qm zueYR!e&yg-8vcw800QSVf5rqF^E1T&#PubeQ;d4yso;@gMO1mK6GLM%&Lek1b_JdhN#> zwo6m?rjE(Co`KFFrLKHYjpj`=d(%+MqBEmkUtvoz<=|Fr}*LRJXpM4Njq9)T73`nKxsA=iL+(x`b(6eK&a9P3-> zk{xaIm@a6Ya*+fR*IOFwD7(OS_=ZmsVPIIugr=;uVOm?SI6{p4*3SgHWw=1seZ9QO0@0Yd#jq_dJ9MRWPH)@3$_mHm@4{?$6f6%kJ^S3U>Is$2G|utHBV`kv@v9ST<>apGOKh`4?gGY z+P7V?bE!Dmk-M9E>whL+7Tdm%!huk@4JHQ$QGG>sdX1ndiv&T+Qc#+$2hSmCy~TC8oSSh zo6dtWkqOE~K1t)`?e1iRgO`T-gb&H0l4*(nVMa8{9tthMC9_O?0$f6$uwsl_??z$q zBZnZ4T?Y|tKgNqbnmza!QKw9SgTpc$GK6DJL;0E2$bSZEPi_YERT?w3~g9;+`l`mfMe@HWKDgTmJ@7Th9<7 z>PG~tr=kY=3EUfuAflF940sXAZiXZ}uqOa{#5)RJU}LLW(|8}r8iF%>*d}u6oPQYB1gCO^pc@(~sNee$`~bd7jd7}_j-rR?gsMeX zwX0l6tu43(WQR4|#$fTcZN8`eKB%l5;n&tzjuCyWJ}%gaCXL06_f&f+9D_|JQ&VhN-HSXNx;pw1X8`V%siWUVM8Y zVw2)V_;|tp?q}`7#(9SIn++G?Vy)dj`a*p#ec?xktMXXp3Awyk^o zzYk#bH%%E&%f*wU7h0M))2ZL(A6T{H|CNB9((G)d8Sefc{bV!(ml4JS69O|ilYqh% z0y8y}F@`CB8f%Z+#_{|83bp-E3b5AP7nhqf0n#Lwx^RM|ca4EMhD%G-i7-W8Nb2mX z;s4%wEGbex%O^W&Az-yH&d$uv%+AbiJiD63v+vF%l<`c?oSHf9gpcKHxjp;!Oh}bV z9voF^sQ)B%Jbbj3vv2CNpWxRIEdbnN1n;kxXAjSRy_|XB6P3&^*E4ODu&EywyT15wT1VX`$BKzA>h)Yk-CVio)m)`fhDDR}tgou9ylsn?r#``56^WxVuBR0+6zabrO<$X>*W^KKt{$M_`T3BjW!wbAE;`9L$FQx zvdBsvYIoP%S2rE^tm}p+-{6ksu(eImqY1sd?J#dyH%-3ms=RHv1H^#-10jD7C{H)8 zmp|={&}ND>teh8D)q5EGKGKae!uj+7RL`~tfRmR|vAr(yZC;`1b@_@(DJn)dqrHxQ z1pwJ|Q>G$SDMKr>>S~u=0pZG9VA&GEY_OF?$Xe|EnwzgS1&sQBbXjk&i!u*$x|(|* zKL#<^(a+yM;Qs4|bmFF1A!;;plXW~7_}zqs^Vdb&wP9KQYjA(oFr!-L+%t#~ela0C zLxylaY}Fkk$B9tRGReHn(hr>E76}r6{F9>RWhv$hW0L5ip!IQN_;7CvZn>ifF!n4u zA|EPI&^N{D1o;?Ireh_NG(7+{s1=jd1f-W)S(11lzG3hh#Jp(pGLS(!l%fv(5^K{> zela3+U_rkZ$m^-HTCasuije_jM={muSZ$%jRuh=`qRhF50)+opd6hR=7kaaQql`rL zi2ZcM$B%#h{vz*oK#EnCOz%4;_rsc}Qeg8T=)uG=ZmR-~1n~}9>!#iYN;W-7Xk~80 zN8Ck*gy^Eb5f|S_qycG3%mF4JXHG1Ni+2a0g1Crx)JDR(@KGv-OgvA%+~CG3#}Wig zidJ=%bI+@y+i(pTaD*b6Xkom6pF%Fno9*-Ux_I8w-kqigN_%1844Xg%`?Srf71<#f zG?Pu+2>twZ5c#GcTLQ@A@qt6|EzfQ8Uw5$8M{T~*R%m~KL0+MFKZi9KJb?cEK9s@f zs0rHSY-R<~QE)D}(d;UAKVGnupTjvcsqCoSQ3PNsKWG- zUmoo_ky}=!B9VTI37?W|{zqH|fprLh6fmop9rcSYD?d&d(9uZsTqAyTG;@?5-ypP_HK43|XA0oRNN(dO{CVvGw~v7!>~kXO-P$f_+k9=p#5H>2(3t=){~@K;$s6YVMmdGc^= z?83lK+h7zWc&)gyrqU23P3vodZAhpzLV%LErXo$?6qRIB2`-0<@%w3)|3}*8|Acn1 z24+e>LiVA&p%UQBIHmSUsxNtXM~!YYz#pus-0`G;s{aCseu@M+TFQN`-H5T#HeYk;~3Eb9!4!QN1POLgYZod8j@_RLR-`Nl`j_6dX8A_iB} zzssv6l(>?kl@eMhA?V~9V=zeNZq#3~CF?i#K78o)yXlE?&=}c8Pj)dK+eI?5(6!g) zgD%Nkd+V8h4nm@O%7Nrm+7ojrV?!HKDM}a@&YT}Hl~R|t+j_3!sJRBud;7seiPnio zbO;0=;gM^T5K)!r&m`tPA%{#b_(`VFJ}%@?G1zQ#0BIDU0($HwSl7F-+#7rV8c zp1)D*C3tEQlU^9;U_b=cA){#LmVp6xiko7!!xQ?bXlQAn&rNatgphlj%z)6zOaYJF zIU>1#Lbp4he2}YX517^aB^gqAQ=k(+=2{3*4|f1O46A%kRmfx^Bt1$NVT=C_bH5FJ zYyMx>)w0PkgMl+(*K%})XisePWS)|3#i0#5L}h4p99*Y+Ulr?FS@JfLi-bK)BYcoG zSGzuH4IuJnJ0Np3sgMZg?3Cb73c-PU%BRAAyWsqjd#4OCgQIE+0H9-#J8V=rNNbxl z)Wq``>AoHUTs5V!<*oq|#6RE>gbbcC!91fB*AwErnQJRV8>=yVPbyWxZMcG6fU2a0)zH9RkSB5Z&&<;U= z(ke%puJS%)qCd87us#S>@U^Epunbwy!^kIVM{o=!;-re6Tr8X7x(h+>o;R8p{H|_* z)`--NGpGuw*ip7!sYy;0M4ae#7+G76tYLQkI>V$bu{{ZawPL&gz<|TCjGs+}(t3i- zBqm-@BH}mI1Fme}?oHFW2y^?vp<|1GR_lvCQm&re5k7C9-8X_BanEW9pxqSf2h-4* zb8RY-LQ6M^uxUq@WGT2lji&Dqjl1}#orulv5Mc*PbypxQT_UvpKp-8H_p8W-Qxpj( za^V!YbBg>y$syX{;>VUeGi^E1B%?>8prB*tojtTsToAKce9w=*VE_Af2-DMlkvpnU zUYT{UH>2xG@B?k)dzSzE&XkGpD(z>y8Mq=rkm7^_LEe zdpIe6s3|{h;@)Ob?Re5x!?_-(Q#hBwn4W@*w5b3+nF1OVV1(5%GolhW_6~^pxZ}?Z zS20?|0BQoV%Q%@q1~}Zh0D5qLs&q}U=E&8+xR4o69M}VB-ty4h zHwrOXOrM5y+v!pX0SN>$L0JqKU+X|=VB7>r7~hMNOXbnY>9go~G7i4%)c-3Dl zLS+n(=u~uP=-A2Y?+hn@z@ZUt233D?G?|&dUgp=mv*thG%))+43@v{CfX}7I&y*lAx4@}B<2Oy$%Ge91gS>__6zEszCoI4&9f&Hh$^ffg z?D|nUE};TDpEqTA$d>v^hBd_l8n5Dd*-q)H)3N>bsYp?o#@I1u!E@a_zsZ^t6QkNe zxZ>p$B61UdkpV*!2y5$}9AZIH_GD&(;35#TfBWU=$=h+$;+>HF>)E^me_&XGuP^v-(7vx8eY$%KXc4evX?Q0Rut(cs5|w(QW0 zll>j{;WH62A@9csYf^N=da3!->G-(SnP*2L)#o141v2Ydv z;oo=szBWx~;I$@+A)YBXT!b+p>ikTXWpTm44T+n955qRT>ZtG;WD2Rf=rc+LCMSh#NoHE)_Tfl87*a5iX*bU%%hE zG^R147;!f*DHeh5M)&E{=YCF4w7OYEtM8u~JfoFa+>EXFuc5ecAxr#)J3Q%YSDVuS&Bj!!nDr)#ddnv2mCd<-F-hWCvm`|I~xn zs0_1m0quG^Y?(uh)7S};dN}a6-!ITEgK9fYRZBZF=o1HX;$U8c7EEB!AJ+_n#Q+=> zNeI^)3n(uRAWU4QfQwJ{qm0dx&?a^Xn>l*~^}mt=3M-Dl$uwQU>Zb8Hjemm9b>Hnh z#3~(T_EKYJFLi{y)T#!3>on+H>CWFbJDzXnS<^ril>NG18&gjtHi7oH-JY0G2HnuG z%5O|SjqaetH)oX3(y+AlbILoiKSW^?11Pr1!z?aDv9H&g!Upg7+41w^dXtw$@C|o1 z=ww9z?8}^=8GXld&(C)}E`K96KYM;QJbumXdjN`3T9B8tMP39uf*J>Zz#;MFT3+bo zX&n5DR}}nC^DL18&z_$XKWkc=vub0RwY*8ph{VCb&zhejKe4DZB;I+R28ryD@(yem zFdPN{>+xP*PD8=fnhmn+DcU%1MnbcC`fH;1nz@Vqg& z0()={OU)ROC009z_kWu=OuN7TDBY`O+zS16wHl&VYmk_fke4w{(D+Cm)+rF%0ihrC z(Sg1aK1gR@R|lB#>#2P%1C1h5e>%#%?Z~cxHzBLC*zSa;QaL^mIW5aDi849nUa_BA zth8ww9IJti5Ve8XV`enX!Z46;BaEhw1MA zQ0<$oblT>suljrGh<9nVH_c}g)meaas^dIS>d~yo!aPj`sYb-O?vH&vvV|qqL+@X- z(mjB?VllCAkp|Dj(K(;^smR`CR@!d_*!1bS^f`!1SU1trAfWineHIT`WEtNzJw$`f zOTF0*-#+RQEq^>>YVzeV!=d|HXXq$p3xu5*UcmY8%_~8IP;E6k*y(s;_zvX$nsXFzdwJ#nK)hf8ck1O3Fc}*rHj6ocH7P_j zLmZyKaHJZ*e)nnYD;N1t;Mz&tssU^syrh9B_%O${5`XH}dzp9SUI(Nfh;7d_7^;$x zexDi+_fe4+{ghkOjkZly6;6wlJaCz=#<}+bzULO@T7cQ6@?O8fE>9Dc32%FiC_6 z?=-_9Cw7vURp}cxU_Zzd33MI16Ja;D{2;?Z!9tuRZ8#vW8lm3g092mSVwHz!ZWgMU zBEmLt&hJEhQ~HJM$I&e{3DTc@Nj$bu5z-*grGFV7@C&v~!Z=n1WOswW#@V{Vj=c>= z_@H289^$TUZuni_`*SH!r>9DqDKHsu3-%lEY*EDY~`tarw$IhVtQk;dN_Q( z(cRTq-qSW6GY`}5=4oDtQyMj+gfsB)1?8LwQCJ`^utgMRnbMl{Mv%)=$WcXs4B2W# zdw(ab7(|8p`oq-pn!2W--ELxoAdw&q383sGoM>;m!vQ9HUM7Zvz}Is|CyQYGK~XT} zpOp(uFx(tu{!78;gN!nrGxm50BF;^%&5*Vjb+T1^)Ag{&BFd7?*WpcgRw^L#&Gg0K zmX$}^&fPvF#2NemGJJ@mNySWN56G^C(|;gqdYVNP3qNCzB=y#oVO-=ct7l2I>A5^w z3K0&ZWcr;6g14)6kV)c!zD6|5(v8lsskik&x&m>Ll7UV6=>0HyQ>5wkuH-cb9{zs9 zHIHRJE^dP(ELy`s14rTyC}#pnCYp^+(8j*K7r`hB&y=AfrmQGVIuPg1l=+`w(|>?? z-*nR;13m#~(4gVAK8`v?^$@Mwx;;wk3hC%g?Y`HGWnuu(zp0MyP?7acg`~z5Moy)f z@JI%SYf*L0(Tixai6kg8&Q_b*!V4@_O63IgVM05oRSZGYeg^-P-D_!!Tzw zG$6-J$dDa%)i^`HSI@I$|4Bo{;(tM!V&5glqGA|LW#YSRC-+WojHJn&?XbmkxxlvT z`+87z9CpHvc)v@)t0rJqYI_uP@; zwlg$`g3d0NYIt7LiB}1t`^dQ@r!NSRHG-bQU(fw!%DGH9mjy7gqkb8nHh*o^OQ)?4 zHf&lCp();Bk|%tP@LY^|z(_h*?)9=w|?wzXyg&ll!8nW^EV-W7Ev!ROGr za*0A5kmnMM&}w9*@KoCpt$(XIC^NXB+iPp=8>Y+qd-V|&x!VV=S&}C({-ulcombg+ zgCay5aGavBrHV!^FKojWF8B6OoL!XUP6_nK!8~Qy=o~AUImrx}>Ym)zI~GSOc^9#p zf7i6_Ou_m@Y_d1fgT@jKyy}K`;>?8BIb8BLy{u^tXI_>=r-DMKhkyK^En}_iE2tU6 zJo8HfGN2;KpS$zIwmbiv{$iK^x3JyqzWf;~@Qo1b?Bwt&Y`I(>4^O6FZHC zqA3h9l1#uT_kt%{CS@B%B zby`ND`L>;Q#P6L9s9S4XkcP=>`FIul#$JcjuB86OjD_xB!#2WE>Y6Je!Ts5;N<%ki z>#}GT%Zw_A0DmNgZobEmHswULM5;TTh{2grjnh2LZ88^6xfVMYWtT-?vdmt2b|lTL zIj_vG}#&|){m8|(kz6) zEl)gDcN>IFH69->@c*?{V4s3Eg*Gad-t;Y@KfLYgRJ}$kC-5-GPzxVtG)`6BuChWK;2*YWA(ni zCS86a7B+^m#!D>RC7x1~uL~ZP0O)s8E@8l+Jsp?QA_UJDaHQn%Q8Pqxl8aEzmzN|C zvqUq|;eWQ9TBc?0m-6vCbkohPv?ciV%^*c~A{Xwi8;t`cEzrL~R42~0cFLAE=IYU; zSLAW-J0QG7B=J5BBOup`67l&lg3=EKvTS)IXwmkGReYPpVQkD2jzg)EjDw;~MD17Z z{E|cDPV3K!3~`AHm-!BL|Ht9cTZt&*i`d1opMPFl{_w>W3WUhBx@=fgHDa+43D^X;A#UNAjXsOc3=>}RSK|<%IKGglGRB=Tc-al?9 zq3`zW46G*n>xJ8K-#(ElX=K7YIis!y=QcZW&|_behiPJ*jdsa`XI7ISe1PqyD8f9_ zEPv_04^nY)z6sgBM>$RHt(h-{o-YU=!#h(wzdpVNs5PW@)j6q3M5T28YBc|SZzZm#HL$Sd8;uo6}rAz*iK$(Kmr*_Znirb?%zJHTt zyt<^T@iOPR#C3We`8o2ln|}n62bbQ+%ekEqHbrdz-+;(naNG=zAf2SUy8ld$a2=-1 znerKPBqN%aR2^CVTqINCjNXq)4#Jjy6L)gqPV(>K&c9N>jiHMQB#}v2MtTkTL)||Z zIblu;i=wLf&D$5heEa%ufBBkSD1S7{61S2QoiiJAsyRtUbGnaC0{8aJB}vFVGU>e- ztvj!O}Ngp5Ef0z|Lxg{+XIg34e z%KEd)FfM2Li=&t>I&BhsU$tGs=?a3J*N5#=3YJ?VBScVO=Q!dgB8JrQ0VyrMboT!R z!BavVml4JS69F@qaJK^~4mLIlFHB`_XLM*FF*Y)np-llPf5ljBZxlBW{(is0Qoq25 zcs;hqFI9vTprMgk6%i`YM)`1rO}I9>jV>Dr{(YaB3sElY5rbMP!DV*#@x0qJUJBkD zXDIk!BFo=ssy@quGLoTOg~-O^Er?=#Qcg92gcFv)ipfMmRFhda(V60e6UmgAAUS$ds&ay5Ac9y$^m7@)iaN>wJr*Hz^qz_gZJe?b-D!5Qy^@G^nQ%Jarc{y+s# z8p0fnk3`Usp(AP#Gjy=nT(N+ovY?FDf+d?sse0;D7AKJ&pGkO#tItV!SX-R(psa9! ziUMV&Di6x4nv6L3s*>>&oSIw;C^eZGCF3PPuq6ZyRY4g=EguvLf+UHl(Lj>qyJAJv zP}KyAe|0S+S3FV;Qg6yCpo%D~)kH!$Q$&g*A()_0mk6#ZUVXSM$S2#n>jHuTJ`_bstyWul>8lfBfn2 z!5oQ_gr1hGKZc_D3abUE9&bdO?-mDP(96i-)RyAU(~@x#ac#tsvu?7Md9yr|&o&iq zlbV9V5!VVPNcN!(%oV;-ZUm=n<76>Uff)^zOCvaX8(gD<>?`(3WAfmfrP`Q1cG0Go z+Q1Q^bG0$fF;_b|Fic@nvNFxKe}NHZ^wmaiBwI>j0x_ssxpzHS${3ApN-aQ-vpY5B z0=Gl!TDM)mwqw_rI1hU(Hzv+w)GM(u86MM6j*ap4I95_B7QZ8e!-a`cTQK{CKm z<2EIo$r^VaET(%Y`8T`SX4l&2XB$21ZrA&M{i}x0`&Xr}>tEg8aydZSf6@BBD)#7g zRfv1~6*=pk4y$+lO2xY4?&t2Hdxi%@?N}^=Y`7JHQUF z-;NO3{jym8-RaoDQpgakkt!y@ zP7cr;=3+ugaxV`L13Ae-)@W-RSfrvCbBK*nUBbaz9+nyt*_cC{f7F=5mU(9i%x=rP zGX)N1%e*rM_Pk}@nF3STGVe@*o!c_++zVSsWy=714=C49@{NvpW*b^+fpE8u<$Lv# zt@ot==Pne9KkFsP@;CPqsc7vb@-=XKFS$8Vjh?B~r!?uqr&F38YDBi83`~UJ$Sf@b zI9s0*V0#*oL({z&WnK>kiGK9+=`f7Y)?0pTwzP+@w!;SuVHihaf&so_D2vt?`7DYt z)#V2aNp}sAT9ogoO{e%K&~H7#@8eR!!I2&UemcFIz;b*tE*w)|#qI;;i&&hx6Wj+9 z&Vajn@E?rd*<6iT1RctfIS}mVsGd?DfA-y)`uBm-Sv`$wR+T zT~%FO^;9*{>UI^ae!5WbKU%4k)hip@Fpt!#JY0Oa2$jwh4|6s6#nq3we_G{Xp6YbVcNO$H;r4n-JZP)<3rcdj3-3NOqj=tMd97CF{la@aXJ(&H|uu5O|?NqJN5>8 z^8`)ufycKMGTq{ORtJY}7`Y!zm3r8Ci4gAHSoPH~!m|o)f4Toy3;hie8b>yJ8$0C! z4UoMfqaS$WUH@<#yG8~{Xy`?gj&iho8@%iKCndHzjBUme3+FY81%ypx$kt4h1ZCH@ zATKxO&K`)WU=Sm3w>7koTO57YkrZDh0%dg^2iWn{M#0Z5(?^r7%TrVILK>BW54`cn z@zswiO8f&Tf7~0Dg*rD&5k9>Agpz(Ji`}kkwxGK3ZgHBQKh;hviMC;+k|o`lomCX( znWw-c4>P3UDG=>d=Wg%u3HM&-;<&Kmrf!kB!5@a+Vvun<+YhW)CKr?1af}q3p<=0b zt#h84!%RH8kzx~Y3%;Pk*d(E``BDne;lE+OyMA~(f4u9y$n)!T=_$zMCbU`nqLzfk zbG;fHY8&$#B^oanQwDk)?@(akhr2q_5;zpJTQD#KE}dKo4xhOnZ9VtHGbSHH)7?sB z%RSjVHo-x+LsQ7npmldL!Yf%iZYt(L^KRmJ05aXFFRSHZPU6Ig9EDj7#vFsfw6nP+ zdTH~le+kn>EnXRl`wc4V>eyG!Xr=id+pO7Q@%**?dW2K$Ijx>y5k>jkcKY9Jge z-YD5SZ6@yE;YwWAALYy>I<#OPX9`mot8(Wlzo7SO9tqWp;Achfy zE&46DICj?@Nn;niP2iBjyze;7UO1k7^Ch~(Rb-SRxk4je{qIL>f`k;ZZ4*6FwzyUiA8^DFoDxaW}) zsX?H=bqm!k53uisj#=lHf&xT@7Yrsr0W-T4^gFC#8PJkE0*_;SuZ>R8WGU~6NfLll zfAnC2(*XE}ABTN+YGl0aM(%8@O1em6(BoVOw?N_p_?t}S!9TmUf+noymaBL2Dj@@$ z&N~8K-ANYcWX|x=mfS;DMP2AO4pYpIQcp$;kw54Y2E6hpZTPme>L?8( zo2-&F2~!6&c71mMF?A|l2p_uRrm61m*i{X85tf|i*cs|k_aFfWpSN{S!SaEdf3o>I z_EXSNc86o#@SZb8S)We)nVSSPK*Ec#|M0 zrfB299q7n#25S{5&i)@-E_VZ-e=hlj;Z!0R*>kHHUNlLgLNN8EfbT&0|9CyBa=J1W z@?w=PX$emS1_hC@V8-v(35J8ZVpKV)KKC|OtI!&OTV!3a4I0$W;lMlVk|}uDV%S-v z3fK!s!+DWZa#V;7BjPcWW8`Abl%A&=8!vr6n!D!H$lhMy=L;e#BiiMQ<;UnMWNl^If1sJ7>)*yL%Lx=1SyX9g-E zTd_%2N`-lnXtKT)P!5wUe`PN?=bMmHA5h*X*q&V0?Ugf#)U&Q%AP(3^7^P-{IIbo! z6(@#DiV<|6F`jX5xpnc4Ef#}UwJ5D9w^u6o07ik^6_Jy~5viK^+Z3T$9k~CzD6=a{ z@RM?c0I*5Oy*Z6%D?va8kT@<^nKBJZf6iIYxV@xj?3g*E zqz4aKJ@61)k2i@Mh3l0>bh11=F)p{s8PYAL-3nHf{^$6j^b=42ExHbPyLap$dL+u@ zpN9$4c(~2z7>rGVAf1)k;bRw9q$&b1wk>N;b>sM~CRPY=hj`Y=i*p?UTMH#VDu~5F zNo5|cF-q0VJ9b*af8`X|*d^-Vcxt9jpCe%9bTd?6PUtc*+?*dpIAbPCTw*K$s9xxXzA)i;v8 zI83uMj+j~qS>Jb73u2XlU&@x$xRh}w7CjfNBJQE$2(Ui`e{^41s+>^8bK`VTW@WCW<&}kL{R+NzZ2|Z55o~VBA1!y}C>^~9%e4h)T18RN@(+;AbMz?KX!u8FT+@&=zVgp;ngK&S zH){Sl_(MW{oECB96CJz}4-%=fROTM1DJH8N*^yfnfB#(bPsu+WPxg%*w)}Hi%mgMZnEjuiWxz>+q%&PXY*b84SyCAMf8Z{l zV&jB~#S1bc{XZ^ya782*CEz{j2MHu`@GJa8!SC?jX4J^3k+Ys(;|+{wi{SnfE7mCgYLx*D-pu)w?#y>|&n99WH z>$3ZDEd|)?Lr1vh`=XY%&>fxe$}uP+SH@u(8$iX*qYd>L98dk3CQ zf7=DWZBF^ov85gN(dn+k)y>odf9l0KFe`=kglV!n1r(k-i0Qa|aRXXlFFulUZ?`hDr zP2IW*0H3aM60mS-R_Zdhbb>PJ6v(+z$VAUw0ri`)0P-@&cV6j)M$&Jhkp%ErnlD9q zB^vQHgQ!LWf?Lp8Ry0#W882P#!0RRpGbOpf5BsV)a)I*yIoB$ULLH;mB?wULe<0s| ziVeudl0>;_6vUywT{SaL1*c|);V45_@7TCcu@jzPkd@Z zr5^{oUEOE8C8lRrFi9xs$%5JV5?308Cq5{NgTM*+tWz<)*EENs|2!KyLc5`2u3HBarUN0~z!{Mf;iNO_dFRT5Tz5Lemvn_nO=$b=-2v_2mNY zFRVB+VdfytvSbW_bL4u;=GY6QsN_=3DKREzLAkah@VNZRPuay0jPh7~0cXcGUDL4H;nyyww&YUHlf^X;QKnL1^0NLm}FD^jjJejx^T7l_0_KGvD7he8>Nu%T#il( z=$@sZ<_%7HU|N{0$|V$0e%WV3E}d(;lohP$faRm=dp$QQ&6v<80(1CIbOL^UZ5!*@ z03BW7TJBBaR4gb3X;8T+jFe|R2rgGN2+s)vsNg-$W3Jb8k$3S5f3CO2s%Wt&6GNA) z6ni&&9Mw^iURB;dyXkxwALCLL>rhATPOoxRP@PV9326Dl8}T#)k2zPWMG1Od1O0<0 zfH?R!Sjlu_iMLkIuH!DGnr6PlVjba)m7kjcMK3pj(Zy8|w82%P4i8|7{alFj{FPEU zL?u^<>}GdC5047SdDiWE0h8 zMrO|In#SQIgWs!-QYx#lFm~pjRb;~`PtLx45ZhjU!XWa3{=CCWzIt@k)5kae;$YFd z4};@qQ5y9?ZhRIYUaW}Dke`ug2B<3)LEbh1LQl8*#f44ke+y!RDdLb{64Y6bL)Gk- zS1{=_S1>b}bC_D7f_t6Sk}kAq-Hid9m)3m>yP8M5&yn_g}+q>){01p zdL(Fp%{7-^(E>?tgZq#Kg;thr<@E50^6ol+edk3ze9qloiUn3AMRJD2dHiPNV6|Tb ztM6|V{0~-YmFQIxCVm#ERngphxbc-v6~CM{>6Kd|17E#q)aviu&5!WsUTt8z&1}DK z?{B_(oqwrS=4Y{vSNFSB7-`?6*+}$$yZYJt$yV)ty$Qq68xAElBJXXtTPtr^>%@Cn z>(tBfUtjX9yEd=Swz53+9lq-5{riXY2A*YG9C+q0feGH;t(8*VJ7}x*ulN7F2}B5A zy;gylF}Kl4K-@vYPveNW`|Yv$?_=3lyYpi4w0}t$%=R$GkF|j}v^HN%=&)D1Mj83lm`=g-%_WW{jZ5)0CED2H{pWVGe7>y50L_@>UsmR zb_37cBeex0A<eLj?19)U&8 zRZWQTXsJ{7{Y&@)r7_B_c&cjAy#v|zBbvKt;Le0@H$bzfD>jfw+bM@})BfXFoZ zlNTF@FI|TuBePP<&y3OT=A$%TZNkVmu?XURja2g1);Zoe2!9pW ztgEIPsBd|I-BlcWMgCakgJn4{?hlMVb+JSFaimrzOnrrppdmV`S<(rWx9huxTQh$H z!sujhcGDU(!SZmxkX)?npzJK6ozZu6$3c|%_F;PPlNFdXuMTMcb! zr6&P{Y3JK*kGgMdx%JnZ$SCig&3^)xb+Cj?+Rr8t=#>FyVv>}PZ_7vAz3j!7m`8)g zWo5`kEys|V3&p)QeEJ9uSJ&ssF8jRR^ks4CZN-H6Rh_r{Q@-a|U|iIRyoRjm%%kP= zp?atWe$$^=UR5JolzrdzLVH^Q4UE3^c|378U3!9-u0lV6@IDZ$lh^)lXas1Sd>(D#q{ZQqil%4pP zeo`JyZp5An+(mFjE^n%KTRuxT)t+o<%MT}1qt->!?lf$=-G+6o1JNsQYtdbxl0}A; z3$?NKOKG`1<8@j=916D}U#Nv^X*t?URo!E#V7{rMq@eF@P zDL_G$@iB*`?+^~*d1~{AT6A^j7BS2rED0qGb2|3jz6WvVjrCa%qkp*?LU`6OD4;;S z|A=Xo><*7>uzTD9R$q68nO^$B2;glLiZc+`5wq)nR^nM;W#J+caS^eLzu`r>0xcZKe-?xai#087-ggqA52}em1G*HB+l`y3}Ijt zGZ--o9Y#lKm)PdZM$vAb0(M^!31qw|25sMNBW`QpXB0ovQZfB;Lu^Y^0x1aItXQP+6 zwb zaQIYIicCnDeSdMpANsOBZA*VwJ-;wEIbj(U`C*nUx8n$sxd1u$h+(FEjl1ByLzzns zY0m^*B#PAjl{*QOkSNj0S7krs6$(y8>_SKyAn^APwk(g6`+=uiRwvVQvN4z{xZHq7 zRJAw;c+bI8MW2iBVG#R?QcK1l5#82bC_}&{ex{R)6Mv4*L`Ab$&+3MUTLg1dIt7=1 zsK!XH1aRR&z{Mf-t10ifyb;JPQphccD#0W1%^?M5F=B`}`Iu_Ur7c+)mn>485d{E! z2M=A```Bg7YY2_=#5DYnOr3LZAVItJW81d1v2EM7?TseZ#+nyT)eex7sAPmdcf87Fd=fa36>`%L5pzwsY7gqSQY^8uIV$OHuL&%>*;rUm5zYV_XdFn0ypQ5z6-7?4hfBv#?AP-+^=e=ok5QBjl2ceMOhLi z3rSgHh_@()WLZg8n!tiMUX9O)Q|3&l8zGKR(h^`cu=Ph@l_%p4f1ec-5)mf_hHI_T z)mM%2!fzjZy8R-LjEGsR9Fe)VLu}>ttJ>|{U;tITk{&08RCF@R8-lPN>Cg_*OZ!r@ z5AL>eixTSIn>A2Anspx&1J#fK8_qRa^%aWyZoK=ry>GqUh!}WL1sN$TrZg&4L*1^o zg94+o!cHxw`&FYHGqj4O`Mf;Y|B4Ej1-t5;~ON^y69oDiavr8?q|4Y@eBkh1t zyjNe(waV6^DYcpA*+`iL^vm6wnVv;w+wK{~>cH$%E<6^8yA=TjP!ALv7yQE?$AMW! z*YCZN?q=F9!PtZk6mXl;)DC|)=SEaB0tfnya-NLD4E;En_&|q5D}g{HgdsS;QeE9msHTRtxw(U1}_)Zxv>~#T)scs%%GC$_)N&paMdL zhiB+>nV?rwJql{Dbl|JSM|i}RzxsT?=ZAFl+|_In)=du8<5u^=`f}%TH&_b*?wKcW zTer^nOgVj$F6T_BVZU^2t$2N?X&i*-m3^k5@JS>R6rM48SH9e+x5H-eUwwbMY$Sj3 zx_zW?VJ!17m`0;;KbSEJXIgkxhydpz6m1K0$CW>7c{H2sliEj<3Y7+158&DqHMjc) z6SaQ#Rf9xi4z=F2&Uwc&NAkP2N_TPb5%JAoXP_%FtraDoCczseP1;0fA>+)BA9^w! zyMGOgEl9XIUQlncwsdc8JNlV2=Suj-2*2vCcT{0WhCGYCh%6zCN|?C;p#ELp#D}}T zFS!2^N4?~cX%`K_>vz9R;@T}9(^@$LsAyp?Tg7p}5;#cTYbb>`6OGYzt1u=-*!l_X?B`jMeI2}booiyi{=!|A>|Sm3khe` z6hBcY7{^j6WEr&JY}@jG0kDoIIsg8yRdL^u@3Gc(yKZi3l%ie{oK=1u-MpBrY;9xr zZc%Yi{y7!sr47p`d!m+fI@j)ze>GU`rrX)#?d95a(xHqh97{1a zWr3^lW={&Im?@c>a{Lf)^o{czQWeDo}KpVMK}dGk2}g_Kz^h5@TfTf{O{qx@akKp8q}2$b8LA1&b9 zY0JL7Dymd;W<|pZP`i4YFrPwgXEvZ9!OmU`!cjqTv|GVHmOB!il(cw&QZA_T$iw%A zdm0LQ{TxCGsvJ5L&GS?H+kQX|VI6rslrbN2mYqtkl5xUd(r1JRvne6dRC{2kiK0tX zlE8YPPEcEI9MaKlI5_2=c^{b!{w?$%d`2r8)97`yxJqaoD7p=f*EmlYeU$k?0$*tkESh{GPGZ?w)vT7ISDfo@=7>crNmd6 zqb>ScY0uoSaxuibBw*6S9>?k{At6;o`!K70b;`;xK&RJpSR26%#Q{_`W}|5|YGfIY zI23x4|EL2`{|$Wh-}Q(&<4o;46yE+qAxyCd$Eo%@sMOr)4()60h;{@01+S+DVil8r z{Ewi^J5wbA9~{~aCK)}A!&TH-^SuZu8eKlVcY6xk)KFagBTw%GbixR<>)aoTHd2^n zqw!=fLL!sjvVb!PWmiG?YC(L^szV=d44)RfexuXnV0Q0o2m}l9Nuh%B z{c+>tp(P*(%<7XkBfN+6KR3E`rwDMQ^iCl#7%(o*|Jt5(9OA#C_&>UP`ia5RCCw!K z62%RJz)lVyoLk2^)}ZL#YV>q&Wn9somb?t5b#8rf5fhLZv2fyPT)EkDa0QEF zEvt0ceZP|iO0u!Y9WZFvSd+7ib72F9p`v(w-=rA2Zspc{lb7&Wd>8fK;ed|?ut7%2 z+Yc9y8(=>SlMR1WoT{NJJ9CybCYF%1OLsB={$nBa!M0mj7V=-auq3ooc6J-gYnyz? zl$%X3f{fmEb(x3eMaS>GimPi4u`8##Blu^=Q@;r|A#s=c#}j=R)J|~2zd+CH4VkN= z_pPV|`9{%nR-&Fbh9q6CfrIcstw>waf>Sf#QxX%%9zn?Crnr;Xcrk!Pc=C^E zB{!RpB7X$78l>h%J+%uig${!O!IA-sj;+V9i13Uk=IEr5p(q702X;NbhN`=62#4u- zR$w$u&a&N7jX9kw+hOQ*ZgAxM=5Nih%Flm`+47>R3yvYLOWxI8*{yw19kpI=boWik zSBno5l^|0s@AqxzOMfx*$0!M!@|z}orZ9bb%yt-4$;D!kYS8Shb?O?G~e`Mu{)j6fb;tiK+ylzV+Tr)y%qDC0=^IQobwP|2cN+BKL>g$8Aj3& z4HZsNrBa!o5m&seR`Esc`;z&XH>cU)Q2$ZKA&%rjDDDG*-6*;n-<3Nbg$LD0@!*SWJL_xPC4UH}ejyAb#w%M>A&V)P7<0H;pW==Fc zjd0@4uNO0eeULn@XzUy#nWhPr3W#^GRtAZvtKw(+HdEk7w@Zy z@m3kHaV}}p??7K+A*$&0<7wG6AOT&-Dv3}0y&ptl&3M!bqup~i^2f?2;z>hn8CXE7;gZ4l+@opt&0SWor%wG7i2(efX6&nNyNlNq|d$NSif+ zx&;$FoY}AOHCMhAP3geqb6vs#yA?9IR=6E-&(Baq7jq6wuW(@Y<7LKjEKKI`2)H0?!P>@ zRBX$Xh5rrx)zN-Iq43hs5Cgn?jt1cC*bY1F_qbcXBI9a>#YTP7`v}$eG{!7e>@O*# zbF!FaF!Z|5w4Dz8`1)}YP?+@m2z<-0(d&DiE&ctLtt9JD>(Uh4?rGeI{Wg>ZGp_-lt zti(j5Sb-#ovM?33#dFa4xsx-n%6sk0^Dt`AKpgrj+t*lKIulXydv&D65gf2zOxg|W zRmWG+6}y!5f{GY82Xtf3=Ls}c^8I@d4yue&0iVTt5=LyaaiSI+orTh81s@j5MLeob zt=GbZPQQP4e1_jUmI5>H1GI=czo8)-Oy!p^VWW2L# zC^bds&l>mZ@MF88^Z{5=0*IbowNNS;8B0|&c0KXw`;!XdK0BM30Eku84PQe^y5~2S z!DE#{Z8uiwbwCp(4jwmx%(ahNnwoc!+Z##pWE*}OM+-b3y@$M;x|^b#Dqv{jHL2NK z;vRP<|C)W4RIxZ?QwTQNQDX3O{NSgEA6G_70Vvh)C%`7vb(5;q*?SJ9=8BK?g)r`1 zYIT=!#whY5<{J&;_SoOZLvg35B6|^5igv@}jDIg6jSlyPOyI$A7N=`;U|@?|aHybr zM9jt`dtzsCSBnx&63h)%&zWa69t-KZnc*{B@nZ1WyAplUvt-t@2$07v@Hn5=`5)7` zEUb;8y1*pI53E;ShceBY#qm=;f#R^Ra(=YXz%zYn2scc3(PWNDyC3n$U1wBu+K|p? z$6qqf22c*({L#ho868pO(tZwwZ->e*FFuVR#|;zBbVMD=&Li?&$^!RQX?3zg7a;4J zG2j0c&c|kZtb_SIs8i&?WpJom&3HDv-72Sh;{&OoM6%@-C7tE^;tINEgFE$uG(V(N zG~11kNzYN5p&K1w99oV#43CwPM+2aL=4@g`=82Y{TPKIgbg8%&}EM08&C8WlJMe& ziGZr1?_&Azg~XZobOq&jPwm~=QrsO(x=(R$8aN?MF>5Pbmuv)okH-Q=uG58(jr(rT z>epD-FWwJYdDK)es6>%!#I%?|1CU#r>FV@et9c#A{Vw?u&f0sG?r@ydn>xUwIS!vp zf8?tm=bvqh6U|Nud?~EKTgR8T^AE6yuz>V;#-gEkO<%{Gyj|*O%JP8I4)7pb_{bD- zLtb+KrzmQscB+iDJd60%ku^VTbn(+O@ovdD3Ad7~K# z9kc`bCPF67o#$i++(u$i#0x1NQABWw`Rf+7Xa>{4i~11VB#CpF2~Tk)OGwcl%RqpI z)a5tRXkMrc;dF5!w3GVq8IBpoSD#a%fcO*mS9s}4#WBwhH?Ud)D5bbWRq7L z=%~SPREjeQCCpGFyCQ)Z*TH;#%9`y_^q!?w!ivbvoK-@6vl_{`Qp-SLLog2UVYQe} zLX*BnkllC<(2AKpd)qu|isrppML?nmS%V-a#`HRpUF|@TYh}CdewsKQ^@Jgpy?mwB8_H6cu&YRie;ZZE*OyQinEyyMRVVp*1XW#xZXKrjuJq{C zBh^5Oa3|E4v|^Rj7=(+{Xs~d8F;s`Gk}*sJ0~p?ZcE@HGdIa)_SV0K!&aaZjA}95< zgOK1({YEhsBO8_8Z3(CePS;sTxmO}$3|aCBn7>hME(IPbc^_3brvVa8NIBU-8GYF1 zPi#Y!Y^(paG5!NmMF(f$vX|wcra5OcaAg;)~w~2%QiT@}=?YvM;Rwf7sEJ&@Bw! zW|LhW1wXBLvhyFIMI-$@IB&o+dumGk)9PN=_p$vQ@A{L6D4e@8un(RN>~XcXUZgMu zKl#s*x4l@2b0H^@)n{71y~fnP6UOL#?)^CZbpmBoyIk{hi|J)YM`$a@6ZQ64zt`*^_8T-i@6icb!(!Rb3N?B`ptzu_L9Mw zUlcA!{!Uz&kqM*~pkuE~SMzyPIL@MFaRz$z`PoDE_|k|nlr zYOM|`Ee$n{@R+eUj&xKMp@VV{gvw$DXzGW99T;rn_m)QPaA!$pAys=cHRF5AF> zbH|EJ?x27?Z*|<{kl?FHOyf}KG+^%k8HwOPlfg#dqsYFs+WL*ALbP4DUA6*D^~7>z z^9VB07-`%<>nl%K3T^PCdbQT|t|YTBxD>KHB1BY9CN!iUs6jf?BPF2d7b#Tu83CSL zdgHNO8@lRBH!xC0PDZup5=xWPbg6XZf`D?IvV&axYgU{R!?C`xwjRPZyK$9hqZ!gR zlDIFn`tkdB#!JcX-1(|kP(5-Wq@3GZ*0yz(w0L0dxO>m&adHG&+?Td^>KLIbjMJt* zE;9EJhL_I|K(W<+hMMAGk}}B5^h*W?A1|>V0u*sbz>2XnXDfe5IP)>WfSSRUj#R_f zzl|#R!VEguGjH_m!6r?@MvR)*Xl+tyrm>6@b!xYz3 zTau3fNPx^~;^n9~#ds*@4yVnTk?eJq6TTKjDuUnGSRIciOg80%_^vWoVGx6}4kEv7 z!au~q7m9iZP7dwmwX(8d03jj*4>H}ahd{HO(6^pl5altWUiKEw4hwZfp_uqLkQZnQ z!5T%cZqgdXV{}s?@4pTqWvcf@a<#SX5DBOUzI{8q979^m5Alc1Ak&T3d-ztHyt4iq zaN*C!ws`4sk|1hf5f`jk{L$yU*hufEwd*VwEHIH53M&BnT1=gI-Ov{jM^2aTt`y9I zzT|<#cz}Y$6b#-h7L-SpOS;k9cVLvLxcU~G145?Fdag-G731YX8)IxSYug|?X^YGY za9T7AcdvdE%bF2)8HaUynj`<-&S{o#rIKysWgF%mlseq+dT9xhW@dxXds7^d(#?8F0yBy<%hT?hIy3(3#5F z!ER$BDxkgIIw=eGCuiUP+-cpBp`J8D^VUsLMDV-cISg<4BSmbxqfyx8oip^VeuCH1 z9!dT8;9^a8`SOze{~#I;)@0^zIzW5N2}24Ypr^-_XbsxZYWVTJoU8;y;m7}RXwWoe zR-MxgInmyq{POsY!}NJVbYByGEWOoS)C*mCbGpJYwT{yAV*Sh4KU>--V+n;RR9`S3 zA+1o(g)r82>sP@~m&CrGp_LW0=@1FB5M5^U8fT5&42 zhGMl}!CMoHHZ9hrGffP;RFB(BOgOz&HO$gySG{HNbpN0PCTgqKB$X?LPiY9pT-(Oy z-MA+>_MGma3WW;EJgbZ=XcbMCTS1LWtFzmH(RhtSAFO+LtD7$E=$v#zn8?^&lSIRC1i;EO`8hB#J z%q7B?%z7-$&}sdWsff@ICO;)jhpEtG`hyx#OD>&DUJma{v<+TGO{zngRT6;!WAPJt zFNv-~-K6dTCc(y5V$J~8FB(tILb`1WbA-j6a5;Q=yBJHl2H2`W>OA+tFRA2Bz_idH zBq32=qJ)liC-ie}L9i__Hh?B3`+8;}1o8aL53sqOM>Vt{e9R`MX;<2;3n3W>;M$P{ zZ7+GBt?SRWi;F(ZTN;Cj~!JrE!6@9{=z$lEm~S54H3vfh-s&g zedi$9`O^Z7uhIJ%zif$Xx}rP=zI+&_-@W}^IeB#jZqCiKh7Z<%E*v~Ll@cSBCEK{y z(_0SonF_Xb32+h6u$cc_2DP(UVx^1FH28!1AYI=L^oSN)PC>{=0jKsbr|H_(8TEYefpg#*4lc~ zf)vFwz1nzJoN!a!=BtQ>NhS<0Np-9C==lh?UZy5e!|KmIiyzP5 zN*uiXJF^QDgZG1@y~d=7*lk|Bm3D)h4MviNXOwZr0`o^koj}xNl_bL62YirZoXVvb z;}pRqdvLS%hs04Brrn=-^_joAO(Eof>rM~(b*R!{3@LK%AhQ)bwyY9KGX-rvdup%E zDZC7EIc6-BGCpF;t3wn;OPpXv;prAAvjFtRU;V@HRHD@jt;{)5{#4{_Y6ybrm<~qRCA1a35 z48*DXXUG$%5r+R_?wUqI@Gj$_e+F!N|H|B&jd@$7ayEzrhJ2tq-m-89aX&k4Ge6R!m;*oh2(JGP@{IH%hMePHIrn zYYA~MCN*j%%4iNsJhHBiDmeujaAVjb>=_D3CSG&LAS?wMf7AyaD@^ri3lA^re!U`= zzyKcnD8aA0uX)tXei)2Z6}#HKG#GSzOj(rEn_BFFCet|%%d7(Ss(L!+CzZX4=VO8oFxL42>sA1Yp46_P!$*@M$TRt)N7SNghJs>#P(n;4r z|A(*3^Pg&ddO#dF641c84&7GbD^Re+*@h)hAmN9IRDn8;VbM@1o?eo48vOp0J(8q5 z_M2=(1_>GiO!F-#H#hf*HAi2e|4%YHtOa)>des-YBQe}H>6=o35UMI=5_A_G;)9(2 zNbyy=>#c+TE!+ERA#Pyy_v?>3>qmV5l}*dAxr%WRs^Jaj#*n}MMcNwK>@i}YREcqxfS{vkCWY5oB^NCNYP4l zB&b(Njs{P32E|qTvX4%)e^>?i{t!#Kcche8dzTo+&k{YO5xR{AYZl2lVK7h_(`7$dD1AKRE*NNQt(d${6uIt${urS`-q=S#OIX;Ed{0AOq03 z0pA}q&W+)dI?Ax<=H^!64+?PkTPL)0ah(9!ux1AnnpY;OZJ~W9V zdKOsT0m9N2SQDGiyr#^FhYpkpRau#0P9>qcnhwVn;nPAXjE_JM0lqfYAEhH>?@ z>0AiyC&E66&Nol+&^2Tgx!#i=DY}JbrQ%)7H!g11&UV2ZUU3&li=58?&QEOz^Nv^o z0V6SoO4F?xxz1wTFa+?BkjfMS2 zWF~*ZZ|Tlk7b}ANR%q^7vh3<;s5aOrev@QA5~kl3g88pJio<$vZEj*7yd=l`6b;-e zvDKXtg2Wbop_NCWxpt+Zb8ks!`%O-B0uY5%FpLXa{u`npUYDtrD&4M%VM*XaJp&1gns(Xe>Q>|{EzqezLCAwD7x*y^9Lr;H1Bl>-WtN!(Ti z=yTNt?NW?Coq48S!X1$E`93w zB_(kv-!3@IZw&*fKq*}jew#l-n?K1VajKSh#*@gjOMAkoZWEaX6q@ohQv`>IUQg7mLpzGd(k+P0zTgh#> zc=8dKdJ%e3XrC2BoRl>Ea_$yP*rJ=YW;L_m+jW`X9wXnXr5NQ~A*8PoAm_Op=&>J% zAF!!}zrJ8GWznHV9BBHkxGqZSmGR1>EGW{#^0NSBjE#<*u4ak6f?XZ1F3$&r=^D!7 zIvlo1E0g?7Qa8m#K84Rm9tIOM#-VO_tx@~~_hfTia4%W#3RLvF$blXwDVr^c0ESbc z6Hie&wl$yJnna_4__7oXASu~Oi-r&k>EP6{*>N+LSe6u_xL^`NNUVbtFyj&bs+on7w1^#pK8PC}Zbb|MH#SStd%n*gwXFtxFDL zXHR$Xz52|ax{Z)tGM7pAYZCE!&!S{$>B!*GpN`Rv8`aZ1X~$d_09)rj*K9cSD+Zx& zSqB0$%7s`nIB+X|y@B$0AO3TJW<6~ur_pN)iAxhXXB+B4nY}Pz=BWO5kctByBAE`{ z;C!>Jlx1b*hm0*Ws@7RW2VopxO0ztq%!cMXuM|t`XJll@Mvs%~8oy-H3+z3J^Q28w zIc7AYxYhmAtkgK?06filrO>t~{%^X25Y6GmvU$w?s3B>PpI%Epv*C}ZI*-IjOwjehds z?SyK2P&>}CWKbrvs<65~bDsZ;Wx`$+a6ZQL#bw5TUE!Ky1m18S5kEE)5PD2@41QPt z5VIVuh)S?{RvgFiIanbS7;DJb)l_Px6^2{V3VrA6G zU#QQRReh1=u~{Q>h~MI!^!n^Fp>0-%A%$g+jliy! zUll}Bba(~_iE1sz^nQ`Y)a%08?gha*42i^wVY$~Cz_wo8z;028ui0b4Q9pogjw`{6 zk{Pyh%zD*uQNQdHj)@tU;$NdKr^&Vo9+?w|_Rhwc!UoL8vn#oM%PfIb)2D&^&_+;+ zvo2kC*&V}I!uda15N>+?oISD*-Z$`?;T@H3N~^0s_f^cq-=7w>2(HSIVwTK0pJl!2 zNFLMya5~$RQI^aS%`W(Ve!dK4J6}jM>uOY&3e(9?J8_ee8z#Z?Kw`p?I zO;uksM#Ll*iPW&o{wuwBW4nkT+MArQTGcE;h{L1HJB#Z;!OI9Cm7VN2-*r1eaDFFX z;rE;h*N_IcA_!K>Satr}wQPHYeg!&`x&F(=mqW?gIVMp2$5=vyNIb_|`PWd{`bH1J zyd$2I0A)jzgHTGxoSO`Kow`d^3_?<3c@$*%O)paUjb>Sa}}yaHAs!ZKy&v5@g-Bj&~lUy>$tId zr#ov?Sp?yPh#?uPu6myf35V1RD}tL8RN$C$f&TJu!{WoNg|O1iTYD%z*R~LL;9+#0 zi34DBtk6-j{KnW!{D>I_J|+WS&hQdf)2K_kifD>cCYCgFHWrr0fYS2TF;@O}J9#>1jlzS#;fgU;RO$u={QD}4`|3=^iV)L9SB(+PLHp?Trbn zjoWMWBBQa%2r^Og+3OXRa6kj80q1B3cv_Pp^%#j;ht=e-oqEEO_74D=m<@8> zqVeQd5A7!%96kPb)K~*RTQ}cR_bOBo&M$rAyW4|5cR!q2BOFyBZ1}$`B&VTcoI0y2 z&anGiG~JvSG3jSK_I2cD&w6 z8Xhw8ah^cxkDH;G<~$sWJ}$g&)@N8s`VKlA)lMNE2&>O;lDRpPl1a6JUW;!Jv#9}XJ)e2vi0SjHu@z1rB&eL?V^w1&jJzQO#g)XNDKOch}Qv5G$^~RrTT{OiJT?&^WFK zue}NOx>^X#mm0YL%xg#F=er(|P3lJ$nCIZ}$jq`U+OxK`LK0vzSmXR^L>aQLx-9VX zML>ff9Y4o`gxk{SpgmNg0HjKFs^hl2IKkJk+ZFNwlVpCUBj zm2xSx(HP6$uDxOA)LyHFyuN8qLLIb#A9%fupJC$K;A3!i5t6!L2{ zO%TsI?l^>3V$s1p;QS?o)xCx(v6f=j5<|0S#8ZQl+^ub0Wj|>5J?(39s}G)c35{RC zmSN1&E3Krx%>E5d?|wPedhsl=aszS{3l@qn*_}(Ct!cIZU1R{pNw%lpc$VPpLx0@1 zj&(x{1v9I1WN}dFNW5CrQAC@LOijd-qiu_QHW&;b%A47NvGAZFm{yCVyem+JJ0{iP z^Kwz5w;wuAChu7C5e5DzPE=6)d-ed91gp=g;FoS1FLTyF?IL$qhsd7;9Uk`Gg?7rFY&iE9xz3Nc{G@%8ictnB})` zZ{G!;F2WDI41@i8uvY)N@xx8&gF!+&N=30xmc03k7`BY@Q5AOTEFB;C_9NTdv>l@E zF1z|C5tti3+RS)-Iqu=``tSZ(qg@dGEC%`7&R`v3HNjh{w9)r9UW^^$`*>f3wAPmC zQ99G7k!v0N)D^|TAEau7arQo@sz}PhQr>`>9w;x9MC$WcF$-4yB@Ue*<~hj4CTHHF zTEq${IS`Z7dj^Ue`eL@J(!1e| z<9he`gzzXWxjqGGun*0^82zl5U(cXnPihcPWZo9ze<-KYsBbbWasD%060#dc>Ld$9 zN968mIY&BlTvaqK)GL8_dIHD1-%IF#yzmsbqNCS>t~4@F);DVr{$&exZd}_`j9`0( z!yU{%j=n6TsfuKDd#GzthF%#)4^9a9VCl$tV*1M?ABk7T^?X<|1!Zxf|5?|OIzclz zn9FLFuyKfOV)t>)!H;$oh#og<~Uz;*BHHj=5zDU!KJ`dhUH)#fkhu z!;g|M(1C=wQx3Q@j<256^C69|q!Wv<(n zJFPlNH2Gt+zvd@_&gb*DI>3ZB6zh{FZF_!5-u{F!))>w8q+of*2!MC{Mi)GeEcDKT8tHPFl`@EK%!VZ1;I)sst|c6&yl3TbGBcW<#Ne@K8uL zyW!=|Q)9n~C!$e&Z8x%PS@C62`j9CC;xt>hXESgHdShZyzWHfOmpI!}e;7IXX#N!O zUl9b1zbeCXzi;%0>nE10#Di=ul}v;=GsPW$*lD#u#0nbgnf ze1*0>y@K=unYZf%evZui9`e|f6PEn#u(-1axh!QYex{Zx)^Yf*?YMM@0xMQm;WS|P zd#NKS?I_5dDNPcx0kK+ao$4-?Hb@47l4N@QSDom?2yXXnBc(>DpbImq{ytiay)3a_ zJ^uB=S{!PYeJFrp_yBWLuH6^B?Wo*`)*T#X#LLW8lzmyHK?RThDK4jsT`p()G`iy; z`ap8^(Wx5z13ZON%b{xuKIYuN1&*>lcTf3UBUk{>2*bOr$Upo~Tx>u{Psf6(Y)>Q3 z1gwR4@2@d>VmJsP{(V$;9`(!IifH~v6y3&+-O5U*u@}Hi@wN8J3UR~J7(A3y^o_*TX-svu zA*CoNf=%;NDHXYUHYO&x1gR-{t9xffB;?uFcsSc{-k#5(z#%V*EaWQ;@k64P1w zk1vhi_}<`DaeYZVT!fLPAWhOev1xcBh0GjHoL`t&x^MkKM?-*U49Sd#+WFK+cg5Mk z_;)o&zxik=P|Sl|WlSfYsES~r(SV5Z{MQAVp>NQhyCiU_j@bQlX9xI~{V-N%+H@rclT6fWjoAZ(2^z)-G#_5;b&ye)+-?xcdkzcP&szCl*=IZKlu@j zR5e3#6*l)=_1-*HLm?9Tl6{M{%v>M;cE&ImT(4 z`e5{q@#!~od|cI8IgZ7cqB65|_QIV@=p?{0Ci;;B!LU`_GwK94oI+F^*1PfvztNJK z^52UT_kU0|5bVrsUjjC4Fj|1m;me9YvvsBQtk=}bMBW{x9*EV-Z!;@M^IFo%I7DpcKrj&o&kzKCtmon-wtb5XU zV`dLIdu8PGnE$xESU`MVdVAj*SXuf#cYOk#fiyMma6P&#CD=Aj?&#jV9ugL|HEOOtD8-vBlD z^eASZawMFf!awDhUccbFd{F*M*&sUG?BaDrbPoPlwZt)i<%ay^b`h?W|3F>bgy2u6b~2B*Li@6z3D!o#sE16gD3GH(wU4cs{t5{X(uXa5Y;q!X4lPs zc@KbULLBOIZ5^rB&<~#DWiz0HDS-GK$%@0U%ZHd)ZoxwC^bOn&KyP9Ae4dQ=w5AzI z{o@>I?)Fq5zRczjZGEa!SbMFAgpaT^Xu1foyC>UcIR=CJoD(7#u0@>x0ePcYuj(rG z{@7|np36Kv8Us8#iECc)2{(DAB5Be5bq@2GmVEIDEOqcYAMxe#W`ds<{|)k)`gZp_ zFxkQ2^Xe=0L;A+|YunheKLw@ZVTD-qn?yPOD8zkw*bX8S8^9Zf%#>udsU~lzi!kGx zrAsk{xjUa;y2`$kR{gzh*fxM3`iPBN8I_2a8v?K%UMTf7f=k3xh- z=zY0cKm=O;%9bsCtj2mMw=a0xb}8eZf`zMm>aCYqF~op$QG4SYsBHAMcS{YU;1`;% zdGTqv>WPe@LuiWZ6mygFw5ls!{ITEA6vMDN@7!XL>!}tpn5yDgtJKG+O+*{S_|g4wGtKqZP+&LEsE+PF(t#Idiw$ughCJ*Bc>QA$K*kAv z69x2|iI&b~I7Z~sLMHO#zXzqEtJvA1{DQzcA;BQlOKKO(g~~$Uf>lrBS%J0&&j(rh zbJF3jc2zf8qME(Nsl2S&QR+~+`IYMlmeEkNXf2^p>(X9|NT_&KDBM9OJ531t+u<$X ziFK@LKSnNF7`*Cr@ZO}!^^f^=^M}XGJs#jLLKL=D*Dy<8o1t#pF>Sye9#jP0XCmus zb@Kx%!`+_V=>tC5KZNx((Eu$YJsH0ivsEd~E8jZgXnQ5e^y@2^oYPAKCts{l+gCHBw0ME>Ng5wdmQl4ExI-C zOR;YaDK+tu9=X#`m^?SOB;a2$8#1Ld z0q(qq>ZGTD^$CtgZAYUi~g@3{fCLo70**wtoAv*C^8;ofJ1% z{rM;@>>AbX;ZPg!8JI|#szSuRYm!l>QCfzfoVb=-b|_C}?9yF3j)<9`bt<|YW& z`7Sl37woHaz-wy8Z|QLy6&L{WOM)d^44a$4(AMYiUYu3#&F+EhL?SA+!pfWWSrq+e zbb0ciROY`hTU)xGGAjiRl2^@~0q(mamKyYBdzw_?Gzw3z_ zu8%9I=6*6lme`|$q7`$jq~I_+EY3<=u8r(`u(nR+K@I%aUhCAfqU$O4-#=$s6BI^f z@Ei3n)|czLDJel4-|QiD7*8u547~5{Y^UNi9ScFPJs)da0dWvvKDD%jqV`ZLsN`s{ z&Y9KW`JX+;1a@?em_1;IM@6`=^-xV)O!l^EE<73TJ{&1%(F>VntOy`pt+WTHAog_< zRA)|$f>X4H6he>G6Ia>=BilR87omo*)%-K(9^Sx-OIx$rUCW7_Oc^;0T%9VmT23;f zh{}mJnXWRV1a+EosN_sxY~tkNScXBilZrmXL8vfB**cnVsgF3%jI2L*a20rNY5VG#I$$N!#x4`|Lhe|a!5;mPd| zhEb|?f)^+$QAk#*1&hY$I`s8;?Dz3r$F zsQp3z{MIF?$};nuoJ&SvJqDZZd}4W&Aq^OOA?CL$C#+035R7Y>Y{jM3aV8`&I_d(W z)4km2$bvInl#|te(L8%ii(2?-)|GJvj&U5AnuhMiT)jUbJ>UGOf^Hm=d0(JE3eB|S zDVXOh5O``@mg$(wx2(jtO{P#50e>+!K~m36ki=k!XQ>r}$`NZr`D{Z(W>}@TVAvL{ z(Y5!n-9kDeq@BN-2pdLt!4Tp2{?zz+r}H;#DdNgY2&`d$|EQAX!9|ZZo`HIk>Tr0U z%vIc~c#06+^+)%yhpO>g9+dw;XGW7s0JrfehT`5Xbc*Bo(iv%07GlaJttZrah00*_ zkrQqZ1*Y(1U^-dC1K${x7>Y_i9_$V?lU zImRiU<0SZhMyOxrM4Y+VW~@-wFoizO984s{GZL|NTR&NZz(xUo!J-y(i&{KmQF9CKs7m0xV1G&htj=u$CN-$V+@Kc0_7%$$ z#Nx3*EuukE^HH+W^R$AO0Zis6m`uqM zv#3LVD-arRVIiP)y>3Ge&1Ck3Sw?BXJag&COAYpC0lGa~`$h}}SImN{OW-s<-6v!X z9S^O?nXbnSU5{ZV2WgFYUQpwj>)svzi%Erx=j;gvinPN%ks<}#2qY_o<8zZj9@7W9 zlWW_wc1DF$K+mp%22HAj`ed9@oH$>s0z2b>)>RnEit@4`9k0r{2&!;qh5Rj!j0+AS z&FnrjCJr{E?;bC%{bf%Q3{_j7$R;PN8`4L@Eei*&a z-QT}l_k$D8mHth2|9pz}<+^_k<~-d$AJM;D_s_xnhPr<~&53a4r0(y3ZQcKf$tQJx zzp@}a;y2O#bI|=K=>9pJ|E});M2e#BpTqgBb^j;g9CiO3&RM!2BBoqkcFOVpQTJ1d zikuP<1gBgeBK!aRWzTS2uj^sBesbFg%@hP5^YIs6{?9StV5=nru5)k;hCZct1+2Q^ z$!JPwx^>r9mtrG8Cx}8N@TMFcpJ*$8=jo2p=K*cvdb(uMW5_xD*u~nTWQ=h6hzT5R zz04O8xnf0#`PSXeoqBacGbM?fF_X_23G2PBnikMJx!yP-H}+S_@9^2{xSEc2T|dqe z)Ho~Yng_pUC^YOwh)MDE8$GhqDQbWGx!N7t`b3V}%)%JX3WXmsK)i0E=?I5^U_%`; z-lad~uG)7)xYzEx*`;{Mzjt{_I5u3WSJTYydUl%S z^nlJT?=26c;(WM`0O!<08YJKpp z{=9-xDzIYxux?{xsOyk22P$`eb`NTOCY7R0s$i05qbm1zaGL~5vo8>^nj4XDxk z*w>5vscD_9U*|_R95Vej^FYr-%(KbK!zfj@r?i=W4L#pb%}C{n zo?}R`F{a3V4}Vf;zu=p|92;;QJ9<|1+|aWQWn(1eN-2$rIEBRIn}R@cQ=(U342`#x zt7I*{e|SO%CY~4wLLRS}pUte$j8BR2 z&5$JL_3oP|_rZ}`TtYm5N~`PZ_(6bFb-NipUj||VG?sDSIf&BDcu87J+f|!-a}HGy z)krHI<%^t>KI2n{y!st4cZ$*zQ8_;mo$nU!CL$lZMO)mvcX8j`2M5O+;E=lFc`)~= zx|sd=X!qe4XZ#sU+UYncNU12j1{m!TH| zDSumSkK?ux{=UD$pYCK}%@be5mjEen*Y<)df~2|KA_=zbGIn^-#arT zB}%rn_Fh_~Sb(M|aX2#^4xbrv^U?h%AANDfq0C2oWW>lw!(7fs)8*AauNW7W`JP76J{y&Fj-SYcf==#zRe-`tmV)zt^gd%>&)rGX}jLi!=)g-ZMW|3qoK zYPw#{d>wRlfx<=;Ygt}6(353WIDbFNS7g2)uKmYk@PWdt!UGOqFPof z>|U4ke7*YYs8(`j0|SK&ORyYIT%N6{oKg9X$|aSX@x&O3sy4EqH8q}asj-(;*bB-T zl{Zw@RF+8{*cO6k*BuJH$li=68W^V%zU0QyH=5%cc$ia(ZzRuX0Z%}fP=7O8XA>g- zCwLHl9L{i_^X^JGOTm70YciNnE@YP}X#Ut~eoS?dXa!z4t`0=v9xc~Cg_w*ct8Gi1kU{HE9EN_@Q-mzITC~55DEgOIS?S<}5i^<+1 zf5<+R3o3V1;!@82P{6*IJLpcx?Bwpto13s;SF?A^&3`!?Mh=@y06;v~ zOqgO+*n&ZQbh||RD}N=24onJ1t_gqYJvi&o65fQJL^!}a;OIHw9eg6Uk6$#Kb$qB6 zv(PtEUmbP%fj^mB#$}H`kn{$&i|RsIWg(a~T~ZJ0#f)}Kk}z@|_b4wT?M~GeAe?X6 z;n=wI!Bm&4AWqm|$$yKnT(oGlFv09`xJCou=12oDi>P0G4En|D6jZrhA(X7k`O5F+ z_yujIMcBc2p>f@N>37;9*}_jMS8!&G>auvg86|ScLNinFE~RZ%@3*VdLatYUh-=U< z&w_vep;K8DtYVH^4NSlcgqaNqgR0i~^9)4C)d2X5n+_cWDu1wRJ^&+?ueSikW$S&t zK^|-HiwdN?eW>CKYz;We`Kg9q)Pl5)7N7;zjSmuR#7ZtjxHd7FhK}`g9B8?h?o2W%71_Dt6{2CGF9rSF_P$w2HWiy0T+`Y!uu4gPS;DAPeQ3jS5@v2vb@wA zOT|py1Qm(zB?g;#GRQxDoGzM|YtJomwy5grvtEEBU@^iN9pKJ;Q4mgOoFb=Lp}-;3X-|(v2@k}DuP)Z*4Ea&KRXxvRXx0RrDfXj zE-jo0?;CF>pJ96;_CHghRZqi#tMC9yMm4h$|Y=VJTA%n9JvbMCU)p28o2aQ zcMxzdJ(KRHVI3-~n6@Hahp>hkp9b}~457N;kypS))_hs7w^jHu#{5wIZCn6uS?rtd z*MS)Mx2i{EvA&;A5&7T)Knvz;G(8e56<561W`7R&I4pRmZxId#@129jDK|#-VdE;$ z9h$D}=Ow|E#N?OkMX^oNBTjj{Cn(y!htfx_@bETdFmTtwje>>X4c1Px!2twd0vd?x z8=_`_h|k7&*o-ZKzG-nByxdkxzX-R$zML=0Z5;h*x^W`Fx(gWXAmJz|A0{XTAuvG)C4?uAP!H6nm=q`|?SH6w zOl7!Ou`#w+J~PMde5zNoG$>)2)V*n#NAT`79K0Yjpch2c;~gP1e3;h{ut&xm5tpsomEdudQGue* z{7^n^6`@y?bi$*>i2s7yw+Sdr69ytA41`Y@h&J&+a4#IY!~~PDE$VB434b=O<6t4W z^FYwQjIMq#&!jZ?QQedBf;mW)Rpcul%8M%`rl4q&JVv9) ze+Wuwu=HGa>0V;#347c?Sbl_5c@I-^?LiUl_^^3SOMv%-L2{8ZS(u)@7im~D@iveG z7~LTib24OwfE{+;17cHyuz#CeO0fQy{4UAE7)#71r@VNvykkJ&sPXI3O(#|eoNQ9QKcX~NEn8h?O0sxl_b6ZM1l zw>*UPM^CSlaTP_JyO{T@((tUC3Fz2naLUmc(FlO$M z6>T$$|FqxB;b({9t?tRrw2Oh>L;|kys}8!*CXe6lr?{>j0--uI#|eQpZ(BO-2{_6k zUQ{vJ3>L6@+5*yCB|Pri+dY5YK5pvu;&_HqV4BFq*aBVmix=na0{{wzYVK^T z{TWBKE$j6*+`16bFjyqLYZvE4WMx=1bOI8V#3BZw=#Se_Ykzxm)-`7w_SR1fwoYYM z9g{{RADz3Fq-L5Yw`h(=Zs_Rck*gw_0uoIDiJ^c*V?^UmH}Sxd>J^pmo4TRXS_s@Q zqBH(mNtEc42Gnn;UQ^w_t*Hgiw{w#OWlFS1+aYd&H=UsE4aJBt+By+geWD;g`#7f0 zO1QtE4Ms&)(SLb2p1%2m`IGUD6XGzwL9=^bEzX%zjTd{0bB{jC?fpJp7TWdCI+SG^ zqphK{jvppUi|qB$WRbxBE;Y+@4-i$sxNfZeZhd@B6|mmjGnN!*(u$LbWs$?aEr%1! zjnt&XYPqRVgO3TIYi}MNW8E62+EslK*ahx1PkQo@AAdToBO#bl>XSXg(H(rkwF75u z4mR=&tTo-tr2yl1Fs+Ui{nKs)#e+eF(X0S`n{+<+reDH=D?n(O5`pNr4UO?u-a`eu z-nIjeRBtb6fIYNfAT%dJiX75(9bNp^v?uK*CO1Zvfp0DPDZvNR0u?6K56VTF2 z7jp&hB7Yt-Cz0XF*~kkzCGGUPzstB>twIrX$ zRf+@8e@Iv*pMX_(QRom<8NwnaV3Dt>+&3u1P{!A{=+N?>$`+B>{11Ld_kWp7C;XKR zo%i~jK!m@`EDYZ)#p5~RYf0sX%J<3r)H0c^$97iqv3_48L32d-3sl`bGB7#aAtg~Q zt$$dkPpSU((F>{FE62hXr>-13noCClKz&2y`-t!x%s-=+N00fB-`;ihxGFFTXs-?f z#{-hsoS(Qj3)IgA?ti^a{xt?q{50c$i>Aw~AAZV5Gidgw+IsYXK3Zb>7Je6_o2zfG zay*3tLiqEA|92S(=`FYl{I`=kpK}Ed9YDOqkHRCxS8rANm1Dv+|K%WZfw)k~?2B@- zp6@8vF93T?yFj)(H0&vcY1IS|f5$`7l1@s2lGdkW{|}Mu96Og0#sU)pH8PiRhXW`N zH#G_`Ol59obZ8(kGc+}mF@`9A zMbW~w1A7CcZ{Lqv$MDZML!_uL1%eGn^9@PypRTR;R8nnqBx(M?CG%&(5BmYtRL4A_ zL^Mx0QJ*K0xQY`kaWf}0Ns&#J4t6q6EUAJ;C8r?6N_Pq}tPy0mHO%}> zOQPb6H<*gb)@>B z7wm9kpZvOea?CSHG|0KYI5fID0hb}GZi5aPrfviHl}m9A;2tibkb&snVtzI%0)kz8 zsK(VlLqssqR1`-v)f660SsTuXeS{*i=ni@kfRuh*1S>4@#-VmGIXE;J2AFOO( ze6X@{Vk`cwL4@Is1T(S?zm7G;<_uu-C{?nLKP~It|0+io?0_X0!D56)UxwS&Z@NDwii&c-Y3K=$I z4A~_!L==8#Geoq1DyZQaAaxre+^GSo^XBMivwfLPkbj1(ex0`Oe*Ptmn$2T~YF0$c z#mDpW_nQ|lz6>swE2M|ONWAQk8v_r?1(t|`d(AL%5Zp#~@5jKR8RaI1WzOA#ma8x` zk~9b|BdguFT-ttnd475I=ELdPF7e@$SEu{^?&>1Z;qkkFPy6rR>`(W*ROi8FdwhAZ zPe(^-dpr~I=Ck99&?E%M=O?czH(DGsV(>GKN|?MD9-f9r(+w>iy_1G^+jl?x`seQK zAnAv{5W3~|)vK$^vp2haI)Sz?kJI+;?$bWq8sP2UA9j9?-*+2a?_$5Z*k8Mz^ZU*A z_3rxe!7wIIkf1**@&je_f7_8T&^_u%N?+fRl!G1V9uS;y_b-Fi+SU>l zfl#=A$G}hbxFs;AI$MmfCGe9CaS7ZE-ALChhG7}qD5|d)hcVW{S9%_Dn~#K5Q`su~0nW6I}seX)^2-xlM_iV=naF^<_G(}N=R-_@GC)dh1C{@tLk z=1{X|uQa1Qt~7(czS0Z{R+@W2A0$WaH3BSuJ}t-!@N+5@!8kP5x%zbDe^*)uGD?hC z0Emjnrt3iNk}Cyn&e(<}fFrD{eQ6PX2&|aLYmoqu8rD>b*}M`=IRX|Ml=Z=+@%(xB zY?|_rN(a81f>p(GdF&hD3WfZR#(^G1DVpm-P7k*+_wTDXyrmq^bE7}(} z#Gt;ul$0I_S1J`7`<;vZ1B|I%N|zDF0uuu^GB=Zf!V>~AF_&>;0x6eHkOB*TabKzh zVuf!~z3Tx9dM$Dv(l)z?en^TyYioCf`W0EuX7AAZ+izw_%9Q+Adz*s+isEB99L~&d zI5HdEjo9eN3l1e4@sSlHD{WpdKAOxgK3(KoIPN=>Ds{yvq2cA5IUjw$y!Zuvv1<(E z#tFUG*B38;DEO$z3nR?v`gSCLmB_U#x<#+2qxadr*7f4fNnEteBSDW@-H9J5?vV@8;Idd9+dT4fA{*D}0 z>#)ymV@uyqHg}tOwZN8k{cVr_Xsjg&%Zz^;R%F5XW>8J6pMG%eFdmGfJwwDBKRMz{ehj@$}oWUUW>CxMas19ALrh$XJ&f ztv$V_DyNTLS8nPyC=IOvCeT#t&5Z1YUP%O7Ym(V)c~^rVeebJ(x8DzRXUs)zB|Ws3 zUcba(49j7Mef&tz3iPC1fhpTAyo`XBr-=bJ-R3zzgR)BSbtgVO!gsMsY*Liz8tcKv`Ebq;J z4ck7KiK575(I-Ou)y(eFdVz%a8sgjx#w-_qzPS!Ouc2*?DqBrSlV$d% z^*yAb)2dk?r9<=K06mF7d(qPZVAG)GfJza&q}W@SQVAA64p9o62e;u2dvF1W#I_GxU2Ss?+P+zJsE>>fPB}! znjBXka_gUeVJdhMQg7b~&Qc>7Lx6D1cW|Ct-RHZWuYNjL07`05RI?+?qibuOD>GPp z4X*k8)g73-9EkrZY|sqAkh|v||CmGv@oW#|4sE$0`)A#tQxQl)RjN1<9AktU#OC@l z!hSV-j1gY|=jzj@4#!`?I3FAg5!#BJNqrom-;XtaV+V`~tlAVJ+0uz}lRTHMoA=H7 zC?wROd$9~~5bZ^Q(uXjUqLr=5$Zk^4y`fV|a1Q*E))25oi2Iq$27-D3VX&j%Lg797 zry}bxo!ek>yl1R1m{x|?zNKQvt?vl)fN{b)A`q|+>dT|vN(z^2IpF(rxhI>KM&yOE zJCu%phqs{Ztk{|Jj8IBJs4le{kZPi2KH>eL4zXV4;|qi*rLyZCu@A6DE0enzZ3I(k z=5-r1qW0GzXsV_)MpZtwkQ302x7|Y43@tTvw=9cFQ^d92Xobj;IuXvrPkVlB_ zFpN`xgx)xt`u5SkxA$cmYp5tVc&k1t;4(gc%h?0YEwOkEZHY>KU_w)@ABo;6 z+Mq3{a_82*-5bKeQ5uU53NH34T$$_3alx`Vl`ATjR5nzCc&(M$UoOWSzz{AFwgBgU zH?}UDVw1pl9eXC!(@+m=n5zQkSeE@YxCvI+zGDP=aqxr-|9~*I0O9$UnSX>4AE_(6 zeDRM}H=>|b@ul{UdD<1Ix7{Leu5M8jNa7Eo_s0%#8>VlG+w3PQHwoF* zpvBS>HeJH*UxNHVkvlhpeA2xIl~XF;^tIF$>>$&ErVE-bXu2SYaAK643X~InJTp$y z3o4ygh$mwd$#Uy7U5A8-$uaL2BU(0_#Uja;b>KN^>XpY@nZ<;cca5v2PSZ*|E&^P= zaKUc1U-K%F`Xnj6)YnOQOQ*Dnr_q&Qrw)L3m6*FX{m)cZQT#Y)tE!Qzug?=MJk>JM z13zXN71VJu@$L*-Dj$-TDxREwO;7 z^Yx~lO_Q7uJWTc$Zq2^ouFEV8vAR%wxC6Y-wNM@0DIa6=P_-x4+n4Y)~) zA6$=d#L{Nn`j;ujlGw5cy=4p-3%x}=sd!#M81FACZ3rNY$J)mbZullZgfFC?gWJo~hXI|1F@v%Uq0 z@81+pT^)`KHQ;DWB~_7IGYG0$3I!giTv1v17{Lb>y8*@()my56mr1=sc(d7e_=r6? zPtrV@%%k%tB-K@R()Q55xjvG;rEfG3FOp1BwfF4f#cx z_WUs;yw`e_1bBYN6(NZ1-z~FyP>s?!&c*qg`lvLy^fm z0u-L|x9|Wzh3RI046YsFAw_b|g!+`qD=OQh7we=n;BD|?ozUSrdwn@J5<%IJns9(j z9Ah~4z)MYK>mz!~bc2TIP_qDYV^Zb6!;5%6f5!8thWwdb{@m&O5w`TB$TLL##k2BV z%8{c;hYLAiRQk=39XhgKDBpEPu0roLx&W}PNa4SDGZK4$0-JY9#D$A0xo>~CIac&H z3DJ{t**&paQN0QEFhj6GM(T;(*>iWth=P@;Y)kB_RS^5$`NMe63OK3L5}90W(NHj( zD-qD}?ULXW{S|tXW4UY&xW#yX`r@o?cE<(RF6XjOiZBfLn3PR*yO{;15P(GiH-ZYk z15}OAc|?wXE8p87?)mf{ydi*Z0U4F)ut1{@YX&kmw0JS zqr$zh;Ck@c_FzCDb#Aolg@h+&J(bS6=^}zU#33OS7xuPiMF=FVFwgm1U~!s&Q@*L8aziC1C<~DweFCaV?}Qzcood>p>FT@ z8H+>@ssFSgzSu__|IPI^oJ!cjYSUDMKk-C=FB`rftE~r3|6vimQW-AT_2O<8C{56H zdp`>&r|1uM&v&BwO&d^b_;7h-A{Cx-YkL%?BrC{_5V=jyTAbtNE8%?3vC-=KyHmg?Y8@vob=J{1V@WN;!Mg!e!%e^BYDA{Rwx-+~E_ zf0>fmkL7Gxuj#*GaJySf`k&nUOOF&6glI-}4(Mn67+T&{o|3VL_WnOIO%h0#5yk=& z0XCN)t_TzZGcY!n@n``lf7KdYZ{s%dJ-@+Ns-^`GdDMxYa?G?R4fbobThr^lSd?{>lKVg%vPB=g|;S(h$Dp9dv zd@^62{Bja=p}Bn-p!CWwaRaX}mVENIKKUO0{HrODn+EjW%uZgve=~eyVv~t%GP|23 zQpBk?{id_U= zrl|6+tXKAhpO9BxNGf`4$Jhg9#)v+%vfNznc=ZudNNzWl5g_1f2$r(b>f9b@^I#|D1Ksz zT+x#N)!5N`)2%n1#doB-T9k8m-Wp}zjmp$9BaDezW`-Q$@h_I^LrxzaEJ=VC+c_PO z+P8m_qHag_KUDl71Ck|in(i>LZfer~Vl#JAEPmOPA5YU1Os`m>tb0keo2qjPtXFfm z#Kk_|QISf=e_5IyEjBQ>j3?e`{?d8|^2MV?Z_CbJnsW3?WFj_ceX$BjElTFFD zolbdTkfu(NzRn2GkUqd`f*rv;z=4_&60b@?hiB27f759O=1&l2a;0fbCh!eBz#C=g zO~NB`r&Bn+!&IiCDUg@Z-{2wTjxH>7i1ACLA+lWkVOzhU*(I%{s|z}tatJ+X@`q@| zoYd6+^Z) z9aSr0e@RDk!f`Xno^A$b`_lSk5esF8vPH48=nfemjT$-t;A?_cG*S?r6I{>;99%P! zI-K$$kj@Gz>2Xmg`1z9dLueHMe6Q&Y1>tkTFOfQT6f1(Q-vg=7=%FFFaW4+^oYK28 z9%qtIGR|TFi4(cA8HS|Vx=eJU;3z+0kR~t6e_xC&Jdv@{$&luek;Sve70}|@kk$*4 zg&P?sDSx{EF_FbHARx4*kRlBkXk0+KE!%QgR(bQvK5qj!gzWpgTv_y))FTXqdWT<- z`^Vyj=pW0nMf4GR%h)D;}h=*=8!z#bp&ivP{o+b+fbX?7O!Xx$jfRTO{-7Q=NIWS@fAsA23&2 zGGmDz<1v?g=!98yQ!Lx#Gre`*WGTT_rOJ@KY6u6LPEIES(U3M5p#R|16TG;>D#VYMh4C|y_1twI)Oy>XVo772(I z^8sdkHoUyA^UBpH1FHhkdYf5DBPKF4ai*0G5Kvf4CTg{6_INRWCJFv`M0Kta_3qilQT(xW0 zBe2!;aJ_w|^TzvvxYQz+SvEZHkv@MaK{rTb;85<1Rnb5o^lcN!ek{^;#d6)bhEi9% z%UM?+gEm6no5IdiT~#*LfA^PqD^(Y8@tn_HU7eaisJWzz^?~4w;QQeS8o$k)&&fc) zA$Ue3Gr}(jUed^SxFDq$BKn%(Il)VUSL8qK$hR0>QX3T~PF4e%-34C2dW4){<)JcE zK!C^PeKi44*auq;tgzfjqS)^ujU4XM2KjfNq$``Hk5Psn%y$O zw(OcRzpcCzd?DB8Py(^6&z>Qm<2JG~edKj;Oo;|8D z)b|{i@Uce~f67stKjEn5>hq848vPROA1b11C;ntMhNpW*3*=*{9jp=a*OK z-yX@8U@$C(Teu!riQnI_Ho+)>B`vl+0rQm+X3bubFc^G|gE#92CAp>=qG+l|J7=D+ zyG>&W24wCxd6PrgY@)94yHP?OPO{#Pz6!*~h;0{6e5SxtH(VpuoXHoHMG2h_75)=zNKp*f4BMsZ()EY(m%Dw?pS&e;j z7Lbjne@xgdTv8?6H&2WE>dz}cSO$E{R=AJb0z5@q`{l$&Z2b$^S?lO_sMt?fWxAPt zqt!mu_XUhJ_Q_j5_EPfk&3uv$sXE=@F99WsL8^>IqdWhK2b;I zA^3pYINZz8WKWfQfQXbz?MG^AX>-P+U+oXJybbQcZPyxq=HaUw`%v1SRsRF893{8d zO>F5^Hz4Sq3fsEBr-R+l!K&cEq#mvuAoWn!`Y<|>%r7^{-#tGud9%9J32 zU99Hu@Bo9YCsIHFmwo%_J*MXQ4SiuLW%{|Z{|Bla#0i%X#sU)qHaIhp5fcJAG?UR_ zDSy=&S#R4$`rW^Rj}#D3IQLB7(&m7R-KK@L=tEl=v`j@rcz8+5j{kkXxp-BUb!_1- zf|w)D%y-{RqAyVreY(K#H;Hg0NhGO6I>FJZy!h`0!bD-WIa=DSaK*oPdsX7-eSPr@ z{0m!`0Pb=G@B8J&+m9MY8fig9v|LA&5r4#$?vXC>mEWWPS z3mkU~BICyeQE_ViG?_c~u1briHgDb0U(Hr+_rKmQF5#I~tBpJPd%~0JcMFVh{41>S z;*aHz7l{`_c)tBelM#&x(pm-iU?iA%Bq*UWT9!cW<0b<_0MOfyIN_s5TB z0<*^}2ah>;dpM<>A|~0CzV#`bQbmxSOS;MKo2<<$quVaKbClkiUr&LZJ;X8YY-|GZ z`@GG|VU2e2C1finWZtr3_lX9VVWJq4Cm&H~`9fkzkmLGeYL#${L|u+6CPh*z5n1=KYae_ zz1uj15ul#h_-?_bP4?a78c>1R==>#tsD?FzZ`c z-B<&=X}h$`9O>WuhijB+ubJZ-1{#5YAnnu1vacx!0QlZC4JE;7-I;8HzDTRksL7w`jL1Fz;USjG)gcDm#n4j zfK4!zMxqCO2w>0!@15&DZQBq@AfoTU0L2#>obhOhqWuAaQjQ>vLx2Fqae7jKuvOAw zLZt$UL8##C;B_IovVXBA*LAZ?7(yaCL%b91v;1NV6hQHF9>2|N@!Px(zipEh2eFH- zF}=(#z)O7?f1Y`qP^1RGJ-8T$`kTq#0iLV%Or$2~NESk-g39C^$*%tyl3o9el3l-+ zWM3&J9WG1A#hlC&UmNn?y-9nsK8ih4Y??L!&bEvklF-(lwQK+v|8baJ$XH z7N8e4t9I!LzJUp3dR|7YkPV# zGqRn(`61&fEp6z5_hAOmB5+e>BC;K(dLAI2?v*eR}r< zR|i|yjLk@B_97M(((nxP39c@oY7=@227H%s48H3U9>}2e;X7Zu7j0d7@$^H#J+u-i z8Gq*79o#XFN7|5*wBS=fX6oMV4Pc&j>#wmI;Og z{F;DsU$MyG0?N98bS?lJk9oIotG!=&f;Z3vavnczs4oOc6d$E?L(RkJqvY;^9hXK? z=QY0JW1f|3UZl;w`5pKW87k@Xnt;v(`F~wgNCi5=XAVk+h-ZozlNc74I4&0E{|=nc zAq?U_b%N0OlvTIB?6olw&(hF`<>*s3RH{&@VlBfioIqC0r~qy6S5qDOnEgcGLF zE28U*UoIfUa|6gcKDp1^V9&vtWe| zSfLb!(Zn-e*pyg^!ll4M5@aI;s|1BKfS?7NgkXgCY}i^6R2G~Fj$K$1eqWGA zCWsjFOccrFnIw`o!oY)8D!{UXRpr&Amlh^yV|sIS^>*;+(QZYZWP;cIic!l1u4-c>PF$y}k|dn2N;w6oY}c?DK5ehs+3EFo z(ts^_$MJZvXl7GzDF1wZyLfTB7%v)dizf!dQ9E6Tqa!gKe=*@`wQYpBxs}tAM!F3W zv-}k~Ln|5W0L9BP5DZ_xdiPf|Sz3Gf5vf;Y>3G&oPMd`|2cl;qF+6K-7owc;?DKWQ zP%oMRjxb#`)5V-yM>aheo;36JW;SW&%XX6Ies11hj-Rx*;+&mugF(LE!qIq!-P}*| zN!Fvtt@tjFe_8|zGNMp6!rfIg+=(T*(65M&Aeq7airUHqguRLcQc{IyQhXNOqqw3D z3QQ`ru_|TUS(1#YRE`ecRH+<{q^_tZ`DA z3hyQ)>3b=)vTE?HPA+aKX;rLLCJ>e?nP8lgMpe`ce{Lh`T%A$e7Lu>UI%SHIFNa