From b81b483f0b18adc822931594b261e717ca34a4e8 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Mon, 12 Dec 2016 16:44:56 +0100 Subject: [PATCH] First prototype of the scheduler dispatcher is ready... It works, but the code was very difficult... So, when the Scheduler that is passed to the AddScheduler is nillified, the internal arrays that keep the Scheduler reference are also nillified. And it does what i need for further utilization in MOOSE classes. When the Scheduler is nillified, but, a schedule was planned for that Scheduler, once the scheduler fires off, it will ignore that call... cool. Sven --- Moose Development/Moose/Core/Event.lua | 19 +- Moose Development/Moose/Core/Scheduler.lua | 114 +--------- Moose Development/Moose/Core/Scheduler2.lua | 214 ++++++++++++++++++ Moose Development/Moose/Core/Timer.lua | 104 +++++++++ Moose Development/Moose/Moose.lua | 4 + Moose Development/Moose/Tasking/Task.lua | 25 +- .../SCH-000 - Simple Scheduling.lua | 24 ++ .../SCH-000 - Simple Scheduling.miz} | Bin 18083 -> 17738 bytes .../SCH-001 - Simple Object Scheduling.lua | 34 +++ .../SCH-001 - Simple Object Scheduling.miz} | Bin 18099 -> 17882 bytes .../SCH-001 - Simple Scheduling.lua | 8 - .../SCH-002 - Nested Scheduling.lua | 28 --- ...-002 - No Object Scheduling because GC.lua | 56 +++++ ...002 - No Object Scheduling because GC.miz} | Bin 19196 -> 18142 bytes .../SCH-003 - Repeated Scheduling.lua | 16 -- .../TSK-010 - Task Modelling - SEAD.lua | 9 +- .../TSK-010 - Task Modelling - SEAD.miz | Bin 28154 -> 28592 bytes 17 files changed, 481 insertions(+), 174 deletions(-) create mode 100644 Moose Development/Moose/Core/Scheduler2.lua create mode 100644 Moose Development/Moose/Core/Timer.lua create mode 100644 Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.lua rename Moose Test Missions/SCH - Scheduler/{SCH-003 - Repeated Scheduling/SCH-003 - Repeated Scheduling.miz => SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.miz} (64%) create mode 100644 Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Object Scheduling/SCH-001 - Simple Object Scheduling.lua rename Moose Test Missions/SCH - Scheduler/{SCH-002 - Nested Scheduling/SCH-002 - Nested Scheduling.miz => SCH-001 - Simple Object Scheduling/SCH-001 - Simple Object Scheduling.miz} (64%) delete mode 100644 Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Scheduling/SCH-001 - Simple Scheduling.lua delete mode 100644 Moose Test Missions/SCH - Scheduler/SCH-002 - Nested Scheduling/SCH-002 - Nested Scheduling.lua create mode 100644 Moose Test Missions/SCH - Scheduler/SCH-002 - No Object Scheduling because GC/SCH-002 - No Object Scheduling because GC.lua rename Moose Test Missions/SCH - Scheduler/{SCH-001 - Simple Scheduling/SCH-001 - Simple Scheduling.miz => SCH-002 - No Object Scheduling because GC/SCH-002 - No Object Scheduling because GC.miz} (60%) delete mode 100644 Moose Test Missions/SCH - Scheduler/SCH-003 - Repeated Scheduling/SCH-003 - Repeated Scheduling.lua diff --git a/Moose Development/Moose/Core/Event.lua b/Moose Development/Moose/Core/Event.lua index f90096791..0d426511c 100644 --- a/Moose Development/Moose/Core/Event.lua +++ b/Moose Development/Moose/Core/Event.lua @@ -1,6 +1,19 @@ ---- The EVENT class models an efficient event handling process between other classes and its units, weapons. +--- This module contains the EVENT class. +-- +-- === +-- +-- Takes care of EVENT dispatching between DCS events and event handling functions defined in MOOSE classes. +-- +-- === +-- +-- The above menus classes **are derived** from 2 main **abstract** classes defined within the MOOSE framework (so don't use these): +-- +-- === +-- +-- ### Contributions: - +-- ### Authors: FlightControl : Design & Programming +-- -- @module Event --- @author FlightControl --- The EVENT structure -- @type EVENT @@ -93,7 +106,7 @@ function EVENT:Init( EventID, EventClass ) end if not self.Events[EventID][EventClass] then - self.Events[EventID][EventClass] = setmetatable( {}, { __mode = "v" } ) + self.Events[EventID][EventClass] = setmetatable( {}, { __mode = "k" } ) end return self.Events[EventID][EventClass] end diff --git a/Moose Development/Moose/Core/Scheduler.lua b/Moose Development/Moose/Core/Scheduler.lua index 883260722..7c8a1eddb 100644 --- a/Moose Development/Moose/Core/Scheduler.lua +++ b/Moose Development/Moose/Core/Scheduler.lua @@ -58,26 +58,6 @@ function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArg local self = BASE:Inherit( self, BASE:New() ) self:F2( { StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) - - self:Schedule( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) - - return self -end - ---- Schedule a new time event. Note that the schedule will only take place if the scheduler is *started*. Even for a single schedule event, the scheduler needs to be started also. --- @param #SCHEDULER self --- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. --- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. --- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. --- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. --- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. --- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. --- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. --- @return #SCHEDULER self -function SCHEDULER:Schedule( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) - self:F2( { StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) - self:T3( { TimeEventFunctionArguments } ) - self.TimeEventObject = TimeEventObject self.TimeEventFunction = TimeEventFunction self.TimeEventFunctionArguments = TimeEventFunctionArguments @@ -89,103 +69,11 @@ function SCHEDULER:Schedule( TimeEventObject, TimeEventFunction, TimeEventFuncti self.StartTime = timer.getTime() - self:Start() + _TIMERDISPATCHER:AddSchedule( self ) return self end ---- (Re-)Starts the scheduler. --- @param #SCHEDULER self --- @return #SCHEDULER self -function SCHEDULER:Start() - self:F2() - - if self.RepeatSecondsInterval ~= 0 then - self.Repeat = true - end - - if self.StartSeconds then - if self.ScheduleID then - timer.removeFunction( self.ScheduleID ) - end - self:T( { self.StartSeconds } ) - self.ScheduleID = timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .001 ) - end - - return self -end - ---- Stops the scheduler. --- @param #SCHEDULER self --- @return #SCHEDULER self -function SCHEDULER:Stop() - self:F2( self.TimeEventObject ) - - self.Repeat = false - if self.ScheduleID then - self:E( "Stop Schedule" ) - timer.removeFunction( self.ScheduleID ) - end - self.ScheduleID = nil - - return self -end - --- Private Functions - ---- @param #SCHEDULER self -function SCHEDULER:_Scheduler() - self:F2( self.TimeEventFunctionArguments ) - - local ErrorHandler = function( errmsg ) - - env.info( "Error in SCHEDULER function:" .. errmsg ) - if debug ~= nil then - env.info( debug.traceback() ) - end - - return errmsg - end - - local StartTime = self.StartTime - local StopSeconds = self.StopSeconds - local Repeat = self.Repeat - local RandomizationFactor = self.RandomizationFactor - local RepeatSecondsInterval = self.RepeatSecondsInterval - local ScheduleID = self.ScheduleID - - local Status, Result - if self.TimeEventObject then - Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) - else - Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) - end - - self:T( { "Timer Event2 .. " .. self.ScheduleID, Status, Result, StartTime, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) - - if Status and ( ( Result == nil ) or ( Result and Result ~= false ) ) then - if Repeat and ( not StopSeconds or ( StopSeconds and timer.getTime() <= StartTime + StopSeconds ) ) then - local ScheduleTime = - timer.getTime() + - self.RepeatSecondsInterval + - math.random( - - ( RandomizationFactor * RepeatSecondsInterval / 2 ), - ( RandomizationFactor * RepeatSecondsInterval / 2 ) - ) + - 0.01 - self:T( { self.TimeEventFunctionArguments, "Repeat:", timer.getTime(), ScheduleTime } ) - return ScheduleTime -- returns the next time the function needs to be called. - else - timer.removeFunction( ScheduleID ) - self.ScheduleID = nil - end - else - timer.removeFunction( ScheduleID ) - self.ScheduleID = nil - end - - return nil -end diff --git a/Moose Development/Moose/Core/Scheduler2.lua b/Moose Development/Moose/Core/Scheduler2.lua new file mode 100644 index 000000000..363626328 --- /dev/null +++ b/Moose Development/Moose/Core/Scheduler2.lua @@ -0,0 +1,214 @@ +--- This module contains the SCHEDULER class. +-- +-- 1) @{Core.Scheduler#SCHEDULER} class, extends @{Core.Base#BASE} +-- ===================================================== +-- The @{Core.Scheduler#SCHEDULER} class models time events calling given event handling functions. +-- +-- 1.1) SCHEDULER constructor +-- -------------------------- +-- The SCHEDULER class is quite easy to use: +-- +-- * @{Core.Scheduler#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters. +-- +-- 1.2) SCHEDULER timer stop and start +-- ----------------------------------- +-- The SCHEDULER can be stopped and restarted with the following methods: +-- +-- * @{Core.Scheduler#SCHEDULER.Start}: (Re-)Start the scheduler. +-- * @{Core.Scheduler#SCHEDULER.Stop}: Stop the scheduler. +-- +-- 1.3) Reschedule new time event +-- ------------------------------ +-- With @{Core.Scheduler#SCHEDULER.Schedule} a new time event can be scheduled. +-- +-- === +-- +-- ### Contributions: +-- +-- * Mechanist : Concept & Testing +-- +-- ### Authors: +-- +-- * FlightControl : Design & Programming +-- +-- === +-- +-- @module Scheduler + + +--- The SCHEDULER class +-- @type SCHEDULER +-- @field #number ScheduleID the ID of the scheduler. +-- @extends Core.Base#BASE +SCHEDULER = { + ClassName = "SCHEDULER", +} + +--- SCHEDULER constructor. +-- @param #SCHEDULER self +-- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. +-- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. +-- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. +-- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. +-- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. +-- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. +-- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. +-- @return #SCHEDULER self +function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) + local self = BASE:Inherit( self, BASE:New() ) + self:F2( { StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) + + self.TimeEventObject = TimeEventObject + self.TimeEventFunction = TimeEventFunction + self.TimeEventFunctionArguments = TimeEventFunctionArguments + self.StartSeconds = StartSeconds + self.Repeat = false + self.RepeatSecondsInterval = RepeatSecondsInterval or 0 + self.RandomizationFactor = RandomizationFactor or 0 + self.StopSeconds = StopSeconds + + self.StartTime = timer.getTime() + + _TIMERDISPATCHER:AddSchedule( self ) + + return self +end + +--- Schedule a new time event. Note that the schedule will only take place if the scheduler is *started*. Even for a single schedule event, the scheduler needs to be started also. +-- @param #SCHEDULER self +-- @param #table TimeEventObject Specified for which Moose object the timer is setup. If a value of nil is provided, a scheduler will be setup without an object reference. +-- @param #function TimeEventFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in TimeEventFunctionArguments. +-- @param #table TimeEventFunctionArguments Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. +-- @param #number StartSeconds Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. +-- @param #number RepeatSecondsInterval Specifies the interval in seconds when the scheduler will call the event function. +-- @param #number RandomizationFactor Specifies a randomization factor between 0 and 1 to randomize the RepeatSecondsInterval. +-- @param #number StopSeconds Specifies the amount of seconds when the scheduler will be stopped. +-- @return #SCHEDULER self +function SCHEDULER:Schedule( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds ) + self:F2( { StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) + self:T3( { TimeEventFunctionArguments } ) + + self.TimeEventObject = TimeEventObject + self.TimeEventFunction = TimeEventFunction + self.TimeEventFunctionArguments = TimeEventFunctionArguments + self.StartSeconds = StartSeconds + self.Repeat = false + self.RepeatSecondsInterval = RepeatSecondsInterval or 0 + self.RandomizationFactor = RandomizationFactor or 0 + self.StopSeconds = StopSeconds + + self.StartTime = timer.getTime() + + self:Start() + + return self +end + +--- (Re-)Starts the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Start() + self:F2() + + if self.RepeatSecondsInterval ~= 0 then + self.Repeat = true + end + + if self.StartSeconds then + if self.ScheduleID then + timer.removeFunction( self.ScheduleID ) + end + self:T( { self.StartSeconds } ) + self.ScheduleID = timer.scheduleFunction( self._Scheduler, self, timer.getTime() + self.StartSeconds + .001 ) + end + + return self +end + +--- Stops the scheduler. +-- @param #SCHEDULER self +-- @return #SCHEDULER self +function SCHEDULER:Stop() + self:F2( self.TimeEventObject ) + + self.Repeat = false + if self.ScheduleID then + self:E( "Stop Schedule" ) + timer.removeFunction( self.ScheduleID ) + end + self.ScheduleID = nil + + return self +end + +-- Private Functions + +--- @param #SCHEDULER self +function SCHEDULER:_Scheduler() + self:F2( self.TimeEventFunctionArguments ) + + local ErrorHandler = function( errmsg ) + + env.info( "Error in SCHEDULER function:" .. errmsg ) + if debug ~= nil then + env.info( debug.traceback() ) + end + + return errmsg + end + + local StartTime = self.StartTime + local StopSeconds = self.StopSeconds + local Repeat = self.Repeat + local RandomizationFactor = self.RandomizationFactor + local RepeatSecondsInterval = self.RepeatSecondsInterval + local ScheduleID = self.ScheduleID + + local Status, Result + if self.TimeEventObject then + Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + else + Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler ) + end + + self:T( { "Timer Event2 .. " .. self.ScheduleID, Status, Result, StartTime, RepeatSecondsInterval, RandomizationFactor, StopSeconds } ) + + if Status and ( ( Result == nil ) or ( Result and Result ~= false ) ) then + if Repeat and ( not StopSeconds or ( StopSeconds and timer.getTime() <= StartTime + StopSeconds ) ) then + local ScheduleTime = + timer.getTime() + + self.RepeatSecondsInterval + + math.random( + - ( RandomizationFactor * RepeatSecondsInterval / 2 ), + ( RandomizationFactor * RepeatSecondsInterval / 2 ) + ) + + 0.01 + self:T( { self.TimeEventFunctionArguments, "Repeat:", timer.getTime(), ScheduleTime } ) + return ScheduleTime -- returns the next time the function needs to be called. + else + timer.removeFunction( ScheduleID ) + self.ScheduleID = nil + end + else + timer.removeFunction( ScheduleID ) + self.ScheduleID = nil + end + + return nil +end + + + + + + + + + + + + + + + + diff --git a/Moose Development/Moose/Core/Timer.lua b/Moose Development/Moose/Core/Timer.lua new file mode 100644 index 000000000..a31e67300 --- /dev/null +++ b/Moose Development/Moose/Core/Timer.lua @@ -0,0 +1,104 @@ +--- This module contains the TIMER class. +-- +-- === +-- +-- Takes care of scheduled function dispatching for defined in MOOSE classes. +-- +-- === +-- +-- === +-- +-- ### Contributions: - +-- ### Authors: FlightControl : Design & Programming +-- +-- @module Timer + +--- The TIMER structure +-- @type TIMER +TIMER = { + ClassName = "TIMER", + CallID = 0, +} + +function TIMER:New() + local self = BASE:Inherit( self, BASE:New() ) + self:F3() + return self +end + +--- Add a Schedule to the ScheduleDispatcher. +-- The development of this method was really tidy. +-- It is constructed as such that a garbage collection is executed on the weak tables, when the Scheduler is nillified. +-- Nothing of this code should be modified without testing it thoroughly. +-- @param #TIMER self +-- @param Core.Scheduler#SCHEDULER Scheduler +function TIMER:AddSchedule( Scheduler ) + self:F3( { Scheduler = Scheduler } ) + + -- Initialize the Functions array, which is a weakly coupled table. + -- If the object used as the key is nil, then the garbage collector will remove the item from the Functions array. + self.Schedulers = self.Schedulers or setmetatable( {}, { __mode = "k" } ) + + self.CallID = self.CallID + 1 + self.Schedulers[Scheduler] = self.CallID + + self:E(self.Schedulers) + + self.Schedule = self.Schedule or setmetatable( {}, { __mode = "v" } ) + + + self.Schedule[self.CallID] = {} + + self.Schedule[self.CallID].ScheduleFunction = Scheduler.TimeEventFunction + self.Schedule[self.CallID].ScheduleArguments = Scheduler.TimeEventFunctionArguments + self.Schedule[self.CallID].ScheduleObject = Scheduler.TimeEventObject + self.Schedule[self.CallID].ScheduleStart = Scheduler.StartSeconds + .001 + + self:E( self.Schedule[self.CallID] ) + + local function ScheduleCallHandler( CallID ) + + local ErrorHandler = function( errmsg ) + env.info( "Error in timer function: " .. errmsg ) + if debug ~= nil then + env.info( debug.traceback() ) + end + return errmsg + end + + BASE:E( { self } ) + + local ScheduleFunction = self.Schedule[CallID].ScheduleFunction + local ScheduleArguments = self.Schedule[CallID].ScheduleArguments + local ScheduleObject = self.Schedule[CallID].ScheduleObject + + local Status, Result + if ScheduleObject then + local function Timer() + return ScheduleFunction( ScheduleObject, unpack( ScheduleArguments ) ) + end + Status, Result = xpcall( Timer, ErrorHandler ) + else + local function Timer() + return ScheduleFunction( unpack( ScheduleArguments ) ) + end + Status, Result = xpcall( Timer, ErrorHandler ) + end + end + + timer.scheduleFunction( + ScheduleCallHandler, + self.CallID, + timer.getTime() + 1 + ) + --[[ + + + self:T( Schedule.FunctionID ) + --]] + + return self.CallID +end + + + diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index d3abcd966..5d79c3bca 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -7,6 +7,7 @@ Include.File( "Utilities/Utils" ) --- Core Classes Include.File( "Core/Base" ) Include.File( "Core/Scheduler" ) +Include.File( "Core/Timer") Include.File( "Core/Event" ) Include.File( "Core/Menu" ) Include.File( "Core/Zone" ) @@ -66,3 +67,6 @@ _EVENTDISPATCHER = EVENT:New() -- Core.Event#EVENT --- Declare the main database object, which is used internally by the MOOSE classes. _DATABASE = DATABASE:New() -- Database#DATABASE +--- Declare the timer dispatcher based on the TIMER class +_TIMERDISPATCHER = TIMER:New() -- Core.Timer#TIMER + diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index d5a6f39f1..983a85d1d 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -148,9 +148,7 @@ function TASK_BASE:New( Mission, SetGroupAssign, TaskName, TaskType ) self:UnAssignFromUnit( TaskUnit ) self:MessageToGroups( TaskUnit:GetPlayerName() .. " aborted Task " .. self:GetName() ) end - if self:HasAliveUnits() == false then - self:__Abort( 1 ) - end + self:__Abort( 1 ) end end ) @@ -793,6 +791,27 @@ function TASK_BASE:SetBriefing( TaskBriefing ) return self end +--- StateMachine callback function for a TASK +-- @param #TASK_BASE self +-- @param #string Event +-- @param #string From +-- @param #string To +-- @param Core.Event#EVENTDATA Event +function TASK_BASE:onbeforeAbort( Event, From, To ) + + self:E("Abort") + + for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do + if self:HasAliveUnits() then + return false + end + end + + self:MessageToGroups( "Task " .. self:GetName() .. " has been aborted! Task will be replanned." ) + + return true +end + --- StateMachine callback function for a TASK diff --git a/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.lua b/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.lua new file mode 100644 index 000000000..5b1cc0462 --- /dev/null +++ b/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.lua @@ -0,0 +1,24 @@ +--- Simple function scheduling +-- +-- === +-- +-- Author: FlightControl +-- Date Created: 12 Dec 2016 +-- +-- # Situation +-- Uses the Tracing functions from BASE within the DCS.log file. Check the DCS.log file for the results. +-- Create a new SCHEDULER object. +-- Check the DCS.log. +-- +-- # Test cases: +-- +-- 1. The log should contain a "Hello World" line that is fired off 10 seconds after mission start. +-- +-- +-- # Status: TESTED - 12 Dec 2016 + +local TestScheduler = SCHEDULER:New( nil, + function() + BASE:E( "Hello World") + end, {}, 1 + ) \ No newline at end of file diff --git a/Moose Test Missions/SCH - Scheduler/SCH-003 - Repeated Scheduling/SCH-003 - Repeated Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.miz similarity index 64% rename from Moose Test Missions/SCH - Scheduler/SCH-003 - Repeated Scheduling/SCH-003 - Repeated Scheduling.miz rename to Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.miz index c9b5f4bdd8023172f8548f46d55d9ca19212fca0..3cf8a601a008a9ed3867868b61029c27171821ca 100644 GIT binary patch delta 5649 zcma)=Wmpv4w#SDKK@gB`>28o3TG|nqp}V^z6^8DiyQE8Lq$EY8!J&ulZj_G8d*0`s z_uTX8?hpIfd&U35S|9e>zd{(&U=&h~J8?ZNmp4JutUP{w7l#QFTK34ayKfQ;DIFB1 zDQ*9qhe)#N*W<}f?_U0#BMy_d%UmQ+<(EZMoP;lGR&;6%YF=cw$13AakeR@=khIJ8 zLHej7#?&|Ch>Q}UuK2_;TP0+J?FhM2AJnmtEiQlvP@@+bJ z2l+)?fal;c<^va~R@%+E%4W(xl0e!rGW2(h*C)5+7rpBq5Ko)y2AQh8d^#}n=gW0e z9d#(Ko(?8gm%DXaL56J%v2CuFy>w}0*z8paV^ukqV*sQJ!RS|mnwnxF)utC^X~+Lr zH@14IDm#FplpfgcW`pjyW4Ez9pF?u*p7e12J|&00)Ekz$8)d%ycHJc#GkGmSKE#_= z-f|1i>ptfbkg#gIlI9#2q=EuPB?15dm;j`wooFIjQ1R)&j|>2CJl!35d7QZAYMs9G;4dazg){3&1x4_@ zk4O$=DkrUY&QMmrZxEqRsC^-i1Ac6ewT+zPYCJkxZ1*~z-WP-_d-%_UlpHg#PjnBY z?iqbP63Dr7^BxzV3N{?8ti_^k5dE5+5nBn*PkhE?k$R`i9MROTWcDrcILuCJSc2-( zj28P8o`BL6GKjs)>dZ$;Za><*oPx#`r9XwHlbeztL|q~v->;YG{CH*)gR7)cHFHqV z^*#kHFqVs@-Y)@4LlccMJjAZ_5OzmJ0#g}#mtd~AipFd%8VmBdlRDI!*e4&qrEAj* zMC3LIc?&^i_`PKZ#)xq?y);wp(o3Y<0$(j_ibaGCtbNITW^H0x-Rd7>-rcSOf_#$& zZ*(5!s5d0YU?gn*3Gj!Aa%GCcEd$keQ%GX7Mxr8{waiK3S?Wnrzpp>bm`*M2qM zAwPBHKblf5CZTlx)C@M{BtK$mXri%74-ZlA@+~VDVhH_t<~1HFO>1RYnQS8t%>ib9 zOK{C>GJ|F8s#lYJDcU!?B{yie``8Fft6ZCj&=aEx{{V$$j3Og->dnIG%);0Yu`~NR zHeNdG&StqZy%ZWsQh#st#~GMMplUNN@c5UgdAp21JTNVzf*)>PPf`qnh8vNNr(TFj zQhB7y+Y;WVTT^nbQCP`GB~1IBG)j>&NNeWWtQr96q6hrM4JCWeL$WsxR$I&}OT4Cu zd{Xx7oCbbfAHA-&gReeszlecR;M#BEG~u&m*(cCxT~+%Hzk}@Cgrhuhwl zZRw#I8ir1`5ry6fgc^jPGz0!q3;-C-sih^s0sw5K004|9O-EaIcUxztL;Ypv`9?zM zv9ak@IokO5#Dm$NHQ`LXVFmWW47>h$6sUS;4)k?930hD+>)A)i$Yh7T_k5Oq=W1v1 zlEr=Nr|v-SHL6{~q{P$rC-*D8KyLKwPHtJoS+^@~Y1RklGOG|dw(XSLZqZTAok4Z z*Mr`IJ+G-3EHE~1!Z&X?-B8jNR%#aVSV^!pTji00mEK!UM@JTTPk(sR=-VY$8vzB; z3rx}Yd<~2f2eV7K`37;?O|z01COON``O;*e1tleNl?@Yw_N>m#V5#hOo7gP!sx5Kx zI$A&r5X-DJ8F;V;D|NRh;k3mCrfGyD(n*sRpF~z zjice=tQ!h9+SvG&_!wFc^OdC48A+-O`0P$un?t$m-CZU_;v7;I|F53q4%6IiokUPA z?yC-?B!QCe#Vr}l^Eics77f_QJeY@ZoX??vI<2kc3B^;4AC}cvD<`2vYZr8|2IChB ztR%*f5k2AIlLjq`FLiF74)fEisDzt-gDHyr2GfwFVKXelRx_xGXVK8KfWuN zHgGyKC9gOvF>U)Oq(a3SSB9_=*xRCQ$!{hcb{UpS%K>xEcC7*hp40T57G69A)0ab2 z9iEY{D-2Z&Fh+-j&3ue3)mDn!*fkwvZ(RaOpS1?0Zg)%vTQiPIMr@oC&volYf9uqA zH_OhQ?uQF0$Idc;@KjMyo<=`D5l&@eQ%Aqn4l6?Osi&H=2RGWz03Rh6H^v#a3b=dp znGivYsu}flz(5>cHA_KJM_~QA?mFiW*P5_&izX5=Z} z)>_Sm)Vbe169~+F%j{gD5E7SaK(36%zQzz}4WTep=4U*+TdDe5+9lfxx}XK8wRGT> znXBOfJc5q0HPv!Z_9jEH@(!{T^>l4!;=<@BLTV8$R#ElPrCIpWj^9!H2Fc+uKtS5#p3Eoptb z_Pl|HeXI0s@dbC>3RlX#rZ8cY`g%~)HEtc&aF{S`o_s-1qVol-UbibsBn1BHtLXJk z-DHo(XFPI|Oq&>hqto59#X>dwu0_WSCL9WLK)?O(@CW!_9G!CuRG32Sdvo)mPUU8K z&c&cAspiBTSJvj%E07?(+hpgk13N4G6%ggVi{OS8sBa)5iK}+8b!OcXT^-S88w%nL z>3$w2=qtS*Tt9UB%Xwn;K!j@4PB6BsBkrd@##?L?>QVGXdq305#NVOPi8RhJXeNao z=`@sP#Nfk`3ajxPC>-6n@8Vg3u~=b(fk7=PU}X@)#HJVb*j{h@1#tx%HHesU&4}6N zJ9#)X0wtC0Wg@zJ4*YgMer7&XU;Z=WWn1m&+w32~aoH+!bNEdVUOn+XE7sR|ee}*D z6$u#jX_1vLX1t6(ga9#`s1~$?*WEgrIUBG0wZ1`m1rp_*%2s<1bYO%S!F?UYOyUk=m{d|L6I>)n1NCB-F^JZr zB6iO)m?>!jp@hE!-S@)IU%j+XbjnFbMxAI*TNVvmGaHB?oFqjO+(lz^3HE(6A^1XA z9YlyaY0C{F6fV2ez|R!n&7n^(@#7g;jOP*#DOQ)$M1_CBE6AXLzgAK@h%F&Qwp|)> z?Vy+_UF#TYKitA(nn)BO*1}Nz#J$|Axrr$|$sX)A3w77dXwG+H_t8PV^tC*B{^1BC z-woeFO^Vx?+i<@G*(sU#{wFtlS-o%}qj zh_tLJgJW)*szZP}b*kOSma5T~*QE30d!&<=j?twrqvtH+Pf*S>+(xiDFUujJrXTiv z=+vm10g9J3McS&8TRyddLedZ{R%>wlNBP1(4KIF0&Lgt!x?97>tHg=b#aEniU$X*L z(;3@Ye&nj@%tA6FKZ{6flN(C4Sv$;D*_oJBnC}e*QA;47OgS(N5 z8#tPG<30UL*za^_6;9;;5Mjq=l)`+8#O(#v_XXMKr%wLJzJxH=ZOLJxljdvnYb3b! z?Ki*CsOj=(@YN&JZz=nO;T`wc096b+VwfDg2gFyE$>hobviUOLdacAl+^bWI*$0T0 zi8|Z769$ZZ{U{ney z{PHIW^ylk}pKqG7YdGXarSk+33TE{tUit~7bjlm`i`6OJaiP5}K_|POKdxhV{S}zFm zcu8wG@M3X?NPi=AqQHeLIHvvdM41bE$m?Ma&}BvLKx@mMVr*U=dWC1$Zvv2sDPL71 zAwFZ8Gosz9J1OUr@3NyOsxs#u%~B`F|9*7a9Y}S-bh9ze!t+;7sEXFzCF| z%#!(Gd9@*!+=INYD%)>#%cm4$Lbt)VJr%E_Mu!Y06bN4EOyucSFvfV0AJKr?k*Lah zLW{w79Gpzl83c zDt`c^CM9uwDcaOW3qgm(#)H0y6vn4Pm4S>7!Kr&U4HECyRHa&noWX!x)_acO!BPSg zo`ME9f6WYdhS)K^Rbm|~l2BG(`aw#6q7-uZOqigIvcA1b>`mBEDEpVa=@drM4|y_q zI=hCy*cm_}-^>I0%4x2N8fob&y2t~ZNr&<;{_d?u$^mm1GfB&Q1p__n{}-mLF0I=XlP)0duacktE9oJ#}C zj1Pe^mY5$^cbZ&aE?B4=3gDB~e3IegZM=5d_PT}KrK^jrqqz^YpS|1MYgat05t5s~ zDLASqH{|FzCL;W9q4m+M{Ir!E1`&xTw=^1STKG(Q>m#v?trUV9El}@rpCmWf|85+3x zr)RRr9N%fxPGvw22znl?zv|CNWv8Yo-$q&Xadr?-(zK;PzDdsWR*#X%Ufvct&wI4T zvJ$YKzY53My*OR`1~sy*ZP%0!vNifhPVJS1er==RHDUBy7$M$vr8Tb_0J~`4-PXBN zx4Pm~*x-kirR$8?Fsylpx=PBDc?`#-ytuzFRQpWbFnuW_AQU3_IMvWGrB_k2)obxE z``Ujp#Blf}>}KNu)q|t3LRPGn8hp3q^OK2H+O?>}Zrwa>5vmfe#<*LhogA0w&g%1k zQ}^;WW5_fIrSQ^S;tinc9)4QE2w%M~3^gn5puNy7kC*=TO++63^>)mQ9|jjXG9Ts^ z=Uga7bZ0u$8TLpQ#8j6~;odqhAo=np``in2gk`KP=0V4;^Z%eiNq)4^=nP zZEew*lw9AxUq^KJWSVxs#uBrB1dCqUiK@JieY|xs;{yv1frYHB@-wz}pyWC#y@h9u z%GriEhH{tC8cMka(zvwNKZ8IpQQhO;{QpC6-nxpCre6~!pHf?s0~aCR3OFXcq$U6%wOjJ0j2PC^#A|> delta 6056 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%0D=&2rhMNjTq&c1&_#4Nm!i!;^TkOsee5sLHp# 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 delta 6021 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 diff --git a/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Scheduling/SCH-001 - Simple Scheduling.lua b/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Scheduling/SCH-001 - Simple Scheduling.lua deleted file mode 100644 index 9113e32c9..000000000 --- a/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Scheduling/SCH-001 - Simple Scheduling.lua +++ /dev/null @@ -1,8 +0,0 @@ -GroupTest = GROUP:FindByName("Test") - -TestScheduler = SCHEDULER:New( nil, - function() - - MESSAGE:New("Hello World", 5 ):ToAll() - - end, {}, 10, 10 ) \ No newline at end of file diff --git a/Moose Test Missions/SCH - Scheduler/SCH-002 - Nested Scheduling/SCH-002 - Nested Scheduling.lua b/Moose Test Missions/SCH - Scheduler/SCH-002 - Nested Scheduling/SCH-002 - Nested Scheduling.lua deleted file mode 100644 index f15b78df9..000000000 --- a/Moose Test Missions/SCH - Scheduler/SCH-002 - Nested Scheduling/SCH-002 - Nested Scheduling.lua +++ /dev/null @@ -1,28 +0,0 @@ --- This test will schedule the same function 2 times. - -SpawnTest = SPAWN:New( "Test" ) -TestZone = ZONE:New( "TestZone" ) - -local function MessageTest2() - - SpawnTest:SpawnInZone( TestZone, true ) - -end - -local function MessageTest1() - - SpawnTest:SpawnInZone( TestZone, true ) - - -- The second after 10 seconds - SCHEDULER:New( nil, MessageTest2, {}, 5 ) - - -- The third after 15 seconds - SCHEDULER:New( nil, MessageTest2, {}, 10 ) - -end - --- The first after 5 seconds -SCHEDULER:New( nil, MessageTest1, {}, 5 ) - --- The fourth after 20 seconds -SCHEDULER:New( nil, MessageTest1, {}, 20 ) diff --git a/Moose Test Missions/SCH - Scheduler/SCH-002 - No Object Scheduling because GC/SCH-002 - No Object Scheduling because GC.lua b/Moose Test Missions/SCH - Scheduler/SCH-002 - No Object Scheduling because GC/SCH-002 - No Object Scheduling because GC.lua new file mode 100644 index 000000000..44e3b4ce9 --- /dev/null +++ b/Moose Test Missions/SCH - Scheduler/SCH-002 - No Object Scheduling because GC/SCH-002 - No Object Scheduling because GC.lua @@ -0,0 +1,56 @@ +--- No Object Scheduling because of garbage collect and Object nillification. +-- +-- === +-- +-- Author: FlightControl +-- Date Created: 12 Dec 2016 +-- +-- # Situation +-- Uses the Tracing functions from BASE within the DCS.log file. Check the DCS.log file for the results. +-- Create a new SCHEDULER object. +-- Check the DCS.log. +-- +-- A Test object is created. +-- It is nillified directly after the Schedule has been planned. +-- There should be no schedule fired. +-- The Test object should be garbage collected! +-- +-- THIS IS A VERY IMPORTANT TEST! +-- +-- # Test cases: +-- +-- 1. No schedule should be fired! The destructors of the Test object should be shown. +-- 2. Commend the nillification of the Test object in the source, and test again. +-- The schedule should now be fired and Hello World should be logged through the Test object. +-- +-- # Status: STARTED - 12 Dec 2016 + +local TEST_BASE = { + ClassName = "TEST_BASE", + } + +function TEST_BASE:New( Message ) + self = BASE:Inherit( self, BASE:New() ) + + self.TestScheduler = SCHEDULER:New( self, + function( Object, Message ) + Object:E( Message ) + end, { Message }, 1 + ) + return self +end + +do +local Test1 = TEST_BASE:New( "Hello World Test 1" ) +end + +local Test2 = TEST_BASE:New( "Hello World Test 2" ) +Test2 = nil + +local Test3 = TEST_BASE:New( "Hello World Test 3" ) + +collectgarbage() + +BASE:E( "Collect Garbage executed." ) +BASE:E( "You should only now see Test 3!" ) +BASE:E( "Check if Test 1 and Test 2 are garbage collected!" ) \ No newline at end of file diff --git a/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Scheduling/SCH-001 - Simple Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-002 - No Object Scheduling because GC/SCH-002 - No Object Scheduling because GC.miz similarity index 60% rename from Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Scheduling/SCH-001 - Simple Scheduling.miz rename to Moose Test Missions/SCH - Scheduler/SCH-002 - No Object Scheduling because GC/SCH-002 - No Object Scheduling because GC.miz index 6f0eb2ca7cb1e18896e55b8ef4836786792ccde5..d0650c90e6915c37dead5f4ad87990a27e1fffc5 100644 GIT binary patch delta 6145 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 D7)d`e diff --git a/Moose Test Missions/SCH - Scheduler/SCH-003 - Repeated Scheduling/SCH-003 - Repeated Scheduling.lua b/Moose Test Missions/SCH - Scheduler/SCH-003 - Repeated Scheduling/SCH-003 - Repeated Scheduling.lua deleted file mode 100644 index a5c9a5a82..000000000 --- a/Moose Test Missions/SCH - Scheduler/SCH-003 - Repeated Scheduling/SCH-003 - Repeated Scheduling.lua +++ /dev/null @@ -1,16 +0,0 @@ --- This test will schedule the same function 2 times. - -SpawnTest = SPAWN:New( "Test" ) -TestZone = ZONE:New( "TestZone" ) - -local function MessageTest() - - SpawnTest:SpawnInZone( TestZone, true ) - -end - --- The first after 5 seconds -TestScheduler1 = SCHEDULER:New( nil, MessageTest, {}, 5 ) - --- The second after 10 seconds -TestScheduler2 = SCHEDULER:New( nil, MessageTest, {}, 10 ) \ No newline at end of file diff --git a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua index 171d0532e..be30215a1 100644 --- a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua +++ b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua @@ -31,6 +31,7 @@ Mission:AddScoring( Scoring ) -- Define the set of group of planes that can be assigned to the Mission object. local SEADSet = SET_GROUP:New():FilterPrefixes( "Test SEAD"):FilterStart() +SEADSet:Flush() -- Define the set of units that are the targets. -- Note that I use FilterOnce, which means that the set will be defined only once, @@ -132,9 +133,11 @@ function FsmSEADTemplate:onenterUpdated( TaskUnit ) end ---local TaskSEAD2 = TASK_BASE:New( Mission, SEADSet, "SEAD Radars Vector 2", "SEAD" ) -- Tasking.Task#TASK_BASE ---TaskSEAD2:SetFsmTemplate( TaskSEAD:GetFsmTemplate():Copy() ) ---Mission:AddTask( TaskSEAD2 ) +local TaskSEAD2 = TASK_BASE:New( Mission, SEADSet, "SEAD Radars Vector 2", "SEAD" ) -- Tasking.Task#TASK_BASE +TaskSEAD2:SetFsmTemplate( TaskSEAD:GetFsmTemplate():Copy() ) +Mission:AddTask( TaskSEAD2 ) + +Mission:RemoveTask(TaskSEAD) TaskSEAD = nil FsmSEADTemplate = nil diff --git a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz index cd32600fe3cc9e2336acda61353db059b3d8d0d9..6d2b331db63aec4603cf889544a2ad750ed8d568 100644 GIT binary patch delta 14023 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 delta 13567 zcmZv@b95$6^e!436Wiv*wrx&qO>Dlg{l=3_Y}$S?u%xdp|3=GnsC_r}xL#d>?i4ax6&)hnwLz%2mR7r(F7e8m#^en|aZQQLG3v1pV z*_Ve;&3jRKV^eOdBU=ICjDnK8Qux}XoOhn6?$We_6Y7b&6Ba-sMsh&yVI9di)L4SL z{i?a5Wvx7Cb71{axWRw~sTfLt$*%`TG58OCT)v%NIE^;)=0wX^i@$bmco|Kq*xcdp zMc92gtFXj@x=DjTROQ)u!}+?Ayxee=baqHF2*EAU40S}m413)8zWfL<&4ap4@q84W zJNWDuEiCJR&$DuN<0Ags`ZOZCPDoU4F=Um3OoJSU1++bt!Iz8q!6ep$+dCy6soha- z7-A0}?8|fsAhoi(b!QY;2ojYtOV$<%@QYClvs5+pL-bIRkn==XJF|yC_z{?iA-D$A z{wWHGqw=&v#P#@>*?3d{8wTqVg#AJ*+&IF7!|QXN9D$`@6AKkaNsNe3P>ejTc6>^< zU5@I~Ub!=GKjwd>Nd!5OslU{jt~`)hPHxjhGa+{J`$1VbG$C6b~K&4H(w_UTe&M->*7VOZbtUh-mePg&H;dk|uAp>*p1 ztl{_K`m=3Fbj~$HlBEZAM%QQ-Syuw<(VbI9g`9VYTDek|>J*-ggpPvwhzkP^vCR+I zK#l>!k{**RGsAAyWuJerNKO|MN|;WGi+`$OV^+NN~!r# z&QvbcUvcs6B6}$ck4`Ec^B37}Sid-61rm~A+`}2yC0$0IIT>tCV0o25C4S|IxC%u~ zTnk0gNF6y!fDjTgEy_k|*>R#K$my8Uz`_3M^=1-9X^g7N^Lp5UDjSvA#0f+dXg|n6 zt-rE}#)D%$o5iB%GEIM|vn6O8N&4kr(B~O643*PV%Xbmj-}1;1b6}vkazzecqmX!q z!VXCDals(^BOc8(5){eQ_w{v3@oKE4#AwU_eh|gZaf5ow1JMo3ze9`J-(uPF6BL$N zB!ziSS=Plyvl#Oi%FoX-o$R4j69F#2`eyt!sPuezDjdSWQlGQPLnX`U@=Z*MkgV1! z0ilzHGz2Zx)cnZ-1bgI0YwK}`ZwY@_GBwU!I0PYs=4UVvHg3iLyCZU{-8CM?RQwpPC1Momz(6LJgQm7wh`IPvt{;xKrzrk&Hee)- zaB92LyKzq~0MJ^*+fay@7%LC{sv7w#mDa`LR2l>Em$VYgPfYllA9eV(>lr=PN=rpa z^~t~H*t%Lf{}$A?bpBBU?2+G`fO<~#Eiv#52npFjQ~0Kp3Q3(AB@J`Z*^&2x(4ozZ zJNoml_wUSmySz)YGo6|H5P|X&!|k71uMV3)m*$9gc&za9paZ)uy15M?yC8C~ymig55puVjZZwWbfOyb>0xbz>7pHb5)}gRnMo|ok&fN z@OsMj9%Uz!VIlKi8?{-?xE@O3RqZI(4^TkR5B%$+-53M?0jd^dU>{nJ#W8E>?$)M- zkOoRC1UZ+tWAu2$0N_1@e8+DBB{k|D@7`51A@-B0{O7vF+;eU_B4jH0V!b(jfXtIi zJ-qAb4D}O$aM}7c(^h<4yogP%5`G_;V}Knw+*BKv-mxe2)&(J<;~oMiUc+7eXj|4w z6i>O%>L7yx!Q~hq$Atk;J#Pi0PwIVxTTWPXfG?6joMloqy+dAoi&xV-e$-l67>L#W z=rfYSNO-c31Hkhay^EamJinyw;6o&yMR=$6Zg+c4vsF}y|b=Gy3BFT=J zf-=I=YYUSA)V4vUe6xtCtK^R?!mBV`xT1pM5xip2Ch?+$iV=$rkO!B2nsjVsklUxI zB|1RW>>8;+eYX1T#lYrH-u+SpGEJOucgxyCxp22*5NZl0t|6jozLY~uE3?6LsW|Tp z_QC)zPERxnK&)ps z0RU*|4sj7Qz36<_O4&;_f%o19^0wF3ce zM49V}U;1i`VKtJ+|Kn{P8yl{A5;Fn(7Ci*C3ARVL)n7C~?gq`dn4qzTz=doe@mWv3 z^-a6@E8gYytBX9V#mM!}sNQM?84<(H6`SmrX-lyFKcCT0sVm}rh**{-THP3VRxkp8} zG651Biw?qLSHNW6Loo1bpf6t|;4p4zX25ZM@ZuwkRGMhCoN1pu@aeQFv$)Vk@a^Zb zf16`gO!pYzPUp$?0!rZ+wk_gi%9VX~H|GRrkrPj2Qm*qY8{-D0s+z@MO7QSs$KM3I zwYPu5IANjBgF3bw+e`J+RSp^!f9#2luC+@!d_HrGIo(+@EwS6u>>5_~5g!g%0K zU2#K6yX5@Rs%UmM?>TxR8HmFe7~T!vn~gSn3WL%n{=)}=mlVD9S@?dMTKI{<)btR^_YK|$yEvi@K|l8 zjrCE=QM}z7OmE8DdpC8#0nX#i`-8bxF`j=0q6^BAJ#FO=ZB&@ko2B*foL%LrN9U8$ z4F3qDs{Y<|FsO3?0pta^mZr&PEzdR_?tjcyQ>EmHH`~o}oLGxO+0QLe z+5)Xm_A%}TccDlPn^W(D;Zx&H5?i7nhmL8q`DMs_v-dK3F4_SMpDLzUtnr zR}e)~IX|Hdz`Lg_V}-f0fuVhR7XvHCc%^jR(~XUto|UZnFDKg~)u^|6Ryv16#%4E8 z;S0Nuj=!mLG8#Eoon>#EM9WW2Ek^%{_ZY4&*w%R&{^t3tGNj@?^)sjgXN5fX+G4^y z<_xcG_Y%AOIp&_G3PCC}-Mufo<%;0pBOWh%V&u}T08Dh4!56%4<+j&1RBV(#)1kK^ zw?XTw+I?=^?4?2`DuW!E<#Cio;0u^1F5!3BP`DUyxHJbHF4wmww0+Tytx3{WRjw-0 zsRcc5GDVbZA=D({&{>Mbf==7ZIjNpCV9J90+Y-S-be?+k$k zt{AyqK`?&LSEc2}7|oYYPWrdk0l%Q-eAk^(6X2lx+zQ-3a`b}wjCqSVcDBK)=ver- zB3d9ED;}MiuY+rE-1y_gh~vGZJU#TfKKsLgFD@&}GSQ{AIX(nl=8lsGk)DF=Ycpun z%h~(wgySVV1uS%P;O(n!Q=(U}eJ0V9>Txz3fM$KNLW;zCn59T?y@Sp69vH4FT7ok* z1+XwbZiGV{bHDQ-s%;Ycn}k4o#Q$|M8kgT;tR+ojL*=ju(T4VnA}RkD$BO(#>ScH+ z4)bhB;c5GMM>;m-x4gwaXE&WM(~!c26WQ&GrOUuz5%My%rul`-3mWO8ZLZLRe>_EH zeN&Fr35KA)gENH$abbosTRERhEX9&tttz6W#VY(CnW47#uoJRWh_CotV09G3P%as( z9vOir>Gfhu`TrzDoh4Jett&ztv+9Tx-iyyAR|q=_oRbVzvo}MWGZ${n7W6y>itZ6{ z&(J#BfDod5VD}$D5m7OsMI*{k)&p3jIDN;LF`pLuy9u2{iio4tc08`19iD!`LQxyg zA|Q$wH`uKeP)DI!k?{(ie$iHo2x#?L&`env)5XCkEDv$%0o$4FSKzumDRI zCfA`l7TUYw#?t4ArSxuIu3S(uYqoh0uM~-Acv__1qO`y){p?s!@9X?jt!Ow|Gkd9n zy19RQ%xay2>n~^NCspo>viADXNU}EHlE%66duA6^K(jA@`xAKcz}dj;8lK9_#RLoY zQ^3{lfAcJ~{aMy(F*ZIHEG*WXxLHVz0DoMYdQx`3_1TJk z=ZOvTpe|ph+~Ez+$ano}>5?UK!*JSe%7D$2g6ByuWiV>$hf>^U1@!~C72e)TIvUQ5 zq&|bJY4r44@{omcv|Ytco*hNN@Au>EcAlN2(pU8n8-7eH$I2zw5fU5hNvq<@x z_sdtpHjm=ykicqVPNA}{8{018EUTo#^yaK$){WP`R|wBuGIA~)PBq1B@@cfD)_!)@ z4NoVag__+F%&v+`bSgMyJ)0g&covIq6L~xf!8THz$dpCx+VwMSU@6~16ml!&U1uyC z(^h|RE)U_h26eVrvsV!VU|eNCGkG+*Nk#L~=l3~+OAxdh#u(+%!i7`sQfW}8aHZkw zL@aj-)L`Mzdy#TL<3BCh*8h>g%ZTd}m~+W7N0DLpu#iwUHGdEuZX||6gc0fkmE1xiVcYICDfeyb`0o{jRxhDNQy~49sd&}4D2A_Kd z*+c~Flq%kdz{9VH`|((+#5!0se@bz)>mW%dUCr>W(kt{#a)%`CbVEl${aipo?W$A# zYEuP4eA(vpWJQMxFhVaQ(me6!ktVUKYHimM*{=%Y3IW?so9dtV8_rzP4RBEI508NQ za50>H^`2^2;OVp44J$y#r;Gz}+DT<@`}9@ysBEs~l&#wS=ZPwdECx6h;bJ4>ufR{=rw`hF2!?KoYz=WiGh?rRyrF-U_tDS-=$giTeGso-XeD&1V#Mn_`?tqV z)9R`PW&UD2uwBfPk+eQV1782Wsc`KKCx8FPkM|x63M5o*{*#TZBcMcFkWHuIk{H{9l5tmop4jh74J`L!)=;Z4UKEgkcW{Z$3t>@9r4 z{K5dYTI%2kdne`lQU!kD$I1T+mH!n0fxlOkVbHeb@{d&s?!i(WvQen3q5%+uI>MJ^Gr?E zadw|ep-WgQ>QVm9@bD(>MXGT+fH44Y*Ml@U(lk_-bbH-q85&i)+3zptrNp9@HF$UY zZYf2=xPa$YFOfRVr9#AT#gz<;^x$pU;XJGiLgOxLjKvrgp!U-upfe`Y7>-;HTc{;{ zG;*y7_x-;4^4YXdrjca3=`(RabcnNzu{~C8=n4KBXrca#{X;8zLjeYjQ1}BdRk9!0(u_l z8mSRQi9m6)sW9b}f=eE)0)?96BL%A4h;EEScRoRr1tbTdwY`lmmR5`I*Y{-{EvJ5 zmalqe&AYgQQ>>C(@K_(2SQleP1|PQJ)FIxD4~@{w5p*A5y?wx5WsUDGysuvDPo3b1 zIZ$Dx)wyQPBjhO>u@H|x`1W-$7*sAW%JLr@kAR2q<=^YJu$EH5BQ96SX%BB`5zD7Z zqRHkZYD}GQc*hQ|SancFedoZIHao807d1iLaQsBE7OD_s!CIY~_UiASKZb+$w9tjD zofEZL)&C*>m6@j*xIV&u6i<^GVf%oQ5fVAK`>Us?HYGb>Y^0PIYNGLTs*IseEw4V~ zSs1X)u>KaHQ-NvgrPANOzE#=O3yn>DtVgslA8LH*l0vu~EP&7SVY#8`oi5>MNd3kq72m}|w@(lSYiTAMhOot3IzddrU~6it@%B7g&5{vyIi z(7JQwcSQk{cv^@!EjlR7<0<1-A~>=797O=7oM0h@*5(A|qZEsS#xnfTgs0<$qa_KlrjbFbyqmhFJQk9gk+w%t0B!G6Od_gSOYqB( zDG0Z%u?^YX=_B(cmU+?N`~0Rt@vO7!%lbm{7nYWgK^h9EA3w`jirSYan*9tF4YJ(b zTUa^@69aE*;Gza75Q7~#oZm#HabN%}MzgRa&zFrgWCSbjZRV>VH9s#l=ti*uXg-Hf z%4*^x0OJ-b$yYs$9EP|}7ytzp%323#I<{&Y@dcw+HT8-x~RG;slnlaT*<* zhiFsSP5lF+xB~zjx2nm;$k)cL)F$uLqvM6sn%hjGWPgVo2;g4N~hv?xBzT!J)K#qjsooARNxodlRC2%T)P98RQiHn_L znEIA%O>(fU9ai&{S5alm)7q-dzbs0HHqq_5#;aU#r?H{Hw`T)&DybLCkj7CGr2WyM zb|UlK()_Bze~@&9TD!AQs~vv9`K=#^9&{87AlJb!qSn(}+yej@iBI=_9RY|-^Zc@% zAxUpJhhR#Dhnm_^JXf~lQT>8mnTI+qTQ1!zvP4!_QAvamGO%h^^4|py{X`83;`Drl zWK?_=yTaszR%JV;d9~`6e7Zd*)Ik=5qiVotWzzx+tAhcHTe$AD)E?fNSf*j7x~FR0=Am21eUUu5o(&#=!~e zCpPScSvgo0JaVn+!!{g9ffsftc-)8f61@)5$zDyEx(d;^ZBk>a=ZK->Ntwv~;_JC@ zn7Jlu%V>@9Y1qw`5O5?`bOe)O!=x!ymp<<6OHPI;SvH>=ui{|4II-wQK+MQp`Gd&N z&U;ErgHKc`29qj_-!`3KsSZ<=BQ!{0k;FJ{(gv@uyLPXyj|QzH&8(HwCqpcjYvb{} zN$3#?sTS$W2gQG|PGAlmhW3y@`J=>VoLiK0PPng>5Ll&526_gZRd&L5Fd;g0Oi~K~ zSJy%$G_wrB-h;N~*|0zY>Z;%ZM8XD`pxllp6^L9qiQGm$jDG49m)&QogPJ>b7fC@7 zr@21WaJnyS{0S1Lp@$P`=-GT@VaxwgA6pGdQ#3v^69Wk}OECaOC85Li)6gTxV20OD z!DeAAbM*GhO~3{9pvOs*sRf|UKVqDkcjpNWf=^KESw104hMH|5OOka0s_%(|!7!Sy zl-mwowOu8%MW&0-tyXGjfF)`;)frH9R~oDhte+s#EmeI=1O2o+Xbw`MN1m+B1Qce( zBL&7T3T_ppDd_+i`0fJ7ZhH~wKn+b+d0$fivz%)&i-*U-8*((?y?@CdOk96esdih2 zG9;sxBOqM%Pnl4dcCHMdqH}~exr`0Qh6-+7SpvJfuE)+Lbqin_@JpWeB)CmUCJD7`mPV~c^Ma`EW z#J4Ul-4;R0h(Rl(#w3PS9zFZiP$<&99zlMHpTk1+09c5OO_2pK5JFwOKOE??TKNTt zueecF0mCe8ft*5}@UoXdjdK|Fusg=z9H zWnV}Np&_X8|DI&zq8r04oVYe_WtaX{dXbwN%M{`qfkn#x0Or%RxhYZcH*dH+CeI8~ z7e?cD>W28dj&lGU#OU31Brm4tet=Zi9eL4rP*3L+DuG#E!=*brZ77$B-d(yWtAx8zhY`?`9YpwZ7c>a#>UP%>QK;U>;MBUJzKKqFv}{ZdZm4X^g7ckw$o^k zG+zW#=VBN~1*%j|`eIf*!az4d_s`=*9R`?h7zeL#4F=es`Ri!1S4)d`K%x}lx}ywL z)-&jNTEtyL9nvTio`*;k`JrBXFl`x!;B~vI;9}U?`Levc)}w9vccVxDYID*0@8@7Y zEj?l?+x-iYjUUEeSwrQ>H$Qsi0exwU9nyUBGMz_3mpLVs1l^w5CO8G6*U=BCl_`x6 z21_ob!4H5rl3C8!-cbNQ_OK_h1SC{GeoNo!zA`ji0-+b*u{udjd;krO;)qH}li%DW zZi-p-!e3Jn!^pK)m~ZFysf09${MqXOXA_VJX zBKzhCgDlw^33Vw9Rz(s`)Ew06v3oxp0yDjg5j)^Vo=~Xv_ZNM$jsqi%xb_>V{8+<8 zd(A9#WQc2&OJa#^Lf7lf{T z4&F7vA^v?@DHKLGsX4lIvJ!mxG{>``rKSN$qnI0o zz=?wdYX7>bCs_T{Z*>fOa?v^al9x{Sev7^w(*SIf3%fj>(8@!&ZEzl=U4LwRn!STx z*A-w4t6q8T)$g$kKI6M476~xZ7bB*j>PK=pz|4|C5~MfOVV#UiW6rJDfYY$~yPC)+ z8ot?S`O?0Taes7ov0DlA*+~FBE6<3ZeO_56NgBLX-JhKqXddqN%I?RMPYr2hq~l-= zkO8>z!TW#Hr@k600lGa@WtcR+IcQ#KVToWnQX$DZKSKW+)cKFiOJ-!Sf@ufue(Ha3 z`oG=?NH`_kC9BmbgN*c=R?5^-NOlzJS?f#)HA#BI#c{v7j3m_w`cna5-oYEP-zGT# zMw=Zzo`)XSQ6m-Mge$p6h=KvF32V;Vn8 zz^ve5cTV=Lpnc>-J}Ze(9F+o$8Vd3r?3 zZh)JC@)BGNk*7qF~X!8K@IF(kjrby8-14v;?bY@Z_HW%+S z6qS`|9UYv;X34)bV51n67P^zVN?F}< zNHQIR%n+MI;!nDoF#J$W9^9bBDeN#)tT?!W{X8iOIguo$^E!6A`jUp%$64 zUVi}kRS`~xP*4Q(!bN13p-!;2R;~z22?~Qix^uQw>AP|PPJxOEjtDm1KJbSG28*4i zM_laI^{rh#SM93+ca#b(@#Iqv5PO?az*os^3J#JM@3!C=j6cu!slnPdYa)QILY~mo zlG3JVqifUP2LUOX+k~l!83p?oB)#2_qgennPYi*5qq_=SjkpP+zEQH%D0l+W&0Ou~ zTZMe6D*M@wP*pATB>D^g49(^^my5^?5?A2o*mjCDU(^7|?qEA>JYt8sThWiST_dJo zTBX1O@$L|Y>BqnxU-zIGtiGnLtb_IpJw*XyBVRa(5w#4qxGJKIaDMiuHwz&dHEciz zWd$QIyQ)8_?rybTsyrxeXcM50Kd)?H5O&@&;s{u=7@?toMlScD50=D*+2e!U9NK)ITDywP^P_`Q z)`H3)J?FlB#3?xCK>h|&gWhSeKSM5OVivZVg|18vahAmNu4=he^@!E4O1f$22Pj_W z5hAL1nb3F>cQNdD`ZN9e-)>gk{@csSpsQV^8x+$*$E*6NpzQH;3wd?#0h%)IK0y95 znMpC&m{hWEPK2LwcEF5+i)a zlju+dHAwXGIl}nkNVBj2cC%D65~dK>o)Q(Ph5IX3Uv&GS%G1pldKsF%NK!c7i2dOE zodS!roo$=JIg`iy#d^Uoz39X|bR*0wp8vMT1SOg18C7|A{@wm4mJHl~WaP(pWN$v* zz_2I$GS|(DJ-7#8lcomYX12w@$m5+AxzoQeF>uj8)GN8(5(`GTJiBsE!n8MzU*WAaq9&b~#n{DUuPcr>Og}xOFn^fP)ltw77A*a?} zm5RE3f9Tq%mvCEpmX~H`%5)0FmB-}BG^$4BO{!%Y`~xR~L7lKt$FfnYveD7>O>)Ne zl`YWw0Fyvvx6e|Lx&jp+SpQ#_@7grdkrqm%J^n(=HV9uva(NUHwVnbC46-wNXIx4l z6x+&&+PFKe66_Vx{Ih%X(cs_2nZ!k_FdynUJT5#7lYoN>AHk~=F1i_8!AM)Ft^-B0 zdO5y4+iARTRCVz*-^|_OkeqENIz3~yhPsd*pdLvbAHV~f*3cB06*eA-iCL-zm9t`W ztGGh2NE6=YHI2R_WE)M?a5BFruUa44S)v&GspQfY8K>dXbBG3gd)!Tv?V})!ju}`q zg211_O{j30NG6E%$Fp1j?4U0NKm4{3WQ<@j0+CAfUuKMGl%#Z}QcmCLwo3rvi)?Qa zz%^R72XnD38eOQh`QZDwWp$t@cm<88L!d~+oB!qq(Ng{X<@@|Xg=lvEHDL_4f}=K5 zolvyP+q3e#wO8aS-8aL>(fS6kUOA$GiRt7d{~_uM5K&Y(Axgo14KzrsqJCcXa!@c; zU8rw#Fz!yIoiwbN)(~)W*)RA`mww*s^-17k<>6JKiC<{X~GU5%~-?8ipz4yO) z%DEe+RY3)5&u7b!gZ~0^$0K_gIFudKB77j|e#&E1yGkOVFr^$5NpN%t696j5T!AuH z&5N%P#)M$kK_!d8i>Bf>i$wk#GpN__!CDW0Fiq?@O!{ysDO@hNj(<-c*tQG&1eI&h zu&0NjsZj0C?mc~^5!+9~*R~<8I7O-Xuc`uxZ#qh+gyfp@W95hSWq0R`wHq;xe;=*s z3Fzib6|;6rhwNWyg=5s6;sz0wdBx{pd-#P@uf zSCK3+xzg9mEQY7{n|b;6GZi;ISboXl#bGqUSw{DvGLh$kOt|1g zj=fRTP!Eb5Mu6eO?+wVC*^>S5BQqn--hIomc9@7T^^UdegwVb;w6`Ml0M%5boZZA6 z7iT&+sl*aP{X5V{*fL}~NF}?{s)^d92JV!KiCQ(lN~ErgPJ--sO<2EK*d(a|@SmMADs^)FdEi&D=ivI5!-bvGm-nwD-a%($`)4u-Zec|U9 z{Qo!WYAl(Z{22lSgc}6}1o}G*%ih7o%HGa7OHoh1PVH%6W~MkiWAx(WrDq-+xoSmo3GElQqtl=h3r zYTnK1Zx7TgSGZ20iv%h?rMszhEFW*2A#|KfRhYbql+t;5l99SEX2-s%nY6N`exHcIkPg&HbH=gByoXI-;6i=4kv@ z^lhdJ)wvE|D~72Epm0jL08E2=m!34O8OJndZ{%!GM?FPB1egkczeE&8 zP&;9guk7w{Ys|eT(Wc)b>1!DiF4c#w6yr4Uyb?-P%t%?Ac7i5OQZcoROZrB zU*OQ|g5XLqw(LHR{fZL#n)R$a%9iv=FlGt=7P- zbmdJlo>q|d>jNfxf1BQ(u6YgIkih68ln{c$f0ix}I#KXYQ~3d~l(prX<#%_Fte#B6 zGq%+AegKW=s;a3q^+v4OnHRG&OS;;_77vx3ib{&x-MRM5p!2_K2uN)j-`f{X2m^(>K$iVu1dZ=~C z3)ZDqzalsrR^qxL+T^gNnqhAw^C-D5XYfl~EX@tx?t=I9DV%uadU}$y{>@`hbD>&! z=^$jSxUl1%{B#>i={V@J`MUN!DQ$WFQVVu%_Z2Flp?!_`7!T zPY@t}6EFoestBx~+4l|2rX-T!A%B;g`2EvbVR3H1zV(%@U4GI_bjh)q=(kB(5MZ4z zARS86+1<^t)g!w?(f@K_#WRLxLw`ANdVvMBiAK3%vyt}Rug4m*{8yNVL5!@=M}iK9 z%;k`oH(M~jfZP2;C>EE_IuS=(zU`Fq`L1>pYE|@ztk&ichB5A!5KR_r-BPRN`dA_c z_Es^cOjLz$Wxw+_6O-3-yr6NzsH8n&Qo)1WQLIMOkS>$ee7(4L{zl@~1~kv~Q@HUJ z+)wV8m1oZJR^S&%{eYDY1nmF&dl8V@P95)mQdGZlRbRnDK(M~S^1ti9)Kw6WMqrwq z7$_!i!;Vhrf08q4KtL*}!2SnP|C9gkR!!U>AhuS{&ff^DBnt`#0`h;dU;qC&{C_&# V0JZGdz>q9~vG({-4c7k&{uh?E--rMJ