From edc9eb5d73719ebda6f28a38ad60f8e9fd2268df Mon Sep 17 00:00:00 2001 From: Bingus_Violet Date: Sat, 24 Feb 2024 12:12:57 -0600 Subject: [PATCH] More stuffs --- .gitignore | 1 + Maps/Testing Purgatory.tscn | 10 ++++ Player/BasicCharacter/AnimationController.gd | 34 ++++++++--- Player/BasicCharacter/Character.tscn | 42 ++++++++++--- Player/BasicCharacter/CharacterController.gd | 59 +++++++++++++++---- Player/Skins/Square/square.kra | Bin 0 -> 22477 bytes Tilemaps/BasicSquare/Texture.kra | Bin 0 -> 22163 bytes project.godot | 1 + 8 files changed, 123 insertions(+), 24 deletions(-) create mode 100644 Player/Skins/Square/square.kra create mode 100644 Tilemaps/BasicSquare/Texture.kra diff --git a/.gitignore b/.gitignore index bf83296..dd5ca34 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ .import/ export.cfg export_presets.cfg +addons # Imported translations (automatically generated from CSV files) *.translation diff --git a/Maps/Testing Purgatory.tscn b/Maps/Testing Purgatory.tscn index 9fe373b..d3bce56 100644 --- a/Maps/Testing Purgatory.tscn +++ b/Maps/Testing Purgatory.tscn @@ -40,4 +40,14 @@ tile_set = SubResource("TileSet_qp0ib") format = 2 layer_0/tile_data = PackedInt32Array(589824, 0, 0, 589825, 0, 0, 589826, 0, 0, 589827, 0, 0, 589828, 0, 0, 589829, 0, 0, 589830, 0, 0, 589831, 0, 0, 589832, 0, 0, 589833, 0, 0, 589834, 0, 0, 589835, 0, 0, 589836, 0, 0, 589837, 0, 0, 589838, 0, 0, 589839, 0, 0, 589840, 0, 0, 589841, 0, 0, 655359, 0, 0, 655358, 0, 0, 655357, 0, 0, 655356, 0, 0, 655355, 0, 0, 655354, 0, 0, 655353, 0, 0, 655352, 0, 0, 655351, 0, 0, 589815, 0, 0, 589816, 0, 0, 589817, 0, 0, 589818, 0, 0, 589819, 0, 0, 589820, 0, 0, 589821, 0, 0, 589822, 0, 0, 589823, 0, 0, 524288, 0, 0, 524289, 0, 0, 524299, 0, 0, 524292, 0, 0, 524291, 0, 0, 524290, 0, 0, 524298, 0, 0, 524297, 0, 0, 524296, 0, 0, 524295, 0, 0, 524293, 0, 0, 524294, 0, 0, 524300, 0, 0, 524301, 0, 0, 524302, 0, 0, 524303, 0, 0, 524304, 0, 0, 524305, 0, 0, 524306, 0, 0, 589842, 0, 0, 655350, 0, 0, 589814, 0, 0, 524278, 0, 0, 458742, 0, 0, 393206, 0, 0, 327670, 0, 0, 262134, 0, 0, 196598, 0, 0, 131062, 0, 0, 65526, 0, 0, -10, 0, 0, -65546, 0, 0, -131082, 0, 0, -196618, 0, 0, -262154, 0, 0, 655349, 0, 0, 589813, 0, 0, 524277, 0, 0, 458741, 0, 0, 393205, 0, 0, 327669, 0, 0, 262133, 0, 0, 196597, 0, 0, 131061, 0, 0, 65525, 0, 0, -11, 0, 0, -65547, 0, 0, -131083, 0, 0, -196619, 0, 0, -262155, 0, 0, 655348, 0, 0, 589812, 0, 0, 655347, 0, 0, 589811, 0, 0, 655346, 0, 0, 589810, 0, 0, 655345, 0, 0, 589809, 0, 0, 655344, 0, 0, 589808, 0, 0, 655343, 0, 0, 589807, 0, 0, 655342, 0, 0, 589806, 0, 0, 655341, 0, 0, 589805, 0, 0, 655340, 0, 0, 589804, 0, 0, 655339, 0, 0, 589803, 0, 0, 655338, 0, 0, 589802, 0, 0, 458764, 0, 0, 393228, 0, 0, 327692, 0, 0, 262156, 0, 0, 196620, 0, 0, 131084, 0, 0, 65548, 0, 0, 12, 0, 0, 458763, 0, 0, 393227, 0, 0, 327691, 0, 0, 262155, 0, 0, 196619, 0, 0, 131083, 0, 0, 65547, 0, 0, 11, 0, 0, 589852, 0, 0, 524316, 0, 0, 589851, 0, 0, 524315, 0, 0, 589850, 0, 0, 524314, 0, 0, 589849, 0, 0, 524313, 0, 0, 589848, 0, 0, 524312, 0, 0, 589847, 0, 0, 524311, 0, 0, 589846, 0, 0, 524310, 0, 0, 589845, 0, 0, 524309, 0, 0, 589844, 0, 0, 524308, 0, 0, 589843, 0, 0, 524307, 0, 0) +[node name="TileMap2" type="TileMap" parent="Map"] +modulate = Color(0, 0, 0.486275, 1) +position = Vector2(1607, 573) +rotation = 0.785398 +tile_set = SubResource("TileSet_qp0ib") +format = 2 +layer_0/tile_data = PackedInt32Array(589824, 0, 0, 589825, 0, 0, 589826, 0, 0, 589827, 0, 0, 589828, 0, 0, 589829, 0, 0, 589830, 0, 0, 589831, 0, 0, 589832, 0, 0, 589833, 0, 0, 589834, 0, 0, 589835, 0, 0, 589836, 0, 0, 589837, 0, 0, 589838, 0, 0, 589839, 0, 0, 589840, 0, 0, 589841, 0, 0, 655359, 0, 0, 655358, 0, 0, 655357, 0, 0, 655356, 0, 0, 655355, 0, 0, 655354, 0, 0, 655353, 0, 0, 655352, 0, 0, 655351, 0, 0, 589815, 0, 0, 589816, 0, 0, 589817, 0, 0, 589818, 0, 0, 589819, 0, 0, 589820, 0, 0, 589821, 0, 0, 589822, 0, 0, 589823, 0, 0, 524288, 0, 0, 524289, 0, 0, 524299, 0, 0, 524292, 0, 0, 524291, 0, 0, 524290, 0, 0, 524298, 0, 0, 524297, 0, 0, 524296, 0, 0, 524295, 0, 0, 524293, 0, 0, 524294, 0, 0, 524300, 0, 0, 524301, 0, 0, 524302, 0, 0, 524303, 0, 0, 524304, 0, 0, 524305, 0, 0, 524306, 0, 0, 589842, 0, 0, 655350, 0, 0, 589814, 0, 0, 524278, 0, 0, 458742, 0, 0, 393206, 0, 0, 327670, 0, 0, 262134, 0, 0, 196598, 0, 0, 131062, 0, 0, 65526, 0, 0, -10, 0, 0, -65546, 0, 0, -131082, 0, 0, -196618, 0, 0, -262154, 0, 0, 655349, 0, 0, 589813, 0, 0, 524277, 0, 0, 458741, 0, 0, 393205, 0, 0, 327669, 0, 0, 262133, 0, 0, 196597, 0, 0, 131061, 0, 0, 65525, 0, 0, -11, 0, 0, -65547, 0, 0, -131083, 0, 0, -196619, 0, 0, -262155, 0, 0, 655348, 0, 0, 589812, 0, 0, 655347, 0, 0, 589811, 0, 0, 655346, 0, 0, 589810, 0, 0, 655345, 0, 0, 589809, 0, 0, 655344, 0, 0, 589808, 0, 0, 655343, 0, 0, 589807, 0, 0, 655342, 0, 0, 589806, 0, 0, 655341, 0, 0, 589805, 0, 0, 655340, 0, 0, 589804, 0, 0, 655339, 0, 0, 589803, 0, 0, 655338, 0, 0, 589802, 0, 0, 458764, 0, 0, 393228, 0, 0, 327692, 0, 0, 262156, 0, 0, 196620, 0, 0, 131084, 0, 0, 65548, 0, 0, 12, 0, 0, 458763, 0, 0, 393227, 0, 0, 327691, 0, 0, 262155, 0, 0, 196619, 0, 0, 131083, 0, 0, 65547, 0, 0, 11, 0, 0, 589852, 0, 0, 524316, 0, 0, 589851, 0, 0, 524315, 0, 0, 589850, 0, 0, 524314, 0, 0, 589849, 0, 0, 524313, 0, 0, 589848, 0, 0, 524312, 0, 0, 589847, 0, 0, 524311, 0, 0, 589846, 0, 0, 524310, 0, 0, 589845, 0, 0, 524309, 0, 0, 589844, 0, 0, 524308, 0, 0, 589843, 0, 0, 524307, 0, 0) + [node name="Player" parent="." instance=ExtResource("1_jcngi")] +floor_constant_speed = true +floor_snap_length = 1.0 diff --git a/Player/BasicCharacter/AnimationController.gd b/Player/BasicCharacter/AnimationController.gd index 8273920..9fca59e 100644 --- a/Player/BasicCharacter/AnimationController.gd +++ b/Player/BasicCharacter/AnimationController.gd @@ -2,14 +2,16 @@ extends Sprite2D @onready var player = $"../" +@onready var wallSlidingParticles = $"WallslidingParticles" + func spin(veloc, delta): var vertSpinMult = abs(veloc.y) * clamp(veloc.x, -1, 1) / 1.5 - var spinFactor = (veloc.x + vertSpinMult) / 20 + var spinFactor = (veloc.x + vertSpinMult) / 30 if player.direction: rotation = lerp(rotation, rotation + (spinFactor), delta) else: - rotation = lerp(rotation, snappedf(rotation + (spinFactor * delta * 2), PI / 2), delta * 10) + rotation = lerp(rotation, snappedf(rotation, PI / 2), delta * 10) var landed = 0 @@ -18,22 +20,40 @@ func _process(delta): var floored = player.is_on_floor() - print(scale) + if player.is_on_wall_only() and velocity.y > 0: + wallSlidingParticles.emitting = true + wallSlidingParticles.global_position = player.position + (player.get_wall_normal() * -8) + wallSlidingParticles.global_rotation = player.get_wall_normal().x * deg_to_rad(45) + else: + wallSlidingParticles.emitting = false if not floored: spin(velocity, delta) landed = velocity.y scale = Vector2.ONE + + if player.is_on_wall(): + rotation = lerp(rotation, deg_to_rad(30) * player.get_wall_normal().x + snappedf(rotation, PI / 2), delta * 15) else: - rotation = 0 + var floorRot = player.get_floor_normal().angle() + (PI / 2) + + if abs(rotation - floorRot) > 0.9: + rotation = floorRot + + rotation = lerp(rotation, floorRot, delta * 10) if landed: + rotation = 0 scale.y = 1 - (landed / 800) scale.x = 1 + (landed / 800) landed = 0 - scale.y = lerp(scale.y, 1.0, delta * 10) - scale.x = lerp(scale.x, 1.0, delta * 10) - + scale.y = lerp(scale.y, 1.0, delta * 7) + scale.x = lerp(scale.x, 1.0, delta * 7) + + scale.y = clamp(scale.y, 0.1, INF) + scale.x = clamp(scale.x, 0.1, INF) + offset.y = (8 * pow(scale.y, -1) - 8) + offset.x = 0 diff --git a/Player/BasicCharacter/Character.tscn b/Player/BasicCharacter/Character.tscn index 7cdd255..ed4b993 100644 --- a/Player/BasicCharacter/Character.tscn +++ b/Player/BasicCharacter/Character.tscn @@ -1,26 +1,54 @@ -[gd_scene load_steps=6 format=3 uid="uid://cqcjan67wgkc1"] +[gd_scene load_steps=9 format=3 uid="uid://cqcjan67wgkc1"] [ext_resource type="Texture2D" uid="uid://dvx8lliqdi3dv" path="res://Player/Skins/Square/Square.png" id="1_3vfyw"] [ext_resource type="Script" path="res://Player/BasicCharacter/CharacterController.gd" id="1_c5ycp"] [ext_resource type="Script" path="res://Player/BasicCharacter/CameraController.gd" id="3_2bdku"] [ext_resource type="Script" path="res://Player/BasicCharacter/AnimationController.gd" id="3_6plye"] -[sub_resource type="RectangleShape2D" id="RectangleShape2D_42acf"] -size = Vector2(16, 16) +[sub_resource type="CircleShape2D" id="CircleShape2D_jbiem"] +radius = 8.0 + +[sub_resource type="Curve" id="Curve_ky2t4"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.738916, 0), -1.78462, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_d404m"] +curve = SubResource("Curve_ky2t4") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_65t6y"] +particle_flag_align_y = true +particle_flag_disable_z = true +particle_flag_damping_as_friction = true +direction = Vector3(0, -1, 0) +initial_velocity_min = 34.78 +initial_velocity_max = 34.78 +gravity = Vector3(0, 250, 0) +scale_min = 2.0 +scale_max = 2.0 +scale_curve = SubResource("CurveTexture_d404m") [node name="Character" type="CharacterBody2D"] +floor_snap_length = 3.0 script = ExtResource("1_c5ycp") -[node name="BoxCollider" type="CollisionShape2D" parent="."] -shape = SubResource("RectangleShape2D_42acf") - [node name="Camera" type="Camera2D" parent="."] zoom = Vector2(3, 3) position_smoothing_enabled = true -position_smoothing_speed = 20.0 +position_smoothing_speed = 35.0 script = ExtResource("3_2bdku") +[node name="BoxCollider" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_jbiem") + [node name="Sprite" type="Sprite2D" parent="."] self_modulate = Color(1, 0, 0, 1) +rotation = 0.0123838 texture = ExtResource("1_3vfyw") script = ExtResource("3_6plye") + +[node name="WallslidingParticles" type="GPUParticles2D" parent="Sprite"] +show_behind_parent = true +top_level = true +position = Vector2(-7.79423, 4.5) +rotation = 0.785398 +process_material = SubResource("ParticleProcessMaterial_65t6y") diff --git a/Player/BasicCharacter/CharacterController.gd b/Player/BasicCharacter/CharacterController.gd index e709e39..3232d1a 100644 --- a/Player/BasicCharacter/CharacterController.gd +++ b/Player/BasicCharacter/CharacterController.gd @@ -3,32 +3,71 @@ extends CharacterBody2D const SPEED = 400.0 const ACCEL = 7.0 -const JUMP_VELOCITY = -400.0 +const JUMP_VELOCITY = -450.0 -const FALL_SPEED = -JUMP_VELOCITY * 2 +const MAX_JUMPS = 2 +var jumps = MAX_JUMPS + +const FALL_SPEED = -JUMP_VELOCITY * 1.5 var falling = false var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") -var direction = Vector2.ZERO +var direction = 0 + +var addedveloc = 0 + +var wallKayote = 0 + +func launch(veloc): + addedveloc = veloc + velocity.x = veloc func _physics_process(delta): + direction = round(Input.get_axis("left", "right")) + + wallKayote -= delta + if not is_on_floor(): var lowGrav = velocity.y < 0 and Input.is_action_pressed("jump") velocity.y += gravity * delta / gen.boolToNumb(lowGrav, 1) else: + jumps = MAX_JUMPS falling = false - - if Input.is_action_just_pressed("jump") and is_on_floor(): - velocity.y = JUMP_VELOCITY + + if is_on_wall_only() and direction: + wallKayote = 0.225 + + print(-get_wall_normal().x, direction) + + if Input.is_action_just_pressed("jump"): + if wallKayote > 0: + velocity.y = clamp(velocity.y + JUMP_VELOCITY, -INF, JUMP_VELOCITY) + launch(get_wall_normal().x * SPEED) + elif jumps > 0: + velocity.y = clamp(velocity.y + JUMP_VELOCITY, -INF, JUMP_VELOCITY) + jumps -= 1 + falling = false if Input.is_action_just_pressed("down") and not falling: falling = true - velocity.y = clamp(velocity.y + FALL_SPEED, -INF, FALL_SPEED) - - direction = round(Input.get_axis("left", "right")) + velocity.y = clamp(velocity.y + FALL_SPEED, FALL_SPEED, INF) - velocity.x = lerp(velocity.x, direction * SPEED, delta * ACCEL) + if is_on_wall_only(): + velocity.y = lerpf(velocity.y, clamp(velocity.y, JUMP_VELOCITY, 100), delta * 10) + + var finalSpeed = clamp(abs(velocity.x), SPEED, SPEED * 2) - abs(addedveloc) + + finalSpeed = clamp(lerp(finalSpeed, SPEED, delta * 10), SPEED, INF) + #print(finalSpeed) + + velocity.x = lerp(velocity.x, direction * finalSpeed, delta * ACCEL) + + #if abs(velocity.x) < abs(addedveloc): + #print("boiyoing") + velocity.x += addedveloc * delta * 10 + + addedveloc = lerpf(addedveloc, 0, delta * 5) move_and_slide() diff --git a/Player/Skins/Square/square.kra b/Player/Skins/Square/square.kra new file mode 100644 index 0000000000000000000000000000000000000000..6264babb4c5770392eb3b8f3cde64e713a9a30e9 GIT binary patch literal 22477 zcmeI4WmFv7w(lEvcW*4X2X|;(gKKbicXtUc!3hKn5*&g{fS>__1#2uo@DME6Yxch9 z?sIa_dFPJt-iIetvwBq(bIw|8)vVd|;Wz%O3NWz9fXB@zT1)562}~IdWdE@tLYjk( zgN3_~vxSMXv%QU(iMx%HBbzsiovV$zi7Lbq_Ybp2$H?d&_D|3N01zGkKzVdDv2iqa zGGq02uus=8bo$DU8*p5Ea@#kWB378DB*&zuqwlfuS)S=|%0=kxCK z)bTJ0SQjvH-Zq3lXO*K?h&L0-l(nI}Fc>XY>B<_1yQU%v3*+zUo7O=T(DgbnFCI&1 zYU}=X^Bm3=?u9!SvCNdUfCS1oi@3`|LeXg%zU_E*^{UL2ZznnfRwzMsxI6(miH|*C zfxX2CrLw)KP%<00dl)8wzeT?6s+2sty3zdXb0cOuzL2Y^2kD?myh@^~Yk*(}X)*ui z$7P9@fOwt|%l8f~XjR;khaLG7S#Pqn=gv4%-kLLX-E`4pn=}f8RcX_B@ZMAn`nL&D zm}5SSM3S!7ulGfAaIq0@2G@U^;!noLg${ToYm$qh?6*>;jTc7Hh1&|0weVb0)zlhs z9@R)Ut#Fqcn4lNud`3LT)y41{jBh(QH1ukJC!7_zI)gKcD4nal+PIktI3E|xRmC*t zOH!T8%jxUNnPq*BMhuUVFaMH{X!s!^nwEk5mrC~0Ri=am2=&$aAhwOttL{w;+6Ab0 zZqq?a{&_#M{YRU$d|TJsQh2XQNf6_wV>Y-$GYTWiFU&NRC7N__gynUHEVGuLEn}RD1f~$AQ4$ z`(Q0(HQuudimPR`?A*J+xliGUmMmQ7j0Oa@6*gQnDVeKjz6Dv4xnT;Em*mIi)>J5w zmU`(T$6De?%Xk_M%R%$h#C(Rf<8Sl&Zo9`+iX{2vwrXWtQ>k0iR1yQB{xRb}si`ED zLID7dFaQ81B;z63?%`nJ=x*a^>GYWPuhi-sm)J2^?(kyqRd8tqq+miUlk`|s8?9kL z?(npN;SSo!?hm$yTckaIavAM+f8V0f3$_}wXs9lxj1@!u_9ii9V zI_)Zy_Dejb8uBlQiEY$>5%X0*)jVUg=kN+BOKj8C>_mOIDM=cGR&4oDhYq`d%*5~G zZCAcdNKQRT&|xWkP^}Nu>r8rWzhWQcW@-2>Tu7m%iTlfpw#vH$)^0!FK+lwri)`&c z>m~-$0Ev7&c^z?D<4E;)Xp80ACHfKT7JYF(>wKEfp2jKjG`%OGL~&K+e7c1VrPKmZ zUtB{?-O)^8F-KA-Z8~H{KTcFnddtnv`oOC@q)?|7<>0cg=gRvhzpb>l{*?C-%Cp1R zV3ur!+6&S918nK5fIYM$Vup~S^!fZ#_9Px-IzYs_;Pao(NRZwfV1mvA#8YpiLX&mD_Xgo}v7eAZnG9BZ z^`AyX9s88enm~!?wz?|3Fj_R+4{qI5Ic+F~#ks~SD52wZ1 z>q{!*iyrp~I)vC+(o^hGvvvxZrvxJT4IK}+n@*Rk?Z>jFw(Q0<_zs^7c+@XHt@FRD zc9WgPe=ysbIA$iE_RE#33C!GYijiW<@<|W=?)iWGKJ`_!{tk?;jBG zzw)7Y_%|EOuJsYw$2p)X2~A@STlBJ_CIor_c6zy9spoi03_4sAiXdU0A>^g zLvezcA>Sf^2cQ@b7EA+4bucUk7!D0g0szDP@7dXatp~%Rg2@0tPRRAaWZYor#{qyD zME-rkZvYN>M8R+(2MobrScv;$7%-g6|K0)q=S2Vi80k9T0FLv|6+D1<0mGyJbsKO1 zoAB(9XNUlsaCMJ1|E?wzdYIQp2U6 z}uwC_N*8EWI2o94zRC817hfVQ6e&5j1>!a8b{YTYkfw zAL~ThjqRNKLs{v&52bUp$MAslwCLbr@7GAd!{y<8GF+0`Iqe8&4Ty*UjObwGFL%%z zW;DeT>OBuOBq~rpCxxibRB9glRvv7_#iacqZ^ND{UI+sNvfnJu!T2rBEfx7^0$VTOvO)0!YpQ>Bfum6h-eNw#6fs^A0NGIz8JhK%g;hgJu?2QyG2!V6A{^92ah2z8FM38qp zhML+f8v*D!ETHLq`;8TrH00&=@ci(|v0!!6ggkhv{9!<*09q^{U^3`dR3up% zKz|KDUA|46>_!e&hysB9@skKMf7T}Mb$i0Fi$UXx!JzgW=27>p%2C0LtSVUcK6U^icbJPRl4dn!e@ef%e&w>JC z!X9!E*AH1odswc)|4RcrslM9nqh++U(DMa`g zD)JcvzK7PC$N)+b%t#1NZH#MxUuQsPsp%(xh|5^}1@?g05H&Ns~T2qR(0g_5dR?t}u+>0(1~)XGUK!z&Ak z%h7FviQhciMg0QZByRP_O_k1_{ClMD8xd;&ad?fG_8SvxT;ecC37pRkyR7aM+2N&y zHoF`@akInnCC@%X|0LE6T@@ew%=i=Q7ivIAm$+!5$1Xu5++BpHF`%Cvd$5P^H6Ya( zSusM_#Pc=Ix5#T_C>>1vNGTH}9qf!q3llgUB(0EH6D1vzxd=34>IGPyC>9gD1$58g zJY#|dw2RQ8wbl8Z~QQ|e&aBPzpUgi?r0B2o`vx`#iPz<(30 zDqT+b97_OEIGnN%)+FJ*!~zv5<^&=^xL_a3dfbT&J0@kcGYFRoKRH-dnpDgjSdY~f z4Gp3!B770b7eX(iLH!+*4ofN85=2r2GZnEbZ2&?AvQpPjNn@Hty9|&G1Pn+HJl{Yv zML&hEi}nulj?xkL2USsaQO{v@V+LUg$`V2{CK;9nPEM+xl0Uga7V0gg8m^p-JoR>x zysYM1cr}EI#OD&(lq|_SvIuXvrt$V-ev1F1CK|>xhvg(DN>r36rQ%9j9QNO$H0P*? z)s3wZn*;7AmnB&xISiw3`IuwWQ}9Q3#FC1yiYWt+spygulT?!2hJCh}wy<4^uA$l@ zZxak;?xh`z0mw0ZMTqpsv2Y&~Hl$CB!&Qsu1?1sNg4LueiW^`2qNh$H8bP**as{;& z3aN_F2Wen3;^M``O3@any&x(l)exz~^nmps)l8_Ao-I~>ll|hbT=@&!7pX6_UodT9 zJzzXgJTT5Nxx=!hI>lIuGE_&)6U*7k3(AekyRCzzi|VYYvXRDPzk$w*;HHYK1@z#n zgSEu%3O%MGt<@W8zv3T;drJ8g1x!KhV!Fc$z~==kOIa1VeTLiZ-^F%k_<(E}K_h#Pg z(1cj=u+s3w!7n~qoBm{%CUlEO8-&^nJ?*(Ng=VLGEvv}<3@J78Q{R?ZEV~Rx$!kVM zvTwMhaBlc+6nZ>=QUEs9mZiezB zUWz;%xG+X|FS+pIfbW9!g7Sjng2)r=2ERSlu>Zd2zRz(JlaDzeym*7p*`JRxmrt3v zELgqYW)s!9l+P{~W&&;}=ByuXz0aktmBxUW6~PNrJ6TPyi8;E3@^ zz!BPu;u4WJE@!B-mt|9AvuiVOz4?@#JdSQ%_r$fSImHasL za^Pk?>;&tI&!1BSrXY%KAQL=#%6%p6kJ1IR_KKp%=%dllTAygoBzWfp<*MZh5(i@k-&2+I-*)f;at=}gs%)&MtvU8Iz7L{o<4HZgqoGf)LR!K}O$fJmL zD%@Ji9ryveGbUt!-4vB0=C$}3H9l4%7E{dmz|4T>2Arv=OEjN!hf*$$2xS+r>sbxv zeDwZ+C{1)YZL*v_4S5PsE|f+=jnXC=Rqh*&;Iv2z!KVUT`PgT)$gqT)MzV0 zz9@bNo+q&;N6Kx!^?PeG%{5K6C%lKVhhP(jn#^I&ne}Q+5}#`3ldHLAJ^JEndpS>F zdvd@h@hwDGp=$ttlz}WOrFPQ(C#zwyE%F~gpVvalT`KvMqIBKQYLmK?c!!s8X(Ghl zsI}5RkL8ofD3X{eC49lmfR4)>%SIcGEhks__Ju2hRN7{mtvq!}`n1$uG3tv!dM}1V zdbc#G5x)_u5rJ(soKU1mki~{+5l0NyCyolvJ$524T`qnOANFgm2+oh}CF~X)Waf+} zmBzNlww3}z?#X+|GlVl_r3|I~rBbC9rQD@xr4E+3T*+DKSy8&LbyIYcb;A~e7jqZ$ z7tmVt8;4x3!x%9l zj#n6~Zc$OGVOYs9oADv>yOM<}bw$hCguN*Yf{)QKe-V5Q2Zx_=R-4_%W>=z9d{TC$` zOc&G^T^G)Q=a~6@Y#zDDbBH7BRW`S>*fAq8%QVwAo40B) z_AZd+rkVyk`Ia_entUmJESXB)ap9=LMb_S^T34+GpI9+`HL`?T|ZHMIu% z%ZQHHyn?*1^i%X>^rM#2mhzXv1cL=r1hWLAZrHu}FXfJSj>wNFk6e!Aj`)vwmkV0w z+q`_7g_wo>g*JqK2xSWm3N;Hk3f&7~3B?HM3P}lB2%!l%2nh>G3T+Bu_~f55pZb4W z+=}o<>ag#C?r?ue`;zP>*Gq(#Dlg%kP>-Qj{a3M9ZC7VH@;YET=6#M&Mb-_s47cw- zwf9GD7ymf@5p%|HVsn~xvUuim0{27etmMb`Y5IxgS>Ct(jrIYrykn6y^{#n;itD*+ zDAD|aS4P1`DMndFnQNhIF>6tx;iCDXVckjH@!cWadEJ>0#1Aa@HupaF7Wc=uL2&HQ z8c;8xT%e?&9H6+MWT4nWj6?WB+(RUxOQ6x99iTg*=V2XD6j3^Gb+E1|-%IvS>sa4D z7f{M7m1%g(KjUv>(g@PyseY{`XIJDg%{nz`jbZHu`N<WhE6SC90OI zhN@<$)~S}LrmALsF8qx4CQ4#5VihF-=ND5vo+TDOW(KYn77u1Kz9$YkW&*wl&|mc` z+&Rp--MQc-`b2oWtj{TYK0GL{5cC@4Eky%L1N{V5feb*mQbiy&DP)jx^q08CxSuic z(aShlc)HlSIE&a)acWZ6QhP;=Mes#DMMp)bQ-o9QQxa3IQ|d)|MPWs}Qe~hWsZ6P$ z=%ZMy0ltCok6Qzc17icZ1O6ZTKBj#9@i8H8Hm)h|JmyvG3PBEzAJc`Vy*?@3#4}cU z$omzgBjXYM5jFX^^K)Y(4C6*b~?{ zv{bZewCM6_^0{ezbS`omr2}aL3Ne~7Xab65pM4;&4;CMwRw9qYF-nJK8uny%xqoW; zvIT?(7Kq3M$vjA}CDX{d%E!tw%6^yElm8$OFFz=6DNCMFm13W9klgXiN845FNA(u( zCo+Z(+^DqZw9vGgwDhzbTuDY{MuqRu8m~0sG-|&@e+j6tQadgQl$D$|w;{Jdvca>F zv=Ovn+f&`6*%R8^oTe+8l*5ouR8Uc1lMl*RP3aweKY}s;YJ4(A}`^@`vBrG|semc$a%~H+Uo*EY+2Plhp zi)j4eqz$CqxsAD{xmn91{6TGmZHjHCZNzOnZ6a+PZ47Oht`ysWqs800+YwvaTOM20 zTPxdP+c;Zp+liwEX~${Z%s~qGF}EqVyw`?sDbOvU;h~kGb)m(5ff4i(?h*aSv&hxR z0mx>^>c}X_1-Q+)b+HGrRI#zKzhawXU&flmR>Vf(GT~0rU(hGei>T&m-xgjeAXN`k z(p0@Id|PH-yj6l*npWhlS|PC)ua-DnKK*vOV_K$UZG_Om(*nza)&j;t(1Kzcar^l; z)wb=n)^^}F$;iw|ZCW?I(>qMfR?S^TTgFnx2}USJ7sf@#Aq`>;0nJE_qw=u|=66-^ zs5Eso;54^2&ovx0J2m<>G0O2Pv?`h_FW#+c{)ebiRGJbrTA4D zZ?y`wYCNT@wGTghP5WB(HT!F`z>7Q?Lp4Lm6@wK`VOil9!bY8nca6S@zdX(v&ZW+| z&mGW;;1eU$B1~ALHdgBe*Vc9L*R@|A~yp5mr?DdNDM)U^tl=YzWT=d%X=o+&dKQu`t#Wn3WPTCkvb-lYYxCy&(BFjb3L^qU?95NVEq65)Mm8q8L zl_~9{Ot9qX=2_$^8OF0l)wI@R*JRbabA0bue?+;$xWcod@S(-s$|KW*_nh6A)OW+z z*4NUv#<$m(!8gKp*7wji%(vw{f3N!c-Q3Wg+n&OAyYKqn{dS}F%k~KN=l8w78_fn4 zKBzr3+$TUS2Cs=th)woP7AAdVy~ zCB!G1BlaXjCtBso<-N6UbpY{Tv!`%P^SZMC;ELrM;bP>q<@wH=&7RGz$Mee~p6eS= z2Im}SGtUK20_Oy$h~u*PvYn8nklF2=_X?~-p9z&ok%_6zh7Gn!iiw)(wDq)u>x%hT z^G{o43?pg%8hsl5U#7pzJnwtn|MT@8!wmTh#|+U-ODTyZA(t}OhpddOrmPm-G~MP! zq=p&G0Lx8Fm2s`Hz?{u-pK*(^^RdJ6yRpsjvvH>Jr7^agHSPl52m3C&UUN$GH|8d$ z>!w(yEBLMqw^+OH`yYSU_?(}UCVkde>VFW1lhNZBSECCDgX@v44Z z6<(EAtysNWB~d+Hm7vG1cdoPY-q*Cr{(OnpY21#*uG;C)n#?-S+|b(4ZpB8}Uf2Ti zUQ&kkHF8vXM0#j&VsP@=YH3gD$hWF-%^bNLZJsrU9H&bth)=T@V`YZd5WMYexitCHBilfZl znl+nMn8j@tZVC^<4LK>x(s|N-NNrBdOYK%KQh%eKH{(;bubh~dk=L9nH}Twx)=J&V zYX@|gPLvIT|zHGXz-)g{W&}wm~mMyimyf(77y0+V?-l^`GVNGOBu!}9A`&j09XOXRC z&AWT)e)z8KhUv0kNwogq^nUhkDNsYyMU+L3zgK+I{DJ%dOE>5SkdAGr}+&Awnwx2yP2b1Hm0G9&QZYA2}R)5vBzC9Oe=( z63!A%3)T}h0agUv0BzaiJ^L=IVI&T9cycejStC~sM=23g{2|ab$va6o$xPK*Ra(_X zRsVBS;a*{S;i0kZd(eC3_v+5F&X&%)CyU^9@KEo&-ge3=$`ndp${UG3iF!#!$%zO9 z3?Jej47ljqi0Me&$Q~%KkjF8qkvcI2$bV7&v?COV=T+nw6B-j_7OA4I;;0fma9nuz z{*|+7t7@xntAn@kRmjQadiAIs?UcyIDkZfvqo zBo(+eSbHQ{gu0}Qxcr3tMAtm7OtJj(Lh^JY42;Z-f|Z<=Oy8xyG?dp)?OLx|msrQ` z-c89($rMe3j1ux=11UPm`mw2riYYdUafnhW)JbM=+?XsWzgaO;YSC*6&$05*^9VOH zH&c5)_vGHZ-yzAw^?F{zeHMs3yL&!v9#Z51n45^zCD|x@uXXoH;`SHrJ{|Y zv7zOE7D2mBqe*8d`ystCsWD$s5npaj-cu1>VM4A(`AE4dy(6h3SwbF5X-e5e8A;`n zQial^oW+vWpQXYzU;kP6R@YY7Q@2-FS65Sa zMYpBlrN!NZ9{pFLF?XFG@25Y!rMTV1FZvP zG$n5v-!_;RZE1d*v8#%i=`)Rgh)^N7v zU1p`1ZL4jX-GObNEwZihEb6RK^|h8l6<#fO)p>mYx=hF+7G2os{UgYZ6WQuk{XNm+b*N?TBb~$vu|f> zxf`0AJqkTa&lO1CC>4#jIt1xU>nkmZEx9jcdP=l|+Fja>{G|OHZp3aBZ!#MO8h$oB zv$~tK%&!&{^u9P!Ww6?&zEhLu7wFiK z+N9n!Q_59!rfTK3b3PF0GEy2%>0`r6jo zPN$+{2hnA=&$Tnhiv?ee7T4xQR~|fqg@D4w9GF6??9P_pUp*T=7qs~b#F++cv@aRk zzqswKmrRC*i~lNI1e&osy|-~TKiLKsj2dLlvb7s1w;K4i-Tc_vp43Lv-qjwffi?Wp z?fPqEH~k~ilBAGiwxpw^oFtwkK@>S!K&N~cqucCv+lAS_ch%ZMwXB9=wNo{FhG$(F zfz?M}x9!~Kc_J4h(<8~E%%T#}3Mc~EZ(U$TB`7#Zkcb%wZODm8e1wsu;iNreI;Cf% z?PS;zCtf+ev}&*MU)l3rKF67FuNCd+;*lm!C2t@`Az>o6qiE;8xQG89IgD0Ja?k7P znEQdl*X(p~La8g~E3dFq=}J|n&-J(E@o|>~m)X;R&6v&YO@g7ap>7p+m0^_y6_5&P z4xi|$@x~d;2FsqlR!g4~S=X$~{zUcc(!vsU%eW)LnuvG%`Nh?tmzSy+=!kF)sUy{E zXDpAzYjru|7EA3$8lz5s=f9o#IMos*QNil#fn`AudCDP>QO+*jqhc^k=3fG zPtetU-(4QUErvVAmC&%i^N-$>um}XfROnRS)UH(B)K{t0sd1_87&aK^6h}d??@qq- z?_(ILh^vRHN2=eex2czvIV!RUO9)~6nBPX9mV;l67RSgOmvPK&%vjD)&P2>ul^rVv zz3!cq9oLxzjgjWE z74yCBb;G@tO2M7)#JRy)+s@g~9lC-ZR#78pZ1~8yy(s z8s6T;-lShJ6=>_$X1`qVK0o6A)ihu?I*(PG*wuCNYigguX<@az(2nSIARHRWMppTVw3@@X7hnd~rD2f^uBw)pxA83fIl#>vgme=4G^|zQ)w; z*%iOGH&#wez<5b{BOvOwJ@5(h}G)HHLXU*Pq zzDv~R6?G2yd=EaO+>tzsiotkCfka^;D&QagpmTltW9T|jumDz+C9vM>eqGIX5f>kK6+UMcvE><&2VUQ&AHMsg zJz1M&l+%?EWOyxo_3UPRUB9p8yOZP^ewXB$R98+A#>2}WojW(F$K8P^x1Vp;ABw?4 zixihZ{&$~#sGpY&O~w}}i8|dI=+ae?0`^nvcmY}+zl83JkO1JuFmtWWBm&zS}HII8Pdv0H(A4ZUQ z%lHr3()pJ8TRB?=5*)-H=^aQPWgMX&bSf12I(IK@Gub}!e9W3vj-DMhvY1)>jnU@LWE0LsiC|}L_HxVb>$#RUwkTu z>ip;cAY$?T!(=%cA$%0EHes$WK&`bM>b+)HK@@bGxHoMXMm2^H6C)lOjzCIb3cnqP z0Cemb+6?qIfp1JkNQ%}Am1{vo>LY=Ox9HFVd@5UnM0n%3Oph8V068gTP>qCf=s!xS zV9Bh7Q$PeNi60xp>Oa)WOdKI|`$N_eqE~6*{V3cAMGU=tCnO5l1A0P~%^;GO!c-ir z>{LJtM>8jL8%HZ)DoqV(7CtIb5o94skcy;+uBsI9KLfEq6f;fCP25d@s+tmta*{wg z7B)5okQ5smNCO1?Lpl@4!OFqLCZ$XVq_cK+cNSn{^YZdyH8Zidx3O|HVRdq~dbDNx z!JXL3vXv9S9caS3wMYvDJ*#7H+iy*5iKtYqk{Am5_5Vx?@b?Ih>PCOBiS$M;U5%|eh>HefZHFB z{eQ%x2}%4{;UK`<|18QQCil0ECgc;_e-7$5XzuqIzn9FvVn9Jk<8KA@cjw>B(qGPB bAJ>fo>a}M5-{1Xr_xx*B@ztlQ00)l>xG$06S~@ugaD}+g^ZSYn ztu~f65N8j22-x1<+R_Bc7?Rid`2yon^(&samjVIE1apoDJK$bK}A%W{$l5Z!H4&!BgYL7 zF%8k^>h1OTDS|)@awG986k;VA3(Md_%l@O;1Bnh50rNN?vT=u8m3J!E| zDzJ@LX4iV-=I9Z~`^_#iDK-W|#vga{o_^g+$eRf(2<}P7ic`sXp5B8ZA}q0ax_jUl zO<;icD0xXaaFmCWtZui)zZSbu|Lan^z8Po@mXbzFA#>@;LQ~=r(JqFpqJoXJ6mhw@ z5!*-@QDRs7c=4OSXIUZEdHFE4iK9+b;2~J{WwoOXs)&*&X2TUa>_1#`HO9z`&daad zYV;z6x<%jUx^)P&kXBNVg63?SDMvd$Gj9#f_@rX$lyh6%^jNTzyuGyfP9!&!MAiV* zVv2i_ED@5j_J(UcIbBy=SAsu|C8XHHT09XpL@Y}|Psc8J^7$mOMu2*A9I8QFP1Tjn zTUI8Ukd>zXim`%sj&=#}xL8R)J!-Q=Mn>X~e_mdBlU@Y@pUAIajqXHM zy~wEiHe*58DSNbID!}nm5D$$&sIcXLQ}u%KnGBZ@T08U1FH!`vj+UDc;@bFdD6q8980=l1zq*cUCf~JV6xntDDsmpOgetD zc0=2hb^}dV{C>j%%Zh1V2Ft5cukC)QCMx*SQ(Q*zUC@#)#;1P}OSura(*NmOpHq77 zc^d^nuU%7Bl0C&x+Q{S(2hg*Ke%QIzB5_7^K3c zoh9^yQv;uD=oPDEuORx>l|qr(WjQa9gioKiJ26e-+UTrsRaIHOiv?wpGr;TeWP|X} zTfSJ-aWoeO0I-7t0I;B29=hFKY#_GImbPYg_xt|U8x^}5AknA&OT02Re(($4vBy!W zwGNM!GMXsTyERV5*c~i6K>pi5W(dPqzE5K`3k&V`b$f=;SDwn7ffRkhy<3P&OW~ zYp7c&wOz-nk7}ohH3x+J-0BU3;T0L*XBbxc_txBQE``aB&+~OZ-ub9Un`2W8PUz87 zn>OO3CGT|CrBb;I{1p3$HgRn{hru4W5+9rDdfs2;^1Awnb(;7?M16VYw~sa+S0~py zah+#_q=K&U+QTAD`;MPk=wVfd!Zk_k*3vXGKnI+QU@d-?Z~heTjS&lxpYxgY9fdAg z_rTLA%9cbiSJCO10tfm}^xJfPP@rSS1{d3!u|vi=2adM4g$$|rq`cn%t8C?lX2XNf zL<$vCjnDgA;e|vIs7rk|k!I^90CFTFzMDBz`JI_oCL?{KgB(nK3meJ2-$f|C`FIX} z!Q%5lncTS8SV4lg-w7iUZx#O#TOHNj)_hw{iK*01lj#Hd=k-*}h>6aGuA?7xJ?~SP zy(7fc65_^cZ)?7dcHp$W_GbBovGL;Ri9HImH3fh%c!2ooHPq;`4g~HX0xtFgav1QZ z_usw8(9i}$Gg)J(@SW!8r~AA*{DV3xO~&uk*WsU<-1eL``x>5X&JxRoBnzH%;+=5u z4FWOdE^b;Y8>BP9S7~nBOdpB$_+&;IND?-7Q~2v!iTmBy87{D1&9iS$RNN#RjJ`x3 ze1?`;=F7UBj*|-ba~KEJ_*Ep(ER26&px{3+P|Of-_8D~cJ%LlDF4mIzWa}zeV;b&lg3jH_P->J z-^cbZNB;IctH1*m-)$?1SWO{jU>9p=drNnSH4Hr9>K^rrqm|BO40xyqcNzeI_+L7*G%+bn z)z-jQsy_EJTSrSv=S@)>=3h^zLqbVQ=Xw(#$iT=S$sh-h01tX5hBp|V9T=IN3yT=- zpWD&vlv(}Fi*>m1>g6}*yTXDGO$Fb|_Ynb03E}>I?r%~2`-+13WVj?#)0&actC5ib znBo4YUvFTSO=$BZ)I07hNmXD@MucdNRm$$X=I&kwi%EM!-|Jje+>m;D=yobXV#eqQ}c2fg9$nr|y4em0msU#fit;~=&kb)1E%NW@d z00-JJj22#l#XJAxj)fE$ASyeR2ItR=JV$zGzH>*YVEm5unu}Db_uZ!u#4y?~cx(6? z?<^mCLB`W@a`T9uMwo{Bd0W6r#uL1W!^(R?Pl!+Q5!n>JmxJi=HadL6blQJImY;=$ zW{mBrMEuzZQtusZ(Or9K-oRM8q{NCPfwXkZ+lGzoFReCb6f_cWM9&VR#q?fi0BK@= z$Z$oPT+jtS=CF_+ef@g$+2PZm;NS+;yPn`L8w|vSSnYhF;vfsYpaNPZl^H^OT=L`! zLhBnlg47<-kWc%XBnJz+u(wLoq~wIm=L`BD2QCZyd#*n3(#1s?!(U0kgOE5ks_ssf zDQ)j|hyC26G1b(r*$6>T;Q_T3%~z6m07YWJOs|{U-P7GY+pPH&FopkU(Or*B7Oa?$ z&xqf(sK{$+0K+8!ZT32Lq#e~?Aq=qSO%O+vd{Q2}+3pI*E(VJy28Y(Mn?chxFGmg6 zKd)fc0jmQ;YK)Zb|HvMWqT|s;03aJi9Eb+;XTXBP@yDPI_)4KrC5F+r|12LqAplhs zZc7Z#0+uBk&N+bM%fiYCG7((7FwRf_LIwP{4#X)~!Nm%hLR@>qD}N??xV;WIcNn`x zIPZW3iWC?i7W^&;NmZ}e1x52~ASx(mO8EK8d65$AXCT76z^8E-oMMmr5cz?Gs{yd~ zSY)sv*~oZ7G>Z%jFuk29s;K>92u1Lk*(6^B1ynIf#Ax^sQadcapy`P*S-|aP!==Mz zWIr+h%w;2;1d4pYMC_omCpLhQTx29dq%p=bKr&f;OoW8HNYDVc7wEMp@)jPm6VDyq zti$90elU>#08I$#c#%#AP~Ks6fY^et-{DmOtJR5gfZ~m4)S-QVehm=qM4WitS7!0GlY* zo1<1lRvcWMO;UvM(w`*f@dnyg*jjP(94A$JXNs**&m0j807-C}n05}>0*@rfRs#2n z%?7J8WomFiw&e!L30`VYrsVM#*b@@Hz4 zIG;NB-U8x{Q58dU!LDy{e}rBd!{}fUgi3)?ba0YFAz%a@6s>>>u#yhxw-9t=nkjgm zFcz@Y6o#vRhB4t3`k8+#*k}q9BRFVLm5(eY*kqB94_i4@eaV>*cR1j9G02|E0F5#v zwmaV*!2n^h>(riR7M{1e^g#E5%$s5_l&$OL04M}+6eP36;ZD|uz7Rs$fw^RPfgVWiur3KB;U$oO`asNP|1;ws&=71GeIvYy|o=+5m(GWTh#imc}v(cjzJS z@#&H5dAf}90^<<2GTc4LJxoX38&pEoM)M839m@|(P?iX~V_w74BFITqQSrZSk%f7O zrG_UbBTusyCoik{4p9y1ee6?-R4SI&JhDjdxW@1|BTmGB(h&DynZk3D5XUM?6i{=; zP4{`PQkim8!Rtnrh$rDbmby5phhBmj9HdG%nMe{We|`@%=cH5exFzK>?Z?F z0&zboB+L=im@T9#!r-TY#fXO=5h+ENtM-hzh)hGI7|R9Tg-kQ1Sb8E)IVbhmZjtg= zgs)Ox>AqsUgm-~+dE|n5ip3q2D%C2+lAEMDP!wClR+Lp_RMc+aFP&RyL7j>+6!`;m zoQp7;YayVASn97OZk6pa8fu|lL-(CvH`rCmE7xZfW&_I^UH~z}Us=jL+vy9!M)wAe z^OGi2!!TPAZ{Eyk#s-D6=ub{hBH_?Xu?0y{kf`)X&iZKi=>8YVFIF4-8%igXXdOTf zJ~R}`j}<2F?65@G(eToUdH&BnTD&-6mnL$GM*jq}5_s5g@dB2e>aDCI^JA3w(9d0~ zCXwti9Qkh<70G|#6(BefI8iuZJE1t?JCSn*G)8%ZdqjJLdPH~x>3;I=^6oA%sbg=} zp(O~T1Hae7U}n?8VhT;{>IWxQlIR$gV1FaC3UcXbdeK_pI|a1n<3UUd7xo|O`e71P zK{v%|&0PoMMKTk*+jC}&R3SO_Y=`fR^^EF_s|=EMSjuPrw$|jq)6sH!7{SwUcEog#{UN%z3O-M0lfGbXv4X@&dH z(;c^kZk}R4@Vw`0Dd+(Eg3p^%1THI#ttWYL;E?-5+WS!(+`=o$4x^7oy$fBU9V3hD z2ahi5FEB6IE?llDVL=^O;qZ(B@f|8yRI)g$$c*qTfiRuX#*+5b4Y=MY0m1ANXjBn# z%6)WrIP%DA!FpX!B$#sIzbFvVqT$-&?BNt3tDqbQ^9E~n5q1eIVPaFi2&bif^g2qG zCK5Y8A`;}1%Q_ltA>|Bg!fA~N=wW|>#u4#We2|6!I~JQM;2BM6BAj>auIU=||bG+x=WGCj*<>Ke?V87%F z;rz&+&ko@rH)RAD8^1JuX(rI?{CX30oM@c9;7I|0fm8vcfV%*_z{U)Z>vc+EN|^3j z-8Z_gb%Un;r_-l1rxT}>`QP$K@<;FoHTqvNIPp6PJ8>QJ|A-ot95fkpODRmr;%GN} z4!P~WjzTTcVGQXP$Ip&bhrBP=Ff4vDk<=8sr36u>c^~l=?WM>ma&5YvicNv5+EtPE zd*1iw?_=My6)Aj;{Yv>&lo^=-_R*t9m{IIecu_b}1W_DO+)-RngbF|fcm-Gm0R@o( z>?Fq|#3X_w)+FB~E9MnuOr6Xs=86_`U6X0!X~@S4H64B(%MzTDqmr!>#1euMj1r2H z+Y)feVTomlM~RHifbO=gzD~0al1`W|y$)s7a8=t2L-5U~pK0hXx~rc}yH5pAzne~& zcAiq4vYs}W_MVoQdNHLo?Kp)|ome?h$zAPIby|&HtyCdwnr7nlv9A9t!zPNnQ`yuU zvTj0Xl5C=FGHG6K>}GmyjAq~`gqh5lAVGh@H-agGVOQ*K{O59eJbM&- zRC^A4a(n!Hyt7#ilZ|d3_Cm};-a^YlM?$GWpM>g!Y=v%xu!SOobcLjZAVTOuHbTNe zl0qv&m>!vj%!l4TrdLDUQCh59U|XD@(>*7D&h;GWxyo}yJG6b6dGC3g`IqzKEg3Cv zEt4MmhayXctA=YgpPReG*7A-Hk0Oqr99SNv984d393UJ?9p@jd9VQ-V9%ua6UT*Gj z%h(rLP;Z;`ro8-i2_u@B^~%WK=#5c|QSw6ILc~ItXs~FeXi$4xdvtq1dq#Wm9myTb zt>vx9E#!9p+7E#pRs-faj021mj13GIj0_B0fN=m{fOCK(Y(6YHtPN}{>?FMHBgIE8 zcske@R27olV>%YsPX&}x3S_F^@sE33f@?r}Jf&~7L+Q&dxIe2nf!_F4z87R@`2BxI=~vFhWB z;#%VB;!@)B;$l^cR0CC$R4Y~URpV8Yzhr+w&k2(l37LQ7gZq;y8s7|?04oVk3!4Y4 zj=&Wc11p9=1n8}L5o{l1-)x_C5Pl%MRM-Xmr%JG2R5s`>$X$vSlmI#bm4FOD*HXD4 zH7Qh(a`@M%ny8bA=T~1U-(`mb`M`q@W<7jnx4U)^d9ezT_4|kJo*?DH4#-CbsF(1a*i+! z*Nf>)(^{X5e)usf1N8lh%9e4DVULF5aVBjhy{}@6a*I-ninqpf+XdI5+wwwBJ>3D$ z4o(-2BaR-<51e6~D>`aAH98FW1o`v?K6(ea<$|7s9)$?a2y_9(!Y>}s*9S-w%v|W6 zIA%fbc=e{t2KR}UC!0^OZg zc3!tU_Rx0JIx1b|{Y?I(1urZiJRvZlEFm!=4NsC$nNeXYT;r8Slt%g2@UK4a&DHkv zePt!bOf4xaQ7rK-B`pOl*)~--X*Y#7SH|e`N8~W&V--{s*yR0^=HGPoRrDkG_kFe) z(CKUFgYWO@H|@t8_}W*~Z;;T)%Jt+}!c5allHkbz^8gzY%Lgi}$J@-?^rS3ltX?{G z@^w;m+O8UB0XvVT@u$)GgUPDN+S6;&3(`|&Mfm+1i5e9fUo?_5@-&Jxax^|^Om?JP z^Bu@r(_IT$U0ZcoEnS^k3tGcnby|xZ$V%8xXlM3QxQ)1ebIp5ci0}rsJ}@}2IIuD> zugf=tA;dYP8+8J;6x9dS1XUgN5o#7*9bRSRP9$|?WaQ7ty2$5|;K=upVR%eDt%X7YZn)J;k&o@3P+&n&z$M;}s<2I;*~y*o;<-9V;4pH`X#HlfTeU1aXC6 zL+BuI5J3p#8uHrHHR`pOYg%i*Yoz_-{pAVm40a!|G#fNG7+*3LFb*@qFgh?!Gxlnb zXb5PAYU~vazGwbW@_|}YR|7$FP4iU4Mzd9;TNAU0;Jw!Sy5h4B^BNh?d`f?6x@f;D z`BeD0v>@Ls=SKlSNzyy5Y^^d^=~C_8rtb;gbHAs4uM>EdA!Dd!C^=^^rztEe{7l%W zRq>|AGxn#;>625bQ|?n6^jyT)(1g%}(2&qH=?dwpPvWmoUzxoUc|}SxPEyX@W(lhl zS>Rt#QV>({svy~{!7TL$ct~%kIyES@p4*%|nVYxfi=MS!u3o?1Cp~377(EBQMm_qP z)S9MR>Dq!Cg4#BVU5ohI%UVc{ON~uUYYk1!cx_becFl;T(P-O;8-uH$GduEhjART$ z8OdIQUL|@Ey;PxUp!Pct`5w{E`mZaQr$Y*}sTZ+UHm zZ5M75ZclEzZ5d7YW#6gYRo}+IO#3g04U3I*3>&wLM~laFq6Cd2wj%PPnW4>-Tt5X7 zR}n`N7n7tCH<5%A6%Y{+egQtQeaW-M zo64Tbt;h2d63z94CyDbLXC2QOPYmZUr-<#W>8zEInUKl#H}^Ssn=UXlI2ZiFa@i6G z{06M{V$5R9#&OQ{yXoiE!YBO+-5OmQ-CxJPjz8^s+I{kN^T{~HILA2gczpq>84;H< zS5rz-N^MHLZh~&zG)ncjnUC3unaYsXpl{mBkjD^Y@N{r@=w@(b=y-@}Xl9TtZGk(B z_s+V_s?(IpG{+SDV(A6;3x|%}soc)xmXAdrYoHmeiSGNGakVkEfw50xlhBb*R?SvT z9KBg1A0SN1VsR^dTM}H7P^wruTOv_9RuZGft#_(3SK;}h*7|gY#BRun#j4b9*Mi(4 z!_?5i&}z<7*jg9@eJ?3Q{~kIZ-7nqyY53E~YVji z^hx!NX82~jXXIz9>m=(itqE<~XQ+0kb~jx0T{>^ z*Cba>R@T>_*Q?Zsni^RxKtx}N+T4Bf9fw)(*aof}FD~w2?Zj=__vDP`^ez>2mvk3* z8_7iG#pPAyrR0T~yfdjYd2bT6lD#6_i_mMQEKBc7-xOaLpAp}#o~xdto-yuGxUC$U zk(5!FE;sztoX%X`+-)6soq1htonT#j-D~*K@WOe{nZsWE_rm58Fr|r6f7`MT{rTw* z=>l*4{z@A;VR2MZR8v%9RJlUBLV&_6g~EaGf#?CRWESl=OhcN}6N3}u-2L2>wOywr z+nSS4Cg~=Xcw0!@(*n~X($e&U_3QLg^wVbW>*eZsZMXOM+(g_w+)Uhf&+X5d&pFR| z&YAY&_v~hQh3qN3DNrdMQ|wV-Q%qB=QS4G^3l|8@dtM*Wx}&-?dZc=IdP;l!@X+$e zJSIC#KQuVIUXeP)Ia52XI{Ln!xTv|Ixj(V%GHx}z9nZTu^h4?V+o9`$nLFhH>!HZ5 z@S@L%*XUIk=C`m(nfczS-Z}a)`pLqv!fx{(^H1i}>*Z|mKEMGXKwp$8n2knvt~rA?hbD!Zf1NnL>)v~M7=~q7hu|P+PQp# zd@-+|U)fyXUR&NW-V)r3+#cSB+@jyM-qv3mUHGAkA=o4JArK)oAb}885j2pT5uyQqXojJmE!mE-m(Ue&}qbDxrEq zTqC2)zA1Yqizi3cx@NBSgH@*lsSXnAv((W$o*6wnn)}f)LIiWG2rlxkJ zDW(~gnT>X*ION75|4jNG&k}o+G=)f)Y#NWBh@be9$B`+LUtUO_zW)g$GoxTJXED>3 z^w;X5^3e^8d5e6DsEwOZxlx(i5s*<#W~47=D|t5#4RIdj3JET8Jf%A6IIa_u8PyMS zW-2WPE#YshJPbU-bLG7YqXm5hO$kGHE}hWii!ks-{f5tF%*X7%9Qt%+Y(#i zT3$=YV=Ij+J1C>5d{%m|v?wbN76lhd>MZvTC}rq)?Qz^F;SNlAc4n5LDw zmB~lQN94vFkwcPJQm~t!hMGn+Pb80RMf_89^sZu^Vv1tC;{IUIU|tGKN_UD1*JRZf z-D};Kx~{sNy1KfWx^ueq)z2X}!)C(;=A@=xro9l#VUc*@gd4sqbqvlhHW|8J9(o3P zrb5O-!FAW+?evAluLhqD@(f01gJ)?PSsJ?=Rh-&a!ABMzBpw(ZU=I%u7Y`o~%%l0W z-BqX6f%UZYt2N3#wt@Y@_LMtLzdV06;4@>@#b;RBss>*S>`NCdJClQ^f&!7aF$Kt@ z`E=|LRy!4t3Ngwk0x=KC)I?037%o)La#AH*!}iEMy)2sJ@>JWtyGU zGrNpjEs`JUkXtj(T znU9Bab#No7xTm3~kT(Ba&AV#T+*Qrb-#C&?IC}?UF3A-HwH$W3Dg}F!Vr(ea`O55P zxA<1vza4&G@#&?HEl>AXImlEM2K!N8gE}KV;U=pLrt2_$OhQe3ncS50DTyGtE-5BS zgzZLG`bl0gaq?wCenMiROX3`>m-<--hsPs}xp#;C2yX5q}QYlM$tEyN1 znIU=6N~!t>r;?}=rV^_%()V7^>z|Jpuo>EEQL1L?8mTWBiE7?e!i)pIW{)q<$9=JH zSu*Gbb*F{y#v9Nls(jBv6ZP0w-Hh+1&&o2eGqp{yeQJkhG5E5?ip(P2)<7^skj}Gz zF=6t3g8EuvlggZ6?QF0Gj>VX@qh+KOqve)Gs)grVjZf-!O}}N>`0K(b<@)qC-=Axn z3+7Y94C$5pxSj=zisLC(=9w9~c4oFomUR|pPuHJjS+|W{*Iar%YLu$_SVEUg_aVOw zQnBVRFsb!|sdeJrL^*eLZJkTDOTnoEX^v9vP=k%1zO=s5jM$9xOtPy)GpO02*~m-U z%jQb#O7SYWx~KZ2`my=Vh*@T-prHHN;j|t3D#mAw>X?q0otV%VCh}@>(P55^cz$ya z)(eCAM)mcw3@=~X>iAmqw($b4l4DhKr}fj}kYQ27bVEkN7{gIRnWkY^C1;ilr1i^T zt4ufHEc>>T>yYE~k@DwaMp$jxex2(Q-$S+@-4L3wdhb4VQE*Lj<7#qhCT%Wv5#68P z0dGIssoam);h!C!=bEqn`pEOrtJZVQE8cU!%gdAU%(p4Loxyi>HTUl0P82;GhM~8s zLtbpHO65oyTUB{Od8=LSzK!TC+n4h3{pqalM$-$EqH}jH{z5=uV-74KRd#!`#h)F^ z9cOfz3M9z}Y;?~Vo4-13F6EB|1&ja8o(7t*+f`WFn;xt!W(^o5Pp~x`C^r~*HeMaA zu8n9TYj0=|mcbi-Zg>3IzmfQnX+}~=GF8%6Qce*dr$*N0N= z-f~vMpz_hOO~d21B;V4#?`u|0lRTl*p^2g7VJ2a*=vkD$?AH$Pq7sxGq$ng$h%70H zNj-#7r4giEWLl-irLAPxVuxSZJ~wYJ^Pb!EoIS;zY%UjVY2%S5iKnP0c|^)YVnx}^ zeRhku721cMM|#WaXq(=|;c0UCX;`T(?K`iqUBO&QtH9{NpOuJ}wH3nN z!rpcjc9lMrDHV_kSsI_{q4DxD%QDNRzE*vg9eLY?!}f6L#LUzTPW_NA(t?P4^Xb{e zuA7^x8)%Pc0i`A0ZGA9<)NOt?WFK{oyJ6dncinb;ZnU|4FTktD>*u-mK4i|Sh1b#U zaDLAx;L7vdXU}|I)Wh%Mw(BMX=^E3S@Y?hl>W%7!g|><;!V*F_9;VmfheeCe2J#|g_6s@2 zm&eVjGirV<+J* z+g{5ByUN?-l=_U=Oi_*n!8>=~8@eln)8sw2@#o*#$$T3d04&HXL~QH?7%VkxvxXNn zvU&;nHAd0;%tkv#>4w)gkynXlOj+8x<*Co-+)wwof7bR`4NPK}$F{W{{2bk;w40hQ zYIX2)T2#78TjDKGTBLhTH=ZAt->s0L5U*ggptiu+?&6VlRCl&JQU7Q^+pTL~aUP+a z$Otmg~92SB3ff9uhA}Zh=eW!DIc+`6tE0_f@ zO6-UFQ{&|Q@p!k&f@rm`*454-|H|?E5nhpY{q8ck(&@5~Wr^j6dR}dHHz8*qHx#}k z=dxuOQTSfoChmUtsXbDjVwBbv<7ap&eew8eXi2}Te#=gBfuK!tL8>jy5A*K%QS16u z{C>Od!S$D`rMtYv-f7BnKku8*N9w1Ay(7_CN}_hR2DO z72m_>8Rm$l-0Lb^pEOvu5LbDaR(m;_IUN&@u+16Wwqx9GU2tD+&)C&1khHh@tzX+- z`mCQ9vJ|kavDBBIl&b6V)@$8j-Syo$+{Paj-i~Z!)%#WY<==h3Q@YkaKL5TjIa6fw zvu?jyw=Y9*83k z#E}Q$$OCcYfjII&9C;v)JP=17h$9cgkq6?)199YmIPyRoc_5BF5Jw(}BM-!p2ja*B zapZwG@<1GUAdWl`M;?eH55$oN;>ZJW zrj|BfbI84@7fc$!^e#eGSq2@Il0vP1S7HI%LIe6umk}zs2ywp`o`WHQUAqwyg`NRjp^{%v%|>Br4pw$* zAjH|6f$!JLl+V33<2JYQVLVMf~{R3)WF{wVQS8& z)NJ=wj$m7J2++*Y&PJFT8nv?>G<^2^lix7TP)W<*EdF6^;^OEC746f2e*3ph+5ce% zaksZ~bY^jaI79XQ%$=a!0EL_&4ld9sg-BakLsY@e7JrNX4gQC%1lS3p3=QJHVk>8B z>1+wMmc9>K*~R7s#PM%YEFAwBBHLfaD8%;H2^T?CRe*t|fcw{)pZ9z4zR(8TAAeT> z{Riq_3x3|)LKVxPDE@oYAM&5S0)LfF`~%1g72f+*MDbVjuOfZ-==(w&a1GTc`X|Z0 zUxB~M;{5}559~(xvl!AJF0j!4g^NE)BmL^{pNVbvnn=GF+5p{u z=?_YD``@{_=g0kCXaf>h{}|RUY`I^Z{F*EOa5AL&m(2Mq_}AR@2RQZFKab!qnMzdw T;Xcm-P@$hFXkt53zrXrlt