From 3729ee3ef36f121e321b0956ed4835ce99ce8d3d Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Thu, 19 Mar 2026 18:46:30 -0700 Subject: [PATCH] Getting Mad at Parallax (Includes Boomerspace!) (#95382) ## About The Pull Request I want to do stuff with parallax (like placing stuff in the backdrop and moving it around), but I'm in my not doing 100 things in one pr arc so we're doing this piecemeal. To start, I wanted to try adding oldspace back as a parallax layer. This is something I was considering when it was first removed but never got around to, so here we are. I started by [writing a rust program](https://github.com/LemonInTheDark/old_space_gen) to fabricate the required icon state, then realized that all the different parts of space have their own animation delays. There's no way I could make one icon state with all them looping, so instead I split them up into multiple components and then overlayed them together. This works, but is infeasible (my gpu died) at the scale required for parallax (17 480x480 sets, 15 unique delays per 1 set) so I used render targets to render one copy, then mirror it to the rest of the overlays. This works wonderfully, and gets us down to (on my machine) a gpu cost comprable with about medium parallax intensity. I'm open to making these tile bound but I thought making them look "far away" feels better. In the process of all this I got very mad at the existing parallax code, soooooooo Parallax layers are no longer stored on the client, they are stored on and managed by the parallax home atom that holds them for display. Said atom also tracks all the information about how they are selected. Parallax layers no longer take a hud as input, instead expecting a client. (we were just swapping them back and forth and I thought it was dumb). Parallax no longer tries to support passing in a mob that does not actually own the hud it is displayed on. This feature wasn't even being used anymore because it was fully broken, so all it was doing was making the code worse. Parallax no longer has to do a full refresh anytime something about WHAT layers are displayed might have changed. We cache based off the variables we care about, and use the change in state to determine what should happen (this is improved by moving "rendering the layers" fully to the control of the home datum). Parallax no longer directly modifies the hud's plane masters, instead relying on trait based signals to manipulate them (this avoids wasted time in the common event of a needless parallax prefs check). Parallax no longer has 2 procs that are only called together to "remove/readd/update" the layers, instead doing both in a new check() proc. Cleans up some plane master cruft to do with tracking/managing huds (might break, tested, think it's fine). ## Why It's Good For The Game https://github.com/user-attachments/assets/79138a0f-9f6d-447d-843e-0d237db13276 ## Changelog :cl: add: Added an option for rendering space parallax with old space sprites (the ones from before we invented parallax), they're animated and I feel quite pretty. fix: Space parallax should hopefully behave a little more consistently now refactor: Rewrote a lot of how space parallax handled itself, please yell at me if any bugs make themselves known /:cl: --- .../dcs/signals/signals_plane_master_group.dm | 2 +- code/__DEFINES/preferences.dm | 1 + code/__DEFINES/traits/declarations.dm | 2 + code/_globalvars/traits/_traits.dm | 1 + code/_onclick/hud/hud.dm | 2 +- code/_onclick/hud/parallax/parallax.dm | 352 +++++++++++------- code/_onclick/hud/parallax/random_layer.dm | 2 +- .../hud/rendering/plane_master_group.dm | 3 +- .../plane_masters/plane_master_subtypes.dm | 75 +++- code/_onclick/hud/rendering/render_plate.dm | 53 ++- code/controllers/subsystem/parallax.dm | 7 +- code/datums/components/hide_weather_planes.dm | 2 +- code/modules/client/client_defines.dm | 7 - code/modules/client/client_procs.dm | 2 - code/modules/client/preferences/parallax.dm | 3 +- icons/effects/old_parallax.dmi | Bin 0 -> 96301 bytes 16 files changed, 320 insertions(+), 194 deletions(-) create mode 100644 icons/effects/old_parallax.dmi diff --git a/code/__DEFINES/dcs/signals/signals_plane_master_group.dm b/code/__DEFINES/dcs/signals/signals_plane_master_group.dm index d27adb5f8c9..61bd33c3e22 100644 --- a/code/__DEFINES/dcs/signals/signals_plane_master_group.dm +++ b/code/__DEFINES/dcs/signals/signals_plane_master_group.dm @@ -1,2 +1,2 @@ -/// from /datum/plane_master_group/proc/set_hud(): (datum/hud/new_hud) +/// from /datum/plane_master_group/proc/set_hud(): (datum/hud/old_hud, datum/hud/new_hud) #define COMSIG_GROUP_HUD_CHANGED "group_hud_changed" diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 1ae8403c644..6421cdee67a 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -47,6 +47,7 @@ #define PARALLAX_HIGH "High" #define PARALLAX_MED "Medium" #define PARALLAX_LOW "Low" +#define PARALLAX_BOOMER "Old" #define PARALLAX_DISABLE "Disabled" #define SCALING_METHOD_NORMAL "normal" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index c93cb22246a..8365b5a58ed 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -52,6 +52,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai // Hud traits /// This hud is owned by a client with an open escape menu #define TRAIT_ESCAPE_MENU_OPEN "escape_menu_open" +/// This hud has parallax displayed on it +#define TRAIT_PARALLAX_DISPLAYED "parallax_displayed" // Mob traits /// Forces the user to stay unconscious. diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 6fffe7203f4..8f46c495437 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -144,6 +144,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( ), /datum/hud = list( "TRAIT_ESCAPE_MENU_OPEN" = TRAIT_ESCAPE_MENU_OPEN, + "TRAIT_PARALLAX_DISPLAYED" = TRAIT_PARALLAX_DISPLAYED, ), /datum/wound = list( "TRAIT_WOUND_SCANNED" = TRAIT_WOUND_SCANNED, diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index b4b4bc0af17..6af2635972b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -393,7 +393,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( screenmob.reload_fullscreen() if(screenmob == mymob) - update_parallax_pref(screenmob) + update_parallax_pref() else viewmob.hud_used.update_parallax_pref() diff --git a/code/_onclick/hud/parallax/parallax.dm b/code/_onclick/hud/parallax/parallax.dm index 9ed21d8e073..eaebdbfcaf5 100644 --- a/code/_onclick/hud/parallax/parallax.dm +++ b/code/_onclick/hud/parallax/parallax.dm @@ -1,117 +1,76 @@ +/// Decides if parallax should be rendered or not, and sets things up accordingly +/datum/hud/proc/check_parallax() + var/client/displaying_client = mymob.client + if(isnull(displaying_client.parallax_rock)) + displaying_client.parallax_rock = new(null, null, displaying_client) -/datum/hud/proc/create_parallax(mob/viewmob) - var/mob/screenmob = viewmob || mymob - var/client/C = screenmob.client + /// Applies our preferences to our existing display + apply_parallax_pref() + var/atom/movable/screen/parallax_home/rock = displaying_client?.parallax_rock - if (!apply_parallax_pref(viewmob)) //don't want shit computers to crash when specing someone with insane parallax, so use the viewer's pref - for(var/atom/movable/screen/plane_master/parallax as anything in get_true_plane_masters(PLANE_SPACE_PARALLAX)) - parallax.hide_plane(screenmob) - return + // Because other parts of the code can just REMOVE US FROM THE SCREEN for no reason as a joke + if (rock.displaying_layers) + ADD_TRAIT(src, TRAIT_PARALLAX_DISPLAYED, TRAIT_GENERIC) + displaying_client.screen |= rock + else + REMOVE_TRAIT(src, TRAIT_PARALLAX_DISPLAYED, TRAIT_GENERIC) + displaying_client.screen -= rock - for(var/atom/movable/screen/plane_master/parallax as anything in get_true_plane_masters(PLANE_SPACE_PARALLAX)) - parallax.unhide_plane(screenmob) - - if(isnull(C.parallax_rock)) - C.parallax_rock = new(null, src) - C.screen |= C.parallax_rock - - if(!length(C.parallax_layers_cached)) - C.parallax_layers_cached = list() - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, src) - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_2(null, src) - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/planet(null, src) - if(SSparallax.random_layer) - C.parallax_layers_cached += new SSparallax.random_layer.type(null, src, FALSE, SSparallax.random_layer) - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_3(null, src) - - C.parallax_layers = C.parallax_layers_cached.Copy() - - if (length(C.parallax_layers) > C.parallax_layers_max) - C.parallax_layers.len = C.parallax_layers_max - - C.parallax_rock.vis_contents = C.parallax_layers - // We could do not do parallax for anything except the main plane group - // This could be changed, but it would require refactoring this whole thing - // And adding non client particular hooks for all the inputs, and I do not have the time I'm sorry :( - for(var/atom/movable/screen/plane_master/plane_master as anything in screenmob.hud_used.get_true_plane_masters(PLANE_SPACE)) - if(screenmob != mymob) - C.screen -= locate(/atom/movable/screen/plane_master/parallax_white) in C.screen - C.screen += plane_master - // this color makes parallax not black - plane_master.color = list( - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 1, 1, 1, 1, - 0, 0, 0, 0 - ) - -/datum/hud/proc/remove_parallax(mob/viewmob) - var/mob/screenmob = viewmob || mymob - var/client/C = screenmob.client - C.screen -= (C.parallax_rock) - for(var/atom/movable/screen/plane_master/plane_master as anything in screenmob.hud_used.get_true_plane_masters(PLANE_SPACE)) - if(screenmob != mymob) - C.screen -= locate(/atom/movable/screen/plane_master/parallax_white) in C.screen - C.screen += plane_master - plane_master.color = initial(plane_master.color) - C.parallax_layers = null - -/datum/hud/proc/apply_parallax_pref(mob/viewmob) - var/mob/screenmob = viewmob || mymob - var/turf/screen_location = get_turf(screenmob) +/datum/hud/proc/apply_parallax_pref() + var/turf/screen_location = get_turf(mymob) + var/client/displaying_client = mymob.client + var/atom/movable/screen/parallax_home/rock = displaying_client.parallax_rock if(SSmapping.level_trait(screen_location?.z, ZTRAIT_NOPARALLAX)) - return FALSE + rock.set_layer_settings(layers_to_draw = 0, draw_old_space = FALSE, animate_parallax = FALSE) + return - if (SSlag_switch.measures[DISABLE_PARALLAX] && !HAS_TRAIT(viewmob, TRAIT_BYPASS_MEASURES)) - return FALSE + if (SSlag_switch.measures[DISABLE_PARALLAX] && !HAS_TRAIT(mymob, TRAIT_BYPASS_MEASURES)) + rock.set_layer_settings(layers_to_draw = 0, draw_old_space = FALSE, animate_parallax = FALSE) + return - var/client/C = screenmob.client // Default to HIGH - var/parallax_selection = C?.prefs.read_preference(/datum/preference/choiced/parallax) || PARALLAX_HIGH + var/parallax_selection = displaying_client?.prefs.read_preference(/datum/preference/choiced/parallax) || PARALLAX_HIGH switch(parallax_selection) if (PARALLAX_INSANE) - C.parallax_layers_max = 5 - C.do_parallax_animations = TRUE - return TRUE + rock.set_layer_settings(layers_to_draw = 5, draw_old_space = FALSE, animate_parallax = TRUE) + return if(PARALLAX_HIGH) - C.parallax_layers_max = 4 - C.do_parallax_animations = TRUE - return TRUE + rock.set_layer_settings(layers_to_draw = 4, draw_old_space = FALSE, animate_parallax = TRUE) + return if (PARALLAX_MED) - C.parallax_layers_max = 3 - C.do_parallax_animations = TRUE - return TRUE + rock.set_layer_settings(layers_to_draw = 3, draw_old_space = FALSE, animate_parallax = TRUE) + return if (PARALLAX_LOW) - C.parallax_layers_max = 1 - C.do_parallax_animations = FALSE - return TRUE + rock.set_layer_settings(layers_to_draw = 1, draw_old_space = FALSE, animate_parallax = FALSE) + return + + if (PARALLAX_BOOMER) + rock.set_layer_settings(layers_to_draw = 0, draw_old_space = TRUE, animate_parallax = TRUE) + return if (PARALLAX_DISABLE) - return FALSE + rock.set_layer_settings(layers_to_draw = 0, draw_old_space = FALSE, animate_parallax = FALSE) + return -/datum/hud/proc/update_parallax_pref(mob/viewmob) - var/mob/screen_mob = viewmob || mymob - if(!screen_mob.client) +/datum/hud/proc/update_parallax_pref() + if(!mymob.client) return - remove_parallax(screen_mob) - create_parallax(screen_mob) - update_parallax(screen_mob) + check_parallax() + update_parallax() // This sets which way the current shuttle is moving (returns true if the shuttle has stopped moving so the caller can append their animation) -/datum/hud/proc/set_parallax_movedir(new_parallax_movedir = NONE, skip_windups, mob/viewmob) +/datum/hud/proc/set_parallax_movedir(new_parallax_movedir = NONE, skip_windups) . = FALSE - var/mob/screenmob = viewmob || mymob - var/client/C = screenmob.client - if(new_parallax_movedir == C.parallax_movedir) + var/client/displaying_client = mymob.client + if(new_parallax_movedir == displaying_client.parallax_movedir) return - var/animation_dir = new_parallax_movedir || C.parallax_movedir + var/animation_dir = new_parallax_movedir || displaying_client.parallax_movedir var/matrix/new_transform switch(animation_dir) if(NORTH) @@ -124,17 +83,17 @@ new_transform = matrix(1, 0,-480, 0, 1, 0) var/longest_timer = 0 - for(var/key in C.parallax_animate_timers) - deltimer(C.parallax_animate_timers[key]) - C.parallax_animate_timers = list() - for(var/atom/movable/screen/parallax_layer/layer as anything in C.parallax_layers) + for(var/key in displaying_client.parallax_animate_timers) + deltimer(displaying_client.parallax_animate_timers[key]) + displaying_client.parallax_animate_timers = list() + for(var/atom/movable/screen/parallax_layer/layer as anything in displaying_client.parallax_rock.parallax_layers) var/scaled_time = PARALLAX_LOOP_TIME / layer.speed if(new_parallax_movedir == NONE) // If we're stopping, we need to stop on the same dime, yeah? scaled_time = PARALLAX_LOOP_TIME longest_timer = max(longest_timer, scaled_time) if(skip_windups) - update_parallax_motionblur(C, layer, new_parallax_movedir, new_transform) + update_parallax_motionblur(displaying_client, layer, new_parallax_movedir, new_transform) continue layer.transform = new_transform @@ -144,15 +103,15 @@ //queue up another animate so lag doesn't create a shutter animate(transform = new_transform, time = 0) animate(transform = matrix(), time = scaled_time / 2) - C.parallax_animate_timers[layer] = addtimer(CALLBACK(src, PROC_REF(update_parallax_motionblur), C, layer, new_parallax_movedir, new_transform), scaled_time, TIMER_CLIENT_TIME|TIMER_STOPPABLE) + displaying_client.parallax_animate_timers[layer] = addtimer(CALLBACK(src, PROC_REF(update_parallax_motionblur), displaying_client, layer, new_parallax_movedir, new_transform), scaled_time, TIMER_CLIENT_TIME|TIMER_STOPPABLE) - C.dont_animate_parallax = world.time + min(longest_timer, PARALLAX_LOOP_TIME) - C.parallax_movedir = new_parallax_movedir + displaying_client.dont_animate_parallax = world.time + min(longest_timer, PARALLAX_LOOP_TIME) + displaying_client.parallax_movedir = new_parallax_movedir -/datum/hud/proc/update_parallax_motionblur(client/C, atom/movable/screen/parallax_layer/layer, new_parallax_movedir, matrix/new_transform) - if(!C) +/datum/hud/proc/update_parallax_motionblur(client/displaying_client, atom/movable/screen/parallax_layer/layer, new_parallax_movedir, matrix/new_transform) + if(!displaying_client) return - C.parallax_animate_timers -= layer + displaying_client.parallax_animate_timers -= layer // If we are moving in a direction, we used the QUAD_EASING function with EASE_IN // This means our position function is x^2. This is always LESS then the linear we're using here @@ -164,33 +123,34 @@ animate(layer, transform = new_transform, time = 0, loop = -1, flags = ANIMATION_END_NOW) animate(transform = matrix(), time = scaled_time) -/datum/hud/proc/update_parallax(mob/viewmob) - var/mob/screenmob = viewmob || mymob - var/client/C = screenmob.client - var/turf/posobj = get_turf(C.eye) +/datum/hud/proc/update_parallax() + var/client/displaying_client = mymob.client + var/turf/posobj = get_turf(displaying_client.eye) if(!posobj) return var/area/areaobj = posobj.loc // Update the movement direction of the parallax if necessary (for shuttles) - set_parallax_movedir(areaobj.parallax_movedir, FALSE, screenmob) + set_parallax_movedir(areaobj.parallax_movedir, FALSE, mymob) - if(!C.previous_turf || (C.previous_turf.z != posobj.z)) - C.previous_turf = posobj + if(!displaying_client.previous_turf || (displaying_client.previous_turf.z != posobj.z)) + displaying_client.previous_turf = posobj //Doing it this way prevents parallax layers from "jumping" when you change Z-Levels. - var/offset_x = posobj.x - C.previous_turf.x - var/offset_y = posobj.y - C.previous_turf.y + var/offset_x = posobj.x - displaying_client.previous_turf.x + var/offset_y = posobj.y - displaying_client.previous_turf.y - var/glide_rate = round(ICON_SIZE_ALL / screenmob.glide_size * world.tick_lag, world.tick_lag) - C.previous_turf = posobj + var/glide_rate = round(ICON_SIZE_ALL / mymob.glide_size * world.tick_lag, world.tick_lag) + displaying_client.previous_turf = posobj var/largest_change = max(abs(offset_x), abs(offset_y)) var/max_allowed_dist = (glide_rate / world.tick_lag) + 1 - // If we aren't already moving/don't allow parallax, have made some movement, and that movement was smaller then our "glide" size, animate - var/run_parralax = (C.do_parallax_animations && glide_rate && !areaobj.parallax_movedir && C.dont_animate_parallax <= world.time && largest_change <= max_allowed_dist) + var/atom/movable/screen/parallax_home/rock = displaying_client.parallax_rock - for(var/atom/movable/screen/parallax_layer/parallax_layer as anything in C.parallax_layers) + // If we aren't already moving/don't allow parallax, have made some movement, and that movement was smaller then our "glide" size, animate + var/run_parralax = (rock.animate_parallax && glide_rate && !areaobj.parallax_movedir && displaying_client.dont_animate_parallax <= world.time && largest_change <= max_allowed_dist) + + for(var/atom/movable/screen/parallax_layer/parallax_layer as anything in rock.parallax_layers) var/our_speed = parallax_layer.speed var/change_x var/change_y @@ -232,15 +192,15 @@ /atom/movable/proc/update_parallax_contents() for(var/mob/client_mob as anything in client_mobs_in_contents) - if(length(client_mob?.client?.parallax_layers) && client_mob.hud_used) + if(client_mob?.client?.parallax_rock?.displaying_layers && client_mob.hud_used) client_mob.hud_used.update_parallax() /mob/proc/update_parallax_teleport() //used for arrivals shuttle - if(client?.eye && hud_used && length(client.parallax_layers)) + if(client?.eye && hud_used && client?.parallax_rock?.displaying_layers) var/area/areaobj = get_area(client.eye) hud_used.set_parallax_movedir(areaobj.parallax_movedir, TRUE) -// Root object for parallax, all parallax layers are drawn onto this +// Root object for parallax, all parallax layers are drawn onto this and it manages them INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_home) /atom/movable/screen/parallax_home icon = null @@ -248,6 +208,87 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_home) plane = PLANE_SPACE_PARALLAX screen_loc = "CENTER-7,CENTER-7" mouse_opacity = MOUSE_OPACITY_TRANSPARENT + /// Layers we are currently displaying + var/list/atom/movable/screen/parallax_layer/parallax_layers = list() + /// Pallet of layers we CAN display if we choose to, depending on our client's prefs + /// ensures quick removal/reinsertion doesn't cause cycling qdels + var/list/atom/movable/screen/parallax_layer/parallax_layers_cached = list() + /// How many normal space layers we want to draw, in increasing order of "depth" + var/layers_to_draw = 0 + /// If we want to draw the old space layer + var/draw_old_space = FALSE + /// Are we currently displaying any layers? + var/displaying_layers = FALSE + /// Are we animating parallax? + var/animate_parallax = FALSE + /// The client that owns us + var/client/owner + +/atom/movable/screen/parallax_home/Initialize(mapload, datum/hud/hud_owner, client/owner) + . = ..() + src.owner = owner + +/atom/movable/screen/parallax_home/Destroy() + clear_layers() + owner = null + return ..() + +/atom/movable/screen/parallax_home/proc/display_layers() + if(displaying_layers || length(parallax_layers_cached) == 0) + return + parallax_layers = parallax_layers_cached + vis_contents = parallax_layers_cached + displaying_layers = TRUE + +/atom/movable/screen/parallax_home/proc/hide_layers() + if(!displaying_layers) + return + parallax_layers = list() + vis_contents = list() + displaying_layers = FALSE + +/atom/movable/screen/parallax_home/proc/set_layer_settings(layers_to_draw, draw_old_space, animate_parallax) + src.animate_parallax = animate_parallax + if(src.layers_to_draw == layers_to_draw && src.draw_old_space == draw_old_space) + return + src.layers_to_draw = layers_to_draw + src.draw_old_space = draw_old_space + regenerate_layers() + +/atom/movable/screen/parallax_home/proc/generate_space_layer(index) + switch(index) + if(1) + return new /atom/movable/screen/parallax_layer/layer_1(null, null, owner) + if(2) + return new /atom/movable/screen/parallax_layer/layer_2(null, null, owner) + if(3) + return new /atom/movable/screen/parallax_layer/planet(null, null, owner) + if(4) + if(SSparallax.random_layer) + return new SSparallax.random_layer.type(null, null, owner, FALSE, SSparallax.random_layer) + else + return new /atom/movable/screen/parallax_layer/layer_3(null, null, owner) + if(5) + if(SSparallax.random_layer) + return new /atom/movable/screen/parallax_layer/layer_3(null, null, owner) + +/atom/movable/screen/parallax_home/proc/regenerate_layers() + clear_layers() + if(layers_to_draw == 0 && !draw_old_space) + return + + parallax_layers_cached = list() + for(var/space_layer in 1 to layers_to_draw) + parallax_layers_cached += generate_space_layer(space_layer) + + if(draw_old_space) + parallax_layers_cached += new /atom/movable/screen/parallax_layer/old(null, null, owner) + + display_layers() + +/atom/movable/screen/parallax_home/proc/clear_layers() + hide_layers() + QDEL_LIST(parallax_layers_cached) // We need parallax to always pass its args down into initialize, so we immediate init it INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) @@ -261,8 +302,10 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) blend_mode = BLEND_ADD plane = PLANE_SPACE_PARALLAX mouse_opacity = MOUSE_OPACITY_TRANSPARENT + /// View size we're being rendered with + var/working_view = "" -/atom/movable/screen/parallax_layer/Initialize(mapload, datum/hud/hud_owner, template = FALSE) +/atom/movable/screen/parallax_layer/Initialize(mapload, datum/hud/hud_owner, client/owner, template = FALSE) . = ..() // Parallax layers are independent of hud, they care about client // Not doing this will just create a bunch of hard deletes @@ -271,42 +314,48 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) if(template) return - var/client/boss = hud_owner?.mymob?.canon_client - - if(!boss) // If this typepath all starts to harddel your culprit is likely this + if(!owner) // If this typepath all starts to harddel your culprit is likely this return INITIALIZE_HINT_QDEL // I do not want to know bestie - var/view = boss.view || world.view + var/view = owner.view || world.view update_o(view) - RegisterSignal(boss, COMSIG_VIEW_SET, PROC_REF(on_view_change)) + RegisterSignal(owner, COMSIG_VIEW_SET, PROC_REF(on_view_change)) /atom/movable/screen/parallax_layer/proc/on_view_change(datum/source, new_size) SIGNAL_HANDLER update_o(new_size) -/atom/movable/screen/parallax_layer/proc/update_o(view) - if (!view) - view = world.view - var/static/pixel_grid_size = ICON_SIZE_ALL * 15 - var/static/parallax_scaler = ICON_SIZE_ALL / pixel_grid_size +/atom/movable/screen/parallax_layer/proc/update_o(new_view) + if(working_view == new_view) + return + working_view = new_view + update_appearance() + +/atom/movable/screen/parallax_layer/update_overlays() + . = ..() + var/overlay_view = working_view + if (!overlay_view) + overlay_view = world.view + var/pixel_grid_size = ICON_SIZE_ALL * 15 + var/parallax_scaler = ICON_SIZE_ALL / pixel_grid_size // Turn the view size into a grid of correctly scaled overlays - var/list/viewscales = getviewsize(view) + var/list/viewscales = getviewsize(overlay_view) // This could be half the size but we need to provide space for parallax movement on mob movement, and movement on scroll from shuttles, so like this instead var/countx = (CEILING((viewscales[1] / 2) * parallax_scaler, 1) + 1) var/county = (CEILING((viewscales[2] / 2) * parallax_scaler, 1) + 1) - var/list/new_overlays = new for(var/x in -countx to countx) for(var/y in -county to county) if(x == 0 && y == 0) continue - var/mutable_appearance/texture_overlay = mutable_appearance(icon, icon_state) + var/mutable_appearance/texture_overlay = tileable_appearance() texture_overlay.pixel_w += pixel_grid_size * x texture_overlay.pixel_z += pixel_grid_size * y - new_overlays += texture_overlay - cut_overlays() - add_overlay(new_overlays) + . += texture_overlay + +/atom/movable/screen/parallax_layer/proc/tileable_appearance() + return mutable_appearance(icon, icon_state) /atom/movable/screen/parallax_layer/layer_1 icon_state = "layer1" @@ -323,6 +372,34 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) speed = 1.4 layer = 3 +/atom/movable/screen/parallax_layer/old + icon = null + icon_state = null // dog there's gonna be so many overlays... + speed = 0.6 + layer = 1 // Draws on its own + +/atom/movable/screen/parallax_layer/old/tileable_appearance() + var/mutable_appearance/copy = mutable_appearance(null, "") + // We have to use render targets to draw one of these flat and reuse it for this because FOR SOME REASON + // 16 (tile count) * (14 (animated state count) * 4 (frame count) + 1 (1 is not animated)) 480x480 states + // is TOO MUCH for the client. Whatever, see if I care. + copy.render_source = "*old_space_parallax" + return copy + +/atom/movable/screen/parallax_layer/old/update_overlays() + . = ..() + var/mutable_appearance/relayed_overlay = mutable_appearance('icons/effects/old_parallax.dmi', "1", appearance_flags = RESET_TRANSFORM|PIXEL_SCALE|KEEP_TOGETHER|KEEP_APART) + var/list/old_states = list("19", "21", "23", "24", "26", "29", "30", "31", "34", "35", "36", "37", "43", "46") + var/list/holder_overlays = list() + for(var/state in old_states) + holder_overlays += mutable_appearance('icons/effects/old_parallax.dmi', state) + relayed_overlay.overlays = holder_overlays + relayed_overlay.render_target = "*old_space_parallax" + // Renders the like, "input" appearance we draw to everything else + . += relayed_overlay + // The 0,0 appearance, can't reuse relayed_overlay for this because otherwise transforms would stack + . += tileable_appearance() + /atom/movable/screen/parallax_layer/planet icon_state = "planet" blend_mode = BLEND_OVERLAY @@ -330,17 +407,16 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) speed = 3 layer = 30 -/atom/movable/screen/parallax_layer/planet/Initialize(mapload, datum/hud/hud_owner) +/atom/movable/screen/parallax_layer/planet/Initialize(mapload, datum/hud/hud_owner, client/owner) . = ..() - var/client/boss = hud_owner?.mymob?.canon_client - if(!boss) + if(!owner) return var/static/list/connections = list( COMSIG_MOVABLE_Z_CHANGED = PROC_REF(on_z_change), COMSIG_MOB_LOGOUT = PROC_REF(on_mob_logout), ) - AddComponent(/datum/component/connect_mob_behalf, boss, connections) - on_z_change(hud_owner?.mymob) + AddComponent(/datum/component/connect_mob_behalf, owner, connections) + on_z_change(owner.mob) /atom/movable/screen/parallax_layer/planet/proc/on_mob_logout(mob/source) SIGNAL_HANDLER diff --git a/code/_onclick/hud/parallax/random_layer.dm b/code/_onclick/hud/parallax/random_layer.dm index 379c0cbe2d9..51cf69a92c0 100644 --- a/code/_onclick/hud/parallax/random_layer.dm +++ b/code/_onclick/hud/parallax/random_layer.dm @@ -4,7 +4,7 @@ speed = 2 layer = 3 -/atom/movable/screen/parallax_layer/random/Initialize(mapload, datum/hud/hud_owner, template, atom/movable/screen/parallax_layer/random/twin) +/atom/movable/screen/parallax_layer/random/Initialize(mapload, datum/hud/hud_owner, client/owner, template, atom/movable/screen/parallax_layer/random/twin) . = ..() if(twin) diff --git a/code/_onclick/hud/rendering/plane_master_group.dm b/code/_onclick/hud/rendering/plane_master_group.dm index 433fb715836..17a7e1b8d26 100644 --- a/code/_onclick/hud/rendering/plane_master_group.dm +++ b/code/_onclick/hud/rendering/plane_master_group.dm @@ -34,12 +34,13 @@ if(our_hud) our_hud.master_groups -= key hide_hud() + var/datum/hud/old_hud = our_hud our_hud = new_hud if(new_hud) our_hud.master_groups[key] = src show_hud() build_planes_offset(our_hud, active_offset) - SEND_SIGNAL(src, COMSIG_GROUP_HUD_CHANGED, our_hud) + SEND_SIGNAL(src, COMSIG_GROUP_HUD_CHANGED, old_hud, our_hud) /// Display a plane master group to some viewer, so show all our planes to it /datum/plane_master_group/proc/attach_to(datum/hud/viewing_hud) diff --git a/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm index 0599f56df34..36fd9f37d2d 100644 --- a/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm +++ b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm @@ -67,6 +67,36 @@ . = ..() add_relay_to(GET_NEW_PLANE(RENDER_PLANE_EMISSIVE, offset), relay_layer = EMISSIVE_SPACE_LAYER) +/atom/movable/screen/plane_master/parallax_white/set_home(datum/plane_master_group/home) + . = ..() + if(home) + RegisterSignal(home, COMSIG_GROUP_HUD_CHANGED, PROC_REF(hud_changed)) + hud_changed(null, null, home.our_hud) + +/atom/movable/screen/plane_master/parallax_white/proc/hud_changed(datum/source, datum/hud/old_hud, datum/hud/new_hud) + SIGNAL_HANDLER + if(old_hud) + UnregisterSignal(old_hud, list(SIGNAL_ADDTRAIT(TRAIT_PARALLAX_DISPLAYED), SIGNAL_REMOVETRAIT(TRAIT_PARALLAX_DISPLAYED)), PROC_REF(parallax_updated)) + if(new_hud) + RegisterSignals(new_hud, list(SIGNAL_ADDTRAIT(TRAIT_PARALLAX_DISPLAYED), SIGNAL_REMOVETRAIT(TRAIT_PARALLAX_DISPLAYED)), PROC_REF(parallax_updated)) + parallax_updated(new_hud) + +/atom/movable/screen/plane_master/parallax_white/proc/parallax_updated(datum/source) + SIGNAL_HANDLER + if(isnull(home.our_hud?.mymob)) + return + if(HAS_TRAIT(home.our_hud, TRAIT_PARALLAX_DISPLAYED)) + // Gives parallax a fullwhite backdrop to multiply against + color = list( + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, 1, 1, 1, + 0, 0, 0, 0 + ) + else + color = initial(color) + ///Contains space parallax /atom/movable/screen/plane_master/parallax name = "Parallax" @@ -92,6 +122,29 @@ narsie_start_midway(GLOB.narsie_effect_last_modified) // We assume we're on the start, so we can use this number offset_increase(0, SSmapping.max_plane_offset) +/atom/movable/screen/plane_master/parallax/set_home(datum/plane_master_group/home) + . = ..() + if(home) + RegisterSignal(home, COMSIG_GROUP_HUD_CHANGED, PROC_REF(hud_changed)) + hud_changed(null, null, home.our_hud) + +/atom/movable/screen/plane_master/parallax/proc/hud_changed(datum/source, datum/hud/old_hud, datum/hud/new_hud) + SIGNAL_HANDLER + if(old_hud) + UnregisterSignal(old_hud, list(SIGNAL_ADDTRAIT(TRAIT_PARALLAX_DISPLAYED), SIGNAL_REMOVETRAIT(TRAIT_PARALLAX_DISPLAYED)), PROC_REF(parallax_updated)) + if(new_hud) + RegisterSignals(new_hud, list(SIGNAL_ADDTRAIT(TRAIT_PARALLAX_DISPLAYED), SIGNAL_REMOVETRAIT(TRAIT_PARALLAX_DISPLAYED)), PROC_REF(parallax_updated)) + parallax_updated(new_hud) + +/atom/movable/screen/plane_master/parallax/proc/parallax_updated(datum/source) + SIGNAL_HANDLER + if(isnull(home.our_hud?.mymob)) + return + if(HAS_TRAIT(home.our_hud, TRAIT_PARALLAX_DISPLAYED)) + show_to(home.our_hud.mymob) + else + hide_from(home.our_hud.mymob) + /atom/movable/screen/plane_master/parallax/proc/on_offset_increase(datum/source, old_offset, new_offset) SIGNAL_HANDLER offset_increase(old_offset, new_offset) @@ -401,19 +454,19 @@ plane = CAMERA_STATIC_PLANE render_relay_planes = list(RENDER_PLANE_GAME) -/atom/movable/screen/plane_master/camera_static/show_to(mob/mymob) +/atom/movable/screen/plane_master/camera_static/set_home(datum/plane_master_group/home) . = ..() - if(!.) - return - var/datum/hud/our_hud = home.our_hud - if(isnull(our_hud)) - return + if(home) + RegisterSignal(home, COMSIG_GROUP_HUD_CHANGED, PROC_REF(hud_changed)) + hud_changed(null, null, home.our_hud) - // We'll hide the slate if we're not seeing through a camera eye - // This can call on a cycle cause we don't clear in hide_from - // Yes this is the best way of hooking into the hud, I hate myself too - RegisterSignal(our_hud, COMSIG_HUD_EYE_CHANGED, PROC_REF(eye_changed), override = TRUE) - eye_changed(our_hud, null, our_hud.mymob?.canon_client?.eye) +/atom/movable/screen/plane_master/camera_static/proc/hud_changed(datum/source, datum/hud/old_hud, datum/hud/new_hud) + SIGNAL_HANDLER + if(old_hud) + UnregisterSignal(old_hud, COMSIG_HUD_EYE_CHANGED, PROC_REF(eye_changed)) + if(new_hud) + RegisterSignal(new_hud, COMSIG_HUD_EYE_CHANGED, PROC_REF(eye_changed)) + eye_changed(new_hud, null, new_hud.mymob?.canon_client?.eye) /atom/movable/screen/plane_master/camera_static/proc/eye_changed(datum/hud/source, atom/old_eye, atom/new_eye) SIGNAL_HANDLER diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm index 4572b66e040..6286dfe3076 100644 --- a/code/_onclick/hud/rendering/render_plate.dm +++ b/code/_onclick/hud/rendering/render_plate.dm @@ -202,6 +202,12 @@ add_filter("emissives", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(EMISSIVE_RENDER_TARGET, offset), flags = MASK_INVERSE)) set_light_cutoff(10) +/atom/movable/screen/plane_master/rendering_plate/lighting/set_home(datum/plane_master_group/home) + . = ..() + if(home) + RegisterSignal(home, COMSIG_GROUP_HUD_CHANGED, PROC_REF(hud_changed)) + hud_changed(null, null, home.our_hud) + /atom/movable/screen/plane_master/rendering_plate/lighting/show_to(mob/mymob) . = ..() if(!.) @@ -217,23 +223,20 @@ backdrop = mymob.overlay_fullscreen("lighting_backdrop_unlit_[home.key]#[offset]", /atom/movable/screen/fullscreen/lighting_backdrop/unlit) SET_PLANE_EXPLICIT(backdrop, PLANE_TO_TRUE(backdrop.plane), src) - // Sorry, this is a bit annoying - // Basically, we only want the lighting plane we can actually see to attempt to render - // If we don't our lower plane gets totally overriden by the black void of the upper plane - var/datum/hud/hud = home.our_hud - // show_to can be called twice successfully with no hide_from call. Ensure no runtimes off the registers from this - if(hud) - RegisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change), override = TRUE) - offset_change(hud?.current_plane_offset || 0) set_light_cutoff(mymob.lighting_cutoff, mymob.lighting_color_cutoffs) /atom/movable/screen/plane_master/rendering_plate/lighting/hide_from(mob/oldmob) . = ..() oldmob.clear_fullscreen("lighting_backdrop_lit_[home.key]#[offset]") oldmob.clear_fullscreen("lighting_backdrop_unlit_[home.key]#[offset]") - var/datum/hud/hud = home.our_hud - if(hud) - UnregisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change)) + +/atom/movable/screen/plane_master/rendering_plate/lighting/proc/hud_changed(datum/source, datum/hud/old_hud, datum/hud/new_hud) + SIGNAL_HANDLER + if(old_hud) + UnregisterSignal(old_hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change)) + if(new_hud) + RegisterSignal(new_hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change)) + offset_change(new_hud?.current_plane_offset || 0) /atom/movable/screen/plane_master/rendering_plate/lighting/proc/on_offset_change(datum/source, old_offset, new_offset) SIGNAL_HANDLER @@ -442,26 +445,22 @@ plane = RENDER_PLANE_MASTER render_relay_planes = list() -/atom/movable/screen/plane_master/rendering_plate/master/show_to(mob/mymob) +/atom/movable/screen/plane_master/rendering_plate/master/set_home(datum/plane_master_group/home) . = ..() - if(!.) - return - if(offset == 0) - return // Non 0 offset render plates will relay up to the transparent plane above them, assuming they're not on the same z level as their target of course - var/datum/hud/hud = home.our_hud - // show_to can be called twice successfully with no hide_from call. Ensure no runtimes off the registers from this - if(hud) - RegisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change), override = TRUE) - offset_change(hud?.current_plane_offset || 0) - -/atom/movable/screen/plane_master/rendering_plate/master/hide_from(mob/oldmob) - . = ..() if(offset == 0) return - var/datum/hud/hud = home.our_hud - if(hud) - UnregisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change)) + if(home) + RegisterSignal(home, COMSIG_GROUP_HUD_CHANGED, PROC_REF(hud_changed)) + hud_changed(null, null, home.our_hud) + +/atom/movable/screen/plane_master/rendering_plate/master/proc/hud_changed(datum/source, datum/hud/old_hud, datum/hud/new_hud) + SIGNAL_HANDLER + if(old_hud) + UnregisterSignal(old_hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change)) + if(new_hud) + RegisterSignal(new_hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change)) + offset_change(new_hud?.current_plane_offset || 0) /atom/movable/screen/plane_master/rendering_plate/master/proc/on_offset_change(datum/source, old_offset, new_offset) SIGNAL_HANDLER diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 28ebd80560f..e7ccfff74c1 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -71,7 +71,7 @@ SUBSYSTEM_DEF(parallax) if(picked_parallax == PARALLAX_NONE) return - random_layer = new picked_parallax(null, /* hud_owner = */ null, /* template = */ TRUE) + random_layer = new picked_parallax(null, /* hud_owner = */ null, /* owner = */ null, /* template = */ TRUE) RegisterSignal(random_layer, COMSIG_QDELETING, PROC_REF(clear_references)) random_layer.get_random_look() @@ -85,8 +85,9 @@ SUBSYSTEM_DEF(parallax) //Parallax is one of the first things to be set (during client join), so rarely is anything fast enough to swap it out //That's why we need to swap the layers out for fast joining clients :/ for(var/client/client as anything in GLOB.clients) - client.parallax_layers_cached?.Cut() - client.mob?.hud_used?.update_parallax_pref(client.mob) + // gotta clear things out + client?.parallax_rock?.set_layer_settings(0, FALSE, FALSE) + client.mob?.hud_used?.update_parallax_pref() /datum/controller/subsystem/parallax/proc/clear_references() SIGNAL_HANDLER diff --git a/code/datums/components/hide_weather_planes.dm b/code/datums/components/hide_weather_planes.dm index 3ef26d53b1a..5b7addb199e 100644 --- a/code/datums/components/hide_weather_planes.dm +++ b/code/datums/components/hide_weather_planes.dm @@ -55,7 +55,7 @@ else care_about.hide_plane(our_lad) -/datum/component/hide_weather_planes/proc/new_hud_attached(datum/source, datum/hud/new_hud) +/datum/component/hide_weather_planes/proc/new_hud_attached(datum/source, datum/hud/old_hud, datum/hud/new_hud) SIGNAL_HANDLER attach_hud(new_hud) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index b1e6181f723..8a0d6f56d5f 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -186,8 +186,6 @@ ///A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call [/atom/proc/examine_more] instead of [/atom/proc/examine] on them when examining var/list/recent_examines - var/list/parallax_layers - var/list/parallax_layers_cached var/atom/movable/screen/parallax_home/parallax_rock ///this is the last recorded client eye by SSparallax/fire() var/atom/movable/movingmob @@ -196,13 +194,8 @@ var/dont_animate_parallax /// Direction our current area wants to move parallax var/parallax_movedir = 0 - /// How many parallax layers to show our client - var/parallax_layers_max = 4 /// Timers for the area directional animation, one for each layer var/list/parallax_animate_timers - /// Do we want to do parallax animations at all? - /// Exists to prevent laptop fires - var/do_parallax_animations = TRUE ///Are we locking our movement input? var/movement_locked = FALSE diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 7a2eee28d87..0efbf0a819e 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -645,8 +645,6 @@ GLOBAL_LIST_INIT(unrecommended_builds, list( QDEL_NULL(tooltips) QDEL_NULL(loot_panel) QDEL_NULL(parallax_rock) - QDEL_LIST(parallax_layers_cached) - parallax_layers = null seen_messages = null Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening diff --git a/code/modules/client/preferences/parallax.dm b/code/modules/client/preferences/parallax.dm index 24cccce2da6..a39a8edd489 100644 --- a/code/modules/client/preferences/parallax.dm +++ b/code/modules/client/preferences/parallax.dm @@ -10,6 +10,7 @@ PARALLAX_HIGH, PARALLAX_MED, PARALLAX_LOW, + PARALLAX_BOOMER, PARALLAX_DISABLE, ) @@ -17,7 +18,7 @@ return PARALLAX_HIGH /datum/preference/choiced/parallax/apply_to_client(client/client, value) - client.mob?.hud_used?.update_parallax_pref(client?.mob) + client.mob?.hud_used?.update_parallax_pref() /datum/preference/choiced/parallax/deserialize(input, datum/preferences/preferences) // Old preferences were numbers, which causes annoyances when diff --git a/icons/effects/old_parallax.dmi b/icons/effects/old_parallax.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cc58e7390e430def61b0e5991539365edf74e192 GIT binary patch literal 96301 zcmag`c_5VE`#+A8qO@p}B&JenS7cwNRY?(rBBq{-N}41)_lTlRQ%Nezv{KXgU}k8{jJap#duFJo*X#ZI{C@p$y6?H~`<&}s=W#vGIoEX^HxFCxn=8Le zUP?-8uKE5wHd0aw;8HC;lNv9TAVq(XoUW@e8bJ+c;w2n2$Kg@sgM;p)|^fxwR7 zk(AUeDJk}1HXq0;eZ|J|h}4e$@2=pcE#T;}D|^m(xm-SX>B>3$MJXx2xa(gF<-@kl zFJ`qG@BPePS6QAt&*_%U@&Tin$vU4EK7Vec;2)}W`fxE1iWSP9KQY#!y^mriDdP3& zgzSg=&iUl-H-%`xg0+p;n=)3AumwmboW&7 z%v8T4((iLa3HHyW)GbFXWz6EbWQAXCI6=GSDd$@+#P)=!9m(=IabL- zO8s@O(=71RIA_M44nx%YFs%N3TdE+Y zy+!>eDn(~OTb}}M;k^D9TPp=;17@kZw(+jcLEB{E_uCkp;|GHB^5!tUA|nO{ge?$v z*)1;b24wT~<qBL7eTyn74{RFjf2!mb>hq zVz${0wG*1labn%v92b-`zHAeXV^2Fd^qB}RRsOn$QO2^KcaUCcceQMnfevYRDa|Qk zodNol^k2{R_T~-g4M(i3ZD^E%6m~x%CCQ3&|>C)kJ}Qeb=-)%n(&OTi;7YjNi&FS$7p?bc{p+0Z(uWLc`q zVW7FIlOMSTR}9wk=(HBWiIBlXS8mgz4f(IdGK*0GKofeVQf5=oy7M$Stv?vLbZ$|7 z?`os6ODyN(eG5D60g5zs&jzp!UxKPVp0k;Iz3hSEg`80tWo}O0p&m`tp#o(vGMQ%C*^iuPa*d0U2GKnWqie$4VFrK3*Ak8;bi$YTub{ zTE_GjF>d=nD`epJxyMhCq=l-m?p6^$R?YME^iC;e@YhY$gs3%QSoeA>!~52dYq=&H z{GBQ_mq+os^G#1q^kKs6E|=yu2MPB>?=J?YSMw6tT;4hFrzQN~v&6uDsE4Y>{wYfD zo2yc$ScIN!*Zxl5+Fe;kmRu#aiw(9{2P1BcCvL5-3be*vz^)n$`8ok)ptUwe%4WDT z{{osqbF=6S#unU(G!OP2Z0H^Snvo1ZF)`%a8MTS?why5@Wd8!`^QmR2o$^Zzvh1qg zNhAxkqjEwPXD@^05}!4Jk=bVS*wjsA=oO?&`Yih1)gmjgb&8FUK3*j_T1GG;aPIk< zSaW8(Bsf~QYGPI4lA0fFH*i^hi>(KG*X26}9-RUrGx@lv@oC5V(r=rJp;LWvJEUOl z^O6;~|D6gjycM-yixzS6tNwy$Z4amR8scv&Vxn|^%axE%_Z0$qSu{GXDM}gW3^sCd zCG;7&Mi>8qAX+sr^wnFperu4|9}ouaS z|1GauGBLJpcQw`j&?0e{um$%kzR5&qnqC6B-_rVRM8~2zM4EV9jmK}|V*eIzK5i}8 zLo}NhpQr$xFJO2div*FF;@ZoYIPA1V&1mbFQyUpUVPb-_i?TOk1}=X0v_LBqd3mp? zH+lhDx~=O!Sfb8jYhJy5`qz116o1hl21rPbp$`%F_*bz4SJxQb#p%zZg#9G8dVXY` znK?;FzDtFgCVdwQ;%d$njdl2U4e=iK^^Y1HoJ#)Ys-(YwofWIoqvs=4y8w6NH+QaG za%lNXZqt-8Nf>A$Z%vGVtaC=IqER6lZj;DvsV@ z^|z4{O|UT7apscp%tzdX~Lb8M2M(P`lR=-RFJ@k`%a2$8TAcLw%)sV?Iv(wNg1{OOdk0U#w16aqmO>%L!hPOn#u+!%sZ# z1h^Gz$xjugr23Y0?R3e+8-@cfh17hiN*(2rNM98?|8m2hC-BL!3T0Ur2~Orh(%|(C z+D0&wJxYh}c9(~ok&%qYWXHo>ZOshIPR^bBTR-*N6Y1KeQ=7|JoA&EY*>&k!sj0tS ztKVd7w)wB!Pil@bI*UduzE%<9eMMp-qD*9%^sguQq##6tau95C5yJ_}RNwd^a z!@KKv&;MH~eK)Uv?Lq!~*pkf$-Yw5r`exJAak&#{dCK4Csx+NDwPNZgo394pzHXh9 zv$R+aiEgL{sm02&yQjXZeb<^%n>+C7zjXB@b%3XuHChFf^B-fe$!hbDs*F);cG!PQ zU6FcS@xNs*eW@t(XvS2{oGPB2fhQGszx5XXpxuhbwhU<>9@;3q6!w^y1Ue6|Da zi&eU`{(ke4ImfyeY<4q&+9xK_HgSh`NdJCMt};m8R)ndn^cknOk&JFjlG-QL*zVN(?;5qcJdAp17vC$bwknAkDZfboYG#!!>^Oo_rzL7T5S@)!gTvi`%hUu=< zi8aqzzSxv!EPc~9@{>CLqgY?B?=^{dreUspGnFDO!RpH)F(E8IR?w+^($;nPogidh zEuF#LM3aq5;lHvCQap~nmzt{PPWxcljPu6hKMl$b>q`Y1%xa<9&y-m6f3)TYb=&;F zrDD+cGp2q`b$gFu$kZ7pEI;IG=Fd6C^_V^N+eez;Qxu$w-QNu|M(##cvni}W;dQNs zS9Z%Vu=iAy6jQGUfCU10cjFtioBc7fJKhPOr}l1m$MukzTHz1-A-3K#Kj|1PQd)D$ z%y%tDO6xlepLJ7Ar}q9a`~z3Hva5Wy-)3WN`p47@#fF6a7r$Ob?4}OL3VkW&H0K%T z2r1TshPXn!0}%>SoMSr2yvImq1d(%( z?WMEYr%#2TF)q!D({R~onBXj8SI+)$?|{rDrr9$di`71D>U;a;q;7cOsUy=~Gl>AQGRXrP3pJSqh&y@t){!VKSXMnd**LqL@augTTA{&JCFP%tt< zL?w6^RFhuDV|xT;?KFZHk7m2Q{Io9;bs2p~xK!i6wR&;RMZ#Jp|2qaw+w=4mVk@~3 zbwN3~F|38JMwwG&c~bZ^UvrpTb@tNF;#b}wpLF>PX7*enrJFVrGoUL^MAQxrbpwy8 z=LN*FOharrRgB@paVKw)%y?5Jl4PYlQI}-HC=Ev**W-Ag4X27+mWV#a28lclx;*IR zyQVDRQGJUX}2s2r}^WehyL#4GWI)518&>ALj zO$@DJS!cpG|LvCr>{Lv|S?1$(+D4}sL%AD9f`j%6sbxHuwoO5KFDwa6m1%I^o!lP1 zP7E5ZpNI3XIrRC@zF{t;LjB#yx1{($>%;d*>u{9fPBF)H-HxR{#zKquR9}M4p^RKC z#L;Lff6B*vA?r3z$RIWu6)*aW(V^tN)z9K_xArAuo$4!e7LF!dGh4->-Aqs0gNHp4 z8ZGO=20;lPU}m6u$QYuDuSM$orpnyxnwBif*IMUiNRST@^N%JcMP@tqembpCbR<%y zycN$j_&{67&IvkuOu<1|eO{QsHdP$uR6ZI;p6+|iJ=D*L+zhOOc!CxC2~ly(Be<*O z_E4+}_Nt^Y@+WsZ9(O3|G1TpTALg2N;|aFk36Fzi7~9RRRAr8~G>}n7!gXviZBV<; z$$JDBg7Xzg!vS-+bsq`RP=_D_$mzOi(~r6TuAC^_E^2EgxM!ZF#q`{FJ9{BDhY<2r zKXSZ&tKX#t>o{YAyLe{n7RYo_wh@h4vGo}7%@u}y?2hBE1Crs>y9qPh6(Iu9{K&|* z_~ZJj$t6VNDn0XNj7xeBVL5H{({lSy;X4x2g9m6tQu|ho|5RQ*u$G!Xk5n!&sBfR}nQ>`#nB&$$zzdxx)dZ8in9dDDfCz)nrLO=sJ zF;{U5WFW9KBKs1QYk;*Wz6G1!pEduz=k4N9w%t_X597LGcv~3y>pMld!#}VpG2Ua( zZtyi^Wbn+ROD`RnwV#8p)54*Z{H#4d`Hy%2W27~W0>`XRN^tNtO?=0WshX>8PS{d) zo;h%1X+N&-{9DmWr>rthgVw&w9lhw6LG^iA*W}RtL2Q?=UXV!%!;paXGqB4)0wWyx zcj*kwudw9E3rcF5&}j8nv-+9Yc}O_+_cTTtyFYUTpG|P@A1cFd6`AoVuAQc+?C77L z@EIG&U7EN4l_x_0^-$J!+Ox65(P@l2k$=!pl{c$2q=UHR7Yp;=-y(AIcn!sj^8mN= z2Nj?)K?&o$=;b&t=Hw~Hyp$HnqNwYBU`uNmo8{1h6phU1QyCdQ;KWS1Y&ik{++gA5Um;`$}9P zYoyoL&HK?&F{&5QC+{!h)^!39GyPCvFmA~Nsw4)v=p6IXHCct) zw*w^aQ7g9F#`LcSSBXeYJq`?yEP87s23U?X`~pn^>M6#zOlQb=!+{xpJG2UdnU2yp zJQB~z%^9`m#u|p7=OGkxL; zxb8*4d3Uwv$WHF3bSsgr`?b=`1``J^3yPXkE2VqrwN>h&~TP=Z&b@h_B264*t+Hdv0VeL-rw%bqAT*KC9C;4tc$339?N)1YvB1BD*+zBT1k4?tgj5vIzgzXvbdSM29?h0?+9~|+aHMv@-P1LbwpQ?N+G!0WKPZ%HBTi| z2e=h25S(`@oFdMb;e>JgCA!S&#-~na+c0R4y>h0o%NLV9?zI?hJ4XJ~4%g!jTQ+4t zr8KK?{m3!h!WMEo>EWCiT$8QJ@=W0CUi^5h{psFZD&+;P$V!m;Wti*}L_f>1H!AYZ z=BKM7hSkD=eKTopZ8P?pH)$k~3fT#y#pqc4MDdU@Owk!FZ6MduL(kECuS|T>CTO~g zR~-_bucBDKgLh9GnwFS2P+LN1eb|zbGa-Ri6vS-TJhN8NMZwh^95;A}G;gYLa#C_M zf?vMuzzuPmr%Lib;3PcR^Uv-bX+=^aUi0IBlQ}4;a&`z3b}vm+3R2hw9=M|K`<;g@ zUd?UesZKP0*N2cpb=;Q^x3My#!2UswliO8xE97W!0|{;*y)Dfu-;Ed0O|a{^Lq?MY z(t&qJ3j;bkk4+T>E3Cc9%AAnPe5^%ujrRMQQ^>=k!Pe7bj{iy`6w)--*y0wWK2~W( z>$pP+;K3ZO$DuTZ2~iB67q}TXR8js@9x@~1(e%Utua8f25Bw^GhS0>tuZkJc>knT= zWNe<5CL+y2oN>qhrHq^{D{PTBL(5A&mO2K%%qtU*$^RMCvnXaIap8WEne^A< zA)NsSPZoXoe2=>CA(trPt;iH~Pv}LX6=B7XGL7gG8`1j|p89jNAM+vBj@Z>Z2U2oqe$ViVX0upZh5bpw#$zZa(CwjYslM z{l9GTH-*^bvKE*@KD!sa&u`7!8b3B+++~cn=1mcZOH^7z9@3oH_97nnGL;klu#+WW zc0ufGi8ZPlj5duwiqbY5!ZCQ}=1qFQpZg#UKOG2Ui`;O6GmqP&RT(S)uPk&fDZf(8 zRdkIXk6*8PA*pR=(CEj6A*V#3dBL1@Ggl&<^w%ZhL z#_;k_#?+6u1VT3QN4r2cV8XypHR9b}E9y0u`UvN-DQ5X_){PXwAENrhGQP}h!MK4d ze!$iqttO{mW}%r>iJ>12wqOQsvSDv7VZ7bnL@9rYH19F=&esL&slO2Tmq1tZRs2g& z?gY$v6D2lu9E-pHGh2ct$E6@t@O~?*_Ta)PGk{A!(kp()p`8B%aCH{U+z254ORhe| zbK7s#)T6<}1~Wvh*MAr41`LZ8U4lm@3*Io~NX1tUeZ|F{dKL1AdI05u}-_S@LH& zEf|p^9Q}Eij1@Atnb&*>0v4eRzvh8}ZCbK3Uuu2o_^oQ=?#~vYfCj4?yU3l)c11@W z*%G|{g{GywCqZT8anxhrUtXLdT#Mi>UzX=`_w$w=2hxh}H}S&aRIFbAd^=%$$V`Cf zw4w!o9gha91A24?s~6R`gavP!|B#c)th)#haneXwGF@C5V66T|YH?WIL&sDlz<&6l zn88}-c@?2r_msZ)|HJW5+aG(!las&B>m(;fem&N;&_y7b`g$FlZj>>0e$2_69|5L7 zckh+;caY{Ex6m?=YEBxg^S>yHO{7t;Noa0{(V}j~&z>R)E}8AVkd34$%14^Z$FGdb zN+9`HFJFf7`dX0ty+Qn-)Y3VCZtZt;FKyl@(eDxsX=eLM$GGXm_=pRh3%l+?j-wq@ zCY`^PfJrkC%)6Nr^W0$f8=3^lCdWw@Ycex$0)I z7k*z7XVZf}o05B`%4lZe zUGkx;^H8;W(^R=8D`prnXE&Lvs{b3sAm4LK|A$k1spz?Pa2vl%nWA?3#Ept46=UgE z8b!KZo-3JwNBetrb#Y#Os<>XPnccm1XBjRC)zE6&!Nz zUl-~wwMYl#{AGi4b^5&a_+ys@j2;hR;lS5hQ}L=dMc?x&$G@nY(I;tfa3{C>wOZSX zk>lxJK{ol}z;aih*rBDJ8Ih=`h%pO0u}6;0L9Eb6Tk)M|F2vEkmGIOrXL|Vh&m)+M z^60;0^Y0rTozRWMU{&IHQ$p z8qb|@tIvgYE)p%c%)g@Qwsg*9gix^ue=@GU`bGt(&KQTaaK7C4E^GzhvtGyGP=tC9 z&z=PlcNaBjaIZV~Rs28w170lMOJkn-rP?#EroeJ)ZRw_&+%~^6T`hB*mAN`$_Oj3^ z4Rl|vGS+O;XCePYZ&;mLcBOui)^I^LLai=h4`Fbz{yE&7$^r+}!NqwqbP5;Vy(S=g z5^CQ>ZSDXxV#K>AXh-_t-`w|RRDTzS_3s-js)~H^l1=3>_t2{t-8Y+wxU&Zb)``RV z|8f;K?wv4CU=W)xOv2Nal;yaItfCUlvkwe~f5Eay_cpTWA9zLWf{mWJ(Ib41!4+bjUQ@#i zG(PaKo8$LzU76-LS?r%ky1cp0*7D?YHCZ>$2OE{Qm_0L_2gRx%R+oe87QDJ2hTyFR z=Kt+Q9fd>JkuViRp_#4)A@clAs}o`ebQT4aYC=J3%Qrk|Rym z>bPD;Fzq%a=biXXufh)txoqrfM+|hkndG`yc>`q~zu3WT@#5tf^8j5}_F53y)D z-IRyRbX@x>>xBin=p#_kCsenB)Dn)^oc}fx^eO&rKm}~P_E~}S$s(@KHp>hQQdm^O ziU?&y8T`l#YJP=*llWA<5$-VC_Aa(dZ+zn7%CMw+OK}W)gz!{0^IL##o<3Yun4r|2 zsD>n&TKVVn5c3NnWUd(y;yBB;vNpD1;F2oeR0Wv+lUs+tE)$XLvrB7Kcl0+5|DIDu zEyG)0%^CK3vd&NWVr8e>J!ZbAXgk;AI0gzce+YIyQs*ba+nfrh)W6KwP2d%9ECGAW zQi)#0Nz>fZAz-itzr9E5dt%S(oc~m<0PBoZfn>k_W~CQE&6yp@kMUjKI$*4%We^?h z^t#yfP+LmB0XKKiZAw!ikztFQ`Aayu3|@5~Z8@20?Q&<|a`d7M%o5js4MZ9$F-UsR z{6;|_M-nW*6GmjT0dz`dzugD^-BeKd?qFS29N^4YYB!3=eic77)t^6BQP{rqvu z?u8r6IT!pDd@wIebLds%3nE2sM~*2vu1?j%ixi!BlEC>RO>V8D*4h@N@+PPC>{~Ux zQX<0%`StQ5>KRk~DxR4mRpxTS zKrZ}NIkm9G{*CBpN4wTXWT;1}7noQGBFC*@bPr&d{AU&uFdJ-w{I5rMAGs3!1@l&p zL1Z|PQa-owHNXb;i73-7vX$3uUx0;Ze;!bMg!={|#SdDY_RA}>LEkDKCEq)re`Q_=uY@36f+zNGP@2^4k-4PoF07Hm^K{hGvL zeP0>E=UTFLR4&D3CaaAPr~Nutm4JC(P6qD;s3ECED-=0ZWEv}eV785?Xv;*VNu%_h zOP5!=i`KG(zuhJc;L=pZ)EnbWL{>4|i%e11sw(_Sqlw&$P_h66j3}TmtG1_pSy2@y zgJE~HPulIr8E@eVT4j`N53P?jCThJE$6ZfI1&vCJ@j(BEuSYXPnRJo6Hs&B)eWMWiK+|JpR-QUk*-JPN@-A$6D0$+IfMI z%c6K76!i$$a!?R$+_g&yKF;?YlzcgpsOB#dLa;sGB9Ogv)Xalp^@w~F3(*Hjn=tU9 zfk4-9KBCh+u7?ex{qj9uqn0L;0*U*_R_iEUa3UF9U^|nph?-eRJP#)#VtoGFx@tT< z0PVMaX=V;Nwovtm%XC04P;tr6;E;Qjn9{5+Hcev)bvW|Mi-RVyor|Wpcx<# z`Bvx%+kiNpmQ1Z>E?tl2+nR!HL=y!b zk8rMNu@(pbJij}ei%XKD6tgpT7Lb-rW->?tM7^D{Qnru_(y9-SAO z$ciX8cwok}ZI`G{w?+Yu7OT!0%ry^z>LP*aH1^ykyv4!ZO!wGVU{9bH&k&9$S{~SO zZM5n*d(LhAgzBV$AZo^+5JX4X7X;WyWR^VBnlO;m}7vu4Av9Gi@Rp z(*B7pLndt3&&nu%FU3SyaLYU1dt^38qIA$`6f(x;MglFf18YfZ~A%g%S&9n&Qw~!kR)^a{T zu0lcs@Z0L@22C!`C5z#jJB%Ov&Xt@l=k(re;)-+VDW9~&3gvJ=5s2s2E5NA&*2Y=| zc=Ko({=BFNcoaW3J=Hp>+VAr?Q~>=kPfi4_q`)40Pp zei?Ihi|vS2&IBkO3q-F4_W>$<1inMW?O1dP19m55=PKrcSpA!^7Zbayi%VMELI_pl zxm@c^-ENM#=SJ;FP z1%nK|)Tx$t5zW-tzYOsoxN@r}^B-YqvzRRa>}>&Rv&67}fPrHB0REy;X8Y!>e`rdZ zj0h3qng2%QH&El{lNlENrg}b4L>?Seo~jw6xiKvPc`*sQQj{r%jV*x9DJY)j5lIo= zC!5@zg4`P+>xjO;az<(+v74EMv!7Ar@C(mX`0X38Xmd5_f*t6BCFsI?KnTI}3#^(2 z!*Bn(6K-+^rHpw8=laUts~yC#(#hEkR!a~kM!R_eu3%DxZxhIW1dyLYK!6!i{&Np) z>)OmI&S%;iw{U;3)qNbP{Iq_1k=PLV**B|4s>e(bZaAO zOM(vxnkW5c8>sI)g2Rmc+pFWJn^TDm4)G*?+H1|~h88RcuZwxf6>{t$Hk9Jmfg0WW zDQkq>O=!3nCKC_Fi-29v(Oh6Ora8?OP}N!?{2Jsyp~4M|L^CX2#^b8TX`lUs`fjiB z@i_Mb!Nc+J_9FfX^pW^cz{G#!jGq)8r10PQ(R|j29>GAXerC|{ebQ>^WVd%w0NFDn zDL|v+|Hm9B_Ey`D6b}5$wBGIN_71tDoV$SO!}i%FP0qETCw;u?9wgx!auSSk&1h5w zY%&Wj0q~2aY1}3RHtK;8_IJg5($8=N?lp`v)|&jlA~uBfxRG<_UaZ-r&S`1 z9U%C*Vukzz82lc9vLXOp1c5NVXJte4zeGMDpbIaK7&}Z#$?*;0qNtek4Qnjog^&SSQ;8EyS z*8$e+VJE_d-Uythu=P$$=jAP*)<-JjO)fQ_uQxbSQlXa?M_(TD{BbTN^%5zzt#)5J z>OKV492>ct8{lRz&iSFp$iF`!4Lo)M_vUufpA)&9-0R7SW}#h|Mhs0)V1>pnwu=_) zjBs#|`g3Z8IwQBQB3FXYN99%cLpE%xo+`HAx8!n>4M$<(l#wj_c`>qhYa)`3g^MEb zl{cvSRyk>nS@k~I6Gxy5RKNuB165%l>#%5lKjJ4c12&^4GIrjju%8+R)(Vm-`)mz$ zN8TNZ)AArj3@Jzyl<6f^?<2H^LL#7T1y2Ii$T6a-%cB;N!f(K08&Q_ZZGsHkc^B!kqaJ3q z)DwDiwPTojayu6E|(U)M!Tv3Nz$VNSzMKe^7lrZd8S+n>mz-W_0k<2|W zI??2NQ-%3Gb8ENBB5OTirS=@6f}Ejp{ewtj=k)|U-q0ZI;cTc3PUF zoZvq{=XGDf%mN|!rB){Th^eFHLY*Eg=LB)}8D7j0b&+yR9=`=l3yvcoQOPz4eeaSm z7ozlHU3iBEXi2t3LD+{=W#JY7)_Hg-?UIyXd!{KZCW~NQsy5KafXyPW5Y}@uqk%U- zzr7nInP*0elHG5lN)$7Jms^2b<6#KuK&V8VU&WI(1LeL&B|ed;>6|`$$97laYR+}m0*xe6w!pqOVR;uzhWlzQboUCefD7?ETxB0+z?l#L(ws~4V zBSGDusTJM@7K>t0ST0@m31Cmt$6y7jH`<*G`V1!ETyyj~E}hAredr0s@=I;#3Dacl z*$uy*UqnY_jB}jxMDMvV=OsD;xkF?uBNL9%7S$`Vo35e1p%b2kVDTZA9&m_#RT@|#ytpM*#fhs%ek2;-veI^p4BRml0E`O>#dvkQy3L7}Xh{a5L--*I zOk0S#BAMSL%a&axpR8U{5Z@Ev$*2~qYnh8!)*4n74`Wmt~47JePO z&ZDgTIUnB3vuaoBN1i_0jV|fKdf;wMMS^}+BM8JBV6V6?;8ZouD_&pj&z$EygNJ{y zOIXJA%@?Hif-C_KAekBlp6h7?dA<6VuxB^|i_;1^wti z^8@YkRXDTG_okjniZs>$57$qK8pau6!A`IWzg?&`@}A9|+Xq&RLZt=-4QjeEh2C4K zJ3`L0^oFq}+X%^RYebX-e0#~_r;4#kSSd)+=+Oh9Oz#&NJE?uJY6J_JMhT9<+_VRU zx|Pa5&=zYAr+HF4{F99#<178+?MtX@WB8;NLLGL~&%hH2gaUWq@&b$A&Eh^`)eOCY zKjQ{GLEd9z6)~dz1m<^40C?+S%ZZDm*VH*-(tn6;G40jU`fb-3quqUS+>xRSs7K!du|!zi`Upy>4wr;gI3GNv8g(voRuB0C9vlEu);5) zH&}W_qQRhUvEQ$kL0dEO-Mj-UK9bf0w@a2dyN>ind=2~TglTDby%+&0lkQ8_@W>;# z=Q&cT(IX1rT!1U!|2V?@UqYSHGDbfd25NhPf%Isw@>Fv};>Yy}>K_^l zUF654h*~O65yl&XUM}1}2X5t62|9&nnZUZ^&!BcG zJzZ%0u0O0aS`vHkO-L)}FhAt?HM3LSsSzn3MR*#c5nxojG^F}2Kx82Ly$jQ!+f>mI z|J2JrwOp&~QQC0NVD|J>WkRiyF>A0<-L3*HEJ@_sf5I=)0Y@`TZ_2JtRmK1x|MnH; zb=)QYH4psQS!_|pIBSv|oy>C^)Qr>=FWjt|w-K;sag?+6Vy3J89hcA>tgWrT`+cKj z4gx;R$Qm$dx}iBld>9%K+pF0@aBSw*C0U|Fe0=RPIQQF4I9TLyoPd#d2Sd(IPu;p> zKZmo{L0_{nq0>;*d?7X0RoEzCj3llUjZ+?$- z$~s=F0#>W0eX;21n<5=xpRcXPY+5M)6nMIL}ZEhGL$;u*3)vmlPs3`CT3o*Q z>m`a+3U$ei!u{rpiO44|cP?0S9a&gG)zgN^6Ru9)Sx?APm2opSu@N+b)vUd&mag%Fd0yT}k+f;Q+;+s8bIZn<9>Gq$hh|6a*~5Xih6MrY%2h;u`U^(jEfKYq{I-7NG^4Jf+oa}$fM z&=h9fw!~%)A8B2Nj$@#EN*H)$BA=FY3vt}d%3q}k7HHyAcUO7(3yjOUf_E47D2Lba zBlf-gwCeSVW-C8bM_JU{ac)-|X8q^|W`58`EmO#=he}y6dG}|Wcqi_ALZ`Ov`gTLJ zl@L!M+<9vIh$qNJxe9728-$;nk*EIqnE8pD2DI)`0^D z{=kspCD)UopyKy$sXWgQx~x$S=Ep4BfvzwwT18QAZ#nEVkG()xcp=#R)@I1l;? zTn=}MNb>6ZFysn)cfwaqy}(ja-Mgyb7Iij9^N{{!i)xjWibV&gq&TcsGes8mVj9W7 z;OH00fbJNE7&ME|1BXm|Zs20N_S(6{a8R-NAk81x(0^*Kw#FK&oih zz9rlWvf@N6VEZh6%%V};$#0^slXITV+@cgxFJIOH5?Tp297CS2Ux4=b?iRFy<80T! z_0!*y7>Tj0G-ub!HH-FVaveDh4Og!EHs{?@&?kD_Ce#C5tXD_pah*i3?9fa;%`Hy~ zKJJvRNT3UOPquK^PJrXww-5Exp9fk9RTGYEC|4T7I3JJjV3GCM`e!onU~#^#y@%Rz z6P(tY!;O5m8IrKgj;r4`x=t6nVjY zEk&hNqj2$b@;|PCQ5G*PVs(wV@_YEM31pJ3;6_KYpk-shCX7Eui;=cI643Nw+#zo8 zs{hB80x*r`_dXd=t9yQlC8>STP|o|{29Fhe0Lvae+%t!DQ(Ys#l5_}Fg{1CH- zbaUkdwHwWei^G~^g~mK(Q3e^NEx}=ko^CzVFR*N_3YW$^Yz-%Ll6&_>3ilsxAtLX% z+`35k41tr&W%p4sFz^``e?L8X@At~OYjCqFDn^% zBhyix@Jm=dT`vq-#J9+s%VnQ*|-mAIQ;R^dpT>7W2|ytEoO`+vVfj!4(mXA<$!<> z>}=w8%*O#HoMB7#-5qp}02JI6vVY$_JC+xx;h>kcKdY?c0eEqpresTg4t*zludZnd zSx{rx6jgr~eG&~%K%I{ec=g{$WOd}O3WrFdjuwmJxkD$|pCo0QDnU?J^h zi|TaEJ12oJKBL9;{xCO_8AI(=@SI%Y#YYuj_V%!Pg;zJ9&urb#2zM#QDP~rp{j5Mt!=hgzv<$2u{SZP z1V2aeFbr8Lb|uGDzQ?V<-D}UOm~!;o$Zh@URo*7`774}WTcYJMjyGcNYm8eta9uM$ z{)%+ZJ}oR|+q@`o0e1CP5MfAHH>c_~W6{b4gS{60nCuBwK{fcZ#Qs_JIDMHn7B?fm!6ctza#^jGGl)b=0RR29%nit zRJd%<9k2}=$u&MGoDcj(EPikac>(Aow6j%Xsg~@WuL1YNt`z=MIeRn708`Z7hWudL z?DAyYMheE68;@(QS*!%>q6Z8Dg!8Mcf0^7)oXpZ`H%L|byx5T=dX-%i^6k^(w?5-D zMZY{tS80pt=t(orZ%M_^fJU1w7JNHlgUF-(nK7$ga_bz)htjr9?ONh=^BM1* z;U3c(eGP>gtDUIh&#Ns>Ry8AhO{V+itFo4SZtuW!U=mVVXF~|Sp=cxzoV`UU-5y0Hx}K= zy;At_n1{h>kkbKVEk9qo(w%@_bkmfi_A zeh!*zPUt~OU3$(WCGa9QvZ9KicpFOEqv8`H(VW;1Nb!2TP`nsuW&~qznj~b2Zir+q zHL}Y*F0q0GH#$UQ9j~w39;dP=q4LHVd*zNI=b9J8M{#z&O`LTZ!f|Q1n#(cxyl8qXOu&XiR2B4wP_e!0y4#toaEI zO-W~+;D@#y+|4h%1vYlxRLYHJw#D(LNMw~m3mHUHLPGvmG^KrWs`QGz0V4XIB}KxN zE5Y0nB@r=&mJnKERh4LQ-%rH#(!G|55MwoHCjK)|`Ow6dwgr zZ$4LQ{Q(X(_?r`4F1pk;_i-Hm@{fd3wIE1~&>gT|S+h@-hi$Y!x!xr& z^qdbt?{$pU-g5jbt`o@p@SrChT)=WHJ%t_+XY2p@+e_S`xavIv9b?7RR=$EzA;-MM zs-WuDtF1T##}6_me1s}37Eh*i>&=6xdmcI&x!1? z<9tCm-YR28$Npex_ke;6qS|$xPr?%EVTlQ&k1q%LwsITT#9bQeFOMR5&Ig_apj(RZ z^}xmBq`Bs>38b{ViTrSnQho!bXVU#^q_JlIhBxf-X~}wHNKJF(%QpXGK|c7^>Vz)= z>(3-zOe6mqpT^9W7L%=4F+)}ycWdZ&9FNwr81ot3c&ugF_Kh0?m=cvyqG?W1gY9NVVgDvOSQlaZ{APMQ@e zOJSivX?Y3x;r?-oJMr(|4+3MbXu-q1W5Uwg*?V56Y7u%#SKXR&(<|lA5ybRL8E597 zD}2}iGD(uzHa_XV{nYGE4P4Y+`QI@ayxhTEanij#D*L7p-5A)oVa6~{@<$HVI+OZ) zd5$*-*My2Eo<0!)GD+USRb}Qw#({v795m0!Uqeb>;MNN>@c-e#h}Rx{5PU9LV=q7O z-fM-^J_6mA%dc`jC~Q%K8*D^Tii2gXr!9nlQ}*O%PlxrGDr9p1_zqVtyP^tj_ePx; z-Q!XG|8i$glnO%Szh{f~6|#qJl4ADLG#xefItY@%a-h)pR`&QIkTVuoxcD497UW=! z1$dyxNeWTea*10@1@*a`UJ)GIskelyrr9deRo<-o=(XeBlPo@fjf&1u5AHWKpb^}V9Q)ZDpnUlPh4WAWT8bmPC5YB$=$`?`v ztCHvzex@c@TB=qgsGPo&f4U#`FMRk;tK|Zy2CT^cTn2KZADq84m50SVp4oyk@E0u$ z_UU>}eA^)cS(J_sy~B6DcRt`8c`6ZjG8EuICLI*4MG(b*oWcP ziaof!;r0QeVW4L?06Taw$XcXG+0m4VN3T5jKtr`)FPQrtL>goMPKtB;@3onm2e;ND|1rm-tDdt+C@_oQ1IBx*-W0(p-v=rDjr zl7$6w^-cb-?jQPa_rCkbs{eI-RznH)ujs|RUAyt=(pwd#8sH#rF`g$o4nm?EGD{SL zS5bQY%Wr}ks}q03L7U@J9|xXHUoKAgnMpmFs88C(*|mt3k39jZv#)3e&ZSH303<~9 zOAvWh&llH~dbH&KShZn&cwxbj)l0;E3Ci8!ugK}3)5V=gqVg&JuNG-y2cj(S9Gn&7vqkUm#LgD`CNb$C<#OMyigda8e*e)4-If96|UJq2~ceO>p zC5p~#FK--Es=u9haE)QIwb5OH_{}xROj}&kBS6<(+$s#HQR*DOlb5G}yDS>_PIza~ zK?4S$?81&^-v4dI`5kX~X*^wx&6Y8mvPK@|z1+DvANyYXRgW&x5#l#;6u*GByd4_) zpVjVr4JDGWO4->Kj&^a#`srV~E_R;S${Pr&3aeTZSmp%Xchl$#SzrpI3W~Y*7j%la zQLkkxP+o5F=I`mD+)bE-BinhiG-K;*df8KNiYv_zMJ2{ShVcK-&%^2`q{3yqLR_Jj7*IFR9<^oM} z66=U`Zq#FCI|qs>VKD8t>glR7Li9$r_^IdcZKBYY!{R(AGd7lqE&Ip~$g9Vs2ww`) zgT9{!_~7Xxe}F7nk2NnpISWnhwcjuj3$H1~*BA>i->KgdDIs0epG!IWqszMstd{&P z%>YR zT1CRlE8yMJBvFE016Jk@S|83%K*ubS;9vU}6saGyv*J%b03B=INXNl;qby}h3XcvT^> ztNL5xJA;}Cu~Etj3d5))zL2)|jpD0$sx^6z><`e3o~im2PeKbXZ`4cLxP6;2?dDMj z@J>5eN1T-z=F2TW9mB@{hG_W@P@o3oVV&bMu0U@U0u+XQw{mX9`R0M00}eA^|=ca0aIG+CdsFJ;s+vaE z)CGz}l2n%1&%PHAu!G3-0A*U&_)5#r6Ag27w9q2WFRRgf(i8Xg@oFYyGWci}a z&Sod{pAb=J5Pmjk!W}L|H|@}8thE_bTyDP2mL5C$yp;G-l2orTUi{4E;^Ng4_4MBd zK@YR-vB~Xv9H9Ent&F|)rYjx|0Bw!nn_$HW1pAZViyoA%neM zhdGMlK-LrV0f_c)lJQE?YJE*v$%hXVPoxG@bkuNrbH%q32%|fNI?uo~<>nzXYX!Nc zDSwlS~0mqS) zxPNspp)&&CPqogX4xL;DR!6@~u&I5Mbqn@G{Q2(jWUaUHg72=I$%>p^_pz z)XGv_(6-Vc{+!meA_w?h!qI~4hpKuZ%5cfN#ov? zZp*Z8b|q1W+P`I0kS<21PiYYEdSgnm1J`nyin7sC(d9jQDa+kw0XTx6Vs6%=hhKKV zOL&j}5-c11iR6Vksd%Ti(kodP1g^Tj@fxb4U+t-z7-Nw-`TOY()A4jsrAsuV3&I;j zY+?APE7!R-2iYVyx+>tKn4^9GhWKnKS@l*K5b`lBTXDG|dWGgMgy8rL*~@R=#f>5d z07L=dL6<<(Geg#Z8ZEeF@U6P%g!pHlA4OEiG`ac_LCn->eUE?6Tof9gOIIpCC@0L>b_Exl%to*SUS=l)&QUU0Wqpaec@AO=I?lH5pB*solHJf<4Bs^`k>_G3Ur-Uz&d9QjbBlEML@{>nTdm& z^eI0C={vL?kJTG7@@=m!QHi8ISQY@TTSG;%o>xM&%)hPc$l2wW$k)0ZuWl01GXots z4+z+3M8LE3HTHW1e0dacibOrzPke6t{&fH5e_?gg$%(?%CogH#hOQK|$fhSa&eP)_ z(TWdl1;wIHFgHLqpmUe3`cQ-XIRQQ`8sd`=V~Hpu|K4GGd*P$T1DkhV z^+}wG>i3udi|#Fb;;Y^3sy~TI$@N?LKr|rn`NL(=>kX*cjFHh%jr|~Uu|9*@RCE8^ ztw~p%ucH)JIz>a)Lk3giyMDk{KZuib`|#uBwVbASZAKP3xJ>w*}#0WN?F|wbay|vC&-Oy&CT6h57w2pu~l@w7T^ zMM?g>!c?cu78(B&kQ#t@pi*m^daOL`dm6E7MatKneyWwn<#s){AVNiv>sDQ?8;DnH zfZEO;QrnB$QY+MV<)oQ-d433pLHH|kwbIJ{^seu!7oAtn zs8dfRkwo?5>HdSIAcXC-!h#_`hYd~&T@!dI^-t@Zfr{&{+AE*Mg?s?#DHe;;!NorP zsT)-T%Kc@E9EI4T;WgLVtGAYl z#W=1(@N8YjW}TI(7kiJLOiz9N%|TE0hY-wPe+qrjCnXNv4ublFAxp)qHsXYR?n?KV zJ%uTTns-;lMEie@wG^)+-_)3^|qUw!4 zdRlaRK;Zc#daB|evB=rWF-UnxoX+U^B%Ux27OOUp>MfO2`?F=GvJ-N-g?G<%@^=}y zuSF z-10-H@=IoCmgt}IiHKS%m0}B-@6}dow_LrdxEdP__^2bZhxvH$FBKm{gUCryX41)y z=O=a^Acw7A{&V`iO_j1cg!o^8IvwnD1_-`y4w2|u)s@Fr@0l0ka)Lkeom|_cO?|;D zys5@D(-a{{7=eh!vijlJndLzVmi%NW;35fbsibR+s7t<(l!JKSE?*zXQEk$+&^njJ|W(#jN9O=6Lj zd(0r^CKTQ_!#;xX1bR`759xD00x$WBO1z)LvP;!|AAbls`l2Olt*$p~0=9%)*lUm5 zO5%ab$h^8sDF9tK#!`G0)w44b9};(b5DL#Geye}_kVL8n=hvo*VnEC->#jlRZw=W; zFKlz|`qg-Re+ul5O-*{aR#*2uiuhT)e02zZKb8b;;i`vim5_ppYu>qYN4V;#JHTDv z9RPaApajT8^*_a9%0CblFQg+552m_zNDr*h=rJg?5i3^2L?UULoc^Mu7wO7?9JA z)0?YSrj?|1WyH=Hr0a=VzW=%cB(1zd$-jXj*Zr|N9OmAh+kY%YFHq^Y4__4cV|wn@ zNQqk3cK4W*Z2)buT9gj@W&Np}QH=+y$mrJ%4Se++2|9);35Q#S`k8N2Rsui3p!fr(jDyc!nv(oaxx!8^bklx~h}*BhZRRVL8U4<2 zpRQ4CuB0yi4(g01J6*iygZ`fLzHc6r045;ro-)wuWh`j`zOo;|LSDWZzcMsyyCU?a zh1;b~YbdsN$=rpL-fnCPyIbI%ja1dAyvN!fpOSy()K~SH z20klh=vHs9HF}uqy%W6s-Rb8w*zn__GP6aD{SUajQVmDUs+qZ+IZ*I&2#t)D~P-8D2b=lGaE0ku(|zolISI2^Bc zGu;;*2k5gB*~qPNxXaVlt?<@hbQ`e6yE*0GD5gL57t*A^#fBW+G8-3nJ1MG_I(5zywao=T;sgugL zgPSb|ZcQX%7PT2q2N!LX*)A4&ZT^efJ=_vC-Rv}XYK!O9{73fRicen!nvjIa*p`1t zP#Hj)yhyojdcS)%tPp7c4YJ_IKvpk&l}Q;RA0uj>-ch?0$5@|N_H>4-Sv;jJXzx4k zIpQ|)mvhwv6h<`NFk}zVjncy$U%epQ>RTnO#cl5J)k-5j5AhR+FMm!>^wLFb9Y2!kf!IkcWO|}SU&4{TRwvvq9& zMRmMq8u=@0sZ8;|UzA5)$a3R(Gj}qz>JmBB_Y^`{l}R62ySgyG`}C?4J7E5@1KiJS zDEkm9&k+eE7>XKw7uK6lqWSn*1q*)_N1^k6?knK`?V;8{Qslddf#^w~zX5*7xp4g# z|N6pOAA3HR*1BCJ`}K8O^!8Rl5ndb44k9z;EjJyLjs*J2x1jB*rezrnHRW}j0RSQI zd;92pRHt#>?}0WY^eC*5DzJLAw@0#`5FdZ`(86D%C^lub-}-+62kY95`vZTLEd}}! zxPCliu<5Git`Oj|+=RL@A|4%eyDFoH({gQFzPsH~6nbJOsB~ ze7W?^;SvZ7hrQ6i`d_9U+cr>eLLvClpAel_sF%iQQCg*5HXt7a?yQUf?zGu4^7Ejh zyRcMFPgybK$g&2dS8##9W6X|H@5i&rPdZZa`kN;u+)gun&RAsWY2|wZ=uh$e$uh%> z+Md>ZAya-&6Blv!yn8vuolqaOaz7opIq#+Q0>!#+7x&qW9e*qp%-~r%21WkXW;{t2 zu&c~=Cinv{x09CjHC}T%#G7_m4;}zEu`#h05{->N+>+G_g?EE_ss^FQ)j}p&@ zMjFk~-AitnY+X2%1|b^69uNN5OIs=Udn%jCqV;6GTOV8DtiBI7AEzwx^LxGJdi)$i z4z}{wOVo3SK}^C#)DwO?DZQ0Cc|R%V0%Z9UclAH+2AxE2 zI~@4V3i7!pH=$Y2#nP_4rY(<8dHfi@A!oA8T6qadd_##QfeyeZi0+iOv)cn{EuakG z`u*2s4+VMsuGaB7CiT<`S-v#*X`|1LyDdA!JL;1TB^f~D>4NS5{{K{2$A8}Qapbta z&+$Z`2`?R!uA5>u?Q_B16xZ)bhRt+|Cf)VMfSop};Mca4Su*=YF^@+2NR#%-v@RP7 zbwo`TX$uvn^L#HcIw?YW7Hw~ZV+)UDggrOFP1tR-M`L~AAA6?(9O}nU-`5n?rA}A` zaB)eazM#o)zcyQ;yHng{7ujq8biX`JX{2Uxuiq-E+Q25JluC^u_ zyx8b8^&S9_UDhf4;{(8hMv38jM26j1@RUHhrJ1h&`CU&ducX_Sl6S8rH!I?84#iZh zjKAX~{$1{H912JLvdHidxBz2^xZesi2*Ga24mmZE)OdE+w`iY%k&cq-=KeX;i=iy? z^2u=@V(iy*sPE_lk80KL$AxyPBikH&{U8bbk-965VdauM8@;H+=JPVrSLzq_{o;Y8 z3&!`yz20Q^=W}>#G@IdC{ptePn~I+NHR-YiZ~`E-I1?2OS>DcVc*_)t(l@Do@p{bm_RUZ`bZZNG9eg|Fbv?% zeB#mAB%?PJ!8+P*^lvqYyed9#RTfNIBNB<^3ao54d`Xw- ztA%DR#B-r@4TtZp)-gQQ_Z4Kiu>AhFYxobIh`e@pU%xs^2(ONxU6-zFK0MvR!-{^B z6ZJKwv(HSFHJoe{8k4{Ud8V)4VeQX`I;n01Yn(Ov4BEN}Q(t74s}>EFT$~;9*PF%Y z-8F~R9xl2%*=7az(mU|?y9`OTqO}w0fLQ#ox9Q1mW`c(n-*A^5IzCN|Aw9Hi3GcSO zZfb&b@S|8<=>}6tr&r%>>(Aai0z>esD2#q{HA>Z7S7_Cm zi7wso3H^e$KKmN)78x6#&YWrwD9HW^roi;ocU)w(acL|#jTEO$Dh%Ox&9V5jR(nTJ z#462-tFwrCCvCqi>`^MU2-11Z-(DCmJeU^E2)|?zv?c91^;E3$%QUgq`36C z_Ru9kVmd9<#LBw8#@yMqj?SZ`0GcqTxXlO2?3`31KM{p4UasQVJErI35=F?4fAht(~_nJt5(2qYT@E1$#7a}KcT-#>+5Jhz9U`eY)_jv&lj7fbt6 zMT{ifbAkty0uGXT*L}tjM0Hr&d@l$l9_KEGaptC}BcfzkL37s8uq|AgdEYL@)nw?nPwF zDfb`j>utSyo>LN~$)A-XWL zv!wgTW9E$^$x1o({T;x@CQv$`RA9NB7`JY@FcfA3p`J^*LbF2HDc~D0dHsM-@ltr~ z;*_??D|P&E4g2vCQn~M6T&y6y$cIk0;RCy!;iDXb@RO-lE2iA_|x&?P0CoG$&tivqma@GOThZoG-*i~8zVaZR^1VnB% zGH8d3GO-iGhiPoGV38L~bP-va3&hCcC#z*zl-VZ#3dA!?pNc!4Lej!pV-!_xxuDr5 z{_$2Uswa(k(1*tPQ6!kf9g6X4j*ikIKa#wu`h1=o;V^8)%w7Vk+gt!XYpH#XKkxeq zZvvEhm`xSxCa}#^K7ol`QMGdccI!IX@XO%08_GXTe99Ny-G*p70g@>8emiPBXQ#?= z&4?x}qrP1uK7(dsbrv`5wVm^7f(hf8-mkbjpaytSqCpS&6Foq3(qKnOHI>v0l?j?| zjnhP3OfxlrYb<{R+x;1deTLG_f6B_uWC$zJflWo2PAu{mG4u5JFqIP)_N4kL8TVrh zjd-e8y}Jp=ZV!L#ZQLs~mLu*29@Z`+Pr*W+tG~p$JMNvl0G}>N84UOh*$rTJq`P45 zhB=}BK-iPr&!99#DZpoDw=@kuQ;2Vi(6!f6M@QU5B%W`M^zDdc(P78!C;v4X9o$t& z^iC8+eN&`2xj(~brEQj+lxlwo>W`vLwBDrH1X+2s4Qg+iMa;@R7p%GNnv{C3$F0ZQ zbqTsB72u`PR(K#GmuAz{B5^=n4fUKx$5Qo8opD}IQ)&AAW^m%hRN{`h$MmKm6XWP{ zCp-C8onTckx8pug$Zh<}!3Lin4qspf<&sT|-GC1*beN-<<_zS-Ry0!;-AVYYbMW%J zxYEDy6M$_v=cRf>EsreR+H$+4v9!~{5<>ylBEhp7cN8igZekwayRk^En5cY)5Bo|} z)|!V&2@ow9E9kv|vH+HNnZRB;kdA7Ql?`|(5#OJu5jxKhV*wpv%sD} zfFjDxC1C&OOkOvwGp@3uqb$KUA?X9W=NdtJv49Klz6xh(dq=#o#{4FOAvFu61)nh# zP#||k6>o}e^+bN9*=J#!Vhi-MHtD?l>7ikLF2I*^9CjOG_Z&)jl83*4OT)fLQ=<4; zCc5tcfi2nV0e6=#nGC(|EC_0L=CQN&jbKAr;jDOup92;MUZ0<+etqR<*6NE>!6bKC ztBd?Q?_h{z%n>qGVdk6%3$%rT)qeq6+IhZhn%s)X$)%<1(LGPftW$az zz#6VC^d}ovn>YG6amTq{`Wj|CPIHJ^oOUdx-~q~b)>%4wGpF=N<{QtpLq95IpV zR1BYzgwT&~+uAU3)&`Zs*vdBIQxa5PWcd1zm}#%G@?&?M%35GmdAq`)fP3-4Ft>N@ zkaxUfBm|BaX2LVFI(@{l_t%PSpMD`{!*ReDe!^)#LGLoRo~_bEemXp3^5Ysg;g!-O z1)p={l@^iHp-6bvk(fC|_L66XPy_w>qY>}+L=j&9W?V!kSDHeb4?D$0*^?c;M)+)5#3QBG3HLz@dvQBG zdT4eb81$F0!>jsqc;%$KTM)Lz-aIV)%%JozKa)q?4tMt^t<>=G*B-!egN{Hj{<`xz zZq|t3x%D@{lhEax+&d?8T31}p>f;^nO(ly(+TzK?yh3IGZ?xkfJQ=)@jYI^nm+ztV zaKq6k{PvpuuJ?-6ctm*I-N5rqn)N^E%qCYsq^99RUsB@NA1cyLplK0r z<&v|ycI}wn$UxpbY;aw^v=DV=yJxNhl4>#0C0~I(`B~-u{mKk!Xk5%Du!Go=Aw42+ zZ8p%o3}#QG^sm2rpXA5D`^aMf39y+z`I;P(8Kxc~RoFqW6H3Ob2~8Ifd#EWbu8zYx zgt6m3CyMQn&pC-t$X#*8azLAuF&yZxCN7V`ZruJDiN<#AC}l@;bc9Ehi_kqO;hFHj z3H4*>#tNw@`qRw)*D&CCoK4*YlRD8^7;D8~U4)|!Ku zFmHE9nERg>A5@h&J-4Zwh zO)0I3-YGTEq!$s>Jcc(}(?xSBxK%;2b*B^Vx6@AV(RIu==#-lDu{{qHO@OkWr5!VsBT=~iTI${>=DGar3vwm>&-%bEKaRta6pgPw)I6z^7*bz8Q zSReP-wyKw_TfX(dVHey7)@+SstO;}v9Wln_$BA-6whpW-5mJflCU~a!MByYpUjJ~B z@g$W4h`pI1Y+_WcScYtCjsBI}h{d^NcS$zlh{o@Jh|lqb9^y{I5@IXBkjsUGpWfO^ zO)sbvtEV1Ar}et2c3apLo!b-}!hPn;d|j9+&6wyplw=V9>ZX0j7&prnx!VA?8t`fw z@Ad`vS$_==mBxj0k#i%TegE>9lXk(x?LXNu@yPbS5bcKPOw?dT8f&Gg5^R{`{t@{G*2gW}>OmCMLEA*H zfVZMjB#9e5-z}5m4@oG!S-1xb8B~(!>QnR_-JxL#%*lKS@41Ll{P?!4UV7}}h$*P4 zEib(?egDV`j)AzJeKZBc{dkUqg~teEX=t#WDr}Z$9tDL8nDP>BI=MjJkI5mCyD&%* zAtxBB*+!rKG~f}@R>FiMzTZ#!k>~V8FDYf1Z^bKfGK&{8ZJ{9A+Z_7TFQHKJ%o3{q z3}N#-QI5BOMx4BKudZt7SHj|3@_wqH_tU8Kq~Xbl2rhC z886s@HjyJ1M{Wkl2459R6Xx^!KJlMcG31 z9k44gI7ELh2{3%|g^4U!l{}Q+W%jPirh*j6%e6z%@L4jl@^t*Xc2)7Df@3HWXU_%w ze(o2EJej*bMlgw#n>2(4AhtA!axz}hdLjC00d3RdP{;0Zza+!rPgjf&d!8VCQ_jKd zsXXSJPnxj7(cjDCyacr3$;XFPa06z^b8|bfoVf7<=BK=P1k#bH7cl}!aTjfASNMU?{ys*!`7O zxGhg+3saOKQ6%H3p45#fb_QDX_bF5lmE%prIkILM2nCZb2Z_vJ^*KzEbPw+L6Lx#XE&h z(fv$;piu%Az~N8@{a($g3F}#0&O_P6Eog#+D{+z6mOGdZmO?clc3!7ORFum!pQ6fN ze}96veN7+F{0MIBC2|PjDvt9Uh#dheLvk{e$}L|E{+BA8OP(HZ-h(Br+Acv7q-**u z`cdFY(+CG|10l-?M=t8efRvSbj&YDL5Q_56F=qa$|K5IJ{3xjO+MW z0z#8BM?#%huCFg~p+PS~&%C`L)r6~}`o6D8@4xr6GkrYnOWOtUdxODa1P8Al`fq8p zq|%~VcB3UIy zisi&z;2I`f14sHBTH<`!a=?om3b-q=yqg$esE{^}SA_U!sIs3EyCLJ0O>G!8=}ZWhD@72p<{HCB1OUaH#?WbkE!s>ED=H&K2z+Xi-V5iC65;V4DP zp^=Ig@K#jQkHPjOU$|FI<(6EySCSH3_k$IhhmyU(A4Ew=$)H8Y89>bXdX`*D0IJD4 z*5nnW0T)$A*F#rXIe&w5E^tDtOWqXJZR`8u4-PVn@BEDQ2A+bJl991Hq5&2;o^i?9@Pj2K-I)JIRb;t2Sv74jd&K zXVz;?$>2-w&`9~U9A}B7YbOQY#YxGc!P(@wkrGi(y>t-QT0YMAbN1-xObThql%y(2 zZ==YzuM3BP`3d~WqiB-5M&-d^;x-DomXI;}4KT7iiwRja@jb>u746AYzD@jAuf4M4kyMND^yK z+zEk{&^bwYgg@jM;r--(OafGufIF-_=V2IEC%C#EE#d_<3-f}Q=4IVN zZpVUV3$?U|Lqe4XJ*>LAiSPQqE`j`YHJ0xhE@-COdo!j)fToE_ihEcw@F_V)ner#| z#w@CbL#5j~OHqxG$G|dv*OLwxqClk|7+okRTg}`*w5YlH8MN}>hP7eCpq_j+5{?4S z2A+Vj64Jyx=%2IiY-MF>V|a z)ln6XadMuQy)L}9$cZ>Us4W7T4qNq7g_7tIL(4E`725rA$TkNv^c@x;Pn1IzmXmr@i> z2@<4(I)tW#wniuvR+hho)X1T?i1{)VJGpJyicf^Ie>c^2?^YL0)szNDtOV(#CND#% z-Pa{;oY+d&RojKC+~1vszck5WgE1%`x^JEis;mMABOKFF{GZOt*;bkA1$&LvO)Pl= zk^$?5=ylGwHLD&sY~;Ytq0_)R#Hu6*1Z+gTQii8>x4}t)6y75I>7vFByOs=jvP24& zU!F5oamN(t?7593K957!-R0`m@wcgRC}aW~am4{&6weCv`IJOBn+7g0vGmpXnFmIz z63Q~fpRDJ1>&iJuPMzLD`2ND{!T5jIy^)$87?KmoIpn5WVE?a!ay&`!27-1J!NcX- zI2iS1E48+!6)GfmkOVKTA27B24P&=hR!{DY+7 zcJSFp{=GjPYHZ+OB_d-YD`!x`alV5*_lS+TV+6MXycYIsgd}<35PnDE^v;MegZ1>k zA|Kp5dPedQ>;%6Bo)of@t$fCfQqh-_PEnry->By%9$+?bD0nBt2{2ho&xLZVCt6;D zOA!TU+1S69S2v8AY!f@U;lpqXg>8A_K8L*Aist7@q0>$@zve!oQC|&83drRR5(#xH z!DBLYI3Xpl8#exwpPtRaK`#;a3FzU>B9U}bzBC{srqdXblV_FQP1SmX;Tz0fsQ9o` zV6}oTy4EO>B$f6LNMh}HpW`!d7t#GKheKmjX3_RF(G7%7-@M~+t##?JIQ+9{33{x~ zkV&2tWrv1*6EqF5J^gE7#QbZtFNZ9wH0G4Z3(oe;>oJ%AHcWm#XjEh_YA?#nW{j2w2oK1Hs%^@8--xWCcIy=4k4yKh(4VPnrm?k83Vz z;DCFGieE-Ea?uehxi});gTukDdi@P;iJQ%l9`r;~11M_x(=>!R-gN}guFh$`Zl4=C zT*Y!v4hO4RlFi}9P!l*9!^2|MPv)~>;bBO}R3c&3U!lV-D zqU(cfAkac?#UpOzC`Io3aNp({QmoUs4%+@aaS*%8qRRFY8KaDh=9Z%blS#Q`j`O<) z4)~9<6aEjE=j-H*Q?maoZ9hASeJqiYn1D4Vgzb5N&v`>L6`D%Ci(2)nqdk&KW5F6n ztz)b!cdP$bSALcD-XC8W%{mM!i?B&3+m6YfaVrspOvWSjciBB`f%c$4`v@pG>9h;9 z`^@~x<7sr_B_-F4R+IvyHo_M|DWP300c>7N1Z2DgXQ!a}(Sp1#ERf3&@=N(UJ(*+9;ZYX4Bqr&1Hy$sokKL z^6JiAjbdQ;LOjf^#QB9**?qnX5RHWkEm58<3p$N6ui9ovBF@4>XHmaCRUn|xX|xN; zGyt+h>u}yKw$smhpBl|frDeoJ2P2Sh4dG$VF7Wz0rJb$1ZNohx146Rg#t5G5xJ@ffg$4rE zINzeO5wdXZPqnntT;L5Njt0K;Oh_3EWr7QOUpr<3_{NaD;kqpGf#o{4El3*Ha6~X( z?e6KmXXCZfK!IL0&X`GPo9aKRn?xWra=4l&(RGZ{um_kUfq=*~k3edn+|sAzP{vsh z?1MffXzGrJ5^-mkLXt92E?jxleHJJLrc*#F4XP!8D@;O>C6?|3iiJqffFJ`h_Sh?h zK^X(uo8aa!TB8(L6@#kqreU#-=ImhbWy@E#2LT^Om}C%q@@tj4$=e}p4_xQenVWfC z*AcWrVfMjuTiW^`_Hr1?!VrjtqGQIK%>6?J>b)`9lQZSf67lAmBUda|?jD|=W0Yx0 z`NM_ZkDzW)4Pkc}ctF|Lts^giW0r=kvxGBph}HGx8{dE~6$^n(d~VQsFvzyDaBIFj z%*zs8hsh>$GVfRytwLMWur7HTh0zS3Dcvh!D<4HKcbOt&eWb3p?IbH}1VNPZP{7ht zYbE=!!IjEgrS53=43?4i*&>Np;1i|6^a3^Q5@M2|aJdlv;*jb6Gs+c@-zOdk43d{W z3p%r>l>JD9Ss5=iJ)lxk_Jv zl|eLfl401P$sO($-Xpv*w{}Y?1c!P@^o5jg*6`;!nKMH|0T!fZCQ(Y>lt!brA}A8h zYu+{v6nDu;S=`Z>HV0mC8DAbcZU+=IBznM%GxE`#9z35SKUdmjsQjp&ij+nG$PNhj zUa+lI>YPkw5Il{l*nCE=!Hni;g*pw69snrx={FjCAvX4~%LyRZG#8v!r!xS~<4Ar8KN!jho1D|e!upPq87kXtUlN>khLc<{v_=TyOGbxyyeW->P= zx1APbRk|EZGoxD?v>SI+SDV8r=v!SRnR%d7K|I~d<;Lj|)x$OrwbJU|?>iM$N@nY~ z#{I?wO?`8aOdcg#X=tlG&bQ>tU_4#jU(sAOqHmi-qF;lq#~Q1l_Ap}d1^_fD6S%g+ zT*x^`ES$7PZAy2JR$7v7wK>QZ8wZIlvVIiU^O-Y0g{Mi0Y}4If<(?B;{)h z`6I)Q#=uGqKy54y$uO%?v1R-?mqWC@6l(~%bn)VDS}XZtn;l7HiR{T^2HBR!8HLmI z?J}50B-zz=Bw5p!bn$GHpxboJ1m!b@IE8`VDUsE6m@gtK zFn6I+gQZaRVxc0G0B_C?p9eX5e0U!x5;9CB$+he_lYflO^(2jI;$eh|c}iRCG_wtW zI6gzkxI1PF>0KN>GECfq0us1YQC?xkiZr()M2;qtJjO)VM&^2xO4CN>O-5KSc0@es6Kb-A zj)=EL|3g;rm@z!tl1)5pLaVxjJ$yMs#T0FG=y9%#20_!f7q9`%N`ad25YET7Ol ze4~3js8Y5<{^1_ff{3$_s7#_2)ObURCCV`@?Gb~*%`z)m9QB+fePP$67`XQQx!m4&5?23j8Vm44hL7BX#hvJY@sd^}*UFpyQ^ElaEQTiB_ zwW6h77CeFy>230nL|#T_Dds8N-@#9x2vjKlxQi$-ms?nA+G9f-M4Y{6WIe$>m|=*c z#f(<=u6sP(4pf=tg*>sv5PAtnU_W+?_dnHxo+K8GfYqAw_@h?ISE;0M9o?>4hR$0@ z=qPD9vi69^V_*1*hP0350U5)*poNC0w?o}etAe++)9EGS>8 zn*gsUK1G^TjZV=)Ay#nz?~vj%0RH1U$Nwn_nR&<*Q7gBqVyxD-0QF}U04iBD(J=&K zQ=qSSnyA|xHZPYd0i$S)d4=4Ez64zuZD4}$N=1&kA}(0%<9*l@j5e}@`;f9wF6g#d zG7=0DGD6g@D5r~_{@vc_#p1cQ+Nnr^JdTDjk5?=?`Y$BQtGKgP!Hj|tLCtx%DDF*! zR@9KHct(;Fxa3lE2SEN~E_ZGPrGPNmg4c+YpMiRLQnA^C8@l={V@7!|nC1`#;Rp|E zlr`{RB!hmp^Z_1jfEV~~GH9Lka>V9`d?Q`FZ#5DsK?%DcwSPKIcOK_;!$`LtNdMcv zc^Ud6v0y0zoq*SK;#1qnPRzp*)n=wEKMR}&Kzd{6VWe#Ez$G=5(sRHc{2lD4qz?+7 z5oPZMrme9f_LHwerw7fI|JTD&87&Fp)0$5~w`kcg3;hjx2u&pV$e>=wPwTEtv+ZHy zoO`77!G1lKudU+{^upg$82mg9hkVJglZsgOQpqQ4MRq;SIy;)4D?H(0l%_j#6r_{G zw0`gk*xBuo2~es%Q;9?mBl1}UE(AN`X4+1HG7YrUZNQq)Z^tfI&s?$K6M*2LKFHso zd+@-HQFMm9t1Fn5_70+aB1N-_2EUq=X5#dj>zT9EB7$&My_Wm8~o zHVP!`%^5N2qc|(f+fOJx43{}nz|pHJ;OOk^a|eaS{E?TPJuRMxXl5fam*b?OtDdHg zQX2=RRKX&@u)JFHLXUkP~}o^deDeoqJ&MUNs18 z`(85|Z<=rOy)kqY*L(bRN=P#RP+lc9CCggzZP_sX6pr%&DAAdm&7dxUySs=UClwhpX_JdUz6)AoMU0lT`vB1?!}i;bns%(Pi+2g#)Zv35DKr=? z2CT6c$|nkfyVC(m>_4R~$Y_Ygqs-@=mc-J4_w$eIq>43m{+D`Fk_U_@TtTA-P5`Lk z=nn38_)n@zC!&KRR>o;p9#9Nn0Xzp4Gxw(~MYyg*v7IY)ADPkYwYBL%*!)brWj3|T zN1@F+wEQ&^qXhp=YN9cy}<*Fri~=_qs6Vh>C}E zc;}S+i(#Yw)t{O>gkc*IATx>q+qk_SpDBYf^fQ_QHms$?RZ_v!bnFw2$&g zo(7IdvF!>4E$E8^87ZGyQtG+D8un@~LtS60cj^3?_2GvAA!fPOG3$%%M=fWC?IOkl zK-RZ>69R&r;nwI(1GRTx`&936t=l_wAHc>@%&{wFIF2G8{zV71p%mBDn$Z7nxW-EL zwvuQ3en+K#Uj@(DinI|Y6XEdWI$>W1@T5AXt+&Q&!@(%PM^iZ`v6vYk7#gJy0fn=p z>&KX|XH>6c>PZ+r*waMljJ=0KusO_IKYF6u$@aCBVLv^_r{P>e1XUCY#<2)V|D6lC z3ABTGXM~?DQqR!;)4wLJ%^HHXat0etb=K>z<)@A;Wc22sXZ|u^=E^W6gTOa$WzWrl z{)?0*!MRbGU0`d+2f9E-|G)e&x8+1SZTjKiiaEYn!q}3uXcTxE!=kIxMr~nUGUIpr z)Zu`fNzYREFmDh(#)CdDaQs`Pa|Q6XTWbyZ=}A&TM{w_HgL#)#q&E~c(3g%t_6Qx4 z$@W?X^F~e$fGx%?d!*9R8?W;xT4|zs|>1{-`iqK)% z76;etk>g@1pkTiPxC766Ot$Yx)wkCLldJP5ir=MrQ=&+uHV=OJU-%q*aP%uHmrU^P zbo0+t{}riZz^4W>iu3A*VLdmtqAbghTAMQ@ThA(co7}rbof^14;{1cg)Z=}7TK^4X zhi_i&Z7WABUm!{W*jU{YhPtYq z@HPTMKX;AeDpXDl?74ss6*&A8xtmbXt?04J*Ra2yN&{HiCn?;05IB{VFEGmF??Mke z!KsSTnXs|v27ojQ6N61ga}zIsYv}O#FlHU!6o&F}%xXqpyBJ|iLsHm6q&vhl`-R4P%@r#|on0^N*Z>Ip6eKCxjENHq8Pm z86IS%@p^LeKnfRcoTjvNTclcOC|MYa|xq-#1a|4BwiVa#nYEJl@XM;H( z;L6(vt?Y#or1heVkldH*pbqyBPX-?xP$Au$^8(~N4oBB)0}}SY*hA>KOHN34eD;Wm z3)WE8RajPLPj*dp>S}%}ic19f_$#XVIJDNs^jg!haR{p0+vMLn0*M9sl$2%-nozJk z!hx}l`P9$q&s8TkLCrP9YI9U!)G5G2+f;mq(_g9p7(Maj(HRGytVw)xD~mR@iT(vS zux7B%foS-A=sY4)jQmGEc}#`#?Dc%n)VFmVSh-)(^OkL8;k0`|_uz6~K4Zz6#3K_% z(3@4_?iWFRMP;b|!$dIqyFaZF+VB)h3qT25jw&r&!j@?l8-aIGQNT}Dsh2bEqGe$| zj7F_DxJI+Ea2t=V8$R?U)Q@|p| z5d=VAm!VTiDDCTu|4fhJ@$_56X;UM5am3Y~FcGXxpN#Yvt3;aXuEKtIu%T}wDDJfZ ze6Oyf(=hP?XYT}qRifv0;n&7iZkPRdqi)i03JRxX8}x*v;Cm3h$B7iIVJJS3oWXi0 zIjFafFyM^_vu5aI48q-Q&x`A^Ff?(fB)lxm_X(&>|1!)09iwz`>|yxpv1i;S+Yu?R zMly4lgG%1dxXAS3Bnbz)BA>$^;;WsZl*yzf0hK7{i+kjfE?%QlP}k8RQ7fvP8(sO1 z)z=?gpva+s0!JYZWa}Yxl0@cWq?Vf(O{u#@zFF9!UMyg}2EQC64UOPSRBLTtOv|)A zC-)kD2l+bBTFu8dnO;<&$Y+7}qAm8ti(Z)vxfjex6>?G-41s!B97p<+cwh9ABtFZ6 z28X`Eb6K`YNgNF|bC%H15HeMs_{Pql_i&83#)jl?>?}ZW>ftf;Q7N?!(D4KsM8?bY zg&#^?$&DBC9rRLq+Jt?qG8vV$K@UNUGy&8+R zGK(hSnA@KM`2#*US9?jBl8}@$?=76JW9fsBp{)YsVi{!$*e^rV%lqS<~ zqdZA22QQU`E2U7V1?0i=m2b%yQlN~h=OpKUYA zaHR`5{hu#q$j3{$ivJyg^}kUmm0l^ulS8|Jd|$HgN^adCw}k>Jpp+gQtYaCVv0h`tQ?-_W=gAq6l3wwoNhaB3g!;YyM*WFsRQ4XV&ATcl}2-yall$CQC{{2*Y5opR`b44TlS{ zHU`ZJW~WrW%~ImB;?|_8BQf*K)0+(HG%HajiK&u+$P6hD)ddsU!gcPe4oJBuUzAB6 z&!TW#cOr*GzPzeRl${J;jBXusS%fr8SDEi{q;49=q;8BhI|W}{0D3iNiQE?h&60QP zS~ziVS^DK^ZljNgxOHTUEG=CAw%+_r3Rei(GL7Fkzl$v|*Z?hzB{GCu0({xQmsf9Y z#pujd#n4Tqzq`zRXjS|t+A@r_8E$A|dOcR{aUf?|t4`^Bc?DX#Us=kLu>E?$p+BEU zqeoKaGYy~B%Qe$gVM8waeL2T4ZX0KM`^#h+h+Ce3#qbv2H#-HkMXN4@N;#(2YibK^ zy!F~jVqJWi?QP0U3K1NMg!ig1uTq;u)fPCb5&m8;aM5P0{Ejl}M4csO!0uSM3R*mu zm9on3HC!+TYF6J9hi$%3y6uOr%Ygw8QVP zt?wM|qi%uO6?#0h#{3o-`b1p|^=lpLN||O9NI_C*&A3~S@NEDY{}A6;{iaNE91R&y z)San@^JaLID$Yv&F9-@to&@JeFHf7Df^%J18T5A5@FX)ic4(axXO^yXJQ4l`9b+!x zaHLd7Pnhha#kqwFd$e#zsi&l6U8!az=#g=RKQYatq=csT`}vAl;Qj#>@(YN~%8Z_r zt7~@Z;zO{!tv;X)PiX4*SUV@P7TwTao({*ZCeJ3kO2MNk?)~Jl7B) zg1362uH!v)F>o*$`0`xQAH$K^p zP#L1N)mn;J2L>5}Qa}WZ$|Qs&v{Y$pm9|z95Mqmf$Pfi243dZzsWK@D0Rlush7cfN z5<(J^d~5B!Gtla}_q*TsJonG-4@;80*YM8MdKX+-_44Gi?EN70<-;@lbA`rb;9uDU z$jwE;I&)ZHh?J!vr_!>mwmRpWm|Xg8ZZlQ3a1CpP1CIng$wt!Qalg}1O;)Lf1xBt< zXL2;Qci6;N^H1Vtg2Q>Po;ZNf~PKnoJ=|(_bcPHr`~-5 zk7sg53j`5e@PBlRa(~SLW%E>V<7HK^d=75zXkUW3jvW~dT69A|b1Y?kcNpw(P~0$AbR}XR{~i_CQl-FG0k*(rI)I{|ggGsyo`1_x z;mH)-T?2r0gXL3819WiIE_txIYLoxz1|mRA5%--@;?Ojr&grsWs zR1#kV=&}M3<1z&LJ^Fv%1_|8!h@7|5b*bWc!hA<<)qpxzXow4Y{AXwXiauPiL?0CS zg7Y8i#LEt$`(8ttxvmPnSrlBtLVrVnwtFGf*lHU@d|y_;11&}F4;oIma54c+_*qvA z{tzK20Z`Kagw#_Tv(y1JRJokn#t^=H0F{p|axh0J9se6jrQb*Q{<)p|2GU5vVV+_c za_(M2EECCN4#%|tKL>lvuJjh6r}G(V2(-x0Hww(xs56rvrI}eglxjj1hK`07z?lW43r6L4`YIarR-qAO+b8G4Y0Yb94ka2Q7D0>L zud$G)4A5$qCtC~)Zqn9jpg#G0Aga(KW@iIYVBXqz!WuAr$`Nhu1Uyz>0qT>{x^del2jvwCLr1$)=us09)8hh9 znsHYRjdbQGp<_c$3v5B$C}beM-Ttf`?j?U$6tkL6rGS_O1iTBd2jh=!v3&_2s~DGe zJMt~S!AgJ*$!8ZgY7lrZ6kq3b|7J|#6aP)PP2j3@T6 zpT|dC{AJ4iQ13d$kDX}w1>MBz8#&YU`M}8?N!QgSA+}Gt3~!X`x1*2n$oQNm!l{)D zg`BG7A8lnpFwFT$RY!e~WD}z%A6aO&WDM^<03e8wTTo&!Vsf^~Gl$lqhMb#B*#q(F zQfg@7s2h4|5daKM%P#Cd!rLiF6w6mxIG%=_b*We4n2cI;Nxy0rXW-_J51T-Gg#n1w zNSCbFq~bp*sX=VSFdo@9r$rv13vT`~o^G&)N3M!EdG~WPGUihHy&^mjJ?r8k;AFbV z&E`O!DwX#l0B=;dlqv%*nq(sG40r;czr6vemf+E7Q%wq&4Ya%H5oR74#7MBhfKRHr z8*~FaEple_4T<8w`8VtgCDeAKs~TM>2`JLrVE z;MKdm?J%uK8Klrhr(Rdz(Kj-|S846Y`pSb7vs|}^bAecCAG3^96G z20(3-e<13_S=Y-@-Vy~au=qD>D-gXBjZ}vf?-);oqZMkYfyecigkME?B%K*pZT%8> zZdL_U%ySFkZQi%UMg@cMxw(Qw=4QyYUREwn)12!NTF&d3!|Cvx`MP?!U94=&mz`U` z1OfOqhCKA7sIdD07cZ*5{afNiaWiVs*RQtQgXjrB4o!SV%yW|??YwkXY39-+lr7|= z2P`2W;oUp8u0Ul*{T8}VA?G$F6(nkh)!5DT#Y!L$pud`$EjSkuc6G5VsEXp|Pi`%z z)>nFt^jhibQsDS4sp5~Qn_qumEC%NLH*x^~z$J8dj^3(sP_O`a8jmm5lGK>^nCfFB z4j;`Wk+XooT|rIF25zN3)_cJ^pW0^Hjt5DrcxA(&GVs#R%_eSkd$f)l-@;3kCB~W# z0j?v`5>57R#yF&x<~mHK&gWa9dEpeV-l>OH1dAN36BVEjM!{4ZBl)0KIXJL4|7$D^ z)D!{3XIA}Ub+Z-Dvxfiv;c3^qLQ`{k#2uqd6@M`(Z2%dD!ooI2NgGH6+mMBz3(6Ia z8SdZyFT!r0)qfD1iI@poAKAPsSGEt*ffeZ`12xz0K11(A(WVM5ez->0#dvSm?;8rs-Qp87V`YJ2xc6pgt_f{#Wo-B4qaWsR-H&i!2mY)(fC3GGCdwK&RI-_gw9-uz;%;<1~uzNdO2-vD*^~oMt?1d zS_^9M-x^l)Z2Kk3-O<#Rq1e4#*$^G91$pz1)zVDn?)?r9{ytxb*G?v63(m`;sjj=l zz_JD|>WfC==Loc!+iNrDnX8Lo)n=`Ipg?GdbH6Fk-_d*_=u06x=8xZ$Qoh6UBJgiI z8Ps#n9aSV;oKw=h4?@C**0~PR;0y~! zXVvckkD*v1)yJ(e-|X!;)|c=zm0m{_R5_pHxO zd3(j2@5l9ug%4=#s5PwvixR(=8l)$H$IlS)fL+3Q_w6xWoE)}^>z=w9$rDv$qlH|f4+3}|6 z8HALgOEv`rOJDyaRB>`VLYWt&me>&u-wMnWl1&AI<{eRPGD}#PlfB9!0gL&N8yiJ6 z@mL?LmNt2mXj4qABFSiUqIX}Ws1bI*lBbc9FB0uM*XArIUw}qOWo7l9qL??b*mZWO zJ|*{@7xi&k8HPfW$wiYx-t`xlCv4=DZWdQ`u1}erpRQ<27MfZV07U^6C%HO#@~9C| z$JpmcaUe;2+!>$IOvL+duDE+1J*vZ?^Lc)X6ccx>r$S{KQ>HM!Ut+Wx)7u1(5+|;* zUk9o^VK-;adtn9|Gv{myn;aWeAvGuu%Ok=LB`zKw#5J;!nz;+mz$}B#exFH!-o#0v z>xmQGnG%61YC=?|=^`&`vx_F~o1JgVZe?5DEWbMsMFE4Jf2b*b8AOvByX1<@V>Y** z@B`9qHxopS&y_%357ojNrukF)A;;N)K>ek1u2FGf(!8+m@PlAL_P ztfLRwlVP%{jjY0TTE9CqE}l+45C)y`!nR7jQ~Qrt6lL1Cxln&8Ps zx$_7qa-7R7%H{D1ix9<2s7&K}RounQ*eUVax?Ip}q2sHJ279zqoUO0*c!Bcx*I3EI zSm+5r#z^EFlB<~~X3{Wic5If1-qn&`WE5#vMv*dBBfwb^bJd}YH62b7x&-e+^})DGI#CDHsaeZNY4Owm5L9FP_#nvoTI+PXuIJ6;-9ERq|T|!tz_v#+Z-vYi7W(ykg*X+c`;f%>2q`9HiKH+nD z`9D*bZz9_nE*I@u4WRit_4~pqU=&my)bU)TFs6)(GI^P5#6|!4a@%s{X=4E3X(5F#ezD8+?8t%dLCAF z5)_+MH*2s`2+oxAnSATgVDpnGc=mRsjJ4gD&O|!16bXYb<~X5H=9ck!J~{&8^K?u= zY`_Err!B0Bq1vQbhD(UO#cEc-0<0J-yz*3RPl`uUx?4j1B^lx}{TeMc$f8^NT*ZRN z9KWOqnf1g#{{6<~wY5>IW+q;QWQSISAJpC6W+Sb9D79txv#lPNZ^cA3W9+E;dfJc0-7CkX)=RFV1T8fH~yM#WqP^!3CekUyV}~Ok27O`RzmR~#Z3{Og(tH+ zMd4LFdsDSEaMCI6%=--~S6DPXXP(6&9?;f_%y2|JT+oV#7K-n;Ks;p65)Yr!w@=4z z{`rFR4b)rAE~Q(nv{09bgbM;L$CBm?cTHqY=AuO`*}gt!8Gf!~39;G*$ZixA z_*})j503NTglLLjm0oZ`ilw8nOKUUQtZW`*PE`0=VQRy27)1f@Lw3bhj4{i6e>^F@7;xE1<%O`%=l&iw^~# zSz%4qvaNkmS@zyKj}V4lM&)nR&)7LEq(hH&s zhjWm3d}d942hvqZc|<$nTEPRJ!A9~M-1HHxsKF&<+_v+)VA75WbueUufwsSMQ?KMp zGuFq`6LOmJz5!pW`1Nqn(ef+zI@cR(QYq2VB`nzq<)K9F0ncDUnTP3+uvI!UwXzCK zGKtbJm?TWP@Jw*?nm17Tn2YP^Y&57BXsebwI$_mP+|3%`(?j_Vg5@QgVDn`b1xTz9 z-D5EgJn%^SfUP{Q#KirQMz4ZUcvDgIKGPwqAw!FT57}fwlP#>1L<*XMLBMiqw(5k> zQ^J4Gw9O2dFgd;eVs^~qz5s;VM~C=l9vQ4cN||7=xXET}FFx$%OO#sRew49uEwm?B z9puLn=g(4kAls2q7_SOVjKVYyK$3U2mjZwbbvGe)&RP^aG{9Q=!dZZ}&&{VoDUNa> z0;kMJ>y3e%4|xY*q3q7>;u>x3(|QYS#?GOt`-{fvmSY4=>I$a zUEUbJAx=?>Qbc>%I;D;Y>`M2jd34}q$23r+xnmw#0xDC`n7syhJlrmg8TdtOMQ4y^ zUnx0*Z6^-#(x1Vno2PuczDoAPha>8)%l!dSX^2H>TU$;~20Kh2e!Y8uqt! zE%B)B3SH^DH32&bRzGqEzU=4FlC4vcroV& zW-S9{NKml9Qr2OB*cWOal|~xt5d@oO`ffEuqeI@Dw$bKUDzUZE;3%*f9k38$7iu(% zE2M@Rqq(&q-IFpY-gPD^AAb%29h^G>*Hc8O+NZX>U=zQ#C6JFPSJ;f_Q>PTa5kcc} zo=a<6+XPuQGNpPxXA5SHci9AM18^Ixi5WpO(zHzfU9&wWP}Aae;YSNKOpwi+`sGMv z#kV`?v@%u)Xr&tfIhs+H{~LE^x@IOBGi`Dze4qZFBy2o8yc0gyE*Y5lUGN)Jr{0`{ zzi1_3TD#3pwvP9Yuc6)&06QArdoWle3z2((79z>pxLpfeW;Uqa2#x8&C?z{&a!$p> zj5L{2H|h_$ungZSd7g1oq)4xxCmkC2!)?$Cv(Izr7CH5+UhoaW8WvVlx`KXD^xE=C z@nB1gGRaz7%E30MzDW;gXsmuiwXcDIwydl7%N}M@xzTl?M}5WN)PJ968b-E(lk``a zOE;dqtil9!OKJ4iCnsFUIUgG9K(3Sx0saZk6TD;s-aygDNhMh5 zj5qnH{OPHaApiv!laBH4uqf{#jxL)Cyd3ZrFupgi!ev500hsOIHJD3Tr}`&oP$Fms zc6-_)iBjb!Pf0Yoj+ldmKacY-%$LpcS7Oo0kfQ|4+y^wDtvl7U&v_cmB?P{7=uq=W zD?e(YyX#|X-z`L)d6-QKzI&)coFmuPC|`M%#$CiT?tF7BojGJc#(ls$m=V2qBEt)gz9)&}8$4)Q%#;7qA#5L_P6 zj^1X#j|XLy8lN4kFx|$_PtrdVAUg{7s;Q6yD#1QNr1e+HVx5>NsRz+^Q}QGMSvAYj2E3y96d)M0o~Lg1~*X^L%rG zJX4GuUABq zjVi9u79E!)pL^OWUdI0_@giD^grJ~#B}fv&iV|Q)q6)u+WuP_Gp+Uk3e>zG}>GYqg z1tr_0?eA_R0DB{ze!RHmEl|fKWiq#Y-UqrSbflU@qT~y0gKDSrHNa17rL(l$07;2$ z-Nr6#*QzNTE+$Z!O5^T^=wfdayG9%U_4XS)Hqt=wu_J7}s<)mDA8+hl-aVWS>*k@TT_x}ni?*&aWrqYo#$q) z0U~PIq6=~FPC}>u5={$>ri1DEJ1q+CgD7%7DDg9GhW&<1+6_XBYqp@C0vy!$SdKH5 zI||kaTP`))aV1}Zuc;Sx$!V5d3hb|DJI`2~z2G(umjpMv&YYK|E>5uDP8 zH7U_k$CW22mt%u!)*COh^aD2RAZRrMn|F+c4J`c7q9D;b)?gPmF#`K?R3fHjHu z%mvcWJ?4lGZI3^`XYed&=}nO&i_JP9lhUs=hKvb7@63FWkacjZ|Brgtj!}6*KME zkmo8SAjG|;Tw=0ACbgxCtmf$bSUS0;3>f^z$rySH#}=2Ivl!I_o?~$JCJQ@ ze?ceemV*%Vl7`WR$`(@&y7N~*GLvs>?b7LwF6{3c@DEho1Ok%rxz5&>A#iA{rr~jq zw}lEP%8M&b8Fy%hXqU0*SGW@WD{#rgLVTahH$pIEii^BioaDLjKSAqc$%ItC->oG5 z`w9&HTA+coNyW{0$z}<}Y8x_p&FJpuw&nnJy3j>8fzEhbVDY0a*mQy8Gde%hW9sb^ zDzH!i0#&tpRSl#Ei^tVi(jDh!ao&Gkd4I{ry9svlSgJcOF`|1l#&XX6Cwz6w4VLN> z8M<@{MTy&L$mX18DV>-8CvsR+^*vr(^yhziuF1O@;t1*5Q= zppz?~=l+%Mb(ge?bN0Z0nrxh$_%p%`D89w}VfWe-j0|ATg4k=}fr* zE}B5a3lIc<*}JNZQB%eY$aiLq@bimgGdJk;$`N5c(^+=#Ari#Cii_O zWoMTV@s+mH&2HM&&;#UNF%u6moyksHl)nd}C# z|15fPlMB%TMtV_YT=hKST~_89Qe|q2c!~Eb_FH;bqq|~iIp)WxCkcUD)wBNvHebBF zpv088$LfachJ@FwAv>j=N5jhTYw7Qop81Mg=T1iU6cG8*AOdX`{sujn+0BKv67X$3 z?ld2o+!)p#6Q+ZW10L|DodlO2>f~BaU}S?ct^%25raY!rH2MApc7(K1c0Rna=gOrt zfIIYQ6scBZ*HzkJIT*ZegDdsd#SlHnm>xYt*OVnMP+F1fgoqF1H>cdg^Q@3Epmc%! zx*&A=|3oWv_vTtpW=t7M;qt$1xqHHdWJd#Y;FX zGrK=UKw;e|@ctPgL>D1x^*V$~&f3;CxBdtm&h)dtg60Fzaaz@DXVc2#bVt5rd>x=$ zewll3`V4~k^i)Eg=@vR5xEow66kh5w3rN2%4(5D^GRP5sAr*G>=czowe8+{N3)UBW z)U^N@I?f%M3|O3G3a5G%XBpF}$k9tz?tDSSWx1X*;I!Ufcu9@D^*wZL-m++VaqZ06 zj#oppD3r@=ex$Km1wYgux)Rh&d?Y(xh_W?bno-|~5Icpsp8$|tpDD&;!Tb5dl2fuF zX7-@lL_Q_~{<7cBVS%L>f5#nk9Z7;g4UbZT4f7F}MQK7;9Edimc)!SUQ6t@V(m6@O zm~_m@H+c;_WL@5>)u;op%9(rTMKUA2q4}WxjoBbqQ%=r&t>3ij*s_hlQ;hQQT)9anX-FZkTw-ojX>HBxv(;?fM~X%+oWTmug*2!2S< zsOQN(eGQkvkY^HaaOGqCA3(l;%Jo5lVe@GgDFnJNiAsLHF9VsaL@0L;Mg^2SOHCeG z^ozkiiSXs{U#CszY^SY^uiQY0^%WE(Q#b?}>9FXA+m1S$%2p<&eGeO!L-{gS(SytifNj&a+ONuP(=N6_A($^8p%&AOKTRrd=>cO6sykz zSI)6Wbw&BA-_zW$0Sv2w04|Eah+qd*&kB&l-|8R% z=c-=y?$LNXsvv9&$m<#QUJJwd z@qhW@@v!YPh{QtSLMJW&C{hg&1P=Lb1^(jHMOmGI-kHmaN!&Q~O7ew<;ARE#Q%Kyx z?wC;&$O0N13e?uYRXL#+AURF`RwfEcARhvcaBEQXF{wKMAc3%ev|jqsxRyKdcGWH9 zw*trQllI`^6%-`$V6dYhWh1gW7BwlP!ypu!@9%8EdnIxA43$jaTK!BP%crp{fFc#7Zh89fLu#Fy`99-n37-uu4SIME+K}xly$xR@{#T#z|r8mu}=@ znWC7Y`Kl91Mpq@1A)$>b?;$2>F|Dk9MpYQWbvp0n9ja6+daeVH{Mnm(QNy;I@t{^^Ay}7H=LNt zH5w$HLe)sj_QPK!99$a;YuI7jtw-%1MDJ7M-I4gBbGa!8-?_qod8bs`^ zI6YqFi_@9Iy1KL}e!cov!q47j+mQX2Js6JRbA;2S71ZQL#RVAif-tI%@ryU{(SeXl zgrc_YizOiOc#zEElTM9u9qh^R-!(=_xHqh5WxVK!su*q&x?D?+j%f+Ua&~RC^0i4o zp+mc%Y|bQCEujImbj!Etr4Z=tLFDqVAjI~no}Mq|?<-A7`B-Oq`z(dlT9q`3nK&Q+ z05ln7nJz^N3OYsA5%h~($}?5OxMFKQSX8!@7M(^F^tYC6P!Tia<5BTlmj+ekturJm zRj+S+9w{>jnkPQj;-A{X`u^$&q6Lj73NKR5GusMYn_8M z9Dd^FpoMyb>X=N@oM$JJ5t>8&1E;do3O{WQqdJ0?H$-^DL!l*o@dl!9@JZ6-`@p&J z4&eZbRKAqvAn8$|t35as#sn5L)S;xI-h+5W1h-YV@C-#uTR};(@h9=7^fpj*gCqRzv_UV@e-d5jj_Baz9-< z)HTip-L8|l_4q4O)bD$mu+>zhsu<)Uu6$Z@EX}fahqV9jbu+E4Am|oH58Z1f&stdy zZ}7lCN+wL!=kPw|`Xk1RLrjTqvoGr(MY2gOHQ-d1Bup0Gk6a%JYRe{0Ql8kS04XO2 zD?JuZsh%2Bh|jsn5uV|U&alSpRe)R@VHH&Xh?hN#H$4V|XJpeRn9L^)Euc)C=;F^A zCTmbS2Eu68+Ehn%M5D~XM|bDeKem~ge~bdK_~E^|8!8gkp`R={pEF@PvoXq*-0IT? zsIl=tV=!6J^vLW82-m4eq9UkSR(n})@&*~05}RHd>5=JWa< za9c7`zm{BhyQW0|o`e3Upqn(*x$@=X|q}kbituKfRm-G z#h`%YpEk^2ojLvk6`x73Bb9}KNA28!yXQkTyW2+=`Tm(NsA&|5w~cS>X4REFb!BM; z%TiIxJZ+9c(&2|+6_`Wwc!rg_0CARTh7W3)dmO7Fs4Fwy&BEG!L+EwCW1MW0(2voV zou(E5DxjIOx{w{KY#);sX!qS)QQwi9D!Gr60Vj%E!aM|47hRGi6BTf=x{clnM!TD; z+XHly`Wc4lfi`?aG@LYa(CqGuIh(LLpn!B$l;)}< z*ql5gyf5xelpK=7(~kMwrtn}LU{IQ$$YfC2IH;_Suy@D@HyX_XO5aTX%$lD4Pi=L* zCI?ByEt$BhQo?p~uE6bWm{Q~r-vV9{IXN5%5XHQ|iIJ0f7`~j!xU2wB`-WTv2z2m9 zeid#Wnv$1vEGU-h?NFyx{&z|+aJb6LUH@ewslmQlW&ooWFfAxII8|KpgW7+)Ijh{H zq~=kX&(t*{tjUGh4F1@!#DrE9%`jJSh!B`KA8j-NGi>WgH!hgCW5<*wmj>Jo=?O_gPM)(#zGyEo2zYLdp&ZM0$G=b)BA*k{;g>->rv06U@ zl@vP3m}`*(5@5zM?wEbL0SsxIdUlBf}V2o-=f4G z8PX@kCu6TbJzNwzl0JB2FpC*dbksR!xa#HHy9S3o{af(+Krp4W!S|i!qGa<3q6rf4 zj}pjFT&1(C;c9ywEa_zzC<1M>N&tgGs51~?z85TK4at|1`TkS6ON)}x%mR4c@hLqQ92&4BCPjRQh2C}d zpK4{@`h&WjsgT5F-0xO?)jd}#?cbR+46sKK4}4IiC2Nq&K-%1VjvrXr(Zw;O*= zw;<~PmRp50YS8w`m0LdJZ;RfPbVP%!fRK;ckpMkQd1F2P;0>+{4QB$dQ?AsqzZ-ik z(0P^9wRK-Nk&yTIm1})aelLJxZiwvuT#@Z{_2Qj9 zUeZ276G7;bZ0M((Qy$?foKYKHNVbyj<^1;uw0n2ruP1dUzP zBd<&-%Tv#wO_4MtFJSLPDhB|-*;#iKTW5ed7&wmXnHWOO{Qx0=OYM@vKarq&w%BQb z7Xts=# zMwlYfw_Jk~%Hks-NjL9r{^ZqU1Tz8^&NuGdOG1trl#P?Q^Gc@Ies6Piz6OUH@_-C? z>QK4!2Z*)?bZr$pZulbE=BjQ&4I?G+?79eFAB}oLD0JrRAG4@KcjS}gjomuAfc9#^ zK+W#;f}v8~wHL8tY#3;eAKB_UYf?0MF;W%{Uf|ryR94tdyz`R!8rJuFS77ODmBbz) zwMd|eP)+3PEknThmsCl9)69`nV3D$SB9+?!_>%rREZ0Ha=p0$-D}}@WU;Iq=CsJh$ zXj?k?9`#Q6JCyMmT;D4n57ZX_M+ry~e?WiOXX~oJJbMgKM!O6$P7becZ141m6JPph ze9cNpb?-c%Y2F;!`oFveC=f~%V9?H|&N67*70T+)h2Xxn56g6+s!Oq#P;WWnV!89j zj(4trvquBUM)01Z+k7T2yhF}cWk$y*9B&)4uVNCTG`x*c7l4`YD@J#5alp@nmKU3|f{V*V zD;UxG7>#QSOTB`o_Al2QNCPH|cU(w@iMs)eDkBD1;V2#0oFE~94OiIMmW33w6}CyL zm`U)GpboFl#EqZ~N^>1jla2j88jCmu)~HEJg1K0rmV4GZQ5O>~(u|ZBY*FB7w!%u> z2=he1{<2fu`NqT@J#hfdxoV30qe!X2D)#IW@mWQ9v#O>*X%|CKvQCqEf(Ed3Xuh8l z#~+Gg05G`!MHU6@Aq%K{4}u%mk@JFx1)J+a(MAd29!aFY#3)#^h&l(e>}puSuuCyr zoeT86PO0IB3~#qJju5q9w4PCeHTj#NADv>53pvg%^UA)o)oaGtp-LezOO{5&LGJDw^q8u~6fyMPfyPSsY zmCSEYxA^VCs1x|{<6lca%(YNT<#)#<_qVpEsaR3tRdq05f$!rs7uL~y2uPM2wq;=x z8e-*7s430T5oCE&Tc&6k@@Plra2|QcvQ>OBKrQN0ju>)X*y>sUs}vzHJG&$FTh#d$ z&@sj`cnVxE%f@QT-yRe0Rf;$Cwl<3W)RAc(Id^_F*b*vCzn_X;$W^|e(v9wbbPD2z zw#b_tU+@I+@iMgF@T0DKQPrHeFtU#DCy$)scW_9CF{eu@!R!S813CqUS=-GO$G}DG zv@(&LEyk)NQ;rDOlg~q+>A-XCG?yNnOw1xqr~<}PO|B(3T6>CAB+R6#j##; zl_kuZWJ@yKMHKB)$C*sFYx0VKp0xJFIhDhoAyLL$>V=8kcGCNe9~*@42weAs_!Gv zBR5bF%~XlUK$0V9ki|D_gG2(>-O^vl#Ny0vkM)17ldJ#~2(7-@c=~$}QCa9x%BVjz z8Sq|Am%kY78j5Q0P_1D!`BOAl_EDES%2D#h-F{26Qy@Wt#6!R9iM zE`k~r@WW^#lN3o_0>aw6xQNs9NvQ9$)_JoQ1T8iXO!NI-O{l|?6$s;CyP_upD#H#l zmp0quK^)OS6v5S{)ZMG%K#2*eHr^f^{DD$Ab3a6t(lHi~M*YjurBqIgvO1ZioHiwz ziu<2$v(?=tmaCWmi3CJZy9gXy?dg?FQ8&P3s3x}fQCDNrP^996axD$XkrLix?tQYi zbW#;5M`#u_0-X#hGWuI7$cF74R780r3vd@G=XDWO0rkh96_@$Md%C76WEKM|l}k$I z>fo#WPGwB_U6NMf+`BK+bNOG6H75L?Q?^gsFIjL~xo?QM*Msh!xl0}m)@{qG49hddLL+||{QVRVyE1pSg%FKm_E(Dqh|^0!&zqcgV;_T3U1geGIJdcTyh0DIL+E`5NB{C{Joqeivp+fubJKF*aBxNZ6vSWARoM^-5{eujE^3#;;MI%Gr#S18|d)A zjci9}`8x@C+?um`K(bi!3S>2eFWM4*vvM&@2X4qJ#)jeYPbpUa z1nN6JDN^|WlkwHll>YuY)Zi=%><~mD=+GIqyw|3infw_bI-Nx$bc7Ovy~7!|W;yZZ z)a%ITamUs>O2=w2v5TK757rCl!WSJxNXwkgd)?9!rlxAr3p^p!>MQ|)TY`!Et10D+ z*87~@eRTq-`ypHtckZk=br#tXUtuNE6x9=m$wqT(Vj=e3qQ1^P*+QDubqO%Y;v&=?p8BXX+P z2~_w|;oYe8s@}a$y@YOY-d&O7v16~)STeU=5fb|2ql_xLq#l&&8LvRQGZHJ^hn zVd)^^egWQ70MGCU$MzZ7dH$<+r80&28~B&O{4I#ZZ-aS*n2OXiP7oT751({cN?r=@ zyNzz|@Sb(*r{w`~AhnqbO~wkiCbRr6-5*8|+lrIB#%@toBXg)Ld%=MBY6ug}K0 zZMD?v}j`7g=@s#g2&U_&n806SEVW$k8ISX&feX8@s7Jo^Y+=RnZW z@sKm>FeKt9E4n^$Y6dr2GqooUDH~^!z=-lx&VGYVkeK||5z>)LIv3?+cWYdg`bRn@%&wA-L;uNS{-rcdSwa-z3o zN&?8xe6KolKGt`l5d0xHG2$f}+24A5RLxvW&3FXGNO_;qaK^LzEn#ZFB2cd9Jn zN{Q{oPCRx3%J3YLMtmH$VeywR?|BtS<#lp+FiwJxb|zPJm$0>mj23K#|}nJNKm(I@GBZP zNqOW$!*=9hj`g}DtgI@3S9O9MsJt&;=wBhA@+_WxFr3o-@k!OP@_)p&#GElv9|F@^ zffh0i;#73-S5HkKETo9*@W#W#%qfKx8MI~q=l)f#DYrDtUbN;amVDelC~H7dkGiBG zADJ1KIcoWIRkG5Xn;6Pvsa&{csVR-xpi6dfy3tEjx$^}K`Iouw3-@4F@ye>|4^+p= z1{Gs+mB<9P6%zaaT5#xPd;SSpuR!6HUEG?&f1-RJ?P4JKfn$A9Pu&csSeoA=PDPWm zF|}x?mR22?kpIh>{zb}8dV(*T4wMrcEVe|Y>5PrrtXg<#wHJcAx{d=qqFEIW$CN(c^wB5}f!u-%8 z&v?=r{U0zFCU8|sE?@WzbwEAhQ|sguK2M^Pi`@&(&mx2{HZE_XP4OrO|I`NOgcb$O z=XB3c-fil#Slzs4G1h7c#Jg-VzW{wEU^^?U&xCawNK9ir7(ti~oZXzL(Jf8tQ&(Ca~b9Ad+WZ2C>MP*RH7gi@gkkf=|>@!gH?4 z2Mn~0GT=@dzgi*!eXC%IbCE^zekN|Wx~0eCj@k|4hY1(a_DyEEtG9SVZ|S~WeSYsd z$!5l$1J##i3W)EKOQbW#xW^sc{(*O~fCJbR4A$K%IC-sd zp@|oYq%zUmUzlRw_Qk5t8mfVLvgf?smRF-o7wUFt*N+){?gFP@M;wOJKLJ2}U|Dya zGnqA4-~HRV9|&R-vFBtu^S5QJ5ontXWti^U7toGwp^*}Jjrax~zOx``mA<+y8u&P9 z06uDB*AI-fVev)lwS@#n8WJ?8Q?K4C@fx{5a70{_FyEgk@F447nM)S>edfn{v+0|8 zz%beH?9J_{;Dz)3cSc;Rua>ajg-dn$4*KpV>d8d0^)b7#WZJ?RSMKvm1QrXlM4#}> zN*$5ZbH~A1FLi+aNZ8E&zO#C({wx;|WCoKm7^U7CaKC@?#vcu>_1)*F1M`2~Yg1BQ zUY+qQz9E_aek|A0+Og4F{dHN=87pvd{Ydc9>o32B7D*1v4p<~?gt3NS&5=6%v8O@Q zVQ2nKoxAw|NH5j(zX0n<5SY;PUo-5vWj8GJ-9c-PbFz7|Wltb;)U6$fo;d>0)_3c< z2YI`b`%Dh;`a^mgI2k@2J9Pi))62IdNH4S!!a|-!4IjR9y7N)Oe02w!tG6m@9wlf_ z!C#$)x7Q(hH0+Y>_~wJ;HU4ui3*-m5xZrKvJ7&MIiQkl5O$6I9Idu=aKM~CL-x_fi zF%C?QG$kD9KFReapG|j__XitLTN&j8YylmR;vM#p9GT)JLyb*ThTsoOAHMt6x^a05 zbK4yX6zY#VCN}Lf>EBkLpy{^r*S+2n9y&U*_P<0Q`66IwxGf+|aTc07| z_pa1MH-K0L$N72mb0XJ1F(N7dD<&TglXV#CVYD(epluo_noFuaqTPf1pfdr8SX5+2 z4t#?dJY%7}F#KljOHpIlQ;8e7-g`vuMJS7_aNQ@kH~P&*)aK-{2SR!`!LH}&%7W{} zAL`TkS#L=EtZL8U1LGrWFe7qmqcit{w)I~nfojo| zBA=UK_z#-m<=2>E#dn~0;C??ASt_^1M4E4fKW1{t7cCh+Cv*k=)tB6D+z(|fZ6eQs zZ?aM6Zj3+qE-{06T}P5xu4bc?=W4$^Z?o0d&7TB~qSS$D zy}H&MbP`;R?ubZe0`J2;+3M_Vi^C(+l;!doslh9#d_%BWWpYx4ND(S*C~2c&j1%;J7&H2DkI%+_s6xkeW zU2e7-ZFxx~3I$uU|!yOwR=-s+tMR_q5KsbZp~&=N4$IYa+_sSl9OHQ@!?--FktKL(|gH6vK+Kb z$-(pa>CcM?r){OxY%}7_FS37c#q7>9b1v6L2qs3CjjR3dFjJpJIJU zkgS)FRt0i1-u!87=O3r-Tf0f1E#%VYG30%*isI8OE=*Yih8X`s-P1K}ZRHyKao8dd zRU0wEtpOKtD^MJEKA*hQU5WqAauub`{%JrhQFbP-V3W$)k3_fat?e}JCur4j;MrD@ z7_q82p8zlKlw!QW2;(1HZ%5w?ojY|jZ;V~c#2lSZmewb(o@$4<}01QS`pndc0`8`sCf!KvjPz)L>NrSj|7X$S{k z0P{etyJ?uDa(D-;9k=yf&CPU>ez?@>wS{RMZCWI0;YDrmCVEx&*ZQDc3k=nDn@SFJ>KNZ%BpzHYU+_WqJosWc=} zz7KWq9#14P<*`nJ@9T`_{3<#4vIOz(gzLS(FgY;p2FiI|DJ|fh5VoKRu%{lDs4A{~ zK5&AH^@=3>$W6d)%W}D zn5^XzdqlfLPc!Q|5@N#*;24|)B(h*g>=IZnk>K>*k*$qQkWHz$KFTLPr%E0}NaH^M z{?kRa?Zs4El)RG!q-p(spd!U3Fw2P4uY}Q<>w>GqU+zmXEc53@;*bs5k@H3;FZEWk z{>G<4Bs#t7Z1pTY1x~+6?9`MnA1L#8c8N_+PP6Go=shy6DUULXcsjb2(02czIPrIw(>6#lcTh2n3%mal$i1w6sY=J!W8tGzK68|x>&(Nxb!c$D9M-g zy&R+*r|LII6gP+oC0B{PMi2S+HC~VVej=NwU6ubgW3H1RdaV)Q1MsXI@a(+fxW3*g zMG+A+o3ox$Fql4!`=+lV4V_n$@ERPK#ghcxz&(-oj(B&6by;y!MVPlTC~=beY}9I2 z+l%LHMg`+Uq+1@qcW&Jc{Uuvb!X~V=;C9%K6Ms6vWr5&~I9>C5d1^r-b0Gkp?L`yf zc)s)lBsv3@-~aQ7zZMfY#6mf$T^-`NXL~4Ho@q&1ShYp0I1d zKj@T&y75We)3^mnrMvgwz6t$5iVJ*~G& z-5_e>SZl!ju}iD|1Kt|_9WrIBgt1KLnawgK zXh(GE%vm=>^EE9J8WZ&XkrTSOG(BXLYz28<2RAKC0NV_myjH%@WFcS=@gop-a$&Kp&Fk^K-*<}p4#PSDNMZ7yF_>tDL*=+|9q3IIsx z<%Ua<6_2)4W*WMQ0|*HMsm^|>Uh|JZKX7fSRT5d83qrKIkVPn}=E&Vm6yu^Cw_b_6-6Z0erfQdns_ywfPu~QoqeiwvOp}pq{BVv zLQtwndjEO!;hU#2?WX{p&n673sfqVbsi`aPx98oxe7?1smhci%Lt{=A9f5)~x8$Sn&C6jtG*EKjF2C@k2 zVp9Km#o4}Z)F%~nK-%gwEsFc-n0CvJ>R4mSr#9%lb*@}~jvHq0!(F1b1U=mu`^)Ra zH<-O&eJpr|v(F{zRks8w6NE&MFAz17-j7u*+hnw5xc)n}r6`DM#heV=vp(v`0ozq= znd@NEo{ZtNcz7)40byq9tkK>c4sf#00r1r_RqZiEjpy*n*L0wMiQmoJr;SuO5Scvh z?w5Rt2RV6sG(vh!s{+~K@4kp3|AJ!VFX%b(v#song%X7e_dP#gHU&O`L6mEkA8r{& zj;Q-F`dm$^)F9Nx4}5a!+R1I$Kz=P0dewQj}& z*X}pXKEw_dN0E-K5egp~kVn*J!Q+(8bjcy;g74LF!P((QueU5mT<|=^1^+Z6@uJZ$ z*zw*<>jzJAv7U|#8kMIun0<)a_<|_!hgoiz2fjKk!YXsHFxi&XtDzlIkH+!aT*?c@ zpHiP627%eIxVv#nN;TFEj6at-`p4eeqfX##4G1=U$Jq00lxWZ#f|ZHqHqGaBO3_5a ztoRlT?$+yHT5jCt)c6oMxw0)D+&xHcMmlE`7W(;1V#PO})U!r8pamd^WWP4C;ui5V zm;Lidd%}Fwv4w$8H*<{8zy@>z$g>kH8d3vkBHi48?h73u<%_S|P~^1<2WAl}$O-hk zc15-qo)+q@LQn0&-2<;*Pjkc($pmSfNU*U7OE20cU`a->+~~Egw`$Rz30N4nEwX`u@jaY&`qR}*1P>R5Ce9Qkwde% zB|N)T^3qLtTh1+jNue)}65{eVe`Cd*~!H^G5-=!3(#Ec2Wf-Na&@@Uz0F zFO?eL4oKz_$XhWsA(@g(hO6DoZ;;Y1fXs?0s)+g99SWcx;oRe|PHt39PgNe8sn;?w zz)|eI*Mzn+2d}%)m$m_zqbvqto~dm-IxFAu|2`((dVKR9Um&XV@@EAMLGgaoYggpA zEDvM_KhPvga_Uy#_B2R3$Y=Sl)@xd!8-htp(V-ThqM6c(T)0^nP765)a0 z&O8tgFerHG=R#?>|A`4MI5YrQI(BoNw$1U8u)*Mba~Racurw8v8JEUzX3oTEJ#SzU z_Jb4{HKKoUx2XT>x7yuS zMr0+M;*Li(C1vET9qz(A*MnT2BG84#bONhJh|l{n`QSXy9`I2sy)5Dvna=*|b&0!K zgwzz20gUhFq;`Gxl;q}OsZiBbK}-jKmFQE2exEiHSiWGIrg`zhCzREAX8^0sh2>Mp z&FeH2qLImfEB;$kUaF&2HR-p5L5c^2tg-GGd0lYl=o8g+Dw8V{hl?h?%4TG;+d@A0 z0RlcNbqJ*T02YGb%`j+MFH3J&lr2bTo9-_Oi&s*k#yL~{B@Hkb4XDy2IihKe<+okN zTfvHFf#{&g?5`ZGqH`?ueP#`9y1i-ak7q(hQ(yJhQ^y}z0Tf9m^>9T^Paj8&V@MHS zbg5%Df+-NBtlt`pMvs8t(M?Th!5uA*|JPveze9ECcx!-=_%A0Qlr-dSXAjQVXjC4O zFnUcczOcc=YPP~#2Nj;$W!@TKy8UTm{U)(!=}w}tClSQvFBPye`Tr%i{~>zYVq07xw>FC zbIi;@1*`#5Vj!Kf0>O-~va-V;?9tu$l;dvKnbk{>taKyw>ubb0Fw>uY)K9<8F?Ql%6r@~Q*wHz)(8g=J5*C*Mr{oW9A!Zc)y~bd85;?FFBrTBkaG7O z?dkq=t_}O|^F~8-BC4;^)OLjE$6#y0K40v62frhDHtyWaEr$wciF&8Ty{a^e;#qjn zQE?@QU|x{&Xia9G@nc=vcCVW9+;7^KLey(|S^A^Uc)TCkGxHQQS(^t!BYDNrK<0*EhYl!AJIXy?`YXI9h! z$XMw=FGlgC^K(#wr)F%3LY<%NHf}IB_|8msfnc6Irn2{nDQ@D}KK(x);wFFB-Kq{e z8gaK~K|$xI@RLW&t2b_S1duf2TaFaMMMvCH4*fsvU3pkjSK5c6;-`RJTu@QzOk1df z2yR3{!H%`mD$uF}Qbq!9xS&BPAchbaN9;(Iwy0ncaq2=56c7!{l29oiA|SGha1~@r zfPhH|*~s^vdz0K7l$m~i`8?k<{B=ok&+?vkKfm)H>CwA|HaUp$)h|>977sFb1l{*Q zi=VXoMPu5aRcH^JhnVAd?4-uoM&OWxb z*xcyTae8hMWekc-?TULV)f?fmS+tJ8C-8c>Z}-+3LTIpRf{dx_LfR(Y)(8+meGU8K zeA#Q*z9Z`JMyiximgwKCUg#p*r(2Z+v4%g7QiK6UVj@sqx~CC~WRx}g4?+Ws^ol%v zYd8*sjH=4@;*Q>>8>V=M8E5QQ7C>-HILuV50|89JvN8`7O%4I~&5x(?ScY=~ zx=aA`YiMvf*m(m4an<)4Ka(4yP#D|>KuSeU zhC~K_-NIPIyJ=0mUy-h&%`2WQ)d>QVb%0^E<&O*Vra=Aa9)&V;1>7MXlNh0DGXra? zgmB__#CRq-&>?X%k53OX6`XdDI}u*x*?QK-*4>M4x&?}vYJKIE>sJ*nstP(Hy6;a| zstZnSy%yy-hNsunq|MqvTd)R#JEMm3C|#u;eay|mt7-YM7;BMVJ-*dsD^{(6MM`-+ zq|5(Tk%|96|4lL@glxZ)_bSz|dVz3PX?lR3y&lh9%swOI>qBfjje%+>bpBPJ|F?PJ zvr;cazUVng4Kb;)6T<)lLSC~OQFuyK5_JZ+JGHS}7LRpu;k_=XZ9Wz|mHp3idzUA#a(klZL|T&v$aP+N zR|Uf9DZh)|v$wshr%#vZM3M98q~eYO4Gv5bTcvvQ>A`Ds7$=+zByMoOLm$kl$YWON zk~4;mWH?)kfS0863CK+#uJ-F9C$~5^<6kuRagf1EcTW#?mJV})Lb|&{{AN8iqRJYT zg93MQ<@&FlF|3#x)2@q=5UkI)G%eL~#gXk4Z!3{X8^|}PK%J4$QgQGxYe1$F90Hj> zSu)h=#Y1_HbA8N9j1%Qt9w{rsaKM}oxRAf6LyGuCE=ql!tM&;y%hrHC15}!s0`$3si?!YWqn>Gxq*1~nb z$U>+CpV#O~wtFTvR{;=SD9Y-dSuL{WRlt5#cBMDG2hrUi)q|M2q&~=z`4hOunp=C3 z4t||stxTAUrZ&sGw(hsM8p07knL9jyoElRWt{;wjzR_X-ORrkm&CJ?J#_;pfh`1LFGs27;IGh{hPF5eCPa0n;CC7E8#7VKq z?#PwO{7B;VLXuR8?D*JOhI$7pZv|f9JEQoP940Iavr&_)9= zM~cV1sM!=h42Qmjv@a%=s-I$UToaUKs|>GTn?5=yshByA)-%?&P2|##IS4>CP>>$Y%O7cla}g{gH7$R^To7wcqUvEv=I9Nnx%cZ( z7^biB%RLAUqFlg~9pel7x>`+-Mv)pi0(4@!o* zUX&acju?mB7&S|yr_8~b>xVS{Z)+Pr!Iqk{QZT#jVR!7E_)IJx*BG6zF{OB;dL8<6 zAn!u}TuoR)oH-JNe_nxHMDlP;NiQE#`sA+0g@CkFTInoz#=I4T57!c0=EV8{KQ82; z+Wo8Ix2wcvABYrelR3_!B-g3N2~N?3gbn3G{!A+%Y-F3KQtgd)&NDD+_y@s^umau4 z5_T+Ue4?6y=deno$;lZPM*TEO2~<$|*)khxK0an!E<L%j5)&#y5+vzJIuV$U=ukbmq`F2wS&gAwS~Ob%eihDAP4$vJd~ zHJcZOTm8tl08=@{G7k&0$kH^7hZ%dBcPn%`p&n#fx^30xMy6?&b%>SFmHw^SJUnq5 z`fhOhTx(D>fkQ#ZQ?QN2Q=hHuW~o%C!SQFvPg#8rDW&GRFPD9|e-J!l{Jcv4Nxx&Ni*EHZ`A4<76#hw1+UE)F>nAVWRN(~O}N4M5J z>VJFyTe#xN8Ccknj3Ytu*(9x$D(AbHA+AM7xYZWtM!X$o;qR8P{|@9|*A+>m!rK+@ z1AIVfMk4*Xq*?kIHZ7jTuAv>{ewb8%<>uP)5E41KCgc&VaxDf~{=0>>wBKF`qzCTz zI?2o*og>Zghrv7oz%az}$fP%_-@A*3^NLryr+uQPaCW<*ltGZlL2p2Pd-Q{&^*4_- z?+xM+NVggCwzcA|P0!|UJE|!uyZ)w3Y8}LziYs`uwh7v$MbXp7wsz}GyMZwL5QYyx z?jVwiRZ&LGl0JB&By|x+gM?m9Y=WIMgf<^F9j5LZrGjh-^ zUs8VK004nu_7t8*e)D>kGn+W`(XP0_UL&omR*>HR`kS#85lET`!gR*wPjdH%n~k+s zV^b(v<}>>yrNepYPlb3$<|E@)n;F{?zdWhPLtz82|`LPPR$<^y-D+IGZg;a(v@wuHx?ps)6XocC1MjeJT*9?uo>j>M)i1yRIx zGf4Mfg@w096r-al3PnxWyTU^5GDuIh$h?(HhTa3&+ec>fHSbRi;71XM#?2R5w+#VW zdT#5Qqusfee;Ik}HVndutxuO}<*(VO+q?LH-64W?9sOv2(d!M0!Ra)N6rLSz|^{ zWG>b9!9{3`5U14U_%GCN{c8+435JD{8byB75oJX9ZN9lO=hXMcYm(`FAF?<2kN;Ee zNh|AL8}0b!mOE?I9ZvGt;92}+oTUyrR|{#uOs_6{Da#dX+UXU*3A`hz)5*{}(?>F% z$R+!#dH3w5EPqYNl<6Tcyz=_#{~p8#Ex(|mP9ix9pr^$lZ2^ddU!#i(Q-hU_ z;!m8O5qB|xnEfr`&*SlfhQ&C|Sx32z7v--=td_+@jE_^~;jp)$J&~Q+vi3WaRZV*| zRt(x^RCUKqMmuXTX!3-DFeJV0m7n4omtHvZ!;~q@wZN>TdF%P&*Xu_EgM$smOO5`f zxu;}I1V;7$w7wl4FxE1vLPk%`tzbi%(R+Bf(5sY{ppFnq@J)8yw~w!_b?PgO1i*wQ z`3!A^dhe6(dG0EFp z%d?Q@FQer7=WFu(%CJwWm9jQLKy!FH+cTz2t)_E zk}g_nhu6D~&t_=Igu`0&lFQU^%qKB<)Jw>LLnj2@#a5goJKmOn2#T-@inhNV3Zyoa zUDDfI@t_aF+mL?UG?*98Txc8FwY+lW#zcjNV5`FNe0rUv-OS9CojBsn&1{ohN8JM9 zR39>jVH00>ji4`{=g^N7^Apc5#I|f#e&A_^=0#w1e0rp1U*J)1qW$cj+u&3LiQS=0 z^36oPH|~*vZ+{QVBb9z3_XsUprP)aVdf8o>%PRT;S8sC*g}n)CQN<6^6iq1ec;3R^ z$`|!2-ol`$e{zp|_c3rHxBbEEr2(}ionBnY|hf$0p`YBlKu~cj}XqC$KKQ$_6HTUzbTH}c-yFaS2 zBv3|^&?)Bidpa0j2Svx@md#a|U!YK`Qi&kv%2IOzwg}^L#n_q%@{8bT!UVetot_K| z%bu|FzQWWswDMns$=r3Hu_m(S?*L$MG>XqLHP+VJSGwPC&&+v`9~A`|*8Hh3a7U8K z|2XcUoqnp`>Gq*|+E!)Ssqn=smHhA-N6QZf|K{~m#FU*jEih4K?~iYbhf*!rb+mJt zSYQW3erQ{Yi-(u`a&wI|8{NcIIo!i)bRKY(jnooq<ltl%7-EI2J4gJQrVx;|hhGmzh_df8{(1 z6={8B>aDObw-k>1oUeMoi&DNX$4`x+!Ky~e%0|dxRHSe`oTJy^RE44RAB~{N9sOjo;?)i!* zDTPCm&f}P1XduZ_X%wOCC3Mn?+vVN-w`nQ)K=EqaMSx$JB=Kvp`3g~LK#-W#2e&Lq zT*S&>7^jY9B4#c73nrBxnw{f;C7Dm5OevYA?AXrIHM}f^a1RmbdMvdP;9hA>c>4V{ zic|Ys{9b;7bBAKdbGEor5^xU_cit+!%{F4mJ@YHHtQYDgOJp%z`oe1C+KL=kq4=zy zBaG*sFMrJW$x-e+jH4of3ofyB-J^N6$HrU|ZnwmLU!#artyX7?Yq}}F>GbePDI%gl zS0S^z*pgsiWLO{@``^F+w-oqz*(qUZ^}>#)h{3fO+Ajkmq&(q_n0hZQS0iVq#ELP~ zx3aVWn6cXJ@h8{UPK2b8*eo?~X}bF(`iLNKdU3y}XB5Q#Si$ zBW^GvRJec9#Lu5#WTQE0Yp{Be5s5g=ZvI)G8hvI*gOo0}IwvXYN!rm627oxfgp!nn zd;CgflFIxK2B)7~@G@>_)_R1~6nU2~_^QkL$~Mg2Vy)fR`tqR#iNh=L46XM=;NO|D>wCZ*pP_6o@-*MqQh2}`+To$NAW9-Y^G;0ctj$!ct9nP4PP5~|M7;Dl}9H4k=b zUo}H5>P0K}lSEK)397kgi-!iN|$%VEbK&$8Wr^`NVBuhU)RksMpG#ei7V)fmT3K@kV+S2f+K zt&!#ssUGxi$e&qvTHR@OGtRPAJ&NYg%8=hTVl-Kki2B^roh)u;KkkD*v`+b#eN|a`0_q13wFNm$48DZt(0G9z+oqFf zo_2Sa%R^aPrX|b8V6~H4wb^%6a!DAV+hxk`l!!6j?&UCR9j98@g>mYV@fqko%U_at zL8uxt3B&Ox(L~$VYp4F+%qZPSw@6`D^;=!BYTc28ZN_A&q;30(dsWH)l1?qr@p!1D z^x&N(S2#G0b@LCrc_#8svwJT4%7b<^uNEB_p3EI>H#x31J*Qy)4eAGaYN7FmZxqMN z+alzic@>4^d>c0lShz}1H>BO?>?r5} z;X~LloN4tKN$~BFug`nB%-Ui&1Bxhh5pc1R0`oSz;@w+6YsvBFMnoL8R4 zm`R5!ZYA7^HOVy7b2>WjueLD~^y&Vcr9Hh4ih%meYWpf3=UsA0O;55GlLuv{Eg@^a zq36~Y=UIqxksE#BP*r4;s77jNaK4H!jF@O-gFA#MuFvia31QXf8<>Ix9t(_gbxBue z_lGZYw$ysHpfRT9FUczKU%o=ej8xvkGSZsgZnn>=BBCH9;4hhAOmtDA9@pIVm$VgW zD)xcI18K-7rSJTw1wqTT9u;hgee7Vd%A*~tRx(W2|m-nb<$I55#&{~R?LzIzDHYQOPdICnBaOMYlhZsN1WiN($ ztYWB0hZ4T9c;Ut55uc`zFF?h4dVmSr8VolHeiOe5v**I8p%b?1AT!2H9Z+Cei@v=a zv!*%?qA0lJNePnhg}m**lRPw|XA-~)<(IEecs?NfOyCSvR`(^Lk-_rhdQ3LOm@I|1 ztwO+;|NNZF_)UksFKjU;OTlex5$%m|mOJljV*oo(zlE>>glmfyA~e7+yg29(3TAM( z#FVTtSi<$*lw*0*-!ECWk^b*UyswyF7(JahB8Zr1`ILPY6$mg#U^TuBym4pJ}`VL?u1uYkXI7>sE#{E4{T-JLCMTaPQy6f6z#9+zB^M9mPe* zEo6mox+z(U@C|9GH`FaVXXunRUcrf>FAMxV2ftSB@SCuu2Z|A*Yjr?fh+;@2Mz-Lz zJShMA1=9>sepf+{MGwkeL_i_SX^NL-A>h;yw?P0aaaLuTX5_rq$)LJb!{M&iN7v=( z4QXHT1G0`IGUGaXhnw`^;p?z_ib8HA7XA=^BX2mJCz@+YRw^zz+gL9dqY;K~uFN(i zfIm2QbGqwCBD6{c07T$U6updjjtAqo642A&IahbN>?kgBB#pQ}AC*vrr6H!CN%6q5 z56)?DI2%n?+-usgUKNys(@{qv2j-O^(LH_X4fH!{jH>;Cj3D1`>|*Wl9uvc+fsjmM zka*;2Nr7o4=4N`a##zi}CW+vDLwxv#x_$OrsS`E+M(V*n#p`Hv2q?Xl0cMT#1=53@ z(F4!h&DKOoxR+3*!STh<3^5=2E_kZ!Abn}DG7_38RRL2M==VH})-9V!9t=8R%kvuP z+eTHfmC?&)Zwb)FT1ag!%6j=-qwriE?a^gnEH@mNz9i+SRC?uD2+qx%edP%*XCo&f z-tIsUGvKzu{`6mqPQc;zbq~y0q7meca|Sp5ibI}(y^!(V4p=HpkY>TM1Idp#eiHTG zt?PY^C{o2z_uN;-Jp%S+e4El0&)?=Z;T&g<_#|<`)d{z=XK1F;ItStULKx~7I!n

pWL?{-^wT3eSz+Yh|=8Tzt$dJyJz%||+2@cl9whwQ6-eswc1aVz; zo#$_#^&XzNL`r)+*JHfTlRU2JF@vn|UVu5(v)w->qlT*d;%z0d(Psh*BC9WRqpetQ zuN=W@FCZIfXPZGN^sVc;%51UIGxQ(sK3nEitm47r6%)sd_<;ZD7yL$apKBf#&`trw#y!NLl!3)08AW(uXxo8Vk&=`G3r9E2SlJSQ{bb^R8}8lz=Bn?Pa{1 zOijew-X4@@Pcd#NhqLtg!nIgDo(7WVAB&}#8a60S;Ts!Anh`EixQLk@B#P7XHySYe znOi35I-)vNzvsEq8hCMnwkE;H9HsB`oLGG7njpntV#98#$t*uBFDZJk#FrPa5nCP4 zwL_Z}$iBT)U|7Nolw*aM`o>4}(Jk`1gXlk07GfLdGft+lkqs0#x0)ZNMin64&&hV*J(b`!;FK%rrg09# zn}Qn(ksy*DCh$10dk9{dXkfoY@wSwv?%@U#t>Eu+2l8Ba1CTj<_+8i?AyoN=e?l55 z<1jE-(n{%i%uC-`+LK+irqH!Rgx+ddMc?R8h8U8iLD2@OVXaEj^VrTr<%@649=FjY zmiAKsMQ;FQFnk?|Xkzy5N48UA&tK>8sk0@3NfOQo-)Gcj$!B?Sv6+?e*VLb%?f zRJS66_#?9IyQISdT!{#O&gzURXj3T^n@^K45fJ%Oqpl&U-s?%p&TTsn^*L_=mcP z1pVJO@aw9I3=bV=v;(Gz#cGpC?ds|^0Ic)Sy5dSbKGfQPWlM3YYPe53U8{tcNe#~Z*BNwy{kSvR#pKR$8TZ?( z3QE%y$v{$Nw`S*Xa-iGjd-3BD^lqzd?$fXXlqqSK=nW~Rs7p%AzqEbl^%mXr1{%V; NweFwZ_>14){}&CqT}=Q0 literal 0 HcmV?d00001