From 532c3d9378f9ca974c1710cdf989f761b41fda45 Mon Sep 17 00:00:00 2001 From: Jacob <42719082+ThatGuyJacobee@users.noreply.github.com> Date: Mon, 11 Apr 2022 01:43:42 +0100 Subject: [PATCH] New fuel system improvments! --- resources/EasyDrift/.vscode/settings.json | 7 - resources/EasyDrift/README.md | 75 --- .../client/module/handler/module_handler.lua | 5 - .../client/module/modules/drift_counter.lua | 193 ------- .../client/module/modules/loader.lua | 19 - .../EasyDrift/client/module/modules/lobby.lua | 5 - .../EasyDrift/client/module/modules/log.lua | 5 - .../client/module/modules/native_ui.lua | 517 ------------------ .../client/module/modules/player.lua | 41 -- .../module/modules/ui_native_pages/drift.lua | 88 --- .../EasyDrift/client/module/modules/utils.lua | 46 -- .../EasyDrift/client/module/modules/world.lua | 83 --- resources/EasyDrift/config/config_shared.lua | 63 --- resources/EasyDrift/fxmanifest.lua | 18 - .../EasyDrift/stream/assets/fonts/forza.gfx | Bin 90720 -> 0 bytes resources/EasyDrift/stream/ui_drift.ytd | 3 - resources/LegacyFuel/config.lua | 18 +- resources/LegacyFuel/source/fuel_client.lua | 32 ++ resources/refuelingnozzle/settings.ini | 8 +- server.cfg | 1 - 20 files changed, 45 insertions(+), 1182 deletions(-) delete mode 100644 resources/EasyDrift/.vscode/settings.json delete mode 100644 resources/EasyDrift/README.md delete mode 100644 resources/EasyDrift/client/module/handler/module_handler.lua delete mode 100644 resources/EasyDrift/client/module/modules/drift_counter.lua delete mode 100644 resources/EasyDrift/client/module/modules/loader.lua delete mode 100644 resources/EasyDrift/client/module/modules/lobby.lua delete mode 100644 resources/EasyDrift/client/module/modules/log.lua delete mode 100644 resources/EasyDrift/client/module/modules/native_ui.lua delete mode 100644 resources/EasyDrift/client/module/modules/player.lua delete mode 100644 resources/EasyDrift/client/module/modules/ui_native_pages/drift.lua delete mode 100644 resources/EasyDrift/client/module/modules/utils.lua delete mode 100644 resources/EasyDrift/client/module/modules/world.lua delete mode 100644 resources/EasyDrift/config/config_shared.lua delete mode 100644 resources/EasyDrift/fxmanifest.lua delete mode 100644 resources/EasyDrift/stream/assets/fonts/forza.gfx delete mode 100644 resources/EasyDrift/stream/ui_drift.ytd diff --git a/resources/EasyDrift/.vscode/settings.json b/resources/EasyDrift/.vscode/settings.json deleted file mode 100644 index d12912ac1..000000000 --- a/resources/EasyDrift/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Lua.diagnostics.disable": [ - "undefined-global", - "trailing-space" - ], - "lua.targetVersion": "5.2" -} \ No newline at end of file diff --git a/resources/EasyDrift/README.md b/resources/EasyDrift/README.md deleted file mode 100644 index d600b9d4b..000000000 --- a/resources/EasyDrift/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# EasyDrift -## A simple drift counter -[![Image](https://discordapp.com/api/guilds/926120299232112671/widget.png?style=shield)](https://discord.gg/fhgc3s8HzS) - -EasyDrift is a simple drift counter that also provides a multitude of events and functions to integrate the system with your own HUD - -- Drag and drop if you don't want to loose time ! -- Fixed a popular issue on drift counter where low fps would get less score -- Easy integration with your own HUD -- Pre made HUD *inspired* by forza - -![image](https://user-images.githubusercontent.com/19718604/148116457-20785570-ca14-40c7-9948-e8353927d4ed.png) - - -## Events (Client side) - -EasyDrift provides a list of events to use to integrate the system with your framework or HUD. Want to give money as a reward to your players after a great drift? It's possible! -Each event name can be changed in the resource's config file. - - -| Event | Default event name | Argument passed | -| ------ | ------ | ------ | -| Start drifting | drift:start | none | -| Stop drifting | drift:finish | 1: final score | -| Enable counter | drift:enable | none | -| Disable counter | drift:disable | none | -| Toggle counter | drift:toggle | none | - - -Some events are also available to retrieve information - -`drift:GetCurrentDriftScore` -Get the current drift score -``` --- Exemple usage -TriggerEvent("drift:GetCurrentDriftScore", function(score) - print("My score is: ", score) -end) -``` - -`drift:IsDrifting` -Get if the player is drifting or not -``` --- Exemple usage -TriggerEvent("drift:IsDrifting", function(isDrifting) - print("Am i drifitng ? ", isDrifting) -end) -``` - -`drift:IsEnabled` -Check counter is enabled -``` --- Exemple usage -TriggerEvent("drift:IsEnabled", function(isEnabled) - print("Is the counter enabled ? ", isEnabled) -end) -``` - - -# Advanced developer - -A global export is also available allowing you to access all the variables / functions of the code from another resource. I don't recommend to use this if you are not sure of what you are doing. -Export name `GetModules` -``` --- Exemple usage -local Modules = exports[‘EasyDrift’]:GetModules() -print(Modules.DriftCounter.CurrentPoints) -``` - - -# Support - -Want some support or request something to be added ? Come here ! - -[![Discord2](https://discordapp.com/api/guilds/926120299232112671/widget.png?style=banner4)](https://discord.gg/fhgc3s8HzS) diff --git a/resources/EasyDrift/client/module/handler/module_handler.lua b/resources/EasyDrift/client/module/handler/module_handler.lua deleted file mode 100644 index 270f07ef3..000000000 --- a/resources/EasyDrift/client/module/handler/module_handler.lua +++ /dev/null @@ -1,5 +0,0 @@ -Modules = {} - -exports('GetModules', function() - return Modules -end) \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/drift_counter.lua b/resources/EasyDrift/client/module/modules/drift_counter.lua deleted file mode 100644 index 47fd22bf1..000000000 --- a/resources/EasyDrift/client/module/modules/drift_counter.lua +++ /dev/null @@ -1,193 +0,0 @@ -Modules.DriftCounter = {} -Modules.DriftCounter.IsEnabled = true -Modules.DriftCounter.IsDrifting = false -Modules.DriftCounter.CurrentPoints = 0 -Modules.DriftCounter.CurrentAngle = 0 -- Only refreshed when the player is drifting -Modules.DriftCounter.ChainCooldown = ConfigShared.DriftChainTime -Modules.DriftCounter.ChainLoopStarted = false -Modules.DriftCounter.ChainTimeLeft = 0 -Modules.DriftCounter.GlobalAlpha = 0 -if ConfigShared.devmod then - Modules.DriftCounter.GlobalAlpha = 255 -end -Modules.DriftCounter.InAnimation = false -Modules.DriftCounter.CachedAllowedVeh = {} - - - --- Source: https://github.com/Blumlaut/FiveM-DriftCounter/blob/master/driftcounter_c.lua --- Lot of math stuff i don't understand, thanks Blumlaut -function Modules.DriftCounter.GetCurrentAngle() - if Modules.Player.IsPedInAnyVehicle() then - local veh = Modules.Player.GetCurrentVehicle() - local vx,vy,_ = table.unpack(GetEntityVelocity(veh)) - local modV = math.sqrt(vx*vx + vy*vy) - - - local _,_,rz = table.unpack(GetEntityRotation(veh,0)) - local sn,cs = -math.sin(math.rad(rz)), math.cos(math.rad(rz)) - - if GetEntitySpeed(veh)* 3.6 < 25 or GetVehicleCurrentGear(veh) == 0 then return 0,modV end --speed over 25 km/h - - local cosX = (sn*vx + cs*vy)/modV - return math.deg(math.acos(cosX))*0.5, modV - else - return 0 - end -end - --- Cleaning the cache to avoid any memory leak as the system will load up every vehicule entity the player goes in. If the entity is deleted or not in range it will be removed from the list to avoid memory leaks -function Modules.DriftCounter.CleanUpCache() - for veh, allowed in pairs(Modules.DriftCounter.CachedAllowedVeh) do - if not DoesEntityExist(veh) then - Modules.DriftCounter.CachedAllowedVeh[veh] = nil - end - end -end - -function Modules.DriftCounter.IsVehiculeAllowedToDrift(pVeh) - if ConfigShared.UseVehicleWhitelist then - if Modules.DriftCounter.CachedAllowedVeh[pVeh] == nil then - local pVehModel = GetEntityModel(pVeh) - if ConfigShared.WhitelistedVehicules[pVehModel] ~= nil then - Modules.DriftCounter.CachedAllowedVeh[pVeh] = true - else - Modules.DriftCounter.CachedAllowedVeh[pVeh] = false - end - Modules.DriftCounter.CleanUpCache() - else - return Modules.DriftCounter.CachedAllowedVeh[pVeh] -- Using a cache system allow better performance, we don't check the vehicle model every time. - end - else - return true - end -end - -function Modules.DriftCounter.IsPlayerDrifting() - if Modules.Player.IsPedInAnyVehicle() then - local pVeh = Modules.Player.GetCurrentVehicle() - if Modules.DriftCounter.IsVehiculeAllowedToDrift(pVeh) then - if GetEntityHeightAboveGround(pVeh) <= 1.5 then - if Modules.Player.GetPed() == GetPedInVehicleSeat(pVeh, -1) then - Modules.DriftCounter.CurrentAngle = Modules.DriftCounter.GetCurrentAngle() - if Modules.DriftCounter.CurrentAngle > 10 then - return true - else - return false - end - else - return false - end - else - return false - end - end - else - return false - end -end - -function Modules.DriftCounter.StartChainBreakLoop() - if not Modules.DriftCounter.ChainLoopStarted then - Modules.DriftCounter.ChainLoopStarted = true - if ConfigShared.UseDefaultUI then - Modules.DriftCounter.FadeInHud() - end - TriggerEvent(ConfigShared.DriftStartEvent) - Citizen.CreateThread(function() - Modules.Utils.RealWait(Modules.DriftCounter.ChainCooldown, function(cb, timeLeft) - Modules.DriftCounter.ChainTimeLeft = timeLeft - (timeLeft * 2) -- Duh - if Modules.DriftCounter.IsDrifting then - cb(false, ConfigShared.DriftChainTime) - end - end) - if ConfigShared.UseDefaultUI then - Modules.DriftCounter.FadeOutHud() - end - TriggerEvent(ConfigShared.DriftFinishedEvent, Modules.DriftCounter.CurrentPoints) - Modules.DriftCounter.ChainCooldown = ConfigShared.DriftChainTime - Modules.DriftCounter.ChainLoopStarted = false - Modules.DriftCounter.CurrentPoints = 0 - Modules.DriftCounter.CurrentAngle = 0 - Modules.DriftCounter.ChainTimeLeft = 0 - end) - end -end - -function Modules.DriftCounter.FadeInHud() - Citizen.CreateThread(function() - Modules.DriftCounter.InAnimation = true - while Modules.DriftCounter.GlobalAlpha < 255 do - Modules.DriftCounter.GlobalAlpha = Modules.DriftCounter.GlobalAlpha + (0.5 * Modules.Utils.TimeFrame) - Wait(0) - end - Modules.DriftCounter.InAnimation = false - Modules.DriftCounter.GlobalAlpha = 255 - end) -end - -function Modules.DriftCounter.FadeOutHud() - Citizen.CreateThread(function() - Modules.DriftCounter.InAnimation = true - while Modules.DriftCounter.GlobalAlpha > 0 do - Modules.DriftCounter.GlobalAlpha = Modules.DriftCounter.GlobalAlpha - (0.5 * Modules.Utils.TimeFrame) - Wait(0) - end - Modules.DriftCounter.InAnimation = false - Modules.DriftCounter.GlobalAlpha = 0 - end) -end - -Citizen.CreateThread(function() - while true do - if Modules.DriftCounter.IsEnabled then -- Check we're enabled - if Modules.DriftCounter.IsPlayerDrifting() then - Modules.DriftCounter.IsDrifting = true - Modules.DriftCounter.StartChainBreakLoop() - if Modules.DriftCounter.CurrentAngle > 10 then - if ConfigShared.AddPointBasedOnAngle then - Modules.DriftCounter.CurrentPoints = math.floor(Modules.DriftCounter.CurrentPoints + (Modules.DriftCounter.CurrentAngle / 100) * Modules.Utils.TimeFrame) -- This fix the issue where player with low fps would get less point then player with high fps count. - end - - if ConfigShared.AddStaticPointOnDrifting then - Modules.DriftCounter.CurrentPoints = math.floor(Modules.DriftCounter.CurrentPoints + ConfigShared.StaticPointToAdd * Modules.Utils.TimeFrame) -- This fix the issue where player with low fps would get less point then player with high fps count. - end - end - else - Modules.DriftCounter.IsDrifting = false - if Modules.DriftCounter.ChainLoopStarted then - Wait(0) -- Chain active, so we need to check if the player start drifting again or not as fast as possible - else - Wait(100) -- Could be longer i guess, but will take more time to detect if the player is drifting or not. - end - end - else - Wait(1000) -- Sleep if disabled - end - Wait(0) - end -end) - -AddEventHandler(ConfigShared.GetCurrentDriftScore, function(cb) - cb(Modules.DriftCounter.CurrentPoints) -end) - -AddEventHandler(ConfigShared.IsDrifting, function(cb) - cb(Modules.DriftCounter.IsDrifting) -end) - -AddEventHandler(ConfigShared.IsEnabled, function(cb) - cb(Modules.DriftCounter.IsEnabled) -end) - -AddEventHandler(ConfigShared.EnableEvent, function() - Modules.DriftCounter.IsEnabled = true -end) - -AddEventHandler(ConfigShared.DisableEvent, function() - Modules.DriftCounter.IsEnabled = false -end) - -AddEventHandler(ConfigShared.ToggleEvent, function() - Modules.DriftCounter.IsEnabled = not Modules.DriftCounter.IsEnabled -end) diff --git a/resources/EasyDrift/client/module/modules/loader.lua b/resources/EasyDrift/client/module/modules/loader.lua deleted file mode 100644 index 4ec25a04c..000000000 --- a/resources/EasyDrift/client/module/modules/loader.lua +++ /dev/null @@ -1,19 +0,0 @@ -Modules.Loader = {} -Modules.Loader.dictToLoadFirst = { - {"ui_drift"}, -} -Modules.Loader.FontToLoad = { - {"forza", "forza"}, -} - -function Modules.Loader.Run() - while Modules.UI == nil do - Wait(1) - end - for k,v in pairs(Modules.Loader.dictToLoadFirst) do - Modules.UI.LoadStreamDict(v[1]) - end - for k,v in pairs(Modules.Loader.FontToLoad) do - Modules.UI.LoadFont(v) - end -end \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/lobby.lua b/resources/EasyDrift/client/module/modules/lobby.lua deleted file mode 100644 index 0dfedf855..000000000 --- a/resources/EasyDrift/client/module/modules/lobby.lua +++ /dev/null @@ -1,5 +0,0 @@ -Modules.Lobby = {} - -Citizen.CreateThreadNow(function() - Modules.Loader.Run() -end) \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/log.lua b/resources/EasyDrift/client/module/modules/log.lua deleted file mode 100644 index e130cc2f0..000000000 --- a/resources/EasyDrift/client/module/modules/log.lua +++ /dev/null @@ -1,5 +0,0 @@ -Modules.Log = {} - -function Modules.Log.Error(...) - print("^1ERROR: ^7", ...) -end \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/native_ui.lua b/resources/EasyDrift/client/module/modules/native_ui.lua deleted file mode 100644 index 03adb293c..000000000 --- a/resources/EasyDrift/client/module/modules/native_ui.lua +++ /dev/null @@ -1,517 +0,0 @@ --- Some parts here are pretty ugly, i know. Will to a refractor to this lib someday. -Modules.UI = {} -Modules.UI.cooldown = false -Modules.UI.font = {} -Modules.UI.AnimatedFrames = {} -Modules.UI.pages = { - ["hud_drift"] = { - label = "hud_drift", - active = false, - lockControls = false, - showCursor = false, - drawFunction = function() - Modules.UI.DisplayDrift() - end, - }, -} -Modules.UI.lockedControls = { - {24, 30, 31, 32, 33, 34, 35, 69, 70, 92, 114, 121, 140, 141, 142, 257, 263, 264, 331, 1, 2, 4, 5, 17, 16, 15, 14} -} - -function Modules.UI.IsAnySubMenuActive() - for k,v in pairs(Modules.UI.pages) do - if v.active then - return true - end - end - return false -end - -function Modules.UI.SetPageActive(page) - if Modules.UI.pages[page] then - Modules.UI.pages[page].active = true - end -end - -function Modules.UI.SetPageInactive(page) - if Modules.UI.pages[page] then - Modules.UI.pages[page].active = false - end -end - -function Modules.UI.SetFullscreenLoaderActive(status) - if status then - SendNUIMessage({ - type = 'toggleLoaderOn', - }) - else - SendNUIMessage({ - type = 'toggleLoaderOff', - }) - end -end - -function Modules.UI.ForceStopIntro() - SendNUIMessage({ - type = 'stopIntro', - }) -end - -Citizen.CreateThread(function() - while true do - local lockControls = false - local showCursor = false - - - for k,v in pairs(Modules.UI.pages) do - --print(v.active, k) - if v.active then - if v.showCursor then - showCursor = true - end - if v.lockControls then - lockControls = true - end - v.drawFunction() - end - end - - if showCursor then - ShowCursorThisFrame() - SetMouseCursorSprite(1) - end - - if lockControls then - for k,v in pairs(Modules.UI.lockedControls[1]) do - if v ~= nil then - DisableControlAction(0, v, true) - end - end - end - - Wait(1) - end -end) - - --- Duplicate, need to be removed -function Modules.UI.RealWait(ms, cb) - local timer = GetGameTimer() + ms - while GetGameTimer() < timer do - if cb ~= nil then - cb(function(stop) - if stop then - timer = 0 - return - end - end) - end - Wait(0) - end -end - -function Modules.UI.LoadStreamDict(dict) - while not HasStreamedTextureDictLoaded(dict) do - RequestStreamedTextureDict(dict, 1) - print("Loading dict ", dict) - Wait(0) - end - print("Dict loaded! ", dict) -end - -function Modules.UI.LoadFont(font) - RegisterFontFile(font[1]) -- the name of your .gfx, without .gfx - local fontId = RegisterFontId(font[2]) -- the name from the .xml - - Modules.UI.font[font[2]] = fontId -end - - -function Modules.UI.DrawSlider(screenX, screenY, width, height, backgroundColor, progressColor, value, max, settings, cb) - if settings.devmod ~= nil and settings.devmod == true then - local x = GetControlNormal(0, 239) - local y = GetControlNormal(0, 240) - - - screenX = x - screenY = y - - - if IsControlJustReleased(0, 38) then - TriggerEvent("addToCopy", x..", "..y) - end - end - - if value > max then - value = max - end - - if settings.direction == nil then - settings.direction = 1 - end - - local valueUpdated = false - local newValue = value - - local pos = (vector2(screenX, screenY) + vector2(width, height) / 2.0) - DrawRect(pos[1], pos[2], width, height, backgroundColor[1], backgroundColor[2], backgroundColor[3], backgroundColor[4]) - - local progressWidth = (value/max) * width - local progressHeight = height - - if settings.direction == 1 then -- left-to-right - pos = (vector2(screenX, screenY) + vector2(progressWidth, height) / 2.0) - elseif settings.direction == 2 then -- right-to-left - pos = pos + vector2(width / 2.0, 0.0) - vector2(progressWidth / 2.0, 0.0) - elseif settings.direction == 3 then -- bottom-to-top - progressWidth = width - progressHeight = (value/max) * width - pos = pos + vector2(0.0, height / 2.0) - vector2(0.0, progressHeight / 2.0) - elseif settings.direction == 4 then -- top-to-bottom - progressWidth = width - progressHeight = (value/max) * width - pos = pos - vector2(0.0, height / 2.0) + vector2(0.0, progressHeight / 2.0) - end - - DrawRect(pos[1], pos[2], progressWidth, progressHeight, progressColor[1], progressColor[2], progressColor[3], progressColor[4]) - - if settings.noHover == false then - if Modules.UI.isMouseOnButton({x = GetControlNormal(0, 239) , y = GetControlNormal(0, 240)}, {x = screenX, y = screenY}, width, height) then - SetMouseCursorSprite(4) - if IsControlPressed(0, 24) then - local mouse = GetControlNormal(0, 239) - local size = ((mouse - screenX) * max) / width - newValue = size - - --print(newValue) - valueUpdated = true - end - end - end - - cb(valueUpdated, newValue) -end - - - -Modules.UI.HoveredCache = {} - -function Modules.UI.CheckIfAlreadyHovered(textureDict, textureName, screenX, screenY) - local uniqueID = textureDict .. textureName .. screenX .. screenY - if Modules.UI.HoveredCache[uniqueID] == nil then - Modules.UI.HoveredCache[uniqueID] = false - return false, uniqueID - else - return Modules.UI.HoveredCache[uniqueID], uniqueID - end -end - -function Modules.UI.SetHoveredStatus(uniqueID, status) - if Modules.UI.HoveredCache[uniqueID] ~= nil then - Modules.UI.HoveredCache[uniqueID] = status - end -end - -function Modules.UI.DrawSpriteNew(textureDict, textureName, screenX, screenY, width, height, heading, red, green, blue, alpha, settings, cb) - local onSelected = false - local onHovered = false - - if settings.devmod ~= nil and settings.devmod == true then - local x = GetControlNormal(0, 239) - local y = GetControlNormal(0, 240) - - print(x, y) - - screenX = x - screenY = y - - if IsControlJustReleased(0, 38) then - TriggerEvent("addToCopy", x..", "..y) - end - end - - local pos - if settings.centerDraw ~= nil and settings.centerDraw == true then - pos = vector2(screenX, screenY) - else - pos = (vector2(screenX, screenY) + vector2(width, height) / 2.0) - end - - -- if Modules.Sheets.IsSpriteAnimated(textureDict, textureName) then - -- textureName = textureName..Modules.Sheets.GetActualFrame(textureDict, textureName) - -- end - - if settings.Draw3d ~= nil then - SetDrawOrigin(settings.Draw3d.pos.x, settings.Draw3d.pos.y, settings.Draw3d.pos.z, 0) - pos = (vector2(0.0, 0.0) + vector2(width, height) / 2.0) - end - - if settings.NoHover ~= nil and settings.NoHover == true then - DrawSprite(textureDict, textureName, pos[1], pos[2], width, height, heading, red, green, blue, alpha) - else - if settings.Draw3d ~= nil then - _, screenX, screenY = GetScreenCoordFromWorldCoord(settings.Draw3d.pos.x, settings.Draw3d.pos.y, settings.Draw3d.pos.z) - end - if Modules.UI.isMouseOnButton({x = GetControlNormal(0, 239) , y = GetControlNormal(0, 240)}, {x = screenX, y = screenY}, width, height) then - onHovered = true - local aleadyHovered, spriteUniqueId = Modules.UI.CheckIfAlreadyHovered(textureDict, textureName, screenX, screenY) - if not aleadyHovered then - Modules.UI.SetHoveredStatus(spriteUniqueId, true) - Modules.Sound.PlaySound(math.random(1,99999), "FrontEnd/Navigate_Highlight", false, 0.02) - end - if settings.CustomHoverTexture ~= nil and settings.CustomHoverTexture ~= false then - if settings.CustomHoverTexture[3] ~= nil and settings.CustomHoverTexture[4] ~= nil then - local x,y = Modules.UI.ConvertToPixel(settings.CustomHoverTexture[3], settings.CustomHoverTexture[4]) - width = x - height = y - end - - DrawSprite(settings.CustomHoverTexture[1], settings.CustomHoverTexture[2], pos[1], pos[2], width, height, heading, red, green, blue, alpha) - else - DrawSprite(textureDict, textureName, pos[1], pos[2], width, height, heading, red, green, blue, alpha) - end - else - onHovered = false - local aleadyHovered, spriteUniqueId = Modules.UI.CheckIfAlreadyHovered(textureDict, textureName, screenX, screenY) - if aleadyHovered then - Modules.UI.SetHoveredStatus(spriteUniqueId, false) - end - DrawSprite(textureDict, textureName, pos[1], pos[2], width, height, heading, red, green, blue, alpha) - end - end - - - if settings.NoSelect == nil or settings.NoSelect == false and not settings.devmod == true then - if Modules.UI.isMouseOnButton({x = GetControlNormal(0, 239) , y = GetControlNormal(0, 240)}, {x = screenX, y = screenY}, width, height) then - SetMouseCursorSprite(4) - onHovered = true - if Modules.UI.HandleControl() then - --PlayCustomSound("FrontEnd/Navigate_Apply_01_Wave 0 0 0", 0.02) - Modules.Sound.PlaySound(math.random(1,99999), "FrontEnd/Navigate_Apply_01_Wave 0 0 0", false, 0.02) - onSelected = true - end - end - end - - if settings.Draw3d ~= nil then - ClearDrawOrigin() - end - - cb(onSelected, onHovered, pos) -end - --- Position = mouse pos -function Modules.UI.isMouseOnButton(position, buttonPos, Width, Heigh) - -- print(position, buttonPos, Width, Heigh) - return position.x >= buttonPos.x and position.y >= buttonPos.y and position.x < buttonPos.x + Width and position.y < buttonPos.y + Heigh -end - - - -function Modules.UI.HandleCooldown() - if not Modules.UI.cooldown then - Modules.UI.cooldown = true - Citizen.CreateThread(function() - Wait(150) - Modules.UI.cooldown = false - end) - end -end - -local clickControl = {24, 176} -function Modules.UI.HandleControl() - for k,v in pairs(clickControl) do - if not Modules.UI.cooldown then - if IsControlJustReleased(0, v) or IsDisabledControlJustReleased(0, v) then - Modules.UI.HandleCooldown() - return true - end - end - end - return false -end - - -function Modules.UI.DrawTexts(x, y, text, center, scale, rgb, font, rightJustify, devmod) - - if devmod then - local x2 = GetControlNormal(0, 239) - local y2 = GetControlNormal(0, 240) - - x = x2 - y = y2 - - if IsControlJustReleased(0, 38) then - TriggerEvent("addToCopy", x..", "..y) - end - end - - if rightJustify ~= 0 and rightJustify ~= false then - SetTextJustification(2) - SetTextWrap(0.0, x) - end - - SetTextFont(font) - SetTextScale(scale, scale) - - SetTextColour(rgb[1], rgb[2], rgb[3], rgb[4]) - SetTextEntry("STRING") - SetTextCentre(center) - AddTextComponentString(text) - EndTextCommandDisplayText(x,y) -end - -function Modules.UI.DrawTextsNoLimit(x, y, text, center, scale, rgb, font, rightJustify, devmod) - AddTextEntry("text", text) - - if devmod then - local x2 = GetControlNormal(0, 239) - local y2 = GetControlNormal(0, 240) - - print(x2, y2) - - x = x2 - y = y2 - end - - if rightJustify ~= 0 and rightJustify ~= false then - SetTextJustification(2) - SetTextWrap(0.0, x) - end - - SetTextFont(font) - SetTextScale(scale, scale) - - SetTextColour(rgb[1], rgb[2], rgb[3], rgb[4]) - SetTextEntry("STRING") - SetTextCentre(center) - AddTextComponentString(text) - EndTextCommandDisplayText(x,y) -end - -function Modules.UI.Draw3DText(x,y,z,textInput,fontId,scaleX,scaleY) - local px,py,pz=table.unpack(GetGameplayCamCoords()) - local dist = GetDistanceBetweenCoords(px,py,pz, x,y,z, 1) - local scale = (1/dist)*20 - local fov = (1/GetGameplayCamFov())*100 - local scale = scale*fov - SetTextScale(scaleX*scale, scaleY*scale) - SetTextFont(fontId) - SetTextProportional(1) - SetTextColour(250, 250, 250, 255) -- You can change the text color here - SetTextDropshadow(1, 1, 1, 1, 255) - SetTextEdge(2, 0, 0, 0, 150) - SetTextDropShadow() - SetTextOutline() - SetTextEntry("STRING") - SetTextCentre(1) - AddTextComponentString(textInput) - SetDrawOrigin(x,y,z, 0) - DrawText(0.0, 0.0) - ClearDrawOrigin() -end - - --- pos.xyz --- textureDict --- textureName --- x --- y --- width --- height --- heading --- r --- g --- b --- a -function Modules.UI.DrawSprite3d(data, dontDrawHowOfScreen) - if dontDrawHowOfScreen == nil then - dontDrawHowOfScreen = false - end - - local draw = false - if dontDrawHowOfScreen == false then - draw = true - else - local get, x,y = GetScreenCoordFromWorldCoord(data.pos.x, data.pos.y, data.pos.z) - --print(get, x, y) - if not get or x < 0.0 or x > 1.0 or y < 0.0 or y > 1.0 then - draw = false - else - draw = true - end - end - - if draw then - local dist = #(GetGameplayCamCoords().xy - data.pos.xy) - local fov = (1 / GetGameplayCamFov()) * 100 - local scale = ((1 / dist) * 2) * fov - SetDrawOrigin(data.pos.x, data.pos.y, data.pos.z, 0) - DrawSprite( - data.textureDict, - data.textureName, - (data.x or 0) * scale, - (data.y or 0) * scale, - data.width * scale, - data.height * scale, - data.heading or 0, - data.r or 255, - data.g or 255, - data.b or 255, - data.a or 255 - ) - ClearDrawOrigin() - end - return draw -end - -function Modules.UI.DrawSprite3dNoDownSize(data, dontDrawHowOfScreen) - if dontDrawHowOfScreen == nil then - dontDrawHowOfScreen = false - end - - local draw = false - if dontDrawHowOfScreen == false then - draw = true - else - local get, x,y = GetScreenCoordFromWorldCoord(data.pos.x, data.pos.y, data.pos.z) - if not get or x < 0.0 or x > 1.0 or y < 0.0 or y > 1.0 then - draw = false - else - draw = true - end - end - - if draw then - local scale = 1 - SetDrawOrigin(data.pos.x, data.pos.y, data.pos.z, 0) - DrawSprite( - data.textureDict, - data.textureName, - data.x or (0 * scale), - data.y or (0 * scale), - data.width * scale, - data.height * scale, - data.heading or 0, - data.r or 255, - data.g or 255, - data.b or 255, - data.a or 255 - ) - ClearDrawOrigin() - end - return draw - -end - --- function Modules.UI.ConvertToPixel(x, y) --- return (x * 1920), (y * 1080) --- end - -function Modules.UI.ConvertToPixel(x, y) - return (x / 1920), (y / 1080) -end - -function Modules.UI.ConvertToRes(x, y) - return (x * 1920), (y * 1080) -end \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/player.lua b/resources/EasyDrift/client/module/modules/player.lua deleted file mode 100644 index a7de0a183..000000000 --- a/resources/EasyDrift/client/module/modules/player.lua +++ /dev/null @@ -1,41 +0,0 @@ -Modules.Player = {} -Modules.Player.IsDead = false - - -function Modules.Player.GetPed() - return PlayerPedId() -end - -function Modules.Player.GetDeadStatus() - return Modules.Player.IsDead -end - -function Modules.Player.SetDeadStatus(status) - Modules.Player.IsDead = status -end - -function Modules.Player.GetPos() - return GetEntityCoords(Modules.Player.GetPed()) -end - -function Modules.Player.GetHeading() - return GetEntityHeading(Modules.Player.GetPed()) -end - -function Modules.Player.GetCurrentVehicle() - return GetVehiclePedIsIn(Modules.Player.GetPed(), false) -end - -function Modules.Player.GetLastVehicle() - return GetVehiclePedIsIn(Modules.Player.GetPed(), true) -end - -function Modules.Player.IsPedInAnyVehicle() - if IsPedInAnyVehicle(Modules.Player.GetPed(), false) or IsPedInAnyVehicle(Modules.Player.GetPed(), true) then - return true - end -end - -function Modules.Player.GetHealth() - return GetEntityHealth(Modules.Player.GetPed()) -end \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/ui_native_pages/drift.lua b/resources/EasyDrift/client/module/modules/ui_native_pages/drift.lua deleted file mode 100644 index 42a1e146a..000000000 --- a/resources/EasyDrift/client/module/modules/ui_native_pages/drift.lua +++ /dev/null @@ -1,88 +0,0 @@ -function Modules.UI.DisplayDrift() - if ConfigShared.PositionsCoords[ConfigShared.Position] ~= nil then - local alphaToUse = math.floor(Modules.DriftCounter.GlobalAlpha) - - local baseX = ConfigShared.PositionsCoords[ConfigShared.Position][1] - local baseY = ConfigShared.PositionsCoords[ConfigShared.Position][2] - - local x,y = Modules.UI.ConvertToPixel(360, 76) - Modules.UI.DrawSpriteNew("ui_drift", "plate", baseX, baseY, x,y, 0, 255, 255, 255, alphaToUse, { - NoHover = true, - CustomHoverTexture = false, - NoSelect = true, - devmod = false - }, function(onSelected, onHovered) - - end) - - -- 0.51041668653488, 0.88999997615814 - Modules.UI.DrawTexts(baseX + 0.109375, baseY - 0.00259260892868, tostring(Modules.Utils.Comma_value(Modules.DriftCounter.CurrentPoints)) .." ~c~PTS", true, 0.8, {250, 224, 64, alphaToUse}, Modules.UI.font["forza"], false, false) - - - - -- Condition is a bit hacky, but it's to avoid displaying the bars while drifting on the hud as it make the hud less cool - if Modules.DriftCounter.ChainTimeLeft <= ConfigShared.DriftChainTime - 100 then - local x,y = Modules.UI.ConvertToPixel(279, 2) - -- 0.44010418653488, 0.89259254932404 - Modules.UI.DrawSlider(baseX + 0.0390625, baseY - 0.00000003576278, x, y, {0, 0, 0, 0}, {207, 5, 81, alphaToUse}, Modules.DriftCounter.ChainTimeLeft, ConfigShared.DriftChainTime, { - noHover = true, - direction = 1, - devmod = false, - }, function(onUpdate, newValue) - - end) - - -- 0.44010418653488, 0.96018517017365 - Modules.UI.DrawSlider(baseX + 0.0390625, baseY + 0.06759258508683, x, y, {0, 0, 0, 0}, {207, 5, 81, alphaToUse}, Modules.DriftCounter.ChainTimeLeft, ConfigShared.DriftChainTime, { - noHover = true, - direction = 1, - devmod = false, - }, function(onUpdate, newValue) - - end) - end - - if ConfigShared.DisplayAngle then - local alphaToUseForAngle = 150 - if alphaToUse < alphaToUseForAngle then - alphaToUseForAngle = alphaToUse - end - - local x,y = Modules.UI.ConvertToPixel(180, 13) - local baseYToAdd = 0.08 - Modules.UI.DrawSlider(baseX + x, baseY + baseYToAdd, x, y, {0, 0, 0, alphaToUseForAngle}, {207, 5, 81, alphaToUse}, Modules.DriftCounter.CurrentAngle, ConfigShared.MaxAngle, { - noHover = true, - direction = 1, - devmod = false, - }, function(onUpdate, newValue) - - end) - Modules.UI.DrawSlider(baseX, baseY + baseYToAdd, x, y, {0, 0, 0, alphaToUseForAngle}, {207, 5, 81, alphaToUse}, Modules.DriftCounter.CurrentAngle, ConfigShared.MaxAngle, { - noHover = true, - direction = 2, - devmod = false, - }, function(onUpdate, newValue) - - end) - Modules.UI.DrawTexts(baseX + x, baseY + baseYToAdd - 0.0122, tostring(math.floor(Modules.DriftCounter.CurrentAngle)) .."°", true, 0.4, {250, 224, 64, alphaToUse}, Modules.UI.font["forza"], false, false) - end - else - Modules.Log.Error("Wrong value used in config for ConfigShared.Position. Positon do not exist") - end -end - -Citizen.CreateThread(function() - if ConfigShared.UseDefaultUI then - while true do - if Modules.DriftCounter.IsDrifting or Modules.DriftCounter.ChainLoopStarted or Modules.DriftCounter.InAnimation then - Modules.UI.SetPageActive("hud_drift") - else - Modules.UI.SetPageInactive("hud_drift") - end - if ConfigShared.devmod then - Modules.UI.SetPageActive("hud_drift") - end - Wait(100) - end - end -end) \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/utils.lua b/resources/EasyDrift/client/module/modules/utils.lua deleted file mode 100644 index 9a2d691ad..000000000 --- a/resources/EasyDrift/client/module/modules/utils.lua +++ /dev/null @@ -1,46 +0,0 @@ -Modules.Utils = {} -Modules.Utils.cachedData = {} -Modules.Utils.TimeFrame = 0 - -function Modules.Utils.RealWait(ms, cb) - local timer = GetGameTimer() + ms - local timeLeft = GetGameTimer() - timer - while GetGameTimer() < timer do - timeLeft = GetGameTimer() - timer - if cb ~= nil then - cb(function(stop, setValue) - if stop then - timer = 0 - return - end - - if setValue ~= nil then - timer = GetGameTimer() + setValue - end - end, timeLeft) - end - Wait(0) - end -end - --- Source: http://lua-users.org/wiki/FormattingNumbers -function Modules.Utils.Comma_value(amount) - local formatted = amount - local k - while true do - formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') - if (k==0) then - break - end - end - return formatted -end - -local timer = GetGameTimer() -Citizen.CreateThread(function() - while true do - Modules.Utils.TimeFrame = (GetGameTimer() - timer) - timer = GetGameTimer() - Wait(0) - end -end) \ No newline at end of file diff --git a/resources/EasyDrift/client/module/modules/world.lua b/resources/EasyDrift/client/module/modules/world.lua deleted file mode 100644 index 74c686d59..000000000 --- a/resources/EasyDrift/client/module/modules/world.lua +++ /dev/null @@ -1,83 +0,0 @@ -Modules.World = {} - - -function Modules.World.GetDistanceBetweenCoords(coords1, coords2) - local coords1 = vector3(coords1.x, coords1.y, coords1.z) - local coords2 = vector3(coords2.x, coords2.y, coords2.z) - return #(coords1 - coords2) -end - -function Modules.World.GetPlayersServerIdsInZone(size) - local players = {} - - local currentPosition = Modules.Player.GetPosition() - for k,v in pairs(GetActivePlayers()) do - local position = GetEntityCoords(GetPlayerPed(v)) - if Modules.World.GetDistanceBetweenCoords(currentPosition, position) <= size then - table.insert(players, v) - end - end - return players -end - -function Modules.World.LoadModel(modelName) - local model = GetHashKey(modelName) - if IsModelInCdimage(model) then - RequestModel(model) - while not HasModelLoaded(model) do - Wait(0) - end - return model - else - Modules.Log.Error("Model " .. modelName .. " not found") - return false - end -end - -function Modules.World.CreatePed(modelName, position) - local model = Modules.World.LoadModel(modelName) - if model ~= false then - local ped = CreatePed(4, model, position.x, position.y, position.z, position.w, false, false) - SetEntityAsMissionEntity(ped, true, true) - return ped - else - return false - end -end - -function Modules.World.CreateVehicle(modelName, position, networked) - local model = Modules.World.LoadModel(modelName) - if model ~= false then - local vehicle = CreateVehicle(model, position.x, position.y, position.z, position.w, networked, true) - SetEntityAsMissionEntity(vehicle, true, true) - return vehicle - else - return false - end -end - -function Modules.World.CreateVehicleWithPlayerHeading(modelName, position, networked) - local model = Modules.World.LoadModel(modelName) - if model ~= false then - local vehicle = CreateVehicle(model, position.x, position.y, position.z, Modules.Player.GetHealth(), networked, true) - SetEntityAsMissionEntity(vehicle, true, true) - return vehicle - else - return false - end -end - -function Modules.World.DrawText3D(x, y, z, text) - SetTextScale(0.35, 0.35) - SetTextFont(4) - SetTextProportional(1) - SetTextColour(255, 255, 255, 215) - SetTextEntry("STRING") - SetTextCentre(true) - AddTextComponentString(text) - SetDrawOrigin(x,y,z, 0) - DrawText(0.0, 0.0) - local factor = (string.len(text)) / 370 - DrawRect(0.0, 0.0+0.0125, 0.017+ factor, 0.03, 0, 0, 0, 75) - ClearDrawOrigin() -end \ No newline at end of file diff --git a/resources/EasyDrift/config/config_shared.lua b/resources/EasyDrift/config/config_shared.lua deleted file mode 100644 index b5953800d..000000000 --- a/resources/EasyDrift/config/config_shared.lua +++ /dev/null @@ -1,63 +0,0 @@ -ConfigShared = {} -ConfigShared.devmod = false -- Keep the UI on by default, usefull when tweaking UI -ConfigShared.UseDefaultUI = true -- Set this to false if you want to use your own UI - - -ConfigShared.DriftChainTime = 5000 -- Time in MS -ConfigShared.AddStaticPointOnDrifting = true -- Add a static number of point on every frame when the player is drifting -ConfigShared.StaticPointToAdd = 1 -- This is added every frame, so it will grow very fast - -ConfigShared.AddPointBasedOnAngle = true -- Add an angle based point every frame when the player is drifting. The more angle the player take, the more point he will get - - -ConfigShared.DriftStartEvent = "drift:start" -- Name of the evet triggered when a drift is started, this is a client side event. -ConfigShared.DriftFinishedEvent = "drift:finish" -- Name of the evet triggered when a drift is finished, this is a client side event. The drift score is sent as first arg -ConfigShared.EnableEvent = "drift:enable" -- Enables the drift counter -ConfigShared.DisableEvent = "drift:disable" -- Disables the drift counter -ConfigShared.ToggleEvent = "drift:toggle" -- Toggles the drift counter -ConfigShared.GetCurrentDriftScore = "drift:GetCurrentDriftScore" -- Get the current drift score ... I mean it's in the name ... - --- Example usage --- TriggerEvent("drift:GetCurrentDriftScore", function(score) --- print("My score is: ", score) --- end) - -ConfigShared.IsDrifting = "drift:IsDrifting" -- Return true or false if the player is drifting or not - --- Example usage --- TriggerEvent("drift:IsDrifting", function(isDrifting) --- print("Am i drifitng?", isDrifting) --- end) - - -ConfigShared.IsEnabled = "drift:IsEnabled" -- Checks if the counter is enabled - --- Example usage --- TriggerEvent("drift:IsEnabled", function(isEnabled) --- print("Is the counter enabled?", isEnabled) --- end) - -ConfigShared.UseVehicleWhitelist = false -- Allow only listed vehicule to use the drift counter -ConfigShared.WhitelistedVehicules = { - [GetHashKey("180sx")] = true, -- This is an exemple, add more lines and replace '180sx' with the model name you want to add. the '= true' means nothing, it's just here because with this syntaxe, a value is needed. Also yes, i could use `` instead of GetHashKey but my IDE don't like it and the it doesn't impact performance in this use case. Please don't make a PR to change that - [GetHashKey("gtr")] = true, - [GetHashKey("futo")] = true, -} - - --- Possible positions: --- 1 = bottom of the screen in the middle --- 2 = top of the screen in the middle -ConfigShared.Position = 1 - --- Do not touch this if you don't know what you are doing. --- This allow you to add custom position, first value is pos X of the screen, second in pos Y of the screen. --- min value is 0, max value is 1 -ConfigShared.PositionsCoords = { - [1] = {0.40104168653488, 0.89259258508682}, - [2] = {0.40104168653488, 0.05259258508682}, -} - - -ConfigShared.DisplayAngle = true -ConfigShared.MaxAngle = 50 \ No newline at end of file diff --git a/resources/EasyDrift/fxmanifest.lua b/resources/EasyDrift/fxmanifest.lua deleted file mode 100644 index 349d602f1..000000000 --- a/resources/EasyDrift/fxmanifest.lua +++ /dev/null @@ -1,18 +0,0 @@ -fx_version 'adamant' - -game 'gta5' - - -shared_scripts { - "config/*.lua", -} - -client_scripts { - "client/module/handler/module_handler.lua", - "client/module/modules/*.lua", - "client/module/modules/ui_native_pages/*.lua", -} - --- server_scripts { --- "server/modules/*.lua", --- } \ No newline at end of file diff --git a/resources/EasyDrift/stream/assets/fonts/forza.gfx b/resources/EasyDrift/stream/assets/fonts/forza.gfx deleted file mode 100644 index a422d46239330d858696c69ff0d14bf7f27b1d96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90720 zcmdSB2~?BU+BSSYiHL?#4Iroi#esmLHX?|EDT)kE5I~d$gsK6d)c~THh)vZ%ORYh~ zApwygU>FQI2NauzDoO#tDPq+UPy~XCRZv0O{|?ykJ^y#k`>*f)*Y};XuC*vW?C0Kl z-}}19{dg@|JtF*50=Qr(05}9-NPtQIW-{Rai~z`+6Se>>9;N%w-$swa2MO2B7(S*pN07M!9_!$Ds#1TG0s1SC>08A5r41^NVfiN`%n2%^cQ1Kl{ z5i3RmoI&`G0cb(YrQ*1VNHc(Qh>_+1!H7b{D@2|Jz{#-y29^L)#B?hFG2$7*WgPx3 zV(NH+m53aK{sep{q69&v0USq+vIh7LvBU=8SA^R{fP91&!JP!qg_v)PvLkLHU^2i$ z#J7lS#7)HJDFD5QsHymFMA9^XeuUHx7m^OZM%+d$um{+H807%KL;QkBoR05Bgv|gL z;|P$3c#CkK32+uMV;0T{@d9yRHo!$h=tlq#5I-Xv82~kiPv-!PaKiONkmmw8IO97I zY!`sn2;n?{3WNqx=n8NhF=IZi0b;=dfQN`NZU8$FZ3qK*loe5en7k0z8SyO>VE@Me zwH^RF7Xb`k46qL|+Y_J%ad-)UmlwcQ#1U_R@jkfj2sdAp72&)TK!hNc0c=B>e#0MF$fi6&N_f%#OC!l_YDB8h_5&RK9K-ZqHxa_Cp5eccN3*X?8M%eBJh(}Z-oW8~VMvT~p`+)cvF+v0& zKrBf^84)}7qkg6X6d()_;1m%x2zmxShj@UPc@Q8K(Trdo0?0&6I*faUU>*TbBND~P z4-$Y&2)9hsH-sb$_u?q7aW=|{cybK&IR_vp7tdH8>JZ|KeB2)??h_)t0DoVIV;=|5 zlcBy90Sqg~pG%MnN^y-(p!{-N6GTWE?jz!>a$Gxv_$0vkQ>dG#Q3k|{GXU=p^0NTZ z=Wssf0lE>V6vz)1_-;g1CC>i>fZ0XVaYR%Vz;i^xCFC1K+;@0JlmMp@!@tM*AeN{A zo+3v7fX^VFTn4y&1>kWF%5@d@^BTbUTHK2taqK$Ot9sOV#I^ev-o*2Uc#c?c3(p`zj(Ce$dmHDDxQQ4*_})Q&L=b9#Wr!V! zQiT3p{5M1#A`?-Ic#BAE#x+1B+yfZ<6RtgC%6))q2;T?D*@%RPxNbiqw;@Vf@O)|j zJX=wR+mNdt;kic?J_cCb4saK-`w6Z~2cB)j)J~im;wi$v3v~n$szqKzEbqp>Lo9iU zT!koohWq{;*AlU#2j`ARdjUZE1@#6I`x3e16`lu#UoY+lVoD$K72+Hs@-;q>_yIBF z4W1W75n=!_=PjOP#7F%A<%lr@$Ug|;9RLf_f(Ut!vLmVy^L_>R22qQc{u^=%f{m8& z4kD2tz=uRYFX9TBfQDfNY|tZM>Tm*v=@W1nv2p|fks}GHLu{rHFv);`8UzoGt+f#W zFA!&p30P%9piLxzG>U*P5#vS^(1TmJ z5EOF)zDAru&@Bk~Y%Bps5YG^EEeS|MoJPDuL|EbP5!=QQa0#(=JOQ^5^a=PJ;t|4u zhK>S4&l+Vw7}(%=2%CvGKg3G}e-Z)L5w^BC9wKKluFn(#+@}&?HjRLbh}Cuk+(ta7 z6R^gCfUxNVd^dvt! zz$b_jM9f?QG>AfH0vufk$U~UVLm3c!#5Ke_1k)AAM-(7B5##0)umX{e_yO@6F@FI8 zpChsn?FfH2lm{`|9oHGrgE+bn{URm-OAsJ>O1UxpqN_2X^~iRXcZbR+tM2$pNOZk9x5Lb>I1zxRjr-7P4pQM(tq4P_|o~H8w@& zd0tbgGhczgGJ)^*yz(d&piLJz{YdbeyfVZG^~F{#T@R z??=1+tTeLDujWLSlk=K7#7gL+KeHJr`o*u<7AYg6a#N*%NIS`ZINY1P2$PfT&MQ5gc$z5== zzS5C#u7%{(SrW}0KFaHR$zcj3qy>sJOe8DwG=lZfAt=dEka}O)mw4Ab5Z4r+i=in= ze0vzFo-&;)%Q$&?*?@DQe+NvNs(_9aR^xFIV=CA99_%(bFiUZ?i{+SQXQ6LOP&xxs znS@#q7A^KsPj7@mn!vCjVq@JED$J^6l3>cTussE8rV-B@)c#N81#EX!q^s}OM>>IE zGfj=!T-I@7f=2+-v_uJSi$wxbrC5Ob#VG~T$W>85=6!ZoyK|4`s5eZeJ+aO1tzEfY zE73M73J*mQP3vB&Vf^&z?-tN~E4oz~d6E$Wv#o)g*f8#y6|EeqcNH5tQh=h7fx|b~ z7501kC_*M>QX1JUsraR)5AWNW%*rX=ZL&*1QbYr#_2olKzWc6RCh03bxPC19;;SS9 z;Z=-`VmP}G)vwcbfWtesPPl@{c@}i@nOReh{$g#Do4_*b^_4zRarGlOjOO}zIKD*X1tCMZNh2eQ{4 z7^cZxjN|?{&MZFLrb4(d-ss@ZrI7eXi{HU!aaKDaN z@z4P0yt*f1flI=*H$kdH<|h?T%DrC;OMNVapx2}Yy&Lmm6GH~#6T`fooJ!hCO=4&9 z*&KoEn7P97;OJL;l^6CsH!uBU?4&dp>0JsVy*hrOJ9PBZos+|A=WMaB(7mPgO@2+s z)U6x^(D%%~J-bEjUO|!ax9lPIb~4A-ao!e>Sy0z)66IRm=ERmN zO1@z)r?-9Ib$XwD%q)%OV@Z12E1#aKQN-Sl;hK*8n4&CXcQ`}MS>~6=3F#yWmeh}ZD5EK@`)P7~RSrZXs5swpB^d(B6dQ76v#j|Xm&BI>H`m&~bF`Ta z^?7unpW;%@+{~`{?K%9sI>*_+8Sni?lUm%M?|Prsw9Ox%*YLM*q43z41*y(CPgHKPduJ`QLiM zcze{Lspq)3ETlbSL%>{q^Ack=NI|$V5yau{z~eFw&=5_ncHZXp~|E ze;6e?=!_EY52K_u)IH}NNbhs$4>ls-uTu#oP(+LF0=F#klFR2_9hx;o-Oy2ziZkO2 z@lj1pyG%QAMPM5G@QnZ@OG)J^ONjzZZlM8gR8mp=(huFEat^Hizru>zpj z07;BzfjW%J&tZJ{y-6Lr~yjqVUwRxdQwUnf=0VaI0D*F}~Uu40S zWw%FpqmS!;MtfGRzT?#pyHYMh(>M}(Ac2Pn`z}?686S(M0_pgc;5b9K>$;j-ER9td;XGtn9 zIi;%9^U510%&M2clsF}jBtL-5DADmREipbR!WaYGuc`LdX}0cYj#~^Ja^ERwKDtc{a{%=_qD%#cr-rs|;aX8c(Z2o_~OW?f&w zu50p!xYZ$e@*$NM?JgkE6O_iDK1&%ee39jibuW&9fGQY~B#Lu$8JN7NkyynM=xK(3 zKB`9wE0g9FFbS{ni!+uiY(9a(6AFBt5y*cObH=p=QxvaGBmlXLDj1(GIvberx1Df1 z%kH^k{uMezld{F?9LR4N8+@(Pl<&u_kt>MC-dnl>wEejhqs#O_;x_+oj)~R%go$tO z_IldjTQp(oPP{XV$i)Cge{BIr1``tZK=$#fDcCPf1FNT6S+KiyEu>>{oS|&4yb}mOZ_s1Uj{$2R@)0LXs zSejBVzJMJC<6WMs3U|M@nhW+P(C{AMm+&x7qQxZmocP%H8wVI;1Jh^yfNM7zka*>- z8m9f_%ODDeVyb`)Q{68ChY6!p-Ataq}qjeDht%QQ6HtQ^Y21WV!BaL3VDq&Z; z6iBB~dB8$l3Ko*vN^n2`B!{DDa-QCmk~v_+c+s!h;UZU^R=dS6>RO`^1q(<8Q-EYq zQ~A|e^a80{BND2cS7qAhWr3dfg#blVnh8j?izIjTycpreR4{WN3pQkzJ4~_*5H)u& zIR9;XeuDbq&8=$|1936=V*dj^G8j+;{J@?mIv|{!#&AXA{t1&Z>R?_T z>!q4P&4_nIK8*V~WQq-@f-df%Z%HCvN$YUpXh`HcXuGURjz+6#zk5mKpm z(8YJ_EQ>}e#jFrU0v_jKM{U~1tXJ_5mWH}5WrOHd(^Js%R7}5p$#&mF{OLTN)`*3Vw8WBu67%D9asY{+@1?J@+$(e!+w5Js#jhsE`E zN-&a}{bym~6SqR1HgW_Q?1}3CF?l0^t4BFZsV>>wR}yS;F9Z237L2OTBzXsIs^r|h z3TsYwpvtXPhl54m7z(bDJq+Wq=Tkm8uX6_E;A%?JsiD<#DmxnV*mDF>Km{U`*Jb#i z8%C;1fhubG^>R#0-{t9Oo4eA$NKI|1Qd1kj(5(~<-6!o|?l5WpvfEssWK0Khiz*q* zwS{0m=DmUuL0o#!rb&@Z40^H!MAm&_Fak*9odl%uOBh#!IE+|2I z!p3;-NTx+88uuBa(+Ev%=sO~)q1NklPjQi*R?_JW9g?oitHJOM`EIUH)T`tjc0$nq zR9u9+#GonfS0(uW=2pKf;AH3%#j1pX(Hx!5#^lTSR&4>j0zxZ!>?KEE>1B|B@N}s+ zn_6;@ZCCI8G%nBENeN-dufiDvCX|xC1uk?jz6SnObnF7O)6p+P0}2nlNxKf`^$)P? z8wFHFI7GxgooZnXBOJUz=xX5-kQ=|34@AY(joK;;gL}OVdm;<80x~1r-cs%b25K41 zTqjmEWL@8@!L3Bg;)eR_iI$>Kk*l^;B9F5-!U$4dV#sILg(U(~aU>Yi+$-O?yDMQP zr5t7&F0j?g5?7v#5s(hKgK1gp(Q5Uw!_$^qfXSwV!W`hX?w6GI8UCaK3M%<*+jU(( ze4D1}l$TY%#Sn^Cf~YQ&bftvFh)mYoFPI^UX6ob^T%fT90bT;4{lEh+$;x$it|X+C zUkQicvxxIT!^mLD$!yC54_0$l#;@w-o!^=**GpFaGz4_h9OQAdMcnp8OmBpexn0Nio zx84t2U-S^oGsD!}K9|Blw{Pb`Ne(2mrjb?R;z742X~UjIJl?4CLo?W6#{I{jhc?F) z&9{tSgj8c}?OWG~gL)IqbG|T((YY2<==ftKq2KQ#J$5N$^DTsnl68W7!`UJjMu=0) z)_8lQNx{t955j+~xxIT};`afeYj>Sy1H}!Efm_OHmjn~G#ztOsYnP<2Cx>7O1%yKX ztZ{|6E_x7o1Jm3>ag*ixhy`Z8Ex;wT>J|dmO<*PQwCRmf?@rTxFsv2K|jn5T&G44`e4VbVlL2QTTdMv z^w%bgaaxS#deq9&^5Wm^y(XdU&q4o-Uwuj?!^!~~I`mj?*q-SB-2o5sI16M=2N4mJ zqnCo55F{52XKy<@YDEipJ#g}25)7yBmwWe7zmxz~)&ri~j3x)f!bofF+K{1hgag)5 zFUS58HZJU@ILp{%TL>y8h}zk(=*IXJO7Nx&CN3I66*qbc|nN?aDnx9a4-x+MUVD( z#d`xi^2(v58XR1wDMQM{qeZ8TfXS9+wxSc-^882fz8)R6?HDC@Y#+303GYMrIwkEO znizq2gb8Z@{rp=gPmTo9I_?KsEr9!Se=os!C+jCiLNr?)s{FBnpwqr4mk&?>h%ruT zDEE)|S+yd0PaeDW)BC2<&*;3LhyIzIE0Q7a5bEBIPnn>_U~#b&CRezX${XZGm!(C{d zE>DzQzglFE`!M!%tt?_&IoM$iD#uv((5liRanpL;DtByMD2a+dZ54K|k-)H-LJK>M z=Z||pUL^qaiJq=6{h(&#@v?pMj$@`CnQ|7+_+CnCxSBD z)dnR@Z%~5SoQF}t6mS2~mEolLyF{$^Xl%DGhu3{?d*yrYh2h}HDF??WhuwWr`NGIB zpvT)_jjC8xugn2|Njdl*yUC^;U#65b06o=)%)-AgHLAA`{_Pi!bVfk-!{&pR$2Y}t z1rx@kU{ueE|2bRFvHnr{B|Gj1mHJ%)Kd2P>B=>Bg0?73fpRTK)*aOtpsHji$Cib$; zQ_izpc=p48v7p+$%ea2o^_gcT3yHjbv(X}_i%eqKZO~)H&wUY8_fs`$9g6WtV9SnP zjZ-k~JKD{19RIhJ>CWgQy=up?gDKONh>ZYgNxr%AN8tZ!M3yukZo z7H59y*IB3|oMO<|Rx|3$lGoK&alt;<4}RR&mu)7$5fRnt;z#Q1EUje@H}lGs95!Tx zFrlDVK+Zf&pI5;JUtgvk<;TNea`pqhx~cy}yvx=|YH@QZ3&SfJOw4-tf_Ad%#YB=o zC-+cvdx69r*`Z;r+&9h| zs3&`1*^8$hku^$UBkf#j6ih<<)WM0KfQNajTL2fcikzM|NeMl#k`8x+-ZnMpn!$OKE@Kg(&!4L_PUaO*1STH|lKRXx z#;%mO9WI5ftNSzMu%LnZ`tGU_Pj}95xO}>Cv_qDmT<82nFaqhH(fNi%SY_-oyLxF> zy_65G<9FhjsAFf3K|UeG<|GOr6A$8K;PTX;YY?pE-+)ve(2!V!J!Sw!=; z+D&%wCXxJeaY@2YW)I)9CbN!fat!1!f2P6mYOpq-@Oxg*m?R2=Ax&wiLLsbLvFKr^ zwzj3@3(E^0t@}wNqucc%X>O#L=79ICC${BhYgf9e8KIAkpDUV1r#scrd+S_Qlk@yL zL;|BY(aZXT$^o;7+a=zG-+mt}5*UBY%{GUo>ybBB?(Mxk#qGzkC!yODp46!+0iCr0 zYMe1nUyRE*Xqqe~zu9^_Fp#b{Qp6pW1s1q3>+bn`L+6NrpFJnfxe)e5kC^-x@+r<1U*sw}PwAfn8IqR4iDu(O%_b#Nf!18MP81?)bgN3sA)12c ztPIyTVDQ_74$1q>sYvxWiK{@Z@0NIu>c9eVs8cnQpu2?YdkA^;+K#elEC^w(Cngz- zI;d$^*nS!TkVCtEy(A#ym|(;|e`J||qTf6k-$l2up2C_PKTljOVXqXky_6HotQYse zCdSX%!82p;%3s#Dj(W9e`t&~761d|<&+zE|?wqtp(Odg{TX+;-H=%AcOd`xI%zrml z+8Jy;QmtEJM_UGO+&vtgy8qWU?ocoT{gr(?2F3{_AtEC6{EPyuNOd1;U>%HEVECN6Yg-pZ1o$6 zcIVtKvXsCW;cA$fJbz!pt!?w}z7HpqeQ|d~n8WzD?^PZREy=$N#XSPD+wOZ`1@bX* zCF#upsaXR@D(do-0Nm@X6GngRhwd(?^W?81pB<6HoNKYi(dUMqF3?lE4=Ukfk1krb zBNdn4+^rn+L}&OwD((YA&E*Nc?~)R>ibBO0DyDKU(+eY)-U+%4!=!4MV3@QB-7BMQ zF;XY$t*~bAEE^cdw(ws*nb_)RO89DE7%4T-#>yT{3;bY_vmmNq0Vx%gX1O(tClYSA z=-mYqCqKZ7oyBV1t}W}Lb#ikEw&6Xq@4F$`bycN+;ELb5#vK-(Rgy|nU@V`(tGswt zNodejl$fd1vS5Qy6DBF60i_V;ihGoL)devfU{;&PFI0W=6$|XY^n+`X>aqhND$p~D zK_pj{+J75Y{`1hpdr>LJ79xou`K&6Ug3%T!)=r(q%px>(?~-^TkIK_?wB6HTdJ}FU z&{gF?;r=KAk`zspwNt&`{7*H5$_bkmUl$lT+yawmx*tDE1|A2QgyBQ8yo{b=2M?v* zoE^Z`QwIwy!ePN}CiJQxbW57vUB!^P+I7*oFrhkg1GO~lvKf%>&kL#tlG|0oS8-&g zA7Jap7#{|Yl1=PS&Plm37U)}Bh@&rEC)EFdsosEO0TElIUwnEN%MMd*iZ|f$T5k2` zwcG|){#p)xZz3yIvg;*A?M!e^Q&+?mekU+`CoX>88VP#ZZqF-E<8q+n*yv_S;!(+2 zoFnc-!V`9sh-uVaeY|R~4T#?cINNq(eFcVJ(B(|V&+~>yyRv1BD6rB+v`2Y^2eN9j z_?G}z+ZJ8HHRhh~YzmA$GjApx1U)eQRUNo!fSs=-mRf^8o9!pw+d>lE$T%Pv@9OcW z-{aBs<^?m$23_@b(`X^jT#|fMwF!h3)U5A?<}A@ALnmof3)>FN?B2lGx9TW* zHQUc@+0(CJTu1?J#$+ORNL|VIiUMi(q%ekoIqK`e=z|OFi~K*RYj9AD9wwQt`vJp6 zV5UnZJzj3lh(UVBK9lPflkJ8UBg=k@4YJe44QeUIWc0)I)`~baP(HJRhc$EMedDoo ze#|`h?+;gPVEcjZaxT$WbIVBypx$~R#s8^irYPDS2iGxrn}#>GU#Fzw-46j$tS)+k!few(j@g zbOr2$!R*#wh6}3Abx)@2Qf0$0+zy(-gpw?($3dJ`;9K(C7FhP{S&iLb5gX_6Bju+07jKq;A#RpDp4|US?yep$q=Kp4Gcj z_kkIv1;*U7j&_rs-aImusndbSUS0oA*&I;W#Q$E|K11amRJPNBsBEnISW3uKuiIu< zDAVl*m5tY3741}8y%Qs(ekG`>eJAA^Z@>UEa0buPzB)FU$wk30zZNZKXu-w=U$M%2}rb)p`Ns01%9Dlg={`i27ZTqc>b z&uVK_D~w>Jf#|EZbg3x)5Qq1~D|LNA~jXL2!{E_w0n@EwmsQBc4ZkRp}zsXMU4&6TMqzsqYqDwI#T0)?8c6=v6E zs?+z<`Nvt2mo!O5&zx_8e?JyL4IMm+XH`))nd*eT*85y|G_%{$^0=d=!0=&4E5@JQ zP1#v2M`YY$1(Tf6S9wBxuLW{fT57i21&!*#hT$rwr#kb@)SuMXDYPFXN{knVsPC}6 z!_$6{RVoK_{OI9)BYzQ+o(360n~EH%<9Hj=Hd8{Z^Y|XuVWDK`578>U3`D)aFf8D~ zXiV}hyPvduDXS_ZE$JW)%yji?I5=(ZChE}fo;_3qe>j7B114~_b29c-duIsr=-psi z8sI04^@g=;_uk4Fd>CKUA}$v4EVEGoO+ubeV!1t)9lx59CiJ7#>g+?^D~64Jm}a2o z)zP?pRcav^|Hy5k3MOm`cwX(6>bt4oblrJ^RaYmba*8uiK}M?aK0@G9WbbP>gkBhc;8pzK!ZC_6P{-y>GEyXtV9 zTW$N7&lC|%<7Cd!AHcR~+GIMzcjW@g)QU%fVLitgbZ2{?*A(wJW6pZ2&&lPLD zKMUS=-+^tX3H%x>`{JUu7Ng5?Nte0T*}pLL(rJm*lfFp_+`)bku0Z$ReB2yMNpjTS znn_*TWCK@s?e}WLHA}=byM=vTY|X&)Jw+0EU+@I}B+1$C)aW#@zi0z3Cf<2c4U^JV zSl0oz?FxEsH)WZUbO?>lFrE}*e{+v&jL{C6#R4?sW87j5 zULGDZF{GB>9bWMFh6`bQpsy|r+H!je=yAO?Vaw-a{uEaEK7*xmq({6itin3{ROFh$ zRKPALG?N=}w*UC4noEr7}R0{b4&gq;c+FzSWxOD1KE==8g_G70@ImEJF7$!8@%3#Ih z&zC&B;PmRs=h}>XH+I2ZB{4Awvp55D`)@WsKSzi0W|xPk_xBjkmQjS_95#+V>1ezj zld`2ik=n>&6uFBYj1+Uh(ar8P6BNw_HRJB`%aS7GKq_(olGlLuJjuDVc3cIV$z}dx z|AIQf@XDBqOJ^K>Ia4>-fS*V(Z0GBbCst)_{j8m*@s0dA)~)=w$=o!~ajrNy(u(|X zwbn!Xisuq%4wQAXAVa(~i(0j%`2?mk^ejvXh3T11lN}Y}>k?Ls_{=85TLr@S!}BDG zeKDD${Q5`4(mUmf`#T=$RuUz+!dO(+ao7rp3q<_SSc=9aFtR-!-Yqap3=|VJ?XDny|wzfaNEQg-(XqIk5?QUfdUD*O1EJaDK z?;~sk!eUA;f4aS}yS&L8=>9Fx`zFLv9t9kpE~bht(z8!caw=N}3bH!}YoHw``*p%( zRIcAyEPZl9S{6OvQx*;(>E#g8vQ*M1JM7RLJWpHb)iJose|983%V3$LGC8?ysz9%% z04o!g;!MeL%A1f@onTj0Ph)$SeM5YEP=!*pHIh}+yM`k8&uPfFSh3SJAH~hwbWd~#MhKnD!R#C!5{UWMhM>J+wRz1^EK}-x@>kNZQ};mIt1s6a zo5go2#?tnsawx0@qpp~uhgTHf)Nq^HH%Z4wn3~9-vQ(S+EF73XSi8ad;KLDe=xvSwc2alt!E%Ng6BPit)T_R&_|DHsk zroOH9eHx$A&{NX4Wty207m4D2Ss11~&~AN||D@)ovq8$;-Ggp2_idONDiU(XVbxPV z^wi4GM*Lns`CKr6=3r1T>iKkcG|?d~^TpjSiy^7ub(ELlE z-lks;`hK|-O9IBpd<-x~4*%}zt<<`1ySG;Dg}mV#J+T`04}vgP$c6%9%H`X|2!N2kh)ErqKq_@8wQvR7_kS<0pWY&m!5}z(&aBGR1?c6m9DwYR zPXS7C8q9iqI#SfWMLhD=k)B}=g*WIhwgB`iLt5%L0qIaH7&6oFX{r9D~^ zAbu7jv_D(l{nJrK$)-7Vm|`!7wT9Ps^p>z0bAXuShz!ANx4zjvXx&`eK{V^ z^v}HY@{qAirFK%Okg}NP^(J?5lF!74N+KphF!HJB)MGaP$HN9^Z!U`H?Y+HDqk@q( zxa=)*TLsVDd`Qa=Nk2Hs*&o6=j8Sy!Nltuc_lzbKeu(0Wa7LZzFCMQPI`tdkFkZ(U z!Qomt#~Cq><|e^+fTF$&B#pK4Db2AFU?eOBqvWQ}o|2{)JsoyH>97YQ>+rrRTFV<4 z%`1h`d`Fte?)a$p`C9Kc*e8?adUb!64Fsf?LqN(lOI6vndDZ7fz;sMdV2g|xef;+Q zSj=+H(iCV5P(n7{&LcUTFzEEEgkcT!J+l0_Sj{P9gONmN-+jXjEvO94epq&ORXRs# z#e`ffSkR*PTvx#u_Y8gxcs!4gWJ&2bp<<4J?B8R5Ny@bY3kLS$%rUDW6+2{6IN>-$ zV3fx=fe_#G zKW)Ucj6IC3cAOxWDb7_OQ-A5D$?gR6NIti6+j$CRsKhF?!qU7nO95q3VSfkAT+f%t zR2S(qB{+Yh%`cN-9s=y!4!J$^C_-0RU|O6=7=Xb?X)s`>99sMnUj63g+eUy?lqF58 zJI(Lo#p#Ihk8DUpsf#0c{bQ;TEG<-~IOsw@`D^ipHXo zaJc)dbw}{X`%F@*dtCY=cK!3B;f!q#yDg8?841@$_IA9%W?rdXw!r9$^m$1tWo0#X z>Bb9O)-@lCllrlCxl1EZPE(_5uWOk-8)!QA#5^CgqA?=Uj3oMTVgA;DNw0S`t-skGO63rb}FM&s2^xC&z zqn9fAMa}JH1ELVj`$uY`EERqvMGnZf%gy&i3abQ0SJ(Qw3GnFEPiF5JCB}|z7;bT} zw-FfF)UAnk8-rGP+5PfWXx@fA<2FYuM6C=5`T?q}aBm<`8*(7PjWfIdY*tOT9oV1j zf!lSOl3>OjaG09|r8lGvm8l2jkJ*CJ`;A|PVYUV;6hMr?gy$$;+LgXvJr%%E|` zHUCkiiu_m2zN`woW>L%3_Z({W<^L4D;$JoUV(>9a`$w~{OHvWrD0QL!cls1N^t6cT zPETEy+6@-i-pz9ZO#c>YWneqlmTOGJuWGJLZ-J3nxzSTU6=FTV6i>e5t@dn2K%+Lp z(FWV;f4Ni%dRIg+f8tV4j8?G&w0;E$8Jp%5eg>?$W>c&qvgSYaQC-TP+s$HZQo!js zf{{KEOue}Z46v(Rpuw86g2oY00w`7YY1b>P*)YK(bO{yWgN-I^r9vR)7wgCDyBfG+ z94#GJ1kbnAoo2~R?0|qtt*BjdD>QlP#DYl&f|h$rCo-W4>tUiUjdf7T9zL5%1l0-j zf#+#q@)4}LSdLMrDA?0JFj4BIBxTgW2z@uHAijl2=zxjKjx+MX}uHs^lR0JEdA#9f6vl?nSc8WH~s=%)!oaPel_JT89<1>0Nm|sYncl?6dYK z<8BE^)M!i*%qwBZ+E4h11>{`SZXW3fUKo*nNJG9)8cIW&R}7^gOZA4jy>LD%*5cP4 zQTBTD+c2R{!cLy4AxP@O^rlz5_d}JzM-q7{%^bQ>}PSmdIPpjHiY8- z&CuobPB#_|W+NH*=LBZaecWE!-kub9aAG$r*V`85LzfPQv$6|*0}t^gIq@|-q%k0uxM&U!VMo3I>mMGCHt(Wwit^ZPd|#+K&DPuSBcdJ4upZ0Fx; zA=sVRt7agyzR$}$r1oPcTwRUw8N<swYX7jHaWq;ldPADvsr4KM@I>)Rw(!@`CFX>}gIvv&Kk{F&K3A zG&-AYV~iF*85c6XVwt*mo(~u3D}WwzctWq_QmwOD91qBG+Dvgj{aNB0a%k+aP%eGh zz#;Sa&{wbL74_cy=%6a@Am;KqR)<)af+%?Y!HG!+MA!+}-9kJ!%KSOlpgTV{*sez> zOq)u|c^8U49y^*z&TE(DV|TgeMZWX$LkVY9{9_bW)w5|;o4~9gGd2el{_ksw>7OU) z)v$$v2_vgL@TePnwb`3KA-++3TFxZjyx(^7VU^EwxA;(=Gdcs{I=z9{LXH<6ixtv? z-Hxy_0zS6p6o$j*wPm$!N^PS8Q{ip3XmTyEd8H+lr%UL><|~cAk>rVVN42o(!i?YP zN6`pj)ep@c?bm9eCeK`72OWVtoFA}v_bZ;q^U_kl5;ppew>?f*>GXB@kKN0A~7v7HoN9q@`U8$dh zejKZwh;sgancHfIq#70*2nKb=;s!q~yax#glWh!l^HZt330nunp#`fk+`T2xUvJw{ zgoaDhSy7}M)q6QEvrv}Pic#AN(g`tZv-v^#3N!UW^QL!R&Nq|@-&>u#4+UP96^c^{n zuSN$-U4R=$IMQKEGEG3)G#2EO(s?b%8Pa1;`4GJQQ{;Au=%tgXz7!+IRavtD2n!4} zea>DtGQV({PL&i#drqXlaFJ1`2m_@tsR=f~<7e^s>LRx%@|crLTEzF!{)twyVH5ZC zvsnf9Pfk-K_@bS$_!i72*1e+y-mbe}?*TbbUtGUM19A=qsT;zlE0sbD&ZaTT{7o58rw0 zssr&t1EE~1xYt5(-{4msM)az|)jS$23s}Oj2tzC96em6&OfPLo+}JSfo8Z~L3GrrN zgaLO%U_DTRY_R5jW&cy`C%2YD{6Zo6a#K0j*bv~0^vg-;pka`qEd}HHy^Vv1`E&%E z-)*lwpe@<$`l!vfZ5Gj}+2V*F)DXY6lrW;`mPHsmoa{nBG`4E@cDbe9Z=VXR*f%U2 z^|V-WGC;0Rj63`V1jV1)|NfnQv9D{puBbA#GV>0Q-J#Ep72-DW7$uiU+%1gulYwDP zsq@Uxz%Q=H2T;3%w?8vGy7LFI08L&*goZbLC&r}oshipu6-UWV5`|!b(bM^}z?-$g zo5cw{+Gn2X>paY!kA3?8V{)`{a#0Q*k4a8p9}}_}8op$oHe-D7sRg<#QX}4AvL&?M zJJqMI=8{$V&e7?}4k!DkH!^QDH(V2Rmw@j!%y3z3uhx zwbSesm$zkW)~LIEbcupC7Zh7H6 z>ssJpOsem~yE(%T&q-cS@Ra(Ct1)9kqZa(EG-G#5zxaYuoW8F@j_HW6<%NCNmnCpZ zr5+M_N2+9gu$7*TW{x~hYxJW!$ol2|TbJjXJ>&}`*Pfgjt`qQSC!nyg#4Bsau-l9GTLAjph84@q@Vj;!~pr(USEM99}6@{hQwEwkM zO#E4u`WLMb03#f=VgqVLd9h9_A`2+^(Fb1jztoD3Wdm%!RpdWgXMPWb#4=jTQK=`ohb0@+Q5{PzCs%j3$Ntm;0Gamxx*S>OY-^cG5fyTn^f1t zd%4K1x=vi{o7bj@zqirh$+?X{jOtS2B`|IKxm>lRt-6^aGFW#HQ~qdw{@3m5wb-tX zZJx&es$E?dTbOLqqoq)CV`2FE>x#Oj%#Xe6@d$g0@GkK<;nSZZwy}?evMtrqEY+4d z@X)-{_2=(Dl}zBmpLg<%uTi$1KYcQHiwhG#`>GTR^<~yDA-(tMHj{O!Q3*=ym+f4G zh0!oNETBt%Z&hE8!If5kXVsXrOsz*t?mH@h$@FQqMGW5+0~F6G<5JCZmyg|$d#MMU zW5xFyzRa#i`|v*^gHfv*&+FeAF&!Dv`II{{qT4?i(JFo4{|h6|Jug?&YN(AkGjiFD z(}9Ec@e%|6X!XV@0Izl}_-{1a3(zC)RXbh!BiAL5`bVw{v(CC)R|`Eh{u6X<|3)6h z|6~{4?SlX94gbb4>NTp70oL2}CjU*1{27ArGf<6!Kd6yau%!SVT7^3?7!&Qr zjcH=ZyM^K$VBv=hSZNF9No0wI>or@M&eKj_bi|Af!9d*7I{3F6Eg?wFPlQwVko<{2V*Lfgw#h;Fe$=Vq^Cg!F0#O5);q+&L&xk- z1|B?S@y@XlcEgvFdNv-j|MO>L)F#Sp>7Txn=R!^i{ovvLYd(K+X>|Hdt9`%oxi@;a z-~QFZO^r;a%QRcvcuG=1H;{$XtoBi}^uNxEF&UY~gfl!PoDrFbugGbU*Y)*k2Fy*#ml8n6D1G)CRw31Y`lKQ z@*(FNp|{*&U+gotCU!8z^YZQX+{{wOA}6!UKS+be-=EIU^_Gw7wJoW;cs*E>%p29O z@nX$W1RLPxy5JG7S4VEoL65hSvVqI%uJv9u{U!%v7bgK;v#@4-%XV*Yd9}i9U9(H0 z41!$32@!8$jdhGnZB~20`w8QtgJum1cHmJTiQ1uSNiY!8@H&$3te*Dh+*a`cVKZf) z#X5B<*ngS^^U~{EId!)zoK*W*@f=R2aEr9=w({Z1u$|}dHpyRZE9C&w6bm;~@^8^s zNcT2%!|+Eh&kJuH5fFZLw<%vRgrDDEMR{-^NbeIsPb1K$y}j``BEbUU1Q^Iy0 z^ijAle9PZ`6m)g}D{Y&b|HVgHTIL5+l-c{tCcn{~?9ny-4!cgfHFd`hFyF6@D*Rwm zI3H|^vr#xK*=&-cUTfmjyi*CmNnGH*-gU5NU{?-Q96PbU|HFkpW0Ls%zwmFy?HY7_ z|LWfi5%2#WG8wgThp3ZD7KR>6VKXB5l0T`_b3_lsP7JMIg2{mo)Tv7jbYXHpN1Y#% z171VP0mZ)a|J{o?M5nbF_xRsQ>%MtB+X z!vquF|3^2CLNRc{fM?z7e_?LNfAptU`@!4}d9@?6KWHK$mj5zm*Xd6v?n}~&BwtEc z_z{t0w*sobI8BuFinYk7^+?c=H}iXM#JAZG`{`l4V@}?VE2AtJk9Oee2k#gEKFOVj z=#L_T3bFaW!rEw^!rFB3cE*^{>ZTXL)ta8>BQXBJPiL`%K+>p1p_y`qnSvb*&=%@D|FZypcm}Mp7U3Yl_nk_9Cp`{vSM()*?IIOmtpfGSFi7&qW3aY^dYY)lF0Z)O-i`D%s!urdm8(jg^LW^ z1v;RkuxoM;UV2wVR^gW*EY)j{K+w7tLiRRum6Q_&E6l>-(%5J7)c*IMtm_r%lbe5x z*ofaF436$f*eVx=>n{Bm_L)Ra^zX(m0ma-AkkW$ZNzxYg*73tw|nV4Bv z^JZEl8poSct{lZL^^&WxNW<>e5uQ;i-_EXoMqHvF5ET4`0h@Eq;{apbJth>;0YAsq z$(}ZXBN+KmNqU_9Wju!x?V~#RT1L*LPvhf8 zK0EFOWV2btd;L@bqUIeN3wbg5Ipn-d*#V^q<^Q4X+T&tQ_y6Zx5~C7kB+^ALP3^|n zDH79;XiGv(CG6COHKi<*L>k#yYihSeNtPL;G~JnUTT^6bYs1i z=Q~qwYj>UB*|X=IKfGRhjxqCmpXd2L&*$>Ka8;=tR{pY(K;)$OCkpyzG<~vgn<$NN z@)ziIEs@<0bdTJNU^laYA@2$$2wM)!&qaC{Q$Q)`2aFnKj?ldjMVty20%aPfDa_*+ z$$~U6Ea04-C!ql<%&gdLQJ>n9z|!^FIec{`4+a{gL13gB{|Za1=FKtK;p-`_;-Ntz zzIsZlWi4TzJ*CxM3(ZeGFMb5rXw)Eksw2Gag~>go)&J%Py~Q7w+VamAXV*>0wI9yv zBgqQZ5o0}8mxK8F@?CgDrXjAC^ewu>f7wNiV zkCrzUOk|Bth})Gs*bjMQEMhnE#t>}y8{Sw+H1fudZt?6`e$M@jF$8=NjK^S9HS~dz zYf`Q_-%Y{kFdO*MJE&{tUhU?YU>Bsb4?8e{r;3S)VwivN^US1 zHZQa1EITaF-H_pYq6>k(9R8r0sIM~c%TLBkopWg+%CCInm~_yCjU6|ihmTAx!7jd! zofi{^Cy6fS_TPodKB%7Pd~SzzVeS}9a%2A}U9k-*e*!J;l%)J+d-UaV2CjR!iTGDh z0_G3=g05Xu@E*_yyW}zNj^rP3?tXN@5(2O=?ENrYT$ZD>>;D9Fc2a;QSEO?^!di%a zHR->vESnzvAxCr1v^FU7^MB-k`S3JYw~g~|jF5Ni;zOW&)q^rRn0z;_$xG25FU9bT z)|-u2|M*f|M{$lXPNl+tS~okBLvAcMZsd>Llf+fJOf!KZ0!AizlL)!6ejCzrtRBVz zB~S(->(9qW;$Lk@QIWm*X{`q;s0p|_cU{1Usg66vRDS_OekJ)krgsbT7_DXNP+8}u z<6X|Of_mLg$A+Eg63K~}CxaqRaB{%*_V?d#Q^#=+vdHh&$Zwp?1qkFHuqzt_JR4gb-VISgC{a^s^R)7Oy`z;xjXAP9bM6DhLL$wdm;#-Gr zwD1Uq%%22(*H$#Ion(w<{yD=*%!zqk#dlaK1ZiVEG}g(&@sEIbzgtdBSEZ^^*7U$6 z5kTGapj)TKzrduQx%uCIxd)Z<4w;NNb`GV>*3aTDYgiLj1)9^|>#a`vjH_>R+PiMW zYYl~xI(P__fRTh`YE7u+ow929h<+JasLK37gyzgR1Q&dwEJdV`UE4SVh% zWjckDIEk2ihTbRv=$uFt=qARf3KC-)pwF*ZwHX-4KVZALyRhzK+#81cox{Vs;KmPP z=`Uk>5OnH$&I+Y1P>SxqE6V<|Hs70kv|rmBO1sT$dsx?u50>g#J0iq+==%sO3*UJ> zRv1{izIrvEvnLj1MBknc*$}?Jw0p!=#9V5@ST;}E=!2;}V610@lYs4Y{d7pAr=Fcq zh~eDZvMd{&GJKwhw^6r?lFb|{o{p}z#NznF1%kfY5z;dVi(MJeBWqHK-}BTx0jqK{)WKs2+juI?-7xLd;6Hz2~aHruoo z+seYSbRHO4U)|Q~dSP*5^J1+)ThWJGu+C^MAdcnvGcK`)hN*xmH3k-auPc!iOdy}6 zkFcw+=(3!?7v(Q1+X?y5Pl5n%_c|#A8$e^5r@ASGj89 zDWhJj-s!*?Rv$J}g;VJ}-{nD8slc!;GVI8$8-e21b{(Xgim?J9V+}w}Tf>I-44W2D7Qx%&9MHei zG)-r1ArytAacVb;lX(YXTcO!=W}O@nUB;xW(Pkahi@lXX3#^=Q3hT{V(*3!js9 z3-Q@h-Hp5+=EENxcz96N;81RppKnoDt1LrF#`(U{Hed z`f05M=QV~y%D%qbP!f?XZSm>Gqzw_-V?%nNFfuLq&hRXKaY!@A)(q=9yeB>uh^Zx2 z_O$}f{GZki@5R*K79F6hYn^dn{t-_q=<(-a{dZMTcJUe!gca{acD6gTa31 zy7gXVZHk|G+HOvy-Pd8KMEL&FC_RMlydI*ss{l&R>aG)qOqmwN` z>2X)METjGf;X4;7n_FdU1EFBPR_h*(R?(4Jd685n)^+_c*0 zqY}60+|>wr5i%k=ZoTW-5jL&UFB$?kWHHe%^&hfVwJf5K`g%ZA*?~*!DTbriK+P@$ z*F&>iY2}tg>;?u~^I>u(8v|_kFA!kATc*egGq3yeG6m;6MlT84w?!Mhp!~TT6G80e zRK*!($}zj@T>V;~dLj^CDCp0QK255)pq{{V3)B<9-g`skY)e9EbY!MSn*%N`J5^3l z${qU!Ao#SSOMx1J_+icZyZ%n_Xo&!cj^6~2Hl#!c7x^N(S5BPGHIlWu{A?-ld8mJQ zdl0D$XmF8GI&FBOvgPKN>^Kv2HtQggl@Y>+MIa~LOE$SEF(zv{;tc&BODUmz9W38w zN-)ea&qXmI#e#y^$~#h@(lgRwLlctyJNoraz_`Q@j1~36?dHP%l=UP8UmpT@L=#a0U4#;fW`|pi_m!!~LWbkz%?7M4h)d)#ZuWHcKOvhw1q^ zfw@5PWJsK{tqT>T&dbjWbX>wq#pZ<)1<*t5Q6eCZrEl?IUigjGUxlae4&mvB_Vu|K8W&4Re><5cS)c1~vc_N^A%glwLqoxdp@fk*@@ZgkAn0*eqf} z<1h9Rm>^VMBr0cD&8){)ly@N}DeoFXdSn8rTCMBzVB$fKii@zvR!*${$F)dlM$!2* zYB172@^$GY)Df0eSGC>=#A-&sCNOO?uX6pohM+!F9t1s0=>x~npR(UMiyK1vu^k(+ zs3_?)JF$K4YJ8QmW^Hi}m4SXdLZ^%HS#b`VDl98otJvav{N;n7>k}nD=yrt%$C1FP z`T!=645Ul|3pzE9Tl`qAH$DyeE^}waa%|-K*7@llAR}W`8q73wqbJpc$MwQFKPG-N z%YOvt^h4CCIOS#3X~hfFsel}!L5O+S<-?K#Jjgo?x^p^K9h_1v2U!?UwmcuA-O)I% ztaperS+PDj&xg1s4cre-vHkBZ61FUIRW~zPKv-zCkiU1ooai=&0kr8(ILnkO7+Rk% zZv2i)?%iIHEMj>PBwHd)VHtf{kcI0>VtKV7*)O!SY74smXwyQOMGy=q>4m>Q$NqCM zABG^4(){FIb7Xps*eT6>|8|imVWQpBN0jqt7JJDN6e|0wAWemQqEB}qR>~@%zr`FE z>JIb?7=-U5mF^7-TP4fwZ!Z3F7_@W$4Wek2H#C;eyJMM14gFJ-AnH;Q>@|nwQMbc8 z&avK3LCr`!>Iupt(`(GtKdd5a{hclI7m{M&rg;~F6(=nr4}sEyC%PQ) zKrEEF_38WKdh|p?oz6Dr$I_grCRux@Yes2JCte)*2HZ?s+>?d9R{VJ5{k3ig79cq` z5TH9z$m1iKXNMGvieo=D+LNjJ1m7Xlq09d&NLqj?Z1h4@W5#l4D~hyDzX+KOfo`BG zl)HWc!E0IA4SK62<}HQ$8>j+GnjgH!EmYsU@={tr(WVnPLL*)3&X=KwhUfuFLJvcU zjK-IthoL0&uu^X3-1gK~weMxB?2TC)sbjOApotho~k~C9Kq@GzS(Bm;e1M~}#&4wcKdZi)lE$4!UqC^=6 z8P2j}t*t+!;-?T3$k2cRLFt@#S2Ka)>jaK(T9k^hM&JFH+p53a~da&*r4;ol~r|v5$C&9H#%8T`k&QfgHK0v!tsO zmUB{{+=`&4aKG^11*`oPh!hqFUH`c#>W2qTJ{_wf?nJC2UCo9}02#A*?<$Wd=O?^0 zSt$mz|AAd?*eFA~)2&tN?M;OmXhK6hadD5s*kEE6ufzGKq&4bF(X@!fEEFJ(n1i}Z ze%ljMMB8tym+nvAte_lW870W}D}XVjMuVVjTfAeoIhJ7NMwu^TCVpso#k|Z^Km=9e zpE~M4_Ht}bM|0;!EfO(*`~ud@d0D=DmK6G4>G)~VA8XK09$V!wp5W3L(A~yBZ9tDj=G3 zVMYaMx%dt(4Md_e4VL?O`~26e2M)XLJ=oS38favU^7GH^u&A#-BiH}9gdbQ|)9@-u z1rZB52`nTqcYHmBMNo@zN6ILt>+6ck-?vrg zXhNK(sr7$N9`f%X^B6Wc|3xXtU(>5|8>Q*h!N1t6Ga`;D-zHG_w@m3RJsVMXkASDW z7QiiLRGK- zLVpdjMECzsF0+M6HV-QwA^~xSC8)Ct3FjnGsn4s_i2_Yx@Gnae=bR~?a7fG@n4A9v zIuu=H5lT;%&gy95kaBMU5+H4m{??n4mSRdO9K!+HjA$|?^@Cv`7~xpN_)8k%)byUq zou`3VXfAg@yxe&&F84^y<<2`_q`BPvL>YLwkLtbLi}qIlV^+<-gQAlbh@(L^3S zgS*)idGPpA&Nq` z<^zf-QrrW7>TmRwQp>{3lG^k-%3x#gj|%KBDB(XC4d-qc9Hym&%eAO)ZGjyr;c}R? zYZ?~V7lw_n#Mq#O&7KE+A|iIJpe>m!`wmA(2V&>Q2)CJ10qx9e-bHY~F#pl48mqYn zfZZ-9q!(6;+d9GOo&hnBC)$fhSTPgdUcH!3AU^yIfnlU9?ULJpY1xJmEPuu~mheef zO7zhrJ(MTbv)hCLNTxR*hvua~(;F9Bo?m-jCMr8SkXq$|0i?<`0}DqL4d5@w>;HCe zeP!4i3VOp|FX+8oEqk?~=kbgz==mmeoH-Qj=M)T}?)oMK?S)KtMfj&|qElFepAh;E zY>S=${$VqkV|ACEqZ~4-gCV1a&xrT#I6s)8zV1OUSc$MJT%ZvGzPCCBD+`x$9-`CH zBK{UfYpI(h;U@)sFfZAFT~HWC%m)*x**~86Ik~r`2NP&tKp(kw`Do|yK}c{W1@mQE zk{%i0%*-}#eM3DEVVB!p)B{sqEm^W(lq^?aJ+OqV2QKQ1rRrrl%P~lkcFaVo-=Ol- zi)8+rn;P|SbQ0*xi7Ka!Erx)Rq^_j}bIJAb!9tfpVpbXI%`q>9AE|-(lN0n7lycW_ zVQ6S4prNq32J}|wVO+&d6cCAf*KFM5SWftzuOWdCJ`I;xv{hQ*12b>Ov^#mYpokKv z=$e=7Tbj3{2lzmX3L=-Xq62gpUl0N06Eha6V#btWiv#`dL_!UgL^oZcRp)C7(W+tV zuA4JLXh`XqK9!k|AgqBT(VecR62>#_P&rcape?SR3iHK@VT-0`c z~Hh2A|;psubtn|Yu26Uo& z%$Q(sH!+P<&13A|O#XHfm_{h6e&S|=vs!5geb#p*t}fX~?Z&dS0Ss?@G*fyZSjW6w zP7CQTs@(+(GBCu4fP!G4$xJAq=jj4{U81g1cuK0C@07)u#O1nwH52@Q)HF<>GtXcD zn_OIrD%6!%EzF!t$@A-JnD|#m<0|Mfs=(m9C92Eg^StWcm4drk6mN+BU4?(6f7ko3 z`*-QCa{Y|kJt6@yQWEJNiBxINzc121%F9Ei>(xOen8sUpT`yIw9j<4~Tx-1XjdI1;ry?IRWzjhmzhX^23FbOkfS*0W{Hi^fT^6Mv{(EF?(Ymr zBB-(~PIkgAgtpQP({%Y}S5MSLvIxrh1=zQJ*_@zbN5pG=#k(Wjj}2YH%;_SxNpn+n z#p6M<2MEaIy8v;LSWY#XRnWTcuz*k|V(+0x{ou6t?m15MflN$TNe{7J;(M@fvbxe; zfTA`(4$Q&3|9iOU#$-5Z@>Tum3~#jnFr%!v{*_0I2qoxINWdAnN(Q8I#n)WJ#*_m0 zCquXW6ocQrCLKMX4R3Mt{vwV2W$aac3F8U@G9HHvbj5{@-U=hs1 zG+0St`q}mRbi`zfU)%467)d>c2K@8=Pd>+{{x|(klf^GFE1w(b^}YnX=AO7bH?f`h zmxM2Gy9S0*y8WrotI(D4mw*Bm2p33VC+}hV%LzZc1<7~Iv z=K%Ja5YF~s3JAs}Y#yQ#m;^7wlWld_Jj6$8P=>z6{T}ZAV?i1QNj(k4dCM&3aH%`K z2Y)j>!^q@$VMAiu_&y44IkVRa#kp5ZQLE=)0lw^k!QfRT(3K(@=ysv*z=A0QFj&F9 z2gm~6rkwG%IvwcfLfQ%RXgO+s{w33sZ%lJ~wbW5B?CD4vPazkuy>lq*940T1?D2dyR>UN`UsD}k56KVL8IkEaQ zBVkz_YV8J|A}l#+waMi{N?_kjqZ&- zO~7qW9jcy=R=k1^f8GRqjt+m&-gY|ty<7ecw+Nb^x{ET{E?Os6tiNKk1*(1mA-J9*n_@#MC zEfNuv!&W7SIH(>JJ0nUR8QY!#Zy>$@uBZ>zR9}b%eK?@zyM^Q_7}Y&5j0~y-11aj> z%09kE+R8pDncH25xDd@O^n-oYm|Lo@QSNpd0tafEWAX z?aZDGzbsvFDy{*aZ?ye5YiZQEIZyf1?ulH{%tELnB4gH^E*4~Qd%oNY5B1*De_k%y zcaTmR&kd>$YCRSVZ>pBy$8=I`VX7_t-sOqv%8DbtPQ(vhT50z?TcQZBic-xh`|@ym ze1gkf_ynWHz4YZqBTBmU{kc%-^UTnK^zSpW2=i&yxVoVwh4n=wVQ4KWWWk!5cq=z8 z!youFGT%nc_blU+h_>K^MzZHED2(WZQB|025Y(>Ph|{PuE-|RskaRnyVTb8n9y%!o z478sbVu3}Pk-X<}2lu`BdCH}V0b8lO!jl&>q-jL~w$pzq$vD^8u!V=~cT-_cUzhIA znARq{5HfI~YW&Kf8vXJY*VD=6{6@CvQJ*I6`yP=fgS2@=;-ZLO^4?DmVxX3h#vrTQ zfhC$s;?dsEtY0Xk+?xZ@yZEu?%Vfl>eY@fxOY=3{~uRQ+{J|_UFE35gXAss^`ri zom7#9^cUJe8=htB?QULSdd*TNxp-Cb2~N?y)2q!ZOLNhuu`=eNS3U3xh z^fV(T?O|e8v!wO4l#NdHWc5`spR`!TG%h|-t&aq!0@C?I_^NZd^P884oVP~04dcyF zhzM**^gr3qNMz7ck5QvoRd8=873HF$K41 z1N%V@o8z#;{-gv}x!GbAN>4etiNAOU;e~L0qC}te!6#vK+@-^d8g635__9CZ=HiEf zewpR(-I^L;zp$Q|Erby@P1SW}C_w1jaPHQtAAX)eXq@6G3#3-F0&}|e%f55NsO>Je~7xb#$^eU+pVL3xS!rY@{`Ddf&w}UU1QW=d8{lxWXsfd7El3_rl>!5O? zH?qL4Z1WH`*XwkyP%&EJ%V4e|Q@wET@i=J0X z7!aRTs?9TYNr<+2A&1i+|pS%#`# z8-IQJ=VgKc%B5-_>AVr0pf~pl^p#~F+p;=a4nZ`mZClu!i=D@&w^0Oo-srnGbAHs% z+vlU9$(>+GZ&x~QLQ~TJw})<1NAO?Mr1>8Zts~nte+hj1Kg9hqB5KJ{f{r?ZS`;8E zxeDFJVA#z@j|)c(O9u~`6d~-@5v-pyfalY^SX7%vv?fRVy!}1NJ((ZdN1EpwZr@?noSQ>e-DQL3wmsg6oelS%UToKgBr|va+jtdfnuW0sm8v72Xe1zs}uT$ zJ4RriVC%5L)ZXc`Kp#PuCqhk@LQWS0dl7>k;B*C!`m9IY^gl#PY*z6#qRVj@TK5>O zHxsH+JJ<~{ETr(*qO8*PhfPY=(v6q-$X;3&o9D{=(@dg_;a@KHgw%KFT7y@x-m15 z?Y|sA)n8oDZ>)yx?{oK6w!iKw>!+|RC=K{No}d5p+(PysHCyPja41^H%5{ZkA^T3R zh3r7KTEe$4|6UXNX~o*HrP(7Iud_p}m1n}hm_5fG<(c-9fw7aHZ3yT_x>x`DG)c0# z>h|$(mPWWcplJqXvS>nLy64gD&t@H2_s;kPGlw_Jd9`ugU50h02Oj+S4?Na`92VEHB<*}4zHb`Cc#1deHrNndZGU&}|%(03sp#;Je~{ae70rz56sfVhhQ=S~ zIK|lZ{n>;{pPF)^-1)BCZZ?Kvij{`b9Z%wnRAU4bIq|-K#ZP5Xa+HISzH?(b?|cJL zcU(^KzuIwO1H-a&E6qcMKCMbbW$M=MmT^`zvNGNC1)7Ebce>{G{a&FNjS2>v3`sU| zzBO(GGp%#WcOD2AePuMh?%KGtG1uxtEwtx#Q1L$*Njt=T^y?2455*ilpBq4pbVEay z)pJG;Y9>S%HbhfTOiC{8N-uk@GuG1-Fe)#-BCdyl4)Mnl9pdHSdmTTwhZv+=9;L3em2lS{?RQyyPz*uRh)NF~HqK1lY1bEAP zWHQXP0Pj$LF#^2Hk&hv&(*nHb``lR-(GkJZ0KCzhgamlIcQ~sfNPssBCZ%w5Bhm+e z-gn~9cuT=}>y8I$ur#|+XM?d$5+MCXsqr6Xn^TIDqJc1aI)4WCSe9BoH$3lno)AcS zy`Q5xEd1uqkI`%cBb@*fO}XqX<11Do7KfWn9 zF>sYiKv~ob=lc%b)3Au8%aFjRWS8h1_d2R~rz9cq-g)n}FxI%)i95JT3yfR1Rc78M;CKs*RzI!J| z{1Wg!P!!dAOQ9@@wa8O4;<*u?2gT)Jc{v8{25sqp_pm%_j!wA@y6? zl7|Ti3lZ*Qu--K%{7WE2EuMHJaM|kI)RIx9sL|jJwHa}H#ZGAHBmwIN7tdwZH#0@4 zMU}U#+Ou{_MO%xJJaq0P3{FmiFeYU}@ll&n$$GHOW5L;9B>NL9kJBEr8hmt`*s|1v^Am&I%sMz&5k&?!l6sS@3jeH6yu(gD;B zX^>h*xtOI@CcEt~Y&SH@nn%q7@?O|(kn(hs|I~KFhJe1A9@E&|DG6Wh zxeEjr)%De73`IfQ5=9A5qd)xP*3ML#^wOfx79`nrwj4Oe>PvG^7w43cuL^Ocp|2P2)q9o1acf|nXGhw#VE^nx4fqs(2RNFz1gj8nksEk^M zIVo^(vy|)-Y(Wi~OJ<`ho;qkWWU3aVy{sX#^(Cs%8#H9h!DzJ2q|tU$?f(;tNct`O zzf8uH@aZp58s0wu2FxQhlF99v5r3Jam-U0Vybv%@{nc+J?zM8 zt+7tpWISZ)e9>|Yi<0*X%v)kVrlZ@Q|5+HjUMD$34tiyz)@QtwUbC=)6HHlQE>Us1 zH`_6D#}!A7<=-{An%Wr4B0X!z6_y^g%@}Yo3t^Lg$x%aYf=0U4b8Zf)koE$;`{Ejn zOw=M|k(-mUJ@Ga8ZZ9|IfAtKw1*7oZO~8BiIk74ViB-RI@4g^b6}@urBC+a!@(ieN z%8;%f)>AUeVr9O;V94A+pe1 zCw4Nw$vtnzE!*ienXXChxu9p`4PcPzq!Yqd_>??wJQH}@r75RmU3#jjDZuK^;3QN8 zICWIiZ5`Kx4&^>ahn_7JT)16PiC&e~|B_`5zoL>KNm|xO-E2E7T3HZiaXLE4lQv^L z0x9mzCc6)FjES=)#fv;O4Rj-|k_mR$)y0E6v9OMA);lO#H|zcClk+fa7-QvOA4(q( z-w&|G#qGGweKH_!-H&lR-6@$<&`kP-L&$!G1&K$(OZAKj7rpm0{GoHD zaPRImd(&)tQ-MKUN<$hlwkuQju*(8f$r~)>{5j$Mt@hWX}%)xQGXET7_cGQP*=ln%!)N z;d{YZH{Tz08p)<;;HA3`f*Z;YCiG2t{>3W*1S}0w{Mcw_Rb2-uv8`b9)?r5$0ye+34q+~0)Pwvzu zJnc)=i#@m>nw13V_yrQln&F7;qR$Nm;bQS7y9Aa__fxJ!^I`JLYr66m6~)m|;Kp+! zCXM3$**BUTB)-Aq04x80XmZfndlWRy_={Kwf8XXic16+covDb#8leLi?`LFEGFZ^G z42;4$GCWrDzZAR$q7^JEbXOSlh<2WM6W}&omnTv-r z$MA147cjhaB;^048tqc_N2<|(-_)NY!9hJO1gwdp!WerlYT8;it!ShayJ-uy2EK@7=+)DIMA7K!V})wn=9wSVUzSF2&UgPf6$eNsXG1h<7?+Grp*>R*Ar9{;QF#U z4l%6_@9SUfFf?$L4tCiSL&w`J&s2c!)3#|Kze%kbp4J8b*sT-Z_`VK{SaajUQHYX4 z^bSgeX#h08pV#Q+d92sfZRGb0_twbuCY>zw`!OmZqz! zAGjg!pmKQtzr$mj=e{@rPEXs(chRwZ{X6t~W!H`-Frx`AO#p-C;rA9X{OHT+d;=n= zIKs;W_3|ok*ocpcYM7m9T#+6WL4yKqUflK(wIG5&MGH#4AFE3-o(kG?KM?o6Y0lu30gC zm$_lMj;V_P4+?EPkh@P9!nii&cWiiH;av9E@IL2Uq7CoYY@Anam}#1>l=tjWsh=W% zZ@0B%+w6s%ZjK&63o-_tzQl*kOVf+E%w3IbMGp01ryg>KXL$f77i@6)ReU7qNybl{ z3}GT?0vUax9z%!pXWQvgXN@XdEYT)W;){#{v%y=LQQE5B#&4%y)Y#*cse{yD=)Y7F|B#>Qx1 zN8R%=@!=?`iTq20J;H6W4?Xa6u7_SnQ>wsxNDoEfvhzcreP_YuTSa_Q7If~}HcAhh zR+Q7rT>2-A+3v;ZANA>O=E+GhRR42`U*@651%K!H#!4@aM;m;-^5+|YfO_R`Y z$@(qSilYDZhd+!DANtzE8#bE0#*=?eMgQlZX%oL0jE=5~9`aSMqwCxrM^`Ttd<*Ck zJF`t#e%z36*Ez%Xl`@O&?`$p!`S$agK?_ZL9Xp3y`G<+9($n~RT=`e9a}y8UZ9jFI zqA_3(yp-_}(YG-W9pI=Xhs;Jr(tti2Xg4pS~tJZYsRR6$=9*dH?SE0XL-l8%H>>AN`<{ledOS!2DZ(;cK|xqltMy z@iA94#^T6>z}r#1}Amzz*BT15nXn#)Yp@jnBTQ70mk=p(Rpj*V!=^rpg#I~Rr@ikdz^`((D&xfNu`&{B6xyhq6|``r^_&w3yqUyy|{ru5Ghb+NiI#%z$Qb_saQTP@`LO z>W9#Wam#HISo)t=K78fhj@&-r&dQJ_dN$+%)#K&Ngel`{uiiDT^YPsD>4g9T$r{Um z)8SiD1s{jWANMw5pEKyFt0M#=!p48G3d@*7x1B?ZsIfGZogtk#pKj?~I?nvQG60u2wSJE~8^dtYQNZ0Fi%l}$QiAL+*1MU^XfPm15 zfjmFp1f&?qE0x(^rIOxO$N!9^1Y+sGv99~d0#(c@Gk41>?uM`wT&bo0bp9N~zR@lx z(`r-VV}<*Zw|qxQl|$W<1mk(TuWW9d09g#d0A=K|5-c}h<-ZTtb?3wsyGYJi$V9NL z?dBHOFDhVi9!pnT@s&*_e}4xX&=T#UEu<4eiwwfaI14o#TsA3@o`hOMpdny zT=OiLkaw=CS;*?cM_aPJf%zzbK&pK*KY!i(DY4ZJfB0%gg)nTIH)glomP5bvzq?BU z4nIU>&o%*QN6|^8OCkA6H#Mb`{e4V2dyrZ$Qy5-CYH2A9F+*IG=BGukS;hNXX|e5} zF!=90x>1CWT>NBA#wF82j5y5)y1)8w*Lc|-E7|)xC8=%SN8z&R z>)dPy{mSGV-d6M3TvO>}`Yv*~r8&Rr`^RL@aba`)VmpWS`u@dOdBzv-v4H_!y5^ho zcNM_Vt$v937NRki*~Ls04<*f-hQYEgN2O|2@zucj1w^H;P4oeqg5K))SdFNcPcH{)oFAt@Bz*>%49CI=ebyRMP84hkDN2 zFzU?~15xU_S7`gCXGiTWgyapMg^;{7xRG;S`iu1h2r&O1sf4t$h7V`X9dh(*6lYc{ zQ1h880H3N@=4lU9eEE)Yc_6E=WbEozS1y=2S`xgihci9eY-eJMg#3#HO+JrHYlAf% zhoZf@j$#>lB&tbv3VV(R&Xop)*R!;)B98fq_mXK}In)Xud`mDabdRrS3>bK1D|3i& ze&-wqTcFJu221J^@1MEa>R7%?a%pl!MW$P%)Py#U%{_Lmd)p2<%)E=1-Btj zgW{WO?Z5}3XzCr+>MTp}V>r6*t5AKombUTuT7Yi@SwwU&apu(OqWSZZ54T^#CBaKd zrLhZnzN25ZhWzaoS=SVq#cA<^tT?`pWSy_4{w4&;( zNglVOI+xPMCUKQ!=WdA$vSL)A=bBI2C>0^Fa#i7tLa@c7Xu@HrDGXn#U8MDe3%Rus819+s3vxvoX;(CMYd_2`KI*+Yq*^Luo$@vdjer z^^2CBA4>&>GfRhVeLG=OtjcX*m`6^h*BR;Gj>9oLs2sX7T^14n6wj7(ws&G~e`}h= zcc)0aM9xE- z($y93>5HxG5`#P{#+yyE(GC}eU3Iw5lU*!9?hb7tvDYhoJq z3Z-LCLzb#_4(&ot>5;3+{A_l}DOGIl-APs8(=E{98`!z#O(>xtpw}>;LOxs`9=N*4U)ORnnwiUAwHr>L>fJ#1`p-mZEN`;h%3hc0PH( z(wT+g)^ZRX>>OlX(y?t+cRl2xwY>e5i3#ru!R8mSOB#r9WxuXxd=w11)^dnF9+%!( zXAFhK0v+Y#S+UE`1zbfF;(lyx?zu zcx0?2(KN(GW#%o5raP(ylx@wR|5ap|`A7u}Kx04q6MLff?`cd}E@2PZvW7f13%F(S+Y-lpfcF{HPf%MCxd#qz-U(!^~N+mJNGVI!e4 zahaQ?uEhFAEH$aLE6W4{sxL{rG=>zMN(e~3tzZw>epRpHu?4xGRHC;M>d>>m?qbD5 zh9#_5uA_}qj&!e^K}~QGbYmJ%RvE%{w$gtW{H}P@4hFgZ zoKl_-#s9k*c2ROv#s`y+BtGtUL2vivMSd`NdmPN6gO%&{bk|Hvy?)-nxa(l>lYn4! zD}~syTv$(jWg}X9s@?m6K7}nlW57;=@zO#VKX9j>OTIm|(^RgL!v{l(^jtR$|9|%O zuO;5#npi{BJaHE2WIUc8op;Mnb-W$2%mn>!GD5#RQ;3*|L)}1Oa#UfC=OuwWw2zgQ ze!T-jw2`75);FPG<9oPeL>?YlY+acscVzC~cYqv719$(G?h)^;MG-FX9*GF0pMKs# z@e9vIh5Xe)BZpknNIz{`m#34!#JU>}T$Ga-Gx}0=yKW$7Um%Chp0Z_4m*1eyaEeCy zX#y$z^o$o5#uT28AwPeUZY|<#eDV_4JC1%jX3TRX1YuOUU5^q1e}SOKCog|{yE<<9 zc#RzT#7-}bPaXqBaBax1;$~1u4Qe^87w?G?DMn8rHK>;~BS-`x$|n7Y#2$!p0C6WZ zqC@l?qU;o-(V$kN2KAZCEX}BX4Vl;a2Cci_m{&CPIzw2z(Y%73K&Ow*d)eN1zlO9| z1d>|Pu&<&myQ@+bQ#w&=^!J?HlGLlj!g+NxbcH2v zIC0elnvb2EkOokahoP3~!9+<#O(z~I_yb3lFrM>(Vk8P{umvI&(r1?P0zEH=7YeM-?RYn>mQpVR{D>eBd?dPSFF|utz%ATY}jr6JJ{+s zu`%%TPwBmq{{NcSBRN!w^}kzU34f*Q$j5J?bwobd)7yWEq!4~px6@mQ@snedTEB&> z+lHq$Z{g~OU-vjAy|TsixMS~Ybw0&rvt099<=1TfUAyS%8@A8H{{Bmu^vfx>oc!J+ z$k^$nuHlxo`5o$-cFTV1H2+1{nrzc+scXO8vKs0de*IJK{=bB7fnW8cBnQR#V%DX- z5aZ*b7++`jdw3#u7@Q?kM_!2W;peNKbM0LlR=M8hNba3EYF;U$52<;TYflO7q>?Z1 zWrcoxt7}STb%L8ks$v;!Tt93-GuSXu_#(PZmI6B+B z+?KkLiJ3oU#;}wwA2OvbY|A~7)cNi|9yz+H6$X#`;a698ZYXL}Z`|^p3IuwXSvt3P zz??*w==|VVce$mWK1Mm#PYZ$s!~mH`cSO4+ADL*00FaKgM(K!2iv-4omAvmF+C93_ z4HHbv=h2Xmav@k>DD#^e421j77sBvL6p~Nz(7oCG*`O;IWtbi}o@+-d=iyV~p)4EC zWr6zXI~deuD2>SvK6B0EJ>H)j;ws~C6WmKY>8c#1|G7lQ?KKlWp`GS(7Mwb#oF9{> zkovw?k01YqZ!LO!gc0Z}V{^l9pG==kx4A@3Xyn{xtlB|4E#p+BD)_TLOp{6dHj;Sf z`ldW#>>zUuTrcoaehT6fF&qy#o={OG=p&g>uCVUMu>=Bh?tz~!MeY{7S3(bD!Ttc< z>d7ANvyupZA3@)1ZLuFl90tP8#euTg=iawb&E}+42Uf55CRnk6n^LkV#kDGqu@Wa3CQbD!DxjE&f|i<=)!fmXUYtN{tnZxGis&k=wQXv3Oj!31%9c( z`sra*h)GLGo_!$BA8o{CfKHAA43bXA9Dd(a zpkw}o8!{h*p;=o!mRCIdaLb@(3`(y%iZD)d3f5nIEtH2vz0#J&V(2rT;+}WewFvsE z?t~ax5=!F?tC^I4;0|JoaKoH;NIFoD{m0E?$p-Hxau7|FP$u3&h@u6v_j?B6E6%r? z!)35EgGj_dOxF%VcxNCML2;+J~?}yy%0a3wTTF;mq{|i4qhr82T~Y>H{VNC>ZdK zDiSBtMe;t}`v7xYJgCXe_w(?@IHQlAj^9SduPNq4wQK{uX+ zuNG*b$eT?Zk#Ax)>v zE~oh1T^VGE!M?=vt0Qcr7p;&X=-TcWYj|R=nNtV4M9uKkpin>c%)l<~r6l4z@ZTr^ z=x=qk;vAY8xoCC~Za3>2A4YWubjocI>pPwU|9FV(uUQs_7dVbF808 zktVF?hdN|Myc4u*zb6pjKza~WtGY^Je$fbo(l&m#$f84g=^VZ2Znsm1_E)=NZd!uaf<2^!LH-0Se zo^9EG7csL8bSVMz3|s<0r>WoH_M;!etimolhmENPYO1Iesumt=ZI#skc?F zi&!vm739=@0g?W93!8Q{0|gF1f8o!nfUsNToXeHU{JHT#m2#b8{O2&3+OplHzbE;+ zTcf8C<|KP2=pM52BeOo`n#0LSP*H9bk|tRoN+Q*X`l21^uviqrJrWLjqNm#`Y>O-= zv|R+-DjsCFPYJwx>iEk9ny#%|*Q3`;wVi&qBwz_5U<3e;H|Hy|R{yjzum-->-W zYOeX?g?Cs``nAmYi7k?Ml%UI4Q#daT9X1jt=N)D>Ev^UKuLSUeK}f#!{avWM{mn9( zK&NYl>}FiW1vi;y_G2$ENYNZAYu>RX@lR&5D~tn)-#E)ZrSIsUxjbe`=s^Y+?m<&vnVLt!F*U zU&Di$;dKpaMf+8hwZ=L~xBJJV0sCVra zaB1Ij(o`mRvSy}YxPP*uBj5GM8Zg~=EaxG*rMhkwjM+A@%_zhbE z9^D}d8(B=fPU5YNM`6gNWvWZ1#r2RF>xlBO7EUbv=~{gHCVZgQk{r!VpgDy7tnsDJ zrQu8BcOGBr$c0IdpRM+FmsXIrwsaqJ0rbgi)Hk%$p|AYJYEEZmhb1icsuo&e@q^a7 z5lyyBNflY81{eS2^xTC4o!Q2ZygI{+>xMDrGAMQJN9x+s`u+Nj3~%?Ez)^=)9ae+t zA-72YN<(o5XCe<`Kc#ZR0PTE&NveVlk-p4wI2GK#9fopJ)=FI6*GBAb<|rW2eHgzk zU5h?iFqN2bK_sA!dna)Z!C=aM6w8Fg|3HNmj19&F%w;f3kESe& zwIpI5VjmwhZ(C>_(qUyXcQR$cBu8B&nd_rz^!HC3#!-4@)pMJtaT0_LZ)t_=t9CY8b=>aRtWPpna z1;ne)IRj-Hud;RQhKA`ksJR1A`crYL-tYuRsvXN&uyMC^CiVL2Z7BU65C_9)`MYV= zD@+*+>tU7GRqKm*lNNt6io9_JMw=waR5m$aE4)WBl~ei#6KrOVU*b|r$aKdrgITg7 z<`Rthy6qD6ZixjO`rbNyfQ!#GcjZuZE*M-e-D4Y(UbY9R%egj*EWirPfvf1xtKyq-F={gN(D@SSA!Pu+m44%B7_+4{H!*Fl8`JOAQI9qnbknduR;BO@z>F zjL;Wd%==DwF%3SPSO^RD{a{v_pUg0-kn0?D2TI7mWsMEuCT>hqDE0!5ox|@^UJLX1 zMX~_PnhX{w^$Qk>x5pn@unP=-G#5rRFYGq6L|jPMf;=>X-(L@OgzHE6D-v3d_Y)ob z9wv`7)C3jRNQj4K5oF{d80ZMkfT@7emq&0|HUY+ZxCr?E6TD7tDA-dg$jP~-w1IFh zTtTQx^fN!I<@RWG_1sTQkfOoq#I_5o@1A_b6_B?sKv$4GvXz`7+KEbMZ7|%Wi1db8 z8!Z;isc?9lB(Wi8w}I*I#7bs!z23~r0S;i&zqaDMTH&6seag?bm;tvGOo7fNytIU)A}$2ZP%$^-sdC&Hj`)u) z-SJM0)bS#*K#g0ikGdlH~hrzP@1*CZR@o$o{`JvrOFmY^HX%dc((lHIw5*2zh&roZx z(8h5GS;W{c_*s0%>njaRvqi#{(F^WHd-wVDYmPTEqwKdWz^(m7y9Rg?9;fh;j&K5( zZxaHj0(}Z=!1d8kg6(-WAAfcFq|NSFNhg8KcqCNZR)s~h12eKLr{h9DFdtFgwGhJ% zGHo&X(nFKqaIoE=$QM8s9Sk{j>JDC=9QMY@;q!|Lo9&ZrO1IYlD)#Vs&D`~tgpf32 z*E=mS&pqdwEE7<2u$&uIs%|=kMh#92<;2)UvZmrgGH#K*CHebJM?xtr(b%}P>HY#T zUaY%rsYS5x>Kye5vf`nNEiqwE&QxIvDC@31Ghy)aY zAfhr<)b?9Xz`m#FocFx%`QHEgzW?f#>#CYO&))ml&t7ZY>t6RdW1W!N-9 z78*pQDC}Vz?fET1!R-_Q=t^yI-50f_mVR3<7z>0o!m{{fBAeB{obWX5QYGN|ABQwv z3OA==*-5Y{`j?>~O0q;It-|%jP%zG+}K>QP9KgZ&LQ8t?Ct}_KU#t-KNSx3v$9FS6_|S#CKbq-4~9I2*888 zgYPzOHH<&ni1=f+ybeZ%@X|;t+4u$59}f}bp+w;PDL^SkJ#VWQ`Y?F-Ft~fZ35YFJ z`f(fX5qll?1uI+AfiIOenU*eMz%a9870ZDed^f659JOMTFQe_Z7>w~ON#*eq$FA8A zPCJCdXbpO1s{~^)?c{mDK0R#0y?9*E_8@GJ*AUs%n0I@hATbSO1kF~5Te^AZEE7FS zFUQ=HNv0hGj6(%xRL_eM9+u?fbD;NwSSr{IB=eH>7c9y0h>xdM&>vqhkw?quN?FTC ztZ$T|GfSJhm67wfC$kzai@RwG8iP*(>)*bA-T3}B{DE!V3i1O-c8P#oim(QZ68By= z(?%wr9IgY+y%Q}-$`KhB-qbnzzd=COdc3ZG%jhSd!&l=^5Sk4fyoVt=va`(4q1G`S z`C29wr#z>RLIXD&8AAL3#y zN94K*K09lYcXJC1^ck=B#Un|Or=3P~LMUs%+(#SR+a0qK%Il|px5`Bvc+oo9iDM&9pyF8|GJDIyHRD%e^!a?GwsH1Qd!R{0qA0)bj zJ9o^#UX~VnG3aUFtnv(zR?6QzMm%8#^D4Dpxr~W`onhTl^fVa!M@qtb zk|>DvZqnqi2F#3cEvTGX>yr~@oeY6q0pC@)ib#!#MClSBAHVv@^@g3ZICgJHnWvk- zg@Z!RT~kvoq+cy~)nHS`cX13x1=q>nV>{^X^cAia3tnCfdQmyOJojVBr9Ln|C_M+j z+MWIM3RPs!f4#*1-@flYYL=R~ZxeCfY9W1m!7G&kFYkZnzW?CK7FGUUiibWSi1Z26 za{9mRoVMEGhWzyI2K>b{Ai#?cf2?I8c!8VrTyiK;(#-D7e*AauZs$xl80f&nWJVLX z7m23WItlfaE!3BPzPqi=|9E%jn^on3UT3A1JfHS`vlS)~UBS@vM#4p_Q9uSX22}}3 zjY>&MucQ?vxwx3aK3AeDO=t;L6~er+9|@?@Db|LCX8M+!p04L2fKApPU8G_JNPNKt zqg6e!*}( z!%m364T2TV=m=Jz`|miCnw~;e=ow^AL4m}R{S{fvXpA%&*z3vtsPhg6B4kJ%%{63X zNXt_^iEN<`P_WWK{JsRi9ItZDVY&E_>osVpx9`@2cc6Z5Bxan%KK zJ_ii@y7MLl-M}sfTj_};k)IbklYX!_1#A}9fcg1~^Gp{MzN^w8CKl6DU0+hg+=^gh zVH#OV_1V6f4Pz-;wQVqM*E(KKgW$2bkhtxO-ZqTv2DBDxD6(s!9N}qXSw~!}6cowp zJt@d_`42p!|E3ut1g41foB%yg>#M#Vva1-mjt{-RD3A~!C@)9A^k~*#lAbemY z9Ss&zW%RSo(*VHR_#qd0@)0Q1fT0iC2>Ne7MXiQODV;SCkSs*|s4C3#);vCMO$@G$ z89{qDLf06V)G5}w7mW@gFgm1rZP-do(=t!};Bb|QCL{%55Nx-hcXi2uG?K3CY#uhO zBdqn1^1|+G{=Q(DBmORW%5IfyBFRUJP$eV4>Vp)_RQDY|Bo1gZ4D?g+Xyvf1DoMRl z!6q!Yg24F*zsaEZqmWptA_P^(e`k!3%PE$j!7~Z_*iPxa|7G&`W5xj8>`-+bx_^J; zAI_EZ1W%lE7`Dv0y1c>`VWE3?s;Fl4jMFe>;L8DwoZORog;Y=N*)=z`ce$8`r^8At zh|QNctdf28Gk8pOBkA4j|K4v*}~{2XIk)Wo82=w+UlQr-7+;u&?`;yg1PiI^rp^my8IobTNt|^dwRj)p06df{I@6_blW5p z7&><)nJH0d;Y!2jYP~k&cvI~&C-Q(TYD{~0SYjc}N}H-jD=oo^T?lipeyi)1Kk@;c z>PD_kRREAb#?_;PNOZY)l$|$WHtzaT|MmaGg-^k(+VZ6m7dxpFYru+wgE? z*9KVC(ko=w{%+8^m18O?E(g<4>=@%FT46y`G5u9cOZ|1rGHSqQMQ{t-D|)gDw2#gm zeW;N>e}}`c2pooChByr8JQ&HE7qD$^M0@T{grez%__H6^{g9ljB>?SYbPzus*OjbB zSCoKo1UoX2MB6ulQs9kg&Q8o22}u?wqxTC=x|zy9uBTo8dhfeafx6tSJfZGd8jMMt z$-IOPED&)EQX0$_%}S-SRxK7-p&$PSj?dgXL66hxJ|9m%AGblxQUVRviM1rNx5j!eSJfqBOCzyR2h3 zxW8|ZfmrND(?V;z+4Bh-J@VBI7z|5(qBNc=#}rRWllC_Xv%*qD{amZ+k9Nii3FSnl z3r)!Q$&1VtnixcD0Wa2bAq_^pjR#DYB>Fq8;4-AW&BtAV^7VRs_1Y0>kfO4lhWg{p zX&~RZHS)VtoU*}m;_%c&kl@KeEW74Pb>rfaLGUsR>5&uWVI8|PPMg4LBszC#bHi2x z+o|aOVTkkTyFM0?$i)3~#6}mHlU7_bznrxmi=iCDS`kXc3$+#bSk(ZQ0DkrL5s@Dj zBk3q_Q$s&BX!=1sX+=6UG+YQ+iW;7P)U(g=CReGrykl8v;k;R!M$g9TQx4G(p3M~+ zAJ7c3I8h6b%3=zs{`k+PRYYgmsnfK(`ikspZb~A|IqsFs_=-mgWPs@o)mQvwJH0U9 zcgzcnBIHul_(aHQ2kKGA_>{;bdA^W%m~CZpng%H0In~(TPKxI?p{7#RmP`Z>?I~Ti z+1h-GzeXz#iZ=CzY=<%$Gyf`>IJ{!8Xm$ywPBy80<;_gLz;TIyt@I#w{6p@J#+xBd zUccveaICAnjUvx^In+RKVdLV`Z&n-_x|U>WDCh2SQFU!6 z_QF(g?$#s(l<|Oj$zvh&7c4zQnOAkxe3Sc90TeICU!zQ74uCdM?t!1)1#vC*+=OpbXfMVWKAAz9a zsG~Q>)w}6dOgx#jPsZ@r9yW4GUFYdg=NBW$tQ`2vr@>9zCV;0tN24LAOq>gTUGx&a zjJ`0MkQmBy`g3(hX$udAmAsDQe!8P}@does9CIFjz2n0dM(97?YDs$U@Z>mP!58`r zSsKJ7rpcjuaTxJiR5e3yV`+B=O33`Pvze!h=Q(OqVNiuWDMkh^Hf}o7`hg>73UUem zS1uf$V#g>|d%=3+QxR#9`XrW~A?upbhf6ldUuegQ4P8dcLF+6biNRWpaq1BAiXkUr zBsEeLV9k$*=^~iqovZdv9ZQbokxfG~sE-TQlMiB6;Zy=YsRWF`w{sI<=Sf|!)IRgvjeVwrp5F%(sl2_k;|Kj8>Y!53stcu?Ab(ERWye#ca0=h7PJ+!3oih&kuu294)0tosC>=y_SFV}q#&^v2~) zG`q2Y!^V2JT9td>PE;6m_Z&2Rx6u8>m>ZrQ?y0CDNje`^@^Bq~mt<-NZ08bKw^d`k z9Q~SQsEwATea}=o^IY+1;)#J@{3w|0`99O)W3m&DP!)N-6hla?Vx9DoD3nH>Iw{hB ziIB^ObJ2%L)F_NA!I!YP2ks>`5jVOwS^TbSyGom?wy?z|Cj6XBRdvK-)8DAZ;SQ{B zB4bvVElFjksA0NVXw|p5Un`*bl!V8XI zi)MCs(XS$ym;i)RG3@HGJ_PYmY@n82=i`Q}wGAcM2-ltXxthz~d{{x&G}Lb^Q^LrO zL=wGrnKF~spt1)BLe}OP&VDIOFdmZ#YFQXFt2M)^56$21)o<4Z?8e*-Uq~*gD{^+2 zaYqT(MQ%nDlo?)3H(h!n$dBPv@D9DtH3N2~xp+G$au$+XSF9`V!}_;48u;TM6V4if z^C(vl54s=RiQ7!CRWnQ#q@QT_(Ubwx9)_Rd0MBWMtxzvs7NI#Y&Sh$32{>8RZ{^`a z-%JF~N(DSy+N1sVsNSEm#KSqc_)CJ=yrorR)0OVW18OY~$g*Qymt>}$pf5jo=Hr12xq!?g$DD zFEU-|oakp*p9nT#Zm?j9GFNxIJxq;EgJZWf*J>I%XV|9vFrKshJlI?>ghy;~{)PlM z7{N}11@3$X_1n&jngFoD0>tSTB63oD6)@{k8eCV3RK&Q|r)N}YCf>BM>_p79oQ6E<&~oQOOsd<%xn zXN8UZfO0zmlp9`>f7#~DI`{N8$V*iKnENC`Rn>5&G-9+patQput50I}I7+tZPDK;d z%vcT_zF&usPzngNpI$ zrrHOCYgz3J6?>A~a826q6xTf|=%}6LfTUr%q#-MQ*DQSFu+b=yWefQySvC2k1_s@ABIlv&Opc{5x{47#xI4(2H$Sb# zs;mld)+Q2Qg6nZ{4)QyMdi64}_ySKw+)e*m6T;-|mw%nm-9(mW*}tAp^-yr9olp-> zsOMizXexcBQs94&`3TCAh5CI5y2`Bi8o4iNNd#)}(e5SS!tzROwlLYaa!~pKQ$1Sy zCMqA?=b0I(y2WlH_2moo9(H4fG>Mn{Qi=`Vu^o1?0>B0ZvBdaEMnkEKYVt2$R{8+XaUy78#F<7|5O9M^L+5;TS z-&=hUT30(#9DEo+`IUE%bwwX?=~vLZwo>U66Ht2I7Ui;puzRUpx_UOgDr*%`a~_0* z*dXH!=aDE&W#eT7Hs=!IzH=uQ%_1Pn#5c#PsvI1_XXC7q?OG5-8MFCqL($LQ01pZHhPK~GL?t7Y^5XwUNeC41cQhAA=2+6XY zPa+4;ip3!W9ARv+L~{>DB}PoJH`b#fHyk%Bm>nP#u?Rv+ziVP_PlN2HQuB3z|BAM_G{@J|Sb0 zc-McYueEU)%6{z|>^3;qM>fID_@KHM&nwViB4E*{X5`+l{)x14%LXj`nNA&api>B_ zXl>Icl0ZfKda5=PONopXs6zdm*~*Haubolv)0U>}lAJA^;9k&S>Sv9kQ=J~`GY z{^x4hgd)(8TDHM|OD+2baHAEd)FCv}r5~VT?|0oPcjeW!rxtiA5mfU)-j{H^=;hN5 zyNFswbJcWnm3bO88V|PEMGTE3>l^Lhe!Todp~6&?O)EcK?_FK*Sx8B*dLaPA%3rE0 ze_HbEqxHJfFQ~!goIn|ZW2p*CdctPsCW<=EB+jay_pi;D=a-Y9x$^{X}$XM#x8LO>&>K2j=kQ!qga>u z*-OJ3pcgkTa^3N@->bx`W_20^K|D&jzen1QFl#1Z|dw}BFaXHBxy zk7RGv8mpe@JJ)Pr$D-H~IV6>b>qpunX-2ttO&YPkC}k&5owOI}Qd1byt+21KwpZ%- z1XB#-air&fcGNLK(s1XSR3!)d3jhCMU0dxYYxv{qcZMQI^7QvIEF$e>(2{vMNI>4P zx)-vARu4L{mhwDhxkZIv2^oO;1qU=&4woNYGL>FosFgLjg{#&Ag znhdR|U?D;F(nzbZ1(E=?s!@E)QiPX1bC19|XUcM)X@X)Bw-(vWF#hOeRVK zbR$Ipv3G+$`-pmaOPCL~IG_kU>Vtj~p+8@UP9P#s#BtBN@_#|RU50%DR%ac+Q)=R$ zeE}}HpSjT48M=~iQJg>8It<#4ugb0>N3A(!B2I9qL3x53YJcY>U_{O6JwEzVgL0$h zTx;ur|6HrRoikm3NUJ^dn&!@7}&lhG^{F8Qg z5##n+(RP7?m}c6dyW$+%;$ih&~Ls|&>ZX3+Tqy-t&O!Fij*1BH!WVfnHV_P-1N z4W9mzBKv)sw*MVxo5}{LC9h{nvcG+t@2h=Q({^c160!a?d&!doIb_i=2@VD5Hi7 z$VX>GrWB1UJs0(=lxqrNYhTLz%By6!d2kaSQ2n3Z#Ct>ks#)<+t69PQN6m_g-C3r% zng60$afQ&V$o`9FMRUSN#%8Qv;+?h$9A06bM&4BjCEPU5PNzmWN1OoU?Sr+9nU%0{ImShI*HhGa-XFJ(T}?TsLWmkho22VYk&;L}S?IAKehDtp3qVJep|IJ6z@oG~9MlJdH9IyjqemNLJPlC;I z8pxct+(Dl?d@pjZq)K3fHX-Vo=cZ@zc2)S(9f!hq@GfdAB>^jsi2sbrxxaXKN6i^b zWfPQRBIi`j^qH!)L*bZ1#&jF8oysk|y}Q@RhG2f;i`@^97>kw|i>_KWDn4}G!6 zM?IL1`lR979_FrPhS;U3(SbTWoA_e0XgiZX6}cjyJ5}~(`h|?1Q6radAkw*GEWSVC z*WSy{MANSZVJLuK{%<#lCcd00O4Ca(+U#LTkxiY&5>2gG+^o6frZx*^Q>Y#ZMK{COf&Y5=O=A8(3g?W>Yjh+p(Tfy!O0;gvWF7tnT zj^mSQHI$mim(L}VRHII$mfurn@S>kvQjRb%6-rtvcxLshd7IXL;>tY}hYI*+mx!l4 z!8MsZWW+@-Z0^wiHdrSU_Wbn^;pY+tS&f(kL5QLpVWf3gx`R2;Ht#{kQt7%vyk;wP z3x{v*Um1K|)H&quAON6E%%(3t(fQX4w|}!dficttg-9+#T#n5%~Qn z^uWa&OGO5rnw?Izo}-)Crat_q}I} zF(yUs(jvJZ5wi+@4JQDba-i_>6o`vY)WUQo#nwa~1nEpmL?gS2Jjf5|AK@&B@wGT@ zt}#C30LsxUII|`VF5m})jd1+rq5db*Q~?&8 zbi7JcYlcQabJ zhtgs%>I+yF>w&j;oX+&*XoEjiEy6=C{?9z~&D&^M zT-?59@R*`?FdC=t1zYv%4fisfZSJDQ9le3BZncF@wq zxntK8qsyh1oIRKNLM(JpnfIzFE_X{f(;c3&N2i=+G8vrd3=YSVpm)dP9*Zhjs(L)n z8(E3VF^_R#VsFazTaKoYNaw&kCCRuzv>dYpzTh-ppklCI6og+~+$3or{12?X-o`8H znw@F$qKL{)2({|Gfk-u`z{MLcbOO15RFwh>FXBE0cUJ|BNW8xv4D8kTM}r2+?lZeJ ze5|JVrd&wANZ`_Atk1(3M$03x#Sdn-d3d2`t(nx_6ZvNNXU?8=K`6)I1rtWDAQ~3g z+3zM=UHdfw$+JgwWm7If=Rg*>Ul|7mj|An{j?9mlsT12N5l*Bgxi{l2#R=BxYo8xJ z6PMq(U;XlOd}iExFK-lcGzQT_P2A0UzE=USe`^3)uH&XaXX*AO5N@3%+9l#Es5N99 z!PJ{+5EL6RjbE&g?Jcxt%tR*>=YZ!n?{*HVDOKY_(l zgi6dIJVf@%Dmj=w#CHpdk-P1|u&Ayt>?n)F6N8ZhvkWu(^&P*xAk08N@9nYo^xgG1d72bl=F)I5M$OThUV{9<>K`|2 z+gBjp^W`znO_Ax^vo`)34{SN|#cn4bIW322+mt&~G}#vPTQqFdsGy+omOKz){PH}Y zO09!TbJBPC(S+n;1`gH)`F+DH+9hCf-yTvGU`*O%mQi1P8m$D=1{p#OZ;n`_cP8|0xh+bAt+}Th`G25cDDG@qi%UDPA+bIp-JsRW~T}hfE7zS z)XO-Xw$l8Tsmx_b7rc@H;ZIQVAw)F{3nA%t|p1B!?L1o))9B#*l07_IDO=M+D zM>j#)HMSUQ&TNI0bLBa?xXYxk6Pkr&X&?|L)(g2yQ6f&AzaMbJn8bP*A!l*Re{o)f zMJq_S(2piqgDrl5^kssA^kphmFkUB+)Zr?;Opa2hm+llAi2oY#dIx6wBXV&CQ_kU3 zsPk_gelmB>L)GxE7{=oMlGI)~1UhfMiEff-KRqY2xXx^1`qMXkr#`A>f8e4o^-z}{r z?^?NMF^a;X_%YG7g7?-^_tb5Z9I)=)!OrwdKq(IfzUIQHdM`a!FbfuvX}6-B=bXMn z11C!=v6nO6ZG4WFTn-bA%VyrdRgLh1)3bZPpQq4`pdD4|&O0;Z-G#B_tGChdno;+) zBuB`aL>Cgv_KQ+CqA9wKL#+Mt*d1W-oh9%*ST?4ZC8%xE^HBPE;$dNNKlsUU>=8^n zkgSGKn6=>*^^MoZ?#m)-QI|2(OEobVn}JE7ji%gJ^M z0Qnnaq3GWH7CyH-bx$$w79%}K9b8Dh3^t?VZ5)> zzj*1-uz9@A+Lf!0ibQzwW~zmhhs7QAauw+G<$!5a@NL-zf!%GS7-(?m!2L)etnOKJ z4RVTjBn<54USfIH|I35g=v*@{N?VVeB`!)&=8dLdTPsfmm-$(As+hH!oc=;m?V8IR zOYC&~a1?`e{P*JezQE2Ow$gS3_-WIbVuV|9I+?@2+j%ar!M+-|mpxG3#9`KNTtNr3 zsAj;P!#f$%=3bO69SB69nJ@y^mFQCzJ;Gh1%K#H2oHCB(h9-Sd z7FJgDH-wgzB$Cz769TZCwwzYeE8aGi+9U1Mxo$^wjtH$j> zMi|F{Gx}F)&I(zgz#%fKPT5J!t%9C@3cs!q8ebo?b+>;7q^Ja+X2GGkF2prkd$E)m z-I2y}uYCS57OJt7i)@;M0+6d!HYnNjxsBzsn7X6=r&4WCzf|f*ON`B z@DKVP8F?BQ9$5RkYn*R^2=pmL#m@vMDK|@Ch!4p2nl(69Tutb&xO!IPf8bn0XtEFk zxaT5!WD#;uKWxR!htEqtqV6lM_NWsx7#N=ui32N*Ua^zc{HrNH&%e4Kk8Au_3e~WF zV#G<{Ar~B@s9EboSt+}az0rJOnE> zhx^ZEm8?n__ndiPOxgAriKVEzt>3srO`r(3VL(LC>6eua8DBVV*T3q{S3(9lH( z9sk?N6rYTYjqYt@2FaAkI6LI95hH%i%iwA__`jG~7Lwl267f5(n|4YvRPDi~ZWPh9 zO+H7s0V!^PxSNixI+S;9Hi_51dX2((W<+FcL?oA$A6+q5qaf$f!LYM-ZBc;-0-p0W z^xDsmG(o?MwV+(mt4UFw6O^=B~mbZtBsHV$-Q-oqS=~o5uU8Jy?^h z7!RCzKxlu=`OvB-D}%4squ1*kB1L4dn6Aa>Or^jh^}G^ zEWy3(+ytN*xQs7!baNu*9NRkC&FH3}zqYFOs}&ZGNQMW`^61F*)%NsH#UmR$EXnsgVX} zB*Ll;QEhv-ruKDrjx|u*Y|xCZA1I?YVf}>QJbvuxCJUoNKW1pWegpla)6PF*xh?p| z7lQwRUGpjmc9~aP(T5rG-|)$sNeV%?)vp}DG1)cSpmTu-;!iq#zQv;-y9>#E0Z8;H z%rsb4L7R!B%&DrEULS#+#Ksg|i3iTkw2F`=AnGKBz4d&^|CsC56y1(M!iMc(i|KvD zKac|Fy@KqsJcCEzG&vEc)l}6Y6PQP!_8U+=2|^_sO9YN^cBfakfi%#PK&Wu~)RvpC zfA>B$c#jz+7(3I1;CRde0Zq@6$3n{I2jp_!%$#g_(e|KuDXvP`VfBRSgk&wcjocR) zrazN@p|{~{NtVAn8Jrnc+T8ZG`-Hu4m~XxQBdn>;LAfuaU??mJ`MI z=#qZS5`|B>6MoDRs1N8sUS{rdX{iMHb*l4V;&pjXa><&rtE9cRmj8%g2ZfL!BREK% z-=5tXo{i{dO{vm54QZv{7s5J|()XJD=vS9g734fV7^xQcye~vnpJiVmIP6djLoSx5 zkm6YE6O=?BLVXZsndEt%-EoiPeVZA6Ic|d+$#|TCHUU|Ne#WEznWo=$l zewbaD1_6)LK+Y$z)uANmst|i?PFThBic|ZTdE1uWu~v{vM2NAf`eePTUeGDa2c4># z`EjK+thmZPAQz)uq_oj4P}-0T;MVEXtZjP0AP z-ImOa7+1%O@adabm?3rDY#jEnE6KC&Mknk;sPg`%Gh2D7FUpe(1mC{;LZ}->I7@c4 zuOm7Vz6e?np_;TFwtF!qZm*FP$=oRS8(Qu+mU+KoMFsI4bufT)o^c1mfGE+~2oWQY zb&{Rzx4?p%g}+(Nh^<)5Q(#nt{Cv}CDi`~;uV_+sSZ*$Dzcq|=O#{D=9IK9Eo;dvA zKSsEI9c`Hy;Ua!U=;pzT%ZbJ@sO*OEWpe9|P4iA$1J8|yPaf42t8QTg$OET|{4Wlo zIcQEKIblneEF{@AGp5TB)b@V6cDC-W;|yO|lk*4D5BTod(8#E{HG>AWe?;^_qhN7ecJ+(eIMU2mMrZ zd4~K{xz-Ugr*%?p5SBM-2>8j+E`co)?tL6)aw7~9$exbf5mTU*Em$(@lF9aeWNd;rqLvX1Ak`vT0s24Lvj#13YDf2X|CI*VC6(kP_&{ZctR1fP-|H8T_ zKM`Q^F-tP5jz?O?#Qldwof9KbMusziIiY^t$z`JD5yC(VcAND$%!JM;JHklpT9qLm2Bio)DsMx0~1K?G>*&9 zB<`CEG_9;4TCQJnk_8aOJC+mrj*#vObswgIDDw23!`Vy`80(W0+%S6nef2vxlBW#x zCGgg5P)0p&j2{1_P2!(I~Zpwme!!^5`a{{@0=L-B%&gu=vN$Wad4e@qamKbt6@|U z2RnSMZNdSm&{?2Lzh;G1uJXE7eL9v9-*4tO#4{ zMv<*a1IGgU9%UvUeS8!2{X1(4A)koGN3av2`;o8K1Q=voct747OVkj88;qM1DVN&I zW{}RG!$H8m_3A#LUbg-e7-7Idn0+}eCS5!TLili&1Bb&| zsd+H+cV!fdUMdz~XSGuvID#=-H%vbIc)KR3U{l;}Zml-*zO9SG?!7m_s7+4To`mSJ zkSI8vsKs=NE!CVtD66Ne@C06WQFq}GrfWTAM%`}QhV*XSQbrXB9}q%bSzdkTQvTdh zhQyXiYWcLKa61L!wi?<}8Bd8V)%)j`662OCSch9G<GhMv@Y9HXQzCVn5m#m+Zh%rc^hRHHu$wZwpafS+8>5^-PWb;f*2_z>Qdds z9IFp4pUck4*)!@}%H&%z8}xEaUwaJI%_lSu`k6O1sZFdO*9mx8rH356WVYW&q%!!qD_N+xmL)DBgQ)H+dDe{BdqD{gD27x|EbebJ0N5vj~t_L{us5lDUJ+4f)#leR zt_d(X>gW0DgFUt1>tk}xQjKVm7moK1bJ?V>idK4!IBOR*=?>Fr?TorR$|AvCD*xl= zt^~n1XR>zaV#^oUv1;q6M2w%VGrg8WM(V4m)K}p`y?wJUJKzIT_vG|6>5Xyeb#?2v z=-YKXq?Io#t-#B-P`7YDn2XNvfR!G?N_R6jJBDLDn8rI_KgkUkV!=15YsxmaN58*o zB(f)#lM{8gw(C&5+_ST>la*?*Qk5-xqolaJ?#`NT;JVNd#5?f#(&4Lc8(|1Zf5qU_ z?!==5Jnq$)4IyARJG-Pi8-ua(kRe)BcsvgU1x2S@L_Cq8*wXMxC|h#%t}(xd<8W&} z_idD4hlpO{Sr^yI+OT3}d{EpUlH*$~zKYQZiR*VTW=n8n2cCpxZV(h(yk*K`4~%Yj zftuJAs)0JJ&nm~R^}|zNV4dxilI|;ox>h$s2SD2eIrnTYHlDKBc;M;VnaqyDI{zmJ zid5;$B7gh4r&4&AC;50_!h$HOYvE}Yw1HmyqJ*mbi-cg!PJ`{+Iz!i9y^y}ML}*jr z3fJyS^WH8$BEi7191JTeoQn($6=Wu!!YV@-SLud@_t#C!b-1@lye{nU*Rj|Nz$SnP zwnt?Tvo~4xGf~#e7gknLUn)6_D`OIYrW!#q7fpHl+469vYq&j4+-q1bPNU_T%f@7Q zc1!UgH^guI4ZFRPcp2?>&Mx5%&Wp<`3?Cjzyc?>}#n;k$RkebAJ`s#P7bTQT8mS<$ z@?edmL^}i%obHmwZIsXLt2!CK2Y~5!jj`iyg)G#b-e&xF@s6$dZliC(QEd zQP>2N+|JXfM1FVj*|k1FCpf)d1P$_w7O4j#d5!mybG>b7lF5wroPi-Wl#$xbN)|I# zKE&7Jgu(=CDSDUF$`WFZd1YUIfl8*QZi%MjPP)6@IU_IWd|qmmdT0pw$=V_8UUmwh zCK$P58MOvBR^GV#?8-P+OnZcP<~XEbZv1GEoMBpN6R{o@Ogz81VFVBV)A`jzDd&bw zwS-R$h;Z#rYn9`|jh-8grNp1IZ`zakKg+(=RTGzQR&U2Vb%_t)5&E}z>Zv2}Z`>vp zVrk=g9sFMm&*(2@f{_tOPu9C*k>q|{P$%eg3R=CE@~D^Su|r0s^zJ8L$0n>5_^F5n z!jJc)Otqwl5@O!2n=xyOTzd$f$|}R`I-V%RoqM|&VaqLHMnyzU@+B4n$VfILbu#M@ zoWCn1iEKc(^XW!*e(ZNX7{%q&QH|&4fgj`zTe0lx9G1K-t;iQe>BDqP%%`)dw>l2m z+9GI9iHJR+Y2&(4=BlLJmk|-P(t|;~`(>dYnt|p9!(7T9v@~N46vGQ*_coQ+a0<^` z!}t`zfgFiK#-~|AnwQ*`D(16z*VVC4>P8VzyL)w76d1yw$;8ULH7hV zYHte{%`=H%kU&J^o&)~qGReelf77=$n}$zD#tP)2V_1S+T>^DSWU7!^KLOTuC3$$u zz|3SBW+#cW`!g@fqw{y&6WnN%)`L=B!`x=6qtq;lOM|=xeT}6DeiaaC2(H?_neq;d zm6q(~W=bbUQNentf{Y!SL=Ac+UEg#`Ic`{`?!yHOBZ;bCht_fsOutNoHK|H}`s*$! z(AEftHM`f!6R+Ji@}y!9b-gLltZE^|GQ)LZd+)g7tGm`Ca2!Slqnae`;Rp0lnsD@N z5I43>alDu!NE76mji4mSFrw3|;6{J^N!O_vbTL{T6H*jVIm5rmO?S+CQdv^Z_OHIC zme-c&CksixFc?LaV6i0SCyTfuF)j!mx-h4Fz_P!-TI_|I?a}!3IxQjI>bQJ8_R!XORQ(*Vv}{C6-|nEA+nX zeV=gTRshwXiERp|n;OeW)n#V}nvdNPMGUecGTpJpvJKyQ+|q%wL@~t?Cj&I6=g2di z<>w$`hs+enC7!2)xAa*Z*tF!>Cs`eE98Zp2y+>K)6p#wafJwYXB zg5(_YeP8ww_e}V^dm^4DM67j?A)~!#Ro|liw$MTO)W6}5AoBSqcccQ>!&o28nd??b zjtVENb$>SC{%kj?eFo8y$6I>V8~ypRO)1MkY-WG-g#GuHdKpW9X>cQ}BO}#3XeM?h zR|>J?xXYWt%;4w=1EHQ-{?cC%xSSLjJ1G)dA{^iBvYRBmw?c|?s*RVF)4}sliudgl z&k^8w#Vb9c=aRZ3Wnr!TfeRhA3y_ewFrNYGG!3|H9k>uj>e15?iXp-_B?yw#Y3-vCaU}VAm@eHhflC>&bBep=o?8- zgH&c-RukfAz~W`{R4XD>fO#`KIYd^n*n$*C1820f?B&1?G;C~Rju)kthRDOSEFmiNdtvsd3a(BQNfo zqR&$A=ThBtVw!Yfd6}&#EzA(Pq-z4B%VoAML61;#zM_4kiDgI<+-O(d7N#^uxcDSHQhOKb8 zMrimTs?ltC@cq{O{Rz*W@muU+{I8xh?18n-ecms1r(X&{C2QOkWinaJINBL6u$UA= zPml6hF;8+n)3w9`*#{92E_02dW`)H(PzVI4V+CjvM;LW!q|Dea1Vp^zQyi7i`wKa_?M)(ym>d3t5&MPs&d^U*R^Kf(eD{~1ygMz9 z%60gKyr}IBvMI-(5Q*14|G9@&wq5@2yGlw8UZYLEjT5uh6d#&g93nT7%{yza;)bxI zI3T|R@?3|;RorTu=xL#Stkc+1iGjap_f%73)07KNxpT#jbN;y68p;fn`+pvVka=Vp zDdGYB{`{#Kg`@?RVxj&Y1{fcUyY&A!W49VIL`yr|2mxssR){O#W>x}io1;F7*IiYI zQp6U#cQYposd|KHFlCS9IIE8duRhmgT0GmEoY6#xGe{`_>`E zjn&zsO58FBG;SB(k4pq<{r8|lO=DlCS_XiTCj#VNKYpnj{^MHRsgXc^&I5zqr-hEk z=(#Tod^|Aoxm1IQt^sFl$8FBqXDJxRON3Bd&pwYI&@DpBNzsnXOq-s}Ok1vye3c6n z;#dFE`{M=Ft?3Xqf;l|`3`D=&7AYu)o>S)VD2Kc_XT3OLaGj-`E(ZG)?;cdz6SRJ~ z$J5zeB0XIqjR4ACJ>%7X+>7YXpD=5&Q!v`D|4*;Bk8k}k{49f3-S6B=>*e$=w-TjO z8TR{BN{74UwK8+mV=A#YrvyhMt83lOrY?6}`y{ven-h&+7Pte$RtF}iZ>5f`vosQ_k+SI*sK6M%NF5E1ybtq}!Z42#G#Z^gr_m(VXZ z_?}zJ-f(v9J8=PiKv#o6S~atwBs}<(hX%@eCt5% zx_*T?fnIUKIf4pN%g097xAPk8tluBFP@d7yooyI5zj4BB^($jD@m&jEdB(?WW7Hwy zs)o z*>Fw@EWv>zeZJIOeUiu>HslL+4TP{WEMOu(k;J`+;ycvFx)uB;lFAo0>;Fb#KBDYR zzGLG?3XyI-fjt6qUzwms;V=z-TA%3*!notm;M zGW=2w`ZDy}3$`(jZ~m`1nH!YQ%rN z`o=%$3zfdPyY=RFdvNm39=nvmD)~Z;vq<{5)TX?|&depCsv;^mX;~cd*)Y)>@O;F{aBnF#cfjeYv+61jN{QT79CCWBfqS z$e-;^%^|i!JF+j%@U3bv95350dE@VFg&}~LAC7rxqSK7WsS0KQj5b`&5AoZu`4pE3 zfWQbWVG>LRE0_XPVH!+F$^ZjpGi+f7%mh1_1+(EZm;+3(2M3r7j^G6I;D0rCHE>NG z+5SudLP0MHUm*hFCLtjOMM4rjtbB-4)Y@tUs* z`f8P}zP4D3TCi0qAG&q5mMx0yTAre7b=58r@w4hXGXYzFeed^s%VLu#zgU}9NKnHX}7j(lRI1GP*FX0IM6^_C&_zI50*U$rhgKwZ0PQXd% zgH!M=ddJ;tp#Ko7Lz4pDY20vQcQkJUL?!N@5t}Ta`F~jxH;Th&dSZ>vbh{C zmwT3*&n@5lt8oria%l{ky2LDI?L%xja2j#X!?bJWkP^VIq30(G6*seV(v zLH(BcPwKbTo757`7>%DsuJP9dX_T7r8kHtSGefgTvqZC0)2(?|w^jFvu0^+7w^#S6 zu2uKBZolq;u3h(qu0wZ7cUX5s_gCFew!7Ye!j{^{o~_Hv=Qo=I$pg(8_X9+mS~+a zr>qED6zS76sY&$JSItNHs%s*y>U^V!|IARc?n?NsiP46JC|_MeRD-hYj8ycsk0((#68)bE7ho(s5tM%2^D7r#x z6b{WzRbA{&l{sP{%n{NU=m;s&Q|amW`{J;#z+yce8$NkU4L$fLL# zL_!=IM|7tj390iph2G@T%w37a38&QVSrqGS`eJ>)$yYsEFc`3MC5p~rv|z7M+x6~} zuZ_@|qf+^wOTKYNXdUk^6*5{JvN{c&!^5I4!oS_c9KmbN5ykpcl$Bm-ysvsj=r1om zDs{q@s2Z)Wx(@3ey{_tRXnuM5MmaU7qHb!4ze7eZ$;d15uaM20Sfid9>XeyvX?!$) zCA?8auU!#A;~OG&g%X7oynrBp*y(a)D9$lRc-QH);a_^!}jUZoK=iqUJk z-l6&RwOVsCsV+7j=bMLXKM*#0rTJgcQN8CI>0GETD7_iSrv1}C+jxhn0NXibbvy>; zhXs(L7r~p@|Bn)#9l1igOIw4%+YxzHeM;S+ZP1?57A4drn001dk)|$kW^!FZjV@JR z7wL#>P^U&lV{sT9hPDZ96U@5Q$n40P@Vdwvty%Y#DoEeP>Q_8Ipjn}<(GCQo3}ILv zk)=p~)8AK@8k~wAMZ$vgkJb{nI?D%9BDvv-qA96K znBpEOGoy<1r()_fMf&^^FB(9994(mO+$D~^{_1y;p5b#b@y$hw{x04{Q)`?zc!QAP z>^7ck2M{KFljH20WD19NK7?n25s8k1j18mlIG)gM~cF< zu35R8?ls};Oc${g9sSQAY)F~5MidktTa0Ybl(JGcVI1lh9;d(>;rn zC7E)@V?<=zAGdLSmpC8=<}pL#jP~>9~@HbHg|SLpnD4r6a-lztdb#m%=bKWbw;fFA9kP zmz&u{6Xjb=2C=H@64@yq%(T<03vQ8yV2I738*$%k5VnQ16DZgJa)|Lbjg z7!tVn;BZFuY7nAYX1RF+;!#i3%%3~k-@}NId6(pjFkD}CYhB_|(d|o?jG8_WDoW30 zGi#gBWp8FCRq_v0PW|dslxTES9`=O#ZEo^hBMP$j`kPN1T5)x4^X1gYM6Pvr#op!n z?Lx#*&y8(&H;KaRE>p4z-y1RNOlY*rjXUF2qM&^9=(SjUUZ-FfIBjf-?LwX~!_?4z-z)i4%)9qg&w&?RjJDT{lqZu~U(K)av|IGwywf)JkTRRs4vfl-pWB3q;I62(WX`6C2tP7&7JYhi$e%7cEJ!A2L7a<&?q z@VrTV$XbYp%tr~^C{j;tmh!ZYAanB=QhnOOyoxzo)+$`}p$=yuxE=0i!ZwQFb0(qc zvU6)mAr&LhKgmjos-pwtJvK`8zGf?FrB&!vJ$*D5qh-kJM-W#bMX>5;!ZwQ3r;k*% zQUs%FuIm1FWIi|Io#=3`!gO@FM+n;}(n<+*I9FjNIvfim)XxG-+vTl@FtZuJ6=X_y z(4NH*&oAE|LF`l;!Pk#lPadkKJV$cFj78q?(VoWp89N#h_l! zqG{T29Qtw=4eCd%7~L_f$>>ZygsQJUsVK2|V!UVR&wnLW{HX$)0X-+wG6!{fHB%QB6(0}MK*ZCeXDm#&iVQ*fp~z&H4H1ED7ihRZp4`A%jH|TOC=Z4L zJ}>0q{9EELAhXDYT&-aCo6KWRWKd6$k-baVqG0M~ ziz3nh%Mcn#Y&33AgoSs7_f1p_DhiW1Q>I7}W}+0K`woV%<`kjI6f7NC?!+BepJ!wn zK1)C`{_; zR{HGrAhsQQG2UcdR=ger+q@Vj5~ARJ?ML}K!!Z~kj*3En=A>(V@pceOiB%)FZ+SYmzHNzL@fLG)coqVOOwiWCU^XVJCm|)w|%HoWibu&rj}R?jypdd?)6(% z0u?8|y0tM0zYwG1c-5YsqwRsB5WWPrBO<2Ti0g`g!FF6c^|U+JRp_F)$CuQrL?n{y zQ#P=w$-T33JgE_cP@D>Lw_43aF3?#O%E76be0Z*Z@0%EA$CkF4m#QjaERDIAO!eRG$#nzXoQXt*8INpihknTiUQT<;&q>-P;Y36tyJbT^;SB?h{*b0e6>ELe0 z6SHESCF@=))F$2X%OC!#pj{aM%~&?&TF2L&7W~LIRI2Cvdrx5F6{wZHf6g+LP|#j0 z+jYtFN^C(Z66aDVQa;#kT08GQ7nN;EHLacdUfu6(pA}3=yn$KDs@QYqVme0r7t*e? z5mT1DR?i4e|DHj%h2%0Ej#@?DmJ8HK~ zI`h$w2T+D-r@Z#KencY7;5BZj9|>Wu)N<;6L3`!7GhuPc3z$b8eRr!byu6gJwXHle z?u#2ZyQJLNCj$5PiKzCJTt5+2s$Zfy;g^nMP0`H@m`#^vLhs^XB~^RO8tc$(YK@f0 zqC{N10(t1toE(c)@mN(>j09ya_bZ)E4I|OB&&(#6l(le=>OQ!`I*o&(m-h$N*VbZ? zqJfnKDH>R5M*Kez8dxzA;?bW9maJ>86%YyEH{J$i`&r+(YGyYh>+`cpRtPfNA&#w{fCa>y6AmXR?eb)C6;Opc|XZr`%2==%?*w0Wr=f#vW zfPZJL8%A8T$3Aw9@n`%YuYk6n{Lc=C&#`STu+G3M?8Dn!``a;zC~N3FBYH5Y6|8t; zh$46zrj{7KGS=w6Rg^f($`HjE#!LujZ-5$j=hvQuZ6CBsd`ypA$^bg*N{ zLS{N+&4KQ!x3jk-velo^RqsZ$=c^Tg``U0%e(i{{1^1;Gy%xT8diCS1d5#^|T9`UL z6W=e4#5Bwa6(T@M_gED@9*gM`7=sn?GohIrerQ@8BASfw1JjbQ(N^>RmA20?{d7ki zvG%2-0e35oSbN13QRune`tpq@`b3eonmXq`&srf7B5a+$|4;KLa z%wF4i^Ad*d_MzpzH>p7O?xY0|2@FZ@`(vVcm2agf-6!d1B2F@Qj12$lDgKHO`n;^Y zJ`Vio_p0y6g;(c)ckva&4^3v(z3n(JDU319MK|OEM{X8zf%I*5_!%y|(l{UdP4BbX NURtrL5dUWi@ISvZdj|jj diff --git a/resources/EasyDrift/stream/ui_drift.ytd b/resources/EasyDrift/stream/ui_drift.ytd deleted file mode 100644 index a67aaa53c..000000000 --- a/resources/EasyDrift/stream/ui_drift.ytd +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5d6d251220bd363601be0a703342d986987fcad993fd1918d29bdc1383d9ef6f -size 992 diff --git a/resources/LegacyFuel/config.lua b/resources/LegacyFuel/config.lua index 8ca032298..2a34c6be7 100644 --- a/resources/LegacyFuel/config.lua +++ b/resources/LegacyFuel/config.lua @@ -17,32 +17,32 @@ Config.FuelDecor = "_FUEL_LEVEL" Config.DisableKeys = {0, 22, 23, 24, 29, 30, 31, 37, 44, 56, 82, 140, 166, 167, 168, 170, 288, 289, 311, 323} -- Want to use the HUD? Turn this to true. -Config.EnableHUD = true +Config.EnableHUD = false -- Configure blips here. Turn both to false to disable blips all together. -Config.ShowNearestGasStationOnly = true -Config.ShowAllGasStations = false +Config.ShowNearestGasStationOnly = false +Config.ShowAllGasStations = true -- Modify the fuel-cost here, using a multiplier value. Setting the value to 2.0 would cause a doubled increase. Config.CostMultiplier = 1.0 Config.Strings = { ExitVehicle = "Exit the vehicle to refuel", - EToRefuel = "Press ~g~E ~w~to refuel vehicle", + EToRefuel = "Press ~r~E ~w~to refuel vehicle", JerryCanEmpty = "Jerry can is empty", FullTank = "Tank is full", - PurchaseJerryCan = "You purchased a jerry can for ~g~$" .. Config.JerryCanCost, - CancelFuelingPump = "Press ~g~E ~w~to cancel the fueling", - CancelFuelingJerryCan = "Press ~g~E ~w~to cancel the fueling", + PurchaseJerryCan = "You picked up a jerry can", + CancelFuelingPump = "Press ~r~E ~w~to cancel the fueling", + CancelFuelingJerryCan = "Press ~r~E ~w~to cancel the fueling", NotEnoughCash = "~r~Not enough cash", RefillJerryCan = "You refilled the jerry can for ", NotEnoughCashJerryCan = "~r~Not enough cash to refill jerry can", - JerryCanFull = "~g~Jerry can is full", + JerryCanFull = "~r~Jerry can is full", TotalCost = "Cost", } if not Config.UseESX then - Config.Strings.PurchaseJerryCan = "You purchased a jerry can" + Config.Strings.PurchaseJerryCan = "You picked up a jerry can" Config.Strings.RefillJerryCan = "You refilled the jerry can" end diff --git a/resources/LegacyFuel/source/fuel_client.lua b/resources/LegacyFuel/source/fuel_client.lua index 17ec8f9ce..e9f53fa9c 100644 --- a/resources/LegacyFuel/source/fuel_client.lua +++ b/resources/LegacyFuel/source/fuel_client.lua @@ -313,3 +313,35 @@ if Config.EnableHUD then end end) end + +local barHeight = 0.010 -- Height of Bar Variable +local barWidth = 0.140 -- Width of Bar Variable +local barPos = { x = 0.0855, y = 0.812 } -- Position On Screen (Above Mini Map) + +-- NOTE -- As you change the HEIGHT or WIDTH you may also need to change the POSITION. +-- NOTE -- WIDTH and HEIGHT should be divisible by TWO to make it easier for POSITION. + +Citizen.CreateThread(function() + while true do Citizen.Wait(0) + + local playerPed = PlayerPedId() -- The Player + local vehicle = GetVehiclePedIsIn(playerPed) -- Is The Player in a vehicle? + local driver = GetPedInVehicleSeat(vehicle, -1) -- Is The Player in the Driver Seat? + local dead = IsPedDeadOrDying(playerPed, true) -- Is The Player dead or dying? + local class = GetVehicleClass(vehicle) -- What class of vehicle? Ignore bikes. + + if (vehicle ~= 0) and (class ~= 13) then + -- If IN a vehicle, and NOT a bike then + if driver and not dead then + -- If The Player is in the Driver Seat and IS NOT dead + local currentFuel = GetVehicleFuelLevel(vehicle) -- Current Fuel In Vehicle + local fuelWidth = (barWidth * currentFuel) / 100 -- Fuel Value x Max Bar Width Show The Level Range Within The Bar + + DrawRect(barPos.x, barPos.y, barWidth, barHeight, 40, 40, 40, 150) -- Bar Background (Black) + DrawRect(barPos.x - (barWidth - fuelWidth) / 2, barPos.y, fuelWidth, barHeight, 200, 46, 46, 150) -- Current Fuel (Red) + else + Wait(500) -- Wait and don't crash + end + end + end +end) \ No newline at end of file diff --git a/resources/refuelingnozzle/settings.ini b/resources/refuelingnozzle/settings.ini index 1268fe5e3..3d46df958 100644 --- a/resources/refuelingnozzle/settings.ini +++ b/resources/refuelingnozzle/settings.ini @@ -4,8 +4,8 @@ InteractionKey 38 //Second Interaction Key Use For Handling Actions (G) InteractionKey2 47 //Jerry Can Stuff -JerryCanCost 100 -JerryCanRefillCost 50 +JerryCanCost 0 +JerryCanRefillCost 0 UnarmPedWhenHoldingNozzle true WaitTimeAfterRefuel 500 //If the player can use the fuel nozzle to drop fuel on groun @@ -18,8 +18,8 @@ DropNozzle Press ~r~E~w~ To Drop The Nozzle MountFuelPump [~g~E~w~] Mount Fuel Pump PlaceFuelPump [~r~E~w~] Place Fuel Pump PickupFuelPump [~g~E~w~] Pickup Fuel Pump -PurchaseJerryCan [~r~G~w~] Purchase Jerry Can For -RefillJerryCan [~g~G~w~] Refill Jery Can For +PurchaseJerryCan [~r~G~w~] Pickup Jerry Can +RefillJerryCan [~g~G~w~] Refill Jerry Can UseJerryCan [~g~E~w~] Use Jerry Can JerryCanEmpty ~w~Jerry Can Empty VehicleTankFull ~g~Tank Full diff --git a/server.cfg b/server.cfg index 1b9264f85..5d0b8a447 100644 --- a/server.cfg +++ b/server.cfg @@ -158,7 +158,6 @@ start Speed-Warning start Laptop-UI start carsounds start carsounds4 -start EasyDrift start rcore_pool start asedrussounds start LegacyFuel